Index: /trunk/src/org/openstreetmap/josm/data/osm/DataSetMerger.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/DataSetMerger.java	(revision 2608)
+++ /trunk/src/org/openstreetmap/josm/data/osm/DataSetMerger.java	(revision 2609)
@@ -145,5 +145,4 @@
         if (myWay == null)
             throw new RuntimeException(tr("Missing merge target for way with id {0}", other.getUniqueId()));
-        myWay.setHasIncompleteNodes();
     }
 
@@ -163,8 +162,4 @@
             throw new RuntimeException(tr("Missing merge target for node with id {0}", other.getUniqueId()));
         if (myNode.isIncomplete() || myNode.isDeleted() || !myNode.isVisible()) return;
-
-        for (Way w: OsmPrimitive.getFilteredList(myNode.getReferrers(), Way.class)) {
-            w.setHasIncompleteNodes();
-        }
     }
 
Index: /trunk/src/org/openstreetmap/josm/data/osm/Way.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/Way.java	(revision 2608)
+++ /trunk/src/org/openstreetmap/josm/data/osm/Way.java	(revision 2609)
@@ -26,5 +26,4 @@
     private Node[] nodes = new Node[0];
     private BBox bbox;
-    private boolean hasIncompleteNodes;
 
     /**
@@ -377,17 +376,10 @@
     }
 
-    //TODO This method should not be necessary. hasIncomplete state should be updated automatically when incomplete state of nodes change
-    public void setHasIncompleteNodes() {
-        hasIncompleteNodes = false;
+    public boolean hasIncompleteNodes() {
         for (Node node:getNodes()) {
-            if (node.isIncomplete()) {
-                hasIncompleteNodes = true;
-                break;
-            }
-        }
-    }
-
-    public boolean hasIncompleteNodes() {
-        return hasIncompleteNodes;
+            if (node.isIncomplete())
+                return true;
+        }
+        return false;
     }
 
Index: /trunk/src/org/openstreetmap/josm/io/MultiFetchServerObjectReader.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/io/MultiFetchServerObjectReader.java	(revision 2608)
+++ /trunk/src/org/openstreetmap/josm/io/MultiFetchServerObjectReader.java	(revision 2609)
@@ -193,5 +193,7 @@
                 }
             }
-            appendGeneric(member.getMember());
+            if (!member.getMember().isIncomplete()) {
+                appendGeneric(member.getMember());
+            }
         }
         return this;
@@ -375,5 +377,5 @@
     protected void rememberNodesOfIncompleteWaysToLoad(DataSet from) {
         for (Way w: from.getWays()) {
-            if (w.isIncomplete()) {
+            if (w.hasIncompleteNodes()) {
                 for (Node n: w.getNodes()) {
                     if (n.isIncomplete()) {
Index: /trunk/src/org/openstreetmap/josm/io/OsmReader.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/io/OsmReader.java	(revision 2608)
+++ /trunk/src/org/openstreetmap/josm/io/OsmReader.java	(revision 2609)
@@ -482,5 +482,4 @@
             }
             w.setNodes(wayNodes);
-            w.setHasIncompleteNodes();
             if (w.hasIncompleteNodes()) {
                 if (logger.isLoggable(Level.FINE)) {
