Index: josm/actions/search/SearchAction.java
===================================================================
--- josm/actions/search/SearchAction.java	(revision 12388)
+++ josm/actions/search/SearchAction.java	(working copy)
@@ -454,6 +454,8 @@
                 .addKeyword("type:node", "type:node ", tr("all nodes"))
                 .addKeyword("type:way", "type:way ", tr("all ways"))
                 .addKeyword("type:relation", "type:relation ", tr("all relations"))
+                .addKeyword("preset:water", "preset:water", tr("all object that match the water preset"))
+                .addKeyword("preset:\"fast food\"", "preset:\"fast food\"", tr("all objects that match the fast food preset"))
                 .addKeyword("closed", "closed ", tr("all closed ways"))
                 .addKeyword("untagged", "untagged ", tr("object without useful tags")),
                 GBC.eol());
@@ -888,4 +890,4 @@
     public List<ActionParameter<?>> getActionParameters() {
         return Collections.<ActionParameter<?>>singletonList(new SearchSettingsActionParameter(SEARCH_EXPRESSION));
     }
-}
+}
\ No newline at end of file
Index: josm/actions/search/SearchCompiler.java
===================================================================
--- josm/actions/search/SearchCompiler.java	(revision 12388)
+++ josm/actions/search/SearchCompiler.java	(working copy)
@@ -38,6 +38,8 @@
 import org.openstreetmap.josm.gui.mappaint.mapcss.Selector;
 import org.openstreetmap.josm.gui.mappaint.mapcss.parsergen.MapCSSParser;
 import org.openstreetmap.josm.gui.mappaint.mapcss.parsergen.ParseException;
+import org.openstreetmap.josm.gui.tagging.presets.TaggingPreset;
+import org.openstreetmap.josm.gui.tagging.presets.TaggingPresets;
 import org.openstreetmap.josm.tools.AlphanumComparator;
 import org.openstreetmap.josm.tools.Geometry;
 import org.openstreetmap.josm.tools.UncheckedParseException;
@@ -115,7 +117,7 @@
         private final Collection<String> keywords = Arrays.asList("id", "version", "type", "user", "role",
                 "changeset", "nodes", "ways", "tags", "areasize", "waylength", "modified", "deleted", "selected",
                 "incomplete", "untagged", "closed", "new", "indownloadedarea",
-                "allindownloadedarea", "inview", "allinview", "timestamp", "nth", "nth%", "hasRole");
+                "allindownloadedarea", "inview", "allinview", "timestamp", "nth", "nth%", "hasRole", "preset");
 
         @Override
         public Match get(String keyword, PushbackTokenizer tokenizer) throws ParseError {
@@ -151,6 +153,8 @@
                         return new Version(tokenizer);
                     case "type":
                         return new ExactType(tokenizer.readTextOrNumber());
+                    case "preset":
+                        return new Preset(tokenizer.readTextOrNumber());
                     case "user":
                         return new UserMatch(tokenizer.readTextOrNumber());
                     case "role":
@@ -1554,6 +1558,44 @@
         }
     }
 
+    /**
+     * Matches presets.
+     */
+    private static class Preset extends Match {
+        private List<TaggingPreset> ps;
+
+        Preset(String presetName) throws ParseError {
+
+            if (presetName == null)
+                throw new ParseError("Preset name cannot be null");
+
+            Collection<TaggingPreset> ts = TaggingPresets.getTaggingPresets();
+            ps = new ArrayList<>();
+
+            for (TaggingPreset t : ts) {
+                String name = t.getSimpleName();
+
+                if (name != null && name.equalsIgnoreCase(presetName)) ps.add(t);
+            }
+
+            if (ps.isEmpty())
+                throw new ParseError(tr("Unknown preset name: ") + presetName);
+        }
+
+        /**
+         * Since presets can have common names, the primitive is considered to
+         * belong to a certain preset if it matches at least one of them.
+         */
+        @Override
+        public boolean match(OsmPrimitive osm) {
+            for (TaggingPreset p : ps) {
+                if (p.test(osm)) return true;
+            }
+
+            return false;
+        }
+    }
+
     public static class ParseError extends Exception {
         public ParseError(String msg) {
             super(msg);
@@ -1803,4 +1845,4 @@
             return forKey + '"' + escapeStringForSearch(value) + '"';
         }
     }
-}
+}
\ No newline at end of file
Index: josm/gui/tagging/presets/TaggingPreset.java
===================================================================
--- josm/gui/tagging/presets/TaggingPreset.java	(revision 12388)
+++ josm/gui/tagging/presets/TaggingPreset.java	(working copy)
@@ -173,6 +173,14 @@
     }
 
     /**
+     * Returns the non translated name without any prefixes.
+     * @return returns the non translated name without any prefixes.
+     */
+    public String getSimpleName() {
+        return this.name;
+    }
+
+    /**
      * Returns the preset icon (16px).
      * @return The preset icon, or {@code null} if none defined
      * @since 6403
@@ -634,4 +642,4 @@
         ToolbarPreferences.ActionParser actionParser = new ToolbarPreferences.ActionParser(null);
         return actionParser.saveAction(new ToolbarPreferences.ActionDefinition(this));
     }
-}
+}
\ No newline at end of file
