diff --git a/src/test/java/de/ids_mannheim/korap/TestSimple.java b/src/test/java/de/ids_mannheim/korap/TestSimple.java
index a86e537..ecea801 100644
--- a/src/test/java/de/ids_mannheim/korap/TestSimple.java
+++ b/src/test/java/de/ids_mannheim/korap/TestSimple.java
@@ -89,7 +89,7 @@
 	
 	try {
 	    String json = getString(jsonFile);
-	    sqwi = new KorapQuery("tokens").fromJSON(json);
+	    sqwi = new KorapQuery("tokens").fromJson(json);
 	}
 	catch (QueryException e) {
 	    fail(e.getMessage());
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 78e3909..6e85f27 100644
--- a/src/test/java/de/ids_mannheim/korap/benchmark/TestBenchmarkSpans.java
+++ b/src/test/java/de/ids_mannheim/korap/benchmark/TestBenchmarkSpans.java
@@ -52,7 +52,7 @@
 	t2 = System.nanoTime();
 
 	// assertEquals("TotalResults", 30751, kr.getTotalResults());
-	assertEquals("TotalResults",  4803739, kr.getTotalResults());
+	assertEquals("TotalResults",  kr.getTotalResults(), 4803739);
 
 	// System.err.println(kr.toJSON());
 
@@ -105,7 +105,7 @@
 	double length = 0;
 	for (int i = 1; i <= rounds; i++) {
 	    kr = new KorapSearch(json).run(ki);
-	    length += kr.toJSON().length();
+	    length += kr.toJsonString().length();
 	};
 	t2 = System.nanoTime();
 
@@ -152,7 +152,7 @@
 
 	// System.err.println(kr.getMatch(0).toJSON());
 
-	assertEquals("TotalResults1", 4116282, kr.getTotalResults());
+	assertEquals("TotalResults1", kr.getTotalResults(), 4116282);
 	assertEquals("TotalResults2", kr.getTotalResults(), ki.numberOf("sentences"));
 
 	double seconds = (double)(t2-t1) / 1000000000.0;
@@ -227,7 +227,7 @@
 
 	/** HERE IS A BUG! */
 
-	System.err.println(kr.toJSON());
+	System.err.println(kr.toJsonString());
 
 
 
@@ -337,7 +337,7 @@
 	};
 	t2 = System.nanoTime();
 
-	assertEquals("TotalResults", 70229, kr.getTotalResults());
+	assertEquals("TotalResults", kr.getTotalResults(), 70229);
 
 	// System.err.println(kr.toJSON());
 
@@ -371,7 +371,7 @@
 	
 	try {
 	    String json = getString(jsonFile);
-	    sqwi = new KorapQuery("tokens").fromJSON(json);
+	    sqwi = new KorapQuery("tokens").fromJson(json);
 	}
 	catch (QueryException e) {
 	    fail(e.getMessage());
diff --git a/src/test/java/de/ids_mannheim/korap/collection/TestKorapCollectionLegacy.java b/src/test/java/de/ids_mannheim/korap/collection/TestKorapCollectionLegacy.java
index 4a54d61..a169a8f 100644
--- a/src/test/java/de/ids_mannheim/korap/collection/TestKorapCollectionLegacy.java
+++ b/src/test/java/de/ids_mannheim/korap/collection/TestKorapCollectionLegacy.java
@@ -83,7 +83,7 @@
 	SpanQuery query = kq.seg("opennlp/p:NN").with("tt/p:NN").toQuery();
 
 	KorapResult kr = kc.search(query);
-	assertEquals(70, kr.totalResults());
+	assertEquals(kr.getTotalResults(), 70);
 
 	kc.extend( kf.and("textClass", "uninteresting") );
 	assertEquals("Documents", 1, kc.numberOf("documents"));
@@ -160,7 +160,7 @@
 	SpanQuery query = kq.seg("opennlp/p:NN").with("tt/p:NN").toQuery();
 
 	KorapResult kr = kc.search(query);
-	assertEquals(70, kr.totalResults());
+	assertEquals(kr.getTotalResults(), 70);
 
 	kc.extend( kf.and("textClass", "uninteresting") );
 	assertEquals("Documents", 1, kc.numberOf("documents"));
@@ -214,7 +214,7 @@
 
 	KorapResult kr = kc.search(query);
 
-	assertEquals(369, kr.totalResults());
+	assertEquals(kr.getTotalResults(), 369);
 
 	kc.filter( kf.and("corpusID", "QQQ") );
 
@@ -267,6 +267,6 @@
 	assertEquals("Tokens",   1229, kc.numberOf("tokens"));
 
 	kr = kc.search(sq);
-        assertEquals(39,kr.getTotalResults());
+        assertEquals((long) 39, kr.getTotalResults());
     };
 };
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 8f59345..b3b5736 100644
--- a/src/test/java/de/ids_mannheim/korap/highlight/TestClass.java
+++ b/src/test/java/de/ids_mannheim/korap/highlight/TestClass.java
@@ -30,7 +30,7 @@
 		
 		String jsonPath = getClass().getResource("/queries/poly1.json").getFile();
 		String jsonQuery = readFile(jsonPath);
-		SpanQueryWrapper sqwi = new KorapQuery("tokens").fromJSON(
+		SpanQueryWrapper sqwi = new KorapQuery("tokens").fromJson(
 				jsonQuery
 		);
 		
@@ -63,7 +63,7 @@
 		
 		String jsonPath = getClass().getResource("/queries/poly4.json").getFile();
 		String jsonQuery = readFile(jsonPath);
-		SpanQueryWrapper sqwi = new KorapQuery("tokens").fromJSON(
+		SpanQueryWrapper sqwi = new KorapQuery("tokens").fromJson(
 				jsonQuery
 		);
 		SpanQuery sq = sqwi.toQuery();
@@ -85,7 +85,7 @@
 			);
 		}
 		*/
-		assertEquals(495, kr.getTotalResults());
+		assertEquals((long) 495, kr.getTotalResults());
 		assertEquals(3, kr.getMatch(0).getStartPos());
 		assertEquals(5, kr.getMatch(0).getEndPos());
 		
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 3e5bbf3..5542e44 100644
--- a/src/test/java/de/ids_mannheim/korap/highlight/TestHighlight.java
+++ b/src/test/java/de/ids_mannheim/korap/highlight/TestHighlight.java
@@ -191,7 +191,7 @@
 	KorapQuery kq = new KorapQuery("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);
-	assertEquals(14, kr.getTotalResults());
+	assertEquals((long) 14, kr.getTotalResults());
 	assertEquals("[{1:a}]bab", kr.getMatch(0).getSnippetBrackets());
 	assertEquals("a[{2:b}]ab", kr.getMatch(1).getSnippetBrackets());
 	assertEquals("ab[{1:a}]b", kr.getMatch(2).getSnippetBrackets());
@@ -217,7 +217,7 @@
 	qs.getContext().left.setToken(true).setLength((short) 1);
 	qs.getContext().right.setToken(true).setLength((short) 1);
 	kr = ki.search(qs);
-	assertEquals(10, kr.getTotalResults());
+	assertEquals((long) 10, kr.getTotalResults());
 
 	assertEquals("[{1:a}]b ...", kr.getMatch(0).getSnippetBrackets());
 	assertEquals("... b[{2:a}]b", kr.getMatch(1).getSnippetBrackets());
@@ -233,7 +233,7 @@
 	qs.getContext().left.setToken(true).setLength((short) 0);
 	qs.getContext().right.setToken(true).setLength((short) 0);
 	kr = ki.search(qs);
-	assertEquals(10, kr.getTotalResults());
+	assertEquals((long) 10, kr.getTotalResults());
 
 	assertEquals("[{1:a}] ...", kr.getMatch(0).getSnippetBrackets());
 	assertEquals("... [{2:a}] ...", kr.getMatch(1).getSnippetBrackets());
@@ -251,7 +251,7 @@
 	qs.getContext().left.setToken(true).setLength((short) 0);
 	qs.getContext().right.setToken(true).setLength((short) 0);
 	kr = ki.search(qs);
-	assertEquals(10, kr.getTotalResults());
+	assertEquals((long) 10, kr.getTotalResults());
 
 	assertEquals("[{3:{1:a}}] ...", kr.getMatch(0).getSnippetBrackets());
 	assertEquals("... [{3:{2:a}}] ...", kr.getMatch(1).getSnippetBrackets());
@@ -285,7 +285,7 @@
 	KorapSearch ks = new KorapSearch(json);
 	KorapResult kr = ks.run(ki);
 	assertEquals(kr.getQuery(),"{15: tokens:s:Alphabet}");
-	assertEquals(kr.totalResults(),7);
+	assertEquals(kr.getTotalResults(),7);
 	assertEquals(kr.getStartIndex(),0);
 	assertEquals(kr.getMatch(0).getSnippetBrackets(),"... 2. Herkunft Die aus dem proto-semitischen [{15:Alphabet}] stammende Urform des Buchstaben ist wahrscheinlich ...");
 	assertEquals(kr.getMatch(0).getSnippetHTML(),"<span class=\"context-left\"><span class=\"more\"></span>2. Herkunft Die aus dem proto-semitischen </span><span class=\"match\"><em class=\"class-15 level-0\">Alphabet</em></span><span class=\"context-right\"> stammende Urform des Buchstaben ist wahrscheinlich<span class=\"more\"></span></span>");
@@ -297,7 +297,7 @@
 	ks = new KorapSearch(json);
 	kr = ks.run(ki);
 	assertEquals(kr.getQuery(),"{16: tokens:s:Alphabet}");
-	assertEquals(kr.totalResults(),7);
+	assertEquals(kr.getTotalResults(),7);
 	assertEquals(kr.getStartIndex(),0);
 	assertEquals(kr.getMatch(0).getSnippetBrackets(),"... 2. Herkunft Die aus dem proto-semitischen [{16:Alphabet}] stammende Urform des Buchstaben ist wahrscheinlich ...");
 	assertEquals(kr.getMatch(0).getSnippetHTML(),"<span class=\"context-left\"><span class=\"more\"></span>2. Herkunft Die aus dem proto-semitischen </span><span class=\"match\"><em class=\"class-16 level-0\">Alphabet</em></span><span class=\"context-right\"> stammende Urform des Buchstaben ist wahrscheinlich<span class=\"more\"></span></span>");
@@ -308,7 +308,7 @@
 	ks = new KorapSearch(json);
 	kr = ks.run(ki);
 	assertEquals(kr.getQuery(),"{127: tokens:s:Alphabet}");
-	assertEquals(kr.totalResults(),7);
+	assertEquals(kr.getTotalResults(),7);
 	assertEquals(kr.getStartIndex(),0);
 	assertEquals(kr.getMatch(0).getSnippetBrackets(),"... 2. Herkunft Die aus dem proto-semitischen [{127:Alphabet}] stammende Urform des Buchstaben ist wahrscheinlich ...");
 	assertEquals(kr.getMatch(0).getSnippetHTML(),"<span class=\"context-left\"><span class=\"more\"></span>2. Herkunft Die aus dem proto-semitischen </span><span class=\"match\"><em class=\"class-127 level-0\">Alphabet</em></span><span class=\"context-right\"> stammende Urform des Buchstaben ist wahrscheinlich<span class=\"more\"></span></span>");
@@ -319,7 +319,7 @@
 	ks = new KorapSearch(json);
 	kr = ks.run(ki);
 	assertEquals(kr.getQuery(),"{255: tokens:s:Alphabet}");
-	assertEquals(kr.totalResults(),7);
+	assertEquals(kr.getTotalResults(),7);
 	assertEquals(kr.getStartIndex(),0);
 	assertEquals(kr.getMatch(0).getSnippetBrackets(),"... 2. Herkunft Die aus dem proto-semitischen [Alphabet] stammende Urform des Buchstaben ist wahrscheinlich ...");
 	assertEquals(kr.getMatch(0).getSnippetHTML(),"<span class=\"context-left\"><span class=\"more\"></span>2. Herkunft Die aus dem proto-semitischen </span><span class=\"match\">Alphabet</span><span class=\"context-right\"> stammende Urform des Buchstaben ist wahrscheinlich<span class=\"more\"></span></span>");
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 cdf5be1..293286b 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestAttributeIndex.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestAttributeIndex.java
@@ -99,7 +99,7 @@
 		
 		kr = ki.search(sq, (short) 10);
 		
-		assertEquals(4, kr.getTotalResults());
+		assertEquals((long) 4, kr.getTotalResults());
 		assertEquals(0,kr.getMatch(0).getStartPos());
 		assertEquals(2,kr.getMatch(0).getEndPos());
 		assertEquals(0,kr.getMatch(1).getStartPos());
@@ -132,7 +132,7 @@
 		
 		kr = ki.search(sq, (short) 10);
 				
-		assertEquals(4, kr.getTotalResults());
+		assertEquals((long) 4, kr.getTotalResults());
 		assertEquals(0,kr.getMatch(0).getStartPos());
 		assertEquals(3,kr.getMatch(0).getEndPos());
 		assertEquals(1,kr.getMatch(1).getStartPos());
@@ -154,7 +154,7 @@
 		
 		kr = ki.search(sq, (short) 10);
 		
-		assertEquals(2, kr.getTotalResults());
+		assertEquals((long) 2, kr.getTotalResults());
 		assertEquals(1,kr.getMatch(0).getStartPos());
 		assertEquals(2,kr.getMatch(0).getEndPos());
 		assertEquals(6,kr.getMatch(1).getStartPos());
@@ -172,7 +172,7 @@
 				sql, true);
 		
 		kr = ki.search(sq, (short) 10);
-		assertEquals(1, kr.getTotalResults());
+		assertEquals((long) 1, kr.getTotalResults());
 		assertEquals(5,kr.getMatch(0).getStartPos());
 		assertEquals(6,kr.getMatch(0).getEndPos());
 	}	
@@ -197,7 +197,7 @@
 		
 		kr = ki.search(sq, (short) 10);
 		
-		assertEquals(3, kr.getTotalResults());
+		assertEquals((long) 3, kr.getTotalResults());
 		assertEquals(1,kr.getMatch(0).getStartPos());
 		assertEquals(2,kr.getMatch(0).getEndPos());
 		assertEquals(5,kr.getMatch(1).getStartPos());
@@ -226,7 +226,7 @@
 				sql, true);
 		
 		kr = ki.search(sq, (short) 10);
-		assertEquals(6,kr.getTotalResults());
+		assertEquals((long) 6,kr.getTotalResults());
 		
 		SpanNextQuery snq = new SpanNextQuery(
 				new SpanTermQuery(new Term("base", "s:e"))
@@ -234,7 +234,7 @@
 		
 		kr = ki.search(snq, (short) 10);
 		
-		assertEquals(1,kr.getTotalResults());
+		assertEquals((long) 1,kr.getTotalResults());
 		assertEquals(2,kr.getMatch(0).getLocalDocID());
 		assertEquals(1,kr.getMatch(0).getStartPos());
 		assertEquals(5,kr.getMatch(0).getEndPos());		
@@ -254,7 +254,7 @@
 				new SpanTermQuery(new Term("base","@:class=book")), 
 				true);
 		kr = ki.search(saq, (short) 10);
-		assertEquals(3, kr.getTotalResults());
+		assertEquals((long) 3, kr.getTotalResults());
 		
 		/*for (int i=0; i< kr.getTotalResults(); i++){
 			System.out.println(
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 7368843..2397e82 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestClassIndex.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestClassIndex.java
@@ -63,52 +63,52 @@
         );
 	kr = ki.search(sq, (short) 10);
 
-	assertEquals("totalResults", 1, kr.totalResults());
-	assertEquals("StartPos (0)", 7, kr.match(0).startPos);
-	assertEquals("EndPos (0)", 9, kr.match(0).endPos);
-	assertEquals("SnippetBrackets (0)", "... bcabca[ba]c", kr.match(0).snippetBrackets());
+	assertEquals("totalResults", kr.getTotalResults(), 1);
+	assertEquals("StartPos (0)", 7, kr.getMatch(0).startPos);
+	assertEquals("EndPos (0)", 9, kr.getMatch(0).endPos);
+	assertEquals("SnippetBrackets (0)", "... bcabca[ba]c", kr.getMatch(0).snippetBrackets());
 	assertEquals("SnippetHTML (0)", "<span class=\"context-left\"><span class=\"more\">" +
 			"</span>bcabca</span><span class=\"match\">ba</span><span class=\"context-right" +
-			"\">c</span>", kr.match(0).snippetHTML());
+			"\">c</span>", kr.getMatch(0).snippetHTML());
 
 	sq = new SpanTermQuery(new Term("base", "s:b"));
 	kr = ki.search(sq, (short) 10);
 
-	assertEquals("totalResults", 3, kr.totalResults());
-	assertEquals("StartPos (0)", 1, kr.match(0).startPos);
-	assertEquals("EndPos (0)", 2, kr.match(0).endPos);
-	assertEquals("SnippetBrackets (0)", "a[b]cabcab ...", kr.match(0).snippetBrackets());
+	assertEquals("totalResults", kr.getTotalResults(), 3);
+	assertEquals("StartPos (0)", 1, kr.getMatch(0).startPos);
+	assertEquals("EndPos (0)", 2, kr.getMatch(0).endPos);
+	assertEquals("SnippetBrackets (0)", "a[b]cabcab ...", kr.getMatch(0).snippetBrackets());
 
 
 	assertEquals("SnippetHTML (0)", "<span class=\"context-left\">a</span><span class=\"match\">" +
 			"b</span><span class=\"context-right\">cabcab<span class=\"more\"></span></span>", 
-			kr.match(0).snippetHTML());
+			kr.getMatch(0).snippetHTML());
 
-	assertEquals("StartPos (1)", 4, kr.match(1).startPos);
-	assertEquals("EndPos (1)", 5, kr.match(1).endPos);
-	assertEquals("SnippetBrackets (1)", "abca[b]cabac", kr.match(1).snippetBrackets());
-	assertEquals("StartPos (2)", 7, kr.match(2).startPos);
-	assertEquals("EndPos (2)", 8, kr.match(2).endPos);
-	assertEquals("SnippetBrackets (2)", "... bcabca[b]ac", kr.match(2).snippetBrackets());
+	assertEquals("StartPos (1)", 4, kr.getMatch(1).startPos);
+	assertEquals("EndPos (1)", 5, kr.getMatch(1).endPos);
+	assertEquals("SnippetBrackets (1)", "abca[b]cabac", kr.getMatch(1).snippetBrackets());
+	assertEquals("StartPos (2)", 7, kr.getMatch(2).startPos);
+	assertEquals("EndPos (2)", 8, kr.getMatch(2).endPos);
+	assertEquals("SnippetBrackets (2)", "... bcabca[b]ac", kr.getMatch(2).snippetBrackets());
 
 	sq = new SpanClassQuery(new SpanTermQuery(new Term("base", "s:b")));
 	kr = ki.search(sq, (short) 10);
 
-	assertEquals("totalResults", 3, kr.totalResults());
-	assertEquals("StartPos (0)", 1, kr.match(0).startPos);
-	assertEquals("EndPos (0)", 2, kr.match(0).endPos);
-	assertEquals("snippetBrackets (0)", "a[{1:b}]cabcab ...", kr.match(0).snippetBrackets());
+	assertEquals("totalResults", kr.getTotalResults(), 3);
+	assertEquals("StartPos (0)", 1, kr.getMatch(0).startPos);
+	assertEquals("EndPos (0)", 2, kr.getMatch(0).endPos);
+	assertEquals("snippetBrackets (0)", "a[{1:b}]cabcab ...", kr.getMatch(0).snippetBrackets());
 	assertEquals("snippetHTML (0)", "<span class=\"context-left\">a</span><span class=\"match\">" +
 			"<em class=\"class-1 level-0\">b</em></span><span class=\"context-right\">cabcab<span " +
-			"class=\"more\"></span></span>", kr.match(0).snippetHTML());
+			"class=\"more\"></span></span>", kr.getMatch(0).snippetHTML());
 
-	assertEquals("StartPos (1)", 4, kr.match(1).startPos);
-	assertEquals("EndPos (1)", 5, kr.match(1).endPos);
-	assertEquals("snippetBrackets (1)", "abca[{1:b}]cabac", kr.match(1).snippetBrackets());
+	assertEquals("StartPos (1)", 4, kr.getMatch(1).startPos);
+	assertEquals("EndPos (1)", 5, kr.getMatch(1).endPos);
+	assertEquals("snippetBrackets (1)", "abca[{1:b}]cabac", kr.getMatch(1).snippetBrackets());
 	
-	assertEquals("StartPos (2)", 7, kr.match(2).startPos);
-	assertEquals("EndPos (2)", 8, kr.match(2).endPos);
-	assertEquals("snippetBrackets (2)", "... bcabca[{1:b}]ac", kr.match(2).snippetBrackets());
+	assertEquals("StartPos (2)", 7, kr.getMatch(2).startPos);
+	assertEquals("EndPos (2)", 8, kr.getMatch(2).endPos);
+	assertEquals("snippetBrackets (2)", "... bcabca[{1:b}]ac", kr.getMatch(2).snippetBrackets());
 
 
 	sq = new SpanNextQuery(
@@ -118,19 +118,19 @@
 
 	kr = ki.search(sq, (short) 10);
 
-	assertEquals("totalResults", 3, kr.totalResults());
-	assertEquals("StartPos (0)", 0, kr.match(0).startPos);
-	assertEquals("EndPos (0)", 2, kr.match(0).endPos);
-	assertEquals("SnippetBrackets (0)", "[a{1:b}]cabcab ...", kr.match(0).snippetBrackets());
+	assertEquals("totalResults", kr.getTotalResults(), 3);
+	assertEquals("StartPos (0)", 0, kr.getMatch(0).startPos);
+	assertEquals("EndPos (0)", 2, kr.getMatch(0).endPos);
+	assertEquals("SnippetBrackets (0)", "[a{1:b}]cabcab ...", kr.getMatch(0).snippetBrackets());
 
-	assertEquals("SnippetHTML (0)", "<span class=\"context-left\"></span><span class=\"match\">a<em class=\"class-1 level-0\">b</em></span><span class=\"context-right\">cabcab<span class=\"more\"></span></span>", kr.match(0).snippetHTML());
+	assertEquals("SnippetHTML (0)", "<span class=\"context-left\"></span><span class=\"match\">a<em class=\"class-1 level-0\">b</em></span><span class=\"context-right\">cabcab<span class=\"more\"></span></span>", kr.getMatch(0).snippetHTML());
 
-	assertEquals("StartPos (1)", 3, kr.match(1).startPos);
-	assertEquals("EndPos (1)", 5, kr.match(1).endPos);
-	assertEquals("SnippetBrackets (1)", "abc[a{1:b}]cabac", kr.match(1).snippetBrackets());
-	assertEquals("StartPos (2)", 6, kr.match(2).startPos);
-	assertEquals("EndPos (2)", 8, kr.match(2).endPos);
-	assertEquals("SnippetBrackets (2)", "abcabc[a{1:b}]ac", kr.match(2).snippetBrackets());
+	assertEquals("StartPos (1)", 3, kr.getMatch(1).startPos);
+	assertEquals("EndPos (1)", 5, kr.getMatch(1).endPos);
+	assertEquals("SnippetBrackets (1)", "abc[a{1:b}]cabac", kr.getMatch(1).snippetBrackets());
+	assertEquals("StartPos (2)", 6, kr.getMatch(2).startPos);
+	assertEquals("EndPos (2)", 8, kr.getMatch(2).endPos);
+	assertEquals("SnippetBrackets (2)", "abcabc[a{1:b}]ac", kr.getMatch(2).snippetBrackets());
 
 
 	// abcabcabac
@@ -141,16 +141,16 @@
 
 	kr = ki.search(sq, (short) 10);
 
-	assertEquals("StartPos (0)", 0, kr.match(0).startPos);
-	assertEquals("EndPos (0)", 2, kr.match(0).endPos);
-	assertEquals("SnippetBrackets (0)", "[{2:a}{3:b}]cabcab ...", kr.match(0).snippetBrackets());
-	assertEquals("StartPos (1)", 3, kr.match(1).startPos);
-	assertEquals("EndPos (1)", 5, kr.match(1).endPos);
-	assertEquals("SnippetBrackets (1)", "abc[{2:a}{3:b}]cabac", kr.match(1).snippetBrackets());
+	assertEquals("StartPos (0)", 0, kr.getMatch(0).startPos);
+	assertEquals("EndPos (0)", 2, kr.getMatch(0).endPos);
+	assertEquals("SnippetBrackets (0)", "[{2:a}{3:b}]cabcab ...", kr.getMatch(0).snippetBrackets());
+	assertEquals("StartPos (1)", 3, kr.getMatch(1).startPos);
+	assertEquals("EndPos (1)", 5, kr.getMatch(1).endPos);
+	assertEquals("SnippetBrackets (1)", "abc[{2:a}{3:b}]cabac", kr.getMatch(1).snippetBrackets());
 
-	assertEquals("StartPos (2)", 6, kr.match(2).startPos);
-	assertEquals("EndPos (2)", 8, kr.match(2).endPos);
-	assertEquals("SnippetBrackets (2)", "abcabc[{2:a}{3:b}]ac", kr.match(2).snippetBrackets());
+	assertEquals("StartPos (2)", 6, kr.getMatch(2).startPos);
+	assertEquals("EndPos (2)", 8, kr.getMatch(2).endPos);
+	assertEquals("SnippetBrackets (2)", "abcabc[{2:a}{3:b}]ac", kr.getMatch(2).snippetBrackets());
 
 	// abcabcabac
 	sq = new SpanNextQuery(
@@ -164,23 +164,21 @@
 
 	kr = ki.search(sq, (short) 10);
 
-	// System.err.println(kr.toJSON());
-
-	assertEquals("totalResults", 1, kr.totalResults());
-	assertEquals("SnippetBrackets (0)", "abcabc[a{2:b{1:a}}]c", kr.match(0).snippetBrackets());
-	assertEquals("SnippetHTML (0)", "<span class=\"context-left\">abcabc</span><span class=\"match\">a<em class=\"class-2 level-0\">b<em class=\"class-1 level-1\">a</em></em></span><span class=\"context-right\">c</span>", kr.match(0).snippetHTML());
+	assertEquals("totalResults", kr.getTotalResults(), 1);
+	assertEquals("SnippetBrackets (0)", "abcabc[a{2:b{1:a}}]c", kr.getMatch(0).snippetBrackets());
+	assertEquals("SnippetHTML (0)", "<span class=\"context-left\">abcabc</span><span class=\"match\">a<em class=\"class-2 level-0\">b<em class=\"class-1 level-1\">a</em></em></span><span class=\"context-right\">c</span>", kr.getMatch(0).snippetHTML());
 
 	// Offset tokens
 	kr = ki.search(sq, 0, (short) 10, true, (short) 2, true, (short) 2);
-	assertEquals("totalResults", 1, kr.totalResults());
-	assertEquals("SnippetBrackets (0)", "... bc[a{2:b{1:a}}]c", kr.match(0).snippetBrackets());
-	assertEquals("SnippetHTML (0)", "<span class=\"context-left\"><span class=\"more\"></span>bc</span><span class=\"match\">a<em class=\"class-2 level-0\">b<em class=\"class-1 level-1\">a</em></em></span><span class=\"context-right\">c</span>", kr.match(0).snippetHTML());
+	assertEquals("totalResults", kr.getTotalResults(), 1);
+	assertEquals("SnippetBrackets (0)", "... bc[a{2:b{1:a}}]c", kr.getMatch(0).snippetBrackets());
+	assertEquals("SnippetHTML (0)", "<span class=\"context-left\"><span class=\"more\"></span>bc</span><span class=\"match\">a<em class=\"class-2 level-0\">b<em class=\"class-1 level-1\">a</em></em></span><span class=\"context-right\">c</span>", kr.getMatch(0).snippetHTML());
 
 	// Offset Characters
 	kr = ki.search(sq, 0, (short) 10, false, (short) 2, false, (short) 2);
-	assertEquals("totalResults", 1, kr.totalResults());
-	assertEquals("SnippetBrackets (0)", "... bc[a{2:b{1:a}}]c", kr.match(0).snippetBrackets());
-	assertEquals("SnippetHTML (0)", "<span class=\"context-left\"><span class=\"more\"></span>bc</span><span class=\"match\">a<em class=\"class-2 level-0\">b<em class=\"class-1 level-1\">a</em></em></span><span class=\"context-right\">c</span>", kr.match(0).snippetHTML());
+	assertEquals("totalResults", kr.getTotalResults(), 1);
+	assertEquals("SnippetBrackets (0)", "... bc[a{2:b{1:a}}]c", kr.getMatch(0).snippetBrackets());
+	assertEquals("SnippetHTML (0)", "<span class=\"context-left\"><span class=\"more\"></span>bc</span><span class=\"match\">a<em class=\"class-2 level-0\">b<em class=\"class-1 level-1\">a</em></em></span><span class=\"context-right\">c</span>", kr.getMatch(0).snippetHTML());
 
 
 	// System.err.println(kr.toJSON());
@@ -192,11 +190,11 @@
 
 	kr = ki.search(sq, (short) 10);
 	
-	assertEquals("totalResults", 2, kr.totalResults());
-	assertEquals("StartPos (0)", 1, kr.match(0).startPos);
-	assertEquals("EndPos (0)", 3, kr.match(0).endPos);
-	assertEquals("StartPos (1)", 4, kr.match(1).startPos);
-	assertEquals("EndPos (1)", 6, kr.match(1).endPos);
+	assertEquals("totalResults", kr.getTotalResults(), 2);
+	assertEquals("StartPos (0)", 1, kr.getMatch(0).startPos);
+	assertEquals("EndPos (0)", 3, kr.getMatch(0).endPos);
+	assertEquals("StartPos (1)", 4, kr.getMatch(1).startPos);
+	assertEquals("EndPos (1)", 6, kr.getMatch(1).endPos);
 
 	assertEquals("Document count", 1, ki.numberOf("base", "documents"));
 	assertEquals("Token count", 10, ki.numberOf("base", "t"));
@@ -214,11 +212,11 @@
 
 	kr = ki.search(sq, (short) 2);
 	
-	assertEquals("totalResults", 2, kr.totalResults());
-	assertEquals("StartPos (0)", 0, kr.match(0).startPos);
-	assertEquals("EndPos (0)", 3, kr.match(0).endPos);
-	assertEquals("StartPos (1)", 3, kr.match(1).startPos);
-	assertEquals("EndPos (1)", 6, kr.match(1).endPos);
+	assertEquals("totalResults", kr.getTotalResults(), 2);
+	assertEquals("StartPos (0)", 0, kr.getMatch(0).startPos);
+	assertEquals("EndPos (0)", 3, kr.getMatch(0).endPos);
+	assertEquals("StartPos (1)", 3, kr.getMatch(1).startPos);
+	assertEquals("EndPos (1)", 6, kr.getMatch(1).endPos);
 
 	assertEquals(1, ki.numberOf("base", "documents"));
 	assertEquals(10, ki.numberOf("base", "t"));
@@ -257,7 +255,7 @@
 	);
 	
 	kr = ki.search(sq, (short) 10);
-	assertEquals("ab[cabca]bac", kr.match(0).getSnippetBrackets());
+	assertEquals("ab[cabca]bac", kr.getMatch(0).getSnippetBrackets());
 	System.err.println();
 	*/
 
