Index: trunk/src/org/openstreetmap/josm/gui/DefaultNameFormatter.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/DefaultNameFormatter.java	(revision 7097)
+++ trunk/src/org/openstreetmap/josm/gui/DefaultNameFormatter.java	(revision 7098)
@@ -370,5 +370,5 @@
                 formatRelationNameAndType(r2, name2, preset2);
 
-                int comp = name1.toString().compareTo(name2.toString());
+                int comp = AlphanumComparator.getInstance().compare(name1.toString(), name2.toString());
                 if (comp != 0)
                     return comp;
@@ -496,5 +496,5 @@
         return buildDefaultToolTip(primitive.getId(), primitive.getKeys());
     }
-    
+
     private String buildDefaultToolTip(long id, Map<String, String> tags) {
         StringBuilder sb = new StringBuilder();
Index: trunk/test/unit/org/openstreetmap/josm/gui/DefaultNameFormatterTest.java
===================================================================
--- trunk/test/unit/org/openstreetmap/josm/gui/DefaultNameFormatterTest.java	(revision 7097)
+++ trunk/test/unit/org/openstreetmap/josm/gui/DefaultNameFormatterTest.java	(revision 7098)
@@ -2,4 +2,5 @@
 package org.openstreetmap.josm.gui;
 
+import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
@@ -16,4 +17,5 @@
 import org.openstreetmap.josm.TestUtils;
 import org.openstreetmap.josm.data.osm.DataSet;
+import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
 import org.openstreetmap.josm.data.osm.Relation;
 import org.openstreetmap.josm.gui.preferences.map.TaggingPresetPreference;
@@ -53,6 +55,24 @@
         try (InputStream is = new FileInputStream(TestUtils.getTestDataRoot() + "regress/9632/data.osm.zip")) {
             DataSet ds = OsmReader.parseDataSet(Compression.ZIP.getUncompressedInputStream(is), null);
+
+            // Test with 3 known primitives causing the problem. Correct order is p1, p3, p2 with this preset
+            Relation p1 = (Relation) ds.getPrimitiveById(2983382, OsmPrimitiveType.RELATION);
+            Relation p2 = (Relation) ds.getPrimitiveById(550315, OsmPrimitiveType.RELATION);
+            Relation p3 = (Relation) ds.getPrimitiveById(167042, OsmPrimitiveType.RELATION);
+
+            System.out.println("p1: "+DefaultNameFormatter.getInstance().format(p1)+" - "+p1); // route_master ("Bus 453", 6 members)
+            System.out.println("p2: "+DefaultNameFormatter.getInstance().format(p2)+" - "+p2); // TMC ("A 6 Kaiserslautern - Mannheim [negative]", 123 members)
+            System.out.println("p3: "+DefaultNameFormatter.getInstance().format(p3)+" - "+p3); // route(lcn Sal  Salier-Radweg(412 members)
+
+            assertTrue(comparator.compare(p1, p2) == -1); // p1 < p2
+            assertTrue(comparator.compare(p2, p1) ==  1); // p2 > p1
+
+            assertTrue(comparator.compare(p1, p3) == -1); // p1 < p3
+            assertTrue(comparator.compare(p3, p1) ==  1); // p3 > p1
+            assertTrue(comparator.compare(p2, p3) ==  1); // p2 > p3
+            assertTrue(comparator.compare(p3, p2) == -1); // p3 < p2
+
             Relation[] relations = new ArrayList<>(ds.getRelations()).toArray(new Relation[0]);
-            System.out.println(Arrays.toString(relations));
+
             // Check each compare possibility
             for (int i=0; i<relations.length; i++) {
