Index: trunk/src/org/openstreetmap/josm/actions/SplitWayAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/SplitWayAction.java	(revision 8274)
+++ trunk/src/org/openstreetmap/josm/actions/SplitWayAction.java	(revision 8276)
@@ -125,5 +125,6 @@
         List<Node> selectedNodes = OsmPrimitive.getFilteredList(selection, Node.class);
         List<Way> selectedWays = OsmPrimitive.getFilteredList(selection, Way.class);
-        List<Relation> selectedRelations = OsmPrimitive.getFilteredList(selection, Relation.class);
+        List<Relation> selectedRelations =
+            OsmPrimitive.getFilteredList( selection, Relation.class);
         List<Way> applicableWays = getApplicableWays(selectedWays, selectedNodes);
 
@@ -142,16 +143,16 @@
         }
 
-        // If several ways have been found, remove ways that doesn't have selected node in the middle
+        // If several ways have been found, remove ways that doesn't have selected
+        // node in the middle
         if (applicableWays.size() > 1) {
-            WAY_LOOP:
-                for (Iterator<Way> it = applicableWays.iterator(); it.hasNext();) {
-                    Way w = it.next();
-                    for (Node n : selectedNodes) {
-                        if (!w.isInnerNode(n)) {
-                            it.remove();
-                            continue WAY_LOOP;
-                        }
+            for (Iterator<Way> it = applicableWays.iterator(); it.hasNext();) {
+                Way w = it.next();
+                for (Node n : selectedNodes) {
+                    if (!w.isInnerNode(n)) {
+                        it.remove();
+                        break;
                     }
                 }
+            }
         }
 
@@ -188,19 +189,25 @@
     }
 
+    /**
+     * Determine witch ways to split.
+     * @param selectedWays List of user selected ways.
+     * @param selectedNodes List of user selected nodes.
+     * @return List of ways to split
+     */
     private List<Way> getApplicableWays(List<Way> selectedWays, List<Node> selectedNodes) {
         if (selectedNodes.isEmpty())
             return null;
 
-        // Special case - one of the selected ways touches (not cross) way that we want to split
+        // Special case - one of the selected ways touches (not cross) way that we
+        // want to split
         if (selectedNodes.size() == 1) {
             Node n = selectedNodes.get(0);
-            List<Way> referedWays = OsmPrimitive.getFilteredList(n.getReferrers(), Way.class);
+            List<Way> referedWays =
+                OsmPrimitive.getFilteredList(n.getReferrers(), Way.class);
             Way inTheMiddle = null;
-            boolean foundSelected = false;
             for (Way w: referedWays) {
-                if (selectedWays.contains(w)) {
-                    foundSelected = true;
-                }
-                if (w.getNode(0) != n && w.getNode(w.getNodesCount() - 1) != n) {
+                // Need to look at all nodes see #11184 for a case where node n is
+                // firstNode, lastNode and also in the middle
+                if (selectedWays.contains(w) && w.isInnerNode(n)) {
                     if (inTheMiddle == null) {
                         inTheMiddle = w;
@@ -211,10 +218,12 @@
                 }
             }
-            if (foundSelected && inTheMiddle != null)
+            if (inTheMiddle != null)
                 return Collections.singletonList(inTheMiddle);
         }
 
         // List of ways shared by all nodes
-        List<Way> result = new ArrayList<>(OsmPrimitive.getFilteredList(selectedNodes.get(0).getReferrers(), Way.class));
+        List<Way> result =
+            new ArrayList<>(OsmPrimitive.getFilteredList(selectedNodes.get(0).getReferrers(),
+                                                         Way.class));
         for (int i=1; i<selectedNodes.size(); i++) {
             List<OsmPrimitive> ref = selectedNodes.get(i).getReferrers();
