Index: trunk/src/org/openstreetmap/josm/gui/mappaint/ElemStyles.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/mappaint/ElemStyles.java	(revision 3816)
+++ trunk/src/org/openstreetmap/josm/gui/mappaint/ElemStyles.java	(revision 3817)
@@ -43,5 +43,13 @@
 
     public ElemStyle get(OsmPrimitive osm) {
-        return get(osm, false);
+        return (!osm.hasKeys()) ? null : ((osm instanceof Node) ? getNode(osm) : get(osm, false));
+    }
+
+    public ElemStyle getNode(OsmPrimitive osm) {
+        IconElemStyle icon = null;
+        for (StyleSource s : getStyleSources()) {
+            icon = s.getNode(osm, icon);
+        }
+        return icon;
     }
 
@@ -49,36 +57,21 @@
         if (!osm.hasKeys())
             return null;
-
-        if (osm instanceof Node) {
-            IconElemStyle icon = null;
-            for (StyleSource s : getStyleSources()) {
-                icon = s.getNode(osm, icon);
-            }
-            return icon;
-        } else {
-            boolean noclosed;
-            if (forceArea) {
-                noclosed = false;
-            } else {
-                noclosed = osm instanceof Way && !((Way) osm).isClosed();
-            }
-            AreaElemStyle area = null;
-            LineElemStyle line = null;
-            ElemStyle result = null;
-            for (StyleSource s : getStyleSources()) {
-                result = s.get(osm, noclosed, area, line);
-                if (result instanceof LineElemStyle) {
-                    area = null;
-                    line = (LineElemStyle) result;
-                } else if (result instanceof AreaElemStyle) {
-                    area = (AreaElemStyle) result;
-                    if (area.getLineStyle() != null) {
-                        line = area.getLineStyle();
-                    }
-                } else if (result != null)
-                    throw new AssertionError();
-            }
-            return result;
+        AreaElemStyle area = null;
+        LineElemStyle line = null;
+        ElemStyle result = null;
+        for (StyleSource s : getStyleSources()) {
+            result = s.get(osm, forceArea || !(osm instanceof Way) || ((Way) osm).isClosed(), area, line);
+            if (result instanceof LineElemStyle) {
+                area = null;
+                line = (LineElemStyle) result;
+            } else if (result instanceof AreaElemStyle) {
+                area = (AreaElemStyle) result;
+                if (area.getLineStyle() != null) {
+                    line = area.getLineStyle();
+                }
+            } else if (result != null)
+                throw new AssertionError();
         }
+        return result;
     }
 
@@ -111,5 +104,5 @@
 
     public IconElemStyle getIcon(OsmPrimitive osm) {
-        return osm.hasKeys() ? (IconElemStyle) get(osm) : null;
+        return osm.hasKeys() ? (IconElemStyle) getNode(osm) : null;
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/mappaint/StyleSource.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/mappaint/StyleSource.java	(revision 3816)
+++ trunk/src/org/openstreetmap/josm/gui/mappaint/StyleSource.java	(revision 3817)
@@ -67,5 +67,10 @@
     }
 
-    public ElemStyle get(OsmPrimitive primitive, boolean noclosed, AreaElemStyle area, LineElemStyle line) {
+    /**
+     * @param closed The primitive is a closed way or we pretend it is closed.
+     *  This is useful for multipolygon relations and outer ways of untagged
+     *  multipolygon relations.
+     */
+    public ElemStyle get(OsmPrimitive primitive, boolean closed, AreaElemStyle area, LineElemStyle line) {
         String lineIdx = null;
         HashMap<String, LineElemStyle> overlayMap = new HashMap<String, LineElemStyle>();
@@ -75,5 +80,5 @@
             LineElemStyle styleLine;
             String idx = "n" + key + "=" + val;
-            if ((styleArea = areas.get(idx)) != null && (area == null || styleArea.priority >= area.priority) && (!noclosed || !styleArea.closed)) {
+            if ((styleArea = areas.get(idx)) != null && (area == null || styleArea.priority >= area.priority) && (closed || !styleArea.closed)) {
                 area = styleArea;
             }
@@ -86,5 +91,5 @@
             }
             idx = "b" + key + "=" + OsmUtils.getNamedOsmBoolean(val);
-            if ((styleArea = areas.get(idx)) != null && (area == null || styleArea.priority >= area.priority) && (!noclosed || !styleArea.closed)) {
+            if ((styleArea = areas.get(idx)) != null && (area == null || styleArea.priority >= area.priority) && (closed || !styleArea.closed)) {
                 area = styleArea;
             }
@@ -97,5 +102,5 @@
             }
             idx = "x" + key;
-            if ((styleArea = areas.get(idx)) != null && (area == null || styleArea.priority >= area.priority) && (!noclosed || !styleArea.closed)) {
+            if ((styleArea = areas.get(idx)) != null && (area == null || styleArea.priority >= area.priority) && (closed || !styleArea.closed)) {
                 area = styleArea;
             }
@@ -109,5 +114,5 @@
         }
         for (AreaElemStyle s : areasList) {
-            if ((area == null || s.priority >= area.priority) && (!noclosed || !s.closed) && s.check(primitive)) {
+            if ((area == null || s.priority >= area.priority) && (closed || !s.closed) && s.check(primitive)) {
                 area = s;
             }
