Index: trunk/src/org/openstreetmap/josm/actions/CombineWayAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/CombineWayAction.java	(revision 12355)
+++ trunk/src/org/openstreetmap/josm/actions/CombineWayAction.java	(revision 12356)
@@ -20,4 +20,5 @@
 import java.util.Set;
 import java.util.Stack;
+import java.util.stream.Collectors;
 
 import javax.swing.JOptionPane;
@@ -112,6 +113,10 @@
         ways = new LinkedHashSet<>(ways);
 
+        List<DataSet> dataSets = ways.stream().map(Way::getDataSet).distinct().collect(Collectors.toList());
+        if (dataSets.size() != 1) {
+            throw new IllegalArgumentException("Cannot combine ways of multiple data sets.");
+        }
+
         // try to build a new way which includes all the combined ways
-        //
         NodeGraph graph = NodeGraph.createNearlyUndirectedGraphFromNodeWays(ways);
         List<Node> path = graph.buildSpanningPath();
@@ -194,8 +199,8 @@
         deletedWays.remove(targetWay);
 
-        cmds.add(new ChangeCommand(targetWay, modifiedTargetWay));
+        cmds.add(new ChangeCommand(dataSets.get(0), targetWay, modifiedTargetWay));
         cmds.addAll(reverseWayTagCommands);
         cmds.addAll(resolution);
-        cmds.add(new DeleteCommand(deletedWays));
+        cmds.add(new DeleteCommand(dataSets.get(0), deletedWays));
         final Command sequenceCommand = new SequenceCommand(/* for correct i18n of plural forms - see #9110 */
                 trn("Combine {0} way", "Combine {0} ways", ways.size(), ways.size()), cmds);
Index: trunk/src/org/openstreetmap/josm/actions/ReverseWayAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/ReverseWayAction.java	(revision 12355)
+++ trunk/src/org/openstreetmap/josm/actions/ReverseWayAction.java	(revision 12356)
@@ -153,5 +153,5 @@
             corrCmds = (new ReverseWayTagCorrector()).execute(w, wnew);
         }
-        return new ReverseWayResult(wnew, corrCmds, new ChangeCommand(w, wnew));
+        return new ReverseWayResult(wnew, corrCmds, new ChangeCommand(w.getDataSet(), w, wnew));
     }
 
Index: trunk/src/org/openstreetmap/josm/command/ChangeRelationMemberRoleCommand.java
===================================================================
--- trunk/src/org/openstreetmap/josm/command/ChangeRelationMemberRoleCommand.java	(revision 12355)
+++ trunk/src/org/openstreetmap/josm/command/ChangeRelationMemberRoleCommand.java	(revision 12356)
@@ -9,4 +9,5 @@
 import javax.swing.Icon;
 
+import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
@@ -41,4 +42,19 @@
      */
     public ChangeRelationMemberRoleCommand(Relation relation, int position, String newRole) {
+        this.relation = relation;
+        this.position = position;
+        this.newRole = newRole;
+    }
+
+    /**
+     * Constructs a new {@code ChangeRelationMemberRoleCommand}.
+     * @param dataSet The data set the role is in
+     * @param relation The relation to be changed
+     * @param position Member position
+     * @param newRole New role
+     * @since 12355
+     */
+    public ChangeRelationMemberRoleCommand(DataSet dataSet, Relation relation, int position, String newRole) {
+        super(dataSet);
         this.relation = relation;
         this.position = position;
Index: trunk/src/org/openstreetmap/josm/corrector/TagCorrector.java
===================================================================
--- trunk/src/org/openstreetmap/josm/corrector/TagCorrector.java	(revision 12355)
+++ trunk/src/org/openstreetmap/josm/corrector/TagCorrector.java	(revision 12356)
@@ -175,5 +175,5 @@
                     // save the clone
                     if (!keysChanged.isEmpty()) {
-                        commands.add(new ChangeCommand(primitive, clone));
+                        commands.add(new ChangeCommand(primitive.getDataSet(), primitive, clone));
                     }
                 }
@@ -185,5 +185,5 @@
                         RoleCorrection roleCorrection = roleCorrections.get(i);
                         if (roleTableMap.get(primitive).getCorrectionTableModel().getApply(i)) {
-                            commands.add(new ChangeRelationMemberRoleCommand(
+                            commands.add(new ChangeRelationMemberRoleCommand(roleCorrection.relation.getDataSet(),
                                     roleCorrection.relation, roleCorrection.position, roleCorrection.newRole));
                         }
