Index: /applications/editors/josm/plugins/utilsplugin2/src/org/openstreetmap/josm/plugins/utilsplugin2/actions/UnGlueRelationAction.java
===================================================================
--- /applications/editors/josm/plugins/utilsplugin2/src/org/openstreetmap/josm/plugins/utilsplugin2/actions/UnGlueRelationAction.java	(revision 29390)
+++ /applications/editors/josm/plugins/utilsplugin2/src/org/openstreetmap/josm/plugins/utilsplugin2/actions/UnGlueRelationAction.java	(revision 29391)
@@ -19,9 +19,7 @@
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
-import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
 import org.openstreetmap.josm.data.osm.Relation;
-import org.openstreetmap.josm.data.osm.RelationMember;
 import org.openstreetmap.josm.data.osm.Way;
-import org.openstreetmap.josm.gui.DefaultNameFormatter;
+import org.openstreetmap.josm.plugins.utilsplugin2.command.ChangeRelationMemberCommand;
 import org.openstreetmap.josm.tools.Shortcut;
 
@@ -89,59 +87,4 @@
     }
 
-    /**
-     * Change member in relation to another one
-     */
-    private class ChangeRelationMemberCommand extends Command {
-
-        private final Relation relation;
-        private final OsmPrimitive oldMember;
-        private final OsmPrimitive newMember;
-        
-        public ChangeRelationMemberCommand(Relation relation, OsmPrimitive oldMember, OsmPrimitive newMember) {
-            this.relation = relation;
-            this.oldMember = oldMember;
-            this.newMember = newMember;
-        }
-
-        private boolean replaceMembers(OsmPrimitive oldP, OsmPrimitive newP) {
-            if (relation == null || oldMember == null || newMember == null) {
-                return false;
-            }
-            LinkedList<RelationMember> newrms = new LinkedList<RelationMember>();
-            for (RelationMember rm : relation.getMembers()) {
-                if (rm.getMember() == oldP) {
-                    newrms.add(new RelationMember(rm.getRole(), newP));
-                } else {
-                    newrms.add(rm);
-                }
-            }
-            relation.setMembers(newrms);
-            return true;
-        }
-        
-        @Override
-        public boolean executeCommand() {
-            return replaceMembers(oldMember, newMember);
-        }
-
-        @Override
-        public void fillModifiedData(Collection<OsmPrimitive> modified,
-                Collection<OsmPrimitive> deleted, Collection<OsmPrimitive> added) {
-            modified.add(relation);
-        }
-
-        @Override
-        public void undoCommand() {
-            replaceMembers(newMember, oldMember);
-        }
-
-        @Override
-        public String getDescriptionText() {
-            return tr("Change relation member for {0} {1}",
-                    OsmPrimitiveType.from(relation),
-                    relation.getDisplayName(DefaultNameFormatter.getInstance()));
-        }
-    }
-
     @Override
     protected void updateEnabledState() {
Index: /applications/editors/josm/plugins/utilsplugin2/src/org/openstreetmap/josm/plugins/utilsplugin2/command/ChangeRelationMemberCommand.java
===================================================================
--- /applications/editors/josm/plugins/utilsplugin2/src/org/openstreetmap/josm/plugins/utilsplugin2/command/ChangeRelationMemberCommand.java	(revision 29391)
+++ /applications/editors/josm/plugins/utilsplugin2/src/org/openstreetmap/josm/plugins/utilsplugin2/command/ChangeRelationMemberCommand.java	(revision 29391)
@@ -0,0 +1,73 @@
+// License: GPL v2 or later. See LICENSE file for details.
+package org.openstreetmap.josm.plugins.utilsplugin2.command;
+
+import static org.openstreetmap.josm.tools.I18n.tr;
+
+import java.util.Collection;
+import java.util.LinkedList;
+
+import org.openstreetmap.josm.command.Command;
+import org.openstreetmap.josm.data.osm.OsmPrimitive;
+import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
+import org.openstreetmap.josm.data.osm.Relation;
+import org.openstreetmap.josm.data.osm.RelationMember;
+import org.openstreetmap.josm.gui.DefaultNameFormatter;
+
+/**
+ * Change member in relation to another one
+ */
+public class ChangeRelationMemberCommand extends Command {
+
+    private final Relation relation;
+    private final OsmPrimitive oldMember;
+    private final OsmPrimitive newMember;
+    private boolean oldModified;
+
+    public ChangeRelationMemberCommand(Relation relation, OsmPrimitive oldMember, OsmPrimitive newMember) {
+        this.relation = relation;
+        this.oldMember = oldMember;
+        this.newMember = newMember;
+    }
+
+    private void replaceMembers(OsmPrimitive oldP, OsmPrimitive newP) {
+        if (relation == null || oldMember == null || newMember == null) {
+            return;
+        }
+        LinkedList<RelationMember> newrms = new LinkedList<RelationMember>();
+        for (RelationMember rm : relation.getMembers()) {
+            if (rm.getMember() == oldP) {
+                newrms.add(new RelationMember(rm.getRole(), newP));
+            } else {
+                newrms.add(rm);
+            }
+        }
+        relation.setMembers(newrms);
+    }
+    
+    @Override
+    public boolean executeCommand() {
+        oldModified = relation.isModified();
+        replaceMembers(oldMember, newMember);
+        relation.setModified(true);
+        return true;
+    }
+
+    @Override
+    public void fillModifiedData(Collection<OsmPrimitive> modified,
+            Collection<OsmPrimitive> deleted, Collection<OsmPrimitive> added) {
+        modified.add(relation);
+    }
+
+    @Override
+    public void undoCommand() {
+        replaceMembers(newMember, oldMember);
+        relation.setModified(oldModified);
+    }
+
+    @Override
+    public String getDescriptionText() {
+        return tr("Change relation member for {0} {1}",
+                OsmPrimitiveType.from(relation),
+                relation.getDisplayName(DefaultNameFormatter.getInstance()));
+    }
+}
