diff --git a/src/main/antlr/cosmas/c2ps.g b/src/main/antlr/cosmas/c2ps.g
index ed62c4b..1499f4a 100644
--- a/src/main/antlr/cosmas/c2ps.g
+++ b/src/main/antlr/cosmas/c2ps.g
@@ -143,7 +143,7 @@
 	;
 	
 OP_MORPH:	'MORPH(' 
-				MORPHEXPR (' '* '&' ' '* MORPHEXPR)* 
+				MORPHEXPR (' '* '&' ' '* MORPHEXPR)* ' '* 
 			')' ;
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
diff --git a/src/main/java/de/ids_mannheim/korap/query/serialize/AbstractSyntaxTree.java b/src/main/java/de/ids_mannheim/korap/query/serialize/AbstractQueryProcessor.java
similarity index 99%
rename from src/main/java/de/ids_mannheim/korap/query/serialize/AbstractSyntaxTree.java
rename to src/main/java/de/ids_mannheim/korap/query/serialize/AbstractQueryProcessor.java
index 8232617..2b899ab 100644
--- a/src/main/java/de/ids_mannheim/korap/query/serialize/AbstractSyntaxTree.java
+++ b/src/main/java/de/ids_mannheim/korap/query/serialize/AbstractQueryProcessor.java
@@ -13,7 +13,7 @@
 import de.ids_mannheim.korap.query.serialize.util.StatusCodes;
 import de.ids_mannheim.korap.query.serialize.util.QueryException;
 
