Index: /trunk/src/VBox/VMM/VMMAll/PGMAllPool.cpp
===================================================================
--- /trunk/src/VBox/VMM/VMMAll/PGMAllPool.cpp	(revision 22700)
+++ /trunk/src/VBox/VMM/VMMAll/PGMAllPool.cpp	(revision 22701)
@@ -1370,4 +1370,6 @@
 
 # ifdef PGMPOOL_WITH_OPTIMIZED_DIRTY_PT
+
+#  ifdef VBOX_STRICT
 /**
  * Check references to guest physical memory in a PAE / PAE page table.
@@ -1421,4 +1423,5 @@
     Assert(!cErrors);
 }
+#  endif /* VBOX_STRICT */
 
 /**
@@ -1512,10 +1515,12 @@
 #ifdef VBOX_STRICT
     uint64_t fFlags = 0;
-    rc = PGMShwGetPage(VMMGetCpu(pVM), pPage->pvDirtyFault, &fFlags, NULL);
-    AssertMsg(      (rc == VINF_SUCCESS && !(fFlags & X86_PTE_RW))
-                /* In the SMP case the page table might be removed while we wait for the PGM lock in the trap handler. */
-                ||  rc == VERR_PAGE_TABLE_NOT_PRESENT 
-                ||  rc == VERR_PAGE_NOT_PRESENT, 
-                ("PGMShwGetPage -> GCPtr=%RGv rc=%d flags=%RX64\n", pPage->pvDirtyFault, rc, fFlags));
+    RTHCPHYS HCPhys;
+    rc = PGMShwGetPage(VMMGetCpu(pVM), pPage->pvDirtyFault, &fFlags, &HCPhys);
+    AssertMsg(      (   rc == VINF_SUCCESS 
+                     && (!(fFlags & X86_PTE_RW) || HCPhys != pPage->Core.Key))
+              /* In the SMP case the page table might be removed while we wait for the PGM lock in the trap handler. */
+              ||    rc == VERR_PAGE_TABLE_NOT_PRESENT 
+              ||    rc == VERR_PAGE_NOT_PRESENT, 
+              ("PGMShwGetPage -> GCPtr=%RGv rc=%d flags=%RX64\n", pPage->pvDirtyFault, rc, fFlags));
 #endif
 
@@ -1571,5 +1576,7 @@
     int rc = PGM_GCPHYS_2_PTR(pPool->CTX_SUFF(pVM), pPage->GCPhys, &pvGst); AssertReleaseRC(rc);
     memcpy(&pPool->aDirtyPages[idxFree][0], pvGst, PAGE_SIZE);
+#ifdef VBOX_STRICT
     pgmPoolTrackCheckPTPaePae(pPool, pPage, (PX86PTPAE)pvShw, (PCX86PTPAE)pvGst);
+#endif
 
     STAM_COUNTER_INC(&pPool->StatDirtyPage);
