Index: trunk/src/org/openstreetmap/josm/gui/preferences/display/ColorPreference.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/display/ColorPreference.java	(revision 12951)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/display/ColorPreference.java	(revision 12952)
@@ -10,9 +10,10 @@
 import java.awt.event.MouseAdapter;
 import java.awt.event.MouseEvent;
+import java.text.Collator;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.TreeMap;
 
 import javax.swing.BorderFactory;
@@ -72,7 +73,20 @@
     private JButton remove;
 
-    private static class ColorEntry {
+    private static class ColorEntry implements Comparable<ColorEntry> {
         String key;
         Color color;
+
+        public ColorEntry(String key, String colorHtml) {
+            this.key = key;
+            this.color = ColorHelper.html2color(colorHtml);
+            if (this.color == null) {
+                Logging.warn("Unable to get color from '"+colorHtml+"' for color preference '"+key+'\'');
+            }
+        }
+
+        @Override
+        public int compareTo(ColorEntry o) {
+            return Collator.getInstance().compare(getName(key), getName(o.key));
+        }
     }
 
@@ -158,20 +172,21 @@
         tableModel.clear();
         // fill model with colors:
-        Map<String, String> colorKeyList = new TreeMap<>();
-        Map<String, String> colorKeyListMappaint = new TreeMap<>();
-        Map<String, String> colorKeyListLayer = new TreeMap<>();
-        for (String key : colorMap.keySet()) {
+        List<ColorEntry> colorKeyList = new ArrayList<>();
+        List<ColorEntry> colorKeyListMappaint = new ArrayList<>();
+        List<ColorEntry> colorKeyListLayer = new ArrayList<>();
+        for (Map.Entry<String, String> e : colorMap.entrySet()) {
+            String key = e.getKey();
+            String html = e.getValue();
             if (key.startsWith("layer.")) {
-                colorKeyListLayer.put(getName(key), key);
+                colorKeyListLayer.add(new ColorEntry(key, html));
             } else if (key.startsWith("mappaint.")) {
-                // use getName(key)+key, as getName() may be ambiguous
-                colorKeyListMappaint.put(getName(key)+key, key);
+                colorKeyListMappaint.add(new ColorEntry(key, html));
             } else {
-                colorKeyList.put(getName(key), key);
-            }
-        }
-        addColorRows(colorMap, colorKeyList);
-        addColorRows(colorMap, colorKeyListMappaint);
-        addColorRows(colorMap, colorKeyListLayer);
+                colorKeyList.add(new ColorEntry(key, html));
+            }
+        }
+        addColorRows(colorKeyList);
+        addColorRows(colorKeyListMappaint);
+        addColorRows(colorKeyListLayer);
         if (this.colors != null) {
             this.colors.repaint();
@@ -179,16 +194,7 @@
     }
 
-    private void addColorRows(Map<String, String> colorMap, Map<String, String> keyMap) {
-        for (String value : keyMap.values()) {
-            ColorEntry entry = new ColorEntry();
-            String html = colorMap.get(value);
-            Color color = ColorHelper.html2color(html);
-            if (color == null) {
-                Logging.warn("Unable to get color from '"+html+"' for color preference '"+value+'\'');
-            }
-            entry.key = value;
-            entry.color = color;
-            tableModel.addEntry(entry);
-        }
+    private void addColorRows(List<ColorEntry> entries) {
+        Collections.sort(entries);
+        entries.forEach(tableModel::addEntry);
     }
 
