diff --git a/Changes b/Changes
index f9e67dc..5c6eb17 100644
--- a/Changes
+++ b/Changes
@@ -1,3 +1,7 @@
+# version 0.73.3-SNAPSHOT
+
+- Remove corpusQuery param in the statistics web-service (close #758).
+
 # version 0.73.2
 
 - Added tests for the DNB scenario with custom max match 
diff --git a/pom.xml b/pom.xml
index cb14187..069413d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
 	<modelVersion>4.0.0</modelVersion>
 	<groupId>de.ids-mannheim.korap.kustvakt</groupId>
 	<artifactId>Kustvakt</artifactId>
-	<version>0.73.2</version>
+	<version>0.73.3-SNAPSHOT</version>
 	<properties>
 		<java.version>17</java.version>
 		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
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 6f0a3f0..e4451b8 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
@@ -6,12 +6,10 @@
 import org.springframework.stereotype.Service;
 
 import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.node.ObjectNode;
 
 import de.ids_mannheim.korap.config.KustvaktConfiguration;
 import de.ids_mannheim.korap.exceptions.KustvaktException;
 import de.ids_mannheim.korap.exceptions.StatusCodes;
-import de.ids_mannheim.korap.response.Notifications;
 import de.ids_mannheim.korap.utils.JsonUtils;
 import de.ids_mannheim.korap.utils.KoralCollectionQueryBuilder;
 import de.ids_mannheim.korap.web.SearchKrill;
@@ -24,8 +22,7 @@
     @Autowired
     private KustvaktConfiguration config;
 
-    public String retrieveStatisticsForCorpusQuery (List<String> cqList,
-            boolean isDeprecated) throws KustvaktException {
+    public String retrieveStatisticsForCorpusQuery (List<String> cqList) throws KustvaktException {
 
         KoralCollectionQueryBuilder builder = new KoralCollectionQueryBuilder();
         String cq = combineMultipleCorpusQuery(cqList);
@@ -40,16 +37,6 @@
         }
         String stats = searchKrill.getStatistics(json);
 
-        if (isDeprecated) {
-            Notifications n = new Notifications();
-            n.addWarning(StatusCodes.DEPRECATED,
-                    "Parameter corpusQuery is deprecated in favor of cq.");
-            ObjectNode warning = (ObjectNode) n.toJsonNode();
-            ObjectNode node = (ObjectNode) JsonUtils.readTree(stats);
-            node.setAll(warning);
-            stats = node.toString();
-        }
-
         if (stats.contains("-1")) {
             throw new KustvaktException(StatusCodes.NO_RESULT_FOUND);
         }
diff --git a/src/main/java/de/ids_mannheim/korap/core/web/controller/StatisticController.java b/src/main/java/de/ids_mannheim/korap/core/web/controller/StatisticController.java
index 0c90f2f..965f99e 100644
--- a/src/main/java/de/ids_mannheim/korap/core/web/controller/StatisticController.java
+++ b/src/main/java/de/ids_mannheim/korap/core/web/controller/StatisticController.java
@@ -65,17 +65,11 @@
      */
     @GET
     public Response getStatistics (@Context SecurityContext context,
-            @Context Locale locale, @QueryParam("cq") List<String> cq,
-            @QueryParam("corpusQuery") List<String> corpusQuery) {
+            @Context Locale locale, @QueryParam("cq") List<String> cq) {
 
         String stats;
-        boolean isDeprecated = false;
         try {
-            if (cq.isEmpty() && corpusQuery != null && !corpusQuery.isEmpty()) {
-                isDeprecated = true;
-                cq = corpusQuery;
-            }
-            stats = service.retrieveStatisticsForCorpusQuery(cq, isDeprecated);
+            stats = service.retrieveStatisticsForCorpusQuery(cq);
             if (DEBUG) {
                 jlog.debug("Stats: " + stats);
             }
diff --git a/src/test/java/de/ids_mannheim/korap/web/controller/MultipleCorpusQueryTest.java b/src/test/java/de/ids_mannheim/korap/web/controller/MultipleCorpusQueryTest.java
index 775afd8..fba3947 100644
--- a/src/test/java/de/ids_mannheim/korap/web/controller/MultipleCorpusQueryTest.java
+++ b/src/test/java/de/ids_mannheim/korap/web/controller/MultipleCorpusQueryTest.java
@@ -53,23 +53,4 @@
         assertEquals(258, node.at("/paragraphs").asInt());
         assertTrue(node.at("/warnings").isMissingNode());
     }
-
-    @Test
-    public void testStatisticsWithMultipleCorpusQuery ()
-            throws ProcessingException, KustvaktException {
-        Response response = target().path(API_VERSION).path("statistics")
-                .queryParam("corpusQuery", "textType=Autobiographie")
-                .queryParam("corpusQuery", "corpusSigle=GOE").request()
-                .method("GET");
-        assertEquals(Status.OK.getStatusCode(), response.getStatus());
-        String entity = response.readEntity(String.class);
-        JsonNode node = JsonUtils.readTree(entity);
-        assertEquals(9, node.at("/documents").asInt());
-        assertEquals(527662, node.at("/tokens").asInt());
-        assertEquals(19387, node.at("/sentences").asInt());
-        assertEquals(514, node.at("/paragraphs").asInt());
-        assertEquals(StatusCodes.DEPRECATED, node.at("/warnings/0/0").asInt());
-        assertEquals(node.at("/warnings/0/1").asText(),
-                "Parameter corpusQuery is deprecated in favor of cq.");
-    }
 }
diff --git a/src/test/java/de/ids_mannheim/korap/web/controller/StatisticsControllerTest.java b/src/test/java/de/ids_mannheim/korap/web/controller/StatisticsControllerTest.java
index ea5008f..8b2ec7c 100644
--- a/src/test/java/de/ids_mannheim/korap/web/controller/StatisticsControllerTest.java
+++ b/src/test/java/de/ids_mannheim/korap/web/controller/StatisticsControllerTest.java
@@ -29,14 +29,14 @@
             throws IOException, KustvaktException {
         String corpusQuery = "corpusSigle=WPD15";
         Response response = target().path(API_VERSION).path("statistics")
-                .queryParam("corpusQuery", corpusQuery).request().get();
+                .queryParam("cq", corpusQuery).request().get();
         assert Status.OK.getStatusCode() == response.getStatus();
         assertEquals(response.getHeaders().getFirst("X-Index-Revision"),
                 "Wes8Bd4h1OypPqbWF5njeQ==");
         String ent = response.readEntity(String.class);
         JsonNode node = JsonUtils.readTree(ent);
-        assertEquals(node.get("documents").asInt(), 0);
-        assertEquals(node.get("tokens").asInt(), 0);
+        assertEquals(0,node.get("documents").asInt());
+        assertEquals(0,node.get("tokens").asInt());
     }
 
     @Test
@@ -54,83 +54,62 @@
         assertTrue(node.at("/warnings").isMissingNode());
     }
 
-    @Test
-    public void testStatisticsWithCqAndCorpusQuery () throws KustvaktException {
-        Response response = target().path(API_VERSION).path("statistics")
-                .queryParam("cq", "textType=Abhandlung & corpusSigle=GOE")
-                .queryParam("corpusQuery",
-                        "textType=Autobiographie & corpusSigle=GOE")
-                .request().method("GET");
-        assertEquals(Status.OK.getStatusCode(), response.getStatus());
-        String query = response.readEntity(String.class);
-        JsonNode node = JsonUtils.readTree(query);
-        assertEquals(2, node.at("/documents").asInt());
-        assertEquals(138180, node.at("/tokens").asInt());
-        assertEquals(5687, node.at("/sentences").asInt());
-        assertEquals(258, node.at("/paragraphs").asInt());
-        assertTrue(node.at("/warnings").isMissingNode());
-    }
 
     @Test
     public void testGetStatisticsWithcorpusQuery1 ()
             throws IOException, KustvaktException {
         String corpusQuery = "corpusSigle=GOE";
         Response response = target().path(API_VERSION).path("statistics")
-                .queryParam("corpusQuery", corpusQuery).request().get();
+                .queryParam("cq", corpusQuery).request().get();
         assert Status.OK.getStatusCode() == response.getStatus();
         String ent = response.readEntity(String.class);
         JsonNode node = JsonUtils.readTree(ent);
-        assertEquals(node.get("documents").asInt(), 11);
-        assertEquals(node.get("tokens").asInt(), 665842);
-        assertEquals(StatusCodes.DEPRECATED, node.at("/warnings/0/0").asInt());
-        assertEquals(node.at("/warnings/0/1").asText(),
-                "Parameter corpusQuery is deprecated in favor of cq.");
+        assertEquals(11,node.get("documents").asInt());
+        assertEquals(665842,node.get("tokens").asInt());
     }
 
     @Test
     public void testGetStatisticsWithcorpusQuery2 ()
             throws IOException, KustvaktException {
         Response response = target().path(API_VERSION).path("statistics")
-                .queryParam("corpusQuery", "creationDate since 1810").request()
+                .queryParam("cq", "creationDate since 1810").request()
                 .get();
         String ent = response.readEntity(String.class);
         JsonNode node = JsonUtils.readTree(ent);
         assert Status.OK.getStatusCode() == response.getStatus();
-        assertEquals(node.get("documents").asInt(), 7);
-        assertEquals(node.get("tokens").asInt(), 279402);
-        assertEquals(node.get("sentences").asInt(), 11047);
-        assertEquals(node.get("paragraphs").asInt(), 489);
+        assertEquals(7,node.get("documents").asInt());
+        assertEquals(279402,node.get("tokens").asInt());
+        assertEquals(11047,node.get("sentences").asInt());
+        assertEquals(489,node.get("paragraphs").asInt());
     }
 
     @Test
     public void testGetStatisticsWithWrongcorpusQuery ()
             throws IOException, KustvaktException {
         Response response = target().path(API_VERSION).path("statistics")
-                .queryParam("corpusQuery", "creationDate geq 1810").request()
-                .get();
+                .queryParam("cq", "creationDate geq 1810").request().get();
         assert Status.BAD_REQUEST.getStatusCode() == response.getStatus();
         String ent = response.readEntity(String.class);
         JsonNode node = JsonUtils.readTree(ent);
-        assertEquals(node.at("/errors/0/0").asInt(), 302);
-        assertEquals(node.at("/errors/0/1").asText(),
-                "Could not parse query >>> (creationDate geq 1810) <<<.");
-        assertEquals(node.at("/errors/0/2").asText(),
-                "(creationDate geq 1810)");
+        assertEquals(302, node.at("/errors/0/0").asInt());
+        assertEquals("Could not parse query >>> (creationDate geq 1810) <<<.",
+                node.at("/errors/0/1").asText());
+        assertEquals("(creationDate geq 1810)",
+                node.at("/errors/0/2").asText());
     }
 
     @Test
     public void testGetStatisticsWithWrongcorpusQuery2 ()
             throws IOException, KustvaktException {
         Response response = target().path(API_VERSION).path("statistics")
-                .queryParam("corpusQuery", "creationDate >= 1810").request()
-                .get();
+                .queryParam("cq", "creationDate >= 1810").request().get();
         String ent = response.readEntity(String.class);
         assertEquals(Status.BAD_REQUEST.getStatusCode(), response.getStatus());
         JsonNode node = JsonUtils.readTree(ent);
-        assertEquals(node.at("/errors/0/0").asInt(), 305);
-        assertEquals(node.at("/errors/0/1").asText(),
-                "Operator >= is not acceptable.");
-        assertEquals(node.at("/errors/0/2").asText(), ">=");
+        assertEquals(305, node.at("/errors/0/0").asInt());
+        assertEquals("Operator >= is not acceptable.",
+                node.at("/errors/0/1").asText());
+        assertEquals(">=", node.at("/errors/0/2").asText());
     }
 
     @Test
@@ -178,10 +157,10 @@
         assertEquals(Status.BAD_REQUEST.getStatusCode(), response.getStatus());
         String ent = response.readEntity(String.class);
         JsonNode node = JsonUtils.readTree(ent);
-        assertEquals(node.at("/errors/0/0").asInt(),
-                de.ids_mannheim.korap.util.StatusCodes.MISSING_COLLECTION);
-        assertEquals(node.at("/errors/0/1").asText(),
-                "Collection is not found");
+        assertEquals(de.ids_mannheim.korap.util.StatusCodes.MISSING_COLLECTION,
+                node.at("/errors/0/0").asInt());
+        assertEquals("Collection is not found",
+                node.at("/errors/0/1").asText());
     }
 
     @Test
