Index: trunk/src/org/openstreetmap/josm/io/OsmChangeReader.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/OsmChangeReader.java	(revision 4531)
+++ trunk/src/org/openstreetmap/josm/io/OsmChangeReader.java	(revision 4532)
@@ -9,4 +9,5 @@
 
 import org.openstreetmap.josm.data.osm.DataSet;
+import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.gui.progress.ProgressMonitor;
 
@@ -61,28 +62,31 @@
 
     private void parseDelete() throws XMLStreamException {
-        // Do nothing. If the object has been deleted, do not load it to avoid consistency errors.
+        parseCommon(true);
+    }
+
+    private void parseModify() throws XMLStreamException {
         parseCommon(false);
     }
 
-    private void parseModify() throws XMLStreamException {
-        parseCommon(true);
+    private void parseCreate() throws XMLStreamException {
+        parseCommon(false);
     }
 
-    private void parseCreate() throws XMLStreamException {
-        parseCommon(true);
-    }
-
-    private void parseCommon(boolean keepPrimitive) throws XMLStreamException {
+    private void parseCommon(boolean deletePrimitive) throws XMLStreamException {
         while (parser.hasNext()) {
             int event = parser.next();
             if (event == XMLStreamConstants.START_ELEMENT) {
+                OsmPrimitive p = null;
                 if (parser.getLocalName().equals("node")) {
-                    if (keepPrimitive) parseNode(); else doNothing();
+                    p = parseNode();
                 } else if (parser.getLocalName().equals("way")) {
-                    if (keepPrimitive) parseWay(); else doNothing();
+                    p = parseWay();
                 } else if (parser.getLocalName().equals("relation")) {
-                    if (keepPrimitive) parseRelation(); else doNothing();
+                    p = parseRelation();
                 } else {
                     parseUnknown();
+                }
+                if (p != null && deletePrimitive) {
+                    p.setDeleted(true);
                 }
             } else if (event == XMLStreamConstants.END_ELEMENT) {
@@ -90,8 +94,4 @@
             }
         }
-    }
-    
-    private void doNothing() throws XMLStreamException {
-        while (parser.hasNext() && parser.next() != XMLStreamConstants.END_ELEMENT);
     }
     
Index: trunk/src/org/openstreetmap/josm/io/OsmReader.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/OsmReader.java	(revision 4531)
+++ trunk/src/org/openstreetmap/josm/io/OsmReader.java	(revision 4532)
@@ -156,5 +156,5 @@
     }
 
-    protected void parseNode() throws XMLStreamException {
+    protected Node parseNode() throws XMLStreamException {
         NodeData nd = new NodeData();
         nd.setCoor(new LatLon(Double.parseDouble(parser.getAttributeValue(null, "lat")), Double.parseDouble(parser.getAttributeValue(null, "lon"))));
@@ -173,10 +173,10 @@
                 }
             } else if (event == XMLStreamConstants.END_ELEMENT) {
-                return;
-            }
-        }
-    }
-
-    protected void parseWay() throws XMLStreamException {
+                return n;
+            }
+        }
+    }
+
+    protected Way parseWay() throws XMLStreamException {
         WayData wd = new WayData();
         readCommon(wd);
@@ -206,4 +206,5 @@
         }
         ways.put(wd.getUniqueId(), nodeIds);
+        return w;
     }
 
@@ -224,5 +225,5 @@
     }
 
-    protected void parseRelation() throws XMLStreamException {
+    protected Relation parseRelation() throws XMLStreamException {
         RelationData rd = new RelationData();
         readCommon(rd);
@@ -252,4 +253,5 @@
         }
         relations.put(rd.getUniqueId(), members);
+        return r;
     }
 
