Index: /trunk/src/org/openstreetmap/josm/data/Preferences.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/Preferences.java	(revision 12988)
+++ /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 12988)
+++ /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());
+    }
 }
Index: /trunk/test/unit/org/openstreetmap/josm/data/PreferencesTest.java
===================================================================
--- /trunk/test/unit/org/openstreetmap/josm/data/PreferencesTest.java	(revision 12988)
+++ /trunk/test/unit/org/openstreetmap/josm/data/PreferencesTest.java	(revision 12989)
@@ -3,12 +3,8 @@
 
 import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-
-import java.awt.Color;
 
 import org.junit.Rule;
 import org.junit.Test;
 import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.data.preferences.ColorProperty;
 import org.openstreetmap.josm.testutils.JOSMTestRules;
 
@@ -28,33 +24,4 @@
 
     /**
-     * Test color name.
-     */
-    @Test
-    public void testColorName() {
-        assertEquals("Layer: {5DE308C0-916F-4B5A-B3DB-D45E17F30172}.gpx",
-                Main.pref.getColorName("layer.{5DE308C0-916F-4B5A-B3DB-D45E17F30172}.gpx"));
-    }
-
-    /**
-     * Test color alpha.
-     */
-    @Test
-    public void testColorAlpha() {
-        assertEquals(0x12, new ColorProperty("foo", new Color(0x12345678, true)).get().getAlpha());
-        assertTrue(Main.pref.putColor("bar", new Color(0x12345678, true)));
-        assertEquals(0x12, new ColorProperty("bar", Color.RED).get().getAlpha());
-    }
-
-    /**
-     * Test color name and alpha.
-     */
-    @Test
-    public void testColorNameAlpha() {
-        assertEquals(0x12, new ColorProperty("foo", new Color(0x12345678, true)).get().getAlpha());
-        assertEquals(new Color(0x34, 0x56, 0x78, 0x12), Main.pref.getDefaultColor("foo"));
-        assertEquals(0x12, Main.pref.getDefaultColor("foo").getAlpha());
-    }
-
-    /**
      * Test {@link Preferences#toXML}.
      */
