diff --git a/src/main/java/de/ids_mannheim/korap/query/SpanFocusQuery.java b/src/main/java/de/ids_mannheim/korap/query/SpanFocusQuery.java
index 959c7ff..ae2e8d5 100644
--- a/src/main/java/de/ids_mannheim/korap/query/SpanFocusQuery.java
+++ b/src/main/java/de/ids_mannheim/korap/query/SpanFocusQuery.java
@@ -99,6 +99,9 @@
             buffer.append((short) classNumbers.get(0) & 0xFF).append(": ");
         }
         buffer.append(this.firstClause.toString());
+        if (!this.isSorted()) {
+            buffer.append(",sorting");
+        }
         buffer.append(')');
         buffer.append(ToStringUtils.boost(getBoost()));
         return buffer.toString();
diff --git a/src/main/java/de/ids_mannheim/korap/query/wrap/SpanAlterQueryWrapper.java b/src/main/java/de/ids_mannheim/korap/query/wrap/SpanAlterQueryWrapper.java
index 9b71cbf..4ed669f 100644
--- a/src/main/java/de/ids_mannheim/korap/query/wrap/SpanAlterQueryWrapper.java
+++ b/src/main/java/de/ids_mannheim/korap/query/wrap/SpanAlterQueryWrapper.java
@@ -1,23 +1,16 @@
 package de.ids_mannheim.korap.query.wrap;
 
-import de.ids_mannheim.korap.query.wrap.SpanRegexQueryWrapper;
-import de.ids_mannheim.korap.query.wrap.SpanWildcardQueryWrapper;
-import de.ids_mannheim.korap.query.wrap.SpanSegmentQueryWrapper;
-import de.ids_mannheim.korap.query.wrap.SpanSimpleQueryWrapper;
-import de.ids_mannheim.korap.query.wrap.SpanQueryWrapper;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.lucene.search.spans.SpanOrQuery;
+import org.apache.lucene.search.spans.SpanQuery;
 
 import de.ids_mannheim.korap.util.QueryException;
 
-import org.apache.lucene.search.spans.SpanQuery;
-import org.apache.lucene.search.spans.SpanTermQuery;
-import org.apache.lucene.search.spans.SpanOrQuery;
-import org.apache.lucene.index.Term;
-
-import java.util.*;
-
 public class SpanAlterQueryWrapper extends SpanQueryWrapper {
     private String field;
-    private SpanQuery query;
     private List<SpanQueryWrapper> alternatives;
 
 
@@ -27,18 +20,10 @@
     };
 
 
-    public SpanAlterQueryWrapper (String field, SpanQuery query) {
-        this.field = field;
-        this.alternatives = new ArrayList<>();
-        this.alternatives.add(new SpanSimpleQueryWrapper(query));
-    };
-
-
     public SpanAlterQueryWrapper (String field, SpanQueryWrapper query) {
         this.field = field;
         this.alternatives = new ArrayList<>();
-        if (query.maybeUnsorted())
-            this.maybeUnsorted = true;
+        this.maybeUnsorted = query.maybeUnsorted();
         this.alternatives.add(query);
     };
 
@@ -48,21 +33,16 @@
         this.alternatives = new ArrayList<>();
         for (String term : terms) {
             this.isNull = false;
-            this.alternatives.add(new SpanSimpleQueryWrapper(
-                    new SpanTermQuery(new Term(this.field, term))));
+            this.alternatives.add(
+                new SpanSimpleQueryWrapper(this.field, term)
+                );
         };
     };
 
 
     public SpanAlterQueryWrapper or (String term) {
-        return this.or(new SpanTermQuery(new Term(this.field, term)));
-    };
-
-
-    public SpanAlterQueryWrapper or (SpanQuery query) {
-        this.alternatives.add(new SpanSimpleQueryWrapper(query));
-        this.isNull = false;
-        return this;
+        SpanQueryWrapper sqw = new SpanSimpleQueryWrapper(this.field, term);
+        return this.or(sqw);
     };
 
 
