diff --git a/CHANGES b/CHANGES
index 2060909..24e2fe4 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,5 +1,7 @@
 0.30.3 2014-02-20
         - Return json request in response if given (diewald)
+	- [bugfix] ClassSpans and WithinSpans check skipTo in advance now (diewald)
+	- Performance improvements (diewald)
 
 0.30.2 2014-02-14
         - [bugfix] wrapper uses correct distance constraint
diff --git a/src/main/java/de/ids_mannheim/korap/KorapIndex.java b/src/main/java/de/ids_mannheim/korap/KorapIndex.java
index 88e2fd3..f9a758a 100644
--- a/src/main/java/de/ids_mannheim/korap/KorapIndex.java
+++ b/src/main/java/de/ids_mannheim/korap/KorapIndex.java
@@ -131,6 +131,10 @@
     // Logger
     private final static Logger log = LoggerFactory.getLogger(KorapIndex.class);
 
+    // This advices the java compiler to ignore all loggings
+    public static final boolean DEBUG = false;
+
+
     public KorapIndex () throws IOException {
         this((Directory) new RAMDirectory());
     };
@@ -545,10 +549,12 @@
 	    regex.append("(.){1,}|_[0-9]+");
 
 
-	    log.trace("The final regexString is {}", regex.toString());
+	    if (DEBUG)
+		log.trace("The final regexString is {}", regex.toString());
 	    RegExp regexObj = new RegExp(regex.toString(), RegExp.COMPLEMENT);
 	    fst = new CompiledAutomaton(regexObj.toAutomaton());
-	    log.trace("The final regexObj is {}", regexObj.toString());
+	    if (DEBUG)
+		log.trace("The final regexObj is {}", regexObj.toString());
 	};
 
 
@@ -578,7 +584,8 @@
 		    continue;
 
 		// We've found the correct document! Hurray!
-		log.trace("We've found a matching document");
+		if (DEBUG)
+		    log.trace("We've found a matching document");
 		HashSet<String> fieldsToLoadLocal = new HashSet<>(fieldsToLoad);
 		fieldsToLoadLocal.add(field);
 
@@ -594,7 +601,8 @@
 		match.setLocalDocID(localDocID);
 		match.populateDocument(doc, field, fieldsToLoadLocal);
 
-		log.trace("The document has the id '{}'", match.getDocID());
+		if (DEBUG)
+		    log.trace("The document has the id '{}'", match.getDocID());
 
 		if (!info) break;
 
@@ -606,7 +614,8 @@
 						     (Bits) bitset,
 						     new HashMap<Term, TermContext>());
 
-		    log.trace("Now search for {}", sentence.toString());
+		    if (DEBUG)
+			log.trace("Now search for {}", sentence.toString());
 
 		    int newStart = -1, newEnd = -1;
 
@@ -633,7 +642,10 @@
 
 		    // We have a new match surrounding
 		    if (newStart > -1 && newEnd > -1) {
-			log.trace("New match spans from {}-{}", newStart, newEnd);
+			if (DEBUG)
+			    log.trace("New match spans from {}-{}",
+				      newStart,
+				      newEnd);
 			match.setStartPos(newStart);
 			match.setEndPos(newEnd);
 		    };
@@ -688,13 +700,14 @@
 
 			if (pos >= match.getStartPos() && pos < match.getEndPos()) {
 
-			    log.trace(
-			        ">> {}: {}-{}-{}",
-				termString, 
-				docs.freq(),
-				pos,
-				docs.getPayload()
-			    );
+			    if (DEBUG)
+				log.trace(
+					  ">> {}: {}-{}-{}",
+					  termString, 
+					  docs.freq(),
+					  pos,
+					  docs.getPayload()
+					  );
 
 			    BytesRef payload = docs.getPayload();
 
@@ -709,7 +722,8 @@
 			    };
 			    TermInfo ti = new TermInfo(termString, pos, bbTerm).analyze();
 			    if (ti.getEndPos() < match.getEndPos()) {
-				log.trace("Add {}", ti.toString());
+				if (DEBUG)
+				    log.trace("Add {}", ti.toString());
 				termList.add(ti);
 			    };
 			};