Index: unk/test/unit/org/openstreetmap/josm/data/preferences/ColorPropertyTest.java
===================================================================
--- /trunk/test/unit/org/openstreetmap/josm/data/preferences/ColorPropertyTest.java	(revision 12988)
+++ 	(revision )
@@ -1,82 +1,0 @@
-// License: GPL. For details, see LICENSE file.
-package org.openstreetmap.josm.data.preferences;
-
-import static org.junit.Assert.assertEquals;
-
-import java.awt.Color;
-
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.openstreetmap.josm.spi.preferences.Config;
-import org.openstreetmap.josm.testutils.JOSMTestRules;
-
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
-
-/**
- * Test {@link ColorProperty}
- * @author Michael Zangl
- */
-public class ColorPropertyTest {
-    /**
-     * This is a preference test.
-     */
-    @Rule
-    @SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
-    public JOSMTestRules test = new JOSMTestRules().preferences();
-    private ColorProperty base;
-
-    /**
-     * Set up test case
-     */
-    @Before
-    public void createTestProperty() {
-        base = new ColorProperty("test", Color.RED);
-    }
-
-    /**
-     * Test {@link ColorProperty#get()}
-     */
-    @Test
-    public void testGet() {
-        assertEquals(Color.RED, base.get());
-
-        Config.getPref().put("color.test", "#00ff00");
-        assertEquals(new Color(0xff00ff00), base.get());
-    }
-
-    /**
-     * Test {@link ColorProperty#put}
-     */
-    @Test
-    public void testPut() {
-        assertEquals(Color.RED, base.get());
-
-        base.put(new Color(0xff00ff00));
-        assertEquals(new Color(0xff00ff00), base.get());
-        assertEquals("#00ff00", Config.getPref().get("color.test").toLowerCase());
-
-        base.put(null);
-        assertEquals(Color.RED, base.get());
-    }
-
-    /**
-     * Test {@link ColorProperty#getChildColor(String)}
-     */
-    @Test
-    public void testGetChildColor() {
-        AbstractToStringProperty<Color> child = base.getChildColor("test2");
-
-        assertEquals(Color.RED, child.get());
-
-        base.put(Color.GREEN);
-        assertEquals(Color.GREEN, child.get());
-
-        child.put(Color.YELLOW);
-        assertEquals(Color.YELLOW, child.get());
-        assertEquals(Color.GREEN, base.get());
-
-        child.put(null);
-        assertEquals(Color.GREEN, child.get());
-    }
-}
Index: /trunk/test/unit/org/openstreetmap/josm/data/preferences/NamedColorPropertyTest.java
===================================================================
--- /trunk/test/unit/org/openstreetmap/josm/data/preferences/NamedColorPropertyTest.java	(revision 12989)
+++ /trunk/test/unit/org/openstreetmap/josm/data/preferences/NamedColorPropertyTest.java	(revision 12989)
@@ -0,0 +1,100 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.data.preferences;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import java.awt.Color;
+import java.util.Arrays;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.spi.preferences.Config;
+import org.openstreetmap.josm.testutils.JOSMTestRules;
+
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
+
+/**
+ * Test {@link ColorProperty}
+ * @author Michael Zangl
+ */
+public class NamedColorPropertyTest {
+    /**
+     * This is a preference test.
+     */
+    @Rule
+    @SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
+    public JOSMTestRules test = new JOSMTestRules().preferences();
+    private NamedColorProperty base;
+
+    /**
+     * Set up test case
+     */
+    @Before
+    public void createTestProperty() {
+        base = new NamedColorProperty("test", Color.RED);
+    }
+
+    /**
+     * Test {@link ColorProperty#get()}
+     */
+    @Test
+    public void testGet() {
+        assertEquals(Color.RED, base.get());
+    }
+
+    /**
+     * Test {@link ColorProperty#put}
+     */
+    @Test
+    public void testPut() {
+        assertEquals(Color.RED, base.get());
+
+        base.put(new Color(0xff00af00));
+        assertEquals(new Color(0xff00af00), base.get());
+        assertEquals("#00af00", Config.getPref().getList("clr.general.test").get(0).toLowerCase());
+
+        base.put(null);
+        assertEquals(Color.RED, base.get());
+    }
+
+    /**
+     * Test color alpha.
+     */
+    @Test
+    public void testColorAlpha() {
+        assertEquals(0x12, new NamedColorProperty("foo", new Color(0x12345678, true)).get().getAlpha());
+        assertTrue(Main.pref.putList("clr.general.bar", Arrays.asList("#34567812", "general", "", "bar")));
+        assertEquals(0x12, new NamedColorProperty("bar", Color.RED).get().getAlpha());
+    }
+
+    /**
+     * Test color name and alpha.
+     */
+    @Test
+    public void testColorNameAlpha() {
+        assertEquals(0x12, new NamedColorProperty("foo", new Color(0x12345678, true)).get().getAlpha());
+    }
+
+    /**
+     * Test {@link ColorProperty#getChildColor(String)}
+     */
+    @Test
+    public void testGetChildColor() {
+        AbstractProperty<Color> child = base.getChildColor("test2");
+
+        assertEquals(Color.RED, child.get());
+
+        base.put(Color.GREEN);
+        assertEquals(Color.GREEN, child.get());
+
+        child.put(Color.YELLOW);
+        assertEquals(Color.YELLOW, child.get());
+        assertEquals(Color.GREEN, base.get());
+
+        child.put(null);
+        assertEquals(Color.GREEN, child.get());
+    }
+}
Index: /trunk/test/unit/org/openstreetmap/josm/gui/layer/LayerTest.java
===================================================================
--- /trunk/test/unit/org/openstreetmap/josm/gui/layer/LayerTest.java	(revision 12988)
+++ /trunk/test/unit/org/openstreetmap/josm/gui/layer/LayerTest.java	(revision 12989)
@@ -16,5 +16,5 @@
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.preferences.AbstractProperty;
-import org.openstreetmap.josm.data.preferences.ColorProperty;
+import org.openstreetmap.josm.data.preferences.NamedColorProperty;
 import org.openstreetmap.josm.testutils.JOSMTestRules;
 
@@ -52,6 +52,6 @@
         AbstractProperty<Color> color = new LayerManagerTest.TestLayer() {
             @Override
-            protected ColorProperty getBaseColorProperty() {
-                return new ColorProperty("x", Color.BLACK);
+            protected NamedColorProperty getBaseColorProperty() {
+                return new NamedColorProperty("x", Color.BLACK);
             }
         }.getColorProperty();
@@ -101,5 +101,5 @@
             @Override
             public AbstractProperty<Color> getColorProperty() {
-                return new ColorProperty("test", Color.RED);
+                return new NamedColorProperty("test", Color.RED);
             }
         };
