diff --git a/src/test/java/de/ids_mannheim/korap/benchmark/TestBenchmarkSpans.java b/src/test/java/de/ids_mannheim/korap/benchmark/TestBenchmarkSpans.java
index 0b9730e..e80be5f 100644
--- a/src/test/java/de/ids_mannheim/korap/benchmark/TestBenchmarkSpans.java
+++ b/src/test/java/de/ids_mannheim/korap/benchmark/TestBenchmarkSpans.java
@@ -7,7 +7,7 @@
 import de.ids_mannheim.korap.index.FieldDocument;
 import de.ids_mannheim.korap.KrillCollection;
 import de.ids_mannheim.korap.Krill;
-import de.ids_mannheim.korap.KorapResult;
+import de.ids_mannheim.korap.response.Result;
 import de.ids_mannheim.korap.KrillQuery;
 import de.ids_mannheim.korap.query.QueryBuilder;
 import org.apache.lucene.store.MMapDirectory;
@@ -43,7 +43,7 @@
 
         int rounds = 100;
 
-        KorapResult kr = new KorapResult();
+        Result kr = new Result();
 
         t1 = System.nanoTime();
         for (int i = 1; i <= rounds; i++) {
@@ -94,7 +94,7 @@
         
         int rounds = 10000;
         
-        KorapResult kr = new KorapResult();
+        Result kr = new Result();
         String result = new String("");
         
         t1 = System.nanoTime();
@@ -137,7 +137,7 @@
 
         int rounds = 10;
 
-        KorapResult kr = new KorapResult();
+        Result kr = new Result();
 
         t1 = System.nanoTime();
         double length = 0;
@@ -179,7 +179,7 @@
 
         int rounds = 2000;
         
-        KorapResult kr = new KorapResult();
+        Result kr = new Result();
 
         t1 = System.nanoTime();
         for (int i = 1; i <= rounds; i++) {
@@ -326,7 +326,7 @@
 
         int rounds = 500;
     
-        KorapResult kr = new KorapResult();
+        Result kr = new Result();
 
         t1 = System.nanoTime();
         for (int i = 1; i <= rounds; i++) {
diff --git a/src/test/java/de/ids_mannheim/korap/collection/TestKrillCollectionLegacy.java b/src/test/java/de/ids_mannheim/korap/collection/TestKrillCollectionLegacy.java
index d6b673c..5ff9891 100644
--- a/src/test/java/de/ids_mannheim/korap/collection/TestKrillCollectionLegacy.java
+++ b/src/test/java/de/ids_mannheim/korap/collection/TestKrillCollectionLegacy.java
@@ -5,7 +5,7 @@
 import de.ids_mannheim.korap.KrillIndex;
 import de.ids_mannheim.korap.index.FieldDocument;
 import de.ids_mannheim.korap.KrillCollection;
-import de.ids_mannheim.korap.KorapResult;
+import de.ids_mannheim.korap.response.Result;
 import de.ids_mannheim.korap.KrillQuery;
 import de.ids_mannheim.korap.query.QueryBuilder;
 import de.ids_mannheim.korap.collection.BooleanFilter;
@@ -82,7 +82,7 @@
 	QueryBuilder kq = new QueryBuilder("tokens");
 	SpanQuery query = kq.seg("opennlp/p:NN").with("tt/p:NN").toQuery();
 
-	KorapResult kr = kc.search(query);
+	Result kr = kc.search(query);
 	assertEquals(kr.getTotalResults(), 70);
 
 	kc.extend( kf.and("textClass", "uninteresting") );
@@ -159,7 +159,7 @@
 	QueryBuilder kq = new QueryBuilder("tokens");
 	SpanQuery query = kq.seg("opennlp/p:NN").with("tt/p:NN").toQuery();
 
-	KorapResult kr = kc.search(query);
+	Result kr = kc.search(query);
 	assertEquals(kr.getTotalResults(), 70);
 
 	kc.extend( kf.and("textClass", "uninteresting") );
@@ -212,7 +212,7 @@
 	QueryBuilder kq = new QueryBuilder("tokens");
 	SpanQuery query = kq.seg("opennlp/p:NN").with("tt/p:NN").toQuery();
 
-	KorapResult kr = kc.search(query);
+	Result kr = kc.search(query);
 
 	assertEquals(kr.getTotalResults(), 369);
 
@@ -253,7 +253,7 @@
 	assertEquals("Tokens",    2661, ki.numberOf("tokens"));
 
 	SpanQuery sq = new SpanTermQuery(new Term("tokens", "s:der"));
-	KorapResult kr = ki.search(sq, (short) 10);
+	Result kr = ki.search(sq, (short) 10);
         assertEquals(86,kr.getTotalResults());
 
 	// Create Virtual collections:
diff --git a/src/test/java/de/ids_mannheim/korap/highlight/TestClass.java b/src/test/java/de/ids_mannheim/korap/highlight/TestClass.java
index a805ea6..34481c4 100644
--- a/src/test/java/de/ids_mannheim/korap/highlight/TestClass.java
+++ b/src/test/java/de/ids_mannheim/korap/highlight/TestClass.java
@@ -13,7 +13,7 @@
 import de.ids_mannheim.korap.KrillIndex;
 import de.ids_mannheim.korap.response.Match;
 import de.ids_mannheim.korap.KrillQuery;
-import de.ids_mannheim.korap.KorapResult;
+import de.ids_mannheim.korap.response.Result;
 import de.ids_mannheim.korap.Krill;
 import de.ids_mannheim.korap.query.SpanNextQuery;
 import de.ids_mannheim.korap.query.wrap.SpanQueryWrapper;
@@ -22,7 +22,7 @@
 
 public class TestClass {
 	KrillIndex ki;
-	KorapResult kr;
+	Result kr;
 	Krill ks;
 	
 	@Test
diff --git a/src/test/java/de/ids_mannheim/korap/highlight/TestHighlight.java b/src/test/java/de/ids_mannheim/korap/highlight/TestHighlight.java
index b3ecb72..6c4b633 100644
--- a/src/test/java/de/ids_mannheim/korap/highlight/TestHighlight.java
+++ b/src/test/java/de/ids_mannheim/korap/highlight/TestHighlight.java
@@ -8,7 +8,7 @@
 import de.ids_mannheim.korap.KrillIndex;
 import de.ids_mannheim.korap.KrillQuery;
 import de.ids_mannheim.korap.query.QueryBuilder;
-import de.ids_mannheim.korap.KorapResult;
+import de.ids_mannheim.korap.response.Result;
 import de.ids_mannheim.korap.Krill;
 import de.ids_mannheim.korap.response.Match;
 import de.ids_mannheim.korap.index.FieldDocument;
@@ -52,7 +52,7 @@
 
 
         QueryBuilder kq = new QueryBuilder("tokens");
-        KorapResult kr = ki.search(
+        Result kr = ki.search(
             (SpanQuery) kq.seq(kq._(1, kq.seg("s:b"))).toQuery()
         );
         Match km = kr.getMatch(0);
@@ -123,7 +123,7 @@
 
         QueryBuilder kq = new QueryBuilder("tokens");
 
-        KorapResult kr = ki.search((SpanQuery) kq.seq(kq.seg("s:a")).append(kq.seg("s:b")).append(kq.seg("s:c")).toQuery());
+        Result kr = ki.search((SpanQuery) kq.seq(kq.seg("s:a")).append(kq.seg("s:b")).append(kq.seg("s:c")).toQuery());
         Match km = kr.getMatch(0);
         km.addHighlight(0, 1, (short) 7);
         assertEquals("<span class=\"context-left\"></span><mark><mark class=\"class-7 level-0\">ab</mark>c</mark><span class=\"context-right\"></span>", km.getSnippetHTML());
@@ -190,7 +190,7 @@
 
         QueryBuilder kq = new QueryBuilder("base");
         SpanQuery q = (SpanQuery) kq.or(kq._(1, kq.seg("s:a"))).or(kq._(2, kq.seg("s:b"))).toQuery();
-        KorapResult kr = ki.search(q);
+        Result kr = ki.search(q);
         assertEquals((long) 14, kr.getTotalResults());
         assertEquals("[{1:a}]bab", kr.getMatch(0).getSnippetBrackets());
         assertEquals("a[{2:b}]ab", kr.getMatch(1).getSnippetBrackets());
@@ -283,7 +283,7 @@
         String json = getString(getClass().getResource("/queries/bugs/greater_highlights_15.jsonld").getFile());
 	
         Krill ks = new Krill(json);
-        KorapResult kr = ks.apply(ki);
+        Result kr = ks.apply(ki);
         assertEquals(kr.getSerialQuery(),"{15: tokens:s:Alphabet}");
         assertEquals(kr.getTotalResults(),7);
         assertEquals(kr.getStartIndex(),0);
diff --git a/src/test/java/de/ids_mannheim/korap/index/TestAttributeIndex.java b/src/test/java/de/ids_mannheim/korap/index/TestAttributeIndex.java
index 2ba205d..a971a4d 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestAttributeIndex.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestAttributeIndex.java
@@ -12,7 +12,7 @@
 import org.junit.Test;
 
 import de.ids_mannheim.korap.KrillIndex;
-import de.ids_mannheim.korap.KorapResult;
+import de.ids_mannheim.korap.response.Result;
 import de.ids_mannheim.korap.query.SpanAttributeQuery;
 import de.ids_mannheim.korap.query.SpanElementQuery;
 import de.ids_mannheim.korap.query.SpanNextQuery;
@@ -21,7 +21,7 @@
 public class TestAttributeIndex {
 
     private KrillIndex ki = new KrillIndex();
-    private KorapResult kr;
+    private Result kr;
     private FieldDocument fd;
 
     public TestAttributeIndex() throws IOException {
diff --git a/src/test/java/de/ids_mannheim/korap/index/TestClassIndex.java b/src/test/java/de/ids_mannheim/korap/index/TestClassIndex.java
index 2bb6175..f1899c4 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestClassIndex.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestClassIndex.java
@@ -15,7 +15,7 @@
 
 import de.ids_mannheim.korap.KrillIndex;
 import de.ids_mannheim.korap.KrillQuery;
-import de.ids_mannheim.korap.KorapResult;
+import de.ids_mannheim.korap.response.Result;
 import de.ids_mannheim.korap.query.SpanNextQuery;
 import de.ids_mannheim.korap.query.SpanClassQuery;
 import de.ids_mannheim.korap.query.SpanElementQuery;
@@ -55,7 +55,7 @@
 	ki.commit();
 
 	SpanQuery sq;
-	KorapResult kr;
+	Result kr;
 
 	sq = new SpanNextQuery(
             new SpanTermQuery(new Term("base", "s:b")),
@@ -246,7 +246,7 @@
 	ki.commit();
 
 	SpanQuery sq;
-	KorapResult kr;
+	Result kr;
 
 	/*
 	sq = new SpanNextQuery(
diff --git a/src/test/java/de/ids_mannheim/korap/index/TestDistanceExclusionIndex.java b/src/test/java/de/ids_mannheim/korap/index/TestDistanceExclusionIndex.java
index e5c4e82..d97e44a 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestDistanceExclusionIndex.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestDistanceExclusionIndex.java
@@ -10,7 +10,7 @@
 import org.junit.Test;
 
 import de.ids_mannheim.korap.KrillIndex;
-import de.ids_mannheim.korap.KorapResult;
+import de.ids_mannheim.korap.response.Result;
 import de.ids_mannheim.korap.query.DistanceConstraint;
 import de.ids_mannheim.korap.query.SpanDistanceQuery;
 import de.ids_mannheim.korap.query.SpanElementQuery;
@@ -19,7 +19,7 @@
 public class TestDistanceExclusionIndex {
 
     private KrillIndex ki;
-	private KorapResult kr;
+	private Result kr;
 
 	/** Ordered, unordered
 	 * */
diff --git a/src/test/java/de/ids_mannheim/korap/index/TestDistanceIndex.java b/src/test/java/de/ids_mannheim/korap/index/TestDistanceIndex.java
index 69f24fc..df9b00e 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestDistanceIndex.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestDistanceIndex.java
@@ -12,7 +12,7 @@
 import org.junit.runners.JUnit4;
 
 import de.ids_mannheim.korap.KrillIndex;
-import de.ids_mannheim.korap.KorapResult;
+import de.ids_mannheim.korap.response.Result;
 import de.ids_mannheim.korap.query.DistanceConstraint;
 import de.ids_mannheim.korap.query.SpanDistanceQuery;
 import de.ids_mannheim.korap.query.SpanElementQuery;
@@ -20,7 +20,7 @@
 
 @RunWith(JUnit4.class)
 public class TestDistanceIndex {
-    KorapResult kr;
+    Result kr;
     KrillIndex ki;   
  
     private FieldDocument createFieldDoc0() {
diff --git a/src/test/java/de/ids_mannheim/korap/index/TestElementDistanceExclusionIndex.java b/src/test/java/de/ids_mannheim/korap/index/TestElementDistanceExclusionIndex.java
index 616bbf4..0ac7bad 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestElementDistanceExclusionIndex.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestElementDistanceExclusionIndex.java
@@ -10,7 +10,7 @@
 import org.junit.Test;
 
 import de.ids_mannheim.korap.KrillIndex;
-import de.ids_mannheim.korap.KorapResult;
+import de.ids_mannheim.korap.response.Result;
 import de.ids_mannheim.korap.query.DistanceConstraint;
 import de.ids_mannheim.korap.query.SpanDistanceQuery;
 import de.ids_mannheim.korap.query.SpanElementQuery;
@@ -18,7 +18,7 @@
 
 public class TestElementDistanceExclusionIndex {
 	
-    KorapResult kr;
+    Result kr;
     KrillIndex ki; 
     
     private SpanQuery createQuery(String e, String x, String y, int min, int max, boolean isOrdered,
diff --git a/src/test/java/de/ids_mannheim/korap/index/TestElementDistanceIndex.java b/src/test/java/de/ids_mannheim/korap/index/TestElementDistanceIndex.java
index b5eed89..4c31b16 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestElementDistanceIndex.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestElementDistanceIndex.java
@@ -18,7 +18,7 @@
 import de.ids_mannheim.korap.KrillIndex;
 import de.ids_mannheim.korap.response.Match;
 import de.ids_mannheim.korap.KrillQuery;
-import de.ids_mannheim.korap.KorapResult;
+import de.ids_mannheim.korap.response.Result;
 import de.ids_mannheim.korap.query.QueryBuilder;
 import de.ids_mannheim.korap.query.DistanceConstraint;
 import de.ids_mannheim.korap.query.SpanDistanceQuery;
@@ -30,7 +30,7 @@
 @RunWith(JUnit4.class)
 public class TestElementDistanceIndex {
 	
-	KorapResult kr;
+	Result kr;
     KrillIndex ki;   
     
 	private FieldDocument createFieldDoc0() {
diff --git a/src/test/java/de/ids_mannheim/korap/index/TestElementIndex.java b/src/test/java/de/ids_mannheim/korap/index/TestElementIndex.java
index 00179be..3999807 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestElementIndex.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestElementIndex.java
@@ -15,7 +15,7 @@
 
 import de.ids_mannheim.korap.KrillIndex;
 import de.ids_mannheim.korap.KrillQuery;
-import de.ids_mannheim.korap.KorapResult;
+import de.ids_mannheim.korap.response.Result;
 import de.ids_mannheim.korap.query.SpanElementQuery;
 import de.ids_mannheim.korap.index.FieldDocument;
 import de.ids_mannheim.korap.model.MultiTermTokenStream;
@@ -76,7 +76,7 @@
 
 	SpanQuery sq = new SpanElementQuery("base", "a");
 
-	KorapResult kr = ki.search(sq, (short) 10);
+	Result kr = ki.search(sq, (short) 10);
 
 	assertEquals("totalResults", kr.getTotalResults(), 6);
 
@@ -124,7 +124,7 @@
 
 	SpanQuery sq = new SpanElementQuery("base", "a");
 
-	KorapResult kr = ki.search(sq, (short) 10);
+	Result kr = ki.search(sq, (short) 10);
 
 	assertEquals("totalResults", kr.getTotalResults(), 3);
 	assertEquals("StartPos (0)", 0, kr.getMatch(0).startPos);
@@ -224,7 +224,7 @@
 
 	SpanQuery sq = new SpanElementQuery("base", "a");
 
-	KorapResult kr = ki.search(sq, (short) 15);
+	Result kr = ki.search(sq, (short) 15);
 
 	// System.err.println(kr.toJSON());
 
@@ -286,7 +286,7 @@
 
 	SpanQuery sq = new SpanElementQuery("base", "a");
 
-	KorapResult kr = ki.search(sq, 0, (short) 15, false, (short) 3, false, (short) 3);
+	Result kr = ki.search(sq, 0, (short) 15, false, (short) 3, false, (short) 3);
 	
 	assertEquals("... ccc[222222]fff ...", kr.getMatch(0).getSnippetBrackets());
 	assertEquals("... fff[333333]iii ...", kr.getMatch(1).getSnippetBrackets());
@@ -319,7 +319,7 @@
 
 	SpanQuery sq = new SpanElementQuery("base", "a");
 
-	KorapResult kr = ki.search(sq, 0, (short) 15, false, (short) 3, false, (short) 3);
+	Result kr = ki.search(sq, 0, (short) 15, false, (short) 3, false, (short) 3);
 
 	assertEquals("[111111]ccc ...", kr.getMatch(0).getSnippetBrackets());
 	assertEquals("... ccc[222222]fff ...", kr.getMatch(1).getSnippetBrackets());
@@ -400,7 +400,7 @@
 	ki.commit();
 
 	SpanQuery sq;
-	KorapResult kr;
+	Result kr;
 
 	sq = new SpanElementQuery("base", "a");
 	kr = ki.search(sq, (short) 15);
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 161c0a1..03aff09 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestFieldDocument.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestFieldDocument.java
@@ -18,7 +18,7 @@
 
 import de.ids_mannheim.korap.KrillIndex;
 import de.ids_mannheim.korap.KrillQuery;
-import de.ids_mannheim.korap.KorapResult;
+import de.ids_mannheim.korap.response.Result;
 import de.ids_mannheim.korap.Krill;
 import de.ids_mannheim.korap.KrillMeta;
 import de.ids_mannheim.korap.response.Match;
@@ -136,7 +136,7 @@
 	assertEquals(fd.getPubDate().toDisplay(),"2013-06-17");
 
 	QueryBuilder kq = new QueryBuilder("tokens");
-	KorapResult kr = ki.search((SpanQuery) kq.seq(kq._(3, kq.seg("s:b"))).toQuery());
+	Result kr = ki.search((SpanQuery) kq.seq(kq._(3, kq.seg("s:b"))).toQuery());
 
 	Match km = kr.getMatch(0);
 
@@ -177,7 +177,7 @@
 	QueryBuilder kq = new QueryBuilder("tokens");
 
 	Krill ks;
-	KorapResult kr;
+	Result kr;
 
 	// Start creating query
 	// within(<s>, {1: {2: [mate/p=ADJA & mate/m=number:sg]}[opennlp/p=NN & tt/p=NN]})
@@ -225,7 +225,7 @@
 
 	SpanQueryWrapper sqwi = jsonQuery(getClass().getResource("/queries/bsp18.jsonld").getFile());
 
-	KorapResult kr = ki.search(sqwi.toQuery(), 0, (short) 5, true, (short) 2, false, (short) 5);
+	Result kr = ki.search(sqwi.toQuery(), 0, (short) 5, true, (short) 2, false, (short) 5);
 
 	// Bug:
 	// System.err.println(kr.toJSON());
diff --git a/src/test/java/de/ids_mannheim/korap/index/TestMatchIdentifier.java b/src/test/java/de/ids_mannheim/korap/index/TestMatchIdentifier.java
index 589e964..d3184ae 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestMatchIdentifier.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestMatchIdentifier.java
@@ -16,7 +16,7 @@
 import de.ids_mannheim.korap.KrillQuery;
 import de.ids_mannheim.korap.Krill;
 import de.ids_mannheim.korap.query.QueryBuilder;
-import de.ids_mannheim.korap.KorapResult;
+import de.ids_mannheim.korap.response.Result;
 import de.ids_mannheim.korap.response.Match;
 import de.ids_mannheim.korap.util.QueryException;
 
@@ -96,7 +96,7 @@
 	Krill ks = new Krill(
 	    kq._(2,kq.seq(kq.seg("s:b")).append(kq._(kq.seg("s:a"))))
         );
-	KorapResult kr = ki.search(ks);
+	Result kr = ki.search(ks);
 
 	assertEquals("totalResults", kr.getTotalResults(),    1);
 	assertEquals("StartPos (0)", kr.getMatch(0).startPos, 7);
diff --git a/src/test/java/de/ids_mannheim/korap/index/TestMatchIndex.java b/src/test/java/de/ids_mannheim/korap/index/TestMatchIndex.java
index a44a493..9ee4111 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestMatchIndex.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestMatchIndex.java
@@ -15,7 +15,7 @@
 
 import de.ids_mannheim.korap.KrillIndex;
 import de.ids_mannheim.korap.KrillQuery;
-import de.ids_mannheim.korap.KorapResult;
+import de.ids_mannheim.korap.response.Result;
 import de.ids_mannheim.korap.KrillCollection;
 import de.ids_mannheim.korap.response.Match;
 import de.ids_mannheim.korap.query.*;
@@ -57,7 +57,7 @@
 	ki.commit();
 
 	SpanQuery sq;
-	KorapResult kr;
+	Result kr;
 
 	sq = new SpanNextQuery(
             new SpanTermQuery(new Term("base", "s:b")),
@@ -231,7 +231,7 @@
         ki.commit();
 
         SpanQuery sq;
-        KorapResult kr;
+        Result kr;
 
         // No contexts:
         sq = new SpanOrQuery(
@@ -285,7 +285,7 @@
         ki.addDoc(fd);
         ki.commit();
 
-        KorapResult kr;
+        Result kr;
 
         QueryBuilder kq = new QueryBuilder("base");
 
@@ -320,7 +320,7 @@
         ki.commit();
 
         SpanQuery sq;
-        KorapResult kr;
+        Result kr;
 
         sq = new SpanFocusQuery(
             new SpanNextQuery(
@@ -380,7 +380,7 @@
         ki.commit();
 
         SpanQuery sq;
-        KorapResult kr;
+        Result kr;
         
         sq = new SpanWithinQuery(
             new SpanClassQuery(new SpanElementQuery("base", "s"), (byte) 2),
@@ -469,7 +469,7 @@
         ki.commit();
 
         SpanQuery sq;
-        KorapResult kr;
+        Result kr;
         KrillCollection kc = new KrillCollection(ki);
 
         assertEquals("Documents", 4, kc.numberOf("documents"));
diff --git a/src/test/java/de/ids_mannheim/korap/index/TestMultipleDistanceIndex.java b/src/test/java/de/ids_mannheim/korap/index/TestMultipleDistanceIndex.java
index ada1e21..666216b 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestMultipleDistanceIndex.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestMultipleDistanceIndex.java
@@ -14,7 +14,7 @@
 import org.junit.runners.JUnit4;
 
 import de.ids_mannheim.korap.KrillIndex;
-import de.ids_mannheim.korap.KorapResult;
+import de.ids_mannheim.korap.response.Result;
 import de.ids_mannheim.korap.query.DistanceConstraint;
 import de.ids_mannheim.korap.query.SpanDistanceQuery;
 import de.ids_mannheim.korap.query.SpanElementQuery;
@@ -25,7 +25,7 @@
 public class TestMultipleDistanceIndex {
 	
 	private KrillIndex ki;
-	private KorapResult kr;
+	private Result kr;
 
 	public SpanQuery createQuery(String x, String y, List<DistanceConstraint> 
 			constraints, boolean isOrdered){
diff --git a/src/test/java/de/ids_mannheim/korap/index/TestNextIndex.java b/src/test/java/de/ids_mannheim/korap/index/TestNextIndex.java
index e254f3a..19f83df 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestNextIndex.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestNextIndex.java
@@ -17,7 +17,7 @@
 import de.ids_mannheim.korap.KrillIndex;
 import de.ids_mannheim.korap.response.Match;
 import de.ids_mannheim.korap.KrillQuery;
-import de.ids_mannheim.korap.KorapResult;
+import de.ids_mannheim.korap.response.Result;
 import de.ids_mannheim.korap.query.SpanNextQuery;
 import de.ids_mannheim.korap.index.FieldDocument;
 import de.ids_mannheim.korap.model.MultiTermTokenStream;
@@ -61,7 +61,7 @@
         ki.commit();
 
         SpanQuery sq;
-        KorapResult kr;
+        Result kr;
 
         sq = new SpanNextQuery(
             new SpanTermQuery(new Term("base", "s:a")),
@@ -139,7 +139,7 @@
 	ki.commit();
 
 	SpanQuery sq;
-	KorapResult kr;
+	Result kr;
 
 	sq = new SpanNextQuery(
 	       new SpanTermQuery(new Term("base", "s:c")),
@@ -174,7 +174,7 @@
 	ki.commit();
 
 	SpanQuery sq;
-	KorapResult kr;
+	Result kr;
 
 	sq = new SpanNextQuery(
 	       new SpanElementQuery("base", "x"),
@@ -226,7 +226,7 @@
         ki.commit();
 
         SpanQuery sq;
-        KorapResult kr;
+        Result kr;
 
         sq = new SpanNextQuery(
             new SpanElementQuery("base", "x"),
@@ -274,7 +274,7 @@
 					new SpanTermQuery(new Term("base","s:d")),
 					new SpanTermQuery(new Term("base","s:b"))
 				);
-		KorapResult kr = ki.search(sq, (short) 10);			
+		Result kr = ki.search(sq, (short) 10);			
 				
 		assertEquals("totalResults", kr.getTotalResults(), 2);
 		// Match #0
@@ -315,7 +315,7 @@
 				)
 			);
 		
-		KorapResult kr = ki.search(sq, (short) 10);			
+		Result kr = ki.search(sq, (short) 10);			
 		assertEquals("totalResults", kr.getTotalResults(), 1);
 		assertEquals("doc-number", 2, kr.getMatch(0).getLocalDocID());
 		assertEquals("StartPos", 0, kr.getMatch(0).startPos);
@@ -335,7 +335,7 @@
 		SpanSequenceQueryWrapper sq = new SpanSequenceQueryWrapper("base");
 		sq.append("i:b").append("i:d").withConstraint(1,3);
 		
-		KorapResult kr = ki.search(sq.toQuery(), (short) 10);			
+		Result kr = ki.search(sq.toQuery(), (short) 10);			
 
 		assertEquals("totalResults", kr.getTotalResults(), 3);
 		assertEquals("doc-number", "match-doc-0-p2-5", kr.getMatch(0).getID());
@@ -355,7 +355,7 @@
 		SpanSequenceQueryWrapper sq = new SpanSequenceQueryWrapper("base");
 		sq.append("i:a").append("i:b").withConstraint(0, 3, "e");
 		
-		KorapResult kr = ki.search(sq.toQuery(), (short) 10);			
+		Result kr = ki.search(sq.toQuery(), (short) 10);			
 
 		assertEquals("totalResults", kr.getTotalResults(), 3);
 		assertEquals("doc-number", "match-doc-0-p3-6", kr.getMatch(0).getID());
@@ -376,7 +376,7 @@
 				new SpanTermQuery(new Term("base","s:c"))
 			);
 		
-		KorapResult kr = ki.search(sq, (short) 10);
+		Result kr = ki.search(sq, (short) 10);
 		
 		assertEquals(0, kr.getMatch(0).getStartPos());
 		assertEquals(2, kr.getMatch(0).getEndPos());
diff --git a/src/test/java/de/ids_mannheim/korap/index/TestPosToOffset.java b/src/test/java/de/ids_mannheim/korap/index/TestPosToOffset.java
index d87d5b6..3d381ae 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestPosToOffset.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestPosToOffset.java
@@ -11,7 +11,7 @@
 
 import de.ids_mannheim.korap.KrillIndex;
 import de.ids_mannheim.korap.KrillQuery;
-import de.ids_mannheim.korap.KorapResult;
+import de.ids_mannheim.korap.response.Result;
 import de.ids_mannheim.korap.query.SpanElementQuery;
 import de.ids_mannheim.korap.query.SpanWithinQuery;
 import de.ids_mannheim.korap.query.SpanNextQuery;
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 0c022bf..aa1478e 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestRealIndex.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestRealIndex.java
@@ -14,12 +14,13 @@
 import org.junit.Test;
 
 import de.ids_mannheim.korap.*;
+import de.ids_mannheim.korap.response.Result;
 import de.ids_mannheim.korap.query.QueryBuilder;
 import de.ids_mannheim.korap.util.QueryException;
 
 public class TestRealIndex {
     KrillIndex ki;
-    KorapResult kr;
+    Result kr;
     Krill ks;
 	
     public TestRealIndex() throws IOException {
diff --git a/src/test/java/de/ids_mannheim/korap/index/TestRegexWildcardIndex.java b/src/test/java/de/ids_mannheim/korap/index/TestRegexWildcardIndex.java
index 9b9370a..648ed63 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestRegexWildcardIndex.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestRegexWildcardIndex.java
@@ -15,7 +15,7 @@
 
 import de.ids_mannheim.korap.KrillIndex;
 import de.ids_mannheim.korap.KrillQuery;
-import de.ids_mannheim.korap.KorapResult;
+import de.ids_mannheim.korap.response.Result;
 import de.ids_mannheim.korap.Krill;
 import de.ids_mannheim.korap.query.QueryBuilder;
 import de.ids_mannheim.korap.index.FieldDocument;
@@ -57,7 +57,7 @@
 	ks.getMeta().getContext().left.setToken(true).setLength(1);
 	ks.getMeta().getContext().right.setToken(true).setLength(1);
 
-	KorapResult kr = ki.search(ks);
+	Result kr = ki.search(ks);
 	assertEquals((long) 2, kr.getTotalResults());
 	assertEquals("[affe] afffe ...", kr.getMatch(0).getSnippetBrackets());
 	assertEquals("affe [afffe] baum ...", kr.getMatch(1).getSnippetBrackets());
@@ -114,7 +114,7 @@
 	ks.getMeta().getContext().left.setToken(true).setLength(1);
 	ks.getMeta().getContext().right.setToken(true).setLength(1);
 
-	KorapResult kr = ki.search(ks);
+	Result kr = ki.search(ks);
 	assertEquals((long) 2, kr.getTotalResults());
 	assertEquals("[affe] afffe ...", kr.getMatch(0).getSnippetBrackets());
 	assertEquals("affe [afffe] baum ...", kr.getMatch(1).getSnippetBrackets());
@@ -173,7 +173,7 @@
 	ks.getMeta().getContext().left.setToken(true).setLength(1);
 	ks.getMeta().getContext().right.setToken(true).setLength(1);
 
-	KorapResult kr = ki.search(ks);
+	Result kr = ki.search(ks);
 	assertEquals((long) 2, kr.getTotalResults());
 	assertEquals("[AfFe] aFfFE ...", kr.getMatch(0).getSnippetBrackets());
 	assertEquals("AfFe [aFfFE] Baum ...", kr.getMatch(1).getSnippetBrackets());
@@ -238,7 +238,7 @@
 	ks.getMeta().getContext().left.setToken(true).setLength(1);
 	ks.getMeta().getContext().right.setToken(true).setLength(1);
 
-	KorapResult kr = ki.search(ks);
+	Result kr = ki.search(ks);
 	assertEquals((long) 1, kr.getTotalResults());
 	assertEquals("[affe afffe] baum ...", kr.getMatch(0).getSnippetBrackets());
     };
@@ -279,7 +279,7 @@
 	ks.getMeta().getContext().left.setToken(true).setLength(1);
 	ks.getMeta().getContext().right.setToken(true).setLength(1);
 
-	KorapResult kr = ki.search(ks);
+	Result kr = ki.search(ks);
 	assertEquals((long) 1, kr.getTotalResults());
 	assertEquals("[affe afffe] baum ...", kr.getMatch(0).getSnippetBrackets());
     };
diff --git a/src/test/java/de/ids_mannheim/korap/index/TestRelationIndex.java b/src/test/java/de/ids_mannheim/korap/index/TestRelationIndex.java
index 38a1495..17db8e4 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestRelationIndex.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestRelationIndex.java
@@ -10,7 +10,7 @@
 
 import de.ids_mannheim.korap.KrillIndex;
 import de.ids_mannheim.korap.response.Match;
-import de.ids_mannheim.korap.KorapResult;
+import de.ids_mannheim.korap.response.Result;
 import de.ids_mannheim.korap.query.SpanAttributeQuery;
 import de.ids_mannheim.korap.query.SpanElementQuery;
 import de.ids_mannheim.korap.query.SpanRelationQuery;
@@ -60,7 +60,7 @@
 
 public class TestRelationIndex {
 	private KrillIndex ki;
-	private KorapResult kr;
+	private Result kr;
 
 	public TestRelationIndex() throws IOException {
 		ki = new KrillIndex();
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 220ca59..fe0621d 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestRepetitionIndex.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestRepetitionIndex.java
@@ -12,14 +12,14 @@
 
 import de.ids_mannheim.korap.KrillIndex;
 import de.ids_mannheim.korap.response.Match;
-import de.ids_mannheim.korap.KorapResult;
+import de.ids_mannheim.korap.response.Result;
 import de.ids_mannheim.korap.query.SpanNextQuery;
 import de.ids_mannheim.korap.query.SpanRepetitionQuery;
 
 public class TestRepetitionIndex {
 	
     private KrillIndex ki;
-	private KorapResult kr;
+	private Result kr;
 
 	private FieldDocument createFieldDoc0(){
     	FieldDocument fd = new FieldDocument();
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 d70f8b9..01e9aa3 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestSegmentIndex.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestSegmentIndex.java
@@ -14,7 +14,7 @@
 import org.slf4j.LoggerFactory;
 
 import de.ids_mannheim.korap.KrillIndex;
-import de.ids_mannheim.korap.KorapResult;
+import de.ids_mannheim.korap.response.Result;
 import de.ids_mannheim.korap.query.SpanElementQuery;
 import de.ids_mannheim.korap.query.SpanNextQuery;
 import de.ids_mannheim.korap.query.SpanSegmentQuery;
@@ -26,7 +26,7 @@
 public class TestSegmentIndex {
 	private SpanQuery sq;
 	private KrillIndex ki;
-	private KorapResult kr;
+	private Result kr;
 	private FieldDocument fd;
 	private Logger log;	
 	
diff --git a/src/test/java/de/ids_mannheim/korap/index/TestSegmentNegationIndex.java b/src/test/java/de/ids_mannheim/korap/index/TestSegmentNegationIndex.java
index 70308a8..9f1571a 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestSegmentNegationIndex.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestSegmentNegationIndex.java
@@ -14,7 +14,7 @@
 import org.slf4j.LoggerFactory;
 
 import de.ids_mannheim.korap.KrillIndex;
-import de.ids_mannheim.korap.KorapResult;
+import de.ids_mannheim.korap.response.Result;
 import de.ids_mannheim.korap.query.SpanElementQuery;
 import de.ids_mannheim.korap.query.SpanNextQuery;
 import de.ids_mannheim.korap.query.SpanSegmentQuery;
@@ -25,7 +25,7 @@
 public class TestSegmentNegationIndex {
     private SpanQuery sq;
     private KrillIndex ki;
-    private KorapResult kr;
+    private Result kr;
     private FieldDocument fd;
     private Logger log;	
 	
diff --git a/src/test/java/de/ids_mannheim/korap/index/TestSpanExpansionIndex.java b/src/test/java/de/ids_mannheim/korap/index/TestSpanExpansionIndex.java
index 123d8e3..f612409 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestSpanExpansionIndex.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestSpanExpansionIndex.java
@@ -17,7 +17,7 @@
 
 import de.ids_mannheim.korap.KrillIndex;
 import de.ids_mannheim.korap.KrillQuery;
-import de.ids_mannheim.korap.KorapResult;
+import de.ids_mannheim.korap.response.Result;
 import de.ids_mannheim.korap.query.SpanElementQuery;
 import de.ids_mannheim.korap.query.SpanExpansionQuery;
 import de.ids_mannheim.korap.query.SpanRepetitionQuery;
@@ -26,7 +26,7 @@
 
 public class TestSpanExpansionIndex {
 
-    KorapResult kr;
+    Result kr;
     KrillIndex ki;
 
     public TestSpanExpansionIndex() throws IOException {
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 22541d0..41607cd 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestSubSpanIndex.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestSubSpanIndex.java
@@ -9,14 +9,14 @@
 import org.junit.Test;
 
 import de.ids_mannheim.korap.KrillIndex;
-import de.ids_mannheim.korap.KorapResult;
+import de.ids_mannheim.korap.response.Result;
 import de.ids_mannheim.korap.query.DistanceConstraint;
 import de.ids_mannheim.korap.query.SpanDistanceQuery;
 import de.ids_mannheim.korap.query.SpanSubspanQuery;
 
 public class TestSubSpanIndex {
 
-    KorapResult kr;
+    Result kr;
     KrillIndex ki;
 
     public TestSubSpanIndex () throws IOException {
diff --git a/src/test/java/de/ids_mannheim/korap/index/TestUnorderedDistanceIndex.java b/src/test/java/de/ids_mannheim/korap/index/TestUnorderedDistanceIndex.java
index c32a7aa..e19b719 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestUnorderedDistanceIndex.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestUnorderedDistanceIndex.java
@@ -12,7 +12,7 @@
 import org.junit.runners.JUnit4;
 
 import de.ids_mannheim.korap.KrillIndex;
-import de.ids_mannheim.korap.KorapResult;
+import de.ids_mannheim.korap.response.Result;
 import de.ids_mannheim.korap.query.DistanceConstraint;
 import de.ids_mannheim.korap.query.SpanDistanceQuery;
 import de.ids_mannheim.korap.query.SpanElementQuery;
@@ -22,7 +22,7 @@
 public class TestUnorderedDistanceIndex{
 	
     private KrillIndex ki;
-	private KorapResult kr;
+	private Result kr;
 
 	private FieldDocument createFieldDoc0(){
     	FieldDocument fd = new FieldDocument();
diff --git a/src/test/java/de/ids_mannheim/korap/index/TestUnorderedElementDistanceIndex.java b/src/test/java/de/ids_mannheim/korap/index/TestUnorderedElementDistanceIndex.java
index a9ad58e..305e574 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestUnorderedElementDistanceIndex.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestUnorderedElementDistanceIndex.java
@@ -12,7 +12,7 @@
 import org.junit.runners.JUnit4;
 
 import de.ids_mannheim.korap.KrillIndex;
-import de.ids_mannheim.korap.KorapResult;
+import de.ids_mannheim.korap.response.Result;
 import de.ids_mannheim.korap.query.DistanceConstraint;
 import de.ids_mannheim.korap.query.SpanDistanceQuery;
 import de.ids_mannheim.korap.query.SpanElementQuery;
@@ -22,7 +22,7 @@
 public class TestUnorderedElementDistanceIndex {
 	
 	private KrillIndex ki;
-	private KorapResult kr;
+	private Result kr;
 	
 	private FieldDocument createFieldDoc0() {
     	FieldDocument fd = new FieldDocument();
diff --git a/src/test/java/de/ids_mannheim/korap/index/TestWPDIndex.java b/src/test/java/de/ids_mannheim/korap/index/TestWPDIndex.java
index cf7dda2..dc3b4da 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestWPDIndex.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestWPDIndex.java
@@ -16,7 +16,7 @@
 import de.ids_mannheim.korap.KrillCollection;
 import de.ids_mannheim.korap.KrillIndex;
 import de.ids_mannheim.korap.response.Match;
-import de.ids_mannheim.korap.KorapResult;
+import de.ids_mannheim.korap.response.Result;
 import de.ids_mannheim.korap.Krill;
 import de.ids_mannheim.korap.collection.BooleanFilter;
 import de.ids_mannheim.korap.query.DistanceConstraint;
@@ -28,7 +28,7 @@
 public class TestWPDIndex {
 	long start, end;
 	KrillIndex ki;
-	KorapResult kr;
+	Result kr;
 	Krill ks;
 	
 	private SpanDistanceQuery createElementDistanceQuery(String e, String x, String y, 
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 df59a05..ecfda73 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestWithinIndex.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestWithinIndex.java
@@ -17,7 +17,7 @@
 import de.ids_mannheim.korap.KrillIndex;
 import de.ids_mannheim.korap.response.Match;
 import de.ids_mannheim.korap.KrillQuery;
-import de.ids_mannheim.korap.KorapResult;
+import de.ids_mannheim.korap.response.Result;
 import de.ids_mannheim.korap.query.SpanElementQuery;
 import de.ids_mannheim.korap.query.SpanWithinQuery;
 import de.ids_mannheim.korap.query.SpanNextQuery;
@@ -69,7 +69,7 @@
         ki.commit();
 
         SpanQuery sq;
-        KorapResult kr;
+        Result kr;
 
         sq = new SpanWithinQuery(
             new SpanElementQuery("base", "a"),
@@ -142,7 +142,7 @@
         ki.commit();
         
         SpanQuery sq;
-        KorapResult kr;
+        Result kr;
 
         sq = new SpanWithinQuery(
             new SpanElementQuery("base", "a"),
@@ -247,7 +247,7 @@
         ki.commit();
 
         SpanQuery sq;
-        KorapResult kr;
+        Result kr;
 
         sq = new SpanWithinQuery(
             new SpanElementQuery("base", "a"),
@@ -335,7 +335,7 @@
         ki.commit();
 
         SpanQuery sq;
-        KorapResult kr;
+        Result kr;
 
         sq = new SpanElementQuery("base", "a");
         kr = ki.search(sq, (short) 15);
@@ -398,7 +398,7 @@
         assertEquals(1, ki.numberOf("documents"));
 
         SpanQuery sq;
-        KorapResult kr;
+        Result kr;
 
         sq = new SpanElementQuery("base", "a");
         kr = ki.search(sq, (short) 10);
@@ -472,7 +472,7 @@
         assertEquals(1, ki.numberOf("documents"));
 
         SpanQuery sq = new SpanElementQuery("base", "a");
-        KorapResult kr = ki.search(sq, (short) 10);
+        Result kr = ki.search(sq, (short) 10);
 
         assertEquals("totalResults", kr.getTotalResults(), 3);
         assertEquals("StartPos (0)", 0, kr.getMatch(0).startPos);
@@ -541,7 +541,7 @@
 
         SpanQuery sq = new SpanElementQuery("base", "a");
 
-        KorapResult kr = ki.search(sq, (short) 10);
+        Result kr = ki.search(sq, (short) 10);
     
         assertEquals("totalResults", kr.getTotalResults(), 4);
         assertEquals("StartPos (0)", 0, kr.getMatch(0).startPos);
@@ -616,7 +616,7 @@
 
         SpanQuery sq = new SpanElementQuery("base", "a");
 
-        KorapResult kr = ki.search(sq, (short) 10);
+        Result kr = ki.search(sq, (short) 10);
     
         assertEquals("totalResults", kr.getTotalResults(), 5);
 
@@ -760,7 +760,7 @@
 
         SpanQuery sq = new SpanElementQuery("base", "a");
 
-        KorapResult kr = ki.search(sq, (short) 15);
+        Result kr = ki.search(sq, (short) 15);
 
         assertEquals("totalResults", kr.getTotalResults(), 12);
         assertEquals("StartPos (0)", 0, kr.getMatch(0).startPos);
@@ -813,7 +813,7 @@
         ki.commit();
         
         SpanQuery sq = new SpanClassQuery(new SpanElementQuery("base", "sentence"), (byte)3);
-        KorapResult kr;
+        Result kr;
         kr = ki.search(sq, 0, (short) 15, true, (short) 1, true, (short) 1);
         assertEquals("totalResults", kr.getTotalResults(), 1);
         
@@ -928,7 +928,7 @@
             new SpanTermQuery(new Term("base", "s:x"))
         );
 
-        KorapResult kr = ki.search(sq, (short) 10);
+        Result kr = ki.search(sq, (short) 10);
 
         assertEquals("totalResults", kr.getTotalResults(), 2);
         assertEquals("StartPos (0)", 2, kr.getMatch(0).startPos);
@@ -971,7 +971,7 @@
             )
         );
 
-        KorapResult kr = ki.search(sq, (short) 10);
+        Result kr = ki.search(sq, (short) 10);
 
         assertEquals("totalResults", kr.getTotalResults(), 4);
 
@@ -1020,7 +1020,7 @@
             )
         );
 
-        KorapResult kr = ki.search(sq, (short) 10);
+        Result kr = ki.search(sq, (short) 10);
         assertEquals("totalResults", kr.getTotalResults(), 0);
     };
 
@@ -1059,7 +1059,7 @@
             )
         );
 
-        KorapResult kr = ki.search(sq, (short) 10);
+        Result kr = ki.search(sq, (short) 10);
         
         assertEquals("totalResults", kr.getTotalResults(), 0);
     };
@@ -1106,7 +1106,7 @@
         );
 
         ki.commit();
-        KorapResult kr = ki.search(sq, (short) 10);
+        Result kr = ki.search(sq, (short) 10);
         assertEquals(2, kr.getTotalResults());
         assertEquals(0, kr.getMatch(0).getLocalDocID());
         assertEquals(76, kr.getMatch(0).getStartPos());
diff --git a/src/test/java/de/ids_mannheim/korap/query/TestTemporaryQueryLimitations.java b/src/test/java/de/ids_mannheim/korap/query/TestTemporaryQueryLimitations.java
index df6533f..153ff5f 100644
--- a/src/test/java/de/ids_mannheim/korap/query/TestTemporaryQueryLimitations.java
+++ b/src/test/java/de/ids_mannheim/korap/query/TestTemporaryQueryLimitations.java
@@ -7,7 +7,7 @@
 
 import de.ids_mannheim.korap.KrillIndex;
 import de.ids_mannheim.korap.KrillQuery;
-import de.ids_mannheim.korap.KorapResult;
+import de.ids_mannheim.korap.response.Result;
 import de.ids_mannheim.korap.Krill;
 import de.ids_mannheim.korap.response.Match;
 import de.ids_mannheim.korap.index.FieldDocument;
@@ -53,7 +53,7 @@
 	json = getString(getClass().getResource("/queries/bugs/cosmas_classrefcheck.jsonld").getFile());
 	
 	Krill ks = new Krill(json);
-	KorapResult kr = ks.apply(ki);
+	Result kr = ks.apply(ki);
 	assertEquals(kr.getSerialQuery(),"focus(130: {131: spanContain({129: <tokens:s />}, {130: tokens:s:wegen})})");
 	assertEquals(kr.getTotalResults(),0);
 	assertEquals(kr.getStartIndex(),0);
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 7707ebf..822b3bf 100644
--- a/src/test/java/de/ids_mannheim/korap/search/TestKrill.java
+++ b/src/test/java/de/ids_mannheim/korap/search/TestKrill.java
@@ -14,7 +14,7 @@
 import de.ids_mannheim.korap.index.FieldDocument;
 import de.ids_mannheim.korap.meta.SearchContext;
 import de.ids_mannheim.korap.collection.CollectionBuilder;
-import de.ids_mannheim.korap.KorapResult;
+import de.ids_mannheim.korap.response.Result;
 import java.nio.file.Files;
 import java.nio.file.FileSystem;
 import java.nio.file.Path;
@@ -116,7 +116,7 @@
         meta.getContext().left.setLength(1);
         meta.getContext().right.setLength(1);
         
-        KorapResult kr = ks.apply(ki);
+        Result kr = ks.apply(ki);
         assertEquals(kr.getTotalResults(), 6);
         assertEquals(
             kr.getMatch(0).getSnippetBrackets(),
@@ -157,7 +157,7 @@
         );
 
         Krill ks = new Krill(json);
-		KorapResult kr = ks.apply(ki);
+		Result kr = ks.apply(ki);
         assertEquals(kr.getTotalResults(), 66);
         assertEquals(5, kr.getItemsPerPage());
         assertEquals(5, kr.getStartIndex());
@@ -199,7 +199,7 @@
         );
 
         Krill ks = new Krill(json);
-        KorapResult kr = ks.apply(ki);
+        Result kr = ks.apply(ki);
 
         assertEquals(kr.getTotalResults(), 1);
 
@@ -246,7 +246,7 @@
             );
         };
         ki.commit();
-        KorapResult kr = new Krill("{ query").apply(ki);
+        Result kr = new Krill("{ query").apply(ki);
         assertEquals(kr.getTotalResults(), 0);
         assertEquals(kr.getError(0).getMessage(), "Unable to parse JSON");
     };
@@ -275,7 +275,7 @@
             getClass().getResource("/queries/bsp-fail1.jsonld").getFile()
         );
 
-        KorapResult kr = new Krill(json).apply(ki);
+        Result kr = new Krill(json).apply(ki);
         assertEquals(0, kr.getStartIndex());
         assertEquals(kr.getTotalResults(), 0);
         assertEquals(25, kr.getItemsPerPage());
@@ -305,7 +305,7 @@
             getClass().getResource("/queries/bsp-fail2.jsonld").getFile()
         );
 
-        KorapResult kr = new Krill(json).apply(ki);
+        Result kr = new Krill(json).apply(ki);
         assertEquals(50, kr.getItemsPerPage());
         assertEquals(49950, kr.getStartIndex());
         assertEquals(kr.getTotalResults(), 0);
@@ -336,7 +336,7 @@
         );
 
         Krill ks = new Krill(json);
-        KorapResult kr = ks.apply(ki);
+        Result kr = ks.apply(ki);
         assertEquals(kr.getTotalResults(), 10);
         assertEquals("A bzw. a ist der erste Buchstabe des" +
                      " lateinischen [Alphabets] und ein Vokal." +
@@ -396,7 +396,7 @@
         );
 
         Krill ks = new Krill(json);
-        KorapResult kr = ks.apply(ki);
+        Result kr = ks.apply(ki);
         assertEquals(kr.getTotalResults(), 10);
         assertEquals(5, kr.getStartIndex());
         assertEquals(5, kr.getItemsPerPage());
@@ -444,7 +444,7 @@
         );
 
         Krill ks = new Krill(json);
-        KorapResult kr = ks.apply(ki);
+        Result kr = ks.apply(ki);
         assertEquals(kr.getTotalResults(), 10);
         assertEquals(0, kr.getStartIndex());
         assertEquals(20, kr.getItemsPerPage());
@@ -541,7 +541,7 @@
         kc.setIndex(ki);
         ks.setCollection(kc);
 
-        KorapResult kr = ks.apply(ki);
+        Result kr = ks.apply(ki);
 
         assertEquals(kr.getTotalResults(), 2);
         assertEquals(0, kr.getStartIndex());
@@ -628,7 +628,7 @@
             seg("mate/m:case:nom").
             with("mate/m:number:pl")
         );
-        KorapResult kr = ks.apply(ki);
+        Result kr = ks.apply(ki);
 
         assertEquals(kr.getTotalResults(), 148);
         assertEquals(0, kr.getStartIndex());
@@ -719,7 +719,7 @@
             seg("mate/m:case:nom").
             with("mate/m:number:sg")
         );
-        KorapResult kr = ks.apply(ki);
+        Result kr = ks.apply(ki);
 
         assertEquals(kr.getTotalResults(), 6);
         assertEquals(0, kr.getStartIndex());
@@ -755,7 +755,7 @@
             )
         );
 
-        KorapResult kr = ks.apply(ki);
+        Result kr = ks.apply(ki);
         assertEquals(
             kr.getSerialQuery(),
             "focus(1: spanContain(<tokens:base/s:s />, {1: tokens:s:Leben}))"
@@ -831,7 +831,7 @@
         );
 	
         Krill ks = new Krill(json);
-        KorapResult kr = ks.apply(ki);
+        Result kr = ks.apply(ki);
         assertEquals(
             kr.getSerialQuery(),
             "{4: spanNext({1: spanNext({2: tokens:s:ins}, "+
@@ -876,7 +876,7 @@
         );
 	
         Krill ks = new Krill(json);
-        KorapResult kr = ks.apply(ki);
+        Result kr = ks.apply(ki);
 
         ObjectMapper mapper = new ObjectMapper();
         JsonNode res = mapper.readTree(kr.toTokenListJsonString());
@@ -942,7 +942,7 @@
         ks.setCollection(kc);
         assertEquals(1, kc.numberOf("documents"));
 
-        KorapResult kr = ks.apply(ki);
+        Result kr = ks.apply(ki);
         
         assertEquals(
             kr.getSerialQuery(),
@@ -1010,7 +1010,7 @@
         );
 	
         Krill ks = new Krill(json);
-        KorapResult kr = ks.apply(ki);
+        Result kr = ks.apply(ki);
         assertEquals(kr.getTotalResults(), 276);
         assertEquals(0, kr.getStartIndex());
         assertEquals(10, kr.getItemsPerPage());
@@ -1109,7 +1109,7 @@
         sc.left.setLength((short) 10);
         sc.right.setLength((short) 10);
         
-        KorapResult kr = ks.apply(ki);
+        Result kr = ks.apply(ki);
         assertEquals(
             kr.getMatch(1).getSnippetBrackets(),
             "... dezimalen [Wert] 65 sowohl ..."
@@ -1174,7 +1174,7 @@
             getFile()
         );
 
-        KorapResult kr = new Krill(json).apply(ki);
+        Result kr = new Krill(json).apply(ki);
 
         assertEquals(
             kr.getError(0).getMessage(),
@@ -1207,7 +1207,7 @@
             getFile()
         );
 	
-		KorapResult kr = new Krill(json).apply(ki);				
+		Result kr = new Krill(json).apply(ki);				
 		assertEquals("... Buchstabe des Alphabetes. In Dänemark ist " +
                      "[der alte Digraph Aa durch Å] ersetzt worden, " +
                      "in Eigennamen und Ortsnamen ...",
diff --git a/src/test/java/de/ids_mannheim/korap/search/TestMetaFields.java b/src/test/java/de/ids_mannheim/korap/search/TestMetaFields.java
index f1ec5c4..d79ce79 100644
--- a/src/test/java/de/ids_mannheim/korap/search/TestMetaFields.java
+++ b/src/test/java/de/ids_mannheim/korap/search/TestMetaFields.java
@@ -11,7 +11,7 @@
 import de.ids_mannheim.korap.KrillIndex;
 import de.ids_mannheim.korap.index.FieldDocument;
 import de.ids_mannheim.korap.meta.SearchContext;
-import de.ids_mannheim.korap.KorapResult;
+import de.ids_mannheim.korap.response.Result;
 import java.nio.file.Files;
 import java.nio.file.FileSystem;
 import java.nio.file.Path;
@@ -50,7 +50,7 @@
 	
         Krill ks = new Krill(jsonString);
 
-        KorapResult kr = ks.apply(ki);
+        Result kr = ks.apply(ki);
         assertEquals((long) 17, kr.getTotalResults());
         assertEquals(0, kr.getStartIndex());
         assertEquals(9, kr.getItemsPerPage());
diff --git a/src/test/java/de/ids_mannheim/korap/search/TestKorapResult.java b/src/test/java/de/ids_mannheim/korap/search/TestResult.java
similarity index 97%
rename from src/test/java/de/ids_mannheim/korap/search/TestKorapResult.java
rename to src/test/java/de/ids_mannheim/korap/search/TestResult.java
index 141fd42..cce192d 100644
--- a/src/test/java/de/ids_mannheim/korap/search/TestKorapResult.java
+++ b/src/test/java/de/ids_mannheim/korap/search/TestResult.java
@@ -8,7 +8,7 @@
 
 import de.ids_mannheim.korap.KrillIndex;
 import de.ids_mannheim.korap.KrillQuery;
-import de.ids_mannheim.korap.KorapResult;
+import de.ids_mannheim.korap.response.Result;
 import de.ids_mannheim.korap.Krill;
 import de.ids_mannheim.korap.response.Match;
 import de.ids_mannheim.korap.query.QueryBuilder;
@@ -28,7 +28,7 @@
 import org.junit.runners.JUnit4;
 
 @RunWith(JUnit4.class)
-public class TestKorapResult {
+public class TestResult {
 
     @Test
     public void checkJSONResult () throws Exception  {
@@ -60,7 +60,7 @@
         SpanQuery q = (SpanQuery) kq.or(
             kq._(1, kq.seg("s:a"))).or(kq._(2, kq.seg("s:b"))
         ).toQuery();
-        KorapResult kr = ki.search(q);
+        Result kr = ki.search(q);
         assertEquals((long) 7, kr.getTotalResults());
 
         ObjectMapper mapper = new ObjectMapper();
@@ -116,7 +116,7 @@
         String json = getString(getClass().getResource("/queries/bugs/optionality_warning.jsonld").getFile());
         Krill ks = new Krill(json);
 
-        KorapResult kr = ks.apply(ki);
+        Result kr = ks.apply(ki);
         assertEquals((long) 2, kr.getTotalResults());
 
         ObjectMapper mapper = new ObjectMapper();
@@ -159,7 +159,7 @@
             getClass().getResource("/queries/bsp-result-check.jsonld").getFile()
         );
         Krill ks = new Krill(json);
-        KorapResult kr = ks.apply(ki);
+        Result kr = ks.apply(ki);
         assertEquals((long) 7, kr.getTotalResults());
 
         ObjectMapper mapper = new ObjectMapper();
@@ -225,7 +225,7 @@
 
         QueryBuilder kq = new QueryBuilder("base");
         SpanQuery q = (SpanQuery) kq.seq(kq.seg("s:a")).append(kq.seg("s:b")).toQuery();
-        KorapResult kr = ki.search(q);
+        Result kr = ki.search(q);
 
         assertEquals((long) 3, kr.getTotalResults());
         ObjectMapper mapper = new ObjectMapper();
diff --git a/src/test/java/de/ids_mannheim/korap/server/TestResource.java b/src/test/java/de/ids_mannheim/korap/server/TestResource.java
index a4aeaae..bbe0e8c 100644
--- a/src/test/java/de/ids_mannheim/korap/server/TestResource.java
+++ b/src/test/java/de/ids_mannheim/korap/server/TestResource.java
@@ -20,7 +20,7 @@
 import java.io.FileInputStream;
 
 import de.ids_mannheim.korap.server.Node;
-import de.ids_mannheim.korap.KorapResult;
+import de.ids_mannheim.korap.response.Result;
 import de.ids_mannheim.korap.response.KorapResponse;
 import static de.ids_mannheim.korap.util.KrillString.*;
 
