Index: /trunk/src/org/openstreetmap/josm/actions/mapmode/SelectAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/mapmode/SelectAction.java	(revision 5015)
+++ /trunk/src/org/openstreetmap/josm/actions/mapmode/SelectAction.java	(revision 5016)
@@ -605,9 +605,5 @@
                 }
             } else {
-                if (osm instanceof Node) {
-                    cycleList = new LinkedList<OsmPrimitive>(mv.getNearestNodes(p, OsmPrimitive.isSelectablePredicate));
-                } else if (osm instanceof Way) {
-                    cycleList = new LinkedList<OsmPrimitive>(mv.getNearestWays(p, OsmPrimitive.isSelectablePredicate));
-                }
+                cycleList = mv.getAllNearest(p, OsmPrimitive.isSelectablePredicate);
 
                 if (cycleList.size() > 1) {
Index: /trunk/src/org/openstreetmap/josm/gui/NavigatableComponent.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/NavigatableComponent.java	(revision 5015)
+++ /trunk/src/org/openstreetmap/josm/gui/NavigatableComponent.java	(revision 5016)
@@ -36,4 +36,5 @@
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
+import org.openstreetmap.josm.data.osm.Relation;
 import org.openstreetmap.josm.data.osm.Way;
 import org.openstreetmap.josm.data.osm.WaySegment;
@@ -1091,4 +1092,5 @@
         Set<Way> wset = new HashSet<Way>();
 
+        // add nearby ways
         for (List<WaySegment> wss : getNearestWaySegmentsImpl(p, predicate).values()) {
             for (WaySegment ws : wss) {
@@ -1098,7 +1100,21 @@
             }
         }
+        
+        // add nearby nodes
         for (List<Node> nlist : getNearestNodesImpl(p, predicate).values()) {
             nearestList.addAll(nlist);
         }
+        
+        // add parent relations of nearby nodes and ways
+        Set<OsmPrimitive> parentRelations = new HashSet<OsmPrimitive>();
+        for (OsmPrimitive o : nearestList) {
+            for (OsmPrimitive r : o.getReferrers()) {
+                if (r instanceof Relation && predicate.evaluate(r)) {
+                    parentRelations.add(r);
+                }
+            }
+        }
+        nearestList.addAll(parentRelations);
+        
         if (ignore != null) {
             nearestList.removeAll(ignore);
