Add apiVersion for QuerySerializer, CorpusQuery-, Poliqarp- and CQP
processors.

Change-Id: I69a8163f5dd76f375535cf0ade0e30ed7a4fe403
Reviewed-on: https://korap.ids-mannheim.de/gerrit/c/KorAP/Koral/+/9654
Reviewed-by: margaretha <margaretha@ids-mannheim.de>
diff --git a/Changes b/Changes
index c822316..f79eb55 100644
--- a/Changes
+++ b/Changes
@@ -1,8 +1,10 @@
-0.47 2025-10-06
-
+0.47 2025-10-16
+	- [enhancement] Add apiVersion for QuerySerializer, CorpusQuery-, 
+	  Poliqarp- and CQP processors.
+	  
 0.46 2025-08-06
-    - [security] Dependencies updated
-
+    - [security] Dependencies updated	
+	
 0.45 2025-05-23
      - [bugfix] Fix running QuerySerializer via commandline 
      - [feature] Add serializing corpus query via commandline
diff --git a/src/main/java/de/ids_mannheim/korap/query/serialize/CQPQueryProcessor.java b/src/main/java/de/ids_mannheim/korap/query/serialize/CQPQueryProcessor.java
index 66acf08..9ace287 100644
--- a/src/main/java/de/ids_mannheim/korap/query/serialize/CQPQueryProcessor.java
+++ b/src/main/java/de/ids_mannheim/korap/query/serialize/CQPQueryProcessor.java
@@ -49,15 +49,24 @@
 
     Map<ParseTree, Integer> classWrapRegistry = new HashMap<ParseTree, Integer>();
 
-
+    private double apiVersion; 
+    
     /**
      * Constructor
      * 
      * @param query
      *            The syntax tree as returned by ANTLR
+     * @param apiVersion 
      */
-    public CQPQueryProcessor (String query) {
+    public CQPQueryProcessor (String query, double apiVersion) {
+    	this.apiVersion=apiVersion;
         KoralObjectGenerator.setQueryProcessor(this);
+        if (apiVersion >=1.1) {
+        	Object collection = requestMap.get("collection");
+        	requestMap.put("corpus", collection);
+        	requestMap.remove("collection");
+        }
+        
         process(query);
         if (DEBUG) { 
             log.debug(">>> " + requestMap.get("query") + " <<<");
@@ -1227,8 +1236,13 @@
                    + " feature is currently not supported. Please use virtual "
                    + "collections to restrict documents by metadata.");
         CollectionQueryProcessor cq = new CollectionQueryProcessor(
-            node.getChild(1).getText());
-        requestMap.put("collection", cq.getRequestMap().get("collection"));
+            node.getChild(1).getText(), apiVersion);
+        if (apiVersion >=1.1) {
+        	requestMap.put("corpus", cq.getRequestMap().get("corpus"));
+        }
+        else {
+        	requestMap.put("collection", cq.getRequestMap().get("collection"));
+        }
         visited.addAll(getChildren(node));
     }
     
diff --git a/src/main/java/de/ids_mannheim/korap/query/serialize/CollectionQueryProcessor.java b/src/main/java/de/ids_mannheim/korap/query/serialize/CollectionQueryProcessor.java
index 9f521a6..dd0c7a5 100644
--- a/src/main/java/de/ids_mannheim/korap/query/serialize/CollectionQueryProcessor.java
+++ b/src/main/java/de/ids_mannheim/korap/query/serialize/CollectionQueryProcessor.java
@@ -39,21 +39,28 @@
     private static final boolean DEBUG = false;
     private static Logger log = LoggerFactory
             .getLogger(CollectionQueryProcessor.class);
+    private double apiVersion;
 
