Index: trunk/src/org/openstreetmap/josm/actions/search/SearchCompiler.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/search/SearchCompiler.java	(revision 8898)
+++ trunk/src/org/openstreetmap/josm/actions/search/SearchCompiler.java	(revision 8899)
@@ -106,5 +106,5 @@
 
     public class CoreSimpleMatchFactory implements SimpleMatchFactory {
-        private Collection<String> keywords = Arrays.asList("id", "version",
+        private Collection<String> keywords = Arrays.asList("id", "version", "type", "user", "role",
                 "changeset", "nodes", "ways", "tags", "areasize", "waylength", "modified", "selected",
                 "incomplete", "untagged", "closed", "new", "indownloadedarea",
@@ -141,4 +141,10 @@
                     case "version":
                         return new Version(tokenizer);
+                    case "type":
+                        return new ExactType(tokenizer.readTextOrNumber());
+                    case "user":
+                        return new UserMatch(tokenizer.readTextOrNumber());
+                    case "role":
+                        return new RoleMatch(tokenizer.readTextOrNumber());
                     case "changeset":
                         return new ChangesetId(tokenizer);
@@ -1583,5 +1589,6 @@
 
                 // key:value form where value is a string (may be OSM key search)
-                return parseKV(key, tokenizer.readTextOrNumber());
+                final String value = tokenizer.readTextOrNumber();
+                return new KeyValue(key, value != null ? value : "", regexSearch, caseSensitive);
             } else if (tokenizer.readIfEqual(Token.QUESTION_MARK))
                 return new BooleanMatch(key, false);
@@ -1610,20 +1617,4 @@
     }
 
-    private Match parseKV(String key, String value) throws ParseError {
-        if (value == null) {
-            value = "";
-        }
-        switch(key) {
-        case "type":
-            return new ExactType(value);
-        case "user":
-            return new UserMatch(value);
-        case "role":
-            return new RoleMatch(value);
-        default:
-            return new KeyValue(key, value, regexSearch, caseSensitive);
-        }
-    }
-
     private static int regexFlags(boolean caseSensitive) {
         int searchFlags = 0;
