Index: /trunk/src/org/openstreetmap/josm/actions/SplitWayAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/SplitWayAction.java	(revision 8989)
+++ /trunk/src/org/openstreetmap/josm/actions/SplitWayAction.java	(revision 8990)
@@ -48,5 +48,4 @@
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.Shortcut;
-import org.openstreetmap.josm.tools.Utils;
 
 /**
@@ -248,12 +247,13 @@
                 public void valueChanged(ListSelectionEvent e) {
                     final Way selected = list.getSelectedValue();
-                    if (Main.isDisplayingMapView() && selected != null) {
-                        final List<WaySegment> segments = Utils.transform(selected.getNodes().subList(0, selected.getNodesCount() - 1),
-                                new Utils.Function<Node, WaySegment>() {
-                            @Override
-                            public WaySegment apply(Node x) {
-                                return new WaySegment(selectedWay, selectedWay.getNodes().indexOf(x));
-                            }
-                        });
+                    if (Main.isDisplayingMapView() && selected != null && selected.getNodesCount() > 1) {
+                        final Collection<WaySegment> segments = new ArrayList<>(selected.getNodesCount() - 1);
+                        final Iterator<Node> it = selected.getNodes().iterator();
+                        Node previousNode = it.next();
+                        while (it.hasNext()) {
+                            final Node node = it.next();
+                            segments.add(WaySegment.forNodePair(selectedWay, previousNode, node));
+                            previousNode = node;
+                        }
                         setHighlightedWaySegments(segments);
                     }
Index: /trunk/src/org/openstreetmap/josm/data/osm/WaySegment.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/WaySegment.java	(revision 8989)
+++ /trunk/src/org/openstreetmap/josm/data/osm/WaySegment.java	(revision 8990)
@@ -44,4 +44,20 @@
     public Node getSecondNode() {
         return way.getNode(lowerIndex + 1);
+    }
+
+    /**
+     * Determines and returns the way segment for the given way and node pair.
+     * @throws IllegalArgumentException if the node pair is not part of way
+     */
+    public static WaySegment forNodePair(Way way, Node first, Node second) {
+        int endIndex = way.getNodesCount() - 1;
+        while (endIndex > 0) {
+            final int indexOfFirst = way.getNodes().subList(0, endIndex).lastIndexOf(first);
+            if (second.equals(way.getNode(indexOfFirst + 1))) {
+                return new WaySegment(way, indexOfFirst);
+            }
+            endIndex--;
+        }
+        throw new IllegalArgumentException("Node pair is not part of way!");
     }
 
Index: /trunk/test/unit/org/openstreetmap/josm/data/osm/WaySegmentTest.java
===================================================================
--- /trunk/test/unit/org/openstreetmap/josm/data/osm/WaySegmentTest.java	(revision 8990)
+++ /trunk/test/unit/org/openstreetmap/josm/data/osm/WaySegmentTest.java	(revision 8990)
@@ -0,0 +1,48 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.data.osm;
+
+import java.util.Arrays;
+
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.openstreetmap.josm.JOSMFixture;
+import org.openstreetmap.josm.data.coor.LatLon;
+
+public class WaySegmentTest {
+
+    @Before
+    public void setUp() throws Exception {
+        JOSMFixture.createUnitTestFixture().init();
+    }
+
+    @Test
+    public void testForNodePair() throws Exception {
+        final DataSet ds = new DataSet();
+        final Node n1 = new Node(new LatLon(0, 0));
+        final Node n2 = new Node(new LatLon(1, 0));
+        final Node n3 = new Node(new LatLon(2, 0));
+        final Node n4 = new Node(new LatLon(3, 0));
+        final Way w = new Way();
+        for (OsmPrimitive p : Arrays.asList(n1, n2, n3, n4, w)) {
+            ds.addPrimitive(p);
+        }
+        w.addNode(n1);
+        w.addNode(n2);
+        w.addNode(n1);
+        w.addNode(n3);
+        w.addNode(n1);
+        w.addNode(n4);
+        w.addNode(n1);
+        Assert.assertEquals(WaySegment.forNodePair(w, n1, n2).lowerIndex, 0);
+        Assert.assertEquals(WaySegment.forNodePair(w, n1, n3).lowerIndex, 2);
+        Assert.assertEquals(WaySegment.forNodePair(w, n1, n4).lowerIndex, 4);
+        Assert.assertEquals(WaySegment.forNodePair(w, n4, n1).lowerIndex, 5);
+        try {
+            Assert.assertEquals(WaySegment.forNodePair(w, n3, n4).lowerIndex, 5);
+            throw new IllegalStateException("Expecting IllegalArgumentException");
+        } catch (IllegalArgumentException expected) {
+            // expected
+        }
+    }
+}