-
-    public CollectionQueryProcessor () {
+    public CollectionQueryProcessor (double apiVersion) {
         KoralObjectGenerator.setQueryProcessor(this);
+        this.apiVersion=apiVersion;
+        
+        if (apiVersion >=1.1) {
+        	Object collection = requestMap.get("collection");
+        	requestMap.put("corpus", collection);
+        	requestMap.remove("collection");
+        }
     }
 
 
-    public CollectionQueryProcessor (boolean verbose) {
-        KoralObjectGenerator.setQueryProcessor(this);
-        CollectionQueryProcessor.verbose = verbose;
+    public CollectionQueryProcessor (boolean verbose, double apiVersion) {
+    	this(apiVersion);
+    	CollectionQueryProcessor.verbose = verbose;
     }
 
 
-    public CollectionQueryProcessor (String query) {
-        KoralObjectGenerator.setQueryProcessor(this);
+    public CollectionQueryProcessor (String query, double apiVersion) {
+    	this(apiVersion);
         process(query);
     }
 
@@ -466,7 +473,12 @@
         }
         else {
             //        	requestMap = object;
-            requestMap.put("collection", object);
+        	if (apiVersion >= 1.1) {
+        		requestMap.put("corpus", object);
+        	}
+        	else { 
+        		requestMap.put("collection", object);
+        	}
         }
     }
 
diff --git a/src/main/java/de/ids_mannheim/korap/query/serialize/PoliqarpPlusQueryProcessor.java b/src/main/java/de/ids_mannheim/korap/query/serialize/PoliqarpPlusQueryProcessor.java
index 9d5236a..6455642 100644
--- a/src/main/java/de/ids_mannheim/korap/query/serialize/PoliqarpPlusQueryProcessor.java
+++ b/src/main/java/de/ids_mannheim/korap/query/serialize/PoliqarpPlusQueryProcessor.java
@@ -45,7 +45,8 @@
     private static Logger log = LoggerFactory
             .getLogger(PoliqarpPlusQueryProcessor.class);
     private int classCounter = 1;
-
+    private double apiVersion;
+    
     Map<ParseTree, Integer> classWrapRegistry = new HashMap<ParseTree, Integer>();
 
 
@@ -54,9 +55,17 @@
      * 
      * @param query
      *            The syntax tree as returned by ANTLR
+     * @param apiVersion 
      */
-    public PoliqarpPlusQueryProcessor (String query) {
+    public PoliqarpPlusQueryProcessor (String query, double apiVersion) {
+    	this.apiVersion=apiVersion;
         KoralObjectGenerator.setQueryProcessor(this);
+        if (apiVersion >=1.1) {
+        	Object collection = requestMap.get("collection");
+        	requestMap.put("corpus", collection);
+        	requestMap.remove("collection");
+        }
+        
         process(query);
         if (DEBUG) { 
             log.debug(">>> " + requestMap.get("query") + " <<<");
@@ -660,8 +669,13 @@
                 + " feature is currently not supported. Please use virtual "
                 + "collections to restrict documents by metadata.");
         CollectionQueryProcessor cq = new CollectionQueryProcessor(
-                node.getChild(1).getText());
-        requestMap.put("collection", cq.getRequestMap().get("collection"));
+                node.getChild(1).getText(),apiVersion);
+        if (apiVersion >=1.1) {
+        	requestMap.put("corpus", cq.getRequestMap().get("corpus"));
+        }
+        else {
+        	requestMap.put("collection", cq.getRequestMap().get("collection"));
+        }
         visited.addAll(getChildren(node));
     }
 
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 2e31060..658eb35 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
@@ -28,11 +28,11 @@
  * @since 0.1.0
  */
 public class QuerySerializer {
-
+	private double apiVersion;
     private String version = "Unknown";
     private String name = "Unknown";
     private static Properties info;
-    private boolean bDebug = false;
+//    private boolean bDebug = false;
         {
           
             loadInfo();
@@ -73,15 +73,15 @@
     private List<Object> warnings;
     private List<Object> messages;
     
-    private boolean DEBUG = false;
+//    private boolean DEBUG = false;
     
-    public QuerySerializer () {
+    public QuerySerializer (double apiVersion) {
         this.errors = new ArrayList<>();
         this.warnings = new ArrayList<>();
         this.messages = new ArrayList<>();
+        this.apiVersion = apiVersion;
     }
-
-
+    
     /**
      * Remove all messages from the query serialization.
      */
@@ -99,8 +99,7 @@
          * just for testing...
          */
 //        BasicConfigurator.configure();
-        QuerySerializer jg = new QuerySerializer();
-        int i = 0;
+        QuerySerializer jg = new QuerySerializer(1.1);
         String[] queries = null;
         String ql = "poliqarpplus";
         boolean 
@@ -118,8 +117,9 @@
         if( args.length >= 3 && args[2].compareToIgnoreCase("-show") == 0 )
         	bDebug = true;	
         
+//        int i = 0;
         for (String q : queries) {
-            i++;
+//            i++;
             try {
 				if( bDebug ) 
 					System.out.printf("QuerySerialize: query = >>%s<< lang = %s.\n", q, ql);
@@ -152,22 +152,22 @@
 
     public void run (String query, String queryLanguage, boolean bDebug) throws IOException {
 
-    	ast.verbose = bDebug; // debugging: 01.09.23/FB
+    	AbstractQueryProcessor.verbose = bDebug; // debugging: 01.09.23/FB
 
         if (queryLanguage.equalsIgnoreCase("poliqarp")) {
-            ast = new PoliqarpPlusQueryProcessor(query);
+            ast = new PoliqarpPlusQueryProcessor(query, apiVersion);
         }
         else if (queryLanguage.equalsIgnoreCase("cosmas2")) {
             ast = new Cosmas2QueryProcessor(query);
         }
         else if (queryLanguage.equalsIgnoreCase("poliqarpplus")) {
-            ast = new PoliqarpPlusQueryProcessor(query);
+            ast = new PoliqarpPlusQueryProcessor(query, apiVersion);
         }
         else if (queryLanguage.equalsIgnoreCase("cql")) {
             ast = new CqlQueryProcessor(query);
         }
         else if (queryLanguage.equalsIgnoreCase("cqp")) {
-            ast = new CQPQueryProcessor(query);
+            ast = new CQPQueryProcessor(query, apiVersion);
         }
         else if (queryLanguage.equalsIgnoreCase("fcsql")) {
             ast = new FCSQLQueryProcessor(query);
@@ -176,7 +176,7 @@
             ast = new AnnisQueryProcessor(query);
         }
         else if (queryLanguage.equalsIgnoreCase("cq")) {
-            ast = new CollectionQueryProcessor(query);
+            ast = new CollectionQueryProcessor(query,apiVersion);
         }
         else {
             throw new IllegalArgumentException(
@@ -196,16 +196,16 @@
                     "You did not specify any query language!");
         }
         else if (ql.equalsIgnoreCase("poliqarp")) {
-            ast = new PoliqarpPlusQueryProcessor(query);
+            ast = new PoliqarpPlusQueryProcessor(query, apiVersion);
         }
         else if (ql.equalsIgnoreCase("cosmas2")) {
             ast = new Cosmas2QueryProcessor(query);
         }
         else if (ql.equalsIgnoreCase("poliqarpplus")) {
-            ast = new PoliqarpPlusQueryProcessor(query);
+            ast = new PoliqarpPlusQueryProcessor(query, apiVersion);
         }
         else if (ql.equalsIgnoreCase("cqp")) {
-            ast = new CQPQueryProcessor(query);
+            ast = new CQPQueryProcessor(query, apiVersion);
         }
         else if (ql.equalsIgnoreCase("cql")) {
             if (version == null) {
@@ -222,7 +222,7 @@
             ast = new AnnisQueryProcessor(query);
         }
         else if (ql.equalsIgnoreCase("cq")) {
-            ast = new CollectionQueryProcessor(query);
+            ast = new CollectionQueryProcessor(query, apiVersion);
         }
         else {
             ast.addError(StatusCodes.UNKNOWN_QUERY_LANGUAGE,
@@ -279,14 +279,25 @@
             Map<String, Object> requestMap = new HashMap<>(ast.getRequestMap());
             Map<String, Object> meta =
                     (Map<String, Object>) requestMap.get("meta");
-            Map<String, Object> collection =
-                    (Map<String, Object>) requestMap.get("collection");
+            Map<String, Object> collection;
+            if (apiVersion >= 1.1) {
+            	collection = (Map<String, Object>) requestMap.get("corpus");
+            }
+            else {
+            	collection = (Map<String, Object>) requestMap.get("collection");
+            }
             List<Object> errors = (List<Object>) requestMap.get("errors");
             List<Object> warnings = (List<Object>) requestMap.get("warnings");
             List<Object> messages = (List<Object>) requestMap.get("messages");
             collection = mergeCollection(collection, this.collection);
-            requestMap.put("collection", collection);
-
+            
+            if (apiVersion >= 1.1) {
+            	requestMap.put("corpus", collection);
+            }
+            else {
+            	requestMap.put("collection", collection);
+            }
+            
             if (meta == null) meta = new HashMap<String, Object>();
             if (errors == null) errors = new ArrayList<Object>();
             if (warnings == null) warnings = new ArrayList<Object>();
@@ -313,7 +324,8 @@
         return new HashMap<String, Object>();
     }
 
-    private Map<String, Object> cleanup (Map<String, Object> requestMap) {
+    @SuppressWarnings("rawtypes")
+	private Map<String, Object> cleanup (Map<String, Object> requestMap) {
         Iterator<Map.Entry<String, Object>> set =
                 requestMap.entrySet().iterator();
         while (set.hasNext()) {
@@ -331,7 +343,8 @@
         return requestMap;
     }
 
-    private Map<String, Object> mergeCollection (
+    @SuppressWarnings("unchecked")
+	private Map<String, Object> mergeCollection (
             Map<String, Object> collection1, Map<String, Object> collection2) {
         if (collection1 == null || collection1.isEmpty()) {
             return collection2;
@@ -353,7 +366,8 @@
         }
     }
 
-    @Deprecated
+    @SuppressWarnings("unchecked")
+	@Deprecated
     public QuerySerializer addMeta (String cli, String cri, int cls, int crs,
             int num, int pageIndex) {
         MetaQueryBuilder meta = new MetaQueryBuilder();
@@ -369,14 +383,15 @@
         return this;
     }
 
-    public QuerySerializer setMeta (MetaQueryBuilder meta) {
+    @SuppressWarnings("unchecked")
+	public QuerySerializer setMeta (MetaQueryBuilder meta) {
         this.meta = meta.raw();
         return this;
     }
 
     @SuppressWarnings("unchecked")
     public QuerySerializer setCollection (String collection) {
-        CollectionQueryProcessor tree = new CollectionQueryProcessor();
+        CollectionQueryProcessor tree = new CollectionQueryProcessor(apiVersion);
         tree.process(collection);
         Map<String, Object> collectionRequest = tree.getRequestMap();
         if (collectionRequest.get("errors") != null)
@@ -385,15 +400,27 @@
                 .addAll((List<Object>) collectionRequest.get("warnings"));
         if (collectionRequest.get("messages") != null) this.messages
                 .addAll((List<Object>) collectionRequest.get("messages"));
-        this.collection =
-                (Map<String, Object>) collectionRequest.get("collection");
+        if (apiVersion>=1.1) {
+        	this.collection =
+                    (Map<String, Object>) collectionRequest.get("corpus");
+        }
+        else {
+            this.collection =
+                    (Map<String, Object>) collectionRequest.get("collection");
+        }
         return this;
     }
 
+    // EM: appearently unused
     public String convertCollectionToJson ()
             throws JsonProcessingException {
         Map<String, Object> map = new HashMap<>();
-        map.put("collection", collection);
+        if (apiVersion>=1.1) {
+        	map.put("corpus", collection);
+        }
+        else {
+        	map.put("collection", collection);
+        }
         return mapper.writeValueAsString(map);
     }
     
diff --git a/src/test/java/de/ids_mannheim/korap/query/test/BaseQueryTest.java b/src/test/java/de/ids_mannheim/korap/query/test/BaseQueryTest.java
index 1c44279..493d081 100644
--- a/src/test/java/de/ids_mannheim/korap/query/test/BaseQueryTest.java
+++ b/src/test/java/de/ids_mannheim/korap/query/test/BaseQueryTest.java
@@ -18,7 +18,7 @@
     protected String query;
     protected ArrayList<JsonNode> operands;
     
-    private QuerySerializer qs = new QuerySerializer();
+    private QuerySerializer qs = new QuerySerializer(1.1);
     private ObjectMapper mapper = new ObjectMapper();
     private String queryLanguage;
 
diff --git a/src/test/java/de/ids_mannheim/korap/query/test/EmptyResultsTest.java b/src/test/java/de/ids_mannheim/korap/query/test/EmptyResultsTest.java
index 0ece243..795c2f9 100644
--- a/src/test/java/de/ids_mannheim/korap/query/test/EmptyResultsTest.java
+++ b/src/test/java/de/ids_mannheim/korap/query/test/EmptyResultsTest.java
@@ -1,17 +1,19 @@
 package de.ids_mannheim.korap.query.test;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.junit.Test;
+
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
 
 import de.ids_mannheim.korap.query.serialize.QuerySerializer;
 
-import org.junit.Assert;
-import org.junit.Test;
-import java.util.List;
-import java.util.ArrayList;
-
-import static org.junit.Assert.*;
-
 /**
  * @author hanl
  * @date 02/07/2015
@@ -23,7 +25,7 @@
 
     @Test
     public void testEmptyQueryObject () {
-        QuerySerializer s = new QuerySerializer();
+        QuerySerializer s = new QuerySerializer(1.1);
         s.setQuery("prox/unit=word/distance<=5", "cql");
         JsonNode node = mapper.valueToTree(s.build());
         assertFalse(node.has("query"));
@@ -33,7 +35,7 @@
 
     @Test
     public void testEmptyCollectionObject () {
-        QuerySerializer s = new QuerySerializer();
+        QuerySerializer s = new QuerySerializer(1.1);
         s.setQuery("[base=Wort]", "poliqarp");
 
         JsonNode node = mapper.valueToTree(s.build());
@@ -44,7 +46,7 @@
 
     @Test
     public void testEmptyMetaObject () {
-        QuerySerializer s = new QuerySerializer();
+        QuerySerializer s = new QuerySerializer(1.1);
         s.setQuery("[base=Wort]", "poliqarp");
 
         JsonNode node = mapper.valueToTree(s.build());
@@ -53,7 +55,7 @@
 
     @Test
     public void testWarnings () {
-        QuerySerializer s = new QuerySerializer();
+        QuerySerializer s = new QuerySerializer(1.1);
         s.setQuery("[base=Wort]", "poliqarp");
         List<String> l = new ArrayList<String>(1);
         l.add("Hui");
@@ -72,7 +74,7 @@
 
     @Test
     public void testVersion () {
-        QuerySerializer s = new QuerySerializer();
+        QuerySerializer s = new QuerySerializer(1.1);
         assertTrue(s.getVersion().matches("^\\d+(\\.\\d+)+$"));
         assertFalse(s.getVersion().equals("Unknown"));
         assertTrue(s.getName().length() > 3);
diff --git a/src/test/java/de/ids_mannheim/korap/query/test/QuerySerializerTest.java b/src/test/java/de/ids_mannheim/korap/query/test/QuerySerializerTest.java
index 118b1ec..a88acfb 100644
--- a/src/test/java/de/ids_mannheim/korap/query/test/QuerySerializerTest.java
+++ b/src/test/java/de/ids_mannheim/korap/query/test/QuerySerializerTest.java
@@ -73,7 +73,7 @@
 		QuerySerializer.main(args);
 
 		System.setOut(originalOut);
-		String expectedOutput = "{\"collection\":{\"@type\":\"koral:doc\","
+		String expectedOutput = "{\"corpus\":{\"@type\":\"koral:doc\","
 				+ "\"match\":\"match:eq\",\"value\":\"WPD17\",\"key\":"
 				+ "\"corpusSigle\"},\"@context\":\"http://korap.ids-mannheim.de"
 				+ "/ns/koral/0.3/context.jsonld\"}";
diff --git a/src/test/java/de/ids_mannheim/korap/query/test/annis/AnnisQueryProcessorTest.java b/src/test/java/de/ids_mannheim/korap/query/test/annis/AnnisQueryProcessorTest.java
index cd6baa9..1b04e33 100644
--- a/src/test/java/de/ids_mannheim/korap/query/test/annis/AnnisQueryProcessorTest.java
+++ b/src/test/java/de/ids_mannheim/korap/query/test/annis/AnnisQueryProcessorTest.java
@@ -22,7 +22,7 @@
 public class AnnisQueryProcessorTest {
     private String query;
 
-    private QuerySerializer qs = new QuerySerializer();
+    private QuerySerializer qs = new QuerySerializer(1.1);
     private ObjectMapper mapper = new ObjectMapper();
     private JsonNode res;
 
diff --git a/src/test/java/de/ids_mannheim/korap/query/test/annis/BooleanGroupTest.java b/src/test/java/de/ids_mannheim/korap/query/test/annis/BooleanGroupTest.java
index 3fe8408..dc59a9e 100644
--- a/src/test/java/de/ids_mannheim/korap/query/test/annis/BooleanGroupTest.java
+++ b/src/test/java/de/ids_mannheim/korap/query/test/annis/BooleanGroupTest.java
@@ -13,7 +13,7 @@
 
 public class BooleanGroupTest {
 
-    private QuerySerializer qs = new QuerySerializer();
+    private QuerySerializer qs = new QuerySerializer(1.1);
     private ObjectMapper mapper = new ObjectMapper();
     
     private JsonNode runQuery (String query)
diff --git a/src/test/java/de/ids_mannheim/korap/query/test/annis/DominanceTests.java b/src/test/java/de/ids_mannheim/korap/query/test/annis/DominanceTests.java
index 659522d..dbcf8b2 100644
--- a/src/test/java/de/ids_mannheim/korap/query/test/annis/DominanceTests.java
+++ b/src/test/java/de/ids_mannheim/korap/query/test/annis/DominanceTests.java
@@ -19,7 +19,7 @@
  */

 public class DominanceTests {

     private String query;

-    private QuerySerializer qs = new QuerySerializer();

+    private QuerySerializer qs = new QuerySerializer(1.1);

     private ObjectMapper mapper = new ObjectMapper();

     private JsonNode res;

 

diff --git a/src/test/java/de/ids_mannheim/korap/query/test/annis/QnameWithRegexTest.java b/src/test/java/de/ids_mannheim/korap/query/test/annis/QnameWithRegexTest.java
index 0b4cd67..e057ad3 100644
--- a/src/test/java/de/ids_mannheim/korap/query/test/annis/QnameWithRegexTest.java
+++ b/src/test/java/de/ids_mannheim/korap/query/test/annis/QnameWithRegexTest.java
@@ -15,7 +15,7 @@
 public class QnameWithRegexTest {
     private String query;
 
-    private QuerySerializer qs = new QuerySerializer();
+    private QuerySerializer qs = new QuerySerializer(1.1);
     private ObjectMapper mapper = new ObjectMapper();
     private JsonNode res;
 
diff --git a/src/test/java/de/ids_mannheim/korap/query/test/annis/RelationTests.java b/src/test/java/de/ids_mannheim/korap/query/test/annis/RelationTests.java
index 889d741..62e2b9c 100644
--- a/src/test/java/de/ids_mannheim/korap/query/test/annis/RelationTests.java
+++ b/src/test/java/de/ids_mannheim/korap/query/test/annis/RelationTests.java
@@ -30,7 +30,7 @@
 public class RelationTests {

     private String query;

 

-    private QuerySerializer qs = new QuerySerializer();

+    private QuerySerializer qs = new QuerySerializer(1.1);

     private ObjectMapper mapper = new ObjectMapper();

     private JsonNode res;

      

diff --git a/src/test/java/de/ids_mannheim/korap/query/test/collection/CollectionQueryDuplicateTest.java b/src/test/java/de/ids_mannheim/korap/query/test/collection/CollectionQueryDuplicateTest.java
index 1623c3e..f742dd7 100644
--- a/src/test/java/de/ids_mannheim/korap/query/test/collection/CollectionQueryDuplicateTest.java
+++ b/src/test/java/de/ids_mannheim/korap/query/test/collection/CollectionQueryDuplicateTest.java
@@ -22,7 +22,7 @@
     @Test
     public void testCollectionQueryDuplicateThrowsAssertionException ()
             throws IOException {
-        QuerySerializer serializer = new QuerySerializer();
+        QuerySerializer serializer = new QuerySerializer(1.1);
         serializer.setQuery("[base=Haus]", "poliqarp");
         serializer.setCollection("textClass=politik & corpusID=WPD");
         ObjectMapper m = new ObjectMapper();
diff --git a/src/test/java/de/ids_mannheim/korap/query/test/collection/CollectionQueryProcessorTest.java b/src/test/java/de/ids_mannheim/korap/query/test/collection/CollectionQueryProcessorTest.java
index f460cd1..9d69b24 100644
--- a/src/test/java/de/ids_mannheim/korap/query/test/collection/CollectionQueryProcessorTest.java
+++ b/src/test/java/de/ids_mannheim/korap/query/test/collection/CollectionQueryProcessorTest.java
@@ -20,7 +20,7 @@
     private String ql = "poliqarpplus";
     private String collection;
 
-    public static final QuerySerializer qs = new QuerySerializer();
+    public static final QuerySerializer qs = new QuerySerializer(1.1);
     public static final ObjectMapper mapper = new ObjectMapper();
     private JsonNode res;
 
@@ -30,22 +30,22 @@
         qs.setQuery(query, ql);
         qs.setCollection(collection);
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:docGroupRef", res.at("/collection/@type").asText());
-        assertEquals("vc-filename", res.at("/collection/ref").asText());
+        assertEquals("koral:docGroupRef", res.at("/corpus/@type").asText());
+        assertEquals("vc-filename", res.at("/corpus/ref").asText());
         
         collection = "referTo \"mickey/MyVC\"";
         qs.setQuery(query, ql);
         qs.setCollection(collection);
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:docGroupRef", res.at("/collection/@type").asText());
-        assertEquals("mickey/MyVC", res.at("/collection/ref").asText());
+        assertEquals("koral:docGroupRef", res.at("/corpus/@type").asText());
+        assertEquals("mickey/MyVC", res.at("/corpus/ref").asText());
 
         collection = "referTo \"http://korap.ids-mannheim.de/user/vc/myCorpus\"";
         qs.setQuery(query, ql);
         qs.setCollection(collection);
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:docGroupRef", res.at("/collection/@type").asText());
-        assertEquals("http://korap.ids-mannheim.de/user/vc/myCorpus", res.at("/collection/ref").asText());
+        assertEquals("koral:docGroupRef", res.at("/corpus/@type").asText());
+        assertEquals("http://korap.ids-mannheim.de/user/vc/myCorpus", res.at("/corpus/ref").asText());
 	}
 
     @Test
@@ -55,30 +55,30 @@
         qs.setCollection(collection);
 
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:docGroup", res.at("/collection/@type").asText());
-        assertEquals("koral:doc", res.at("/collection/operands/0/@type").asText());
+        assertEquals("koral:docGroup", res.at("/corpus/@type").asText());
+        assertEquals("koral:doc", res.at("/corpus/operands/0/@type").asText());
 
-        assertEquals("type:regex", res.at("/collection/operands/0/type").asText());
-        assertEquals("availability", res.at("/collection/operands/0/key").asText());
-        assertEquals("CC-BY.*", res.at("/collection/operands/0/value").asText());
+        assertEquals("type:regex", res.at("/corpus/operands/0/type").asText());
+        assertEquals("availability", res.at("/corpus/operands/0/key").asText());
+        assertEquals("CC-BY.*", res.at("/corpus/operands/0/value").asText());
         
-        assertEquals("koral:docGroupRef", res.at("/collection/operands/1/@type").asText());
-        assertEquals("DeReKo-CoRoLa-comp-subcorpus", res.at("/collection/operands/1/ref").asText());
+        assertEquals("koral:docGroupRef", res.at("/corpus/operands/1/@type").asText());
+        assertEquals("DeReKo-CoRoLa-comp-subcorpus", res.at("/corpus/operands/1/ref").asText());
 
         collection = "(availability = /CC-BY.*/ & referTo \"DeReKo-CoRoLa-comp-subcorpus\")";
         qs.setQuery(query, ql);
         qs.setCollection(collection);
 
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:docGroup", res.at("/collection/@type").asText());
-        assertEquals("koral:doc", res.at("/collection/operands/0/@type").asText());
+        assertEquals("koral:docGroup", res.at("/corpus/@type").asText());
+        assertEquals("koral:doc", res.at("/corpus/operands/0/@type").asText());
 
-        assertEquals("type:regex", res.at("/collection/operands/0/type").asText());
-        assertEquals("availability", res.at("/collection/operands/0/key").asText());
-        assertEquals("CC-BY.*", res.at("/collection/operands/0/value").asText());
+        assertEquals("type:regex", res.at("/corpus/operands/0/type").asText());
+        assertEquals("availability", res.at("/corpus/operands/0/key").asText());
+        assertEquals("CC-BY.*", res.at("/corpus/operands/0/value").asText());
         
-        assertEquals("koral:docGroupRef", res.at("/collection/operands/1/@type").asText());
-        assertEquals("DeReKo-CoRoLa-comp-subcorpus", res.at("/collection/operands/1/ref").asText());
+        assertEquals("koral:docGroupRef", res.at("/corpus/operands/1/@type").asText());
+        assertEquals("DeReKo-CoRoLa-comp-subcorpus", res.at("/corpus/operands/1/ref").asText());
 
 
     }
@@ -100,7 +100,7 @@
         qs.setQuery(query, ql);
         qs.setCollection(collection);
         res = mapper.readTree(qs.toJSON());
-        assertFalse("Empty", res.has("/collection"));
+        assertFalse("Empty", res.has("/corpus"));
     }
 
 
@@ -110,21 +110,21 @@
         qs.setQuery(query, ql);
         qs.setCollection(collection);
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:doc", res.at("/collection/@type").asText());
-        assertEquals("textClass", res.at("/collection/key").asText());
-        assertEquals("politik", res.at("/collection/value").asText());
-        assertNotEquals("type:regex", res.at("/collection/type").asText());
-        assertEquals("match:eq", res.at("/collection/match").asText());
+        assertEquals("koral:doc", res.at("/corpus/@type").asText());
+        assertEquals("textClass", res.at("/corpus/key").asText());
+        assertEquals("politik", res.at("/corpus/value").asText());
+        assertNotEquals("type:regex", res.at("/corpus/type").asText());
+        assertEquals("match:eq", res.at("/corpus/match").asText());
 
         collection = "textClass!=politik";
         qs.setQuery(query, ql);
         qs.setCollection(collection);
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:doc", res.at("/collection/@type").asText());
-        assertEquals("textClass", res.at("/collection/key").asText());
-        assertEquals("politik", res.at("/collection/value").asText());
-        assertNotEquals("type:regex", res.at("/collection/type").asText());
-        assertEquals("match:ne", res.at("/collection/match").asText());
+        assertEquals("koral:doc", res.at("/corpus/@type").asText());
+        assertEquals("textClass", res.at("/corpus/key").asText());
+        assertEquals("politik", res.at("/corpus/value").asText());
+        assertNotEquals("type:regex", res.at("/corpus/type").asText());
+        assertEquals("match:ne", res.at("/corpus/match").asText());
     }
 
     
@@ -136,12 +136,12 @@
         qs.setCollection(collection);
         res = mapper.readTree(qs.toJSON());
 
-        assertEquals("koral:token", res.at("/collection/@type").asText());
-        assertEquals("koral:term", res.at("/collection/wrap/@type").asText());
-        assertEquals("base", res.at("/collection/wrap/foundry").asText());
-        assertEquals("n", res.at("/collection/wrap/layer").asText());
-        assertEquals("alt", res.at("/collection/wrap/key").asText());
-        assertEquals("match:eq", res.at("/collection/wrap/match").asText());
+        assertEquals("koral:token", res.at("/corpus/@type").asText());
+        assertEquals("koral:term", res.at("/corpus/wrap/@type").asText());
+        assertEquals("base", res.at("/corpus/wrap/foundry").asText());
+        assertEquals("n", res.at("/corpus/wrap/layer").asText());
+        assertEquals("alt", res.at("/corpus/wrap/key").asText());
+        assertEquals("match:eq", res.at("/corpus/wrap/match").asText());
     }
 
 
@@ -151,10 +151,10 @@
         qs.setQuery(query, ql);
         qs.setCollection(collection);
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:doc", res.at("/collection/@type").asText());
-        assertEquals("title", res.at("/collection/key").asText());
-        assertEquals("Mannheim", res.at("/collection/value").asText());
-        assertEquals("match:contains", res.at("/collection/match").asText());
+        assertEquals("koral:doc", res.at("/corpus/@type").asText());
+        assertEquals("title", res.at("/corpus/key").asText());
+        assertEquals("Mannheim", res.at("/corpus/value").asText());
+        assertEquals("match:contains", res.at("/corpus/match").asText());
     }
 
    @Test
@@ -163,28 +163,28 @@
         qs.setQuery(query, ql);
         qs.setCollection(collection);
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:doc", res.at("/collection/@type").asText());
-        assertEquals("title", res.at("/collection/key").asText());
-        assertEquals("IDS Mannheim", res.at("/collection/value").asText());
-        assertEquals("match:contains", res.at("/collection/match").asText());
+        assertEquals("koral:doc", res.at("/corpus/@type").asText());
+        assertEquals("title", res.at("/corpus/key").asText());
+        assertEquals("IDS Mannheim", res.at("/corpus/value").asText());
+        assertEquals("match:contains", res.at("/corpus/match").asText());
 		
         collection = "title~\"IDS:Mannheim\"";
         qs.setQuery(query, ql);
         qs.setCollection(collection);
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:doc", res.at("/collection/@type").asText());
-        assertEquals("title", res.at("/collection/key").asText());
-        assertEquals("IDS:Mannheim", res.at("/collection/value").asText());
-        assertEquals("match:contains", res.at("/collection/match").asText());
+        assertEquals("koral:doc", res.at("/corpus/@type").asText());
+        assertEquals("title", res.at("/corpus/key").asText());
+        assertEquals("IDS:Mannheim", res.at("/corpus/value").asText());
+        assertEquals("match:contains", res.at("/corpus/match").asText());
 
 		// With escapes
 		collection = "title~\"IDS \\\"Mon\\\\nem\\\"\"";
 		qs.setCollection(collection);
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:doc", res.at("/collection/@type").asText());
-        assertEquals("title", res.at("/collection/key").asText());
-        assertEquals("IDS \"Mon\\nem\"", res.at("/collection/value").asText());
-        assertEquals("match:contains", res.at("/collection/match").asText());
+        assertEquals("koral:doc", res.at("/corpus/@type").asText());
+        assertEquals("title", res.at("/corpus/key").asText());
+        assertEquals("IDS \"Mon\\nem\"", res.at("/corpus/value").asText());
+        assertEquals("match:contains", res.at("/corpus/match").asText());
    }
 
     @Test
@@ -193,10 +193,10 @@
         qs.setQuery(query, ql);
         qs.setCollection(collection);
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:doc", res.at("/collection/@type").asText());
-        assertEquals("corpusAuthor", res.at("/collection/key").asText());
-        assertEquals("Goethe, Johann Wolfgang von", res.at("/collection/value").asText());
-        assertEquals("match:eq", res.at("/collection/match").asText());
+        assertEquals("koral:doc", res.at("/corpus/@type").asText());
+        assertEquals("corpusAuthor", res.at("/corpus/key").asText());
+        assertEquals("Goethe, Johann Wolfgang von", res.at("/corpus/value").asText());
+        assertEquals("match:eq", res.at("/corpus/match").asText());
     }
 
     @Test
@@ -205,14 +205,14 @@
         qs.setQuery(query, ql);
         qs.setCollection(collection);
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:docGroup", res.at("/collection/@type").asText());
-        assertEquals("operation:and", res.at("/collection/operation").asText());
-        assertEquals("koral:doc", res.at("/collection/operands/0/@type").asText());
-        assertEquals("foundries", res.at("/collection/operands/0/key").asText());
-        assertEquals("corenlp/constituency", res.at("/collection/operands/0/value").asText());
-        assertEquals("koral:doc", res.at("/collection/operands/1/@type").asText());
-        assertEquals("foundries", res.at("/collection/operands/1/key").asText());
-        assertEquals("corenlp/morpho", res.at("/collection/operands/1/value").asText());
+        assertEquals("koral:docGroup", res.at("/corpus/@type").asText());
+        assertEquals("operation:and", res.at("/corpus/operation").asText());
+        assertEquals("koral:doc", res.at("/corpus/operands/0/@type").asText());
+        assertEquals("foundries", res.at("/corpus/operands/0/key").asText());
+        assertEquals("corenlp/constituency", res.at("/corpus/operands/0/value").asText());
+        assertEquals("koral:doc", res.at("/corpus/operands/1/@type").asText());
+        assertEquals("foundries", res.at("/corpus/operands/1/key").asText());
+        assertEquals("corenlp/morpho", res.at("/corpus/operands/1/value").asText());
     }
 
     @Test
@@ -221,10 +221,10 @@
         qs.setQuery(query, ql);
         qs.setCollection(collection);
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:doc", res.at("/collection/@type").asText());
-        assertEquals("corpusTitle", res.at("/collection/key").asText());
-        assertEquals("C't", res.at("/collection/value").asText());
-        assertEquals("match:eq", res.at("/collection/match").asText());
+        assertEquals("koral:doc", res.at("/corpus/@type").asText());
+        assertEquals("corpusTitle", res.at("/corpus/key").asText());
+        assertEquals("C't", res.at("/corpus/value").asText());
+        assertEquals("match:eq", res.at("/corpus/match").asText());
     }   
     
     @Test
@@ -233,10 +233,10 @@
         qs.setQuery(query, ql);
         qs.setCollection(collection);
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:doc", res.at("/collection/@type").asText());
-        assertEquals("textClass", res.at("/collection/key").asText());
-        assertEquals("politik", res.at("/collection/value").asText());
-        assertEquals("match:eq", res.at("/collection/match").asText());
+        assertEquals("koral:doc", res.at("/corpus/@type").asText());
+        assertEquals("textClass", res.at("/corpus/key").asText());
+        assertEquals("politik", res.at("/corpus/value").asText());
+        assertEquals("match:eq", res.at("/corpus/match").asText());
         
     }
     
@@ -246,30 +246,30 @@
         qs.setQuery(query, ql);
         qs.setCollection(collection);
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:doc", res.at("/collection/@type").asText());
-        assertEquals("textClass", res.at("/collection/key").asText());
-        assertEquals("politik", res.at("/collection/value").asText());
-        assertEquals("type:regex", res.at("/collection/type").asText());
-        assertEquals("match:eq", res.at("/collection/match").asText());
+        assertEquals("koral:doc", res.at("/corpus/@type").asText());
+        assertEquals("textClass", res.at("/corpus/key").asText());
+        assertEquals("politik", res.at("/corpus/value").asText());
+        assertEquals("type:regex", res.at("/corpus/type").asText());
+        assertEquals("match:eq", res.at("/corpus/match").asText());
 
         collection = "textClass=/politik/ or textClass=/kultur.*/";
         qs.setQuery(query, ql);
         qs.setCollection(collection);
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:docGroup", res.at("/collection/@type").asText());
-        assertEquals("operation:or", res.at("/collection/operation").asText());
+        assertEquals("koral:docGroup", res.at("/corpus/@type").asText());
+        assertEquals("operation:or", res.at("/corpus/operation").asText());
 
-        assertEquals("koral:doc", res.at("/collection/operands/0/@type").asText());
-        assertEquals("textClass", res.at("/collection/operands/0/key").asText());
-        assertEquals("politik", res.at("/collection/operands/0/value").asText());
-        assertEquals("match:eq", res.at("/collection/operands/0/match").asText());
-        assertEquals("type:regex", res.at("/collection/operands/0/type").asText());
+        assertEquals("koral:doc", res.at("/corpus/operands/0/@type").asText());
+        assertEquals("textClass", res.at("/corpus/operands/0/key").asText());
+        assertEquals("politik", res.at("/corpus/operands/0/value").asText());
+        assertEquals("match:eq", res.at("/corpus/operands/0/match").asText());
+        assertEquals("type:regex", res.at("/corpus/operands/0/type").asText());
 
-		assertEquals("koral:doc", res.at("/collection/operands/1/@type").asText());
-        assertEquals("textClass", res.at("/collection/operands/1/key").asText());
-        assertEquals("kultur.*", res.at("/collection/operands/1/value").asText());
-        assertEquals("match:eq", res.at("/collection/operands/1/match").asText());
-        assertEquals("type:regex", res.at("/collection/operands/1/type").asText());
+		assertEquals("koral:doc", res.at("/corpus/operands/1/@type").asText());
+        assertEquals("textClass", res.at("/corpus/operands/1/key").asText());
+        assertEquals("kultur.*", res.at("/corpus/operands/1/value").asText());
+        assertEquals("match:eq", res.at("/corpus/operands/1/match").asText());
+        assertEquals("type:regex", res.at("/corpus/operands/1/type").asText());
     }
 
 	@Test
@@ -278,11 +278,11 @@
         qs.setQuery(query, ql);
         qs.setCollection(collection);
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:doc", res.at("/collection/@type").asText());
-        assertEquals("textClass", res.at("/collection/key").asText());
-        assertEquals("(politik|kultur)", res.at("/collection/value").asText());
-        assertEquals("type:regex", res.at("/collection/type").asText());
-        assertEquals("match:eq", res.at("/collection/match").asText());
+        assertEquals("koral:doc", res.at("/corpus/@type").asText());
+        assertEquals("textClass", res.at("/corpus/key").asText());
+        assertEquals("(politik|kultur)", res.at("/corpus/value").asText());
+        assertEquals("type:regex", res.at("/corpus/type").asText());
+        assertEquals("match:eq", res.at("/corpus/match").asText());
     }
 
 	@Test
@@ -291,11 +291,11 @@
         qs.setQuery(query, ql);
         qs.setCollection(collection);
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:doc", res.at("/collection/@type").asText());
-        assertEquals("textClass", res.at("/collection/key").asText());
-        assertEquals("po/litik", res.at("/collection/value").asText());
-        assertEquals("type:regex", res.at("/collection/type").asText());
-        assertEquals("match:eq", res.at("/collection/match").asText());
+        assertEquals("koral:doc", res.at("/corpus/@type").asText());
+        assertEquals("textClass", res.at("/corpus/key").asText());
+        assertEquals("po/litik", res.at("/corpus/value").asText());
+        assertEquals("type:regex", res.at("/corpus/type").asText());
+        assertEquals("match:eq", res.at("/corpus/match").asText());
     } 
 
 	@Test
@@ -304,11 +304,11 @@
         qs.setQuery(query, ql);
         qs.setCollection(collection);
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:doc", res.at("/collection/@type").asText());
-        assertEquals("textClass", res.at("/collection/key").asText());
-        assertEquals("po.'litik", res.at("/collection/value").asText());
-        assertEquals("type:regex", res.at("/collection/type").asText());
-        assertEquals("match:eq", res.at("/collection/match").asText());
+        assertEquals("koral:doc", res.at("/corpus/@type").asText());
+        assertEquals("textClass", res.at("/corpus/key").asText());
+        assertEquals("po.'litik", res.at("/corpus/value").asText());
+        assertEquals("type:regex", res.at("/corpus/type").asText());
+        assertEquals("match:eq", res.at("/corpus/match").asText());
     } 
     
 	@Test
@@ -331,10 +331,10 @@
         qs.setQuery(query, ql);
         qs.setCollection(collection);
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:doc", res.at("/collection/@type").asText());
-        assertEquals("author", res.at("/collection/key").asText());
-        assertEquals("firefighter1974", res.at("/collection/value").asText());
-        assertEquals("match:eq", res.at("/collection/match").asText());
+        assertEquals("koral:doc", res.at("/corpus/@type").asText());
+        assertEquals("author", res.at("/corpus/key").asText());
+        assertEquals("firefighter1974", res.at("/corpus/value").asText());
+        assertEquals("match:eq", res.at("/corpus/match").asText());
         assertEquals("", res.at("/errors/0/0").asText());
         assertEquals("", res.at("/warnings/0/0").asText());
     }
@@ -346,21 +346,21 @@
         qs.setQuery(query, ql);
         qs.setCollection(collection);
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:docGroup", res.at("/collection/@type").asText());
-        assertEquals("operation:and", res.at("/collection/operation").asText());
-        assertEquals("koral:doc", res.at("/collection/operands/0/@type")
+        assertEquals("koral:docGroup", res.at("/corpus/@type").asText());
+        assertEquals("operation:and", res.at("/corpus/operation").asText());
+        assertEquals("koral:doc", res.at("/corpus/operands/0/@type")
                 .asText());
-        assertEquals("textClass", res.at("/collection/operands/0/key").asText());
-        assertEquals("Sport", res.at("/collection/operands/0/value").asText());
-        assertEquals("match:eq", res.at("/collection/operands/0/match")
+        assertEquals("textClass", res.at("/corpus/operands/0/key").asText());
+        assertEquals("Sport", res.at("/corpus/operands/0/value").asText());
+        assertEquals("match:eq", res.at("/corpus/operands/0/match")
                 .asText());
-        assertEquals("koral:doc", res.at("/collection/operands/1/@type")
+        assertEquals("koral:doc", res.at("/corpus/operands/1/@type")
                 .asText());
-        assertEquals("pubDate", res.at("/collection/operands/1/key").asText());
-        assertEquals("2014", res.at("/collection/operands/1/value").asText());
-        assertEquals("type:date", res.at("/collection/operands/1/type")
+        assertEquals("pubDate", res.at("/corpus/operands/1/key").asText());
+        assertEquals("2014", res.at("/corpus/operands/1/value").asText());
+        assertEquals("type:date", res.at("/corpus/operands/1/type")
                 .asText());
-        assertEquals("match:eq", res.at("/collection/operands/1/match")
+        assertEquals("match:eq", res.at("/corpus/operands/1/match")
                 .asText());
 
         collection = "textClass=Sport & pubDate=2014";
@@ -368,20 +368,20 @@
         qs.setCollection(collection);
 
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:docGroup", res.at("/collection/@type").asText());
-        assertEquals("operation:and", res.at("/collection/operation").asText());
-        assertEquals("koral:doc", res.at("/collection/operands/0/@type")
+        assertEquals("koral:docGroup", res.at("/corpus/@type").asText());
+        assertEquals("operation:and", res.at("/corpus/operation").asText());
+        assertEquals("koral:doc", res.at("/corpus/operands/0/@type")
                 .asText());
-        assertEquals("textClass", res.at("/collection/operands/0/key").asText());
-        assertEquals("Sport", res.at("/collection/operands/0/value").asText());
-        assertEquals("match:eq", res.at("/collection/operands/0/match")
+        assertEquals("textClass", res.at("/corpus/operands/0/key").asText());
+        assertEquals("Sport", res.at("/corpus/operands/0/value").asText());
+        assertEquals("match:eq", res.at("/corpus/operands/0/match")
                 .asText());
-        assertEquals("koral:doc", res.at("/collection/operands/1/@type")
+        assertEquals("koral:doc", res.at("/corpus/operands/1/@type")
                 .asText());
-        assertEquals("pubDate", res.at("/collection/operands/1/key").asText());
-        assertEquals("2014", res.at("/collection/operands/1/value").asText());
-        assertEquals("type:integer", res.at("/collection/operands/1/type").asText());
-        assertEquals("match:eq", res.at("/collection/operands/1/match")
+        assertEquals("pubDate", res.at("/corpus/operands/1/key").asText());
+        assertEquals("2014", res.at("/corpus/operands/1/value").asText());
+        assertEquals("type:integer", res.at("/corpus/operands/1/type").asText());
+        assertEquals("match:eq", res.at("/corpus/operands/1/match")
                 .asText());
         assertTrue(res.at("/warnings/0").isMissingNode());
         //        assertTrue(res.at("/warnings/0/0").asText().startsWith(
@@ -396,36 +396,36 @@
         qs.setQuery(query, ql);
         qs.setCollection(collection);
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:docGroup", res.at("/collection/@type").asText());
-        assertEquals("operation:and", res.at("/collection/operation").asText());
-        assertEquals("koral:doc", res.at("/collection/operands/0/@type")
+        assertEquals("koral:docGroup", res.at("/corpus/@type").asText());
+        assertEquals("operation:and", res.at("/corpus/operation").asText());
+        assertEquals("koral:doc", res.at("/corpus/operands/0/@type")
                 .asText());
-        assertEquals("textClass", res.at("/collection/operands/0/key").asText());
-        assertEquals("Sport", res.at("/collection/operands/0/value").asText());
-        assertEquals("match:eq", res.at("/collection/operands/0/match")
+        assertEquals("textClass", res.at("/corpus/operands/0/key").asText());
+        assertEquals("Sport", res.at("/corpus/operands/0/value").asText());
+        assertEquals("match:eq", res.at("/corpus/operands/0/match")
                 .asText());
-        assertEquals("koral:docGroup", res.at("/collection/operands/1/@type")
+        assertEquals("koral:docGroup", res.at("/corpus/operands/1/@type")
                 .asText());
         assertEquals("operation:and", res
-                .at("/collection/operands/1/operation").asText());
+                .at("/corpus/operands/1/operation").asText());
         assertEquals("koral:doc",
-                res.at("/collection/operands/1/operands/0/@type").asText());
-        assertEquals("pubDate", res.at("/collection/operands/1/operands/0/key")
+                res.at("/corpus/operands/1/operands/0/@type").asText());
+        assertEquals("pubDate", res.at("/corpus/operands/1/operands/0/key")
                 .asText());
-        assertEquals("2014", res.at("/collection/operands/1/operands/0/value")
+        assertEquals("2014", res.at("/corpus/operands/1/operands/0/value")
                 .asText());
         assertEquals("type:date",
-                res.at("/collection/operands/1/operands/0/type").asText());
+                res.at("/corpus/operands/1/operands/0/type").asText());
         assertEquals("match:eq",
-                res.at("/collection/operands/1/operands/0/match").asText());
+                res.at("/corpus/operands/1/operands/0/match").asText());
         assertEquals("koral:doc",
-                res.at("/collection/operands/1/operands/1/@type").asText());
+                res.at("/corpus/operands/1/operands/1/@type").asText());
         assertEquals("corpusId", res
-                .at("/collection/operands/1/operands/1/key").asText());
-        assertEquals("WPD", res.at("/collection/operands/1/operands/1/value")
+                .at("/corpus/operands/1/operands/1/key").asText());
+        assertEquals("WPD", res.at("/corpus/operands/1/operands/1/value")
                 .asText());
         assertEquals("match:eq",
-                res.at("/collection/operands/1/operands/1/match").asText());
+                res.at("/corpus/operands/1/operands/1/match").asText());
     }
 
 
@@ -435,21 +435,21 @@
         qs.setQuery(query, ql);
         qs.setCollection(collection);
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:docGroup", res.at("/collection/@type").asText());
-        assertEquals("operation:or", res.at("/collection/operation").asText());
-        assertEquals("koral:doc", res.at("/collection/operands/0/@type")
+        assertEquals("koral:docGroup", res.at("/corpus/@type").asText());
+        assertEquals("operation:or", res.at("/corpus/operation").asText());
+        assertEquals("koral:doc", res.at("/corpus/operands/0/@type")
                 .asText());
-        assertEquals("textClass", res.at("/collection/operands/0/key").asText());
-        assertEquals("Sport", res.at("/collection/operands/0/value").asText());
-        assertEquals("match:eq", res.at("/collection/operands/0/match")
+        assertEquals("textClass", res.at("/corpus/operands/0/key").asText());
+        assertEquals("Sport", res.at("/corpus/operands/0/value").asText());
+        assertEquals("match:eq", res.at("/corpus/operands/0/match")
                 .asText());
-        assertEquals("koral:doc", res.at("/collection/operands/1/@type")
+        assertEquals("koral:doc", res.at("/corpus/operands/1/@type")
                 .asText());
-        assertEquals("pubDate", res.at("/collection/operands/1/key").asText());
-        assertEquals("2014", res.at("/collection/operands/1/value").asText());
-        assertEquals("type:date", res.at("/collection/operands/1/type")
+        assertEquals("pubDate", res.at("/corpus/operands/1/key").asText());
+        assertEquals("2014", res.at("/corpus/operands/1/value").asText());
+        assertEquals("type:date", res.at("/corpus/operands/1/type")
                 .asText());
-        assertEquals("match:eq", res.at("/collection/operands/1/match")
+        assertEquals("match:eq", res.at("/corpus/operands/1/match")
                 .asText());
     }
 
@@ -461,36 +461,36 @@
         qs.setQuery(query, ql);
         qs.setCollection(collection);
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:docGroup", res.at("/collection/@type").asText());
-        assertEquals("operation:or", res.at("/collection/operation").asText());
-        assertEquals("koral:doc", res.at("/collection/operands/0/@type")
+        assertEquals("koral:docGroup", res.at("/corpus/@type").asText());
+        assertEquals("operation:or", res.at("/corpus/operation").asText());
+        assertEquals("koral:doc", res.at("/corpus/operands/0/@type")
                 .asText());
-        assertEquals("textClass", res.at("/collection/operands/0/key").asText());
-        assertEquals("Sport", res.at("/collection/operands/0/value").asText());
-        assertEquals("match:eq", res.at("/collection/operands/0/match")
+        assertEquals("textClass", res.at("/corpus/operands/0/key").asText());
+        assertEquals("Sport", res.at("/corpus/operands/0/value").asText());
+        assertEquals("match:eq", res.at("/corpus/operands/0/match")
                 .asText());
-        assertEquals("koral:docGroup", res.at("/collection/operands/1/@type")
+        assertEquals("koral:docGroup", res.at("/corpus/operands/1/@type")
                 .asText());
-        assertEquals("operation:or", res.at("/collection/operands/1/operation")
+        assertEquals("operation:or", res.at("/corpus/operands/1/operation")
                 .asText());
         assertEquals("koral:doc",
-                res.at("/collection/operands/1/operands/0/@type").asText());
-        assertEquals("pubDate", res.at("/collection/operands/1/operands/0/key")
+                res.at("/corpus/operands/1/operands/0/@type").asText());
+        assertEquals("pubDate", res.at("/corpus/operands/1/operands/0/key")
                 .asText());
-        assertEquals("2014", res.at("/collection/operands/1/operands/0/value")
+        assertEquals("2014", res.at("/corpus/operands/1/operands/0/value")
                 .asText());
         assertEquals("type:date",
-                res.at("/collection/operands/1/operands/0/type").asText());
+                res.at("/corpus/operands/1/operands/0/type").asText());
         assertEquals("match:eq",
-                res.at("/collection/operands/1/operands/0/match").asText());
+                res.at("/corpus/operands/1/operands/0/match").asText());
         assertEquals("koral:doc",
-                res.at("/collection/operands/1/operands/1/@type").asText());
+                res.at("/corpus/operands/1/operands/1/@type").asText());
         assertEquals("corpusId", res
-                .at("/collection/operands/1/operands/1/key").asText());
-        assertEquals("WPD", res.at("/collection/operands/1/operands/1/value")
+                .at("/corpus/operands/1/operands/1/key").asText());
+        assertEquals("WPD", res.at("/corpus/operands/1/operands/1/value")
                 .asText());
         assertEquals("match:eq",
-                res.at("/collection/operands/1/operands/1/match").asText());
+                res.at("/corpus/operands/1/operands/1/match").asText());
     }
 
 
@@ -500,172 +500,172 @@
         qs.setQuery(query, ql);
         qs.setCollection(collection);
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:docGroup", res.at("/collection/@type").asText());
-        assertEquals("operation:or", res.at("/collection/operation").asText());
-        assertEquals("koral:doc", res.at("/collection/operands/0/@type")
+        assertEquals("koral:docGroup", res.at("/corpus/@type").asText());
+        assertEquals("operation:or", res.at("/corpus/operation").asText());
+        assertEquals("koral:doc", res.at("/corpus/operands/0/@type")
                 .asText());
-        assertEquals("textClass", res.at("/collection/operands/0/key").asText());
-        assertEquals("Sport", res.at("/collection/operands/0/value").asText());
-        assertEquals("match:eq", res.at("/collection/operands/0/match")
+        assertEquals("textClass", res.at("/corpus/operands/0/key").asText());
+        assertEquals("Sport", res.at("/corpus/operands/0/value").asText());
+        assertEquals("match:eq", res.at("/corpus/operands/0/match")
                 .asText());
-        assertEquals("koral:docGroup", res.at("/collection/operands/1/@type")
+        assertEquals("koral:docGroup", res.at("/corpus/operands/1/@type")
                 .asText());
         assertEquals("operation:and", res
-                .at("/collection/operands/1/operation").asText());
+                .at("/corpus/operands/1/operation").asText());
         assertEquals("koral:doc",
-                res.at("/collection/operands/1/operands/0/@type").asText());
-        assertEquals("pubDate", res.at("/collection/operands/1/operands/0/key")
+                res.at("/corpus/operands/1/operands/0/@type").asText());
+        assertEquals("pubDate", res.at("/corpus/operands/1/operands/0/key")
                 .asText());
-        assertEquals("2014", res.at("/collection/operands/1/operands/0/value")
+        assertEquals("2014", res.at("/corpus/operands/1/operands/0/value")
                 .asText());
         assertEquals("type:date",
-                res.at("/collection/operands/1/operands/0/type").asText());
+                res.at("/corpus/operands/1/operands/0/type").asText());
         assertEquals("match:eq",
-                res.at("/collection/operands/1/operands/0/match").asText());
+                res.at("/corpus/operands/1/operands/0/match").asText());
         assertEquals("koral:doc",
-                res.at("/collection/operands/1/operands/1/@type").asText());
+                res.at("/corpus/operands/1/operands/1/@type").asText());
         assertEquals("corpusId", res
-                .at("/collection/operands/1/operands/1/key").asText());
-        assertEquals("WPD", res.at("/collection/operands/1/operands/1/value")
+                .at("/corpus/operands/1/operands/1/key").asText());
+        assertEquals("WPD", res.at("/corpus/operands/1/operands/1/value")
                 .asText());
         assertEquals("match:eq",
-                res.at("/collection/operands/1/operands/1/match").asText());
+                res.at("/corpus/operands/1/operands/1/match").asText());
 
         collection = "textClass=Sport | pubDate in 2014 & corpusId=WPD";
         qs.setQuery(query, ql);
         qs.setCollection(collection);
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:docGroup", res.at("/collection/@type").asText());
-        assertEquals("operation:or", res.at("/collection/operation").asText());
-        assertEquals("koral:doc", res.at("/collection/operands/0/@type")
+        assertEquals("koral:docGroup", res.at("/corpus/@type").asText());
+        assertEquals("operation:or", res.at("/corpus/operation").asText());
+        assertEquals("koral:doc", res.at("/corpus/operands/0/@type")
                 .asText());
-        assertEquals("textClass", res.at("/collection/operands/0/key").asText());
-        assertEquals("Sport", res.at("/collection/operands/0/value").asText());
-        assertEquals("match:eq", res.at("/collection/operands/0/match")
+        assertEquals("textClass", res.at("/corpus/operands/0/key").asText());
+        assertEquals("Sport", res.at("/corpus/operands/0/value").asText());
+        assertEquals("match:eq", res.at("/corpus/operands/0/match")
                 .asText());
-        assertEquals("koral:docGroup", res.at("/collection/operands/1/@type")
+        assertEquals("koral:docGroup", res.at("/corpus/operands/1/@type")
                 .asText());
         assertEquals("operation:and", res
-                .at("/collection/operands/1/operation").asText());
+                .at("/corpus/operands/1/operation").asText());
         assertEquals("koral:doc",
-                res.at("/collection/operands/1/operands/0/@type").asText());
-        assertEquals("pubDate", res.at("/collection/operands/1/operands/0/key")
+                res.at("/corpus/operands/1/operands/0/@type").asText());
+        assertEquals("pubDate", res.at("/corpus/operands/1/operands/0/key")
                 .asText());
-        assertEquals("2014", res.at("/collection/operands/1/operands/0/value")
+        assertEquals("2014", res.at("/corpus/operands/1/operands/0/value")
                 .asText());
         assertEquals("type:date",
-                res.at("/collection/operands/1/operands/0/type").asText());
+                res.at("/corpus/operands/1/operands/0/type").asText());
         assertEquals("match:eq",
-                res.at("/collection/operands/1/operands/0/match").asText());
+                res.at("/corpus/operands/1/operands/0/match").asText());
         assertEquals("koral:doc",
-                res.at("/collection/operands/1/operands/1/@type").asText());
+                res.at("/corpus/operands/1/operands/1/@type").asText());
         assertEquals("corpusId", res
-                .at("/collection/operands/1/operands/1/key").asText());
-        assertEquals("WPD", res.at("/collection/operands/1/operands/1/value")
+                .at("/corpus/operands/1/operands/1/key").asText());
+        assertEquals("WPD", res.at("/corpus/operands/1/operands/1/value")
                 .asText());
         assertEquals("match:eq",
-                res.at("/collection/operands/1/operands/1/match").asText());
+                res.at("/corpus/operands/1/operands/1/match").asText());
 
         collection = "(textClass=Sport | pubDate in 2014) & corpusId=WPD";
         qs.setQuery(query, ql);
         qs.setCollection(collection);
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:docGroup", res.at("/collection/@type").asText());
-        assertEquals("operation:and", res.at("/collection/operation").asText());
-        assertEquals("koral:docGroup", res.at("/collection/operands/0/@type")
+        assertEquals("koral:docGroup", res.at("/corpus/@type").asText());
+        assertEquals("operation:and", res.at("/corpus/operation").asText());
+        assertEquals("koral:docGroup", res.at("/corpus/operands/0/@type")
                 .asText());
-        assertEquals("operation:or", res.at("/collection/operands/0/operation")
+        assertEquals("operation:or", res.at("/corpus/operands/0/operation")
                 .asText());
         assertEquals("koral:doc",
-                res.at("/collection/operands/0/operands/0/@type").asText());
+                res.at("/corpus/operands/0/operands/0/@type").asText());
         assertEquals("koral:doc",
-                res.at("/collection/operands/0/operands/1/@type").asText());
-        assertEquals("koral:doc", res.at("/collection/operands/1/@type")
+                res.at("/corpus/operands/0/operands/1/@type").asText());
+        assertEquals("koral:doc", res.at("/corpus/operands/1/@type")
                 .asText());
 
         collection = "(textClass=Sport & pubDate in 2014) & corpusId=WPD";
         qs.setQuery(query, ql);
         qs.setCollection(collection);
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:docGroup", res.at("/collection/@type").asText());
-        assertEquals("operation:and", res.at("/collection/operation").asText());
-        assertEquals("koral:docGroup", res.at("/collection/operands/0/@type")
+        assertEquals("koral:docGroup", res.at("/corpus/@type").asText());
+        assertEquals("operation:and", res.at("/corpus/operation").asText());
+        assertEquals("koral:docGroup", res.at("/corpus/operands/0/@type")
                 .asText());
         assertEquals("operation:and", res
-                .at("/collection/operands/0/operation").asText());
+                .at("/corpus/operands/0/operation").asText());
         assertEquals("koral:doc",
-                res.at("/collection/operands/0/operands/0/@type").asText());
+                res.at("/corpus/operands/0/operands/0/@type").asText());
         assertEquals("koral:doc",
-                res.at("/collection/operands/0/operands/1/@type").asText());
-        assertEquals("koral:doc", res.at("/collection/operands/1/@type")
+                res.at("/corpus/operands/0/operands/1/@type").asText());
+        assertEquals("koral:doc", res.at("/corpus/operands/1/@type")
                 .asText());
 
         collection = "(textClass=Sport & textClass=ausland) | (corpusID=WPD & author=White)";
         qs.setQuery(query, ql);
         qs.setCollection(collection);
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:docGroup", res.at("/collection/@type").asText());
-        assertEquals("operation:or", res.at("/collection/operation").asText());
-        assertEquals("koral:docGroup", res.at("/collection/operands/0/@type")
+        assertEquals("koral:docGroup", res.at("/corpus/@type").asText());
+        assertEquals("operation:or", res.at("/corpus/operation").asText());
+        assertEquals("koral:docGroup", res.at("/corpus/operands/0/@type")
                 .asText());
         assertEquals("operation:and", res
-                .at("/collection/operands/0/operation").asText());
-        assertEquals("koral:docGroup", res.at("/collection/operands/1/@type")
+                .at("/corpus/operands/0/operation").asText());
+        assertEquals("koral:docGroup", res.at("/corpus/operands/1/@type")
                 .asText());
         assertEquals("operation:and", res
-                .at("/collection/operands/1/operation").asText());
+                .at("/corpus/operands/1/operation").asText());
         assertEquals("koral:doc",
-                res.at("/collection/operands/0/operands/0/@type").asText());
-        assertEquals("Sport", res.at("/collection/operands/0/operands/0/value")
+                res.at("/corpus/operands/0/operands/0/@type").asText());
+        assertEquals("Sport", res.at("/corpus/operands/0/operands/0/value")
                 .asText());
         assertEquals("koral:doc",
-                res.at("/collection/operands/0/operands/1/@type").asText());
+                res.at("/corpus/operands/0/operands/1/@type").asText());
         assertEquals("ausland",
-                res.at("/collection/operands/0/operands/1/value").asText());
+                res.at("/corpus/operands/0/operands/1/value").asText());
         assertEquals("koral:doc",
-                res.at("/collection/operands/1/operands/0/@type").asText());
-        assertEquals("WPD", res.at("/collection/operands/1/operands/0/value")
+                res.at("/corpus/operands/1/operands/0/@type").asText());
+        assertEquals("WPD", res.at("/corpus/operands/1/operands/0/value")
                 .asText());
         assertEquals("koral:doc",
-                res.at("/collection/operands/1/operands/1/@type").asText());
-        assertEquals("White", res.at("/collection/operands/1/operands/1/value")
+                res.at("/corpus/operands/1/operands/1/@type").asText());
+        assertEquals("White", res.at("/corpus/operands/1/operands/1/value")
                 .asText());
 
         collection = "(textClass=Sport & textClass=ausland) | (corpusID=WPD & author=White & pubDate in 2000)";
         qs.setQuery(query, ql);
         qs.setCollection(collection);
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:docGroup", res.at("/collection/@type").asText());
-        assertEquals("operation:or", res.at("/collection/operation").asText());
-        assertEquals("koral:docGroup", res.at("/collection/operands/0/@type")
+        assertEquals("koral:docGroup", res.at("/corpus/@type").asText());
+        assertEquals("operation:or", res.at("/corpus/operation").asText());
+        assertEquals("koral:docGroup", res.at("/corpus/operands/0/@type")
                 .asText());
         assertEquals("operation:and", res
-                .at("/collection/operands/0/operation").asText());
-        assertEquals("koral:docGroup", res.at("/collection/operands/1/@type")
+                .at("/corpus/operands/0/operation").asText());
+        assertEquals("koral:docGroup", res.at("/corpus/operands/1/@type")
                 .asText());
         assertEquals("operation:and", res
-                .at("/collection/operands/1/operation").asText());
+                .at("/corpus/operands/1/operation").asText());
         assertEquals("koral:doc",
-                res.at("/collection/operands/0/operands/0/@type").asText());
-        assertEquals("Sport", res.at("/collection/operands/0/operands/0/value")
+                res.at("/corpus/operands/0/operands/0/@type").asText());
+        assertEquals("Sport", res.at("/corpus/operands/0/operands/0/value")
                 .asText());
         assertEquals("koral:doc",
-                res.at("/collection/operands/0/operands/1/@type").asText());
+                res.at("/corpus/operands/0/operands/1/@type").asText());
         assertEquals("ausland",
-                res.at("/collection/operands/0/operands/1/value").asText());
+                res.at("/corpus/operands/0/operands/1/value").asText());
         assertEquals("koral:doc",
-                res.at("/collection/operands/1/operands/0/@type").asText());
-        assertEquals("WPD", res.at("/collection/operands/1/operands/0/value")
+                res.at("/corpus/operands/1/operands/0/@type").asText());
+        assertEquals("WPD", res.at("/corpus/operands/1/operands/0/value")
                 .asText());
         assertEquals("koral:docGroup",
-                res.at("/collection/operands/1/operands/1/@type").asText());
+                res.at("/corpus/operands/1/operands/1/@type").asText());
         assertEquals("operation:and",
-                res.at("/collection/operands/1/operands/1/operation").asText());
+                res.at("/corpus/operands/1/operands/1/operation").asText());
         assertEquals("White",
-                res.at("/collection/operands/1/operands/1/operands/0/value")
+                res.at("/corpus/operands/1/operands/1/operands/0/value")
                         .asText());
         assertEquals("2000",
-                res.at("/collection/operands/1/operands/1/operands/1/value")
+                res.at("/corpus/operands/1/operands/1/operands/1/value")
                         .asText());
     }
 
@@ -676,72 +676,72 @@
         qs.setQuery(query, ql);
         qs.setCollection(collection);
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:doc", res.at("/collection/@type").asText());
-        assertEquals("nTok", res.at("/collection/key").asText());
-        assertEquals("200", res.at("/collection/value").asText());
-        assertEquals("type:integer", res.at("/collection/type").asText());
-        assertEquals("match:ne", res.at("/collection/match").asText());
+        assertEquals("koral:doc", res.at("/corpus/@type").asText());
+        assertEquals("nTok", res.at("/corpus/key").asText());
+        assertEquals("200", res.at("/corpus/value").asText());
+        assertEquals("type:integer", res.at("/corpus/type").asText());
+        assertEquals("match:ne", res.at("/corpus/match").asText());
 
 
         collection = "nTok > 200";
         qs.setQuery(query, ql);
         qs.setCollection(collection);
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:doc", res.at("/collection/@type").asText());
-        assertEquals("nTok", res.at("/collection/key").asText());
-        assertEquals("200", res.at("/collection/value").asText());
-        assertEquals("type:integer", res.at("/collection/type").asText());
-        assertEquals("match:gt", res.at("/collection/match").asText());
+        assertEquals("koral:doc", res.at("/corpus/@type").asText());
+        assertEquals("nTok", res.at("/corpus/key").asText());
+        assertEquals("200", res.at("/corpus/value").asText());
+        assertEquals("type:integer", res.at("/corpus/type").asText());
+        assertEquals("match:gt", res.at("/corpus/match").asText());
 
         collection = "nTok != 2000";
         qs.setQuery(query, ql);
         qs.setCollection(collection);
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:doc", res.at("/collection/@type").asText());
-        assertEquals("nTok", res.at("/collection/key").asText());
-        assertEquals("2000", res.at("/collection/value").asText());
-        assertEquals("type:integer", res.at("/collection/type").asText());
-        assertEquals("match:ne", res.at("/collection/match").asText());
+        assertEquals("koral:doc", res.at("/corpus/@type").asText());
+        assertEquals("nTok", res.at("/corpus/key").asText());
+        assertEquals("2000", res.at("/corpus/value").asText());
+        assertEquals("type:integer", res.at("/corpus/type").asText());
+        assertEquals("match:ne", res.at("/corpus/match").asText());
 
         collection = "nTok < 2000";
         qs.setQuery(query, ql);
         qs.setCollection(collection);
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:doc", res.at("/collection/@type").asText());
-        assertEquals("nTok", res.at("/collection/key").asText());
-        assertEquals("2000", res.at("/collection/value").asText());
-        assertEquals("type:integer", res.at("/collection/type").asText());
-        assertEquals("match:lt", res.at("/collection/match").asText());
+        assertEquals("koral:doc", res.at("/corpus/@type").asText());
+        assertEquals("nTok", res.at("/corpus/key").asText());
+        assertEquals("2000", res.at("/corpus/value").asText());
+        assertEquals("type:integer", res.at("/corpus/type").asText());
+        assertEquals("match:lt", res.at("/corpus/match").asText());
 
         collection = "nTok = 2000";
         qs.setQuery(query, ql);
         qs.setCollection(collection);
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:doc", res.at("/collection/@type").asText());
-        assertEquals("nTok", res.at("/collection/key").asText());
-        assertEquals("2000", res.at("/collection/value").asText());
-        assertEquals("type:integer", res.at("/collection/type").asText());
-        assertEquals("match:eq", res.at("/collection/match").asText());
+        assertEquals("koral:doc", res.at("/corpus/@type").asText());
+        assertEquals("nTok", res.at("/corpus/key").asText());
+        assertEquals("2000", res.at("/corpus/value").asText());
+        assertEquals("type:integer", res.at("/corpus/type").asText());
+        assertEquals("match:eq", res.at("/corpus/match").asText());
 
         collection = "nTok >= 2000";
         qs.setQuery(query, ql);
         qs.setCollection(collection);
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:doc", res.at("/collection/@type").asText());
-        assertEquals("nTok", res.at("/collection/key").asText());
-        assertEquals("2000", res.at("/collection/value").asText());
-        assertEquals("type:integer", res.at("/collection/type").asText());
-        assertEquals("match:geq", res.at("/collection/match").asText());
+        assertEquals("koral:doc", res.at("/corpus/@type").asText());
+        assertEquals("nTok", res.at("/corpus/key").asText());
+        assertEquals("2000", res.at("/corpus/value").asText());
+        assertEquals("type:integer", res.at("/corpus/type").asText());
+        assertEquals("match:geq", res.at("/corpus/match").asText());
 
         collection = "nTok <= 2000";
         qs.setQuery(query, ql);
         qs.setCollection(collection);
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:doc", res.at("/collection/@type").asText());
-        assertEquals("nTok", res.at("/collection/key").asText());
-        assertEquals("2000", res.at("/collection/value").asText());
-        assertEquals("type:integer", res.at("/collection/type").asText());
-        assertEquals("match:leq", res.at("/collection/match").asText());
+        assertEquals("koral:doc", res.at("/corpus/@type").asText());
+        assertEquals("nTok", res.at("/corpus/key").asText());
+        assertEquals("2000", res.at("/corpus/value").asText());
+        assertEquals("type:integer", res.at("/corpus/type").asText());
+        assertEquals("match:leq", res.at("/corpus/match").asText());
     }
 
     @Test
@@ -750,41 +750,41 @@
         qs.setQuery(query, ql);
         qs.setCollection(collection);
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:doc", res.at("/collection/@type").asText());
-        assertEquals("pubDate", res.at("/collection/key").asText());
-        assertEquals("2000", res.at("/collection/value").asText());
-        assertEquals("type:date", res.at("/collection/type").asText());
-        assertEquals("match:eq", res.at("/collection/match").asText());
+        assertEquals("koral:doc", res.at("/corpus/@type").asText());
+        assertEquals("pubDate", res.at("/corpus/key").asText());
+        assertEquals("2000", res.at("/corpus/value").asText());
+        assertEquals("type:date", res.at("/corpus/type").asText());
+        assertEquals("match:eq", res.at("/corpus/match").asText());
 
         collection = "pubDate = 2000";
         qs.setQuery(query, ql);
         qs.setCollection(collection);
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:doc", res.at("/collection/@type").asText());
-        assertEquals("pubDate", res.at("/collection/key").asText());
-        assertEquals("2000", res.at("/collection/value").asText());
-        assertEquals("type:integer", res.at("/collection/type").asText());
-        assertEquals("match:eq", res.at("/collection/match").asText());
+        assertEquals("koral:doc", res.at("/corpus/@type").asText());
+        assertEquals("pubDate", res.at("/corpus/key").asText());
+        assertEquals("2000", res.at("/corpus/value").asText());
+        assertEquals("type:integer", res.at("/corpus/type").asText());
+        assertEquals("match:eq", res.at("/corpus/match").asText());
 
         collection = "pubDate since 2000";
         qs.setQuery(query, ql);
         qs.setCollection(collection);
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:doc", res.at("/collection/@type").asText());
-        assertEquals("pubDate", res.at("/collection/key").asText());
-        assertEquals("2000", res.at("/collection/value").asText());
-        assertEquals("type:date", res.at("/collection/type").asText());
-        assertEquals("match:geq", res.at("/collection/match").asText());
+        assertEquals("koral:doc", res.at("/corpus/@type").asText());
+        assertEquals("pubDate", res.at("/corpus/key").asText());
+        assertEquals("2000", res.at("/corpus/value").asText());
+        assertEquals("type:date", res.at("/corpus/type").asText());
+        assertEquals("match:geq", res.at("/corpus/match").asText());
 
         collection = "pubDate until 2000";
         qs.setQuery(query, ql);
         qs.setCollection(collection);
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:doc", res.at("/collection/@type").asText());
-        assertEquals("pubDate", res.at("/collection/key").asText());
-        assertEquals("2000", res.at("/collection/value").asText());
-        assertEquals("type:date", res.at("/collection/type").asText());
-        assertEquals("match:leq", res.at("/collection/match").asText());
+        assertEquals("koral:doc", res.at("/corpus/@type").asText());
+        assertEquals("pubDate", res.at("/corpus/key").asText());
+        assertEquals("2000", res.at("/corpus/value").asText());
+        assertEquals("type:date", res.at("/corpus/type").asText());
+        assertEquals("match:leq", res.at("/corpus/match").asText());
     }
 
 
@@ -794,41 +794,41 @@
         qs.setQuery(query, ql);
         qs.setCollection(collection);
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:doc", res.at("/collection/@type").asText());
-        assertEquals("pubDate", res.at("/collection/key").asText());
-        assertEquals("2000-02", res.at("/collection/value").asText());
-        assertEquals("type:date", res.at("/collection/type").asText());
-        assertEquals("match:eq", res.at("/collection/match").asText());
+        assertEquals("koral:doc", res.at("/corpus/@type").asText());
+        assertEquals("pubDate", res.at("/corpus/key").asText());
+        assertEquals("2000-02", res.at("/corpus/value").asText());
+        assertEquals("type:date", res.at("/corpus/type").asText());
+        assertEquals("match:eq", res.at("/corpus/match").asText());
 
         collection = "pubDate = 2000-12";
         qs.setQuery(query, ql);
         qs.setCollection(collection);
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:doc", res.at("/collection/@type").asText());
-        assertEquals("pubDate", res.at("/collection/key").asText());
-        assertEquals("2000-12", res.at("/collection/value").asText());
-        assertTrue(res.at("/collection/type").isMissingNode());
-        assertEquals("match:eq", res.at("/collection/match").asText());
+        assertEquals("koral:doc", res.at("/corpus/@type").asText());
+        assertEquals("pubDate", res.at("/corpus/key").asText());
+        assertEquals("2000-12", res.at("/corpus/value").asText());
+        assertTrue(res.at("/corpus/type").isMissingNode());
+        assertEquals("match:eq", res.at("/corpus/match").asText());
 
         collection = "pubDate since 2000-02-01";
         qs.setQuery(query, ql);
         qs.setCollection(collection);
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:doc", res.at("/collection/@type").asText());
-        assertEquals("pubDate", res.at("/collection/key").asText());
-        assertEquals("2000-02-01", res.at("/collection/value").asText());
-        assertEquals("type:date", res.at("/collection/type").asText());
-        assertEquals("match:geq", res.at("/collection/match").asText());
+        assertEquals("koral:doc", res.at("/corpus/@type").asText());
+        assertEquals("pubDate", res.at("/corpus/key").asText());
+        assertEquals("2000-02-01", res.at("/corpus/value").asText());
+        assertEquals("type:date", res.at("/corpus/type").asText());
+        assertEquals("match:geq", res.at("/corpus/match").asText());
 
         collection = "pubDate until 2000-01-01";
         qs.setQuery(query, ql);
         qs.setCollection(collection);
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:doc", res.at("/collection/@type").asText());
-        assertEquals("pubDate", res.at("/collection/key").asText());
-        assertEquals("2000-01-01", res.at("/collection/value").asText());
-        assertEquals("type:date", res.at("/collection/type").asText());
-        assertEquals("match:leq", res.at("/collection/match").asText());
+        assertEquals("koral:doc", res.at("/corpus/@type").asText());
+        assertEquals("pubDate", res.at("/corpus/key").asText());
+        assertEquals("2000-01-01", res.at("/corpus/value").asText());
+        assertEquals("type:date", res.at("/corpus/type").asText());
+        assertEquals("match:leq", res.at("/corpus/match").asText());
     }
 
 	@Test