@@ -718,7 +732,8 @@
 
 		// Add annotations based on the retrieved infos
 		for (TermInfo t : termList.getTerms()) {
-		    log.trace("Add term {}/{}:{} to {}({})-{}({})",
+		    if (DEBUG)
+			log.trace("Add term {}/{}:{} to {}({})-{}({})",
 			      t.getFoundry(),
 			      t.getLayer(),
 			      t.getValue(),
@@ -800,7 +815,8 @@
 
 
     public KorapResult search (KorapCollection collection, KorapSearch ks) {
-	log.trace("Start search");
+	if (DEBUG)
+	    log.trace("Start search");
 
 	this.termContexts = new HashMap<Term, TermContext>();
 
@@ -869,7 +885,8 @@
 
 		for (; i < hits; i++) {
 
-		    log.trace("Match Nr {}/{}", i, count);
+		    if (DEBUG)
+			log.trace("Match Nr {}/{}", i, count);
 
 		    // There are no more spans to find
 		    if (spans.next() != true)
@@ -910,7 +927,8 @@
 			    ByteBuffer bb = ByteBuffer.allocate(10);
 			    for (byte[] b : spans.getPayload()) {
 
-				log.trace("Found a payload!!! with length {}", b.length);
+				if (DEBUG)
+				    log.trace("Found a payload!!! with length {}", b.length);
 
 				// Todo element searches!
 
@@ -923,7 +941,10 @@
 				    int end = bb.getInt() -1;
 				    byte number = bb.get();
 
-				    log.trace("Have a payload: {}-{}", start, end);
+				    if (DEBUG)
+					log.trace("Have a payload: {}-{}",
+						  start,
+						  end);
 				    match.addHighlight(start, end, number);
 				}
 
@@ -944,9 +965,10 @@
 				    if (bb.getInt(4) > match.potentialEndPosChar)
 					match.potentialEndPosChar = bb.getInt(4);
 
-				    log.trace("Element payload from {} to {}",
-					      match.potentialStartPosChar,
-					      match.potentialEndPosChar);
+				    if (DEBUG)
+					log.trace("Element payload from {} to {}",
+						  match.potentialStartPosChar,
+						  match.potentialEndPosChar);
 				}
 
 				else if (b.length == 4) {
@@ -970,7 +992,9 @@
 		    match.internalDocID = docID;
 		    match.populateDocument(doc, field, fieldsToLoadLocal);
 
-		    log.trace("I've got a match in {} of {}", match.getDocID(), count);
+		    if (DEBUG)
+			log.trace("I've got a match in {} of {}",
+				  match.getDocID(), count);
 
 		    atomicMatches.add(match);
 		};
diff --git a/src/main/java/de/ids_mannheim/korap/KorapMatch.java b/src/main/java/de/ids_mannheim/korap/KorapMatch.java
index e8f062e..a99813b 100644
--- a/src/main/java/de/ids_mannheim/korap/KorapMatch.java
+++ b/src/main/java/de/ids_mannheim/korap/KorapMatch.java
@@ -37,6 +37,7 @@
  */
 @JsonInclude(Include.NON_NULL)
 public class KorapMatch extends KorapDocument {
+
     ObjectMapper mapper = new ObjectMapper();
 
     // Snippet information
@@ -92,6 +93,9 @@
     // Logger
     private final static Logger log = LoggerFactory.getLogger(KorapMatch.class);
 
+    // This advices the java compiler to ignore all loggings
+    public static final boolean DEBUG = false;
+
     /**
      * Constructs a new KorapMatch object.
      * TODo: Maybe that's not necessary!
@@ -203,7 +207,9 @@
 
 	if (this.highlight == null)
 	    this.highlight = new ArrayList<Highlight>(16);
-	log.trace("Add highlight {} from {} to {}", hl.number, hl.start, hl.end);
+
+	if (DEBUG)
+	    log.trace("Add highlight {} from {} to {}", hl.number, hl.start, hl.end);
 
 	this._reset();
 
@@ -376,13 +382,15 @@
 	    return false;
 	};
 
-	log.trace("Start highlight processing ...");
+	if (DEBUG)
+	    log.trace("Start highlight processing ...");
 
 	PositionsToOffset pto = this.positionsToOffset;
 	pto.add(this.localDocID, this.getStartPos());
 	pto.add(this.localDocID, this.getEndPos() - 1);
 
-	log.trace("PTO now has start and end positions {}-{}", this.getStartPos(), this.getEndPos());
+	if (DEBUG)
+	    log.trace("PTO now has start and end positions {}-{}", this.getStartPos(), this.getEndPos());
 
 	if (this.highlight != null) {
 	    for (Highlight hl : this.highlight) {
@@ -391,7 +399,8 @@
 	    };
 	};
 	
-	log.trace("All highlights are added");
+	if (DEBUG)
+	    log.trace("All highlights are added");
 
 	// Get the list of spans for matches and highlighting
 	if (this.span == null || this.span.size() == 0) {
@@ -665,7 +674,8 @@
 	    for (int s : this.balanceStack) {
 		sb.append('[').append(s).append(']');
 	    };
-	    log.trace(sb.toString());
+	    if (DEBUG)
+		log.trace(sb.toString());
 
 	    // class number of the last element
 	    int eold = this.balanceStack.removeLast();
@@ -676,9 +686,14 @@
 		// Retrieve last combinator on stack
 		lastComb = this.combine.peekLast();
 
-		log.trace("Closing element is unbalanced - {} " +
-			  "!= {} with lastComb {}|{}|{}",
-			  eold, number, lastComb.type, lastComb.number, lastComb.characters);
+		if (DEBUG)
+		    log.trace("Closing element is unbalanced - {} " +
+			      "!= {} with lastComb {}|{}|{}",
+			      eold,
+			      number,
+			      lastComb.type,
+			      lastComb.number,
+			      lastComb.characters);
 
 		// combinator is opening and the number is not equal to the last
 		// element on the balanceStack
@@ -691,7 +706,8 @@
 		// combinator is either closing (??) or another opener
 		else {
 
-		    log.trace("close element a) {}", eold);
+		    if (DEBUG)
+			log.trace("close element a) {}", eold);
 
 		    // Add a closer for the old element (this has following elements)
 		    this.combine.add(new HighlightCombinatorElement((byte) 2, eold, false));
@@ -707,8 +723,10 @@
 	    // Get last combinator on the stack
 	    lastComb = this.combine.peekLast();
 
-	    log.trace("LastComb: " + lastComb.type + '|' + lastComb.number + '|' + lastComb.characters + " for " + number);
-	    log.trace("Stack for checking 2: {}|{}|{}|{}", lastComb.type, lastComb.number, lastComb.characters, number);
+	    if (DEBUG) {
+		log.trace("LastComb: " + lastComb.type + '|' + lastComb.number + '|' + lastComb.characters + " for " + number);
+		log.trace("Stack for checking 2: {}|{}|{}|{}", lastComb.type, lastComb.number, lastComb.characters, number);
+	    };
 
 	    if (lastComb.type == 1 && lastComb.number == number) {
 		while (lastComb.type == 1 && lastComb.number == number) {
@@ -718,7 +736,8 @@
 		};
 	    }
 	    else {
-		log.trace("close element b) {}", number);
+		if (DEBUG)
+		    log.trace("close element b) {}", number);
 
 		// Add a closer
 		this.combine.add(new HighlightCombinatorElement((byte) 2, number));
@@ -727,7 +746,8 @@
 
 	    // Fetch everything from the tempstack and reopen it
 	    for (int e : tempStack) {
-		log.trace("Reopen element {}", e);
+		if (DEBUG)
+		    log.trace("Reopen element {}", e);
 		combine.add(new HighlightCombinatorElement((byte) 1, e));
 		balanceStack.add(e);
 	    };
@@ -747,7 +767,8 @@
 	int pos = 0;
 	int oldPos = 0;
 
-	log.trace("Create Snippet");
+	if (DEBUG)
+	    log.trace("Create Snippet");
 
 	this.snippetStack = new HighlightCombinator();
 
@@ -792,7 +813,8 @@
 	if (this.processed && this.snippetHTML != null)
 	    return this.snippetHTML;
 
-	log.trace("Create HTML Snippet");
+	if (DEBUG)
+	    log.trace("Create HTML Snippet");
 
 	StringBuilder sb = new StringBuilder();
 
@@ -873,7 +895,8 @@
     // TODO: Not very fast - improve!
     private ArrayList<int[]> _processHighlightStack () {
 
-	log.trace("Create Stack");
+	if (DEBUG)
+	    log.trace("Create Stack");
 
 	LinkedList<int[]> openList  = new LinkedList<int[]>();
 	LinkedList<int[]> closeList = new LinkedList<int[]>();
@@ -914,7 +937,8 @@
 	    startPosChar,
 	    endPosChar;
 
-	log.trace("Create Spans");
+	if (DEBUG)
+	    log.trace("Create Spans");
 
 	int ldid = this.localDocID;
 
@@ -929,14 +953,17 @@
 	    startPosChar = potentialStartPosChar;
 
 	endPosChar = this.positionsToOffset.end(ldid, this.endPos - 1);
-	log.trace("startPosChar for PTO is {}({})", startPosChar, this.startPos);
-	log.trace("endPosChar for PTO is {}({})", endPosChar, this.endPos);
+	if (DEBUG) {
+	    log.trace("startPosChar for PTO is {}({})", startPosChar, this.startPos);
+	    log.trace("endPosChar for PTO is {}({})", endPosChar, this.endPos);
+	};
 
 
 	if (endPosChar < potentialEndPosChar)
 	    endPosChar = potentialEndPosChar;
 
-	log.trace("Matchposition: {}-{}", startPosChar, endPosChar);
+	if (DEBUG)
+	    log.trace("Matchposition: {}-{}", startPosChar, endPosChar);
 
 	// left context
 	if (leftTokenContext) {
@@ -952,7 +979,12 @@
 	        ldid,
 		this.endPos + this.rightContextOffset - 1
 	    );
-	    log.trace("For endOffset {} ({}+{}-1) pto returns {}", (this.endPos + this.rightContextOffset - 1), this.endPos, this.rightContextOffset, endOffsetChar);
+	    if (DEBUG)
+		log.trace("For endOffset {} ({}+{}-1) pto returns {}",
+			  (this.endPos + this.rightContextOffset - 1),
+			  this.endPos,
+			  this.rightContextOffset,
+			  endOffsetChar);
 	}
 	else {
 	    if (endPosChar == -1) {
@@ -979,7 +1011,12 @@
 	if (endOffsetChar != -1 && endOffsetChar < endPosChar)
 	    endOffsetChar = endPosChar;
 
-	log.trace("Offsetposition {} till {} with contexts {} and {}", startOffsetChar, endOffsetChar, leftContextOffset, rightContextOffset);
+	if (DEBUG)
+	    log.trace("Offsetposition {} till {} with contexts {} and {}",
+		      startOffsetChar,
+		      endOffsetChar,
+		      leftContextOffset,
+		      rightContextOffset);
 
 	if (endOffsetChar > -1 && endOffsetChar < this.getPrimaryDataLength()) {
 	    this.tempSnippet = this.getPrimaryData(startOffsetChar, endOffsetChar);
@@ -996,7 +1033,8 @@
 
 	// Todo: Simplify
 	int[] intArray = new int[]{ startPosChar - startOffsetChar, endPosChar - startOffsetChar, -1, 0};
-	log.trace("IntArray: {}", intArray);
+	if (DEBUG)
+	    log.trace("IntArray: {}", intArray);
 	this.span.add(intArray);
 
 	// highlights
@@ -1016,9 +1054,11 @@
 		    0 // Dummy value for later
 		};
 
-		log.trace("IntArray: {}", intArray);
-		log.trace("PTO-start: {}", start + startOffsetChar);
-		log.trace("PTO-end: {}", end + startOffsetChar);
+		if (DEBUG) {
+		    log.trace("IntArray: {}", intArray);
+		    log.trace("PTO-start: {}", start + startOffsetChar);
+		    log.trace("PTO-end: {}", end + startOffsetChar);
+		};
 
 		this.span.add(intArray);
 	    };
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 f0a155a..66462d2 100644
--- a/src/main/java/de/ids_mannheim/korap/analysis/MultiTermTokenStream.java
+++ b/src/main/java/de/ids_mannheim/korap/analysis/MultiTermTokenStream.java
@@ -48,6 +48,9 @@
 
     private final Logger log = LoggerFactory.getLogger(MultiTermTokenStream.class);
 
+    // This advices the java compiler to ignore all loggings
+    public static final boolean DEBUG = false;
+
     public MultiTermTokenStream () {
 	//	this.offsetAttr   = this.addAttribute(OffsetAttribute.class);
         this.charTermAttr = this.addAttribute(CharTermAttribute.class);
@@ -173,7 +176,8 @@
 
 	BytesRef payload = new BytesRef();
 	if (mt.start != mt.end) {
-	    log.trace("MultiTerm with payload offset: {}-{}", mt.start, mt.end);
+	    if (DEBUG)
+		log.trace("MultiTerm with payload offset: {}-{}", mt.start, mt.end);
 	    payload.append(new BytesRef(int2byte(mt.start)));
 	    payload.append(new BytesRef(int2byte(mt.end)));
 	    /*
@@ -187,11 +191,13 @@
 	// Payload
 	if (mt.payload != null) {
 	    payload.append(mt.payload());
-	    log.trace("Create payload[1] {}", payload.toString());
+	    if (DEBUG)
+		log.trace("Create payload[1] {}", payload.toString());
 	};
 
 	if (payload.length > 0) {
-	    log.trace("Set payload[2] {}", payload.toString());
+	    if (DEBUG)
+		log.trace("Set payload[2] {}", payload.toString());
 	    payloadAttr.setPayload(payload);
 	};
 
@@ -202,7 +208,8 @@
 		sb.append('$').append(payload.toString());
 	    sb.append(']');
 	    sb.append(" with increment ").append(mt.posIncr);
-	    log.trace(sb.toString());
+	    if (DEBUG)
+		log.trace(sb.toString());
 	};
 
 	this.mtIndex++;
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 1fa1b35..cab5410 100644
--- a/src/main/java/de/ids_mannheim/korap/index/PositionsToOffset.java
+++ b/src/main/java/de/ids_mannheim/korap/index/PositionsToOffset.java
@@ -27,6 +27,10 @@
 
     private final static Logger log = LoggerFactory.getLogger(PositionsToOffset.class);
 
+    // This advices the java compiler to ignore all loggings
+    public static final boolean DEBUG = false;
+
+
     private class PositionsToOffsetArray {
 	public int docID;
 	public int pos;
@@ -70,10 +74,14 @@
     };
 
     public void add (PositionsToOffsetArray ptoa) {
-	log.trace("Add positionsToOffsetArray {}/{}", ptoa.docID, ptoa.pos);
+	if (DEBUG)
+	    log.trace("Add positionsToOffsetArray {}/{}", ptoa.docID, ptoa.pos);
 	if (this.processed && this.exists(ptoa))
 	    return;
-	log.trace("Reopen processing");
+
+	if (DEBUG)
+	    log.trace("Reopen processing");
+
 	this.positions.add(ptoa);
 	this.processed = false;
     };
@@ -147,7 +155,8 @@
 	if (processed)
 	    return offsets;
 
-	log.trace("Process offsets");
+	if (DEBUG)
+	    log.trace("Process offsets");
 
 	StringBuilder sb = new StringBuilder().append('_');
 
@@ -179,10 +188,11 @@
 
 		    if (termsEnum.seekExact(term.bytes(), true)) {
 			
-			log.trace("Search for {} in doc {} with pos {}",
-				  term.toString(),
-				  posDoc.docID,
-				  posDoc.pos);
+			if (DEBUG)
+			    log.trace("Search for {} in doc {} with pos {}",
+				      term.toString(),
+				      posDoc.docID,
+				      posDoc.pos);
 
 			// Start an iterator to fetch all payloads of the term
 			DocsAndPositionsEnum docs = termsEnum.docsAndPositions(
@@ -205,7 +215,11 @@
 				offsetArray[1] = bbOffset.getInt();
 				offsets.put(posDoc, offsetArray);
 
-				log.trace("Found {}-{} for {}", offsetArray[0], offsetArray[1], term.toString());
+				if (DEBUG)
+				    log.trace("Found {}-{} for {}",
+					      offsetArray[0],
+					      offsetArray[1],
+					      term.toString());
 			    }
 
 			    else {
diff --git a/src/main/java/de/ids_mannheim/korap/index/SpanInfo.java b/src/main/java/de/ids_mannheim/korap/index/SpanInfo.java
index ffd795f..0314dc1 100644
--- a/src/main/java/de/ids_mannheim/korap/index/SpanInfo.java
+++ b/src/main/java/de/ids_mannheim/korap/index/SpanInfo.java
@@ -17,6 +17,9 @@
 
     // Logger
     private final static Logger log = LoggerFactory.getLogger(KorapMatch.class);
+        // This advices the java compiler to ignore all loggings
+    public static final boolean DEBUG = false;
+
 
     public SpanInfo (PositionsToOffset pto, int localDocID) {
 	this.terms      = new ArrayList<TermInfo>(64);
@@ -46,7 +49,8 @@
 	// Add character offset information to terms that are
 	// missing this information
 	for (TermInfo t : this.terms) {
-	    log.trace("Check offsets for {} and {}", t.getStartPos(), t.getEndPos());
+	    if (DEBUG)
+		log.trace("Check offsets for {} and {}", t.getStartPos(), t.getEndPos());
 	    found = true;
 	    if (t.getStartChar() == -1) {
 		if (this.startChar.containsKey(t.getStartPos()))
@@ -70,7 +74,8 @@
 		    t.getEndChar()
 	        );
 	    else {
-		log.trace("{} can't be found!", t.getAnnotation());
+		if (DEBUG)
+		    log.trace("{} can't be found!", t.getAnnotation());
 		this.pto.add(this.localDocID, t.getStartPos());
 		this.pto.add(this.localDocID, t.getStartPos());
 	    };
diff --git a/src/main/java/de/ids_mannheim/korap/index/TermInfo.java b/src/main/java/de/ids_mannheim/korap/index/TermInfo.java
index b9a894a..cc3d12a 100644
--- a/src/main/java/de/ids_mannheim/korap/index/TermInfo.java
+++ b/src/main/java/de/ids_mannheim/korap/index/TermInfo.java
@@ -13,6 +13,9 @@
 
     // Logger
     private final static Logger log = LoggerFactory.getLogger(KorapMatch.class);
+    // This advices the java compiler to ignore all loggings
+    public static final boolean DEBUG = false;
+
 
     private String foundry, layer, value, term, type, annotation;
     // type can be "term", "pos", "span", "rel-src", "rel-target"
@@ -83,7 +86,8 @@
 
 	// Analyze term value
 	if (ttype != 1) {
-	    log.trace("Check {} for {}", tterm, prefixRegex.toString());
+	    if (DEBUG)
+		log.trace("Check {} for {}", tterm, prefixRegex.toString());
 	    matcher = prefixRegex.matcher(tterm);
 	    if (matcher.matches() && matcher.groupCount() == 3) {
 		this.annotation = tterm;
diff --git a/src/main/java/de/ids_mannheim/korap/query/SpanElementQuery.java b/src/main/java/de/ids_mannheim/korap/query/SpanElementQuery.java
index e21910e..ad97152 100644
--- a/src/main/java/de/ids_mannheim/korap/query/SpanElementQuery.java
+++ b/src/main/java/de/ids_mannheim/korap/query/SpanElementQuery.java
@@ -27,7 +27,7 @@
     private String field;
     
     /** Constructor. */
-    public SpanElementQuery(String field, String term) {
+    public SpanElementQuery (String field, String term) {
 	StringBuilder sb = new StringBuilder("<>:");
 	this.field = field;
 	this.elementStr = term;
@@ -94,43 +94,41 @@
 		final Terms terms = fields.terms(element.field());
 		if (terms != null) {
 		    final TermsEnum termsEnum = terms.iterator(null);
-		    if (termsEnum.seekExact(element.bytes(), true)) { 
+		    if (termsEnum.seekExact(element.bytes(), true))
 			state = termsEnum.termState();
-		    } else {
+		    else
 			state = null;
-		    }
-		} else {
-		    state = null;
 		}
-	    } else {
-		state = null;
+		else
+		    state = null;
 	    }
-	} else {
+	    else
+		state = null;
+	}
+	else
 	    state = termContext.get(context.ord);
-	};
-    
-	if (state == null) { // term is not present in that reader
+
+	
+	if (state == null) // term is not present in that reader
 	    return ElementSpans.EMPTY_ELEMENT_SPANS;
-	};
     
 	final TermsEnum termsEnum = context.reader().terms(element.field()).iterator(null);
 	termsEnum.seekExact(element.bytes(), state);
     
 	final DocsAndPositionsEnum postings = termsEnum.docsAndPositions(acceptDocs, null, DocsAndPositionsEnum.FLAG_PAYLOADS);
 
-	if (postings != null) {
+	if (postings != null)
 	    return new ElementSpans(postings, element);
-	};
 
 	// element does exist, but has no positions
 	throw new IllegalStateException("field \"" + element.field() + "\" was indexed without position data; cannot run SpanElementQuery (element=" + element.text() + ")");
-    }
+    };
 
-	public String getElementStr() {
-		return elementStr;
-	}
+    public String getElementStr () {
+	return elementStr;
+    };
 
-	public void setElementStr(String elementStr) {
-		this.elementStr = elementStr;
-	};
+    public void setElementStr (String elementStr) {
+	this.elementStr = elementStr;
+    };
 };
diff --git a/src/main/java/de/ids_mannheim/korap/query/spans/ClassSpans.java b/src/main/java/de/ids_mannheim/korap/query/spans/ClassSpans.java
index e52ee73..1838f2e 100644
--- a/src/main/java/de/ids_mannheim/korap/query/spans/ClassSpans.java
+++ b/src/main/java/de/ids_mannheim/korap/query/spans/ClassSpans.java
@@ -26,6 +26,8 @@
     private byte number;
     private ByteBuffer bb;
     private SpanQuery highlight;
+    private Boolean hasmorespans = false;
+
     private final Logger log = LoggerFactory.getLogger(ClassSpans.class);
 
     public ClassSpans (SpanQuery highlight, AtomicReaderContext context, Bits acceptDocs, Map<Term,TermContext> termContexts, byte number) throws IOException {
@@ -69,6 +71,7 @@
 	log.trace("Forward next");
 
 	if (spans.next()) {
+	    hasmorespans = true;
 
 	    highlightedPayload.clear();
 
@@ -92,13 +95,16 @@
 	    highlightedPayload.add(bb.array());
 	    return true;
 	};
+	hasmorespans = false;
 	return false;
     };
 
     // inherit javadocs
     @Override
     public boolean skipTo(int target) throws IOException {
-	return spans.skipTo(target);
+	if (hasmorespans && spans.doc() < target)
+	    return spans.skipTo(target);
+	return false;
     };
 
     @Override
diff --git a/src/main/java/de/ids_mannheim/korap/query/spans/ElementSpans.java b/src/main/java/de/ids_mannheim/korap/query/spans/ElementSpans.java
index 902a33b..f10809c 100644
--- a/src/main/java/de/ids_mannheim/korap/query/spans/ElementSpans.java
+++ b/src/main/java/de/ids_mannheim/korap/query/spans/ElementSpans.java
@@ -1,5 +1,7 @@
 package de.ids_mannheim.korap.query.spans;
 
+import de.ids_mannheim.korap.query.spans.KorapTermSpan;
+
 import org.apache.lucene.index.Term;
 import org.apache.lucene.index.DocsAndPositionsEnum;
 import org.apache.lucene.search.DocIdSetIterator;
@@ -20,9 +22,15 @@
 
 // TODO: Store payloads in 12 byte instead of the complicated ByteBuffer stuff!
 
-import de.ids_mannheim.korap.query.spans.KorapTermSpan;
-
+/**
+ * @author ndiewald
+ */
 public class ElementSpans extends Spans {
+
+    // This advices the java compiler to ignore all loggings
+    public static final boolean DEBUG = false;
+  
+
     private byte[] payloadByte = new byte[4];
     private ByteBuffer bb = ByteBuffer.allocate(4);
 
@@ -63,42 +71,53 @@
 	end = -1;
 
 	if (memory.size() > 0) {
-	    log.trace("There is a memory entry");
+	    if (DEBUG)
+		log.trace("There is a memory entry");
 
 	    _setToCurrent(memory.removeFirst());
 
-	    log.trace("Current1: [{}-{}]", position, end);
+	    if (DEBUG)
+		log.trace("Current1: [{}-{}]", position, end);
 
 	    return true;
 	};
 
-	log.trace("There is no memory entry");
+	if (DEBUG)
+	    log.trace("There is no memory entry");
 
 	if (count == freq) {
-	    log.trace("last position in document");
+
+	    if (DEBUG)
+		log.trace("last position in document");
 
 	    // Check for overflow on document boundary
 	    if (overflow.start != -1) {
-		log.trace("  but there is an overflow");
+
+		if (DEBUG)
+		    log.trace("  but there is an overflow");
 
 		_setToCurrent(overflow).clear();
 
-		log.trace("Current2: [{}-{}]", position, end);
+		if (DEBUG)
+		    log.trace("Current2: [{}-{}]", position, end);
 
 		return true;
 	    };
 
 	    if (postings == null) {
-		log.trace("no more postings");
+		if (DEBUG)
+		    log.trace("no more postings");
 		return false;
 	    };
 
-	    log.trace("Go to next doc");
+	    if (DEBUG)
+		log.trace("Go to next doc");
 
 	    doc = postings.nextDoc();
 
 	    if (doc == DocIdSetIterator.NO_MORE_DOCS) {
-		log.trace("no more docs");
+		if (DEBUG)
+		    log.trace("no more docs");
 		return false;
 	    };
 
@@ -114,30 +133,28 @@
 	int pos = overflow.start;
 	
 	while (true) {
-	    /*
-	    if (DEBUG)
-		System.err.println(">> Reset end and payload");
-	    storedPayload.clear();
-	    end = -1;
-	    */
-
-	    log.trace("pos is {}", pos);
-
-	    _log_payloads(1);
+	    if (DEBUG) {
+		log.trace("pos is {}", pos);
+		_log_payloads(1);
+	    };
 
 	    if (count == freq) {
-		log.trace("last position in document");
+		if (DEBUG)
+		    log.trace("last position in document");
 
 		if (postings == null) {
 
-		    log.trace("no more postings");
+		    if (DEBUG)
+			log.trace("no more postings");
 
 		    // Check for overflow on document boundary
 		    if (overflow.start != -1) {
-			log.trace("  but there is an overflow");
+			if (DEBUG)
+			    log.trace("  but there is an overflow");
 
 			_setToCurrent(overflow).clear();
-			log.trace("Current3: [{}-{}]", position, end);
+			if (DEBUG)
+			    log.trace("Current3: [{}-{}]", position, end);
 
 			return true;
 		    };
@@ -145,36 +162,50 @@
 		    return false;
 		};
 
-		log.trace("go to next doc");
-		_log_payloads(2);
+		if (DEBUG) {
+		    log.trace("go to next doc");
+		    _log_payloads(2);
+		};
 
 		if (overflow.start != -1) {
-		    log.trace("Storing overflow {} ...", overflow.toString());
-		    log.trace("... in memory with {}-{}", overflow.startChar(), overflow.endChar());
+		    if (DEBUG) {
+			log.trace("Storing overflow {} ...", overflow.toString());
+			log.trace("... in memory with {}-{}", overflow.startChar(), overflow.endChar());
+		    };
 		    memory.add((KorapTermSpan) overflow.clone());
 		    overflow.clear();
 		};
-		_log_payloads(3);
+		if (DEBUG)
+		    _log_payloads(3);
 
 		if (memory.size() > 0) {
-		    log.trace("sort and return first");
-		    _log_payloads(4);
-		    Collections.sort(memory);
-		    _log_payloads(5);
-		    _setToCurrent(memory.removeFirst());
-		    _log_payloads(6);
+		    if (DEBUG) {
+			log.trace("sort and return first");
+			_log_payloads(4);
+		    };
 
-		    log.trace("Current4: [{}-{}]]", position, end);
+		    Collections.sort(memory);
+
+		    if (DEBUG)
+			_log_payloads(5);
+
+		    _setToCurrent(memory.removeFirst());
+
+		    if (DEBUG)
+			_log_payloads(6);
+
+		    if (DEBUG)
+			log.trace("Current4: [{}-{}]]", position, end);
 		    break;
 		};
 
 		doc = postings.nextDoc();
 		// New doc
-		end = -1;
-		pos = -1;
+		end = pos = -1;
 
 		if (doc == DocIdSetIterator.NO_MORE_DOCS) {
-		    log.trace("no more docs");
+		    if (DEBUG)
+			log.trace("no more docs");
 		    return false;
 		};
 
@@ -183,55 +214,75 @@
 	    };
 
 
-	    log.trace("Forward postings");
+	    if (DEBUG)
+		log.trace("Forward postings");
+	    
 	    position = postings.nextPosition();
 	    // New pos!
 	    end = -1;
-	    _log_payloads(9);
-	    log.trace("CLEAR PAYLOAD");
+
+	    if (DEBUG) {
+		_log_payloads(9);
+		log.trace("CLEAR PAYLOAD");
+	    };
+	
 	    storedPayload.clear();
 	    hasStoredPayload = false;
-	    _log_payloads(10);
 
+	    if (DEBUG) {
+		_log_payloads(10);
+		log.trace("next position is {}", position);
+	    };
+	    
 	    count++;
 
-	    log.trace("next position is {}", position);
-
 	    // There was no overflow
 	    if (pos == -1 || pos == position) {
 		if (pos == position) {
-		    log.trace("Add overflow to memory");
+		    if (DEBUG)
+			log.trace("Add overflow to memory");
+		    
 		    memory.add((KorapTermSpan) overflow.clone());
 		}
 
 		else {
-		    log.trace("There was no overflow");
+		    if (DEBUG)
+			log.trace("There was no overflow");
 		    pos = position;
 		};
 
-		_log_payloads(8);
-		log.trace("*****************************");
+		if (DEBUG) {
+		    _log_payloads(8);
+		    log.trace("*****************************");
+		};
+		
 		_setCurrentTo(overflow);
-		log.trace("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
 
-		log.trace("Set overflow and continue: {} ...", overflow.toString());
-		log.trace("... with {}-{}", overflow.startChar(), overflow.endChar());
+		if (DEBUG) {
+		    log.trace("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
+		    log.trace("Set overflow and continue: {} ...", overflow.toString());
+		    log.trace("... with {}-{}", overflow.startChar(), overflow.endChar());
+		};
+
 		continue;
 	    }
 
 	    // overflow was older
 	    else if (pos != position) {
 
-		log.trace("Overflow was older");
+		if (DEBUG)
+		    log.trace("Overflow was older");
 
 		// Use memory
 		if (memory.size() > 0) {
 
-		    log.trace("Add overflow to memory");
+		    if (DEBUG)
+			log.trace("Add overflow to memory");
 
 		    memory.add((KorapTermSpan) overflow.clone());
 
-		    log.trace("Sort memory");
+		    if (DEBUG)
+			log.trace("Sort memory");
 
 		    // Sort by end position
 		    Collections.sort(memory);
@@ -239,9 +290,10 @@
 		    // Store current information in overflow
 		    _setCurrentTo(overflow);
 
-		    log.trace("Set new overflow: {}", overflow.toString());
-
-		    log.trace("Get first element from sorted memory");
+		    if (DEBUG) {
+			log.trace("Set new overflow: {}", overflow.toString());
+			log.trace("Get first element from sorted memory");
+		    };
 
 		    _setToCurrent(memory.removeFirst());
 		}
@@ -249,25 +301,30 @@
 		// Nothing in memory - use overflow!
 		else {
 
-		    log.trace("There is nothing in memory");
+		    if (DEBUG)
+			log.trace("There is nothing in memory");
 
 		    /* Make overflow active and store last position in overflow */
 		    _setCurrentTo(tempSpan);
 
-		    log.trace("Temp is now {}", overflow.toString());
+		    if (DEBUG)
+			log.trace("Temp is now {}", overflow.toString());
 
 		    _setToCurrent(overflow);
 		    
 		    // Store current information in overflow
 		    overflow.copyFrom(tempSpan);
 
-		    log.trace("Overflow is now {}", overflow.toString());
+		    if (DEBUG)
+			log.trace("Overflow is now {}", overflow.toString());
 
 		};
 		break;
 	    };
 	};
-	log.trace("Current4: [{}-{}]", position, end);
+
+	if (DEBUG)
+	    log.trace("Current4: [{}-{}]", position, end);
 
 	readPayload = false;
 	return true;
@@ -276,7 +333,14 @@
     private KorapTermSpan _setToCurrent (KorapTermSpan act) {
 	if (act.payload != null)
 	    act.payload.rewind();
-	log.trace("Set to current with {}, meaning {} - {}", act.toString(), act.payload.getInt(0), act.payload.getInt(4));
+
+	if (DEBUG)
+	    log.trace("Set to current with {}, meaning {} - {}",
+		      act.toString(),
+		      act.payload.getInt(0),
+		      act.payload.getInt(4)
+		      );
+	
 	if (act.payload != null)
 	    act.payload.rewind();
 
@@ -286,58 +350,73 @@
 	hasStoredPayload = false;
 
 	if (act.payload != null) {
-	    log.trace("Payload is not null");
+	    if (DEBUG)
+		log.trace("Payload is not null");
+
 	    act.payload.rewind();
 	    storedPayload.put(act.payload);
 	    hasStoredPayload = true;
 	}
-	else {
+	else if (DEBUG)
 	    log.trace("Payload is null");
-	};
 
 	return act;
     };
 
     private void _log_payloads (int nr) {
-	if (hasStoredPayload) {
+	if (!DEBUG)
+	    return;
+	
+	if (hasStoredPayload)
 	    log.trace(
 		      "[{}] payload offsets are {}-{}",
 		      nr,
 		      storedPayload.getInt(0),
 		      storedPayload.getInt(4)
 		      );
-	}
-	else {
+	else
 	    log.trace("[{}] payload is empty", nr);
-	};
     };
 
     private void _setCurrentTo () {
 	overflow.start = position;
 	overflow.end = this.end();
 	overflow.payload.clear();
-	if (hasStoredPayload) {
+
+	if (hasStoredPayload)
 	    overflow.payload.put(storedPayload);
-	};
-	log.trace("Set current to Overflow {} with {}-{}", overflow.toString(), overflow.startChar(), overflow.endChar());
+
+	if (DEBUG)
+	    log.trace("Set current to Overflow {} with {}-{}", overflow.toString(), overflow.startChar(), overflow.endChar());
     };
 
     private void _setCurrentTo (KorapTermSpan o) {
-	_log_payloads(7);
+
+	if (DEBUG)
+	    _log_payloads(7);
+	
 	o.start = position;
 	o.end = this.end();
 	o.payload.clear();
+	
 	if (hasStoredPayload) {
 	    storedPayload.rewind();
 	    o.payload.put(storedPayload);
-	    log.trace("Object now has offset {}-{}", o.payload.getInt(0), o.payload.getInt(4));
+
+	    if (DEBUG)
+		log.trace("Object now has offset {}-{}", o.payload.getInt(0), o.payload.getInt(4));
 
 	    // Import:
 	    o.payload.rewind();
 	};
-	log.trace("Set current to object {} ...", o.toString());
+
+	if (DEBUG)
+	    log.trace("Set current to object {} ...", o.toString());
+	
 	if (hasStoredPayload) {
-	    log.trace("with {}-{} from {}-{}", o.startChar(), o.endChar(), storedPayload.getInt(0), storedPayload.getInt(4));
+	    if (DEBUG)
+		log.trace("with {}-{} from {}-{}", o.startChar(), o.endChar(), storedPayload.getInt(0), storedPayload.getInt(4));
+
 	    storedPayload.rewind();
 	};
     };
@@ -352,12 +431,12 @@
 	overflow.clear();
 	storedPayload.clear();
 	hasStoredPayload = false;
+	
 	if (memory != null)
 	    memory.clear();
 
-	if (doc == DocIdSetIterator.NO_MORE_DOCS) {
+	if (doc == DocIdSetIterator.NO_MORE_DOCS)
 	    return false;
-	};
 
 	freq = postings.freq();
 	count = 0;
@@ -403,15 +482,17 @@
 	if (storedPayload.position() <= 0)
 	    this.getPayloadEndPosition();
 
-	if (hasStoredPayload) {
-	    log.trace("storedPayload: {} - {}", storedPayload.getInt(0), storedPayload.getInt(4));
-	}
-	else {
-	    log.trace("storedPayload is empty");
+	if (DEBUG) {
+	    if (hasStoredPayload)
+		log.trace("storedPayload: {} - {}",
+			  storedPayload.getInt(0),
+			  storedPayload.getInt(4));
+	    else
+		log.trace("storedPayload is empty");
 	};
+	
 	System.arraycopy(storedPayload.array(), 0, offsetCharacters, 0, 8);
 
-	//	return Collections.singletonList(storedPayload.array());
 	return Collections.singletonList(offsetCharacters);
     };
 
@@ -431,30 +512,39 @@
     };
 
     private int getPayloadEndPosition () {
-	log.trace("getPayloadEndPosition of element ...");
+	if (DEBUG)
+	    log.trace("getPayloadEndPosition of element ...");
 
 	try {
 	    BytesRef payload = postings.getPayload();
 
-	    log.trace("  BytesRef: {}", payload.toString());
+	    if (DEBUG)
+		log.trace("  BytesRef: {}", payload.toString());
+	    
 	    readPayload = true;
 	    storedPayload.clear();
 	    hasStoredPayload = false;
+
 	    if (payload != null) {
-		log.trace("Do bit magic");
+		if (DEBUG)
+		    log.trace("Do bit magic");
+		
 		storedPayload.put(payload.bytes, payload.offset, 8);
 		storedPayload.put(payload.bytes, payload.offset + 12, payload.length - 12);
 		System.arraycopy(payload.bytes, payload.offset + 8, payloadByte, 0, 4);
 		hasStoredPayload = true;
 
-		log.trace("~~ Bytes: {}-{}-{}",
-			  storedPayload.getInt(0),
-			  storedPayload.getInt(4),
-			  payloadByte);
+		if (DEBUG)
+		    log.trace("~~ Bytes: {}-{}-{}",
+			      storedPayload.getInt(0),
+			      storedPayload.getInt(4),
+			      payloadByte);
 	    }
 
 	    else {
-		log.trace("There's no payload available");
+		if (DEBUG)
+		    log.trace("There's no payload available");
+		
 		payloadByte = null;
 	    };
 
@@ -462,13 +552,16 @@
 		bb.clear();
 		int t = bb.wrap(payloadByte).getInt();
 
-		log.trace("   |-> {}", t);
+		if (DEBUG)
+		    log.trace("   |-> {}", t);
+		
 		return t;
 	    };
 
 	}
 	catch (IOException e) {
-	    log.trace("IOException {}", e);	   
+	    if (DEBUG)
+		log.trace("IOException {}", e);	   
 	};
 	return -1;
     };
diff --git a/src/main/java/de/ids_mannheim/korap/query/spans/KorapSpan.java b/src/main/java/de/ids_mannheim/korap/query/spans/KorapSpan.java
index c8a223e..66e51bc 100644
--- a/src/main/java/de/ids_mannheim/korap/query/spans/KorapSpan.java
+++ b/src/main/java/de/ids_mannheim/korap/query/spans/KorapSpan.java
@@ -56,7 +56,5 @@
 	    .toString();
     };
 
-    /*
-equals und hashcode implementieren
-     */
+    // equals und hashcode implementieren
 };
diff --git a/src/main/java/de/ids_mannheim/korap/query/spans/KorapTermSpan.java b/src/main/java/de/ids_mannheim/korap/query/spans/KorapTermSpan.java
index 7fc1e57..4d50e14 100644
--- a/src/main/java/de/ids_mannheim/korap/query/spans/KorapTermSpan.java
+++ b/src/main/java/de/ids_mannheim/korap/query/spans/KorapTermSpan.java
@@ -10,9 +10,12 @@
 import org.slf4j.LoggerFactory;
 
 public class KorapTermSpan extends KorapSpan {
+    // This advices the java compiler to ignore all loggings
+    public static final boolean DEBUG = false;
+
     public ByteBuffer payload;
 
-    private final Logger log = LoggerFactory.getLogger(WithinSpans.class);
+    private final Logger log = LoggerFactory.getLogger(ElementSpans.class);
 
     @Override
     public Object clone() {
@@ -24,14 +27,16 @@
 	this.payload.rewind();
 	span.payload.put(this.payload);
 
-	log.trace("Clone payload {} to payload {} ...",
-		  this.payload.toString(),
-		  span.payload.toString());
-	log.trace("... from {}-{} to {}-{}",
-		  this.startChar(),
-		  this.endChar(),
-		  span.startChar(),
-		  span.endChar());
+	if (DEBUG) {
+	    log.trace("Clone payload {} to payload {} ...",
+		      this.payload.toString(),
+		      span.payload.toString());
+	    log.trace("... from {}-{} to {}-{}",
+		      this.startChar(),
+		      this.endChar(),
+		      span.startChar(),
+		      span.endChar());
+	};
 
 	return span;
     };
diff --git a/src/main/java/de/ids_mannheim/korap/query/spans/NextSpans.java b/src/main/java/de/ids_mannheim/korap/query/spans/NextSpans.java
index 278f050..6d189a5 100644
--- a/src/main/java/de/ids_mannheim/korap/query/spans/NextSpans.java
+++ b/src/main/java/de/ids_mannheim/korap/query/spans/NextSpans.java
@@ -16,31 +16,32 @@
  * 	a span is immediately followed by another span.
  *  
  * 	TODO: nextSpans needs collectPayloads to be explicitly set true. Why?
+ *            ndiewald: They don't have to be set explicitely - just make them use it always
  * 	@author margaretha 
  * */
 public class NextSpans extends NonPartialOverlappingSpans {	
 	
     public NextSpans (SimpleSpanQuery simpleSpanQuery,
-  	      AtomicReaderContext context,
-  	      Bits acceptDocs,
-  	      Map<Term,TermContext> termContexts) throws IOException {
+		      AtomicReaderContext context,
+		      Bits acceptDocs,
+		      Map<Term,TermContext> termContexts) throws IOException {
     	super(simpleSpanQuery, context, acceptDocs, termContexts);    	
-    }
+    };
 
     /** Check weather the end position of the current firstspan equals 
      *  the start position of the secondspan. 
-  	 * */
+     **/
     @Override
-	protected int findMatch() {		
-		if (firstSpans.end() == secondSpans.start()) {			
-			matchDocNumber = firstSpans.doc();
-			matchStartPosition = firstSpans.start();
-			matchEndPosition = secondSpans.end();	
-			return 0;
-		}		
-		else if (firstSpans.end() > secondSpans.start())
-			return 1;
-		
-		return -1;		
-	}	
-}
+    protected int findMatch() {		
+	if (firstSpans.end() == secondSpans.start()) {			
+	    matchDocNumber = firstSpans.doc();
+	    matchStartPosition = firstSpans.start();
+	    matchEndPosition = secondSpans.end();	
+	    return 0;
+	}		
+	else if (firstSpans.end() > secondSpans.start())
+	    return 1;
+	
+	return -1;		
+    };	
+};
diff --git a/src/main/java/de/ids_mannheim/korap/query/spans/NonPartialOverlappingSpans.java b/src/main/java/de/ids_mannheim/korap/query/spans/NonPartialOverlappingSpans.java
index e435d50..fff2cdf 100644
--- a/src/main/java/de/ids_mannheim/korap/query/spans/NonPartialOverlappingSpans.java
+++ b/src/main/java/de/ids_mannheim/korap/query/spans/NonPartialOverlappingSpans.java
@@ -14,98 +14,112 @@
 import de.ids_mannheim.korap.query.SimpleSpanQuery;
 
 /** An abstract class for Span enumeration whose two child spans are matched by 
- * 	their positions and do not have a partial overlap.
+ *  their positions and do not have a partial overlap.
  *  
- * 	@author margaretha  
+ *  @author margaretha  
  * */
 public abstract class NonPartialOverlappingSpans extends SimpleSpans{
 	
-	private Logger log = LoggerFactory.getLogger(NonPartialOverlappingSpans.class);
-	
-	public NonPartialOverlappingSpans(SimpleSpanQuery simpleSpanQuery,
-			AtomicReaderContext context, Bits acceptDocs,
-			Map<Term,TermContext> termContexts) throws IOException {	    	  
-		super(simpleSpanQuery, context, acceptDocs, termContexts);
+    private Logger log = LoggerFactory.getLogger(NonPartialOverlappingSpans.class);
+    // This advices the java compiler to ignore all loggings
+    public static final boolean DEBUG = false;
+
+    public NonPartialOverlappingSpans(SimpleSpanQuery simpleSpanQuery,
+				      AtomicReaderContext context,
+				      Bits acceptDocs,
+				      Map<Term,TermContext> termContexts) throws IOException {	    	  
+	super(simpleSpanQuery, context, acceptDocs, termContexts);
 		
-		// Warning: not implemented, results in errors for SpanNextQuery 
-		// This.collectPayloads = simpleSpanQuery.isCollectPayloads()
-		collectPayloads = true;
-		hasMoreSpans = secondSpans.next();		
-		
-	}
+	// Warning: not implemented, results in errors for SpanNextQuery 
+	// This.collectPayloads = simpleSpanQuery.isCollectPayloads()
+	collectPayloads = true;
+	hasMoreSpans = secondSpans.next();		
+    };
 	
     @Override
-  	public boolean next() throws IOException {
+    public boolean next() throws IOException {
     	// Warning: this does not work for overlapping spans 
     	// e.g. get multiple second spans in a firstspan
-  		hasMoreSpans &= firstSpans.next();
-  		isStartEnumeration=false;
-  		matchPayload.clear();
-  		return advance();  		
-  	}
+	hasMoreSpans &= firstSpans.next();
+	isStartEnumeration=false;
+	matchPayload.clear();
+	return advance();  		
+    };
   	
-	/** Advance is a lucene terminology to search for the next match.
-	 * */
+    /** Advance is a lucene terminology to search for the next match.
+     * */
     protected boolean advance() throws IOException {	    	
-		// The complexity is linear for searching in a document. 
-		// It's better if we can skip to >= position in a document.
-	  	while (hasMoreSpans && ensureSameDoc(firstSpans,secondSpans)){
-	  		int matchCase = findMatch();
-				if (matchCase == 0){
-					log.trace("Match doc#: {}",matchDocNumber);
-					log.trace("Match positions: {}-{}", matchStartPosition, 
-							matchEndPosition);
-					doCollectPayloads();
-					return true;
-				} 
-				else if (matchCase == 1) {
-					hasMoreSpans = secondSpans.next();			
-				}			
-				else{ 
-					hasMoreSpans = firstSpans.next();
-				}
-			}
-		return false;
-	}
+	// The complexity is linear for searching in a document. 
+	// It's better if we can skip to >= position in a document.
+	while (hasMoreSpans && ensureSameDoc(firstSpans,secondSpans)) {
+	    int matchCase = findMatch();
+	    if (matchCase == 0){
+		if (DEBUG) {
+		    log.trace("Match doc#: {}",
+			      matchDocNumber);
+		    log.trace("Match positions: {}-{}",
+			      matchStartPosition, 
+			      matchEndPosition);
+		};
+		doCollectPayloads();
+		return true;
+	    } 
+	    else if (matchCase == 1)
+		hasMoreSpans = secondSpans.next();			
+	    else
+		hasMoreSpans = firstSpans.next();
+	};
+	return false;
+    };
     
     /** Specify the condition for a match 
      * @return 0 iff match is found,
      * 			-1 to advance the firstspan,		
      * 			1 to advance the secondspan
-     * */
-  	protected abstract int findMatch();
+     **/
+    protected abstract int findMatch();
     
