Index: src/org/openstreetmap/josm/data/validation/tests/MapCSSTagChecker.java
===================================================================
--- src/org/openstreetmap/josm/data/validation/tests/MapCSSTagChecker.java	(revision 17083)
+++ src/org/openstreetmap/josm/data/validation/tests/MapCSSTagChecker.java	(working copy)
@@ -356,7 +356,7 @@
             final MapCSSStyleSource source = new MapCSSStyleSource("");
             final MapCSSParser preprocessor = new MapCSSParser(css, MapCSSParser.LexicalState.PREPROCESSOR);
             try (StringReader mapcss = new StringReader(preprocessor.pp_root(source))) {
-                new MapCSSParser(mapcss, MapCSSParser.LexicalState.DEFAULT).sheet(source);
+                new MapCSSParser(mapcss, MapCSSParser.LexicalState.DEFAULT).sheet(source, false);
             }
             // Ignore "meta" rule(s) from external rules of JOSM wiki
             source.removeMetaRules();
Index: src/org/openstreetmap/josm/gui/mappaint/mapcss/MapCSSParser.jj
===================================================================
--- src/org/openstreetmap/josm/gui/mappaint/mapcss/MapCSSParser.jj	(revision 17083)
+++ src/org/openstreetmap/josm/gui/mappaint/mapcss/MapCSSParser.jj	(working copy)
@@ -618,9 +618,10 @@
 /**
  * entry point for the main parser
  * @param sheet MapCSS style source
+ * @param metadataOnly if true, stop reading after first rule that is not a meta rule 
  * @throws ParseException in case of parsing error
  */
-void sheet(MapCSSStyleSource sheet):
+void sheet(MapCSSStyleSource sheet, boolean metadataOnly):
 {
 }
 {
@@ -629,6 +630,14 @@
     (
         try {
             rule() w()
+            { 
+            if (metadataOnly && !sheet.rules.isEmpty()) {
+                // get first selector of last rule 
+                Selector sel = sheet.rules.get(sheet.rules.size() - 1).selectors.get(0);
+                if (!(sel instanceof GeneralSelector) || !Selector.BASE_META.equals(sel.getBase()))
+                  return;
+            }
+            }
         } catch (MapCSSException mex) {
             Logging.error(mex);
             error_skipto(RBRACE, mex);
Index: src/org/openstreetmap/josm/gui/mappaint/mapcss/MapCSSStyleSource.java
===================================================================
--- src/org/openstreetmap/josm/gui/mappaint/mapcss/MapCSSStyleSource.java	(revision 17083)
+++ src/org/openstreetmap/josm/gui/mappaint/mapcss/MapCSSStyleSource.java	(working copy)
@@ -168,7 +168,7 @@
 
                     // do the actual mapcss parsing
                     try (Reader in2 = new StringReader(preprocessor.pp_root(this))) {
-                        new MapCSSParser(in2, MapCSSParser.LexicalState.DEFAULT).sheet(this);
+                        new MapCSSParser(in2, MapCSSParser.LexicalState.DEFAULT).sheet(this, metadataOnly);
                     }
 
                     loadMeta();
@@ -175,6 +175,8 @@
                     if (!metadataOnly) {
                         loadCanvas();
                         loadSettings();
+                    } else {
+                        rules.clear();
                     }
                 } finally {
                     closeSourceInputStream(in);
Index: scripts/TagInfoExtract.java
===================================================================
--- scripts/TagInfoExtract.java	(revision 17083)
+++ scripts/TagInfoExtract.java	(working copy)
@@ -354,7 +354,7 @@
                 MapCSSParser parser = new MapCSSParser(reader, MapCSSParser.LexicalState.DEFAULT);
                 styleSource = new MapCSSStyleSource("");
                 styleSource.url = "";
-                parser.sheet(styleSource);
+                parser.sheet(styleSource, false);
             }
         }
 
