Index: applications/editors/josm/plugins/utilsplugin2/src/org/openstreetmap/josm/plugins/utilsplugin2/curves/CircleArcMaker.java
===================================================================
--- applications/editors/josm/plugins/utilsplugin2/src/org/openstreetmap/josm/plugins/utilsplugin2/curves/CircleArcMaker.java	(revision 29123)
+++ applications/editors/josm/plugins/utilsplugin2/src/org/openstreetmap/josm/plugins/utilsplugin2/curves/CircleArcMaker.java	(revision 29124)
@@ -3,5 +3,8 @@
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
 import java.util.HashSet;
 import java.util.Iterator;
@@ -60,5 +63,5 @@
         Set<Way> targetWays = new HashSet<Way>();
 
-        boolean nodesHasBeenChoosen = false;
+        boolean nodesHaveBeenChoosen = false;
         if (selectedNodes.size() == 3) {
             Iterator<Node> nodeIter = selectedNodes.iterator();
@@ -66,5 +69,5 @@
             n2 = nodeIter.next();
             n3 = nodeIter.next();
-            nodesHasBeenChoosen = true;
+            nodesHaveBeenChoosen = true;
             if (selectedWays.isEmpty()) { // Create a brand new way
                 Way newWay = new Way();
@@ -76,8 +79,8 @@
             }
         }
-        if (selectedWays.isEmpty() == false) {
+        if (!selectedWays.isEmpty()) {
             // TODO: use only two nodes inferring the orientation from the parent way.
 
-            if (nodesHasBeenChoosen == false) {
+            if (!nodesHaveBeenChoosen) {
                 // Use the three last nodes in the way as anchors. This is intended to be used with the
                 // built in draw mode
@@ -89,15 +92,29 @@
                 n2 = w.getNode(nodeCount - 2);
                 n1 = w.getNode(nodeCount - 3);
-                nodesHasBeenChoosen = true;
-            }
-            targetWays.addAll(OsmPrimitive.getFilteredList(n1.getReferrers(), Way.class));
-            targetWays.addAll(OsmPrimitive.getFilteredList(n2.getReferrers(), Way.class));
-            targetWays.addAll(OsmPrimitive.getFilteredList(n3.getReferrers(), Way.class));
-            //            for(Way w : selectedWays) {
-            //                targetWays.add(w);
-            //            }
-
-        }
-        if (nodesHasBeenChoosen == false) {
+                nodesHaveBeenChoosen = true;
+            }
+            // Fix #7341. Find the first way having all nodes in common to sort them in its nodes order
+            List<Node> consideredNodes = Arrays.asList(new Node[]{n1,n2,n3});
+            for (Way w : selectedWays) {
+                final List<Node> nodes = w.getNodes();
+                if (nodes.containsAll(consideredNodes)) {
+                    Collections.sort(consideredNodes, new Comparator<Node>() {
+                        @Override
+                        public int compare(Node a, Node b) {
+                            return nodes.indexOf(a) - nodes.indexOf(b);
+                        }
+                    });
+                    n1 = consideredNodes.get(0);
+                    n2 = consideredNodes.get(1);
+                    n3 = consideredNodes.get(2);
+                    break;
+                }
+            }
+            
+            for (Node n : consideredNodes) {
+                targetWays.addAll(OsmPrimitive.getFilteredList(n.getReferrers(), Way.class));
+            }
+        }
+        if (!nodesHaveBeenChoosen) {
             return null;
         }
