diff --git a/src/main/java/org/caosdb/server/query/CQLParser.g4 b/src/main/java/org/caosdb/server/query/CQLParser.g4
index d5e375102d79d395b1f06c62c5aef9537092b0fc..9bad973033500e55197a38d6150406acea606cc0 100644
--- a/src/main/java/org/caosdb/server/query/CQLParser.g4
+++ b/src/main/java/org/caosdb/server/query/CQLParser.g4
@@ -153,7 +153,6 @@ entity_filter returns [EntityFilterInterface filter]
  */
 which_exp:
     WHICH (HAS_A (PROPERTY)?)?
-    | HAS_A (PROPERTY)?
     | WITH_A (PROPERTY)?
     | WHERE
     | DOT WHITE_SPACE?
@@ -446,7 +445,7 @@ conjunction returns [Conjunction c]
         WHITE_SPACE?
         AND
         (
-            ( which_exp | A (PROPERTY)?? )
+            ( which_exp | HAS_A | A (PROPERTY)? )
         )?
         (
             f2 = filter_expression {$c.add($f2.efi);}
@@ -486,7 +485,7 @@ disjunction returns [Disjunction d]
     (
         OR
         (
-            ( which_exp | A (PROPERTY)? )
+            ( which_exp | HAS_A | A (PROPERTY)? )
         )?
         (
             f2 = filter_expression {$d.add($f2.efi);}
diff --git a/src/test/java/org/caosdb/server/query/TestCQL.java b/src/test/java/org/caosdb/server/query/TestCQL.java
index 6c289adaef49f356aeaa7b5c7c744d4c4b1a6ce3..c46b9dae2b0053bb71aa1e7d91b060c07b1667f1 100644
--- a/src/test/java/org/caosdb/server/query/TestCQL.java
+++ b/src/test/java/org/caosdb/server/query/TestCQL.java
@@ -65,7 +65,7 @@ public class TestCQL {
   String query2 = "FIND ename.pname1=val1 OR pname2=val2";
   String query3 = "FIND ename.pname1=val1 AND pname2=val2 AND pname3=val3";
   String query4 =
-      "FIND ename WHICH HAS A PROPERTY pname1=val1 AND pname1 HAS A PROPERTY pname2=val2";
+      "FIND ename WHICH HAS A PROPERTY pname1=val1 AND pname1 WHICH HAS A PROPERTY pname2=val2";
   String query5 = "FIND ename WHICH HAS A PROPERTY pname1=val1 AND (pname2=val2 OR pname3=val3)";
   String query6 = "FIND ename1 WHICH HAS A pname REFERENCE TO ename2";
   String query6a = "FIND ename1 WHICH REFERENCES ename2 AS A pname";
@@ -748,7 +748,7 @@ public class TestCQL {
     assertEquals("ename", sfq.getChild(1).getText());
     // entity_filter
     assertEquals(
-        "WHICH HAS A PROPERTY pname1=val1 AND pname1 HAS A PROPERTY pname2=val2",
+        "WHICH HAS A PROPERTY pname1=val1 AND pname1 WHICH HAS A PROPERTY pname2=val2",
         sfq.getChild(3).getText());
     final ParseTree entity_filter1 = sfq.getChild(3);
 
@@ -758,14 +758,15 @@ public class TestCQL {
 
     // conjunction
     assertEquals(
-        "pname1=val1 AND pname1 HAS A PROPERTY pname2=val2", entity_filter1.getChild(1).getText());
+        "pname1=val1 AND pname1 WHICH HAS A PROPERTY pname2=val2",
+        entity_filter1.getChild(1).getText());
     final ParseTree conjunction = entity_filter1.getChild(1);
 
     // 3 children: pov, AND, pov
     assertEquals(3, conjunction.getChildCount());
     assertEquals("pname1=val1 ", conjunction.getChild(0).getText());
     assertEquals("AND ", conjunction.getChild(1).getText());
-    assertEquals("pname1 HAS A PROPERTY pname2=val2", conjunction.getChild(2).getText());
+    assertEquals("pname1 WHICH HAS A PROPERTY pname2=val2", conjunction.getChild(2).getText());
 
     // subproperty
     final ParseTree subproperty = conjunction.getChild(2);
@@ -773,14 +774,14 @@ public class TestCQL {
     // 3 children: property, entity_filter
     assertEquals(2, subproperty.getChildCount());
     assertEquals("pname1 ", subproperty.getChild(0).getText());
-    assertEquals("HAS A PROPERTY pname2=val2", subproperty.getChild(1).getText());
+    assertEquals("WHICH HAS A PROPERTY pname2=val2", subproperty.getChild(1).getText());
 
     // entity_filter
     final ParseTree entity_filter2 = subproperty.getChild(1).getChild(0);
 
     // 3 children: WHICH_EXP pov
     assertEquals(2, entity_filter2.getChildCount());
-    assertEquals("HAS A PROPERTY ", entity_filter2.getChild(0).getText());
+    assertEquals("WHICH HAS A PROPERTY ", entity_filter2.getChild(0).getText());
     assertEquals("pname2=val2", entity_filter2.getChild(1).getText());
 
     final ParseTree pov2 = entity_filter2.getChild(1).getChild(0);