diff --git a/core/src/main/java/de/ids_mannheim/korap/web/SearchKrill.java b/core/src/main/java/de/ids_mannheim/korap/web/SearchKrill.java
index 9051484..231e782 100644
--- a/core/src/main/java/de/ids_mannheim/korap/web/SearchKrill.java
+++ b/core/src/main/java/de/ids_mannheim/korap/web/SearchKrill.java
@@ -265,12 +265,26 @@
      *            JSON-LD string with potential meta filters.
      */
     public String getStatistics (String json) {
-        jlog.trace(json);
         if (this.index == null) {
             return "{\"documents\" : -1, error\" : \"No index given\" }";
         };
-        // Create Virtual collection from json search
-        KrillCollection kc = new KrillCollection(json);
+
+		// Define a virtual corpus
+		KrillCollection kc;
+		if (json != null && !json.equals("")) {
+			jlog.trace(json);
+
+			// Create Virtual collection from json search
+			kc = new KrillCollection(json);
+		}
+
+		// There is no json string defined
+		else {
+
+			// Create Virtual collection of everything
+			kc = new KrillCollection();
+		};
+
         // Set index
         kc.setIndex(this.index);
         long docs = 0, tokens = 0, sentences = 0, paragraphs = 0;
diff --git a/lite/Changes b/lite/Changes
index d539fc5..bd0f1db 100644
--- a/lite/Changes
+++ b/lite/Changes
@@ -1,3 +1,7 @@
+version 0.60.2
+29/06/2018
+    - Added support for unrestricted corpus statistics (ndiewald)
+
 version 0.60.1
 12/06/2018
     - removed kustvakt_encryption (margaretha)
diff --git a/lite/pom.xml b/lite/pom.xml
index a1e95b9..f8d78bd 100644
--- a/lite/pom.xml
+++ b/lite/pom.xml
@@ -3,7 +3,7 @@
 	<modelVersion>4.0.0</modelVersion>
 	<groupId>de.ids_mannheim.korap</groupId>
 	<artifactId>Kustvakt-lite</artifactId>
-	<version>0.60.1</version>
+	<version>0.60.2</version>
 	<properties>
 		<java.version>1.8</java.version>
 		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -172,4 +172,4 @@
 			<scope>test</scope>
 		</dependency>
 	</dependencies>
-</project>
\ No newline at end of file
+</project>
diff --git a/lite/src/main/java/de/ids_mannheim/korap/web/service/lite/LiteService.java b/lite/src/main/java/de/ids_mannheim/korap/web/service/lite/LiteService.java
index 90673e1..5463738 100644
--- a/lite/src/main/java/de/ids_mannheim/korap/web/service/lite/LiteService.java
+++ b/lite/src/main/java/de/ids_mannheim/korap/web/service/lite/LiteService.java
@@ -301,16 +301,23 @@
             @QueryParam("corpusQuery") String collectionQuery) {
 
         KoralCollectionQueryBuilder builder = new KoralCollectionQueryBuilder();
-        builder.with(collectionQuery);
-        String json;
-        try {
-            json = builder.toJSON();
-        }
-        catch (KustvaktException e) {
-            throw kustvaktResponseHandler.throwit(e);
-        }
 
-        String stats = searchKrill.getStatistics(json);
+		String stats;
+		if (collectionQuery != null && !collectionQuery.equals("")) {
+			builder.with(collectionQuery);
+			String json;
+			try {
+				json = builder.toJSON();
+			}
+			catch (KustvaktException e) {
+				throw kustvaktResponseHandler.throwit(e);
+			}
+			stats = searchKrill.getStatistics(json);
+		}
+		else {
+			stats = searchKrill.getStatistics(null);
+		};
+
         if (stats.contains("-1"))
             throw kustvaktResponseHandler.throwit(StatusCodes.NO_RESULT_FOUND);
         jlog.debug("Stats: " + stats);
diff --git a/lite/src/test/java/de/ids_mannheim/korap/web/service/LiteServiceTest.java b/lite/src/test/java/de/ids_mannheim/korap/web/service/LiteServiceTest.java
index bc3064c..8c815e8 100644
--- a/lite/src/test/java/de/ids_mannheim/korap/web/service/LiteServiceTest.java
+++ b/lite/src/test/java/de/ids_mannheim/korap/web/service/LiteServiceTest.java
@@ -77,6 +77,35 @@
         assertEquals(514, node.at("/paragraphs").asInt());
     }
 
+	@Test
+    public void testEmptyStatistics () throws KustvaktException{
+        ClientResponse response = resource()
+			.path("statistics")
+			.queryParam("corpusQuery", "")
+			.method("GET", ClientResponse.class);
+        assertEquals(ClientResponse.Status.OK.getStatusCode(),
+                response.getStatus());
+        String query = response.getEntity(String.class);
+        JsonNode node = JsonUtils.readTree(query);
+        assertEquals(11, node.at("/documents").asInt());
+        assertEquals(665842, node.at("/tokens").asInt());
+        assertEquals(25074, node.at("/sentences").asInt());
+        assertEquals(772, node.at("/paragraphs").asInt());
+
+		response = resource()
+                .path("statistics")
+                .method("GET", ClientResponse.class);
+        assertEquals(ClientResponse.Status.OK.getStatusCode(),
+                response.getStatus());
+		query = response.getEntity(String.class);
+		node = JsonUtils.readTree(query);
+        assertEquals(11, node.at("/documents").asInt());
+        assertEquals(665842, node.at("/tokens").asInt());
+        assertEquals(25074, node.at("/sentences").asInt());
+        assertEquals(772, node.at("/paragraphs").asInt());
+	}
+
+	
     @Test
     public void testGetJSONQuery () throws KustvaktException{
         ClientResponse response = resource()