@@ -837,23 +837,23 @@
         qs.setQuery(query, ql);
         qs.setCollection(collection);
         res = mapper.readTree(qs.toJSON());
-        assertEquals("corpusSigle", res.at("/collection/operands/0/key").asText());
-        assertEquals("HMP[0-9][0-9]", res.at("/collection/operands/0/value").asText());
-        assertEquals("operation:or", res.at("/collection/operands/1/operation").asText());
-        assertEquals("textTypeArt", res.at("/collection/operands/1/operands/0/key").asText());
-        assertEquals(".*Kommentar.*", res.at("/collection/operands/1/operands/0/value").asText());
-        assertEquals("operation:and", res.at("/collection/operation").asText());
+        assertEquals("corpusSigle", res.at("/corpus/operands/0/key").asText());
+        assertEquals("HMP[0-9][0-9]", res.at("/corpus/operands/0/value").asText());
+        assertEquals("operation:or", res.at("/corpus/operands/1/operation").asText());
+        assertEquals("textTypeArt", res.at("/corpus/operands/1/operands/0/key").asText());
+        assertEquals(".*Kommentar.*", res.at("/corpus/operands/1/operands/0/value").asText());
+        assertEquals("operation:and", res.at("/corpus/operation").asText());
 
         collection = "corpusSigle = /HMP[0-9][0-9]/ and (textTypeArt=/.*Kommentar.*/ OR textTypeArt=/.*Leitartikel.*/)";
         qs.setQuery(query, ql);
         qs.setCollection(collection);
         res = mapper.readTree(qs.toJSON());
