Index: trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java	(revision 17214)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java	(revision 17215)
@@ -56,5 +56,5 @@
 import org.openstreetmap.josm.actions.relation.DuplicateRelationAction;
 import org.openstreetmap.josm.actions.relation.EditRelationAction;
-import org.openstreetmap.josm.command.ChangeCommand;
+import org.openstreetmap.josm.command.ChangeMembersCommand;
 import org.openstreetmap.josm.command.ChangePropertyCommand;
 import org.openstreetmap.josm.command.Command;
@@ -1154,9 +1154,10 @@
                 return;
 
-            Relation rel = new Relation(cur);
+            Relation copy = new Relation(cur);
             for (OsmPrimitive primitive: OsmDataManager.getInstance().getInProgressSelection()) {
-                rel.removeMembersFor(primitive);
-            }
-            UndoRedoHandler.getInstance().add(new ChangeCommand(cur, rel));
+                copy.removeMembersFor(primitive);
+            }
+            UndoRedoHandler.getInstance().add(new ChangeMembersCommand(cur, copy.getMembers()));
+            copy.setMembers(null); // see #19885
 
             tagTable.clearSelection();
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/properties/RelationRoleEditor.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/properties/RelationRoleEditor.java	(revision 17214)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/properties/RelationRoleEditor.java	(revision 17215)
@@ -9,5 +9,5 @@
 import javax.swing.JOptionPane;
 
-import org.openstreetmap.josm.command.ChangeCommand;
+import org.openstreetmap.josm.command.ChangeMembersCommand;
 import org.openstreetmap.josm.data.UndoRedoHandler;
 import org.openstreetmap.josm.data.osm.DefaultNameFormatter;
@@ -45,9 +45,7 @@
             return;
         }
-        final Relation newRelation = new Relation(relation);
-        final List<RelationMember> newMembers = newRelation.getMembers();
+        final List<RelationMember> newMembers = relation.getMembers();
         newMembers.replaceAll(m -> members.contains(m) ? new RelationMember(newRole, m.getMember()) : m);
-        newRelation.setMembers(newMembers);
-        UndoRedoHandler.getInstance().add(new ChangeCommand(relation, newRelation));
+        UndoRedoHandler.getInstance().add(new ChangeMembersCommand(relation, newMembers));
     }
 }