@@ -268,7 +266,7 @@
 	);
 	
 	kr = ki.search(sq, (short) 10);
-	assertEquals("abc[abcab}ac]", kr.match(0).getSnippetBrackets());
+	assertEquals("abc[abcab}ac]", kr.getMatch(0).getSnippetBrackets());
 	System.err.println();
 
 	*/
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 8d480c0..7e6413e 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestDistanceExclusionIndex.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestDistanceExclusionIndex.java
@@ -32,18 +32,18 @@
         //ordered distance 0 to 1
         sq = createQuery("s:c","s:e",0,1,true);                
         kr = ki.search(sq, (short) 10);        
-        assertEquals(3, kr.getTotalResults());	    
-	    assertEquals(2, kr.match(0).getStartPos());
-	    assertEquals(3, kr.match(0).getEndPos());
-	    assertEquals(3, kr.match(1).getStartPos());
-	    assertEquals(4, kr.match(1).getEndPos());
-	    assertEquals(5, kr.match(2).getStartPos());
-	    assertEquals(6, kr.match(2).getEndPos());
+        assertEquals((long) 3, kr.getTotalResults());	    
+	    assertEquals(2, kr.getMatch(0).getStartPos());
+	    assertEquals(3, kr.getMatch(0).getEndPos());
+	    assertEquals(3, kr.getMatch(1).getStartPos());
+	    assertEquals(4, kr.getMatch(1).getEndPos());
+	    assertEquals(5, kr.getMatch(2).getStartPos());
+	    assertEquals(6, kr.getMatch(2).getEndPos());
         
         // Unordered
         sq = createQuery("s:c","s:e",0,1,false);                
         kr = ki.search(sq, (short) 10);
-        assertEquals(2, kr.getTotalResults());
+        assertEquals((long) 2, kr.getTotalResults());
     }
 	
 	/** Multiple docs, unordered
@@ -59,8 +59,8 @@
         // ---- Distance 0 to 1
         sq = createQuery("s:c","s:e",0,1,false);                
         kr = ki.search(sq, (short) 10);        
-        assertEquals(5, kr.getTotalResults());	    
-	    assertEquals(1, kr.match(3).getLocalDocID());
+        assertEquals((long) 5, kr.getTotalResults());	    
+	    assertEquals(1, kr.getMatch(3).getLocalDocID());
 	}
 	
 	/** Secondspans' document number is bigger than firstspans' 
@@ -77,7 +77,7 @@
         // Unordered
         sq = createQuery("s:c","s:e",2,2,false);                
         kr = ki.search(sq, (short) 10);
-        assertEquals(5, kr.getTotalResults());
+        assertEquals((long) 5, kr.getTotalResults());
 	}
 	
 	/** Unordered: firstspan in on the right side of the secondspan, 
@@ -93,9 +93,9 @@
         // Unordered
         sq = createQuery("s:b","s:c",2,2,false);                
         kr = ki.search(sq, (short) 10);
-        assertEquals(1, kr.getTotalResults());
-        assertEquals(1, kr.match(0).getStartPos());
-	    assertEquals(2, kr.match(0).getEndPos());
+        assertEquals((long) 1, kr.getTotalResults());
+        assertEquals(1, kr.getMatch(0).getStartPos());
+	    assertEquals(2, kr.getMatch(0).getEndPos());
     }
 	
 	/**	Element queries
@@ -114,9 +114,9 @@
         		true);        
         
         kr = ki.search(sq, (short) 10);
-        assertEquals(1, kr.getTotalResults());
-        assertEquals(9, kr.match(0).getStartPos());
-	    assertEquals(10, kr.match(0).getEndPos());
+        assertEquals((long) 1, kr.getTotalResults());
+        assertEquals(9, kr.getMatch(0).getStartPos());
+	    assertEquals(10, kr.getMatch(0).getEndPos());
     }
 	
 	// Add skipTo test	
@@ -131,26 +131,26 @@
         //ordered distance 0 to 1
         sq = createQuery("s:d","s:b",0,1,true);
         kr = ki.search(sq, (short) 10);
-        assertEquals(4, kr.getTotalResults());
+        assertEquals((long) 4, kr.getTotalResults());
         
 		SpanTermQuery stq = new SpanTermQuery(new Term("base", "s:c"));
 		kr = ki.search(stq, (short) 10);
-		assertEquals(6, kr.getTotalResults());
+		assertEquals((long) 6, kr.getTotalResults());
 		
 		SpanNextQuery snq = new SpanNextQuery(stq,sq);		
         kr = ki.search(snq, (short) 10);
-        assertEquals(2, kr.getTotalResults());
-        assertEquals(3, kr.match(0).getStartPos());
-	    assertEquals(5, kr.match(0).getEndPos());
-	    assertEquals(8, kr.match(1).getStartPos());
-	    assertEquals(10, kr.match(1).getEndPos());
+        assertEquals((long) 2, kr.getTotalResults());
+        assertEquals(3, kr.getMatch(0).getStartPos());
+	    assertEquals(5, kr.getMatch(0).getEndPos());
+	    assertEquals(8, kr.getMatch(1).getStartPos());
+	    assertEquals(10, kr.getMatch(1).getEndPos());
 	    
         /*System.out.print(kr.getTotalResults()+"\n");
 		for (int i=0; i< kr.getTotalResults(); i++){
 			System.out.println(
-				kr.match(i).getLocalDocID()+" "+
-				kr.match(i).startPos + " " +
-				kr.match(i).endPos
+				kr.getMatch(i).getLocalDocID()+" "+
+				kr.getMatch(i).startPos + " " +
+				kr.getMatch(i).endPos
 		    );
 		}*/
 	}
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 b124eff..eba418d 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestDistanceIndex.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestDistanceIndex.java
@@ -103,27 +103,27 @@
         sq = createQuery("s:b","s:c",0,1,true);                
         kr = ki.search(sq, (short) 10);
 //        System.out.println(sq);
-        assertEquals(2, kr.totalResults());
-        assertEquals(0, kr.match(0).startPos);
-        assertEquals(1, kr.match(0).endPos);
-        assertEquals(1, kr.match(1).startPos);
-        assertEquals(3, kr.match(1).endPos);
+        assertEquals(kr.getTotalResults(), 2);
+        assertEquals(0, kr.getMatch(0).startPos);
+        assertEquals(1, kr.getMatch(0).endPos);
+        assertEquals(1, kr.getMatch(1).startPos);
+        assertEquals(3, kr.getMatch(1).endPos);
         
         // ---- Distance 2 to 2
         sq = createQuery("s:b","s:c",2,2,true);                
         kr = ki.search(sq, (short) 10);
         
-        assertEquals(2, kr.totalResults());
-        assertEquals(0, kr.match(0).startPos);
-        assertEquals(3, kr.match(0).endPos);
-        assertEquals(1, kr.match(1).startPos);
-        assertEquals(4, kr.match(1).endPos);
+        assertEquals(kr.getTotalResults(), 2);
+        assertEquals(0, kr.getMatch(0).startPos);
+        assertEquals(3, kr.getMatch(0).endPos);
+        assertEquals(1, kr.getMatch(1).startPos);
+        assertEquals(4, kr.getMatch(1).endPos);
         
         // ---- Distance 2 to 3
         sq = createQuery("s:b","s:c",2,3,true);                
         kr = ki.search(sq, (short) 10);
         
-        assertEquals(3, kr.totalResults());
+        assertEquals(kr.getTotalResults(), 3);
         
         ki.close();
     }
@@ -144,7 +144,7 @@
 	    SpanQuery sq = createQuery("s:c","s:d",1,3,true);                
 	    kr = ki.search(sq, (short) 10);
 	        	    
-	    assertEquals(4, kr.getTotalResults());
+	    assertEquals((long) 4, kr.getTotalResults());
 	    assertEquals(2, kr.getMatch(0).startPos);
 	    assertEquals(5, kr.getMatch(0).endPos);
 	    assertEquals(3, kr.getMatch(2).startPos);
@@ -157,7 +157,7 @@
 	    // Candidate list is empty, but there are secondspans in the other doc
 	    sq = createQuery("s:c","s:d",3,3,true);                
 	    kr = ki.search(sq, (short) 10);
-	    assertEquals(2, kr.getTotalResults());
+	    assertEquals((long) 2, kr.getTotalResults());
 	    
 	    ki.close();
     }
@@ -178,7 +178,7 @@
         sq = createQuery("s:c","s:d",3,3,true);    
         kr = ki.search(sq, (short) 10);
         
-        assertEquals(2, kr.totalResults());
+        assertEquals(kr.getTotalResults(), 2);
     }
     
     /** - Firstspan.next() is in the other doc, but there is
@@ -199,7 +199,7 @@
         SpanQuery sq = createQuery("s:b","s:c",1,2,true);                
         kr = ki.search(sq, (short) 10);
         
-        assertEquals(3, kr.totalResults());
+        assertEquals(kr.getTotalResults(), 3);
         assertEquals(0, kr.getMatch(0).startPos);
 	    assertEquals(3, kr.getMatch(0).endPos);
 	    assertEquals(1, kr.getMatch(1).startPos);
@@ -220,7 +220,7 @@
 	    SpanQuery sq = createElementQuery("x","y",0,0,true);                
 	    kr = ki.search(sq, (short) 10);
     	
-	    assertEquals(4, kr.totalResults());
+	    assertEquals(kr.getTotalResults(), 4);
 	    assertEquals(2, kr.getMatch(0).startPos);
 	    assertEquals(7, kr.getMatch(0).endPos);
 	    assertEquals(3, kr.getMatch(1).startPos);
@@ -232,7 +232,7 @@
 	    sq = createElementQuery("y","x",1,1,true);                
 	    kr = ki.search(sq, (short) 10);
 	    
-	    assertEquals(1, kr.totalResults());
+	    assertEquals(kr.getTotalResults(), 1);
 	    assertEquals(5, kr.getMatch(0).startPos);
 	    assertEquals(10, kr.getMatch(0).endPos);
 	    
@@ -240,7 +240,7 @@
 	    sq = createElementQuery("y","x",1,2,true);                
 	    kr = ki.search(sq, (short) 10);
 	    
-	    assertEquals(2, kr.totalResults());	    
+	    assertEquals(kr.getTotalResults(), 2);	    
 	    assertEquals(4, kr.getMatch(0).startPos);
 	    assertEquals(9, kr.getMatch(0).endPos);
 	    assertEquals(5, kr.getMatch(1).startPos);
@@ -250,7 +250,7 @@
 	    sq = createElementQuery("x","x",1,2,true);
 	    kr = ki.search(sq, (short) 10);
 	    
-	    assertEquals(2, kr.totalResults());
+	    assertEquals(kr.getTotalResults(), 2);
     }
     
     /** Skip to */    
@@ -264,7 +264,7 @@
 	    SpanQuery firstClause = createQuery("s:d", "s:e", 3, 4,true);
 	    kr = ki.search(firstClause, (short) 10); 
 	    
-	    assertEquals(3, kr.totalResults());
+	    assertEquals(kr.getTotalResults(), 3);
 	    assertEquals(0, kr.getMatch(0).getLocalDocID());
 	    assertEquals(2, kr.getMatch(0).startPos);
 	    assertEquals(6, kr.getMatch(0).endPos);
@@ -281,7 +281,7 @@
 		);	    
 	    kr = ki.search(sq, (short) 10);
 	    
-	    assertEquals(1, kr.totalResults());
+	    assertEquals(kr.getTotalResults(), 1);
 	    assertEquals(4, kr.getMatch(0).startPos);
 	    assertEquals(9, kr.getMatch(0).endPos);	    
     }
@@ -296,7 +296,7 @@
 	    SpanQuery sq = createQuery("s:c", "s:c", 1, 2,true);
 	    kr = ki.search(sq, (short) 10); 
     
-	    assertEquals(3, kr.totalResults());
+	    assertEquals(kr.getTotalResults(), 3);
         assertEquals(0, kr.getMatch(0).startPos);
 	    assertEquals(3, kr.getMatch(0).endPos);
 	    assertEquals(2, kr.getMatch(1).startPos);
@@ -311,13 +311,13 @@
 	    sq = createQuery("s:e", "s:e", 1, 1,true);
 	    kr = ki.search(sq, (short) 10);
 	    
-	    assertEquals(1, kr.totalResults());
+	    assertEquals(kr.getTotalResults(), 1);
 	    
 	    // without order
 	    sq = createQuery("s:e", "s:e", 1, 1,false);
 	    kr = ki.search(sq, (short) 10);
 	    
-	    assertEquals(2, kr.totalResults());
+	    assertEquals(kr.getTotalResults(), 2);
     }    
     
 }
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 23bcead..2fde5e5 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestElementDistanceExclusionIndex.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestElementDistanceExclusionIndex.java
@@ -96,9 +96,9 @@
         SpanQuery sq;
         sq = createQuery("s","s:d","s:c",0,0,false,true);                
         kr = ki.search(sq, (short) 10);
