Index: trunk/src/org/openstreetmap/josm/gui/util/HighlightHelper.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/util/HighlightHelper.java	(revision 6472)
+++ trunk/src/org/openstreetmap/josm/gui/util/HighlightHelper.java	(revision 6473)
@@ -7,4 +7,5 @@
 import java.util.Iterator;
 import java.util.Set;
+
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.osm.DataSet;
@@ -18,5 +19,5 @@
 public class HighlightHelper {
     Set<OsmPrimitive> highlightedPrimitives = new HashSet<OsmPrimitive>();
-    
+
     /**
      * Highlight and remember given primitives
@@ -26,5 +27,5 @@
         return highlight(prims, false);
     }
-    
+
     /**
      * Highlight and remember given primitives
@@ -51,5 +52,5 @@
         return needsRepaint;
     }
-    
+
     /**
      * Highlight and remember given primitives, forgetting previously highlighted by this instance
@@ -59,5 +60,5 @@
         return highlight(prims, true);
     }
-    
+
     /**
      * Highlight and remember given primitive, forgetting previously highlighted by this instance
@@ -67,5 +68,5 @@
         return highlight(Collections.singleton(p), true);
     }
-    
+
     /**
      * Highlight and remember given primitive
@@ -74,12 +75,19 @@
      */
     public boolean setHighlight(OsmPrimitive p, boolean flag) {
+        return setHighlight(p, flag, new HashSet<Relation>());
+    }
+
+    private boolean setHighlight(OsmPrimitive p, boolean flag, Set<Relation> seenRelations) {
         if (p instanceof Relation) {
+            Relation r = (Relation) p;
+            seenRelations.add(r);
             boolean needRepaint = false;
-            for (OsmPrimitive m: ((Relation) p).getMemberPrimitives()) {
-                needRepaint |= setHighlight(m, flag);
+            for (OsmPrimitive m : r.getMemberPrimitives()) {
+                if (!(m instanceof Relation) || !seenRelations.contains(m)) {
+                    needRepaint |= setHighlight(m, flag, seenRelations);
+                }
             }
             return needRepaint;
-        } else
-        if (flag) {
+        } else if (flag) {
             if (highlightedPrimitives.add(p)) {
                 p.setHighlighted(true);
@@ -94,5 +102,5 @@
         return false;
     }
-    
+
     /**
      * Clear highlighting of all remembered primitives
@@ -104,5 +112,5 @@
         highlightedPrimitives.clear();
     }
-    
+
     /**
      * Slow method to import all currently highlighted primitives into this instance
@@ -114,5 +122,5 @@
         }
     }
-    
+
     /**
      * Slow method to remove highlights from all primitives
