Index: trunk/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableModel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableModel.java	(revision 5602)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableModel.java	(revision 5603)
@@ -699,5 +699,30 @@
      */
     private List<RelationMember> sortMembers(List<RelationMember> relationMembers) {
-        RelationNodeMap map = new RelationNodeMap(relationMembers);
+        ArrayList<RelationMember> newMembers = new ArrayList<RelationMember>();
+
+        // Sort members with custom mechanisms (relation-dependent)
+        List<RelationMember> defaultMembers = new LinkedList<RelationMember>();
+        Map<AdditionalSorter, List<RelationMember>> customMap = new HashMap<AdditionalSorter, List<RelationMember>>();
+
+        // Dispatch members to correct sorters
+        for (RelationMember m : relationMembers) {
+            for (AdditionalSorter sorter : additionalSorters) {
+                List<RelationMember> list = defaultMembers;
+                if (sorter.acceptsMember(m)) {
+                    list = customMap.get(sorter);
+                    if (list == null) {
+                        customMap.put(sorter, list = new LinkedList<RelationMember>()); 
+                    }
+                }
+                list.add(m);
+            }
+        }
+        
+        // Sort members and add them to result
+        for (AdditionalSorter s : customMap.keySet()) {
+            newMembers.addAll(s.sortMembers(customMap.get(s)));
+        }
+        
+        RelationNodeMap map = new RelationNodeMap(defaultMembers);
         // List of groups of linked members
         //
@@ -730,37 +755,14 @@
         }
 
-        ArrayList<RelationMember> newMembers = new ArrayList<RelationMember>();
         for (LinkedList<Integer> tmpGroup : allGroups) {
             for (Integer p : tmpGroup) {
-                newMembers.add(relationMembers.get(p));
-            }
-        }
-
-        // Try to sort remaining members with custom mechanisms (relation-dependent)
-        List<RelationMember> notSortableMembers = new LinkedList<RelationMember>();
-        Map<AdditionalSorter, List<RelationMember>> additionalMap = new HashMap<AdditionalSorter, List<RelationMember>>();
-
-        // Dispatch members to correct sorters
-        for (Integer i : map.getNotSortableMembers()) {
-            RelationMember m = relationMembers.get(i);
-            for (AdditionalSorter sorter : additionalSorters) {
-                List<RelationMember> list = notSortableMembers;
-                if (sorter.acceptsMember(m)) {
-                    list = additionalMap.get(sorter);
-                    if (list == null) {
-                        additionalMap.put(sorter, list = new LinkedList<RelationMember>()); 
-                    }
-                }
-                list.add(m);
-            }
-        }
-        
-        // Sort members and add them to result
-        for (AdditionalSorter s : additionalMap.keySet()) {
-            newMembers.addAll(s.sortMembers(additionalMap.get(s)));
+                newMembers.add(defaultMembers.get(p));
+            }
         }
         
         // Finally, add members that have not been sorted at all
-        newMembers.addAll(notSortableMembers);
+        for (Integer i : map.getNotSortableMembers()) {
+            newMembers.add(defaultMembers.get(i));
+        }
         
         return newMembers;
