Index: /trunk/src/org/openstreetmap/josm/data/validation/tests/MapCSSTagChecker.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/validation/tests/MapCSSTagChecker.java	(revision 13632)
+++ /trunk/src/org/openstreetmap/josm/data/validation/tests/MapCSSTagChecker.java	(revision 13633)
@@ -16,5 +16,4 @@
 import java.util.HashMap;
 import java.util.HashSet;
-import java.util.Iterator;
 import java.util.LinkedHashMap;
 import java.util.LinkedHashSet;
@@ -376,5 +375,5 @@
             parser.sheet(source);
             // Ignore "meta" rule(s) from external rules of JOSM wiki
-            removeMetaRules(source);
+            source.removeMetaRules();
             // group rules with common declaration block
             Map<Declaration, List<Selector>> g = new LinkedHashMap<>();
@@ -399,16 +398,4 @@
             }
             return new ParseResult(parseChecks, source.getErrors());
-        }
-
-        private static void removeMetaRules(MapCSSStyleSource source) {
-            for (Iterator<MapCSSRule> it = source.rules.iterator(); it.hasNext();) {
-                MapCSSRule x = it.next();
-                if (x.selector instanceof GeneralSelector) {
-                    GeneralSelector gs = (GeneralSelector) x.selector;
-                    if ("meta".equals(gs.base)) {
-                        it.remove();
-                    }
-                }
-            }
         }
 
Index: /trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/MapCSSStyleSource.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/MapCSSStyleSource.java	(revision 13632)
+++ /trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/MapCSSStyleSource.java	(revision 13633)
@@ -49,5 +49,7 @@
 import org.openstreetmap.josm.gui.mappaint.mapcss.ConditionFactory.KeyValueCondition;
 import org.openstreetmap.josm.gui.mappaint.mapcss.ConditionFactory.Op;
+import org.openstreetmap.josm.gui.mappaint.mapcss.ConditionFactory.PseudoClassCondition;
 import org.openstreetmap.josm.gui.mappaint.mapcss.ConditionFactory.SimpleKeyValueCondition;
+import org.openstreetmap.josm.gui.mappaint.mapcss.Selector.AbstractSelector;
 import org.openstreetmap.josm.gui.mappaint.mapcss.Selector.ChildOrParentSelector;
 import org.openstreetmap.josm.gui.mappaint.mapcss.Selector.GeneralSelector;
@@ -434,4 +436,6 @@
                     loadCanvas();
                     loadSettings();
+                    // remove "areaStyle" pseudo classes intended only for validator (causes StackOverflowError otherwise)
+                    removeAreaStyleClasses();
                 } finally {
                     closeSourceInputStream(in);
@@ -715,4 +719,58 @@
     }
 
+    /**
+     * Removes "meta" rules. Not needed for validator.
+     * @since 13633
+     */
+    public void removeMetaRules() {
+        for (Iterator<MapCSSRule> it = rules.iterator(); it.hasNext();) {
+            MapCSSRule x = it.next();
+            if (x.selector instanceof GeneralSelector) {
+                GeneralSelector gs = (GeneralSelector) x.selector;
+                if ("meta".equals(gs.base)) {
+                    it.remove();
+                }
+            }
+        }
+    }
+
+    /**
+     * Removes "areaStyle" pseudo-classes. Only needed for validator.
+     * @since 13633
+     */
+    public void removeAreaStyleClasses() {
+        for (Iterator<MapCSSRule> it = rules.iterator(); it.hasNext();) {
+            removeAreaStyleClasses(it.next().selector);
+        }
+    }
+
+    private static void removeAreaStyleClasses(Selector sel) {
+        if (sel instanceof ChildOrParentSelector) {
+            removeAreaStyleClasses((ChildOrParentSelector) sel);
+        } else if (sel instanceof AbstractSelector) {
+            removeAreaStyleClasses((AbstractSelector) sel);
+        }
+    }
+
+    private static void removeAreaStyleClasses(ChildOrParentSelector sel) {
+        removeAreaStyleClasses(sel.left);
+        removeAreaStyleClasses(sel.right);
+    }
+
+    private static void removeAreaStyleClasses(AbstractSelector sel) {
+        if (sel.conds != null) {
+            for (Iterator<Condition> it = sel.conds.iterator(); it.hasNext();) {
+                Condition c = it.next();
+                if (c instanceof PseudoClassCondition) {
+                    PseudoClassCondition cc = (PseudoClassCondition) c;
+                    if ("areaStyle".equals(cc.method.getName())) {
+                        Logging.warn("Removing 'areaStyle' pseudo-class from "+sel+". This class is only meant for validator");
+                        it.remove();
+                    }
+                }
+            }
+        }
+    }
+
     @Override
     public String toString() {
