Index: /trunk/src/org/openstreetmap/josm/actions/UpdateSelectionAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/UpdateSelectionAction.java	(revision 2076)
+++ /trunk/src/org/openstreetmap/josm/actions/UpdateSelectionAction.java	(revision 2077)
@@ -16,4 +16,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.Way;
@@ -39,7 +40,7 @@
      * @param id the primitive id
      */
-    protected void handlePrimitiveGoneException(long id) {
+    protected void handlePrimitiveGoneException(long id, OsmPrimitiveType type) {
         MultiFetchServerObjectReader reader = new MultiFetchServerObjectReader();
-        reader.append(getCurrentDataSet(),id);
+        reader.append(getCurrentDataSet(),id, type);
         DataSet ds = null;
         try {
@@ -73,8 +74,8 @@
      *
      */
-    public void updatePrimitive(long id) throws IllegalStateException{
+    public void updatePrimitive(OsmPrimitiveType type, long id) throws IllegalStateException{
         if (getEditLayer() == null)
             throw new IllegalStateException(tr("No current dataset found"));
-        OsmPrimitive primitive = getEditLayer().data.getPrimitiveById(id);
+        OsmPrimitive primitive = getEditLayer().data.getPrimitiveById(id, type);
         if (primitive == null)
             throw new IllegalStateException(tr("Didn't find a primitive with id {0} in the current dataset", id));
Index: /trunk/src/org/openstreetmap/josm/actions/UploadAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/UploadAction.java	(revision 2076)
+++ /trunk/src/org/openstreetmap/josm/actions/UploadAction.java	(revision 2077)
@@ -41,4 +41,5 @@
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
+import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
 import org.openstreetmap.josm.gui.ExceptionDialogUtil;
 import org.openstreetmap.josm.gui.ExtendedDialog;
@@ -191,6 +192,6 @@
      * @param id the primitive ID
      */
-    protected void synchronizePrimitive(final String id) {
-        Main.worker.execute(new UpdatePrimitiveTask(Long.parseLong(id)));
+    protected void synchronizePrimitive(final OsmPrimitiveType type, final long id) {
+        Main.worker.execute(new UpdatePrimitiveTask(type, id));
     }
 
@@ -217,7 +218,7 @@
      * @param myVersion  the version of the primitive in the local dataset
      */
-    protected void handleUploadConflictForKnownConflict(String primitiveType, String id, String serverVersion, String myVersion) {
+    protected void handleUploadConflictForKnownConflict(OsmPrimitiveType primitiveType, long id, String serverVersion, String myVersion) {
         Object[] options = new Object[] {
-                tr("Synchronize {0} {1} only", tr(primitiveType), id),
+                tr("Synchronize {0} {1} only", tr(primitiveType.getAPIName()), id),
                 tr("Synchronize entire dataset"),
                 tr("Cancel")
@@ -232,5 +233,5 @@
                 + "Click <strong>{5}</strong> to synchronize the entire local dataset with the server.<br>"
                 + "Click <strong>{6}</strong> to abort and continue editing.<br></html>",
-                tr(primitiveType), id, serverVersion, myVersion,
+                tr(primitiveType.getAPIName()), id, serverVersion, myVersion,
                 options[0], options[1], options[2]
         );
@@ -247,11 +248,11 @@
         );
         switch(ret) {
-            case JOptionPane.CLOSED_OPTION: return;
-            case JOptionPane.CANCEL_OPTION: return;
-            case 0: synchronizePrimitive(id); break;
-            case 1: synchronizeDataSet(); break;
-            default:
-                // should not happen
-                throw new IllegalStateException(tr("unexpected return value. Got {0}", ret));
+        case JOptionPane.CLOSED_OPTION: return;
+        case JOptionPane.CANCEL_OPTION: return;
+        case 0: synchronizePrimitive(primitiveType, id); break;
+        case 1: synchronizeDataSet(); break;
+        default:
+            // should not happen
+            throw new IllegalStateException(tr("unexpected return value. Got {0}", ret));
         }
     }
@@ -287,10 +288,10 @@
         );
         switch(ret) {
-            case JOptionPane.CLOSED_OPTION: return;
-            case 1: return;
-            case 0: synchronizeDataSet(); break;
-            default:
-                // should not happen
-                throw new IllegalStateException(tr("unexpected return value. Got {0}", ret));
+        case JOptionPane.CLOSED_OPTION: return;
+        case 1: return;
+        case 0: synchronizeDataSet(); break;
+        default:
+            // should not happen
+            throw new IllegalStateException(tr("unexpected return value. Got {0}", ret));
         }
     }
@@ -306,5 +307,5 @@
         Matcher m = p.matcher(e.getErrorHeader());
         if (m.matches()) {
-            handleUploadConflictForKnownConflict(m.group(3), m.group(4), m.group(2),m.group(1));
+            handleUploadConflictForKnownConflict(OsmPrimitiveType.from(m.group(3)), Long.parseLong(m.group(4)), m.group(2),m.group(1));
         } else {
             logger.warning(tr("Warning: error header \"{0}\" did not match expected pattern \"{1}\"", e.getErrorHeader(),pattern));
@@ -326,7 +327,7 @@
      * @see UpdateSelectionAction#handlePrimitiveGoneException(long)
      */
-    protected void handleGoneForKnownPrimitive(String primitiveType, String id) {
+    protected void handleGoneForKnownPrimitive(OsmPrimitiveType primitiveType, String id) {
         UpdateSelectionAction act = new UpdateSelectionAction();
-        act.handlePrimitiveGoneException(Long.parseLong(id));
+        act.handlePrimitiveGoneException(Long.parseLong(id),primitiveType);
     }
 
@@ -344,5 +345,5 @@
         Matcher m = p.matcher(e.getErrorHeader());
         if (m.matches()) {
-            handleGoneForKnownPrimitive(m.group(1), m.group(2));
+            handleGoneForKnownPrimitive(OsmPrimitiveType.from(m.group(1)), m.group(2));
         } else {
             logger.warning(tr("Error header \"{0}\" does not match expected pattern \"{1}\"",e.getErrorHeader(), pattern));
@@ -424,8 +425,10 @@
         private Exception lastException = null;
         private long id;
-
-        public UpdatePrimitiveTask(long id) {
+        private OsmPrimitiveType type;
+
+        public UpdatePrimitiveTask(OsmPrimitiveType type, long id) {
             super(tr("Updating primitive"),false /* don't ignore exceptions */);
             this.id = id;
+            this.type = type;
         }
 
@@ -433,5 +436,5 @@
             try {
                 UpdateSelectionAction act = new UpdateSelectionAction();
-                act.updatePrimitive(id);
+                act.updatePrimitive(type, id);
             } catch (Exception sxe) {
                 if (uploadCancelled) {
Index: /trunk/src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmTaskList.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmTaskList.java	(revision 2076)
+++ /trunk/src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmTaskList.java	(revision 2077)
@@ -125,12 +125,46 @@
         final OsmDataLayer editLayer = Main.map.mapView.getEditLayer();
         if (editLayer != null) {
-            Set<Long> myPrimitiveIds = editLayer.data.getCompletePrimitiveIds();
-            Set<Long> downloadedIds = getDownloadedIds();
-            myPrimitiveIds.removeAll(downloadedIds);
-            myPrimitiveIds.remove(new Long(0)); // ignore new primitives
-            if (! myPrimitiveIds.isEmpty()) {
-                handlePotentiallyDeletedPrimitives(myPrimitiveIds);
-            }
-        }
+            Set<OsmPrimitive> myPrimitives = getCompletePrimitives(editLayer.data);
+            for (DownloadTask task : osmTasks) {
+                if(task instanceof DownloadOsmTask) {
+                    DataSet ds = ((DownloadOsmTask)task).getDownloadedData();
+                    if (ds != null) {
+                        myPrimitives.removeAll(ds.nodes);
+                        myPrimitives.removeAll(ds.ways);
+                        myPrimitives.removeAll(ds.relations);
+                    }
+                }
+            }
+            if (! myPrimitives.isEmpty()) {
+                handlePotentiallyDeletedPrimitives(myPrimitives);
+            }
+        }
+    }
+
+
+    /**
+     * Replies the set of ids of all complete primitives (i.e. those with
+     * ! primitive.incomplete)
+     *
+     * @return the set of ids of all complete primitives
+     */
+    protected Set<OsmPrimitive> getCompletePrimitives(DataSet ds) {
+        HashSet<OsmPrimitive> ret = new HashSet<OsmPrimitive>();
+        for (OsmPrimitive primitive : ds.nodes) {
+            if (!primitive.incomplete && primitive.getId() == 0) {
+                ret.add(primitive);
+            }
+        }
+        for (OsmPrimitive primitive : ds.ways) {
+            if (! primitive.incomplete && primitive.getId() == 0) {
+                ret.add(primitive);
+            }
+        }
+        for (OsmPrimitive primitive : ds.relations) {
+            if (! primitive.incomplete && primitive.getId() == 0) {
+                ret.add(primitive);;
+            }
+        }
+        return ret;
     }
 
@@ -141,9 +175,7 @@
      * @param potentiallyDeleted a set of ids to check update from the server
      */
-    protected void updatePotentiallyDeletedPrimitives(Set<Long> potentiallyDeleted) {
-        DataSet ds =  Main.map.mapView.getEditLayer().data;
+    protected void updatePotentiallyDeletedPrimitives(Set<OsmPrimitive> potentiallyDeleted) {
         final ArrayList<OsmPrimitive> toSelect = new ArrayList<OsmPrimitive>();
-        for (Long id : potentiallyDeleted) {
-            OsmPrimitive primitive = ds.getPrimitiveById(id);
+        for (OsmPrimitive primitive : potentiallyDeleted) {
             if (primitive != null) {
                 toSelect.add(primitive);
@@ -167,5 +199,5 @@
      * @param potentiallyDeleted a set of primitives (given by their ids)
      */
-    protected void handlePotentiallyDeletedPrimitives(Set<Long> potentiallyDeleted) {
+    protected void handlePotentiallyDeletedPrimitives(Set<OsmPrimitive> potentiallyDeleted) {
         String [] options = {
                 "Check on the server",
@@ -197,41 +229,8 @@
         );
         switch(ret) {
-            case JOptionPane.CLOSED_OPTION: return;
-            case JOptionPane.NO_OPTION: return;
-            case JOptionPane.YES_OPTION: updatePotentiallyDeletedPrimitives(potentiallyDeleted); break;
-        }
-    }
-
-    /**
-     * replies true, if the primitive with id <code>id</code> was downloaded into the
-     * dataset <code>ds</code>
-     *
-     * @param id the id
-     * @param ds the dataset
-     * @return true, if the primitive with id <code>id</code> was downloaded into the
-     * dataset <code>ds</code>; false otherwise
-     */
-    protected boolean wasDownloaded(long id, DataSet ds) {
-        OsmPrimitive primitive = ds.getPrimitiveById(id);
-        return primitive != null;
-    }
-
-    /**
-     * replies true, if the primitive with id <code>id</code> was downloaded into the
-     * dataset of one of the download tasks
-     *
-     * @param id the id
-     * @return true, if the primitive with id <code>id</code> was downloaded into the
-     * dataset of one of the download tasks
-     *
-     */
-    public boolean wasDownloaded(long id) {
-        for (DownloadTask task : osmTasks) {
-            if(task instanceof DownloadOsmTask) {
-                DataSet ds = ((DownloadOsmTask)task).getDownloadedData();
-                if(wasDownloaded(id,ds)) return true;
-            }
-        }
-        return false;
+        case JOptionPane.CLOSED_OPTION: return;
+        case JOptionPane.NO_OPTION: return;
+        case JOptionPane.YES_OPTION: updatePotentiallyDeletedPrimitives(potentiallyDeleted); break;
+        }
     }
 
@@ -241,11 +240,13 @@
      * @return the set of primitive ids which have been downloaded by this task list
      */
-    public Set<Long> getDownloadedIds() {
-        HashSet<Long> ret = new HashSet<Long>();
+    public Set<OsmPrimitive> getDownloadedPrimitives() {
+        HashSet<OsmPrimitive> ret = new HashSet<OsmPrimitive>();
         for (DownloadTask task : osmTasks) {
             if(task instanceof DownloadOsmTask) {
                 DataSet ds = ((DownloadOsmTask)task).getDownloadedData();
                 if (ds != null) {
-                    ret.addAll(ds.getPrimitiveIds());
+                    ret.addAll(ds.nodes);
+                    ret.addAll(ds.ways);
+                    ret.addAll(ds.relations);
                 }
             }
Index: /trunk/src/org/openstreetmap/josm/data/osm/DataSet.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/DataSet.java	(revision 2076)
+++ /trunk/src/org/openstreetmap/josm/data/osm/DataSet.java	(revision 2077)
@@ -313,17 +313,23 @@
      *
      * @param id  the id, > 0 required
+     * @param type the type of  the primitive. Must not be null.
      * @return the primitive
      * @exception IllegalArgumentException thrown, if id <= 0
-     */
-    public OsmPrimitive getPrimitiveById(long id) {
+     * @exception IllegalArgumentException thrown, if type is null
+     * @exception IllegalArgumentException thrown, if type is neither NODE, or WAY or RELATION
+     */
+    public OsmPrimitive getPrimitiveById(long id, OsmPrimitiveType type) {
         if (id <= 0)
             throw new IllegalArgumentException(tr("parameter {0} > 0 required. Got {1}.", "id", id));
-        for (OsmPrimitive primitive : nodes) {
-            if (primitive.getId() == id) return primitive;
-        }
-        for (OsmPrimitive primitive : ways) {
-            if (primitive.getId() == id) return primitive;
-        }
-        for (OsmPrimitive primitive : relations) {
+        if (id <= 0)
+            throw new IllegalArgumentException(tr("paramete''{0}'' must not be null", "type"));
+        Collection<? extends OsmPrimitive> primitives = null;
+        switch(type) {
+        case NODE: primitives = nodes; break;
+        case WAY: primitives = ways; break;
+        case RELATION: primitives = relations; break;
+        case CHANGESET: throw new IllegalArgumentException(tr("unsupported value ''{0}'' or parameter ''{1}''", type, "type"));
+        }
+        for (OsmPrimitive primitive : primitives) {
             if (primitive.getId() == id) return primitive;
         }
@@ -341,30 +347,4 @@
         for (OsmPrimitive primitive : relations) {
             ret.add(primitive.getId());
-        }
-        return ret;
-    }
-
-    /**
-     * Replies the set of ids of all complete primitives (i.e. those with
-     * ! primitive.incomplete)
-     *
-     * @return the set of ids of all complete primitives
-     */
-    public Set<Long> getCompletePrimitiveIds() {
-        HashSet<Long> ret = new HashSet<Long>();
-        for (OsmPrimitive primitive : nodes) {
-            if (!primitive.incomplete) {
-                ret.add(primitive.getId());
-            }
-        }
-        for (OsmPrimitive primitive : ways) {
-            if (! primitive.incomplete) {
-                ret.add(primitive.getId());
-            }
-        }
-        for (OsmPrimitive primitive : relations) {
-            if (! primitive.incomplete) {
-                ret.add(primitive.getId());
-            }
         }
         return ret;
Index: /trunk/src/org/openstreetmap/josm/data/osm/OsmPrimitiveType.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/OsmPrimitiveType.java	(revision 2076)
+++ /trunk/src/org/openstreetmap/josm/data/osm/OsmPrimitiveType.java	(revision 2077)
@@ -39,3 +39,12 @@
     }
 
+    public static OsmPrimitiveType from(String value) {
+        if (value == null) return null;
+        for (OsmPrimitiveType type: values()){
+            if (type.getAPIName().equalsIgnoreCase(value))
+                return type;
+        }
+        return null;
+    }
+
 }
Index: /trunk/src/org/openstreetmap/josm/data/osm/Relation.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/Relation.java	(revision 2076)
+++ /trunk/src/org/openstreetmap/josm/data/osm/Relation.java	(revision 2077)
@@ -112,5 +112,5 @@
      */
     public Relation() {
-
+        super(0);
     }
 
Index: /trunk/src/org/openstreetmap/josm/data/osm/Way.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/Way.java	(revision 2076)
+++ /trunk/src/org/openstreetmap/josm/data/osm/Way.java	(revision 2077)
@@ -3,4 +3,5 @@
 
 import java.util.ArrayList;
+
 import java.util.Arrays;
 import java.util.Collection;
@@ -10,4 +11,5 @@
 import org.openstreetmap.josm.tools.CopyList;
 import org.openstreetmap.josm.tools.Pair;
+import static org.openstreetmap.josm.tools.I18n.tr;
 
 /**
@@ -123,4 +125,5 @@
      */
     public Way(){
+        super(0);
     }
 
@@ -197,5 +200,15 @@
     }
 
-    public void addNode(Node n) {
+    /**
+     * Adds a node to the end of the list of nodes. Ignored, if n is null.
+     * 
+     * @param n the node. Ignored, if null.
+     * @throws IllegalStateException thrown, if this way is marked as incomplete. We can't add a node
+     * to an incomplete way
+     */
+    public void addNode(Node n) throws IllegalStateException {
+        if (n==null) return;
+        if (incomplete)
+            throw new IllegalStateException(tr("can't add node {0} to incomplete way {1}", n.getId(), getId()));
         if (incomplete) return;
         clearCached();
@@ -203,6 +216,17 @@
     }
 
-    public void addNode(int offs, Node n) {
-        if (incomplete) return;
+    /**
+     * Adds a node at position offs.
+     * 
+     * @param int offs the offset
+     * @param n the node. Ignored, if null.
+     * @throws IllegalStateException thrown, if this way is marked as incomplete. We can't add a node
+     * to an incomplete way
+     * @throws IndexOutOfBoundsException thrown if offs is out of bounds
+     */
+    public void addNode(int offs, Node n) throws IllegalStateException, IndexOutOfBoundsException {
+        if (n==null) return;
+        if (incomplete)
+            throw new IllegalStateException(tr("can't add node {0} to incomplete way {1}", n.getId(), getId()));
         clearCached();
         nodes.add(offs, n);
Index: /trunk/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableModel.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableModel.java	(revision 2076)
+++ /trunk/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableModel.java	(revision 2077)
@@ -21,4 +21,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;
@@ -86,10 +87,10 @@
     public Object getValueAt(int rowIndex, int columnIndex) {
         switch (columnIndex) {
-            case 0:
-                return members.get(rowIndex).getRole();
-            case 1:
-                return members.get(rowIndex).getMember();
-            case 2:
-                return linked(rowIndex);
+        case 0:
+            return members.get(rowIndex).getRole();
+        case 1:
+            return members.get(rowIndex).getMember();
+        case 2:
+            return linked(rowIndex);
         }
         // should not happen
@@ -201,5 +202,5 @@
                 continue;
             }
-            OsmPrimitive primitive = ds.getPrimitiveById(member.getMember().getId());
+            OsmPrimitive primitive = ds.getPrimitiveById(member.getMember().getId(), OsmPrimitiveType.from(member.getMember()));
             if (primitive != null) {
                 member.member = primitive;
Index: /trunk/src/org/openstreetmap/josm/gui/dialogs/relation/ParentRelationLoadingTask.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/dialogs/relation/ParentRelationLoadingTask.java	(revision 2076)
+++ /trunk/src/org/openstreetmap/josm/gui/dialogs/relation/ParentRelationLoadingTask.java	(revision 2077)
@@ -14,4 +14,5 @@
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.DataSource;
+import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
 import org.openstreetmap.josm.data.osm.Relation;
 import org.openstreetmap.josm.data.osm.visitor.MergeVisitor;
@@ -150,5 +151,5 @@
         parents.clear();
         for (Relation parent : referrers.relations) {
-            parents.add((Relation)getLayer().data.getPrimitiveById(parent.getId()));
+            parents.add((Relation)getLayer().data.getPrimitiveById(parent.getId(),OsmPrimitiveType.RELATION));
         }
         if (continuation != null) {
Index: /trunk/src/org/openstreetmap/josm/io/MultiFetchServerObjectReader.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/io/MultiFetchServerObjectReader.java	(revision 2076)
+++ /trunk/src/org/openstreetmap/josm/io/MultiFetchServerObjectReader.java	(revision 2077)
@@ -110,9 +110,9 @@
      *   id=<code>id</code>
      */
-    protected void remember(DataSet ds, long id) throws IllegalArgumentException, NoSuchElementException{
+    protected void remember(DataSet ds, long id, OsmPrimitiveType type) throws IllegalArgumentException, NoSuchElementException{
         if (ds == null)
             throw new IllegalArgumentException(tr("parameter ''{0}'' must not be null", "ds"));
         if (id <= 0) return;
-        OsmPrimitive primitive = ds.getPrimitiveById(id);
+        OsmPrimitive primitive = ds.getPrimitiveById(id, type);
         if (primitive == null)
             throw new NoSuchElementException(tr("no primitive with id {0} in local dataset. Can't infer primitive type", id));
@@ -122,37 +122,24 @@
 
     /**
-     * appends a list of  ids to the list of ids which will be fetched from the server. ds must
-     * include an {@see OsmPrimitive} for each id in ids.
-     *
-     * id is ignored if id <= 0.
-     *
-     * @param ds  the dataset
-     * @param ids  the list of ids
+     * appends a {@see Node}s id to the list of ids which will be fetched from the server.
+     *
+     * @param node  the node (ignored, if null)
      * @return this
      *
      */
-    public MultiFetchServerObjectReader append(DataSet ds, long ... ids)  {
-        if (ids == null) return this;
-        for (int i=0; i < ids.length; i++) {
-            remember(ds, ids[i]);
-        }
-        return this;
-    }
-
-    /**
-     * appends a collection of  ids to the list of ids which will be fetched from the server. ds must
-     * include an {@see OsmPrimitive} for each id in ids.
-     *
-     * id is ignored if id <= 0.
-     *
-     * @param ds  the dataset
-     * @param ids  the collection of ids
-     * @return this
-     *
-     */
-    public MultiFetchServerObjectReader append(DataSet ds, Collection<Long> ids) {
-        if (ids == null) return null;
-        for (long id: ids) {
-            append(ds,id);
+    public MultiFetchServerObjectReader append(DataSet ds, long id, OsmPrimitiveType type) {
+        switch(type) {
+        case NODE:
+            Node n = (Node)ds.getPrimitiveById(id,type);
+            append(n);
+            break;
+        case WAY:
+            Way w= (Way)ds.getPrimitiveById(id,type);
+            append(w);
+            break;
+        case RELATION:
+            Relation r = (Relation)ds.getPrimitiveById(id,type);
+            append(r);
+            break;
         }
         return this;
@@ -376,7 +363,7 @@
                 String msg = "";
                 switch(type) {
-                    case NODE: msg = tr("Fetching node with id {0} from ''{1}''", id, OsmApi.getOsmApi().getBaseUrl()); break;
-                    case WAY: msg = tr("Fetching way with id {0} from ''{1}''", id, OsmApi.getOsmApi().getBaseUrl()); break;
-                    case RELATION: msg = tr("Fetching relation with id {0} from ''{1}''", id, OsmApi.getOsmApi().getBaseUrl()); break;
+                case NODE: msg = tr("Fetching node with id {0} from ''{1}''", id, OsmApi.getOsmApi().getBaseUrl()); break;
+                case WAY: msg = tr("Fetching way with id {0} from ''{1}''", id, OsmApi.getOsmApi().getBaseUrl()); break;
+                case RELATION: msg = tr("Fetching relation with id {0} from ''{1}''", id, OsmApi.getOsmApi().getBaseUrl()); break;
                 }
                 progressMonitor.setCustomText(msg);
@@ -414,7 +401,7 @@
         String msg = "";
         switch(type) {
-            case NODE: msg = tr("Fetching a package of nodes from ''{0}''", OsmApi.getOsmApi().getBaseUrl()); break;
-            case WAY:  msg = tr("Fetching a package of ways from ''{0}''", OsmApi.getOsmApi().getBaseUrl()); break;
-            case RELATION:  msg = tr("Fetching a package of relations from ''{0}''", OsmApi.getOsmApi().getBaseUrl()); break;
+        case NODE: msg = tr("Fetching a package of nodes from ''{0}''", OsmApi.getOsmApi().getBaseUrl()); break;
+        case WAY:  msg = tr("Fetching a package of ways from ''{0}''", OsmApi.getOsmApi().getBaseUrl()); break;
+        case RELATION:  msg = tr("Fetching a package of relations from ''{0}''", OsmApi.getOsmApi().getBaseUrl()); break;
         }
         progressMonitor.setCustomText(msg);
Index: /trunk/test/functional/org/openstreetmap/josm/gui/conflict/pair/properties/PropertiesMergerTest.java
===================================================================
--- /trunk/test/functional/org/openstreetmap/josm/gui/conflict/pair/properties/PropertiesMergerTest.java	(revision 2076)
+++ /trunk/test/functional/org/openstreetmap/josm/gui/conflict/pair/properties/PropertiesMergerTest.java	(revision 2077)
@@ -26,5 +26,5 @@
         Node my = new Node(1);
         my.setCoor(new LatLon(1,1));
-        my.deleted = true;
+        my.setDeleted(true);
 
         Node their = new Node(2);
Index: /trunk/test/functional/org/openstreetmap/josm/io/MultiFetchServerObjectReaderTest.java
===================================================================
--- /trunk/test/functional/org/openstreetmap/josm/io/MultiFetchServerObjectReaderTest.java	(revision 2076)
+++ /trunk/test/functional/org/openstreetmap/josm/io/MultiFetchServerObjectReaderTest.java	(revision 2077)
@@ -28,4 +28,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;
@@ -247,5 +248,5 @@
         while(it.hasNext()) {
             Node n1 = it.next();
-            Node n2 = (Node)ds.getPrimitiveById(n1.id);
+            Node n2 = (Node)ds.getPrimitiveById(n1.getId(), OsmPrimitiveType.NODE);
             assertNotNull(n2);
             assertEquals(n2.get("name"),n2.get("name"));
@@ -266,5 +267,5 @@
         while(it.hasNext()) {
             Way w1 = it.next();
-            Way w2 = (Way)ds.getPrimitiveById(w1.id);
+            Way w2 = (Way)ds.getPrimitiveById(w1.getId(), OsmPrimitiveType.WAY);
             assertNotNull(w2);
             assertEquals(w2.getNodesCount(), w1.getNodesCount());
@@ -286,5 +287,5 @@
         while(it.hasNext()) {
             Relation r1 = it.next();
-            Relation r2 = (Relation)ds.getPrimitiveById(r1.id);
+            Relation r2 = (Relation)ds.getPrimitiveById(r1.getId(), OsmPrimitiveType.RELATION);
             assertNotNull(r2);
             assertEquals(r2.getMembersCount(), r1.getMembersCount());
@@ -306,5 +307,5 @@
         while(it.hasNext()) {
             Node n1 = it.next();
-            Node n2 = (Node)ds.getPrimitiveById(n1.id);
+            Node n2 = (Node)ds.getPrimitiveById(n1.getId(), OsmPrimitiveType.NODE);
             assertNotNull(n2);
             assertEquals(n2.get("name"),n2.get("name"));
@@ -327,5 +328,5 @@
         while(it.hasNext()) {
             Node n1 = it.next();
-            Node n2 = (Node)ds.getPrimitiveById(n1.id);
+            Node n2 = (Node)ds.getPrimitiveById(n1.getId(), OsmPrimitiveType.NODE);
             assertNotNull(n2);
             assertEquals(n2.get("name"),n2.get("name"));
Index: /trunk/test/functional/org/openstreetmap/josm/io/OsmServerBackreferenceReaderTest.java
===================================================================
--- /trunk/test/functional/org/openstreetmap/josm/io/OsmServerBackreferenceReaderTest.java	(revision 2076)
+++ /trunk/test/functional/org/openstreetmap/josm/io/OsmServerBackreferenceReaderTest.java	(revision 2077)
@@ -27,4 +27,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;
@@ -253,5 +254,5 @@
         assertEquals(0, referers.relations.size());
         for (Way way: referers.ways) {
-            assertEquals(w.id, way.id);
+            assertEquals(w.getId(), way.getId());
             assertEquals(false, way.incomplete);
         }
@@ -272,5 +273,5 @@
         assertEquals(0, referers.relations.size());
         for (Way way: referers.ways) {
-            assertEquals(w.id, way.id);
+            assertEquals(w.getId(), way.getId());
             assertEquals(false, way.incomplete);
             assertEquals(10, w.getNodesCount());
@@ -319,12 +320,12 @@
         Set<Long> expectedNodeIds = new HashSet<Long>();
         for (Way way: referers.ways) {
-            Way orig = (Way)ds.getPrimitiveById(way.id);
+            Way orig = (Way)ds.getPrimitiveById(way.getId(), OsmPrimitiveType.WAY);
             for(Node n: orig.getNodes()) {
-                expectedNodeIds.add(n.id);
+                expectedNodeIds.add(n.getId());
             }
         }
         assertEquals(expectedNodeIds.size(), referers.nodes.size());
         for (Node n : referers.nodes) {
-            assertEquals(true, expectedNodeIds.contains(n.id));
+            assertEquals(true, expectedNodeIds.contains(n.getId()));
         }
 
@@ -352,20 +353,20 @@
         assertNotNull(r);
         assertEquals(false, r.incomplete);
-        referringRelationsIds.add(r.id);
+        referringRelationsIds.add(r.getId());
         r = lookupRelation(referers, 7);
         assertNotNull(r);
         assertEquals(false, r.incomplete);
-        referringRelationsIds.add(r.id);
+        referringRelationsIds.add(r.getId());
         r = lookupRelation(referers, 8);
         assertNotNull(r);
         assertEquals(false, r.incomplete);
-        referringRelationsIds.add(r.id);
+        referringRelationsIds.add(r.getId());
         r = lookupRelation(referers, 9);
         assertNotNull(r);
         assertEquals(false, r.incomplete);
-        referringRelationsIds.add(r.id);
+        referringRelationsIds.add(r.getId());
 
         for (Relation r1: referers.relations) {
-            if (! referringRelationsIds.contains(r1.id)) {
+            if (! referringRelationsIds.contains(r1.getId())) {
                 assertEquals(true, r1.incomplete);
             }
@@ -378,20 +379,20 @@
         for (RelationMember m : lookupRelation(ds, 6).getMembers()) {
             if (m.isWay()) {
-                expectedWayIds.add(m.getMember().id);
+                expectedWayIds.add(m.getMember().getId());
             }
         }
         for (RelationMember m : lookupRelation(ds, 7).getMembers()) {
             if (m.isWay()) {
-                expectedWayIds.add(m.getMember().id);
+                expectedWayIds.add(m.getMember().getId());
             }
         }
         for (RelationMember m : lookupRelation(ds, 8).getMembers()) {
             if (m.isWay()) {
-                expectedWayIds.add(m.getMember().id);
+                expectedWayIds.add(m.getMember().getId());
             }
         }
         for (RelationMember m : lookupRelation(ds, 9).getMembers()) {
             if (m.isWay()) {
-                expectedWayIds.add(m.getMember().id);
+                expectedWayIds.add(m.getMember().getId());
             }
         }
@@ -399,5 +400,5 @@
         assertEquals(expectedWayIds.size(), referers.ways.size());
         for (Way w1 : referers.ways) {
-            assertEquals(true, expectedWayIds.contains(w1.id));
+            assertEquals(true, expectedWayIds.contains(w1.getId()));
             assertEquals(true, w1.incomplete);
         }
@@ -412,5 +413,5 @@
         if (way == null)return ret;
         for (Node n: way.getNodes()) {
-            ret.add(n.id);
+            ret.add(n.getId());
         }
         return ret;
@@ -422,5 +423,5 @@
         for (RelationMember m: r.getMembers()) {
             if (m.isNode()) {
-                ret.add(m.getMember().id);
+                ret.add(m.getMember().getId());
             } else if (m.isWay()) {
                 ret.addAll(getNodeIdsInWay(m.getWay()));
@@ -448,17 +449,17 @@
         assertNotNull(r);
         assertEquals(false, r.incomplete);
-        referringRelationsIds.add(r.id);
+        referringRelationsIds.add(r.getId());
         r = lookupRelation(referers, 7);
         assertNotNull(r);
         assertEquals(false, r.incomplete);
-        referringRelationsIds.add(r.id);
+        referringRelationsIds.add(r.getId());
         r = lookupRelation(referers, 8);
         assertNotNull(r);
         assertEquals(false, r.incomplete);
-        referringRelationsIds.add(r.id);
+        referringRelationsIds.add(r.getId());
         r = lookupRelation(referers, 9);
         assertNotNull(r);
         assertEquals(false, r.incomplete);
-        referringRelationsIds.add(r.id);
+        referringRelationsIds.add(r.getId());
 
         // all relations are fully loaded
@@ -474,24 +475,24 @@
         for (RelationMember m : lookupRelation(ds, 6).getMembers()) {
             if (m.isWay()) {
-                expectedWayIds.add(m.getMember().id);
+                expectedWayIds.add(m.getMember().getId());
             }
         }
         for (RelationMember m : lookupRelation(ds, 7).getMembers()) {
             if (m.isWay()) {
-                expectedWayIds.add(m.getMember().id);
+                expectedWayIds.add(m.getMember().getId());
             }
         }
         for (RelationMember m : lookupRelation(ds, 8).getMembers()) {
             if (m.isWay()) {
-                expectedWayIds.add(m.getMember().id);
+                expectedWayIds.add(m.getMember().getId());
             }
         }
         for (RelationMember m : lookupRelation(ds, 9).getMembers()) {
             if (m.isWay()) {
-                expectedWayIds.add(m.getMember().id);
+                expectedWayIds.add(m.getMember().getId());
             }
         }
         for (long id : expectedWayIds) {
-            Way w = (Way)referers.getPrimitiveById(id);
+            Way w = (Way)referers.getPrimitiveById(id, OsmPrimitiveType.WAY);
             assertNotNull(w);
             assertEquals(false, w.incomplete);
@@ -506,5 +507,5 @@
         assertEquals(expectedNodeIds.size(), referers.nodes.size());
         for(Node n : referers.nodes) {
-            assertEquals(true, expectedNodeIds.contains(n.id));
+            assertEquals(true, expectedNodeIds.contains(n.getId()));
         }
     }
Index: /trunk/test/unit/org/openstreetmap/josm/data/osm/visitor/MergeSourceBuildingVisitorTest.java
===================================================================
--- /trunk/test/unit/org/openstreetmap/josm/data/osm/visitor/MergeSourceBuildingVisitorTest.java	(revision 2076)
+++ /trunk/test/unit/org/openstreetmap/josm/data/osm/visitor/MergeSourceBuildingVisitorTest.java	(revision 2077)
@@ -14,4 +14,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;
@@ -50,9 +51,9 @@
         assertEquals(2, hull.nodes.size());
 
-        OsmPrimitive p = hull.getPrimitiveById(1);
+        OsmPrimitive p = hull.getPrimitiveById(1,OsmPrimitiveType.NODE);
         assertNotNull(p);
         assertEquals(p.getClass(), Node.class);
 
-        p = hull.getPrimitiveById(3);
+        p = hull.getPrimitiveById(3,OsmPrimitiveType.NODE);
         assertNull(p);
 
@@ -71,4 +72,5 @@
         Node n2 = new Node(2);
         Way w1 = new Way(3);
+        w1.incomplete = false;
         w1.addNode(n1);
         w1.addNode(n2);
@@ -84,13 +86,13 @@
         assertEquals(2, hull.nodes.size());
 
-        OsmPrimitive p = hull.getPrimitiveById(1);
+        OsmPrimitive p = hull.getPrimitiveById(1,OsmPrimitiveType.NODE);
         assertNotNull(p);
         assertEquals(p.getClass(), Node.class);
 
-        p = hull.getPrimitiveById(2);
+        p = hull.getPrimitiveById(2,OsmPrimitiveType.NODE);
         assertNotNull(p);
         assertEquals(p.getClass(), Node.class);
 
-        p = hull.getPrimitiveById(3);
+        p = hull.getPrimitiveById(3, OsmPrimitiveType.WAY);
         assertNotNull(p);
         assertEquals(p.getClass(), Way.class);
@@ -103,4 +105,5 @@
         Node n2 = new Node(2);
         Way w1 = new Way(3);
+        w1.incomplete = false;
         w1.addNode(n1);
         w1.addNode(n2);
@@ -116,13 +119,13 @@
         assertEquals(2, hull.nodes.size());
 
-        OsmPrimitive p = hull.getPrimitiveById(1);
+        OsmPrimitive p = hull.getPrimitiveById(1,OsmPrimitiveType.NODE);
         assertNotNull(p);
         assertEquals(p.getClass(), Node.class);
 
-        p = hull.getPrimitiveById(2);
+        p = hull.getPrimitiveById(2, OsmPrimitiveType.NODE);
         assertNotNull(p);
         assertEquals(p.getClass(), Node.class);
 
-        p = hull.getPrimitiveById(3);
+        p = hull.getPrimitiveById(3,OsmPrimitiveType.WAY);
         assertNotNull(p);
         assertEquals(p.getClass(), Way.class);
@@ -142,5 +145,5 @@
         assertEquals(1, hull.ways.size());
 
-        OsmPrimitive p = hull.getPrimitiveById(3);
+        OsmPrimitive p = hull.getPrimitiveById(3, OsmPrimitiveType.WAY);
         assertNotNull(p);
         assertEquals(p.getClass(), Way.class);
@@ -154,5 +157,7 @@
         Node n20 = new Node(20);
         r1.addMember(new RelationMember("node-20",n20));
+        r1.incomplete = false;
         Way w30 = new Way(30);
+        w30.incomplete = false;
         Node n21;
         w30.addNode(n21 = new Node(21));
@@ -177,30 +182,30 @@
         assertEquals(2, hull.relations.size());
 
-        OsmPrimitive p = hull.getPrimitiveById(1);
+        OsmPrimitive p = hull.getPrimitiveById(1, OsmPrimitiveType.RELATION);
         assertNotNull(p);
         assertEquals(p.getClass(), Relation.class);
 
-        Way w = (Way)hull.getPrimitiveById(30);
+        Way w = (Way)hull.getPrimitiveById(30,OsmPrimitiveType.WAY);
         assertNotNull(w);
         assertEquals(2, w.getNodesCount());
-        Node n = (Node)hull.getPrimitiveById(21);
+        Node n = (Node)hull.getPrimitiveById(21, OsmPrimitiveType.NODE);
         assertNotNull(n);
         assertTrue(w.containsNode(n));
 
-        n = (Node)hull.getPrimitiveById(22);
+        n = (Node)hull.getPrimitiveById(22,OsmPrimitiveType.NODE);
         assertNotNull(n);
         assertTrue(w.containsNode(n));
 
-        Relation r = (Relation)hull.getPrimitiveById(40);
-        assertNotNull(r);
-
-        r = (Relation)hull.getPrimitiveById(1);
+        Relation r = (Relation)hull.getPrimitiveById(40,OsmPrimitiveType.RELATION);
+        assertNotNull(r);
+
+        r = (Relation)hull.getPrimitiveById(1, OsmPrimitiveType.RELATION);
         assertNotNull(r);
         assertEquals(3, r.getMembersCount());
-        RelationMember m = new RelationMember("node-20", hull.getPrimitiveById(20));
-        assertTrue(r.getMembers().contains(m));
-        m = new RelationMember("way-30", hull.getPrimitiveById(30));
-        assertTrue(r.getMembers().contains(m));
-        m = new RelationMember("relation-40", hull.getPrimitiveById(40));
+        RelationMember m = new RelationMember("node-20", hull.getPrimitiveById(20,OsmPrimitiveType.NODE));
+        assertTrue(r.getMembers().contains(m));
+        m = new RelationMember("way-30", hull.getPrimitiveById(30, OsmPrimitiveType.WAY));
+        assertTrue(r.getMembers().contains(m));
+        m = new RelationMember("relation-40", hull.getPrimitiveById(40, OsmPrimitiveType.RELATION));
         assertTrue(r.getMembers().contains(m));
     }
@@ -213,4 +218,5 @@
         r1.addMember(new RelationMember("node-20",n20));
         Way w30 = new Way(30);
+        w30.incomplete = false;
         Node n21;
         w30.addNode(n21 = new Node(21));
@@ -235,31 +241,31 @@
         assertEquals(2, hull.relations.size());
 
-        OsmPrimitive p = hull.getPrimitiveById(1);
+        OsmPrimitive p = hull.getPrimitiveById(1, OsmPrimitiveType.RELATION);
         assertNotNull(p);
         assertEquals(p.getClass(), Relation.class);
 
-        Way w = (Way)hull.getPrimitiveById(30);
+        Way w = (Way)hull.getPrimitiveById(30, OsmPrimitiveType.WAY);
         assertNotNull(w);
         assertTrue(w.incomplete);
 
 
-        Node n = (Node)hull.getPrimitiveById(21);
+        Node n = (Node)hull.getPrimitiveById(21,OsmPrimitiveType.NODE);
         assertNull(n);
 
-        n = (Node)hull.getPrimitiveById(22);
+        n = (Node)hull.getPrimitiveById(22, OsmPrimitiveType.NODE);
         assertNull(n);
 
-        Relation r = (Relation)hull.getPrimitiveById(40);
+        Relation r = (Relation)hull.getPrimitiveById(40, OsmPrimitiveType.RELATION);
         assertNotNull(r);
         assertTrue(r.incomplete);
 
-        r = (Relation)hull.getPrimitiveById(1);
+        r = (Relation)hull.getPrimitiveById(1, OsmPrimitiveType.RELATION);
         assertNotNull(r);
         assertEquals(3, r.getMembersCount());
-        RelationMember m = new RelationMember("node-20", hull.getPrimitiveById(20));
-        assertTrue(r.getMembers().contains(m));
-        m = new RelationMember("way-30", hull.getPrimitiveById(30));
-        assertTrue(r.getMembers().contains(m));
-        m = new RelationMember("relation-40", hull.getPrimitiveById(40));
+        RelationMember m = new RelationMember("node-20", hull.getPrimitiveById(20, OsmPrimitiveType.NODE));
+        assertTrue(r.getMembers().contains(m));
+        m = new RelationMember("way-30", hull.getPrimitiveById(30, OsmPrimitiveType.WAY));
+        assertTrue(r.getMembers().contains(m));
+        m = new RelationMember("relation-40", hull.getPrimitiveById(40, OsmPrimitiveType.RELATION));
         assertTrue(r.getMembers().contains(m));
     }
@@ -272,5 +278,6 @@
         Node n20 = new Node(new LatLon(20.0,20.0));
         n20.put("name", "n20");
-        r1.getMembers().add(new RelationMember("node-20",n20));
+        r1.addMember(new RelationMember("node-20",n20));
+
         Way w30 = new Way();
         w30.put("name", "w30");
@@ -285,4 +292,5 @@
         r40.put("name", "r40");
         r1.addMember(new RelationMember("relation-40", r40));
+
         source.nodes.add(n20);
         source.nodes.add(n21);
@@ -343,5 +351,5 @@
         assertEquals(1, hull.relations.size());
 
-        Relation r = (Relation)hull.getPrimitiveById(1);
+        Relation r = (Relation)hull.getPrimitiveById(1, OsmPrimitiveType.RELATION);
         assertNotNull(r);
         assertEquals(1, r.getMembersCount());
@@ -385,7 +393,7 @@
         assertEquals(2, hull.relations.size());
 
-        r1 = (Relation)hull.getPrimitiveById(1);
+        r1 = (Relation)hull.getPrimitiveById(1, OsmPrimitiveType.RELATION);
         assertNotNull(r1);
-        r2 = (Relation)hull.getPrimitiveById(2);
+        r2 = (Relation)hull.getPrimitiveById(2, OsmPrimitiveType.RELATION);
         assertNotNull(r2);
         assertEquals(1, r1.getMembersCount());
Index: /trunk/test/unit/org/openstreetmap/josm/data/osm/visitor/MergeVisitorTest.java
===================================================================
--- /trunk/test/unit/org/openstreetmap/josm/data/osm/visitor/MergeVisitorTest.java	(revision 2076)
+++ /trunk/test/unit/org/openstreetmap/josm/data/osm/visitor/MergeVisitorTest.java	(revision 2077)
@@ -24,4 +24,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;
@@ -97,5 +98,5 @@
         visitor.merge();
 
-        Node n2 = (Node)my.getPrimitiveById(1);
+        Node n2 = (Node)my.getPrimitiveById(1, OsmPrimitiveType.NODE);
         assertTrue(visitor.getConflicts().isEmpty());
         assertEquals(1, n2.getId());
@@ -133,5 +134,5 @@
         visitor.merge();
 
-        Node n2 = (Node)my.getPrimitiveById(1);
+        Node n2 = (Node)my.getPrimitiveById(1, OsmPrimitiveType.NODE);
         assertTrue(visitor.getConflicts().isEmpty());
         assertEquals(1, n2.getId());
@@ -173,5 +174,5 @@
         visitor.merge();
 
-        Node n2 = (Node)my.getPrimitiveById(1);
+        Node n2 = (Node)my.getPrimitiveById(1, OsmPrimitiveType.NODE);
         assertEquals(1,visitor.getConflicts().size());
         assertEquals(n, n2);
@@ -209,5 +210,5 @@
         visitor.merge();
 
-        Node n2 = (Node)my.getPrimitiveById(1);
+        Node n2 = (Node)my.getPrimitiveById(1, OsmPrimitiveType.NODE);
         assertEquals(1,visitor.getConflicts().size());
         assertEquals(n, n2);
@@ -242,5 +243,5 @@
         visitor.merge();
 
-        Node n2 = (Node)my.getPrimitiveById(1);
+        Node n2 = (Node)my.getPrimitiveById(1,OsmPrimitiveType.NODE);
         assertEquals(1,visitor.getConflicts().size());
         assertEquals(true, n2.isVisible());
@@ -271,5 +272,5 @@
         visitor.merge();
 
-        Node n2 = (Node)my.getPrimitiveById(1);
+        Node n2 = (Node)my.getPrimitiveById(1, OsmPrimitiveType.NODE);
         assertEquals(0,visitor.getConflicts().size());
         assertEquals(true, n2.isVisible());
@@ -354,5 +355,5 @@
         visitor.merge();
 
-        Node n2 = (Node)my.getPrimitiveById(1);
+        Node n2 = (Node)my.getPrimitiveById(1,OsmPrimitiveType.NODE);
         assertEquals(0,visitor.getConflicts().size());
         assertEquals(2,my.nodes.size());
@@ -501,5 +502,5 @@
         visitor.merge();
 
-        Way merged = (Way)my.getPrimitiveById(3);
+        Way merged = (Way)my.getPrimitiveById(3, OsmPrimitiveType.WAY);
         assertEquals(0,visitor.getConflicts().size());
         assertEquals("value1",merged.get("key1"));
@@ -571,5 +572,5 @@
         visitor.merge();
 
-        Way merged = (Way)my.getPrimitiveById(3);
+        Way merged = (Way)my.getPrimitiveById(3, OsmPrimitiveType.WAY);
         assertEquals(0,visitor.getConflicts().size());
         assertEquals(3,merged.getId());
@@ -642,5 +643,5 @@
         visitor.merge();
 
-        Way merged = (Way)my.getPrimitiveById(3);
+        Way merged = (Way)my.getPrimitiveById(3, OsmPrimitiveType.WAY);
         assertEquals(1,visitor.getConflicts().size());
         assertEquals(3,merged.getId());
@@ -690,5 +691,5 @@
         visitor.merge();
 
-        Way merged = (Way)my.getPrimitiveById(3);
+        Way merged = (Way)my.getPrimitiveById(3, OsmPrimitiveType.WAY);
         assertEquals(1,visitor.getConflicts().size());
         assertEquals(true, visitor.getConflicts().hasConflictForMy(myWay));
@@ -851,8 +852,8 @@
         assertEquals(0,visitor.getConflicts().size());
 
-        Way myWay = (Way)my.getPrimitiveById(4);
+        Way myWay = (Way)my.getPrimitiveById(4,OsmPrimitiveType.WAY);
         assertEquals(2, myWay.getNodesCount());
 
-        Node n = (Node)my.getPrimitiveById(1);
+        Node n = (Node)my.getPrimitiveById(1,OsmPrimitiveType.NODE);
         assertTrue(n != null);
     }
@@ -906,8 +907,8 @@
         assertEquals(0,visitor.getConflicts().size());
 
-        Relation r = (Relation)my.getPrimitiveById(4);
+        Relation r = (Relation)my.getPrimitiveById(4,OsmPrimitiveType.RELATION);
         assertEquals(2, r.getMembersCount());
 
-        Node n = (Node)my.getPrimitiveById(1);
+        Node n = (Node)my.getPrimitiveById(1,OsmPrimitiveType.NODE);
         assertTrue(n != null);
     }
@@ -942,15 +943,15 @@
         assertEquals(0,visitor.getConflicts().size());
 
-        OsmPrimitive p= my.getPrimitiveById(1);
+        OsmPrimitive p= my.getPrimitiveById(1, OsmPrimitiveType.NODE);
         assertNotNull(p);
         assertTrue(p.incomplete);
-        p= my.getPrimitiveById(2);
+        p= my.getPrimitiveById(2, OsmPrimitiveType.NODE);
         assertNotNull(p);
         assertTrue(p.incomplete);
-        p= my.getPrimitiveById(3);
+        p= my.getPrimitiveById(3, OsmPrimitiveType.WAY);
         assertNotNull(p);
         assertTrue(p.incomplete);
 
-        Way w = (Way)my.getPrimitiveById(3);
+        Way w = (Way)my.getPrimitiveById(3, OsmPrimitiveType.WAY);
         assertNotNull(w);
         assertTrue(p.incomplete);
@@ -1005,15 +1006,15 @@
         assertEquals(0,visitor.getConflicts().size());
 
-        OsmPrimitive p= my.getPrimitiveById(1);
+        OsmPrimitive p= my.getPrimitiveById(1, OsmPrimitiveType.NODE);
         assertNotNull(p);
         assertTrue(!p.incomplete);
-        p= my.getPrimitiveById(2);
+        p= my.getPrimitiveById(2, OsmPrimitiveType.NODE);
         assertNotNull(p);
         assertTrue(!p.incomplete);
-        p= my.getPrimitiveById(3);
+        p= my.getPrimitiveById(3,OsmPrimitiveType.WAY);
         assertNotNull(p);
         assertTrue(!p.incomplete);
 
-        Way w = (Way)my.getPrimitiveById(3);
+        Way w = (Way)my.getPrimitiveById(3,OsmPrimitiveType.WAY);
         assertNotNull(w);
         assertTrue(!p.incomplete);
Index: /trunk/test/unit/org/openstreetmap/josm/gui/conflict/nodes/NodeListMergeModelTest.java
===================================================================
--- /trunk/test/unit/org/openstreetmap/josm/gui/conflict/nodes/NodeListMergeModelTest.java	(revision 2076)
+++ /trunk/test/unit/org/openstreetmap/josm/gui/conflict/nodes/NodeListMergeModelTest.java	(revision 2077)
@@ -65,4 +65,5 @@
 
         Way myWay = new Way(1);
+        myWay.incomplete = false;
         myWay.addNode(new Node(2));
         myWay.addNode(new Node(3));
@@ -75,5 +76,5 @@
 
         assertEquals(1, mergedNodes.size());
-        assertEquals(2, mergedNodes.get(0).id);
+        assertEquals(2, mergedNodes.get(0).getId());
 
         DefaultListSelectionModel mergedSelection = inspectListSelectionModel(model, "mergedEntriesSelectionModel");
@@ -89,4 +90,5 @@
 
         Way myWay = new Way(1);
+        myWay.incomplete = false;
         myWay.addNode(new Node(2));
         myWay.addNode(new Node(3));
@@ -102,6 +104,6 @@
         mergedNodes = inspectNodeList(model, "Merged");
         assertEquals(2, mergedNodes.size());
-        assertEquals(2, mergedNodes.get(0).id);
-        assertEquals(1, mergedNodes.get(1).id);
+        assertEquals(2, mergedNodes.get(0).getId());
+        assertEquals(1, mergedNodes.get(1).getId());
 
         DefaultListSelectionModel mergedSelection = inspectListSelectionModel(model, "mergedEntriesSelectionModel");
@@ -120,7 +122,9 @@
 
         Way myWay = new Way(1);
-        myWay.addNode(new Node(2));
-        myWay.addNode(new Node(3));
-        Way theirWay = new Way(1);
+        myWay.incomplete = false;
+        myWay.addNode(new Node(2));
+        myWay.addNode(new Node(3));
+        Way theirWay = new Way(1);
+
 
         model.populate(myWay, theirWay);
@@ -133,6 +137,6 @@
         mergedNodes = inspectNodeList(model, "Merged");
         assertEquals(2, mergedNodes.size());
-        assertEquals(3, mergedNodes.get(0).id); // my node 3 at position 0
-        assertEquals(1, mergedNodes.get(1).id); // already merged node 1 at position 1
+        assertEquals(3, mergedNodes.get(0).getId()); // my node 3 at position 0
+        assertEquals(1, mergedNodes.get(1).getId()); // already merged node 1 at position 1
 
         DefaultListSelectionModel mergedSelection = inspectListSelectionModel(model, "mergedEntriesSelectionModel");
@@ -146,4 +150,5 @@
 
         Way myWay = new Way(1);
+        myWay.incomplete = false;
         myWay.addNode(new Node(2));
         myWay.addNode(new Node(3));
@@ -160,7 +165,7 @@
         mergedNodes = inspectNodeList(model, "Merged");
         assertEquals(3, mergedNodes.size());
-        assertEquals(3, mergedNodes.get(0).id); // my node 3 at position 0
-        assertEquals(4, mergedNodes.get(1).id); // my node 4 at position 1
-        assertEquals(1, mergedNodes.get(2).id); // already merged node 1 at position 2
+        assertEquals(3, mergedNodes.get(0).getId()); // my node 3 at position 0
+        assertEquals(4, mergedNodes.get(1).getId()); // my node 4 at position 1
+        assertEquals(1, mergedNodes.get(2).getId()); // already merged node 1 at position 2
 
         DefaultListSelectionModel mergedSelection = inspectListSelectionModel(model, "mergedEntriesSelectionModel");
@@ -174,4 +179,5 @@
 
         Way myWay = new Way(1);
+        myWay.incomplete = false;
         myWay.addNode(new Node(2));
         myWay.addNode(new Node(3));
@@ -184,5 +190,5 @@
 
         assertEquals(1, mergedNodes.size());
-        assertEquals(2, mergedNodes.get(0).id);
+        assertEquals(2, mergedNodes.get(0).getId());
 
         DefaultListSelectionModel mergedSelection = inspectListSelectionModel(model, "mergedEntriesSelectionModel");
@@ -195,4 +201,5 @@
 
         Way myWay = new Way(1);
+        myWay.incomplete = false;
         myWay.addNode(new Node(2));
         myWay.addNode(new Node(3));
@@ -208,6 +215,6 @@
         mergedNodes = inspectNodeList(model, "Merged");
         assertEquals(2, mergedNodes.size());
-        assertEquals(1, mergedNodes.get(0).id); // already merged node 1 at position 0
-        assertEquals(2, mergedNodes.get(1).id); // copied node 2 at position 1
+        assertEquals(1, mergedNodes.get(0).getId()); // already merged node 1 at position 0
+        assertEquals(2, mergedNodes.get(1).getId()); // copied node 2 at position 1
 
         DefaultListSelectionModel mergedSelection = inspectListSelectionModel(model, "mergedEntriesSelectionModel");
@@ -221,4 +228,5 @@
 
         Way myWay = new Way(1);
+        myWay.incomplete = false;
         myWay.addNode(new Node(2));
         myWay.addNode(new Node(3));
@@ -234,6 +242,6 @@
         mergedNodes = inspectNodeList(model, "Merged");
         assertEquals(2, mergedNodes.size());
-        assertEquals(1, mergedNodes.get(0).id); // already merged node 1 at position 0
-        assertEquals(3, mergedNodes.get(1).id); // my node 3 at position 1
+        assertEquals(1, mergedNodes.get(0).getId()); // already merged node 1 at position 0
+        assertEquals(3, mergedNodes.get(1).getId()); // my node 3 at position 1
 
 
@@ -248,4 +256,5 @@
 
         Way myWay = new Way(1);
+        myWay.incomplete = false;
         myWay.addNode(new Node(2));
         myWay.addNode(new Node(3));
@@ -262,7 +271,7 @@
         mergedNodes = inspectNodeList(model, "Merged");
         assertEquals(3, mergedNodes.size());
-        assertEquals(1, mergedNodes.get(0).id); // already merged node 1 at position 0
-        assertEquals(3, mergedNodes.get(1).id); // my node 3 at position 1
-        assertEquals(4, mergedNodes.get(2).id); // my node 4 at position 2
+        assertEquals(1, mergedNodes.get(0).getId()); // already merged node 1 at position 0
+        assertEquals(3, mergedNodes.get(1).getId()); // my node 3 at position 1
+        assertEquals(4, mergedNodes.get(2).getId()); // my node 4 at position 2
 
 
@@ -280,4 +289,5 @@
 
         Way myWay = new Way(1);
+        myWay.incomplete = false;
         myWay.addNode(new Node(1));
         myWay.addNode(new Node(2));
@@ -293,8 +303,8 @@
 
         assertEquals(4, mergedNodes.size());
-        assertEquals(10, mergedNodes.get(0).id); // already merged node
-        assertEquals(1, mergedNodes.get(1).id);  // copied node 1 at position 1
-        assertEquals(11, mergedNodes.get(2).id); // already merged node
-        assertEquals(12, mergedNodes.get(3).id); // already merged node
+        assertEquals(10, mergedNodes.get(0).getId()); // already merged node
+        assertEquals(1, mergedNodes.get(1).getId());  // copied node 1 at position 1
+        assertEquals(11, mergedNodes.get(2).getId()); // already merged node
+        assertEquals(12, mergedNodes.get(3).getId()); // already merged node
 
         DefaultListSelectionModel mergedSelection = inspectListSelectionModel(model, "mergedEntriesSelectionModel");
@@ -308,4 +318,5 @@
 
         Way myWay = new Way(1);
+        myWay.incomplete = false;
         myWay.addNode(new Node(1));
         myWay.addNode(new Node(2));
@@ -321,9 +332,9 @@
 
         assertEquals(5, mergedNodes.size());
-        assertEquals(1, mergedNodes.get(0).id);  // copied node 1 at position 0
-        assertEquals(2, mergedNodes.get(1).id);  // copied node 2 at position 1
-        assertEquals(10, mergedNodes.get(2).id); // already merged node
-        assertEquals(11, mergedNodes.get(3).id); // already merged node
-        assertEquals(12, mergedNodes.get(4).id); // already merged node
+        assertEquals(1, mergedNodes.get(0).getId());  // copied node 1 at position 0
+        assertEquals(2, mergedNodes.get(1).getId());  // copied node 2 at position 1
+        assertEquals(10, mergedNodes.get(2).getId()); // already merged node
+        assertEquals(11, mergedNodes.get(3).getId()); // already merged node
+        assertEquals(12, mergedNodes.get(4).getId()); // already merged node
 
         DefaultListSelectionModel mergedSelection = inspectListSelectionModel(model, "mergedEntriesSelectionModel");
@@ -336,4 +347,5 @@
 
         Way myWay = new Way(1);
+        myWay.incomplete = false;
         myWay.addNode(new Node(1));
         myWay.addNode(new Node(2));
@@ -369,4 +381,5 @@
 
         Way myWay = new Way(1);
+        myWay.incomplete = false;
         myWay.addNode(new Node(1));
         myWay.addNode(new Node(2));
@@ -382,8 +395,8 @@
 
         assertEquals(4, mergedNodes.size());
-        assertEquals(10, mergedNodes.get(0).id); // already merged node
-        assertEquals(11, mergedNodes.get(1).id); // already merged node
-        assertEquals(1, mergedNodes.get(2).id);  // copied node 1 at position 2
-        assertEquals(12, mergedNodes.get(3).id); // already merged node
+        assertEquals(10, mergedNodes.get(0).getId()); // already merged node
+        assertEquals(11, mergedNodes.get(1).getId()); // already merged node
+        assertEquals(1, mergedNodes.get(2).getId());  // copied node 1 at position 2
+        assertEquals(12, mergedNodes.get(3).getId()); // already merged node
 
         DefaultListSelectionModel mergedSelection = inspectListSelectionModel(model, "mergedEntriesSelectionModel");
@@ -397,4 +410,5 @@
 
         Way myWay = new Way(1);
+        myWay.incomplete = false;
         myWay.addNode(new Node(1));
         myWay.addNode(new Node(2));
@@ -411,9 +425,9 @@
 
         assertEquals(5, mergedNodes.size());
-        assertEquals(10, mergedNodes.get(0).id); // already merged node
-        assertEquals(11, mergedNodes.get(1).id); // already merged node
-        assertEquals(12, mergedNodes.get(2).id); // already merged node
-        assertEquals(1, mergedNodes.get(3).id);  // copied node 1 at position 3
-        assertEquals(2, mergedNodes.get(4).id);  // copied node 2 at position 4
+        assertEquals(10, mergedNodes.get(0).getId()); // already merged node
+        assertEquals(11, mergedNodes.get(1).getId()); // already merged node
+        assertEquals(12, mergedNodes.get(2).getId()); // already merged node
+        assertEquals(1, mergedNodes.get(3).getId());  // copied node 1 at position 3
+        assertEquals(2, mergedNodes.get(4).getId());  // copied node 2 at position 4
 
 
@@ -427,4 +441,5 @@
 
         Way myWay = new Way(1);
+        myWay.incomplete = false;
         myWay.addNode(new Node(1));
         myWay.addNode(new Node(2));
@@ -441,9 +456,9 @@
 
         assertEquals(5, mergedNodes.size());
-        assertEquals(10, mergedNodes.get(0).id); // already merged node
-        assertEquals(1, mergedNodes.get(1).id);  // copied node 1 at position 1
-        assertEquals(3, mergedNodes.get(2).id);  // copied node 3 at position 2
-        assertEquals(11, mergedNodes.get(3).id); // already merged node
-        assertEquals(12, mergedNodes.get(4).id); // already merged node
+        assertEquals(10, mergedNodes.get(0).getId()); // already merged node
+        assertEquals(1, mergedNodes.get(1).getId());  // copied node 1 at position 1
+        assertEquals(3, mergedNodes.get(2).getId());  // copied node 3 at position 2
+        assertEquals(11, mergedNodes.get(3).getId()); // already merged node
+        assertEquals(12, mergedNodes.get(4).getId()); // already merged node
 
         DefaultListSelectionModel mergedSelection = inspectListSelectionModel(model, "mergedEntriesSelectionModel");
@@ -456,4 +471,5 @@
 
         Way myWay = new Way(1);
+        myWay.incomplete = false;
         myWay.addNode(new Node(1));
         myWay.addNode(new Node(2));
@@ -489,4 +505,5 @@
 
         Way myWay = new Way(1);
+        myWay.incomplete = false;
         myWay.addNode(new Node(1));
         myWay.addNode(new Node(2));
@@ -502,7 +519,7 @@
 
         assertEquals(3, mergedNodes.size());
-        assertEquals(11, mergedNodes.get(0).id);
-        assertEquals(10, mergedNodes.get(1).id);
-        assertEquals(12, mergedNodes.get(2).id);
+        assertEquals(11, mergedNodes.get(0).getId());
+        assertEquals(10, mergedNodes.get(1).getId());
+        assertEquals(12, mergedNodes.get(2).getId());
 
         DefaultListSelectionModel mergedSelection = inspectListSelectionModel(model, "mergedEntriesSelectionModel");
@@ -515,4 +532,5 @@
 
         Way myWay = new Way(1);
+        myWay.incomplete = false;
         myWay.addNode(new Node(1));
         myWay.addNode(new Node(2));
@@ -530,9 +548,9 @@
 
         assertEquals(5, mergedNodes.size());
-        assertEquals(11, mergedNodes.get(0).id);
-        assertEquals(10, mergedNodes.get(1).id);
-        assertEquals(12, mergedNodes.get(2).id);
-        assertEquals(14, mergedNodes.get(3).id);
-        assertEquals(13, mergedNodes.get(4).id);
+        assertEquals(11, mergedNodes.get(0).getId());
+        assertEquals(10, mergedNodes.get(1).getId());
+        assertEquals(12, mergedNodes.get(2).getId());
+        assertEquals(14, mergedNodes.get(3).getId());
+        assertEquals(13, mergedNodes.get(4).getId());
 
         DefaultListSelectionModel mergedSelection = inspectListSelectionModel(model, "mergedEntriesSelectionModel");
@@ -545,4 +563,5 @@
 
         Way myWay = new Way(1);
+        myWay.incomplete = false;
         myWay.addNode(new Node(1));
         myWay.addNode(new Node(2));
@@ -560,9 +579,9 @@
 
         assertEquals(5, mergedNodes.size());
-        assertEquals(11, mergedNodes.get(0).id);
-        assertEquals(12, mergedNodes.get(1).id);
-        assertEquals(13, mergedNodes.get(2).id);
-        assertEquals(14, mergedNodes.get(3).id);
-        assertEquals(10, mergedNodes.get(4).id);
+        assertEquals(11, mergedNodes.get(0).getId());
+        assertEquals(12, mergedNodes.get(1).getId());
+        assertEquals(13, mergedNodes.get(2).getId());
+        assertEquals(14, mergedNodes.get(3).getId());
+        assertEquals(10, mergedNodes.get(4).getId());
 
         DefaultListSelectionModel mergedSelection = inspectListSelectionModel(model, "mergedEntriesSelectionModel");
@@ -578,4 +597,5 @@
 
         Way myWay = new Way(1);
+        myWay.incomplete = false;
         myWay.addNode(new Node(1));
         myWay.addNode(new Node(2));
@@ -591,7 +611,7 @@
 
         assertEquals(3, mergedNodes.size());
-        assertEquals(10, mergedNodes.get(0).id);
-        assertEquals(12, mergedNodes.get(1).id);
-        assertEquals(11, mergedNodes.get(2).id);
+        assertEquals(10, mergedNodes.get(0).getId());
+        assertEquals(12, mergedNodes.get(1).getId());
+        assertEquals(11, mergedNodes.get(2).getId());
 
         DefaultListSelectionModel mergedSelection = inspectListSelectionModel(model, "mergedEntriesSelectionModel");
@@ -604,4 +624,5 @@
 
         Way myWay = new Way(1);
+        myWay.incomplete = false;
         myWay.addNode(new Node(1));
         myWay.addNode(new Node(2));
@@ -619,9 +640,9 @@
 
         assertEquals(5, mergedNodes.size());
-        assertEquals(10, mergedNodes.get(0).id);
-        assertEquals(12, mergedNodes.get(1).id);
-        assertEquals(11, mergedNodes.get(2).id);
-        assertEquals(14, mergedNodes.get(3).id);
-        assertEquals(13, mergedNodes.get(4).id);
+        assertEquals(10, mergedNodes.get(0).getId());
+        assertEquals(12, mergedNodes.get(1).getId());
+        assertEquals(11, mergedNodes.get(2).getId());
+        assertEquals(14, mergedNodes.get(3).getId());
+        assertEquals(13, mergedNodes.get(4).getId());
 
         DefaultListSelectionModel mergedSelection = inspectListSelectionModel(model, "mergedEntriesSelectionModel");
@@ -634,4 +655,5 @@
 
         Way myWay = new Way(1);
+        myWay.incomplete = false;
         myWay.addNode(new Node(1));
         myWay.addNode(new Node(2));
@@ -649,9 +671,9 @@
 
         assertEquals(5, mergedNodes.size());
-        assertEquals(10, mergedNodes.get(0).id);
-        assertEquals(14, mergedNodes.get(1).id);
-        assertEquals(11, mergedNodes.get(2).id);
-        assertEquals(12, mergedNodes.get(3).id);
-        assertEquals(13, mergedNodes.get(4).id);
+        assertEquals(10, mergedNodes.get(0).getId());
+        assertEquals(14, mergedNodes.get(1).getId());
+        assertEquals(11, mergedNodes.get(2).getId());
+        assertEquals(12, mergedNodes.get(3).getId());
+        assertEquals(13, mergedNodes.get(4).getId());
 
         DefaultListSelectionModel mergedSelection = inspectListSelectionModel(model, "mergedEntriesSelectionModel");
