Index: trunk/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java	(revision 1844)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java	(revision 1845)
@@ -20,6 +20,4 @@
 import java.awt.event.WindowAdapter;
 import java.awt.event.WindowEvent;
-import java.beans.PropertyChangeEvent;
-import java.beans.PropertyChangeListener;
 import java.io.IOException;
 import java.util.ArrayList;
@@ -46,6 +44,4 @@
 import javax.swing.KeyStroke;
 import javax.swing.SwingUtilities;
-import javax.swing.event.AncestorEvent;
-import javax.swing.event.AncestorListener;
 import javax.swing.event.ChangeEvent;
 import javax.swing.event.ChangeListener;
@@ -193,4 +189,14 @@
                     .toString()));
         }
+
+        addWindowListener(
+                new WindowAdapter() {
+                    @Override
+                    public void windowOpened(WindowEvent e) {
+                        cleanSelfReferences();
+                    }
+                }
+        );
+
     }
 
@@ -626,4 +632,37 @@
         if (!b) {
             dispose();
+        }
+    }
+
+    /**
+     * checks whether the current relation has members referring to itself. If so,
+     * warns the users and provides an option for removing these members.
+     * 
+     */
+    protected void cleanSelfReferences() {
+        ArrayList<OsmPrimitive> toCheck = new ArrayList<OsmPrimitive>();
+        toCheck.add(getRelation());
+        if (memberTableModel.hasMembersReferringTo(toCheck)) {
+            int ret = ConditionalOptionPaneUtil.showOptionDialog(
+                    "clean_relation_self_references",
+                    Main.parent,
+                    tr("<html>There is at least one member in this relation referring<br>"
+                            + "to the relation itself.<br>"
+                            + "This creates circular dependencies and is dicuraged.<br>"
+                            + "How do you want to proceed with circular dependencies?</html>"),
+                            tr("Warning"),
+                            JOptionPane.YES_NO_OPTION,
+                            JOptionPane.WARNING_MESSAGE,
+                            new String[]{tr("Remove them, clean up relation"), tr("Ignore them, leave relation as is")},
+                            tr("Remove them, clean up relation")
+            );
+            switch(ret) {
+            case ConditionalOptionPaneUtil.DIALOG_DISABLED_OPTION: return;
+            case JOptionPane.CLOSED_OPTION: return;
+            case JOptionPane.NO_OPTION: return;
+            case JOptionPane.YES_OPTION:
+                memberTableModel.removeMembersReferringTo(toCheck);
+                break;
+            }
         }
     }
@@ -1316,3 +1355,5 @@
         }
     }
+
+
 }
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableModel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableModel.java	(revision 1844)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableModel.java	(revision 1845)
@@ -395,8 +395,18 @@
     }
 
-    public boolean isEditableRelation(int row) {
-        if (row < 0 || row >= members.size())
-            return false;
-        RelationMember member = members.get(row);
+    /**
+     * Replies true if the index-th relation members referrs
+     * to an editable relation, i.e. a relation which is not
+     * incomplete.
+     * 
+     * @param index the index
+     * @return true, if the index-th relation members referrs
+     * to an editable relation, i.e. a relation which is not
+     * incomplete
+     */
+    public boolean isEditableRelation(int index) {
+        if (index < 0 || index >= members.size())
+            return false;
+        RelationMember member = members.get(index);
         if (!(member.member instanceof Relation))
             return false;
@@ -429,5 +439,4 @@
         return false;
     }
-
 
     void sort() {
