Index: /trunk/src/org/openstreetmap/josm/actions/AlignInCircleAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/AlignInCircleAction.java	(revision 5718)
+++ /trunk/src/org/openstreetmap/josm/actions/AlignInCircleAction.java	(revision 5719)
@@ -10,6 +10,8 @@
 import java.math.MathContext;
 import java.util.Collection;
+import java.util.HashSet;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.Set;
 
 import javax.swing.JOptionPane;
@@ -116,8 +118,7 @@
             // distance between two nodes.
             if (nodes.size() > 0) {
-                if (nodes.size() == 1 && way.containsNode(nodes.get(0))) {
+                if (nodes.size() == 1 && way.containsNode(nodes.get(0)) && allowRegularPolygon(way.getNodes())) {
                     regular = true;
-                } else {
-
+                } else if (nodes.size() >= 2) {
                     center = nodes.get(way.containsNode(nodes.get(0)) ? 1 : 0).getEastNorth();
                     if (nodes.size() == 2) {
@@ -125,5 +126,5 @@
                     }
                 }
-                nodes = new LinkedList<Node>();
+                nodes.clear();
             }
 
@@ -239,3 +240,19 @@
         setEnabled(selection != null && !selection.isEmpty());
     }
+    
+    /**
+     * Determines if a regular polygon is allowed to be created with the given nodes collection.
+     * @param nodes The nodes collection to check.
+     * @return true if all nodes in the given collection are referred by the same object, and no other one (see #8431)
+     */
+    protected boolean allowRegularPolygon(Collection<Node> nodes) {
+        Set<OsmPrimitive> allReferrers = new HashSet<OsmPrimitive>();
+        for (Node n : nodes) {
+            List<OsmPrimitive> referrers = n.getReferrers();
+            if (referrers.size() > 1 || (allReferrers.addAll(referrers) && allReferrers.size() > 1)) {
+                return false;
+            }
+        }
+        return true;
+    }
 }
