diff --git a/src/test/java/de/ids_mannheim/korap/index/TestFieldDocument.java b/src/test/java/de/ids_mannheim/korap/index/TestFieldDocument.java
index f577738..7e4032b 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestFieldDocument.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestFieldDocument.java
@@ -27,6 +27,10 @@
 import de.ids_mannheim.korap.index.FieldDocument;
 import de.ids_mannheim.korap.analysis.MultiTermTokenStream;
 
+import de.ids_mannheim.korap.query.wrap.SpanQueryWrapperInterface;
+
+import de.ids_mannheim.korap.util.QueryException;
+
 import org.apache.lucene.search.spans.SpanQuery;
 import org.apache.lucene.search.spans.SpanTermQuery;
 import org.apache.lucene.index.Term;
@@ -219,6 +223,7 @@
 
 	assertNotNull(kr.toJSON());
 
+
 	/*
 	System.err.println(ki.getMatchInfo(
 	    "match-WPD!WPD_AAA.00004-p200-206",
@@ -231,7 +236,55 @@
         ).toJSON());
 */
 	//	ki.getMatch();
+    };
 
+    @Test
+    public void queryJSONBsp18 () throws IOException {
 
+	// Construct index
+	KorapIndex ki = new KorapIndex();
+
+	// Indexing test files
+	for (String i : new String[] {"00001", "00002", "00003", "00004", "00005", "00006", "02439"}) {
+	    FieldDocument fd = ki.addDocFile(
+	        getClass().getResource("/wiki/" + i + ".json.gz").getFile(), true
+            );
+	};
+	ki.commit();
+
+	SpanQueryWrapperInterface sqwi = jsonQuery(getClass().getResource("/queries/bsp18.jsonld").getFile());
+
+	KorapResult kr = ki.search(sqwi.toQuery(), 0, (short) 5, true, (short) 2, false, (short) 5);
+
+	// Bug: System.err.println(kr.toJSON());
+    };
+
+    public static String getString (String path) {
+	StringBuilder contentBuilder = new StringBuilder();
+	try {
+	    BufferedReader in = new BufferedReader(new FileReader(path));
+	    String str;
+	    while ((str = in.readLine()) != null) {
+		contentBuilder.append(str);
+	    };
+	    in.close();
+	} catch (IOException e) {
+	    fail(e.getMessage());
+	}
+	return contentBuilder.toString();
+    };
+
+    public static SpanQueryWrapperInterface jsonQuery (String jsonFile) {
+	SpanQueryWrapperInterface sqwi;
+	
+	try {
+	    String json = getString(jsonFile);
+	    sqwi = new KorapQuery("tokens").fromJSON(json);
+	}
+	catch (QueryException e) {
+	    fail(e.getMessage());
+	    sqwi = new KorapQuery("tokens").seg("???");
+	};
+	return sqwi;
     };
 };
diff --git a/src/test/java/de/ids_mannheim/korap/index/TestRealIndex.java b/src/test/java/de/ids_mannheim/korap/index/TestRealIndex.java
index 41fdd1f..c3c7443 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestRealIndex.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestRealIndex.java
@@ -48,7 +48,6 @@
 
 	// This is real slow atm - sorry
 	kc.filter(kf.and("textClass", "kultur"));
-	// kc.filter(kf.and("ID", "A00_JAN.02873"));
 
 
 	// Create a query
diff --git a/src/test/resources/queries/bsp18.jsonld b/src/test/resources/queries/bsp18.jsonld
new file mode 100644
index 0000000..99afb29
--- /dev/null
+++ b/src/test/resources/queries/bsp18.jsonld
@@ -0,0 +1,53 @@
+{
+  "context" : "http://ids-mannheim.de/ns/KorAP/json-ld/v0.1/context.jsonld",
+  "query" : {
+    "@type" : "korap:group",
+    "operation" : "operation:sequence",
+    "inOrder" : true,
+    "distances" : [ {
+      "@type" : "korap:distance",
+      "key" : "w",
+      "min" : 0,
+      "max" : 5
+    } ],
+    "operands" : [ {
+      "@type" : "korap:group",
+      "operation" : "operation:class",
+      "class" : 1,
+      "operands" : [ {
+        "@type" : "korap:token",
+        "wrap" : {
+          "@type" : "korap:term",
+          "key" : "der",
+          "layer" : "orth",
+          "match" : "match:eq"
+        }
+      } ]
+    }, {
+      "@type" : "korap:token",
+      "wrap" : {
+        "@type" : "korap:term",
+        "key" : "nicht",
+        "layer" : "orth",
+        "match" : "match:eq"
+      }
+    } ]
+  },
+  "collections" : [ {
+    "@type" : "korap:meta-filter",
+    "@value" : {
+      "@type" : "korap:term",
+      "@field" : "korap:field#corpusID",
+      "@value" : "WPD"
+    }
+  } ],
+  "meta" : {
+    "context" : {
+      "left" : [ "char", 110 ],
+      "right" : [ "char", 110 ]
+    },
+    "cutOff" : true,
+    "startPage" : 1,
+    "count" : 25
+  }
+}
\ No newline at end of file
