Index: src/org/openstreetmap/josm/plugins/utilsplugin2/actions/SplitObjectAction.java
===================================================================
--- src/org/openstreetmap/josm/plugins/utilsplugin2/actions/SplitObjectAction.java	(revision 35833)
+++ src/org/openstreetmap/josm/plugins/utilsplugin2/actions/SplitObjectAction.java	(working copy)
@@ -42,7 +42,9 @@
 import org.openstreetmap.josm.data.osm.visitor.paint.relations.Multipolygon.PolyData.Intersection;
 import org.openstreetmap.josm.data.validation.Severity;
 import org.openstreetmap.josm.data.validation.TestError;
+import org.openstreetmap.josm.data.validation.tests.CrossingWays;
 import org.openstreetmap.josm.data.validation.tests.MultipolygonTest;
+import org.openstreetmap.josm.data.validation.tests.SelfIntersectingWay;
 import org.openstreetmap.josm.gui.Notification;
 import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
@@ -257,7 +259,17 @@
             }
             SplitWayCommand result = SplitWayCommand.splitWay(
                     selectedWay, wayChunks, Collections.<OsmPrimitive>emptyList());
-            UndoRedoHandler.getInstance().add(result);
+            result.executeCommand();
+			List<Way> ways = result.getParticipatingPrimitives().stream().filter(Way.class::isInstance)
+					.map(Way.class::cast).collect(Collectors.toList());
+
+            if (!validateGeometry(ways)) {
+            	showWarningNotification(
+            			tr("Splitting would cause invalid geometry."));
+            	result.undoCommand();
+            	return;
+            }
+            UndoRedoHandler.getInstance().add(result, false);
             if (splitWay != null)
                 UndoRedoHandler.getInstance().add(new DeleteCommand(splitWay));
             getLayerManager().getEditDataSet().setSelected(result.getNewSelection());
@@ -264,6 +276,11 @@
         }
     }
 
+	private static boolean validateGeometry(List<Way> ways) {
+		return ways.stream()
+				.noneMatch(w -> CrossingWays.isSelfCrossing(w) || SelfIntersectingWay.isSelfIntersecting(w));
+	}
+
     /**
      * Splits a multipolygon into two separate multipolygons along a way using {@link #splitMultipolygonAtWay}
      * if the resulting multipolygons are valid.