-  	/** Collecting available payloads from the current first and second spans */
-  	private void doCollectPayloads() throws IOException {
-  		if (collectPayloads){
-  			log.trace("Collect payloads");
-  		    if (firstSpans.isPayloadAvailable()) {
-  		    	Collection<byte[]> payload = firstSpans.getPayload();
-  		    	log.trace("Found {} payloads in firstSpans", payload.size());
-  		    	matchPayload.addAll(payload);
-  		    }
-  		    if (secondSpans.isPayloadAvailable()) {
-  		    	Collection<byte[]> payload = secondSpans.getPayload();
-  		    	log.trace("Found {} payloads in secondSpans", payload.size());
-  		    	matchPayload.addAll(payload);
-  		    }
-  		}
-  	}
+    /** Collecting available payloads from the current first and second spans */
+    private void doCollectPayloads() throws IOException {
+	if (collectPayloads){
+
+	    if (DEBUG)
+		log.trace("Collect payloads");
+	    
+	    if (firstSpans.isPayloadAvailable()) {
+		Collection<byte[]> payload = firstSpans.getPayload();
+
+		if (DEBUG)
+		    log.trace("Found {} payloads in firstSpans", payload.size());
+		
+		matchPayload.addAll(payload);
+	    };
+	    
+	    if (secondSpans.isPayloadAvailable()) {
+		Collection<byte[]> payload = secondSpans.getPayload();
+
+		if (DEBUG)
+		    log.trace("Found {} payloads in secondSpans", payload.size());
+		
+		matchPayload.addAll(payload);
+	    };
+	};
+    };
     
