Index: /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/data/PTRouteDataManager.java
===================================================================
--- /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/data/PTRouteDataManager.java	(revision 32709)
+++ /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/data/PTRouteDataManager.java	(revision 32710)
@@ -2,4 +2,5 @@
 
 import java.util.ArrayList;
+import java.util.HashSet;
 import java.util.List;
 
@@ -182,7 +183,8 @@
 		return this.failedMembers;
 	}
-	
+
 	/**
 	 * Returns the route relation for which this manager was created:
+	 * 
 	 * @return
 	 */
@@ -324,8 +326,8 @@
 	 */
 	public List<PTWay> getPTWaysBetween(Way start, Way end) {
-		
+
 		List<Integer> potentialStartIndices = new ArrayList<>();
 		List<Integer> potentialEndIndices = new ArrayList<>();
-		
+
 		for (int i = 0; i < ptways.size(); i++) {
 			if (ptways.get(i).getWays().contains(start)) {
@@ -336,18 +338,18 @@
 			}
 		}
-		
+
 		List<int[]> pairList = new ArrayList<>();
-		for (Integer potentialStartIndex: potentialStartIndices) {
-			for (Integer potentialEndIndex: potentialEndIndices) {
+		for (Integer potentialStartIndex : potentialStartIndices) {
+			for (Integer potentialEndIndex : potentialEndIndices) {
 				if (potentialStartIndex <= potentialEndIndex) {
-					int[] pair = {potentialStartIndex, potentialEndIndex};
+					int[] pair = { potentialStartIndex, potentialEndIndex };
 					pairList.add(pair);
 				}
 			}
 		}
-		
+
 		int minDifference = Integer.MAX_VALUE;
-		int[] mostSuitablePair = {0, 0};
-		for (int[] pair: pairList) {
+		int[] mostSuitablePair = { 0, 0 };
+		for (int[] pair : pairList) {
 			int diff = pair[1] - pair[0];
 			if (diff < minDifference) {
@@ -356,5 +358,5 @@
 			}
 		}
-		
+
 		List<PTWay> result = new ArrayList<>();
 		for (int i = mostSuitablePair[0]; i <= mostSuitablePair[1]; i++) {
@@ -363,7 +365,9 @@
 		return result;
 	}
-	
-	/**
-	 * Returns the common Node of two PTWays or null if there is no common Node
+
+	/**
+	 * Returns the common Node of two PTWays or null if there is no common Node.
+	 * If there is more than one common Node, only the first found is returned.
+	 * 
 	 * @param way1
 	 * @param way2
@@ -371,18 +375,23 @@
 	 */
 	public Node getCommonNode(PTWay way1, PTWay way2) {
-		
+
 		List<Way> wayList1 = way1.getWays();
 		List<Way> wayList2 = way2.getWays();
-		
-		for (int i = 0; i < wayList1.size(); i++) {
-			for (int j = 0; j < wayList2.size(); j++) {
-				if (wayList1.get(i).firstNode() == wayList2.get(j).firstNode() || wayList1.get(i).firstNode() == wayList2.get(j).lastNode()) {
-					return wayList1.get(i).firstNode();
-				}
-				if (wayList1.get(i).lastNode() == wayList2.get(j).firstNode() || wayList1.get(i).lastNode() == wayList2.get(j).lastNode()) {
-					return wayList1.get(i).lastNode();
-				}
-			}
-		}
+
+		HashSet<Node> nodeSet1 = new HashSet<>();
+		for (Way w : wayList1) {
+			nodeSet1.addAll(w.getNodes());
+		}
+		HashSet<Node> nodeSet2 = new HashSet<>();
+		for (Way w : wayList2) {
+			nodeSet2.addAll(w.getNodes());
+		}
+
+		for (Node n : nodeSet1) {
+			if (nodeSet2.contains(n)) {
+				return n;
+			}
+		}
+
 		return null;
 	}
Index: /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/data/PTWay.java
===================================================================
--- /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/data/PTWay.java	(revision 32709)
+++ /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/data/PTWay.java	(revision 32710)
@@ -118,4 +118,15 @@
 		return endNodes;
 	}
+	
+	public boolean containsUnsplitRoundabout() {
+		
+		List<Way> ways = this.getWays();
+		for (Way way: ways) {
+			if (way.hasTag("junction", "roundabout") && way.firstNode() == way.lastNode()) {
+				return true;
+			}
+		}
+		return false;
+	}
 
 }
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 32709)
+++ /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/validation/SegmentChecker.java	(revision 32710)
@@ -342,26 +342,46 @@
 			// matter which of the geometrically equal PTWays it finds
 
-			// find the next node in direction of travel (which is part of the
-			// PTWay start):
-			firstNodeOfRouteSegmentInDirectionOfTravel = getOppositeEndNode(current,
-					firstNodeOfRouteSegmentInDirectionOfTravel);
-
-			List<PTWay> nextWaysInDirectionOfTravel = this.findNextPTWaysInDirectionOfTravel(current,
-					firstNodeOfRouteSegmentInDirectionOfTravel);
-	
 			PTWay nextPTWayAccortingToExistingSorting = manager.getNextPTWay(current);
-			if (!nextWaysInDirectionOfTravel.contains(nextPTWayAccortingToExistingSorting)) {
-				List<Relation> primitives = new ArrayList<>(1);
-				primitives.add(relation);
-				List<OsmPrimitive> highlighted = new ArrayList<>();
-
-				highlighted.addAll(current.getWays());
-				highlighted.add(firstNodeOfRouteSegmentInDirectionOfTravel);
-
-				TestError e = new TestError(this.test, Severity.WARNING, tr("PT: Problem in the route segment"),
-						PTAssistantValidatorTest.ERROR_CODE_STOP_BY_STOP, primitives, highlighted);
-				this.errors.add(e);
-				this.firstNodeOfRouteSegmentInDirectionOfTravel = null;
-				return false;
+
+			// if current contains an unsplit roundabout:
+			if (current.containsUnsplitRoundabout()) {
+				firstNodeOfRouteSegmentInDirectionOfTravel = manager.getCommonNode(current,
+						nextPTWayAccortingToExistingSorting);
+				if (firstNodeOfRouteSegmentInDirectionOfTravel == null) {
+					List<Relation> primitives = new ArrayList<>(1);
+					primitives.add(relation);
+					List<OsmPrimitive> highlighted = new ArrayList<>();
+					highlighted.addAll(current.getWays());
+					TestError e = new TestError(this.test, Severity.WARNING, tr("PT: Problem in the route segment"),
+							PTAssistantValidatorTest.ERROR_CODE_STOP_BY_STOP, primitives, highlighted);
+					this.errors.add(e);
+					return false;
+				}
+			} else {
+				// if this is a regular way, not an unsplit roundabout
+
+				// find the next node in direction of travel (which is part of
+				// the PTWay start):
+				firstNodeOfRouteSegmentInDirectionOfTravel = getOppositeEndNode(current,
+						firstNodeOfRouteSegmentInDirectionOfTravel);
+
+				List<PTWay> nextWaysInDirectionOfTravel = this.findNextPTWaysInDirectionOfTravel(current,
+						firstNodeOfRouteSegmentInDirectionOfTravel);
+
+				if (!nextWaysInDirectionOfTravel.contains(nextPTWayAccortingToExistingSorting)) {
+					List<Relation> primitives = new ArrayList<>(1);
+					primitives.add(relation);
+					List<OsmPrimitive> highlighted = new ArrayList<>();
+
+					highlighted.addAll(current.getWays());
+					highlighted.add(firstNodeOfRouteSegmentInDirectionOfTravel);
+
+					TestError e = new TestError(this.test, Severity.WARNING, tr("PT: Problem in the route segment"),
+							PTAssistantValidatorTest.ERROR_CODE_STOP_BY_STOP, primitives, highlighted);
+					this.errors.add(e);
+					this.firstNodeOfRouteSegmentInDirectionOfTravel = null;
+					return false;
+
+				}
 			}
 
@@ -373,4 +393,10 @@
 	}
 
+	/**
+	 * Will return the same node if the way is an unsplit roundabout
+	 * @param way
+	 * @param node
+	 * @return
+	 */
 	private Node getOppositeEndNode(Way way, Node node) {
 
@@ -386,4 +412,10 @@
 	}
 
+	/**
+	 * Does not work correctly for unsplit roundabouts
+	 * @param ptway
+	 * @param node
+	 * @return
+	 */
 	private Node getOppositeEndNode(PTWay ptway, Node node) {
 		if (ptway.isWay()) {
@@ -425,7 +457,8 @@
 
 			if (ptway != currentWay) {
-				Node[] endNodes = ptway.getEndNodes();
-				if (endNodes[0] == nextNodeInDirectionOfTravel || endNodes[1] == nextNodeInDirectionOfTravel) {
-					nextPtways.add(ptway);
+				for (Way way: ptway.getWays()) {
+					if (way.containsNode(nextNodeInDirectionOfTravel)) {
+						nextPtways.add(ptway);
+					}
 				}
 			}
