diff --git a/src/main/java/de/ids_mannheim/korap/core/service/SearchService.java b/src/main/java/de/ids_mannheim/korap/core/service/SearchService.java
index 97bcc70..4624720 100644
--- a/src/main/java/de/ids_mannheim/korap/core/service/SearchService.java
+++ b/src/main/java/de/ids_mannheim/korap/core/service/SearchService.java
@@ -102,11 +102,12 @@
         // return ss.toJSON();
 
         String query = ss.toJSON();
-        query = rewriteHandler.processQuery(ss.toJSON(), null);
+        query = rewriteHandler.processQuery(ss.toJSON(), null, apiVersion);
         return query;
     }
 
-    public String search (String jsonld, String username, HttpHeaders headers)
+    public String search (String jsonld, String username, HttpHeaders headers, 
+    		double apiVersion)
             throws KustvaktException {
 
         User user = createUser(username, headers);
@@ -117,7 +118,7 @@
             user.setCorpusAccess(CorpusAccess.ALL);
         }
 
-        String query = this.rewriteHandler.processQuery(jsonld, user);
+        String query = this.rewriteHandler.processQuery(jsonld, user, apiVersion);
         // MH: todo: should be possible to add the meta part to
         // the query serialization
         // User user = controller.getUser(ctx.getUsername());
@@ -178,7 +179,7 @@
         // Query pipe rewrite
         query = runPipes(query, pipes);
 
-        query = this.rewriteHandler.processQuery(query, user);
+        query = this.rewriteHandler.processQuery(query, user, apiVersion);
         if (DEBUG) {
             jlog.debug("the serialized query " + query);
         }
diff --git a/src/main/java/de/ids_mannheim/korap/core/service/StatisticService.java b/src/main/java/de/ids_mannheim/korap/core/service/StatisticService.java
index aae79dd..173981b 100644
--- a/src/main/java/de/ids_mannheim/korap/core/service/StatisticService.java
+++ b/src/main/java/de/ids_mannheim/korap/core/service/StatisticService.java
@@ -25,7 +25,7 @@
 		//System.out.println("Before:" + json + "\n");
 		if (!cqList.isEmpty() && !combineMultipleCorpusQuery(cqList).isEmpty()) {
 			User user = createUser(username, headers);
-			json = statisticsRewriteHandler.processQuery(json, user);
+			json = statisticsRewriteHandler.processQuery(json, user, apiVersion);
 		}
 		//System.out.println("After:" + json);
 		String stats = searchKrill.getStatistics(json);
diff --git a/src/main/java/de/ids_mannheim/korap/core/web/controller/SearchController.java b/src/main/java/de/ids_mannheim/korap/core/web/controller/SearchController.java
index 6dc08d6..e2613ce 100644
--- a/src/main/java/de/ids_mannheim/korap/core/web/controller/SearchController.java
+++ b/src/main/java/de/ids_mannheim/korap/core/web/controller/SearchController.java
@@ -166,6 +166,7 @@
     @Produces(MediaType.APPLICATION_JSON + ";charset=utf-8")
     //@SearchResourceFilters
     public Response searchPost (@Context SecurityContext context,
+    		@Context ContainerRequestContext requestContext,
             @Context Locale locale, @Context HttpHeaders headers,
             String jsonld) {
 
@@ -173,11 +174,16 @@
             jlog.debug("Serialized search: " + jsonld);
         }
 