@@ -196,8 +175,8 @@
         JsonNode node = JsonUtils.readTree(ent);
         assertEquals(StatusCodes.DESERIALIZATION_FAILED,
                 node.at("/errors/0/0").asInt());
-        assertEquals(node.at("/errors/0/1").asText(),
-                "Failed deserializing json object: { \"collection\" : }");
+        assertEquals("Failed deserializing json object: { \"collection\" : }",
+                node.at("/errors/0/1").asText());
     }
 
     @Test
diff --git a/src/test/java/de/ids_mannheim/korap/web/lite/LiteMultipleCorpusQueryTest.java b/src/test/java/de/ids_mannheim/korap/web/lite/LiteMultipleCorpusQueryTest.java
index 5d93355..1b42609 100644
--- a/src/test/java/de/ids_mannheim/korap/web/lite/LiteMultipleCorpusQueryTest.java
+++ b/src/test/java/de/ids_mannheim/korap/web/lite/LiteMultipleCorpusQueryTest.java
@@ -4,16 +4,15 @@
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import org.junit.jupiter.api.Test;
-import com.fasterxml.jackson.databind.JsonNode;
 
-import jakarta.ws.rs.ProcessingException;
-import jakarta.ws.rs.core.Response;
-import jakarta.ws.rs.core.Response.Status;
+import com.fasterxml.jackson.databind.JsonNode;
 
 import de.ids_mannheim.korap.config.LiteJerseyTest;
 import de.ids_mannheim.korap.exceptions.KustvaktException;