-        assertEquals(1, kr.totalResults());
-        assertEquals(6, kr.match(0).startPos);
-        assertEquals(7, kr.match(0).endPos);
+        assertEquals(kr.getTotalResults(), 1);
+        assertEquals(6, kr.getMatch(0).startPos);
+        assertEquals(7, kr.getMatch(0).endPos);
     }
     
     /** There is another firstspan within max distance
@@ -114,15 +114,15 @@
 	    sq = createQuery("s","s:c","s:d",0,0,false,true);                
 	    kr = ki.search(sq, (short) 10);
 	    
-	    assertEquals(4, kr.totalResults());
-	    assertEquals(0, kr.match(0).startPos);
-        assertEquals(1, kr.match(0).endPos);
-        assertEquals(2, kr.match(1).startPos);
-        assertEquals(3, kr.match(1).endPos);
-        assertEquals(3, kr.match(2).startPos);
-        assertEquals(4, kr.match(2).endPos);
-        assertEquals(8, kr.match(3).startPos);
-        assertEquals(9, kr.match(3).endPos);
+	    assertEquals(kr.getTotalResults(), 4);
+	    assertEquals(0, kr.getMatch(0).startPos);
+        assertEquals(1, kr.getMatch(0).endPos);
+        assertEquals(2, kr.getMatch(1).startPos);
+        assertEquals(3, kr.getMatch(1).endPos);
+        assertEquals(3, kr.getMatch(2).startPos);
+        assertEquals(4, kr.getMatch(2).endPos);
+        assertEquals(8, kr.getMatch(3).startPos);
+        assertEquals(9, kr.getMatch(3).endPos);
     }
     
     /** Distance 0-1, ordered, unordered
@@ -136,18 +136,18 @@
         // unordered
         sq = createQuery("s","s:c","s:e",0,1,false,true);                
         kr = ki.search(sq, (short) 10);
-        assertEquals(1, kr.totalResults());
-        assertEquals(5, kr.match(0).startPos);
-        assertEquals(6, kr.match(0).endPos);
+        assertEquals(kr.getTotalResults(), 1);
+        assertEquals(5, kr.getMatch(0).startPos);
+        assertEquals(6, kr.getMatch(0).endPos);
         
         //ordered 
         sq = createQuery("s","s:c","s:e",0,1,true,true);                
         kr = ki.search(sq, (short) 10);
-        assertEquals(3, kr.totalResults());
-        assertEquals(2, kr.match(0).startPos);
-        assertEquals(3, kr.match(0).endPos);
-        assertEquals(3, kr.match(1).startPos);
-        assertEquals(4, kr.match(1).endPos);
+        assertEquals(kr.getTotalResults(), 3);
+        assertEquals(2, kr.getMatch(0).startPos);
+        assertEquals(3, kr.getMatch(0).endPos);
+        assertEquals(3, kr.getMatch(1).startPos);
+        assertEquals(4, kr.getMatch(1).endPos);
     }
     
 	/** Multiple documents, ordered
@@ -164,14 +164,14 @@
         sq = createQuery("s","s:d","s:e",1,1,true,true);                
         kr = ki.search(sq, (short) 10);
         
-        assertEquals(3, kr.totalResults());
-	    assertEquals(4, kr.match(0).startPos);
-        assertEquals(5, kr.match(0).endPos);
-        assertEquals(1, kr.match(1).getLocalDocID());
-        assertEquals(2, kr.match(1).startPos);
-        assertEquals(3, kr.match(1).endPos);
-        assertEquals(8, kr.match(2).startPos);
-        assertEquals(9, kr.match(2).endPos);
+        assertEquals(kr.getTotalResults(), 3);
+	    assertEquals(4, kr.getMatch(0).startPos);
+        assertEquals(5, kr.getMatch(0).endPos);
+        assertEquals(1, kr.getMatch(1).getLocalDocID());
+        assertEquals(2, kr.getMatch(1).startPos);
+        assertEquals(3, kr.getMatch(1).endPos);
+        assertEquals(8, kr.getMatch(2).startPos);
+        assertEquals(9, kr.getMatch(2).endPos);
 	}
     
 	/** Skip to
@@ -188,19 +188,19 @@
         SpanQuery sq = createQuery("s","s:c","s:d",1,1,false,true);
         kr = ki.search(sq, (short) 10);
 
-        assertEquals(3, kr.totalResults());        
-        assertEquals(3, kr.match(2).getLocalDocID());
-        assertEquals(3, kr.match(2).startPos);
-        assertEquals(4, kr.match(2).endPos);
+        assertEquals(kr.getTotalResults(), 3);        
+        assertEquals(3, kr.getMatch(2).getLocalDocID());
+        assertEquals(3, kr.getMatch(2).startPos);
+        assertEquals(4, kr.getMatch(2).endPos);
         
         sq = new SpanNextQuery(
         		createQuery("s","s:c","s:d",1,1,false,true), 
         		new SpanTermQuery(new Term("base", "s:a")));
         
         kr = ki.search(sq, (short) 10);
-        assertEquals(1, kr.totalResults());
-        assertEquals(3, kr.match(0).getLocalDocID());
-        assertEquals(3, kr.match(0).startPos);
-        assertEquals(5, kr.match(0).endPos);
+        assertEquals(kr.getTotalResults(), 1);
+        assertEquals(3, kr.getMatch(0).getLocalDocID());
+        assertEquals(3, kr.getMatch(0).startPos);
+        assertEquals(5, kr.getMatch(0).endPos);
 	}
 }
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 ce969db..3e7ac5d 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestElementDistanceIndex.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestElementDistanceIndex.java
@@ -118,11 +118,11 @@
         sq = createQuery("s", "s:b", "s:c", 0, 2,true);        
         kr = ki.search(sq, (short) 10);
         
-        assertEquals(4, kr.totalResults());
-        assertEquals(0, kr.match(0).startPos);
-        assertEquals(1, kr.match(0).endPos);
-        assertEquals(0, kr.match(1).startPos);
-        assertEquals(3, kr.match(1).endPos);         
+        assertEquals(kr.getTotalResults(), 4);
+        assertEquals(0, kr.getMatch(0).startPos);
+        assertEquals(1, kr.getMatch(0).endPos);
+        assertEquals(0, kr.getMatch(1).startPos);
+        assertEquals(3, kr.getMatch(1).endPos);         
 	}
 	
 	/** Ensure terms and elements are in the same doc
@@ -140,10 +140,10 @@
         sq = createQuery("p", "s:b", "s:d", 1, 1,true);
         kr = ki.search(sq, (short) 10);
         
-        assertEquals(1, kr.totalResults());
-        assertEquals(2, kr.match(0).getLocalDocID());
-        assertEquals(2, kr.match(0).startPos);
-        assertEquals(4, kr.match(0).endPos);
+        assertEquals(kr.getTotalResults(), 1);
+        assertEquals(2, kr.getMatch(0).getLocalDocID());
+        assertEquals(2, kr.getMatch(0).startPos);
+        assertEquals(4, kr.getMatch(0).endPos);
         
 	}	
 	
@@ -165,10 +165,10 @@
         
         kr = ki.search(sq, (short) 10);
         
-        assertEquals(1, kr.totalResults());
-        assertEquals(2, kr.match(0).getLocalDocID());
-        assertEquals(2, kr.match(0).startPos);
-        assertEquals(5, kr.match(0).endPos);
+        assertEquals(kr.getTotalResults(), 1);
+        assertEquals(2, kr.getMatch(0).getLocalDocID());
+        assertEquals(2, kr.getMatch(0).startPos);
+        assertEquals(5, kr.getMatch(0).endPos);
         
 	}
 	
@@ -184,11 +184,11 @@
         sq = createQuery("s", "s:b", "s:b", 1, 2,true);
         kr = ki.search(sq, (short) 10);
     		
-        assertEquals(2, kr.totalResults());
-        assertEquals(0, kr.match(0).startPos);
-        assertEquals(4, kr.match(0).endPos);
-        assertEquals(3, kr.match(1).startPos);
-        assertEquals(5, kr.match(1).endPos);
+        assertEquals(kr.getTotalResults(), 2);
+        assertEquals(0, kr.getMatch(0).startPos);
+        assertEquals(4, kr.getMatch(0).endPos);
+        assertEquals(3, kr.getMatch(1).startPos);
+        assertEquals(5, kr.getMatch(1).endPos);
         
     }
 	
@@ -211,7 +211,7 @@
         
         SpanQueryWrapper sqwi;
         try {    	    
-    	    sqwi = new KorapQuery("tokens").fromJSON(json);
+    	    sqwi = new KorapQuery("tokens").fromJson(json);
     	}
     	catch (QueryException e) {
     	    fail(e.getMessage());
@@ -223,7 +223,7 @@
         sq = sqwi.toQuery();
         kr = ki.search(sq, (short) 10);
     	
-        assertEquals(3, kr.getTotalResults());
+        assertEquals((long) 3, kr.getTotalResults());
         assertEquals(14, kr.getMatch(0).startPos);
         assertEquals(19, kr.getMatch(0).endPos);
         assertEquals(30, kr.getMatch(1).startPos);
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 a42131f..3f14ab3 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestElementIndex.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestElementIndex.java
@@ -78,21 +78,21 @@
 
 	KorapResult kr = ki.search(sq, (short) 10);
 
-	assertEquals("totalResults", 6, kr.totalResults());
+	assertEquals("totalResults", kr.getTotalResults(), 6);
 
-	assertEquals("StartPos (0)", 0, kr.match(0).startPos);
-	assertEquals("EndPos (0)", 12, kr.match(0).endPos);
-	assertEquals("StartPos (1)", 1, kr.match(1).startPos);
-	assertEquals("EndPos (1)", 9, kr.match(1).endPos);
-	assertEquals("StartPos (2)", 2, kr.match(2).startPos);
-	assertEquals("EndPos (2)", 6, kr.match(2).endPos);
+	assertEquals("StartPos (0)", 0, kr.getMatch(0).startPos);
+	assertEquals("EndPos (0)", 12, kr.getMatch(0).endPos);
+	assertEquals("StartPos (1)", 1, kr.getMatch(1).startPos);
+	assertEquals("EndPos (1)", 9, kr.getMatch(1).endPos);
+	assertEquals("StartPos (2)", 2, kr.getMatch(2).startPos);
+	assertEquals("EndPos (2)", 6, kr.getMatch(2).endPos);
 
-	assertEquals("StartPos (0)", 0, kr.match(3).startPos);
-	assertEquals("EndPos (0)", 12, kr.match(3).endPos);
-	assertEquals("StartPos (1)", 1, kr.match(4).startPos);
-	assertEquals("EndPos (1)", 9, kr.match(4).endPos);
-	assertEquals("StartPos (2)", 2, kr.match(5).startPos);
-	assertEquals("EndPos (2)", 6, kr.match(5).endPos);
+	assertEquals("StartPos (0)", 0, kr.getMatch(3).startPos);
+	assertEquals("EndPos (0)", 12, kr.getMatch(3).endPos);
+	assertEquals("StartPos (1)", 1, kr.getMatch(4).startPos);
+	assertEquals("EndPos (1)", 9, kr.getMatch(4).endPos);
+	assertEquals("StartPos (2)", 2, kr.getMatch(5).startPos);
+	assertEquals("EndPos (2)", 6, kr.getMatch(5).endPos);
 
 	// System.err.println(kr.toJSON());
     };
@@ -126,13 +126,13 @@
 
 	KorapResult kr = ki.search(sq, (short) 10);
 
-	assertEquals("totalResults", 3, kr.totalResults());
-	assertEquals("StartPos (0)", 0, kr.match(0).startPos);
-	assertEquals("EndPos (0)", 3, kr.match(0).endPos);
-	assertEquals("StartPos (1)", 0, kr.match(1).startPos);
-	assertEquals("EndPos (1)", 6, kr.match(1).endPos);
-	assertEquals("StartPos (2)", 0, kr.match(2).startPos);
-	assertEquals("EndPos (2)", 9, kr.match(2).endPos);
+	assertEquals("totalResults", kr.getTotalResults(), 3);
+	assertEquals("StartPos (0)", 0, kr.getMatch(0).startPos);
+	assertEquals("EndPos (0)", 3, kr.getMatch(0).endPos);
+	assertEquals("StartPos (1)", 0, kr.getMatch(1).startPos);
+	assertEquals("EndPos (1)", 6, kr.getMatch(1).endPos);
+	assertEquals("StartPos (2)", 0, kr.getMatch(2).startPos);
+	assertEquals("EndPos (2)", 9, kr.getMatch(2).endPos);
     };
 
     @Test
@@ -228,35 +228,35 @@
 
 	// System.err.println(kr.toJSON());
 
-	assertEquals("totalResults", 12, kr.totalResults());
+	assertEquals("totalResults", kr.getTotalResults(), 12);
 
-	assertEquals("StartPos (0)", 0, kr.match(0).startPos);
-	assertEquals("EndPos (0)", 0, kr.match(0).endPos);
-	assertEquals("StartPos (1)", 0, kr.match(1).startPos);
-	assertEquals("EndPos (1)", 0, kr.match(1).endPos);
-	assertEquals("StartPos (2)", 0, kr.match(2).startPos);
-	assertEquals("EndPos (2)", 0, kr.match(2).endPos);
+	assertEquals("StartPos (0)", 0, kr.getMatch(0).startPos);
+	assertEquals("EndPos (0)", 0, kr.getMatch(0).endPos);
+	assertEquals("StartPos (1)", 0, kr.getMatch(1).startPos);
+	assertEquals("EndPos (1)", 0, kr.getMatch(1).endPos);
+	assertEquals("StartPos (2)", 0, kr.getMatch(2).startPos);
+	assertEquals("EndPos (2)", 0, kr.getMatch(2).endPos);
 
-	assertEquals("StartPos (3)", 0, kr.match(3).startPos);
-	assertEquals("EndPos (3)", 12, kr.match(3).endPos);
-	assertEquals("StartPos (4)", 1, kr.match(4).startPos);
-	assertEquals("EndPos (4)", 9, kr.match(4).endPos);
-	assertEquals("StartPos (5)", 2, kr.match(5).startPos);
-	assertEquals("EndPos (5)", 6, kr.match(5).endPos);
+	assertEquals("StartPos (3)", 0, kr.getMatch(3).startPos);
+	assertEquals("EndPos (3)", 12, kr.getMatch(3).endPos);
+	assertEquals("StartPos (4)", 1, kr.getMatch(4).startPos);
+	assertEquals("EndPos (4)", 9, kr.getMatch(4).endPos);
+	assertEquals("StartPos (5)", 2, kr.getMatch(5).startPos);
+	assertEquals("EndPos (5)", 6, kr.getMatch(5).endPos);
 
-	assertEquals("StartPos (6)", 0, kr.match(6).startPos);
-	assertEquals("EndPos (6)", 12, kr.match(6).endPos);
-	assertEquals("StartPos (7)", 1, kr.match(7).startPos);
-	assertEquals("EndPos (7)", 9, kr.match(7).endPos);
-	assertEquals("StartPos (8)", 2, kr.match(8).startPos);
-	assertEquals("EndPos (8)", 6, kr.match(8).endPos);
+	assertEquals("StartPos (6)", 0, kr.getMatch(6).startPos);
+	assertEquals("EndPos (6)", 12, kr.getMatch(6).endPos);
+	assertEquals("StartPos (7)", 1, kr.getMatch(7).startPos);
+	assertEquals("EndPos (7)", 9, kr.getMatch(7).endPos);
+	assertEquals("StartPos (8)", 2, kr.getMatch(8).startPos);
+	assertEquals("EndPos (8)", 6, kr.getMatch(8).endPos);
 
-	assertEquals("StartPos (9)", 0, kr.match(9).startPos);
-	assertEquals("EndPos (9)", 3, kr.match(9).endPos);
-	assertEquals("StartPos (10)", 0, kr.match(10).startPos);
-	assertEquals("EndPos (10)", 6, kr.match(10).endPos);
-	assertEquals("StartPos (11)", 0, kr.match(11).startPos);
-	assertEquals("EndPos (11)", 9, kr.match(11).endPos);
+	assertEquals("StartPos (9)", 0, kr.getMatch(9).startPos);
+	assertEquals("EndPos (9)", 3, kr.getMatch(9).endPos);
+	assertEquals("StartPos (10)", 0, kr.getMatch(10).startPos);
+	assertEquals("EndPos (10)", 6, kr.getMatch(10).endPos);
+	assertEquals("StartPos (11)", 0, kr.getMatch(11).startPos);
+	assertEquals("EndPos (11)", 9, kr.getMatch(11).endPos);
     };
 
 
@@ -288,8 +288,8 @@
 
 	KorapResult kr = ki.search(sq, 0, (short) 15, false, (short) 3, false, (short) 3);
 	
-	assertEquals("... ccc[222222]fff ...", kr.match(0).getSnippetBrackets());
-	assertEquals("... fff[333333]iii ...", kr.match(1).getSnippetBrackets());
+	assertEquals("... ccc[222222]fff ...", kr.getMatch(0).getSnippetBrackets());
+	assertEquals("... fff[333333]iii ...", kr.getMatch(1).getSnippetBrackets());
     };
 
 
@@ -321,9 +321,9 @@
 
 	KorapResult kr = ki.search(sq, 0, (short) 15, false, (short) 3, false, (short) 3);
 
-	assertEquals("[111111]ccc ...", kr.match(0).getSnippetBrackets());
-	assertEquals("... ccc[222222]fff ...", kr.match(1).getSnippetBrackets());
-	assertEquals("... fff[333333]iii ...", kr.match(2).getSnippetBrackets());
+	assertEquals("[111111]ccc ...", kr.getMatch(0).getSnippetBrackets());
+	assertEquals("... ccc[222222]fff ...", kr.getMatch(1).getSnippetBrackets());
+	assertEquals("... fff[333333]iii ...", kr.getMatch(2).getSnippetBrackets());
     };
 
 
@@ -408,6 +408,6 @@
 	// System.err.println(kr.toJSON());
 	
 	assertEquals(5, ki.numberOf("documents"));
-	assertEquals("totalResults", 7, kr.totalResults());
+	assertEquals("totalResults", kr.getTotalResults(), 7);
     };
 };
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 7bf771b..20ea4be 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestFieldDocument.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestFieldDocument.java
@@ -151,7 +151,6 @@
 	assertEquals(km.getPubDate().toDisplay(),"2013-06-17");
 
 	assertEquals(km.getSnippetBrackets(),"a[{3:b}]c");
-	//	System.err.println(kr.toJSON());
     };
 
 
@@ -251,7 +250,7 @@
 	
 	try {
 	    String json = getString(jsonFile);
-	    sqwi = new KorapQuery("tokens").fromJSON(json);
+	    sqwi = new KorapQuery("tokens").fromJson(json);
 	}
 	catch (QueryException e) {
 	    fail(e.getMessage());
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 3acc821..4f73ce3 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestMatchIdentifier.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestMatchIdentifier.java
@@ -92,14 +92,16 @@
 	ki.commit();
 
 	KorapQuery kq = new KorapQuery("tokens");
-	KorapSearch ks = new KorapSearch(kq._(2,kq.seq(kq.seg("s:b")).append(kq._(kq.seg("s:a")))));
+	KorapSearch ks = new KorapSearch(
+	    kq._(2,kq.seq(kq.seg("s:b")).append(kq._(kq.seg("s:a"))))
+        );
 	KorapResult kr = ki.search(ks);
 
-	assertEquals("totalResults", 1, kr.totalResults());
-	assertEquals("StartPos (0)", 7, kr.match(0).startPos);
-	assertEquals("EndPos (0)", 9, kr.match(0).endPos);
+	assertEquals("totalResults", kr.getTotalResults(),    1);
+	assertEquals("StartPos (0)", kr.getMatch(0).startPos, 7);
+	assertEquals("EndPos (0)",   kr.getMatch(0).endPos,   9);
 
-	KorapMatch km = kr.match(0);
+	KorapMatch km = kr.getMatch(0);
 
 	assertEquals("SnippetBrackets (0)", "... bcabca[{2:b{1:a}}]c", km.snippetBrackets());
 	assertEquals("ID (0)", "match-c1!d1-p7-9(2)7-8(1)8-8", km.getID());
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 102c917..f2d081e 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestMatchIndex.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestMatchIndex.java
@@ -70,12 +70,12 @@
         );
 	kr = ki.search(sq, (short) 10);
 
-	assertEquals("totalResults", 1, kr.totalResults());
-	assertEquals("StartPos (0)", 7, kr.match(0).startPos);
-	assertEquals("EndPos (0)", 9, kr.match(0).endPos);
-	assertEquals("SnippetBrackets (0)", "... bcabca[b{1:a}]c", kr.match(0).snippetBrackets());
+	assertEquals("totalResults", kr.getTotalResults(), 1);
+	assertEquals("StartPos (0)", 7, kr.getMatch(0).startPos);
+	assertEquals("EndPos (0)", 9, kr.getMatch(0).endPos);
+	assertEquals("SnippetBrackets (0)", "... bcabca[b{1:a}]c", kr.getMatch(0).snippetBrackets());
 
-	assertEquals("Test no 'more' context", "<span class=\"context-left\"><span class=\"more\"></span>bcabca</span><span class=\"match\">b<em class=\"class-1 level-0\">a</em></span><span class=\"context-right\">c</span>", kr.match(0).snippetHTML());
+	assertEquals("Test no 'more' context", "<span class=\"context-left\"><span class=\"more\"></span>bcabca</span><span class=\"match\">b<em class=\"class-1 level-0\">a</em></span><span class=\"context-right\">c</span>", kr.getMatch(0).snippetHTML());
 	sq = new SpanMatchModifyClassQuery(
   	     new SpanNextQuery(
                 new SpanTermQuery(new Term("base", "s:b")),
@@ -86,10 +86,10 @@
 	);
 	kr = ki.search(sq, (short) 10);
 
-	assertEquals("totalResults", 1, kr.totalResults());
-	assertEquals("StartPos (0)", 8, kr.match(0).startPos);
-	assertEquals("EndPos (0)", 9, kr.match(0).endPos);
-	assertEquals("SnippetBrackets (0)", "... cabcab[{1:a}]c", kr.match(0).snippetBrackets());
+	assertEquals("totalResults", kr.getTotalResults(), 1);
+	assertEquals("StartPos (0)", 8, kr.getMatch(0).startPos);
+	assertEquals("EndPos (0)", 9, kr.getMatch(0).endPos);
+	assertEquals("SnippetBrackets (0)", "... cabcab[{1:a}]c", kr.getMatch(0).snippetBrackets());
 	sq = new SpanMatchModifyClassQuery(
             new SpanNextQuery(
 	        new SpanClassQuery(new SpanTermQuery(new Term("base", "s:a")), (byte) 2),
@@ -99,23 +99,23 @@
 
 	kr = ki.search(sq, (short) 10);
 
-	assertEquals("totalResults", 3, kr.totalResults());
-	assertEquals("StartPos (0)", 1, kr.match(0).startPos);
-	assertEquals("EndPos (0)", 2, kr.match(0).endPos);
-	assertEquals("SnippetBrackets (0)", "a[{3:b}]cabcab ...", kr.match(0).snippetBrackets());
+	assertEquals("totalResults", kr.getTotalResults(), 3);
+	assertEquals("StartPos (0)", 1, kr.getMatch(0).startPos);
+	assertEquals("EndPos (0)", 2, kr.getMatch(0).endPos);
+	assertEquals("SnippetBrackets (0)", "a[{3:b}]cabcab ...", kr.getMatch(0).snippetBrackets());
 	
 
-	assertEquals("<span class=\"context-left\">a</span><span class=\"match\"><em class=\"class-3 level-0\">b</em></span><span class=\"context-right\">cabcab<span class=\"more\"></span></span>", kr.match(0).snippetHTML());
+	assertEquals("<span class=\"context-left\">a</span><span class=\"match\"><em class=\"class-3 level-0\">b</em></span><span class=\"context-right\">cabcab<span class=\"more\"></span></span>", kr.getMatch(0).snippetHTML());
 
-	assertEquals("StartPos (1)", 4, kr.match(1).startPos);
-	assertEquals("EndPos (1)", 5, kr.match(1).endPos);
-	assertEquals("SnippetBrackets (1)", "abca[{3:b}]cabac", kr.match(1).snippetBrackets());
+	assertEquals("StartPos (1)", 4, kr.getMatch(1).startPos);
+	assertEquals("EndPos (1)", 5, kr.getMatch(1).endPos);
+	assertEquals("SnippetBrackets (1)", "abca[{3:b}]cabac", kr.getMatch(1).snippetBrackets());
 
-	assertEquals("<span class=\"context-left\">abca</span><span class=\"match\"><em class=\"class-3 level-0\">b</em></span><span class=\"context-right\">cabac</span>", kr.match(1).snippetHTML());
+	assertEquals("<span class=\"context-left\">abca</span><span class=\"match\"><em class=\"class-3 level-0\">b</em></span><span class=\"context-right\">cabac</span>", kr.getMatch(1).snippetHTML());
 
-	assertEquals("StartPos (2)", 7, kr.match(2).startPos);
-	assertEquals("EndPos (2)", 8, kr.match(2).endPos);
-	assertEquals("SnippetBrackets (2)", "... bcabca[{3:b}]ac", kr.match(2).snippetBrackets());
+	assertEquals("StartPos (2)", 7, kr.getMatch(2).startPos);
+	assertEquals("EndPos (2)", 8, kr.getMatch(2).endPos);
+	assertEquals("SnippetBrackets (2)", "... bcabca[{3:b}]ac", kr.getMatch(2).snippetBrackets());
 
 
 
@@ -132,26 +132,24 @@
 
 	kr = ki.search(sq, (short) 10);
 
-	// System.err.println(kr.toJSON());
+	assertEquals("totalResults", kr.getTotalResults(), 1);
+	assertEquals("SnippetBrackets (0)", "... bcabca[{2:b{1:a}}]c", kr.getMatch(0).snippetBrackets());
 
-	assertEquals("totalResults", 1, kr.totalResults());
-	assertEquals("SnippetBrackets (0)", "... bcabca[{2:b{1:a}}]c", kr.match(0).snippetBrackets());
-
-	assertEquals("SnippetHTML (0) 1", "<span class=\"context-left\"><span class=\"more\"></span>bcabca</span><span class=\"match\"><em class=\"class-2 level-0\">b<em class=\"class-1 level-1\">a</em></em></span><span class=\"context-right\">c</span>", kr.match(0).snippetHTML());
+	assertEquals("SnippetHTML (0) 1", "<span class=\"context-left\"><span class=\"more\"></span>bcabca</span><span class=\"match\"><em class=\"class-2 level-0\">b<em class=\"class-1 level-1\">a</em></em></span><span class=\"context-right\">c</span>", kr.getMatch(0).snippetHTML());
 
 	// Offset tokens
 	kr = ki.search(sq, 0, (short) 10, true, (short) 2, true, (short) 2);
-	assertEquals("totalResults", 1, kr.totalResults());
-	assertEquals("SnippetBrackets (0)", "... ca[{2:b{1:a}}]c", kr.match(0).snippetBrackets());
+	assertEquals("totalResults", kr.getTotalResults(), 1);
+	assertEquals("SnippetBrackets (0)", "... ca[{2:b{1:a}}]c", kr.getMatch(0).snippetBrackets());
 
 
 
 	// Offset Characters
 	kr = ki.search(sq, 0, (short) 10, false, (short) 1, false, (short) 0);
-	assertEquals("totalResults", 1, kr.totalResults());
-	assertEquals("SnippetBrackets (0)", "... a[{2:b{1:a}}] ...", kr.match(0).snippetBrackets());
+	assertEquals("totalResults", kr.getTotalResults(), 1);
+	assertEquals("SnippetBrackets (0)", "... a[{2:b{1:a}}] ...", kr.getMatch(0).snippetBrackets());
 
-	assertEquals("SnippetHTML (0) 2", "<span class=\"context-left\"><span class=\"more\"></span>a</span><span class=\"match\"><em class=\"class-2 level-0\">b<em class=\"class-1 level-1\">a</em></em></span><span class=\"context-right\"><span class=\"more\"></span></span>", kr.match(0).snippetHTML());
+	assertEquals("SnippetHTML (0) 2", "<span class=\"context-left\"><span class=\"more\"></span>a</span><span class=\"match\"><em class=\"class-2 level-0\">b<em class=\"class-1 level-1\">a</em></em></span><span class=\"context-right\"><span class=\"more\"></span></span>", kr.getMatch(0).snippetHTML());
 
 	sq = new SpanMatchModifyClassQuery(
             new SpanClassQuery(
@@ -164,13 +162,13 @@
 
 	kr = ki.search(sq, (short) 10);
 	
-	assertEquals("totalResults", 2, kr.totalResults());
-	assertEquals("StartPos (0)", 1, kr.match(0).startPos);
-	assertEquals("EndPos (0)", 3, kr.match(0).endPos);
-	assertEquals("SnippetBrackets (0)", "a[{3:{1:b}{2:c}}]abcaba ...", kr.match(0).snippetBrackets());
-	assertEquals("StartPos (1)", 4, kr.match(1).startPos);
-	assertEquals("EndPos (1)", 6, kr.match(1).endPos);
-	assertEquals("SnippetBrackets (1)", "abca[{3:{1:b}{2:c}}]abac", kr.match(1).snippetBrackets());
+	assertEquals("totalResults", kr.getTotalResults(), 2);
+	assertEquals("StartPos (0)", 1, kr.getMatch(0).startPos);
+	assertEquals("EndPos (0)", 3, kr.getMatch(0).endPos);
+	assertEquals("SnippetBrackets (0)", "a[{3:{1:b}{2:c}}]abcaba ...", kr.getMatch(0).snippetBrackets());
+	assertEquals("StartPos (1)", 4, kr.getMatch(1).startPos);
+	assertEquals("EndPos (1)", 6, kr.getMatch(1).endPos);
+	assertEquals("SnippetBrackets (1)", "abca[{3:{1:b}{2:c}}]abac", kr.getMatch(1).snippetBrackets());
 
 	assertEquals("Document count", 1, ki.numberOf("base", "documents"));
 	assertEquals("Token count", 10, ki.numberOf("base", "t"));
@@ -185,7 +183,7 @@
 
 	kr = ki.search(sq, (short) 10);
 	
-	assertEquals("totalResults", 0, kr.totalResults());
+	assertEquals("totalResults", kr.getTotalResults(), 0);
 
 	sq = new SpanMatchModifyClassQuery(
             new SpanNextQuery(
@@ -201,13 +199,13 @@
 
 	kr = ki.search(sq, (short) 2);
 	
-	assertEquals("totalResults", 2, kr.totalResults());
-	assertEquals("StartPos (0)", 1, kr.match(0).startPos);
-	assertEquals("EndPos (0)", 3, kr.match(0).endPos);
-	assertEquals("SnippetBrackets (0)", "a[{1:bc}]abcaba ...", kr.match(0).snippetBrackets());
-	assertEquals("StartPos (1)", 4, kr.match(1).startPos);
-	assertEquals("EndPos (1)", 6, kr.match(1).endPos);
-	assertEquals("SnippetBrackets (1)", "abca[{1:bc}]abac", kr.match(1).snippetBrackets());
+	assertEquals("totalResults", kr.getTotalResults(), 2);
+	assertEquals("StartPos (0)", 1, kr.getMatch(0).startPos);
+	assertEquals("EndPos (0)", 3, kr.getMatch(0).endPos);
+	assertEquals("SnippetBrackets (0)", "a[{1:bc}]abcaba ...", kr.getMatch(0).snippetBrackets());
+	assertEquals("StartPos (1)", 4, kr.getMatch(1).startPos);
+	assertEquals("EndPos (1)", 6, kr.getMatch(1).endPos);
+	assertEquals("SnippetBrackets (1)", "abca[{1:bc}]abac", kr.getMatch(1).snippetBrackets());
 
 	assertEquals(1, ki.numberOf("base", "documents"));
 	assertEquals(10, ki.numberOf("base", "t"));
@@ -246,27 +244,27 @@
         );
 	kr = ki.search(sq, (short) 20);
 
-	assertEquals("totalResults", 7, kr.totalResults());
-	assertEquals("SnippetBrackets (0)", "<span class=\"context-left\"></span><span class=\"match\">a</span><span class=\"context-right\">bcabca<span class=\"more\"></span></span>", kr.match(0).snippetHTML());
-	assertEquals("SnippetBrackets (0)", "[a]bcabca ...", kr.match(0).snippetBrackets());
+	assertEquals("totalResults", kr.getTotalResults(), 7);
+	assertEquals("SnippetBrackets (0)", "<span class=\"context-left\"></span><span class=\"match\">a</span><span class=\"context-right\">bcabca<span class=\"more\"></span></span>", kr.getMatch(0).snippetHTML());
+	assertEquals("SnippetBrackets (0)", "[a]bcabca ...", kr.getMatch(0).snippetBrackets());
 
-	assertEquals("SnippetBrackets (1)", "ab[c]abcaba ...", kr.match(1).snippetBrackets());
-	assertEquals("SnippetBrackets (1)", "<span class=\"context-left\">ab</span><span class=\"match\">c</span><span class=\"context-right\">abcaba<span class=\"more\"></span></span>", kr.match(1).snippetHTML());
+	assertEquals("SnippetBrackets (1)", "ab[c]abcaba ...", kr.getMatch(1).snippetBrackets());
+	assertEquals("SnippetBrackets (1)", "<span class=\"context-left\">ab</span><span class=\"match\">c</span><span class=\"context-right\">abcaba<span class=\"more\"></span></span>", kr.getMatch(1).snippetHTML());
 
-	assertEquals("SnippetBrackets (6)", "... abcaba[c]", kr.match(6).snippetBrackets());
-	assertEquals("SnippetBrackets (6)", "<span class=\"context-left\"><span class=\"more\"></span>abcaba</span><span class=\"match\">c</span><span class=\"context-right\"></span>", kr.match(6).snippetHTML());
+	assertEquals("SnippetBrackets (6)", "... abcaba[c]", kr.getMatch(6).snippetBrackets());
+	assertEquals("SnippetBrackets (6)", "<span class=\"context-left\"><span class=\"more\"></span>abcaba</span><span class=\"match\">c</span><span class=\"context-right\"></span>", kr.getMatch(6).snippetHTML());
 
 	kr = ki.search(sq, 0, (short) 20, true, (short) 0, true, (short) 0);
 
-	assertEquals("totalResults", 7, kr.totalResults());
-	assertEquals("SnippetBrackets (0)", "[a] ...", kr.match(0).snippetBrackets());
-	assertEquals("SnippetHTML (0)", "<span class=\"context-left\"></span><span class=\"match\">a</span><span class=\"context-right\"><span class=\"more\"></span></span>", kr.match(0).snippetHTML());
+	assertEquals("totalResults", kr.getTotalResults(), 7);
+	assertEquals("SnippetBrackets (0)", "[a] ...", kr.getMatch(0).snippetBrackets());
+	assertEquals("SnippetHTML (0)", "<span class=\"context-left\"></span><span class=\"match\">a</span><span class=\"context-right\"><span class=\"more\"></span></span>", kr.getMatch(0).snippetHTML());
 
-	assertEquals("SnippetBrackets (1)", "... [c] ...", kr.match(1).snippetBrackets());
-	assertEquals("SnippetHTML (1)", "<span class=\"context-left\"><span class=\"more\"></span></span><span class=\"match\">c</span><span class=\"context-right\"><span class=\"more\"></span></span>", kr.match(1).snippetHTML());
+	assertEquals("SnippetBrackets (1)", "... [c] ...", kr.getMatch(1).snippetBrackets());
+	assertEquals("SnippetHTML (1)", "<span class=\"context-left\"><span class=\"more\"></span></span><span class=\"match\">c</span><span class=\"context-right\"><span class=\"more\"></span></span>", kr.getMatch(1).snippetHTML());
 
-	assertEquals("SnippetBrackets (6)", "... [c]", kr.match(6).snippetBrackets());
-	assertEquals("SnippetBrackets (6)", "<span class=\"context-left\"><span class=\"more\"></span></span><span class=\"match\">c</span><span class=\"context-right\"></span>", kr.match(6).snippetHTML());
+	assertEquals("SnippetBrackets (6)", "... [c]", kr.getMatch(6).snippetBrackets());
+	assertEquals("SnippetBrackets (6)", "<span class=\"context-left\"><span class=\"more\"></span></span><span class=\"match\">c</span><span class=\"context-right\"></span>", kr.getMatch(6).snippetHTML());
     };
 
 
@@ -300,10 +298,8 @@
 
 	kr = ki.search(sq, 0, (short) 20, true, (short) 2, true, (short) 5);
 
-	assertEquals("totalResults", 1, kr.totalResults());
-	assertEquals("SnippetBrackets (0)", "... ca[{1:ba{2:c}}]", kr.match(0).snippetBrackets());
-
-	//	System.err.println(kr.toJSON());
+	assertEquals("totalResults", kr.getTotalResults(), 1);
+	assertEquals("SnippetBrackets (0)", "... ca[{1:ba{2:c}}]", kr.getMatch(0).snippetBrackets());
     };
 
 
@@ -341,9 +337,9 @@
 
 	kr = ki.search(sq, (short) 10);
 
-	assertEquals("totalResults", 3, kr.totalResults());
+	assertEquals("totalResults", kr.getTotalResults(), 3);
 
-	KorapMatch km = kr.match(0);
+	KorapMatch km = kr.getMatch(0);
 	assertEquals("StartPos (0)", 1, km.startPos);
 	assertEquals("EndPos (0)", 2, km.endPos);
 	assertEquals("SnippetBrackets (0)", "a[{3:b}]cabcab ...", km.getSnippetBrackets());
@@ -359,7 +355,7 @@
 	
 	kr = ki.search(sq, (short) 10);
 
-	km = kr.match(0);
+	km = kr.getMatch(0);
 	assertEquals("StartPos (0)", 0, km.startPos);
 	assertEquals("EndPos (0)", 1, km.endPos);
 	assertEquals("SnippetBrackets (0)", "[{2:a}]bcabca ...", km.getSnippetBrackets());
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 a3e649b..b57e888 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestMultipleDistanceIndex.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestMultipleDistanceIndex.java
@@ -121,7 +121,7 @@
 		kr = ki.search(mdq, (short) 10);
 		// System.out.println(mdq);
 		
-		assertEquals(3, kr.getTotalResults());
+		assertEquals((long) 3, kr.getTotalResults());
 	    assertEquals(0, kr.getMatch(0).getStartPos());
 	    assertEquals(2, kr.getMatch(0).getEndPos());
 	    assertEquals(1, kr.getMatch(1).getStartPos());
@@ -149,7 +149,7 @@
 	    SpanQuery mdq;	    
 		mdq = createQuery("s:b", "s:c", constraints,true);
 		kr = ki.search(mdq, (short) 10);		
-	    assertEquals(3, kr.getTotalResults());
+	    assertEquals((long) 3, kr.getTotalResults());
 	    assertEquals(0, kr.getMatch(0).getStartPos());
 	    assertEquals(3, kr.getMatch(0).getEndPos());
 	    assertEquals(1, kr.getMatch(1).getStartPos());
@@ -161,7 +161,7 @@
 		constraints.add(createConstraint("p", 0, 0, true, false));		
 		mdq = createQuery("s:b", "s:c", constraints,true);
 		kr = ki.search(mdq, (short) 10);
-		assertEquals(2, kr.getTotalResults());
+		assertEquals((long) 2, kr.getTotalResults());
 		
 		
 		// Unordered - two constraints
@@ -171,7 +171,7 @@
 	    	   
 	    mdq = createQuery("s:c", "s:b", constraints,false);
 	    kr = ki.search(mdq, (short) 10);
-	    assertEquals(4, kr.getTotalResults());
+	    assertEquals((long) 4, kr.getTotalResults());
 	    assertEquals(1, kr.getMatch(2).getStartPos());
 	    assertEquals(4, kr.getMatch(2).getEndPos());
 		
@@ -179,7 +179,7 @@
 		constraints.add(createConstraint("p", 0, 0, false, false));
 		mdq = createQuery("s:b", "s:c", constraints,false);
 		kr = ki.search(mdq, (short) 10);		
-		assertEquals(3, kr.getTotalResults());	
+		assertEquals((long) 3, kr.getTotalResults());	
 
 	}
     
@@ -202,7 +202,7 @@
 		mdq = createQuery("s:b", "s:e", constraints,false);
 		kr = ki.search(mdq, (short) 10);		
 
-		assertEquals(5, kr.getTotalResults());		
+		assertEquals((long) 5, kr.getTotalResults());		
 	    assertEquals(3, kr.getMatch(0).getStartPos());
 	    assertEquals(6, kr.getMatch(0).getEndPos());
 	    assertEquals(2, kr.getMatch(1).getLocalDocID());
@@ -246,7 +246,7 @@
 				new SpanTermQuery(new Term("base","s:e")));
 		kr = ki.search(sq, (short) 10);
 		
-		assertEquals(2, kr.getTotalResults());
+		assertEquals((long) 2, kr.getTotalResults());
 	    assertEquals(3, kr.getMatch(0).getStartPos());
 	    assertEquals(6, kr.getMatch(0).getEndPos());
 	    assertEquals(3, kr.getMatch(1).getLocalDocID());
@@ -272,7 +272,7 @@
 		mdq = createQuery("s:c", "s:c", constraints,false);
 		kr = ki.search(mdq, (short) 10);
 		
-		assertEquals(4, kr.getTotalResults());
+		assertEquals((long) 4, kr.getTotalResults());
 	    assertEquals(1, kr.getMatch(0).getStartPos());
 	    assertEquals(3, kr.getMatch(0).getEndPos());
 	    assertEquals(2, kr.getMatch(1).getStartPos());
@@ -302,7 +302,7 @@
 		SpanDistanceQuery sq = new SpanDistanceQuery(sx, sy, dc1, true);
 		
 		kr = ki.search(sq, (short) 10);
-		assertEquals(1, kr.getTotalResults());
+		assertEquals((long) 1, kr.getTotalResults());
 		// 4-5
 		
     	// Second constraint - element distance
@@ -310,7 +310,7 @@
 		sq = new SpanDistanceQuery(sx, sy, dc2, true);		
 		kr = ki.search(sq, (short) 10);		
 		// 0-3, 1-3, 1-4, 1-5, 3-7, 4-7
-		assertEquals(6, kr.getTotalResults());
+		assertEquals((long) 6, kr.getTotalResults());
 		
 		
     	List<DistanceConstraint> constraints = new ArrayList<DistanceConstraint>();
@@ -321,7 +321,7 @@
 		mdq = createQuery("s:b", "s:c", constraints,false);
 		kr = ki.search(mdq, (short) 10);
 		
-		assertEquals(2, kr.getTotalResults());
+		assertEquals((long) 2, kr.getTotalResults());
 	    assertEquals(1, kr.getMatch(0).getStartPos());
 	    assertEquals(5, kr.getMatch(0).getEndPos());
 	    assertEquals(4, kr.getMatch(1).getStartPos());
@@ -344,7 +344,7 @@
 				createConstraint("s", 0, 0, false, true),
 				true);
 		kr = ki.search(sq, (short) 10);
-		assertEquals(3, kr.getTotalResults());
+		assertEquals((long) 3, kr.getTotalResults());
     	// 0-1, 1-2, 6-7
 				
 	    // Exclusion within the same sentence
@@ -355,7 +355,7 @@
 	    SpanQuery mdq;	   
 		mdq = createQuery("s:b", "s:c", constraints,false);
 		kr = ki.search(mdq, (short) 10);		
-		assertEquals(2, kr.getTotalResults());
+		assertEquals((long) 2, kr.getTotalResults());
 	    assertEquals(0, kr.getMatch(0).getStartPos());
 	    assertEquals(1, kr.getMatch(0).getEndPos());
 	    assertEquals(6, kr.getMatch(1).getStartPos());
@@ -367,14 +367,14 @@
 				createConstraint("p", 0, 0, false, true), 
 				true);
 	    kr = ki.search(sq, (short) 10);
-		assertEquals(1, kr.getTotalResults());
+		assertEquals((long) 1, kr.getTotalResults());
 		// 6-7
 	    
 		constraints.add(createConstraint("p", 0, 0, false, true));
 	    mdq = createQuery("s:b", "s:c", constraints,false);
 		kr = ki.search(mdq, (short) 10);			
 		
-	    assertEquals(1, kr.getTotalResults());
+	    assertEquals((long) 1, kr.getTotalResults());
 	    assertEquals(6, kr.getMatch(0).getStartPos());
 	    assertEquals(7, kr.getMatch(0).getEndPos());
 
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 8471b20..59b8525 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestNextIndex.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestNextIndex.java
@@ -71,13 +71,13 @@
 
 	kr = ki.search(sq, (short) 10);
 	
-	assertEquals("totalResults", 3, kr.totalResults());
-	assertEquals("StartPos (0)", 0, kr.match(0).startPos);
-	assertEquals("EndPos (0)", 2, kr.match(0).endPos);
-	assertEquals("StartPos (1)", 3, kr.match(1).startPos);
-	assertEquals("EndPos (1)", 5, kr.match(1).endPos);
-	assertEquals("StartPos (2)", 6, kr.match(2).startPos);
-	assertEquals("EndPos (2)", 8, kr.match(2).endPos);
+	assertEquals("totalResults", kr.getTotalResults(), 3);
+	assertEquals("StartPos (0)", 0, kr.getMatch(0).startPos);
+	assertEquals("EndPos (0)", 2, kr.getMatch(0).endPos);
+	assertEquals("StartPos (1)", 3, kr.getMatch(1).startPos);
+	assertEquals("EndPos (1)", 5, kr.getMatch(1).endPos);
+	assertEquals("StartPos (2)", 6, kr.getMatch(2).startPos);
+	assertEquals("EndPos (2)", 8, kr.getMatch(2).endPos);
 	
 	sq = new SpanNextQuery(
             new SpanTermQuery(new Term("base", "s:b")),
@@ -86,11 +86,11 @@
 
 	kr = ki.search(sq, (short) 10);
 	
-	assertEquals("totalResults", 2, kr.totalResults());
-	assertEquals("StartPos (0)", 1, kr.match(0).startPos);
-	assertEquals("EndPos (0)", 3, kr.match(0).endPos);
-	assertEquals("StartPos (1)", 4, kr.match(1).startPos);
-	assertEquals("EndPos (1)", 6, kr.match(1).endPos);
+	assertEquals("totalResults", kr.getTotalResults(), 2);
+	assertEquals("StartPos (0)", 1, kr.getMatch(0).startPos);
+	assertEquals("EndPos (0)", 3, kr.getMatch(0).endPos);
+	assertEquals("StartPos (1)", 4, kr.getMatch(1).startPos);
+	assertEquals("EndPos (1)", 6, kr.getMatch(1).endPos);
 
 	assertEquals(1, ki.numberOf("base", "documents"));
 	assertEquals(10, ki.numberOf("base", "t"));
@@ -106,11 +106,11 @@
 
 	kr = ki.search(sq, (short) 2);
 	
-	assertEquals("totalResults", 2, kr.totalResults());
-	assertEquals("StartPos (0)", 0, kr.match(0).startPos);
-	assertEquals("EndPos (0)", 3, kr.match(0).endPos);
-	assertEquals("StartPos (1)", 3, kr.match(1).startPos);
-	assertEquals("EndPos (1)", 6, kr.match(1).endPos);
+	assertEquals("totalResults", kr.getTotalResults(), 2);
+	assertEquals("StartPos (0)", 0, kr.getMatch(0).startPos);
+	assertEquals("EndPos (0)", 3, kr.getMatch(0).endPos);
+	assertEquals("StartPos (1)", 3, kr.getMatch(1).startPos);
+	assertEquals("EndPos (1)", 6, kr.getMatch(1).endPos);
 
 	assertEquals(1, ki.numberOf("base", "documents"));
 	assertEquals(10, ki.numberOf("base", "t"));
@@ -148,7 +148,7 @@
 	);
 	
 	kr = ki.search(sq, (short) 10);
-	assertEquals("ab[cabca]bac", kr.match(1).getSnippetBrackets());
+	assertEquals("ab[cabca]bac", kr.getMatch(1).getSnippetBrackets());
 
     };
 
@@ -183,7 +183,7 @@
 	);
 	
 	kr = ki.search(sq, (short) 10);
-	assertEquals("abc[abcab]ac", kr.match(0).getSnippetBrackets());
+	assertEquals("abc[abcab]ac", kr.getMatch(0).getSnippetBrackets());
     };
 
     @Test
@@ -237,9 +237,9 @@
 	);
 	
 	kr = ki.search(sq, (short) 10);
-	assertEquals(2, kr.totalResults());
-	assertEquals("abc[abcab]ac", kr.match(0).getSnippetBrackets());
-	assertEquals("xbz[xbzxb]xz", kr.match(1).getSnippetBrackets());
+	assertEquals("TotalResults", kr.getTotalResults(), 2);
+	assertEquals("abc[abcab]ac", kr.getMatch(0).getSnippetBrackets());
+	assertEquals("xbz[xbzxb]xz", kr.getMatch(1).getSnippetBrackets());
 
 	sq = new SpanNextQuery(
 	       new SpanTermQuery(new Term("base", "s:c")),
@@ -247,8 +247,8 @@
 	);
 	
 	kr = ki.search(sq, (short) 10);
-	assertEquals(1, kr.totalResults());
-	assertEquals("ab[cabca]bac", kr.match(0).getSnippetBrackets());
+	assertEquals(kr.getTotalResults(), 1);
+	assertEquals("ab[cabca]bac", kr.getMatch(0).getSnippetBrackets());
 
 	sq = new SpanNextQuery(
 	       new SpanTermQuery(new Term("base", "s:z")),
@@ -256,8 +256,8 @@
 	);
 	
 	kr = ki.search(sq, (short) 10);
-	assertEquals(1, kr.totalResults());
-	assertEquals("xb[zxbzx]bxz", kr.match(0).getSnippetBrackets());
+	assertEquals(kr.getTotalResults(), 1);
+	assertEquals("xb[zxbzx]bxz", kr.getMatch(0).getSnippetBrackets());
     };
     
     /**
@@ -279,15 +279,15 @@
 				);
 		KorapResult kr = ki.search(sq, (short) 10);			
 				
-		assertEquals("totalResults", 2, kr.totalResults());
+		assertEquals("totalResults", kr.getTotalResults(), 2);
 		// Match #0
-		assertEquals("doc-number", 0, kr.match(0).getLocalDocID());
-		assertEquals("StartPos", 4, kr.match(0).startPos);
-		assertEquals("EndPos", 6, kr.match(0).endPos);
+		assertEquals("doc-number", 0, kr.getMatch(0).getLocalDocID());
+		assertEquals("StartPos", 4, kr.getMatch(0).startPos);
+		assertEquals("EndPos", 6, kr.getMatch(0).endPos);
 		// Match #1
-		assertEquals("doc-number", 0, kr.match(1).getLocalDocID());
-		assertEquals("StartPos", 1, kr.match(1).startPos);
-		assertEquals("EndPos", 3, kr.match(1).endPos);
+		assertEquals("doc-number", 0, kr.getMatch(1).getLocalDocID());
+		assertEquals("StartPos", 1, kr.getMatch(1).startPos);
+		assertEquals("EndPos", 3, kr.getMatch(1).endPos);
 		
 		sq = new SpanNextQuery(
 				new SpanTermQuery(new Term("base","s:b")),
@@ -295,10 +295,10 @@
 			);
 		kr = ki.search(sq, (short) 10);
 		
-		assertEquals("totalResults", 1, kr.totalResults());
-		assertEquals("doc-number", 0, kr.match(0).getLocalDocID());
-		assertEquals("StartPos", 2, kr.match(0).startPos);
-		assertEquals("EndPos", 4, kr.match(0).endPos);
+		assertEquals("totalResults", kr.getTotalResults(), 1);
+		assertEquals("doc-number", 0, kr.getMatch(0).getLocalDocID());
+		assertEquals("StartPos", 2, kr.getMatch(0).startPos);
+		assertEquals("EndPos", 4, kr.getMatch(0).endPos);
 	}
 	
 	/** Skip to NextSpan */
