Index: trunk/src/org/openstreetmap/josm/actions/search/PushbackTokenizer.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/search/PushbackTokenizer.java	(revision 3817)
+++ trunk/src/org/openstreetmap/josm/actions/search/PushbackTokenizer.java	(revision 3818)
@@ -4,4 +4,5 @@
 import static org.openstreetmap.josm.tools.I18n.marktr;
 import static org.openstreetmap.josm.tools.I18n.tr;
+import static org.openstreetmap.josm.tools.Utils.equal;
 
 import java.io.IOException;
@@ -132,4 +133,7 @@
             getChar();
             return Token.OR;
+        case '&':
+            getChar();
+            return nextToken();
         case '?':
             getChar();
@@ -151,4 +155,6 @@
             if ("or".equalsIgnoreCase(currentText))
                 return Token.OR;
+            if ("and".equalsIgnoreCase(currentText))
+                return nextToken();
             try {
                 currentNumber = Long.parseLong(currentText);
@@ -172,5 +178,5 @@
     public boolean readIfEqual(Token token) {
         Token nextTok = nextToken();
-        if (nextTok == null ? token == null : nextTok == token)
+        if (equal(nextTok, token))
             return true;
         currentToken = nextTok;
Index: trunk/src/org/openstreetmap/josm/actions/search/SearchCompiler.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/search/SearchCompiler.java	(revision 3817)
+++ trunk/src/org/openstreetmap/josm/actions/search/SearchCompiler.java	(revision 3818)
@@ -573,4 +573,11 @@
         }
         @Override public String toString() {return "untagged";}
+    }
+
+    private static class Closed extends Match {
+        @Override public boolean match(OsmPrimitive osm) {
+            return osm instanceof Way && ((Way) osm).isClosed();
+        }
+        @Override public String toString() {return "closed";}
     }
 
@@ -710,4 +717,6 @@
             else if ("selected".equals(key))
                 return new Selected();
+            else if ("closed".equals(key))
+                return new Closed();
             else if ("child".equals(key))
                 return new Child(parseFactor());