-import de.ids_mannheim.korap.exceptions.StatusCodes;
 import de.ids_mannheim.korap.utils.JsonUtils;
+import jakarta.ws.rs.ProcessingException;
+import jakarta.ws.rs.core.Response;
+import jakarta.ws.rs.core.Response.Status;
 
 public class LiteMultipleCorpusQueryTest extends LiteJerseyTest {
 
@@ -28,15 +27,15 @@
         String entity = response.readEntity(String.class);
         JsonNode node = JsonUtils.readTree(entity);
         node = node.at("/collection");
-        assertEquals(node.at("/@type").asText(), "koral:docGroup");
-        assertEquals(node.at("/operation").asText(), "operation:and");
+        assertEquals("koral:docGroup",node.at("/@type").asText());
+        assertEquals("operation:and",node.at("/operation").asText());
         assertEquals(2, node.at("/operands").size());
-        assertEquals(node.at("/operands/0/@type").asText(), "koral:doc");
-        assertEquals(node.at("/operands/0/match").asText(), "match:eq");
-        assertEquals(node.at("/operands/0/key").asText(), "pubPlace");
-        assertEquals(node.at("/operands/0/value").asText(), "München");
-        assertEquals(node.at("/operands/1/key").asText(), "textSigle");
-        assertEquals(node.at("/operands/1/value").asText(), "GOE/AGA/01784");
+        assertEquals("koral:doc",node.at("/operands/0/@type").asText());
+        assertEquals("match:eq",node.at("/operands/0/match").asText());
+        assertEquals("pubPlace",node.at("/operands/0/key").asText());
+        assertEquals("München",node.at("/operands/0/value").asText());
+        assertEquals("textSigle",node.at("/operands/1/key").asText());
+        assertEquals("GOE/AGA/01784",node.at("/operands/1/value").asText());
     }
 
     @Test
