diff --git a/Changes b/Changes
index 6e363e0..150340f 100644
--- a/Changes
+++ b/Changes
@@ -1,4 +1,4 @@
-0.58.6 2019-07-17
+0.58.6 2019-08-28
     - [bugfix] Updated cache loading (fixed #55) (diewald, margaretha)
     - [bugfix] Introduce left match cutting so that
       in matchinfo with expandToContext cutting won't
@@ -10,6 +10,8 @@
     - [bugfix] Do not optimize %+w1:1 to be a treated like /+w1:1
       (diewald)
     - [cleanup] Added a CQL AND query test (margaretha)  
+    - [feature] Accept count=0 to only retrieve totalResults
+      (diewald)
 
 0.58.5 2019-03-18
     - [bugfix] Fix bug where duplicate keys occured in
diff --git a/src/main/java/de/ids_mannheim/korap/KrillMeta.java b/src/main/java/de/ids_mannheim/korap/KrillMeta.java
index 8ce45c0..eddafd8 100644
--- a/src/main/java/de/ids_mannheim/korap/KrillMeta.java
+++ b/src/main/java/de/ids_mannheim/korap/KrillMeta.java
@@ -200,7 +200,7 @@
 
 
     public KrillMeta setCount (short value) {
-        if (value > 0)
+        if (value >= 0)
             this.count = (value <= this.countMax) ? value : this.countMax;
         return this;
     };
diff --git a/src/main/java/de/ids_mannheim/korap/response/Result.java b/src/main/java/de/ids_mannheim/korap/response/Result.java
index 0dabb24..32b3cfe 100644
--- a/src/main/java/de/ids_mannheim/korap/response/Result.java
+++ b/src/main/java/de/ids_mannheim/korap/response/Result.java
@@ -90,7 +90,7 @@
         this.serialQuery = query;
         this.startIndex = startIndex;
         this.itemsPerPage = (itemsPerPage > ITEMS_PER_PAGE_MAX
-                || itemsPerPage < 1) ? ITEMS_PER_PAGE : itemsPerPage;
+                || itemsPerPage < 0) ? ITEMS_PER_PAGE : itemsPerPage;
         this.context = context;
     };
 
diff --git a/src/test/java/de/ids_mannheim/korap/search/TestKrill.java b/src/test/java/de/ids_mannheim/korap/search/TestKrill.java
index fda521e..c407cce 100644
--- a/src/test/java/de/ids_mannheim/korap/search/TestKrill.java
+++ b/src/test/java/de/ids_mannheim/korap/search/TestKrill.java
@@ -30,6 +30,7 @@
 
 @RunWith(JUnit4.class)
 public class TestKrill {
+
     @Test
     public void searchCount () {
         Krill k = new Krill(new QueryBuilder("field1").seg("a").with("b"));
@@ -45,9 +46,10 @@
         assertEquals(meta.getCount(), 20);
         meta.setCount(500);
         assertEquals(meta.getCount(), meta.getCountMax());
+        meta.setCount(0);
+        assertEquals(meta.getCount(), 0);
     };
 
-
     @Test
     public void searchStartIndex () {
         Krill k = new Krill(new QueryBuilder("field1").seg("a").with("b"));
@@ -103,6 +105,7 @@
 
         Result kr = ks.apply(ki);
         assertEquals(kr.getTotalResults(), 6);
+        assertEquals(kr.getMatches().size(), 1);
         assertEquals(kr.getMatch(0).getSnippetBrackets(),
                 "... dem [[Buchstaben]] A ...");
 
@@ -113,6 +116,14 @@
         assertEquals(1, res.at("/meta/context/left/1").asInt());
         assertEquals("token", res.at("/meta/context/right/0").asText());
         assertEquals(1, res.at("/meta/context/right/1").asInt());
+
+        // Handle count=0 correctly
+        meta = ks.getMeta();
+        meta.setCount(0);
+        kr = ks.apply(ki);
+        assertEquals(kr.getTotalResults(), 6);
+        assertEquals(kr.getItemsPerPage(), 0);
+        assertEquals(kr.getMatches().size(), 0);
     };
 
 
@@ -185,7 +196,7 @@
                 getClass().getResource("/queries/metaquery6.jsonld").getFile());
         ks = new Krill(json);
         kr = ks.apply(ki);
-        assertEquals(kr.getTotalResults(), 1);
+        assertEquals(kr.getTotalResults(), 1);        
     };
 
 
