diff --git a/src/main/java/de/ids_mannheim/korap/KorapQuery.java b/src/main/java/de/ids_mannheim/korap/KorapQuery.java
index 8747413..78d050b 100644
--- a/src/main/java/de/ids_mannheim/korap/KorapQuery.java
+++ b/src/main/java/de/ids_mannheim/korap/KorapQuery.java
@@ -1303,19 +1303,19 @@
     };
 
     // MatchModify
-    public SpanMatchModifyQueryWrapper shrink (byte number, SpanQueryWrapper element) {
+    public SpanMatchModifyQueryWrapper focus (byte number, SpanQueryWrapper element) {
         return new SpanMatchModifyQueryWrapper(element, number);
     };
 
-    public SpanMatchModifyQueryWrapper shrink (int number, SpanQueryWrapper element) {
+    public SpanMatchModifyQueryWrapper focus (int number, SpanQueryWrapper element) {
         return new SpanMatchModifyQueryWrapper(element, number);
     };
 
-    public SpanMatchModifyQueryWrapper shrink (short number, SpanQueryWrapper element) {
+    public SpanMatchModifyQueryWrapper focus (short number, SpanQueryWrapper element) {
         return new SpanMatchModifyQueryWrapper(element, number);
     };
 
-    public SpanMatchModifyQueryWrapper shrink (SpanQueryWrapper element) {
+    public SpanMatchModifyQueryWrapper focus (SpanQueryWrapper element) {
         return new SpanMatchModifyQueryWrapper(element);
     };
 
diff --git a/src/main/java/de/ids_mannheim/korap/index/FieldDocument.java b/src/main/java/de/ids_mannheim/korap/index/FieldDocument.java
index 4b7b9f8..c0815ec 100644
--- a/src/main/java/de/ids_mannheim/korap/index/FieldDocument.java
+++ b/src/main/java/de/ids_mannheim/korap/index/FieldDocument.java
@@ -1,8 +1,8 @@
 package de.ids_mannheim.korap.index;
 
 import org.apache.lucene.document.Document;
-import de.ids_mannheim.korap.analysis.MultiTermTokenStream;
-import de.ids_mannheim.korap.analysis.MultiTermToken;
+import de.ids_mannheim.korap.model.MultiTermTokenStream;
+import de.ids_mannheim.korap.model.MultiTermToken;
 import de.ids_mannheim.korap.KorapDocument;
 import de.ids_mannheim.korap.util.KorapDate;
 
diff --git a/src/main/java/de/ids_mannheim/korap/analysis/MultiTerm.java b/src/main/java/de/ids_mannheim/korap/model/MultiTerm.java
similarity index 99%
rename from src/main/java/de/ids_mannheim/korap/analysis/MultiTerm.java
rename to src/main/java/de/ids_mannheim/korap/model/MultiTerm.java
index 754268d..3ba5748 100644
--- a/src/main/java/de/ids_mannheim/korap/analysis/MultiTerm.java
+++ b/src/main/java/de/ids_mannheim/korap/model/MultiTerm.java
@@ -1,4 +1,4 @@
-package de.ids_mannheim.korap.analysis;
+package de.ids_mannheim.korap.model;
 
 import static de.ids_mannheim.korap.util.KorapArray.*;
 import org.apache.lucene.util.BytesRef;
diff --git a/src/main/java/de/ids_mannheim/korap/analysis/MultiTermToken.java b/src/main/java/de/ids_mannheim/korap/model/MultiTermToken.java
similarity index 98%
rename from src/main/java/de/ids_mannheim/korap/analysis/MultiTermToken.java
rename to src/main/java/de/ids_mannheim/korap/model/MultiTermToken.java
index f923ef7..21e106f 100644
--- a/src/main/java/de/ids_mannheim/korap/analysis/MultiTermToken.java
+++ b/src/main/java/de/ids_mannheim/korap/model/MultiTermToken.java
@@ -1,4 +1,4 @@
-package de.ids_mannheim.korap.analysis;
+package de.ids_mannheim.korap.model;
 
 import java.util.*;
 
diff --git a/src/main/java/de/ids_mannheim/korap/analysis/MultiTermTokenStream.java b/src/main/java/de/ids_mannheim/korap/model/MultiTermTokenStream.java
similarity index 99%
rename from src/main/java/de/ids_mannheim/korap/analysis/MultiTermTokenStream.java
rename to src/main/java/de/ids_mannheim/korap/model/MultiTermTokenStream.java
index d53aac2..9ebb11b 100644
--- a/src/main/java/de/ids_mannheim/korap/analysis/MultiTermTokenStream.java
+++ b/src/main/java/de/ids_mannheim/korap/model/MultiTermTokenStream.java
@@ -1,4 +1,4 @@
-package de.ids_mannheim.korap.analysis;
+package de.ids_mannheim.korap.model;
 
 import static de.ids_mannheim.korap.util.KorapByte.*;
 import org.apache.lucene.util.BytesRef;
diff --git a/src/main/java/de/ids_mannheim/korap/query/SpanMatchModifyClassQuery.java b/src/main/java/de/ids_mannheim/korap/query/SpanMatchModifyClassQuery.java
index 1f3d3f6..59a271a 100644
--- a/src/main/java/de/ids_mannheim/korap/query/SpanMatchModifyClassQuery.java
+++ b/src/main/java/de/ids_mannheim/korap/query/SpanMatchModifyClassQuery.java
@@ -19,88 +19,120 @@
 import de.ids_mannheim.korap.query.SpanClassQuery;
 
 /**
- * Shrinks spans to a classed span.
+ * Modify the span of a match to the boundaries of a certain class.
+ *
+ * In case multiple classes are found with the very same number, the span
+ * is maximized to start on the first occurrence from the left and end on
+ * the last occurrence on the right.
+ *
+ * In case the class to modify on is not found in the subquery,
+ * the match is ignored.
+ *
+ * @author diewald
+ *
+ * @see MatchModifyClassSpans
  */
 public class SpanMatchModifyClassQuery extends SpanClassQuery {
 
+    /**
+     * Construct a new SpanMatchModifyClassQuery.
+     *
+     * @param operand The nested {@link SpanQuery}, that contains one or
+     *        more classed spans.
+     * @param number The class number to focus on.
+     */
     public SpanMatchModifyClassQuery (SpanQuery operand, byte number) {
-	super(operand, number);
+        super(operand, number);
     };
 
+
+    /**
+     * Construct a new SpanMatchModifyClassQuery.
+     * The class to focus on defaults to <tt>1</tt>.
+     *
+     * @param operand The nested {@link SpanQuery}, that contains one or
+     *        more classed spans.
+     */
     public SpanMatchModifyClassQuery (SpanQuery operand) {
-	this(operand, (byte) 1);
+        this(operand, (byte) 1);
     };
 
+
     @Override
     public String toString (String field) {
-	StringBuffer buffer = new StringBuffer();
-    buffer.append("shrink(");
-	short classNr = (short) this.number;
-	buffer.append(classNr & 0xFF).append(": ");
+        StringBuffer buffer = new StringBuffer();
+        buffer.append("focus(");
+        short classNr = (short) this.number;
+        buffer.append(classNr & 0xFF).append(": ");
         buffer.append(this.operand.toString());
-	buffer.append(')');
-
-	buffer.append(ToStringUtils.boost(getBoost()));
-	return buffer.toString();
+        buffer.append(')');
+        buffer.append(ToStringUtils.boost(getBoost()));
+        return buffer.toString();
     };
 
+
     @Override
-    public Spans getSpans (final AtomicReaderContext context, Bits acceptDocs, Map<Term,TermContext> termContexts) throws IOException {
-	return (Spans) new MatchModifyClassSpans(this.operand, context, acceptDocs, termContexts, number);
+    public Spans getSpans (final AtomicReaderContext context,
+                           Bits acceptDocs,
+                           Map<Term,TermContext> termContexts) throws IOException {
+        return (Spans) new MatchModifyClassSpans(
+            this.operand,
+            context,
+            acceptDocs,
+            termContexts,
+            number
+        );
     };
 
+
     @Override
     public Query rewrite (IndexReader reader) throws IOException {
-	SpanMatchModifyClassQuery clone = null;
-	SpanQuery query = (SpanQuery) this.operand.rewrite(reader);
+        SpanMatchModifyClassQuery clone = null;
+        SpanQuery query = (SpanQuery) this.operand.rewrite(reader);
+        
+        if (query != this.operand) {
+            if (clone == null)
+                clone = this.clone();
+            clone.operand = query;
+        };
 
-	if (query != this.operand) {
-	    if (clone == null)
-		clone = this.clone();
-	    clone.operand = query;
-	};
+        if (clone != null)
+            return clone;
 
-	if (clone != null)
-	    return clone;
-
-	return this;
+        return this;
     };
 
+
     @Override
     public SpanMatchModifyClassQuery clone() {
-	SpanMatchModifyClassQuery spanMatchQuery = new SpanMatchModifyClassQuery(
-	    (SpanQuery) this.operand.clone(),
-	    this.number
+        SpanMatchModifyClassQuery spanMatchQuery = new SpanMatchModifyClassQuery(
+            (SpanQuery) this.operand.clone(),
+            this.number
         );
-	spanMatchQuery.setBoost(getBoost());
-	return spanMatchQuery;
+        spanMatchQuery.setBoost(getBoost());
+        return spanMatchQuery;
     };
 
 
-    /** Returns true iff <code>o</code> is equal to this. */
     @Override
-    public boolean equals(Object o) {
-	if (this == o) return true;
-	if (!(o instanceof SpanMatchModifyClassQuery)) return false;
+    public boolean equals (Object o) {
+        if (this == o) return true;
+        if (!(o instanceof SpanMatchModifyClassQuery)) return false;
 	
-	final SpanMatchModifyClassQuery spanMatchModifyClassQuery = (SpanMatchModifyClassQuery) o;
+        final SpanMatchModifyClassQuery spanMatchModifyClassQuery =
+            (SpanMatchModifyClassQuery) o;
 	
-	if (!this.operand.equals(spanMatchModifyClassQuery.operand)) return false;
-	if (this.number != spanMatchModifyClassQuery.number) return false;
-    //	if (this.divide != spanMatchModifyClassQuery.divide) return false;
-	return getBoost() == spanMatchModifyClassQuery.getBoost();
+        if (!this.operand.equals(spanMatchModifyClassQuery.operand)) return false;
+        if (this.number != spanMatchModifyClassQuery.number) return false;
+        return getBoost() == spanMatchModifyClassQuery.getBoost();
     };
 
 
-    // I don't know what I am doing here
     @Override
     public int hashCode() {
-	int result = 1;
-	result = operand.hashCode();
-	result += number + 33_333;
-    //	result += divide ? 1 : 0;
-	result ^= (result << 15) | (result >>> 18);
-	result += Float.floatToRawIntBits(getBoost());
-	return result;
+        int result = operand.hashCode();
+        result = 31 * result + number;
+        result += Float.floatToRawIntBits(getBoost());
+        return result;
     };
 };
diff --git a/src/main/java/de/ids_mannheim/korap/query/spans/MatchModifyClassSpans.java b/src/main/java/de/ids_mannheim/korap/query/spans/MatchModifyClassSpans.java
index a9f196a..9a1da9f 100644
--- a/src/main/java/de/ids_mannheim/korap/query/spans/MatchModifyClassSpans.java
+++ b/src/main/java/de/ids_mannheim/korap/query/spans/MatchModifyClassSpans.java
@@ -32,7 +32,8 @@
  * In case the class to focus on is not found in the payloads,
  * the match is ignored.
  *
- * <strong>Warning</strong>: Payloads other than class payloads won't bubble up.
+ * <strong>Warning</strong>: Payloads other than class payloads won't
+ * bubble up currently. That behaviour may change in the future
  *
  * @author diewald
  */
diff --git a/src/test/java/de/ids_mannheim/korap/Test.java b/src/test/java/de/ids_mannheim/korap/Test.java
index 0e8d68b..e8837f3 100644
--- a/src/test/java/de/ids_mannheim/korap/Test.java
+++ b/src/test/java/de/ids_mannheim/korap/Test.java
@@ -3,8 +3,8 @@
 import java.util.*;
 import java.io.IOException;
 
-import de.ids_mannheim.korap.analysis.MultiTermTokenStream;
-import de.ids_mannheim.korap.analysis.MultiTermToken;
+import de.ids_mannheim.korap.model.MultiTermTokenStream;
+import de.ids_mannheim.korap.model.MultiTermToken;
 
 import org.apache.lucene.document.Document;
 import org.apache.lucene.document.TextField;
diff --git a/src/test/java/de/ids_mannheim/korap/TestSimple.java b/src/test/java/de/ids_mannheim/korap/TestSimple.java
index ecea801..1dd85f3 100644
--- a/src/test/java/de/ids_mannheim/korap/TestSimple.java
+++ b/src/test/java/de/ids_mannheim/korap/TestSimple.java
@@ -6,7 +6,7 @@
 import static org.junit.Assert.*;
 
 import de.ids_mannheim.korap.KorapQuery;
-import de.ids_mannheim.korap.analysis.*;
+import de.ids_mannheim.korap.model.*;
 import de.ids_mannheim.korap.query.wrap.SpanQueryWrapper;
 import de.ids_mannheim.korap.util.QueryException;
 
diff --git a/src/test/java/de/ids_mannheim/korap/index/TestClassIndex.java b/src/test/java/de/ids_mannheim/korap/index/TestClassIndex.java
index ba1dd54..df4c8ae 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestClassIndex.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestClassIndex.java
@@ -21,7 +21,7 @@
 import de.ids_mannheim.korap.query.SpanElementQuery;
 import de.ids_mannheim.korap.query.SpanWithinQuery;
 import de.ids_mannheim.korap.index.FieldDocument;
-import de.ids_mannheim.korap.analysis.MultiTermTokenStream;
+import de.ids_mannheim.korap.model.MultiTermTokenStream;
 
 import org.apache.lucene.search.spans.SpanQuery;
 import org.apache.lucene.search.spans.SpanTermQuery;
diff --git a/src/test/java/de/ids_mannheim/korap/index/TestElementIndex.java b/src/test/java/de/ids_mannheim/korap/index/TestElementIndex.java
index 3f14ab3..6d203e9 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestElementIndex.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestElementIndex.java
@@ -18,7 +18,7 @@
 import de.ids_mannheim.korap.KorapResult;
 import de.ids_mannheim.korap.query.SpanElementQuery;
 import de.ids_mannheim.korap.index.FieldDocument;
-import de.ids_mannheim.korap.analysis.MultiTermTokenStream;
+import de.ids_mannheim.korap.model.MultiTermTokenStream;
 import org.apache.lucene.search.spans.SpanQuery;
 import org.apache.lucene.search.spans.SpanTermQuery;
 import org.apache.lucene.index.Term;
diff --git a/src/test/java/de/ids_mannheim/korap/index/TestFieldDocument.java b/src/test/java/de/ids_mannheim/korap/index/TestFieldDocument.java
index 20ea4be..9e0318e 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestFieldDocument.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestFieldDocument.java
@@ -26,7 +26,7 @@
 import de.ids_mannheim.korap.query.SpanMatchModifyClassQuery;
 import de.ids_mannheim.korap.query.SpanClassQuery;
 import de.ids_mannheim.korap.index.FieldDocument;
-import de.ids_mannheim.korap.analysis.MultiTermTokenStream;
+import de.ids_mannheim.korap.model.MultiTermTokenStream;
 
 import de.ids_mannheim.korap.query.wrap.SpanQueryWrapper;
 
diff --git a/src/test/java/de/ids_mannheim/korap/index/TestIndex.java b/src/test/java/de/ids_mannheim/korap/index/TestIndex.java
index 42d18ed..94b7e8b 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestIndex.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestIndex.java
@@ -3,7 +3,7 @@
 import java.util.*;
 import java.io.*;
 
-import de.ids_mannheim.korap.analysis.MultiTermToken;
+import de.ids_mannheim.korap.model.MultiTermToken;
 import de.ids_mannheim.korap.query.wrap.SpanSegmentQueryWrapper;
 import de.ids_mannheim.korap.query.wrap.SpanRegexQueryWrapper;
 import de.ids_mannheim.korap.query.wrap.SpanSequenceQueryWrapper;
diff --git a/src/test/java/de/ids_mannheim/korap/index/TestKorapIndex.java b/src/test/java/de/ids_mannheim/korap/index/TestKorapIndex.java
index ef3a3f8..417a8b4 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestKorapIndex.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestKorapIndex.java
@@ -16,7 +16,7 @@
 import de.ids_mannheim.korap.KorapIndex;
 import de.ids_mannheim.korap.KorapQuery;
 import de.ids_mannheim.korap.index.FieldDocument;
-import de.ids_mannheim.korap.analysis.MultiTermTokenStream;
+import de.ids_mannheim.korap.model.MultiTermTokenStream;
 
 @RunWith(JUnit4.class)
 public class TestKorapIndex {
diff --git a/src/test/java/de/ids_mannheim/korap/index/TestMatchCollector.java b/src/test/java/de/ids_mannheim/korap/index/TestMatchCollector.java
index f61254b..2a733da 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestMatchCollector.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestMatchCollector.java
@@ -23,7 +23,7 @@
 import de.ids_mannheim.korap.query.SpanMatchModifyClassQuery;
 import de.ids_mannheim.korap.query.SpanClassQuery;
 import de.ids_mannheim.korap.index.FieldDocument;
-import de.ids_mannheim.korap.analysis.MultiTermTokenStream;
+import de.ids_mannheim.korap.model.MultiTermTokenStream;
 
 import org.apache.lucene.search.spans.SpanQuery;
 import org.apache.lucene.search.spans.SpanOrQuery;
diff --git a/src/test/java/de/ids_mannheim/korap/index/TestMatchIndex.java b/src/test/java/de/ids_mannheim/korap/index/TestMatchIndex.java
index 5894963..59c8fce 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestMatchIndex.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestMatchIndex.java
@@ -23,7 +23,7 @@
 import de.ids_mannheim.korap.query.SpanMatchModifyClassQuery;
 import de.ids_mannheim.korap.query.SpanClassQuery;
 import de.ids_mannheim.korap.index.FieldDocument;
-import de.ids_mannheim.korap.analysis.MultiTermTokenStream;
+import de.ids_mannheim.korap.model.MultiTermTokenStream;
 
 import org.apache.lucene.search.spans.SpanQuery;
 import org.apache.lucene.search.spans.SpanOrQuery;
@@ -32,7 +32,7 @@
 
 // mvn -Dtest=TestWithinIndex#indexExample1 test
 
-// match is shrink and split
+// match is focus and split
 
 @RunWith(JUnit4.class)
 public class TestMatchIndex {
@@ -366,7 +366,7 @@
 
 
     @Test
-    public void indexExampleShrinkWithSpan () throws IOException {
+    public void indexExampleFocusWithSpan () throws IOException {
 	KorapIndex ki = new KorapIndex();
 
 	// abcabcabac
@@ -407,7 +407,7 @@
         );
 
 	kr = ki.search(sq, (short) 10);
-	assertEquals(kr.getQuery(), "shrink(3: spanContain({2: <base:s />}, {3: base:s:b}))");
+	assertEquals(kr.getQuery(), "focus(3: spanContain({2: <base:s />}, {3: base:s:b}))");
 	assertEquals(kr.getMatch(0).getSnippetBrackets(), "a[{3:b}]cabcab ...");
     };
 };
diff --git a/src/test/java/de/ids_mannheim/korap/index/TestNextIndex.java b/src/test/java/de/ids_mannheim/korap/index/TestNextIndex.java
index 00fa232..b4e22b6 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestNextIndex.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestNextIndex.java
@@ -20,7 +20,7 @@
 import de.ids_mannheim.korap.KorapResult;
 import de.ids_mannheim.korap.query.SpanNextQuery;
 import de.ids_mannheim.korap.index.FieldDocument;
-import de.ids_mannheim.korap.analysis.MultiTermTokenStream;
+import de.ids_mannheim.korap.model.MultiTermTokenStream;
 
 import org.apache.lucene.search.spans.SpanOrQuery;
 import org.apache.lucene.search.spans.SpanQuery;
diff --git a/src/test/java/de/ids_mannheim/korap/index/TestPosToOffset.java b/src/test/java/de/ids_mannheim/korap/index/TestPosToOffset.java
index f096877..33fbf10 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestPosToOffset.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestPosToOffset.java
@@ -17,7 +17,7 @@
 import de.ids_mannheim.korap.query.SpanNextQuery;
 import de.ids_mannheim.korap.query.SpanClassQuery;
 import de.ids_mannheim.korap.index.FieldDocument;
-import de.ids_mannheim.korap.analysis.MultiTermTokenStream;
+import de.ids_mannheim.korap.model.MultiTermTokenStream;
 import de.ids_mannheim.korap.index.PositionsToOffset;
 
 import org.apache.lucene.index.AtomicReaderContext;
diff --git a/src/test/java/de/ids_mannheim/korap/index/TestRegexWildcardIndex.java b/src/test/java/de/ids_mannheim/korap/index/TestRegexWildcardIndex.java
index 04c7913..ef34315 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestRegexWildcardIndex.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestRegexWildcardIndex.java
@@ -18,7 +18,7 @@
 import de.ids_mannheim.korap.KorapResult;
 import de.ids_mannheim.korap.KorapSearch;
 import de.ids_mannheim.korap.index.FieldDocument;
-import de.ids_mannheim.korap.analysis.MultiTermTokenStream;
+import de.ids_mannheim.korap.model.MultiTermTokenStream;
 import org.apache.lucene.search.Query;
 import org.apache.lucene.search.spans.SpanQuery;
 import org.apache.lucene.search.spans.SpanTermQuery;
diff --git a/src/test/java/de/ids_mannheim/korap/index/TestWithinIndex.java b/src/test/java/de/ids_mannheim/korap/index/TestWithinIndex.java
index bf86f29..6b38784 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestWithinIndex.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestWithinIndex.java
@@ -25,7 +25,7 @@
 import de.ids_mannheim.korap.query.wrap.SpanQueryWrapper;
 import de.ids_mannheim.korap.util.QueryException;
 import de.ids_mannheim.korap.index.FieldDocument;
-import de.ids_mannheim.korap.analysis.MultiTermTokenStream;
+import de.ids_mannheim.korap.model.MultiTermTokenStream;
 import org.apache.lucene.search.spans.SpanQuery;
 import org.apache.lucene.search.spans.SpanTermQuery;
 import org.apache.lucene.index.Term;
diff --git a/src/test/java/de/ids_mannheim/korap/analysis/TestMultiTerm.java b/src/test/java/de/ids_mannheim/korap/model/TestMultiTerm.java
similarity index 97%
rename from src/test/java/de/ids_mannheim/korap/analysis/TestMultiTerm.java
rename to src/test/java/de/ids_mannheim/korap/model/TestMultiTerm.java
index b568fbe..8ee1bd4 100644
--- a/src/test/java/de/ids_mannheim/korap/analysis/TestMultiTerm.java
+++ b/src/test/java/de/ids_mannheim/korap/model/TestMultiTerm.java
@@ -1,7 +1,7 @@
-package de.ids_mannheim.korap.analysis;
+package de.ids_mannheim.korap.model;
 
 import java.util.*;
-import de.ids_mannheim.korap.analysis.MultiTerm;
+import de.ids_mannheim.korap.model.MultiTerm;
 import java.io.IOException;
 import org.apache.lucene.util.BytesRef;
 
diff --git a/src/test/java/de/ids_mannheim/korap/analysis/TestMultiTermToken.java b/src/test/java/de/ids_mannheim/korap/model/TestMultiTermToken.java
similarity index 93%
rename from src/test/java/de/ids_mannheim/korap/analysis/TestMultiTermToken.java
rename to src/test/java/de/ids_mannheim/korap/model/TestMultiTermToken.java
index 9d46025..3e301ee 100644
--- a/src/test/java/de/ids_mannheim/korap/analysis/TestMultiTermToken.java
+++ b/src/test/java/de/ids_mannheim/korap/model/TestMultiTermToken.java
@@ -1,7 +1,7 @@
-package de.ids_mannheim.korap.analysis;
+package de.ids_mannheim.korap.model;
 
 import java.util.*;
-import de.ids_mannheim.korap.analysis.MultiTermToken;
+import de.ids_mannheim.korap.model.MultiTermToken;
 import java.io.IOException;
 import org.apache.lucene.util.BytesRef;
 
diff --git a/src/test/java/de/ids_mannheim/korap/analysis/TestMultiTermTokenStream.java b/src/test/java/de/ids_mannheim/korap/model/TestMultiTermTokenStream.java
similarity index 95%
rename from src/test/java/de/ids_mannheim/korap/analysis/TestMultiTermTokenStream.java
rename to src/test/java/de/ids_mannheim/korap/model/TestMultiTermTokenStream.java
index feade6f..f1e3597 100644
--- a/src/test/java/de/ids_mannheim/korap/analysis/TestMultiTermTokenStream.java
+++ b/src/test/java/de/ids_mannheim/korap/model/TestMultiTermTokenStream.java
Binary files differ
diff --git a/src/test/java/de/ids_mannheim/korap/query/TestKorapQuery.java b/src/test/java/de/ids_mannheim/korap/query/TestKorapQuery.java
index 5720aa2..4db4c0e 100644
--- a/src/test/java/de/ids_mannheim/korap/query/TestKorapQuery.java
+++ b/src/test/java/de/ids_mannheim/korap/query/TestKorapQuery.java
@@ -129,36 +129,36 @@
     @Test
     public void KorapShrinkQuery () throws QueryException {
         KorapQuery kq = new KorapQuery("field");
-        SpanQuery sq = kq.shrink(kq.tag("np")).toQuery();
-        assertEquals("shrink(1: <field:np />)", sq.toString());
+        SpanQuery sq = kq.focus(kq.tag("np")).toQuery();
+        assertEquals("focus(1: <field:np />)", sq.toString());
     };
 
     @Test
     public void KorapShrinkQuery1 () throws QueryException {
         KorapQuery kq = new KorapQuery("field");
-        SpanQuery sq = kq.shrink(1, kq.tag("np")).toQuery();
-        assertEquals("shrink(1: <field:np />)", sq.toString());
+        SpanQuery sq = kq.focus(1, kq.tag("np")).toQuery();
+        assertEquals("focus(1: <field:np />)", sq.toString());
     };
 
     @Test
     public void KorapShrinkQuery2 () throws QueryException {
         KorapQuery kq = new KorapQuery("field");
-        SpanQuery sq = kq.shrink(1, kq._(1, kq.tag("np"))).toQuery();
-        assertEquals("shrink(1: {1: <field:np />})", sq.toString());
+        SpanQuery sq = kq.focus(1, kq._(1, kq.tag("np"))).toQuery();
+        assertEquals("focus(1: {1: <field:np />})", sq.toString());
     };
 
     @Test
     public void KorapShrinkQuery3 () throws QueryException {
         KorapQuery kq = new KorapQuery("field");
-        SpanQuery sq = kq.shrink(1, kq._(1, kq.seq(kq.tag("np"), kq._(kq.seg("test").without("no"))))).toQuery();
-        assertEquals("shrink(1: {1: spanNext(<field:np />, {1: spanNot(field:test, field:no, 0, 0)})})", sq.toString());
+        SpanQuery sq = kq.focus(1, kq._(1, kq.seq(kq.tag("np"), kq._(kq.seg("test").without("no"))))).toQuery();
+        assertEquals("focus(1: {1: spanNext(<field:np />, {1: spanNot(field:test, field:no, 0, 0)})})", sq.toString());
     };
 
     @Test
     public void KorapShrinkQuery4 () throws QueryException {
         KorapQuery kq = new KorapQuery("field");
-        SpanQuery sq = kq.seq(kq.seg("try1"), kq.shrink(1, kq._(1, kq.seg("try2"))), kq.seg("try3")).toQuery();
-        assertEquals("spanNext(spanNext(field:try1, shrink(1: {1: field:try2})), field:try3)", sq.toString());
+        SpanQuery sq = kq.seq(kq.seg("try1"), kq.focus(1, kq._(1, kq.seg("try2"))), kq.seg("try3")).toQuery();
+        assertEquals("spanNext(spanNext(field:try1, focus(1: {1: field:try2})), field:try3)", sq.toString());
     };
 
     @Test
diff --git a/src/test/java/de/ids_mannheim/korap/query/TestKorapQueryJSON.java b/src/test/java/de/ids_mannheim/korap/query/TestKorapQueryJSON.java
index 0a75172..4478375 100644
--- a/src/test/java/de/ids_mannheim/korap/query/TestKorapQueryJSON.java
+++ b/src/test/java/de/ids_mannheim/korap/query/TestKorapQueryJSON.java
@@ -51,24 +51,24 @@
     public void queryJSONBsp3 () throws QueryException {
 	SpanQueryWrapper sqwi = jsonQuery(getClass().getResource("/queries/bsp3.jsonld").getFile());
 
-	// shrink({[base=Mann]})
-	assertEquals(sqwi.toQuery().toString(), "shrink(1: {1: tokens:mate/l:Mann})");
+	// focus({[base=Mann]})
+	assertEquals(sqwi.toQuery().toString(), "focus(1: {1: tokens:mate/l:Mann})");
     };
 
     @Test
     public void queryJSONBsp4 () throws QueryException {
 	SpanQueryWrapper sqwi = jsonQuery(getClass().getResource("/queries/bsp4.jsonld").getFile());
 
-	// shrink({[base=foo]}[orth=bar])
-	assertEquals(sqwi.toQuery().toString(), "shrink(1: spanNext({1: tokens:mate/l:foo}, tokens:s:bar))");
+	// focus({[base=foo]}[orth=bar])
+	assertEquals(sqwi.toQuery().toString(), "focus(1: spanNext({1: tokens:mate/l:foo}, tokens:s:bar))");
     };
 
     @Test
     public void queryJSONBsp5 () throws QueryException {
 	SpanQueryWrapper sqwi = jsonQuery(getClass().getResource("/queries/bsp5.jsonld").getFile());
 
-	// shrink(1:[base=Der]{1:[base=Mann]}) 
-	assertEquals(sqwi.toQuery().toString(), "shrink(1: spanNext(tokens:mate/l:Der, {1: tokens:mate/l:Mann}))");
+	// focus(1:[base=Der]{1:[base=Mann]}) 
+	assertEquals(sqwi.toQuery().toString(), "focus(1: spanNext(tokens:mate/l:Der, {1: tokens:mate/l:Mann}))");
     };
 
     @Test
@@ -242,7 +242,7 @@
 	SpanQueryWrapper sqwi = jsonQuery(getClass().getResource("/queries/cosmas16.json").getFile());
 
 	// "$wegen #IN(L) <s>"
-	assertEquals(sqwi.toQuery().toString(), "shrink(1: spanStartsWith(<tokens:s />, {1: tokens:i:wegen}))");
+	assertEquals(sqwi.toQuery().toString(), "focus(1: spanStartsWith(<tokens:s />, {1: tokens:i:wegen}))");
     };
 
     @Test
@@ -258,7 +258,7 @@
 	SpanQueryWrapper sqwi = jsonQuery(getClass().getResource("/queries/cosmas20.json").getFile());
 
 	//     "MORPH(V) #IN(R) #ELEM(S)"
-	assertEquals(sqwi.toQuery().toString(), "shrink(1: spanEndsWith(<tokens:s />, {1: tokens:p:V}))");
+	assertEquals(sqwi.toQuery().toString(), "focus(1: spanEndsWith(<tokens:s />, {1: tokens:p:V}))");
     };
 
     @Test
@@ -282,7 +282,7 @@
 	SpanQueryWrapper sqwi = jsonQuery(getClass().getResource("/queries/bugs/cosmas_boundary.jsonld").getFile());
 
 	// Namen /s1 Leben
-	assertEquals(sqwi.toQuery().toString(), "shrink(129: spanElementDistance({129: tokens:s:Namen}, {129: tokens:s:Leben}, [(base/s:s[0:1], notOrdered, notExcluded)]))");
+	assertEquals(sqwi.toQuery().toString(), "focus(129: spanElementDistance({129: tokens:s:Namen}, {129: tokens:s:Leben}, [(base/s:s[0:1], notOrdered, notExcluded)]))");
     };
 
     @Test
diff --git a/src/test/java/de/ids_mannheim/korap/query/TestSpanSubspanQueryJSON.java b/src/test/java/de/ids_mannheim/korap/query/TestSpanSubspanQueryJSON.java
index 342a90f..1fd3093 100644
--- a/src/test/java/de/ids_mannheim/korap/query/TestSpanSubspanQueryJSON.java
+++ b/src/test/java/de/ids_mannheim/korap/query/TestSpanSubspanQueryJSON.java
@@ -48,7 +48,7 @@
                 .getFile();
         SpanQueryWrapper sqwi = getJSONQuery(filepath);
         SpanQuery sq = sqwi.toQuery();
-        assertEquals(sq.toString(), "shrink(129: spanElementDistance({129: tokens:s:der},"+
+        assertEquals(sq.toString(), "focus(129: spanElementDistance({129: tokens:s:der},"+
                      " {129: subspan(<tokens:s />,0,1)}, [(s[0:0], ordered, notExcluded)]))");
     }
 
diff --git a/src/test/java/de/ids_mannheim/korap/query/TestTemporaryQueryLimitations.java b/src/test/java/de/ids_mannheim/korap/query/TestTemporaryQueryLimitations.java
index afa8bab..33a776a 100644
--- a/src/test/java/de/ids_mannheim/korap/query/TestTemporaryQueryLimitations.java
+++ b/src/test/java/de/ids_mannheim/korap/query/TestTemporaryQueryLimitations.java
@@ -54,7 +54,7 @@
 	
 	KorapSearch ks = new KorapSearch(json);
 	KorapResult kr = ks.run(ki);
-	assertEquals(kr.getQuery(),"shrink(130: {131: spanContain({129: <tokens:s />}, {130: tokens:s:wegen})})");
+	assertEquals(kr.getQuery(),"focus(130: {131: spanContain({129: <tokens:s />}, {130: tokens:s:wegen})})");
 	assertEquals(kr.getTotalResults(),0);
 	assertEquals(kr.getStartIndex(),0);
 
diff --git a/src/test/java/de/ids_mannheim/korap/search/TestKorapSearch.java b/src/test/java/de/ids_mannheim/korap/search/TestKorapSearch.java
index a4bbf12..e1aae5e 100644
--- a/src/test/java/de/ids_mannheim/korap/search/TestKorapSearch.java
+++ b/src/test/java/de/ids_mannheim/korap/search/TestKorapSearch.java
@@ -725,7 +725,7 @@
 
         KorapQuery kq = new KorapQuery("tokens");
         KorapSearch ks = new KorapSearch(
-            kq.shrink(
+            kq.focus(
                 1,
                 kq.contains(kq.tag("base/s:s"), kq._(1, kq.seg("s:Leben")))
             )
@@ -734,7 +734,7 @@
         KorapResult kr = ks.run(ki);
         assertEquals(
             kr.getQuery(),
-            "shrink(1: spanContain(<tokens:base/s:s />, {1: tokens:s:Leben}))"
+            "focus(1: spanContain(<tokens:base/s:s />, {1: tokens:s:Leben}))"
         );
         assertEquals(
             kr.getMatch(0).getSnippetBrackets(),
@@ -744,7 +744,7 @@
 
         // Try with high class - don't highlight
         ks = new KorapSearch(
-            kq.shrink(
+            kq.focus(
                 129,
                 kq.contains(kq.tag("base/s:s"), kq._(129, kq.seg("s:Leben")))
             )
@@ -753,7 +753,7 @@
         kr = ks.run(ki);
         assertEquals(
             kr.getQuery(),
-            "shrink(129: spanContain(<tokens:base/s:s />, {129: tokens:s:Leben}))"
+            "focus(129: spanContain(<tokens:base/s:s />, {129: tokens:s:Leben}))"
         );
         assertEquals(
             kr.getMatch(0).getSnippetBrackets(),
@@ -765,7 +765,7 @@
         kr = ks.run(ki);
         assertEquals(
             kr.getQuery(),
-            "shrink(129: spanElementDistance({129: tokens:s:Namen}, " +
+            "focus(129: spanElementDistance({129: tokens:s:Namen}, " +
             "{129: tokens:s:Leben}, [(base/s:s[0:1], notOrdered, notExcluded)]))"
         );
         assertEquals(
diff --git a/src/test/java/de/ids_mannheim/korap/util/TestKorapByte.java b/src/test/java/de/ids_mannheim/korap/util/TestKorapByte.java
index e106699..598496b 100644
--- a/src/test/java/de/ids_mannheim/korap/util/TestKorapByte.java
+++ b/src/test/java/de/ids_mannheim/korap/util/TestKorapByte.java
@@ -29,5 +29,11 @@
         assertEquals(1024, byte2int(int2byte(1024)));
         assertEquals(66_666, byte2int(int2byte(66_666)));
         assertEquals(66_666, byte2int(int2byte(66_666)), 0);
+
+        byte[] bb = ByteBuffer.allocate(12).putInt(99999).putInt(666).putInt(1234).array();
+
+        assertEquals(99999, byte2int(bb,0));
+        assertEquals(666,   byte2int(bb,4));
+        assertEquals(1234,  byte2int(bb,8));
     };
 };
