Index: /trunk/src/VBox/Main/ConsoleImpl2.cpp
===================================================================
--- /trunk/src/VBox/Main/ConsoleImpl2.cpp	(revision 32907)
+++ /trunk/src/VBox/Main/ConsoleImpl2.cpp	(revision 32908)
@@ -311,4 +311,21 @@
 }
 
+static uint32_t computeHyperHeapSize(ChipsetType_T chipsetType, uint32_t cCpus, bool fHwVirtExtForced)
+{
+    uint32_t singleCpuBaseSize;
+
+    if (cCpus > 1)
+        return _2M + cCpus * _64K;
+
+    if (chipsetType == ChipsetType_PIIX3)
+    {
+        /* Size must be kept like this for saved state compatibility */
+        return fHwVirtExtForced ? 640*_1K : 1280*_1K;
+    }
+
+
+    return 1280*_1K;
+}
+
 class ConfigError : public iprt::Error
 {
@@ -678,4 +695,16 @@
         InsertConfigInteger(pRoot, "HwVirtExtForced",      fHwVirtExtForced);
 
+
+        /*
+         * MM values.
+         */
+        PCFGMNODE pMM;
+        uint32_t cbHyperHeap = computeHyperHeapSize(chipsetType, cCpus, fHwVirtExtForced);
+        InsertConfigNode(pRoot, "MM", &pMM);
+        InsertConfigInteger(pMM, "cbHyperHeap", cbHyperHeap);
+
+        /*
+         * Hardware virtualization settings.
+         */
         PCFGMNODE pHWVirtExt;
         InsertConfigNode(pRoot, "HWVirtExt", &pHWVirtExt);
Index: /trunk/src/VBox/VMM/MMHyper.cpp
===================================================================
--- /trunk/src/VBox/VMM/MMHyper.cpp	(revision 32907)
+++ /trunk/src/VBox/VMM/MMHyper.cpp	(revision 32908)
@@ -75,15 +75,5 @@
     uint32_t cbHyperHeap;
     int rc = CFGMR3QueryU32(CFGMR3GetChild(CFGMR3GetRoot(pVM), "MM"), "cbHyperHeap", &cbHyperHeap);
-    if (rc == VERR_CFGM_NO_PARENT || rc == VERR_CFGM_VALUE_NOT_FOUND)
-    {
-        if (pVM->cCpus > 1)
-            cbHyperHeap = _2M + pVM->cCpus * _64K;
-        else
-            cbHyperHeap = VMMIsHwVirtExtForced(pVM)
-                        ? 640*_1K
-                        : 1280*_1K;
-    }
-    else
-        AssertLogRelRCReturn(rc, rc);
+    AssertLogRelRCReturn(rc, rc);
     cbHyperHeap = RT_ALIGN_32(cbHyperHeap, PAGE_SIZE);
     LogRel(("MM: cbHyperHeap=%#x (%u)\n", cbHyperHeap, cbHyperHeap));
