Index: /trunk/src/org/openstreetmap/josm/data/osm/visitor/paint/relations/Multipolygon.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/visitor/paint/relations/Multipolygon.java	(revision 4648)
+++ /trunk/src/org/openstreetmap/josm/data/osm/visitor/paint/relations/Multipolygon.java	(revision 4649)
@@ -336,4 +336,6 @@
     private final List<PolyData> outerPolygons = new ArrayList<PolyData>();
     private final List<PolyData> combinedPolygons = new ArrayList<PolyData>();
+    
+    private boolean incomplete;
 
     public Multipolygon(Relation r) {
@@ -346,5 +348,7 @@
         // Fill inner and outer list with valid ways
         for (RelationMember m : r.getMembers()) {
-            if (m.getMember().isDrawable()) {
+            if (m.getMember().isIncomplete()) {
+                this.incomplete = true;
+            } else if (m.getMember().isDrawable()) {
                 if (m.isWay()) {
                     Way w = m.getWay();
@@ -370,4 +374,8 @@
             addInnerToOuters();
         }
+    }
+    
+    public final boolean isIncomplete() {
+        return incomplete;
     }
 
Index: /trunk/src/org/openstreetmap/josm/data/osm/visitor/paint/relations/MultipolygonCache.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/visitor/paint/relations/MultipolygonCache.java	(revision 4648)
+++ /trunk/src/org/openstreetmap/josm/data/osm/visitor/paint/relations/MultipolygonCache.java	(revision 4649)
@@ -229,5 +229,23 @@
     @Override
     public void dataChanged(DataChangedEvent event) {
-        // Do nothing
+        // Do not call updateMultipolygonsReferringTo as getPrimitives() 
+        // can return all the data set primitives for this event
+        Collection<Map<Relation, Multipolygon>> maps = null;
+        for (OsmPrimitive p : event.getPrimitives()) {
+            if (isMultipolygon(p)) {
+                if (maps == null) {
+                    maps = getMapsFor(event.getDataset());
+                }
+                for (Map<Relation, Multipolygon> map : maps) {
+                    Multipolygon mp = map.get(p);
+                    // DataChangedEvent is sent after downloading incomplete members,
+                    // without having received RelationMembersChangedEvent or PrimitivesAddedEvent
+                    if (mp != null && mp.isIncomplete()) {
+                        // This ensures previously incomplete multipolygons will be correctly redrawn
+                        map.remove(p);
+                    }
+                }
+            }
+        }
     }
 
