Index: trunk/src/org/openstreetmap/josm/io/OsmWriter.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/OsmWriter.java	(revision 9309)
+++ trunk/src/org/openstreetmap/josm/io/OsmWriter.java	(revision 9310)
@@ -15,4 +15,5 @@
 import org.openstreetmap.josm.data.coor.CoordinateFormat;
 import org.openstreetmap.josm.data.coor.LatLon;
+import org.openstreetmap.josm.data.osm.AbstractPrimitive;
 import org.openstreetmap.josm.data.osm.Changeset;
 import org.openstreetmap.josm.data.osm.DataSet;
@@ -93,7 +94,16 @@
     }
 
-    protected static final Comparator<OsmPrimitive> byIdComparator = new Comparator<OsmPrimitive>() {
-        @Override public int compare(OsmPrimitive o1, OsmPrimitive o2) {
-            return o1.getUniqueId() < o2.getUniqueId() ? -1 : (o1.getUniqueId() == o2.getUniqueId() ? 0 : 1);
+    /**
+     * Sorts {@code -1} &rarr; {@code -infinity}, then {@code +1} &rarr; {@code +infinity}
+     */
+    protected static final Comparator<AbstractPrimitive> byIdComparator = new Comparator<AbstractPrimitive>() {
+        @Override public int compare(AbstractPrimitive o1, AbstractPrimitive o2) {
+            final long i1 = o1.getUniqueId();
+            final long i2 = o2.getUniqueId();
+            if (i1 < 0 && i2 < 0) {
+                return Long.compare(i2, i1);
+            } else {
+                return Long.compare(i1, i2);
+            }
         }
     };
