Index: /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/utils/RouteUtils.java
===================================================================
--- /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/utils/RouteUtils.java	(revision 32221)
+++ /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/utils/RouteUtils.java	(revision 32222)
@@ -49,5 +49,26 @@
 	public static boolean isPTStop(RelationMember rm) {
 
-		return !isPTWay(rm);
+		if (rm.getType().equals(OsmPrimitiveType.NODE)) {
+			return true;
+		}
+
+		if (rm.getType().equals(OsmPrimitiveType.RELATION)) {
+			if (rm.getRole().equals("stop_area")) {
+				return true;
+			} else {
+				return false;
+			}
+		}
+
+		Way w = rm.getWay();
+
+		if (w.hasTag("public_transport", "platform") || w.hasTag("highway", "platform")
+				|| w.hasTag("railway", "platform") || w.hasTag("public_transport", "platform_entry_only")
+				|| w.hasTag("highway", "platform_entry_only") || w.hasTag("railway", "platform_entry_only")
+				|| w.hasTag("public_transport", "platform_exit_only") || w.hasTag("highway", "platform_exit_only") || w.hasTag("railway", "platform_exit_only")) {
+			return true;
+		}
+
+		return false;
 
 	}
@@ -65,13 +86,5 @@
 	public static boolean isPTWay(RelationMember rm) {
 
-		if (rm.hasRole("") && OsmPrimitiveType.WAY.equals(rm.getType())) {
-			Way way = rm.getWay();
-			if (!way.hasTag("public_transport", "platform") && !way.hasTag("highway", "platform")
-					&& !way.hasTag("railway", "platform")) {
-				return true;
-			}
-		}
-
-		return false;
+		return !isPTStop(rm);
 	}
 
@@ -100,4 +113,3 @@
 	}
 
-
 }
