Index: /trunk/src/VBox/VMM/EM.cpp
===================================================================
--- /trunk/src/VBox/VMM/EM.cpp	(revision 19869)
+++ /trunk/src/VBox/VMM/EM.cpp	(revision 19870)
@@ -519,4 +519,9 @@
         int rc = SSMR3PutBool(pSSM, pVCpu->em.s.fForceRAW);
         AssertRCReturn(rc, rc);
+
+        Assert(pVCpu->em.s.enmState     == EMSTATE_SUSPENDED);
+        Assert(pVCpu->em.s.enmPrevState != EMSTATE_SUSPENDED);
+        rc = SSMR3PutU32(pSSM, pVCpu->em.s.enmPrevState);
+        AssertRCReturn(rc, rc);
     }
     return VINF_SUCCESS;
@@ -539,5 +544,6 @@
      * Validate version.
      */
-    if (u32Version != EM_SAVED_STATE_VERSION)
+    if (    u32Version != EM_SAVED_STATE_VERSION
+        &&  u32Version != EM_SAVED_STATE_VERSION_PRE_SMP)
     {
         AssertMsgFailed(("emR3Load: Invalid version u32Version=%d (current %d)!\n", u32Version, EM_SAVED_STATE_VERSION));
@@ -556,4 +562,16 @@
             pVCpu->em.s.fForceRAW = false;
 
+        if (u32Version > EM_SAVED_STATE_VERSION_PRE_SMP)
+        {
+            EMSTATE     enmState;
+            uint32_t    u32;
+            rc = SSMR3GetU32(pSSM, &u32);
+            AssertRCReturn(rc, rc);
+
+            enmState = (EMSTATE)u32;
+            Assert(enmState != EMSTATE_SUSPENDED);
+            pVCpu->em.s.enmState     = enmState;
+            pVCpu->em.s.enmPrevState = EMSTATE_NONE;
+        }
         Assert(!pVCpu->em.s.pCliStatTree);
     }
@@ -3657,5 +3675,4 @@
         rc = VINF_SUCCESS;
 
-        /** @todo doesn't work for the save/restore case */
         if (    pVCpu->em.s.enmState == EMSTATE_SUSPENDED
             &&  (   pVCpu->em.s.enmPrevState == EMSTATE_WAIT_SIPI
Index: /trunk/src/VBox/VMM/EMInternal.h
===================================================================
--- /trunk/src/VBox/VMM/EMInternal.h	(revision 19869)
+++ /trunk/src/VBox/VMM/EMInternal.h	(revision 19870)
@@ -43,5 +43,6 @@
 
 /** The saved state version. */
-#define EM_SAVED_STATE_VERSION                      2
+#define EM_SAVED_STATE_VERSION                          3
+#define EM_SAVED_STATE_VERSION_PRE_SMP                  2
 
 /**
