Index: /trunk/src/VBox/VMM/VMMAll/PGMAll.cpp
===================================================================
--- /trunk/src/VBox/VMM/VMMAll/PGMAll.cpp	(revision 27377)
+++ /trunk/src/VBox/VMM/VMMAll/PGMAll.cpp	(revision 27378)
@@ -1876,6 +1876,5 @@
         }
         /* Make sure we check for pending pgm pool syncs as we clear VMCPU_FF_PGM_SYNC_CR3 later on! */
-        if (    rc == VINF_PGM_SYNC_CR3
-            ||  (pVCpu->pgm.s.fSyncFlags & PGM_SYNC_CLEAR_PGM_POOL))
+        if (pVCpu->pgm.s.fSyncFlags & PGM_SYNC_CLEAR_PGM_POOL)
         {
             Log(("PGMSyncCR3: pending pgm pool sync after MapCR3!\n"));
Index: /trunk/src/VBox/VMM/VMMAll/PGMAllPool.cpp
===================================================================
--- /trunk/src/VBox/VMM/VMMAll/PGMAllPool.cpp	(revision 27377)
+++ /trunk/src/VBox/VMM/VMMAll/PGMAllPool.cpp	(revision 27378)
@@ -2576,6 +2576,14 @@
 # endif /* !IN_RING3 */
     else
+    {
         pgmPoolMonitorModifiedClearAll(pVM);
 
+        /* pgmPoolMonitorModifiedClearAll can cause a pgm pool flush (dirty page clearing), so make sure we handle this! */
+        if (pVCpu->pgm.s.fSyncFlags & PGM_SYNC_CLEAR_PGM_POOL)
+        {
+            Log(("pgmPoolMonitorModifiedClearAll caused a pgm flush -> call pgmPoolSyncCR3 again!\n"));
+            return pgmPoolSyncCR3(pVCpu);
+        }
+    }
     return VINF_SUCCESS;
 }