@@ -319,10 +319,10 @@
 			);
 		
 		KorapResult kr = ki.search(sq, (short) 10);			
-		assertEquals("totalResults", 1, kr.totalResults());
-		assertEquals("doc-number", 2, kr.match(0).getLocalDocID());
-		assertEquals("StartPos", 0, kr.match(0).startPos);
-		assertEquals("EndPos", 3, kr.match(0).endPos);	
+		assertEquals("totalResults", kr.getTotalResults(), 1);
+		assertEquals("doc-number", 2, kr.getMatch(0).getLocalDocID());
+		assertEquals("StartPos", 0, kr.getMatch(0).startPos);
+		assertEquals("EndPos", 3, kr.getMatch(0).endPos);	
 		
 	}
 
@@ -340,10 +340,10 @@
 		
 		KorapResult kr = ki.search(sq.toQuery(), (short) 10);			
 
-		assertEquals("totalResults", 3, kr.totalResults());
-		assertEquals("doc-number", "match-doc-0-p2-5", kr.match(0).getID());
-		assertEquals("doc-number", "match-doc-2-p2-4", kr.match(1).getID());
-		assertEquals("doc-number", "match-doc-3-p2-5", kr.match(2).getID());
+		assertEquals("totalResults", kr.getTotalResults(), 3);
+		assertEquals("doc-number", "match-doc-0-p2-5", kr.getMatch(0).getID());
+		assertEquals("doc-number", "match-doc-2-p2-4", kr.getMatch(1).getID());
+		assertEquals("doc-number", "match-doc-3-p2-5", kr.getMatch(2).getID());
 	};
 
 	@Test
@@ -360,10 +360,10 @@
 		
 		KorapResult kr = ki.search(sq.toQuery(), (short) 10);			
 
-		assertEquals("totalResults", 3, kr.totalResults());
-		assertEquals("doc-number", "match-doc-0-p3-6", kr.match(0).getID());
-		assertEquals("doc-number", "match-doc-1-p1-3", kr.match(1).getID());
-		assertEquals("doc-number", "match-doc-3-p3-6", kr.match(2).getID());
+		assertEquals("totalResults", kr.getTotalResults(), 3);
+		assertEquals("doc-number", "match-doc-0-p3-6", kr.getMatch(0).getID());
+		assertEquals("doc-number", "match-doc-1-p1-3", kr.getMatch(1).getID());
+		assertEquals("doc-number", "match-doc-3-p3-6", kr.getMatch(2).getID());
 	};
 
 	@Test
@@ -381,14 +381,10 @@
 		
 		KorapResult kr = ki.search(sq, (short) 10);
 		
-		assertEquals(0, kr.match(0).getStartPos());
-		assertEquals(2, kr.match(0).getEndPos());
-		assertEquals(3, kr.match(1).getStartPos());
-		assertEquals(5, kr.match(1).getEndPos());
-		
-//		for (KorapMatch m : kr.getMatches()){
-//			System.out.println(m.getStartPos() +" "+ m.getEndPos());
-//		}
+		assertEquals(0, kr.getMatch(0).getStartPos());
+		assertEquals(2, kr.getMatch(0).getEndPos());
+		assertEquals(3, kr.getMatch(1).getStartPos());
+		assertEquals(5, kr.getMatch(1).getEndPos());
 	}
 	
 	
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 1062d4a..070665e 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestRealIndex.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestRealIndex.java
@@ -39,7 +39,7 @@
 	ks = new KorapSearch(kq.within(kq.tag("base/s:s"), kq.seq(kq.re("s:.*")).append(kq._(kq.re("s:.*")))).toQuery());
 	ks.setTimeOut(10000);
 	kr = ks.run(ki);
-	System.err.println(kr.toJSON());
+	System.err.println(kr.toJsonString());
 	assertEquals(8, kr.getTotalResults());
     };
 }
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 1c23494..04c7913 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestRegexWildcardIndex.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestRegexWildcardIndex.java
@@ -57,27 +57,27 @@
 	ks.context.right.setToken(true).setLength(1);
 
 	KorapResult kr = ki.search(ks);
-	assertEquals(2, kr.getTotalResults());
+	assertEquals((long) 2, kr.getTotalResults());
 	assertEquals("[affe] afffe ...", kr.getMatch(0).getSnippetBrackets());
 	assertEquals("affe [afffe] baum ...", kr.getMatch(1).getSnippetBrackets());
 
 	kr = ki.search(ks.setQuery(new KorapQuery("base").re("s:baum.*").toQuery()));
-	assertEquals(2, kr.getTotalResults());
+	assertEquals((long) 2, kr.getTotalResults());
 	assertEquals("... afffe [baum] baumgarten ...", kr.getMatch(0).getSnippetBrackets());
 	assertEquals("... baum [baumgarten] steingarten ...", kr.getMatch(1).getSnippetBrackets());
 
 	kr = ki.search(ks.setQuery(new KorapQuery("base").re("s:.....?garten").toQuery()));
-	assertEquals(2, kr.getTotalResults());
+	assertEquals((long) 2, kr.getTotalResults());
 	assertEquals("... baum [baumgarten] steingarten ...", kr.getMatch(0).getSnippetBrackets());
 	assertEquals("... baumgarten [steingarten] franz ...", kr.getMatch(1).getSnippetBrackets());
 
 	kr = ki.search(ks.setQuery(new KorapQuery("base").re("s:ha.s").toQuery()));
-	assertEquals(2, kr.getTotalResults());
+	assertEquals((long) 2, kr.getTotalResults());
 	assertEquals("... franz [hans] haus ...", kr.getMatch(0).getSnippetBrackets());
 	assertEquals("... hans [haus] efeu ...", kr.getMatch(1).getSnippetBrackets());
 
 	kr = ki.search(ks.setQuery(new KorapQuery("base").re("s:.*ff.*").toQuery()));
-	assertEquals(3, kr.getTotalResults());
+	assertEquals((long) 3, kr.getTotalResults());
 	assertEquals("[affe] afffe ...", kr.getMatch(0).getSnippetBrackets());
 	assertEquals("affe [afffe] baum ...", kr.getMatch(1).getSnippetBrackets());
 	assertEquals("... efeu [effe]", kr.getMatch(2).getSnippetBrackets());
@@ -114,30 +114,30 @@
 	ks.context.right.setToken(true).setLength(1);
 
 	KorapResult kr = ki.search(ks);
-	assertEquals(2, kr.getTotalResults());
+	assertEquals((long) 2, kr.getTotalResults());
 	assertEquals("[affe] afffe ...", kr.getMatch(0).getSnippetBrackets());
 	assertEquals("affe [afffe] baum ...", kr.getMatch(1).getSnippetBrackets());
 
 	kr = ki.search(ks.setQuery(new KorapQuery("base").wc("s:baum.*").toQuery()));
-	assertEquals(0, kr.getTotalResults());
+	assertEquals((long) 0, kr.getTotalResults());
 
 	kr = ki.search(ks.setQuery(new KorapQuery("base").wc("s:baum*").toQuery()));
-	assertEquals(2, kr.getTotalResults());
+	assertEquals((long) 2, kr.getTotalResults());
 	assertEquals("... afffe [baum] baumgarten ...", kr.getMatch(0).getSnippetBrackets());
 	assertEquals("... baum [baumgarten] steingarten ...", kr.getMatch(1).getSnippetBrackets());
 
 	kr = ki.search(ks.setQuery(new KorapQuery("base").wc("s:*garten").toQuery()));
-	assertEquals(2, kr.getTotalResults());
+	assertEquals((long) 2, kr.getTotalResults());
 	assertEquals("... baum [baumgarten] steingarten ...", kr.getMatch(0).getSnippetBrackets());
 	assertEquals("... baumgarten [steingarten] franz ...", kr.getMatch(1).getSnippetBrackets());
 
 	kr = ki.search(ks.setQuery(new KorapQuery("base").wc("s:ha?s").toQuery()));
-	assertEquals(2, kr.getTotalResults());
+	assertEquals((long) 2, kr.getTotalResults());
 	assertEquals("... franz [hans] haus ...", kr.getMatch(0).getSnippetBrackets());
 	assertEquals("... hans [haus] efeu ...", kr.getMatch(1).getSnippetBrackets());
 
 	kr = ki.search(ks.setQuery(new KorapQuery("base").wc("s:?ff?").toQuery()));
-	assertEquals(2, kr.getTotalResults());
+	assertEquals((long) 2, kr.getTotalResults());
 	assertEquals("[affe] afffe ...", kr.getMatch(0).getSnippetBrackets());
 	assertEquals("... efeu [effe]", kr.getMatch(1).getSnippetBrackets());
     };
@@ -173,35 +173,35 @@
 	ks.context.right.setToken(true).setLength(1);
 
 	KorapResult kr = ki.search(ks);
-	assertEquals(2, kr.getTotalResults());
+	assertEquals((long) 2, kr.getTotalResults());
 	assertEquals("[AfFe] aFfFE ...", kr.getMatch(0).getSnippetBrackets());
 	assertEquals("AfFe [aFfFE] Baum ...", kr.getMatch(1).getSnippetBrackets());
 
 	kr = ki.search(ks.setQuery(new KorapQuery("base").re("s:Af.*e").toQuery()));
-	assertEquals(1, kr.getTotalResults());
+	assertEquals((long) 1, kr.getTotalResults());
 	assertEquals("[AfFe] aFfFE ...", kr.getMatch(0).getSnippetBrackets());
 
 	kr = ki.search(ks.setQuery(new KorapQuery("base").re("s:baum.*", true).toQuery()));
-	assertEquals(2, kr.getTotalResults());
+	assertEquals((long) 2, kr.getTotalResults());
 	assertEquals("... aFfFE [Baum] Baumgarten ...", kr.getMatch(0).getSnippetBrackets());
 	assertEquals("... Baum [Baumgarten] SteinGarten ...", kr.getMatch(1).getSnippetBrackets());
 
 	kr = ki.search(ks.setQuery(new KorapQuery("base").re("s:.*garten", true).toQuery()));
-	assertEquals(2, kr.getTotalResults());
+	assertEquals((long) 2, kr.getTotalResults());
 	assertEquals("... Baum [Baumgarten] SteinGarten ...", kr.getMatch(0).getSnippetBrackets());
 	assertEquals("... Baumgarten [SteinGarten] franZ ...", kr.getMatch(1).getSnippetBrackets());
 
 	kr = ki.search(ks.setQuery(new KorapQuery("base").re("s:.*garten", false).toQuery()));
-	assertEquals(1, kr.getTotalResults());
+	assertEquals((long) 1, kr.getTotalResults());
 	assertEquals("... Baum [Baumgarten] SteinGarten ...", kr.getMatch(0).getSnippetBrackets());
 
 	kr = ki.search(ks.setQuery(new KorapQuery("base").re("s:ha.s", true).toQuery()));
-	assertEquals(2, kr.getTotalResults());
+	assertEquals((long) 2, kr.getTotalResults());
 	assertEquals("... franZ [HaNs] Haus ...", kr.getMatch(0).getSnippetBrackets());
 	assertEquals("... HaNs [Haus] Efeu ...", kr.getMatch(1).getSnippetBrackets());
 
 	kr = ki.search(ks.setQuery(new KorapQuery("base").re("s:.*f*e", true).toQuery()));
-	assertEquals(3, kr.getTotalResults());
+	assertEquals((long) 3, kr.getTotalResults());
 	assertEquals("[AfFe] aFfFE ...", kr.getMatch(0).getSnippetBrackets());
 	assertEquals("AfFe [aFfFE] Baum ...", kr.getMatch(1).getSnippetBrackets());
 	assertEquals("... Efeu [effe]", kr.getMatch(2).getSnippetBrackets());
@@ -238,7 +238,7 @@
 	ks.context.right.setToken(true).setLength(1);
 
 	KorapResult kr = ki.search(ks);
-	assertEquals(1, kr.getTotalResults());
+	assertEquals((long) 1, kr.getTotalResults());
 	assertEquals("[affe afffe] baum ...", kr.getMatch(0).getSnippetBrackets());
     };
 
@@ -279,7 +279,7 @@
 	ks.context.right.setToken(true).setLength(1);
 
 	KorapResult kr = ki.search(ks);
-	assertEquals(1, kr.getTotalResults());
+	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 c44ffee..7c5d021 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestRelationIndex.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestRelationIndex.java
@@ -187,7 +187,7 @@
 				new SpanTermQuery(new Term("base",">:xip/syntax-dep_rel")),true);
 		kr = ki.search(sq,(short) 10);
 		
-		assertEquals(7, kr.getTotalResults());
+		assertEquals((long) 7, kr.getTotalResults());
 		// token to token
 		assertEquals(0,kr.getMatch(0).getLocalDocID());
 		assertEquals(0,kr.getMatch(0).getStartPos());
@@ -226,7 +226,7 @@
 				new SpanTermQuery(new Term("base","<:xip/syntax-dep_rel")),true);
 		kr = ki.search(sq,(short) 10);
 		
-		assertEquals(7, kr.getTotalResults());
+		assertEquals((long) 7, kr.getTotalResults());
 		// token to token
 		assertEquals(0,kr.getMatch(0).getLocalDocID());
 		assertEquals(1,kr.getMatch(0).getStartPos());
@@ -261,7 +261,7 @@
 				new SpanTermQuery(new Term("base",">:child-of")),true);
 		kr = ki.search(srq,(short) 20);
 		
-		assertEquals(13, kr.getTotalResults());
+		assertEquals((long) 13, kr.getTotalResults());
 		
 		// child-of with attr func=sbj
 		SpanWithAttributeQuery wq = 
@@ -273,7 +273,7 @@
 		);
 		
 		kr = ki.search(wq,(short) 10);		
-		assertEquals(1, kr.getTotalResults());
+		assertEquals((long) 1, kr.getTotalResults());
 		assertEquals(0,kr.getMatch(0).getStartPos()); // token
 		assertEquals(1,kr.getMatch(0).getEndPos());
 		
@@ -286,7 +286,7 @@
 				true
 		);
 		kr = ki.search(wq,(short) 20);
-		assertEquals(12, kr.getTotalResults());
+		assertEquals((long) 12, kr.getTotalResults());
 		
 		/*for (KorapMatch km : kr.getMatches()){		
 			System.out.println(km.getStartPos() +","+km.getEndPos()
@@ -304,7 +304,7 @@
 		
 		kr = ki.search(wq,(short) 10);
 		
-		assertEquals(1, kr.getTotalResults());
+		assertEquals((long) 1, kr.getTotalResults());
 		assertEquals(2,kr.getMatch(0).getStartPos()); // element
 		assertEquals(4,kr.getMatch(0).getEndPos());
 			
@@ -313,7 +313,7 @@
 				new SpanTermQuery(new Term("base","<:dep")),true);
 		kr = ki.search(srq,(short) 10);
 		
-		assertEquals(6, kr.getTotalResults());
+		assertEquals((long) 6, kr.getTotalResults());
 		
 		// target of a dependency relation, which is also a head
 		wq = new SpanWithAttributeQuery(srq, 
@@ -325,7 +325,7 @@
 		
 		kr = ki.search(wq,(short) 20);
 		
-		assertEquals(2, kr.getTotalResults());
+		assertEquals((long) 2, kr.getTotalResults());
 		assertEquals(3,kr.getMatch(0).getStartPos());
 		assertEquals(4,kr.getMatch(0).getEndPos());
 		assertEquals(6,kr.getMatch(1).getStartPos());
@@ -354,7 +354,7 @@
 				
 		kr = ki.search(rv,(short) 10);
 		
-		assertEquals(7, kr.getTotalResults());
+		assertEquals((long) 7, kr.getTotalResults());
 		assertEquals(0,kr.getMatch(0).getStartPos());
 		assertEquals(1,kr.getMatch(0).getEndPos());
 		assertEquals(2,kr.getMatch(1).getStartPos());
@@ -375,7 +375,7 @@
 		SpanSegmentQuery rv2 = new SpanSegmentQuery(rv, new SpanTermQuery(new Term("base","pos:ART")));		
 		kr = ki.search(rv2,(short) 10);
 				
-		assertEquals(2, kr.getTotalResults());
+		assertEquals((long) 2, kr.getTotalResults());
 		assertEquals(2,kr.getMatch(0).getStartPos());
 		assertEquals(3,kr.getMatch(0).getEndPos());
 		assertEquals(5,kr.getMatch(1).getStartPos());
@@ -393,7 +393,7 @@
 				+km.getSnippetBrackets()
 					);
 		}	*/
