Index: trunk/src/org/openstreetmap/josm/actions/CreateMultipolygonAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/CreateMultipolygonAction.java	(revision 17405)
+++ trunk/src/org/openstreetmap/josm/actions/CreateMultipolygonAction.java	(revision 17406)
@@ -26,4 +26,5 @@
 import org.openstreetmap.josm.actions.relation.DownloadSelectedIncompleteMembersAction;
 import org.openstreetmap.josm.command.AddCommand;
+import org.openstreetmap.josm.command.ChangeCommand;
 import org.openstreetmap.josm.command.ChangeMembersCommand;
 import org.openstreetmap.josm.command.ChangePropertyCommand;
@@ -112,15 +113,14 @@
                 return;
             }
-            final Command command = commandAndRelation.a;
 
             // to avoid EDT violations
             SwingUtilities.invokeLater(() -> {
-                if (multipolygonRelation != null) {
-                    // rather ugly: update generated a ChangeMembersCommand with a copy of the member list, so clear the list now
-                    commandAndRelation.b.setMembers(null); // #see 19885
-                }
-                UndoRedoHandler.getInstance().add(command);
+                UndoRedoHandler.getInstance().add(commandAndRelation.a);
+                Relation calculatedRel = commandAndRelation.b;
+                if (calculatedRel.getDataSet() == null) {
+                    calculatedRel.setMembers(null); // see #19885
+                }
                 final Relation relation = (Relation) MainApplication.getLayerManager().getEditDataSet()
-                        .getPrimitiveById(commandAndRelation.b);
+                        .getPrimitiveById(calculatedRel);
                 if (relation == null || relation.getDataSet() == null)
                     return; // should not happen
@@ -350,5 +350,8 @@
         } else {
             if (!unchanged) {
-                list.add(new ChangeMembersCommand(existingRelation, new ArrayList<>(relation.getMembers())));
+                if (relation.getKeys().equals(existingRelation.getKeys()))
+                    list.add(new ChangeMembersCommand(existingRelation, new ArrayList<>(relation.getMembers())));
+                else
+                    list.add(new ChangeCommand(existingRelation, relation));
             }
             if (list.isEmpty()) {