-        assertEquals("corpusSigle", res.at("/collection/operands/0/key").asText());
-        assertEquals("HMP[0-9][0-9]", res.at("/collection/operands/0/value").asText());
-        assertEquals("operation:or", res.at("/collection/operands/1/operation").asText());
-        assertEquals("textTypeArt", res.at("/collection/operands/1/operands/0/key").asText());
-        assertEquals(".*Kommentar.*", res.at("/collection/operands/1/operands/0/value").asText());
-        assertEquals("operation:and", res.at("/collection/operation").asText());
+        assertEquals("corpusSigle", res.at("/corpus/operands/0/key").asText());
+        assertEquals("HMP[0-9][0-9]", res.at("/corpus/operands/0/value").asText());
+        assertEquals("operation:or", res.at("/corpus/operands/1/operation").asText());
+        assertEquals("textTypeArt", res.at("/corpus/operands/1/operands/0/key").asText());
+        assertEquals(".*Kommentar.*", res.at("/corpus/operands/1/operands/0/value").asText());
+        assertEquals("operation:and", res.at("/corpus/operation").asText());
 	}	
 
     @Test
diff --git a/src/test/java/de/ids_mannheim/korap/query/test/cqp/CQPMeetProcessorTest.java b/src/test/java/de/ids_mannheim/korap/query/test/cqp/CQPMeetProcessorTest.java
index 2945ed5..831fd2f 100644
--- a/src/test/java/de/ids_mannheim/korap/query/test/cqp/CQPMeetProcessorTest.java
+++ b/src/test/java/de/ids_mannheim/korap/query/test/cqp/CQPMeetProcessorTest.java
@@ -22,7 +22,7 @@
 	String query;
     ArrayList<JsonNode> operands;
 
