Index: src/org/openstreetmap/josm/actions/mapmode/ImproveWayAccuracyAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/mapmode/ImproveWayAccuracyAction.java	(revision 14668)
+++ src/org/openstreetmap/josm/actions/mapmode/ImproveWayAccuracyAction.java	(working copy)
@@ -434,28 +434,22 @@
 
                 // Looking for candidateSegment copies in ways that are referenced by candidateSegment nodes
                 List<Way> firstNodeWays = candidateSegment.getFirstNode().referrers(Way.class).collect(Collectors.toList());
-                List<Way> secondNodeWays = candidateSegment.getFirstNode().referrers(Way.class).collect(Collectors.toList());
 
                 Collection<WaySegment> virtualSegments = new LinkedList<>();
                 for (Way w : firstNodeWays) {
                     List<Pair<Node, Node>> wpps = w.getNodePairs(true);
-                    for (Way w2 : secondNodeWays) {
-                        if (!w.equals(w2)) {
-                            continue;
+                    // A way is referenced in both nodes.
+                    // Checking if there is such segment
+                    int i = -1;
+                    for (Pair<Node, Node> wpp : wpps) {
+                        ++i;
+                        boolean ab = wpp.a.equals(candidateSegment.getFirstNode())
+                                && wpp.b.equals(candidateSegment.getSecondNode());
+                        boolean ba = wpp.b.equals(candidateSegment.getFirstNode())
+                                && wpp.a.equals(candidateSegment.getSecondNode());
+                        if (ab || ba) {
+                            virtualSegments.add(new WaySegment(w, i));
                         }
-                        // A way is referenced in both nodes.
-                        // Checking if there is such segment
-                        int i = -1;
-                        for (Pair<Node, Node> wpp : wpps) {
-                            ++i;
-                            boolean ab = wpp.a.equals(candidateSegment.getFirstNode())
-                                    && wpp.b.equals(candidateSegment.getSecondNode());
-                            boolean ba = wpp.b.equals(candidateSegment.getFirstNode())
-                                    && wpp.a.equals(candidateSegment.getSecondNode());
-                            if (ab || ba) {
-                                virtualSegments.add(new WaySegment(w, i));
-                            }
-                        }
                     }
                 }
 
