Index: /trunk/src/org/openstreetmap/josm/gui/mappaint/ElemStyles.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/mappaint/ElemStyles.java	(revision 16589)
+++ /trunk/src/org/openstreetmap/josm/gui/mappaint/ElemStyles.java	(revision 16590)
@@ -21,4 +21,5 @@
 import org.openstreetmap.josm.data.osm.visitor.paint.relations.Multipolygon;
 import org.openstreetmap.josm.data.osm.visitor.paint.relations.MultipolygonCache;
+import org.openstreetmap.josm.data.preferences.NamedColorProperty;
 import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.NavigatableComponent;
@@ -40,4 +41,5 @@
 import org.openstreetmap.josm.spi.preferences.PreferenceChangeEvent;
 import org.openstreetmap.josm.spi.preferences.PreferenceChangedListener;
+import org.openstreetmap.josm.tools.ColorHelper;
 import org.openstreetmap.josm.tools.Pair;
 
@@ -604,4 +606,8 @@
      * each primitive can be slow during rendering.
      *
+     * If the default value can be {@linkplain Cascade#convertTo converted} to a {@link Color},
+     * the {@link NamedColorProperty} is retrieved as string.
+     *
+     * @param source style source
      * @param key preference key
      * @param def default value
@@ -609,10 +615,17 @@
      * @see org.openstreetmap.josm.data.Preferences#get(String, String)
      */
-    public String getPreferenceCached(String key, String def) {
+    public String getPreferenceCached(StyleSource source, String key, String def) {
         String res;
         if (preferenceCache.containsKey(key)) {
             res = preferenceCache.get(key);
         } else {
-            res = Config.getPref().get(key, null);
+            Color realDef = Cascade.convertTo(def, Color.class);
+            if (realDef != null) {
+                String prefName = source != null ? source.getFileNamePart() : "unknown";
+                NamedColorProperty property = new NamedColorProperty(NamedColorProperty.COLOR_CATEGORY_MAPPAINT, prefName, key, realDef);
+                res = ColorHelper.color2html(property.get());
+            } else {
+                res = Config.getPref().get(key, null);
+            }
             preferenceCache.put(key, res);
         }
Index: /trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/Functions.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/Functions.java	(revision 16589)
+++ /trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/Functions.java	(revision 16590)
@@ -28,4 +28,5 @@
 import org.openstreetmap.josm.data.osm.search.SearchCompiler.Match;
 import org.openstreetmap.josm.data.osm.search.SearchParseError;
+import org.openstreetmap.josm.data.preferences.NamedColorProperty;
 import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.mappaint.Cascade;
@@ -768,4 +769,8 @@
      * Obtains the JOSM'key {@link org.openstreetmap.josm.data.Preferences} string for key {@code key},
      * and defaults to {@code def} if that is null.
+     *
+     * If the default value can be {@linkplain Cascade#convertTo converted} to a {@link Color},
+     * the {@link NamedColorProperty} is retrieved as string.
+     *
      * @param env the environment
      * @param key Key in JOSM preference
@@ -774,5 +779,5 @@
      */
     public static String JOSM_pref(Environment env, String key, String def) { // NO_UCD (unused code)
-        return MapPaintStyles.getStyles().getPreferenceCached(key, def);
+        return MapPaintStyles.getStyles().getPreferenceCached(env != null ? env.source : null, key, def);
     }
 
Index: /trunk/test/unit/org/openstreetmap/josm/gui/mappaint/mapcss/FunctionsTest.java
===================================================================
--- /trunk/test/unit/org/openstreetmap/josm/gui/mappaint/mapcss/FunctionsTest.java	(revision 16589)
+++ /trunk/test/unit/org/openstreetmap/josm/gui/mappaint/mapcss/FunctionsTest.java	(revision 16590)
@@ -6,4 +6,6 @@
 import static org.openstreetmap.josm.data.osm.OsmPrimitiveType.NODE;
 
+import java.util.Collections;
+
 import org.junit.Rule;
 import org.junit.Test;
@@ -12,4 +14,5 @@
 import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
 import org.openstreetmap.josm.data.osm.User;
+import org.openstreetmap.josm.data.preferences.NamedColorProperty;
 import org.openstreetmap.josm.gui.mappaint.Environment;
 import org.openstreetmap.josm.gui.util.GuiHelper;
@@ -113,4 +116,5 @@
     public void testPref() {
         String key = "Functions.JOSM_pref";
+        Config.getPref().put(key, null);
         assertEquals("foobar", Functions.JOSM_pref(null, key, "foobar"));
         Config.getPref().put(key, "baz");
@@ -124,4 +128,28 @@
         });
         assertEquals("foobar", Functions.JOSM_pref(null, key, "foobar"));
+        Config.getPref().put(key, null);
     }
+
+    /**
+     * Unit test of {@link Functions#JOSM_pref}, color handling
+     */
+    @Test
+    public void testPrefColor() {
+        String key = "Functions.JOSM_pref";
+        String colorKey = NamedColorProperty.NAMED_COLOR_PREFIX + NamedColorProperty.COLOR_CATEGORY_MAPPAINT + ".unknown." + key;
+        Config.getPref().put(colorKey, null);
+        assertEquals("#000000", Functions.JOSM_pref(null, key, "#000000"));
+        Config.getPref().putList(colorKey, Collections.singletonList("#00FF00"));
+        GuiHelper.runInEDTAndWait(() -> {
+            // await org.openstreetmap.josm.gui.mappaint.ElemStyles.clearCached
+        });
+        assertEquals("#00FF00", Functions.JOSM_pref(null, key, "#000000"));
+        Config.getPref().put(colorKey, null);
+        GuiHelper.runInEDTAndWait(() -> {
+            // await org.openstreetmap.josm.gui.mappaint.ElemStyles.clearCached
+        });
+        assertEquals("#000000", Functions.JOSM_pref(null, key, "#000000"));
+        Config.getPref().put(colorKey, null);
+    }
+
 }
