Index: /trunk/data/validator/combinations.mapcss
===================================================================
--- /trunk/data/validator/combinations.mapcss	(revision 8494)
+++ /trunk/data/validator/combinations.mapcss	(revision 8495)
@@ -264,5 +264,5 @@
 way[waterway] > node[ford?] { set ford_on_waterway; }
 way[highway] > node[ford?] { set ford_on_highway; }
-node[ford?]!.ford_on_waterway, node[ford?]!.ford_on_highway {
+node[ford?]:in-downloaded-area!.ford_on_waterway, node[ford?]:in-downloaded-area!.ford_on_highway {
     throwWarning: tr("{0} should be on the node where {1} and {2} intersect", "ford", "highway", "waterway");
 }
Index: /trunk/src/org/openstreetmap/josm/actions/search/SearchCompiler.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/search/SearchCompiler.java	(revision 8494)
+++ /trunk/src/org/openstreetmap/josm/actions/search/SearchCompiler.java	(revision 8495)
@@ -1302,5 +1302,5 @@
      * Matches objects within source area ("downloaded area").
      */
-    private static class InDataSourceArea extends InArea {
+    public static class InDataSourceArea extends InArea {
 
         public InDataSourceArea(boolean all) {
@@ -1310,5 +1310,6 @@
         @Override
         protected Bounds getBounds() {
-            return new Bounds(Main.main.getCurrentDataSet().getDataSourceArea().getBounds2D());
+            return Main.main.getCurrentDataSet() == null || Main.main.getCurrentDataSet().getDataSourceArea() == null
+                    ? null : new Bounds(Main.main.getCurrentDataSet().getDataSourceArea().getBounds2D());
         }
     }
Index: /trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/Condition.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/Condition.java	(revision 8494)
+++ /trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/Condition.java	(revision 8495)
@@ -13,4 +13,5 @@
 
 import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.actions.search.SearchCompiler;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
@@ -467,4 +468,15 @@
                     !MultipolygonCache.getInstance().get(Main.map.mapView, (Relation) e.osm).getOpenEnds().isEmpty();
         }
+
+        private static final Predicate<OsmPrimitive> IN_DOWNLOADED_AREA = new SearchCompiler.InDataSourceArea(false);
+
+        /**
+         * {@code in-downloaded-area} tests whether the object is within source area ("downloaded area").
+         * @see SearchCompiler.InDataSourceArea
+         */
+        static boolean inDownloadedArea(Environment e) {
+            return IN_DOWNLOADED_AREA.evaluate(e.osm);
+        }
+
     }
 
