Index: trunk/src/org/openstreetmap/josm/command/SplitWayCommand.java
===================================================================
--- trunk/src/org/openstreetmap/josm/command/SplitWayCommand.java	(revision 15361)
+++ trunk/src/org/openstreetmap/josm/command/SplitWayCommand.java	(revision 15362)
@@ -19,4 +19,5 @@
 import java.util.Set;
 import java.util.function.Consumer;
+import java.util.stream.Collectors;
 
 import org.openstreetmap.josm.data.osm.DefaultNameFormatter;
@@ -426,7 +427,6 @@
         String type = Optional.ofNullable(r.get("type")).orElse("");
         if ("from".equals(role) || "to".equals(role)) {
-            OsmPrimitive via = findVia(r, type);
             List<Node> nodes = new ArrayList<>();
-            if (via != null) {
+            for (OsmPrimitive via : findVias(r, type)) {
                 if (via instanceof Node) {
                     nodes.add((Node) via);
@@ -468,22 +468,24 @@
     }
 
-    static OsmPrimitive findVia(Relation r, String type) {
+    static List<OsmPrimitive> findVias(Relation r, String type) {
         if (type != null) {
             switch (type) {
+            case "connectivity":
             case "restriction":
-                return findRelationMember(r, "via").orElse(null);
+                return findRelationMembers(r, "via");
             case "destination_sign":
                 // Prefer intersection over sign, see #12347
-                return findRelationMember(r, "intersection").orElse(findRelationMember(r, "sign").orElse(null));
+                List<OsmPrimitive> intersections = findRelationMembers(r, "intersection");
+                return intersections.isEmpty() ? findRelationMembers(r, "sign") : intersections;
             default:
-                return null;
-            }
-        }
-        return null;
-    }
-
-    static Optional<OsmPrimitive> findRelationMember(Relation r, String role) {
+                break;
+            }
+        }
+        return Collections.emptyList();
+    }
+
+    static List<OsmPrimitive> findRelationMembers(Relation r, String role) {
         return r.getMembers().stream().filter(rmv -> role.equals(rmv.getRole()))
-                .map(RelationMember::getMember).findAny();
+                .map(RelationMember::getMember).collect(Collectors.toList());
     }
 
Index: trunk/test/unit/org/openstreetmap/josm/command/SplitWayCommandTest.java
===================================================================
--- trunk/test/unit/org/openstreetmap/josm/command/SplitWayCommandTest.java	(revision 15361)
+++ trunk/test/unit/org/openstreetmap/josm/command/SplitWayCommandTest.java	(revision 15362)
@@ -3,9 +3,9 @@
 
 import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.Iterator;
 
@@ -38,33 +38,33 @@
 
     /**
-     * Unit test of {@link SplitWayCommand#findVia}.
+     * Unit test of {@link SplitWayCommand#findVias}.
      */
     @Test
-    public void testFindVia() {
+    public void testFindVias() {
         // empty relation
-        assertNull(SplitWayCommand.findVia(new Relation(), null));
+        assertTrue(SplitWayCommand.findVias(new Relation(), null).isEmpty());
         // restriction relation without via member
         Relation r = new Relation();
         r.addMember(new RelationMember("", new Node()));
-        assertNull(SplitWayCommand.findVia(r, "restriction"));
+        assertTrue(SplitWayCommand.findVias(r, "restriction").isEmpty());
         // restriction relation with via member
         r = new Relation();
         OsmPrimitive via = new Node();
         r.addMember(new RelationMember("via", via));
-        assertEquals(via, SplitWayCommand.findVia(r, "restriction"));
+        assertEquals(Collections.singletonList(via), SplitWayCommand.findVias(r, "restriction"));
         // destination_sign relation without sign nor intersection
         r = new Relation();
         r.addMember(new RelationMember("", new Node()));
-        assertNull(SplitWayCommand.findVia(r, "destination_sign"));
+        assertTrue(SplitWayCommand.findVias(r, "destination_sign").isEmpty());
         // destination_sign with sign
         r = new Relation();
         via = new Node();
         r.addMember(new RelationMember("sign", via));
-        assertEquals(via, SplitWayCommand.findVia(r, "destination_sign"));
+        assertEquals(Collections.singletonList(via), SplitWayCommand.findVias(r, "destination_sign"));
         // destination_sign with intersection
         r = new Relation();
         via = new Node();
         r.addMember(new RelationMember("intersection", via));
-        assertEquals(via, SplitWayCommand.findVia(r, "destination_sign"));
+        assertEquals(Collections.singletonList(via), SplitWayCommand.findVias(r, "destination_sign"));
     }
 
