Index: src/java/org/apache/lucene/util/OpenBitSetDISI.java
===================================================================
--- src/java/org/apache/lucene/util/OpenBitSetDISI.java	(revision 712485)
+++ src/java/org/apache/lucene/util/OpenBitSetDISI.java	(working copy)
@@ -59,20 +59,15 @@
    * constructor.
    */   
   public void inPlaceAnd(DocIdSetIterator disi) throws IOException {
-    int index = nextSetBit(0);
-    int lastNotCleared = -1;
-    while ((index != -1) && disi.skipTo(index)) {
-      while ((index != -1) && (index < disi.doc())) {
-        fastClear(index);
-        index = nextSetBit(index + 1);
-      }
-      if (index == disi.doc()) {
-        lastNotCleared = index;
-        index++;
-      }
-      assert (index == -1) || (index > disi.doc());
+    int prevNotCleared = 0;
+    int bitSetDoc = nextSetBit(prevNotCleared);
+    while ((bitSetDoc != -1) && disi.skipTo(bitSetDoc)) {
+      int disiDoc = disi.doc();
+      clear(prevNotCleared, disiDoc);
+      prevNotCleared = disiDoc + 1;
+      bitSetDoc = nextSetBit(prevNotCleared);
     }
-    clear(lastNotCleared+1, size());
+    clear(prevNotCleared, size());
   }
 
   /**