-		assertEquals(2, kr.getTotalResults());
+		assertEquals((long) 2, kr.getTotalResults());
 		assertEquals(2,kr.getMatch(0).getStartPos());
 		assertEquals(4,kr.getMatch(0).getEndPos());
 		assertEquals(5,kr.getMatch(1).getStartPos());
@@ -425,7 +425,7 @@
 				+km.getSnippetBrackets());
 			}*/
 		
-		assertEquals(7, kr.getTotalResults());
+		assertEquals((long) 7, kr.getTotalResults());
 		assertEquals(0,kr.getMatch(0).getStartPos());
 		assertEquals(1,kr.getMatch(0).getEndPos());
 		assertEquals(2,kr.getMatch(1).getStartPos());
@@ -465,7 +465,7 @@
 			System.out.println(km.getStartPos() +","+km.getEndPos()+" "
 				+km.getSnippetBrackets());
 			}*/
-		assertEquals(4, kr.getTotalResults());
+		assertEquals((long) 4, kr.getTotalResults());
 		assertEquals(0,kr.getMatch(0).getStartPos());
 		assertEquals(7,kr.getMatch(0).getEndPos());
 		assertEquals(1,kr.getMatch(1).getStartPos());
@@ -497,7 +497,7 @@
 			System.out.println(km.getStartPos() +","+km.getEndPos()+" "
 				+km.getSnippetBrackets());
 			}*/
-		assertEquals(4, kr.getTotalResults());
+		assertEquals((long) 4, kr.getTotalResults());
 		assertEquals(0,kr.getMatch(0).getStartPos());
 		assertEquals(7,kr.getMatch(0).getEndPos());
 		assertEquals(1,kr.getMatch(1).getStartPos());
@@ -521,7 +521,7 @@
 		System.out.println(km.getStartPos() +","+km.getEndPos()+" "
 			+km.getSnippetBrackets());
 		}*/		
-		assertEquals(8, kr.getTotalResults());
+		assertEquals((long) 8, kr.getTotalResults());
 	}
 	
 	/** Relations whose source/target do not embed 
@@ -542,7 +542,7 @@
 				new SpanTermWithIdQuery(new Term("base","pos:NN"), true), 
 				true, false, true);
 		kr = ki.search(rv,(short) 10);
-		assertEquals(3, kr.getTotalResults());
+		assertEquals((long) 3, kr.getTotalResults());
 		assertEquals(1,kr.getMatch(0).getStartPos());
 		assertEquals(2,kr.getMatch(0).getEndPos());
 		assertEquals(1,kr.getMatch(1).getStartPos());
@@ -558,7 +558,7 @@
 				new SpanTermWithIdQuery(new Term("base","pos:NN"),true), 
 				true, false, true);
 		kr = ki.search(rv,(short) 10);
-		assertEquals(3, kr.getTotalResults());
+		assertEquals((long) 3, kr.getTotalResults());
 		assertEquals(2,kr.getMatch(0).getStartPos());
 		assertEquals(3,kr.getMatch(0).getEndPos());
 		assertEquals(4,kr.getMatch(1).getStartPos());
@@ -577,7 +577,7 @@
 				false, true, true);
 		kr = ki.search(rv,(short) 10);
 			
-		assertEquals(3, kr.getTotalResults());
+		assertEquals((long) 3, kr.getTotalResults());
 		assertEquals(2,kr.getMatch(0).getStartPos());
 		assertEquals(3,kr.getMatch(0).getEndPos());
 		assertEquals(4,kr.getMatch(1).getStartPos());
@@ -599,7 +599,7 @@
 				+km.getSnippetBrackets());
 			}*/
 		
-		assertEquals(3, kr.getTotalResults());
+		assertEquals((long) 3, kr.getTotalResults());
 		assertEquals(1,kr.getMatch(0).getStartPos());
 		assertEquals(2,kr.getMatch(0).getEndPos());
 		assertEquals(1,kr.getMatch(1).getStartPos());
@@ -623,7 +623,7 @@
 				6, true, false, true); 
 				
 		kr = ki.search(rv,(short) 10);
-		assertEquals(7, kr.getTotalResults());
+		assertEquals((long) 7, kr.getTotalResults());
 		
 		rv =new SpanRelationPartQuery(
 				new SpanRelationQuery(
@@ -639,7 +639,7 @@
 				);
 		}*/
 		
-		assertEquals(3, kr.getTotalResults());
+		assertEquals((long) 3, kr.getTotalResults());
 		assertEquals(1,kr.getMatch(0).getStartPos());
 		assertEquals(2,kr.getMatch(0).getEndPos());
 		assertEquals(1,kr.getMatch(1).getStartPos());
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 b404373..052dd0d 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestRepetitionIndex.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestRepetitionIndex.java
@@ -95,7 +95,7 @@
         sq = new SpanRepetitionQuery(new SpanTermQuery(new Term("base","s:c")),1,2, true);
         kr = ki.search(sq, (short) 10);
         // 0-1, 2-3, 2-4, 3-4, 5-6
-        assertEquals(5,kr.getTotalResults());        
+        assertEquals((long) 5,kr.getTotalResults());        
         
         // ec{1,2}
         sq = new SpanNextQuery(
@@ -105,12 +105,12 @@
         
         kr = ki.search(sq, (short) 10);
         // 1-3, 1-4, 4-6
-        assertEquals(3,kr.getTotalResults());   
+        assertEquals((long) 3, kr.getTotalResults());   
         
         // ec{1,2}d
         sq2 = new SpanNextQuery(sq, new SpanTermQuery(new Term("base", "s:d")));        
         kr = ki.search(sq2, (short) 10);        
-        assertEquals(2,kr.getTotalResults());
+        assertEquals((long) 2,kr.getTotalResults());
         assertEquals(1, kr.getMatch(0).startPos);
         assertEquals(5, kr.getMatch(0).endPos);
         assertEquals(4, kr.getMatch(1).startPos);
@@ -120,7 +120,7 @@
         ki.addDoc(createFieldDoc1());
         ki.commit();
         kr = ki.search(sq2, (short) 10);
-        assertEquals(5,kr.getTotalResults());
+        assertEquals((long) 5, kr.getTotalResults());
 	}
 	
 	/** Skip to */
@@ -138,7 +138,7 @@
         sq = new SpanRepetitionQuery(new SpanTermQuery(new Term("base","s:c")),2,2, true);
         kr = ki.search(sq, (short) 10);
         // doc1 2-4, 3-5, 4-6
-        assertEquals(6,kr.getTotalResults());
+        assertEquals((long)6,kr.getTotalResults());
         
         // ec{2,2}
         kr = ki.search(sq, (short) 10); 
@@ -148,7 +148,7 @@
     		);
         
         kr = ki.search(sq, (short) 10); 
-        assertEquals(2,kr.getTotalResults());
+        assertEquals((long)2,kr.getTotalResults());
         assertEquals(3,kr.getMatch(1).getLocalDocID());        
        
 	}
@@ -170,7 +170,7 @@
 				)
     		);        
         kr = ki.search(sq, (short) 10); 
-        assertEquals(3,kr.getTotalResults());
+        assertEquals((long)3,kr.getTotalResults());
         assertEquals(1, kr.getMatch(0).startPos);
         assertEquals(3, kr.getMatch(0).endPos);
         assertEquals(4, kr.getMatch(1).startPos);
@@ -191,12 +191,12 @@
         sq = new SpanRepetitionQuery(new SpanTermQuery(new Term("base","s:c")),1,3, true);
         kr = ki.search(sq, (short) 10);
         // 2-3, 2-4, 2-5, 3-4, 3-5, 3-6, 4-5, 4-6, 5-6, 7-8  
-        assertEquals(10,kr.getTotalResults());
+        assertEquals((long)10,kr.getTotalResults());
         
         sq = new SpanRepetitionQuery(new SpanTermQuery(new Term("base","s:c")),2,3, true);
         kr = ki.search(sq, (short) 10);
         // 2-4, 2-5, 3-5, 3-6, 4-6 
-        assertEquals(5,kr.getTotalResults());
+        assertEquals((long)5,kr.getTotalResults());
         
 //        System.out.print(kr.getTotalResults()+"\n");
 //		for (int i=0; i< kr.getTotalResults(); i++){
@@ -222,7 +222,7 @@
         sq2 = new SpanNextQuery(sq1,sq0);        
         kr = ki.search(sq2, (short) 10);
         
-        assertEquals(2,kr.getTotalResults());
+        assertEquals((long)2,kr.getTotalResults());
         assertEquals(73, kr.getMatch(0).getStartPos());
         assertEquals(77, kr.getMatch(0).getEndPos());
         assertEquals(74, kr.getMatch(1).getStartPos());
@@ -237,7 +237,7 @@
         		sq2);
         kr = ki.search(sq2, (short) 10);
         
-        assertEquals(1,kr.getTotalResults());
+        assertEquals((long)1,kr.getTotalResults());
         assertEquals(73, kr.getMatch(0).getStartPos());
         assertEquals(77, kr.getMatch(0).getEndPos());
         /*
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 adc550b..e05d730 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestSegmentIndex.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestSegmentIndex.java
@@ -43,7 +43,6 @@
 	/** Multiple matches in one document. */
 	@Test
 	public void testCase1() throws IOException {
-//		log.trace("Testcase1");
 		sq = new SpanSegmentQuery(
 				new SpanTermQuery(new Term("base","s:b")),
 				new SpanTermQuery(new Term("base","s:c"))
@@ -52,11 +51,11 @@
 		kr = ki.search(sq, (short) 10);
 		ki.close();
 		
-		assertEquals("totalResults", 3, kr.totalResults());
-		assertEquals("StartPos (0)", 1, kr.match(0).startPos);
-		assertEquals("EndPos (0)", 2, kr.match(0).endPos);
-		assertEquals("StartPos (1)", 4, kr.match(1).startPos);
-		assertEquals("EndPos (1)", 5, kr.match(1).endPos);		
+		assertEquals("totalResults", kr.getTotalResults(), 3);
+		assertEquals("StartPos (0)", 1, kr.getMatch(0).startPos);
+		assertEquals("EndPos (0)", 2, kr.getMatch(0).endPos);
+		assertEquals("StartPos (1)", 4, kr.getMatch(1).startPos);
+		assertEquals("EndPos (1)", 5, kr.getMatch(1).endPos);		
 	}
 	
 	/** Matches in multiple documents.
@@ -73,15 +72,15 @@
 		kr = ki.search(sq, (short) 10);
 		ki.close();
 				
-		assertEquals("totalResults", 3, kr.totalResults());
+		assertEquals("totalResults", kr.getTotalResults(), 3);
 		// Match #0
-		assertEquals("doc-number", 1, kr.match(0).getLocalDocID());
-		assertEquals("StartPos", 1, kr.match(0).startPos);
-		assertEquals("EndPos", 2, kr.match(0).endPos);
+		assertEquals("doc-number", 1, kr.getMatch(0).getLocalDocID());
+		assertEquals("StartPos", 1, kr.getMatch(0).startPos);
+		assertEquals("EndPos", 2, kr.getMatch(0).endPos);
 		// Match #2
-		assertEquals("doc-number", 2, kr.match(2).getLocalDocID());
-		assertEquals("StartPos", 2, kr.match(2).startPos);
-		assertEquals("EndPos", 3, kr.match(2).endPos);		
+		assertEquals("doc-number", 2, kr.getMatch(2).getLocalDocID());
+		assertEquals("StartPos", 2, kr.getMatch(2).startPos);
+		assertEquals("EndPos", 3, kr.getMatch(2).endPos);		
 	}
 	
 	
@@ -97,10 +96,10 @@
 		kr = ki.search(sq, (short) 10);
 		ki.close();
 		
-		assertEquals("totalResults", 1, kr.totalResults());
-		assertEquals("doc-number", 2, kr.match(0).getLocalDocID());
-		assertEquals("StartPos (0)", 1, kr.match(0).startPos);
-		assertEquals("EndPos (0)", 2, kr.match(0).endPos);		
+		assertEquals("totalResults", kr.getTotalResults(), 1);
+		assertEquals("doc-number", 2, kr.getMatch(0).getLocalDocID());
+		assertEquals("StartPos (0)", 1, kr.getMatch(0).startPos);
+		assertEquals("EndPos (0)", 2, kr.getMatch(0).endPos);		
 	}
 	
 	/** Matching a SpanElementQuery and a SpanNextQuery 
@@ -128,15 +127,15 @@
 		kr = ki.search(sq, (short) 10);
 		ki.close();
 		
-		assertEquals("totalResults", 2, kr.totalResults());
+		assertEquals("totalResults", kr.getTotalResults(), 2);
 		// Match #0
-		assertEquals("doc-number", 0, kr.match(0).getLocalDocID());
-		assertEquals("StartPos", 3, kr.match(0).startPos);
-		assertEquals("EndPos", 5, kr.match(0).endPos);
+		assertEquals("doc-number", 0, kr.getMatch(0).getLocalDocID());
+		assertEquals("StartPos", 3, kr.getMatch(0).startPos);
+		assertEquals("EndPos", 5, kr.getMatch(0).endPos);
 		// Match #1
-		assertEquals("doc-number", 0, kr.match(1).getLocalDocID());
-		assertEquals("StartPos", 1, kr.match(1).startPos);
-		assertEquals("EndPos", 3, kr.match(1).endPos);				
+		assertEquals("doc-number", 0, kr.getMatch(1).getLocalDocID());
+		assertEquals("StartPos", 1, kr.getMatch(1).startPos);
+		assertEquals("EndPos", 3, kr.getMatch(1).endPos);				
 	}
 	
 	/** Matching SpanElementQueries */
@@ -151,11 +150,11 @@
 		kr = ki.search(sq, (short) 10);
 		ki.close();			
 		
-		assertEquals("totalResults", 1, kr.totalResults());
+		assertEquals("totalResults", kr.getTotalResults(), 1);
 		// Match #0
-		assertEquals("doc-number", 0, kr.match(0).getLocalDocID());
-		assertEquals("StartPos", 3, kr.match(0).startPos);
-		assertEquals("EndPos", 5, kr.match(0).endPos);				
+		assertEquals("doc-number", 0, kr.getMatch(0).getLocalDocID());
+		assertEquals("StartPos", 3, kr.getMatch(0).startPos);
+		assertEquals("EndPos", 5, kr.getMatch(0).endPos);				
 	}
 		
 	/** Skip to SegmentSpan */
@@ -174,15 +173,15 @@
 		kr = ki.search(sq, (short) 10);
 		ki.close();
 		
-		assertEquals("totalResults", 2, kr.totalResults());				
+		assertEquals("totalResults", kr.getTotalResults(), 2);				
 		// Match #0
-		assertEquals("doc-number", 0, kr.match(0).getLocalDocID());
-		assertEquals("StartPos (0)", 4, kr.match(0).startPos);
-		assertEquals("EndPos (0)", 6, kr.match(0).endPos);
+		assertEquals("doc-number", 0, kr.getMatch(0).getLocalDocID());
+		assertEquals("StartPos (0)", 4, kr.getMatch(0).startPos);
+		assertEquals("EndPos (0)", 6, kr.getMatch(0).endPos);
 		// Match #1 in the other atomic index
-		assertEquals("doc-number", 0, kr.match(1).getLocalDocID());
-		assertEquals("StartPos (0)", 0, kr.match(1).startPos);
-		assertEquals("EndPos (0)", 2, kr.match(1).endPos);
+		assertEquals("doc-number", 0, kr.getMatch(1).getLocalDocID());
+		assertEquals("StartPos (0)", 0, kr.getMatch(1).startPos);
+		assertEquals("EndPos (0)", 2, kr.getMatch(1).endPos);
 	}
 
     
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 7a3851b..d9a23f3 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestSegmentNegationIndex.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestSegmentNegationIndex.java
@@ -43,16 +43,16 @@
 
 	kr = ki.search(sqw.toQuery(), (short) 10);
 		
-	assertEquals("totalResults", 2, kr.totalResults());				
+	assertEquals("totalResults", kr.getTotalResults(), 2);				
 	// Match #0
-	assertEquals("doc-number", 0, kr.match(0).getLocalDocID());
-	assertEquals("StartPos (0)", 4, kr.match(0).startPos);
-	assertEquals("EndPos (0)", 6, kr.match(0).endPos);
+	assertEquals("doc-number", 0, kr.getMatch(0).getLocalDocID());
+	assertEquals("StartPos (0)", 4, kr.getMatch(0).startPos);
+	assertEquals("EndPos (0)", 6, kr.getMatch(0).endPos);
 
 	// Match #1 in the other atomic index
-	assertEquals("doc-number", 3, kr.match(1).getLocalDocID());
-	assertEquals("StartPos (0)", 0, kr.match(1).startPos);
-	assertEquals("EndPos (0)", 2, kr.match(1).endPos);
+	assertEquals("doc-number", 3, kr.getMatch(1).getLocalDocID());
+	assertEquals("StartPos (0)", 0, kr.getMatch(1).startPos);
+	assertEquals("EndPos (0)", 2, kr.getMatch(1).endPos);
 		
 	ssqw = new SpanSegmentQueryWrapper("base","s:b");
 	ssqw.without("s:c");
@@ -60,21 +60,21 @@
 
 	kr = ki.search(sqw.toQuery(), (short) 10);
 
-	assertEquals("doc-number", 0, kr.match(0).getLocalDocID());
-	assertEquals("StartPos (0)", 2, kr.match(0).startPos);
-	assertEquals("EndPos (0)", 4, kr.match(0).endPos);
+	assertEquals("doc-number", 0, kr.getMatch(0).getLocalDocID());
+	assertEquals("StartPos (0)", 2, kr.getMatch(0).startPos);
+	assertEquals("EndPos (0)", 4, kr.getMatch(0).endPos);
 
-	assertEquals("doc-number", 1, kr.match(1).getLocalDocID());
-	assertEquals("StartPos (1)", 1, kr.match(1).startPos);
-	assertEquals("EndPos (1)", 3, kr.match(1).endPos);
+	assertEquals("doc-number", 1, kr.getMatch(1).getLocalDocID());
+	assertEquals("StartPos (1)", 1, kr.getMatch(1).startPos);
+	assertEquals("EndPos (1)", 3, kr.getMatch(1).endPos);
 
-	assertEquals("doc-number", 1, kr.match(2).getLocalDocID());
-	assertEquals("StartPos (2)", 2, kr.match(2).startPos);
-	assertEquals("EndPos (2)", 4, kr.match(2).endPos);
+	assertEquals("doc-number", 1, kr.getMatch(2).getLocalDocID());
+	assertEquals("StartPos (2)", 2, kr.getMatch(2).startPos);
+	assertEquals("EndPos (2)", 4, kr.getMatch(2).endPos);
 
-	assertEquals("doc-number", 2, kr.match(3).getLocalDocID());
-	assertEquals("StartPos (3)", 1, kr.match(3).startPos);
-	assertEquals("EndPos (3)", 3, kr.match(3).endPos);
+	assertEquals("doc-number", 2, kr.getMatch(3).getLocalDocID());
+	assertEquals("StartPos (3)", 1, kr.getMatch(3).startPos);
+	assertEquals("EndPos (3)", 3, kr.getMatch(3).endPos);
     }
     
     private FieldDocument createFieldDoc0(){
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 0a90445..7339f90 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestSpanExpansionIndex.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestSpanExpansionIndex.java
@@ -210,7 +210,7 @@
 		SpanExpansionQuery seq = new SpanExpansionQuery(stq,2,2, -1, true);		
 		kr = ki.search(seq, (short) 10);
 		
-		assertEquals(4,kr.getTotalResults());
+		assertEquals((long) 4,kr.getTotalResults());
 		assertEquals(0, kr.getMatch(0).getStartPos());
         assertEquals(2, kr.getMatch(0).getEndPos());
         
@@ -218,7 +218,7 @@
         seq = new SpanExpansionQuery(stq,3,3,0, true);		
 		kr = ki.search(seq, (short) 10);
         		
-		assertEquals(4,kr.getTotalResults());
+		assertEquals((long) 4,kr.getTotalResults());
 		assertEquals(7, kr.getMatch(2).getStartPos());
         assertEquals(11, kr.getMatch(2).getEndPos());
         assertEquals(8, kr.getMatch(3).getStartPos());
@@ -273,7 +273,7 @@
 		
 		String jsonPath = getClass().getResource("/queries/poly3.json").getFile();
 		String jsonQuery = readFile(jsonPath);
-		SpanQueryWrapper sqwi = new KorapQuery("tokens").fromJSON(
+		SpanQueryWrapper sqwi = new KorapQuery("tokens").fromJson(
 				jsonQuery
 		);
 		
@@ -315,7 +315,7 @@
 		SpanRepetitionQuery rep = new SpanRepetitionQuery(seq, 2, 2, true);
 		
 		kr = ki.search(rep, (short) 20);
-		assertEquals(3,kr.getTotalResults());
+		assertEquals((long) 3,kr.getTotalResults());
 		
 		/*for (KorapMatch km : kr.getMatches()){
 			System.out.println(km.getStartPos() +","+km.getEndPos()+" "
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 9a50dce..ba9b14f 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestSubSpanIndex.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestSubSpanIndex.java
@@ -37,7 +37,7 @@
 		SpanSubspanQuery ssq = new SpanSubspanQuery(sdq, 0, 2, true);		
 		kr = ki.search(ssq, (short) 10);
 		
-		assertEquals(8,kr.getTotalResults());
+		assertEquals((long) 8,kr.getTotalResults());
 		assertEquals(35, kr.getMatch(0).getStartPos());
         assertEquals(37, kr.getMatch(0).getEndPos());
         assertEquals(179, kr.getMatch(1).getStartPos());
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 079a91f..a26d1b3 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestUnorderedDistanceIndex.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestUnorderedDistanceIndex.java
@@ -112,7 +112,7 @@
 	    SpanQuery sq = createQuery("s:c","s:d",0,3,false);                
 	    kr = ki.search(sq, (short) 10);
 	    	    
-	    assertEquals(5, kr.totalResults());	    
+	    assertEquals(kr.getTotalResults(), 5);	    
 	}
 	
 	/** Multiple documents 
@@ -132,7 +132,7 @@
 	    SpanQuery sq = createQuery("s:c","s:d",1,2,false);                
 	    kr = ki.search(sq, (short) 10);
 	    	    
-	    assertEquals(6, kr.totalResults());	    
+	    assertEquals(kr.getTotalResults(), 6);	    
 	}
 	
 	/** Multiple documents 
@@ -151,13 +151,13 @@
 	    SpanQuery sq = createQuery("s:e","s:f",1,2,false);                
 	    kr = ki.search(sq, (short) 10);
 	    	    
-	    assertEquals(3, kr.totalResults());
-	    assertEquals(0, kr.match(0).getLocalDocID());
-	    assertEquals(7, kr.match(0).getStartPos());
-	    assertEquals(9, kr.match(0).getEndPos());
-	    assertEquals(2, kr.match(1).getLocalDocID());
-	    assertEquals(0, kr.match(1).getStartPos());
-	    assertEquals(3, kr.match(1).getEndPos());
+	    assertEquals(kr.getTotalResults(), 3);
+	    assertEquals(0, kr.getMatch(0).getLocalDocID());
+	    assertEquals(7, kr.getMatch(0).getStartPos());
+	    assertEquals(9, kr.getMatch(0).getEndPos());
+	    assertEquals(2, kr.getMatch(1).getLocalDocID());
+	    assertEquals(0, kr.getMatch(1).getStartPos());
+	    assertEquals(3, kr.getMatch(1).getEndPos());
 	}
 	
 	/** Skip to */
@@ -176,7 +176,7 @@
 		);
 	    
 	    kr = ki.search(sq, (short) 10);
-	    assertEquals(2, kr.totalResults());
+	    assertEquals(kr.getTotalResults(), 2);
 	    assertEquals(2,kr.getMatch(0).getLocalDocID());
 	    assertEquals(2,kr.getMatch(0).getStartPos());
 	    assertEquals(6,kr.getMatch(0).getEndPos());
@@ -196,7 +196,7 @@
 	    SpanQuery sq = createElementQuery("x","y",0,0,false);                
 	    kr = ki.search(sq, (short) 10);
     	
-	    assertEquals(4, kr.totalResults());
+	    assertEquals(kr.getTotalResults(), 4);
 	    assertEquals(2, kr.getMatch(0).startPos);
 	    assertEquals(7, kr.getMatch(0).endPos);
 	    assertEquals(3, kr.getMatch(1).startPos);
@@ -209,7 +209,7 @@
 	    sq = createElementQuery("x","y",1,1,false);                
 	    kr = ki.search(sq, (short) 10);
 	    
-	    assertEquals(1, kr.totalResults());
+	    assertEquals(kr.getTotalResults(), 1);
 	    assertEquals(5, kr.getMatch(0).startPos);
 	    assertEquals(10, kr.getMatch(0).endPos);
 	    
@@ -218,7 +218,7 @@
 	    sq = createElementQuery("x","y",1,2,false);                
 	    kr = ki.search(sq, (short) 10);
 	    
-	    assertEquals(2, kr.totalResults());	    
+	    assertEquals(kr.getTotalResults(), 2);	    
 	    assertEquals(4, kr.getMatch(0).startPos);
 	    assertEquals(9, kr.getMatch(0).endPos);
 	    assertEquals(5, kr.getMatch(1).startPos);
@@ -244,7 +244,7 @@
 	    SpanQuery sq = createElementQuery("x","x",1,2,false);
 	    kr = ki.search(sq, (short) 10);
 	    
-	    assertEquals(4, kr.totalResults());
+	    assertEquals(kr.getTotalResults(), 4);
     }
 
     /** Nested distance queries
@@ -264,7 +264,7 @@
         		new DistanceConstraint(1, 2, true, false),        		
         		true);
 	    kr = ki.search(sq2, (short) 10);	    
-	    assertEquals(3, kr.totalResults());	
+	    assertEquals(kr.getTotalResults(), 3);	
 	    assertEquals(5, kr.getMatch(0).getStartPos());
 	    assertEquals(9, kr.getMatch(0).getEndPos());
 	    assertEquals(1, kr.getMatch(1).getLocalDocID());
@@ -287,7 +287,7 @@
 		);
 	    kr = ki.search(sq, (short) 10);
     
-	    assertEquals(3, kr.totalResults());
+	    assertEquals(kr.getTotalResults(), 3);
 	    assertEquals(0,kr.getMatch(1).getStartPos());
 	    assertEquals(4,kr.getMatch(1).getEndPos());
 	    
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 952c325..1f4e094 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestUnorderedElementDistanceIndex.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestUnorderedElementDistanceIndex.java
@@ -116,7 +116,7 @@
         sq = createQuery("s", "s:b", "s:c", 0, 1,false);        
         kr = ki.search(sq, (short) 10);
 		
-        assertEquals(5,kr.getTotalResults());
+        assertEquals((long) 5,kr.getTotalResults());
         assertEquals(0, kr.getMatch(0).startPos);
         assertEquals(1, kr.getMatch(0).endPos);
         assertEquals(0, kr.getMatch(1).startPos);
@@ -147,7 +147,7 @@
         sq = createQuery("p", "s:b", "s:e", 0, 2,false);        
         kr = ki.search(sq, (short) 10);
 
-        assertEquals(3,kr.getTotalResults());
+        assertEquals((long) 3,kr.getTotalResults());
         assertEquals(2,kr.getMatch(0).getLocalDocID());
         assertEquals(3, kr.getMatch(0).startPos);
         assertEquals(5, kr.getMatch(0).endPos);
@@ -170,7 +170,7 @@
         sq = createQuery("s", "s:c", "s:e", 1, 2,false);        
         kr = ki.search(sq, (short) 10);
 	
-        assertEquals(4,kr.getTotalResults());
+        assertEquals((long) 4,kr.getTotalResults());
         assertEquals(1, kr.getMatch(0).startPos);
         assertEquals(6, kr.getMatch(0).endPos);
         assertEquals(1, kr.getMatch(1).startPos);
@@ -201,7 +201,7 @@
         
         kr = ki.search(sq, (short) 10);
         
-        assertEquals(4,kr.getTotalResults());
+        assertEquals((long) 4,kr.getTotalResults());
         assertEquals(0, kr.getMatch(0).startPos);
         assertEquals(3, kr.getMatch(0).endPos);
         assertEquals(1, kr.getMatch(1).startPos);
@@ -224,13 +224,13 @@
         SpanQuery sq, edq;
         edq = createQuery("s", "s:b", "s:c", 0, 2,false);
         kr = ki.search(edq, (short) 10);
-        assertEquals(6, kr.getTotalResults());
+        assertEquals((long) 6, kr.getTotalResults());
 
         sq = new SpanNextQuery( 
         		new SpanTermQuery(new Term("base", "s:b"))
         		,edq);
         kr = ki.search(sq, (short) 10);
-        assertEquals(2, kr.getTotalResults());
+        assertEquals((long) 2, kr.getTotalResults());
         assertEquals(1, kr.getMatch(0).getStartPos());
         assertEquals(4, kr.getMatch(0).getEndPos());
         assertEquals(2, kr.getMatch(1).getStartPos());
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 4f6226d..9bf4952 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestWPDIndex.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestWPDIndex.java
@@ -72,18 +72,18 @@
 		sq = createDistanceQuery("s:Wir", "s:kommen", 1, 1, true,false);
 		ks = new KorapSearch(sq);
 		kr = ks.run(ki);
-		assertEquals(8, kr.getTotalResults());
+		assertEquals(kr.getTotalResults(), 8);
 
 		// unordered
 		sq = createDistanceQuery("s:Wir", "s:kommen", 1, 1, false,false);				
 		ks = new KorapSearch(sq);
 		kr = ks.run(ki);
-		assertEquals(11, kr.getTotalResults());
+		assertEquals(kr.getTotalResults(), 11);
 		
 		sq = createDistanceQuery("s:kommen", "s:Wir", 1, 1, false,false);				
 		ks = new KorapSearch(sq);
 		kr = ks.run(ki);
-		assertEquals(11, kr.getTotalResults());
+		assertEquals(kr.getTotalResults(), 11);
 		//System.out.println(kr.getTotalResults());
 		//for (KorapMatch km : kr.getMatches()){
 			//System.out.println(km.getDocID() +" "+km.getStartPos() +" "+ km.getEndPos());
@@ -99,20 +99,20 @@
 		SpanQuery q = new SpanTermQuery(new Term("tokens","s:Wir"));
 		ks = new KorapSearch(q);
 		kr = ks.run(ki);
-		assertEquals(1907, kr.getTotalResults());
+		assertEquals(kr.getTotalResults(), 1907);
 		
 		SpanDistanceQuery sq;
 		// ordered
 		sq = createDistanceQuery("s:Wir", "s:kommen", 1, 1, true, true);				
 		ks = new KorapSearch(sq);
 		kr = ks.run(ki);
-		assertEquals(1899, kr.getTotalResults());
+		assertEquals(kr.getTotalResults(), 1899);
 		
 		// unordered
 		sq = createDistanceQuery("s:Wir", "s:kommen", 1, 1, false, true);				
 		ks = new KorapSearch(sq);
 		kr = ks.run(ki);
-		assertEquals(1896, kr.getTotalResults());	
+		assertEquals(kr.getTotalResults(), 1896);	
 	}
 	
 	/** Element distance spans */
