Index: /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/data/PTRouteSegment.java
===================================================================
--- /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/data/PTRouteSegment.java	(revision 32800)
+++ /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/data/PTRouteSegment.java	(revision 32801)
@@ -61,6 +61,51 @@
 		return ptways.get(ptways.size() - 1);
 	}
+	
+	public Way getFirstWay() {
+		if (ptways.isEmpty()) {
+			return null;
+		}
+		return ptways.get(0).getWays().get(0);
+	}
+	
+	public Way getLastWay() {
+		if (ptways.isEmpty()) {
+			return null;
+		}
+		List<Way> waysOfLast = ptways.get(ptways.size() - 1).getWays();
+		return waysOfLast.get(waysOfLast.size() - 1);
+	}
 
-	public void addFixVariant(List<PTWay> list) {
+	/**
+	 * Adds the new fix variant if an identical fix variant (i.e. same ways) is
+	 * not already contained in the list of the fix variants of this.
+	 * 
+	 * @param list the PTWays of the new fix variant
+	 */
+	public synchronized void addFixVariant(List<PTWay> list) {
+		List<Way> otherWays = new ArrayList<>();
+		for (PTWay ptway : list) {
+			otherWays.addAll(ptway.getWays());
+		}
+
+		for (List<PTWay> fixVariant : this.fixVariants) {
+			List<Way> thisWays = new ArrayList<>();
+			for (PTWay ptway : fixVariant) {
+				thisWays.addAll(ptway.getWays());
+			}
+			boolean listsEqual = (thisWays.size() == otherWays.size());
+			if (listsEqual) {
+				for (int i = 0; i < thisWays.size(); i++) {
+					if (thisWays.get(i).getId() != otherWays.get(i).getId()) {
+						listsEqual = false;
+						break;
+					}
+				}
+			}
+			if (listsEqual) {
+				return;
+			}
+		}
+
 		this.fixVariants.add(list);
 	}
@@ -77,4 +122,5 @@
 	 */
 	public boolean equalsRouteSegment(PTRouteSegment other) {
+
 		List<Way> thisWays = new ArrayList<>();
 		for (PTWay ptway : this.ptways) {
@@ -85,14 +131,15 @@
 			otherWays.addAll(ptway.getWays());
 		}
+
 		if (thisWays.size() != otherWays.size()) {
 			return false;
 		}
-		
+
 		for (int i = 0; i < thisWays.size(); i++) {
-			if (thisWays.get(i) != otherWays.get(i)) {
+			if (thisWays.get(i).getId() != otherWays.get(i).getId()) {
 				return false;
 			}
 		}
-		
+
 		return true;
 	}
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 32800)
+++ /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/gui/PTAssistantLayer.java	(revision 32801)
@@ -82,21 +82,21 @@
 	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++) {
-			if (i < 5) {
-				List<PTWay> fixVariant = fixVariants.get(i);
-				this.fixVariants.put(alphabet, fixVariant);
-				fixVariantLetterMap.put(fixVariant, alphabet);
-				alphabet++;
-			}
-		}
-
-		for (List<PTWay> fixVariant : fixVariants) {
-			Character currentFixVariantLetter = fixVariantLetterMap.get(fixVariant);
+		for (int i = 0; i < 5 && i < fixVariants.size(); i++) {
+			List<PTWay> fixVariant = fixVariants.get(i);
+			this.fixVariants.put(alphabet, fixVariant);
+			fixVariantLetterMap.put(fixVariant, alphabet);
+			alphabet++;
+		}
+
+		for (Character currentFixVariantLetter: this.fixVariants.keySet()) {
+			List<PTWay> fixVariant = this.fixVariants.get(currentFixVariantLetter);
 			for (PTWay ptway : fixVariant) {
 				for (Way way : ptway.getWays()) {
 					if (wayColoring.containsKey(way)) {
-						wayColoring.get(way).add(currentFixVariantLetter);
+						if (!wayColoring.get(way).contains(currentFixVariantLetter)) {
+							wayColoring.get(way).add(currentFixVariantLetter);
+						}
 					} else {
 						List<Character> letterList = new ArrayList<>();
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 32800)
+++ /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/gui/PTAssistantPaintVisitor.java	(revision 32801)
@@ -434,4 +434,5 @@
 	 * @param color
 	 */
+	@SuppressWarnings("unused")
 	private void drawFixVariant(List<PTWay> fixVariant, Color color) {
 		for (PTWay ptway : fixVariant) {
@@ -459,13 +460,11 @@
 		for (Way way : wayColoring.keySet()) {
 			List<Character> letterList = wayColoring.get(way);
-//			if (letterList.size() != numberOfFixVariants) {
-				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);
-				}
-//			}
+			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);
+			}
 		}
 	}
@@ -507,10 +506,6 @@
 		} else {
 			boolean iterate = true;
-//			while (Math.abs(p2.x - p1.x) > Math.abs(nextPointX - p1.x) && Math.abs(p2.y - p1.y) > Math.abs(nextPointY - p1.y)) {
-//			while((p1.x < p2.x && nextPointX < p2.x) || (p1.x >= p2.x && nextPointX >= p2.x)) {
 			while (iterate) {
-				// for (int i = 0; i < colors.size(); i++) {
 				currentColor = colors.get(i % colors.size());
-				// if (Math.abs(p2.x - p1.x) > Math.abs(nextPointX - p1.x)) {
 
 				int[] xPoints = { (int) (prevPointX + cosT), (int) (nextPointX + cosT), (int) (nextPointX - cosT),
@@ -529,7 +524,4 @@
 					iterate = false;
 				}
-				
-				// }
-				// }
 			}
 
@@ -544,37 +536,4 @@
 		g.setColor(currentColor);
 		g.fillOval((int) (p2.x - 9), (int) (p2.y - 9), 18, 18);
-
-		// double cosT = 20*Math.cos(t);
-		// double sinT = 20*Math.sin(t);
-		// int[] xPointsBasic = { (int) (p1.x + cosT/colors.size()/2), (int)
-		// (p2.x + cosT/colors.size()/2),
-		// (int) (p2.x - cosT/colors.size()/2), (int) (p1.x -
-		// cosT/colors.size()/2) };
-		// int[] yPointsBasic = { (int) (p1.y - sinT/colors.size()/2), (int)
-		// (p2.y - sinT/colors.size()/2),
-		// (int) (p2.y + sinT/colors.size()/2), (int) (p1.y +
-		// sinT/colors.size()/2) };
-		//
-		// for (int i = 0; i < colors.size(); i++) {
-		// Polygon polygon = new Polygon(xPointsBasic, yPointsBasic, 4);
-		// double halfStripeWidthCos = cosT/colors.size();
-		// double halfStripeWidthSin = sinT/colors.size();
-		//// polygon.translate((int)(-cosT + halfStripeWidthCos*(2*i+1)),
-		// (int)(- sinT + halfStripeWidthSin*(2*i+1)));
-		// int deltaX, deltaY;
-		// if (cosT > 0) {
-		// deltaX = (int)(-cosT + halfStripeWidthCos * (2*i+1));
-		// } else {
-		// deltaX = (int)(cosT - halfStripeWidthCos * (2*i+1));
-		// }
-		// if (sinT > 0) {
-		// deltaY = (int)(- sinT + halfStripeWidthSin*(2*i+1));
-		// } else {
-		// deltaY = (int)(sinT - halfStripeWidthSin*(2*i+1));
-		// }
-		// polygon.translate(deltaX, deltaY);
-		// g.setColor(colors.get(i));
-		// g.fillPolygon(polygon);
-		// }
 	}
 
