Index: /trunk/src/VBox/Main/MachineImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/MachineImpl.cpp	(revision 35174)
+++ /trunk/src/VBox/Main/MachineImpl.cpp	(revision 35175)
@@ -10242,11 +10242,11 @@
     }
 
-    Assert(mSnapshotData.mStateFilePath.isEmpty() || !mSnapshotData.mSnapshot);
-    if (!mSnapshotData.mStateFilePath.isEmpty())
+    Assert(mConsoleTaskData.mStateFilePath.isEmpty() || !mConsoleTaskData.mSnapshot);
+    if (!mConsoleTaskData.mStateFilePath.isEmpty())
     {
         LogWarningThisFunc(("canceling failed save state request!\n"));
         endSavingState(E_FAIL, tr("Machine terminated with pending save state!"));
     }
-    else if (!mSnapshotData.mSnapshot.isNull())
+    else if (!mConsoleTaskData.mSnapshot.isNull())
     {
         LogWarningThisFunc(("canceling untaken snapshot!\n"));
@@ -10256,8 +10256,8 @@
         rollbackMedia();
         /* delete the saved state file (it might have been already created) */
-        if (mSnapshotData.mSnapshot->stateFilePath().length())
-            RTFileDelete(mSnapshotData.mSnapshot->stateFilePath().c_str());
-
-        mSnapshotData.mSnapshot->uninit();
+        if (mConsoleTaskData.mSnapshot->stateFilePath().length())
+            RTFileDelete(mConsoleTaskData.mSnapshot->stateFilePath().c_str());
+
+        mConsoleTaskData.mSnapshot->uninit();
     }
 
@@ -10752,6 +10752,6 @@
 
     AssertReturn(    mData->mMachineState == MachineState_Paused
-                  && mSnapshotData.mLastState == MachineState_Null
-                  && mSnapshotData.mStateFilePath.isEmpty(),
+                  && mConsoleTaskData.mLastState == MachineState_Null
+                  && mConsoleTaskData.mStateFilePath.isEmpty(),
                  E_FAIL);
 
@@ -10777,7 +10777,7 @@
 
     /* fill in the snapshot data */
-    mSnapshotData.mLastState = mData->mMachineState;
-    mSnapshotData.mStateFilePath = stateFilePath;
-    mSnapshotData.mProgress = pProgress;
+    mConsoleTaskData.mLastState = mData->mMachineState;
+    mConsoleTaskData.mStateFilePath = stateFilePath;
+    mConsoleTaskData.mProgress = pProgress;
 
     /* set the state to Saving (this is expected by Console::SaveState()) */
@@ -10805,6 +10805,6 @@
     AssertReturn(    (   (SUCCEEDED(iResult) && mData->mMachineState == MachineState_Saved)
                       || (FAILED(iResult) && mData->mMachineState == MachineState_Saving))
-                  && mSnapshotData.mLastState != MachineState_Null
-                  && !mSnapshotData.mStateFilePath.isEmpty(),
+                  && mConsoleTaskData.mLastState != MachineState_Null
+                  && !mConsoleTaskData.mStateFilePath.isEmpty(),
                  E_FAIL);
 
@@ -10816,5 +10816,5 @@
      */
     if (FAILED(iResult))
-        setMachineState(mSnapshotData.mLastState);
+        setMachineState(mConsoleTaskData.mLastState);
 
     return endSavingState(iResult, aErrMsg);
