Index: java/org/apache/lucene/index/SegmentTermPositions.java
===================================================================
--- java/org/apache/lucene/index/SegmentTermPositions.java	(revision 469306)
+++ java/org/apache/lucene/index/SegmentTermPositions.java	(working copy)
@@ -30,6 +30,7 @@
   // for a lazy skip
   private long lazySkipPointer = 0;
   private int lazySkipDocCount = 0;
+  private boolean needsSkip = false;
   
   SegmentTermPositions(SegmentReader p) {
     super(p);
@@ -38,8 +39,10 @@
 
   final void seek(TermInfo ti) throws IOException {
     super.seek(ti);
-    if (ti != null)
+    if (ti != null) {
       lazySkipPointer = ti.proxPointer;
+      needsSkip = false;
+    }
     
     lazySkipDocCount = 0;
     proxCount = 0;
@@ -52,7 +55,7 @@
 
   public final int nextPosition() throws IOException {
     // perform lazy skips if neccessary
-    lazySkip();
+    if (needsSkip) lazySkip();
     proxCount--;
     return position += proxStream.readVInt();
   }
@@ -61,11 +64,13 @@
     // we remember to skip the remaining positions of the current
     // document lazily
     lazySkipDocCount += freq;
+    needsSkip = true;
   }
 
   public final boolean next() throws IOException {
     // we remember to skip a document lazily
     lazySkipDocCount += proxCount;
+    needsSkip = true;
     
     if (super.next()) {               // run super
       proxCount = freq;               // note frequency
@@ -86,6 +91,7 @@
     lazySkipPointer = proxPointer;
     lazySkipDocCount = 0;
     proxCount = 0;
+    needsSkip = true;
   }
 
   private void skipPositions(int n) throws IOException {
@@ -103,7 +109,7 @@
   // to each other in document x and thus satisfy the query.
   // So we move the prox pointer lazily to the document
   // as soon as positions are requested.
-  private void lazySkip() throws IOException {
+  private final void lazySkip() throws IOException {
     if (lazySkipPointer != 0) {
       proxStream.seek(lazySkipPointer);
       lazySkipPointer = 0;
@@ -113,6 +119,7 @@
       skipPositions(lazySkipDocCount);
       lazySkipDocCount = 0;
     }
+    needsSkip = false;
   }
 
 }
