Index: /trunk/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java	(revision 2602)
+++ /trunk/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java	(revision 2603)
@@ -360,4 +360,9 @@
     }
 
+    public boolean isDrawable()
+    {
+        return !isDeleted() && !isIncomplete() && !isFiltered();
+    }
+
     /**
      * Replies true if this primitive is either unknown to the server (i.e. its id
Index: /trunk/src/org/openstreetmap/josm/data/osm/visitor/MapPaintVisitor.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/visitor/MapPaintVisitor.java	(revision 2602)
+++ /trunk/src/org/openstreetmap/josm/data/osm/visitor/MapPaintVisitor.java	(revision 2603)
@@ -518,5 +518,5 @@
             for (RelationMember m : r.getMembers())
             {
-                if (m.isWay() && drawable(m.getMember()))
+                if (m.isWay() && m.getMember().isDrawable())
                 {
                     drawSelectedMember(m.getMember(), styles != null ? getPrimitiveStyle(m.getMember())
@@ -1312,9 +1312,4 @@
     }
 
-    boolean drawable(OsmPrimitive osm)
-    {
-        return !osm.isDeleted() && !osm.isIncomplete() && !osm.isFiltered();
-    }
-
     @Override
     public void getColors()
@@ -1384,5 +1379,5 @@
             /*** RELATIONS ***/
             for (final Relation osm: data.getRelations()) {
-                if (drawable(osm)) {
+                if (osm.isDrawable()) {
                     paintUnselectedRelation(osm);
                 }
@@ -1391,5 +1386,5 @@
             /*** AREAS ***/
             for (final Way osm : selectedLast(data, data.searchWays(bbox))) {
-                if (drawable(osm) && osm.mappaintDrawnCode != paintid) {
+                if (osm.isDrawable() && osm.mappaintDrawnCode != paintid) {
                     if (isPrimitiveArea(osm) && osm.mappaintDrawnAreaCode != paintid) {
                         drawWay(osm, fillAreas);
@@ -1405,7 +1400,16 @@
             }
         } else {
+            drawMultipolygon = false;
+
+            /*** RELATIONS ***/
+            for (final Relation osm: data.getRelations()) {
+                if (osm.isDrawable()) {
+                    paintUnselectedRelation(osm);
+                }
+            }
+
             /*** WAYS (filling disabled)  ***/
             for (final Way way: data.getWays()) {
-                if (drawable(way) && !data.isSelected(way)) {
+                if (way.isDrawable() && !data.isSelected(way)) {
                     drawWay(way, 0);
                 }
@@ -1429,5 +1433,5 @@
                         /* TODO: is it possible to do this like the nodes/ways code? */
                         for (RelationMember m : r.getMembers()) {
-                            if (m.isNode() && drawable(m.getMember())) {
+                            if (m.isNode() && m.getMember().isDrawable()) {
                                 drawSelectedMember(m.getMember(), styles != null ? getPrimitiveStyle(m.getMember()) : null, true, true);
                             }