-public abstract class AbstractSyntaxTree {
+public abstract class AbstractQueryProcessor {
 	
 	public abstract void process(String query) throws QueryException;
 	
@@ -55,7 +55,7 @@
 	private ArrayList<List<Object>> messages = new ArrayList<List<Object>>();
 	LinkedHashMap<String, Object> collection = new LinkedHashMap<String,Object>();
 	
-	AbstractSyntaxTree() {
+	AbstractQueryProcessor() {
 		requestMap.put("@context", "http://ids-mannheim.de/ns/KorAP/json-ld/v0.2/context.jsonld");
 		requestMap.put("errors", errors);
 		requestMap.put("warnings", warnings);
diff --git a/src/main/java/de/ids_mannheim/korap/query/serialize/AqlTree.java b/src/main/java/de/ids_mannheim/korap/query/serialize/AnnisQueryProcessor.java
similarity index 98%
rename from src/main/java/de/ids_mannheim/korap/query/serialize/AqlTree.java
rename to src/main/java/de/ids_mannheim/korap/query/serialize/AnnisQueryProcessor.java
index 58e5a16..8f89546 100644
--- a/src/main/java/de/ids_mannheim/korap/query/serialize/AqlTree.java
+++ b/src/main/java/de/ids_mannheim/korap/query/serialize/AnnisQueryProcessor.java
@@ -30,8 +30,8 @@
  * @author joachim
  *
  */
-public class AqlTree extends Antlr4AbstractSyntaxTree {
-	private static Logger log = LoggerFactory.getLogger(AqlTree.class);
+public class AnnisQueryProcessor extends Antlr4AbstractQueryProcessor {
+	private static Logger log = LoggerFactory.getLogger(AnnisQueryProcessor.class);
 	/**
 	 * Flag that indicates whether token fields or meta fields are currently being processed
 	 */
@@ -86,7 +86,7 @@
 	 * @param tree The syntax tree as returned by ANTLR
 	 * @param parser The ANTLR parser instance that generated the parse tree
 	 */
-	public AqlTree(String query) {
+	public AnnisQueryProcessor(String query) {
 		try {
 			process(query);
 		} catch (QueryException e) {
diff --git a/src/main/java/de/ids_mannheim/korap/query/serialize/Antlr3AbstractSyntaxTree.java b/src/main/java/de/ids_mannheim/korap/query/serialize/Antlr3AbstractQueryProcessor.java
similarity index 95%
rename from src/main/java/de/ids_mannheim/korap/query/serialize/Antlr3AbstractSyntaxTree.java
rename to src/main/java/de/ids_mannheim/korap/query/serialize/Antlr3AbstractQueryProcessor.java
index f07fd5c..33adaca 100644
--- a/src/main/java/de/ids_mannheim/korap/query/serialize/Antlr3AbstractSyntaxTree.java
+++ b/src/main/java/de/ids_mannheim/korap/query/serialize/Antlr3AbstractQueryProcessor.java
@@ -8,7 +8,7 @@
 import org.antlr.runtime.Parser;
 import org.antlr.runtime.tree.Tree;
 
-public abstract class Antlr3AbstractSyntaxTree extends AbstractSyntaxTree {
+public abstract class Antlr3AbstractQueryProcessor extends AbstractQueryProcessor {
 	
 	public Parser parser;
 
diff --git a/src/main/java/de/ids_mannheim/korap/query/serialize/Antlr4AbstractSyntaxTree.java b/src/main/java/de/ids_mannheim/korap/query/serialize/Antlr4AbstractQueryProcessor.java
similarity index 97%
rename from src/main/java/de/ids_mannheim/korap/query/serialize/Antlr4AbstractSyntaxTree.java
rename to src/main/java/de/ids_mannheim/korap/query/serialize/Antlr4AbstractQueryProcessor.java
index 8b726c0..da09f3c 100644
--- a/src/main/java/de/ids_mannheim/korap/query/serialize/Antlr4AbstractSyntaxTree.java
+++ b/src/main/java/de/ids_mannheim/korap/query/serialize/Antlr4AbstractQueryProcessor.java
@@ -9,7 +9,7 @@
 import org.antlr.v4.runtime.Parser;
 import org.antlr.v4.runtime.tree.ParseTree;
 
-public abstract class Antlr4AbstractSyntaxTree extends AbstractSyntaxTree {
+public abstract class Antlr4AbstractQueryProcessor extends AbstractQueryProcessor {
 
 	/**
 	 * Parser object deriving the ANTLR parse tree.
diff --git a/src/main/java/de/ids_mannheim/korap/query/serialize/CollectionQueryBuilder2.java b/src/main/java/de/ids_mannheim/korap/query/serialize/CollectionQueryBuilder2.java
index 333fd30..324a939 100644
--- a/src/main/java/de/ids_mannheim/korap/query/serialize/CollectionQueryBuilder2.java
+++ b/src/main/java/de/ids_mannheim/korap/query/serialize/CollectionQueryBuilder2.java
@@ -48,7 +48,7 @@
     }
 
     public CollectionQueryBuilder2 setQuery(String query) throws QueryException {
-        CollectionQueryTree tree = new CollectionQueryTree();
+        CollectionQueryProcessor tree = new CollectionQueryProcessor();
         tree.process(query);
         this.groups = tree.getRequestMap();
         return this;
diff --git a/src/main/java/de/ids_mannheim/korap/query/serialize/CollectionQueryBuilder3.java b/src/main/java/de/ids_mannheim/korap/query/serialize/CollectionQueryBuilder3.java
index f3a1bbd..d87da4a 100644
--- a/src/main/java/de/ids_mannheim/korap/query/serialize/CollectionQueryBuilder3.java
+++ b/src/main/java/de/ids_mannheim/korap/query/serialize/CollectionQueryBuilder3.java
@@ -68,7 +68,7 @@
         if (!this.rq.isEmpty())
             list.addAll(this.rq);
         System.out.println("RAW QUERY " + this.builder.toString());
-        CollectionQueryTree tree = new CollectionQueryTree(this.verbose);
+        CollectionQueryProcessor tree = new CollectionQueryProcessor(this.verbose);
         tree.process(this.builder.toString());
         list.add(tree.getRequestMap());
         return list;
diff --git a/src/main/java/de/ids_mannheim/korap/query/serialize/CollectionQueryTree.java b/src/main/java/de/ids_mannheim/korap/query/serialize/CollectionQueryProcessor.java
similarity index 97%
rename from src/main/java/de/ids_mannheim/korap/query/serialize/CollectionQueryTree.java
rename to src/main/java/de/ids_mannheim/korap/query/serialize/CollectionQueryProcessor.java
index 82a46aa..932e34d 100644
--- a/src/main/java/de/ids_mannheim/korap/query/serialize/CollectionQueryTree.java
+++ b/src/main/java/de/ids_mannheim/korap/query/serialize/CollectionQueryProcessor.java
@@ -20,9 +20,9 @@
  * @author hanl, bingel
  * @date 06/12/2013
  */
-public class CollectionQueryTree extends Antlr4AbstractSyntaxTree {
+public class CollectionQueryProcessor extends Antlr4AbstractQueryProcessor {
 
-	private static Logger log = LoggerFactory.getLogger(CollectionQueryTree.class);
+	private static Logger log = LoggerFactory.getLogger(CollectionQueryProcessor.class);
     private Parser parser;
     private static boolean verbose;
     private List<ParseTree> visited = new ArrayList<ParseTree>();
@@ -41,14 +41,14 @@
     LinkedList<Integer> objectsToPop = new LinkedList<Integer>();
     Integer stackedObjects = 0;
     
-    public CollectionQueryTree() {
+    public CollectionQueryProcessor() {
 	}
     
-    public CollectionQueryTree(boolean verbose) {
-    	CollectionQueryTree.verbose = verbose;
+    public CollectionQueryProcessor(boolean verbose) {
+    	CollectionQueryProcessor.verbose = verbose;
 	}
     
-    public CollectionQueryTree(String query) throws QueryException {
+    public CollectionQueryProcessor(String query) throws QueryException {
 		process(query);
 	}
 
diff --git a/src/main/java/de/ids_mannheim/korap/query/serialize/CosmasTree.java b/src/main/java/de/ids_mannheim/korap/query/serialize/Cosmas2QueryProcessor.java
similarity index 99%
rename from src/main/java/de/ids_mannheim/korap/query/serialize/CosmasTree.java
rename to src/main/java/de/ids_mannheim/korap/query/serialize/Cosmas2QueryProcessor.java
index c2d846a..7023a94 100644
--- a/src/main/java/de/ids_mannheim/korap/query/serialize/CosmasTree.java
+++ b/src/main/java/de/ids_mannheim/korap/query/serialize/Cosmas2QueryProcessor.java
@@ -27,9 +27,9 @@
  * @author Joachim Bingel (bingel@ids-mannheim.de)
  * @version 0.2
  */
-public class CosmasTree extends Antlr3AbstractSyntaxTree {
+public class Cosmas2QueryProcessor extends Antlr3AbstractQueryProcessor {
 
-	private static Logger log = LoggerFactory.getLogger(CosmasTree.class);
+	private static Logger log = LoggerFactory.getLogger(Cosmas2QueryProcessor.class);
 
 	LinkedList<LinkedHashMap[]> toWrapStack = new LinkedList<LinkedHashMap[]>();
 	/**
@@ -96,7 +96,7 @@
 	 * @param parser The ANTLR parser instance that generated the parse tree
 	 * @throws QueryException
 	 */
-	public CosmasTree(String query) throws QueryException {
+	public Cosmas2QueryProcessor(String query) throws QueryException {
 		this.query = query;
 		process(query);
 		log.info(">>> " + requestMap.get("query") + " <<<");
diff --git a/src/main/java/de/ids_mannheim/korap/query/serialize/CQLTree.java b/src/main/java/de/ids_mannheim/korap/query/serialize/CqlQueryProcessor.java
similarity index 96%
rename from src/main/java/de/ids_mannheim/korap/query/serialize/CQLTree.java
rename to src/main/java/de/ids_mannheim/korap/query/serialize/CqlQueryProcessor.java
index 15e4f0e..5a06c1a 100644
--- a/src/main/java/de/ids_mannheim/korap/query/serialize/CQLTree.java
+++ b/src/main/java/de/ids_mannheim/korap/query/serialize/CqlQueryProcessor.java
@@ -13,7 +13,7 @@
  * @author margaretha
  * @date 	09.05.14
  */
-public class CQLTree extends AbstractSyntaxTree {
+public class CqlQueryProcessor extends AbstractQueryProcessor {
 
     private static final String VERSION_1_1 = "1.1";
     private static final String VERSION_1_2 = "1.2";
@@ -31,15 +31,15 @@
     private String version;
     private boolean isCaseSensitive; // default true
     
-    public CQLTree(String query) throws QueryException {
+    public CqlQueryProcessor(String query) throws QueryException {
         this(query, VERSION_1_2, true);
     }
 
-    public CQLTree(String query, String version) throws QueryException {
+    public CqlQueryProcessor(String query, String version) throws QueryException {
         this(query, version, true);                
     }
 
-    public CQLTree(String query, String version, boolean isCaseSensitive) throws QueryException {
+    public CqlQueryProcessor(String query, String version, boolean isCaseSensitive) throws QueryException {
         this.version = version;
         this.isCaseSensitive = isCaseSensitive;
         this.requestMap = new LinkedHashMap<>();
diff --git a/src/main/java/de/ids_mannheim/korap/query/serialize/PoliqarpPlusTree.java b/src/main/java/de/ids_mannheim/korap/query/serialize/PoliqarpPlusQueryProcessor.java
similarity index 98%
rename from src/main/java/de/ids_mannheim/korap/query/serialize/PoliqarpPlusTree.java
rename to src/main/java/de/ids_mannheim/korap/query/serialize/PoliqarpPlusQueryProcessor.java
index f3c51e3..d509ccb 100644
--- a/src/main/java/de/ids_mannheim/korap/query/serialize/PoliqarpPlusTree.java
+++ b/src/main/java/de/ids_mannheim/korap/query/serialize/PoliqarpPlusQueryProcessor.java
@@ -19,9 +19,9 @@
  *
  * @author Joachim Bingel (bingel@ids-mannheim.de)
  */
-public class PoliqarpPlusTree extends Antlr4AbstractSyntaxTree {
+public class PoliqarpPlusQueryProcessor extends Antlr4AbstractQueryProcessor {
 
-	private static Logger log = LoggerFactory.getLogger(PoliqarpPlusTree.class);
+	private static Logger log = LoggerFactory.getLogger(PoliqarpPlusQueryProcessor.class);
 	private int classCounter = 128;
 
 	/**
@@ -33,7 +33,7 @@
 	 * @param query The syntax tree as returned by ANTLR
 	 * @throws QueryException
 	 */
-	public PoliqarpPlusTree(String query) throws QueryException {
+	public PoliqarpPlusQueryProcessor(String query) throws QueryException {
 		process(query);
 		log.info(">>> " + requestMap.get("query") + " <<<");
 	}
diff --git a/src/main/java/de/ids_mannheim/korap/query/serialize/QuerySerializer.java b/src/main/java/de/ids_mannheim/korap/query/serialize/QuerySerializer.java
index fb8104f..e590957 100644
--- a/src/main/java/de/ids_mannheim/korap/query/serialize/QuerySerializer.java
+++ b/src/main/java/de/ids_mannheim/korap/query/serialize/QuerySerializer.java
@@ -25,21 +25,21 @@
 		POLIQARPPLUS, ANNIS, COSMAS2, CQL, CQP
 	}
 	
-	static HashMap<String, Class<? extends AbstractSyntaxTree>> qlProcessorAssignment;
+	static HashMap<String, Class<? extends AbstractQueryProcessor>> qlProcessorAssignment;
 
 	static {
-		qlProcessorAssignment  = new HashMap<String, Class<? extends AbstractSyntaxTree>>();
-		qlProcessorAssignment.put("poliqarpplus", PoliqarpPlusTree.class);
-		qlProcessorAssignment.put("cosmas2", CosmasTree.class);
-		qlProcessorAssignment.put("annis", AqlTree.class);
-		qlProcessorAssignment.put("cql", CQLTree.class);
+		qlProcessorAssignment  = new HashMap<String, Class<? extends AbstractQueryProcessor>>();
+		qlProcessorAssignment.put("poliqarpplus", PoliqarpPlusQueryProcessor.class);
+		qlProcessorAssignment.put("cosmas2", Cosmas2QueryProcessor.class);
+		qlProcessorAssignment.put("annis", AnnisQueryProcessor.class);
+		qlProcessorAssignment.put("cql", CqlQueryProcessor.class);
 	}
 	
 	
     private Logger qllogger = KorAPLogger.initiate("ql");
     public static String queryLanguageVersion;
 
-    private AbstractSyntaxTree ast;
+    private AbstractQueryProcessor ast;
     private Object collection;
     private Map meta;
     private List errors;
@@ -101,15 +101,15 @@
     public void run(String query, String queryLanguage, String outFile)
             throws IOException, QueryException {
         if (queryLanguage.equals("poliqarp")) {
-            ast = new PoliqarpPlusTree(query);
+            ast = new PoliqarpPlusQueryProcessor(query);
         } else if (queryLanguage.toLowerCase().equals("cosmas2")) {
-            ast = new CosmasTree(query);
+            ast = new Cosmas2QueryProcessor(query);
         } else if (queryLanguage.toLowerCase().equals("poliqarpplus")) {
-            ast = new PoliqarpPlusTree(query);
+            ast = new PoliqarpPlusQueryProcessor(query);
         } else if (queryLanguage.toLowerCase().equals("cql")) {
-            ast = new CQLTree(query);
+            ast = new CqlQueryProcessor(query);
         } else if (queryLanguage.toLowerCase().equals("annis")) {
-            ast = new AqlTree(query);
+            ast = new AnnisQueryProcessor(query);
         } else {
             throw new QueryException(queryLanguage + " is not a supported query language!");
         }
@@ -124,18 +124,18 @@
 
         try {
             if (ql.equalsIgnoreCase("poliqarp")) {
-                ast = new PoliqarpPlusTree(query);
+                ast = new PoliqarpPlusQueryProcessor(query);
             } else if (ql.equalsIgnoreCase("cosmas2")) {
-                ast = new CosmasTree(query);
+                ast = new Cosmas2QueryProcessor(query);
             } else if (ql.equalsIgnoreCase("poliqarpplus")) {
-                ast = new PoliqarpPlusTree(query);
+                ast = new PoliqarpPlusQueryProcessor(query);
             } else if (ql.equalsIgnoreCase("cql")) {
                 if (version == null)
-                    ast = new CQLTree(query);
+                    ast = new CqlQueryProcessor(query);
                 else
-                    ast = new CQLTree(query, version);
+                    ast = new CqlQueryProcessor(query, version);
             } else if (ql.equalsIgnoreCase("annis")) {
-                ast = new AqlTree(query);
+                ast = new AnnisQueryProcessor(query);
             } else {
                 throw new QueryException(ql + " is not a supported query language!");
             }
@@ -229,7 +229,7 @@
     }
 
     public QuerySerializer setCollection(String collection) throws QueryException {
-        CollectionQueryTree tree = new CollectionQueryTree();
+        CollectionQueryProcessor tree = new CollectionQueryProcessor();
         Map collectionRequest = tree.getRequestMap();
         tree.process(collection);
         this.collection = collectionRequest.get("collection");
diff --git a/src/main/java/de/ids_mannheim/korap/query/serialize/TreeTemplate.java b/src/main/java/de/ids_mannheim/korap/query/serialize/TreeTemplate.java
index d64e983..1c20f96 100644
--- a/src/main/java/de/ids_mannheim/korap/query/serialize/TreeTemplate.java
+++ b/src/main/java/de/ids_mannheim/korap/query/serialize/TreeTemplate.java
@@ -24,7 +24,7 @@
  * @author bingel
  *
  */
-public class TreeTemplate extends Antlr4AbstractSyntaxTree {
+public class TreeTemplate extends Antlr4AbstractQueryProcessor {
 	/**
 	 * Keeps track of open node categories
 	 */
diff --git a/src/test/java/AqlTreeTest.java b/src/test/java/AnnisQueryProcessorTest.java
similarity index 99%
rename from src/test/java/AqlTreeTest.java
rename to src/test/java/AnnisQueryProcessorTest.java
index 77d9ec5..aff5770 100644
--- a/src/test/java/AqlTreeTest.java
+++ b/src/test/java/AnnisQueryProcessorTest.java
@@ -17,7 +17,7 @@
  * @author Joachim Bingel (bingel@ids-mannheim.de)
  * @version 1.0
  */
-public class AqlTreeTest {
+public class AnnisQueryProcessorTest {
 	
 	String query;
 	ArrayList<JsonNode> operands;
diff --git a/src/test/java/CollectionQueryTreeTest.java b/src/test/java/CollectionQueryProcessorTest.java
similarity index 99%
rename from src/test/java/CollectionQueryTreeTest.java
rename to src/test/java/CollectionQueryProcessorTest.java
index a2be38b..1d3046d 100644
--- a/src/test/java/CollectionQueryTreeTest.java
+++ b/src/test/java/CollectionQueryProcessorTest.java
@@ -12,7 +12,7 @@
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
 
-public class CollectionQueryTreeTest {
+public class CollectionQueryProcessorTest {
 
 	String query = "foo";
 	String ql = "poliqarpplus";
diff --git a/src/test/java/CosmasTreeTest.java b/src/test/java/Cosmas2QueryProcessorTest.java
similarity index 99%
rename from src/test/java/CosmasTreeTest.java
rename to src/test/java/Cosmas2QueryProcessorTest.java
index 62a663a..2a545cf 100644
--- a/src/test/java/CosmasTreeTest.java
+++ b/src/test/java/Cosmas2QueryProcessorTest.java
@@ -17,7 +17,7 @@
  * @author Joachim Bingel (bingel@ids-mannheim.de)
  * @version 1.0
  */
-public class CosmasTreeTest {
+public class Cosmas2QueryProcessorTest {
 
 
 	String query;
diff --git a/src/test/java/CQLTest.java b/src/test/java/CqlQueryProcessorTest.java
similarity index 87%
rename from src/test/java/CQLTest.java
rename to src/test/java/CqlQueryProcessorTest.java
index abe8703..7fd62ae 100644
--- a/src/test/java/CQLTest.java
+++ b/src/test/java/CqlQueryProcessorTest.java
@@ -8,12 +8,12 @@
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
 
-import de.ids_mannheim.korap.query.serialize.CQLTree;
-import de.ids_mannheim.korap.query.serialize.CosmasTree;
+import de.ids_mannheim.korap.query.serialize.CqlQueryProcessor;
+import de.ids_mannheim.korap.query.serialize.Cosmas2QueryProcessor;
 import de.ids_mannheim.korap.query.serialize.util.QueryException;
 
 
-public class CQLTest {
+public class CqlQueryProcessorTest {
 	
 	String query;
 	String version ="1.2";
@@ -23,7 +23,7 @@
 	public void testExceptions() throws CQLParseException, IOException {
 		query = "(Kuh) prox (Germ) ";
 		try {
-			CQLTree cqlTree = new CQLTree(query, version);
+			CqlQueryProcessor cqlTree = new CqlQueryProcessor(query, version);
 		} catch (QueryException e) {
 			int errorCode = Integer.parseInt(e.getMessage().split(":")[0].replace("SRU diagnostic ", ""));
 			assertEquals(48,errorCode);
@@ -31,7 +31,7 @@
 		
 		query = "(Kuh) or/rel.combine=sum (Germ) ";		
 		try {
-			CQLTree cqlTree = new CQLTree(query, version);
+			CqlQueryProcessor cqlTree = new CqlQueryProcessor(query, version);
 		}catch (QueryException e) {			
 			int errorCode = Integer.parseInt(e.getMessage().split(":")[0].replace("SRU diagnostic ", ""));
 			assertEquals(20,errorCode);
@@ -39,7 +39,7 @@
 		
 		query = "dc.title any Germ ";
 		try {
-			CQLTree cqlTree = new CQLTree(query, version);
+			CqlQueryProcessor cqlTree = new CqlQueryProcessor(query, version);
 		} catch (QueryException e) {
 			int errorCode = Integer.parseInt(e.getMessage().split(":")[0].replace("SRU diagnostic ", ""));
 			assertEquals(16,errorCode);
@@ -47,7 +47,7 @@
 		
 		query = "cql.serverChoice any Germ ";
 		try {
-			CQLTree cqlTree = new CQLTree(query, version);
+			CqlQueryProcessor cqlTree = new CqlQueryProcessor(query, version);
 		} catch (QueryException e) {
 			int errorCode = Integer.parseInt(e.getMessage().split(":")[0].replace("SRU diagnostic ", ""));
 			assertEquals(19,errorCode);
@@ -55,7 +55,7 @@
 		
 		query = "";
 		try {
-			CQLTree cqlTree = new CQLTree(query, version);
+			CqlQueryProcessor cqlTree = new CqlQueryProcessor(query, version);
 		} catch (QueryException e) {
 			int errorCode = Integer.parseInt(e.getMessage().split(":")[0].replace("SRU diagnostic ", ""));
 			assertEquals(27,errorCode);
@@ -74,7 +74,7 @@
 						"{@type : korap:token,wrap : {@type : korap:term,key : scheint,layer : orth,match : match:eq}" +
 					"}]}";
 			
-			CQLTree cqlTree = new CQLTree(query, version);		
+			CqlQueryProcessor cqlTree = new CqlQueryProcessor(query, version);		
 			String serializedQuery = mapper.writeValueAsString(cqlTree.getRequestMap().get("query"));
 			assertEquals(jsonLd.replace(" ", ""), serializedQuery.replace("\"", ""));
 //			/System.out.println(serializedQuery);
@@ -96,7 +96,7 @@
 					"]}," +
 					"{@type:korap:token, wrap:{@type:korap:term, key:scheint, layer:orth, match:match:eq}}" +
 			"]}";
-		CQLTree cqlTree = new CQLTree(query, version);		
+		CqlQueryProcessor cqlTree = new CqlQueryProcessor(query, version);		
 		String serializedQuery = mapper.writeValueAsString(cqlTree.getRequestMap().get("query"));
 		assertEquals(jsonLd.replace(" ", ""), serializedQuery.replace("\"", ""));
 		
@@ -112,7 +112,7 @@
 							"{@type:korap:token, wrap:{@type:korap:term, key:Mond, layer:orth, match:match:eq}}" +
 					"]}" +
 				"]}";
-		cqlTree = new CQLTree(query, version);		
+		cqlTree = new CqlQueryProcessor(query, version);		
 		serializedQuery = mapper.writeValueAsString(cqlTree.getRequestMap().get("query"));
 		assertEquals(jsonLd.replace(" ", ""), serializedQuery.replace("\"", ""));
 		
@@ -127,7 +127,7 @@
 				"{@type:korap:token, wrap:{@type:korap:term, key:Mond, layer:orth, match:match:eq}}" +
 			"]}";		
 		
-		CQLTree cqlTree = new CQLTree(query, version);		
+		CqlQueryProcessor cqlTree = new CqlQueryProcessor(query, version);		
 		String serializedQuery = mapper.writeValueAsString(cqlTree.getRequestMap().get("query"));
 		assertEquals(jsonLd.replace(" ", ""), serializedQuery.replace("\"", ""));
 		
@@ -141,7 +141,7 @@
 				"{@type:korap:token, wrap:{@type:korap:term, key:Mond, layer:orth, match:match:eq}}" +
 			"]}";
 		
-		cqlTree = new CQLTree(query, version);		
+		cqlTree = new CqlQueryProcessor(query, version);		
 		serializedQuery = mapper.writeValueAsString(cqlTree.getRequestMap().get("query"));
 		assertEquals(jsonLd.replace(" ", ""), serializedQuery.replace("\"", ""));
 				
@@ -157,7 +157,7 @@
 						"{@type:korap:token, wrap:{@type:korap:term, key:scheint, layer:orth, match:match:eq}}" +
 					"]}" +
 				"]}";
-		cqlTree = new CQLTree(query, version);		
+		cqlTree = new CqlQueryProcessor(query, version);		
 		serializedQuery = mapper.writeValueAsString(cqlTree.getRequestMap().get("query"));
 		assertEquals(jsonLd.replace(" ", ""), serializedQuery.replace("\"", ""));
 	}
@@ -166,7 +166,7 @@
 	public void testTermQuery() throws CQLParseException, IOException, QueryException{
 		query = "Sonne";		
 		String jsonLd = "{@type:korap:token, wrap:{@type:korap:term, key:Sonne, layer:orth, match:match:eq}}";		
-		CQLTree cqlTree = new CQLTree(query, version);		
+		CqlQueryProcessor cqlTree = new CqlQueryProcessor(query, version);		
 		String serializedQuery = mapper.writeValueAsString(cqlTree.getRequestMap().get("query"));		
 		assertEquals(jsonLd.replace(" ", ""), serializedQuery.replace("\"", ""));
 	}
@@ -180,7 +180,7 @@
 				"{@type:korap:token, wrap:{@type:korap:term, key:Mann, layer:orth, match:match:eq}}" +
 			"]}";
 		
-		CQLTree cqlTree = new CQLTree(query, version);		
+		CqlQueryProcessor cqlTree = new CqlQueryProcessor(query, version);		
 		String serializedQuery = mapper.writeValueAsString(cqlTree.getRequestMap().get("query"));
 		assertEquals(jsonLd.replace(" ", ""), serializedQuery.replace("\"", ""));
 		
@@ -193,7 +193,7 @@
 				"{@type:korap:token, wrap:{@type:korap:term, key:schläft, layer:orth, match:match:eq}}" +
 			"]}";
 		
-		cqlTree = new CQLTree(query, version);		
+		cqlTree = new CqlQueryProcessor(query, version);		
 		serializedQuery = mapper.writeValueAsString(cqlTree.getRequestMap().get("query"));
 		assertEquals(jsonLd.replace(" ", ""), serializedQuery.replace("\"", ""));
 	}	
diff --git a/src/test/java/PoliqarpPlusTreeTest.java b/src/test/java/PoliqarpPlusQueryProcessorTest.java
similarity index 99%
rename from src/test/java/PoliqarpPlusTreeTest.java
rename to src/test/java/PoliqarpPlusQueryProcessorTest.java
index 06ac536..d5b5890 100644
--- a/src/test/java/PoliqarpPlusTreeTest.java
+++ b/src/test/java/PoliqarpPlusQueryProcessorTest.java
@@ -19,7 +19,7 @@
  * @author Joachim Bingel (bingel@ids-mannheim.de)
  * @version 1.0
  */
-public class PoliqarpPlusTreeTest {
+public class PoliqarpPlusQueryProcessorTest {
 
 	String query;
 	ArrayList<JsonNode> operands;
