diff --git a/src/main/java/de/ids_mannheim/korap/Krill.java b/src/main/java/de/ids_mannheim/korap/Krill.java
index af529d0..de55528 100644
--- a/src/main/java/de/ids_mannheim/korap/Krill.java
+++ b/src/main/java/de/ids_mannheim/korap/Krill.java
@@ -176,8 +176,12 @@
                 this.moveNotificationsFrom(kq);
 
                 // Throw an error, in case the query matches everywhere
-                if (qw.isEmpty())
+                if (qw.isEmpty()) {
                     this.addError(780, "This query matches everywhere");
+				}
+				else if (qw.isNull()) {
+					this.addError(783, "This query can't match anywhere");
+				}
 
                 else {
 
diff --git a/src/main/java/de/ids_mannheim/korap/KrillQuery.java b/src/main/java/de/ids_mannheim/korap/KrillQuery.java
index 3d70505..3185603 100644
--- a/src/main/java/de/ids_mannheim/korap/KrillQuery.java
+++ b/src/main/java/de/ids_mannheim/korap/KrillQuery.java
@@ -115,7 +115,7 @@
             // Set max boundary
             this.max = json.has("max") ? json.get("max").asInt(defaultMax)
                     : defaultMax;
-
+			
             if (DEBUG)
                 log.trace("Found koral:boundary with {}:{}", min, max);
         };
@@ -723,12 +723,12 @@
         // Check relation between min and max
         if (min > max)
             max = max;
-
+		
         SpanQueryWrapper sqw = this._fromKoral(operands.get(0));
 
         if (sqw.maybeExtension())
             return sqw.setMin(min).setMax(max);
-
+		
         return new SpanRepetitionQueryWrapper(sqw, min, max);
     };
 
diff --git a/src/test/java/de/ids_mannheim/korap/index/TestRepetitionIndex.java b/src/test/java/de/ids_mannheim/korap/index/TestRepetitionIndex.java
index 7549b83..cedb868 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestRepetitionIndex.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestRepetitionIndex.java
@@ -204,7 +204,6 @@
         //		}
     }
 
-
     @Test
     public void testCase5 () throws IOException {
         ki = new KrillIndex();
@@ -240,5 +239,5 @@
         	System.out.println(km.getSnippetBrackets());
         	System.out.println(km.getStartPos() +","+km.getEndPos());
         }*/
-    }
+    };
 }
diff --git a/src/test/java/de/ids_mannheim/korap/query/TestKrillQueryJSON.java b/src/test/java/de/ids_mannheim/korap/query/TestKrillQueryJSON.java
index 9ee4bde..31a3612 100644
--- a/src/test/java/de/ids_mannheim/korap/query/TestKrillQueryJSON.java
+++ b/src/test/java/de/ids_mannheim/korap/query/TestKrillQueryJSON.java
@@ -587,8 +587,6 @@
         };
     };
 
-	
-
     public static String getString (String path) {
         StringBuilder contentBuilder = new StringBuilder();
         try {
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 f4c5b8e..1fb1f2b 100644
--- a/src/test/java/de/ids_mannheim/korap/search/TestKrill.java
+++ b/src/test/java/de/ids_mannheim/korap/search/TestKrill.java
@@ -1128,6 +1128,22 @@
         assertEquals(kr.getTotalResults(), 1);
     };
 
+	
+	@Test
+    public void queryJSONzeroRepetitionBug () throws IOException {
+		// der{0}
+		KrillIndex ki = new KrillIndex();
+		ki.addDoc(getClass().getResourceAsStream("/wiki/00001.json.gz"), true);
+		ki.commit();
+			
+		String json = getString(getClass().getResource(
+									"/queries/bugs/zero_repetition_bug.jsonld").getFile());
+
+		Result kr = new Krill(json).apply(ki);
+
+		assertEquals(783, kr.getError(0).getCode());
+		assertEquals("This query can't match anywhere", kr.getError(0).getMessage());
+	};
 
     /**
      * This is a Schreibgebrauch ressource that didn't work for
diff --git a/src/test/resources/queries/bugs/zero_repetition_bug.jsonld b/src/test/resources/queries/bugs/zero_repetition_bug.jsonld
new file mode 100644
index 0000000..a1c9519
--- /dev/null
+++ b/src/test/resources/queries/bugs/zero_repetition_bug.jsonld
@@ -0,0 +1,31 @@
+{
+  "@context":"http://korap.ids-mannheim.de/ns/koral/0.3/context.jsonld",
+  "query":{
+    "@type":"koral:group",
+    "operation":"operation:repetition",
+    "operands":[
+      {
+        "@type":"koral:token",
+        "wrap":{
+          "@type":"koral:term",
+          "layer":"orth",
+          "key":"der",
+          "match":"match:eq"
+        }
+      }
+    ],
+    "boundary":{
+      "@type":"koral:boundary",
+      "min":0,
+      "max":0
+    }
+  },
+  "meta":{
+    "startPage":1,
+    "count":25,
+    "context":{
+      "left":["t",40],
+      "right":["t",40]
+    }
+  }
+}
\ No newline at end of file
