Index: trunk/src/org/openstreetmap/josm/actions/SplitWayAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/SplitWayAction.java	(revision 3513)
+++ trunk/src/org/openstreetmap/josm/actions/SplitWayAction.java	(revision 3515)
@@ -118,11 +118,6 @@
                 while (it.hasNext()) {
                     Way w = it.next();
-                    assert w.isUsable(); // Way is referrer of selected node(s) so it must be usable
-                    int last = w.getNodesCount() - 1;
-                    boolean circular = w.isClosed();
-
                     for (Node n : selectedNodes) {
-                        int i = w.getNodes().indexOf(n);
-                        if (!(circular || (i > 0 && i < last))) {
+                        if(!w.isInnerNode(n)) {
                             it.remove();
                             continue WAY_LOOP;
Index: trunk/src/org/openstreetmap/josm/data/osm/Way.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/Way.java	(revision 3513)
+++ trunk/src/org/openstreetmap/josm/data/osm/Way.java	(revision 3515)
@@ -407,4 +407,16 @@
     }
 
+    public boolean isInnerNode(Node n) {
+        Node[] nodes = this.nodes;
+        if (isIncomplete() || nodes.length <= 2) return false;
+        /* circular ways have only inner nodes, so return true for them! */
+        if (n == nodes[0] && n == nodes[nodes.length-1]) return true;
+        for(int i = 1; i < nodes.length - 1; ++i) {
+            if(nodes[i] == n) return true;
+        }
+        return false;
+    }
+
+
     @Override
     public String getDisplayName(NameFormatter formatter) {
