Index: /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/gui/PTAssistantLayer.java
===================================================================
--- /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/gui/PTAssistantLayer.java	(revision 32792)
+++ /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/gui/PTAssistantLayer.java	(revision 32793)
@@ -21,4 +21,5 @@
 import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
 import org.openstreetmap.josm.data.osm.Relation;
+import org.openstreetmap.josm.data.osm.Way;
 import org.openstreetmap.josm.data.osm.visitor.BoundingXYVisitor;
 import org.openstreetmap.josm.gui.MapView;
@@ -44,5 +45,6 @@
 	private PTAssistantPaintVisitor paintVisitor;
 	private HashMap<Character, List<PTWay>> fixVariants = new HashMap<>();
-	
+	private HashMap<Way, List<Character>> wayColoring = new HashMap<>();
+
 	private PTAssistantLayer() {
 		super("pt_assistant layer");
@@ -51,5 +53,5 @@
 		layer = this;
 	}
-	
+
 	public static PTAssistantLayer getLayer() {
 		if (layer == null) {
@@ -66,15 +68,18 @@
 		this.primitives.clear();
 	}
-	
+
 	public void clearFixVariants() {
 		fixVariants.clear();
 		Main.map.mapView.repaint();
 	}
-	
+
 	/**
 	 * Adds the first 5 fix variants to be displayed in the pt_assistant layer
+	 * 
 	 * @param fixVariants
 	 */
 	public void addFixVariants(List<List<PTWay>> fixVariants) {
+		HashMap<List<PTWay>, Character> fixVariantLetterMap = new HashMap<>();
+
 		char alphabet = 'A';
 		for (int i = 0; i < fixVariants.size(); i++) {
@@ -82,11 +87,29 @@
 				List<PTWay> fixVariant = fixVariants.get(i);
 				this.fixVariants.put(alphabet, fixVariant);
+				fixVariantLetterMap.put(fixVariant, alphabet);
 				alphabet++;
 			}
 		}
-	}
-	
-	/**
-	 * Returns fix variant (represented by a list of PTWays) that corresponds to the given character. 
+
+		for (List<PTWay> fixVariant : fixVariants) {
+			Character currentFixVariantLetter = fixVariantLetterMap.get(fixVariant);
+			for (PTWay ptway : fixVariant) {
+				for (Way way : ptway.getWays()) {
+					if (wayColoring.containsKey(way)) {
+						wayColoring.get(way).add(currentFixVariantLetter);
+					} else {
+						List<Character> letterList = new ArrayList<>();
+						letterList.add(currentFixVariantLetter);
+						wayColoring.put(way, letterList);
+					}
+				}
+			}
+		}
+	}
+
+	/**
+	 * Returns fix variant (represented by a list of PTWays) that corresponds to
+	 * the given character.
+	 * 
 	 * @param c
 	 * @return
@@ -95,5 +118,4 @@
 		return this.fixVariants.get(Character.toUpperCase(c));
 	}
-	
 
 	@Override
@@ -105,6 +127,6 @@
 			paintVisitor.visit(primitive);
 		}
-		
-		paintVisitor.visitFixVariants(this.fixVariants);
+
+		paintVisitor.visitFixVariants(this.fixVariants, this.wayColoring);
 
 	}
@@ -201,5 +223,5 @@
 
 				if (RouteUtils.isTwoDirectionRoute(relation)) {
-					
+
 					this.repaint(relation);
 
@@ -209,9 +231,8 @@
 		}
 	}
-	
-	
-	
+
 	/**
 	 * Repaints the layer in cases when there was no selection change
+	 * 
 	 * @param relation
 	 */
@@ -232,11 +253,10 @@
 			paintVisitor.visit(primitive);
 		}
-		
-		paintVisitor.visitFixVariants(this.fixVariants);
+
+		paintVisitor.visitFixVariants(this.fixVariants, this.wayColoring);
 
 		Main.map.mapView.repaint();
 	}
-	
-	
+
 	@Override
 	public void layerAdded(LayerAddEvent arg0) {
@@ -249,5 +269,4 @@
 
 	}
-
 
 	@Override
