Index: resources/data/validator/combinations.mapcss
===================================================================
--- resources/data/validator/combinations.mapcss	(revision 17790)
+++ resources/data/validator/combinations.mapcss	(working copy)
@@ -6,6 +6,12 @@
   set unpaved_surface;
 }
 
+node[eval(number_of_tags()) = 1],
+way[eval(number_of_tags()) = 1],
+relation[type][eval(number_of_tags()) = 2] {
+  set one_tag;
+}
+
 /* {0.key} without {1.key} (warning level) */
 way[junction                   ][!highway][junction!=yes][!area:highway],
 way[living_street              ][!highway],
@@ -337,21 +343,24 @@
 }
 
 /* #16214 */
-relation[type=multipolygon] >[role="inner"] way[area][eval(number_of_tags()) = 1] {
+relation[type=multipolygon] >[role="inner"] way[area].one_tag {
   throwWarning: tr("{0} on an inner multipolygon ring without further tags", "{0.tag}");
   fixRemove: "area";
   set area_yes_autofix;
   group: tr("suspicious tag combination");
 }
 
-/* only {0.key}, #11104, #12422, #14950, #19572 */
-*[lanes][eval(number_of_tags()) = 1],
-*[surface][eval(number_of_tags()) = 1],
-*[access][eval(number_of_tags()) = 1],
-*[area][eval(number_of_tags()) = 1]!.area_yes_autofix,
-*[name][eval(number_of_tags()) = 1],
-*[ref][eval(number_of_tags()) = 1],
-*[lit][eval(number_of_tags()) = 1] {
+/* only {0.key}, #11104, #12422, #14950, #19572, #20902 */
+*[access].one_tag,
+*[area].one_tag!.area_yes_autofix,
+*[lanes].one_tag,
+*[layer].one_tag,
+way[level].one_tag,
+relation[level].one_tag,
+*[lit].one_tag,
+*[name].one_tag,
+*[ref].one_tag,
+*[surface].one_tag {
   throwWarning: tr("incomplete object: only {0}", "{0.key}");
   set only_one_tag;
   group: tr("missing tag");
@@ -363,7 +372,7 @@
   group: tr("missing tag");
 }
 /* only {0.tag}, #15269 */
-*[tourism=attraction][eval(number_of_tags()) = 1] {
+*[tourism=attraction].one_tag {
   throwWarning: tr("incomplete object: only {0}", "{0.tag}");
   group: tr("missing tag");
 }
