diff --git a/src/main/java/de/ids_mannheim/korap/KorapQuery.java b/src/main/java/de/ids_mannheim/korap/KorapQuery.java
index b1b7e2f..6df320e 100644
--- a/src/main/java/de/ids_mannheim/korap/KorapQuery.java
+++ b/src/main/java/de/ids_mannheim/korap/KorapQuery.java
@@ -213,6 +213,11 @@
                 );
 
 	    case "operation:sequence":
+		if (DEBUG)  {
+		    log.trace("Found new sequence");
+		    System.err.println("----");
+		};
+
 		if (operands.size() < 2)
 		    throw new QueryException(
 		        "SpanSequenceQuery needs at least two operands"
@@ -320,6 +325,9 @@
 		    throw new QueryException("The maximum repetition value has to " +
 					     "be greater or equal to the minimum repetition value");
 
+		if (DEBUG)
+		    log.trace("Found new repetition %d-%d", min, max);
+
 		return new SpanRepetitionQueryWrapper(
 		    this.fromJSON(operands.get(0)), min, max
 		);
diff --git a/src/main/java/de/ids_mannheim/korap/query/wrap/SpanSequenceQueryWrapper.java b/src/main/java/de/ids_mannheim/korap/query/wrap/SpanSequenceQueryWrapper.java
index 9732556..9b695d8 100644
--- a/src/main/java/de/ids_mannheim/korap/query/wrap/SpanSequenceQueryWrapper.java
+++ b/src/main/java/de/ids_mannheim/korap/query/wrap/SpanSequenceQueryWrapper.java
@@ -17,6 +17,9 @@
 import org.apache.lucene.search.spans.SpanTermQuery;
 import de.ids_mannheim.korap.query.wrap.SpanQueryWrapperInterface;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 /**
  * @author Nils Diewald
  */
@@ -24,6 +27,13 @@
     private String field;
     private ArrayList<SpanQuery> segments;
     private ArrayList<DistanceConstraint> constraints;
+
+    // Logger
+    private final static Logger log = LoggerFactory.getLogger(SpanSequenceQueryWrapper.class);
+
+    // This advices the java compiler to ignore all loggings
+    public static final boolean DEBUG = false;
+    
     private boolean
 	isInOrder = true,
 	isNull = true,
@@ -47,6 +57,8 @@
 
     public SpanSequenceQueryWrapper (String field, SpanQuery sq) {
 	this(field);
+	if (DEBUG)
+	    log.trace("New spanquery sequence " + sq.toString());
 	this.segments.add((SpanQuery) sq);
 	this.isOptional = false;
 	this.isNull = false;
@@ -58,12 +70,18 @@
 	    this.segments.add((SpanQuery) sswq.toQuery());
 	    this.isNull = false;
 	    if (sswq.isOptional()) {
+		if (DEBUG)
+		    log.trace("New optional query sequence " +
+			      sswq.toQuery().toString());
 		this.isOptional = true;
 		this.lastIsOptional = true;
 		this.firstIsOptional = true;
 	    }
 	    else {
 		this.isOptional = false;
+		if (DEBUG)
+		    log.trace("New non-optional query sequence " +
+			      sswq.toQuery().toString());
 	    };
 	};
     };
@@ -95,7 +113,9 @@
     };
 
     public SpanSequenceQueryWrapper append (String term) {
-	return this.append((SpanQuery) new SpanTermQuery(new Term(field, term)));
+	return this.append(
+	    (SpanQuery) new SpanTermQuery(new Term(field, term))
+        );
     };
     
     public SpanSequenceQueryWrapper append (SpanQuery query) {
@@ -104,6 +124,10 @@
 
 	// Check if there has to be alternation magic in action
 	if (this.lastIsOptional) {
+	    if (DEBUG)
+		log.trace("Append non-opt query to opt query " +
+			  query.toString());
+
 	    SpanAlterQueryWrapper saqw = new SpanAlterQueryWrapper(field, query);
 	    SpanSequenceQueryWrapper ssqw = new SpanSequenceQueryWrapper(field, query);
 	    // Remove last element of the list and prepend it
@@ -119,6 +143,10 @@
 	    this.segments.add((SpanQuery) saqw.toQuery());
 	}
 	else {
+	    if (DEBUG)
+		log.trace("Append non-opt query to non-opt query " +
+			  query.toString());
+
 	    this.segments.add(query);
 	};
 	
@@ -129,6 +157,9 @@
 	if (!ssq.isNull()) {
 	    SpanQuery appendQuery = ssq.toQuery();
 	    if (!ssq.isOptional()) {
+		if (DEBUG)
+		    log.trace("Append non-opt query to non-opt query " +
+			      appendQuery.toString());
 		return this.append(appendQuery);
 	    };
 	    
@@ -141,9 +172,18 @@
 		ssqw.prepend(lastQuery);
 
 		// Situation is a?b?
-		if (this.lastIsOptional)
+		if (this.lastIsOptional) {
 		    saqw.or(appendQuery);
-		// last stays optional
+		    // last stays optional
+		    if (DEBUG)
+			log.trace("Append opt query to opt query " +
+				  appendQuery.toString());
+
+		}
+		else if (DEBUG) {
+		    log.trace("Append opt query to non-opt query " +
+			      appendQuery.toString());
+		};
 
 		saqw.or(ssqw);
 		this.segments.add((SpanQuery) saqw.toQuery());
@@ -153,6 +193,10 @@
 	    else {
 		this.segments.add(appendQuery);
 
+		if (DEBUG)
+		    log.trace("Append opt query " +
+			      appendQuery.toString());
+
 		// Update boundary optionality
 		this.firstIsOptional = true;
 		this.isOptional      = true;
diff --git a/src/main/resources/log4j.properties b/src/main/resources/log4j.properties
index e885412..3619d79 100644
--- a/src/main/resources/log4j.properties
+++ b/src/main/resources/log4j.properties
@@ -12,6 +12,10 @@
 #log4j.logger.de.ids_mannheim.korap.query.spans.ClassSpans = TRACE, stdout
 #log4j.logger.de.ids_mannheim.korap.query.spans.MatchSpans = TRACE, stdout
 
+# Wrapper
+#log4j.logger.de.ids_mannheim.korap.KorapQuery = TRACE, stdout
+#log4j.logger.de.ids_mannheim.korap.query.wrap.SpanSequenceQueryWrapper = TRACE, stdout
+
 # Collections
 #log4j.logger.de.ids_mannheim.korap.KorapFilter = TRACE, stdout
 #log4j.logger.de.ids_mannheim.korap.KorapCollection = TRACE, stdout
