Index: lucene/core/src/java/org/apache/lucene/codecs/lucene41/Lucene41PostingsWriter.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/codecs/lucene41/Lucene41PostingsWriter.java	(revision 1401371)
+++ lucene/core/src/java/org/apache/lucene/codecs/lucene41/Lucene41PostingsWriter.java	(working copy)
@@ -248,7 +248,7 @@
     //   System.out.println("  docDeltaBuffer[" + docBufferUpto + "]=" + docDelta);
     // }
     if (fieldHasFreqs) {
-      freqBuffer[docBufferUpto] = termDocFreq;
+      freqBuffer[docBufferUpto] = termDocFreq-1;
     }
     docBufferUpto++;
     docCount++;
@@ -400,7 +400,7 @@
         final int freq = freqBuffer[i];
         if (!fieldHasFreqs) {
           docOut.writeVInt(docDelta);
-        } else if (freqBuffer[i] == 1) {
+        } else if (freqBuffer[i] == 0) {
           docOut.writeVInt((docDelta<<1)|1);
         } else {
           docOut.writeVInt(docDelta<<1);
Index: lucene/core/src/java/org/apache/lucene/codecs/lucene41/Lucene41PostingsReader.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/codecs/lucene41/Lucene41PostingsReader.java	(revision 1401371)
+++ lucene/core/src/java/org/apache/lucene/codecs/lucene41/Lucene41PostingsReader.java	(working copy)
@@ -129,7 +129,7 @@
         final int code = docIn.readVInt();
         docBuffer[i] = code >>> 1;
         if ((code & 1) != 0) {
-          freqBuffer[i] = 1;
+          freqBuffer[i] = 0;
         } else {
           freqBuffer[i] = docIn.readVInt();
         }
@@ -410,7 +410,7 @@
       doc = -1;
       this.needsFreq = (flags & DocsEnum.FLAG_FREQS) != 0;
       if (!indexHasFreq) {
-        Arrays.fill(freqBuffer, 1);
+        Arrays.fill(freqBuffer, 0);
       }
       accum = 0;
       docUpto = 0;
@@ -452,7 +452,7 @@
         }
       } else if (docFreq == 1) {
         docDeltaBuffer[0] = singletonDocID;
-        freqBuffer[0] = (int) totalTermFreq;
+        freqBuffer[0] = (int) totalTermFreq-1;
       } else {
         // Read vInts:
         // if (DEBUG) {
@@ -491,7 +491,7 @@
 
         if (liveDocs == null || liveDocs.get(accum)) {
           doc = accum;
-          freq = freqBuffer[docBufferUpto];
+          freq = freqBuffer[docBufferUpto]+1;
           docBufferUpto++;
           // if (DEBUG) {
           //   System.out.println("  return doc=" + doc + " freq=" + freq);
@@ -588,7 +588,7 @@
         // if (DEBUG) {
         //   System.out.println("  return doc=" + accum);
         // }
-        freq = freqBuffer[docBufferUpto];
+        freq = freqBuffer[docBufferUpto]+1;
         docBufferUpto++;
         return doc = accum;
       } else {
@@ -743,7 +743,7 @@
         forUtil.readBlock(docIn, encoded, freqBuffer);
       } else if (docFreq == 1) {
         docDeltaBuffer[0] = singletonDocID;
-        freqBuffer[0] = (int) totalTermFreq;
+        freqBuffer[0] = (int) totalTermFreq-1;
       } else {
         // Read vInts:
         // if (DEBUG) {
@@ -811,7 +811,7 @@
         //   System.out.println("    accum=" + accum + " docDeltaBuffer[" + docBufferUpto + "]=" + docDeltaBuffer[docBufferUpto]);
         // }
         accum += docDeltaBuffer[docBufferUpto];
-        freq = freqBuffer[docBufferUpto];
+        freq = freqBuffer[docBufferUpto]+1;
         posPendingCount += freq;
         docBufferUpto++;
         docUpto++;
@@ -899,7 +899,7 @@
         //   System.out.println("  scan doc=" + accum + " docBufferUpto=" + docBufferUpto);
         // }
         accum += docDeltaBuffer[docBufferUpto];
-        freq = freqBuffer[docBufferUpto];
+        freq = freqBuffer[docBufferUpto]+1;
         posPendingCount += freq;
         docBufferUpto++;
         docUpto++;
@@ -1199,7 +1199,7 @@
         forUtil.readBlock(docIn, encoded, freqBuffer);
       } else if (docFreq == 1) {
         docDeltaBuffer[0] = singletonDocID;
-        freqBuffer[0] = (int) totalTermFreq;
+        freqBuffer[0] = (int) totalTermFreq-1;
       } else {
         // if (DEBUG) {
         //   System.out.println("    fill last vInt doc block from fp=" + docIn.getFilePointer());
@@ -1324,7 +1324,7 @@
         //   System.out.println("    accum=" + accum + " docDeltaBuffer[" + docBufferUpto + "]=" + docDeltaBuffer[docBufferUpto]);
         // }
         accum += docDeltaBuffer[docBufferUpto];
-        freq = freqBuffer[docBufferUpto];
+        freq = freqBuffer[docBufferUpto]+1;
         posPendingCount += freq;
         docBufferUpto++;
         docUpto++;
@@ -1417,7 +1417,7 @@
         //   System.out.println("  scan doc=" + accum + " docBufferUpto=" + docBufferUpto);
         // }
         accum += docDeltaBuffer[docBufferUpto];
-        freq = freqBuffer[docBufferUpto];
+        freq = freqBuffer[docBufferUpto]+1;
         posPendingCount += freq;
         docBufferUpto++;
         docUpto++;