-    QuerySerializer qs = new QuerySerializer();
+    QuerySerializer qs = new QuerySerializer(1.1);
     ObjectMapper mapper = new ObjectMapper();
     JsonNode res;
 
diff --git a/src/test/java/de/ids_mannheim/korap/query/test/cqp/CQPQueryProcessorTest.java b/src/test/java/de/ids_mannheim/korap/query/test/cqp/CQPQueryProcessorTest.java
index ad487d5..545dca7 100644
--- a/src/test/java/de/ids_mannheim/korap/query/test/cqp/CQPQueryProcessorTest.java
+++ b/src/test/java/de/ids_mannheim/korap/query/test/cqp/CQPQueryProcessorTest.java
@@ -31,7 +31,7 @@
     private String query;
     private ArrayList<JsonNode> operands;
 
-    private QuerySerializer qs = new QuerySerializer();
+    private QuerySerializer qs = new QuerySerializer(1.1);
     private ObjectMapper mapper = new ObjectMapper();
     private JsonNode result;
 
@@ -1099,21 +1099,21 @@
         qs.setQuery(query, "CQP");
         result = mapper.readTree(qs.toJSON());
         assertEquals("x", result.at("/query/wrap/key").asText());
-        assertEquals("koral:doc", result.at("/collection/@type").asText());
-        assertEquals("textClass", result.at("/collection/key").asText());
-        assertEquals("Sport", result.at("/collection/value").asText());
+        assertEquals("koral:doc", result.at("/corpus/@type").asText());
+        assertEquals("textClass", result.at("/corpus/key").asText());
+        assertEquals("Sport", result.at("/corpus/value").asText());
 
         query = "\"x\" meta textClass='Sport'";
         qs.setQuery(query, "CQP");
         qs.setCollection("author=Smith");
         result = mapper.readTree(qs.toJSON());
         assertEquals("x", result.at("/query/wrap/key").asText());
