Index: trunk/src/org/openstreetmap/josm/data/osm/visitor/MapPaintVisitor.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/visitor/MapPaintVisitor.java	(revision 1275)
+++ trunk/src/org/openstreetmap/josm/data/osm/visitor/MapPaintVisitor.java	(revision 1276)
@@ -414,5 +414,5 @@
                 /* nodes drawn on second call */
                 if(!(m.member instanceof Node))
-                    drawSelected(m.member, styles != null ? styles.get(m.member)
+                    drawSelectedMember(m.member, styles != null ? styles.get(m.member)
                     : null, true, true);
             }
@@ -420,5 +420,5 @@
     }
 
-    public void drawSelected(OsmPrimitive osm, ElemStyle style, Boolean area,
+    public void drawSelectedMember(OsmPrimitive osm, ElemStyle style, Boolean area,
     Boolean areaselected)
     {
@@ -459,4 +459,7 @@
         // draw multipolygon relations including their ways
         // other relations are only drawn when selected
+        
+        // we are in the "draw selected" phase
+        // TODO: is it necessary to check for r.selected?
         if(r.selected && selectedCall)
         {
@@ -466,16 +469,21 @@
                 && m.member instanceof Node)
                 {
-                    drawSelected(m.member, styles != null ? styles.get(m.member) : null, true, true);
+                    drawSelectedMember(m.member, styles != null ? styles.get(m.member) : null, true, true);
                 }
             }
             return;
         }
-        if (!drawMultipolygon || r.keys == null || !"multipolygon".equals(r.keys.get("type")))
-        {
-            if(r.selected)
-                drawSelectedRelation(r);
+        
+        if (drawMultipolygon && r.keys != null && "multipolygon".equals(r.keys.get("type")))
+        {
+            drawMultipolygon(r);
             return;
         }
-
+        
+        if(r.selected)
+            drawSelectedRelation(r);
+    }
+
+    public void drawMultipolygon(Relation r) {
         Collection<Way> inner = new LinkedList<Way>();
         Collection<Way> outer = new LinkedList<Way>();
@@ -516,5 +524,5 @@
                             outer.add(w);
                         else if(r.selected)
-                            drawSelected(m.member, styles != null ? styles.get(m.member) : null, true, true);
+                            drawSelectedMember(m.member, styles != null ? styles.get(m.member) : null, true, true);
                     }
                 }
@@ -703,5 +711,5 @@
                     if(r.selected)
                     {
-                        drawSelected(wInner, innerStyle,
+                        drawSelectedMember(wInner, innerStyle,
                         !wayStyle.equals(innerStyle), wInner.selected);
                     }
@@ -738,5 +746,5 @@
                     if(r.selected)
                     {
-                        drawSelected(wOuter, outerStyle, false, false);
+                        drawSelectedMember(wOuter, outerStyle, false, false);
                     }
                     else if(outerStyle instanceof AreaElemStyle)
@@ -1056,9 +1064,4 @@
         /*** DISPLAY CACHED SEGMENTS (WAYS) NOW ***/
         displaySegments();
-        /*if(profiler)
-        {
-            System.out.format("DS       : %4dms\n", (java.lang.System.currentTimeMillis()-profilerLast));
-            profilerLast = java.lang.System.currentTimeMillis();
-        }*/
 
         /*** NODES ***/
@@ -1101,9 +1104,4 @@
 
             displaySegments(null);
-            /*if(profiler)
-            {
-                System.out.format("VirtualDS: %4dms\n", (java.lang.System.currentTimeMillis()-profilerLast));
-                profilerLast = java.lang.System.currentTimeMillis();
-            }*/
         }
 
