diff --git a/Changes b/Changes
index f9faab0..d2eeb46 100644
--- a/Changes
+++ b/Changes
@@ -11,6 +11,7 @@
 - Add API version to ResourceParser & ServiceInfo (#806)
 - Update Query QuerySerializer with API version in the test suite (#806)
 - Add API version to KoralCollectionQueryBuilder (#806)
+- Clean up collection node from Krill response (#806)
 
 # version 0.79.1
 
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 13db3ac..97bcc70 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
@@ -126,7 +126,7 @@
     }
 
     @SuppressWarnings("unchecked")
-	public String search (double requestedVersion, String engine, 
+	public String search (double apiVersion, String engine, 
 			String username, HttpHeaders headers,
 			String q, String ql, String v, List<String> cqList, String fields,
 			String pipes, String responsePipes, Integer pageIndex,
@@ -149,7 +149,7 @@
             user.setCorpusAccess(CorpusAccess.ALL);
         }
 
-        QuerySerializer serializer = new QuerySerializer(requestedVersion);
+        QuerySerializer serializer = new QuerySerializer(apiVersion);
         serializer.setQuery(q, ql, v);
         String cq = combineMultipleCorpusQuery(cqList);
         if (cq != null)
@@ -170,7 +170,6 @@
         }
 
         String query = serializer.toJSON();
-
         if (accessRewriteDisabled && showTokens) {
             query = addWarning(query, StatusCodes.NOT_ALLOWED,
                     "Tokens cannot be shown without access.");
@@ -189,7 +188,7 @@
         if (config.isTotalResultCacheEnabled() && !hasCutOff) {
             query = precheckTotalResultCache(hashedKoralQuery, query);
         }
-
+        
         KustvaktConfiguration.BACKENDS searchEngine = this.config
                 .chooseBackend(engine);
         String result;
@@ -212,12 +211,27 @@
             result = removeCutOff(result);
         }
         
+        checkApiVersion(result, apiVersion);
+        
         // Response pipe rewrite
         result = runPipes(result, responsePipes);
         return result;
 
     }
     
+    private String checkApiVersion (String result, double apiVersion) 
+    		throws KustvaktException {
+    	ObjectNode resultNode = (ObjectNode) JsonUtils.readTree(result);
+    	if (apiVersion >=1.1) {
+    		resultNode.remove("collection");
+    	}
+    	else {
+    		resultNode.remove("corpus");
+            // add API deprecation warning ?
+    	}
+        return resultNode.toString();
+	}
+    
     private String removeCutOff (String result) throws KustvaktException {
         ObjectNode resultNode = (ObjectNode) JsonUtils.readTree(result);
         ObjectNode meta = (ObjectNode) resultNode.at("/meta");
