Index: src/org/openstreetmap/josm/data/APIDataSet.java
===================================================================
--- src/org/openstreetmap/josm/data/APIDataSet.java	(revision 4105)
+++ src/org/openstreetmap/josm/data/APIDataSet.java	(working copy)
@@ -37,6 +37,48 @@
     private LinkedList<OsmPrimitive> toUpdate;
     private LinkedList<OsmPrimitive> toDelete;
 
+    /* Sort order: Relations, then Ways, then Nodes. */
+    private Comparator<OsmPrimitive> sortRWN = new Comparator<OsmPrimitive>() {
+        public int compare(OsmPrimitive o1, OsmPrimitive o2) {
+            if (o1 instanceof Node && o2 instanceof Node)
+                return 0;
+            else if (o1 instanceof Node)
+                return 1;
+            else if (o2 instanceof Node)
+                return -1;
+
+            if (o1 instanceof Way && o2 instanceof Way)
+                return 0;
+            else if (o1 instanceof Way && o2 instanceof Relation)
+                return 1;
+            else if (o2 instanceof Way && o1 instanceof Relation)
+                return -1;
+
+            return 0;
+        }
+    };
+
+    /* Sort order: Way, then Nodes, then Relations. */
+    private Comparator<OsmPrimitive> sortWNR = new Comparator<OsmPrimitive>() {
+        public int compare(OsmPrimitive o1, OsmPrimitive o2) {
+            if (o1 instanceof Node && o2 instanceof Node)
+                return 0;
+            else if (o1 instanceof Node)
+                return -1;
+            else if (o2 instanceof Node)
+                return 1;
+
+            if (o1 instanceof Way && o2 instanceof Way)
+                return 0;
+            else if (o1 instanceof Way && o2 instanceof Relation)
+                return -1;
+            else if (o2 instanceof Way && o1 instanceof Relation)
+                return 1;
+
+            return 0;
+        }
+    };
+
     /**
      * creates a new empty data set
      */
@@ -49,6 +91,7 @@
     /**
      * initializes the API data set with the modified primitives in <code>ds</code>
      *
+     * @todo merge with nearly identical APIDataSet()
      * @param ds the data set. Ignored, if null.
      */
     public void init(DataSet ds) {
@@ -69,99 +112,12 @@
                 toDelete.add(osm);
             }
         }
-        sortDeleted();
-        sortNew();
-        sortUpdated();
+        Collections.sort(toDelete,sortRWN);
+        Collections.sort(toAdd,   sortWNR);
+        Collections.sort(toUpdate,sortWNR);
     }
 
     /**
-     * Ensures that primitives are deleted in the following order: Relations, then Ways,
-     * then Nodes.
-     *
-     */
-    protected void sortDeleted() {
-        Collections.sort(
-                toDelete,
-                new Comparator<OsmPrimitive>() {
-                    public int compare(OsmPrimitive o1, OsmPrimitive o2) {
-                        if (o1 instanceof Node && o2 instanceof Node)
-                            return 0;
-                        else if (o1 instanceof Node)
-                            return 1;
-                        else if (o2 instanceof Node)
-                            return -1;
-
-                        if (o1 instanceof Way && o2 instanceof Way)
-                            return 0;
-                        else if (o1 instanceof Way && o2 instanceof Relation)
-                            return 1;
-                        else if (o2 instanceof Way && o1 instanceof Relation)
-                            return -1;
-
-                        return 0;
-                    }
-                }
-        );
-    }
-
-    /**
-     * Ensures that primitives are added in the following order: Nodes, then Ways,
-     * then Relations.
-     *
-     */
-    protected void sortNew() {
-        Collections.sort(
-                toAdd,
-                new Comparator<OsmPrimitive>() {
-                    public int compare(OsmPrimitive o1, OsmPrimitive o2) {
-                        if (o1 instanceof Node && o2 instanceof Node)
-                            return 0;
-                        else if (o1 instanceof Node)
-                            return -1;
-                        else if (o2 instanceof Node)
-                            return 1;
-
-                        if (o1 instanceof Way && o2 instanceof Way)
-                            return 0;
-                        else if (o1 instanceof Way && o2 instanceof Relation)
-                            return -1;
-                        else if (o2 instanceof Way && o1 instanceof Relation)
-                            return 1;
-
-                        return 0;
-                    }
-                }
-        );
-    }
-    /* 
-     * Sort list of updated elements, so it looks neat in the confirmation dialog.
-     */
-    protected void sortUpdated() {
-        Collections.sort(
-                toUpdate,
-                new Comparator<OsmPrimitive>() {
-                    public int compare(OsmPrimitive o1, OsmPrimitive o2) {
-                        if (o1 instanceof Node && o2 instanceof Node)
-                            return 0;
-                        else if (o1 instanceof Node)
-                            return -1;
-                        else if (o2 instanceof Node)
-                            return 1;
-
-                        if (o1 instanceof Way && o2 instanceof Way)
-                            return 0;
-                        else if (o1 instanceof Way && o2 instanceof Relation)
-                            return -1;
-                        else if (o2 instanceof Way && o1 instanceof Relation)
-                            return 1;
-
-                        return 0;
-                    }
-                }
-        );
-    }
-    
-    /**
      * initializes the API data set with the modified primitives in <code>ds</code>
      *
      * @param ds the data set. Ignored, if null.
@@ -235,8 +191,9 @@
                 toDelete.addFirst(osm);
             }
         }
-        sortNew();
-        sortDeleted();
+        Collections.sort(toDelete,sortRWN);
+        Collections.sort(toAdd,   sortWNR);
+        Collections.sort(toUpdate,sortWNR);
     }
 
     /**
