Index: /trunk/src/VBox/Main/src-client/ConsoleImpl2.cpp
===================================================================
--- /trunk/src/VBox/Main/src-client/ConsoleImpl2.cpp	(revision 43255)
+++ /trunk/src/VBox/Main/src-client/ConsoleImpl2.cpp	(revision 43256)
@@ -1518,4 +1518,7 @@
             InsertConfigNode(pLunL0,   "Config", &pCfg);
             InsertConfigInteger(pCfg,  "Object", (uint64_t)mNvram);
+#ifdef DEBUG_vvl
+            InsertConfigInteger(pCfg,  "PermanentSave", 1);
+#endif
         }
 
Index: /trunk/src/VBox/Main/src-client/Nvram.cpp
===================================================================
--- /trunk/src/VBox/Main/src-client/Nvram.cpp	(revision 43255)
+++ /trunk/src/VBox/Main/src-client/Nvram.cpp	(revision 43256)
@@ -50,4 +50,5 @@
     PDMINVRAM INvram;
     int cLoadedVariables;
+    bool fPermanentSave;
 };
 
@@ -94,9 +95,17 @@
                         cbValue));
     PNVRAM pThis = RT_FROM_MEMBER(pInterface, NVRAM, INvram);
+    if (!pThis->fPermanentSave)
+    {
+        LogFlowFuncLeaveRC(rc);
+        return rc;
+    }
+
+    bool fFlushVariable = (!pu8Value);
 
     RT_ZERO(szExtraDataKey);
     RT_ZERO(szExtraDataValue);
     RTStrPrintf(szExtraDataKey, 256, "VBoxInternal/Devices/efi/0/LUN#0/Config/NVRAM/%d/VariableName", idxVariable);
-    RTStrPrintf(szExtraDataValue, 1024, "%s", pcszVariableName? pcszVariableName: "");
+    if (!fFlushVariable)
+        RTStrPrintf(szExtraDataValue, 1024, "%s", pcszVariableName);
     pThis->pNvram->getParent()->machine()->SetExtraData(Bstr(szExtraDataKey).raw(), Bstr(szExtraDataValue).raw());
 
@@ -104,5 +113,5 @@
     RT_ZERO(szExtraDataValue);
     RTStrPrintf(szExtraDataKey, 256, "VBoxInternal/Devices/efi/0/LUN#0/Config/NVRAM/%d/VendorGuid", idxVariable);
-    if (pVendorUuid)
+    if (!fFlushVariable)
         RTUuidToStr(pVendorUuid, szExtraDataValue, 1024);
     pThis->pNvram->getParent()->machine()->SetExtraData(Bstr(szExtraDataKey).raw(), Bstr(szExtraDataValue).raw());
@@ -111,5 +120,5 @@
     RT_ZERO(szExtraDataValue);
     RTStrPrintf(szExtraDataKey, 256, "VBoxInternal/Devices/efi/0/LUN#0/Config/NVRAM/%d/VariableValueLength", idxVariable);
-    if (!cbValue)
+    if (!fFlushVariable)
         RTStrPrintf(szExtraDataValue, 1024, "%d", cbValue);
     pThis->pNvram->getParent()->machine()->SetExtraData(Bstr(szExtraDataKey).raw(), Bstr(szExtraDataValue).raw());
@@ -137,4 +146,10 @@
     LogFlowFuncEnter();
     PNVRAM pThis = RT_FROM_MEMBER(pInterface, NVRAM, INvram);
+    if (!pThis->fPermanentSave)
+    {
+        LogFlowFuncLeaveRC(rc);
+        return rc;
+    }
+
     for (int idxVariable = 0; idxVariable < pThis->cLoadedVariables; ++idxVariable)
     {
@@ -166,4 +181,11 @@
                         *pcbValue));
     PNVRAM pThis = RT_FROM_MEMBER(pInterface, NVRAM, INvram);
+    if (!pThis->fPermanentSave)
+    {
+        rc = VERR_NOT_FOUND;
+        LogFlowFuncLeaveRC(rc);
+        return rc;
+    }
+
 
     RT_ZERO(szExtraDataKey);
@@ -231,5 +253,6 @@
     PNVRAM pThis = PDMINS_2_DATA(pDrvIns, PNVRAM);
 
-    if (!CFGMR3AreValuesValid(pCfg, "Object\0"))
+    if (!CFGMR3AreValuesValid(pCfg, "Object\0"
+                                    "PermanentSave\0"))
         return VERR_PDM_DRVINS_UNKNOWN_CFG_VALUES;
     AssertMsgReturn(PDMDrvHlpNoAttach(pDrvIns) == VERR_PDM_NO_ATTACHED_DRIVER,
@@ -241,4 +264,12 @@
     AssertMsgRCReturn(rc, ("Configuration error: No/bad \"Object\" value! rc=%Rrc\n", rc), rc);
     pThis->pNvram = (Nvram *)pv;
+
+    bool fPermanentSave = false;
+    rc = CFGMR3QueryBool(pCfg, "PermanentSave", &fPermanentSave);
+    if (   RT_SUCCESS(rc)
+        || rc == VERR_CFGM_VALUE_NOT_FOUND)
+        pThis->fPermanentSave = fPermanentSave;
+    else
+        AssertRCReturn(rc, rc);
 
     pDrvIns->IBase.pfnQueryInterface = Nvram::drvNvram_QueryInterface;
