diff --git a/CHANGES b/CHANGES
index b013ba1..febbab7 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,7 +1,12 @@
-0.43 2014-09-25
+0.44 2014-09-27
         - [feature] Match collector using database for distributed search (diewald)
 	- [bugfix] Unified boundary handling and prevent nullpointer
 	  exceptions on parsing (diewald)
+	- [bugfix] Ordering of payloads reversed to make nesting highlights
+	  nest correctly (diewald)
+   	- [performance] Updated Lucene dependency from 4.3.1 to 4.5.1 (diewald)
+   	- [performance] Updated Jackson dependency from 2.2.2 to 2.4.0 (diewald)
+	- [bugfix] Return matches correctly with JSON (diewald)
 
 0.43 2014-09-23
         - [cleanup] Made a lot of stuff rely on KorapResponse (diewald)
diff --git a/pom.xml b/pom.xml
index 879d385..5398b8f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -101,30 +101,13 @@
       <artifactId>c3p0</artifactId>
       <version>0.9.1.2</version>
     </dependency>
-
-    <!-- solr dependency -->
-    <!--
-    <dependency>
-      <artifactId>solr-core</artifactId>
-      <groupId>org.apache.solr</groupId>
-      <version>4.3.1</version>
-      <type>jar</type>
-      <scope>compile</scope>
-    </dependency>
-
-    <dependency>
-      <artifactId>solr-test-framework</artifactId>
-      <groupId>org.apache.solr</groupId>
-      <version>4.3.1</version>
-    </dependency>
-    -->
     
     <!-- Lucene core dependency -->
     <dependency>
       <artifactId>lucene-core</artifactId>
       <groupId>org.apache.lucene</groupId>
       <type>jar</type>
-      <version>4.3.1</version>
+      <version>4.5.1</version>
     </dependency>
 
     <!-- Lucene queryparser dependency -->
@@ -132,7 +115,7 @@
       <artifactId>lucene-queryparser</artifactId>
       <groupId>org.apache.lucene</groupId>
       <type>jar</type>
-      <version>4.3.1</version>
+      <version>4.5.1</version>
     </dependency>
 
     <!-- Lucene analyzers dependency -->
@@ -156,15 +139,6 @@
       <version>1.0</version>
     </dependency>
 
-    <!-- servlet dependency -->
-    <!--
-    <dependency>
-      <artifactId>servlet-api</artifactId>
-      <groupId>javax.servlet</groupId>
-      <version>2.5</version>
-    </dependency>
-    -->
-
     <!-- Jersey -->
     <dependency>
       <groupId>org.glassfish.jersey.containers</groupId>
@@ -177,17 +151,6 @@
       <version>1.13-b01</version>
     </dependency>
 
-    <!-- Multipart support for Jersey -->
-    <!--
-	See
-	http://www.mkyong.com/webservices/jax-rs/file-upload-example-in-jersey/
-    <dependency>
-      <groupId>com.sun.jersey.contribs</groupId>
-      <artifactId>jersey-multipart</artifactId>
-      <version>1.13</version>
-    </dependency>
-    -->
-
     <!-- JSON support -->
     <dependency>
       <groupId>org.glassfish.jersey.media</groupId>
@@ -200,17 +163,17 @@
     <dependency>
       <groupId>com.fasterxml.jackson.core</groupId>
       <artifactId>jackson-databind</artifactId>
-      <version>2.2.2</version>
+      <version>2.4.0</version>
     </dependency>
     <dependency>
       <groupId>com.fasterxml.jackson.core</groupId>
       <artifactId>jackson-annotations</artifactId>
-      <version>2.2.2</version>
+      <version>2.4.0</version>
     </dependency>
     <dependency>
       <groupId>com.fasterxml.jackson.core</groupId>
       <artifactId>jackson-core</artifactId>
-      <version>2.2.2</version>
+      <version>2.4.0</version>
     </dependency>
   </dependencies>
 
@@ -232,25 +195,19 @@
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-assembly-plugin</artifactId>
         <version>2.2-beta-5</version>
-        <configuration>
-	  <!--
-              <finalName>KorapTools</finalName>
-	      -->
-	    
+        <configuration>	    
           <archive>
             <manifest>
               <addClasspath>true</addClasspath>
               <mainClass>de.ids_mannheim.korap.KorapIndexer</mainClass>
             </manifest>
           </archive>
