Index: /applications/editors/josm/plugins/reltoolbox/src/relcontext/RelContextDialog.java
===================================================================
--- /applications/editors/josm/plugins/reltoolbox/src/relcontext/RelContextDialog.java	(revision 26886)
+++ /applications/editors/josm/plugins/reltoolbox/src/relcontext/RelContextDialog.java	(revision 26887)
@@ -517,5 +517,5 @@
             addMenuItem("tags", tr("Move area tags from contour to relation"));
             addMenuItem("alltags", tr("When moving tags, consider even non-repeating ones"));
-            addMenuItem("allowsplit", tr("Allow splitting of ways in neighbouring multipolygons"));
+            addMenuItem("allowsplit", tr("Always split ways of neighbouring multipolygons"));
         }
 
Index: /applications/editors/josm/plugins/reltoolbox/src/relcontext/actions/CreateMultipolygonAction.java
===================================================================
--- /applications/editors/josm/plugins/reltoolbox/src/relcontext/actions/CreateMultipolygonAction.java	(revision 26886)
+++ /applications/editors/josm/plugins/reltoolbox/src/relcontext/actions/CreateMultipolygonAction.java	(revision 26887)
@@ -64,15 +64,17 @@
 	Collection<Way> selectedWays = getCurrentDataSet().getSelectedWays();
 	if( !isBoundary && getPref("tags") ) {
-	    List<Command> commands = new ArrayList<Command>();
 	    List<Relation> rels = null;
-	    if( getPref("allowsplit")) {
+	    if( getPref("allowsplit") || selectedWays.size() == 1 ) {
 		if( SplittingMultipolygons.canProcess(selectedWays) )
-		    rels = SplittingMultipolygons.process(getCurrentDataSet().getSelectedWays(), commands);
+		    rels = SplittingMultipolygons.process(getCurrentDataSet().getSelectedWays());
 	    } else {
-		if( TheRing.areAllOfThoseRings(selectedWays) )
+		if( TheRing.areAllOfThoseRings(selectedWays) ) {
+		    List<Command> commands = new ArrayList<Command>();
 		    rels = TheRing.makeManySimpleMultipolygons(getCurrentDataSet().getSelectedWays(), commands);
-	    }
-	    if( !commands.isEmpty() && rels != null && !rels.isEmpty() ) {
-		Main.main.undoRedo.add(new SequenceCommand(tr("Create multipolygons from rings"), commands));
+		    if( !commands.isEmpty() )
+			Main.main.undoRedo.add(new SequenceCommand(tr("Create multipolygons from rings"), commands));
+		}
+	    }
+	    if( rels != null && !rels.isEmpty() ) {
 		if( chRel != null )
 		    chRel.set(rels.size() == 1 ? rels.get(0) : null);
Index: /applications/editors/josm/plugins/reltoolbox/src/relcontext/actions/SplittingMultipolygons.java
===================================================================
--- /applications/editors/josm/plugins/reltoolbox/src/relcontext/actions/SplittingMultipolygons.java	(revision 26886)
+++ /applications/editors/josm/plugins/reltoolbox/src/relcontext/actions/SplittingMultipolygons.java	(revision 26887)
@@ -1,4 +1,5 @@
 package relcontext.actions;
 
+import java.awt.geom.Area;
 import static org.openstreetmap.josm.tools.I18n.tr;
 import java.util.*;
@@ -21,5 +22,14 @@
 	List<Way> rings = new ArrayList<Way>();
 	List<Way> arcs = new ArrayList<Way>();
+	Area a = Main.main.getCurrentDataSet().getDataSourceArea();
 	for( Way way : ways ) {
+	    if( way.isDeleted() )
+		return false;
+	    for( Node n : way.getNodes() ) {
+		if( n == null )
+		    System.out.println("Node is null");
+		if( n.isIncomplete() || (a != null && !a.contains(n.getCoor())) )
+		    return false;
+	    }
 	    if( way.isClosed() )
 		rings.add(way);
@@ -54,5 +64,5 @@
     }
     
-    public static List<Relation> process( Collection<Way> selectedWays, List<Command> commands ) {
+    public static List<Relation> process( Collection<Way> selectedWays ) {
 	System.out.println("---------------------------------------");
 	List<Relation> result = new ArrayList<Relation>();
@@ -67,13 +77,19 @@
 
 	for( Way ring : rings ) {
+	    List<Command> commands = new ArrayList<Command>();
 	    Relation newRelation = SplittingMultipolygons.attachRingToNeighbours(ring, commands);
-	    if( newRelation != null )
+	    if( newRelation != null && !commands.isEmpty() ) {
+		Main.main.undoRedo.add(commands.get(0));
 		result.add(newRelation);
+	    }
 	}
 
 	for( Way arc : arcs) {
+	    List<Command> commands = new ArrayList<Command>();
 	    Relation newRelation = SplittingMultipolygons.tryToCloseOneWay(arc, commands);
-	    if( newRelation != null )
+	    if( newRelation != null && !commands.isEmpty() ) {
+		Main.main.undoRedo.add(commands.get(0));
 		result.add(newRelation);
+	    }
 	}
 	return result;
Index: /applications/editors/josm/plugins/reltoolbox/src/relcontext/actions/TheRing.java
===================================================================
--- /applications/editors/josm/plugins/reltoolbox/src/relcontext/actions/TheRing.java	(revision 26886)
+++ /applications/editors/josm/plugins/reltoolbox/src/relcontext/actions/TheRing.java	(revision 26887)
@@ -310,4 +310,7 @@
 	    }
 	}
+	// todo: когда два кольца меняют одно и то же отношение, в список команд добавляется
+	// изменение базового отношения на новое, а не предыдущего
+	// поэтому сохраняется только первое изменение
 
 	List<Command> commands = new ArrayList<Command>();
