Index: /trunk/src/org/openstreetmap/josm/command/PurgePrimitivesCommand.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/command/PurgePrimitivesCommand.java	(revision 3334)
+++ /trunk/src/org/openstreetmap/josm/command/PurgePrimitivesCommand.java	(revision 3335)
@@ -8,7 +8,10 @@
 import java.util.Collection;
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
+import java.util.Map.Entry;
 import java.util.logging.Logger;
 
@@ -19,4 +22,5 @@
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
+import org.openstreetmap.josm.data.osm.PrimitiveData;
 import org.openstreetmap.josm.data.osm.Relation;
 import org.openstreetmap.josm.data.osm.Way;
@@ -48,10 +52,10 @@
     private Set<OsmPrimitive> purgedPrimitives;
 
-    private Set<OsmPrimitive> origVersionsOfTouchedPrimitives;
+    private Map<OsmPrimitive,PrimitiveData> origVersionsOfTouchedPrimitives;
 
     protected void init(Collection<OsmPrimitive> toPurge) {
         this.toPurge = toPurge;
         this.purgedPrimitives = new HashSet<OsmPrimitive>();
-        this.origVersionsOfTouchedPrimitives = new HashSet<OsmPrimitive>();
+        this.origVersionsOfTouchedPrimitives = new HashMap<OsmPrimitive,PrimitiveData>();
     }
 
@@ -149,6 +153,6 @@
             if (parent instanceof Way) {
                 Way w = (Way)parent;
-                if (!origVersionsOfTouchedPrimitives.contains(w)) {
-                    origVersionsOfTouchedPrimitives.add(w);
+                if (!origVersionsOfTouchedPrimitives.containsKey(w)) {
+                    origVersionsOfTouchedPrimitives.put(w,w.save());
                 }
                 w.removeNode((Node)child);
@@ -163,6 +167,6 @@
             } else if (parent instanceof Relation) {
                 Relation r = (Relation)parent;
-                if (!origVersionsOfTouchedPrimitives.contains(r)) {
-                    origVersionsOfTouchedPrimitives.add(r);
+                if (!origVersionsOfTouchedPrimitives.containsKey(r)) {
+                    origVersionsOfTouchedPrimitives.put(r,r.save());
                 }
                 System.out.println(tr("Removing reference from relation {0}",r.getId()));
@@ -200,5 +204,4 @@
     public void fillModifiedData(Collection<OsmPrimitive> modified, Collection<OsmPrimitive> deleted,
             Collection<OsmPrimitive> added) {
-        modified.addAll(origVersionsOfTouchedPrimitives);
     }
 
@@ -219,4 +222,9 @@
             getLayer().data.addPrimitive(purged);
         }
+
+        for (Entry<OsmPrimitive, PrimitiveData> entry: origVersionsOfTouchedPrimitives.entrySet()) {
+            entry.getKey().load(entry.getValue());
+        }
+
         reconstituteConflicts();
 
