Index: src/test/org/apache/lucene/index/TestFieldsReader.java
===================================================================
--- src/test/org/apache/lucene/index/TestFieldsReader.java	(revision 506764)
+++ src/test/org/apache/lucene/index/TestFieldsReader.java	(working copy)
@@ -93,6 +93,7 @@
     lazyFieldNames.add(DocHelper.LAZY_FIELD_KEY);
     lazyFieldNames.add(DocHelper.LAZY_FIELD_BINARY_KEY);
     lazyFieldNames.add(DocHelper.TEXT_FIELD_UTF2_KEY);
+    lazyFieldNames.add(DocHelper.COMPRESSED_TEXT_FIELD_2_KEY);
     SetBasedFieldSelector fieldSelector = new SetBasedFieldSelector(loadFieldNames, lazyFieldNames);
     Document doc = reader.doc(0, fieldSelector);
     assertTrue("doc is null and it shouldn't be", doc != null);
@@ -102,6 +103,12 @@
     String value = field.stringValue();
     assertTrue("value is null and it shouldn't be", value != null);
     assertTrue(value + " is not equal to " + DocHelper.LAZY_FIELD_TEXT, value.equals(DocHelper.LAZY_FIELD_TEXT) == true);
+    field = doc.getFieldable(DocHelper.COMPRESSED_TEXT_FIELD_2_KEY);
+    assertTrue("field is null and it shouldn't be", field != null);
+    assertTrue("field is not lazy and it should be", field.isLazy());
+    value = field.stringValue();
+    assertTrue("value is null and it shouldn't be", value != null);
+    assertTrue(value + " is not equal to " + DocHelper.FIELD_2_COMPRESSED_TEXT, value.equals(DocHelper.FIELD_2_COMPRESSED_TEXT) == true);
     field = doc.getFieldable(DocHelper.TEXT_FIELD_1_KEY);
     assertTrue("field is null and it shouldn't be", field != null);
     assertTrue("Field is lazy and it should not be", field.isLazy() == false);
Index: src/java/org/apache/lucene/index/FieldsReader.java
===================================================================
--- src/java/org/apache/lucene/index/FieldsReader.java	(revision 506764)
+++ src/java/org/apache/lucene/index/FieldsReader.java	(working copy)
@@ -363,9 +363,16 @@
         try {
           localFieldsStream.seek(pointer);
           //read in chars b/c we already know the length we need to read
-          char[] chars = new char[toRead];
-          localFieldsStream.readChars(chars, 0, toRead);
-          fieldsData = new String(chars);
+          if (isCompressed) {
+            final byte[] b = new byte[toRead];
+            localFieldsStream.readBytes(b, 0, b.length);
+            fieldsData = new String(uncompress(b), "UTF-8");
+          } else {
+            //read in chars b/c we already know the length we need to read
+            char[] chars = new char[toRead];
+            localFieldsStream.readChars(chars, 0, toRead);
+            fieldsData = new String(chars);
+          }
         } catch (IOException e) {
           throw new FieldReaderException(e);
         }
