diff --git a/src/main/java/de/ids_mannheim/korap/KorapQuery.java b/src/main/java/de/ids_mannheim/korap/KorapQuery.java
index 28fbcc0..bb6261c 100644
--- a/src/main/java/de/ids_mannheim/korap/KorapQuery.java
+++ b/src/main/java/de/ids_mannheim/korap/KorapQuery.java
@@ -40,6 +40,10 @@
     // Logger
     private final static Logger log = LoggerFactory.getLogger(KorapQuery.class);
 
+    // This advices the java compiler to ignore all loggings
+    public static final boolean DEBUG = false;
+
+
     /**
      * Constructs a new base object for query generation.
      * @param field The specific index field for the query.
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 ad97152..7e4ee9e 100644
--- a/src/main/java/de/ids_mannheim/korap/query/SpanElementQuery.java
+++ b/src/main/java/de/ids_mannheim/korap/query/SpanElementQuery.java
@@ -19,6 +19,9 @@
 import java.util.Map;
 import java.util.Set;
 
+/**
+ * @author Nils Diewald
+ */
 
 /** Matches spans wrapped by an element. */
 public class SpanElementQuery extends SpanQuery {
@@ -121,7 +124,9 @@
 	    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() + ")");
+	throw new IllegalStateException("field \"" + element.field() + "\" was indexed " +
+					"without position data; cannot run " +
+					"SpanElementQuery (element=" + element.text() + ")");
     };
 
     public String getElementStr () {
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 f10809c..a44ed49 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
@@ -23,7 +23,7 @@
 // TODO: Store payloads in 12 byte instead of the complicated ByteBuffer stuff!
 
 /**
- * @author ndiewald
+ * @author Nils Diewald
  */
 public class ElementSpans extends Spans {
 
@@ -47,6 +47,10 @@
 
     private final static Logger log = LoggerFactory.getLogger(ElementSpans.class);
 
+
+    /**
+     * The constructor.
+     */
     public ElementSpans(DocsAndPositionsEnum postings, Term term) {
 	this.postings = postings;
 	this.term = term;
@@ -61,7 +65,7 @@
     };
 
     // only for EmptyElementSpans (below)
-    ElementSpans() {
+    public ElementSpans() {
 	term = null;
 	postings = null;
     };
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 5fa21d0..e6c0488 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
@@ -90,25 +90,37 @@
     };
 
     public SpanSequenceQueryWrapper withConstraint (int min, int max) {
+	return this.withConstraint(min, max, false);
+    };
+
+    public SpanSequenceQueryWrapper withConstraint (int min, int max, boolean exclusion) {
 	if (this.constraints == null)
 	    this.constraints = new ArrayList<DistanceConstraint>(1);
-	this.constraints.add(new DistanceConstraint(min, max,false));
+	this.constraints.add(new DistanceConstraint(min, max, exclusion));
 	return this;
     };
 
     public SpanSequenceQueryWrapper withConstraint (int min, int max, String unit) {
+	return this.withConstraint(min, max, unit, false);
+    };
+    
+    public SpanSequenceQueryWrapper withConstraint (int min,
+						    int max,
+						    String unit,
+						    boolean exclusion) {
 	if (this.constraints == null)
 	    this.constraints = new ArrayList<DistanceConstraint>(1);
 	if (unit.equals("w"))
-	    this.constraints.add(new DistanceConstraint(min, max,false));
+	    this.constraints.add(new DistanceConstraint(min, max, exclusion));
 	else
 	    this.constraints.add(
 		 new DistanceConstraint(
-                     new SpanElementQuery(this.field, unit), min, max,false)
+                     new SpanElementQuery(this.field, unit), min, max, exclusion)
 	    );
 	return this;
     };
 
+    
     public SpanQuery toQuery () {
 	if (this.segments.size() == 0) {
 	    return (SpanQuery) null;
diff --git a/src/main/resources/log4j.properties b/src/main/resources/log4j.properties
index e876668..c5ac092 100644
--- a/src/main/resources/log4j.properties
+++ b/src/main/resources/log4j.properties
@@ -1,6 +1,6 @@
 ## logger file can be used with
 
-# log4j.rootLogger = DEBUG, stdout
+log4j.rootLogger = DEBUG, stdout
 
 # Spans:
 #log4j.logger.de.ids_mannheim.korap.query.spans.ElementSpans = TRACE, stdout