diff --git a/src/main/java/de/ids_mannheim/korap/query/wrap/SpanAttributeQueryWrapper.java b/src/main/java/de/ids_mannheim/korap/query/wrap/SpanAttributeQueryWrapper.java
index d2941f9..0e22fd7 100644
--- a/src/main/java/de/ids_mannheim/korap/query/wrap/SpanAttributeQueryWrapper.java
+++ b/src/main/java/de/ids_mannheim/korap/query/wrap/SpanAttributeQueryWrapper.java
@@ -31,8 +31,7 @@
             this.isNegative = true;
         };
 
-        if (sqw.maybeUnsorted())
-            this.maybeUnsorted = true;
+        this.maybeUnsorted = sqw.maybeUnsorted();
     };
 
 
diff --git a/src/main/java/de/ids_mannheim/korap/query/wrap/SpanClassQueryWrapper.java b/src/main/java/de/ids_mannheim/korap/query/wrap/SpanClassQueryWrapper.java
index c06194f..ff9ae05 100644
--- a/src/main/java/de/ids_mannheim/korap/query/wrap/SpanClassQueryWrapper.java
+++ b/src/main/java/de/ids_mannheim/korap/query/wrap/SpanClassQueryWrapper.java
@@ -18,6 +18,7 @@
         this.number = number;
         if (number != (byte) 0)
             this.hasClass = true;
+        this.maybeUnsorted = subquery.maybeUnsorted();
     };
 
 
@@ -59,13 +60,6 @@
         return this.subquery.isNegative();
     };
 
