Index: trunk/data/validator/highway.mapcss
===================================================================
--- trunk/data/validator/highway.mapcss	(revision 6513)
+++ trunk/data/validator/highway.mapcss	(revision 6513)
@@ -0,0 +1,98 @@
+way[highway][name =~ /(?i).* (Ave|Blvd|Br|Brg|Cct|Cir|Cl|Cr|Crct|Cres|Crt|Ct|Dr|Drv|Esp|Espl|Hwy|Ln|Mw|Mwy|Pl|Rd|Qy|Qys|Sq|St|Str|Ter|Tce|Tr|Wy)[.]?$/] {
+  throwWarning: tr("abbreviated street name");
+  assertMatch: "way highway=unclassified name=\"Foo Ave\"";
+  assertMatch: "way highway=unclassified name=\"Foo Ave.\"";
+  assertMatch: "way highway=unclassified name=\"Bou Blvd.\"";
+  assertMatch: "way highway=unclassified name=\"Bou blvd.\"";
+}
+
+node[oneway] {
+  throwWarning: tr("oneway tag on a node");
+  assertMatch: "node oneway=-1";
+  assertNoMatch: "way oneway=-1";
+}
+
+node[bridge?] {
+  throwWarning: tr("bridge tag on a node");
+  assertMatch: "node bridge=yes";
+  assertNoMatch: "node bridge=13";
+}
+
+node[highway =~ /motorway*|trunk*|primary*|secondary*|tertiary*|unclassified|residential|service|living_street|pedestrian|track|path|footway/] {
+  throwWarning: tr("wrong highway tag on a node");
+  assertMatch: "node highway=primary";
+  assertMatch: "node highway=primary_link";
+  assertNoMatch: "node highway=crossing";
+}
+
+way[highway=crossing], way[railway=crossing] {
+  throwWarning: tr("wrong crossing tag on a way");
+  assertMatch: "way highway=crossing";
+  assertNoMatch: "node highway=crossing";
+}
+
+way[highway=unclassified][!name] {
+  throwOther: tr("Unnamed unclassified highway");
+  assertMatch: "way highway=unclassified";
+  assertNoMatch: "way highway=unclassified name=Foo";
+}
+
+way[highway =~ /motorway|trunk|primary|secondary|tertiary/][!ref] {
+  throwOther: tr("highway without a reference");
+  assertMatch: "way highway=primary";
+  assertNoMatch: "way highway=primary ref=123";
+}
+
+way[highway=road] {
+  throwWarning: tr("temporary highway type");
+  assertMatch: "way highway=road";
+  assertNoMatch: "way highway=residential";
+}
+
+way[highway=cycleway][bicycle?!] {
+  throwWarning: tr("cycleway with tag bicycle");
+  assertMatch: "way highway=cycleway bicycle=false";
+  assertMatch: "way highway=cycleway bicycle=0";
+  assertNoMatch: "way highway=cycleway bicycle=yes";
+  assertNoMatch: "way highway=cycleway";
+}
+
+way[highway=footway][foot?!] {
+  throwWarning: tr("footway with tag foot");
+  assertMatch: "way highway=footway foot=false";
+  assertMatch: "way highway=footway foot=0";
+  assertNoMatch: "way highway=footway foot=yes";
+  assertNoMatch: "way highway=footway";
+}
+
+way[highway=cycleway][cycleway=lane] {
+  throwWarning: tr("separate cycleway as lane on a cycleway");
+  assertMatch: "way highway=cycleway cycleway=lane";
+  assertNoMatch: "way highway=cycleway";
+  assertNoMatch: "way highway=residential cycleway=lane";
+}
+
+way[highway][barrier] {
+  throwWarning: tr("barrier used on a way");
+  assertMatch: "way highway=residential barrier=hedge";
+  assertNoMatch: "way highway=residential";
+  assertNoMatch: "way barrier=hedge";
+}
+
+way[highway=footway][maxspeed], way[highway=steps][maxspeed] {
+  throwWarning: tr("maxspeed used for footway");
+  assertMatch: "way highway=footway maxspeed=20";
+  assertNoMatch: "way highway=residential maxspeed=20";
+  assertNoMatch: "way highway=footway";
+}
+
+*[name =~ /(?i).*Strasse.*/] {
+  throwWarning: tr("street name contains ss");
+  assertMatch: "way name=Foobarstrasse";
+  assertMatch: "way name=Foobar-Strassenweg";
+  assertNoMatch: "way name=Foobarstraße";
+}
+
+/*
+TODO: * : W : / *name * /i == * && name != * # misspelled key name
+*/
Index: trunk/data/validator/tagchecker.cfg
===================================================================
--- trunk/data/validator/tagchecker.cfg	(revision 6512)
+++ trunk/data/validator/tagchecker.cfg	(revision 6513)
@@ -37,13 +37,4 @@
 # Empty lines and space signs are ignored
 
