diff --git a/pom.xml b/pom.xml
index f5c4d05..c38d036 100644
--- a/pom.xml
+++ b/pom.xml
@@ -103,7 +103,6 @@
       <artifactId>jackson-core</artifactId>
       <version>2.2.2</version>
     </dependency>
-
   </dependencies>
 
   <build>
diff --git a/src/main/java/de/ids_mannheim/korap/KorapIndex.java b/src/main/java/de/ids_mannheim/korap/KorapIndex.java
index 4ccc4d0..5082be9 100644
--- a/src/main/java/de/ids_mannheim/korap/KorapIndex.java
+++ b/src/main/java/de/ids_mannheim/korap/KorapIndex.java
@@ -61,7 +61,7 @@
 
 /*
   Todo: Use FieldCache!
-
+  TODO: Reuse the indexreader everywhere - it should be threadsafe!
 
   http://invertedindex.blogspot.co.il/2009/04/lucene-dociduid-mapping-and-payload.html
   see korap/search.java -> retrieveTokens
@@ -704,12 +704,10 @@
 		    kr.setBenchmarkSearchResults(t1, t2);
 		};
 
-		/*
-TEMPORARY:
+		// Can be disabled TEMPORARILY
 		while (spans.next()) {
 		    i++;
 		};
-		*/
 
 		for (KorapMatch km : atomicMatches) {
 		    km.processHighlight(pto);
diff --git a/src/main/java/de/ids_mannheim/korap/KorapQuery.java b/src/main/java/de/ids_mannheim/korap/KorapQuery.java
index 0ee3895..12b34d3 100644
--- a/src/main/java/de/ids_mannheim/korap/KorapQuery.java
+++ b/src/main/java/de/ids_mannheim/korap/KorapQuery.java
@@ -56,7 +56,9 @@
 
     // http://fasterxml.github.io/jackson-databind/javadoc/2.2.0/com/fasterxml/jackson/databind/JsonNode.html
     // TODO: Exception messages are horrible!
-    // Todo: Use the shortcuts implemented in this class instead of the wrapper constructors
+    // TODO: Use the shortcuts implemented in this class instead of the wrapper constructors
+    // TODO: Check for isArray()
+    // TODO: Check for the number of operands before getting them
     public SpanQueryWrapperInterface fromJSON (JsonNode json) throws QueryException {
 
 	if (!json.has("@type")) {
@@ -140,6 +142,10 @@
 	    if (!json.has("operands"))
 		throw new QueryException("SpanSequenceQuery needs operands");
 
+	    JsonNode operands = json.get("operands");
+	    if (!operands.isArray() || operands.size() < 2)
+		throw new QueryException("SpanSequenceQuery needs operands");		
+		
 	    SpanSequenceQueryWrapper sseqqw = new SpanSequenceQueryWrapper(this.field);
 	    for (JsonNode operand : json.get("operands")) {
 		sseqqw.append(this.fromJSON(operand));
diff --git a/src/test/java/de/ids_mannheim/korap/filter/TestKorapCollection.java b/src/test/java/de/ids_mannheim/korap/filter/TestKorapCollection.java
index 54864aa..8b880f7 100644
--- a/src/test/java/de/ids_mannheim/korap/filter/TestKorapCollection.java
+++ b/src/test/java/de/ids_mannheim/korap/filter/TestKorapCollection.java
@@ -26,7 +26,7 @@
 	// 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
+					     getClass().getResource("/wiki/" + i + ".json.gz").getFile(), true
             );
 	};
 	ki.commit();
@@ -78,7 +78,7 @@
 	// System.err.println(kr.toJSON());
     };
 
-    @Ignore
+    @Test
     public void filterExampleAtomic () throws IOException {
 	
 	// That's exactly the same test class, but with multiple atomic indices
diff --git a/src/test/java/de/ids_mannheim/korap/query/TestKorapQueryJSON.java b/src/test/java/de/ids_mannheim/korap/query/TestKorapQueryJSON.java
index c62a71a..f8196a0 100644
--- a/src/test/java/de/ids_mannheim/korap/query/TestKorapQueryJSON.java
+++ b/src/test/java/de/ids_mannheim/korap/query/TestKorapQueryJSON.java
@@ -179,6 +179,14 @@
 	assertEquals(sqwi.toQuery().toString(), "tokens:base/p:foo");
     };
 
+    @Test
+    public void queryJSONBspClass () {
+	SpanQueryWrapperInterface sqwi = jsonQuery(getClass().getResource("/queries/bsp-class.json").getFile());
+
+	// within(<np>,[base=Mann])
+	assertEquals(sqwi.toQuery().toString(), "{0: spanNext(tokens:tt/p:ADJA, tokens:mate/p:NN)}");
+    };
+
 
     public static String getString (String path) {
 	StringBuilder contentBuilder = new StringBuilder();
diff --git a/src/test/resources/queries/bsp-class.json b/src/test/resources/queries/bsp-class.json
new file mode 100644
index 0000000..8125e6a
--- /dev/null
+++ b/src/test/resources/queries/bsp-class.json
@@ -0,0 +1 @@
+{"@context":{"korap":"http://korap.ids-mannheim.de/ns/query","@language":"de","operands":{"@id":"korap:operands","@container":"@list"},"relation":{"@id":"korap:relation","@type":"korap:relation#types"},"class":{"@id":"korap:class","@type":"xsd:integer"},"query":"korap:query","filter":"korap:filter","meta":"korap:meta"},"query":{"@type":"korap:group","class":"0","operands":[{"@type":"korap:sequence","operands":[{"@type":"korap:token","@value":{"@type":"korap:term","@value":"tt/p:ADJA","relation":"="}},{"@type":"korap:token","@value":{"@type":"korap:term","@value":"mate/p:NN","relation":"="}}]}]},"meta":[{"@type":"korap:meta-filter","@value":{"@type":"korap:term","@field":"korap:field#corpusID","@value":"WPD"}}],"startPage":1,"count":50,"context":{"left":["token",6],"right":["token",6]}}
diff --git a/src/test/resources/queries/bsp-startswith.json b/src/test/resources/queries/bsp-startswith.json
new file mode 100644
index 0000000..c986a5a
--- /dev/null
+++ b/src/test/resources/queries/bsp-startswith.json
@@ -0,0 +1 @@
+{"@context":{"korap":"http://korap.ids-mannheim.de/ns/query","@language":"de","operands":{"@id":"korap:operands","@container":"@list"},"relation":{"@id":"korap:relation","@type":"korap:relation#types"},"class":{"@id":"korap:class","@type":"xsd:integer"},"query":"korap:query","filter":"korap:filter","meta":"korap:meta"},"query":{"@type":"korap:group","relation":"position","position":"startswith","operands":[{"@type":"korap:element","@value":"s"},{"@type":"korap:sequence","operands":[{"@type":"korap:group","class":"0","operands":[{"@type":"korap:token","@value":{"@type":"korap:term","@value":"tt_p:ADJA","relation":"="}}]},{"@type":"korap:token","@value":{"@type":"korap:term","@value":"mate_p:NN","relation":"="}}]}]},"meta":[{"@type":"korap:meta-filter","@value":{"@type":"korap:term","@field":"korap:field#corpusID","@value":"A00"}},{"@type":"korap:meta-extend","@value":{"@type":"korap:term","@field":"korap:field#corpusID","@value":"A01"}}],"startPage":1,"count":50,"context":{"left":["token",6],"right":["token",6]}}
diff --git a/src/test/resources/queries/readme.txt b/src/test/resources/queries/readme.txt
index 5fa4709..f6f2584 100644
--- a/src/test/resources/queries/readme.txt
+++ b/src/test/resources/queries/readme.txt
@@ -1,4 +1,5 @@
 bsp1.json:   [base=foo]|([base=foo][base=bar])* meta author=Goethe&year=1815
+bsp1b.json:  [base=foo]|([base=foo][base=bar]) meta author=Goethe&year=1815
 bsp2.json:   ([base=foo]|[base=bar])[base=foobar]
 bsp3.json:   shrink({[base=Mann]})
 bsp4.json:   shrink({[base=foo]}[orth=bar])
