diff --git a/Changes b/Changes
index 5f1f4fe..a1d8465 100644
--- a/Changes
+++ b/Changes
@@ -6,6 +6,7 @@
 - Remove deprecated user-group web-services for API v1.1 (#769)
 - Remove deprecated vc web-services for API v1.1 (#771)
 - Remove deprecated authorized_only parameter in the client list API for v1.1 (#760)
+- Add API version to the QueryService (#806)
 
 # version 0.79.1
 
diff --git a/src/main/java/de/ids_mannheim/korap/init/Initializator.java b/src/main/java/de/ids_mannheim/korap/init/Initializator.java
index 02a141d..586f275 100644
--- a/src/main/java/de/ids_mannheim/korap/init/Initializator.java
+++ b/src/main/java/de/ids_mannheim/korap/init/Initializator.java
@@ -79,7 +79,7 @@
 		q.setQuery("[]");
 		q.setDescription("\"system\" query");
 		q.setQueryType(QueryType.QUERY);
-		queryService.handlePutRequest("system", "system", "system-q", q);
+		queryService.handlePutRequest("system", "system", "system-q", q, 1.1);
 	}
 
     public void initResourceTest () throws IOException, KustvaktException {
diff --git a/src/main/java/de/ids_mannheim/korap/service/QueryService.java b/src/main/java/de/ids_mannheim/korap/service/QueryService.java
index 344ba6f..faf5375 100644
--- a/src/main/java/de/ids_mannheim/korap/service/QueryService.java
+++ b/src/main/java/de/ids_mannheim/korap/service/QueryService.java
@@ -223,23 +223,27 @@
     }
 
     public Status handlePutRequest (String username, String queryCreator,
-            String queryName, QueryJson queryJson) throws KustvaktException {
+            String queryName, QueryJson queryJson, double apiVersion) 
+            		throws KustvaktException {
 
         verifyUsername(username, queryCreator);
         QueryDO query = queryDao.retrieveQueryByName(queryName, queryCreator);
 
         if (query == null) {
-            storeQuery(queryJson, queryName, queryCreator, username);
+            storeQuery(queryJson, queryName, queryCreator, username, 
+            		apiVersion);
             return Status.CREATED;
         }
         else {
-            editQuery(query, queryJson, queryName, username);
+            editQuery(query, queryJson, queryName, username, 
+            		apiVersion);
             return Status.NO_CONTENT;
         }
     }
 
     public void editQuery (QueryDO existingQuery, QueryJson newQuery,
-            String queryName, String username) throws KustvaktException {
+            String queryName, String username, double apiVersion) 
+    		throws KustvaktException {
 
         if (!username.equals(existingQuery.getCreatedBy())
                 && !adminDao.isAdmin(username)) {
@@ -253,13 +257,13 @@
         String query = newQuery.getQuery();
         String queryLanguage = newQuery.getQueryLanguage();
         if (corpusQuery != null && !corpusQuery.isEmpty()) {
-            koralQuery = serializeCorpusQuery(corpusQuery);
+            koralQuery = serializeCorpusQuery(corpusQuery, apiVersion);
             requiredAccess = determineRequiredAccess(newQuery.isCached(),
                     queryName, koralQuery);
         }
         else if (query != null && !query.isEmpty() && queryLanguage != null
                 && !queryLanguage.isEmpty()) {
-            koralQuery = serializeQuery(query, queryLanguage);
+            koralQuery = serializeQuery(query, queryLanguage, apiVersion);
         }
 
         ResourceType type = newQuery.getType();
@@ -311,7 +315,8 @@
     }
 
     public void storeQuery (QueryJson query, String queryName,
-            String queryCreator, String username) throws KustvaktException {
+            String queryCreator, String username, double apiVersion) 
+            		throws KustvaktException {
         QueryType queryType = query.getQueryType();
         if (!checkNumberOfQueryLimit(username, queryType)) {
             String type = queryType.displayName().toLowerCase();
@@ -320,7 +325,7 @@
                             + type + " has been reached.");
         }
 
-        String koralQuery = computeKoralQuery(query);
+        String koralQuery = computeKoralQuery(query, apiVersion);
         storeQuery(username, queryName, query.getType(), query.getQueryType(),
                 koralQuery, query.getDefinition(), query.getDescription(),
                 query.getStatus(), query.isCached(), queryCreator,
@@ -336,19 +341,20 @@
             return false;
     }
 
-    private String computeKoralQuery (QueryJson query)
+    private String computeKoralQuery (QueryJson query, double apiVersion)
             throws KustvaktException {
         if (query.getQueryType().equals(QueryType.VIRTUAL_CORPUS)) {
             ParameterChecker.checkStringValue(query.getCorpusQuery(),
                     "corpusQuery");
-            return serializeCorpusQuery(query.getCorpusQuery());
+            return serializeCorpusQuery(query.getCorpusQuery(), apiVersion);
         }
 
         if (query.getQueryType().equals(QueryType.QUERY)) {
             ParameterChecker.checkStringValue(query.getQuery(), "query");
             ParameterChecker.checkStringValue(query.getQueryLanguage(),
                     "queryLanguage");
-            return serializeQuery(query.getQuery(), query.getQueryLanguage());
+            return serializeQuery(query.getQuery(), query.getQueryLanguage(), 
+            		apiVersion);
         }
 
         return null;
@@ -434,9 +440,9 @@
         }
     }
 
-    public String serializeCorpusQuery (String corpusQuery)
+    public String serializeCorpusQuery (String corpusQuery, double apiVersion)
             throws KustvaktException {
-        QuerySerializer serializer = new QuerySerializer();
+        QuerySerializer serializer = new QuerySerializer(apiVersion);
         serializer.setCollection(corpusQuery);
         String koralQuery;
         try {
@@ -452,9 +458,10 @@
         return koralQuery;
     }
 
-    private String serializeQuery (String query, String queryLanguage)
+    private String serializeQuery (String query, String queryLanguage, double 
+    		apiVersion)
             throws KustvaktException {
-        QuerySerializer serializer = new QuerySerializer();
+        QuerySerializer serializer = new QuerySerializer(apiVersion);
         String koralQuery;
         koralQuery = serializer.setQuery(query, queryLanguage).toJSON();
         if (DEBUG) {
diff --git a/src/main/java/de/ids_mannheim/korap/web/controller/QueryReferenceController.java b/src/main/java/de/ids_mannheim/korap/web/controller/QueryReferenceController.java
index 0be121d..faf2a73 100644
--- a/src/main/java/de/ids_mannheim/korap/web/controller/QueryReferenceController.java
+++ b/src/main/java/de/ids_mannheim/korap/web/controller/QueryReferenceController.java
@@ -28,8 +28,10 @@
 import jakarta.ws.rs.PathParam;
 import jakarta.ws.rs.Produces;
 import jakarta.ws.rs.QueryParam;
+import jakarta.ws.rs.container.ContainerRequestContext;
 import jakarta.ws.rs.core.Context;
 import jakarta.ws.rs.core.MediaType;
+import jakarta.ws.rs.core.PathSegment;
 import jakarta.ws.rs.core.Response;
 import jakarta.ws.rs.core.Response.Status;
 import jakarta.ws.rs.core.SecurityContext;
@@ -83,10 +85,16 @@
     @Path("/~{qCreator}/{qName}")
     @Consumes(MediaType.APPLICATION_JSON + ";charset=utf-8")
     public Response createQuery (@Context SecurityContext securityContext,
+    		@Context ContainerRequestContext requestContext,
             @PathParam("qCreator") String qCreator,
             @PathParam("qName") String qName, QueryJson query)
             throws KustvaktException {
 
+    	List<PathSegment> pathSegments = requestContext.getUriInfo()
+    			.getPathSegments();
+        String version = pathSegments.get(0).getPath();
+        double requestedVersion = Double.parseDouble(version.substring(1));
+        
         TokenContext context = (TokenContext) securityContext
                 .getUserPrincipal();
 
@@ -97,7 +105,7 @@
                 query.setQueryType(QueryType.QUERY);
             }
             Status status = service.handlePutRequest(context.getUsername(),
-                    qCreator, qName, query);
+                    qCreator, qName, query, requestedVersion);
             return Response.status(status).build();
         }
         catch (KustvaktException e) {
diff --git a/src/main/java/de/ids_mannheim/korap/web/controller/VirtualCorpusController.java b/src/main/java/de/ids_mannheim/korap/web/controller/VirtualCorpusController.java
index 522cedb..1374278 100644
--- a/src/main/java/de/ids_mannheim/korap/web/controller/VirtualCorpusController.java
+++ b/src/main/java/de/ids_mannheim/korap/web/controller/VirtualCorpusController.java
@@ -36,8 +36,10 @@
 import jakarta.ws.rs.PathParam;
 import jakarta.ws.rs.Produces;
 import jakarta.ws.rs.QueryParam;
+import jakarta.ws.rs.container.ContainerRequestContext;
 import jakarta.ws.rs.core.Context;
 import jakarta.ws.rs.core.MediaType;
+import jakarta.ws.rs.core.PathSegment;
 import jakarta.ws.rs.core.Response;
 import jakarta.ws.rs.core.Response.Status;
 import jakarta.ws.rs.core.SecurityContext;
@@ -102,12 +104,18 @@
     @Path("/~{vcCreator}/{vcName}")
     @Consumes(MediaType.APPLICATION_JSON + ";charset=utf-8")
     public Response createUpdateVC (@Context SecurityContext securityContext,
+    		@Context ContainerRequestContext requestContext,
             @PathParam("vcCreator") String vcCreator,
             @PathParam("vcName") String vcName, QueryJson vc)
             throws KustvaktException {
         TokenContext context = (TokenContext) securityContext
                 .getUserPrincipal();
-
+        
+        List<PathSegment> pathSegments = requestContext.getUriInfo()
+    			.getPathSegments();
+        String version = pathSegments.get(0).getPath();
+        double apiVersion = Double.parseDouble(version.substring(1));
+        
         try {
             scopeService.verifyScope(context, OAuth2Scope.CREATE_VC);
             ParameterChecker.checkObjectValue(vc, "request entity");
@@ -115,7 +123,7 @@
                 vc.setQueryType(QueryType.VIRTUAL_CORPUS);
             }
             Status status = service.handlePutRequest(context.getUsername(),
-                    vcCreator, vcName, vc);
+                    vcCreator, vcName, vc, apiVersion);
             return Response.status(status).build();
         }
         catch (KustvaktException e) {
