Index: lucene/src/java/org/apache/lucene/search/IndexSearcher.java
===================================================================
--- lucene/src/java/org/apache/lucene/search/IndexSearcher.java	(revision 1066423)
+++ lucene/src/java/org/apache/lucene/search/IndexSearcher.java	(working copy)
@@ -181,11 +181,7 @@
     } else {
       subSearchers = new IndexSearcher[this.leafContexts.length];
       for (int i = 0; i < subSearchers.length; i++) {
-        if (leafContexts[i].reader == context.reader) {
-          subSearchers[i] = this;
-        } else {
           subSearchers[i] = new IndexSearcher(context, leafContexts[i]);
-        }
       }
     }
   }
@@ -200,11 +196,11 @@
    * 
    * @lucene.experimental
    * */
-  public IndexSearcher(ReaderContext topLevel, AtomicReaderContext... leaves) {
-    assert assertLeaves(topLevel, leaves);
+  private IndexSearcher(ReaderContext topLevel, AtomicReaderContext leaf) {
+    assert assertLeaves(topLevel, new AtomicReaderContext[] {leaf});
     readerContext = topLevel;
-    reader = topLevel.reader;
-    leafContexts = leaves;
+    reader = leaf.reader;
+    leafContexts = new AtomicReaderContext[] {leaf};
     executor = null;
     subSearchers = null;
     closeReader = false;
@@ -651,6 +647,7 @@
    */
   /* Sugar for .getIndexReader().getTopReaderContext() */
   public ReaderContext getTopReaderContext() {
+    assert readerContext.reader == reader : "toplevel reader does not match";
     return readerContext;
   }
 
Index: solr/src/java/org/apache/solr/search/function/QueryValueSource.java
===================================================================
--- solr/src/java/org/apache/solr/search/function/QueryValueSource.java	(revision 1066423)
+++ solr/src/java/org/apache/solr/search/function/QueryValueSource.java	(working copy)
@@ -100,11 +100,11 @@
     if (w == null) {
       IndexSearcher weightSearcher;
       if(fcontext == null) {
-        weightSearcher = new IndexSearcher(ReaderUtil.getTopLevelContext(readerContext), readerContext);
+        weightSearcher = new IndexSearcher(ReaderUtil.getTopLevelContext(readerContext));
       } else {
         weightSearcher = (IndexSearcher)fcontext.get("searcher");
         if (weightSearcher == null) {
-          weightSearcher = new IndexSearcher(ReaderUtil.getTopLevelContext(readerContext), readerContext);
+          weightSearcher = new IndexSearcher(ReaderUtil.getTopLevelContext(readerContext));
         }
       }
       w = q.weight(weightSearcher);