-
-    @Override
-    public boolean maybeUnsorted () {
-        return this.subquery.maybeUnsorted();
-    };
-
-
     public SpanQuery toFragmentQuery () throws QueryException {
         if (this.subquery.isNull())
             return (SpanQuery) null;
diff --git a/src/main/java/de/ids_mannheim/korap/query/wrap/SpanElementQueryWrapper.java b/src/main/java/de/ids_mannheim/korap/query/wrap/SpanElementQueryWrapper.java
index 3112dc2..811d0e3 100644
--- a/src/main/java/de/ids_mannheim/korap/query/wrap/SpanElementQueryWrapper.java
+++ b/src/main/java/de/ids_mannheim/korap/query/wrap/SpanElementQueryWrapper.java
@@ -15,7 +15,7 @@
  */
 
 public class SpanElementQueryWrapper extends SpanQueryWrapper {
-    String element;
+    protected String element;
     String field;
 
 
diff --git a/src/main/java/de/ids_mannheim/korap/query/wrap/SpanExpansionQueryWrapper.java b/src/main/java/de/ids_mannheim/korap/query/wrap/SpanExpansionQueryWrapper.java
index f4011c2..a445781 100644
--- a/src/main/java/de/ids_mannheim/korap/query/wrap/SpanExpansionQueryWrapper.java
+++ b/src/main/java/de/ids_mannheim/korap/query/wrap/SpanExpansionQueryWrapper.java
@@ -1,15 +1,10 @@
 package de.ids_mannheim.korap.query.wrap;
 
-import org.apache.lucene.search.RegexpQuery;
 import org.apache.lucene.search.spans.SpanQuery;
-import org.apache.lucene.util.automaton.RegExp;
-import org.apache.lucene.index.Term;
-import de.ids_mannheim.korap.query.wrap.SpanQueryWrapper;
+
 import de.ids_mannheim.korap.query.SpanExpansionQuery;
 import de.ids_mannheim.korap.util.QueryException;
 
-import java.util.*;
-
 /*
  * TODO: SpanExpansionQueryWrapper currently does not support negative extensions!
  */
@@ -40,6 +35,7 @@
         this.isExtended = true;
         if (direction >= 0)
             this.isExtendedToTheRight = true;
+        this.maybeUnsorted = anchor.maybeUnsorted();
     };
 
 
diff --git a/src/main/java/de/ids_mannheim/korap/query/wrap/SpanFocusQueryWrapper.java b/src/main/java/de/ids_mannheim/korap/query/wrap/SpanFocusQueryWrapper.java
index 89d8f65..2c3a39a 100644
--- a/src/main/java/de/ids_mannheim/korap/query/wrap/SpanFocusQueryWrapper.java
+++ b/src/main/java/de/ids_mannheim/korap/query/wrap/SpanFocusQueryWrapper.java
@@ -2,24 +2,11 @@
 
 import org.apache.lucene.search.spans.SpanQuery;
 
+import de.ids_mannheim.korap.query.SpanFocusQuery;
 import de.ids_mannheim.korap.util.QueryException;
 
-import de.ids_mannheim.korap.query.SpanFocusQuery;
-import de.ids_mannheim.korap.query.wrap.SpanQueryWrapper;
-
-import java.util.*;
-
-// Support maybeUnsorted!
-// Rename this to SpanFocusQueryWrapper
 // Support multiple classes
 
-// Sorting:
-// - Sort with a buffer of matches, e.g. 25/50,
-// So gather 50 hits, sort them, return the first 25,
-// Add new 25, sort the last 50, return 25 etc.
-// On processing, there should be an ability to raise
-// a warning, in case an unordered result bubbles up.
-
 public class SpanFocusQueryWrapper extends SpanQueryWrapper {
     private SpanQueryWrapper subquery;
     private byte number;
@@ -52,9 +39,16 @@
     public SpanQuery toFragmentQuery () throws QueryException {
         if (this.subquery.isNull())
             return (SpanQuery) null;
-        return new SpanFocusQuery(
-                this.subquery.retrieveNode(this.retrieveNode).toFragmentQuery(),
-                this.number);
+
+        SpanFocusQuery sfq = new SpanFocusQuery(
+            this.subquery.retrieveNode(this.retrieveNode).toFragmentQuery(),
+            this.number);
+
+        if (this.subquery.maybeUnsorted())
+            sfq.setSorted(false);
+
+        return sfq;
+        
     };
 
 
diff --git a/src/main/java/de/ids_mannheim/korap/query/wrap/SpanQueryWrapper.java b/src/main/java/de/ids_mannheim/korap/query/wrap/SpanQueryWrapper.java
index 20d19ff..4fca2a6 100644
--- a/src/main/java/de/ids_mannheim/korap/query/wrap/SpanQueryWrapper.java
+++ b/src/main/java/de/ids_mannheim/korap/query/wrap/SpanQueryWrapper.java
@@ -72,9 +72,18 @@
 
         // Wrap the query in a <base/s=t>, if it's extended to the right
         if (this.isExtendedToTheRight()) {
-            return new SpanFocusQuery(new SpanWithinQuery("base/s:t",
+            SpanFocusQuery sfc = new SpanFocusQuery(new SpanWithinQuery("base/s:t",
                     new SpanClassQuery(this.toFragmentQuery(), (byte) 254)),
                     (byte) 254);
+
+            // Only sort, in case it wraps an unsorted query,
+            // within base/s:t is sorted per definition.
+            if (this.maybeUnsorted()) {
+                sfc.setSorted(false);
+            };
+
+            return sfc;
+
         };
         
         SpanQuery sq = this.toFragmentQuery();
@@ -280,7 +289,7 @@
      * Normally spans are always sorted, but in case of
      * a wrapped relation query, classed operands may
      * be in arbitrary order. When focussing on these
-     * classes, the span has to me reordered.
+     * classes, the span has to be reordered.
      * 
      * @return <tt>true</tt> in case the wrapped query
      *         has to be sorted on focussing,
@@ -429,7 +438,8 @@
                 + (this.isEmpty() ? "isEmpty" : "notEmpty") + "-"
                 + (this.isOptional() ? "isOptional" : "notOptional") + "-"
                 + (this.isExtendedToTheRight() ? "isExtendedToTheRight"
-                        : "notExtendedToTheRight");;
+                   : "notExtendedToTheRight") + "-"
+            + (this.maybeUnsorted() ? "maybeUnsorted" : "notUnsorted");
         return string;
     };
 };
diff --git a/src/main/java/de/ids_mannheim/korap/query/wrap/SpanReferenceQueryWrapper.java b/src/main/java/de/ids_mannheim/korap/query/wrap/SpanReferenceQueryWrapper.java
index c874fef..830fbfe 100644
--- a/src/main/java/de/ids_mannheim/korap/query/wrap/SpanReferenceQueryWrapper.java
+++ b/src/main/java/de/ids_mannheim/korap/query/wrap/SpanReferenceQueryWrapper.java
@@ -30,6 +30,7 @@
                     "Class number must be bigger than 0.");
         }
         this.classNum = classNum;