-        assertEquals("koral:docGroup", result.at("/collection/@type").asText());
-        assertEquals("operation:and", result.at("/collection/operation").asText());
-        assertEquals("textClass", result.at("/collection/operands/0/key").asText());
-        assertEquals("Sport", result.at("/collection/operands/0/value").asText());
-        assertEquals("author", result.at("/collection/operands/1/key").asText());
-        assertEquals("Smith", result.at("/collection/operands/1/value").asText());
+        assertEquals("koral:docGroup", result.at("/corpus/@type").asText());
+        assertEquals("operation:and", result.at("/corpus/operation").asText());
+        assertEquals("textClass", result.at("/corpus/operands/0/key").asText());
+        assertEquals("Sport", result.at("/corpus/operands/0/value").asText());
+        assertEquals("author", result.at("/corpus/operands/1/key").asText());
+        assertEquals("Smith", result.at("/corpus/operands/1/value").asText());
     }
    
  
diff --git a/src/test/java/de/ids_mannheim/korap/query/test/cqp/CQPSkipSentenceBoundaries.java b/src/test/java/de/ids_mannheim/korap/query/test/cqp/CQPSkipSentenceBoundaries.java
index d3ad302..73c2a7c 100644
--- a/src/test/java/de/ids_mannheim/korap/query/test/cqp/CQPSkipSentenceBoundaries.java
+++ b/src/test/java/de/ids_mannheim/korap/query/test/cqp/CQPSkipSentenceBoundaries.java
@@ -25,7 +25,7 @@
     String query;
     ArrayList<JsonNode> operands;
 