@@ -11517,5 +11517,5 @@
     if (SUCCEEDED(aRc))
     {
-        mSSData->mStateFilePath = mSnapshotData.mStateFilePath;
+        mSSData->mStateFilePath = mConsoleTaskData.mStateFilePath;
 
         /* save all VM settings */
@@ -11527,26 +11527,26 @@
     {
         /* delete the saved state file (it might have been already created) */
-        RTFileDelete(mSnapshotData.mStateFilePath.c_str());
+        RTFileDelete(mConsoleTaskData.mStateFilePath.c_str());
     }
 
     /* notify the progress object about operation completion */
-    Assert(mSnapshotData.mProgress);
+    Assert(mConsoleTaskData.mProgress);
     if (SUCCEEDED(aRc))
-        mSnapshotData.mProgress->notifyComplete(S_OK);
+        mConsoleTaskData.mProgress->notifyComplete(S_OK);
     else
     {
         if (aErrMsg.length())
-            mSnapshotData.mProgress->notifyComplete(aRc,
+            mConsoleTaskData.mProgress->notifyComplete(aRc,
                                                     COM_IIDOF(ISession),
                                                     getComponentName(),
                                                     aErrMsg.c_str());
         else
-            mSnapshotData.mProgress->notifyComplete(aRc);
+            mConsoleTaskData.mProgress->notifyComplete(aRc);
     }
 
     /* clear out the temporary saved state data */
-    mSnapshotData.mLastState = MachineState_Null;
-    mSnapshotData.mStateFilePath.setNull();
-    mSnapshotData.mProgress.setNull();
+    mConsoleTaskData.mLastState = MachineState_Null;
+    mConsoleTaskData.mStateFilePath.setNull();
+    mConsoleTaskData.mProgress.setNull();
 
     LogFlowThisFuncLeave();
@@ -11731,6 +11731,6 @@
              /* ignore PoweredOff->Saving->PoweredOff transition when taking a
               * snapshot */
-             && (   mSnapshotData.mSnapshot.isNull()
-                 || mSnapshotData.mLastState >= MachineState_Running /** @todo Live Migration: clean up (lazy bird) */
+             && (   mConsoleTaskData.mSnapshot.isNull()
+                 || mConsoleTaskData.mLastState >= MachineState_Running /** @todo Live Migration: clean up (lazy bird) */
                 )
             )
Index: /trunk/src/VBox/Main/SnapshotImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/SnapshotImpl.cpp	(revision 35174)
+++ /trunk/src/VBox/Main/SnapshotImpl.cpp	(revision 35175)
@@ -1367,6 +1367,6 @@
                   || mData->mMachineState == MachineState_Running
                   || mData->mMachineState == MachineState_Paused, E_FAIL);
-    AssertReturn(mSnapshotData.mLastState == MachineState_Null, E_FAIL);
-    AssertReturn(mSnapshotData.mSnapshot.isNull(), E_FAIL);
+    AssertReturn(mConsoleTaskData.mLastState == MachineState_Null, E_FAIL);
+    AssertReturn(mConsoleTaskData.mSnapshot.isNull(), E_FAIL);
 
     if (    !fTakingSnapshotOnline
@@ -1422,6 +1422,10 @@
 
     /* fill in the snapshot data */
-    mSnapshotData.mLastState = mData->mMachineState;
-    mSnapshotData.mSnapshot = pSnapshot;
+    mConsoleTaskData.mLastState = mData->mMachineState;
+    mConsoleTaskData.mSnapshot = pSnapshot;
+    /// @todo in the long run the progress object should be moved to
+    // VBoxSVC to avoid trouble with monitoring the progress object state
+    // when the process where it lives is terminating shortly after the
+    // operation completed.
 
     try
@@ -1436,5 +1440,5 @@
 
         /* Console::fntTakeSnapshotWorker and friends expects this. */
-        if (mSnapshotData.mLastState == MachineState_Running)
+        if (mConsoleTaskData.mLastState == MachineState_Running)
             setMachineState(MachineState_LiveSnapshotting);
         else
@@ -1449,8 +1453,8 @@
             throw rc;
 
-        if (mSnapshotData.mLastState == MachineState_Saved)
+        if (mConsoleTaskData.mLastState == MachineState_Saved)
         {
             Utf8Str stateFrom = mSSData->mStateFilePath;
-            Utf8Str stateTo = mSnapshotData.mSnapshot->stateFilePath();
+            Utf8Str stateTo = mConsoleTaskData.mSnapshot->stateFilePath();
 
             LogFlowThisFunc(("Copying the execution state from '%s' to '%s'...\n",
@@ -1484,15 +1488,15 @@
     {
         LogThisFunc(("Caught %Rhrc [%s]\n", hrc, Global::stringifyMachineState(mData->mMachineState) ));
-        if (    mSnapshotData.mLastState != mData->mMachineState
-             && (   mSnapshotData.mLastState == MachineState_Running
+        if (    mConsoleTaskData.mLastState != mData->mMachineState
+             && (   mConsoleTaskData.mLastState == MachineState_Running
                   ? mData->mMachineState == MachineState_LiveSnapshotting
                   : mData->mMachineState == MachineState_Saving)
            )
-            setMachineState(mSnapshotData.mLastState);
+            setMachineState(mConsoleTaskData.mLastState);
 
         pSnapshot->uninit();
         pSnapshot.setNull();
-        mSnapshotData.mLastState = MachineState_Null;
-        mSnapshotData.mSnapshot.setNull();
+        mConsoleTaskData.mLastState = MachineState_Null;
+        mConsoleTaskData.mSnapshot.setNull();
 
         rc = hrc;
@@ -1540,6 +1544,6 @@
                  || (    (    mData->mMachineState == MachineState_Saving
                            || mData->mMachineState == MachineState_LiveSnapshotting)
-                      && mSnapshotData.mLastState != MachineState_Null
-                      && !mSnapshotData.mSnapshot.isNull()
+                      && mConsoleTaskData.mLastState != MachineState_Null
+                      && !mConsoleTaskData.mSnapshot.isNull()
                     )
                  , E_FAIL);
@@ -1551,13 +1555,13 @@
      * all to avoid races.
      */
-    if (    mData->mMachineState != mSnapshotData.mLastState
-         && mSnapshotData.mLastState != MachineState_Running
+    if (    mData->mMachineState != mConsoleTaskData.mLastState
+         && mConsoleTaskData.mLastState != MachineState_Running
        )
-        setMachineState(mSnapshotData.mLastState);
+        setMachineState(mConsoleTaskData.mLastState);
 
     ComObjPtr<Snapshot> pOldFirstSnap = mData->mFirstSnapshot;
     ComObjPtr<Snapshot> pOldCurrentSnap = mData->mCurrentSnapshot;
 
-    bool fOnline = Global::IsOnline(mSnapshotData.mLastState);
+    bool fOnline = Global::IsOnline(mConsoleTaskData.mLastState);
 
     HRESULT rc = S_OK;
@@ -1566,5 +1570,5 @@
     {
         // new snapshot becomes the current one
-        mData->mCurrentSnapshot = mSnapshotData.mSnapshot;
+        mData->mCurrentSnapshot = mConsoleTaskData.mSnapshot;
 
         /* memorize the first snapshot if necessary */
@@ -1591,5 +1595,5 @@
         /* inform callbacks */
         mParent->onSnapshotTaken(mData->mUuid,
-                                 mSnapshotData.mSnapshot->getId());
+                                 mConsoleTaskData.mSnapshot->getId());
     }
     else
@@ -1603,13 +1607,13 @@
 
         /* delete the saved state file (it might have been already created) */
-        if (mSnapshotData.mSnapshot->stateFilePath().length())
-            RTFileDelete(mSnapshotData.mSnapshot->stateFilePath().c_str());
-
-        mSnapshotData.mSnapshot->uninit();
+        if (mConsoleTaskData.mSnapshot->stateFilePath().length())
+            RTFileDelete(mConsoleTaskData.mSnapshot->stateFilePath().c_str());
+
+        mConsoleTaskData.mSnapshot->uninit();
     }
 
     /* clear out the snapshot data */
-    mSnapshotData.mLastState = MachineState_Null;
-    mSnapshotData.mSnapshot.setNull();
+    mConsoleTaskData.mLastState = MachineState_Null;
+    mConsoleTaskData.mSnapshot.setNull();
 
     // save VirtualBox.xml (media registry most probably changed with diff image);
Index: /trunk/src/VBox/Main/include/MachineImpl.h
===================================================================
--- /trunk/src/VBox/Main/include/MachineImpl.h	(revision 35174)
+++ /trunk/src/VBox/Main/include/MachineImpl.h	(revision 35175)
@@ -993,16 +993,16 @@
 private:
 
-    struct SnapshotData
-    {
-        SnapshotData() : mLastState(MachineState_Null) {}
+    struct ConsoleTaskData
+    {
+        ConsoleTaskData() : mLastState(MachineState_Null) {}
 
         MachineState_T mLastState;
+        ComObjPtr<Progress> mProgress;
 
         // used when taking snapshot
         ComObjPtr<Snapshot> mSnapshot;
 
-        // used when saving state
+        // used when saving state (either as part of a snapshot or separate)
         Utf8Str mStateFilePath;
-        ComObjPtr<Progress> mProgress;
     };
 
@@ -1063,5 +1063,5 @@
     HRESULT mRemoveSavedState;
 
-    SnapshotData mSnapshotData;
+    ConsoleTaskData mConsoleTaskData;
 
     /** interprocess semaphore handle for this machine */