Index: /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/validation/SegmentChecker.java
===================================================================
--- /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/validation/SegmentChecker.java	(revision 32800)
+++ /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/validation/SegmentChecker.java	(revision 32801)
@@ -99,5 +99,5 @@
 	 *            to add to the list of correct segments
 	 */
-	public static void addCorrectSegment(PTRouteSegment segment) {
+	public synchronized static void addCorrectSegment(PTRouteSegment segment) {
 		for (PTRouteSegment correctSegment : correctSegments) {
 			if (correctSegment.equalsRouteSegment(segment)) {
@@ -366,4 +366,9 @@
 	}
 
+	/**
+	 * 
+	 * @param node
+	 * @return
+	 */
 	private boolean isDeadendNode(Node node) {
 		int count = 0;
@@ -692,5 +697,5 @@
 		// layer, clear them:
 		((PTAssistantValidatorTest) testError.getTester()).clearFixVariants();
-
+		
 		PTRouteSegment wrongSegment = wrongSegments.get(testError);
 
@@ -698,7 +703,34 @@
 		List<PTRouteSegment> correctSegmentsForThisError = new ArrayList<>();
 		for (PTRouteSegment segment : correctSegments) {
-			if (wrongSegment.getFirstStop().equalsStop(segment.getFirstStop())
-					&& wrongSegment.getLastStop().equalsStop(segment.getLastStop())) {
+			if (wrongSegment.getFirstWay().getId() == segment.getFirstWay().getId()
+					&& wrongSegment.getLastWay().getId() == segment.getLastWay().getId()) {
 				correctSegmentsForThisError.add(segment);
+			}
+		}
+
+		// if no correct segment found, apply less strict criteria to look for one:
+		if (correctSegmentsForThisError.isEmpty() && wrongSegment.getFixVariants().isEmpty()) {
+			for (PTRouteSegment segment : correctSegments) {
+				if (wrongSegment.getFirstStop().equalsStop(segment.getFirstStop())
+						&& wrongSegment.getLastStop().equalsStop(segment.getLastStop())) {
+					correctSegmentsForThisError.add(segment);
+				}
+			}
+			if (!correctSegmentsForThisError.isEmpty()) {
+				// display the notification:
+				if (SwingUtilities.isEventDispatchThread()) {
+					Notification notification = new Notification(
+							tr("Warning: the diplayed fix variants are based on less strict criteria"));
+					notification.show();
+				} else {
+					SwingUtilities.invokeLater(new Runnable() {
+						@Override
+						public void run() {
+							Notification notification = new Notification(
+									tr("Warning: the diplayed fix variants are based on less strict criteria"));
+							notification.show();
+						}
+					});
+				}
 			}
 		}
@@ -835,5 +867,5 @@
 		PTRouteSegment wrongSegment = wrongSegments.get(testError);
 		wrongSegments.remove(testError);
-		wrongSegment.setPTWays(wrongSegment.getFixVariants().get(0));
+		wrongSegment.setPTWays(fix);
 		addCorrectSegment(wrongSegment);
 	}
