Index: trunk/src/org/openstreetmap/josm/data/Preferences.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/Preferences.java	(revision 12987)
+++ trunk/src/org/openstreetmap/josm/data/Preferences.java	(revision 12989)
@@ -1081,5 +1081,7 @@
      * @param colKey The color name
      * @return The color
-     */
+     * @deprecated (since 12989) no longer supported
+     */
+    @Deprecated
     public synchronized Color getDefaultColor(String colKey) {
         StringSetting col = Utils.cast(defaultsMap.get(COLOR_PREFIX+colKey), StringSetting.class);
Index: trunk/src/org/openstreetmap/josm/gui/preferences/display/ColorPreference.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/display/ColorPreference.java	(revision 12987)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/display/ColorPreference.java	(revision 12989)
@@ -31,4 +31,7 @@
 import javax.swing.ListSelectionModel;
 import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.ListSelectionListener;
+import javax.swing.event.TableModelEvent;
+import javax.swing.event.TableModelListener;
 import javax.swing.table.AbstractTableModel;
 import javax.swing.table.DefaultTableCellRenderer;
@@ -63,5 +66,5 @@
  * @see NamedColorProperty
  */
-public class ColorPreference implements SubPreferenceSetting {
+public class ColorPreference implements SubPreferenceSetting, ListSelectionListener, TableModelListener {
 
     /**
@@ -320,5 +323,5 @@
             int sel = colors.getSelectedRow();
             ColorEntry ce = tableModel.getEntry(sel);
-            Color c = Main.pref.getDefaultColor(ce.key);
+            Color c = ce.info.getDefaultValue();
             if (c != null) {
                 colors.setValueAt(c, sel, 1);
@@ -330,5 +333,5 @@
             for (int i = 0; i < data.size(); ++i) {
                 ColorEntry ce = data.get(i);
-                Color c = Main.pref.getDefaultColor(ce.key);
+                Color c = ce.info.getDefaultValue();
                 if (c != null) {
                     colors.setValueAt(c, i, 1);
@@ -345,13 +348,5 @@
         defaultSet.setEnabled(false);
 
-        colors = new JTable(tableModel) {
-            @Override public void valueChanged(ListSelectionEvent e) {
-                super.valueChanged(e);
-                int sel = getSelectedRow();
-                remove.setEnabled(sel >= 0 && isRemoveColor(sel));
-                colorEdit.setEnabled(sel >= 0);
-                defaultSet.setEnabled(sel >= 0);
-            }
-        };
+        colors = new JTable(tableModel);
         colors.addMouseListener(new MouseAdapter() {
             @Override
@@ -402,4 +397,7 @@
         colors.setPreferredScrollableViewportSize(new Dimension(100, 112));
 
+        colors.getSelectionModel().addListSelectionListener(this);
+        colors.getModel().addTableModelListener(this);
+
         JPanel panel = new JPanel(new GridBagLayout());
         panel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
@@ -417,6 +415,6 @@
     }
 
-    Boolean isRemoveColor(int row) {
-        return tableModel.getEntry(row).info.getCategory().equals(NamedColorProperty.COLOR_CATEGORY_LAYER);
+    private boolean isRemoveColor(ColorEntry ce) {
+        return ce.info.getCategory().equals(NamedColorProperty.COLOR_CATEGORY_LAYER);
     }
 
@@ -443,5 +441,5 @@
         }
         for (ColorEntry e : tableModel.getData()) {
-            if (!e.isDefault()) {
+            if (e.info.getValue() != null) {
                 if (e.toProperty().put(e.info.getValue())
                         && e.key.startsWith("mappaint.")) {
@@ -463,3 +461,21 @@
         return gui.getDisplayPreference();
     }
+
+    @Override
+    public void valueChanged(ListSelectionEvent e) {
+        updateEnabledState();
+    }
+
+    @Override
+    public void tableChanged(TableModelEvent e) {
+        updateEnabledState();
+    }
+
+    private void updateEnabledState() {
+        int sel = colors.getSelectedRow();
+        ColorEntry ce = sel >= 0 ? tableModel.getEntry(sel) : null;
+        remove.setEnabled(ce != null && isRemoveColor(ce));
+        colorEdit.setEnabled(ce != null);
+        defaultSet.setEnabled(ce != null && !ce.isDefault());
+    }
 }