-    QuerySerializer qs = new QuerySerializer();
+    QuerySerializer qs = new QuerySerializer(1.1);
     ObjectMapper mapper = new ObjectMapper();
     JsonNode res;
 
diff --git a/src/test/java/de/ids_mannheim/korap/query/test/fcsql/FCSQLQueryProcessorTest.java b/src/test/java/de/ids_mannheim/korap/query/test/fcsql/FCSQLQueryProcessorTest.java
index fe2352c..41f37fe 100644
--- a/src/test/java/de/ids_mannheim/korap/query/test/fcsql/FCSQLQueryProcessorTest.java
+++ b/src/test/java/de/ids_mannheim/korap/query/test/fcsql/FCSQLQueryProcessorTest.java
@@ -21,7 +21,7 @@
  */
 public class FCSQLQueryProcessorTest {
 
-    private static QuerySerializer qs = new QuerySerializer();
+    private static QuerySerializer qs = new QuerySerializer(1.1);
     private static ObjectMapper mapper = new ObjectMapper();
     private static JsonNode node;
     private String query;
diff --git a/src/test/java/de/ids_mannheim/korap/query/test/poliqarpplus/EmptyTokenTest.java b/src/test/java/de/ids_mannheim/korap/query/test/poliqarpplus/EmptyTokenTest.java
index a689a14..a8edbf4 100644
--- a/src/test/java/de/ids_mannheim/korap/query/test/poliqarpplus/EmptyTokenTest.java
+++ b/src/test/java/de/ids_mannheim/korap/query/test/poliqarpplus/EmptyTokenTest.java
@@ -29,7 +29,7 @@
     String query;

     ArrayList<JsonNode> operands;

 

-    QuerySerializer qs = new QuerySerializer();

+    QuerySerializer qs = new QuerySerializer(1.1);

     ObjectMapper mapper = new ObjectMapper();

     JsonNode res;

    

diff --git a/src/test/java/de/ids_mannheim/korap/query/test/poliqarpplus/PoliqarpPlusQueryProcessorTest.java b/src/test/java/de/ids_mannheim/korap/query/test/poliqarpplus/PoliqarpPlusQueryProcessorTest.java
index cb69cb0..463bd25 100644
--- a/src/test/java/de/ids_mannheim/korap/query/test/poliqarpplus/PoliqarpPlusQueryProcessorTest.java
+++ b/src/test/java/de/ids_mannheim/korap/query/test/poliqarpplus/PoliqarpPlusQueryProcessorTest.java
@@ -25,7 +25,7 @@
     String query;
     ArrayList<JsonNode> operands;
 
-    QuerySerializer qs = new QuerySerializer();
+    QuerySerializer qs = new QuerySerializer(1.1);
     ObjectMapper mapper = new ObjectMapper();
     JsonNode res;
 
@@ -1759,21 +1759,21 @@
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
         assertEquals("x", res.at("/query/wrap/key").asText());
-        assertEquals("koral:doc", res.at("/collection/@type").asText());
-        assertEquals("textClass", res.at("/collection/key").asText());
-        assertEquals("Sport", res.at("/collection/value").asText());
+        assertEquals("koral:doc", res.at("/corpus/@type").asText());
+        assertEquals("textClass", res.at("/corpus/key").asText());
+        assertEquals("Sport", res.at("/corpus/value").asText());
 
         query = "x meta textClass=Sport";
         qs.setQuery(query, "poliqarpplus");
         qs.setCollection("author=Smith");
         res = mapper.readTree(qs.toJSON());
         assertEquals("x", res.at("/query/wrap/key").asText());
-        assertEquals("koral:docGroup", res.at("/collection/@type").asText());
-        assertEquals("operation:and", res.at("/collection/operation").asText());
-        assertEquals("textClass", res.at("/collection/operands/0/key").asText());
-        assertEquals("Sport", res.at("/collection/operands/0/value").asText());
-        assertEquals("author", res.at("/collection/operands/1/key").asText());
-        assertEquals("Smith", res.at("/collection/operands/1/value").asText());
+        assertEquals("koral:docGroup", res.at("/corpus/@type").asText());
+        assertEquals("operation:and", res.at("/corpus/operation").asText());
+        assertEquals("textClass", res.at("/corpus/operands/0/key").asText());
+        assertEquals("Sport", res.at("/corpus/operands/0/value").asText());
+        assertEquals("author", res.at("/corpus/operands/1/key").asText());
+        assertEquals("Smith", res.at("/corpus/operands/1/value").asText());
 
       
     }
