Index: trunk/src/org/openstreetmap/josm/actions/mapmode/SelectAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/mapmode/SelectAction.java	(revision 7386)
+++ trunk/src/org/openstreetmap/josm/actions/mapmode/SelectAction.java	(revision 7389)
@@ -233,5 +233,5 @@
     private boolean giveUserFeedback(MouseEvent e, int modifiers) {
         Collection<OsmPrimitive> c = asColl(
-                mv.getNearestNodeOrWay(e.getPoint(), OsmPrimitive.isSelectablePredicate, true));
+                mv.getNearestNodeOrWay(e.getPoint(), mv.isSelectablePredicate, true));
 
         updateKeyModifiers(modifiers);
@@ -406,5 +406,5 @@
         // primitives under cursor are stored in c collection
 
-        OsmPrimitive nearestPrimitive = mv.getNearestNodeOrWay(e.getPoint(), OsmPrimitive.isSelectablePredicate, true);
+        OsmPrimitive nearestPrimitive = mv.getNearestNodeOrWay(e.getPoint(), mv.isSelectablePredicate, true);
 
         determineMapMode(nearestPrimitive!=null);
@@ -687,5 +687,5 @@
         Collection<OsmPrimitive> selection = getCurrentDataSet().getSelectedNodesAndWays();
         if (selection.isEmpty()) { // if nothing was selected to drag, just select nearest node/way to the cursor
-            OsmPrimitive nearestPrimitive = mv.getNearestNodeOrWay(mv.getPoint(startEN), OsmPrimitive.isSelectablePredicate, true);
+            OsmPrimitive nearestPrimitive = mv.getNearestNodeOrWay(mv.getPoint(startEN), mv.isSelectablePredicate, true);
             getCurrentDataSet().setSelected(nearestPrimitive);
         }
@@ -858,5 +858,5 @@
         Collection<Node> target = mv.getNearestNodes(p,
                 getCurrentDataSet().getSelectedNodes(),
-                OsmPrimitive.isSelectablePredicate);
+                mv.isSelectablePredicate);
         return target.isEmpty() ? null : target.iterator().next();
     }
@@ -964,9 +964,9 @@
                     if (waitForMouseUpParameter) {
                         // prefer a selected nearest node or way, if possible
-                        osm = mv.getNearestNodeOrWay(p, OsmPrimitive.isSelectablePredicate, true);
+                        osm = mv.getNearestNodeOrWay(p, mv.isSelectablePredicate, true);
                     }
                 } else {
                     // Alt + left mouse button pressed: we need to build cycle list
-                    cycleList = mv.getAllNearest(p, OsmPrimitive.isSelectablePredicate);
+                    cycleList = mv.getAllNearest(p, mv.isSelectablePredicate);
 
                     if (cycleList.size() > 1) {
@@ -1104,5 +1104,5 @@
 
                 Way w = null;
-                for (WaySegment ws : mv.getNearestWaySegments(p, OsmPrimitive.isSelectablePredicate)) {
+                for (WaySegment ws : mv.getNearestWaySegments(p, mv.isSelectablePredicate)) {
                     w = ws.way;
 
Index: trunk/src/org/openstreetmap/josm/gui/NavigatableComponent.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/NavigatableComponent.java	(revision 7386)
+++ trunk/src/org/openstreetmap/josm/gui/NavigatableComponent.java	(revision 7389)
@@ -48,4 +48,5 @@
 import org.openstreetmap.josm.gui.download.DownloadDialog;
 import org.openstreetmap.josm.gui.help.Helpful;
+import org.openstreetmap.josm.gui.mappaint.MapPaintStyles;
 import org.openstreetmap.josm.gui.preferences.projection.ProjectionPreference;
 import org.openstreetmap.josm.tools.Predicate;
@@ -83,4 +84,13 @@
         void systemOfMeasurementChanged(String oldSoM, String newSoM);
     }
+
+    public Predicate<OsmPrimitive> isSelectablePredicate = new Predicate<OsmPrimitive>() {
+        @Override
+        public boolean evaluate(OsmPrimitive prim) {
+            if (!prim.isSelectable()) return false;
+            // if it isn't displayed on screen, you cannot click on it
+            return !MapPaintStyles.getStyles().get(prim, getDist100Pixel(), NavigatableComponent.this).isEmpty();
+        }
+    };
 
     public static final IntegerProperty PROP_SNAP_DISTANCE = new IntegerProperty("mappaint.node.snap-distance", 10);
