Index: src/org/openstreetmap/josm/data/preferences/NamedColorProperty.java
===================================================================
--- src/org/openstreetmap/josm/data/preferences/NamedColorProperty.java	(revision 16799)
+++ src/org/openstreetmap/josm/data/preferences/NamedColorProperty.java	(working copy)
@@ -16,7 +16,7 @@
  * and customized by the user.
  * @since 12987
  */
-public class NamedColorProperty extends AbstractProperty<Color> {
+public class NamedColorProperty extends AbstractToStringProperty<Color> {
 
     public static final String NAMED_COLOR_PREFIX = "clr.";
 
@@ -64,6 +64,14 @@
     }
 
     @Override
+    protected void storeDefaultValue() {
+        // This is required due to the super() initializer calling this method.
+        if (category != null) {
+            super.storeDefaultValue();
+        }
+    }
+
+    @Override
     public Color get() {
         List<String> data = getPreferences().getList(getKey(), getDefaultValuePref()); // store default value
         if (super.isSet() && data != null && !data.isEmpty()) {
@@ -136,4 +144,14 @@
     public FallbackProperty<Color> getChildColor(String name) {
         return getChildColor(category, source, name);
     }
+
+    @Override
+    protected Color fromString(String string) {
+        return ColorHelper.html2color(string);
+    }
+
+    @Override
+    protected String toString(Color color) {
+        return ColorHelper.color2html(color);
+    }
 }
Index: src/org/openstreetmap/josm/gui/mappaint/ColorStyleSettingGui.java
===================================================================
--- src/org/openstreetmap/josm/gui/mappaint/ColorStyleSettingGui.java	(nonexistent)
+++ src/org/openstreetmap/josm/gui/mappaint/ColorStyleSettingGui.java	(working copy)
@@ -0,0 +1,89 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.gui.mappaint;
+
+import static org.openstreetmap.josm.tools.I18n.tr;
+
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Graphics;
+import java.awt.event.ActionEvent;
+import java.util.Arrays;
+import java.util.Objects;
+
+import javax.swing.AbstractAction;
+import javax.swing.Icon;
+import javax.swing.JColorChooser;
+import javax.swing.JMenu;
+
+import org.openstreetmap.josm.gui.MainApplication;
+import org.openstreetmap.josm.gui.mappaint.StyleSetting.ColorStyleSetting;
+import org.openstreetmap.josm.gui.mappaint.loader.MapPaintStyleLoader;
+import org.openstreetmap.josm.tools.ImageProvider;
+import org.openstreetmap.josm.tools.ImageProvider.ImageSizes;
+
+/**
+ * A GUI to set a color style
+ * @author Taylor Smock
+ * @since xxx
+ */
+public class ColorStyleSettingGui implements StyleSettingGui {
+
+    private ColorStyleSetting setting;
+
+    /**
+     * Create a new ColorStyleSettingGui
+     * @param setting The setting to create the GUI for
+     */
+    public ColorStyleSettingGui(ColorStyleSetting setting) {
+        this.setting = Objects.requireNonNull(setting);
+    }
+
+    static class ColorIcon implements Icon {
+
+        private Color color;
+        private ImageSizes size;
+
+        ColorIcon(Color color, ImageProvider.ImageSizes size) {
+            this.color = color;
+            this.size = size;
+        }
+
+        @Override
+        public void paintIcon(Component c, Graphics g, int x, int y) {
+            Color current = g.getColor();
+            g.setColor(color);
+            g.drawRect(x, y, getIconWidth(), getIconHeight());
+            g.fillRect(x, y, getIconWidth(), getIconHeight());
+            g.setColor(current); // So that the text is still black
+        }
+
+        @Override
+        public int getIconWidth() {
+            return size.getAdjustedWidth();
+        }
+
+        @Override
+        public int getIconHeight() {
+            return size.getAdjustedHeight();
+        }
+
+    }
+
+    class ColorStyleSettingAction extends AbstractAction {
+        ColorStyleSettingAction() {
+            super(setting.label, new ColorIcon(setting.getValue(), ImageSizes.SMALLICON));
+        }
+
+        @Override
+        public void actionPerformed(ActionEvent e) {
+            setting.setValue(JColorChooser.showDialog(MainApplication.getMainPanel(), tr("Choose a color"), setting.getValue()));
+            MainApplication.worker.submit(new MapPaintStyleLoader(Arrays.asList(setting.parentStyle)));
+        }
+    }
+
+    @Override
+    public void addMenuEntry(JMenu menu) {
+        menu.add(new ColorStyleSettingAction());
+    }
+
+}
Index: src/org/openstreetmap/josm/gui/mappaint/StyleSetting.java
===================================================================
--- src/org/openstreetmap/josm/gui/mappaint/StyleSetting.java	(revision 16799)
+++ src/org/openstreetmap/josm/gui/mappaint/StyleSetting.java	(working copy)
@@ -1,6 +1,7 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.gui.mappaint;
 
+import java.awt.Color;
 import java.util.Objects;
 import java.util.Optional;
 
@@ -175,4 +176,19 @@
             return new BooleanStyleSettingGui(this);
         }
     }
+
+    /**
+     * A style setting for color values.
+     * @since xxx
+     */
+    class ColorStyleSetting extends PropertyStyleSetting<Color> {
+        ColorStyleSetting(StyleSource parentStyle, String label, AbstractToStringProperty<Color> property) {
+            super(parentStyle, label, Color.class, property);
+        }
+
+        @Override
+        public StyleSettingGui getStyleSettingGui() {
+            return new ColorStyleSettingGui(this);
+        }
+    }
 }
Index: src/org/openstreetmap/josm/gui/mappaint/StyleSettingFactory.java
===================================================================
--- src/org/openstreetmap/josm/gui/mappaint/StyleSettingFactory.java	(revision 16799)
+++ src/org/openstreetmap/josm/gui/mappaint/StyleSettingFactory.java	(working copy)
@@ -1,10 +1,12 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.gui.mappaint;
 
+import java.awt.Color;
 import java.util.function.BiFunction;
 
 import org.openstreetmap.josm.data.preferences.BooleanProperty;
 import org.openstreetmap.josm.data.preferences.DoubleProperty;
+import org.openstreetmap.josm.data.preferences.NamedColorProperty;
 import org.openstreetmap.josm.data.preferences.StringProperty;
 import org.openstreetmap.josm.tools.Logging;
 
@@ -45,6 +47,12 @@
                     final StringProperty property = new StringProperty(qualifiedKey, defaultValue);
                     return new StyleSetting.PropertyStyleSetting<>(parentStyle, label, String.class, property);
                 });
+            case "color":
+                return forLabelAndDefault(c, Color.class, (label, defaultValue) -> {
+                    final NamedColorProperty property = new NamedColorProperty(NamedColorProperty.COLOR_CATEGORY_MAPPAINT,
+                            parentStyle.getFileNamePart(), label, defaultValue);
+                    return new StyleSetting.ColorStyleSetting(parentStyle, label, property);
+                });
             default:
                 Logging.warn("Unknown setting type {0} for style {1}", type, parentStyle.url);
                 return null;
