Index: /trunk/src/VBox/VMM/PGMInternal.h
===================================================================
--- /trunk/src/VBox/VMM/PGMInternal.h	(revision 23534)
+++ /trunk/src/VBox/VMM/PGMInternal.h	(revision 23535)
@@ -2719,15 +2719,17 @@
             /** The number of dirty pages. */
             uint32_t                cDirtyPages;
+            /** The number of ready zero pages.  */
+            uint32_t                cZeroPages;
+            /** The number of write monitored pages. */
+            uint32_t                cMonitoredPages;
         }                           Rom,
                                     Mmio2,
                                     Ram;
-        /** The number of monitored pages. */
-        uint32_t                    cMonitoredPages;
-        /** The number of ignored pages.  */
+        /** The number of ignored pages in the RAM ranges (i.e. MMIO, MMIO2 and ROM). */
         uint32_t                    cIgnoredPages;
         /** Indicates that a live save operation is active.  */
         bool                        fActive;
         /** Padding. */
-        bool                        afReserved[4+3];
+        bool                        afReserved[3];
     } LiveSave;
 
Index: /trunk/src/VBox/VMM/PGMSavedState.cpp
===================================================================
--- /trunk/src/VBox/VMM/PGMSavedState.cpp	(revision 23534)
+++ /trunk/src/VBox/VMM/PGMSavedState.cpp	(revision 23535)
@@ -1156,5 +1156,7 @@
                                 {
                                     Assert(!paLSPages[iPage].fWriteMonitored);
-                                    pVM->pgm.s.LiveSave.cMonitoredPages++;
+                                    pVM->pgm.s.LiveSave.Ram.cMonitoredPages++;
+                                    if (paLSPages[iPage].fZero)
+                                        pVM->pgm.s.LiveSave.Ram.cZeroPages--;
                                 }
 
@@ -1204,4 +1206,5 @@
                                         pVM->pgm.s.LiveSave.Ram.cDirtyPages++;
                                     }
+                                    pVM->pgm.s.LiveSave.Ram.cZeroPages++;
                                 }
                                 break;
@@ -1246,5 +1249,5 @@
                                 pVM->pgm.s.cWrittenToPages--;
                             }
-                            pVM->pgm.s.LiveSave.cMonitoredPages--;
+                            pVM->pgm.s.LiveSave.Ram.cMonitoredPages--;
                         }
 
@@ -1349,6 +1352,7 @@
                     int         rc;
                     RTGCPHYS    GCPhys = pCur->GCPhys + ((RTGCPHYS)iPage << PAGE_SHIFT);
-
-                    if (!PGM_PAGE_IS_ZERO(&pCur->aPages[iPage]))
+                    bool        fZero  = PGM_PAGE_IS_ZERO(&pCur->aPages[iPage]);
+
+                    if (!fZero)
                     {
                         /*
@@ -1399,4 +1403,6 @@
                         pVM->pgm.s.LiveSave.Ram.cReadyPages++;
                         pVM->pgm.s.LiveSave.Ram.cDirtyPages--;
+                        if (fZero)
+                            pVM->pgm.s.LiveSave.Ram.cZeroPages++;
                     }
                     if (idRamRangesGen != pVM->pgm.s.idRamRangesGen)
@@ -1538,5 +1544,5 @@
 }
 
-//#include <iprt/stream.h>
+#include <iprt/stream.h>
 
 /**
@@ -1550,14 +1556,19 @@
 static DECLCALLBACK(int)  pgmR3LiveVote(PVM pVM, PSSMHANDLE pSSM)
 {
-#if 0
-    RTPrintf("# Ram R/D=%08x/%08x Ignored=%#08x Monitored=%#08x  Rom R/D=%08x/%08x  Mmio2 R/D=%08x/%08x\n",
+#if 1
+    RTPrintf("# Rom[R/D/Z/M]=%03x/%03x/%03x/%03x  Mmio2=%04x/%04x/%04x/%04x  Ram=%06x/%06x/%06x/%06x Ignored=%03x\n",
+             pVM->pgm.s.LiveSave.Rom.cReadyPages,
+             pVM->pgm.s.LiveSave.Rom.cDirtyPages,
+             pVM->pgm.s.LiveSave.Rom.cZeroPages,
+             pVM->pgm.s.LiveSave.Rom.cMonitoredPages,
+             pVM->pgm.s.LiveSave.Mmio2.cReadyPages,
+             pVM->pgm.s.LiveSave.Mmio2.cDirtyPages,
+             pVM->pgm.s.LiveSave.Mmio2.cZeroPages,
+             pVM->pgm.s.LiveSave.Mmio2.cMonitoredPages,
              pVM->pgm.s.LiveSave.Ram.cReadyPages,
              pVM->pgm.s.LiveSave.Ram.cDirtyPages,
-             pVM->pgm.s.LiveSave.cIgnoredPages,
-             pVM->pgm.s.LiveSave.cMonitoredPages,
-             pVM->pgm.s.LiveSave.Rom.cReadyPages,
-             pVM->pgm.s.LiveSave.Rom.cDirtyPages,
-             pVM->pgm.s.LiveSave.Mmio2.cReadyPages,
-             pVM->pgm.s.LiveSave.Mmio2.cDirtyPages
+             pVM->pgm.s.LiveSave.Ram.cZeroPages,
+             pVM->pgm.s.LiveSave.Ram.cMonitoredPages,
+             pVM->pgm.s.LiveSave.cIgnoredPages
              );
     static int s_iHack = 0;
