Index: trunk/src/org/openstreetmap/josm/data/validation/tests/MapCSSTagChecker.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/validation/tests/MapCSSTagChecker.java	(revision 10708)
+++ trunk/src/org/openstreetmap/josm/data/validation/tests/MapCSSTagChecker.java	(revision 10710)
@@ -255,11 +255,21 @@
 
     public static class TagCheck implements Predicate<OsmPrimitive> {
+        /** The selector of this {@code TagCheck} */
         protected final GroupedMapCSSRule rule;
+        /** Commands to apply in order to fix a matching primitive */
         protected final List<FixCommand> fixCommands = new ArrayList<>();
+        /** Tags (or arbitraty strings) of alternatives to be presented to the user */
         protected final List<String> alternatives = new ArrayList<>();
+        /** An {@link Instruction.AssignmentInstruction}-{@link Severity} pair.
+         * Is evaluated on the matching primitive to give the error message. Map is checked to contain exactly one element. */
         protected final Map<Instruction.AssignmentInstruction, Severity> errors = new HashMap<>();
+        /** Unit tests */
         protected final Map<String, Boolean> assertions = new HashMap<>();
+        /** MapCSS Classes to set on matching primitives */
         protected final Set<String> setClassExpressions = new HashSet<>();
+        /** Denotes whether the object should be deleted for fixing it */
         protected boolean deletion;
+        /** A string used to group similar tests */
+        protected String group;
 
         TagCheck(GroupedMapCSSRule rule) {
@@ -324,4 +334,6 @@
                     } else if ("assertNoMatch".equals(ai.key) && val != null) {
                         check.assertions.put(val, Boolean.FALSE);
+                    } else if ("group".equals(ai.key) && val != null) {
+                        check.group = val;
                     } else {
                         throw new IllegalDataException("Cannot add instruction " + ai.key + ": " + ai.val + '!');
@@ -563,4 +575,6 @@
                 final Command fix = fixPrimitive(p);
                 final String description = getDescriptionForMatchingSelector(p, matchingSelector);
+                final String description1 = group == null ? description : group;
+                final String description2 = group == null ? null : description;
                 final List<OsmPrimitive> primitives;
                 if (env.child != null) {
@@ -570,7 +584,7 @@
                 }
                 if (fix != null) {
-                    return new FixableTestError(null, getSeverity(), description, null, matchingSelector.toString(), 3000, primitives, fix);
+                    return new FixableTestError(null, getSeverity(), description1, description2, matchingSelector.toString(), 3000, primitives, fix);
                 } else {
-                    return new TestError(null, getSeverity(), description, null, matchingSelector.toString(), 3000, primitives);
+                    return new TestError(null, getSeverity(), description1, description2, matchingSelector.toString(), 3000, primitives);
                 }
             } else {