@@ -55,22 +54,4 @@
         assertTrue(node.at("/warnings").isMissingNode());
     }
 
-    @Test
-    public void testStatisticsWithMultipleCorpusQuery ()
-            throws ProcessingException, KustvaktException {
-        Response response = target().path(API_VERSION).path("statistics")
-                .queryParam("corpusQuery", "textType=Autobiographie")
-                .queryParam("corpusQuery", "corpusSigle=GOE").request()
-                .method("GET");
-        assertEquals(Status.OK.getStatusCode(), response.getStatus());
-        String entity = response.readEntity(String.class);
-        JsonNode node = JsonUtils.readTree(entity);
-        assertEquals(9, node.at("/documents").asInt());
-        assertEquals(527662, node.at("/tokens").asInt());
-        assertEquals(19387, node.at("/sentences").asInt());
-        assertEquals(514, node.at("/paragraphs").asInt());
-        assertEquals(StatusCodes.DEPRECATED, node.at("/warnings/0/0").asInt());
-        assertEquals(node.at("/warnings/0/1").asText(),
-                "Parameter corpusQuery is deprecated in favor of cq.");
-    }
 }
diff --git a/src/test/java/de/ids_mannheim/korap/web/lite/LiteStatisticControllerTest.java b/src/test/java/de/ids_mannheim/korap/web/lite/LiteStatisticControllerTest.java
index 5fe5b1a..141aafa 100644
--- a/src/test/java/de/ids_mannheim/korap/web/lite/LiteStatisticControllerTest.java
+++ b/src/test/java/de/ids_mannheim/korap/web/lite/LiteStatisticControllerTest.java
@@ -38,44 +38,9 @@
     }
 
     @Test
