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;
 
