Index: src/java/org/apache/lucene/index/SegmentTermPositions.java
===================================================================
--- src/java/org/apache/lucene/index/SegmentTermPositions.java	(revision 555400)
+++ src/java/org/apache/lucene/index/SegmentTermPositions.java	(working copy)
@@ -35,7 +35,7 @@
   
   // these variables are being used to remember information
   // for a lazy skip
-  private long lazySkipPointer = 0;
+  private long lazySkipPointer = -1;
   private int lazySkipProxCount = 0;
   
   SegmentTermPositions(SegmentReader p) {
@@ -152,9 +152,9 @@
     // if it was not read yet
     skipPayload();
       
-    if (lazySkipPointer != 0) {
+    if (lazySkipPointer != -1) {
       proxStream.seek(lazySkipPointer);
-      lazySkipPointer = 0;
+      lazySkipPointer = -1;
     }
      
     if (lazySkipProxCount != 0) {
Index: src/test/org/apache/lucene/index/TestLazyProxSkipping.java
===================================================================
--- src/test/org/apache/lucene/index/TestLazyProxSkipping.java	(revision 555400)
+++ src/test/org/apache/lucene/index/TestLazyProxSkipping.java	(working copy)
@@ -98,7 +98,7 @@
         assertEquals(numHits, hits.length());
         
         // check if the number of calls of seek() does not exceed the number of hits
-        assertEquals(numHits, this.seeksCounter);
+        assertTrue(this.seeksCounter <= numHits + 1);
     }
     
     public void testLazySkipping() throws IOException {
@@ -107,6 +107,34 @@
         performTest(10);
     }
     
+    public void testSeek() throws IOException {
+        Directory directory = new RAMDirectory();
+        IndexWriter writer = new IndexWriter(directory, new WhitespaceAnalyzer(), true);
+        for (int i = 0; i < 10; i++) {
+            Document doc = new Document();
+            doc.add(new Field(this.field, "a b", Field.Store.YES, Field.Index.TOKENIZED));
+            writer.addDocument(doc);
+        }
+        
+        writer.close();
+        IndexReader reader = IndexReader.open(directory);
+        TermPositions tp = reader.termPositions();
+        tp.seek(new Term(this.field, "b"));
+        for (int i = 0; i < 10; i++) {
+            tp.next();
+            assertEquals(tp.doc(), i);
+            assertEquals(tp.nextPosition(), 1);
+        }
+        tp.seek(new Term(this.field, "a"));
+        for (int i = 0; i < 10; i++) {
+            tp.next();
+            assertEquals(tp.doc(), i);
+            assertEquals(tp.nextPosition(), 0);
+        }
+        
+        
+    }
+    
 
     // Simply extends IndexInput in a way that we are able to count the number
     // of invocations of seek()