Index: /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/validation/GapTest.java
===================================================================
--- /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/validation/GapTest.java	(revision 32221)
+++ /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/validation/GapTest.java	(revision 32222)
@@ -79,5 +79,7 @@
 
 	/**
-	 * Checks if there is a gap for a given list of ways
+	 * Checks if there is a gap for a given list of ways. It does not check if
+	 * the way actually stands for a public transport platform - that should be
+	 * checked beforehand.
 	 * 
 	 * @param waysToCheck
@@ -177,9 +179,26 @@
 					final List<RelationMember> ways = new ArrayList<>();
 					for (RelationMember member : members) {
-						if (member.hasRole("") && OsmPrimitiveType.WAY.equals(member.getType())) { // FIXME
-							ways.add(member);
-						} else { // stops (and if the relation has anything
-									// besides ways and stops:
-							stops.add(member);
+						if (RouteUtils.isPTWay(member)) {
+							if (member.getRole().equals("")) {
+								ways.add(member);
+							} else {
+								RelationMember modifiedMember = new RelationMember("", member.getWay());
+								ways.add(modifiedMember);
+							}
+
+						} else { // stops:
+							if (member.getRole().equals("stop_positon")) {
+								// it is not expected that stop_positions could be relations
+								if (member.getType().equals(OsmPrimitiveType.NODE)) {
+									RelationMember modifiedMember = new RelationMember("stop", member.getNode());
+									stops.add(modifiedMember);
+								} else { // if it is a primitive of type way:
+									RelationMember modifiedMember = new RelationMember("stop", member.getWay());
+									stops.add(modifiedMember);
+								}
+							} else { // if it is not a stop_position:
+								stops.add(member);
+							}
+
 						}
 					}
@@ -218,12 +237,31 @@
 					for (RelationMember rm : originalRelation.getMembers()) {
 						if (RouteUtils.isPTStop(rm)) {
-							modifiedMembers.add(rm);
+							if (rm.hasRole("stop_position")) {
+								// it is not expected that stop_positions could be relations
+								if (rm.getType().equals(OsmPrimitiveType.NODE)) {
+									RelationMember modifiedMember = new RelationMember("stop", rm.getNode());
+									modifiedMembers.add(modifiedMember);
+								} else { // if it is a primitive of type "way":
+									RelationMember modifiedMember = new RelationMember("stop", rm.getWay());
+									modifiedMembers.add(modifiedMember);
+								}
+							} else {
+								modifiedMembers.add(rm);
+							}
+
 						}
-						
-					}
-					// add ways of a public transport route (if they are not overshoots):
-					for (RelationMember rm: originalRelation.getMembers()) {
-						if (RouteUtils.isPTWay(rm) && !overshootList.contains(rm)) {
-							modifiedMembers.add(rm);
+
+					}
+					// add ways of a public transport route (if they are not
+					// overshoots):
+					for (RelationMember rm : originalRelation.getMembers()) {
+						if (RouteUtils.isPTWay(rm) && !overshootList.contains(rm)) {		
+							
+							if (rm.getRole().equals("")) {
+								modifiedMembers.add(rm);
+							} else {
+								RelationMember modifiedMember = new RelationMember("", rm.getWay());
+								modifiedMembers.add(modifiedMember);
+							}
 						}
 					}
Index: /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/validation/RoadTypeTest.java
===================================================================
--- /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/validation/RoadTypeTest.java	(revision 32221)
+++ /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/validation/RoadTypeTest.java	(revision 32222)
@@ -10,4 +10,5 @@
 import org.openstreetmap.josm.command.SequenceCommand;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
+import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
 import org.openstreetmap.josm.data.osm.Relation;
 import org.openstreetmap.josm.data.osm.RelationMember;
@@ -31,10 +32,10 @@
 
 		if (RouteUtils.isTwoDirectionRoute(r)) {
-
+			
 			List<RelationMember> members = r.getMembers();
 
 			for (RelationMember rm : members) {
 				if (RouteUtils.isPTWay(rm)) {
-
+					
 					Way way = rm.getWay();
 					// at this point, the relation has already been checked to
@@ -42,4 +43,7 @@
 					boolean isCorrectRoadType = true;
 					if (r.hasTag("route", "bus") || r.hasTag("route", "share_taxi")) {
+						if (way.getId()==388339788 || way.getId() == 388339789) {
+
+						}
 						if (!RouteUtils.isWaySuitableForBuses(way)) {
 							isCorrectRoadType = false;
@@ -72,4 +76,5 @@
 
 					if (!isCorrectRoadType) {
+						
 						List<OsmPrimitive> primitiveList = new ArrayList<>(2);
 						primitiveList.add(0, r);
@@ -91,5 +96,5 @@
 		List<Command> commands = new ArrayList<>(50);
 
-		if (testError.getTester().getClass().equals(GapTest.class) && testError.isFixable()) {
+		if (testError.getTester().getClass().equals(RoadTypeTest.class) && testError.isFixable()) {
 			List<OsmPrimitive> primitiveList = (List<OsmPrimitive>) testError.getPrimitives();
 			Relation originalRelation = (Relation) primitiveList.get(0);
@@ -99,16 +104,35 @@
 			List<RelationMember> modifiedRelationMembers = new ArrayList<>(originalRelation.getMembersCount()-1);
 			
-			// copy stop-related members first, public transport ways last:
+			// copy PT stops first, PT ways last:
 			for (RelationMember rm: originalRelation.getMembers()) {
 				if (RouteUtils.isPTStop(rm)) {
-					modifiedRelationMembers.add(rm);
+					
+					if (rm.getRole().equals("stop_position")) {
+						if (rm.getType().equals(OsmPrimitiveType.NODE)) {
+							RelationMember newMember = new RelationMember("stop", rm.getNode());
+							modifiedRelationMembers.add(newMember);
+						} else { // if it is a way:
+							RelationMember newMember = new RelationMember("stop", rm.getWay());
+							modifiedRelationMembers.add(newMember);
+						}
+					} else { 
+						// if the relation member does not have the role "stop_position":
+						modifiedRelationMembers.add(rm);
+					}
+					
 				} 
 			}
 			
+			// now copy PT ways:
 			for (RelationMember rm: originalRelation.getMembers()) {
 				if (RouteUtils.isPTWay(rm)) {
 					Way wayToCheck = rm.getWay();
 					if (wayToCheck != wayToRemove) {
-						modifiedRelationMembers.add(rm);
+						if (rm.getRole().equals("forward") || rm.getRole().equals("backward")) {
+							RelationMember modifiedMember = new RelationMember("", wayToCheck);
+							modifiedRelationMembers.add(modifiedMember);
+						} else {
+							modifiedRelationMembers.add(rm);
+						}
 					}
 				}
@@ -129,4 +153,5 @@
 			return commands.get(0);
 		}
+		
 
 		return new SequenceCommand(tr("Remove way from route if it does not match the route type"), commands);	}
