diff --git a/Changes b/Changes
index 5480e7c..6e14348 100644
--- a/Changes
+++ b/Changes
@@ -9,6 +9,7 @@
 - Add API version to the QueryService (#806)
 - Add API version to the search service (#806)
 - Add API version to ResourceParser & ServiceInfo (#806)
+- Update Query QuerySerializer with API version in the test suite (#806)
 
 # version 0.79.1
 
diff --git a/src/test/java/de/ids_mannheim/korap/config/SpringJerseyTest.java b/src/test/java/de/ids_mannheim/korap/config/SpringJerseyTest.java
index 9f0c3cb..cd8c0b2 100644
--- a/src/test/java/de/ids_mannheim/korap/config/SpringJerseyTest.java
+++ b/src/test/java/de/ids_mannheim/korap/config/SpringJerseyTest.java
@@ -25,6 +25,8 @@
 
     public final static String API_VERSION = "v1.1";
     public final static String API_VERSION_V1_0 = "v1.0";
+    
+    protected final static double API_VERSION_DOUBLE = Double.parseDouble(API_VERSION.substring(1));
 
     protected final static String allCorpusAccess = "All corpus access policy "
 			+ "has been added.";
diff --git a/src/test/java/de/ids_mannheim/korap/misc/CollectionQueryBuilderTest.java b/src/test/java/de/ids_mannheim/korap/misc/CollectionQueryBuilderTest.java
index 9a9e6ca..a6855e6 100644
--- a/src/test/java/de/ids_mannheim/korap/misc/CollectionQueryBuilderTest.java
+++ b/src/test/java/de/ids_mannheim/korap/misc/CollectionQueryBuilderTest.java
@@ -16,6 +16,8 @@
  */
 public class CollectionQueryBuilderTest {
 
+	private double apiVersion = 1.0;
+	
     @Test
     public void testsimpleAdd () throws KustvaktException {
         KoralCollectionQueryBuilder b = new KoralCollectionQueryBuilder();
@@ -120,7 +122,7 @@
     public void testBuildQuery () throws KustvaktException {
         String coll = "corpusSigle=WPD";
         String query = "[base=Haus]";
-        QuerySerializer check = new QuerySerializer();
+        QuerySerializer check = new QuerySerializer(apiVersion);
         check.setQuery(query, "poliqarp");
         check.setCollection(coll);
         KoralCollectionQueryBuilder b = new KoralCollectionQueryBuilder();
@@ -170,7 +172,7 @@
     public void testNodeMergeWithBase () throws KustvaktException {
         String coll = "corpusSigle=WPD";
         String query = "[base=Haus]";
-        QuerySerializer check = new QuerySerializer();
+        QuerySerializer check = new QuerySerializer(apiVersion);
         check.setQuery(query, "poliqarp");
         check.setCollection(coll);
         KoralCollectionQueryBuilder b = new KoralCollectionQueryBuilder();
@@ -189,7 +191,7 @@
     @Test
     public void testNodeMergeWithoutBase () throws KustvaktException {
         String query = "[base=Haus]";
-        QuerySerializer check = new QuerySerializer();
+        QuerySerializer check = new QuerySerializer(apiVersion);
         check.setQuery(query, "poliqarp");
         KoralCollectionQueryBuilder b = new KoralCollectionQueryBuilder();
         b.setBaseQuery(check.toJSON());
@@ -208,7 +210,7 @@
     public void testNodeMergeWithoutBaseWrongOperator ()
             throws KustvaktException {
         String query = "[base=Haus]";
-        QuerySerializer check = new QuerySerializer();
+        QuerySerializer check = new QuerySerializer(apiVersion);
         check.setQuery(query, "poliqarp");
         KoralCollectionQueryBuilder b = new KoralCollectionQueryBuilder();
         b.setBaseQuery(check.toJSON());
@@ -231,7 +233,7 @@
     public void testAddOROperator () throws KustvaktException {
         String coll = "corpusSigle=WPD";
         String query = "[base=Haus]";
-        QuerySerializer check = new QuerySerializer();
+        QuerySerializer check = new QuerySerializer(apiVersion);
         check.setQuery(query, "poliqarp");
         check.setCollection(coll);
         KoralCollectionQueryBuilder test = new KoralCollectionQueryBuilder();
@@ -248,7 +250,7 @@
     public void testAddANDOperator () throws KustvaktException {
         String coll = "corpusSigle=WPD";
         String query = "[base=Haus]";
-        QuerySerializer check = new QuerySerializer();
+        QuerySerializer check = new QuerySerializer(apiVersion);
         check.setQuery(query, "poliqarp");
         check.setCollection(coll);
         KoralCollectionQueryBuilder test = new KoralCollectionQueryBuilder();
@@ -266,7 +268,7 @@
     public void testAddDefaultOperator () throws KustvaktException {
         String coll = "corpusSigle=WPD";
         String query = "[base=Haus]";
-        QuerySerializer check = new QuerySerializer();
+        QuerySerializer check = new QuerySerializer(apiVersion);
         check.setQuery(query, "poliqarp");
         check.setCollection(coll);
         KoralCollectionQueryBuilder test = new KoralCollectionQueryBuilder();
@@ -283,7 +285,7 @@
     @Test
     public void testBaseCollectionNull () throws KustvaktException {
         // base is missing collection segment
-        QuerySerializer s = new QuerySerializer();
+        QuerySerializer s = new QuerySerializer(apiVersion);
         s.setQuery("[base=Haus]", "poliqarp");
         KoralCollectionQueryBuilder total = new KoralCollectionQueryBuilder();
         total.setBaseQuery(s.toJSON());
@@ -308,7 +310,7 @@
     @Test
     public void testMergeCollectionNull () throws KustvaktException {
         // merge json is missing collection segment
-        QuerySerializer s = new QuerySerializer();
+        QuerySerializer s = new QuerySerializer(apiVersion);
         s.setQuery("[base=Haus]", "poliqarp");
         s.setCollection("textClass=wissenschaft");
         KoralCollectionQueryBuilder total = new KoralCollectionQueryBuilder();
diff --git a/src/test/java/de/ids_mannheim/korap/rewrite/AvailabilityRewriteTest.java b/src/test/java/de/ids_mannheim/korap/rewrite/AvailabilityRewriteTest.java
index 91ac2e5..d087e60 100644
--- a/src/test/java/de/ids_mannheim/korap/rewrite/AvailabilityRewriteTest.java
+++ b/src/test/java/de/ids_mannheim/korap/rewrite/AvailabilityRewriteTest.java
@@ -22,13 +22,15 @@
 
     @Autowired
     public KustvaktConfiguration config;
+    
+    private double apiVersion = Double.parseDouble(API_VERSION.substring(1));
 
     @Test
     public void testCollectionNodeRemoveCorpusIdNoErrors ()
             throws KustvaktException {
         RewriteHandler handler = new RewriteHandler(config);
         handler.add(CollectionConstraint.class);
-        QuerySerializer s = new QuerySerializer();
+        QuerySerializer s = new QuerySerializer(apiVersion);
         s.setQuery(TestVariables.SIMPLE_ADD_QUERY, "poliqarp");
         s.setCollection("textClass=politik & corpusSigle=WPD");
         String result = s.toJSON();
@@ -46,7 +48,7 @@
             throws KustvaktException {
         RewriteHandler handler = new RewriteHandler(config);
         handler.add(CollectionConstraint.class);
-        QuerySerializer s = new QuerySerializer();
+        QuerySerializer s = new QuerySerializer(apiVersion);
         s.setQuery(TestVariables.SIMPLE_ADD_QUERY, "poliqarp");
         s.setCollection("corpusSigle=BRZ13 & corpusSigle=WPD");
         String result = s.toJSON();
@@ -63,7 +65,7 @@
             throws KustvaktException {
         RewriteHandler handler = new RewriteHandler(config);
         handler.add(CollectionConstraint.class);
-        QuerySerializer s = new QuerySerializer();
+        QuerySerializer s = new QuerySerializer(apiVersion);
         s.setQuery(TestVariables.SIMPLE_ADD_QUERY, "poliqarp");
         s.setCollection(
                 "(corpusSigle=BRZ13 & textClass=Wissenschaft) & corpusSigle=WPD");
@@ -86,7 +88,7 @@
         RewriteHandler handler = new RewriteHandler(config);
         handler.add(CollectionConstraint.class);
         handler.add(CollectionCleanRewrite.class);
-        QuerySerializer s = new QuerySerializer();
+        QuerySerializer s = new QuerySerializer(apiVersion);
         s.setQuery(TestVariables.SIMPLE_ADD_QUERY, "poliqarp");
         s.setCollection(
                 "(corpusSigle=BRZ13 & corpusSigle=WPD) & textClass=Wissenschaft & textClass=Sport");
@@ -110,7 +112,7 @@
         RewriteHandler handler = new RewriteHandler(config);
         handler.add(CollectionConstraint.class);
         handler.add(CollectionCleanRewrite.class);
-        QuerySerializer s = new QuerySerializer();
+        QuerySerializer s = new QuerySerializer(apiVersion);
         s.setQuery(TestVariables.SIMPLE_ADD_QUERY, "poliqarp");
         s.setCollection("(corpusSigle=BRZ13 & textClass=wissenschaft)");
         String result = s.toJSON();
@@ -130,7 +132,7 @@
         RewriteHandler handler = new RewriteHandler(config);
         handler.add(CollectionConstraint.class);
         handler.add(CollectionCleanRewrite.class);
-        QuerySerializer s = new QuerySerializer();
+        QuerySerializer s = new QuerySerializer(apiVersion);
         s.setQuery(TestVariables.SIMPLE_ADD_QUERY, "poliqarp");
         s.setCollection(
                 "(corpusSigle=BRZ13 & corpusSigle=WPD) & textClass=Wissenschaft");
@@ -150,7 +152,7 @@
         RewriteHandler handler = new RewriteHandler(config);
         handler.add(CollectionConstraint.class);
         handler.add(CollectionCleanRewrite.class);
-        QuerySerializer s = new QuerySerializer();
+        QuerySerializer s = new QuerySerializer(apiVersion);
         s.setQuery(TestVariables.SIMPLE_ADD_QUERY, "poliqarp");
         s.setCollection(
                 "(docID=random & textClass=Wissenschaft) & corpusSigle=WPD");
@@ -173,7 +175,7 @@
             throws KustvaktException {
         RewriteHandler handler = new RewriteHandler(config);
         handler.add(AvailabilityRewrite.class);
-        QuerySerializer s = new QuerySerializer();
+        QuerySerializer s = new QuerySerializer(apiVersion);
         s.setQuery(TestVariables.SIMPLE_ADD_QUERY, "poliqarp");
         String org = s.toJSON();
         JsonNode node = JsonUtils.readTree(handler.processQuery(org,
@@ -192,7 +194,7 @@
             throws KustvaktException {
         RewriteHandler handler = new RewriteHandler(config);
         handler.add(AvailabilityRewrite.class);
-        QuerySerializer s = new QuerySerializer();
+        QuerySerializer s = new QuerySerializer(apiVersion);
         s.setQuery(TestVariables.SIMPLE_ADD_QUERY, "poliqarp");
         s.setCollection("(docSigle=WPD_AAA & textClass=wissenschaft)");
         String org = s.toJSON();
@@ -219,7 +221,7 @@
             throws KustvaktException {
         RewriteHandler handler = new RewriteHandler(config);
         handler.add(CollectionConstraint.class);
-        QuerySerializer s = new QuerySerializer();
+        QuerySerializer s = new QuerySerializer(apiVersion);
         s.setQuery(TestVariables.SIMPLE_ADD_QUERY, "poliqarp");
         s.setCollection(
                 "(corpusSigle=BRZ14 & textClass=wissenschaft) | (corpusSigle=AZPR | textClass=freizeit)");
@@ -246,7 +248,7 @@
         handler.add(CollectionConstraint.class);
         // todo: use this collection query also to test clean up filter! after reduction of corpusSigle (wiss | freizeit)!
         handler.add(CollectionCleanRewrite.class);
-        QuerySerializer s = new QuerySerializer();
+        QuerySerializer s = new QuerySerializer(apiVersion);
         s.setQuery(TestVariables.SIMPLE_ADD_QUERY, "poliqarp");
         s.setCollection(
                 "(corpusSigle=BRZ14 & textClass=wissenschaft) | (corpusSigle=AZPR | textClass=freizeit)");
diff --git a/src/test/java/de/ids_mannheim/korap/rewrite/FoundryRewriteTest.java b/src/test/java/de/ids_mannheim/korap/rewrite/FoundryRewriteTest.java
index a672616..4590149 100644
--- a/src/test/java/de/ids_mannheim/korap/rewrite/FoundryRewriteTest.java
+++ b/src/test/java/de/ids_mannheim/korap/rewrite/FoundryRewriteTest.java
@@ -85,7 +85,7 @@
 		assertEquals(Status.CREATED.getStatusCode(), response.getStatus());
 
         String username = "bubbles";
-        QuerySerializer s = new QuerySerializer();
+        QuerySerializer s = new QuerySerializer(1.1);;
         s.setQuery("[pos=ADJA]", "poliqarp");
         String result = rewriteHandler.processQuery(s.toJSON(),
                 new KorAPUser(username));
@@ -100,7 +100,7 @@
 
     private void testRewriteLemmaFoundryWithUserSetting (String username)
             throws KustvaktException {
-        QuerySerializer s = new QuerySerializer();
+        QuerySerializer s = new QuerySerializer(1.1);;
         s.setQuery("[base=Haus]", "poliqarp");
         String result = rewriteHandler.processQuery(s.toJSON(),
                 new KorAPUser(username));
@@ -124,7 +124,7 @@
     @Test
     public void testDefaultFoundryInjectLemmaThrowsNoError ()
             throws KustvaktException {
-        QuerySerializer s = new QuerySerializer();
+        QuerySerializer s = new QuerySerializer(1.1);;
         s.setQuery("[base=Haus]", "poliqarp");
         String result = rewriteHandler.processQuery(s.toJSON(), new KorAPUser("test"));
         JsonNode node = JsonUtils.readTree(result);
@@ -141,7 +141,7 @@
     @Test
     public void testDefaultFoundryInjectPOSNoErrors ()
             throws KustvaktException {
-        QuerySerializer s = new QuerySerializer();
+        QuerySerializer s = new QuerySerializer(1.1);;
         s.setQuery("[pos=ADJA]", "poliqarp");
         String result = rewriteHandler.processQuery(s.toJSON(), new KorAPUser("test"));
         JsonNode node = JsonUtils.readTree(result);
@@ -158,7 +158,7 @@
     @Test
     public void testFoundryInjectJoinedQueryNoErrors ()
             throws KustvaktException {
-        QuerySerializer s = new QuerySerializer();
+        QuerySerializer s = new QuerySerializer(1.1);;
         s.setQuery("[orth=laufe/i & base!=Lauf]", "poliqarp");
         String result = rewriteHandler.processQuery(s.toJSON(), new KorAPUser("test"));
         JsonNode node = JsonUtils.readTree(result);
@@ -173,7 +173,7 @@
     @Test
     public void testFoundryInjectGroupedQueryNoErrors ()
             throws KustvaktException {
-        QuerySerializer s = new QuerySerializer();
+        QuerySerializer s = new QuerySerializer(1.1);;
         s.setQuery("[(base=laufen | tt/pos=VVFIN)]", "poliqarp");
         String result = rewriteHandler.processQuery(s.toJSON(), new KorAPUser("test"));
         JsonNode node = JsonUtils.readTree(result);
@@ -187,7 +187,7 @@
 
     @Test
     public void testFoundryBaseRewrite () throws KustvaktException {
-        QuerySerializer s = new QuerySerializer();
+        QuerySerializer s = new QuerySerializer(1.1);;
         s.setQuery("[orth=laufen]", "poliqarp");
         String result = rewriteHandler.processQuery(s.toJSON(), new KorAPUser("test"));
         JsonNode node = JsonUtils.readTree(result);
diff --git a/src/test/java/de/ids_mannheim/korap/rewrite/IdRewriteTest.java b/src/test/java/de/ids_mannheim/korap/rewrite/IdRewriteTest.java
index ef33982..bd32d0c 100644
--- a/src/test/java/de/ids_mannheim/korap/rewrite/IdRewriteTest.java
+++ b/src/test/java/de/ids_mannheim/korap/rewrite/IdRewriteTest.java
@@ -30,7 +30,7 @@
         RewriteHandler handler = new RewriteHandler(config);
         assertTrue(handler.add(IdWriter.class));
         String query = "[surface=Wort]";
-        QuerySerializer s = new QuerySerializer();
+        QuerySerializer s = new QuerySerializer(API_VERSION_DOUBLE);
         s.setQuery(query, "poliqarp");
         String value = handler.processQuery(s.toJSON(), new KorAPUser());
         JsonNode result = JsonUtils.readTree(value);
@@ -42,7 +42,7 @@
     public void testIdWriterTest () throws KustvaktException {
         RewriteHandler handler = new RewriteHandler(config);
         assertTrue(handler.add(IdWriter.class));
-        QuerySerializer s = new QuerySerializer();
+        QuerySerializer s = new QuerySerializer(API_VERSION_DOUBLE);
         s.setQuery("[base=Haus]", "poliqarp");
         String result = handler.processQuery(s.toJSON(), new KorAPUser());
         JsonNode node = JsonUtils.readTree(result);
diff --git a/src/test/java/de/ids_mannheim/korap/rewrite/QueryContextRewriteTest.java b/src/test/java/de/ids_mannheim/korap/rewrite/QueryContextRewriteTest.java
index 04bcf43..138b117 100644
--- a/src/test/java/de/ids_mannheim/korap/rewrite/QueryContextRewriteTest.java
+++ b/src/test/java/de/ids_mannheim/korap/rewrite/QueryContextRewriteTest.java
@@ -47,7 +47,7 @@
 
     @Test
     public void testMetaRewrite () throws KustvaktException {
-        QuerySerializer s = new QuerySerializer();
+        QuerySerializer s = new QuerySerializer(API_VERSION_DOUBLE);
         s.setQuery("Schnee within s", "poliqarp");
         
         MetaQueryBuilder meta = new MetaQueryBuilder();
diff --git a/src/test/java/de/ids_mannheim/korap/rewrite/RewriteHandlerTest.java b/src/test/java/de/ids_mannheim/korap/rewrite/RewriteHandlerTest.java
index 35df9d3..fe64c18 100644
--- a/src/test/java/de/ids_mannheim/korap/rewrite/RewriteHandlerTest.java
+++ b/src/test/java/de/ids_mannheim/korap/rewrite/RewriteHandlerTest.java
@@ -91,7 +91,7 @@
     public void testRewriteConfigThrowsException () {
         assertThrows(RuntimeException.class, () -> {
             RewriteHandler handler = new RewriteHandler();
-            QuerySerializer s = new QuerySerializer();
+            QuerySerializer s = new QuerySerializer(API_VERSION_DOUBLE);
             s.setQuery("[(base=laufen | base=gehen) & tt/pos=VVFIN]",
                     "poliqarp");
             assertTrue(handler.add(FoundryInject.class));
diff --git a/src/test/java/de/ids_mannheim/korap/rewrite/TimeoutRewriteTest.java b/src/test/java/de/ids_mannheim/korap/rewrite/TimeoutRewriteTest.java
index 84a3d5a..3ce9cee 100644
--- a/src/test/java/de/ids_mannheim/korap/rewrite/TimeoutRewriteTest.java
+++ b/src/test/java/de/ids_mannheim/korap/rewrite/TimeoutRewriteTest.java
@@ -32,7 +32,7 @@
         Map<String, Object> map = new HashMap<String,Object>();
         map.put("count", 25);
         map.put("timeout", 1000);
-        QuerySerializer s = new QuerySerializer();
+        QuerySerializer s = new QuerySerializer(API_VERSION_DOUBLE);
         s.setQuery(TestVariables.SIMPLE_ADD_QUERY, "poliqarp");
         s.setMeta(map);
         String result = s.toJSON();
@@ -52,7 +52,7 @@
         Map<String, Object> map = new HashMap<String,Object>();
         map.put("count", 25);
         map.put("timeout", 50000);
-        QuerySerializer s = new QuerySerializer();
+        QuerySerializer s = new QuerySerializer(API_VERSION_DOUBLE);
         s.setQuery(TestVariables.SIMPLE_ADD_QUERY, "poliqarp");
         s.setMeta(map);
         String result = s.toJSON();
@@ -71,7 +71,7 @@
         
         Map<String, Object> map = new HashMap<String,Object>();
         map.put("count", 25);
-        QuerySerializer s = new QuerySerializer();
+        QuerySerializer s = new QuerySerializer(API_VERSION_DOUBLE);
         s.setQuery(TestVariables.SIMPLE_ADD_QUERY, "poliqarp");
         s.setMeta(map);
         String result = s.toJSON();
diff --git a/src/test/java/de/ids_mannheim/korap/web/SearchKrillTest.java b/src/test/java/de/ids_mannheim/korap/web/SearchKrillTest.java
index 8164c30..7339292 100644
--- a/src/test/java/de/ids_mannheim/korap/web/SearchKrillTest.java
+++ b/src/test/java/de/ids_mannheim/korap/web/SearchKrillTest.java
@@ -57,7 +57,7 @@
 
     @Test
     public void testSearch () throws KustvaktException {
-        QuerySerializer s = new QuerySerializer();
+        QuerySerializer s = new QuerySerializer(API_VERSION_DOUBLE);
         s.setQuery("[orth=der]", "poliqarp");
         String result = krill.search(s.toJSON());
         JsonNode node = JsonUtils.readTree(result);
@@ -67,7 +67,7 @@
 
     @Test
     public void testTimeOut () throws KustvaktException {
-        QuerySerializer s = new QuerySerializer();
+        QuerySerializer s = new QuerySerializer(API_VERSION_DOUBLE);
         s.setQuery("[orth=der]", "poliqarp");
         // s.setQuery("node ->malt/d[func=/.*/] node", "annis");
         MetaQueryBuilder meta = new MetaQueryBuilder();
diff --git a/src/test/java/de/ids_mannheim/korap/web/controller/InfoControllerTest.java b/src/test/java/de/ids_mannheim/korap/web/controller/InfoControllerTest.java
index ab60ba3..d8e5416 100644
--- a/src/test/java/de/ids_mannheim/korap/web/controller/InfoControllerTest.java
+++ b/src/test/java/de/ids_mannheim/korap/web/controller/InfoControllerTest.java
@@ -39,7 +39,7 @@
                 node.at("/kustvakt_version").asText());
         assertEquals(krill.getIndex().getVersion(),
                 node.at("/krill_version").asText());
-        QuerySerializer s = new QuerySerializer();
+        QuerySerializer s = new QuerySerializer(API_VERSION_DOUBLE);
         assertEquals(s.getVersion(), node.at("/koral_version").asText());
     }
 }
