diff --git a/src/main/java/de/ids_mannheim/korap/query/spans/AttributeSpans.java b/src/main/java/de/ids_mannheim/korap/query/spans/AttributeSpans.java
index 0966e1d..6a32009 100644
--- a/src/main/java/de/ids_mannheim/korap/query/spans/AttributeSpans.java
+++ b/src/main/java/de/ids_mannheim/korap/query/spans/AttributeSpans.java
@@ -56,6 +56,7 @@
 	@Override
 	public boolean next() throws IOException {		
 		isStartEnumeration=false;
+		matchPayload.clear();
 		return advance();
 	}
 
diff --git a/src/main/java/de/ids_mannheim/korap/query/spans/CandidateSpans.java b/src/main/java/de/ids_mannheim/korap/query/spans/CandidateSpans.java
index 9d0352d..deac119 100644
--- a/src/main/java/de/ids_mannheim/korap/query/spans/CandidateSpans.java
+++ b/src/main/java/de/ids_mannheim/korap/query/spans/CandidateSpans.java
@@ -9,7 +9,7 @@
 /** A span kept as a candidate for matching with another Span
  * 	@author margaretha
  * */
-public class CandidateSpans implements Comparable<CandidateSpans>{	
+public class CandidateSpans implements Comparable<CandidateSpans>, Cloneable{	
 	private int doc,start,end;
 	private long cost;
 	private Collection<byte[]> payloads = new ArrayList<>();
@@ -36,6 +36,17 @@
 		}		*/
 	}	
 	
+	@Override
+	protected CandidateSpans clone() throws CloneNotSupportedException {
+		return new CandidateSpans(
+				this.start,
+				this.end,
+				this.doc,
+				this.cost,
+				this.payloads
+		);		
+	}
+	
 	public CandidateSpans(Spans span, int position) throws IOException {
 		this(span);
 		this.position = position;		
diff --git a/src/main/java/de/ids_mannheim/korap/query/spans/RepetitionSpans.java b/src/main/java/de/ids_mannheim/korap/query/spans/RepetitionSpans.java
index 8303956..c4412d9 100644
--- a/src/main/java/de/ids_mannheim/korap/query/spans/RepetitionSpans.java
+++ b/src/main/java/de/ids_mannheim/korap/query/spans/RepetitionSpans.java
@@ -45,6 +45,7 @@
 	@Override
 	public boolean next() throws IOException {
 		isStartEnumeration = false;
+		matchPayload.clear();
 		return advance();
 	}
 
@@ -58,8 +59,7 @@
 				setMatchProperties(matchList.get(0));
 				matchList.remove(0);
 				return true;
-			}
-			matchPayload.clear();
+			}			
 			matchCost = 0;
 			
 			List<CandidateSpans> adjacentSpans = collectAdjacentSpans();
@@ -86,7 +86,7 @@
 			if (firstSpans.start() > prevSpan.getEnd()){
 				break;
 			}
-			else {
+			else if (firstSpans.start() == prevSpan.getEnd()){
 				prevSpan = new CandidateSpans(firstSpans);
 				adjacentSpans.add(prevSpan);
 			}
@@ -105,8 +105,14 @@
 			int endIndex;
 			while ((endIndex = j+i-1) < adjacentSpans.size()){
 				startSpan = adjacentSpans.get(j);
-				if (i == 1){
-					matchList.add(startSpan);
+				if (i == 1){					
+					try {
+						matchSpan = startSpan.clone();
+						matchSpan.setPayloads(computeMatchPayload(adjacentSpans, 0, endIndex-1));
+						matchList.add(matchSpan);		
+					} catch (CloneNotSupportedException e) {
+						e.printStackTrace();
+					}
 				}
 				else {
 					endSpan = adjacentSpans.get(endIndex);														
@@ -114,8 +120,8 @@
 							startSpan.getStart(), 
 							endSpan.getEnd(), 
 							startSpan.getDoc(), 
-							computeMatchCost(adjacentSpans, i, endIndex), 
-							computeMatchPayload(adjacentSpans, i, endIndex));
+							computeMatchCost(adjacentSpans, 0, endIndex), 
+							computeMatchPayload(adjacentSpans, 0, endIndex));
 					
 					//System.out.println("c:"+matchSpan.getCost() +" p:"+ matchSpan.getPayloads().size());
 					//System.out.println(startSpan.getStart() +","+endSpan.getEnd());
@@ -146,6 +152,7 @@
 			int start, int end){		
 		long matchCost = 0;
 		for (int i=start; i<= end; i++){
+			CandidateSpans c = adjacentSpans.get(i);
 			matchCost += adjacentSpans.get(i).getCost();
 		}		
 		return matchCost;
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 5d3e0b5..04e1d3f 100644
--- a/src/test/java/de/ids_mannheim/korap/highlight/TestClass.java
+++ b/src/test/java/de/ids_mannheim/korap/highlight/TestClass.java
@@ -7,9 +7,11 @@
 import java.io.FileReader;
 import java.io.IOException;
 
+import org.apache.lucene.search.spans.SpanQuery;
 import org.junit.Test;
 
 import de.ids_mannheim.korap.KorapIndex;
+import de.ids_mannheim.korap.KorapMatch;
 import de.ids_mannheim.korap.KorapQuery;
 import de.ids_mannheim.korap.KorapResult;
 import de.ids_mannheim.korap.KorapSearch;
@@ -56,6 +58,36 @@
 				kr.getMatch(1).getSnippetBrackets());
 	}
 	
