diff --git a/src/test/java/de/ids_mannheim/korap/model/TestMultiTerm.java b/src/test/java/de/ids_mannheim/korap/model/TestMultiTerm.java
deleted file mode 100644
index 86dad86..0000000
--- a/src/test/java/de/ids_mannheim/korap/model/TestMultiTerm.java
+++ /dev/null
@@ -1,128 +0,0 @@
-package de.ids_mannheim.korap.index;
-
-import java.util.*;
-import de.ids_mannheim.korap.index.MultiTerm;
-import de.ids_mannheim.korap.util.CorpusDataException;
-import java.io.IOException;
-import org.apache.lucene.util.BytesRef;
-
-import static org.junit.Assert.*;
-import org.junit.Test;
-import org.junit.Ignore;
-import org.junit.runner.RunWith;
-import org.junit.runners.JUnit4;
-
-
-@RunWith(JUnit4.class)
-public class TestMultiTerm {
-    @Test
-    public void multiTermSimple () throws CorpusDataException {
-        MultiTerm mt = new MultiTerm("test");
-        assertEquals(mt.term, "test");
-        assertNull(mt.payload);
-        assertEquals(mt.start, 0);
-        assertEquals(mt.end, 0);
-    };
-
-    @Test
-    public void multiTermPayload () throws CorpusDataException {
-        MultiTerm mt = new MultiTerm("test$5");
-        assertEquals("test", mt.term);
-        assertEquals(new BytesRef("5"), mt.payload);
-        assertEquals(mt.start, 0);
-        assertEquals(mt.end, 0);
-    };
-
-    @Test
-    public void multiTermOffset () throws CorpusDataException {
-        MultiTerm mt = new MultiTerm("versuch#2-34");
-        assertEquals(mt.term, "versuch");
-        assertNull(mt.payload);
-        assertEquals(mt.start, 2);
-        assertEquals(mt.end, 34);
-    };
-
-    @Test
-    public void multiTermOffsetPayload () throws CorpusDataException {
-        MultiTerm mt = new MultiTerm("example#6-42$hihi");
-        assertEquals(mt.term, "example");
-        assertEquals(new BytesRef("hihi"), mt.payload);
-        assertEquals(mt.start,6);
-        assertEquals(mt.end, 42);
-    };
-
-    @Test
-    public void multiTermString () throws CorpusDataException {
-        MultiTerm mt = new MultiTerm("example#6-42$hihi");
-        assertEquals("example#6-42$hihi", mt.toString());
-        mt.term = "spassmacher";
-        assertEquals("spassmacher#6-42$hihi", mt.toString());
-    };
-
-    @Test
-    public void multiTermStringPayloadType () throws CorpusDataException {
-        MultiTerm mt = new MultiTerm("example$<i>4000");
-        assertEquals("example$<?>[0,0,f,a0]", mt.toString());
-
-        mt = new MultiTerm("example$<l>757574643438");
-        assertEquals("example$<?>[0,0,0,b0,62,f7,ae,ee]", mt.toString());
-    };
-    
-    @Test
-    public void multiTermStringPayloadType2 () throws CorpusDataException {
-        MultiTerm mt = new MultiTerm();
-        mt.setTerm("beispiel");
-        mt.setStart(40);
-        assertEquals(mt.getStart(), mt.start);
-        mt.setEnd(50);
-        assertEquals(mt.getEnd(), mt.end);
-        mt.setPayload((int) 4000);
-        assertEquals("beispiel#40-50$<?>[0,0,f,a0]", mt.toString());
-    };
-
-    @Test
-    public void multiTermStringPayloadType3 () throws CorpusDataException {
-        MultiTerm mt = new MultiTerm("example$<b>120");
-        assertEquals("example$x", mt.toString());
-    };
-
-    @Test
-    public void multiTermStringPayloadType4 () throws CorpusDataException {
-        MultiTerm mt = new MultiTerm("example$<i>420<b>120");
-        assertEquals("example$<?>[0,0,1,a4,78]", mt.toString());
-    };
-
-    @Test
-    public void multiTermStringPayloadType5 () throws CorpusDataException {
-        MultiTerm mt = new MultiTerm("example$<i>4000");
-        assertEquals("example$<?>[0,0,f,a0]", mt.toString());
-
-        mt = new MultiTerm("example$<i>4000<b>120");
-        assertEquals("example$<?>[0,0,f,a0,78]", mt.toString());
-
-        mt = new MultiTerm("example$<l>4000<b>120");
-        assertEquals("example$<?>[0,0,0,0,0,0,f,a0,78]", mt.toString());
-    };
-
-    @Test
-    public void multiTermStringFail () throws CorpusDataException {
-        MultiTerm mt = new MultiTerm("example#56-66");
-        assertEquals(56, mt.getStart());
-        assertEquals(66,mt.getEnd());
-
-        mt = new MultiTerm("example#56-66$<i>a");
-        assertEquals(56, mt.getStart());
-        assertEquals(66, mt.getEnd());
-
-        try {
-            mt = new MultiTerm("example#56$<i>a");
-            assertEquals(mt.getPayload(), null);
-            assertEquals(mt.getStart(), 0);
-            assertEquals(mt.getEnd(), 0);
-        }
-        catch (CorpusDataException cde) {
-            // Works fine!
-            assertTrue(true);
-        };
-    };
-};
diff --git a/src/test/java/de/ids_mannheim/korap/model/TestMultiTermToken.java b/src/test/java/de/ids_mannheim/korap/model/TestMultiTermToken.java
deleted file mode 100644
index b009e49..0000000
--- a/src/test/java/de/ids_mannheim/korap/model/TestMultiTermToken.java
+++ /dev/null
@@ -1,52 +0,0 @@
-package de.ids_mannheim.korap.index;
-
-import java.util.*;
-import de.ids_mannheim.korap.index.MultiTermToken;
-import de.ids_mannheim.korap.util.CorpusDataException;
-import java.io.IOException;
-import org.apache.lucene.util.BytesRef;
-
-import static org.junit.Assert.*;
-import org.junit.Test;
-import org.junit.Ignore;
-import org.junit.runner.RunWith;
-import org.junit.runners.JUnit4;
-
-/**
- * @author diewald
- */
-@RunWith(JUnit4.class)
-public class TestMultiTermToken {
-
-    @Test
-    public void multiTermTokenSimple () throws CorpusDataException {
-        MultiTermToken mtt = new MultiTermToken("t:test", "a:abbruch");
-        assertEquals("[t:test|a:abbruch]", mtt.toString());
-        mtt.add("b:banane");
-        assertEquals("[t:test|a:abbruch|b:banane]", mtt.toString());
-        mtt.add("c:chaos#21-26");
-        assertEquals(
-            "[t:test|a:abbruch|b:banane|c:chaos#21-26]",
-            mtt.toString()
-        );
-        mtt.add("d:dadaismus#21-28$vergleich");
-        assertEquals(
-            "[t:test|a:abbruch|b:banane|c:chaos#21-26|" +
-            "d:dadaismus#21-28$vergleich]",
-            mtt.toString()
-        );
-        assertEquals(5, mtt.getSize());
-    };
-
-    @Test
-    public void multiTermTokenOffsets () throws CorpusDataException {
-        MultiTermToken mtt = new MultiTermToken("t:test#23-27");
-        assertEquals("[t:test#23-27]", mtt.toString());
-        mtt.add("b:baum#34-45");
-        assertEquals("[t:test#23-27|b:baum#34-45]", mtt.toString());
-        mtt.add("c:cannonball#34-45$tatsache");
-        assertEquals("[t:test#23-27|b:baum#34-45|" +
-                     "c:cannonball#34-45$tatsache]", mtt.toString());
-        assertEquals(3, mtt.getSize());
-    };
-};
diff --git a/src/test/java/de/ids_mannheim/korap/model/TestMultiTermTokenStream.java b/src/test/java/de/ids_mannheim/korap/model/TestMultiTermTokenStream.java
deleted file mode 100644
index f98f531..0000000
--- a/src/test/java/de/ids_mannheim/korap/model/TestMultiTermTokenStream.java
+++ /dev/null
Binary files differ
