Index: trunk/src/org/openstreetmap/josm/data/osm/DataSetMerger.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/DataSetMerger.java	(revision 2590)
+++ trunk/src/org/openstreetmap/josm/data/osm/DataSetMerger.java	(revision 2591)
@@ -145,9 +145,5 @@
         if (myWay == null)
             throw new RuntimeException(tr("Missing merge target for way with id {0}", other.getUniqueId()));
-        if (!myWay.isIncomplete() || other.getNodesCount() == 0) return;
-        for (Node n: myWay.getNodes()) {
-            if (n.isIncomplete()) return;
-        }
-        myWay.setHasIncompleteNodes(false);
+        myWay.setHasIncompleteNodes();
     }
 
@@ -168,17 +164,7 @@
         if (myNode.isIncomplete() || myNode.isDeleted() || !myNode.isVisible()) return;
 
-        wayloop:
-            for (Way w: OsmPrimitive.getFilteredList(myNode.getReferrers(), Way.class)) {
-                if (w.isDeleted() || ! w.isVisible() || ! w.isIncomplete()) {
-                    continue;
-                }
-                for (Node n: w.getNodes()) {
-                    if (n.isIncomplete()) {
-                        continue wayloop;
-                    }
-                }
-                // all nodes are complete - set the way complete too
-                w.setHasIncompleteNodes(false);
-            }
+        for (Way w: OsmPrimitive.getFilteredList(myNode.getReferrers(), Way.class)) {
+            w.setHasIncompleteNodes();
+        }
     }
 
Index: trunk/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java	(revision 2590)
+++ trunk/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java	(revision 2591)
@@ -1119,4 +1119,7 @@
         StringBuilder builder = new StringBuilder();
 
+        if (isIncomplete()) {
+            builder.append("I");
+        }
         if (isModified()) {
             builder.append("M");
Index: trunk/src/org/openstreetmap/josm/data/osm/Way.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/Way.java	(revision 2590)
+++ trunk/src/org/openstreetmap/josm/data/osm/Way.java	(revision 2591)
@@ -378,6 +378,12 @@
 
     //TODO This method should not be necessary. hasIncomplete state should be updated automatically when incomplete state of nodes change
-    public void setHasIncompleteNodes(boolean hasIncompleteNodes) {
-        this.hasIncompleteNodes = hasIncompleteNodes;
+    public void setHasIncompleteNodes() {
+        hasIncompleteNodes = false;
+        for (Node node:getNodes()) {
+            if (node.isIncomplete()) {
+                hasIncompleteNodes = true;
+                break;
+            }
+        }
     }
 
Index: trunk/src/org/openstreetmap/josm/io/OsmReader.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/OsmReader.java	(revision 2590)
+++ trunk/src/org/openstreetmap/josm/io/OsmReader.java	(revision 2591)
@@ -418,5 +418,4 @@
         for (Long externalWayId: ways.keySet()) {
             Way w = (Way)externalIdMap.get("w" + externalWayId);
-            boolean hasIncompleteNodes = false;
             List<Node> wayNodes = new ArrayList<Node>();
             for (long id : ways.get(externalWayId)) {
@@ -438,18 +437,16 @@
                         ds.addPrimitive(n);
                     }
-                    hasIncompleteNodes = true;
                 }
                 wayNodes.add(n);
             }
             w.setNodes(wayNodes);
-            if (hasIncompleteNodes) {
+            w.setHasIncompleteNodes();
+            if (w.hasIncompleteNodes()) {
                 if (logger.isLoggable(Level.FINE)) {
                     logger.fine(tr("Marked way {0} with {1} nodes incomplete because at least one node was missing in the " +
                             "loaded data and is therefore incomplete too.", externalWayId, w.getNodesCount()));
                 }
-                w.setHasIncompleteNodes(true);
                 ds.addPrimitive(w);
             } else {
-                w.setHasIncompleteNodes(false);
                 ds.addPrimitive(w);
             }
