Index: /trunk/src/org/openstreetmap/josm/actions/UpdateSelectionAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/UpdateSelectionAction.java	(revision 2443)
+++ /trunk/src/org/openstreetmap/josm/actions/UpdateSelectionAction.java	(revision 2444)
@@ -2,6 +2,6 @@
 package org.openstreetmap.josm.actions;
 
+import static org.openstreetmap.josm.gui.help.HelpUtil.ht;
 import static org.openstreetmap.josm.tools.I18n.tr;
-import static org.openstreetmap.josm.gui.help.HelpUtil.ht;
 
 import java.awt.event.ActionEvent;
@@ -67,8 +67,8 @@
 
     /**
-     * Updates the data for for the {@see OsmPrimitive}s with id <code>id</code>
+     * Updates the data for  the {@see OsmPrimitive}s with id <code>id</code>
      * with the data currently kept on the server.
      *
-     * @param id  the id of a primitive in the {@see DataSet} of the current edit layser
+     * @param id  the id of a primitive in the {@see DataSet} of the current edit layer
      * @exception IllegalStateException thrown if there is no primitive with <code>id</code> in
      *   the current dataset
@@ -89,5 +89,5 @@
      */
     public UpdateSelectionAction() {
-        super(tr("Update selections"),
+        super(tr("Update selection"),
                 "updateselection",
                 tr("Updates the currently selected objects from the server (re-downloads data)"),
@@ -124,5 +124,5 @@
             JOptionPane.showMessageDialog(
                     Main.parent,
-                    tr("There are no selected primitives to update."),
+                    tr("There are no selected objects to update."),
                     tr("Selection empty"),
                     JOptionPane.INFORMATION_MESSAGE
@@ -145,5 +145,5 @@
 
         public UpdatePrimitivesTask(Collection<? extends OsmPrimitive> toUpdate) {
-            super("Update primitives", false /* don't ignore exception*/);
+            super(tr("Update objects"), false /* don't ignore exception*/);
             canceled = false;
             this.toUpdate = toUpdate;
@@ -168,4 +168,5 @@
             if (ds != null) {
                 Main.map.mapView.getEditLayer().mergeFrom(ds);
+                Main.map.mapView.getEditLayer().onPostDownloadFromServer();
             }
         }
@@ -215,5 +216,5 @@
                 DataSetMerger merger = new DataSetMerger(ds, theirDataSet);
                 merger.merge();
-                // a ways loaded with MultiFetch may be incomplete because at least one of its
+                // a way loaded with MultiFetch may be incomplete because at least one of its
                 // nodes isn't present in the local data set. We therefore fully load all
                 // incomplete ways.
Index: /trunk/src/org/openstreetmap/josm/data/osm/DataSetMerger.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/DataSetMerger.java	(revision 2443)
+++ /trunk/src/org/openstreetmap/josm/data/osm/DataSetMerger.java	(revision 2444)
@@ -135,8 +135,8 @@
     }
 
-    protected OsmPrimitive getMergeTarget(OsmPrimitive mergeSource) {
+    protected OsmPrimitive getMergeTarget(OsmPrimitive mergeSource) throws IllegalStateException{
         Long targetId = mergedMap.get(mergeSource.getUniqueId());
         if (targetId == null)
-            throw new RuntimeException(tr("Missing merge target for way with id {0}", mergeSource.getUniqueId()));
+            return null;
         return targetDataSet.getPrimitiveById(targetId, mergeSource.getType());
     }
@@ -306,8 +306,8 @@
             childrenToMerge.add(source.getUniqueId());
         } else if (target.isModified() && ! source.isModified() && target.getVersion() == source.getVersion()) {
-            // my is same as other but mine is modified
-            // => keep mine
+            // target is same as source but target is modified
+            // => keep target
         } else if (! target.hasEqualSemanticAttributes(source)) {
-            // my is modified and is not semantically equal with other. Can't automatically
+            // target is modified and is not semantically equal with source. Can't automatically
             // resolve the differences
             // =>  create a conflict
Index: /trunk/src/org/openstreetmap/josm/io/OsmReader.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/io/OsmReader.java	(revision 2443)
+++ /trunk/src/org/openstreetmap/josm/io/OsmReader.java	(revision 2444)
@@ -23,4 +23,5 @@
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
+import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
 import org.openstreetmap.josm.data.osm.Relation;
 import org.openstreetmap.josm.data.osm.RelationMember;
@@ -428,6 +429,12 @@
                                 )
                         );
-                    n = new Node(id);
-                    n.incomplete = true;
+                    // create an incomplete node if necessary
+                    //
+                    n = (Node)ds.getPrimitiveById(id,OsmPrimitiveType.NODE);
+                    if (n == null) {
+                        n = new Node(id);
+                        n.incomplete = true;
+                        ds.addPrimitive(n);
+                    }
                     incomplete = true;
                 }
