Index: trunk/src/org/openstreetmap/josm/gui/preferences/display/ColorPreference.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/display/ColorPreference.java	(revision 12952)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/display/ColorPreference.java	(revision 12953)
@@ -7,4 +7,5 @@
 import java.awt.Component;
 import java.awt.Dimension;
+import java.awt.Font;
 import java.awt.GridBagLayout;
 import java.awt.event.MouseAdapter;
@@ -16,4 +17,5 @@
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 
 import javax.swing.BorderFactory;
@@ -47,4 +49,5 @@
 import org.openstreetmap.josm.gui.preferences.TabPreferenceSetting;
 import org.openstreetmap.josm.gui.util.GuiHelper;
+import org.openstreetmap.josm.tools.CheckParameterUtil;
 import org.openstreetmap.josm.tools.ColorHelper;
 import org.openstreetmap.josm.tools.GBC;
@@ -78,4 +81,5 @@
 
         public ColorEntry(String key, String colorHtml) {
+            CheckParameterUtil.ensureParameterNotNull(key, "key");
             this.key = key;
             this.color = ColorHelper.html2color(colorHtml);
@@ -85,7 +89,12 @@
         }
 
+        public String getDisplay() {
+            return Main.pref.getColorName(key);
+        }
+
         @Override
         public int compareTo(ColorEntry o) {
-            return Collator.getInstance().compare(getName(key), getName(o.key));
+            if (o == null) return -1;
+            return Collator.getInstance().compare(getDisplay(), o.getDisplay());
         }
     }
@@ -111,4 +120,8 @@
         }
 
+        public ColorEntry getEntry(int row) {
+            return data.get(row);
+        }
+
         public List<ColorEntry> getData() {
             return data;
@@ -136,5 +149,5 @@
         @Override
         public Object getValueAt(int rowIndex, int columnIndex) {
-            return columnIndex == 0 ? getName(data.get(rowIndex).key) : data.get(rowIndex).color;
+            return columnIndex == 0 ? data.get(rowIndex) : data.get(rowIndex).color;
         }
 
@@ -153,5 +166,5 @@
             if (columnIndex == 1 && aValue instanceof Color) {
                 data.get(rowIndex).color = (Color) aValue;
-                fireTableCellUpdated(rowIndex, columnIndex);
+                fireTableRowsUpdated(rowIndex, rowIndex);
             }
         }
@@ -211,8 +224,4 @@
     }
 
-    private static String getName(String o) {
-        return Main.pref.getColorName(o);
-    }
-
     @Override
     public void addGui(final PreferenceTabbedPane gui) {
@@ -223,8 +232,9 @@
         colorEdit.addActionListener(e -> {
             int sel = colors.getSelectedRow();
-            JColorChooser chooser = new JColorChooser((Color) colors.getValueAt(sel, 1));
+            ColorEntry ce = tableModel.getEntry(sel);
+            JColorChooser chooser = new JColorChooser(ce.color);
             int answer = JOptionPane.showConfirmDialog(
                     gui, chooser,
-                    tr("Choose a color for {0}", getName((String) colors.getValueAt(sel, 0))),
+                    tr("Choose a color for {0}", ce.getDisplay()),
                     JOptionPane.OK_CANCEL_OPTION,
                     JOptionPane.PLAIN_MESSAGE);
@@ -236,6 +246,6 @@
         defaultSet.addActionListener(e -> {
             int sel = colors.getSelectedRow();
-            String name = (String) colors.getValueAt(sel, 0);
-            Color c = Main.pref.getDefaultColor(name);
+            ColorEntry ce = tableModel.getEntry(sel);
+            Color c = Main.pref.getDefaultColor(ce.key);
             if (c != null) {
                 colors.setValueAt(c, sel, 1);
@@ -244,7 +254,8 @@
         JButton defaultAll = new JButton(tr("Set all to default"));
         defaultAll.addActionListener(e -> {
-            for (int i = 0; i < colors.getRowCount(); ++i) {
-                String name = (String) colors.getValueAt(i, 0);
-                Color c = Main.pref.getDefaultColor(name);
+            List<ColorEntry> data = tableModel.getData();
+            for (int i = 0; i < data.size(); ++i) {
+                ColorEntry ce = data.get(i);
+                Color c = Main.pref.getDefaultColor(ce.key);
                 if (c != null) {
                     colors.setValueAt(c, i, 1);
@@ -279,4 +290,23 @@
         });
         colors.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
+        colors.getColumnModel().getColumn(0).setCellRenderer(new DefaultTableCellRenderer() {
+            @Override
+            public Component getTableCellRendererComponent(
+                    JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
+                Component comp = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
+                if (value != null && comp instanceof JLabel) {
+                    JLabel label = (JLabel) comp;
+                    ColorEntry e = (ColorEntry) value;
+                    label.setText(e.getDisplay());
+                    if (!Objects.equals(e.color, Main.pref.getDefaultColor(e.key))) {
+                        label.setFont(label.getFont().deriveFont(Font.BOLD));
+                    } else {
+                        label.setFont(label.getFont().deriveFont(Font.PLAIN));
+                    }
+                    return label;
+                }
+                return comp;
+            }
+        });
         colors.getColumnModel().getColumn(1).setCellRenderer(new DefaultTableCellRenderer() {
             @Override
@@ -315,5 +345,5 @@
 
     Boolean isRemoveColor(int row) {
-        return tableModel.getData().get(row).key.startsWith("layer.");
+        return tableModel.getEntry(row).key.startsWith("layer.");
     }
 
