Index: /trunk/include/VBox/pgm.h
===================================================================
--- /trunk/include/VBox/pgm.h	(revision 12406)
+++ /trunk/include/VBox/pgm.h	(revision 12407)
@@ -261,4 +261,10 @@
     PGMMODE_32BIT_HACK = 0x7fffffff
 } PGMMODE;
+
+/** Macro for checking if the guest is using paging.
+ * @param uType     PGMMODE_*
+ * @remark  ASSUMES certain order of the PGMMODE_* values.
+ */
+#define PGMMODE_WITH_PAGING(enmMode) (enmMode >= PGMMODE_32_BIT)
 
 /**
Index: /trunk/src/VBox/VMM/PGM.cpp
===================================================================
--- /trunk/src/VBox/VMM/PGM.cpp	(revision 12406)
+++ /trunk/src/VBox/VMM/PGM.cpp	(revision 12407)
@@ -3244,7 +3244,11 @@
      * switch shadow paging mode (e.g. protected->32-bit) and shouldn't reuse
      * the shadow page tables.
+     *
+     * That only applies when switching between paging and non-paging modes. 
+     *
+     * @todo A20 setting
      */
     if (   pVM->pgm.s.CTXSUFF(pPool)
-        && pVM->pgm.s.enmGuestMode != enmGuestMode)
+        && PGMMODE_WITH_PAGING(pVM->pgm.s.enmGuestMode) != PGMMODE_WITH_PAGING(enmGuestMode))
     {
         Log(("PGMR3ChangeMode: changing guest paging mode -> flush pgm pool cache!\n"));