-    public void testStatisticsWithCqAndCorpusQuery () throws KustvaktException {
+    public void testStatisticsEmptyCq () throws KustvaktException {
         Response response = target().path(API_VERSION).path("statistics")
-                .queryParam("cq", "textType=Abhandlung & corpusSigle=GOE")
-                .queryParam("corpusQuery",
-                        "textType=Autobiographie & corpusSigle=GOE")
-                .request().method("GET");
-        assertEquals(Status.OK.getStatusCode(), response.getStatus());
-        String query = response.readEntity(String.class);
-        JsonNode node = JsonUtils.readTree(query);
-        assertEquals(2, node.at("/documents").asInt());
-        assertEquals(138180, node.at("/tokens").asInt());
-        assertEquals(5687, node.at("/sentences").asInt());
-        assertEquals(258, node.at("/paragraphs").asInt());
-        assertTrue(node.at("/warnings").isMissingNode());
-    }
-
-    @Test
-    public void testStatisticsWithCorpusQuery () throws KustvaktException {
-        Response response = target().path(API_VERSION).path("statistics")
-                .queryParam("corpusQuery",
-                        "textType=Autobiographie & corpusSigle=GOE")
-                .request().method("GET");
-        assertEquals(Status.OK.getStatusCode(), response.getStatus());
-        String query = response.readEntity(String.class);
-        JsonNode node = JsonUtils.readTree(query);
-        assertEquals(9, node.at("/documents").asInt());
-        assertEquals(527662, node.at("/tokens").asInt());
-        assertEquals(19387, node.at("/sentences").asInt());
-        assertEquals(514, node.at("/paragraphs").asInt());
-        assertEquals(StatusCodes.DEPRECATED, node.at("/warnings/0/0").asInt());
-        assertEquals(node.at("/warnings/0/1").asText(),
-                "Parameter corpusQuery is deprecated in favor of cq.");
-    }
-
-    @Test
-    public void testEmptyStatistics () throws KustvaktException {
-        Response response = target().path(API_VERSION).path("statistics")
-                .queryParam("corpusQuery", "").request().method("GET");
+                .queryParam("cq", "").request().method("GET");
         assertEquals(Status.OK.getStatusCode(), response.getStatus());
         String query = response.readEntity(String.class);
         JsonNode node = JsonUtils.readTree(query);
diff --git a/src/test/resources/test-config.xml b/src/test/resources/test-config.xml
index cae0248..058eb31 100644
--- a/src/test/resources/test-config.xml
+++ b/src/test/resources/test-config.xml
@@ -48,6 +48,13 @@
 			</array>
 		</property>
 	</bean>
+	
+	<!-- props are injected from default-config.xml -->
+	<bean id="kustvakt_config"
+		class="de.ids_mannheim.korap.config.FullConfiguration">
+		<constructor-arg name="properties" ref="props" />
+	</bean>
+	
 
 	<!-- <bean id='cacheManager' class='org.springframework.cache.ehcache.EhCacheCacheManager' 
 		p:cacheManager-ref='ehcache' /> <bean id='ehcache' class='org.springframework.cache.ehcache.EhCacheManagerFactoryBean' 
@@ -66,25 +73,13 @@
 		<!--<property name="poolPreparedStatements" value="true"/> -->
 	</bean>
 
-<!-- <bean id="sqliteDataSource"
-		class="org.springframework.jdbc.datasource.SingleConnectionDataSource"
-		lazy-init="true">
-		<property name="driverClassName" value="${jdbc.driverClassName}" />
-		<property name="url" value="${jdbc.url}" />
-		<property name="username" value="${jdbc.username}" />
-		<property name="password" value="${jdbc.password}" />
-		<property name="connectionProperties">
-			<props>
-				<prop key="date_string_format">yyyy-MM-dd HH:mm:ss</prop>
-			</props>
-		</property>
-
-		Sqlite can only have a single connection
-		<property name="suppressClose">
-			<value>true</value>
-		</property>
-	</bean>
- -->
+	<!-- <bean id="sqliteDataSource" class="org.springframework.jdbc.datasource.SingleConnectionDataSource" 
+		lazy-init="true"> <property name="driverClassName" value="${jdbc.driverClassName}" 
+		/> <property name="url" value="${jdbc.url}" /> <property name="username" 
+		value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" 
+		/> <property name="connectionProperties"> <props> <prop key="date_string_format">yyyy-MM-dd 
+		HH:mm:ss</prop> </props> </property> Sqlite can only have a single connection 
+		<property name="suppressClose"> <value>true</value> </property> </bean> -->
 	<bean id="c3p0DataSource"
 		class="com.mchange.v2.c3p0.ComboPooledDataSource"
 		destroy-method="close">
@@ -178,12 +173,6 @@
 	<bean id="scopeService"
 		class="de.ids_mannheim.korap.oauth2.service.OAuth2ScopeServiceImpl" />
 
-	<!-- props are injected from default-config.xml -->
-	<bean id="kustvakt_config"
-		class="de.ids_mannheim.korap.config.FullConfiguration">
-		<constructor-arg name="properties" ref="props" />
-	</bean>
-
 	<bean id="initializator"
 		class="de.ids_mannheim.korap.init.Initializator"
 		init-method="initTest">
