Index: trunk/src/org/openstreetmap/josm/data/osm/visitor/MapPaintVisitor.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/visitor/MapPaintVisitor.java	(revision 1694)
+++ trunk/src/org/openstreetmap/josm/data/osm/visitor/MapPaintVisitor.java	(revision 1695)
@@ -227,5 +227,5 @@
             //if(!profilerOmitDraw)
             //{
-            if (fillAreas > dist && (!areaStyle.closed || w.isClosed()))
+            if (fillAreas > dist)
             {
             //    profilerVisibleAreas++;
@@ -460,5 +460,5 @@
                 AreaElemStyle areaStyle = (AreaElemStyle)style;
                 drawWay(way, areaStyle.line, selectedColor, true);
-                if(area && (!areaStyle.closed || way.isClosed()))
+                if(area)
                     drawArea(way, areaselected ? selectedColor : areaStyle.color);
             }
@@ -979,5 +979,5 @@
                 {
                     Polygon p = pd.get();
-                    if(isPolygonVisible(p) && (!areaStyle.closed || pd.isClosed()))
+                    if(isPolygonVisible(p))
                     {
                         drawAreaPolygon(p, (pd.way.selected || r.selected) ? selectedColor
Index: trunk/src/org/openstreetmap/josm/gui/mappaint/ElemStyles.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/mappaint/ElemStyles.java	(revision 1694)
+++ trunk/src/org/openstreetmap/josm/gui/mappaint/ElemStyles.java	(revision 1695)
@@ -11,4 +11,5 @@
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.OsmUtils;
+import org.openstreetmap.josm.data.osm.Way;
 import org.openstreetmap.josm.Main;
 
@@ -54,5 +55,5 @@
             return ret;
         }
-        private ElemStyle get(Map<String, String> keys)
+        private ElemStyle get(Map<String, String> keys, boolean noclosed)
         {
             AreaElemStyle retArea = null;
@@ -68,5 +69,6 @@
                 LineElemStyle styleLine;
                 String idx = "n" + key + "=" + val;
-                if((styleArea = areas.get(idx)) != null && (retArea == null || styleArea.priority > retArea.priority))
+                if((styleArea = areas.get(idx)) != null && (retArea == null
+                || styleArea.priority > retArea.priority) && (!noclosed || !styleArea.closed))
                     retArea = styleArea;
                 if((styleLine = lines.get(idx)) != null && (retLine == null || styleLine.priority > retLine.priority))
@@ -78,5 +80,6 @@
                     over.put(idx, styleLine);
                 idx = "b" + key + "=" + OsmUtils.getNamedOsmBoolean(val);
-                if((styleArea = areas.get(idx)) != null && (retArea == null || styleArea.priority > retArea.priority))
+                if((styleArea = areas.get(idx)) != null && (retArea == null
+                || styleArea.priority > retArea.priority) && (!noclosed || !styleArea.closed))
                     retArea = styleArea;
                 if((styleLine = lines.get(idx)) != null && (retLine == null || styleLine.priority > retLine.priority))
@@ -88,5 +91,6 @@
                     over.put(idx, styleLine);
                 idx = "x" + key;
-                if((styleArea = areas.get(idx)) != null && (retArea == null || styleArea.priority > retArea.priority))
+                if((styleArea = areas.get(idx)) != null && (retArea == null
+                || styleArea.priority > retArea.priority) && (!noclosed || !styleArea.closed))
                     retArea = styleArea;
                 if((styleLine = lines.get(idx)) != null && (retLine == null || styleLine.priority > retLine.priority))
@@ -118,5 +122,6 @@
         {
             return (osm.keys == null) ? null :
-            ((osm instanceof Node) ? getNode(osm.keys) : get(osm.keys));
+            ((osm instanceof Node) ? getNode(osm.keys) : get(osm.keys,
+            osm instanceof Way && !((Way)osm).isClosed()));
         }
 
@@ -130,4 +135,5 @@
             if(o.keys != null && !(o instanceof Node))
             {
+                boolean noclosed = o instanceof Way && !((Way)o).isClosed();
                 Iterator<String> iterator = o.keys.keySet().iterator();
                 while(iterator.hasNext())
@@ -135,7 +141,10 @@
                     String key = iterator.next();
                     String val = o.keys.get(key);
-                    if(areas.containsKey("n" + key + "=" + val)
-                    || areas.containsKey("b" + key + "=" + OsmUtils.getNamedOsmBoolean(val))
-                    || areas.containsKey("x" + key))
+                    AreaElemStyle s = areas.get("n" + key + "=" + val);
+                    if(s == null || (s.closed && noclosed))
+                        s = areas.get("b" + key + "=" + OsmUtils.getNamedOsmBoolean(val));
+                    if(s == null || (s.closed && noclosed))
+                        s = areas.get("x" + key);
+                    if(s != null && !(s.closed && noclosed))
                         return true;
                 }
