Index: /trunk/src/org/openstreetmap/josm/actions/JoinAreasAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/JoinAreasAction.java	(revision 17162)
+++ /trunk/src/org/openstreetmap/josm/actions/JoinAreasAction.java	(revision 17163)
@@ -28,4 +28,5 @@
 import org.openstreetmap.josm.command.ChangeCommand;
 import org.openstreetmap.josm.command.ChangeNodesCommand;
+import org.openstreetmap.josm.command.ChangePropertyCommand;
 import org.openstreetmap.josm.command.Command;
 import org.openstreetmap.josm.command.DeleteCommand;
@@ -1719,7 +1720,5 @@
     private void stripTags(Collection<Way> ways) {
         for (Way w : ways) {
-            final Way wayWithoutTags = new Way(w);
-            wayWithoutTags.removeAll();
-            cmds.add(new ChangeCommand(w, wayWithoutTags));
+            cmds.add(new ChangePropertyCommand(Collections.singleton(w), Collections.emptyMap()));
         }
         /* I18N: current action printed in status display */
Index: /trunk/src/org/openstreetmap/josm/command/SplitWayCommand.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/command/SplitWayCommand.java	(revision 17162)
+++ /trunk/src/org/openstreetmap/josm/command/SplitWayCommand.java	(revision 17163)
@@ -351,5 +351,5 @@
 
         // Figure out the order of relation members (if any).
-        Analysis analysis = analyseSplit(way, wayToKeep, newWays, indexOfWayToKeep);
+        Analysis analysis = analyseSplit(way, wayToKeep, newWays);
 
         // If there are relations that cannot be split properly without downloading more members,
@@ -406,5 +406,5 @@
                 // If missing relation members were downloaded, perform the analysis again to find the relation
                 // member order for all relations.
-                analysis = analyseSplit(way, wayToKeep, newWays, indexOfWayToKeep);
+                analysis = analyseSplit(way, wayToKeep, newWays);
                 return Optional.of(splitBasedOnAnalyses(way, newWays, newSelection, analysis, indexOfWayToKeep));
             case GO_AHEAD_WITHOUT_DOWNLOADS:
@@ -421,6 +421,5 @@
     static Analysis analyseSplit(Way way,
                                  Way wayToKeep,
-                                 List<Way> newWays,
-                                 int indexOfWayToKeep) {
+                                 List<Way> newWays) {
         Collection<Command> commandList = new ArrayList<>();
         Collection<String> nowarnroles = Config.getPref().getList("way.split.roles.nowarn",
@@ -430,6 +429,5 @@
         final Way changedWay = new Way(way);
         changedWay.setNodes(wayToKeep.getNodes());
-        commandList.add(new ChangeCommand(way, changedWay));
-
+        commandList.add(new ChangeNodesCommand(way, changedWay.getNodes()));
         for (Way wayToAdd : newWays) {
             commandList.add(new AddCommand(way.getDataSet(), wayToAdd));
@@ -559,5 +557,5 @@
             }
         }
-
+        changedWay.setNodes(null); // see #19885
         return new Analysis(relationAnalyses, commandList, warnings, numberOfRelations);
     }
