Index: trunk/src/org/openstreetmap/josm/data/osm/DataSetMerger.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/DataSetMerger.java	(revision 5349)
+++ trunk/src/org/openstreetmap/josm/data/osm/DataSetMerger.java	(revision 5350)
@@ -188,6 +188,7 @@
                 List<OsmPrimitive> referrers = target.getReferrers();
                 if (referrers.isEmpty()) {
+                    resetPrimitive(target);
+                    target.mergeFrom(source);
                     target.setDeleted(true);
-                    target.mergeFrom(source);
                     it.remove();
                     flag = true;
@@ -212,9 +213,5 @@
             // This can be because of cross-referenced relations.
             for (OsmPrimitive osm: objectsToDelete) {
-                if (osm instanceof Way) {
-                    ((Way) osm).setNodes(null);
-                } else if (osm instanceof Relation) {
-                    ((Relation) osm).setMembers(null);
-                }
+                resetPrimitive(osm);
             }
             for (OsmPrimitive osm: objectsToDelete) {
@@ -222,4 +219,12 @@
                 osm.mergeFrom(sourceDataSet.getPrimitiveById(osm.getPrimitiveId()));
             }
+        }
+    }
+    
+    private final void resetPrimitive(OsmPrimitive osm) {
+        if (osm instanceof Way) {
+            ((Way) osm).setNodes(null);
+        } else if (osm instanceof Relation) {
+            ((Relation) osm).setMembers(null);
         }
     }
