Index: /trunk/.classpath
===================================================================
--- /trunk/.classpath	(revision 11727)
+++ /trunk/.classpath	(revision 11728)
@@ -21,5 +21,4 @@
 	<classpathentry kind="lib" path="test/lib/system-rules-1.16.1.jar"/>
 	<classpathentry kind="lib" path="test/lib/unitils-core/unitils-core-3.4.6.jar"/>
-	<classpathentry kind="lib" path="pja.jar"/>
 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
 	<classpathentry exported="true" kind="con" path="GROOVY_SUPPORT"/>
Index: /trunk/src/org/openstreetmap/josm/data/Preferences.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/Preferences.java	(revision 11727)
+++ /trunk/src/org/openstreetmap/josm/data/Preferences.java	(revision 11728)
@@ -1532,10 +1532,9 @@
         settingsMap.keySet().stream()
                 .filter(key -> key.startsWith("color."))
-                .map(key -> {
+                .flatMap(key -> {
                     final String newKey = ColorProperty.getColorKey(key.substring("color.".length()));
-                    return new AbstractMap.SimpleImmutableEntry<>(key, newKey);
-                })
-                .filter(entry -> {
-                    return !entry.getKey().equals(entry.getValue()) && !settingsMap.containsKey(entry.getValue());
+                    return key.equals(newKey) || settingsMap.containsKey(newKey)
+                            ? Stream.empty()
+                            : Stream.of(new AbstractMap.SimpleImmutableEntry<>(key, newKey));
                 })
                 .collect(Collectors.toList()) // to avoid ConcurrentModificationException
Index: /trunk/src/org/openstreetmap/josm/gui/mappaint/styleelement/AreaElement.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/mappaint/styleelement/AreaElement.java	(revision 11727)
+++ /trunk/src/org/openstreetmap/josm/gui/mappaint/styleelement/AreaElement.java	(revision 11728)
@@ -15,4 +15,5 @@
 import org.openstreetmap.josm.gui.mappaint.Environment;
 import org.openstreetmap.josm.gui.mappaint.MapPaintStyles.IconReference;
+import org.openstreetmap.josm.gui.util.RotationAngle;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
 import org.openstreetmap.josm.tools.Utils;
@@ -62,5 +63,16 @@
     public Float extentThreshold;
 
-    protected AreaElement(Cascade c, Color color, MapImage fillImage, Float extent, Float extentThreshold, TextLabel text) {
+    /**
+     * The icon that is displayed on the center of the area.
+     */
+    private final MapImage iconImage;
+
+    /**
+     * The rotation of the {@link #iconImageAngle}
+     */
+    private final RotationAngle iconImageAngle;
+
+    protected AreaElement(Cascade c, Color color, MapImage fillImage, Float extent,
+            Float extentThreshold, TextLabel text, MapImage iconImage, RotationAngle iconImageAngle) {
         super(c, 1f);
         CheckParameterUtil.ensureParameterNotNull(color);
@@ -70,4 +82,6 @@
         this.extentThreshold = extentThreshold;
         this.text = text;
+        this.iconImage = iconImage;
+        this.iconImageAngle = iconImageAngle;
     }
 
@@ -105,4 +119,11 @@
 
         TextLabel text = null; // <- text is handled by TextElement
+        MapImage iconImage = NodeElement.createIcon(env);
+        RotationAngle rotationAngle = NodeElement.createRotationAngle(env);
+
+        if (iconImage != null) {
+            // fake a transparent color.
+            color = new Color(0, 0, 0, 0);
+        }
 
         if (color != null) {
@@ -110,5 +131,5 @@
             Float extentThreshold = c.get(FILL_EXTENT_THRESHOLD, null, float.class);
 
-            return new AreaElement(c, color, fillImage, extent, extentThreshold, text);
+            return new AreaElement(c, color, fillImage, extent, extentThreshold, text, iconImage, rotationAngle);
         } else {
             return null;
@@ -135,4 +156,9 @@
             painter.drawArea((Relation) osm, myColor, fillImage, extent, extentThreshold, painter.isInactiveMode() || osm.isDisabled(), text);
         }
+
+        if (iconImage != null && painter.isShowIcons()) {
+            painter.drawAreaIcon(osm, iconImage, painter.isInactiveMode() || osm.isDisabled(), selected, member,
+                    iconImageAngle == null ? 0.0 : iconImageAngle.getRotationAngle(osm));
+        }
     }
 
@@ -147,10 +173,12 @@
                 Objects.equals(text, that.text) &&
                 Objects.equals(extent, that.extent) &&
-                Objects.equals(extentThreshold, that.extentThreshold);
+                Objects.equals(extentThreshold, that.extentThreshold) &&
+                Objects.equals(iconImage, that.iconImage) &&
+                Objects.equals(iconImageAngle, that.iconImageAngle);
     }
 
     @Override
     public int hashCode() {
-        return Objects.hash(super.hashCode(), color, fillImage, text, extent, extentThreshold);
+        return Objects.hash(super.hashCode(), color, fillImage, text, extent, extentThreshold, iconImage, iconImageAngle);
     }
 
@@ -158,5 +186,5 @@
     public String toString() {
         return "AreaElemStyle{" + super.toString() + "color=" + Utils.toString(color) +
-                " fillImage=[" + fillImage + "]}";
+                " fillImage=[" + fillImage + "] iconImage=[" + iconImage + "] iconImageAngle=[" + iconImageAngle + "]}";
     }
 }
