diff --git a/src/main/java/de/ids_mannheim/korap/KorapQuery.java b/src/main/java/de/ids_mannheim/korap/KorapQuery.java
index f7e30c5..89f4492 100644
--- a/src/main/java/de/ids_mannheim/korap/KorapQuery.java
+++ b/src/main/java/de/ids_mannheim/korap/KorapQuery.java
@@ -251,7 +251,7 @@
 			762,
 		        "Span references are currently not supported"
                     );
-		};
+		}; 
 
 		return new SpanMatchModifyQueryWrapper(
 		    this.fromJson(operands.get(0)), number
@@ -521,9 +521,17 @@
 	    }
 	    else if (json.has("spanRef")) {
 	        JsonNode spanRef = json.get("spanRef");
+	        int length=0;
+	        if (!spanRef.isArray() || spanRef.size() == 0)
+	            throw new QueryException(714, "Span reference needs a start position and a length parameters.");
+	        	        
+	        if (!spanRef.get(1).isMissingNode()){
+	            length = spanRef.get(1).asInt();
+	        }
+	            
             return new SpanSubspanQueryWrapper(
                     fromJson(operands.get(0)), spanRef.get(0).asInt(),
-                    spanRef.get(1).asInt());
+                    length); 
 //		throw new QueryException(
 //		    762,
 //		    "Span references are currently not supported"
diff --git a/src/main/java/de/ids_mannheim/korap/query/spans/SubSpans.java b/src/main/java/de/ids_mannheim/korap/query/spans/SubSpans.java
index 7af989a..c95afcc 100644
--- a/src/main/java/de/ids_mannheim/korap/query/spans/SubSpans.java
+++ b/src/main/java/de/ids_mannheim/korap/query/spans/SubSpans.java
@@ -11,8 +11,10 @@
 import de.ids_mannheim.korap.query.SpanSubspanQuery;
 
 /**
- * Enumeration of SubSpans, which are parts of another Spans. The SubSpans are
- * specified with a start offset relative to the original span and a length.
+ * Enumeration of SubSpans, which are parts of another Spans. The
+ * SubSpans are specified with a start offset relative to the original
+ * span and a length. If the length is unspecified or 0, the end
+ * position of the subspans is the same as that of the original spans.
  * 
  * @author margaretha
  * 
@@ -22,18 +24,19 @@
     private int startOffset, length;
 
     /**
-     * Constructs SubSpans for the given {@link SpanSubspanQuery} specifiying
-     * the start offset and the length of the subspans.
+     * Constructs SubSpans for the given {@link SpanSubspanQuery}
+     * specifiying the start offset and the length of the subspans.
      * 
-     * @param subspanQuery a SpanSubspanQuery
+     * @param subspanQuery
+     *            a SpanSubspanQuery
      * @param context
      * @param acceptDocs
      * @param termContexts
      * @throws IOException
      */
