Index: /applications/editors/josm/plugins/reltoolbox/src/relcontext/actions/SplittingMultipolygons.java
===================================================================
--- /applications/editors/josm/plugins/reltoolbox/src/relcontext/actions/SplittingMultipolygons.java	(revision 26887)
+++ /applications/editors/josm/plugins/reltoolbox/src/relcontext/actions/SplittingMultipolygons.java	(revision 26888)
@@ -341,7 +341,9 @@
 	    otherRing.putSourceWayFirst();
 	
+	Map<Relation, Relation> relationCache = new HashMap<Relation, Relation>();
 	for( TheRing otherRing : otherWays )
-	    commands.addAll(otherRing.getCommands(false));
-	commands.addAll(theRing.getCommands());
+	    commands.addAll(otherRing.getCommands(false, relationCache));
+	commands.addAll(theRing.getCommands(relationCache));
+	TheRing.updateCommandsWithRelations(commands, relationCache);
 	resultingCommands.add(new SequenceCommand(tr("Complete multipolygon for way {0}",
 		DefaultNameFormatter.getInstance().format(ring)), commands));
Index: /applications/editors/josm/plugins/reltoolbox/src/relcontext/actions/TheRing.java
===================================================================
--- /applications/editors/josm/plugins/reltoolbox/src/relcontext/actions/TheRing.java	(revision 26887)
+++ /applications/editors/josm/plugins/reltoolbox/src/relcontext/actions/TheRing.java	(revision 26888)
@@ -66,8 +66,10 @@
 	redistributeSegments(rings);
 	List<Relation> relations = new ArrayList<Relation>();
+	Map<Relation, Relation> relationCache = new HashMap<Relation, Relation>();
 	for( TheRing r : rings ) {
-	    commands.addAll(r.getCommands());
+	    commands.addAll(r.getCommands(relationCache));
 	    relations.add(r.getRelation());
 	}
+	updateCommandsWithRelations(commands, relationCache);
 	return relations;
     }
@@ -277,5 +279,9 @@
     
     public List<Command> getCommands() {
-	return getCommands(true);
+	return getCommands(true, null);
+    }
+    
+    public List<Command> getCommands( Map<Relation, Relation> relationChangeMap ) {
+	return getCommands(true, relationChangeMap);
     }
     
@@ -284,5 +290,5 @@
      * The first way is copied from the source one, ChangeCommand is issued in this case.
      */
-    public List<Command> getCommands( boolean createMultipolygon ) {
+    public List<Command> getCommands( boolean createMultipolygon, Map<Relation, Relation> relationChangeMap ) {
 	Way sourceCopy = new Way(source);
 	if( createMultipolygon ) {
@@ -303,6 +309,16 @@
 	for( OsmPrimitive p : source.getReferrers() ) {
 	    if( p instanceof Relation ) {
-		Relation rel = new Relation((Relation)p);
-		relationCommands.add(new ChangeCommand((Relation)p, rel));
+		Relation rel = null;
+		if( relationChangeMap != null ) {
+		    if( relationChangeMap.containsKey((Relation)p) )
+			rel = relationChangeMap.get((Relation)p);
+		    else {
+			rel = new Relation((Relation)p);
+			relationChangeMap.put((Relation)p, rel);
+		    }
+		} else {		    
+		    rel = new Relation((Relation)p);
+		    relationCommands.add(new ChangeCommand((Relation)p, rel));
+		}
 		for( int i = 0; i < rel.getMembersCount(); i++ )
 		    if( rel.getMember(i).getMember().equals(source) )
@@ -342,4 +358,9 @@
 	    commands.add(new AddCommand(relation));
 	return commands;
+    }
+    
+    public static void updateCommandsWithRelations( List<Command> commands, Map<Relation, Relation> relationCache ) {
+	for( Relation src : relationCache.keySet() )
+	    commands.add(new ChangeCommand(src, relationCache.get(src)));
     }
 
