Index: trunk/src/org/openstreetmap/josm/data/osm/visitor/MapPaintVisitor.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/visitor/MapPaintVisitor.java	(revision 1628)
+++ trunk/src/org/openstreetmap/josm/data/osm/visitor/MapPaintVisitor.java	(revision 1629)
@@ -223,15 +223,16 @@
         else if (wayStyle instanceof AreaElemStyle)
         {
+            AreaElemStyle areaStyle = (AreaElemStyle) wayStyle;
             /* way with area style */
             //if(!profilerOmitDraw)
             //{
-            if (fillAreas > dist)
+            if (fillAreas > dist && (!areaStyle.closed || w.isClosed()))
             {
             //    profilerVisibleAreas++;
-                drawArea(w, w.selected ? selectedColor : ((AreaElemStyle)wayStyle).color);
+                drawArea(w, w.selected ? selectedColor : areaStyle.color);
                 if(!w.isClosed())
                     w.putError(tr("Area style way is not closed."), true);
             }
-            drawWay(w, ((AreaElemStyle)wayStyle).line, ((AreaElemStyle)wayStyle).color, w.selected);
+            drawWay(w, areaStyle.line, areaStyle.color, w.selected);
             //}
         }
@@ -456,8 +457,9 @@
             if(style instanceof AreaElemStyle)
             {
-                drawWay((Way)osm, ((AreaElemStyle)style).line, selectedColor, true);
-                if(area)
-                    drawArea((Way)osm, areaselected ? selectedColor
-                    : ((AreaElemStyle)style).color);
+                Way way = (Way)osm;
+                AreaElemStyle areaStyle = (AreaElemStyle)style;
+                drawWay(way, areaStyle.line, selectedColor, true);
+                if(area && (!areaStyle.closed || way.isClosed()))
+                    drawArea(way, areaselected ? selectedColor : areaStyle.color);
             }
             else
@@ -907,4 +909,10 @@
                         inner.add(p);
                     }
+                    public boolean isClosed()
+                    {
+                        return (poly.npoints >= 3
+                        && poly.xpoints[0] == poly.xpoints[poly.npoints-1]
+                        && poly.ypoints[0] == poly.ypoints[poly.npoints-1]);
+                    }
                     public Polygon get()
                     {
@@ -967,10 +975,12 @@
                     o.addInner(polygon);
                 }
+                AreaElemStyle areaStyle = (AreaElemStyle)wayStyle;
                 for (PolyData pd : poly)
                 {
-                    if(isPolygonVisible(pd.get()))
-                    {
-                        drawAreaPolygon(pd.get(), (pd.way.selected || r.selected) ? selectedColor
-                        : ((AreaElemStyle)wayStyle).color);
+                    Polygon p = pd.get();
+                    if(isPolygonVisible(p) && (!areaStyle.closed || pd.isClosed()))
+                    {
+                        drawAreaPolygon(p, (pd.way.selected || r.selected) ? selectedColor
+                        : areaStyle.color);
                         visible = true;
                     }
Index: trunk/src/org/openstreetmap/josm/gui/mappaint/AreaElemStyle.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/mappaint/AreaElemStyle.java	(revision 1628)
+++ trunk/src/org/openstreetmap/josm/gui/mappaint/AreaElemStyle.java	(revision 1629)
@@ -5,8 +5,10 @@
 {
     public Color color;
+    public boolean closed;
     public LineElemStyle line = null;
 
     public AreaElemStyle (AreaElemStyle a, long maxScale, long minScale) {
         this.color = a.color;
+        this.closed = a.closed;
         this.priority = a.priority;
         this.maxScale = maxScale;
@@ -17,4 +19,5 @@
     {
         this.color = a.color;
+        this.closed = a.closed;
         this.priority = a.priority;
         this.maxScale = a.maxScale;
Index: trunk/src/org/openstreetmap/josm/gui/mappaint/ElemStyleHandler.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/mappaint/ElemStyleHandler.java	(revision 1628)
+++ trunk/src/org/openstreetmap/josm/gui/mappaint/ElemStyleHandler.java	(revision 1629)
@@ -73,5 +73,5 @@
         System.out.println(styleName + " (" + rule.key + "=" + rule.value + "): " + message);
     }
-    
+
     private void startElementLine(String qName, Attributes atts, LineElemStyle line) {
         for (int count=0; count<atts.getLength(); count++)
@@ -110,5 +110,5 @@
                     if(dashed) {
                         line.dashed = 9;
-                    }                
+                    }
                 }
             } else if (atts.getQName(count).equals("dashedcolour"))
@@ -194,4 +194,6 @@
                     if (atts.getQName(count).equals("colour"))
                         rule.area.color=convertColor(atts.getValue(count));
+                    else if (atts.getQName(count).equals("closed"))
+                        rule.area.closed=Boolean.parseBoolean(atts.getValue(count));
                     else if(atts.getQName(count).equals("priority"))
                         rule.area.priority = Integer.parseInt(atts.getValue(count));