-    public SubSpans(SpanSubspanQuery subspanQuery, AtomicReaderContext context,
-            Bits acceptDocs, Map<Term, TermContext> termContexts)
-            throws IOException {
+    public SubSpans (SpanSubspanQuery subspanQuery,
+            AtomicReaderContext context, Bits acceptDocs,
+            Map<Term, TermContext> termContexts) throws IOException {
         super(subspanQuery, context, acceptDocs, termContexts);
         this.startOffset = subspanQuery.getStartOffset();
         this.length = subspanQuery.getLength();
@@ -49,8 +52,8 @@
     /**
      * Advances the SubSpans to the next match.
      * 
-     * @return <code>true</code> if a match is found, <code>false</code>
-     *         otherwise.
+     * @return <code>true</code> if a match is found,
+     *         <code>false</code> otherwise.
      * @throws IOException
      */
     private boolean advance() throws IOException {
@@ -83,11 +86,15 @@
             }
         }
 
-        matchEndPosition = matchStartPosition + this.length;
-        if (matchEndPosition > firstSpans.end()) {
+        if (this.length > 0) {
+            matchEndPosition = matchStartPosition + this.length;
+            if (matchEndPosition > firstSpans.end()) {
+                matchEndPosition = firstSpans.end();
+            }
+        }
+        else {
             matchEndPosition = firstSpans.end();
         }
-
         matchPayload = firstSpans.getPayload();
         matchDocNumber = firstSpans.doc();
         return true;
diff --git a/src/test/java/de/ids_mannheim/korap/index/TestSubSpanIndex.java b/src/test/java/de/ids_mannheim/korap/index/TestSubSpanIndex.java
index 58f88f5..4aff0bf 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestSubSpanIndex.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestSubSpanIndex.java
@@ -9,7 +9,6 @@
 import org.junit.Test;
 
 import de.ids_mannheim.korap.KorapIndex;
-import de.ids_mannheim.korap.KorapMatch;
 import de.ids_mannheim.korap.KorapResult;
 import de.ids_mannheim.korap.query.DistanceConstraint;
 import de.ids_mannheim.korap.query.SpanDistanceQuery;
@@ -20,7 +19,7 @@
     KorapResult kr;
     KorapIndex ki;
 
-    public TestSubSpanIndex() throws IOException {
+    public TestSubSpanIndex () throws IOException {
         ki = new KorapIndex();
         ki.addDocFile(getClass().getResource("/wiki/00001.json.gz").getFile(),
                 true);
@@ -29,10 +28,10 @@
 
     @Test
     public void testCase1() throws IOException {
-        SpanDistanceQuery sdq = new SpanDistanceQuery(
-                new SpanTermQuery(new Term("tokens", "tt/p:NN")), 
-                new SpanTermQuery(new Term("tokens", "tt/p:VAFIN")), 
-                new DistanceConstraint(5, 5, true,false), true);
+        SpanDistanceQuery sdq = new SpanDistanceQuery(new SpanTermQuery(
+                new Term("tokens", "tt/p:NN")), new SpanTermQuery(new Term(
+                "tokens", "tt/p:VAFIN")), new DistanceConstraint(5, 5, true,
+                false), true);
 
         SpanSubspanQuery ssq = new SpanSubspanQuery(sdq, 0, 2, true);
         kr = ki.search(ssq, (short) 10);
@@ -60,11 +59,12 @@
 
     @Test
     public void testCase2() {
-        SpanDistanceQuery sdq = new SpanDistanceQuery(
-                new SpanTermQuery(new Term("tokens", "tt/p:NN")), 
-                new SpanTermQuery(new Term("tokens", "tt/p:VAFIN")), 
-                new DistanceConstraint(5, 5, true,false), true);
-        
+        SpanDistanceQuery sdq = new SpanDistanceQuery(new SpanTermQuery(
+                new Term("tokens", "tt/p:NN")), new SpanTermQuery(new Term(
+                "tokens", "tt/p:VAFIN")), new DistanceConstraint(5, 5, true,
+                false), true);
+
+        // the subspan length is longer than the span length
         SpanSubspanQuery ssq = new SpanSubspanQuery(sdq, 0, 7, true);
         kr = ki.search(ssq, (short) 10);
 
@@ -72,20 +72,47 @@
         assertEquals(41, kr.getMatch(0).getEndPos());
         assertEquals(179, kr.getMatch(1).getStartPos());
         assertEquals(185, kr.getMatch(1).getEndPos());
-        
+
+        // the subspan start is before the span start
         ssq = new SpanSubspanQuery(sdq, -7, 4, true);
         kr = ki.search(ssq, (short) 10);
-        
+
         assertEquals((long) 8, kr.getTotalResults());
         assertEquals(35, kr.getMatch(0).getStartPos());
         assertEquals(39, kr.getMatch(0).getEndPos());
         assertEquals(179, kr.getMatch(1).getStartPos());
         assertEquals(183, kr.getMatch(1).getEndPos());
-        
-        /* for (KorapMatch km : kr.getMatches()){
-         System.out.println(km.getStartPos() +","+km.getEndPos()
-         +km.getSnippetBrackets()); }*/
-         
+
+    }
+
+    // Length 0
+    @Test
+    public void testCase3() {
+        SpanDistanceQuery sdq = new SpanDistanceQuery(new SpanTermQuery(
+                new Term("tokens", "tt/p:NN")), new SpanTermQuery(new Term(
+                "tokens", "tt/p:VAFIN")), new DistanceConstraint(5, 5, true,
+                false), true);
+
+        SpanSubspanQuery ssq = new SpanSubspanQuery(sdq, 3, 0, true);
+        kr = ki.search(ssq, (short) 10);
+
+        assertEquals(38, kr.getMatch(0).getStartPos());
+        assertEquals(41, kr.getMatch(0).getEndPos());
+        assertEquals(182, kr.getMatch(1).getStartPos());
+        assertEquals(185, kr.getMatch(1).getEndPos());
+
+        ssq = new SpanSubspanQuery(sdq, -2, 0, true);
+        kr = ki.search(ssq, (short) 10);
+
+        assertEquals(39, kr.getMatch(0).getStartPos());
+        assertEquals(41, kr.getMatch(0).getEndPos());
+        assertEquals(183, kr.getMatch(1).getStartPos());
+        assertEquals(185, kr.getMatch(1).getEndPos());
+
+        // for (KorapMatch km : kr.getMatches()) {
+        // System.out.println(km.getStartPos() + "," + km.getEndPos()
+        // + km.getSnippetBrackets());
+        // }
     }
 
 }
diff --git a/src/test/java/de/ids_mannheim/korap/query/TestSpanSubspanQueryJSON.java b/src/test/java/de/ids_mannheim/korap/query/TestSpanSubspanQueryJSON.java
index e1e473d..c9f6d56 100644
--- a/src/test/java/de/ids_mannheim/korap/query/TestSpanSubspanQueryJSON.java
+++ b/src/test/java/de/ids_mannheim/korap/query/TestSpanSubspanQueryJSON.java
@@ -21,6 +21,26 @@
                 .getFile();
         SpanQueryWrapper sqwi = getJSONQuery(filepath);
         SpanQuery sq = sqwi.toQuery();
+        assertEquals(sq.toString(),
+                "subspan(spanContain(<tokens:s />, tokens:tt/l:Haus),1,4)");
+    }
+
+    @Test
+    public void testCase2() throws QueryException {
+        String filepath = getClass().getResource("/queries/submatch2.jsonld")
+                .getFile();
+        SpanQueryWrapper sqwi = getJSONQuery(filepath);
+        SpanQuery sq = sqwi.toQuery();
         assertEquals(sq.toString(), "subspan(<tokens:s />,1,4)");
     }
+
+    public void testCase3() throws QueryException {
+        String filepath = getClass().getResource("/queries/submatch3.jsonld")
+                .getFile();
+        SpanQueryWrapper sqwi = getJSONQuery(filepath);
+        SpanQuery sq = sqwi.toQuery();
+        assertEquals(sq.toString(), "subspan(<tokens:s />,1,0)");
+
+    }
+
 }
diff --git a/src/test/resources/queries/submatch.jsonld b/src/test/resources/queries/submatch.jsonld
index 36153eb..4baa073 100644
--- a/src/test/resources/queries/submatch.jsonld
+++ b/src/test/resources/queries/submatch.jsonld
@@ -11,15 +11,35 @@
    ],
    "collection":null,
    "query":{
-      "@type":"korap:reference",
-      "operation":"operation:focus",
-      "operands":[
+      "@type" : "korap:reference",
+      "operands" : [
          {
-            "@type":"korap:span",
-            "key":"s"
+            "@type" : "korap:group",
+            "frame" : "frame:contains",
+            "frames" : [
+               "frames:contains"
+            ],
+            "operands" : [
+               {
+                  "@type" : "korap:span",
+                  "key" : "s"
+               },
+               {
+                  "@type" : "korap:token",
+                  "wrap" : {
+                     "@type" : "korap:term",
+                     "foundry" : "tt",
+                     "key" : "Haus",
+                     "layer" : "lemma",
+                     "match" : "match:eq"
+                  }
+               }
+            ],
+            "operation" : "operation:position"
          }
       ],
-      "spanRef":[
+      "operation" : "operation:focus",
+      "spanRef" : [
          1,
          4
       ]
diff --git a/src/test/resources/queries/submatch2.jsonld b/src/test/resources/queries/submatch2.jsonld
new file mode 100644
index 0000000..45a3155
--- /dev/null
+++ b/src/test/resources/queries/submatch2.jsonld
@@ -0,0 +1,30 @@
+{
+   "@context":"http://ids-mannheim.de/ns/KorAP/json-ld/v0.2/context.jsonld",
+   "errors":[
+
+   ],
+   "warnings":[
+
+   ],
+   "messages":[
+
+   ],
+   "collection":null,
+   "query":{
+      "@type" : "korap:reference",
+      "operands" : [
+         {
+            "@type" : "korap:span",
+            "key" : "s"
+         }
+      ],
+      "operation" : "operation:focus",
+      "spanRef" : [
+         1,
+         4
+      ]
+   },
+   "meta":{
+
+   }
+}
diff --git a/src/test/resources/queries/submatch3.jsonld b/src/test/resources/queries/submatch3.jsonld
new file mode 100644
index 0000000..6363de6
--- /dev/null
+++ b/src/test/resources/queries/submatch3.jsonld
@@ -0,0 +1,29 @@
+{
+   "@context":"http://ids-mannheim.de/ns/KorAP/json-ld/v0.2/context.jsonld",
+   "errors":[
+
+   ],
+   "warnings":[
+
+   ],
+   "messages":[
+
+   ],
+   "collection":null,
+   "query":{
+      "@type" : "korap:reference",
+      "operands" : [
+         {
+            "@type" : "korap:span",
+            "key" : "s"
+         }
+      ],
+      "operation" : "operation:focus",
+      "spanRef" : [
+         1
+      ]
+   },
+   "meta":{
+
+   }
+}