Index: /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/gui/PTAssistantPaintVisitor.java
===================================================================
--- /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/gui/PTAssistantPaintVisitor.java	(revision 32792)
+++ /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/gui/PTAssistantPaintVisitor.java	(revision 32793)
@@ -5,4 +5,5 @@
 import java.awt.Graphics;
 import java.awt.Point;
+import java.awt.Polygon;
 import java.util.ArrayList;
 import java.util.Collections;
@@ -10,4 +11,5 @@
 import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 import org.openstreetmap.josm.Main;
@@ -24,4 +26,6 @@
 import org.openstreetmap.josm.tools.Pair;
 
+import com.sun.org.apache.bcel.internal.generic.CPInstruction;
+
 public class PTAssistantPaintVisitor extends PaintVisitor {
 
@@ -400,5 +404,9 @@
 	 * @param fixVariants
 	 */
-	protected void visitFixVariants(HashMap<Character, List<PTWay>> fixVariants) {
+	protected void visitFixVariants(HashMap<Character, List<PTWay>> fixVariants,
+			HashMap<Way, List<Character>> wayColoring) {
+
+		drawFixVariantsWithParallelLines(wayColoring);
+
 		Color[] colors = { new Color(255, 0, 0, 150), new Color(0, 255, 0, 150), new Color(0, 0, 255, 150),
 				new Color(255, 255, 0, 150), new Color(0, 255, 255, 150) };
@@ -411,5 +419,5 @@
 		for (Character c : fixVariants.keySet()) {
 			if (fixVariants.get(c) != null) {
-				drawFixVariant(fixVariants.get(c), colors[colorIndex % 5]);
+				// drawFixVariant(fixVariants.get(c), colors[colorIndex % 5]);
 				drawFixVariantLetter(c.toString(), colors[colorIndex % 5], letterX, letterY);
 				colorIndex++;
@@ -438,5 +446,30 @@
 		}
 	}
-	
+
+	/**
+	 * 
+	 * @param wayColoring
+	 */
+	protected void drawFixVariantsWithParallelLines(Map<Way, List<Character>> wayColoring) {
+
+		HashMap<Character, Color> colors = new HashMap<>();
+		colors.put('A', new Color(255, 0, 0, 150));
+		colors.put('B', new Color(0, 255, 0, 150));
+		colors.put('C', new Color(0, 0, 255, 150));
+		colors.put('D', new Color(255, 255, 0, 150));
+		colors.put('E', new Color(0, 255, 255, 150));
+
+		for (Way way : wayColoring.keySet()) {
+			List<Character> letterList = wayColoring.get(way);
+			List<Color> wayColors = new ArrayList<>();
+			for (Character letter : letterList) {
+				wayColors.add(colors.get(letter));
+			}
+			for (Pair<Node, Node> nodePair : way.getNodePairs(false)) {
+				drawSegmentWithParallelLines(nodePair.a, nodePair.b, wayColors);
+			}
+		}
+	}
+
 	/**
 	 * 
@@ -445,22 +478,88 @@
 	 * @param color
 	 */
-	protected void drawSegmentWithParallelLines(Node n1, Node n2, Color color) {
+	protected void drawSegmentWithParallelLines(Node n1, Node n2, List<Color> colors) {
 		if (!n1.isDrawable() || !n2.isDrawable() || !isSegmentVisible(n1, n2)) {
-				return;
-		}
-		
+			return;
+		}
+
 		Point p1 = mv.getPoint(n1);
 		Point p2 = mv.getPoint(n2);
-
 		double t = Math.atan2((double) p2.x - p1.x, (double) p2.y - p1.y);
-		double cosT = 9 * Math.cos(t);
-		double sinT = 9 * Math.sin(t);
-
-		int[] xPoints = { (int) (p1.x + cosT), (int) (p2.x + cosT), (int) (p2.x - cosT), (int) (p1.x - cosT) };
-		int[] yPoints = { (int) (p1.y - sinT), (int) (p2.y - sinT), (int) (p2.y + sinT), (int) (p1.y + sinT) };
-		g.setColor(color);
-		g.fillPolygon(xPoints, yPoints, 4);
-		g.fillOval((int) (p1.x - 9), (int) (p1.y - 9), 18, 18);
-		g.fillOval((int) (p2.x - 9), (int) (p2.y - 9), 18, 18);
+		// double cosT = 9 * Math.cos(t);
+		// double sinT = 9 * Math.sin(t);
+		//
+		// int[] xPoints = { (int) (p1.x + cosT), (int) (p2.x + cosT), (int)
+		// (p2.x - cosT), (int) (p1.x - cosT) };
+		// int[] yPoints = { (int) (p1.y - sinT), (int) (p2.y - sinT), (int)
+		
+		double cosT = 9*Math.cos(t);
+		double sinT = 9*Math.sin(t);
+		
+		 int[] xPointsBasic = { (int) (p1.x + cosT/colors.size()), (int) (p2.x + cosT/colors.size()),
+		 (int) (p2.x - cosT/colors.size()), (int) (p1.x - cosT/colors.size()) };
+		 int[] yPointsBasic = { (int) (p1.y - sinT/colors.size()), (int) (p2.y - sinT/colors.size()),
+		 (int) (p2.y + sinT/colors.size()), (int) (p1.y + sinT/colors.size()) };
+		
+		for (int i = 0; i < colors.size(); i++) {
+			Polygon polygon = new Polygon(xPointsBasic, yPointsBasic, 4);
+			int halfStripeWidthCos = (int) cosT/colors.size();
+			int halfStripeWidthSin = (int) sinT / colors.size();
+			polygon.translate((int)(-cosT + halfStripeWidthCos*(i)*2), (int)(- sinT + halfStripeWidthSin*(i)*2));
+			g.setColor(colors.get(i));
+			g.fillPolygon(polygon);
+		}
+		
+		
+//		double cosT = 18 * Math.cos(t);
+//		double sinT = 18 * Math.sin(t);
+//		// int[] xPointsBasic = { (int) (p1.x + cosT), (int) (p2.x + cosT),
+//		// (int) (p2.x - cosT), (int) (p1.x - cosT) };
+//		// int[] yPointsBasic = { (int) (p1.y - sinT), (int) (p2.y - sinT),
+//		// (int) (p2.y + sinT), (int) (p1.y + sinT) };
+//
+//		for (int i = 0; i < colors.size(); i++) {
+//			int[] xPoints = { (int) (p1.x - cosT / 2 + cosT / colors.size() *(i+0.5)),
+//					(int) (p2.x - cosT / 2 + cosT / colors.size() * (i+0.5)),
+//					(int) (p2.x - cosT / 2 + cosT / colors.size() * (i)),//
+//					(int) (p1.x - cosT / 2 + cosT / colors.size() * (i)) };//
+//			int[] yPoints = { (int) (p1.y - sinT / 2 + sinT / colors.size() * (i)),//
+//					(int) (p2.y - sinT / 2 + sinT / colors.size() * (i)),//
+//					(int) (p2.y - sinT / 2 + sinT / colors.size() * (i+0.5)),
+//					(int) (p1.y - sinT / 2 + sinT / colors.size() * (i+0.5)) };
+//			g.setColor(colors.get(i));
+//			g.fillPolygon(xPoints, yPoints, 4);
+//		}
+		
+		
+
+		// int[] xPoints1 = { (int) (p1.x + cosT), (int) (p2.x + cosT), (int)
+		// (p2.x - cosT), (int) (p1.x - cosT) };
+		// int[] yPoints1 = { (int) (p1.y - sinT), (int) (p2.y - sinT), (int)
+		// (p2.y + sinT), (int) (p1.y + sinT) };
+		// Polygon polygon1 = new Polygon(xPointsBasic, yPointsBasic, 4);
+		// polygon1.translate((int)(4.5 * Math.cos(t)), (int)(4.5 *
+		// Math.sin(t)));
+		// g.setColor(colors.get(0));
+		// g.fillPolygon(polygon1);
+		//
+		// if (colors.size() > 1) {
+		// Polygon polygon2 = new Polygon(xPointsBasic, yPointsBasic, 4);
+		// polygon2.translate((int)(-4.5 * Math.cos(t)),
+		// (int)(-4.5*Math.sin(t)));
+		// g.setColor(colors.get(1));
+		// g.fillPolygon(polygon2);
+		// }
+
+		// double cosT = 9 * Math.cos(t);
+		// double sinT = 9 * Math.sin(t);
+		//
+		// int[] xPoints = { (int) (p1.x + cosT), (int) (p2.x + cosT), (int)
+		// (p2.x - cosT), (int) (p1.x - cosT) };
+		// int[] yPoints = { (int) (p1.y - sinT), (int) (p2.y - sinT), (int)
+		// (p2.y + sinT), (int) (p1.y + sinT) };
+		// g.setColor(color);
+		// g.fillPolygon(xPoints, yPoints, 4);
+		// g.fillOval((int) (p1.x - 9), (int) (p1.y - 9), 18, 18);
+		// g.fillOval((int) (p2.x - 9), (int) (p2.y - 9), 18, 18);
 	}
 
Index: /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/utils/StopToWayAssigner.java
===================================================================
--- /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/utils/StopToWayAssigner.java	(revision 32792)
+++ /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/utils/StopToWayAssigner.java	(revision 32793)
@@ -314,5 +314,5 @@
 		double lengthC = segment.a.getCoor().distance(segment.b.getCoor());
 
-		// calculate triangle area using Feron's formula:
+		// calculate triangle area using Heron's formula:
 		double p = (lengthA + lengthB + lengthC) / 2.0;
 		double triangleArea = Math.sqrt(p * (p - lengthA) * (p - lengthB) * (p - lengthC));
Index: /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/validation/Checker.java
===================================================================
--- /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/validation/Checker.java	(revision 32792)
+++ /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/validation/Checker.java	(revision 32793)
@@ -33,5 +33,5 @@
 	// test which created this WayChecker:
 	protected final Test test;
-	
+
 	// node that is checked:
 	protected Node node;
@@ -42,5 +42,5 @@
 	// stores all found errors:
 	protected ArrayList<TestError> errors = new ArrayList<>();
-	
+
 	protected Checker(Node node, Test test) {
 		this.node = node;
@@ -126,5 +126,5 @@
 		return resultList;
 	}
-	
+
 	/**
 	 * 
@@ -134,5 +134,6 @@
 	protected static Command fixErrorByZooming(TestError testError) {
 
-		if (testError.getCode() != PTAssistantValidatorTest.ERROR_CODE_STOP_BY_STOP) {
+		if (testError.getCode() != PTAssistantValidatorTest.ERROR_CODE_STOP_BY_STOP
+				&& testError.getCode() != PTAssistantValidatorTest.ERROR_CODE_DIRECTION) {
 			return null;
 		}
Index: /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/validation/PTAssistantValidatorTest.java
===================================================================
--- /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/validation/PTAssistantValidatorTest.java	(revision 32792)
+++ /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/validation/PTAssistantValidatorTest.java	(revision 32793)
@@ -106,7 +106,5 @@
 	@Override
 	public void visit(Relation r) {
-		
-		System.out.println("starting: visit relation id=" + r.getId() + ", ref: " + r.get("ref") + ", " + r.getMembersCount() + " members");
-		
+				
 		// Do some testing on stop area relations
 		if (StopUtils.isStopArea(r)) {
@@ -131,5 +129,4 @@
 
 		if (!RouteUtils.isTwoDirectionRoute(r)) {
-			System.out.println("return: not two-direction route");
 			return;
 		}
@@ -141,5 +138,4 @@
 			boolean downloadSuccessful = this.downloadIncompleteMembers();
 			if (!downloadSuccessful) {
-				System.out.println("return: download not successful");
 				return;
 			}
@@ -147,5 +143,4 @@
 
 		if (r.hasIncompleteMembers()) {
-			System.out.println("return: has incomplete members");
 			return;
 		}
@@ -165,6 +160,4 @@
 			this.proceedAfterWayCheckerErrors(r);
 		}
-
-		System.out.println("ending: visit relation id=" + r.getId() + ", ref: " + r.get("ref") + ", " + r.getMembersCount() + " members");
 
 	}