-way  : W : highway == * && name == /.* (Ave|Blvd|Br|Brg|Cct|Cir|Cl|Cr|Crct|Cres|Crt|Ct|Dr|Drv|Esp|Espl|Hwy|Ln|Mw|Mwy|Pl|Rd|Qy|Qys|Sq|St|Str|Ter|Tce|Tr|Wy)\.?$/i               # abbreviated street name
-
-node : W : oneway == *                                                         # oneway tag on a node
-node : W : bridge == BOOLEAN_TRUE                                              # bridge tag on a node
-node : W : highway == /motorway*|trunk*|primary*|secondary*|tertiary*|unclassified|residential|service|living_street|pedestrian|track|path|footway/  # wrong highway tag on a node
-way  : W : /highway|railway/ == crossing                                       # wrong crossing tag on a way
-way  : I : highway == unclassified && name != *                                # Unnamed unclassified highway
-way  : I : highway == /motorway|trunk|primary|secondary|tertiary/ && ref != *  # highway without a reference
-*    : W : highway == road                                                     # temporary highway type
 *    : W : / *name */i == * && name != *                                       # misspelled key name
 
@@ -52,21 +43,6 @@
 #way  : W : highway == /motorway|trunk|primary|secondary|tertiary|residential|pedestrian/ && /name|ref|(name:.*)|(.*_name)|(.*_ref)/ != * # Unnamed 
 
-way  : W : highway == cycleway && bicycle == BOOLEAN_FALSE     # cycleway with tag bicycle
-way  : W : highway == footway && foot == BOOLEAN_FALSE         # footway with tag foot
-#way  : I : highway == cycleway && bicycle == *                 # cycleway with tag bicycle
-#way  : I : highway == footway && foot == *                     # footway with tag foot
-way  : W : highway == cycleway && cycleway == lane             # separate cycleway as lane on a cycleway
-way  : W : highway == * && barrier == *                        # barrier used on a way
-
-#way  : I : waterway == * && layer != *                         # waterway without layer tag
-way  : I : highway == footway && maxspeed == *                 # maxspeed used for footway
-way  : I : highway == steps && maxspeed == *                   # maxspeed used for footway
-
 # see #5844, #6760
 #way  : W : oneway != BOOLEAN_FALSE && /.*:(backward|forward)/ == *    # oneway combined with *:backward/forward
-
-*    : W : layer == /\+.*/                                     # layer tag with + sign
-
-*    : I : name == /.*Strasse.*/i                              # street name contains ss
 
 relation : E : type != *                                       # relation without type
@@ -217,4 +193,5 @@
 
 # measurement values and units warnings (ticket #8687)
+*   : W : layer == /\+.*/                                     # layer tag with + sign
 way : W : layer == * && layer != /^0$|^-?[1-5]$/                                                                         # layer should be between -5 and 5
 *   : W : level == * && level != /^((([0-9]|-[1-9])|[1-9][0-9]*)(\.5)?)(;(([0-9]|-[1-9])|[1-9][0-9]*)(\.5)?)*$|^-0\.5$/  # level should be numbers with optional .5 increments
