diff --git a/src/main/java/de/ids_mannheim/korap/KrillCollectionNew.java b/src/main/java/de/ids_mannheim/korap/KrillCollectionNew.java
index 894a747..f94b407 100644
--- a/src/main/java/de/ids_mannheim/korap/KrillCollectionNew.java
+++ b/src/main/java/de/ids_mannheim/korap/KrillCollectionNew.java
@@ -7,11 +7,13 @@
 import de.ids_mannheim.korap.response.Notifications;
 
 import org.apache.lucene.search.*;
+import org.apache.lucene.index.AtomicReader;
 import org.apache.lucene.index.AtomicReaderContext;
 import org.apache.lucene.util.FixedBitSet;
 import org.apache.lucene.util.Bits;
 import org.apache.lucene.util.OpenBitSet;
 import org.apache.lucene.util.DocIdBitSet;
+import org.apache.lucene.search.BitsFilteredDocIdSet;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -58,6 +60,7 @@
         return filter.toString();
     };
 
+    /*
     public FixedBitSet bits (AtomicReaderContext atomic) throws IOException {
 
         int maxDoc = atomic.reader().maxDoc();
@@ -68,7 +71,7 @@
             return null;
 
         // Init vector
-        DocIdSet docids = filter.getDocIdSet(atomic, atomic.reader().getLiveDocs());
+        DocIdSet docids = filter.getDocIdSet(atomic, null);
         DocIdSetIterator filterIter = (docids == null) ? null : docids.iterator();
 
         if (filterIter == null) {
@@ -87,17 +90,60 @@
         };
 
         // Remove deleted docs
-        /*
-        System.err.println(atomic.reader().getClass());
-        FixedBitSet livedocs = (FixedBitSet) atomic.reader().getLiveDocs();
-        if (livedocs != null) {
-            bitset.and(livedocs);
-        };
-        */
+        return (FixedBitSet) BitsFilteredDocIdSet.wrap(
+            (DocIdSet) bitset,
+            (Bits) atomic.reader().getLiveDocs()
+                                                       ).iterator();
+    };
+    */
 
+
+    public FixedBitSet bits (AtomicReaderContext atomic) throws IOException {
+        AtomicReader r = atomic.reader();
+        FixedBitSet bitset = new FixedBitSet(r.maxDoc());
+        DocIdSet docids = this.getDocIdSet(atomic, (Bits) r.getLiveDocs());
+        if (docids == null)
+            return null;
+        bitset.or(docids.iterator());
         return bitset;
     };
 
+
+    public DocIdSet getDocIdSet (AtomicReaderContext atomic, Bits acceptDocs) throws IOException {
+
+        int maxDoc = atomic.reader().maxDoc();
+        FixedBitSet bitset = new FixedBitSet(maxDoc);
+
+        Filter filter;
+        if (this.cb == null || (filter = this.cb.toFilter()) == null)
+            return null;
+
+        // Init vector
+        DocIdSet docids = filter.getDocIdSet(atomic, null);
+        DocIdSetIterator filterIter = (docids == null) ? null : docids.iterator();
+
+        if (filterIter == null) {
+            if (!this.cb.isNegative())
+                return null;
+
+            bitset.set(0, maxDoc);
+        }
+        else {
+            // Or bit set
+            bitset.or(filterIter);
+
+            // Revert for negation
+            if (this.cb.isNegative())
+                bitset.flip(0, maxDoc);
+        };
+
+        // Remove deleted docs
+        return (DocIdSet) BitsFilteredDocIdSet.wrap(
+            (DocIdSet) bitset,
+            acceptDocs
+        );
+    };
+
     /**
      * Search for the number of occurrences of different types,
      * e.g. <i>documents</i>, <i>sentences</i> etc. in the virtual
diff --git a/src/main/java/de/ids_mannheim/korap/collection/CollectionBuilderNew.java b/src/main/java/de/ids_mannheim/korap/collection/CollectionBuilderNew.java
index 8b2ff4d..5bb9968 100644
--- a/src/main/java/de/ids_mannheim/korap/collection/CollectionBuilderNew.java
+++ b/src/main/java/de/ids_mannheim/korap/collection/CollectionBuilderNew.java
@@ -73,7 +73,8 @@
 
             return new CollectionBuilderRange(field, begin, end);
         };
-        return new CollectionBuilderTerm(field, dateDF.toString());
+
+        return new CollectionBuilderRange(field, dateDF.floor(), dateDF.ceil());
     };
 
 
