diff --git a/Changes b/Changes
index 1d5ba51..64087df 100644
--- a/Changes
+++ b/Changes
@@ -6,6 +6,8 @@
 	- [cleanup] Removed deprecated method in KrillIndex:
 	  search() (diewald)
         - [documentation] Refer to KoralQuery instead of Koral (diewald)
+	- [cleanup] Removed deprecated method in KrillCollection:
+	  getCount() (diewald)
 
 0.55.5 2016-05-02
 	- [performance] Changed to a dynamic window for sorting in FocusSpans (margaretha)
diff --git a/src/main/java/de/ids_mannheim/korap/KrillCollection.java b/src/main/java/de/ids_mannheim/korap/KrillCollection.java
index 36e9d5a..50f591a 100644
--- a/src/main/java/de/ids_mannheim/korap/KrillCollection.java
+++ b/src/main/java/de/ids_mannheim/korap/KrillCollection.java
@@ -155,6 +155,7 @@
     };
 
 
+    // Create collection from KoralQuery
     private CollectionBuilder.Interface _fromKoral (JsonNode json)
             throws QueryException {
 
@@ -291,14 +292,6 @@
         throw new QueryException(813, "Collection type is not supported");
     };
 
-
-    // Returns the number of filters - always one!
-    @Deprecated
-    public int getCount () {
-        return 1;
-    };
-
-
     /**
      * Set the collection from a {@link CollectionBuilder} object.
      * 
@@ -680,13 +673,6 @@
 
 
     /*
-      @Deprecated
-      public HashMap getTermRelation (String field) throws Exception {
-          return this.getTermRelation(new KrillCollection(this), field);
-      };
-    */
-
-    /*
      * Analyze how terms relate
      */
     /*
diff --git a/src/main/java/de/ids_mannheim/korap/KrillQuery.java b/src/main/java/de/ids_mannheim/korap/KrillQuery.java
index fb7ae74..0bb3e37 100644
--- a/src/main/java/de/ids_mannheim/korap/KrillQuery.java
+++ b/src/main/java/de/ids_mannheim/korap/KrillQuery.java
@@ -443,7 +443,8 @@
                 /*throw new QueryException(765,
                   "Relations are currently not supported");*/
 
-            case "operation:or": // Deprecated in favor of operation:junction
+                // Deprecated in favor of operation:junction
+            case "operation:or":
                 return this._operationJunctionFromJson(operands);
                 /*
                   case "operation:submatch": // Deprecated in favor of koral:reference
diff --git a/src/main/java/de/ids_mannheim/korap/index/AbstractDocument.java b/src/main/java/de/ids_mannheim/korap/index/AbstractDocument.java
index d1f3efb..2d3053b 100644
--- a/src/main/java/de/ids_mannheim/korap/index/AbstractDocument.java
+++ b/src/main/java/de/ids_mannheim/korap/index/AbstractDocument.java
@@ -1032,14 +1032,12 @@
         return this.field;
     };
 
-
     @Deprecated
     @JsonProperty("corpusID")
     public String getCorpusID () {
         return this.corpusID;
     };
 
-
     @Deprecated
     public void setCorpusID (String corpusID) {
         this.corpusID = corpusID;
@@ -1058,7 +1056,6 @@
         this.ID = ID;
     };
 
-
     /**
      * Serialize response as a {@link JsonNode}.
      * 
diff --git a/src/test/java/de/ids_mannheim/korap/search/TestMetaFields.java b/src/test/java/de/ids_mannheim/korap/search/TestMetaFields.java
index 0ff48b5..5e15394 100644
--- a/src/test/java/de/ids_mannheim/korap/search/TestMetaFields.java
+++ b/src/test/java/de/ids_mannheim/korap/search/TestMetaFields.java
@@ -250,7 +250,6 @@
         Krill ks = new Krill(jsonString);
         KrillCollection kc = ks.getCollection();
         kc.setIndex(ki);
-        assertEquals(1, kc.getCount()); // 1 filter operation
         assertEquals(1, kc.numberOf("documents"));
 
         // textClass = reisen
@@ -259,14 +258,9 @@
         ks = new Krill(jsonString);
         kc = ks.getCollection();
         kc.setIndex(ki);
-        assertEquals(1, kc.getCount()); // 1 filter operation
         assertEquals(2, kc.numberOf("documents"));
 
         /*
-        System.err.println(StringUtils.join(fd2.doc.getValues("textClass"), ","));
-        System.err.println(StringUtils.join(fd2.doc.getValues("author"), ", "));
-        */
-        /*
         TokenStream ts = fd2.doc.getField("author").tokenStream(
             (Analyzer) ki.writer().getAnalyzer(),
             (TokenStream) null
@@ -287,7 +281,6 @@
         ks = new Krill(jsonString);
         kc = ks.getCollection();
         kc.setIndex(ki);
-        assertEquals(1, kc.getCount()); // 1 filter operation
         assertEquals(1, kc.numberOf("documents"));
 
         // author = Wolfgang
@@ -296,7 +289,6 @@
         ks = new Krill(jsonString);
         kc = ks.getCollection();
         kc.setIndex(ki);
-        assertEquals(1, kc.getCount()); // 1 filter operation
         assertEquals(1, kc.numberOf("documents"));
 
         Result kr = ks.apply(ki);
