diff --git a/src/main/java/de/ids_mannheim/korap/KrillIndex.java b/src/main/java/de/ids_mannheim/korap/KrillIndex.java
index b676dec..e1dc6c3 100644
--- a/src/main/java/de/ids_mannheim/korap/KrillIndex.java
+++ b/src/main/java/de/ids_mannheim/korap/KrillIndex.java
@@ -118,7 +118,6 @@
 
     // TODO: Use configuration instead.
     // Last line of defense against DOS
-    private int maxTermRelations = 100;
     private int autoCommit = 500;
     private String version = "unknown";
     private String name = "Unknown";
@@ -160,17 +159,6 @@
                 log.error("krill.index.commit.auto expected to be a numerical value");
             };
         };
-
-        // Check for maximum term relations
-        stringProp = prop.getProperty("krill.index.relations.max");
-        if (stringProp != null) {
-            try {
-                this.maxTermRelations = Integer.parseInt(stringProp);
-            }
-            catch (NumberFormatException e) {
-                log.error("krill.index.commit.auto expected to be a numerical value");
-            };
-        };
     };
 
 
diff --git a/src/test/java/de/ids_mannheim/korap/search/TestKrill.java b/src/test/java/de/ids_mannheim/korap/search/TestKrill.java
index c2028c7..bdbb580 100644
--- a/src/test/java/de/ids_mannheim/korap/search/TestKrill.java
+++ b/src/test/java/de/ids_mannheim/korap/search/TestKrill.java
@@ -1092,144 +1092,4 @@
         assertEquals("WPD_AAA.00002", kr.getMatch(0).getDocID());
         assertEquals(kr.getTotalResults(), 1);
     };