-        
           <appendAssemblyId>false</appendAssemblyId>
           <descriptorRefs>
             <descriptorRef>jar-with-dependencies</descriptorRef>
           </descriptorRefs>
         </configuration>
         <executions>
-	  
           <execution>
             <id>KorapIndexer</id>
             <phase>package</phase>
@@ -268,7 +225,7 @@
           </execution>
 	</executions>
       </plugin>
-      
+ 
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-surefire-plugin</artifactId>
@@ -298,7 +255,6 @@
           <mainClass>de.ids_mannheim.korap.KorapNode</mainClass>
         </configuration>
       </plugin>
-
     </plugins>
 
     <resources>
diff --git a/src/main/java/de/ids_mannheim/korap/KorapIndex.java b/src/main/java/de/ids_mannheim/korap/KorapIndex.java
index bfd6c94..c98b06d 100644
--- a/src/main/java/de/ids_mannheim/korap/KorapIndex.java
+++ b/src/main/java/de/ids_mannheim/korap/KorapIndex.java
@@ -423,8 +423,8 @@
 	    // Todo: Maybe reuse a termsEnum!
 	    final TermsEnum termsEnum = terms.iterator(null);
 
-	    // Set the positioon in the iterator to the term that is seeked
-	    if (termsEnum.seekExact(term.bytes(), true)) {
+	    // Set the position in the iterator to the term that is seeked
+	    if (termsEnum.seekExact(term.bytes())) {
 
 		// Start an iterator to fetch all payloads of the term
 		DocsAndPositionsEnum docs = termsEnum.docsAndPositions(
@@ -1213,7 +1213,7 @@
 		    ); // new KorapMatch();
 
 		    if (spans.isPayloadAvailable())
-			match.addPayload(spans.getPayload());
+			match.addPayload((List<byte[]>) spans.getPayload());
 
 		    match.internalDocID = docID;
 		    match.populateDocument(doc, field, fieldsToLoadLocal);
diff --git a/src/main/java/de/ids_mannheim/korap/KorapMatch.java b/src/main/java/de/ids_mannheim/korap/KorapMatch.java
index 16e69d9..d3a42ad 100644
--- a/src/main/java/de/ids_mannheim/korap/KorapMatch.java
+++ b/src/main/java/de/ids_mannheim/korap/KorapMatch.java
@@ -195,9 +195,14 @@
     // TODO: Here are offsets and highlight offsets!
     // <> payloads have 12 bytes (iii) or 8!?
     // highlightoffsets have 11 bytes (iis)!
-    public void addPayload (Collection<byte[]> payload) {
+    public void addPayload (List<byte[]> payload) {
+
+	// Reverse to make embedding of highlights correct
+	Collections.reverse(payload);
 	try {
 	    ByteBuffer bb = ByteBuffer.allocate(10);
+
+	    // TODO: REVERSE ITERATOR!
 	    for (byte[] b : payload) {
 
 		if (DEBUG)
diff --git a/src/main/java/de/ids_mannheim/korap/KorapResult.java b/src/main/java/de/ids_mannheim/korap/KorapResult.java
index 7300d24..b546c9c 100644
--- a/src/main/java/de/ids_mannheim/korap/KorapResult.java
+++ b/src/main/java/de/ids_mannheim/korap/KorapResult.java
@@ -188,15 +188,17 @@
         return this.benchmarkHitCounter;
     }
 
+    @JsonIgnore
     public void setItemsPerResource (short value) {
 	this.itemsPerResource = value;
     };
 
+    @JsonIgnore
     public void setItemsPerResource (int value) {
 	this.itemsPerResource = (short) value;
     };
 
-    // @JsonIgnore
+    @JsonIgnore
     public short getItemsPerResource () {
 	return this.itemsPerResource;
     };
@@ -210,7 +212,7 @@
         return this.matches.get(index);
     }
 
-    @JsonIgnore
+    // @JsonIgnore
     public List<KorapMatch> getMatches() {
         return this.matches;
     }
diff --git a/src/main/java/de/ids_mannheim/korap/analysis/MultiTermTokenStream.java b/src/main/java/de/ids_mannheim/korap/analysis/MultiTermTokenStream.java
index dd6ab1c..c869c0a 100644
--- a/src/main/java/de/ids_mannheim/korap/analysis/MultiTermTokenStream.java
+++ b/src/main/java/de/ids_mannheim/korap/analysis/MultiTermTokenStream.java
@@ -38,6 +38,12 @@
     private PositionIncrementAttribute posIncrAttr;
     private PayloadAttribute payloadAttr;
 
+
+    /*
+      TODO: Update to new Tokeanstream API
+      http://www.hankcs.com/program/java/lucene-4-6-1-java-lang-illegalstateexception-tokenstream-contract-violation.html
+     */
+
     private static final Pattern pattern = Pattern.compile("\\[(?:\\([0-9]+-[0-9]+\\))?([^\\]]+?)\\]");
 
     // This advices the java compiler to ignore all loggings
diff --git a/src/main/java/de/ids_mannheim/korap/index/PositionsToOffset.java b/src/main/java/de/ids_mannheim/korap/index/PositionsToOffset.java
index 57375d0..3bd0d74 100644
--- a/src/main/java/de/ids_mannheim/korap/index/PositionsToOffset.java
+++ b/src/main/java/de/ids_mannheim/korap/index/PositionsToOffset.java
@@ -189,8 +189,9 @@
 
 		    Term term = new Term(field, sb.toString());
 		    sb.setLength(1);
-
-		    if (termsEnum.seekExact(term.bytes(), true)) {
+		    
+		    // Set the position in the iterator to the term that is seeked
+		    if (termsEnum.seekExact(term.bytes())) {
 			
 			if (DEBUG)
 			    log.trace("Search for {} in doc {} with pos {}",
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 7541af6..111d2c0 100644
--- a/src/test/java/de/ids_mannheim/korap/highlight/TestHighlight.java
+++ b/src/test/java/de/ids_mannheim/korap/highlight/TestHighlight.java
@@ -6,6 +6,7 @@
 import de.ids_mannheim.korap.KorapIndex;
 import de.ids_mannheim.korap.KorapQuery;
 import de.ids_mannheim.korap.KorapResult;
+import de.ids_mannheim.korap.KorapSearch;
 import de.ids_mannheim.korap.KorapMatch;
 import de.ids_mannheim.korap.index.FieldDocument;
 
@@ -128,4 +129,133 @@
 	assertEquals("<span class=\"context-left\"></span><span class=\"match\"><em class=\"class-7 level-0\"><em class=\"class-5 level-1\">a<em class=\"class-6 level-2\">b</em></em></em><em class=\"class-6 level-2\">c</em></span><span class=\"context-right\"></span>", km.getSnippetHTML());
 
     };
+
+
+    @Test
+    public void highlightMissingBug () throws IOException  {
+	KorapIndex ki = new KorapIndex();
+	FieldDocument fd = new FieldDocument();
+	fd.addString("ID", "doc-1");
+	fd.addString("UID", "1");
+	fd.addTV("base",
+		 "abab",
+		 "[(0-1)s:a|i:a|_0#0-1|-:t$<i>4]" +
+		 "[(1-2)s:b|i:b|_1#1-2]" +
+		 "[(2-3)s:a|i:c|_2#2-3]" +
+		 "[(3-4)s:b|i:a|_3#3-4]");
+	ki.addDoc(fd);
+	fd = new FieldDocument();
+	fd.addString("ID", "doc-2");
+	fd.addString("UID", "2");
+	fd.addTV("base",
+		 "aba",
+		 "[(0-1)s:a|i:a|_0#0-1|-:t$<i>3]" +
+		 "[(1-2)s:b|i:b|_1#1-2]" +
+		 "[(2-3)s:a|i:c|_2#2-3]");
+	ki.addDoc(fd);
+
+	// Commit!
+	ki.commit();
+	fd = new FieldDocument();
+	fd.addString("ID", "doc-3");
+	fd.addString("UID", "3");
+	fd.addTV("base",
+		 "abab",
+		 "[(0-1)s:a|i:a|_0#0-1|-:t$<i>4]" +
+		 "[(1-2)s:b|i:b|_1#1-2]" +
+		 "[(2-3)s:a|i:c|_2#2-3]" +
+		 "[(3-4)s:b|i:a|_3#3-4]");
+	ki.addDoc(fd);
+
+	// Commit!
+	ki.commit();
+	fd = new FieldDocument();
+	fd.addString("ID", "doc-4");
+	fd.addString("UID", "4");
+	fd.addTV("base",
+		 "aba",
+		 "[(0-1)s:a|i:a|_0#0-1|-:t$<i>3]" +
+		 "[(1-2)s:b|i:b|_1#1-2]" +
+		 "[(2-3)s:a|i:c|_2#2-3]");
+	ki.addDoc(fd);
+
+	// Commit!
+	ki.commit();
+
+	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("[{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());
+	assertEquals("aba[{2:b}]", kr.getMatch(3).getSnippetBrackets());
+
+	assertEquals("[{1:a}]ba", kr.getMatch(4).getSnippetBrackets());
+	assertEquals("a[{2:b}]a", kr.getMatch(5).getSnippetBrackets());
+	assertEquals("ab[{1:a}]", kr.getMatch(6).getSnippetBrackets());
+
+	assertEquals("[{1:a}]bab", kr.getMatch(7).getSnippetBrackets());
+	assertEquals("a[{2:b}]ab", kr.getMatch(8).getSnippetBrackets());
+	assertEquals("ab[{1:a}]b", kr.getMatch(9).getSnippetBrackets());
+	assertEquals("aba[{2:b}]", kr.getMatch(10).getSnippetBrackets());
+
+	assertEquals("[{1:a}]ba", kr.getMatch(11).getSnippetBrackets());
+	assertEquals("a[{2:b}]a", kr.getMatch(12).getSnippetBrackets());
+	assertEquals("ab[{1:a}]", kr.getMatch(13).getSnippetBrackets());
+
+
+	kq = new KorapQuery("base");
+	q = (SpanQuery) kq.or(kq._(1, kq.seg("i:a"))).or(kq._(2, kq.seg("i:c"))).toQuery();
+	KorapSearch qs = new KorapSearch(q);
+	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("[{1:a}]b ...", kr.getMatch(0).getSnippetBrackets());
+	assertEquals("... b[{2:a}]b", kr.getMatch(1).getSnippetBrackets());
+	assertEquals("... a[{1:b}]", kr.getMatch(2).getSnippetBrackets());
+	assertEquals("[{1:a}]b ...", kr.getMatch(3).getSnippetBrackets());
+	assertEquals("... b[{2:a}]", kr.getMatch(4).getSnippetBrackets());
+	assertEquals("[{1:a}]b ...", kr.getMatch(5).getSnippetBrackets());
+	assertEquals("... b[{2:a}]b", kr.getMatch(6).getSnippetBrackets());
+	assertEquals("... a[{1:b}]", kr.getMatch(7).getSnippetBrackets());
+	assertEquals("[{1:a}]b ...", kr.getMatch(8).getSnippetBrackets());
+	assertEquals("... b[{2:a}]", kr.getMatch(9).getSnippetBrackets());
+
+	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("[{1:a}] ...", kr.getMatch(0).getSnippetBrackets());
+	assertEquals("... [{2:a}] ...", kr.getMatch(1).getSnippetBrackets());
+	assertEquals("... [{1:b}]", kr.getMatch(2).getSnippetBrackets());
+	assertEquals("[{1:a}] ...", kr.getMatch(3).getSnippetBrackets());
+	assertEquals("... [{2:a}]", kr.getMatch(4).getSnippetBrackets());
+	assertEquals("[{1:a}] ...", kr.getMatch(5).getSnippetBrackets());
+	assertEquals("... [{2:a}] ...", kr.getMatch(6).getSnippetBrackets());
+	assertEquals("... [{1:b}]", kr.getMatch(7).getSnippetBrackets());
+	assertEquals("[{1:a}] ...", kr.getMatch(8).getSnippetBrackets());
+	assertEquals("... [{2:a}]", kr.getMatch(9).getSnippetBrackets());
+
+	q = (SpanQuery) kq._(3, kq.or(kq._(1, kq.seg("i:a"))).or(kq._(2, kq.seg("i:c")))).toQuery();
+	qs = new KorapSearch(q);
+	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("[{3:{1:a}}] ...", kr.getMatch(0).getSnippetBrackets());
+	assertEquals("... [{3:{2:a}}] ...", kr.getMatch(1).getSnippetBrackets());
+	assertEquals("... [{3:{1:b}}]", kr.getMatch(2).getSnippetBrackets());
+	assertEquals("[{3:{1:a}}] ...", kr.getMatch(3).getSnippetBrackets());
+	assertEquals("... [{3:{2:a}}]", kr.getMatch(4).getSnippetBrackets());
+	assertEquals("[{3:{1:a}}] ...", kr.getMatch(5).getSnippetBrackets());
+	assertEquals("... [{3:{2:a}}] ...", kr.getMatch(6).getSnippetBrackets());
+	assertEquals("... [{3:{1:b}}]", kr.getMatch(7).getSnippetBrackets());
+	assertEquals("[{3:{1:a}}] ...", kr.getMatch(8).getSnippetBrackets());
+	assertEquals("... [{3:{2:a}}]", kr.getMatch(9).getSnippetBrackets());
+    };
 };
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 c0e6b05..347f4ee 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestMatchIdentifier.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestMatchIdentifier.java
@@ -102,7 +102,7 @@
 	KorapMatch km = kr.match(0);
 
 	assertEquals("SnippetBrackets (0)", "... bcabca[{2:b{a}}]c", km.snippetBrackets());
-	assertEquals("ID (0)", "match-c1!d1-p7-9(0)8-8(2)7-8", km.getID());
+	assertEquals("ID (0)", "match-c1!d1-p7-9(2)7-8(0)8-8", km.getID());
     };
 
     @Test
diff --git a/src/test/java/de/ids_mannheim/korap/query/TestKorapQuery.java b/src/test/java/de/ids_mannheim/korap/query/TestKorapQuery.java
index 0f4afdd..ffe98e5 100644
--- a/src/test/java/de/ids_mannheim/korap/query/TestKorapQuery.java
+++ b/src/test/java/de/ids_mannheim/korap/query/TestKorapQuery.java
@@ -145,7 +145,7 @@
     public void KorapShrinkQuery3 () {
 	KorapQuery kq = new KorapQuery("field");
 	SpanQuery sq = kq.shrink(1, kq._(1, kq.seq(kq.tag("np"), kq._(kq.seg("test").without("no"))))).toQuery();
-	assertEquals("shrink(1: {1: spanNext(<field:np />, {0: spanNot(field:test, field:no)})})", sq.toString());
+	assertEquals("shrink(1: {1: spanNext(<field:np />, {0: spanNot(field:test, field:no, 0, 0)})})", sq.toString());
     };
 
     @Test
diff --git a/src/test/java/de/ids_mannheim/korap/query/TestSpanSegmentQuery.java b/src/test/java/de/ids_mannheim/korap/query/TestSpanSegmentQuery.java
index 57a9288..7717f84 100644
--- a/src/test/java/de/ids_mannheim/korap/query/TestSpanSegmentQuery.java
+++ b/src/test/java/de/ids_mannheim/korap/query/TestSpanSegmentQuery.java
@@ -34,10 +34,10 @@
 	assertEquals("spanSegment(field:a, field:b)", ssquery.toQuery().toString());
 
 	ssquery.without("c");
-	assertEquals("spanNot(spanSegment(field:a, field:b), field:c)", ssquery.toQuery().toString());
+	assertEquals("spanNot(spanSegment(field:a, field:b), field:c, 0, 0)", ssquery.toQuery().toString());
 
 	ssquery.without("d");
-	assertEquals("spanNot(spanSegment(field:a, field:b), spanOr([field:c, field:d]))", ssquery.toQuery().toString());
+	assertEquals("spanNot(spanSegment(field:a, field:b), spanOr([field:c, field:d]), 0, 0)", ssquery.toQuery().toString());
     };
 
 
@@ -62,11 +62,11 @@
 
 	ssquery.without(new SpanRegexQueryWrapper("field", "x.?y"));
 
-	assertEquals("spanNot(spanSegment(spanSegment(spanSegment(spanSegment(field:a, SpanMultiTermQueryWrapper(field:/a.*b/)), field:c), field:d), field:e), SpanMultiTermQueryWrapper(field:/x.?y/))", ssquery.toQuery().toString());
+	assertEquals("spanNot(spanSegment(spanSegment(spanSegment(spanSegment(field:a, SpanMultiTermQueryWrapper(field:/a.*b/)), field:c), field:d), field:e), SpanMultiTermQueryWrapper(field:/x.?y/), 0, 0)", ssquery.toQuery().toString());
 
 	ssquery.without(new SpanRegexQueryWrapper("field", "z{5,9}"));
 
-	assertEquals("spanNot(spanSegment(spanSegment(spanSegment(spanSegment(field:a, SpanMultiTermQueryWrapper(field:/a.*b/)), field:c), field:d), field:e), spanOr([SpanMultiTermQueryWrapper(field:/x.?y/), SpanMultiTermQueryWrapper(field:/z{5,9}/)]))", ssquery.toQuery().toString());
+	assertEquals("spanNot(spanSegment(spanSegment(spanSegment(spanSegment(field:a, SpanMultiTermQueryWrapper(field:/a.*b/)), field:c), field:d), field:e), spanOr([SpanMultiTermQueryWrapper(field:/x.?y/), SpanMultiTermQueryWrapper(field:/z{5,9}/)]), 0, 0)", ssquery.toQuery().toString());
 
     };
 
diff --git a/src/test/java/de/ids_mannheim/korap/search/TestKorapResult.java b/src/test/java/de/ids_mannheim/korap/search/TestKorapResult.java
new file mode 100644
index 0000000..10ca9bc
--- /dev/null
+++ b/src/test/java/de/ids_mannheim/korap/search/TestKorapResult.java
@@ -0,0 +1,92 @@
+import java.util.*;
+import java.io.IOException;
+
+import org.apache.lucene.search.spans.SpanQuery;
+
+import de.ids_mannheim.korap.KorapIndex;
+import de.ids_mannheim.korap.KorapQuery;
+import de.ids_mannheim.korap.KorapResult;
+import de.ids_mannheim.korap.KorapSearch;
+import de.ids_mannheim.korap.KorapMatch;
+import de.ids_mannheim.korap.index.FieldDocument;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.JsonNode;
+
+import static de.ids_mannheim.korap.Test.*;
+
+import static org.junit.Assert.*;
+import org.junit.Test;
+import org.junit.Ignore;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
+
+@RunWith(JUnit4.class)
+public class TestKorapResult {
+
+    @Test
+    public void checkJSONResult () throws IOException  {
+	KorapIndex ki = new KorapIndex();
+	FieldDocument fd = new FieldDocument();
+	fd.addString("ID", "doc-1");
+	fd.addString("UID", "1");
+	fd.addTV("base",
+		 "abab",
+		 "[(0-1)s:a|i:a|_0#0-1|-:t$<i>4]" +
+		 "[(1-2)s:b|i:b|_1#1-2]" +
+		 "[(2-3)s:a|i:c|_2#2-3]" +
+		 "[(3-4)s:b|i:a|_3#3-4]");
+	ki.addDoc(fd);
+	fd = new FieldDocument();
+	fd.addString("ID", "doc-2");
+	fd.addString("UID", "2");
+	fd.addTV("base",
+		 "aba",
+		 "[(0-1)s:a|i:a|_0#0-1|-:t$<i>3]" +
+		 "[(1-2)s:b|i:b|_1#1-2]" +
+		 "[(2-3)s:a|i:c|_2#2-3]");
+	ki.addDoc(fd);
+
+	// Commit!
+	ki.commit();
+
+	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());
+
+	ObjectMapper mapper = new ObjectMapper();
+	JsonNode res = mapper.readTree(kr.toJSON());
+	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());
+	assertEquals(25, res.at("/itemsPerPage").asInt());
+	assertEquals("token", res.at("/context/left/0").asText());
+	assertEquals(6, res.at("/context/left/1").asInt());
+	assertEquals("token", res.at("/context/right/0").asText());
+	assertEquals(6, res.at("/context/right/1").asInt());
+
+	assertEquals("base", res.at("/matches/0/field").asText());
+	/*
+	  Probably a Jackson bug
+	  assertTrue(res.at("/matches/0/startMore").asBoolean());
+	  assertTrue(res.at("/matches/0/endMore").asBoolean());
+	*/
+	assertEquals(1, res.at("/matches/0/UID").asInt());
+	assertEquals("doc-1", res.at("/matches/0/docID").asText());
+	assertEquals("match-doc-1-p0-1(1)0-0", res.at("/matches/0/ID").asText());
+	assertEquals("<span class=\"context-left\"></span><span class=\"match\"><em class=\"class-1 level-0\">a</em></span><span class=\"context-right\">bab</span>", res.at("/matches/0/snippet").asText());
+
+	assertEquals("base", res.at("/matches/6/field").asText());
+	/*
+	  Probably a Jackson bug
+	  assertEquals(true, res.at("/matches/6/startMore").asBoolean());
+	  assertEquals(true, res.at("/matches/6/endMore").asBoolean());
+	*/
+	assertEquals(2, res.at("/matches/6/UID").asInt());
+	assertEquals("doc-2", res.at("/matches/6/docID").asText());
+	assertEquals("match-doc-2-p2-3(1)2-2", res.at("/matches/6/ID").asText());
+	assertEquals("<span class=\"context-left\">ab</span><span class=\"match\"><em class=\"class-1 level-0\">a</em></span><span class=\"context-right\"></span>", res.at("/matches/6/snippet").asText());
+
+    };
+};
