Index: /trunk/src/VBox/Main/src-server/MachineImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/src-server/MachineImpl.cpp	(revision 55232)
+++ /trunk/src/VBox/Main/src-server/MachineImpl.cpp	(revision 55233)
@@ -7132,5 +7132,5 @@
 
     // This check should always fail.
-    HRESULT rc = i_checkStateDependency(MutableStateDep);
+    HRESULT rc = i_checkStateDependency(MutableOrSavedStateDep);
     if (FAILED(rc)) return rc;
 
@@ -12932,5 +12932,5 @@
     AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
 
-    HRESULT rc = i_checkStateDependency(MutableStateDep);
+    HRESULT rc = i_checkStateDependency(MutableOrSavedStateDep);
     if (FAILED(rc)) return rc;
 
Index: /trunk/src/VBox/Main/src-server/SnapshotImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/src-server/SnapshotImpl.cpp	(revision 55232)
+++ /trunk/src/VBox/Main/src-server/SnapshotImpl.cpp	(revision 55233)
@@ -1430,5 +1430,7 @@
                         Global::stringifyMachineState(mData->mMachineState));
 
-    HRESULT rc = S_OK;
+    HRESULT rc = i_checkStateDependency(MutableOrSavedOrRunningStateDep);
+    if (FAILED(rc))
+        return rc;
 
     // prepare the progress object:
@@ -1584,6 +1586,6 @@
         {
             Bstr value;
-            HRESULT rc = GetExtraData(Bstr("VBoxInternal2/ForceTakeSnapshotWithoutState").raw(),
-                                      value.asOutParam());
+            rc = GetExtraData(Bstr("VBoxInternal2/ForceTakeSnapshotWithoutState").raw(),
+                              value.asOutParam());
             if (FAILED(rc) || value != "1")
                 // creating a new online snapshot: we need a fresh saved state file
@@ -1951,9 +1953,11 @@
                         Global::stringifyMachineState(mData->mMachineState));
 
+    HRESULT rc = i_checkStateDependency(MutableOrSavedStateDep);
+    if (FAILED(rc))
+        return rc;
+
     ISnapshot* iSnapshot = aSnapshot;
     ComObjPtr<Snapshot> pSnapshot(static_cast<Snapshot*>(iSnapshot));
     ComObjPtr<SnapshotMachine> pSnapMachine = pSnapshot->i_getSnapshotMachine();
-
-    HRESULT rc = S_OK;
 
     // create a progress object. The number of operations is:
@@ -2351,5 +2355,4 @@
     AssertReturn(!aStartId.isZero() && !aEndId.isZero() && aStartId.isValid() && aEndId.isValid(), E_INVALIDARG);
 
-
     /** @todo implement the "and all children" and "range" variants */
     if (aDeleteAllChildren || aStartId != aEndId)
@@ -2375,7 +2378,12 @@
                         Global::stringifyMachineState(mData->mMachineState));
 
+    HRESULT rc = i_checkStateDependency(MutableOrSavedOrRunningStateDep);
+    if (FAILED(rc))
+        return rc;
+
     ComObjPtr<Snapshot> pSnapshot;
-    HRESULT rc = i_findSnapshotById(aStartId, pSnapshot, true /* aSetError */);
-    if (FAILED(rc)) return rc;
+    rc = i_findSnapshotById(aStartId, pSnapshot, true /* aSetError */);
+    if (FAILED(rc))
+        return rc;
 
     AutoWriteLock snapshotLock(pSnapshot COMMA_LOCKVAL_SRC_POS);
