Index: src/org/openstreetmap/josm/io/OsmReader.java
===================================================================
--- src/org/openstreetmap/josm/io/OsmReader.java	(revision 52)
+++ src/org/openstreetmap/josm/io/OsmReader.java	(revision 53)
@@ -104,17 +104,7 @@
 		for (Object o : e.getChildren()) {
 			Element child = (Element)o;
-			if (child.getName().equals("deleted")) {
-				for (Object delObj : child.getChildren()) {
-					OsmPrimitive osm = parseObject((Element)delObj, data);
-					if (osm != null) {
-						osm.visit(visitor);
-						osm.setDeleted(true);
-					}
-				}
-			} else {
-				OsmPrimitive osm = parseObject(child, data);
-				if (osm != null)
-					osm.visit(visitor);
-			}
+			OsmPrimitive osm = parseObject(child, data);
+			if (osm != null)
+				osm.visit(visitor);
 		}
 		
@@ -201,4 +191,14 @@
 			}
 		}
+		
+		String action = e.getAttributeValue("action");
+		if ("delete".equals(action))
+			data.setDeleted(true);
+		else if ("modify".equals(action))
+			data.modified = data.modifiedProperties = true;
+		else if ("modify/property".equals(action))
+			data.modifiedProperties = true;
+		else if ("modify/object".equals(action))
+			data.modified = true;
 	}
 
Index: src/org/openstreetmap/josm/io/OsmWriter.java
===================================================================
--- src/org/openstreetmap/josm/io/OsmWriter.java	(revision 52)
+++ src/org/openstreetmap/josm/io/OsmWriter.java	(revision 53)
@@ -69,21 +69,9 @@
 		List<Element> list = root.getChildren();
 		properties = new LinkedList<Element>();
-		for (OsmPrimitive osm : ds.allNonDeletedPrimitives()) {
+		for (OsmPrimitive osm : ds.allPrimitives()) {
 			osm.visit(this);
 			list.add(element);
 		}
 		list.addAll(properties);
-		properties = new LinkedList<Element>();
-		Element deleted = new Element("deleted");
-		Collection<Element> allDeleted = deleted.getChildren();
-		for (OsmPrimitive osm : ds.allPrimitives()) {
-			if (osm.isDeleted() && osm.id != 0) {
-				osm.visit(this);
-				allDeleted.add(element);
-			}
-		}
-		allDeleted.addAll(properties);
-		if (!allDeleted.isEmpty())
-			list.add(deleted);
 
 		Document d = new Document(root);
@@ -117,4 +105,12 @@
 			for (Entry<Key, String> entry : osm.keys.entrySet())
 				properties.add(parseProperty(osm, entry));
+		if (osm.isDeleted())
+			e.setAttribute("action", "delete");
+		else if (osm.modified && osm.modifiedProperties)
+			e.setAttribute("action", "modify");
+		else if (osm.modified && !osm.modifiedProperties)
+			e.setAttribute("action", "modify/object");
+		else if (!osm.modified && osm.modifiedProperties)
+			e.setAttribute("action", "modify/property");
 	}
 
