Index: trunk/src/org/openstreetmap/josm/data/validation/tests/MapCSSTagChecker.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/validation/tests/MapCSSTagChecker.java	(revision 8330)
+++ trunk/src/org/openstreetmap/josm/data/validation/tests/MapCSSTagChecker.java	(revision 8331)
@@ -8,4 +8,5 @@
 import java.io.InputStream;
 import java.io.Reader;
+import java.io.StringReader;
 import java.text.MessageFormat;
 import java.util.ArrayList;
@@ -317,11 +318,11 @@
         static List<TagCheck> readMapCSS(Reader css) throws ParseException {
             CheckParameterUtil.ensureParameterNotNull(css, "css");
-            return readMapCSS(new MapCSSParser(css));
-        }
-
-        static List<TagCheck> readMapCSS(MapCSSParser css) throws ParseException {
-            CheckParameterUtil.ensureParameterNotNull(css, "css");
+
             final MapCSSStyleSource source = new MapCSSStyleSource("");
-            css.sheet(source);
+            final MapCSSParser preprocessor = new MapCSSParser(css, MapCSSParser.LexicalState.PREPROCESSOR);
+
+            css = new StringReader(preprocessor.pp_root(source));
+            final MapCSSParser parser = new MapCSSParser(css, MapCSSParser.LexicalState.DEFAULT);
+            parser.sheet(source);
             assert source.getErrors().isEmpty();
             // Ignore "meta" rule(s) from external rules of JOSM wiki
Index: trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/MapCSSParser.jj
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/MapCSSParser.jj	(revision 8330)
+++ trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/MapCSSParser.jj	(revision 8331)
@@ -9,4 +9,5 @@
 
 import java.io.InputStream;
+import java.io.Reader;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -87,4 +88,17 @@
             throw new RuntimeException(e);
         }
+        return new MapCSSParserTokenManager(scs, initState.idx);
+    }
+
+    /**
+     * Constructor which initializes the parser with a certain lexical state.
+     */
+    public MapCSSParser(Reader in, LexicalState initState) {
+        this(createTokenManager(in, initState));
+        declarationCounter = 0;
+    }
+
+    protected static MapCSSParserTokenManager createTokenManager(Reader in, LexicalState initState) {
+        final SimpleCharStream scs = new SimpleCharStream(in, 1, 1);
         return new MapCSSParserTokenManager(scs, initState.idx);
     }
Index: trunk/test/unit/org/openstreetmap/josm/data/validation/tests/MapCSSTagCheckerTest.java
===================================================================
--- trunk/test/unit/org/openstreetmap/josm/data/validation/tests/MapCSSTagCheckerTest.java	(revision 8330)
+++ trunk/test/unit/org/openstreetmap/josm/data/validation/tests/MapCSSTagCheckerTest.java	(revision 8331)
@@ -118,4 +118,13 @@
 
     @Test
+    public void testPreprocessing() throws Exception {
+        final MapCSSTagChecker test = buildTagChecker("" +
+                "@media (min-josm-version: 1) { *[foo] { throwWarning: \"!\"; } }\n" +
+                "@media (min-josm-version: 2147483647) { *[bar] { throwWarning: \"!\"; } }\n");
+        assertThat(test.getErrorsForPrimitive(OsmUtils.createPrimitive("way foo=1"), false).size(), is(1));
+        assertThat(test.getErrorsForPrimitive(OsmUtils.createPrimitive("way bar=1"), false).size(), is(0));
+    }
+
+    @Test
     public void testInit() throws Exception {
         MapCSSTagChecker c = new MapCSSTagChecker();