+        this.maybeUnsorted = subQueryWrapper.maybeUnsorted();
     }
 
 
diff --git a/src/main/java/de/ids_mannheim/korap/query/wrap/SpanRegexQueryWrapper.java b/src/main/java/de/ids_mannheim/korap/query/wrap/SpanRegexQueryWrapper.java
index 30ea49b..a3ed45a 100644
--- a/src/main/java/de/ids_mannheim/korap/query/wrap/SpanRegexQueryWrapper.java
+++ b/src/main/java/de/ids_mannheim/korap/query/wrap/SpanRegexQueryWrapper.java
@@ -1,13 +1,10 @@
 package de.ids_mannheim.korap.query.wrap;
 
-import org.apache.lucene.search.RegexpQuery;
-import org.apache.lucene.search.spans.SpanQuery;
-import org.apache.lucene.search.spans.SpanMultiTermQueryWrapper;
-import org.apache.lucene.util.automaton.RegExp;
 import org.apache.lucene.index.Term;
-import de.ids_mannheim.korap.query.wrap.SpanQueryWrapper;
-
-import java.util.*;
+import org.apache.lucene.search.RegexpQuery;
+import org.apache.lucene.search.spans.SpanMultiTermQueryWrapper;
+import org.apache.lucene.search.spans.SpanQuery;
+import org.apache.lucene.util.automaton.RegExp;
 
 /*
   TODO: Don't allow queries like ".*?"!!!
diff --git a/src/main/java/de/ids_mannheim/korap/query/wrap/SpanRelationWrapper.java b/src/main/java/de/ids_mannheim/korap/query/wrap/SpanRelationWrapper.java
index fe980c9..c87d551 100644
--- a/src/main/java/de/ids_mannheim/korap/query/wrap/SpanRelationWrapper.java
+++ b/src/main/java/de/ids_mannheim/korap/query/wrap/SpanRelationWrapper.java
@@ -1,8 +1,6 @@
 package de.ids_mannheim.korap.query.wrap;
 
-import org.apache.lucene.search.spans.SpanMultiTermQueryWrapper;
 import org.apache.lucene.search.spans.SpanQuery;
-import org.apache.lucene.search.spans.SpanTermQuery;
 
 import de.ids_mannheim.korap.constants.RelationDirection;
 import de.ids_mannheim.korap.query.SpanFocusQuery;
@@ -35,6 +33,7 @@
 
         this.subQuery1 = operand1;
         this.subQuery2 = operand2;
+        this.maybeUnsorted = true;
     }
 
 
diff --git a/src/main/java/de/ids_mannheim/korap/query/wrap/SpanRepetitionQueryWrapper.java b/src/main/java/de/ids_mannheim/korap/query/wrap/SpanRepetitionQueryWrapper.java
index ec88b04..4279640 100644
--- a/src/main/java/de/ids_mannheim/korap/query/wrap/SpanRepetitionQueryWrapper.java
+++ b/src/main/java/de/ids_mannheim/korap/query/wrap/SpanRepetitionQueryWrapper.java
@@ -30,8 +30,7 @@
 
         if (!subquery.isEmpty()) {
             this.subquery = subquery;
-            if (subquery.maybeUnsorted())
-                this.maybeUnsorted = true;
+            this.maybeUnsorted = subquery.maybeUnsorted();
 			this.isEmpty = false;
         }
         else
diff --git a/src/main/java/de/ids_mannheim/korap/query/wrap/SpanSegmentQueryWrapper.java b/src/main/java/de/ids_mannheim/korap/query/wrap/SpanSegmentQueryWrapper.java
index 8623671..18752ce 100644
--- a/src/main/java/de/ids_mannheim/korap/query/wrap/SpanSegmentQueryWrapper.java
+++ b/src/main/java/de/ids_mannheim/korap/query/wrap/SpanSegmentQueryWrapper.java
@@ -1,18 +1,13 @@
 package de.ids_mannheim.korap.query.wrap;
 
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Iterator;
 
-import org.apache.lucene.index.Term;
-import org.apache.lucene.search.Query;
-import org.apache.lucene.search.spans.SpanQuery;
-import org.apache.lucene.search.spans.SpanTermQuery;
 import org.apache.lucene.search.spans.SpanNotQuery;
 import org.apache.lucene.search.spans.SpanOrQuery;
-import de.ids_mannheim.korap.query.wrap.SpanQueryWrapper;
-import de.ids_mannheim.korap.query.wrap.SpanRegexQueryWrapper;
-import de.ids_mannheim.korap.query.wrap.SpanWildcardQueryWrapper;
-import de.ids_mannheim.korap.query.SpanSegmentQuery;
+import org.apache.lucene.search.spans.SpanQuery;
 
+import de.ids_mannheim.korap.query.SpanSegmentQuery;
 import de.ids_mannheim.korap.util.QueryException;
 
 
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 b457d77..a8673fc 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
@@ -99,20 +99,6 @@
 
     /**
      * Constructs a new object for sequence deserialization
-     * by passing a single {@link SpanQuery} object.
-     * 
-     * @param query
-     *            Initial {@link SpanQuery} to search for.
-     */
-    public SpanSequenceQueryWrapper (SpanQuery query) {
-        this(query.getField());
-        this.segments.add(new SpanSimpleQueryWrapper(query));
-        this.isNull = false;
-    };
-
-
-    /**
-     * Constructs a new object for sequence deserialization
      * by passing a single {@link SpanQueryWrapper} object.
      * These wrapper queries may be optional, negative, or empty.
      * 
@@ -126,8 +112,7 @@
         if (sswq.isNull())
             return;
 
-        if (sswq.maybeUnsorted())
-            this.maybeUnsorted = true;
+        this.maybeUnsorted = sswq.maybeUnsorted();
 
         // Some debugging on initiating new sequences
         if (DEBUG) {
@@ -168,20 +153,9 @@
      *         chaining.
      */
     public SpanSequenceQueryWrapper append (String term) {
-        return this.append(new SpanTermQuery(new Term(field, term)));
-    };
-
-
-    /**
-     * Append a new {@link SpanQuery} object to the sequence.
-     * 
-     * @param query
-     *            A new {@link SpanQuery} to search for.
-     * @return The {@link SpanSequenceQueryWrapper} object for
-     *         chaining.
-     */
-    public SpanSequenceQueryWrapper append (SpanQuery query) {
-        return this.append(new SpanSimpleQueryWrapper(query));
+        return this.append(
+            new SpanSimpleQueryWrapper(field, term)
+            );
     };
 
 
