Index: src/org/openstreetmap/josm/data/validation/tests/UnconnectedWays.java
===================================================================
--- src/org/openstreetmap/josm/data/validation/tests/UnconnectedWays.java	(revision 15353)
+++ src/org/openstreetmap/josm/data/validation/tests/UnconnectedWays.java	(working copy)
@@ -445,14 +445,26 @@
                 visited.add(node);
                 for (final Way way : node.getParentWays()) {
                     if (isCandidate(way)) {
-                        List<Node> nextNodes = new ArrayList<>();
                         int pos = way.getNodes().indexOf(node);
+                        Node[] nextNodes = new Node[2];
                         if (pos > 0) {
-                            nextNodes.add(way.getNode(pos - 1));
+                            nextNodes[0] = way.getNode(pos - 1);
                         }
                         if (pos + 1 < way.getNodesCount()) {
-                            nextNodes.add(way.getNode(pos + 1));
+                            nextNodes[1] = way.getNode(pos + 1);
                         }
+
+                        // Don't try to use nodes that are null (there shouldn't be any) or where we don't know the LatLon.
+                        int i = 1;
+                        while (pos - i >= 0 && (nextNodes[0] == null || !nextNodes[0].isLatLonKnown())) {
+                            nextNodes[0] = way.getNode(pos - i);
+                            i++;
+                        }
+                        i = 2;
+                        while (pos + i < way.getNodesCount() && (nextNodes[1] == null || !nextNodes[1].isLatLonKnown())) {
+                            nextNodes[1] = way.getNode(pos + i);
+                            i++;
+                        }
                         for (Node next : nextNodes) {
                             final boolean containsN = visited.contains(next);
                             visited.add(next);