-  	@Override
-  	public boolean skipTo(int target) throws IOException {		
-  		if (hasMoreSpans && (firstSpans.doc() < target)){
-  			if (!firstSpans.skipTo(target)){
-  				hasMoreSpans = false;
-  				return false;
-  			}			
-  		} 		
-  		matchPayload.clear();
-  		return advance();
-  	}
+    @Override
+    public boolean skipTo(int target) throws IOException {		
+	if (hasMoreSpans && (firstSpans.doc() < target)){
+	    if (!firstSpans.skipTo(target)){
+		hasMoreSpans = false;
+		return false;
+	    };
+	};
+	matchPayload.clear();
+	return advance();
+    };
   	
-  	@Override
-  	public long cost() {
-  		return firstSpans.cost() + secondSpans.cost();
-  	}
-}
+    @Override
+    public long cost() {
+	return firstSpans.cost() + secondSpans.cost();
+    };
+};
diff --git a/src/main/java/de/ids_mannheim/korap/query/spans/WithinSpans.java b/src/main/java/de/ids_mannheim/korap/query/spans/WithinSpans.java
index a2e4b86..ee896f6 100644
--- a/src/main/java/de/ids_mannheim/korap/query/spans/WithinSpans.java
+++ b/src/main/java/de/ids_mannheim/korap/query/spans/WithinSpans.java
@@ -65,7 +65,15 @@
 die Wrapreihenfolge a,b,c rauskommt!
 */
 
