Index: /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/actions/SortPTStopsAction.java
===================================================================
--- /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/actions/SortPTStopsAction.java	(revision 33432)
+++ /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/actions/SortPTStopsAction.java	(revision 33433)
@@ -51,6 +51,5 @@
         for (int i = 0; i < members.size(); i++) {
             RelationMember rm = members.get(i);
-            String role = rm.getRole();
-            if (role != null && (role.startsWith("platform") || role.startsWith("stop")))
+            if (PTStop.isPTPlatform(rm) || PTStop.isPTStopPosition(rm))
                 stops.add(rm);
             else {
@@ -62,4 +61,5 @@
 
         Map<String, PTStop> stopsByName = new HashMap<>();
+        List<PTStop> unnamed = new ArrayList<>();
         stops.forEach(rm -> {
             String name = getStopName(rm.getMember());
@@ -69,4 +69,6 @@
                 else
                     stopsByName.get(name).addStopElement(rm);
+            } else {
+                unnamed.add(new PTStop(rm));
             }
         });
@@ -76,4 +78,11 @@
         Map<Way, List<PTStop>> wayStop = new HashMap<>();
         ptstops.forEach(stop -> {
+            Way way = assigner.get(stop);
+            if (!wayStop.containsKey(way))
+                wayStop.put(way, new ArrayList<PTStop>());
+            wayStop.get(way).add(stop);
+        });
+
+        unnamed.forEach(stop -> {
             Way way = assigner.get(stop);
             if (!wayStop.containsKey(way))
@@ -103,5 +112,7 @@
     private static String getStopName(OsmPrimitive p) {
         for (Relation ref : Utils.filteredCollection(p.getReferrers(), Relation.class)) {
-            if (ref.hasTag("type", "public_transport") && ref.hasTag("public_transport", "stop_area") && ref.getName() != null) {
+            if (ref.hasTag("type", "public_transport")
+                    && ref.hasTag("public_transport", "stop_area")
+                    && ref.getName() != null) {
                 return ref.getName();
             }
Index: /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/data/PTStop.java
===================================================================
--- /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/data/PTStop.java	(revision 33432)
+++ /applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/data/PTStop.java	(revision 33433)
@@ -42,33 +42,20 @@
      *             used in the plugin
      */
-    public PTStop(RelationMember other) throws IllegalArgumentException {
+    public PTStop(RelationMember other) {
 
         super(other);
 
-        // if ((other.hasRole("stop") || other.hasRole("stop_entry_only") ||
-        // other.hasRole("stop_exit_only"))
-        // && other.getType().equals(OsmPrimitiveType.NODE)) {
-
-        if (other.getMember().hasTag("public_transport", "stop_position")) {
-
-            this.stopPosition = other.getNode();
-            this.name = stopPosition.get("name");
-            setStopPositionRM(other);
-            // } else if (other.getRole().equals("platform") ||
-            // other.getRole().equals("platform_entry_only")
-            // || other.getRole().equals("platform_exit_only")) {
-        } else if (other.getMember().hasTag("highway", "bus_stop")
-                || other.getMember().hasTag("public_transport", "platform")
-                || other.getMember().hasTag("highway", "platform") || other.getMember().hasTag("railway", "platform")) {
-
-            this.platform = other.getMember();
-            this.name = platform.get("name");
-            setPlatformRM(other);
-
+        if (isPTStopPosition(other)) {
+            stopPosition = other.getNode();
+            name = stopPosition.get("name");
+            setStopPositionRM(new RelationMember("stop", other.getMember()));
+        } else if (isPTPlatform(other)) {
+            platform = other.getMember();
+            name = platform.get("name");
+            setPlatformRM(new RelationMember("platform", other.getMember()));
         } else {
             throw new IllegalArgumentException(
                     "The RelationMember type does not match its role " + other.getMember().getName());
         }
-
     }
 
@@ -85,34 +72,15 @@
     public boolean addStopElement(RelationMember member) {
 
-        // each element is only allowed once per stop
-
-        // add stop position:
-        // if (member.hasRole("stop") || member.hasRole("stop_entry_only") ||
-        // member.hasRole("stop_exit_only")) {
-        if (member.getMember().hasTag("public_transport", "stop_position")) {
-            if (member.getType().equals(OsmPrimitiveType.NODE) && stopPosition == null) {
-                this.stopPosition = member.getNode();
-                stopPositionRM = member;
-                return true;
-            }
-        }
-
-        // add platform:
-        // if (member.getRole().equals("platform") ||
-        // member.getRole().equals("platform_entry_only")
-        // || member.getRole().equals("platform_exit_only")) {
-        if (member.getMember().hasTag("highway", "bus_stop")
-                || member.getMember().hasTag("public_transport", "platform")
-                || member.getMember().hasTag("highway", "platform")
-                || member.getMember().hasTag("railway", "platform")) {
-            if (platform == null) {
-                platform = member.getMember();
-                platformRM = member;
-                return true;
-            }
+        if (stopPosition == null && isPTStopPosition(member)) {
+            this.stopPosition = member.getNode();
+            stopPositionRM = new RelationMember("stop", member.getMember());
+            return true;
+        } else if (platform == null && isPTPlatform(member)) {
+            platform = member.getMember();
+            platformRM = new RelationMember("platform", member.getMember());
+            return true;
         }
 
         return false;
-
     }
 
@@ -210,10 +178,29 @@
         }
 
-        if (this.platform != null
-                && (this.platform == other.getPlatform() || this.platform == other.getStopPosition())) {
-            return true;
-        }
-
-        return false;
+        return this.platform != null
+                && (this.platform == other.getPlatform()
+                    || this.platform == other.getStopPosition());
+    }
+
+    /**
+     * checks whether the given relation member matches a Stop Position or not
+     * @param rm member to check
+     * @return true if it matches, false otherwise
+     */
+    public static boolean isPTStopPosition(RelationMember rm) {
+        return rm.getMember().hasTag("public_transport", "stop_position")
+                && rm.getType().equals(OsmPrimitiveType.NODE);
+    }
+
+    /**
+     * checks whether the given relation member matches a Platform or not
+     * @param rm member to check
+     * @return true if it matches, false otherwise
+     */
+    public static boolean isPTPlatform(RelationMember rm) {
+        return rm.getMember().hasTag("highway", "bus_stop")
+                || rm.getMember().hasTag("public_transport", "platform")
+                || rm.getMember().hasTag("highway", "platform")
+                || rm.getMember().hasTag("railway", "platform");
     }
 
@@ -233,4 +220,3 @@
         this.stopPositionRM = stopPositionRM;
     }
-
 }
