Index: trunk/src/org/openstreetmap/josm/data/osm/Relation.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/Relation.java	(revision 764)
+++ trunk/src/org/openstreetmap/josm/data/osm/Relation.java	(revision 765)
@@ -59,11 +59,13 @@
 	}
 
-    @Override public String toString() {
-        return "{Relation id="+id+" version="+version+" members="+Arrays.toString(members.toArray())+"}";
-    }
+	@Override public String toString() {
+		// return "{Relation id="+id+" version="+version+" members="+Arrays.toString(members.toArray())+"}";
+		// adding memvbers in string increases memory usage a lot and overflows for looped relations
+		return "{Relation id="+id+" version="+version+"}";
+	}
 
 	@Override public boolean realEqual(OsmPrimitive osm, boolean semanticOnly) {
 		return osm instanceof Relation ? super.realEqual(osm, semanticOnly) && members.equals(((Relation)osm).members) : false;
-    }
+	}
 
 	public int compareTo(OsmPrimitive o) {
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/RelationEditor.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/RelationEditor.java	(revision 764)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/RelationEditor.java	(revision 765)
@@ -303,5 +303,5 @@
 			boolean skip = false;
 			for (RelationMember rm : clone.members) {
-				if (rm.member == p)
+				if (rm.member == p || p == relation)
 				{
 					skip = true;
