diff --git a/src/test/java/de/ids_mannheim/korap/index/TestSegmentIndex.java b/src/test/java/de/ids_mannheim/korap/index/TestSegmentIndex.java
index b0c1305..74d611e 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestSegmentIndex.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestSegmentIndex.java
@@ -175,7 +175,6 @@
         assertEquals("EndPos (0)", 2, kr.getMatch(1).endPos);
     }
 
-
     private FieldDocument createFieldDoc0 () {
         fd = new FieldDocument();
         fd.addString("ID", "doc-0");
diff --git a/src/test/java/de/ids_mannheim/korap/index/TestWithinIndex.java b/src/test/java/de/ids_mannheim/korap/index/TestWithinIndex.java
index 78d623c..009104b 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestWithinIndex.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestWithinIndex.java
@@ -1046,16 +1046,42 @@
         assertEquals(1, kr.getMatch(1).getLocalDocID());
         assertEquals(237, kr.getMatch(1).getStartPos());
         assertEquals(252, kr.getMatch(1).getEndPos());
-
-        /*
-        for (Match km : kr.getMatches()){		
-        	System.out.println(km.getStartPos() +","+km.getEndPos()+" "
-                               +km.getSnippetBrackets());
-        };	
-        */
     };
 
 
+    @Test
+    public void queryJSONcomplexSpanOrTerm () throws QueryException, IOException {
+        /*
+          at org.apache.lucene.search.spans.SpanOrQuery$1.doc(SpanOrQuery.java:234)
+          at de.ids_mannheim.korap.query.spans.WithinSpans.toSameDoc(WithinSpans.java:423)
+          at de.ids_mannheim.korap.query.spans.WithinSpans.next(WithinSpans.java:375)
+          at de.ids_mannheim.korap.KrillIndex.search(KrillIndex.java:1293)
+          at de.ids_mannheim.korap.Krill.apply(Krill.java:304)
+        */
+        // startsWith(<base/s=s>, { lassen | laufen })
+        String jsonPath = getClass().getResource("/queries/bugs/span_or_bug.jsonld")
+            .getFile();
+        String jsonPQuery = readFile(jsonPath);
+        SpanQueryWrapper sqwi = new KrillQuery("tokens").fromJson(jsonPQuery);
+
+        SpanWithinQuery sq = (SpanWithinQuery) sqwi.toQuery();
+
+        KrillIndex ki = new KrillIndex();
+
+        ki.addDoc(getClass().getResourceAsStream("/wiki/PPP-02924.json.gz"),
+                  true);
+        ki.addDoc(getClass().getResourceAsStream("/wiki/DDD-08370.json.gz"),
+                  true);
+        ki.addDoc(getClass().getResourceAsStream("/wiki/SSS-09803.json.gz"),
+                  true);
+        ki.commit();
+        Result kr = ki.search(sq, (short) 10);
+        assertEquals(2, kr.getTotalResults());
+
+    }
+
+
+
     private String readFile (String path) {
         StringBuilder sb = new StringBuilder();
         try {
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 c559e81..f3c2567 100644
--- a/src/test/java/de/ids_mannheim/korap/query/TestKrillQueryJSON.java
+++ b/src/test/java/de/ids_mannheim/korap/query/TestKrillQueryJSON.java
@@ -537,6 +537,23 @@
     };
 
 
+    @Test
+    public void queryJSONcomplexSpanOrTerm () throws QueryException {
+        // startsWith(<base/s=s>, { lassen | laufen })
+        try {
+            String json = getString(getClass().getResource("/queries/bugs/span_or_bug.jsonld").getFile());
+            KrillQuery kq = new KrillQuery("tokens");
+
+            assertEquals(
+                         kq.fromJson(json).toQuery().toString(),
+                         "spanStartsWith(<tokens:base/s:s />, spanOr([tokens:s:Er, tokens:s:Sie]))");
+        }
+        catch (QueryException e) {
+            fail(e.getMessage());
+        };
+    };
+
+
     public static String getString (String path) {
         StringBuilder contentBuilder = new StringBuilder();
         try {
diff --git a/src/test/resources/queries/bugs/span_or_bug.jsonld b/src/test/resources/queries/bugs/span_or_bug.jsonld
new file mode 100644
index 0000000..49beb6f
--- /dev/null
+++ b/src/test/resources/queries/bugs/span_or_bug.jsonld
@@ -0,0 +1,49 @@
+{
+  "@context":"http://korap.ids-mannheim.de/ns/koral/0.3/context.jsonld",
+  "query":{
+    "@type":"koral:group",
+    "operation":"operation:position",
+    "frames":["frames:startsWith","frames:matches"],
+    "operands":[
+      {
+	"@type":"koral:span",
+	"wrap":{
+	  "@type":"koral:term",
+	  "foundry":"base",
+	  "layer":"s",
+	  "key":"s"
+	}
+      },
+      {
+	"@type":"koral:token",
+	"wrap":{
+	  "@type":"koral:termGroup",
+	  "relation":"relation:or",
+	  "operands":[
+	    {
+	      "@type":"koral:term",
+	      "key":"Er",
+	      "layer":"orth",
+	      "match":"match:eq"
+	    },
+	    {
+	      "@type":"koral:term",
+	      "key":"Sie",
+	      "layer":"orth",
+	      "match":"match:eq"
+	    }
+	  ]
+	}
+      }
+    ]
+  },
+  "meta":{
+    "startPage":1,
+    "count":25,
+    "cutOff":true,
+    "context":{
+      "left":["t",40],
+      "right":["t",40]
+    }
+  }
+}