diff --git a/src/test/java/de/ids_mannheim/korap/test/cosmas2/Cosmas2QueryProcessorTest.java b/src/test/java/de/ids_mannheim/korap/test/cosmas2/Cosmas2QueryProcessorTest.java
index 0611ff2..6e41921 100644
--- a/src/test/java/de/ids_mannheim/korap/test/cosmas2/Cosmas2QueryProcessorTest.java
+++ b/src/test/java/de/ids_mannheim/korap/test/cosmas2/Cosmas2QueryProcessorTest.java
@@ -32,7 +32,7 @@
     String query;
     ArrayList<JsonNode> operands;
 
-    QuerySerializer qs = new QuerySerializer();
+    QuerySerializer qs = new QuerySerializer(1.1);
     ObjectMapper mapper = new ObjectMapper();
     JsonNode res;
 
diff --git a/src/test/java/de/ids_mannheim/korap/test/cosmas2/OPINTest.java b/src/test/java/de/ids_mannheim/korap/test/cosmas2/OPINTest.java
index c4636c1..5e42a75 100644
--- a/src/test/java/de/ids_mannheim/korap/test/cosmas2/OPINTest.java
+++ b/src/test/java/de/ids_mannheim/korap/test/cosmas2/OPINTest.java
@@ -21,7 +21,7 @@
 public class OPINTest {
     private String query;
 
-    private QuerySerializer qs = new QuerySerializer();
+    private QuerySerializer qs = new QuerySerializer(1.1);
     private ObjectMapper mapper = new ObjectMapper();
     private JsonNode res;
 
diff --git a/src/test/java/de/ids_mannheim/korap/test/cosmas2/OPINWithExclusionTest.java b/src/test/java/de/ids_mannheim/korap/test/cosmas2/OPINWithExclusionTest.java
index d2cd5d5..9369100 100644
--- a/src/test/java/de/ids_mannheim/korap/test/cosmas2/OPINWithExclusionTest.java
+++ b/src/test/java/de/ids_mannheim/korap/test/cosmas2/OPINWithExclusionTest.java
@@ -18,7 +18,7 @@
 public class OPINWithExclusionTest {
     private String query;
 
-    private QuerySerializer qs = new QuerySerializer();
+    private QuerySerializer qs = new QuerySerializer(1.1);
     private ObjectMapper mapper = new ObjectMapper();
     private JsonNode res;
 
diff --git a/src/test/java/de/ids_mannheim/korap/test/cosmas2/OPOVTest.java b/src/test/java/de/ids_mannheim/korap/test/cosmas2/OPOVTest.java
index d16ea80..b7a1c5d 100644
--- a/src/test/java/de/ids_mannheim/korap/test/cosmas2/OPOVTest.java
+++ b/src/test/java/de/ids_mannheim/korap/test/cosmas2/OPOVTest.java
@@ -22,7 +22,7 @@
     String query;
     ArrayList<JsonNode> operands;
 
-    QuerySerializer qs = new QuerySerializer();
+    QuerySerializer qs = new QuerySerializer(1.1);
     ObjectMapper mapper = new ObjectMapper();
     JsonNode res;
 
diff --git a/src/test/java/de/ids_mannheim/korap/test/cosmas2/OPOVWithExclusionTest.java b/src/test/java/de/ids_mannheim/korap/test/cosmas2/OPOVWithExclusionTest.java
index 60ee142..e5966f2 100644
--- a/src/test/java/de/ids_mannheim/korap/test/cosmas2/OPOVWithExclusionTest.java
+++ b/src/test/java/de/ids_mannheim/korap/test/cosmas2/OPOVWithExclusionTest.java
@@ -18,7 +18,7 @@
 
     private String query;
 
-    private QuerySerializer qs = new QuerySerializer();
+    private QuerySerializer qs = new QuerySerializer(1.1);
     private ObjectMapper mapper = new ObjectMapper();
     private JsonNode res;