Index: trunk/src/org/openstreetmap/josm/data/osm/Tag.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/Tag.java	(revision 6511)
+++ trunk/src/org/openstreetmap/josm/data/osm/Tag.java	(revision 6512)
@@ -105,5 +105,5 @@
             return new Tag(x[0], x[1]);
         } else {
-            throw new IllegalArgumentException("String does not contain '='");
+            throw new IllegalArgumentException("'" + s + "' does not contain '='");
         }
     }
Index: trunk/src/org/openstreetmap/josm/data/validation/tests/MapCSSTagChecker.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/validation/tests/MapCSSTagChecker.java	(revision 6511)
+++ trunk/src/org/openstreetmap/josm/data/validation/tests/MapCSSTagChecker.java	(revision 6512)
@@ -53,4 +53,5 @@
         protected final List<Tag> alternatives = new ArrayList<Tag>();
         protected final Map<String, Severity> errors = new HashMap<String, Severity>();
+        protected final Map<String, Boolean> assertions = new HashMap<String, Boolean>();
 
         TagCheck(List<Selector> selector) {
@@ -82,4 +83,8 @@
                     } else if ("suggestAlternative".equals(ai.key) && val != null) {
                         check.alternatives.add(val.contains("=") ? Tag.ofString(val) : new Tag(val));
+                    } else if ("assertMatch".equals(ai.key) && val != null) {
+                        check.assertions.put(val, true);
+                    } else if ("assertNoMatch".equals(ai.key) && val != null) {
+                        check.assertions.put(val, false);
                     } else {
                         throw new RuntimeException("Cannot add instruction " + ai.key + ": " + ai.val + "!");
