diff -r 5d9ea48b4bcf src/java/org/apache/lucene/index/MultiSegmentReader.java
--- a/src/java/org/apache/lucene/index/MultiSegmentReader.java	Thu May 21 15:57:12 2009 +0400
+++ b/src/java/org/apache/lucene/index/MultiSegmentReader.java	Thu May 21 16:25:21 2009 +0400
@@ -264,18 +264,25 @@
   }
 
   protected synchronized DirectoryIndexReader doReopen(SegmentInfos infos, boolean doClone, boolean openReadOnly) throws CorruptIndexException, IOException {
-    DirectoryIndexReader reader;
-	if (infos.size() == 1) {
+	  if (infos.size() == 1) {
       // The index has only one segment now, so we can't refresh the MultiSegmentReader.
       // Return a new [ReadOnly]SegmentReader instead
+      SegmentReader reader;
       reader = SegmentReader.get(openReadOnly, infos, infos.info(0), false);
-    } else if (openReadOnly) {
-      reader = new ReadOnlyMultiSegmentReader(directory, infos, closeDirectory, subReaders, starts, normsCache, doClone);
+      reader.setDisableFakeNorms(getDisableFakeNorms());
+      return reader;
     } else {
-      reader = new MultiSegmentReader(directory, infos, closeDirectory, subReaders, starts, normsCache, false, doClone);
+      MultiSegmentReader reader;
+      if (openReadOnly) {
+        reader = new ReadOnlyMultiSegmentReader(directory, infos, closeDirectory, subReaders, starts, normsCache, doClone);
+      } else {
+        reader = new MultiSegmentReader(directory, infos, closeDirectory, subReaders, starts, normsCache, false, doClone);
+      }
+      reader.setDisableFakeNorms(getDisableFakeNorms());
+      reader.hasChanges = hasChanges;
+      reader.hasDeletions = hasDeletions;
+      return reader;
     }
-    reader.setDisableFakeNorms(getDisableFakeNorms());
-    return reader;
   }
 
   public TermFreqVector[] getTermFreqVectors(int n) throws IOException {
diff -r 5d9ea48b4bcf src/test/org/apache/lucene/index/TestIndexReaderClone.java
--- a/src/test/org/apache/lucene/index/TestIndexReaderClone.java	Thu May 21 15:57:12 2009 +0400
+++ b/src/test/org/apache/lucene/index/TestIndexReaderClone.java	Thu May 21 16:25:21 2009 +0400
@@ -397,6 +397,24 @@
     dir1.close();
   }
 
+  // LUCENE-1648 followup
+  public void testMSRCloneWithDeletes() throws Throwable {
+    final Directory dir1 = new MockRAMDirectory();
+    TestIndexReaderReopen.createIndex(dir1, false);
+    TestIndexReaderReopen.modifyIndex(5, dir1);
+    IndexReader origReader = IndexReader.open(dir1);
+    origReader.deleteDocument(1);
+
+    IndexReader clonedReader = (IndexReader) origReader.clone();
+    origReader.close();
+    clonedReader.close();
+
+    IndexReader r = IndexReader.open(dir1);
+    assertTrue(r.isDeleted(1));
+    r.close();
+    dir1.close();
+  }
+
   // LUCENE-1648
   public void testCloneWithDeletes() throws Throwable {
     final Directory dir1 = new MockRAMDirectory();