@@ -123,22 +123,22 @@
 				0, 1, true, false);
 		ks = new KorapSearch(sq);
 		kr = ks.run(ki);		
-		assertEquals(3,kr.getTotalResults());
+		assertEquals(kr.getTotalResults(), 3);
 		
 		// unordered
 		sq = createElementDistanceQuery("s","s:weg", "s:fahren", 0, 1, false,false);
 		ks = new KorapSearch(sq);
 		kr = ks.run(ki);
-		assertEquals(5,kr.getTotalResults());
+		assertEquals(kr.getTotalResults(), 5);
 		
 		// only 0
 		sq = createElementDistanceQuery("s","s:weg", "s:fahren", 0, 0, false,false);
 		kr = ki.search(sq, (short) 100);
-		assertEquals(2,kr.getTotalResults());
-		assertEquals("WPD_BBB.04463", kr.match(0).getDocID());
+		assertEquals(kr.getTotalResults(), 2);
+		assertEquals("WPD_BBB.04463", kr.getMatch(0).getDocID());
 		assertEquals(1094,kr.getMatch(0).getStartPos());
 		assertEquals(1115,kr.getMatch(0).getEndPos());
-		assertEquals("WPD_III.00758", kr.match(1).getDocID());
+		assertEquals("WPD_III.00758", kr.getMatch(1).getDocID());
 		assertEquals(444,kr.getMatch(1).getStartPos());
 		assertEquals(451,kr.getMatch(1).getEndPos());
 		
@@ -146,7 +146,7 @@
 		sq = createElementDistanceQuery("s","s:weg", "s:fahren", 1, 1, false,false);
 		ks = new KorapSearch(sq);
 		kr = ks.run(ki);
-		assertEquals(3,kr.getTotalResults());		
+		assertEquals(kr.getTotalResults(), 3);		
 	}
 	
 	/** Element distance exclusion */
@@ -155,7 +155,7 @@
 		SpanDistanceQuery sq = createElementDistanceQuery("s","s:weg", "s:fahren", 1, 1, false, true);
 		ks = new KorapSearch(sq);
 		kr = ks.run(ki);
-		assertEquals(979,kr.getTotalResults());
+		assertEquals(kr.getTotalResults(), 979);
 		//0.8s
 		
 		// Check if it includes some results
@@ -176,18 +176,18 @@
 		sq = new SpanRepetitionQuery(new SpanTermQuery(new Term("tokens","mate/p:ADJA")),1,2, true);
 		ks = new KorapSearch(sq);
 		kr = ks.run(ki);
-		assertEquals(4116416, kr.getTotalResults());
+		assertEquals(kr.getTotalResults(), 4116416);
 		//0.9s
 		
 		sq = new SpanRepetitionQuery(new SpanTermQuery(new Term("tokens","mate/p:ADJA")),1,1, true);
 		ks = new KorapSearch(sq);
 		kr = ks.run(ki);
-		assertEquals(3879671, kr.getTotalResults());
+		assertEquals(kr.getTotalResults(), 3879671);
 		
 		sq = new SpanRepetitionQuery(new SpanTermQuery(new Term("tokens","mate/p:ADJA")),2,2, true);
 		ks = new KorapSearch(sq);
 		kr = ks.run(ki);
-		assertEquals(236745, kr.getTotalResults());
+		assertEquals(kr.getTotalResults(), 236745);
 		//0.65s
 	}
 	
@@ -200,14 +200,14 @@
     		);
 		ks = new KorapSearch(sq);
 		kr = ks.run(ki);
-		assertEquals(30223, kr.getTotalResults());
+		assertEquals(kr.getTotalResults(), 30223);
 		// 1.1s
 		
 		SpanQuery sq2 = new SpanNextQuery(sq,
 				new SpanTermQuery(new Term("tokens", "tt/p:NN")));
 		ks = new KorapSearch(sq2);
 		kr = ks.run(ki);
-		assertEquals(26607, kr.getTotalResults());
+		assertEquals(kr.getTotalResults(), 26607);
 		// 1.1s
 	}
 }
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 75ff3c9..618fad1 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestWithinIndex.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestWithinIndex.java
@@ -73,22 +73,20 @@
 
 	kr = ki.search(sq, (short) 10);
 	
-	// System.err.println(kr.toJSON());
+	assertEquals("totalResults", kr.getTotalResults(), 6);
 
-	assertEquals("totalResults", 6, kr.totalResults());
-
-	assertEquals("StartPos (0)", 0, kr.match(0).startPos);
-	assertEquals("EndPos (0)", 12, kr.match(0).endPos);
-	assertEquals("StartPos (1)", 0, kr.match(1).startPos);
-	assertEquals("EndPos (1)", 12, kr.match(1).endPos);
-	assertEquals("StartPos (2)", 0, kr.match(2).startPos);
-	assertEquals("EndPos (2)", 12, kr.match(2).endPos);
-	assertEquals("StartPos (3)", 1, kr.match(3).startPos);
-	assertEquals("EndPos (3)", 9, kr.match(3).endPos);
-	assertEquals("StartPos (4)", 1, kr.match(4).startPos);
-	assertEquals("EndPos (4)", 9, kr.match(4).endPos);
-	assertEquals("StartPos (5)", 2, kr.match(5).startPos);
-	assertEquals("EndPos (5)", 6, kr.match(5).endPos);
+	assertEquals("StartPos (0)", 0, kr.getMatch(0).startPos);
+	assertEquals("EndPos (0)", 12, kr.getMatch(0).endPos);
+	assertEquals("StartPos (1)", 0, kr.getMatch(1).startPos);
+	assertEquals("EndPos (1)", 12, kr.getMatch(1).endPos);
+	assertEquals("StartPos (2)", 0, kr.getMatch(2).startPos);
+	assertEquals("EndPos (2)", 12, kr.getMatch(2).endPos);
+	assertEquals("StartPos (3)", 1, kr.getMatch(3).startPos);
+	assertEquals("EndPos (3)", 9, kr.getMatch(3).endPos);
+	assertEquals("StartPos (4)", 1, kr.getMatch(4).startPos);
+	assertEquals("EndPos (4)", 9, kr.getMatch(4).endPos);
+	assertEquals("StartPos (5)", 2, kr.getMatch(5).startPos);
+	assertEquals("EndPos (5)", 6, kr.getMatch(5).endPos);
 
 	assertEquals(1, ki.numberOf("documents"));
     };
@@ -148,51 +146,45 @@
 
 	kr = ki.search(sq, (short) 15);
 	
-	assertEquals("totalResults", 12, kr.totalResults());
-
-
-
-
-	//	System.err.println(kr.toJSON());
-
+	assertEquals("totalResults", kr.getTotalResults(), 12);
 	
-	assertEquals("StartPos (0)", 0, kr.match(0).startPos);
-	assertEquals("EndPos (0)", 12, kr.match(0).endPos);
-	assertEquals("Doc (0)", 0, kr.match(0).internalDocID);
-	assertEquals("StartPos (1)", 0, kr.match(1).startPos);
-	assertEquals("EndPos (1)", 12, kr.match(1).endPos);
-	assertEquals("Doc (1)", 0, kr.match(1).internalDocID);
-	assertEquals("StartPos (2)", 0, kr.match(2).startPos);
-	assertEquals("EndPos (2)", 12, kr.match(2).endPos);
-	assertEquals("Doc (2)", 0, kr.match(2).internalDocID);
-	assertEquals("StartPos (3)", 1, kr.match(3).startPos);
-	assertEquals("EndPos (3)", 9, kr.match(3).endPos);
-	assertEquals("Doc (3)", 0, kr.match(3).internalDocID);
-	assertEquals("StartPos (4)", 1, kr.match(4).startPos);
-	assertEquals("EndPos (4)", 9, kr.match(4).endPos);
-	assertEquals("Doc (4)", 0, kr.match(4).internalDocID);
-	assertEquals("StartPos (5)", 2, kr.match(5).startPos);
-	assertEquals("EndPos (5)", 6, kr.match(5).endPos);
-	assertEquals("Doc (5)", 0, kr.match(5).internalDocID);
+	assertEquals("StartPos (0)", 0, kr.getMatch(0).startPos);
+	assertEquals("EndPos (0)", 12, kr.getMatch(0).endPos);
+	assertEquals("Doc (0)", 0, kr.getMatch(0).internalDocID);
+	assertEquals("StartPos (1)", 0, kr.getMatch(1).startPos);
+	assertEquals("EndPos (1)", 12, kr.getMatch(1).endPos);
+	assertEquals("Doc (1)", 0, kr.getMatch(1).internalDocID);
+	assertEquals("StartPos (2)", 0, kr.getMatch(2).startPos);
+	assertEquals("EndPos (2)", 12, kr.getMatch(2).endPos);
+	assertEquals("Doc (2)", 0, kr.getMatch(2).internalDocID);
+	assertEquals("StartPos (3)", 1, kr.getMatch(3).startPos);
+	assertEquals("EndPos (3)", 9, kr.getMatch(3).endPos);
+	assertEquals("Doc (3)", 0, kr.getMatch(3).internalDocID);
+	assertEquals("StartPos (4)", 1, kr.getMatch(4).startPos);
+	assertEquals("EndPos (4)", 9, kr.getMatch(4).endPos);
+	assertEquals("Doc (4)", 0, kr.getMatch(4).internalDocID);
+	assertEquals("StartPos (5)", 2, kr.getMatch(5).startPos);
+	assertEquals("EndPos (5)", 6, kr.getMatch(5).endPos);
+	assertEquals("Doc (5)", 0, kr.getMatch(5).internalDocID);
 
-	assertEquals("StartPos (6)", 0, kr.match(6).startPos);
-	assertEquals("EndPos (6)", 12, kr.match(6).endPos);
-	assertEquals("Doc (6)", 1, kr.match(6).internalDocID);
-	assertEquals("StartPos (7)", 0, kr.match(7).startPos);
-	assertEquals("EndPos (7)", 12, kr.match(7).endPos);
-	assertEquals("Doc (7)", 1, kr.match(7).internalDocID);
-	assertEquals("StartPos (8)", 0, kr.match(8).startPos);
-	assertEquals("EndPos (8)", 12, kr.match(8).endPos);
-	assertEquals("Doc (8)", 1, kr.match(8).internalDocID);
-	assertEquals("StartPos (9)", 1, kr.match(9).startPos);
-	assertEquals("EndPos (9)", 9, kr.match(9).endPos);
-	assertEquals("Doc (9)", 1, kr.match(9).internalDocID);
-	assertEquals("StartPos (10)", 1, kr.match(10).startPos);
-	assertEquals("EndPos (10)", 9, kr.match(10).endPos);
-	assertEquals("Doc (10)", 1, kr.match(10).internalDocID);
-	assertEquals("StartPos (11)", 2, kr.match(11).startPos);
-	assertEquals("EndPos (11)", 6, kr.match(11).endPos);
-	assertEquals("Doc (11)", 1, kr.match(11).internalDocID);
+	assertEquals("StartPos (6)", 0, kr.getMatch(6).startPos);
+	assertEquals("EndPos (6)", 12, kr.getMatch(6).endPos);
+	assertEquals("Doc (6)", 1, kr.getMatch(6).internalDocID);
+	assertEquals("StartPos (7)", 0, kr.getMatch(7).startPos);
+	assertEquals("EndPos (7)", 12, kr.getMatch(7).endPos);
+	assertEquals("Doc (7)", 1, kr.getMatch(7).internalDocID);
+	assertEquals("StartPos (8)", 0, kr.getMatch(8).startPos);
+	assertEquals("EndPos (8)", 12, kr.getMatch(8).endPos);
+	assertEquals("Doc (8)", 1, kr.getMatch(8).internalDocID);
+	assertEquals("StartPos (9)", 1, kr.getMatch(9).startPos);
+	assertEquals("EndPos (9)", 9, kr.getMatch(9).endPos);
+	assertEquals("Doc (9)", 1, kr.getMatch(9).internalDocID);
+	assertEquals("StartPos (10)", 1, kr.getMatch(10).startPos);
+	assertEquals("EndPos (10)", 9, kr.getMatch(10).endPos);
+	assertEquals("Doc (10)", 1, kr.getMatch(10).internalDocID);
+	assertEquals("StartPos (11)", 2, kr.getMatch(11).startPos);
+	assertEquals("EndPos (11)", 6, kr.getMatch(11).endPos);
+	assertEquals("Doc (11)", 1, kr.getMatch(11).internalDocID);
 
 	assertEquals(2, ki.numberOf("documents"));
     };
@@ -253,28 +245,26 @@
 
 	kr = ki.search(sq, (short) 15);
 	
-	// System.err.println(kr.toJSON());
+	assertEquals("totalResults", kr.getTotalResults(), 6);
 
-	assertEquals("totalResults", 6, kr.totalResults());
-
-	assertEquals("StartPos (0)", 0, kr.match(0).startPos);
-	assertEquals("EndPos (0)", 12, kr.match(0).endPos);
-	assertEquals("Doc (0)", 0, kr.match(0).internalDocID);
-	assertEquals("StartPos (1)", 0, kr.match(1).startPos);
-	assertEquals("EndPos (1)", 12, kr.match(1).endPos);
-	assertEquals("Doc (1)", 0, kr.match(1).internalDocID);
-	assertEquals("StartPos (2)", 0, kr.match(2).startPos);
-	assertEquals("EndPos (2)", 12, kr.match(2).endPos);
-	assertEquals("Doc (2)", 0, kr.match(2).internalDocID);
-	assertEquals("StartPos (3)", 1, kr.match(3).startPos);
-	assertEquals("EndPos (3)", 9, kr.match(3).endPos);
-	assertEquals("Doc (3)", 0, kr.match(3).internalDocID);
-	assertEquals("StartPos (4)", 1, kr.match(4).startPos);
-	assertEquals("EndPos (4)", 9, kr.match(4).endPos);
-	assertEquals("Doc (4)", 0, kr.match(4).internalDocID);
-	assertEquals("StartPos (5)", 2, kr.match(5).startPos);
-	assertEquals("EndPos (5)", 6, kr.match(5).endPos);
-	assertEquals("Doc (5)", 0, kr.match(5).internalDocID);
+	assertEquals("StartPos (0)", 0, kr.getMatch(0).startPos);
+	assertEquals("EndPos (0)", 12, kr.getMatch(0).endPos);
+	assertEquals("Doc (0)", 0, kr.getMatch(0).internalDocID);
+	assertEquals("StartPos (1)", 0, kr.getMatch(1).startPos);
+	assertEquals("EndPos (1)", 12, kr.getMatch(1).endPos);
+	assertEquals("Doc (1)", 0, kr.getMatch(1).internalDocID);
+	assertEquals("StartPos (2)", 0, kr.getMatch(2).startPos);
+	assertEquals("EndPos (2)", 12, kr.getMatch(2).endPos);
+	assertEquals("Doc (2)", 0, kr.getMatch(2).internalDocID);
+	assertEquals("StartPos (3)", 1, kr.getMatch(3).startPos);
+	assertEquals("EndPos (3)", 9, kr.getMatch(3).endPos);
+	assertEquals("Doc (3)", 0, kr.getMatch(3).internalDocID);
+	assertEquals("StartPos (4)", 1, kr.getMatch(4).startPos);
+	assertEquals("EndPos (4)", 9, kr.getMatch(4).endPos);
+	assertEquals("Doc (4)", 0, kr.getMatch(4).internalDocID);
+	assertEquals("StartPos (5)", 2, kr.getMatch(5).startPos);
+	assertEquals("EndPos (5)", 6, kr.getMatch(5).endPos);
+	assertEquals("Doc (5)", 0, kr.getMatch(5).internalDocID);
 
 	assertEquals(2, ki.numberOf("documents"));
     };
@@ -346,28 +336,26 @@
 
 	kr = ki.search(sq, (short) 15);
 	
-	// System.err.println(kr.toJSON());
+	assertEquals("totalResults", kr.getTotalResults(), 6);
 
-	assertEquals("totalResults", 6, kr.totalResults());
-
-	assertEquals("StartPos (0)", 0, kr.match(0).startPos);
-	assertEquals("EndPos (0)", 12, kr.match(0).endPos);
-	assertEquals("Doc (0)", 0, kr.match(0).internalDocID);
-	assertEquals("StartPos (1)", 0, kr.match(1).startPos);
-	assertEquals("EndPos (1)", 12, kr.match(1).endPos);
-	assertEquals("Doc (1)", 0, kr.match(1).internalDocID);
-	assertEquals("StartPos (2)", 0, kr.match(2).startPos);
-	assertEquals("EndPos (2)", 12, kr.match(2).endPos);
-	assertEquals("Doc (2)", 0, kr.match(2).internalDocID);
-	assertEquals("StartPos (3)", 1, kr.match(3).startPos);
-	assertEquals("EndPos (3)", 9, kr.match(3).endPos);
-	assertEquals("Doc (3)", 0, kr.match(3).internalDocID);
-	assertEquals("StartPos (4)", 1, kr.match(4).startPos);
-	assertEquals("EndPos (4)", 9, kr.match(4).endPos);
-	assertEquals("Doc (4)", 0, kr.match(4).internalDocID);
-	assertEquals("StartPos (5)", 2, kr.match(5).startPos);
-	assertEquals("EndPos (5)", 6, kr.match(5).endPos);
-	assertEquals("Doc (5)", 0, kr.match(5).internalDocID);
+	assertEquals("StartPos (0)", 0, kr.getMatch(0).startPos);
+	assertEquals("EndPos (0)", 12, kr.getMatch(0).endPos);
+	assertEquals("Doc (0)", 0, kr.getMatch(0).internalDocID);
+	assertEquals("StartPos (1)", 0, kr.getMatch(1).startPos);
+	assertEquals("EndPos (1)", 12, kr.getMatch(1).endPos);
+	assertEquals("Doc (1)", 0, kr.getMatch(1).internalDocID);
+	assertEquals("StartPos (2)", 0, kr.getMatch(2).startPos);
+	assertEquals("EndPos (2)", 12, kr.getMatch(2).endPos);
+	assertEquals("Doc (2)", 0, kr.getMatch(2).internalDocID);
+	assertEquals("StartPos (3)", 1, kr.getMatch(3).startPos);
+	assertEquals("EndPos (3)", 9, kr.getMatch(3).endPos);
+	assertEquals("Doc (3)", 0, kr.getMatch(3).internalDocID);
+	assertEquals("StartPos (4)", 1, kr.getMatch(4).startPos);
+	assertEquals("EndPos (4)", 9, kr.getMatch(4).endPos);
+	assertEquals("Doc (4)", 0, kr.getMatch(4).internalDocID);
+	assertEquals("StartPos (5)", 2, kr.getMatch(5).startPos);
+	assertEquals("EndPos (5)", 6, kr.getMatch(5).endPos);
+	assertEquals("Doc (5)", 0, kr.getMatch(5).internalDocID);
 
 	assertEquals(3, ki.numberOf("documents"));
     };
@@ -407,13 +395,13 @@
 	sq = new SpanElementQuery("base", "a");
 	kr = ki.search(sq, (short) 10);
 
-	assertEquals("totalResults", 3, kr.totalResults());
-	assertEquals("StartPos (0)", 0, kr.match(0).startPos);
-	assertEquals("EndPos (0)", 4, kr.match(0).endPos);
-	assertEquals("StartPos (1)", 0, kr.match(1).startPos);
-	assertEquals("EndPos (1)", 7, kr.match(1).endPos);
-	assertEquals("StartPos (2)", 0, kr.match(2).startPos);
-	assertEquals("EndPos (2)", 10, kr.match(2).endPos);
+	assertEquals("totalResults", kr.getTotalResults(), 3);
+	assertEquals("StartPos (0)", 0, kr.getMatch(0).startPos);
+	assertEquals("EndPos (0)", 4, kr.getMatch(0).endPos);
+	assertEquals("StartPos (1)", 0, kr.getMatch(1).startPos);
+	assertEquals("EndPos (1)", 7, kr.getMatch(1).endPos);
+	assertEquals("StartPos (2)", 0, kr.getMatch(2).startPos);
+	assertEquals("EndPos (2)", 10, kr.getMatch(2).endPos);
 	    
 	sq = new SpanWithinQuery(
 	    new SpanElementQuery("base", "a"),
@@ -421,27 +409,26 @@
         );
 
 	kr = ki.search(sq, (short) 10);
-	//	System.err.println(kr.toJSON());
 
-	assertEquals("totalResults", 9, kr.totalResults());
-	assertEquals("StartPos (0)", 0, kr.match(0).startPos);
-	assertEquals("EndPos (0)", 4, kr.match(0).endPos);
-	assertEquals("StartPos (1)", 0, kr.match(1).startPos);
-	assertEquals("EndPos (1)", 4, kr.match(1).endPos);
-	assertEquals("StartPos (2)", 0, kr.match(2).startPos);
-	assertEquals("EndPos (2)", 7, kr.match(2).endPos);
-	assertEquals("StartPos (3)", 0, kr.match(3).startPos);
-	assertEquals("EndPos (3)", 7, kr.match(3).endPos);
-	assertEquals("StartPos (4)", 0, kr.match(4).startPos);
-	assertEquals("EndPos (4)", 7, kr.match(4).endPos);
-	assertEquals("StartPos (5)", 0, kr.match(5).startPos);
-	assertEquals("EndPos (5)", 10, kr.match(5).endPos);
-	assertEquals("StartPos (6)", 0, kr.match(6).startPos);
-	assertEquals("EndPos (6)", 10, kr.match(6).endPos);
-	assertEquals("StartPos (7)", 0, kr.match(7).startPos);
-	assertEquals("EndPos (7)", 10, kr.match(7).endPos);
-	assertEquals("StartPos (8)", 0, kr.match(8).startPos);
-	assertEquals("EndPos (8)", 10, kr.match(8).endPos);
+	assertEquals("totalResults", kr.getTotalResults(), 9);
+	assertEquals("StartPos (0)", 0, kr.getMatch(0).startPos);
+	assertEquals("EndPos (0)", 4, kr.getMatch(0).endPos);
+	assertEquals("StartPos (1)", 0, kr.getMatch(1).startPos);
+	assertEquals("EndPos (1)", 4, kr.getMatch(1).endPos);
+	assertEquals("StartPos (2)", 0, kr.getMatch(2).startPos);
+	assertEquals("EndPos (2)", 7, kr.getMatch(2).endPos);
+	assertEquals("StartPos (3)", 0, kr.getMatch(3).startPos);
+	assertEquals("EndPos (3)", 7, kr.getMatch(3).endPos);
+	assertEquals("StartPos (4)", 0, kr.getMatch(4).startPos);
+	assertEquals("EndPos (4)", 7, kr.getMatch(4).endPos);
+	assertEquals("StartPos (5)", 0, kr.getMatch(5).startPos);
+	assertEquals("EndPos (5)", 10, kr.getMatch(5).endPos);
+	assertEquals("StartPos (6)", 0, kr.getMatch(6).startPos);
+	assertEquals("EndPos (6)", 10, kr.getMatch(6).endPos);
+	assertEquals("StartPos (7)", 0, kr.getMatch(7).startPos);
+	assertEquals("EndPos (7)", 10, kr.getMatch(7).endPos);
+	assertEquals("StartPos (8)", 0, kr.getMatch(8).startPos);
+	assertEquals("EndPos (8)", 10, kr.getMatch(8).endPos);
     };
 
     @Test
@@ -475,13 +462,13 @@
 
 	KorapResult kr = ki.search(sq, (short) 10);
 
-	assertEquals("totalResults", 3, kr.totalResults());
-	assertEquals("StartPos (0)", 0, kr.match(0).startPos);
-	assertEquals("EndPos (0)", 4, kr.match(0).endPos);
-	assertEquals("StartPos (1)", 0, kr.match(1).startPos);
-	assertEquals("EndPos (1)", 7, kr.match(1).endPos);
-	assertEquals("StartPos (2)", 0, kr.match(2).startPos);
-	assertEquals("EndPos (2)", 10, kr.match(2).endPos);
+	assertEquals("totalResults", kr.getTotalResults(), 3);
+	assertEquals("StartPos (0)", 0, kr.getMatch(0).startPos);
+	assertEquals("EndPos (0)", 4, kr.getMatch(0).endPos);
+	assertEquals("StartPos (1)", 0, kr.getMatch(1).startPos);
+	assertEquals("EndPos (1)", 7, kr.getMatch(1).endPos);
+	assertEquals("StartPos (2)", 0, kr.getMatch(2).startPos);
+	assertEquals("EndPos (2)", 10, kr.getMatch(2).endPos);
 
 	sq = new SpanWithinQuery(
 	    new SpanElementQuery("base", "a"),
@@ -489,27 +476,26 @@
         );
 
 	kr = ki.search(sq, (short) 10);
