Index: src/java/org/apache/lucene/search/CachingWrapperFilter.java
===================================================================
--- src/java/org/apache/lucene/search/CachingWrapperFilter.java	(revision 719742)
+++ src/java/org/apache/lucene/search/CachingWrapperFilter.java	(working copy)
@@ -73,6 +73,14 @@
 
     return bits;
   }
+
+  /** Provide the DocIdSet to be cached, using the DocIdSet provided
+   *  by the wrapped Filter.
+   *  This implementation returns the given DocIdSet.
+   */
+  protected DocIdSet docIdSetToCache(DocIdSet docIdSet, IndexReader reader) {
+    return docIdSet;
+  }
   
   public DocIdSet getDocIdSet(IndexReader reader) throws IOException {
     if (cache == null) {
@@ -91,7 +99,7 @@
         return new DocIdBitSet((BitSet) cached);
     }
 
-    final DocIdSet docIdSet = filter.getDocIdSet(reader);
+    final DocIdSet docIdSet = docIdSetToCache(filter.getDocIdSet(reader), reader);
 
     synchronized (cache) {  // update cache
       cache.put(reader, docIdSet);
Index: contrib/queries/src/java/org/apache/lucene/search/BooleanFilter.java
===================================================================
--- contrib/queries/src/java/org/apache/lucene/search/BooleanFilter.java	(revision 719742)
+++ contrib/queries/src/java/org/apache/lucene/search/BooleanFilter.java	(working copy)
@@ -19,11 +19,8 @@
 
 import java.io.IOException;
 import java.util.ArrayList;
-import java.util.BitSet;
-
 import org.apache.lucene.index.IndexReader;
 import org.apache.lucene.search.BooleanClause.Occur;
-import org.apache.lucene.util.DocIdBitSet;
 import org.apache.lucene.util.OpenBitSet;
 import org.apache.lucene.util.OpenBitSetDISI;
 import org.apache.lucene.util.SortedVIntList;
Index: contrib/miscellaneous/src/java/org/apache/lucene/misc/ChainedFilter.java
===================================================================
--- contrib/miscellaneous/src/java/org/apache/lucene/misc/ChainedFilter.java	(revision 719742)
+++ contrib/miscellaneous/src/java/org/apache/lucene/misc/ChainedFilter.java	(working copy)
@@ -56,13 +56,11 @@
 
 import org.apache.lucene.index.IndexReader;
 import org.apache.lucene.search.Filter;
-
 import java.io.IOException;
 import org.apache.lucene.search.DocIdSet;
 import org.apache.lucene.search.DocIdSetIterator;
 import org.apache.lucene.util.OpenBitSet;
 import org.apache.lucene.util.OpenBitSetDISI;
-import org.apache.lucene.util.SortedVIntList;
 
 /**
  * <p>
@@ -177,14 +175,6 @@
         return result;
     }
     
-    /** Provide a SortedVIntList when it is definitely smaller than an OpenBitSet */
-    protected DocIdSet finalResult(OpenBitSetDISI result, int maxDocs) {
-        return (result.cardinality() < (maxDocs / 9))
-              ? (DocIdSet) new SortedVIntList(result)
-              : (DocIdSet) result;
-    }
-        
-
     /**
      * Delegates to each filter in the chain.
      * @param reader IndexReader
@@ -199,7 +189,7 @@
         {
             doChain(result, logic, chain[index[0]].getDocIdSet(reader));
         }
-        return finalResult(result, reader.maxDoc());
+        return result;
     }
 
     /**
@@ -219,7 +209,7 @@
         {
             doChain(result, logic[index[0]], chain[index[0]].getDocIdSet(reader));
         }
-        return finalResult(result, reader.maxDoc());
+        return result;
     }
 
     public String toString()