@@ -258,20 +232,9 @@
      *         chaining.
      */
     public SpanSequenceQueryWrapper prepend (String term) {
-        return this.prepend(new SpanTermQuery(new Term(field, term)));
-    };
-
-
-    /**
-     * Prepend a new {@link SpanQuery} object to the sequence.
-     * 
-     * @param query
-     *            A new {@link SpanQuery} to search for.
-     * @return The {@link SpanSequenceQueryWrapper} object for
-     *         chaining.
-     */
-    public SpanSequenceQueryWrapper prepend (SpanQuery query) {
-        return this.prepend(new SpanSimpleQueryWrapper(query));
+        return this.prepend(
+            new SpanSimpleQueryWrapper(field, term)
+            );
     };
 
 
@@ -580,6 +543,8 @@
      */
     public void setInOrder (boolean order) {
         this.isInOrder = order;
+        if (order == false)
+            this.maybeUnsorted = true;
     };
 
 
diff --git a/src/main/java/de/ids_mannheim/korap/query/wrap/SpanSubspanQueryWrapper.java b/src/main/java/de/ids_mannheim/korap/query/wrap/SpanSubspanQueryWrapper.java
index 7e91844..eb370e3 100644
--- a/src/main/java/de/ids_mannheim/korap/query/wrap/SpanSubspanQueryWrapper.java
+++ b/src/main/java/de/ids_mannheim/korap/query/wrap/SpanSubspanQueryWrapper.java
@@ -48,6 +48,7 @@
         else if (subquery.isNegative()) {
             handleNegativeSubquery();
         }