+/**
+ * @author ndiewald
+ */
+
 public class WithinSpans extends Spans {
+
+    // This advices the java compiler to ignore all loggings
+    public static final boolean DEBUG = false;
+
     private boolean firstTime = true;
     private boolean more = false;
 
@@ -76,9 +84,15 @@
 
     /** Indicates that the wrap and the embedded spans are in the same doc */
     private boolean inSameDoc = false;
-    private int wrapDoc;
-    private int embeddedDoc;
-    private int wrapStart, wrapEnd, embeddedStart, embeddedEnd;
+
+    private int
+	wrapDoc,
+	embeddedDoc,
+	wrapStart,
+	wrapEnd,
+	embeddedStart,
+	embeddedEnd;
+
     private Collection<byte[]> embeddedPayload;
 
     // Wrap span
@@ -106,7 +120,8 @@
 			Map<Term,TermContext> termContexts,
 			short flag) throws IOException {
 
-	log.trace("Init WithinSpans");
+	if (DEBUG)
+	    log.trace("Init WithinSpans");
 
 	// Init copies
 	this.matchPayload = new LinkedList<byte[]>();
@@ -130,17 +145,24 @@
     /** Move to the next match, returning true iff any such exists. */
     @Override
     public boolean next () throws IOException {
-	log.trace("Next with doc {}", matchDoc);
+	if (DEBUG)
+	    log.trace("Next with doc {}", matchDoc);
 
 	// Check for init next
 	if (firstTime) {
 	    firstTime = false;
 	    if (!embeddedSpans.next() || !wrapSpans.next()) {
-		log.trace("No next in firstSpan nor in secondSpan 1");
+
+		if (DEBUG)
+		    log.trace("No next in firstSpan nor in secondSpan 1");
+		
 		more = false;
 		return false;
 	    };
-	    log.trace("Spans are initialized");
+
+	    if (DEBUG)
+		log.trace("Spans are initialized");
+	    
 	    more = true;
 	    wrapStart = wrapSpans.start();
 	    wrapEnd = wrapSpans.end();
@@ -156,16 +178,20 @@
 		embeddedPayload.addAll(payload);
 	    };
 
-	    log.trace("Init spans: {}", _actPos());
+	    if (DEBUG)
+		log.trace("Init spans: {}", _actPos());
 
 	    if (embeddedDoc == matchDoc) {
 		inSameDoc = true;
-		log.trace("Is now inSameDoc");
+		if (DEBUG)
+		    log.trace("Is now inSameDoc");
 	    }
-	    else {
+	    else if (DEBUG) {
 		log.trace("Is not inSameDoc");
 	    };
-	    log.trace("Next with doc {} (wrap) and {} (embedded)", wrapDoc, embeddedDoc);
+
+	    if (DEBUG)
+		log.trace("Next with doc {} (wrap) and {} (embedded)", wrapDoc, embeddedDoc);
 	};
 
 	matchPayload.clear();
@@ -177,25 +203,27 @@
      * @return true iff there is such a match.
      */
     private boolean advanceAfterCheck() throws IOException {
-	log.trace("advanceAfterChecked inSameDoc: {} and more: {}", inSameDoc, more);
-	log.trace("advanceAfterCheck with doc {} (wrap) and {} (embedded)", wrapDoc, embeddedDoc);
+	if (DEBUG) {
+	    log.trace("advanceAfterChecked inSameDoc: {} and more: {}", inSameDoc, more);
+	    log.trace("advanceAfterCheck with doc {} (wrap) and {} (embedded)", wrapDoc, embeddedDoc);
+	};
 
 	// There are more spans, and both spans are either in the
 	// same doc or can be forwarded to the same doc.
 	while (more && (inSameDoc || toSameDoc())) {
 
-	    log.trace("There are more spans in doc {}", embeddedDoc);
+	    if (DEBUG)
+		log.trace("There are more spans in doc {}", embeddedDoc);
 	    
 	    /* spans are in the same doc */
-	    if (within()) {
+	    if (within())
 		return true;
-	    }
-	    else {
+	    else if (DEBUG)
 		log.trace("No within");
-	    };
 	};
 
-	log.trace("No more matches");
+	if (DEBUG)
+	    log.trace("No more matches");
 
 	return false; // no more matches
     };
@@ -203,7 +231,8 @@
 
     /** Advance the subSpans to the same document */
     private boolean toSameDoc () throws IOException {
-	log.trace("toSameDoc");
+	if (DEBUG)
+	    log.trace("toSameDoc");
 
 	/*
 	wrapDoc = wrapSpansByDoc.doc();
@@ -212,14 +241,17 @@
 	*/
 
 	if (wrapDoc != embeddedDoc) {
-	    log.trace("Docs not identical: {} vs {}", wrapDoc, embeddedDoc);
+	    if (DEBUG)
+		log.trace("Docs not identical: {} vs {}", wrapDoc, embeddedDoc);
 
 	    spanStore1.clear(); // = new LinkedList<KorapLongSpan>();
 	    spanStore2.clear(); // = new LinkedList<KorapLongSpan>();
 
 	    if (wrapDoc < embeddedDoc) {
-		log.trace("Skip wrap from {} to {}", wrapDoc, embeddedDoc);
-		if (!wrapSpansByDoc.skipTo(embeddedDoc)) {
+		if (DEBUG)
+		    log.trace("Skip wrap from {} to {}", wrapDoc, embeddedDoc);
+		
+		if (wrapSpansByDoc.doc() >= embeddedDoc || !wrapSpansByDoc.skipTo(embeddedDoc)) {
 		    more = false;
 		    inSameDoc = false;
 		    return false;
@@ -227,29 +259,33 @@
 		wrapDoc = wrapSpans.doc();
 	    }
 	    else if (wrapDoc > embeddedDoc) {
-		log.trace("Skip embedded from {} to {}", embeddedSpans.doc(), wrapDoc);
+		if (DEBUG)
+		    log.trace("Skip embedded from {} to {}", embeddedSpans.doc(), wrapDoc);
+		
 		//		if (!embeddedSpansByDoc.skipTo( wrapDoc )) {
 		if (wrapDoc != embeddedSpans.doc()) {
-		    if (embeddedSpans.doc() == DocIdSetIterator.NO_MORE_DOCS || !embeddedSpans.skipTo( wrapDoc )) {
+		    if (embeddedSpans.doc() == DocIdSetIterator.NO_MORE_DOCS ||
+			!(embeddedSpans.doc() < wrapDoc && embeddedSpans.skipTo( wrapDoc ))) {
 			more = false;
 			inSameDoc = false;
 			return false;
 		    };
 		}
-		else {
+		else
 		    _add_current();
-		    //		    embeddedDoc = embeddedSpans.doc();
-		};
+		// embeddedDoc = embeddedSpans.doc();
 	    };
 	}
-	else {
+	else if (DEBUG)
 	    log.trace("Docs identical");
-	};
+
 	embeddedStart = embeddedSpans.start();
 	embeddedEnd = embeddedSpans.end();
-	log.trace("The new embedded start is {}-{}", embeddedStart, embeddedEnd);
-	inSameDoc = true;
-	return true;
+
+	if (DEBUG)
+	    log.trace("The new embedded start is {}-{}", embeddedStart, embeddedEnd);
+	
+	return inSameDoc = true;
     };
 
 
@@ -267,20 +303,27 @@
      * Most implementations are considerably more efficient than that.
      */
     public boolean skipTo (int target) throws IOException {
-	log.trace("skipTo {}", target);
+	if (DEBUG)
+	    log.trace("skipTo {}", target);
 
 	// Check for init next
 	if (firstTime) {
 	    firstTime = false;
 	    if (!embeddedSpans.next() || !wrapSpans.next()) {
-		log.trace("No next in firstSpan nor in secondSpan 2");
+		if (DEBUG)
+		    log.trace("No next in firstSpan nor in secondSpan 2");
 		more = false;
 		return false;
 	    };
 	    more = true;
+
+	    // WrapSpans
 	    wrapStart = wrapSpans.start();
 	    wrapEnd = wrapSpans.end();
-	    wrapDoc = embeddedSpans.doc();
+	    // wrapDoc = embeddedSpans.doc();
+	    wrapDoc = wrapSpans.doc();
+
+	    // EmbeddedSpans
 	    embeddedStart = embeddedSpans.start();
 	    embeddedEnd = embeddedSpans.end();
 	    embeddedDoc = embeddedSpans.doc();
@@ -297,10 +340,8 @@
 	    }
 
 	    // Can't be skipped to target
-	    else {
-		more = false;
-		return false;
-	    };
+	    else
+		return more = false;
 	};
 
 	matchPayload.clear();
@@ -317,7 +358,8 @@
 
 
     private boolean within () throws IOException {
-	log.trace("within");
+	if (DEBUG)
+	    log.trace("within");
 	
 	while (more && inSameDoc) {
 
@@ -338,11 +380,11 @@
 	    //  |-|"
 	    // |---|
 	    if (wrapStart > embeddedStart) {
-		log.trace("[Case] 1-5 with {}", _actPos());
+		if (DEBUG)
+		    log.trace("[Case] 1-5 with {}", _actPos());
 
-		if (this.fetchNext()) {
+		if (this.fetchNext())
 		    continue;
-		};
 
 		// Forward wrapSpan
 		if (wrapSpans.next()) {
@@ -354,9 +396,7 @@
 		    };
 		};
 
-		this.more = false;
-		this.inSameDoc = false;
-		return false;
+		return this.more = this.inSameDoc = false;
 	    };
 
 	    // Get wrapEnd
@@ -366,11 +406,14 @@
 	    embedded.start = embeddedStart;
 	    embedded.end = embeddedEnd;
 	    embedded.doc = embeddedDoc;
+
 	    if (embeddedPayload != null)
 		embedded.payload = embeddedPayload;
 
 	    this.spanStore1.add(embedded);
-	    log.trace("pushed to spanStore1: {}", embedded.toString());
+	    
+	    if (DEBUG)
+		log.trace("pushed to spanStore1: {}", embedded.toString());
 
 
 	    // Case 12
@@ -380,22 +423,31 @@
 	    // |---|
 	    //       |-|
 	    if (wrapEnd <= embeddedStart) {
-		log.trace("[Case] 12-13 with {}", _actPos());
+		if (DEBUG)
+		    log.trace("[Case] 12-13 with {}", _actPos());
 
 		// Copy content of spanStores
 		if (!spanStore1.isEmpty()) {
-		    log.trace("First store is not empty - copy to second store!");
+		    if (DEBUG)
+			log.trace("First store is not empty - copy to second store!");
+		    
 		    spanStore2.addAll(0, (LinkedList<KorapLongSpan>) spanStore1.clone());
 		    spanStore1.clear();
-		    log.trace("Second store is now: {}", spanStore2.toString());
+		    
+		    if (DEBUG)
+			log.trace("Second store is now: {}", spanStore2.toString());
 		};
 
 		// Forward wrapSpan
-		log.trace("Try to forward wrapspan");
+		if (DEBUG)
+		    log.trace("Try to forward wrapspan");
 
 		if (wrapSpans.next()) {
 		    wrapDoc = wrapSpans.doc();
-		    log.trace("wrapDoc is now {} while embeddedDoc is {}", wrapDoc, embeddedDoc);
+		    
+		    if (DEBUG)
+			log.trace("wrapDoc is now {} while embeddedDoc is {}", wrapDoc, embeddedDoc);
+		    
 		    if (this.toSameDoc()) {
 			wrapStart = wrapSpans.start();
 			wrapEnd = wrapSpans.end();
@@ -403,13 +455,11 @@
 			    continue;
 		    };
 		}
-		else {
+		else if (DEBUG) {
 		    log.trace("Unable to forward wrapspan");
 		};
 
-		this.inSameDoc = false;
-		this.more = false;
-		return false;
+		return this.inSameDoc = this.more = false;
 	    }
 
 
@@ -420,12 +470,17 @@
 		// |---|
 		// |-|
 		if (wrapEnd > embeddedEnd) {
-		    log.trace("[Case] 6 with {}", _actPos());
+		    if (DEBUG)
+			log.trace("[Case] 6 with {}", _actPos());
 
 		    // neither match nor endWith
 		    if (this.flag < (short) 2) {
-			_setMatch(embedded);
-			log.trace("MATCH1!! with {}", _actPos());
+
+			_setMatch(embedded.payload);
+
+			if (DEBUG)
+			    log.trace("MATCH1!! with {}", _actPos());
+			
 			fetchTwoNext();
 			return true;
 		    };
@@ -438,10 +493,14 @@
 		// |---|
 		// |---|
 		else if (wrapEnd == embeddedEnd) {
-		    log.trace("[Case] 7 with {}", _actPos());
+		    if (DEBUG)
+			log.trace("[Case] 7 with {}", _actPos());
 
-		    _setMatch(embedded);
-		    log.trace("MATCH2!! with {}", _actPos());
+		    _setMatch(embedded.payload);
+
+		    if (DEBUG)
+			log.trace("MATCH2!! with {}", _actPos());
+		    
 		    fetchTwoNext();
 		    return true;
 		};
@@ -450,7 +509,9 @@
 		// |-|
 		// |---|
 		// wrapEnd < embeddedEnd
-		log.trace("[Case] 8 with {}", _actPos());
+		if (DEBUG)
+		    log.trace("[Case] 8 with {}", _actPos());
+		
 		fetchTwoNext();
 		continue;
 	    };
@@ -462,12 +523,16 @@
 	    // |---|
 	    //  |-|
 	    if (wrapEnd > embeddedEnd) {
-		log.trace("[Case] 9 with {}", _actPos());
+		if (DEBUG)
+		    log.trace("[Case] 9 with {}", _actPos());
 
 		// neither match nor endWith
 		if (this.flag == (short) 0) {
-		    _setMatch(embedded);
-		    log.trace("MATCH3!! with {}", _actPos());
+		    _setMatch(embedded.payload);
+
+		    if (DEBUG)
+			log.trace("MATCH3!! with {}", _actPos());
+		    
 		    fetchTwoNext();
 		    return true;
 		};
@@ -479,12 +544,16 @@
 	    // |---|
 	    //   |-|
 	    else if (wrapEnd == embeddedEnd) {
-		log.trace("[Case] 10 with {}", _actPos());
+		if (DEBUG)
+		    log.trace("[Case] 10 with {}", _actPos());
 
 		// neither match nor endWith
 		if (this.flag == (short) 0 || this.flag == (short) 2) {
-		    _setMatch(embedded);
-		    log.trace("MATCH4!! with {}", _actPos());
+		    _setMatch(embedded.payload);
+		    
+		    if (DEBUG)
+			log.trace("MATCH4!! with {}", _actPos());
+		    
 		    fetchTwoNext();
 		    return true;
 		};
@@ -497,30 +566,35 @@
 	    // |---|
 	    //   |---|
 	    // wrapEnd < embeddedEnd
-	    log.trace("[Case] 11 with {}", _actPos());
+	    if (DEBUG)
+		log.trace("[Case] 11 with {}", _actPos());
+	    
 	    fetchTwoNext();
 	    continue;
 	};
 
-	this.more = false;
-	return false;
+	return this.more = false;
     };
 
 
     private boolean fetchNext () throws IOException {
-
 	// Fetch span from first store
 	if (spanStore1.isEmpty()) {
-	    log.trace("First store is empty");
+
+	    if (DEBUG)
+		log.trace("First store is empty");
+	    
 	    return fetchTwoNext();
 	};
 
 	KorapLongSpan current = spanStore1.removeFirst();
-	log.trace("Fetch from first store: {}", current.toString());
+	if (DEBUG)
+	    log.trace("Fetch from first store: {}", current.toString());
 
 	embeddedStart = current.start;
 	embeddedEnd = current.end;
 	embeddedDoc = current.doc;
+	
 	if (current.payload != null)
 	    embeddedPayload = current.payload;
 
@@ -532,22 +606,28 @@
 
 	// Fetch span from second store
 	if (spanStore2.isEmpty()) {
-	    log.trace("Second store is empty");
+	    if (DEBUG)
+		log.trace("Second store is empty");
 
 	    // Forward spans
 	    if (this.embeddedSpans.next()) {
-		log.trace("Forwarded embeddedSpans");
+		if (DEBUG)
+		    log.trace("Forwarded embeddedSpans");
 
 		if (this.embeddedSpans.doc() != wrapDoc && !spanStore1.isEmpty()) {
 
-		    log.trace("No docmatch and still stuff in store");
-		    log.trace("First store is not empty - copy to second store!");
+		    if (DEBUG) {
+			log.trace("No docmatch and still stuff in store");
+			log.trace("First store is not empty - copy to second store!");
+		    };
+		    
 		    spanStore2.addAll(0, (LinkedList<KorapLongSpan>) spanStore1.clone());
 		    spanStore1.clear();
 
 		    _add_current();
 
-		    log.trace("Second store is now: {}", spanStore2.toString());
+		    if (DEBUG)
+			log.trace("Second store is now: {}", spanStore2.toString());
 		}
 		else {
 		    embeddedStart = embeddedSpans.start();
@@ -555,37 +635,44 @@
 		    embeddedDoc = embeddedSpans.doc();
 
 		    if (embeddedSpans.isPayloadAvailable()) {
-			Collection<byte[]> payload = embeddedSpans.getPayload();
-			// Maybe just clear
-			embeddedPayload = new ArrayList<byte[]>(payload.size());
-			embeddedPayload.addAll(payload);
+			embeddedPayload.clear();
+			embeddedPayload.addAll(embeddedSpans.getPayload());
 		    };
 
 		    return this.toSameDoc();
 		};
 	    }
-	    else {
+	    else if (DEBUG)
 		log.trace("Forwarded embeddedSpans failed");
-	    };
 
-	    log.trace("EmbeddedDoc: " + embeddedDoc);
+	    
+	    if (DEBUG)
+		log.trace("EmbeddedDoc: " + embeddedDoc);
 
 	    // Forward wrapSpan
-	    log.trace("Try to forward wrapspan");
+	    if (DEBUG)
+		log.trace("Try to forward wrapspan");
+	    
 	    if (wrapSpans.next()) {
 		wrapDoc = wrapSpans.doc();
 		if (this.toSameDoc()) {	    
 		    wrapStart = wrapSpans.start();
 		    wrapEnd = wrapSpans.end();
 
-		    log.trace("WrapSpan forwarded");
+		    if (DEBUG)
+			log.trace("WrapSpan forwarded");
 
 		    // Copy content of spanStores
 		    if (!spanStore1.isEmpty()) {
-			log.trace("First store is not empty - copy to second store!");
+
+			if (DEBUG)
+			    log.trace("First store is not empty - copy to second store!");
+			
 			spanStore2.addAll(0, (LinkedList<KorapLongSpan>) spanStore1.clone());
 			spanStore1.clear();
-			log.trace("Second store is now: {}", spanStore2.toString());
+
+			if (DEBUG)
+			    log.trace("Second store is now: {}", spanStore2.toString());
 		    };
 
 		    return this.fetchTwoNext();
@@ -593,14 +680,16 @@
 	    };
 
 	    // Don't know.
-	    log.trace("No more fetchNext()");
+	    if (DEBUG)
+		log.trace("No more fetchNext()");
 
-	    more = false;
-	    return false;
+	    return more = false;
 	};
 
 	KorapLongSpan current = spanStore2.removeFirst();
-	log.trace("Fetch from second store: {}", current.toString());
+	
+	if (DEBUG)
+	    log.trace("Fetch from second store: {}", current.toString());
 
 	embeddedStart = current.start;
 	embeddedEnd = current.end;
@@ -614,19 +703,17 @@
     /*
 TODO: Maybe ignore "embedded" parameter and use embeddedPayload directly
      */
-    private void _setMatch (KorapLongSpan embedded) throws IOException {
+    private void _setMatch (Collection<byte[]> embeddedPayload) throws IOException {
 	matchStart = wrapStart;
 	matchEnd = wrapEnd;
 	matchDoc = embeddedDoc;
 	matchPayload.clear();
 
-	if (embedded.payload != null)
-	    matchPayload.addAll(embedded.payload);
+	if (embeddedPayload != null)
+	    matchPayload.addAll(embeddedPayload);
 
-	if (wrapSpans.isPayloadAvailable()) {
-	    Collection<byte[]> payload = wrapSpans.getPayload();
-	    matchPayload.addAll(payload);
-	};
+	if (wrapSpans.isPayloadAvailable())
+	    matchPayload.addAll(wrapSpans.getPayload());
     };
 
 
@@ -637,13 +724,17 @@
 	embedded.doc = embeddedSpans.doc();
 
 	if (embeddedSpans.isPayloadAvailable()) {
-	    Collection<byte[]> payload = embeddedSpans.getPayload();
-	    embedded.payload = new ArrayList<byte[]>(payload.size());
-	    embedded.payload.addAll(payload);
+	    if (embedded.payload == null)
+		embedded.payload = new ArrayList<byte[]>(5);
+	    else
+		embedded.payload.clear();
+	    embedded.payload.addAll(embeddedSpans.getPayload());
 	};
 
 	this.spanStore2.add(embedded);	    
-	log.trace("pushed to spanStore2: {}", embedded.toString());  
+
+	if (DEBUG)
+	    log.trace("pushed to spanStore2: {}", embedded.toString());  
     };
 
 
diff --git a/src/main/resources/log4j.properties b/src/main/resources/log4j.properties
index 3e26bdd..e876668 100644
--- a/src/main/resources/log4j.properties
+++ b/src/main/resources/log4j.properties
@@ -2,18 +2,24 @@
 
 # log4j.rootLogger = DEBUG, stdout
 
+# Spans:
 #log4j.logger.de.ids_mannheim.korap.query.spans.ElementSpans = TRACE, stdout
+#log4j.logger.de.ids_mannheim.korap.query.spans.KorapTermSpan = TRACE, stdout
 #log4j.logger.de.ids_mannheim.korap.query.spans.WithinSpans = TRACE, stdout
 #log4j.logger.de.ids_mannheim.korap.query.SpanNextQuery = TRACE, stdout
 #log4j.logger.de.ids_mannheim.korap.query.spans.NextSpans = TRACE, stdout
 #log4j.logger.de.ids_mannheim.korap.query.spans.SimpleSpans = TRACE, stdout
-#log4j.logger.de.ids_mannheim.korap.query.spans.KorapTermSpan = TRACE, stdout
 #log4j.logger.de.ids_mannheim.korap.query.spans.ClassSpans = TRACE, stdout
-# log4j.logger.de.ids_mannheim.korap.query.spans.MatchSpans = TRACE, stdout
-#log4j.logger.de.ids_mannheim.korap.KorapIndex = TRACE, stdout
-#log4j.logger.de.ids_mannheim.korap.KorapMatch = TRACE, stdout
+#log4j.logger.de.ids_mannheim.korap.query.spans.MatchSpans = TRACE, stdout
+
+# Collections
 #log4j.logger.de.ids_mannheim.korap.KorapFilter = TRACE, stdout
 #log4j.logger.de.ids_mannheim.korap.KorapCollection = TRACE, stdout
+
+
+# Results:
+#log4j.logger.de.ids_mannheim.korap.KorapIndex = TRACE, stdout
+#log4j.logger.de.ids_mannheim.korap.KorapMatch = TRACE, stdout
 #log4j.logger.de.ids_mannheim.korap.index.PositionsToOffset = TRACE, stdout
 
 #log4j.logger.de.ids_mannheim.korap.index.TestSegmentIndex = TRACE, stdout
diff --git a/src/test/java/de/ids_mannheim/korap/benchmark/TestBenchmarkElementSpans.java b/src/test/java/de/ids_mannheim/korap/benchmark/TestBenchmarkElementSpans.java
index 39c3c2a..cdaf9fe 100644
--- a/src/test/java/de/ids_mannheim/korap/benchmark/TestBenchmarkElementSpans.java
+++ b/src/test/java/de/ids_mannheim/korap/benchmark/TestBenchmarkElementSpans.java
@@ -26,7 +26,7 @@
 public class TestBenchmarkElementSpans {
 
     @Test
-    public void checkspans1 () throws IOException {
+    public void checkBenchmark1 () throws IOException {
 	Properties prop = new Properties();
 	InputStream fr = new FileInputStream(getClass().getResource("/korap.conf").getFile());
 	prop.load(fr);
@@ -37,70 +37,162 @@
 	// Create a container for virtual collections:
 	KorapCollection kc = new KorapCollection(ki);
 
-	// Construct filter generator
-	// KorapFilter kf = new KorapFilter();
-
-	// The virtual collection consists of all documents that have
-	// the textClasses "reisen" and "freizeit"
-	//	kc.filter( kf.and("textClass", "reisen").and("textClass", "freizeit-unterhaltung") );
-
-	// This is real slow atm - sorry
-	// kc.filter(kf.and("textClass", "kultur"));
-
-
-	// Create a query
-	// KorapQuery kq = new KorapQuery("tokens");
-
 	long t1 = 0, t2 = 0;
+	/// cosmas20.json!!!
+	String json = getString(getClass().getResource("/queries/benchmark1.jsonld").getFile());
+
+	int rounds = 1000;
+
+	KorapResult kr = new KorapResult();
+
 	t1 = System.nanoTime();
-
-	String json = getString(getClass().getResource("/queries/bsp19.jsonld").getFile());
-
-	int rounds = 1;
-
 	for (int i = 1; i <= rounds; i++) {
-	    /*
-	    SpanQuery query =
-		kq.within(
-			  kq.tag("xip/const:NPA"),
-			  kq._(1,
-			       kq.seq(
-				      kq._(2, kq.seg("cnx/p:A").with("mate/m:number:sg"))
-				      ).append(
-					       kq.seg("opennlp/p:NN").with("tt/p:NN")
-					       )
-			       )
-			  ).toQuery();
-	    */
-	    // SpanQuery query = kq.tag("s").toQuery();
-
-	    KorapResult kr = new KorapSearch(json).run(ki);
-	    System.err.println(kr.toJSON());
+	    kr = new KorapSearch(json).run(ki);
 	};
-
 	t2 = System.nanoTime();
 
+	assertEquals("TotalResults", 30751, kr.getTotalResults());
+
+	// System.err.println(kr.toJSON());
+
+
 	//	long seconds = (long) (t2 - t1 / 1000) % 60 ;
 	double seconds = (double)(t2-t1) / 1000000000.0;
 	
 	System.out.println("It took " + seconds + " seconds");
 
+	// 100 times:
+	// 43,538 sec
+	// 4.874
 
-	//	kc = new KorapCollection("{\"meta\":[{\"@type\":\"korap:meta-filter\",\"@value\":{\"@type\":\"korap:term\",\"@field\":\"korap:field#corpusID\",\"@value\":\"A00\"}},{\"@type\":\"korap:meta-extend\",\"@value\":{\"@type\":\"korap:term\",\"@field\":\"korap:field#corpusID\",\"@value\":\"A01\"}}]}");
-
-	//	kc = new KorapCollection("{\"meta\":[{\"@type\":\"korap:meta-filter\",\"@value\":{\"@type\":\"korap:term\",\"@field\":\"korap:field#corpusID\",\"@value\":\"A01\"}}]}");
-	/*
-	kc = new KorapCollection("{\"meta\":[{\"@type\":\"korap:meta-filter\",\"@value\":{\"@type\":\"korap:term\",\"@field\":\"korap:field#textClass\",\"@value\":\"reisen\"}}]}");
-	kc.setIndex(ki);
-
-	System.err.println(kc.getFilter(0).toString());
-	System.err.println(kc.numberOf("documents"));
-
-	*/
-
-	// assertEquals(14, kc.numberOf("documents"));
+	// 1000 times:
+	// 36.613 sec
     };
 
+
+    @Test
+    public void checkBenchmark2JSON () throws IOException {
+	Properties prop = new Properties();
+	InputStream fr = new FileInputStream(getClass().getResource("/korap.conf").getFile());
+	prop.load(fr);
+
+	// Get the real index
+	KorapIndex ki = new KorapIndex(new MMapDirectory(new File(prop.getProperty("lucene.indexDir"))));
+
+	// Create a container for virtual collections:
+	KorapCollection kc = new KorapCollection(ki);
+
+	long t1 = 0, t2 = 0;
+	/// cosmas20.json!!!
+	String json = getString(getClass().getResource("/queries/benchmark2.jsonld").getFile());
+
+	int rounds = 10000;
+
+	KorapResult kr = new KorapResult();
+	String result = new String("");
+
+	t1 = System.nanoTime();
+	double length = 0;
+	for (int i = 1; i <= rounds; i++) {
+	    kr = new KorapSearch(json).run(ki);
+	    length += kr.toJSON().length();
+	};
+	t2 = System.nanoTime();
+
+	//	assertEquals("TotalResults", 30751, kr.getTotalResults());
+
+	// System.err.println(kr.toJSON());
+
+	//	long seconds = (long) (t2 - t1 / 1000) % 60 ;
+	double seconds = (double)(t2-t1) / 1000000000.0;
+	
+	System.out.println("It took " + seconds + " seconds");
+
+	// 10000 times:
+	//  77.167124985 sec
+    };
+
+    @Test
+    public void checkBenchmarkIndexDocuments () throws IOException {
+	long t1 = 0, t2 = 0;
+
+	int rounds = 10;
+
+	ArrayList<String> docs = new ArrayList<String>(700);
+
+	for (int a = 0; a < 50; a++) {
+	    for (String d : new String[] {"00001", "00002", "00003",
+				   "00004", "00005", "00006", "02439"}) {
+		docs.add(d);
+	    };
+	};
+
+	t1 = System.nanoTime();
+	double length = 0;
+	for (int i = 1; i <= rounds; i++) {
+	    // Construct index
+	    KorapIndex ki = new KorapIndex();
+
+	    // Indexing test files
+	    for (String d : docs) {
+		FieldDocument fd = ki.addDocFile(
+		    getClass().getResource("/wiki/" + d + ".json.gz").getFile(),
+		    true
+		);
+	    };
+	    ki.commit();
+	};
+	t2 = System.nanoTime();
+
+	double seconds = (double)(t2-t1) / 1000000000.0;
+	System.out.println("It took " + seconds + " seconds");
+
+	// 10 times / 350 docs:
+	// 36.26158006 seconds
+	// 32.52575097 seconds
+    };
+
+
+    @Test
+    public void checkBenchmark3 () throws IOException {
+	Properties prop = new Properties();
+	InputStream fr = new FileInputStream(getClass().getResource("/korap.conf").getFile());
+	prop.load(fr);
+
+	// Get the real index
+	KorapIndex ki = new KorapIndex(new MMapDirectory(new File(prop.getProperty("lucene.indexDir"))));
+
+	// Create a container for virtual collections:
+	KorapCollection kc = new KorapCollection(ki);
+
+	long t1 = 0, t2 = 0;
+	/// cosmas20.json!!!
+	String json = getString(getClass().getResource("/queries/benchmark3.jsonld").getFile());
+
+	int rounds = 500;
+
+	KorapResult kr = new KorapResult();
+
+	t1 = System.nanoTime();
+	for (int i = 1; i <= rounds; i++) {
+	    kr = new KorapSearch(json).run(ki);
+	};
+	t2 = System.nanoTime();
+
+	assertEquals("TotalResults", 70229, kr.getTotalResults());
+
+	// System.err.println(kr.toJSON());
+
+	//	long seconds = (long) (t2 - t1 / 1000) % 60 ;
+	double seconds = (double)(t2-t1) / 1000000000.0;
+	
+	System.out.println("It took " + seconds + " seconds");
+
+	// 500 times:
+	// 71.715862716 seconds
+    };
+
+
     public static String getString (String path) {
 	StringBuilder contentBuilder = new StringBuilder();
 	try {
diff --git a/src/test/resources/queries/benchmark1.jsonld b/src/test/resources/queries/benchmark1.jsonld
new file mode 100644
index 0000000..79403b4
--- /dev/null
+++ b/src/test/resources/queries/benchmark1.jsonld
@@ -0,0 +1,25 @@
+{
+    "@context" : "http://ids-mannheim.de/ns/KorAP/json-ld/v0.1/context.jsonld",
+    "query": {
+	"@type": "korap:group", 
+	"operation": "operation:position", 
+	"frame": "frame:contains",
+	"operands": [
+	    {
+		"@type": "korap:span",
+		"layer" : "c",
+		"foundry" : "cnx",
+		"key": "np"
+	    }, 
+	    {
+		"@type": "korap:token",
+		"wrap" : {
+		    "@type": "korap:term", 
+		    "foundry": "mate",
+		    "layer": "pos",
+		    "key" : "NE"
+		}
+	    }
+	]
+    }
+}
diff --git a/src/test/resources/queries/benchmark2.jsonld b/src/test/resources/queries/benchmark2.jsonld
new file mode 100644
index 0000000..81c1016
--- /dev/null
+++ b/src/test/resources/queries/benchmark2.jsonld
@@ -0,0 +1,20 @@
+{
+    "@context" : "http://ids-mannheim.de/ns/KorAP/json-ld/v0.1/context.jsonld",
+    "query": {
+	"@type": "korap:token", 
+	"wrap" : {
+	    "@type": "korap:term", 
+	    "layer": "orth",
+	    "key" : "Buchstabe"
+	}
+    },
+    "meta" : {
+	"count": 100,
+	"cutOff": false,
+	"context":{
+	    "left": [ "token", 10 ],
+	    "right": [ "token", 10 ]
+	},
+	"startPage": 1
+    }
+}
diff --git a/src/test/resources/queries/benchmark3.jsonld b/src/test/resources/queries/benchmark3.jsonld
new file mode 100644
index 0000000..36acfe9
--- /dev/null
+++ b/src/test/resources/queries/benchmark3.jsonld
@@ -0,0 +1,27 @@
+{
+    "@context" : "http://ids-mannheim.de/ns/KorAP/json-ld/v0.1/context.jsonld",
+    "query": {
+	"@type": "korap:group", 
+	"operation": "operation:sequence",
+	"operands": [
+	    {
+		"@type": "korap:token",
+		"wrap" : {
+		    "@type": "korap:term", 
+		    "foundry": "mate",
+		    "layer": "pos",
+		    "key" : "ADJA"
+		}
+	    },
+	    {
+		"@type": "korap:token",
+		"wrap" : {
+		    "@type": "korap:term", 
+		    "foundry": "mate",
+		    "layer": "pos",
+		    "key" : "NE"
+		}
+	    }
+	]
+    }
+}
diff --git a/src/test/resources/queries/bsp1.jsonld b/src/test/resources/queries/bsp1.jsonld
index 36fb042..5361a5c 100644
--- a/src/test/resources/queries/bsp1.jsonld
+++ b/src/test/resources/queries/bsp1.jsonld
@@ -1,146 +1,46 @@
 {
-  "@context" : {
-    "korap" : "http://ids-mannheim.de/ns/KorAP/json-ld/v0.1/",
-    "query" : "korap:query",
-    "meta" : "korap:meta",
-    "collections" : {
-      "@id" : "korap:collections",
-      "@container" : "@list"
-    },
-    "token" : "korap:token/",
-    "distance" : "korap:distance/",
-    "boundary" : "korap:boundary/",
-    "group" : "korap:group/",
-    "span" : "korap:span/",
-    "term" : "korap:term/",
-    "termGroup" : "korap:termGroup/",
-    "wrap" : "token:wrap",
-    "operation" : {
-      "@id" : "group:operation/",
-      "@type" : "@id"
-    },
-    "class" : {
-      "@id" : "group:class",
-      "@type" : "xsd:integer"
-    },
-    "operands" : {
-      "@id" : "group:operands",
-      "@container" : "@list"
-    },
-    "frame" : {
-      "@id" : "group:frame/",
-      "@type" : "@id"
-    },
-    "classRef" : {
-      "@id" : "group:classRef",
-      "@type" : "xsd:integer"
-    },
-    "spanRef" : {
-      "@id" : "group:spanRef",
-      "@type" : "xsd:integer"
-    },
-    "classRefOp" : {
-      "@id" : "group:classRefOp",
-      "@type" : "@id"
-    },
-    "min" : {
-      "@id" : "boundary:min",
-      "@type" : "xsd:integer"
-    },
-    "max" : {
-      "@id" : "boundary:max",
-      "@type" : "xsd:integer"
-    },
-    "exclude" : {
-      "@id" : "group:exclude",
-      "@type" : "xsd:boolean"
-    },
-    "distances" : {
-      "@id" : "group:distances",
-      "@container" : "@list"
-    },
-    "inOrder" : {
-      "@id" : "group:inOrder",
-      "@type" : "xsd:boolean"
-    },
-    "exclude" : {
-      "@id" : "group:exclude",
-      "@type" : "xsd:boolean"
-    },
-    "key" : {
-      "@id" : "korap:key",
-      "@type" : "xsd:string"
-    },
-    "foundry" : {
-      "@id" : "korap:foundry",
-      "@type" : "xsd:string"
-    },
-    "layer" : {
-      "@id" : "korap:layer",
-      "@type" : "xsd:string"
-    },
-    "value" : {
-      "@id" : "korap:value",
-      "@type" : "xsd:string"
-    },
-    "caseInsensitive" : {
-      "@id" : "term:caseInsensitive",
-      "@type" : "xsd:boolean"
-    },
-    "type" : {
-      "@id" : "term:type/",
-      "@type" : "@id"
-    },
-    "match" : {
-      "@id" : "term:match/",
-      "@type" : "@id"
-    },
-    "relation" : {
-      "@id" : "korap:relation/",
-      "@type" : "@id"
+    "@context" : "http://ids-mannheim.de/ns/KorAP/json-ld/v0.1/context.jsonld",
+    "query": {
+	"@type": "korap:group", 
+	"operation": "operation:or",
+	"operands": [
+	    {
+		"@type": "korap:token", 
+		"wrap": {
+		    "@type": "korap:term", 
+		    "layer": "base",
+		    "key": "foo"
+		}
+	    }, 
+	    {
+		"@type": "korap:group", 
+		"min" : 0,
+		"operation": "operation:repetition",
+		"operands": [
+		    {
+			"@type": "korap:group", 
+			"operation" : "operation:sequence",
+			"operands": [
+			    {
+				"@type": "korap:token", 
+				"wrap": {
+				    "@type": "korap:term", 
+				    "key": "foo", 
+				    "layer" : "base"
+				}
+			    }, 
+			    {
+				"@type": "korap:token", 
+				"wrap": {
+				    "@type": "korap:term",
+				    "layer": "base",
+				    "key" : "bar"
+				}
+			    }
+			]
+		    }
+		]
+	    }
+	]
     }
-  },
-  "query": {
-    "@type": "korap:group", 
-    "operation": "operation:or",
-    "operands": [
-      {
-        "@type": "korap:token", 
-        "wrap": {
-          "@type": "korap:term", 
-	  "layer": "base",
-          "key": "foo"
-        }
-      }, 
-      {
-        "@type": "korap:group", 
-	"min" : 0,
-        "operation": "operation:repetition",
-        "operands": [
-          {
-            "@type": "korap:group", 
-            "operation" : "operation:sequence",
-            "operands": [
-              {
-                "@type": "korap:token", 
-                "wrap": {
-                  "@type": "korap:term", 
-                  "key": "foo", 
-                  "layer" : "base"
-                }
-              }, 
-              {
-                "@type": "korap:token", 
-                "wrap": {
-                  "@type": "korap:term",
-                  "layer": "base",
-                  "key" : "bar"
-                }
-              }
-            ]
-          }
-        ]
-      }
-    ]
-  }
-}
\ No newline at end of file
+}
diff --git a/src/test/resources/queries/bsp19.jsonld b/src/test/resources/queries/bsp19.jsonld
index 5145e9f..1e12ed9 100644
--- a/src/test/resources/queries/bsp19.jsonld
+++ b/src/test/resources/queries/bsp19.jsonld
@@ -39,7 +39,7 @@
     },
     "meta" : {
 	"count": 25,
-	"cutOff": true,
+	"cutOff": false,
 	"context":{
 	    "left": [ "char", 110 ],
 	    "right": [ "char", 110 ]
diff --git a/src/test/resources/queries/bsp2.jsonld b/src/test/resources/queries/bsp2.jsonld
index 08ac500..9a3a076 100644
--- a/src/test/resources/queries/bsp2.jsonld
+++ b/src/test/resources/queries/bsp2.jsonld
@@ -1,142 +1,42 @@
 {
-  "@context" : {
-    "korap" : "http://ids-mannheim.de/ns/KorAP/json-ld/v0.1/",
-    "query" : "korap:query",
-    "meta" : "korap:meta",
-    "collections" : {
-      "@id" : "korap:collections",
-      "@container" : "@list"
-    },
-    "token" : "korap:token/",
-    "distance" : "korap:distance/",
-    "boundary" : "korap:boundary/",
-    "group" : "korap:group/",
-    "span" : "korap:span/",
-    "term" : "korap:term/",
-    "termGroup" : "korap:termGroup/",
-    "wrap" : "token:wrap",
-    "operation" : {
-      "@id" : "group:operation/",
-      "@type" : "@id"
-    },
-    "class" : {
-      "@id" : "group:class",
-      "@type" : "xsd:integer"
-    },
-    "operands" : {
-      "@id" : "group:operands",
-      "@container" : "@list"
-    },
-    "frame" : {
-      "@id" : "group:frame/",
-      "@type" : "@id"
-    },
-    "classRef" : {
-      "@id" : "group:classRef",
-      "@type" : "xsd:integer"
-    },
-    "spanRef" : {
-      "@id" : "group:spanRef",
-      "@type" : "xsd:integer"
-    },
-    "classRefOp" : {
-      "@id" : "group:classRefOp",
-      "@type" : "@id"
-    },
-    "min" : {
-      "@id" : "boundary:min",
-      "@type" : "xsd:integer"
-    },
-    "max" : {
-      "@id" : "boundary:max",
-      "@type" : "xsd:integer"
-    },
-    "exclude" : {
-      "@id" : "group:exclude",
-      "@type" : "xsd:boolean"
-    },
-    "distances" : {
-      "@id" : "group:distances",
-      "@container" : "@list"
-    },
-    "inOrder" : {
-      "@id" : "group:inOrder",
-      "@type" : "xsd:boolean"
-    },
-    "exclude" : {
-      "@id" : "group:exclude",
-      "@type" : "xsd:boolean"
-    },
-    "key" : {
-      "@id" : "korap:key",
-      "@type" : "xsd:string"
-    },
-    "foundry" : {
-      "@id" : "korap:foundry",
-      "@type" : "xsd:string"
-    },
-    "layer" : {
-      "@id" : "korap:layer",
-      "@type" : "xsd:string"
-    },
-    "value" : {
-      "@id" : "korap:value",
-      "@type" : "xsd:string"
-    },
-    "caseInsensitive" : {
-      "@id" : "term:caseInsensitive",
-      "@type" : "xsd:boolean"
-    },
-    "type" : {
-      "@id" : "term:type/",
-      "@type" : "@id"
-    },
-    "match" : {
-      "@id" : "term:match/",
-      "@type" : "@id"
-    },
-    "relation" : {
-      "@id" : "korap:relation/",
-      "@type" : "@id"
+    "@context" : "http://ids-mannheim.de/ns/KorAP/json-ld/v0.1/context.jsonld",
+    "query": {
+	"@type": "korap:group", 
+	"operation" : "operation:sequence",
+	"operands": [
+	    {
+		"@type": "korap:group", 
+		"operation": "operation:or",
+		"operands": [
+		    {
+			"@type": "korap:token", 
+			"wrap": {
+			    "@type": "korap:term", 
+			    "foundry": "mate", 
+			    "layer": "lemma", 
+			    "key" : "foo"
+			}
+		    }, 
+		    {
+			"@type": "korap:token", 
+			"wrap": {
+			    "@type": "korap:term", 
+			    "foundry": "mate", 
+			    "layer": "lemma",
+			    "key" : "bar"
+			}
+		    }
+		]
+	    }, 
+	    {
+		"@type": "korap:token", 
+		"wrap": {
+		    "@type": "korap:term", 
+		    "foundry": "mate", 
+		    "layer": "lemma",
+		    "key" : "foobar"
+		}
+	    }
+	]
     }
-  },
-  "query": {
-    "@type": "korap:group", 
-    "operation" : "operation:sequence",
-    "operands": [
-      {
-        "@type": "korap:group", 
-        "operation": "operation:or",
-        "operands": [
-          {
-            "@type": "korap:token", 
-            "wrap": {
-              "@type": "korap:term", 
-	      "foundry": "mate", 
-              "layer": "lemma", 
-              "key" : "foo"
-            }
-          }, 
-          {
-            "@type": "korap:token", 
-            "wrap": {
-              "@type": "korap:term", 
-	      "foundry": "mate", 
-              "layer": "lemma",
-              "key" : "bar"
-            }
-          }
-        ]
-      }, 
-      {
-        "@type": "korap:token", 
-        "wrap": {
-          "@type": "korap:term", 
-	  "foundry": "mate", 
-          "layer": "lemma",
-          "key" : "foobar"
-        }
-      }
-    ]
-  }
 }
diff --git a/src/test/resources/queries/cosmas10.json b/src/test/resources/queries/cosmas10.json
index d958810..08361d2 100644
--- a/src/test/resources/queries/cosmas10.json
+++ b/src/test/resources/queries/cosmas10.json
@@ -1,5 +1,5 @@
 {
-  "context" : "http://ids-mannheim.de/ns/KorAP/json-ld/v0.1/context.jsonld",
+  "@context" : "http://ids-mannheim.de/ns/KorAP/json-ld/v0.1/context.jsonld",
   "query" : {
     "@type" : "korap:group",
     "operation" : "operation:sequence",
@@ -38,4 +38,4 @@
       }
     } ]
   }
-}
\ No newline at end of file
+}
diff --git a/src/test/resources/queries/cosmas10b.json b/src/test/resources/queries/cosmas10b.json
index 6f84a2b..618a25f 100644
--- a/src/test/resources/queries/cosmas10b.json
+++ b/src/test/resources/queries/cosmas10b.json
@@ -1,5 +1,5 @@
 {
-  "context" : "http://ids-mannheim.de/ns/KorAP/json-ld/v0.1/context.jsonld",
+  "@context" : "http://ids-mannheim.de/ns/KorAP/json-ld/v0.1/context.jsonld",
   "query" : {
     "@type" : "korap:group",
     "operation" : "operation:sequence",
diff --git a/src/test/resources/queries/cosmas16.json b/src/test/resources/queries/cosmas16.json
index 61333fd..b392098 100644
--- a/src/test/resources/queries/cosmas16.json
+++ b/src/test/resources/queries/cosmas16.json
@@ -1,5 +1,5 @@
 {
-  "context" : "http://ids-mannheim.de/ns/KorAP/json-ld/v0.1/context.jsonld",
+  "@context" : "http://ids-mannheim.de/ns/KorAP/json-ld/v0.1/context.jsonld",
   "query" : {
     "@type" : "korap:group",
     "operation" : "operation:submatch",
@@ -28,4 +28,4 @@
       } ]
     } ]
   }
-}
\ No newline at end of file
+}
diff --git a/src/test/resources/queries/cosmas17.json b/src/test/resources/queries/cosmas17.json
index 32e073b..1eec888 100644
--- a/src/test/resources/queries/cosmas17.json
+++ b/src/test/resources/queries/cosmas17.json
@@ -1,5 +1,5 @@
 {
-  "context" : "http://ids-mannheim.de/ns/KorAP/json-ld/v0.1/context.jsonld",
+  "@context" : "http://ids-mannheim.de/ns/KorAP/json-ld/v0.1/context.jsonld",
   "query" : {
     "@type" : "korap:group",
     "operation" : "operation:position",
@@ -18,4 +18,4 @@
       }
     } ]
   }
-}
\ No newline at end of file
+}
diff --git a/src/test/resources/queries/cosmas20.json b/src/test/resources/queries/cosmas20.json
index 32887c7..3a4e040 100644
--- a/src/test/resources/queries/cosmas20.json
+++ b/src/test/resources/queries/cosmas20.json
@@ -27,4 +27,4 @@
       } ]
     } ]
   }