+        List<PathSegment> pathSegments = requestContext.getUriInfo()
+    			.getPathSegments();
+        String version = pathSegments.get(0).getPath();
+        double requestedVersion = Double.parseDouble(version.substring(1));
+        
         TokenContext ctx = (TokenContext) context.getUserPrincipal();
         try {
             scopeService.verifyScope(ctx, OAuth2Scope.SEARCH);
             String result = searchService.search(jsonld, ctx.getUsername(),
-                    headers);
+                    headers, requestedVersion);
             return Response.ok(result).build();
         }
         catch (KustvaktException e) {
diff --git a/src/main/java/de/ids_mannheim/korap/rewrite/AvailabilityRewrite.java b/src/main/java/de/ids_mannheim/korap/rewrite/AvailabilityRewrite.java
index d0c0f38..764abc8 100644
--- a/src/main/java/de/ids_mannheim/korap/rewrite/AvailabilityRewrite.java
+++ b/src/main/java/de/ids_mannheim/korap/rewrite/AvailabilityRewrite.java
@@ -44,8 +44,6 @@
 
     public static Logger jlog = LogManager.getLogger(AvailabilityRewrite.class);
     
-    private double apiVersion = 1.1; 
-
     public AvailabilityRewrite () {
         super();
     }
@@ -107,7 +105,8 @@
 
 	@Override
 	public KoralNode rewriteQuery (KoralNode koralNode,
-			KustvaktConfiguration config, User user) throws KustvaktException {
+			KustvaktConfiguration config, User user, double apiVersion) 
+			throws KustvaktException {
 		JsonNode jsonNode = koralNode.rawNode();
 
         FullConfiguration fullConfig = (FullConfiguration) config;
diff --git a/src/main/java/de/ids_mannheim/korap/rewrite/CollectionCleanRewrite.java b/src/main/java/de/ids_mannheim/korap/rewrite/CollectionCleanRewrite.java
index 0ac1de3..3955209 100644
--- a/src/main/java/de/ids_mannheim/korap/rewrite/CollectionCleanRewrite.java
+++ b/src/main/java/de/ids_mannheim/korap/rewrite/CollectionCleanRewrite.java
@@ -22,7 +22,7 @@
 
     @Override
     public KoralNode rewriteQuery (KoralNode node, KustvaktConfiguration config,
-            User user) {
+            User user, double apiVersion) {
         JsonNode jsonNode = process(node.rawNode());
         return node.wrapNode(jsonNode);
     }
diff --git a/src/main/java/de/ids_mannheim/korap/rewrite/CollectionConstraint.java b/src/main/java/de/ids_mannheim/korap/rewrite/CollectionConstraint.java
index 6342dbb..cc9b774 100644
--- a/src/main/java/de/ids_mannheim/korap/rewrite/CollectionConstraint.java
+++ b/src/main/java/de/ids_mannheim/korap/rewrite/CollectionConstraint.java
@@ -19,7 +19,7 @@
 
     @Override
     public KoralNode rewriteQuery (KoralNode node, KustvaktConfiguration config,
-            User user) {
+            User user, double apiVersion) {
         if (node.get("@type").equals("koral:doc")) {
             if (node.get("key").equals(Attributes.CORPUS_SIGLE)) {
                 String id = node.get("value");
diff --git a/src/main/java/de/ids_mannheim/korap/rewrite/FoundryInject.java b/src/main/java/de/ids_mannheim/korap/rewrite/FoundryInject.java
index 846d2e5..f57bbeb 100644
--- a/src/main/java/de/ids_mannheim/korap/rewrite/FoundryInject.java
+++ b/src/main/java/de/ids_mannheim/korap/rewrite/FoundryInject.java
@@ -20,14 +20,14 @@
 
     @Override
     public KoralNode rewriteQuery (KoralNode koralNode, KustvaktConfiguration config,
-            User user) throws KustvaktException {
+            User user, double apiVersion) throws KustvaktException {
 
     	// EM: I don't know the purpose of the following code and it is not 
     	// tested
         if (koralNode.get("@type").equals("koral:span")) {
             if (!koralNode.isMissingNode("/wrap")) {
                 koralNode = koralNode.at("/wrap");
-                JsonNode term = rewriteQuery(koralNode, config, user).rawNode();
+                JsonNode term = rewriteQuery(koralNode, config, user, apiVersion).rawNode();
                 koralNode.replaceAt("/wrap", term,
                         new RewriteIdentifier("koral:term", "replace", ""));
             }
diff --git a/src/main/java/de/ids_mannheim/korap/rewrite/FoundryRewrite.java b/src/main/java/de/ids_mannheim/korap/rewrite/FoundryRewrite.java
index c59097c..743daf0 100644
--- a/src/main/java/de/ids_mannheim/korap/rewrite/FoundryRewrite.java
+++ b/src/main/java/de/ids_mannheim/korap/rewrite/FoundryRewrite.java
@@ -19,7 +19,7 @@
 
     @Override
     public KoralNode rewriteQuery (KoralNode node, KustvaktConfiguration config,
-            User user) throws KustvaktException {
+            User user, double apiVersion) throws KustvaktException {
         String username = user.getUsername();
         String jsonSettings = settingService.retrieveDefaultSettings(username);
         if (jsonSettings != null) {
@@ -27,6 +27,6 @@
                     jsonSettings);
             user.setUserSettingProcessor(processor);
         }
-        return super.rewriteQuery(node, config, user);
+        return super.rewriteQuery(node, config, user, apiVersion);
     }
 }
diff --git a/src/main/java/de/ids_mannheim/korap/rewrite/IdWriter.java b/src/main/java/de/ids_mannheim/korap/rewrite/IdWriter.java
index 113c176..bc98530 100644
--- a/src/main/java/de/ids_mannheim/korap/rewrite/IdWriter.java
+++ b/src/main/java/de/ids_mannheim/korap/rewrite/IdWriter.java
@@ -1,8 +1,7 @@
 package de.ids_mannheim.korap.rewrite;
 
 import com.fasterxml.jackson.databind.JsonNode;
-import de.ids_mannheim.korap.config.BeanInjectable;
-import de.ids_mannheim.korap.config.ContextHolder;
+
 import de.ids_mannheim.korap.config.KustvaktConfiguration;
 import de.ids_mannheim.korap.user.User;
 
@@ -20,7 +19,7 @@
 
     @Override
     public KoralNode rewriteQuery (KoralNode node, KustvaktConfiguration config,
-            User user) {
+            User user, double apiVersion) {
         if (node.get("@type").equals("koral:token")) {
             String s = extractToken(node.rawNode());
             if (s != null && !s.isEmpty())
diff --git a/src/main/java/de/ids_mannheim/korap/rewrite/MetaConstraint.java b/src/main/java/de/ids_mannheim/korap/rewrite/MetaConstraint.java
index 2838f67..a3c17d9 100644
--- a/src/main/java/de/ids_mannheim/korap/rewrite/MetaConstraint.java
+++ b/src/main/java/de/ids_mannheim/korap/rewrite/MetaConstraint.java
@@ -1,7 +1,7 @@
 package de.ids_mannheim.korap.rewrite;
 
 import com.fasterxml.jackson.databind.JsonNode;
-import de.ids_mannheim.korap.config.BeanInjectable;
+
 import de.ids_mannheim.korap.config.KustvaktConfiguration;
 import de.ids_mannheim.korap.user.User;
 
@@ -13,7 +13,7 @@
 
     @Override
     public KoralNode rewriteQuery (KoralNode node, KustvaktConfiguration config,
-            User user) {
+            User user, double apiVersion) {
         // redundant
         if (node.rawNode().has("meta")) {
             JsonNode meta = node.rawNode().path("meta");
diff --git a/src/main/java/de/ids_mannheim/korap/rewrite/QueryContextRewrite.java b/src/main/java/de/ids_mannheim/korap/rewrite/QueryContextRewrite.java
index e5f3bee..6e7fa1c 100644
--- a/src/main/java/de/ids_mannheim/korap/rewrite/QueryContextRewrite.java
+++ b/src/main/java/de/ids_mannheim/korap/rewrite/QueryContextRewrite.java
@@ -19,7 +19,7 @@
 
     @Override
     public KoralNode rewriteQuery (KoralNode node, KustvaktConfiguration config,
-            User user) throws KustvaktException {
+            User user, double apiVersion) throws KustvaktException {
         
         if (config.getMaxTokenContext() > 0) {
             boolean isContextCut = false;
diff --git a/src/main/java/de/ids_mannheim/korap/rewrite/QueryReferenceRewrite.java b/src/main/java/de/ids_mannheim/korap/rewrite/QueryReferenceRewrite.java
index e5f6a36..7b4d2b3 100644
--- a/src/main/java/de/ids_mannheim/korap/rewrite/QueryReferenceRewrite.java
+++ b/src/main/java/de/ids_mannheim/korap/rewrite/QueryReferenceRewrite.java
@@ -31,7 +31,7 @@
 
     @Override
     public KoralNode rewriteQuery (KoralNode node, KustvaktConfiguration config,
-            User user) throws KustvaktException {
+            User user, double apiVersion) throws KustvaktException {
         if (node.has("query")) {
             node = node.at("/query");
             findQueryRef(user.getUsername(), node);
diff --git a/src/main/java/de/ids_mannheim/korap/rewrite/RewriteHandler.java b/src/main/java/de/ids_mannheim/korap/rewrite/RewriteHandler.java
index 6bad856..29e27cb 100644
--- a/src/main/java/de/ids_mannheim/korap/rewrite/RewriteHandler.java
+++ b/src/main/java/de/ids_mannheim/korap/rewrite/RewriteHandler.java
@@ -99,7 +99,7 @@
      * @return boolean if rewriter class was successfully added to
      *         rewrite handler!
      */
-    @Deprecated
+    // EM: MH marked this as @Deprecated
     public boolean add (Class<? extends RewriteTask> rewriter) {
         RewriteTask task;
         try {
@@ -114,27 +114,27 @@
         return addProcessor(task);
     }
 
-    public String processQuery (JsonNode root, User user)
+    public String processQuery (JsonNode root, User user, double apiVersion)
             throws KustvaktException {
         RewriteProcess process = new RewriteProcess(root, user);
-        JsonNode pre = process.start(false);
+        JsonNode pre = process.start(false, apiVersion);
         return JsonUtils.toJSON(pre);
     }
 
-    public String processQuery (String json, User user)
+    public String processQuery (String json, User user, double apiVersion)
             throws KustvaktException {
-        return processQuery(JsonUtils.readTree(json), user);
+        return processQuery(JsonUtils.readTree(json), user, apiVersion);
     }
 
-    public String processResult (String json, User user)
+    public String processResult (String json, User user, double apiVersion)
             throws KustvaktException {
-        return processResult(JsonUtils.readTree(json), user);
+        return processResult(JsonUtils.readTree(json), user, apiVersion);
     }
 
-    public String processResult (JsonNode node, User user)
+    public String processResult (JsonNode node, User user, double apiVersion)
             throws KustvaktException {
         RewriteProcess process = new RewriteProcess(node, user);
-        JsonNode pre = process.start(true);
+        JsonNode pre = process.start(true, apiVersion);
         return JsonUtils.toJSON(pre);
     }
 
@@ -161,7 +161,7 @@
         }
 
         private KoralNode processNode (String key, JsonNode value,
-                boolean result) throws KustvaktException {
+                boolean result, double apiVersion) throws KustvaktException {
             KoralNode kroot = KoralNode.wrapNode(value);
             if (value.isObject()) {
                 if (value.has("operands")) {
@@ -169,7 +169,7 @@
                     Iterator<JsonNode> it = ops.elements();
                     while (it.hasNext()) {
                         JsonNode next = it.next();
-                        KoralNode kn = processNode(key, next, result);
+                        KoralNode kn = processNode(key, next, result, apiVersion);
                         if (kn.isRemove())
                             it.remove();
                     }
@@ -177,19 +177,19 @@
                 else if (value.path("@type").asText().equals("koral:token")) {
                     // todo: koral:token nodes cannot be flagged for deletion --> creates the possibility for empty koral:token nodes
                     rewrite(key, kroot,
-                            RewriteHandler.this.token_node_processors, result);
-                    return processNode(key, value.path("wrap"), result);
+                            RewriteHandler.this.token_node_processors, result, apiVersion);
+                    return processNode(key, value.path("wrap"), result, apiVersion);
                 }
                 else {
                     return rewrite(key, kroot,
-                            RewriteHandler.this.node_processors, result);
+                            RewriteHandler.this.node_processors, result, apiVersion);
                 }
             }
             else if (value.isArray()) {
                 Iterator<JsonNode> it = value.elements();
                 while (it.hasNext()) {
                     JsonNode next = it.next();
-                    KoralNode kn = processNode(key, next, result);
+                    KoralNode kn = processNode(key, next, result, apiVersion);
                     if (kn.isRemove())
                         it.remove();
                 }
@@ -197,7 +197,7 @@
             return kroot;
         }
 
-        private JsonNode start (boolean result) throws KustvaktException {
+        private JsonNode start (boolean result, double apiVersion) throws KustvaktException {
             if (DEBUG) {
                 jlog.debug("Running rewrite process on query " + root);
             }
@@ -205,10 +205,10 @@
                 Iterator<Map.Entry<String, JsonNode>> it = root.fields();
                 while (it.hasNext()) {
                     Map.Entry<String, JsonNode> next = it.next();
-                    processNode(next.getKey(), next.getValue(), result);
+                    processNode(next.getKey(), next.getValue(), result, apiVersion);
                 }
                 processFixedNode(root, RewriteHandler.this.query_processors,
-                        result);
+                        result, apiVersion);
             }
             return root;
         }
@@ -216,12 +216,13 @@
         /**
          * @param node
          * @param tasks
+         * @param apiVersion 
          * @return boolean true if node is to be removed from parent!
          *         Only
          *         applies if parent is an array node
          */
         private KoralNode rewrite (String rootNode, KoralNode node,
-                Collection<? extends RewriteTask> tasks, boolean result)
+                Collection<? extends RewriteTask> tasks, boolean result, double apiVersion)
                 throws KustvaktException {
             if (RewriteHandler.this.config == null)
                 throw new RuntimeException(
@@ -249,7 +250,7 @@
                 }
                 if (!result && task instanceof RewriteTask.RewriteQuery) {
                     ((RewriteTask.RewriteQuery) task).rewriteQuery(node,
-                            RewriteHandler.this.config, this.user);
+                            RewriteHandler.this.config, this.user, apiVersion);
                 }
                 else if (task instanceof RewriteTask.RewriteResult) {
                     ((RewriteTask.RewriteResult) task).rewriteResult(node);
@@ -267,7 +268,7 @@
 
         // fixme: merge with processNode!
         private void processFixedNode (JsonNode node,
-                Collection<RewriteTask> tasks, boolean post)
+                Collection<RewriteTask> tasks, boolean post, double apiVersion)
                 throws KustvaktException {
             for (RewriteTask task : tasks) {
                 KoralNode next = KoralNode.wrapNode(node);
@@ -280,7 +281,7 @@
 
                 if (!post & task instanceof RewriteTask.RewriteQuery)
                     next = ((RewriteTask.RewriteQuery) task).rewriteQuery(next,
-                            RewriteHandler.this.config, user);
+                            RewriteHandler.this.config, user, apiVersion);
                 else if (task instanceof RewriteTask.RewriteResult)
                     ((RewriteTask.RewriteResult) task).rewriteResult(next);
                 next.buildRewrites();
diff --git a/src/main/java/de/ids_mannheim/korap/rewrite/RewriteTask.java b/src/main/java/de/ids_mannheim/korap/rewrite/RewriteTask.java
index b015c0e..feec93a 100644
--- a/src/main/java/de/ids_mannheim/korap/rewrite/RewriteTask.java
+++ b/src/main/java/de/ids_mannheim/korap/rewrite/RewriteTask.java
@@ -26,10 +26,12 @@
          *            injected by rewrite handler if available. Might
          *            cause {@link NullPointerException} if not
          *            checked properly
+         * @param apiVersion
+         *            the version of the API
          * @return
          */
         KoralNode rewriteQuery (KoralNode node, KustvaktConfiguration config,
-                User user) throws KustvaktException;
+                User user, double apiVersion) throws KustvaktException;
 
     }
 
diff --git a/src/main/java/de/ids_mannheim/korap/rewrite/TimeoutRewrite.java b/src/main/java/de/ids_mannheim/korap/rewrite/TimeoutRewrite.java
index 1cdfd2f..eddfcd3 100644
--- a/src/main/java/de/ids_mannheim/korap/rewrite/TimeoutRewrite.java
+++ b/src/main/java/de/ids_mannheim/korap/rewrite/TimeoutRewrite.java
@@ -9,7 +9,7 @@
 
 	@Override
 	public KoralNode rewriteQuery (KoralNode node, KustvaktConfiguration config,
-			User user) throws KustvaktException {
+			User user, double apiVersion) throws KustvaktException {
 		CorpusAccess access = user.getCorpusAccess();
 		if (node.has("meta")) {
             node = node.at("/meta");
diff --git a/src/main/java/de/ids_mannheim/korap/rewrite/TreeConstraint.java b/src/main/java/de/ids_mannheim/korap/rewrite/TreeConstraint.java
index 81f254a..a7d0983 100644
--- a/src/main/java/de/ids_mannheim/korap/rewrite/TreeConstraint.java
+++ b/src/main/java/de/ids_mannheim/korap/rewrite/TreeConstraint.java
@@ -59,7 +59,7 @@
 
     @Override
     public KoralNode rewriteQuery (KoralNode node, KustvaktConfiguration config,
-            User user) {
+            User user, double apiVersion) {
         System.out.println("FIND PATH " + node.rawNode().findParent(pointer));
 
         return node;
diff --git a/src/main/java/de/ids_mannheim/korap/rewrite/VirtualCorpusRewrite.java b/src/main/java/de/ids_mannheim/korap/rewrite/VirtualCorpusRewrite.java
index ccdc704..7792c88 100644
--- a/src/main/java/de/ids_mannheim/korap/rewrite/VirtualCorpusRewrite.java
+++ b/src/main/java/de/ids_mannheim/korap/rewrite/VirtualCorpusRewrite.java
@@ -31,7 +31,7 @@
 
     @Override
     public KoralNode rewriteQuery (KoralNode node, KustvaktConfiguration config,
-            User user) throws KustvaktException {
+            User user, double apiVersion) throws KustvaktException {
     	if (node.has("corpus")) {
             node = node.at("/corpus");
             findVCRef(user.getUsername(), node);