-
-
-    /*
-      This test will crash soon - it's just here for nostalgic reasons!
-    */
-    @Test
-    @Ignore
-    public void getFoundryDistribution () throws Exception {
-        // Construct index
-        KrillIndex ki = new KrillIndex();
-        // Indexing test files
-        for (String i : new String[] { "00001", "00002", "00003", "00004",
-                "00005", "00006", "02439" }) {
-            ki.addDoc(
-                    getClass().getResourceAsStream("/wiki/" + i + ".json.gz"),
-                    true);
-        };
-        ki.commit();
-
-        KrillCollection kc = new KrillCollection(ki);
-
-        assertEquals(7, kc.numberOf("documents"));
-
-        /*
-        HashMap map = kc.getTermRelation("foundries");
-        assertEquals((long) 7, map.get("-docs"));
-        assertEquals((long) 7, map.get("treetagger"));
-        assertEquals((long) 6, map.get("opennlp/morpho"));
-        assertEquals((long) 6, map.get("#__opennlp/morpho:###:treetagger"));
-        assertEquals((long) 7, map.get("#__opennlp:###:treetagger"));
-        */
-    };
-
-
-    @Test
-    @Ignore
-    public void getTextClassDistribution () throws Exception {
-        KrillIndex ki = new KrillIndex();
-        ki.addDoc("{" + "  \"fields\" : ["
-                + "    { \"primaryData\" : \"abc\" },{"
-                + "      \"name\" : \"tokens\"," + "      \"data\" : ["
-                + "         [ \"s:a\", \"i:a\", \"_0#0-1\", \"-:t$<i>3\"],"
-                + "         [ \"s:b\", \"i:b\", \"_1#1-2\" ],"
-                + "         [ \"s:c\", \"i:c\", \"_2#2-3\" ]]}],"
-                + "  \"textClass\" : \"music entertainment\"" + "}");
-
-        ki.addDoc("{" + "  \"fields\" : ["
-                + "    { \"primaryData\" : \"abc\" },{"
-                + "      \"name\" : \"tokens\"," + "      \"data\" : ["
-                + "         [ \"s:a\", \"i:a\", \"_0#0-1\", \"-:t$<i>3\"],"
-                + "         [ \"s:b\", \"i:b\", \"_1#1-2\" ],"
-                + "         [ \"s:c\", \"i:c\", \"_2#2-3\" ]]}],"
-                + "  \"textClass\" : \"music singing\"" + "}");
-
-        ki.addDoc("{" + "  \"fields\" : ["
-                + "    { \"primaryData\" : \"abc\" },{"
-                + "      \"name\" : \"tokens\"," + "      \"data\" : ["
-                + "         [ \"s:a\", \"i:a\", \"_0#0-1\", \"-:t$<i>3\"],"
-                + "         [ \"s:b\", \"i:b\", \"_1#1-2\" ],"
-                + "         [ \"s:c\", \"i:c\", \"_2#2-3\" ]]}],"
-                + "  \"textClass\" : \"music entertainment jumping\"" + "}");
-        ki.commit();
-
-        KrillCollection kc = new KrillCollection(ki);
-        assertEquals(3, kc.numberOf("documents"));
-        /*
-        HashMap map = kc.getTermRelation("textClass");
-        assertEquals((long) 1, map.get("singing"));
-        assertEquals((long) 1, map.get("jumping"));
-        assertEquals((long) 3, map.get("music"));
-        assertEquals((long) 2, map.get("entertainment"));
-        assertEquals((long) 3, map.get("-docs"));
-        assertEquals((long) 2, map.get("#__entertainment:###:music"));
-        assertEquals((long) 1, map.get("#__entertainment:###:jumping"));
-        assertEquals((long) 0, map.get("#__entertainment:###:singing"));
-        assertEquals((long) 0, map.get("#__jumping:###:singing"));
-        assertEquals((long) 1, map.get("#__jumping:###:music"));
-        assertEquals((long) 1, map.get("#__music:###:singing"));
-        assertEquals(11, map.size());
-        */
-        // System.err.println(kc.getTermRelationJSON("textClass"));
-    };
-
-
-    @Test
-    @Ignore
-    public void getTextClassDistribution2 () throws Exception {
-        KrillIndex ki = new KrillIndex();
-        ki.addDoc("{" + "  \"fields\" : ["
-                + "    { \"primaryData\" : \"abc\" },{"
-                + "      \"name\" : \"tokens\"," + "      \"data\" : ["
-                + "         [ \"s:a\", \"i:a\", \"_0#0-1\", \"-:t$<i>3\"],"
-                + "         [ \"s:b\", \"i:b\", \"_1#1-2\" ],"
-                + "         [ \"s:c\", \"i:c\", \"_2#2-3\" ]]}],"
-                + "  \"textClass\" : \"\"" + "}");
-        ki.commit();
-        ki.addDoc("{" + "  \"fields\" : ["
-                + "    { \"primaryData\" : \"abc\" },{"
-                + "      \"name\" : \"tokens\"," + "      \"data\" : ["
-                + "         [ \"s:a\", \"i:a\", \"_0#0-1\", \"-:t$<i>3\"],"
-                + "         [ \"s:b\", \"i:b\", \"_1#1-2\" ],"
-                + "         [ \"s:c\", \"i:c\", \"_2#2-3\" ]]}],"
-                + "  \"textClass\" : \"music entertainment\"" + "}");
-
-        ki.commit();
-        ki.addDoc("{" + "  \"fields\" : ["
-                + "    { \"primaryData\" : \"abc\" },{"
-                + "      \"name\" : \"tokens\"," + "      \"data\" : ["
-                + "         [ \"s:a\", \"i:a\", \"_0#0-1\", \"-:t$<i>3\"],"
-                + "         [ \"s:b\", \"i:b\", \"_1#1-2\" ],"
-                + "         [ \"s:c\", \"i:c\", \"_2#2-3\" ]]}],"
-                + "  \"textClass\" : \"music singing\"" + "}");
-
-        ki.addDoc("{" + "  \"fields\" : ["
-                + "    { \"primaryData\" : \"abc\" },{"
-                + "      \"name\" : \"tokens\"," + "      \"data\" : ["
-                + "         [ \"s:a\", \"i:a\", \"_0#0-1\", \"-:t$<i>3\"],"
-                + "         [ \"s:b\", \"i:b\", \"_1#1-2\" ],"
-                + "         [ \"s:c\", \"i:c\", \"_2#2-3\" ]]}],"
-                + "  \"textClass\" : \"music entertainment jumping\"" + "}");
-        ki.commit();
-
-        KrillCollection kc = new KrillCollection(ki);
-        assertEquals(4, kc.numberOf("documents"));
-        /*
-        HashMap map = kc.getTermRelation("textClass");
-        assertEquals((long) 1, map.get("singing"));
-        assertEquals((long) 1, map.get("jumping"));
-        assertEquals((long) 3, map.get("music"));
-        assertEquals((long) 2, map.get("entertainment"));
-        assertEquals((long) 4, map.get("-docs"));
-        assertEquals((long) 2, map.get("#__entertainment:###:music"));
-        assertEquals((long) 1, map.get("#__entertainment:###:jumping"));
-        assertEquals((long) 0, map.get("#__entertainment:###:singing"));
-        assertEquals((long) 0, map.get("#__jumping:###:singing"));
-        assertEquals((long) 1, map.get("#__jumping:###:music"));
-        assertEquals((long) 1, map.get("#__music:###:singing"));
-        assertEquals(11, map.size());
-        */
-    };
 };