-}
\ No newline at end of file
+}
diff --git a/src/test/resources/queries/cosmas3.json b/src/test/resources/queries/cosmas3.json
index 2c77f42..d86045e 100644
--- a/src/test/resources/queries/cosmas3.json
+++ b/src/test/resources/queries/cosmas3.json
@@ -1,5 +1,5 @@
 {
-  "context" : "http://ids-mannheim.de/ns/KorAP/json-ld/v0.1/context.jsonld",
+  "@context" : "http://ids-mannheim.de/ns/KorAP/json-ld/v0.1/context.jsonld",
   "query" : {
     "@type" : "korap:group",
     "operation" : "operation:sequence",
@@ -28,4 +28,4 @@
       }
     } ]
   }
-}
\ No newline at end of file
+}
diff --git a/src/test/resources/queries/cosmas4.json b/src/test/resources/queries/cosmas4.json
index 2040995..2dff321 100644
--- a/src/test/resources/queries/cosmas4.json
+++ b/src/test/resources/queries/cosmas4.json
@@ -1,5 +1,5 @@
 {
-  "context" : "http://ids-mannheim.de/ns/KorAP/json-ld/v0.1/context.jsonld",
+  "@context" : "http://ids-mannheim.de/ns/KorAP/json-ld/v0.1/context.jsonld",
   "query" : {
     "@type" : "korap:group",
     "operation" : "operation:sequence",
@@ -37,4 +37,4 @@
       }
     } ]
   }