+        this.maybeUnsorted = sqw.maybeUnsorted();
     }
 
 
@@ -144,10 +145,4 @@
             return false;
         return this.subquery.isOptional();
     };
-
-
-    @Override
-    public boolean maybeUnsorted () {
-        return this.subquery.maybeUnsorted();
-    };
 }
diff --git a/src/main/java/de/ids_mannheim/korap/query/wrap/SpanWildcardQueryWrapper.java b/src/main/java/de/ids_mannheim/korap/query/wrap/SpanWildcardQueryWrapper.java
index 5ac346e..faba7fc 100644
--- a/src/main/java/de/ids_mannheim/korap/query/wrap/SpanWildcardQueryWrapper.java
+++ b/src/main/java/de/ids_mannheim/korap/query/wrap/SpanWildcardQueryWrapper.java
@@ -1,12 +1,9 @@
 package de.ids_mannheim.korap.query.wrap;
 
-import org.apache.lucene.search.WildcardQuery;
-import org.apache.lucene.search.spans.SpanQuery;
-import org.apache.lucene.search.spans.SpanMultiTermQueryWrapper;
-import de.ids_mannheim.korap.query.wrap.SpanQueryWrapper;
 import org.apache.lucene.index.Term;
-
-import java.util.*;
+import org.apache.lucene.search.WildcardQuery;
+import org.apache.lucene.search.spans.SpanMultiTermQueryWrapper;
+import org.apache.lucene.search.spans.SpanQuery;
 
 public class SpanWildcardQueryWrapper extends SpanQueryWrapper {
     private SpanQuery query;
diff --git a/src/main/java/de/ids_mannheim/korap/query/wrap/SpanWithAttributeQueryWrapper.java b/src/main/java/de/ids_mannheim/korap/query/wrap/SpanWithAttributeQueryWrapper.java
index 266e051..efb476d 100644
--- a/src/main/java/de/ids_mannheim/korap/query/wrap/SpanWithAttributeQueryWrapper.java
+++ b/src/main/java/de/ids_mannheim/korap/query/wrap/SpanWithAttributeQueryWrapper.java
@@ -37,7 +37,9 @@
                     "The query requires a positive attribute.");
         }
         this.attrQueryWrapper = attrQuery;
+        this.maybeUnsorted = attrQuery.maybeUnsorted();
         this.isSingleAttribute = true;
+        
     }
 
 
diff --git a/src/main/java/de/ids_mannheim/korap/query/wrap/SpanWithinQueryWrapper.java b/src/main/java/de/ids_mannheim/korap/query/wrap/SpanWithinQueryWrapper.java
index ceb58f2..b601fac 100644
--- a/src/main/java/de/ids_mannheim/korap/query/wrap/SpanWithinQueryWrapper.java
+++ b/src/main/java/de/ids_mannheim/korap/query/wrap/SpanWithinQueryWrapper.java
@@ -1,17 +1,10 @@
 package de.ids_mannheim.korap.query.wrap;
 
-import de.ids_mannheim.korap.query.SpanWithinQuery;
-import de.ids_mannheim.korap.query.wrap.SpanSegmentQueryWrapper;
-import de.ids_mannheim.korap.query.wrap.SpanRegexQueryWrapper;
-import de.ids_mannheim.korap.query.wrap.SpanSequenceQueryWrapper;
-import de.ids_mannheim.korap.query.wrap.SpanQueryWrapper;
-
-import de.ids_mannheim.korap.util.QueryException;
-
-import java.util.*;
-
 import org.apache.lucene.search.spans.SpanQuery;
 
+import de.ids_mannheim.korap.query.SpanWithinQuery;
+import de.ids_mannheim.korap.util.QueryException;
+
 /*
   Todo:
 
@@ -121,7 +114,15 @@
         if (this.element.maybeUnsorted())
             return true;
 
-        return this.maybeUnsorted;
+        if (this.flag == SpanWithinQuery.MATCH ||
+            this.flag == SpanWithinQuery.STARTSWITH) {
+            return false;
+        };
+
+        // TODO:
+        //   Optimize by checking for containing classes!
+
+        return true;
     };
 
 
