Index: /trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPresetItems.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPresetItems.java	(revision 8785)
+++ /trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPresetItems.java	(revision 8786)
@@ -853,4 +853,14 @@
 
         @Override
+        Boolean matches(Map<String, String> tags) {
+            for (Check check : checks) {
+                if (Boolean.TRUE.equals(check.matches(tags))) {
+                    return true;
+                }
+            }
+            return null;
+        }
+
+        @Override
         public String toString() {
             return "CheckGroup [columns=" + columns + "]";
Index: /trunk/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionManager.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionManager.java	(revision 8785)
+++ /trunk/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionManager.java	(revision 8786)
@@ -210,21 +210,29 @@
         for (final TaggingPreset p : presets) {
             for (TaggingPresetItem item : p.data) {
-                if (item instanceof TaggingPresetItems.KeyedItem) {
-                    TaggingPresetItems.KeyedItem ki = (TaggingPresetItems.KeyedItem) item;
-                    if (ki.key != null && ki.getValues() != null) {
-                        try {
-                            PRESET_TAG_CACHE.putAll(ki.key, ki.getValues());
-                        } catch (NullPointerException e) {
-                            Main.error(p+": Unable to cache "+ki);
-                        }
-                    }
-                } else if (item instanceof TaggingPresetItems.Roles) {
-                    TaggingPresetItems.Roles r = (TaggingPresetItems.Roles) item;
-                    for (TaggingPresetItems.Role i : r.roles) {
-                        if (i.key != null) {
-                            PRESET_ROLE_CACHE.add(i.key);
-                        }
-                    }
+                cachePresetItem(p, item);
+            }
+        }
+    }
+
+    protected static void cachePresetItem(TaggingPreset p, TaggingPresetItem item) {
+        if (item instanceof TaggingPresetItems.KeyedItem) {
+            TaggingPresetItems.KeyedItem ki = (TaggingPresetItems.KeyedItem) item;
+            if (ki.key != null && ki.getValues() != null) {
+                try {
+                    PRESET_TAG_CACHE.putAll(ki.key, ki.getValues());
+                } catch (NullPointerException e) {
+                    Main.error(p + ": Unable to cache " + ki);
                 }
+            }
+        } else if (item instanceof TaggingPresetItems.Roles) {
+            TaggingPresetItems.Roles r = (TaggingPresetItems.Roles) item;
+            for (TaggingPresetItems.Role i : r.roles) {
+                if (i.key != null) {
+                    PRESET_ROLE_CACHE.add(i.key);
+                }
+            }
+        } else if (item instanceof TaggingPresetItems.CheckGroup) {
+            for (TaggingPresetItems.KeyedItem check : ((TaggingPresetItems.CheckGroup) item).checks) {
+                cachePresetItem(p, check);
             }
         }
