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
