Index: lucene/src/java/org/apache/lucene/index/IndexReader.java
===================================================================
--- lucene/src/java/org/apache/lucene/index/IndexReader.java	(revision 1059015)
+++ lucene/src/java/org/apache/lucene/index/IndexReader.java	(working copy)
@@ -1039,7 +1039,23 @@
       return null;
     }
   }
+  
+  public BulkPostingsEnum bulkTermPostingsEnum(String field, BytesRef term, TermState termState, boolean doFreqs, boolean doPositions) throws IOException {
+    assert field != null;
+    assert term != null;
+    final Fields fields = fields();
+    if (fields == null) {
+      return null;
+    }
+    final Terms terms = fields.terms(field);
+    if (terms != null) {
+      return terms.bulkPostings(term, termState, null, doFreqs, doPositions);
+    } else {
+      return null;
+    }
+  }
 
+
   /** Returns {@link DocsAndPositionsEnum} for the specified
    *  field & term.  This may return null, if either the
    *  field or term does not exist, or, positions were not
Index: lucene/src/java/org/apache/lucene/index/Terms.java
===================================================================
--- lucene/src/java/org/apache/lucene/index/Terms.java	(revision 1059015)
+++ lucene/src/java/org/apache/lucene/index/Terms.java	(working copy)
@@ -76,6 +76,15 @@
       return null;
     }
   }
+  
+  public BulkPostingsEnum bulkPostings(BytesRef text, TermState termState, BulkPostingsEnum reuse, boolean doFreqs, boolean doPositions) throws IOException {
+    final TermsEnum termsEnum = getThreadTermsEnum();
+    if (termsEnum.seek(text, termState) == TermsEnum.SeekStatus.FOUND) {
+      return termsEnum.bulkPostings(reuse, doFreqs, doPositions);
+    } else {
+      return null;
+    }
+  }
 
   /** Get {@link DocsEnum} for the specified term.  This
    *  method will may return null if the term does not
Index: lucene/src/java/org/apache/lucene/search/TermQuery.java
===================================================================
--- lucene/src/java/org/apache/lucene/search/TermQuery.java	(revision 1059015)
+++ lucene/src/java/org/apache/lucene/search/TermQuery.java	(working copy)
@@ -22,6 +22,7 @@
 
 import org.apache.lucene.index.DocsEnum;
 import org.apache.lucene.index.BulkPostingsEnum;
+import org.apache.lucene.index.Fields;
 import org.apache.lucene.index.IndexReader;
 import org.apache.lucene.index.TermState;
 import org.apache.lucene.index.Terms;
@@ -29,6 +30,8 @@
 import org.apache.lucene.index.IndexReader.ReaderContext;
 import org.apache.lucene.index.Term;
 import org.apache.lucene.index.BulkPostingsEnum.BlockReader;
+import org.apache.lucene.index.TermsEnum;
+import org.apache.lucene.index.TermsEnum.SeekStatus;
 import org.apache.lucene.search.Explanation.IDFExplanation;
 import org.apache.lucene.util.BytesRef;
 import org.apache.lucene.util.PerReaderTermState;
@@ -99,17 +102,15 @@
         return null;
       }
       
-      // nocommit: get bulkTermPostingsEnum with TermState
-      assert reader.getSequentialSubReaders() == null;
-      BulkPostingsEnum docs = reader.bulkTermPostingsEnum(term.field(),
-          term.bytes(),
-          true,
-          false);
+      assert reader.bulkTermPostingsEnum(field, term.bytes(), true, false) != null : "TermState was non-null but got null BulkPostingsEnum";
+      // reuse the threads enum to get docFreq and bulkPostings in one go!
+      final Fields fields = reader.fields();
+      final Terms terms = fields.terms(field);
+      final TermsEnum termsEnum = terms.getThreadTermsEnum();
+      termsEnum.seek(term.bytes(), state); // ignore return value -- asserted above!
+      final BulkPostingsEnum docs = termsEnum.bulkPostings(null, true, false);
       
-      assert docs != null; /* nocommit: shouldnt need this assert? termstate should catch this case above */
-      
-      // nocommit: get the segment reader docfreq with TermState
-      final int docFreq = reader.docFreq(field, term.bytes());
+      final int docFreq = termsEnum.docFreq();
       final BlockReader docDeltas = docs.getDocDeltasReader();
       final BlockReader frequencies = docs.getFreqsReader();
       if (frequencies == null) {