+	@Test
+	public void queryJSONpoly4() throws QueryException, IOException {
+		
+		String jsonPath = getClass().getResource("/queries/poly4.json").getFile();
+		String jsonQuery = readFile(jsonPath);
+		SpanQueryWrapper sqwi = new KorapQuery("tokens").fromJSON(
+				jsonQuery
+		);
+		SpanQuery sq = sqwi.toQuery();
+		System.out.println(sq.toString());
+		
+		ki = new KorapIndex();
+	    ki.addDocFile(
+	    	getClass().getResource("/wiki/SSS-09803.json.gz").getFile(),true);
+	    
+	    ki.commit();
+		kr = ki.search(sq, (short) 10);
+		
+		assertEquals(827, kr.getTotalResults());
+		assertEquals(3, kr.getMatch(0).getStartPos());
+		assertEquals(5, kr.getMatch(0).getEndPos());
+		
+		for (KorapMatch km : kr.getMatches()){
+			System.out.println(km.getStartPos() +","+km.getEndPos()+" "
+					+km.getSnippetBrackets()
+			);
+		}
+	}
+	
+	
 	private String readFile(String path) {
 		StringBuilder sb = new StringBuilder();
 		try {
diff --git a/src/test/resources/queries/poly4.json b/src/test/resources/queries/poly4.json
new file mode 100644
index 0000000..8f1f1ec
--- /dev/null
+++ b/src/test/resources/queries/poly4.json
@@ -0,0 +1,85 @@
+{
+   "@context" : "http://ids-mannheim.de/ns/KorAP/json-ld/v0.2/context.jsonld",
+   "collection" : {},
+   "collections" : [
+      {
+         "@type" : "korap:meta-filter",
+         "@value" : {
+            "@field" : "korap:field#corpusID",
+            "@type" : "korap:term",
+            "@value" : "WPD"
+         }
+      }
+   ],
+   "errors" : [],
+   "messages" : [
+      [
+         303,
+         "Deprecated 2014-07-24: 'min' and 'max' to be supported until 3 months from deprecation date."
+      ],
+      [
+         303,
+         "Deprecated 2014-10-07: 'class' only to be supported until 3 months from deprecation date. Classes are now defined using the 'classOut' attribute."
+      ],
+      [
+         303,
+         "Deprecated 2014-07-24: 'min' and 'max' to be supported until 3 months from deprecation date."
+      ]
+   ],
+   "meta" : {},
+   "query" : {
+      "@type" : "korap:group",
+      "boundary" : {
+         "@type" : "korap:boundary",
+         "max" : 3,
+         "min" : 1
+      },
+      "max" : 3,
+      "min" : 1,
+      "operands" : [
+         {
+            "@type" : "korap:group",
+            "operands" : [
+               {
+                  "@type" : "korap:group",
+                  "class" : 1,
+                  "classOut" : 1,
+                  "operands" : [
+                     {
+                        "@type" : "korap:token",
+                        "wrap" : {
+                           "@type" : "korap:term",
+                           "foundry" : "cnx",
+                           "key" : "N",
+                           "layer" : "p",
+                           "match" : "match:eq"
+                        }
+                     }
+                  ],
+                  "operation" : "operation:class"
+               },
+               {
+                  "@type" : "korap:group",
+                  "boundary" : {
+                     "@type" : "korap:boundary",
+                     "max" : 5,
+                     "min" : 1
+                  },
+                  "max" : 5,
+                  "min" : 1,
+                  "operands" : [
+                     {
+                        "@type" : "korap:token"
+                     }
+                  ],
+                  "operation" : "operation:repetition"
+               }
+            ],
+            "operation" : "operation:sequence"
+         }
+      ],
+      "operation" : "operation:repetition"
+   },
+   "warnings" : []
+}
+  
\ No newline at end of file