-	//	System.err.println(kr.toJSON());
 
-	assertEquals("totalResults", 9, kr.totalResults());
-	assertEquals("StartPos (0)", 0, kr.match(0).startPos);
-	assertEquals("EndPos (0)", 4, kr.match(0).endPos);
-	assertEquals("StartPos (1)", 0, kr.match(1).startPos);
-	assertEquals("EndPos (1)", 4, kr.match(1).endPos);
-	assertEquals("StartPos (2)", 0, kr.match(2).startPos);
-	assertEquals("EndPos (2)", 7, kr.match(2).endPos);
-	assertEquals("StartPos (3)", 0, kr.match(3).startPos);
-	assertEquals("EndPos (3)", 7, kr.match(3).endPos);
-	assertEquals("StartPos (4)", 0, kr.match(4).startPos);
-	assertEquals("EndPos (4)", 7, kr.match(4).endPos);
-	assertEquals("StartPos (5)", 0, kr.match(5).startPos);
-	assertEquals("EndPos (5)", 10, kr.match(5).endPos);
-	assertEquals("StartPos (6)", 0, kr.match(6).startPos);
-	assertEquals("EndPos (6)", 10, kr.match(6).endPos);
-	assertEquals("StartPos (7)", 0, kr.match(7).startPos);
-	assertEquals("EndPos (7)", 10, kr.match(7).endPos);
-	assertEquals("StartPos (8)", 0, kr.match(8).startPos);
-	assertEquals("EndPos (8)", 10, kr.match(8).endPos);
+	assertEquals("totalResults", kr.getTotalResults(), 9);
+	assertEquals("StartPos (0)", 0, kr.getMatch(0).startPos);
+	assertEquals("EndPos (0)", 4, kr.getMatch(0).endPos);
+	assertEquals("StartPos (1)", 0, kr.getMatch(1).startPos);
+	assertEquals("EndPos (1)", 4, kr.getMatch(1).endPos);
+	assertEquals("StartPos (2)", 0, kr.getMatch(2).startPos);
+	assertEquals("EndPos (2)", 7, kr.getMatch(2).endPos);
+	assertEquals("StartPos (3)", 0, kr.getMatch(3).startPos);
+	assertEquals("EndPos (3)", 7, kr.getMatch(3).endPos);
+	assertEquals("StartPos (4)", 0, kr.getMatch(4).startPos);
+	assertEquals("EndPos (4)", 7, kr.getMatch(4).endPos);
+	assertEquals("StartPos (5)", 0, kr.getMatch(5).startPos);
+	assertEquals("EndPos (5)", 10, kr.getMatch(5).endPos);
+	assertEquals("StartPos (6)", 0, kr.getMatch(6).startPos);
+	assertEquals("EndPos (6)", 10, kr.getMatch(6).endPos);
+	assertEquals("StartPos (7)", 0, kr.getMatch(7).startPos);
+	assertEquals("EndPos (7)", 10, kr.getMatch(7).endPos);
+	assertEquals("StartPos (8)", 0, kr.getMatch(8).startPos);
+	assertEquals("EndPos (8)", 10, kr.getMatch(8).endPos);
     };
 
 
@@ -545,15 +531,15 @@
 
 	KorapResult kr = ki.search(sq, (short) 10);
 
-	assertEquals("totalResults", 4, kr.totalResults());
-	assertEquals("StartPos (0)", 0, kr.match(0).startPos);
-	assertEquals("EndPos (0)", 4, kr.match(0).endPos);
-	assertEquals("StartPos (1)", 0, kr.match(1).startPos);
-	assertEquals("EndPos (1)", 7, kr.match(1).endPos);
-	assertEquals("StartPos (2)", 0, kr.match(2).startPos);
-	assertEquals("EndPos (2)", 10, kr.match(2).endPos);
-	assertEquals("StartPos (3)", 11, kr.match(3).startPos);
-	assertEquals("EndPos (3)", 12, kr.match(3).endPos);
+	assertEquals("totalResults", kr.getTotalResults(), 4);
+	assertEquals("StartPos (0)", 0, kr.getMatch(0).startPos);
+	assertEquals("EndPos (0)", 4, kr.getMatch(0).endPos);
+	assertEquals("StartPos (1)", 0, kr.getMatch(1).startPos);
+	assertEquals("EndPos (1)", 7, kr.getMatch(1).endPos);
+	assertEquals("StartPos (2)", 0, kr.getMatch(2).startPos);
+	assertEquals("EndPos (2)", 10, kr.getMatch(2).endPos);
+	assertEquals("StartPos (3)", 11, kr.getMatch(3).startPos);
+	assertEquals("EndPos (3)", 12, kr.getMatch(3).endPos);
 
 	sq = new SpanWithinQuery(
 	    new SpanElementQuery("base", "a"),
@@ -561,27 +547,26 @@
         );
 
 	kr = ki.search(sq, (short) 10);
-	//	System.err.println(kr.toJSON());
 
-	assertEquals("totalResults", 9, kr.totalResults());
-	assertEquals("StartPos (0)", 0, kr.match(0).startPos);
-	assertEquals("EndPos (0)", 4, kr.match(0).endPos);
-	assertEquals("StartPos (1)", 0, kr.match(1).startPos);
-	assertEquals("EndPos (1)", 4, kr.match(1).endPos);
-	assertEquals("StartPos (2)", 0, kr.match(2).startPos);
-	assertEquals("EndPos (2)", 7, kr.match(2).endPos);
-	assertEquals("StartPos (3)", 0, kr.match(3).startPos);
-	assertEquals("EndPos (3)", 7, kr.match(3).endPos);
-	assertEquals("StartPos (4)", 0, kr.match(4).startPos);
-	assertEquals("EndPos (4)", 7, kr.match(4).endPos);
-	assertEquals("StartPos (5)", 0, kr.match(5).startPos);
-	assertEquals("EndPos (5)", 10, kr.match(5).endPos);
-	assertEquals("StartPos (6)", 0, kr.match(6).startPos);
-	assertEquals("EndPos (6)", 10, kr.match(6).endPos);
-	assertEquals("StartPos (7)", 0, kr.match(7).startPos);
-	assertEquals("EndPos (7)", 10, kr.match(7).endPos);
-	assertEquals("StartPos (8)", 0, kr.match(8).startPos);
-	assertEquals("EndPos (8)", 10, kr.match(8).endPos);
+	assertEquals("totalResults", kr.getTotalResults(), 9);
+	assertEquals("StartPos (0)", 0, kr.getMatch(0).startPos);
+	assertEquals("EndPos (0)", 4, kr.getMatch(0).endPos);
+	assertEquals("StartPos (1)", 0, kr.getMatch(1).startPos);
+	assertEquals("EndPos (1)", 4, kr.getMatch(1).endPos);
+	assertEquals("StartPos (2)", 0, kr.getMatch(2).startPos);
+	assertEquals("EndPos (2)", 7, kr.getMatch(2).endPos);
+	assertEquals("StartPos (3)", 0, kr.getMatch(3).startPos);
+	assertEquals("EndPos (3)", 7, kr.getMatch(3).endPos);
+	assertEquals("StartPos (4)", 0, kr.getMatch(4).startPos);
+	assertEquals("EndPos (4)", 7, kr.getMatch(4).endPos);
+	assertEquals("StartPos (5)", 0, kr.getMatch(5).startPos);
+	assertEquals("EndPos (5)", 10, kr.getMatch(5).endPos);
+	assertEquals("StartPos (6)", 0, kr.getMatch(6).startPos);
+	assertEquals("EndPos (6)", 10, kr.getMatch(6).endPos);
+	assertEquals("StartPos (7)", 0, kr.getMatch(7).startPos);
+	assertEquals("EndPos (7)", 10, kr.getMatch(7).endPos);
+	assertEquals("StartPos (8)", 0, kr.getMatch(8).startPos);
+	assertEquals("EndPos (8)", 10, kr.getMatch(8).endPos);
     };
 
 
@@ -617,15 +602,15 @@
 
 	KorapResult kr = ki.search(sq, (short) 10);
 
-	assertEquals("totalResults", 4, kr.totalResults());
-	assertEquals("StartPos (0)", 0, kr.match(0).startPos);
-	assertEquals("EndPos (0)", 4, kr.match(0).endPos);
-	assertEquals("StartPos (1)", 0, kr.match(1).startPos);
-	assertEquals("EndPos (1)", 7, kr.match(1).endPos);
-	assertEquals("StartPos (2)", 0, kr.match(2).startPos);
-	assertEquals("EndPos (2)", 10, kr.match(2).endPos);
-	assertEquals("StartPos (3)", 11, kr.match(3).startPos);
-	assertEquals("EndPos (3)", 12, kr.match(3).endPos);
+	assertEquals("totalResults", kr.getTotalResults(), 4);
+	assertEquals("StartPos (0)", 0, kr.getMatch(0).startPos);
+	assertEquals("EndPos (0)", 4, kr.getMatch(0).endPos);
+	assertEquals("StartPos (1)", 0, kr.getMatch(1).startPos);
+	assertEquals("EndPos (1)", 7, kr.getMatch(1).endPos);
+	assertEquals("StartPos (2)", 0, kr.getMatch(2).startPos);
+	assertEquals("EndPos (2)", 10, kr.getMatch(2).endPos);
+	assertEquals("StartPos (3)", 11, kr.getMatch(3).startPos);
+	assertEquals("EndPos (3)", 12, kr.getMatch(3).endPos);
 
 	sq = new SpanWithinQuery(
 	    new SpanElementQuery("base", "a"),
@@ -633,29 +618,28 @@
         );
 
 	kr = ki.search(sq, (short) 15);
-	//	System.err.println(kr.toJSON());
 
-	assertEquals("totalResults", 10, kr.totalResults());
-	assertEquals("StartPos (0)", 0, kr.match(0).startPos);
-	assertEquals("EndPos (0)", 4, kr.match(0).endPos);
-	assertEquals("StartPos (1)", 0, kr.match(1).startPos);
-	assertEquals("EndPos (1)", 4, kr.match(1).endPos);
-	assertEquals("StartPos (2)", 0, kr.match(2).startPos);
-	assertEquals("EndPos (2)", 7, kr.match(2).endPos);
-	assertEquals("StartPos (3)", 0, kr.match(3).startPos);
-	assertEquals("EndPos (3)", 7, kr.match(3).endPos);
-	assertEquals("StartPos (4)", 0, kr.match(4).startPos);
-	assertEquals("EndPos (4)", 7, kr.match(4).endPos);
-	assertEquals("StartPos (5)", 0, kr.match(5).startPos);
-	assertEquals("EndPos (5)", 10, kr.match(5).endPos);
-	assertEquals("StartPos (6)", 0, kr.match(6).startPos);
-	assertEquals("EndPos (6)", 10, kr.match(6).endPos);
-	assertEquals("StartPos (7)", 0, kr.match(7).startPos);
-	assertEquals("EndPos (7)", 10, kr.match(7).endPos);
-	assertEquals("StartPos (8)", 0, kr.match(8).startPos);
-	assertEquals("EndPos (8)", 10, kr.match(8).endPos);
-	assertEquals("StartPos (9)", 11, kr.match(9).startPos);
-	assertEquals("EndPos (9)", 12, kr.match(9).endPos);
+	assertEquals("totalResults", kr.getTotalResults(), 10);
+	assertEquals("StartPos (0)", 0, kr.getMatch(0).startPos);
+	assertEquals("EndPos (0)", 4, kr.getMatch(0).endPos);
+	assertEquals("StartPos (1)", 0, kr.getMatch(1).startPos);
+	assertEquals("EndPos (1)", 4, kr.getMatch(1).endPos);
+	assertEquals("StartPos (2)", 0, kr.getMatch(2).startPos);
+	assertEquals("EndPos (2)", 7, kr.getMatch(2).endPos);
+	assertEquals("StartPos (3)", 0, kr.getMatch(3).startPos);
+	assertEquals("EndPos (3)", 7, kr.getMatch(3).endPos);
+	assertEquals("StartPos (4)", 0, kr.getMatch(4).startPos);
+	assertEquals("EndPos (4)", 7, kr.getMatch(4).endPos);
+	assertEquals("StartPos (5)", 0, kr.getMatch(5).startPos);
+	assertEquals("EndPos (5)", 10, kr.getMatch(5).endPos);
+	assertEquals("StartPos (6)", 0, kr.getMatch(6).startPos);
+	assertEquals("EndPos (6)", 10, kr.getMatch(6).endPos);
+	assertEquals("StartPos (7)", 0, kr.getMatch(7).startPos);
+	assertEquals("EndPos (7)", 10, kr.getMatch(7).endPos);
+	assertEquals("StartPos (8)", 0, kr.getMatch(8).startPos);
+	assertEquals("EndPos (8)", 10, kr.getMatch(8).endPos);
+	assertEquals("StartPos (9)", 11, kr.getMatch(9).startPos);
+	assertEquals("EndPos (9)", 12, kr.getMatch(9).endPos);
     };
 
 
@@ -750,36 +734,35 @@
 
 	KorapResult kr = ki.search(sq, (short) 15);
 
-	//	System.err.println(ki.search(sq, (short) 10).toJSON());
-	assertEquals("totalResults", 12, kr.totalResults());
+	assertEquals("totalResults", kr.getTotalResults(), 12);
 
-	assertEquals("StartPos (0)", 0, kr.match(0).startPos);
-	assertEquals("EndPos (0)", 0, kr.match(0).endPos);
-	assertEquals("StartPos (1)", 0, kr.match(1).startPos);
-	assertEquals("EndPos (1)", 0, kr.match(1).endPos);
-	assertEquals("StartPos (2)", 0, kr.match(2).startPos);
-	assertEquals("EndPos (2)", 0, kr.match(2).endPos);
+	assertEquals("StartPos (0)", 0, kr.getMatch(0).startPos);
+	assertEquals("EndPos (0)", 0, kr.getMatch(0).endPos);
+	assertEquals("StartPos (1)", 0, kr.getMatch(1).startPos);
+	assertEquals("EndPos (1)", 0, kr.getMatch(1).endPos);
+	assertEquals("StartPos (2)", 0, kr.getMatch(2).startPos);
+	assertEquals("EndPos (2)", 0, kr.getMatch(2).endPos);
 
-	assertEquals("StartPos (3)", 0, kr.match(3).startPos);
-	assertEquals("EndPos (3)", 12, kr.match(3).endPos);
-	assertEquals("StartPos (4)", 1, kr.match(4).startPos);
-	assertEquals("EndPos (4)", 9, kr.match(4).endPos);
-	assertEquals("StartPos (5)", 2, kr.match(5).startPos);
-	assertEquals("EndPos (5)", 6, kr.match(5).endPos);
+	assertEquals("StartPos (3)", 0, kr.getMatch(3).startPos);
+	assertEquals("EndPos (3)", 12, kr.getMatch(3).endPos);
+	assertEquals("StartPos (4)", 1, kr.getMatch(4).startPos);
+	assertEquals("EndPos (4)", 9, kr.getMatch(4).endPos);
+	assertEquals("StartPos (5)", 2, kr.getMatch(5).startPos);
+	assertEquals("EndPos (5)", 6, kr.getMatch(5).endPos);
 
-	assertEquals("StartPos (6)", 0, kr.match(6).startPos);
-	assertEquals("EndPos (6)", 12, kr.match(6).endPos);
-	assertEquals("StartPos (7)", 1, kr.match(7).startPos);
-	assertEquals("EndPos (7)", 9, kr.match(7).endPos);
-	assertEquals("StartPos (8)", 2, kr.match(8).startPos);
-	assertEquals("EndPos (8)", 6, kr.match(8).endPos);
+	assertEquals("StartPos (6)", 0, kr.getMatch(6).startPos);
+	assertEquals("EndPos (6)", 12, kr.getMatch(6).endPos);
+	assertEquals("StartPos (7)", 1, kr.getMatch(7).startPos);
+	assertEquals("EndPos (7)", 9, kr.getMatch(7).endPos);
+	assertEquals("StartPos (8)", 2, kr.getMatch(8).startPos);
+	assertEquals("EndPos (8)", 6, kr.getMatch(8).endPos);
 
-	assertEquals("StartPos (9)", 0, kr.match(9).startPos);
-	assertEquals("EndPos (9)", 3, kr.match(9).endPos);
-	assertEquals("StartPos (10)", 0, kr.match(10).startPos);
-	assertEquals("EndPos (10)", 6, kr.match(10).endPos);
-	assertEquals("StartPos (11)", 0, kr.match(11).startPos);
-	assertEquals("EndPos (11)", 9, kr.match(11).endPos);
+	assertEquals("StartPos (9)", 0, kr.getMatch(9).startPos);
+	assertEquals("EndPos (9)", 3, kr.getMatch(9).endPos);
+	assertEquals("StartPos (10)", 0, kr.getMatch(10).startPos);
+	assertEquals("EndPos (10)", 6, kr.getMatch(10).endPos);
+	assertEquals("StartPos (11)", 0, kr.getMatch(11).startPos);
+	assertEquals("EndPos (11)", 9, kr.getMatch(11).endPos);
     };
 
     @Test
@@ -806,24 +789,24 @@
 	SpanQuery sq = new SpanClassQuery(new SpanElementQuery("base", "sentence"), (byte)3);
 	KorapResult kr;
 	kr = ki.search(sq, 0, (short) 15, true, (short) 1, true, (short) 1);
-	assertEquals("totalResults", 1, kr.totalResults());
+	assertEquals("totalResults", kr.getTotalResults(), 1);
 
-	assertEquals("... schrie: [\"{3:Das war ich}!\"] und ...",kr.match(0).snippetBrackets());
-	assertEquals("<span class=\"context-left\"><span class=\"more\"></span>schrie: </span><span class=\"match\">&quot;<em class=\"class-3 level-0\">Das war ich</em>!&quot;</span><span class=\"context-right\"> und<span class=\"more\"></span></span>",kr.match(0).snippetHTML());
+	assertEquals("... schrie: [\"{3:Das war ich}!\"] und ...",kr.getMatch(0).snippetBrackets());
+	assertEquals("<span class=\"context-left\"><span class=\"more\"></span>schrie: </span><span class=\"match\">&quot;<em class=\"class-3 level-0\">Das war ich</em>!&quot;</span><span class=\"context-right\"> und<span class=\"more\"></span></span>",kr.getMatch(0).snippetHTML());
 
 
 	kr = ki.search(sq, 0, (short) 15, true, (short) 0, true, (short) 0);
-	assertEquals("... [\"{3:Das war ich}!\"] ...",kr.match(0).snippetBrackets());
-	assertEquals("totalResults", 1, kr.totalResults());
+	assertEquals("... [\"{3:Das war ich}!\"] ...",kr.getMatch(0).snippetBrackets());
+	assertEquals("totalResults", kr.getTotalResults(), 1);
 
 
 	kr = ki.search(sq, 0, (short) 15, true, (short) 6, true, (short) 6);
-	assertEquals("Er schrie: [\"{3:Das war ich}!\"] und ging.",kr.match(0).snippetBrackets());
-	assertEquals("totalResults", 1, kr.totalResults());
+	assertEquals("Er schrie: [\"{3:Das war ich}!\"] und ging.",kr.getMatch(0).snippetBrackets());
+	assertEquals("totalResults", kr.getTotalResults(), 1);
 
 	kr = ki.search(sq, 0, (short) 15, true, (short) 2, true, (short) 2);
-	assertEquals("Er schrie: [\"{3:Das war ich}!\"] und ging ...",kr.match(0).snippetBrackets());
-	assertEquals("totalResults", 1, kr.totalResults());
+	assertEquals("Er schrie: [\"{3:Das war ich}!\"] und ging ...",kr.getMatch(0).snippetBrackets());
+	assertEquals("totalResults", kr.getTotalResults(), 1);
 
 
 	sq = new SpanClassQuery(
@@ -835,8 +818,8 @@
         ), (byte) 1);
 
 	kr = ki.search(sq, (short) 15);
-	assertEquals("Er schrie: [\"{1:{2:Das} war ich}!\"] und ging.",kr.match(0).snippetBrackets());
-	assertEquals("totalResults", 1, kr.totalResults());
+	assertEquals("Er schrie: [\"{1:{2:Das} war ich}!\"] und ging.",kr.getMatch(0).snippetBrackets());
+	assertEquals("totalResults", kr.getTotalResults(), 1);
 
 	sq = new SpanClassQuery(
           new SpanWithinQuery(
@@ -847,8 +830,8 @@
         ), (byte) 1);
 
 	kr = ki.search(sq, (short) 15);
-	assertEquals("Er schrie: [\"{1:Das {2:war} ich}!\"] und ging.",kr.match(0).snippetBrackets());
-	assertEquals("totalResults", 1, kr.totalResults());
+	assertEquals("Er schrie: [\"{1:Das {2:war} ich}!\"] und ging.",kr.getMatch(0).snippetBrackets());
+	assertEquals("totalResults", kr.getTotalResults(), 1);
 
 	sq = new SpanClassQuery(
           new SpanWithinQuery(
@@ -859,8 +842,8 @@
         ), (byte) 1);
 
 	kr = ki.search(sq, (short) 15);
-	assertEquals("Er schrie: [\"{1:Das war {2:ich}}!\"] und ging.",kr.match(0).snippetBrackets());
-	assertEquals("totalResults", 1, kr.totalResults());
+	assertEquals("Er schrie: [\"{1:Das war {2:ich}}!\"] und ging.",kr.getMatch(0).snippetBrackets());
+	assertEquals("totalResults", kr.getTotalResults(), 1);
 
 	sq = new SpanClassQuery(
           new SpanWithinQuery(
@@ -871,7 +854,7 @@
         ), (byte) 1);
 
 	kr = ki.search(sq, (short) 15);
-	assertEquals("totalResults", 0, kr.totalResults());
+	assertEquals("totalResults", kr.getTotalResults(), 0);
 
 	sq = new SpanClassQuery(
           new SpanWithinQuery(
@@ -882,7 +865,7 @@
         ), (byte) 1);
 
 	kr = ki.search(sq, (short) 15);
-	assertEquals("totalResults", 0, kr.totalResults());
+	assertEquals("totalResults", kr.getTotalResults(), 0);
     };
 
     //!! Offset is 1 token tooo long
@@ -916,12 +899,11 @@
 
 	KorapResult kr = ki.search(sq, (short) 10);
 
-	// System.err.println(kr.toJSON());
-	assertEquals("totalResults", 2, kr.totalResults());
-	assertEquals("StartPos (0)", 2, kr.match(0).startPos);
-	assertEquals("EndPos (0)", 3, kr.match(0).endPos);
-	assertEquals("StartPos (1)", 2, kr.match(1).startPos);
-	assertEquals("EndPos (1)", 5, kr.match(1).endPos);
+	assertEquals("totalResults", kr.getTotalResults(), 2);
+	assertEquals("StartPos (0)", 2, kr.getMatch(0).startPos);
+	assertEquals("EndPos (0)", 3, kr.getMatch(0).endPos);
+	assertEquals("StartPos (1)", 2, kr.getMatch(1).startPos);
+	assertEquals("EndPos (1)", 5, kr.getMatch(1).endPos);
     };
 
 
@@ -961,16 +943,16 @@
 
 	KorapResult kr = ki.search(sq, (short) 10);
 
-	assertEquals("totalResults", 4, kr.totalResults());
+	assertEquals("totalResults", kr.getTotalResults(), 4);
 
-	assertEquals("StartPos (0)", 3, kr.match(0).startPos);
-	assertEquals("EndPos (0)", 10, kr.match(0).endPos);
-	assertEquals("StartPos (1)", 3, kr.match(1).startPos);
-	assertEquals("EndPos (1)", 10, kr.match(1).endPos);
-	assertEquals("StartPos (2)", 3, kr.match(2).startPos);
-	assertEquals("EndPos (2)", 10, kr.match(2).endPos);
-	assertEquals("StartPos (3)", 5, kr.match(3).startPos);
-	assertEquals("EndPos (3)", 8, kr.match(3).endPos);
+	assertEquals("StartPos (0)", 3, kr.getMatch(0).startPos);
+	assertEquals("EndPos (0)", 10, kr.getMatch(0).endPos);
+	assertEquals("StartPos (1)", 3, kr.getMatch(1).startPos);
+	assertEquals("EndPos (1)", 10, kr.getMatch(1).endPos);
+	assertEquals("StartPos (2)", 3, kr.getMatch(2).startPos);
+	assertEquals("EndPos (2)", 10, kr.getMatch(2).endPos);
+	assertEquals("StartPos (3)", 5, kr.getMatch(3).startPos);
+	assertEquals("EndPos (3)", 8, kr.getMatch(3).endPos);
     };
 
     @Test
@@ -1010,7 +992,7 @@
 
 	KorapResult kr = ki.search(sq, (short) 10);
 
-	assertEquals("totalResults", 0, kr.totalResults());
+	assertEquals("totalResults", kr.getTotalResults(), 0);
     };
 
 
@@ -1050,7 +1032,7 @@
 
 	KorapResult kr = ki.search(sq, (short) 10);
 