-}
\ No newline at end of file
+}
diff --git a/src/test/resources/queries/cosmas4b.json b/src/test/resources/queries/cosmas4b.json
index 8fe2344..4b44753 100644
--- a/src/test/resources/queries/cosmas4b.json
+++ b/src/test/resources/queries/cosmas4b.json
@@ -1,5 +1,5 @@
 {
-  "context" : "http://ids-mannheim.de/ns/KorAP/json-ld/v0.1/context.jsonld",
+  "@context" : "http://ids-mannheim.de/ns/KorAP/json-ld/v0.1/context.jsonld",
   "query" : {
     "@type" : "korap:group",
     "operation" : "operation:sequence",
diff --git a/src/test/resources/queries/cosmas5.json b/src/test/resources/queries/cosmas5.json
new file mode 100644
index 0000000..a96845d
--- /dev/null
+++ b/src/test/resources/queries/cosmas5.json
@@ -0,0 +1,55 @@
+{
+  "@context" : "http://ids-mannheim.de/ns/KorAP/json-ld/v0.1/context.jsonld",
+  "query" : {
+    "@type" : "korap:group",
+    "operation" : "operation:sequence",
+    "inOrder" : true,
+    "distances" : [ {
+      "@type" : "korap:distance",
+      "key" : "w",
+      "min" : 0,
+      "max" : 5
+    } ],
+    "operands" : [ {
+      "@type" : "korap:group",
+      "operation" : "operation:sequence",
+      "inOrder" : true,
+      "distances" : [ {
+        "@type" : "korap:distance",
+        "key" : "w",
+        "min" : 1,
+        "max" : 3
+      }, {
+        "@type" : "korap:distance",
+        "key" : "s",
+        "min" : 0,
+        "max" : 1
+      } ],
+      "operands" : [ {
+        "@type" : "korap:token",
+        "wrap" : {
+          "@type" : "korap:term",
+          "key" : "das",
+          "layer" : "orth",
+          "match" : "match:eq"
+        }
+      }, {
+        "@type" : "korap:token",
+        "wrap" : {
+          "@type" : "korap:term",
+          "key" : "Buch",
+          "layer" : "orth",
+          "match" : "match:eq"
+        }
+      } ]
+    }, {
+      "@type" : "korap:token",
+      "wrap" : {
+        "@type" : "korap:term",
+        "key" : "Tisch",
+        "layer" : "orth",
+        "match" : "match:eq"
+      }
+    } ]
+  }
+}
\ No newline at end of file
diff --git a/src/test/resources/queries/cosmas6.json b/src/test/resources/queries/cosmas6.json
new file mode 100644
index 0000000..06a9726
--- /dev/null
+++ b/src/test/resources/queries/cosmas6.json
@@ -0,0 +1,55 @@
+{
+  "@context" : "http://ids-mannheim.de/ns/KorAP/json-ld/v0.1/context.jsonld",
+  "query" : {
+    "@type" : "korap:group",
+    "operation" : "operation:sequence",
+    "inOrder" : true,
+    "distances" : [ {
+      "@type" : "korap:distance",
+      "key" : "w",
+      "min" : 0,
+      "max" : 5
+    } ],
+    "operands" : [ {
+      "@type" : "korap:token",
+      "wrap" : {
+        "@type" : "korap:term",
+        "key" : "Tisch",
+        "layer" : "orth",
+        "match" : "match:eq"
+      }
+    }, {
+      "@type" : "korap:group",
+      "operation" : "operation:sequence",
+      "inOrder" : true,
+      "distances" : [ {
+        "@type" : "korap:distance",
+        "key" : "w",
+        "min" : 1,
+        "max" : 3
+      }, {
+        "@type" : "korap:distance",
+        "key" : "s",
+        "min" : 0,
+        "max" : 1
+      } ],
+      "operands" : [ {
+        "@type" : "korap:token",
+        "wrap" : {
+          "@type" : "korap:term",
+          "key" : "das",
+          "layer" : "orth",
+          "match" : "match:eq"
+        }
+      }, {
+        "@type" : "korap:token",
+        "wrap" : {
+          "@type" : "korap:term",
+          "key" : "Buch",
+          "layer" : "orth",
+          "match" : "match:eq"
+        }
+      } ]
+    } ]
+  }
+}
\ No newline at end of file
