Index: trunk/src/org/openstreetmap/josm/actions/AbstractInfoAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/AbstractInfoAction.java	(revision 2272)
+++ trunk/src/org/openstreetmap/josm/actions/AbstractInfoAction.java	(revision 2273)
@@ -108,5 +108,5 @@
         Iterator<OsmPrimitive> it = primitivesToShow.iterator();
         while(it.hasNext()) {
-            if (it.next().getId() == 0) {
+            if (it.next().isNew()) {
                 it.remove();
             }
Index: trunk/src/org/openstreetmap/josm/actions/CombineWayAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/CombineWayAction.java	(revision 2272)
+++ trunk/src/org/openstreetmap/josm/actions/CombineWayAction.java	(revision 2273)
@@ -81,5 +81,5 @@
         for (Way w : combinedWays) {
             targetWay = w;
-            if (w.getId() != 0) {
+            if (!w.isNew()) {
                 break;
             }
Index: trunk/src/org/openstreetmap/josm/actions/MergeNodesAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/MergeNodesAction.java	(revision 2272)
+++ trunk/src/org/openstreetmap/josm/actions/MergeNodesAction.java	(revision 2273)
@@ -89,5 +89,5 @@
         Node targetNode = null;
         for (Node n: candidates) {
-            if (n.getId() > 0) {
+            if (!n.isNew()) {
                 targetNode = n;
                 break;
Index: trunk/src/org/openstreetmap/josm/actions/SaveActionBase.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/SaveActionBase.java	(revision 2272)
+++ trunk/src/org/openstreetmap/josm/actions/SaveActionBase.java	(revision 2273)
@@ -36,5 +36,5 @@
     public boolean doSave() {
         Layer layer = null;
-        if (layer == null && Main.map != null && (Main.map.mapView.getActiveLayer() instanceof OsmDataLayer
+        if (Main.map != null && (Main.map.mapView.getActiveLayer() instanceof OsmDataLayer
                 || Main.map.mapView.getActiveLayer() instanceof GpxLayer)) {
             layer = Main.map.mapView.getActiveLayer();
@@ -140,5 +140,5 @@
     private boolean isDataSetEmpty(OsmDataLayer layer) {
         for (OsmPrimitive osm : layer.data.allNonDeletedPrimitives())
-            if (!osm.isDeleted() || osm.getId() > 0)
+            if (!osm.isDeleted() || !osm.isNew())
                 return false;
         return true;
Index: trunk/src/org/openstreetmap/josm/actions/UpdateSelectionAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/UpdateSelectionAction.java	(revision 2272)
+++ trunk/src/org/openstreetmap/josm/actions/UpdateSelectionAction.java	(revision 2273)
@@ -134,5 +134,5 @@
      *
      */
-    class UpdatePrimitivesTask extends PleaseWaitRunnable {
+    static class UpdatePrimitivesTask extends PleaseWaitRunnable {
         private DataSet ds;
         private boolean canceled;
@@ -170,10 +170,10 @@
         protected void initMultiFetchReaderWithNodes(MultiFetchServerObjectReader reader) {
             for (OsmPrimitive primitive : toUpdate) {
-                if (primitive instanceof Node && primitive.getId() > 0) {
+                if (primitive instanceof Node && !primitive.isNew()) {
                     reader.append((Node)primitive);
                 } else if (primitive instanceof Way) {
                     Way way = (Way)primitive;
                     for (Node node: way.getNodes()) {
-                        if (node.getId() > 0) {
+                        if (!node.isNew()) {
                             reader.append(node);
                         }
@@ -185,5 +185,5 @@
         protected void initMultiFetchReaderWithWays(MultiFetchServerObjectReader reader) {
             for (OsmPrimitive primitive : toUpdate) {
-                if (primitive instanceof Way && primitive.getId() > 0) {
+                if (primitive instanceof Way && !primitive.isNew()) {
                     reader.append((Way)primitive);
                 }
@@ -193,5 +193,5 @@
         protected void initMultiFetchReaderWithRelations(MultiFetchServerObjectReader reader) {
             for (OsmPrimitive primitive : toUpdate) {
-                if (primitive instanceof Relation && primitive.getId() > 0) {
+                if (primitive instanceof Relation && !primitive.isNew()) {
                     reader.append((Relation)primitive);
                 }
Index: trunk/src/org/openstreetmap/josm/actions/UploadAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/UploadAction.java	(revision 2272)
+++ trunk/src/org/openstreetmap/josm/actions/UploadAction.java	(revision 2273)
@@ -5,5 +5,4 @@
 
 import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
 import java.awt.event.KeyEvent;
 import java.io.IOException;
@@ -18,6 +17,4 @@
 import java.util.regex.Pattern;
 
-import javax.swing.JButton;
-import javax.swing.JDialog;
 import javax.swing.JOptionPane;
 
@@ -38,6 +35,4 @@
 import org.openstreetmap.josm.gui.PleaseWaitRunnable;
 import org.openstreetmap.josm.gui.HelpAwareOptionPane.ButtonSpec;
-import org.openstreetmap.josm.gui.help.HelpBrowser;
-import org.openstreetmap.josm.gui.help.HelpBuilder;
 import org.openstreetmap.josm.gui.io.UploadDialog;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
@@ -53,5 +48,4 @@
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.Shortcut;
-import org.openstreetmap.josm.tools.WindowGeometry;
 import org.xml.sax.SAXException;
 
@@ -234,7 +228,7 @@
         String lbl = "";
         switch(primitiveType) {
-            case NODE: lbl =  tr("Synchronize node {0} only", id); break;
-            case WAY: lbl =  tr("Synchronize way {0} only", id); break;
-            case RELATION: lbl =  tr("Synchronize relation {0} only", id); break;
+        case NODE: lbl =  tr("Synchronize node {0} only", id); break;
+        case WAY: lbl =  tr("Synchronize way {0} only", id); break;
+        case RELATION: lbl =  tr("Synchronize relation {0} only", id); break;
         }
         ButtonSpec[] spec = new ButtonSpec[] {
@@ -280,7 +274,7 @@
         );
         switch(ret) {
-            case 0: synchronizePrimitive(primitiveType, id); break;
-            case 1: synchronizeDataSet(); break;
-            default: return;
+        case 0: synchronizePrimitive(primitiveType, id); break;
+        case 1: synchronizeDataSet(); break;
+        default: return;
         }
     }
Index: trunk/src/org/openstreetmap/josm/actions/UploadSelectionAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/UploadSelectionAction.java	(revision 2272)
+++ trunk/src/org/openstreetmap/josm/actions/UploadSelectionAction.java	(revision 2273)
@@ -68,15 +68,15 @@
         HashSet<OsmPrimitive> ret = new HashSet<OsmPrimitive>();
         for (OsmPrimitive p : ds.nodes) {
-            if (p.isDeleted() && p.getId() > 0 && p.isVisible() && p.isModified()) {
+            if (p.isDeleted() && !p.isNew() && p.isVisible() && p.isModified()) {
                 ret.add(p);
             }
         }
         for (OsmPrimitive p : ds.ways) {
-            if (p.isDeleted() && p.getId() > 0 && p.isVisible() && p.isModified()) {
+            if (p.isDeleted() && !p.isNew() && p.isVisible() && p.isModified()) {
                 ret.add(p);
             }
         }
         for (OsmPrimitive p : ds.relations) {
-            if (p.isDeleted() && p.getId() > 0 && p.isVisible() && p.isModified()) {
+            if (p.isDeleted() && !p.isNew() && p.isVisible() && p.isModified()) {
                 ret.add(p);
             }
@@ -88,5 +88,5 @@
         HashSet<OsmPrimitive> ret = new HashSet<OsmPrimitive>();
         for (OsmPrimitive p: primitives) {
-            if (p.getId() == 0) {
+            if (p.isNew()) {
                 ret.add(p);
             } else if (p.isVisible() && p.isModified() && !p.incomplete) {
@@ -135,5 +135,5 @@
     protected boolean hasPrimitivesToDelete(Collection<OsmPrimitive> primitives) {
         for (OsmPrimitive p: primitives)
-            if (p.isDeleted() && p.isModified() && p.getId() > 0)
+            if (p.isDeleted() && p.isModified() && !p.isNew())
                 return true;
         return false;
@@ -188,5 +188,5 @@
 
         public void visit(Node n) {
-            if (n.getId() == 0 || ((n.isModified() || n.isDeleted()) && n.isVisible())) {
+            if (n.isNew() || ((n.isModified() || n.isDeleted()) && n.isVisible())) {
                 // upload new nodes as well as modified and deleted ones
                 hull.add(n);
@@ -195,5 +195,5 @@
 
         public void visit(Way w) {
-            if (w.getId() == 0 || ((w.isModified() || w.isDeleted()) && w.isVisible())) {
+            if (w.isNew() || ((w.isModified() || w.isDeleted()) && w.isVisible())) {
                 // upload new ways as well as modified and deleted ones
                 hull.add(w);
@@ -207,5 +207,5 @@
 
         public void visit(Relation r) {
-            if (r.getId() == 0 || ((r.isModified() || r.isDeleted()) && r.isVisible())) {
+            if (r.isNew() || ((r.isModified() || r.isDeleted()) && r.isVisible())) {
                 hull.add(r);
                 for (OsmPrimitive p : r.getMemberPrimitives()) {
@@ -214,5 +214,5 @@
                     // so wont check here for deleted primitives here
                     //
-                    if (p.getId() == 0) {
+                    if (p.isNew()) {
                         p.visit(this);
                     }
@@ -297,5 +297,5 @@
             HashSet<OsmPrimitive> ret = new HashSet<OsmPrimitive>();
             for (OsmPrimitive p: toUpload) {
-                if (p.isDeleted() && p.getId() >0) {
+                if (p.isDeleted() && !p.isNew()) {
                     ret.add(p);
                 }
Index: trunk/src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmTaskList.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmTaskList.java	(revision 2272)
+++ trunk/src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmTaskList.java	(revision 2273)
@@ -155,15 +155,15 @@
         HashSet<OsmPrimitive> ret = new HashSet<OsmPrimitive>();
         for (OsmPrimitive primitive : ds.nodes) {
-            if (!primitive.incomplete && primitive.getId() == 0) {
+            if (!primitive.incomplete && primitive.isNew()) {
                 ret.add(primitive);
             }
         }
         for (OsmPrimitive primitive : ds.ways) {
-            if (! primitive.incomplete && primitive.getId() == 0) {
+            if (! primitive.incomplete && primitive.isNew()) {
                 ret.add(primitive);
             }
         }
         for (OsmPrimitive primitive : ds.relations) {
-            if (! primitive.incomplete && primitive.getId() == 0) {
+            if (! primitive.incomplete && primitive.isNew()) {
                 ret.add(primitive);
             }
Index: trunk/src/org/openstreetmap/josm/actions/search/SearchCompiler.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/search/SearchCompiler.java	(revision 2272)
+++ trunk/src/org/openstreetmap/josm/actions/search/SearchCompiler.java	(revision 2273)
@@ -33,5 +33,5 @@
     private String  rxErrorMsg = marktr("The regex \"{0}\" had a parse error at offset {1}, full error:\n\n{2}");
     private PushbackTokenizer tokenizer;
-    private static CollectBackReferencesVisitor childBackRefs;
+    private CollectBackReferencesVisitor childBackRefs;
 
     public SearchCompiler(boolean caseSensitive, boolean regexSearch, PushbackTokenizer tokenizer) {
@@ -230,42 +230,42 @@
 
             switch (mode) {
-                case NONE:
-                    return false;
-                case MISSING_KEY:
-                    return osm.get(key) == null;
-                case ANY:
-                    return true;
-                case ANY_VALUE:
-                    return osm.get(key) != null;
-                case ANY_KEY:
-                    for (String v:osm.getKeys().values()) {
-                        if (v.equals(value))
+            case NONE:
+                return false;
+            case MISSING_KEY:
+                return osm.get(key) == null;
+            case ANY:
+                return true;
+            case ANY_VALUE:
+                return osm.get(key) != null;
+            case ANY_KEY:
+                for (String v:osm.getKeys().values()) {
+                    if (v.equals(value))
+                        return true;
+                }
+                return false;
+            case EXACT:
+                return value.equals(osm.get(key));
+            case ANY_KEY_REGEXP:
+                for (String v:osm.getKeys().values()) {
+                    if (valuePattern.matcher(v).matches())
+                        return true;
+                }
+                return false;
+            case ANY_VALUE_REGEXP:
+            case EXACT_REGEXP:
+                for (Entry<String, String> entry:osm.entrySet()) {
+                    if (keyPattern.matcher(entry.getKey()).matches()) {
+                        if (mode == Mode.ANY_VALUE_REGEXP
+                                || valuePattern.matcher(entry.getValue()).matches())
                             return true;
                     }
-                    return false;
-                case EXACT:
-                    return value.equals(osm.get(key));
-                case ANY_KEY_REGEXP:
-                    for (String v:osm.getKeys().values()) {
-                        if (valuePattern.matcher(v).matches())
-                            return true;
-                    }
-                    return false;
-                case ANY_VALUE_REGEXP:
-                case EXACT_REGEXP:
-                    for (Entry<String, String> entry:osm.entrySet()) {
-                        if (keyPattern.matcher(entry.getKey()).matches()) {
-                            if (mode == Mode.ANY_VALUE_REGEXP
-                                    || valuePattern.matcher(entry.getValue()).matches())
-                                return true;
-                        }
-                    }
-                    return false;
-                case MISSING_KEY_REGEXP:
-                    for (String k:osm.keySet()) {
-                        if (keyPattern.matcher(k).matches())
-                            return false;
-                    }
-                    return true;
+                }
+                return false;
+            case MISSING_KEY_REGEXP:
+                for (String k:osm.keySet()) {
+                    if (keyPattern.matcher(k).matches())
+                        return false;
+                }
+                return true;
             }
             throw new AssertionError("Missed state");
@@ -417,5 +417,5 @@
     private static class Modified extends Match {
         @Override public boolean match(OsmPrimitive osm) {
-            return osm.isModified() || osm.getId() == 0;
+            return osm.isModified() || osm.isNew();
         }
         @Override public String toString() {return "modified";}
@@ -473,13 +473,19 @@
 
     private static class Child extends Match {
-        private Match parent;
-        public Child(Match m) { parent = m; }
-        @Override public boolean match(OsmPrimitive osm) throws ParseError {
+        private final Match parent;
+        private final CollectBackReferencesVisitor childBackRefs;
+
+        public Child(Match m, CollectBackReferencesVisitor childBackRefs) {
             // "child" (null) should mean the same as "child()"
             // (Always). I.e. match everything
-            if (parent == null) {
+            if (m == null) {
                 parent = new Always();
-            }
-
+            } else {
+                parent = m;
+            }
+            this.childBackRefs = childBackRefs;
+        }
+
+        @Override public boolean match(OsmPrimitive osm) throws ParseError {
             boolean isChild = false;
             childBackRefs.initialize();
@@ -592,5 +598,5 @@
             return new Selected();
         else if (tok.equals("child"))
-            return new Child(parseParens());
+            return new Child(parseParens(), childBackRefs);
         else if (tok.equals("parent"))
             return new Parent(parseParens());
Index: trunk/src/org/openstreetmap/josm/actions/upload/CyclicUploadDependencyException.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/upload/CyclicUploadDependencyException.java	(revision 2272)
+++ trunk/src/org/openstreetmap/josm/actions/upload/CyclicUploadDependencyException.java	(revision 2273)
@@ -22,5 +22,5 @@
         if (r.getName() != null) {
             sb.append("'").append(r.getName()).append("'");
-        } else if (r.getId() > 0) {
+        } else if (!r.isNew()) {
             sb.append(r.getId());
         } else {
Index: trunk/src/org/openstreetmap/josm/command/DeleteCommand.java
===================================================================
--- trunk/src/org/openstreetmap/josm/command/DeleteCommand.java	(revision 2272)
+++ trunk/src/org/openstreetmap/josm/command/DeleteCommand.java	(revision 2273)
@@ -109,7 +109,7 @@
             String msg = "";
             switch(OsmPrimitiveType.from(primitive)) {
-                case NODE: msg = "Delete node {0}"; break;
-                case WAY: msg = "Delete way {0}"; break;
-                case RELATION:msg = "Delete relation {0}"; break;
+            case NODE: msg = "Delete node {0}"; break;
+            case WAY: msg = "Delete way {0}"; break;
+            case RELATION:msg = "Delete relation {0}"; break;
             }
 
@@ -130,7 +130,7 @@
             apiname = t.getAPIName();
             switch(t) {
-                case NODE: msg = trn("Delete {0} node", "Delete {0} nodes", toDelete.size(), toDelete.size()); break;
-                case WAY: msg = trn("Delete {0} way", "Delete {0} ways", toDelete.size(), toDelete.size()); break;
-                case RELATION: msg = trn("Delete {0} relation", "Delete {0} relations", toDelete.size(), toDelete.size()); break;
+            case NODE: msg = trn("Delete {0} node", "Delete {0} nodes", toDelete.size(), toDelete.size()); break;
+            case WAY: msg = trn("Delete {0} way", "Delete {0} ways", toDelete.size(), toDelete.size()); break;
+            case RELATION: msg = trn("Delete {0} relation", "Delete {0} relations", toDelete.size(), toDelete.size()); break;
             }
         }
@@ -185,5 +185,5 @@
             return 1;
 
-        String role = new String();
+        String role = "";
         for (RelationMember m : ref.getMembers()) {
             if (m.getMember() == osm) {
@@ -399,5 +399,5 @@
             }
             Way w = (Way) primitive;
-            if (w.getId() == 0) { // new ways with id == 0 are fine,
+            if (w.isNew()) { // new ways with id == 0 are fine,
                 continue; // process existing ways only
             }
@@ -407,5 +407,5 @@
             // nodes ...
             for (Node n : wnew.getNodes()) {
-                if (n.getId() != 0 || !primitivesToDelete.contains(n)) {
+                if (!n.isNew() || !primitivesToDelete.contains(n)) {
                     nodesToKeep.add(n);
                 }
@@ -470,5 +470,5 @@
         if (a != null) {
             for (OsmPrimitive osm : primitivesToDelete) {
-                if (osm instanceof Node && osm.getId() != 0) {
+                if (osm instanceof Node && !osm.isNew()) {
                     Node n = (Node) osm;
                     if (!a.contains(n.getCoor())) {
Index: trunk/src/org/openstreetmap/josm/data/APIDataSet.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/APIDataSet.java	(revision 2272)
+++ trunk/src/org/openstreetmap/josm/data/APIDataSet.java	(revision 2273)
@@ -58,9 +58,9 @@
                 continue;
             }
-            if (osm.getId() == 0 && !osm.isDeleted()) {
+            if (osm.isNew() && !osm.isDeleted()) {
                 toAdd.addLast(osm);
             } else if (osm.isModified() && !osm.isDeleted()) {
                 toUpdate.addLast(osm);
-            } else if (osm.isDeleted() && osm.getId() != 0 && osm.isModified()) {
+            } else if (osm.isDeleted() && !osm.isNew() && osm.isModified()) {
                 toDelete.addFirst(osm);
             }
@@ -119,9 +119,9 @@
         toDelete.clear();
         for (OsmPrimitive osm: primitives) {
-            if (osm.getId() == 0 && !osm.isDeleted()) {
+            if (osm.isNew() && !osm.isDeleted()) {
                 toAdd.addLast(osm);
             } else if (osm.isModified() && !osm.isDeleted()) {
                 toUpdate.addLast(osm);
-            } else if (osm.isDeleted() && osm.getId() != 0 && osm.isModified()) {
+            } else if (osm.isDeleted() && !osm.isNew() && osm.isModified()) {
                 toDelete.addFirst(osm);
             }
@@ -216,5 +216,5 @@
             boolean refersToNewRelation = false;
             for (RelationMember m : relation.getMembers()) {
-                if (m.isRelation() && m.getMember().getId() <= 0) {
+                if (m.isRelation() && m.getMember().isNew()) {
                     refersToNewRelation = true;
                     break;
@@ -253,10 +253,10 @@
             this.relations = new HashSet<Relation>();
             for(Relation relation: relations) {
-                if (relation.getId() > 0 ) {
+                if (!relation.isNew() ) {
                     continue;
                 }
                 this.relations.add(relation);
                 for (RelationMember m: relation.getMembers()) {
-                    if (m.isRelation() && m.getMember().getId() == 0) {
+                    if (m.isRelation() && m.getMember().isNew()) {
                         addDependency(relation, (Relation)m.getMember());
                     }
@@ -306,5 +306,5 @@
                     new Comparator<Relation>() {
                         public int compare(Relation o1, Relation o2) {
-                            return new Integer(uploadOrder.indexOf(o1)).compareTo(uploadOrder.indexOf(o2));
+                            return Integer.valueOf(uploadOrder.indexOf(o1)).compareTo(uploadOrder.indexOf(o2));
                         }
                     }
Index: trunk/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java	(revision 2272)
+++ trunk/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java	(revision 2273)
@@ -332,4 +332,12 @@
     public long getId() {
         return id;
+    }
+
+    /**
+     * 
+     * @return True if primitive is new (not yet uploaded the server, id <= 0)
+     */
+    public boolean isNew() {
+        return id <= 0;
     }
 
Index: trunk/src/org/openstreetmap/josm/data/osm/visitor/CreateOsmChangeVisitor.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/visitor/CreateOsmChangeVisitor.java	(revision 2272)
+++ trunk/src/org/openstreetmap/josm/data/osm/visitor/CreateOsmChangeVisitor.java	(revision 2273)
@@ -52,5 +52,5 @@
             osmwriter.visit(n);
         } else {
-            switchMode((n.getId() == 0) ? "create" : "modify");
+            switchMode(n.isNew() ? "create" : "modify");
             osmwriter.setWithBody(true);
             osmwriter.visit(n);
@@ -63,5 +63,5 @@
             osmwriter.visit(w);
         } else {
-            switchMode((w.getId() == 0) ? "create" : "modify");
+            switchMode(w.isNew() ? "create" : "modify");
             osmwriter.setWithBody(true);
             osmwriter.visit(w);
@@ -74,5 +74,5 @@
             osmwriter.visit(r);
         } else {
-            switchMode((r.getId() == 0) ? "create" : "modify");
+            switchMode(r.isNew() ? "create" : "modify");
             osmwriter.setWithBody(true);
             osmwriter.visit(r);
Index: trunk/src/org/openstreetmap/josm/data/osm/visitor/MergeSourceBuildingVisitor.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/visitor/MergeSourceBuildingVisitor.java	(revision 2272)
+++ trunk/src/org/openstreetmap/josm/data/osm/visitor/MergeSourceBuildingVisitor.java	(revision 2273)
@@ -123,5 +123,4 @@
             clone = new Relation(primitive.getId());
         }
-        clone.incomplete = true;
         mappedPrimitives.put(primitive, clone);
     }
@@ -173,8 +172,4 @@
         // ... and the way itself
         rememberWay(w);
-    }
-
-    protected boolean isNew(OsmPrimitive primitive) {
-        return primitive.getId() == 0;
     }
 
@@ -202,5 +197,5 @@
                 if (isInSelectionBase(node)) {
                     rememberNode(node);
-                } else if (isNew(node)) {
+                } else if (node.isNew()) {
                     rememberNode(node);
                 } else  {
@@ -211,5 +206,5 @@
                 if (isInSelectionBase(way)) {
                     way.visit(this);
-                } else if (isNew(way)) {
+                } else if (way.isNew()) {
                     way.visit(this);
                 } else {
@@ -220,5 +215,5 @@
                 if (isInSelectionBase(member.getMember())) {
                     relation.visit(this);
-                } else if (isNew(relation)) {
+                } else if (relation.isNew()) {
                     relation.visit(this);
                 } else {
Index: trunk/src/org/openstreetmap/josm/data/osm/visitor/MergeVisitor.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/visitor/MergeVisitor.java	(revision 2272)
+++ trunk/src/org/openstreetmap/josm/data/osm/visitor/MergeVisitor.java	(revision 2273)
@@ -62,11 +62,11 @@
         this.theirDataSet = theirDataSet;
 
-        for (Node n : myDataSet.nodes) if (n.getId() != 0) {
+        for (Node n : myDataSet.nodes) if (!n.isNew()) {
             nodeshash.put(n.getId(), n);
         }
-        for (Way w : myDataSet.ways) if (w.getId() != 0) {
+        for (Way w : myDataSet.ways) if (!w.isNew()) {
             wayshash.put(w.getId(), w);
         }
-        for (Relation r : myDataSet.relations) if (r.getId() != 0) {
+        for (Relation r : myDataSet.relations) if (!r.isNew()) {
             relshash.put(r.getId(), r);
         }
@@ -98,5 +98,5 @@
             HashMap<Long, P> primitivesWithDefinedIds) {
 
-        if (other.getId() > 0 ) {
+        if (!other.isNew() ) {
             // try to merge onto a matching primitive with the same
             // defined id
@@ -109,5 +109,5 @@
             //
             for (P my : myPrimitives) {
-                if (my.getId() >0 ) {
+                if (!my.isNew()) {
                     continue;
                 }
Index: trunk/src/org/openstreetmap/josm/gui/DefaultNameFormatter.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/DefaultNameFormatter.java	(revision 2272)
+++ trunk/src/org/openstreetmap/josm/gui/DefaultNameFormatter.java	(revision 2273)
@@ -97,5 +97,5 @@
             }
             if (name == null) {
-                name = node.getId() == 0 ? tr("node") : ""+ node.getId();
+                name = node.isNew() ? tr("node") : ""+ node.getId();
             }
             name += " (" + node.getCoor().latToString(CoordinateFormat.getDefaultFormat()) + ", " + node.getCoor().lonToString(CoordinateFormat.getDefaultFormat()) + ")";
Index: trunk/src/org/openstreetmap/josm/gui/MapStatus.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/MapStatus.java	(revision 2272)
+++ trunk/src/org/openstreetmap/josm/gui/MapStatus.java	(revision 2273)
@@ -320,6 +320,7 @@
             // pressed. Cannot use "setSelected()" because it will cause a
             // fireSelectionChanged event which is unnecessary at this point.
-            if((mods & MouseEvent.SHIFT_DOWN_MASK) == 0)
+            if((mods & MouseEvent.SHIFT_DOWN_MASK) == 0) {
                 ds.clearSelection();
+            }
 
             // This will cycle through the available items.
@@ -415,10 +416,10 @@
             final StringBuilder text = new StringBuilder();
             String name = osm.getDisplayName(DefaultNameFormatter.getInstance());
-            if (osm.getId() == 0 || osm.isModified()) {
+            if (osm.isNew() || osm.isModified()) {
                 name = "<i><b>"+ name + "*</b></i>";
             }
             text.append(name);
 
-            if (osm.getId() != 0) {
+            if (!osm.isNew()) {
                 text.append(" [id="+osm.getId()+"]");
             }
Index: trunk/src/org/openstreetmap/josm/gui/NavigatableComponent.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/NavigatableComponent.java	(revision 2272)
+++ trunk/src/org/openstreetmap/josm/gui/NavigatableComponent.java	(revision 2273)
@@ -318,6 +318,6 @@
             // when multiple nodes on one point, prefer new or selected nodes
             else if(dist == minDistanceSq && minPrimitive != null
-                    && ((n.getId() == 0 && ds.isSelected(n))
-                            || (!ds.isSelected(minPrimitive) && (ds.isSelected(n) || n.getId() == 0)))) {
+                    && ((n.isNew() && ds.isSelected(n))
+                            || (!ds.isSelected(minPrimitive) && (ds.isSelected(n) || n.isNew())))) {
                 minPrimitive = n;
             }
Index: trunk/src/org/openstreetmap/josm/gui/conflict/pair/nodes/NodeListMergeModel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/conflict/pair/nodes/NodeListMergeModel.java	(revision 2272)
+++ trunk/src/org/openstreetmap/josm/gui/conflict/pair/nodes/NodeListMergeModel.java	(revision 2273)
@@ -76,5 +76,5 @@
     @Override
     public boolean isEqualEntry(Node e1, Node e2) {
-        if (e1.getId() > 0)
+        if (!e1.isNew())
             return e1.getId() == e2.getId();
         else
Index: trunk/src/org/openstreetmap/josm/gui/conflict/pair/properties/PropertiesMergeModel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/conflict/pair/properties/PropertiesMergeModel.java	(revision 2272)
+++ trunk/src/org/openstreetmap/josm/gui/conflict/pair/properties/PropertiesMergeModel.java	(revision 2273)
@@ -212,7 +212,7 @@
     public LatLon getMergedCoords() {
         switch(coordMergeDecision) {
-            case KEEP_MINE: return myCoords;
-            case KEEP_THEIR: return theirCoords;
-            case UNDECIDED: return null;
+        case KEEP_MINE: return myCoords;
+        case KEEP_THEIR: return theirCoords;
+        case UNDECIDED: return null;
         }
         // should not happen
@@ -246,7 +246,7 @@
     public Boolean getMergedDeletedState() {
         switch(deletedMergeDecision) {
-            case KEEP_MINE: return myDeletedState;
-            case KEEP_THEIR: return theirDeletedState;
-            case UNDECIDED: return null;
+        case KEEP_MINE: return myDeletedState;
+        case KEEP_THEIR: return theirDeletedState;
+        case UNDECIDED: return null;
         }
         // should not happen
@@ -279,7 +279,7 @@
     public Boolean getMergedVisibleState() {
         switch(visibleMergeDecision) {
-            case KEEP_MINE: return myVisibleState;
-            case KEEP_THEIR: return theirVisibleState;
-            case UNDECIDED: return null;
+        case KEEP_MINE: return myVisibleState;
+        case KEEP_THEIR: return theirVisibleState;
+        case UNDECIDED: return null;
         }
         // should not happen
@@ -484,7 +484,7 @@
 
         switch(ret) {
-            case JOptionPane.CLOSED_OPTION: return false;
-            case JOptionPane.YES_OPTION: return true;
-            case JOptionPane.NO_OPTION: return false;
+        case JOptionPane.CLOSED_OPTION: return false;
+        case JOptionPane.YES_OPTION: return true;
+        case JOptionPane.NO_OPTION: return false;
         }
         return false;
@@ -513,7 +513,7 @@
 
         switch(ret) {
-            case JOptionPane.CLOSED_OPTION: return false;
-            case JOptionPane.YES_OPTION: return true;
-            case JOptionPane.NO_OPTION: return false;
+        case JOptionPane.CLOSED_OPTION: return false;
+        case JOptionPane.YES_OPTION: return true;
+        case JOptionPane.NO_OPTION: return false;
         }
         return false;
@@ -535,5 +535,5 @@
         HashMap<Long,OsmPrimitive> candidates = new HashMap<Long,OsmPrimitive>();
         for (Node n : way.getNodes()) {
-            if (n.getId() > 0 && ! candidates.values().contains(n)) {
+            if (!n.isNew() && !candidates.values().contains(n)) {
                 candidates.put(n.getId(), n);
             }
@@ -572,5 +572,5 @@
         HashMap<Long,OsmPrimitive> candidates = new HashMap<Long, OsmPrimitive>();
         for (RelationMember m : r.getMembers()) {
-            if (m.getMember().getId() > 0 && !candidates.values().contains(m.getMember())) {
+            if (!m.getMember().isNew() && !candidates.values().contains(m.getMember())) {
                 candidates.put(m.getMember().getId(), m.getMember());
             }
Index: trunk/src/org/openstreetmap/josm/gui/conflict/pair/relation/RelationMemberListMergeModel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/conflict/pair/relation/RelationMemberListMergeModel.java	(revision 2272)
+++ trunk/src/org/openstreetmap/josm/gui/conflict/pair/relation/RelationMemberListMergeModel.java	(revision 2273)
@@ -25,5 +25,5 @@
     public boolean isEqualEntry(RelationMember e1, RelationMember e2) {
         boolean ret = e1.getRole().equals(e2.getRole());
-        if (e1.getMember().getId() > 0 ) {
+        if (!e1.getMember().isNew() ) {
             ret = ret && (e1.getMember().getId() == e2.getMember().getId());
         } else {
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/HistoryDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/HistoryDialog.java	(revision 2272)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/HistoryDialog.java	(revision 2273)
@@ -144,5 +144,5 @@
      *
      */
-    class HistoryItemTableModel extends DefaultTableModel implements SelectionChangedListener{
+    static class HistoryItemTableModel extends DefaultTableModel implements SelectionChangedListener{
         private ArrayList<OsmPrimitive> data;
         private DefaultListSelectionModel selectionModel;
@@ -196,5 +196,5 @@
                 return;
             for (OsmPrimitive primitive: Main.main.getCurrentDataSet().getSelected()) {
-                if (primitive.getId() == 0) {
+                if (primitive.isNew()) {
                     continue;
                 }
@@ -226,5 +226,5 @@
      * The column model
      */
-    class HistoryTableColumnModel extends DefaultTableColumnModel {
+    static class HistoryTableColumnModel extends DefaultTableColumnModel {
         protected void createColumns() {
             TableColumn col = null;
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/relation/ChildRelationBrowser.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/relation/ChildRelationBrowser.java	(revision 2272)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/relation/ChildRelationBrowser.java	(revision 2273)
@@ -365,5 +365,5 @@
                 if (member.isRelation()) {
                     Relation child = member.getRelation();
-                    if (!downloadedRelationIds.contains(child)) {
+                    if (!downloadedRelationIds.contains(child.getId())) {
                         relationsToDownload.push(child);
                     }
@@ -403,5 +403,5 @@
                 while(! relationsToDownload.isEmpty() && !cancelled) {
                     Relation r = relationsToDownload.pop();
-                    if (r.getId() == 0) {
+                    if (r.isNew()) {
                         continue;
                     }
@@ -514,5 +514,5 @@
                 while(it.hasNext() && !cancelled) {
                     Relation r = it.next();
-                    if (r.getId() == 0) {
+                    if (r.isNew()) {
                         continue;
                     }
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java	(revision 2272)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java	(revision 2273)
@@ -592,10 +592,10 @@
             );
             switch(ret) {
-                case ConditionalOptionPaneUtil.DIALOG_DISABLED_OPTION: return;
-                case JOptionPane.CLOSED_OPTION: return;
-                case JOptionPane.NO_OPTION: return;
-                case JOptionPane.YES_OPTION:
-                    memberTableModel.removeMembersReferringTo(toCheck);
-                    break;
+            case ConditionalOptionPaneUtil.DIALOG_DISABLED_OPTION: return;
+            case JOptionPane.CLOSED_OPTION: return;
+            case JOptionPane.NO_OPTION: return;
+            case JOptionPane.YES_OPTION:
+                memberTableModel.removeMembersReferringTo(toCheck);
+                break;
             }
         }
@@ -628,9 +628,9 @@
             );
             switch(ret) {
-                case ConditionalOptionPaneUtil.DIALOG_DISABLED_OPTION : return true;
-                case JOptionPane.YES_OPTION: return true;
-                case JOptionPane.NO_OPTION: return false;
-                case JOptionPane.CLOSED_OPTION: return false;
-                case JOptionPane.CANCEL_OPTION: throw new AddAbortException();
+            case ConditionalOptionPaneUtil.DIALOG_DISABLED_OPTION : return true;
+            case JOptionPane.YES_OPTION: return true;
+            case JOptionPane.NO_OPTION: return false;
+            case JOptionPane.CLOSED_OPTION: return false;
+            case JOptionPane.CANCEL_OPTION: throw new AddAbortException();
             }
             // should not happen
@@ -1064,7 +1064,7 @@
             );
             switch(ret) {
-                case JOptionPane.CANCEL_OPTION: return false;
-                case JOptionPane.YES_OPTION: return true;
-                case JOptionPane.NO_OPTION: return false;
+            case JOptionPane.CANCEL_OPTION: return false;
+            case JOptionPane.YES_OPTION: return true;
+            case JOptionPane.NO_OPTION: return false;
             }
             return false;
@@ -1200,5 +1200,5 @@
 
         protected void updateEnabledState() {
-            setEnabled(getRelation() != null && getRelation().getId() > 0);
+            setEnabled(getRelation() != null && !getRelation().isNew());
         }
     }
@@ -1240,8 +1240,8 @@
             );
             switch(ret) {
-                case JOptionPane.YES_OPTION: return true;
-                case ConditionalOptionPaneUtil.DIALOG_DISABLED_OPTION: return true;
-                default:
-                    return false;
+            case JOptionPane.YES_OPTION: return true;
+            case ConditionalOptionPaneUtil.DIALOG_DISABLED_OPTION: return true;
+            default:
+                return false;
             }
         }
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableModel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableModel.java	(revision 2272)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableModel.java	(revision 2273)
@@ -202,5 +202,5 @@
         for (int i=0; i< members.size();i++) {
             RelationMember member = members.get(i);
-            if (member.getMember().getId() == 0) {
+            if (member.getMember().isNew()) {
                 continue;
             }
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/relation/ParentRelationLoadingTask.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/relation/ParentRelationLoadingTask.java	(revision 2272)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/relation/ParentRelationLoadingTask.java	(revision 2273)
@@ -79,5 +79,5 @@
         if (layer == null)
             throw new IllegalArgumentException(tr("Parameter ''{0}'' must not be null.", "layer"));
-        if (child.getId() == 0)
+        if (child.isNew())
             throw new IllegalArgumentException(tr("Value of child.getId() > 0 expected. Got {1}.", child.getId()));
         referrers = null;
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/relation/ReferringRelationsBrowserModel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/relation/ReferringRelationsBrowserModel.java	(revision 2272)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/relation/ReferringRelationsBrowserModel.java	(revision 2273)
@@ -89,5 +89,5 @@
 
     public boolean canReload() {
-        return relation != null && relation.getId() > 0;
+        return relation != null && !relation.isNew();
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/relation/RelationEditor.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/relation/RelationEditor.java	(revision 2272)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/relation/RelationEditor.java	(revision 2273)
@@ -117,5 +117,5 @@
         if (getRelation() == null) {
             setTitle(tr("Create new relation in layer ''{0}''", layer.getName()));
-        } else if (getRelation().getId() == 0) {
+        } else if (getRelation().isNew()) {
             setTitle(tr("Edit new relation in layer ''{0}''", layer.getName()));
         } else {
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/relation/RelationTree.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/relation/RelationTree.java	(revision 2272)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/relation/RelationTree.java	(revision 2273)
@@ -91,5 +91,5 @@
             TreePath path  = event.getPath();
             Relation parent = (Relation)event.getPath().getLastPathComponent();
-            if (! parent.incomplete || parent.getId() == 0)
+            if (! parent.incomplete || parent.isNew())
                 // we don't load complete  or new relations
                 return;
Index: trunk/src/org/openstreetmap/josm/gui/io/UploadDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/io/UploadDialog.java	(revision 2272)
+++ trunk/src/org/openstreetmap/josm/gui/io/UploadDialog.java	(revision 2273)
@@ -362,9 +362,9 @@
     protected String getUploadComment() {
         switch(southTabbedPane.getSelectedIndex()) {
-            case 0:
-                return pnlChangesetSelection.getUploadComment();
-            case 1:
-                TagModel tm = tagEditorPanel.getModel().get("comment");
-                return tm == null? "" : tm.getValue();
+        case 0:
+            return pnlChangesetSelection.getUploadComment();
+        case 1:
+            TagModel tm = tagEditorPanel.getModel().get("comment");
+            return tm == null? "" : tm.getValue();
         }
         return "";
Index: trunk/src/org/openstreetmap/josm/io/MultiFetchServerObjectReader.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/MultiFetchServerObjectReader.java	(revision 2272)
+++ trunk/src/org/openstreetmap/josm/io/MultiFetchServerObjectReader.java	(revision 2273)
@@ -155,5 +155,5 @@
     public MultiFetchServerObjectReader append(Node node) {
         if (node == null) return this;
-        if (node.getId() == 0) return this;
+        if (node.isNew()) return this;
         remember(node.getId(), OsmPrimitiveType.NODE);
         return this;
@@ -169,7 +169,7 @@
     public MultiFetchServerObjectReader append(Way way) {
         if (way == null) return this;
-        if (way.getId() == 0) return this;
+        if (way.isNew()) return this;
         for (Node node: way.getNodes()) {
-            if (node.getId() > 0) {
+            if (!node.isNew()) {
                 remember(node.getId(), OsmPrimitiveType.NODE);
             }
@@ -188,5 +188,5 @@
     public MultiFetchServerObjectReader append(Relation relation) {
         if (relation == null) return this;
-        if (relation.getId() == 0) return this;
+        if (relation.isNew()) return this;
         remember(relation.getId(), OsmPrimitiveType.RELATION);
         for (RelationMember member : relation.getMembers()) {
Index: trunk/src/org/openstreetmap/josm/io/OsmApi.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/OsmApi.java	(revision 2272)
+++ trunk/src/org/openstreetmap/josm/io/OsmApi.java	(revision 2273)
@@ -555,10 +555,10 @@
                 String errorBody = responseBody == null ? null : responseBody.toString().trim();
                 switch(retCode) {
-                    case HttpURLConnection.HTTP_OK:
-                        break; // do nothing
-                    case HttpURLConnection.HTTP_GONE:
-                        throw new OsmApiPrimitiveGoneException(errorHeader, errorBody);
-                    default:
-                        throw new OsmApiException(retCode, errorHeader, errorBody);
+                case HttpURLConnection.HTTP_OK:
+                    break; // do nothing
+                case HttpURLConnection.HTTP_GONE:
+                    throw new OsmApiPrimitiveGoneException(errorHeader, errorBody);
+                default:
+                    throw new OsmApiException(retCode, errorHeader, errorBody);
 
                 }
Index: trunk/src/org/openstreetmap/josm/io/OsmServerBackreferenceReader.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/OsmServerBackreferenceReader.java	(revision 2272)
+++ trunk/src/org/openstreetmap/josm/io/OsmServerBackreferenceReader.java	(revision 2273)
@@ -51,5 +51,5 @@
         if (primitive == null)
             throw new IllegalArgumentException(tr("Parameter ''{0}'' must not be null.", "primitive"));
-        if (primitive.getId() == 0)
+        if (primitive.isNew())
             throw new IllegalArgumentException(tr("ID parameter ''{0}'' > 0 expected. Got ''{1}''.", "primitive", primitive.getId()));
         this.id = primitive.getId();
@@ -222,5 +222,5 @@
             if (isReadFull() ||primitiveType.equals(OsmPrimitiveType.NODE)) {
                 for (Way way: waysToCheck) {
-                    if (way.getId() > 0 && way.incomplete) {
+                    if (!way.isNew() && way.incomplete) {
                         OsmServerObjectReader reader = new OsmServerObjectReader(way.getId(), OsmPrimitiveType.from(way), true /* read full */);
                         DataSet wayDs = reader.parseOsm(progressMonitor.createSubTaskMonitor(1, false));
@@ -233,5 +233,5 @@
                 Collection<Relation> relationsToCheck  = new ArrayList<Relation>(ds.relations);
                 for (Relation relation: relationsToCheck) {
-                    if (relation.getId() > 0 && relation.incomplete) {
+                    if (!relation.isNew() && relation.incomplete) {
                         OsmServerObjectReader reader = new OsmServerObjectReader(relation.getId(), OsmPrimitiveType.from(relation), true /* read full */);
                         DataSet wayDs = reader.parseOsm(progressMonitor.createSubTaskMonitor(1, false));
Index: trunk/src/org/openstreetmap/josm/io/OsmServerWriter.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/OsmServerWriter.java	(revision 2272)
+++ trunk/src/org/openstreetmap/josm/io/OsmServerWriter.java	(revision 2273)
@@ -79,7 +79,7 @@
                 String msg = "";
                 switch(OsmPrimitiveType.from(osm)) {
-                    case NODE: msg = marktr("{0}% ({1}/{2}), {3} left. Uploading node ''{4}'' (id: {5})"); break;
-                    case WAY: msg = marktr("{0}% ({1}/{2}), {3} left. Uploading way ''{4}'' (id: {5})"); break;
-                    case RELATION: msg = marktr("{0}% ({1}/{2}), {3} left. Uploading relation ''{4}'' (id: {5})"); break;
+                case NODE: msg = marktr("{0}% ({1}/{2}), {3} left. Uploading node ''{4}'' (id: {5})"); break;
+                case WAY: msg = marktr("{0}% ({1}/{2}), {3} left. Uploading way ''{4}'' (id: {5})"); break;
+                case RELATION: msg = marktr("{0}% ({1}/{2}), {3} left. Uploading relation ''{4}'' (id: {5})"); break;
                 }
                 progressMonitor.subTask(
@@ -178,5 +178,5 @@
         if (osm.isDeleted()) {
             api.deletePrimitive(osm, progressMonitor);
-        } else if (osm.getId() == 0) {
+        } else if (osm.isNew()) {
             api.createPrimitive(osm, progressMonitor);
         } else {
Index: trunk/src/org/openstreetmap/josm/io/OsmWriter.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/OsmWriter.java	(revision 2272)
+++ trunk/src/org/openstreetmap/josm/io/OsmWriter.java	(revision 2273)
@@ -87,5 +87,5 @@
 
     private boolean shouldWrite(OsmPrimitive osm) {
-        return osm.getId() != 0 || !osm.isDeleted();
+        return !osm.isNew() || !osm.isDeleted();
     }
 
@@ -173,5 +173,5 @@
      */
     private long getUsedId(OsmPrimitive osm) {
-        if (osm.getId() != 0)
+        if (!osm.isNew())
             return osm.getId();
         if (usedNewIds.containsKey(osm))