-	assertEquals("totalResults", 0, kr.totalResults());
+	assertEquals("totalResults", kr.getTotalResults(), 0);
     };
     
     /** SpanElementQueries 
@@ -1080,7 +1062,7 @@
 	
 	String jsonPath = getClass().getResource("/queries/poly2.json").getFile();
 	String jsonPQuery = readFile(jsonPath);		
-	SpanQueryWrapper sqwi = new KorapQuery("tokens").fromJSON(
+	SpanQueryWrapper sqwi = new KorapQuery("tokens").fromJson(
 								  jsonPQuery
 								  );
 		
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 becff26..0a75172 100644
--- a/src/test/java/de/ids_mannheim/korap/query/TestKorapQueryJSON.java
+++ b/src/test/java/de/ids_mannheim/korap/query/TestKorapQueryJSON.java
@@ -184,7 +184,7 @@
 
     @Test
     public void queryJSONDemo () throws QueryException {
-	SpanQueryWrapper sqwi = new KorapQuery("tokens").fromJSON("{ \"query\" : { \"@type\" : \"korap:token\", \"wrap\" : { \"@type\" : \"korap:term\", \"foundry\" : \"base\", \"layer\" : \"p\", \"key\" : \"foo\", \"match\" : \"match:eq\" }}}");
+	SpanQueryWrapper sqwi = new KorapQuery("tokens").fromJson("{ \"query\" : { \"@type\" : \"korap:token\", \"wrap\" : { \"@type\" : \"korap:term\", \"foundry\" : \"base\", \"layer\" : \"p\", \"key\" : \"foo\", \"match\" : \"match:eq\" }}}");
 
 	assertEquals(sqwi.toQuery().toString(), "tokens:base/p:foo");
     };
@@ -306,7 +306,7 @@
 	// ((MORPH(APPR) ODER MORPH(APPRART)) /+w1 Urlaub
 	try {
 	    String json = getString(getClass().getResource("/queries/bugs/underspecified_token.jsonld").getFile());
-	    new KorapQuery("tokens").fromJSON(json);
+	    new KorapQuery("tokens").fromJson(json);
 	}
 	catch (QueryException e) {
 	    assertEquals(701, e.getErrorCode());
@@ -357,7 +357,7 @@
 	
 	try {
 	    String json = getString(jsonFile);
-	    sqwi = new KorapQuery("tokens").fromJSON(json);
+	    sqwi = new KorapQuery("tokens").fromJson(json);
 	}
 	catch (QueryException e) {
 	    fail(e.getMessage());
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 608c9de..afa8bab 100644
--- a/src/test/java/de/ids_mannheim/korap/query/TestTemporaryQueryLimitations.java
+++ b/src/test/java/de/ids_mannheim/korap/query/TestTemporaryQueryLimitations.java
@@ -55,7 +55,7 @@
 	KorapSearch ks = new KorapSearch(json);
 	KorapResult kr = ks.run(ki);
 	assertEquals(kr.getQuery(),"shrink(130: {131: spanContain({129: <tokens:s />}, {130: tokens:s:wegen})})");
-	assertEquals(kr.totalResults(),0);
+	assertEquals(kr.getTotalResults(),0);
 	assertEquals(kr.getStartIndex(),0);
 
 	assertEquals("This is a warning coming from the serialization",
diff --git a/src/test/java/de/ids_mannheim/korap/response/TestMessage.java b/src/test/java/de/ids_mannheim/korap/response/TestMessage.java
index 440e027..094a38b 100644
--- a/src/test/java/de/ids_mannheim/korap/response/TestMessage.java
+++ b/src/test/java/de/ids_mannheim/korap/response/TestMessage.java
@@ -15,27 +15,27 @@
     @Test
     public void StringMessage () {
 	Messages km = new Messages();
-	assertEquals("[]", km.toJSON());
+	assertEquals("[]", km.toJsonString());
     };
 
     @Test
     public void StringMessageSet () {
 	Messages km = new Messages();
 	km.add(612,"Foo");
-	assertEquals("[[612,\"Foo\"]]", km.toJSON());
+	assertEquals("[[612,\"Foo\"]]", km.toJsonString());
 	km.add(613,"Bar");
-	assertEquals("[[612,\"Foo\"],[613,\"Bar\"]]", km.toJSON());
+	assertEquals("[[612,\"Foo\"],[613,\"Bar\"]]", km.toJsonString());
     };
 
     @Test
     public void StringMessageParameters () {
 	Messages km = new Messages();
 	km.add(612,"Foo");
-	assertEquals("[[612,\"Foo\"]]", km.toJSON());
+	assertEquals("[[612,\"Foo\"]]", km.toJsonString());
 	km.add(613,"Bar", "Instanz");
-	assertEquals("[[612,\"Foo\"],[613,\"Bar\",\"Instanz\"]]", km.toJSON());
+	assertEquals("[[612,\"Foo\"],[613,\"Bar\",\"Instanz\"]]", km.toJsonString());
 	km.add(614,"Test");
-	assertEquals("[[612,\"Foo\"],[613,\"Bar\",\"Instanz\"],[614,\"Test\"]]", km.toJSON());
+	assertEquals("[[612,\"Foo\"],[613,\"Bar\",\"Instanz\"],[614,\"Test\"]]", km.toJsonString());
     };
 
     @Test
diff --git a/src/test/java/de/ids_mannheim/korap/response/TestNotifications.java b/src/test/java/de/ids_mannheim/korap/response/TestNotifications.java
index f92af6e..9bbf396 100644
--- a/src/test/java/de/ids_mannheim/korap/response/TestNotifications.java
+++ b/src/test/java/de/ids_mannheim/korap/response/TestNotifications.java
@@ -22,7 +22,7 @@
     @Test
     public void testNotification () {
 	Notifications notes = new Notifications();
-	assertEquals("{}", notes.toJSON());
+	assertEquals("{}", notes.toJsonString());
     };
 
     @Test
@@ -36,7 +36,7 @@
 	notes.addWarning(614, "Bar", "Spiel");
 
 	assertEquals("{\"warnings\":[[613,\"Foo\"],[614,\"Bar\"," +
-		     "\"Spiel\"]]}", notes.toJSON());
+		     "\"Spiel\"]]}", notes.toJsonString());
 
 	assertTrue(notes.hasWarnings());
 	assertFalse(notes.hasMessages());
@@ -48,7 +48,7 @@
 	assertFalse(notes.hasMessages());
 	assertTrue(notes.hasErrors());
 
-	JsonNode noteJson = mapper.readTree(notes.toJSON());
+	JsonNode noteJson = mapper.readTree(notes.toJsonString());
 
 	// {"warnings":[[613,"Foo"],[614,"Bar","Spiel"]],"errors":[[412,"Test"]]}
 	assertEquals(613, noteJson.at("/warnings/0/0").asInt());
@@ -65,7 +65,7 @@
 	assertTrue(notes.hasMessages());
 	assertTrue(notes.hasErrors());
 
-	noteJson = mapper.readTree(notes.toJSON());
+	noteJson = mapper.readTree(notes.toJsonString());
 
 	// {"warnings":[[613,"Foo"],[614,"Bar","Spiel"]],
 	// "errors":[[412,"Test"]]}
@@ -85,7 +85,7 @@
 
 	Messages msgs = notes.getWarnings();
 	assertEquals("[[613,\"Foo\"],[614,\"Bar\",\"Spiel\"]]",
-		     msgs.toJSON());
+		     msgs.toJsonString());
     };
 
 
@@ -115,7 +115,7 @@
 	assertTrue(notes1.hasMessages());
 	assertTrue(notes1.hasErrors());
 
-	JsonNode noteJson = mapper.readTree(notes1.toJSON());
+	JsonNode noteJson = mapper.readTree(notes1.toJsonString());
 	assertEquals(1, noteJson.at("/warnings/0/0").asInt());
 	assertEquals("Foo", noteJson.at("/warnings/0/1").asText());
 	assertEquals(2, noteJson.at("/warnings/1/0").asInt());
@@ -152,7 +152,7 @@
 	assertTrue(notes1.hasMessages());
 	assertTrue(notes1.hasErrors());
 
-	noteJson = mapper.readTree(notes1.toJSON());
+	noteJson = mapper.readTree(notes1.toJsonString());
 
 	assertEquals(1, noteJson.at("/warnings/0/0").asInt());
 	assertEquals("Foo", noteJson.at("/warnings/0/1").asText());
@@ -179,7 +179,7 @@
 	assertTrue(notes1.hasMessages());
 	assertTrue(notes1.hasErrors());
 
-	noteJson = mapper.readTree(notes1.toJSON());
+	noteJson = mapper.readTree(notes1.toJsonString());
 
 	assertEquals(1, noteJson.at("/warnings/0/0").asInt());
 	assertEquals("Foo", noteJson.at("/warnings/0/1").asText());
diff --git a/src/test/java/de/ids_mannheim/korap/response/TestResponse.java b/src/test/java/de/ids_mannheim/korap/response/TestResponse.java
index 57babbb..b2116cb 100644
--- a/src/test/java/de/ids_mannheim/korap/response/TestResponse.java
+++ b/src/test/java/de/ids_mannheim/korap/response/TestResponse.java
@@ -23,7 +23,7 @@
     @Test
     public void testResponse () throws IOException {
 	KorapResponse resp = new KorapResponse();
-	assertEquals("{}", resp.toJSON());
+	assertEquals("{}", resp.toJsonString());
 	resp.setVersion("0.24");
 	resp.setNode("Tanja");
 	assertEquals("0.24",resp.getVersion());
@@ -33,18 +33,18 @@
 	assertFalse(resp.hasMessages());
 	assertFalse(resp.hasErrors());
 
-	JsonNode respJson = mapper.readTree(resp.toJSON());
+	JsonNode respJson = mapper.readTree(resp.toJsonString());
 	assertEquals("0.24", respJson.at("/version").asText());
 	assertEquals("Tanja", respJson.at("/node").asText());
 
 	resp.setName("Index");
-	respJson = mapper.readTree(resp.toJSON());
+	respJson = mapper.readTree(resp.toJsonString());
 	assertEquals("Index-0.24", respJson.at("/version").asText());
 	assertEquals("Tanja", respJson.at("/node").asText());
 
 	resp.setBenchmark("took a while");
 	resp.setListener("localhost:3000");
-	respJson = mapper.readTree(resp.toJSON());
+	respJson = mapper.readTree(resp.toJsonString());
 	assertEquals("localhost:3000", respJson.at("/listener").asText());
 	assertEquals("took a while", respJson.at("/benchmark").asText());
     };
@@ -52,7 +52,7 @@
     @Test
     public void testResponseNotifications () throws IOException {
 	KorapResponse resp = new KorapResponse();
-	assertEquals("{}", resp.toJSON());
+	assertEquals("{}", resp.toJsonString());
 	resp.setVersion("0.24");
 	resp.setNode("Tanja");
 	assertEquals("0.24",resp.getVersion());
@@ -62,7 +62,7 @@
 	assertFalse(resp.hasMessages());
 	assertFalse(resp.hasErrors());
 
-	JsonNode respJson = mapper.readTree(resp.toJSON());
+	JsonNode respJson = mapper.readTree(resp.toJsonString());
 	assertEquals("0.24", respJson.at("/version").asText());
 	assertEquals("Tanja", respJson.at("/node").asText());
 
@@ -72,7 +72,7 @@
 
 	resp.addError(4, "Fehler 4");
 
-	respJson = mapper.readTree(resp.toJSON());
+	respJson = mapper.readTree(resp.toJsonString());
 	assertEquals("0.24", respJson.at("/version").asText());
 	assertEquals("Tanja", respJson.at("/node").asText());
 
diff --git a/src/test/java/de/ids_mannheim/korap/search/TestKorapResult.java b/src/test/java/de/ids_mannheim/korap/search/TestKorapResult.java
index 76f3736..0357cca 100644
--- a/src/test/java/de/ids_mannheim/korap/search/TestKorapResult.java
+++ b/src/test/java/de/ids_mannheim/korap/search/TestKorapResult.java
@@ -57,10 +57,10 @@
 	KorapQuery kq = new KorapQuery("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);
-	assertEquals(7, kr.getTotalResults());
+	assertEquals((long) 7, kr.getTotalResults());
 
 	ObjectMapper mapper = new ObjectMapper();
-	JsonNode res = mapper.readTree(kr.toJSON());
+	JsonNode res = mapper.readTree(kr.toJsonString());
 	assertEquals(7, res.at("/totalResults").asInt());
 	assertEquals("spanOr([{1: base:s:a}, {2: base:s:b}])", res.at("/query").asText());
 	assertEquals(0, res.at("/startIndex").asInt());
@@ -113,10 +113,10 @@
 	KorapSearch ks = new KorapSearch(json);
 
 	KorapResult kr = ks.run(ki);
-	assertEquals(2, kr.getTotalResults());
+	assertEquals((long) 2, kr.getTotalResults());
 
 	ObjectMapper mapper = new ObjectMapper();
-	JsonNode res = mapper.readTree(kr.toJSON());
+	JsonNode res = mapper.readTree(kr.toJsonString());
 
 	// Old:
 	// assertEquals("Optionality of query is ignored", res.at("/warning").asText());
@@ -155,10 +155,10 @@
 	String json = getString(getClass().getResource("/queries/bsp-result-check.jsonld").getFile());
 	KorapSearch ks = new KorapSearch(json);
 	KorapResult kr = ks.run(ki);
-	assertEquals(7, kr.getTotalResults());
+	assertEquals((long) 7, kr.getTotalResults());
 
 	ObjectMapper mapper = new ObjectMapper();
-	JsonNode res = mapper.readTree(kr.toJSON());
+	JsonNode res = mapper.readTree(kr.toJsonString());
 
 	assertEquals(7, res.at("/totalResults").asInt());
 	assertEquals("spanOr([tokens:s:a, tokens:s:b])", res.at("/query").asText());
@@ -224,9 +224,9 @@
 	SpanQuery q = (SpanQuery) kq.seq(kq.seg("s:a")).append(kq.seg("s:b")).toQuery();
 	KorapResult kr = ki.search(q);
 
-	assertEquals(3, kr.getTotalResults());
+	assertEquals((long) 3, kr.getTotalResults());
 	ObjectMapper mapper = new ObjectMapper();
-	JsonNode res = mapper.readTree(kr.toTokenListJSON());
+	JsonNode res = mapper.readTree(kr.toTokenListJsonString());
 	assertEquals(3, res.at("/totalResults").asInt());
 	assertEquals("spanNext(base:s:a, base:s:b)", res.at("/query").asText());
 	assertEquals(0, res.at("/startIndex").asInt());
diff --git a/src/test/java/de/ids_mannheim/korap/search/TestKorapSearch.java b/src/test/java/de/ids_mannheim/korap/search/TestKorapSearch.java
index 240f33c..d7f30a4 100644
--- a/src/test/java/de/ids_mannheim/korap/search/TestKorapSearch.java
+++ b/src/test/java/de/ids_mannheim/korap/search/TestKorapSearch.java
@@ -103,7 +103,7 @@
 	ks.context.left.setLength(1);
 	ks.context.right.setLength(1);
 	KorapResult kr = ks.run(ki);
-	assertEquals(6, kr.totalResults());
+	assertEquals(kr.getTotalResults(), 6);
 	assertEquals(kr.getMatch(0).getSnippetBrackets(), "... dem [Buchstaben] A ...");
     };
 
@@ -131,7 +131,7 @@
 	KorapSearch ks = new KorapSearch(json);
 	
 	KorapResult kr = ks.run(ki);
-	assertEquals(66, kr.getTotalResults());
+	assertEquals(kr.getTotalResults(), 66);
 	assertEquals(5, kr.getItemsPerPage());
 	assertEquals(5, kr.getStartIndex());
 	assertEquals("... a: A ist [der klangreichste] der V ...", kr.getMatch(0).getSnippetBrackets());
@@ -169,24 +169,24 @@
 	KorapSearch ks = new KorapSearch(json);
 	KorapResult kr = ks.run(ki);
 
-	assertEquals(1, kr.getTotalResults());
+	assertEquals(kr.getTotalResults(), 1);
 
 	ks = new KorapSearch(json);
 	// Ignore the collection part of the query!
 	ks.setCollection(new KorapCollection());
 	kr = ks.run(ki);
 
-	assertEquals(5, kr.getTotalResults());
+	assertEquals(kr.getTotalResults(), 5);
 
 	json = getString(getClass().getResource("/queries/metaquery5.jsonld").getFile());
 	ks = new KorapSearch(json);
 	kr = ks.run(ki);
-	assertEquals(1, kr.getTotalResults());
+	assertEquals(kr.getTotalResults(), 1);
 
 	json = getString(getClass().getResource("/queries/metaquery6.jsonld").getFile());
 	ks = new KorapSearch(json);
 	kr = ks.run(ki);
-	assertEquals(1, kr.getTotalResults());
+	assertEquals(kr.getTotalResults(), 1);
     };
 
 
@@ -212,7 +212,7 @@
 
 	KorapResult kr = new KorapSearch("{ query").run(ki);
 
-	assertEquals(0, kr.getTotalResults());
+	assertEquals(kr.getTotalResults(), 0);
 	assertEquals(kr.getError(0).getMessage(), "Unable to parse JSON");
     };
 
@@ -241,7 +241,7 @@
 
 	KorapResult kr = new KorapSearch(json).run(ki);
 	assertEquals(0, kr.getStartIndex());
-	assertEquals(0, kr.getTotalResults());
+	assertEquals(kr.getTotalResults(), 0);
 	assertEquals(25, kr.getItemsPerPage());
     };
 
@@ -269,7 +269,7 @@
 	KorapResult kr = new KorapSearch(json).run(ki);
 	assertEquals(50, kr.getItemsPerPage());
 	assertEquals(49950, kr.getStartIndex());
-	assertEquals(0, kr.getTotalResults());
+	assertEquals(kr.getTotalResults(), 0);
     };
 
 
@@ -296,13 +296,13 @@
 
 	KorapSearch ks = new KorapSearch(json);
 	KorapResult kr = ks.run(ki);
-	assertEquals(10, kr.getTotalResults());
+	assertEquals(kr.getTotalResults(), 10);
 	assertEquals("A bzw. a ist der erste Buchstabe des lateinischen [Alphabets] und ein Vokal. Der Buchstabe A hat in deutschen Texten eine durchschnittliche Häufigkeit  ...", kr.getMatch(0).getSnippetBrackets());
 
 	ks.setCount(5);
 	ks.setStartPage(2);
 	kr = ks.run(ki);
-	assertEquals(10, kr.getTotalResults());
+	assertEquals(kr.getTotalResults(), 10);
 	assertEquals(5, kr.getStartIndex());
 	assertEquals(5, kr.getItemsPerPage());
 
@@ -310,7 +310,7 @@
 	json = getString(getClass().getResource("/queries/bsp-context-2.jsonld").getFile());
 
 	kr = new KorapSearch(json).run(ki);
-	assertEquals(-1, kr.getTotalResults());
+	assertEquals(kr.getTotalResults(), -1);
 	assertEquals("... lls seit den Griechen beibehalten worden. 3. Bedeutungen in der Biologie steht A für das Nukleosid Adenosin steht A die Base Adenin steht A für die Aminosäure Alanin in der Informatik steht a für den dezimalen [Wert] 97 sowohl im ASCII- als auch im Unicode-Zeichensatz steht A für den dezimalen Wert 65 sowohl im ASCII- als auch im Unicode-Zeichensatz als Kfz-Kennzeichen steht A in Deutschland für Augsburg. in Österreich auf ...", kr.getMatch(0).getSnippetBrackets());
     };
 
@@ -337,7 +337,7 @@
 
 	KorapSearch ks = new KorapSearch(json);
 	KorapResult kr = ks.run(ki);
-	assertEquals(10, kr.getTotalResults());
+	assertEquals(kr.getTotalResults(), 10);
 	assertEquals(5, kr.getStartIndex());
 	assertEquals(5, kr.getItemsPerPage());
 
@@ -345,7 +345,7 @@
 	ks = ks = new KorapSearch(json);
 
 	kr = ks.run(ki);
-	assertEquals(-1, kr.getTotalResults());
+	assertEquals(kr.getTotalResults(), -1);
 	assertEquals(2, kr.getStartIndex());
 	assertEquals(2, kr.getItemsPerPage());
 
@@ -379,7 +379,7 @@
 
 	KorapSearch ks = new KorapSearch(json);
 	KorapResult kr = ks.run(ki);
-	assertEquals(10, kr.getTotalResults());
+	assertEquals(kr.getTotalResults(), 10);
 	assertEquals(0, kr.getStartIndex());
 	assertEquals(20, kr.getItemsPerPage());
 
@@ -399,7 +399,7 @@
 	assertEquals("WPD_AAA.00002", kr.getMatch(1).getDocID());
 	assertEquals("WPD_AAA.00004", kr.getMatch(2).getDocID());
 
-	assertEquals(3, kr.getTotalResults());
+	assertEquals(kr.getTotalResults(), 3);
 	assertEquals(0, kr.getStartIndex());
 	assertEquals(20, kr.getItemsPerPage());
 
@@ -409,15 +409,13 @@
 
 	kr = ks.run(ki);
 
-	//	System.err.println(kr.toJSON());
-
 	assertEquals("WPD_AAA.00001", kr.getMatch(0).getDocID());
 	assertEquals("WPD_AAA.00001", kr.getMatch(1).getDocID());
 	assertEquals("WPD_AAA.00002", kr.getMatch(2).getDocID());
 	assertEquals("WPD_AAA.00002", kr.getMatch(3).getDocID());
 	assertEquals("WPD_AAA.00004", kr.getMatch(4).getDocID());
 
-	assertEquals(5, kr.getTotalResults());
+	assertEquals(kr.getTotalResults(), 5);
 	assertEquals(0, kr.getStartIndex());
 	assertEquals(20, kr.getItemsPerPage());
 
@@ -431,7 +429,7 @@
 	
 	assertEquals("WPD_AAA.00002", kr.getMatch(0).getDocID());
 
-	assertEquals(3, kr.getTotalResults());
+	assertEquals(kr.getTotalResults(), 3);
 	assertEquals(1, kr.getStartIndex());
 	assertEquals(1, kr.getItemsPerPage());
 
@@ -477,7 +475,7 @@
 
 	KorapResult kr = ks.run(ki);
 
-	assertEquals(2, kr.getTotalResults());
+	assertEquals(kr.getTotalResults(), 2);
 	assertEquals(0, kr.getStartIndex());
 	assertEquals(25, kr.getItemsPerPage());
     };
@@ -538,7 +536,7 @@
         );
 	KorapResult kr = ks.run(ki);
 
-	assertEquals(148, kr.getTotalResults());
+	assertEquals(kr.getTotalResults(), 148);
 	assertEquals(0, kr.getStartIndex());
 	assertEquals(25, kr.getItemsPerPage());
     };
@@ -603,7 +601,7 @@
         );
 	KorapResult kr = ks.run(ki);
 
-	assertEquals(6, kr.getTotalResults());
+	assertEquals(kr.getTotalResults(), 6);
 	assertEquals(0, kr.getStartIndex());
 	assertEquals(25, kr.getItemsPerPage());
     };
@@ -669,7 +667,7 @@
 	    "ins Leben] gerufen hatten. Pressemeldungen zufolge haben sich ..."
         );
 
-	assertEquals(1, kr.getTotalResults());
+	assertEquals(kr.getTotalResults(), 1);
 	assertEquals(0, kr.getStartIndex());
     };
 
@@ -704,7 +702,7 @@
 	    "Pressemeldungen zufolge haben sich in ..."
         );
 
-	assertEquals(2, kr.getTotalResults());
+	assertEquals(kr.getTotalResults(), 2);
 	assertEquals(0, kr.getStartIndex());
     };
 
@@ -730,7 +728,7 @@
 	KorapResult kr = ks.run(ki);
 
 	ObjectMapper mapper = new ObjectMapper();
-	JsonNode res = mapper.readTree(kr.toTokenListJSON());
+	JsonNode res = mapper.readTree(kr.toTokenListJsonString());
 
 	assertEquals(1, res.at("/totalResults").asInt());
 	assertEquals("{4: spanNext({1: spanNext({2: tokens:s:ins}, " +
@@ -789,7 +787,7 @@
 	    "SpanMultiTermQueryWrapper(tokens:/tt/p:N.*/))])"
         );
 
-	assertEquals(58, kr.getTotalResults());
+	assertEquals(kr.getTotalResults(), 58);
 	assertEquals(0, kr.getStartIndex());
 
 	assertEquals(
@@ -842,7 +840,7 @@
 	
 	KorapSearch ks = new KorapSearch(json);
 	KorapResult kr = ks.run(ki);
-	assertEquals(276, kr.getTotalResults());
+	assertEquals(kr.getTotalResults(), 276);
 	assertEquals(0, kr.getStartIndex());
 	assertEquals(10, kr.getItemsPerPage());
 
@@ -851,7 +849,7 @@
 	ks = new KorapSearch(json);
 	kr = ks.run(ki);
 
-	assertEquals(147, kr.getTotalResults());
+	assertEquals(kr.getTotalResults(), 147);
 	assertEquals("WPD_AAA.00001", kr.getMatch(0).getDocID());
 	assertEquals(0, kr.getStartIndex());
 	assertEquals(10, kr.getItemsPerPage());
@@ -861,7 +859,7 @@
 	ks = new KorapSearch(json);
 	kr = ks.run(ki);
 
-	assertEquals(28, kr.getTotalResults());
+	assertEquals(kr.getTotalResults(), 28);
 	assertEquals("WPD_AAA.00002", kr.getMatch(0).getDocID());
 	assertEquals(0, kr.getStartIndex());
 	assertEquals(10, kr.getItemsPerPage());
@@ -871,7 +869,7 @@
 	ks = new KorapSearch(json);
 	kr = ks.run(ki);
 
-	assertEquals(0, kr.getTotalResults());
+	assertEquals(kr.getTotalResults(), 0);
 	assertEquals(0, kr.getStartIndex());
 	assertEquals(10, kr.getItemsPerPage());
 
@@ -882,7 +880,7 @@
 
 	assertEquals("filter with QueryWrapperFilter(+(ID:WPD_AAA.00003 (+tokens:s:die +tokens:s:Schriftzeichen)))", ks.getCollection().getFilter(1).toString());
 
-	assertEquals(119, kr.getTotalResults());
+	assertEquals(kr.getTotalResults(), 119);
 	assertEquals(0, kr.getStartIndex());
 	assertEquals(10, kr.getItemsPerPage());
     };
@@ -911,10 +909,10 @@
 
 	KorapResult kr = ks.run(ki);
 	assertEquals(kr.getMatch(1).getSnippetBrackets(), "... dezimalen [Wert] 65 sowohl ...");
-	assertEquals(3, kr.getTotalResults());
+	assertEquals(kr.getTotalResults(), 3);
 	assertEquals(0, kr.getStartIndex());
 	assertEquals(25, kr.getItemsPerPage());
-	assertFalse(kr.getContext().toJSON().toString().equals("\"s\""));
+	assertFalse(kr.getContext().toJsonNode().toString().equals("\"s\""));
 
 	json = getString(getClass().getResource("/queries/bsp-context-sentence.jsonld").getFile());
 
@@ -926,7 +924,7 @@
 	assertEquals(kr.getMatch(2).getSnippetBrackets(),
 		     "In einem Zahlensystem mit einer Basis größer als 10 steht A oder a häufig für den dezimalen [Wert] 10, siehe auch Hexadezimalsystem.");
 
-	assertEquals(kr.getContext().toJSON().toString(), "\"s\"");
+	assertEquals(kr.getContext().toJsonNode().toString(), "\"s\"");
     };
 
 
@@ -982,7 +980,7 @@
 			     "in Eigennamen und Ortsnamen ...",
 			     kr.getMatch(0).getSnippetBrackets());
 		assertEquals("WPD_AAA.00002", kr.getMatch(0).getDocID());
-		assertEquals(1, kr.getTotalResults());
+		assertEquals(kr.getTotalResults(), 1);
 	
 		// der alte Digraph Aa durch []
 		// Works with one document
@@ -997,7 +995,7 @@
 			     "in Eigennamen und Ortsnamen ...",
 			     kr.getMatch(0).getSnippetBrackets());
 		assertEquals("WPD_AAA.00002", kr.getMatch(0).getDocID());
-		assertEquals(1, kr.getTotalResults());
+		assertEquals(kr.getTotalResults(), 1);
 	
 		// Now try with one file ahead
 		ki = new KorapIndex();
@@ -1022,7 +1020,7 @@
 			     "in Eigennamen und Ortsnamen ...",
 			     kr.getMatch(0).getSnippetBrackets());
 		assertEquals("WPD_AAA.00002", kr.getMatch(0).getDocID());
-		assertEquals(1, kr.getTotalResults());
+		assertEquals(kr.getTotalResults(), 1);
 	
 		// der alte Digraph Aa durch []
 		json = getString(
@@ -1035,7 +1033,7 @@
 			     "in Eigennamen und Ortsnamen ...",
 			     kr.getMatch(0).getSnippetBrackets());
 		assertEquals("WPD_AAA.00002", kr.getMatch(0).getDocID());
-		assertEquals(1, kr.getTotalResults());
+		assertEquals(kr.getTotalResults(), 1);
     };
 
 
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 0677fc1..34b1f29 100644
--- a/src/test/java/de/ids_mannheim/korap/search/TestMetaFields.java
+++ b/src/test/java/de/ids_mannheim/korap/search/TestMetaFields.java
@@ -51,12 +51,12 @@
 	
 	KorapSearch ks = new KorapSearch(json);
 	KorapResult kr = ks.run(ki);
-	assertEquals(17, kr.getTotalResults());
+	assertEquals((long) 17, kr.getTotalResults());
 	assertEquals(0, kr.getStartIndex());
 	assertEquals(9, kr.getItemsPerPage());
 
 	ObjectMapper mapper = new ObjectMapper();
-	JsonNode res = mapper.readTree(kr.toJSON());
+	JsonNode res = mapper.readTree(kr.toJsonString());
 	assertEquals(0, res.at("/matches/0/UID").asInt());
 	assertEquals("WPD", res.at("/matches/0/corpusID").asText());
 	assertEquals("", res.at("/matches/0/docID").asText());
@@ -77,12 +77,12 @@
         );
 	ks = new KorapSearch(json);
 	kr = ks.run(ki);
-	assertEquals(17, kr.getTotalResults());
+	assertEquals((long) 17, kr.getTotalResults());
 	assertEquals(0, kr.getStartIndex());
 	assertEquals(2, kr.getItemsPerPage());
 	
 	mapper = new ObjectMapper();
-	res = mapper.readTree(kr.toJSON());
+	res = mapper.readTree(kr.toJsonString());
 	assertEquals(0, res.at("/matches/0/UID").asInt());
 	assertEquals("", res.at("/matches/0/corpusID").asText());
 	assertEquals("Ruru,Jens.Ol,Aglarech", res.at("/matches/0/author").asText());
