Index: /trunk/src/VBox/Main/HostImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/HostImpl.cpp	(revision 30303)
+++ /trunk/src/VBox/Main/HostImpl.cpp	(revision 30304)
@@ -1145,4 +1145,5 @@
     /* save the global settings */
     alock.release();
+    AutoWriteLock vboxLock(m->pParent COMMA_LOCKVAL_SRC_POS);
     return rc = m->pParent->saveSettings();
 #else
@@ -1200,4 +1201,5 @@
     /* save the global settings */
     alock.release();
+    AutoWriteLock vboxLock(m->pParent COMMA_LOCKVAL_SRC_POS);
     return rc = m->pParent->saveSettings();
 #else
@@ -1763,4 +1765,5 @@
         // save the global settings... yeah, on every single filter property change
         alock.release();
+        AutoWriteLock vboxLock(m->pParent COMMA_LOCKVAL_SRC_POS);
         return m->pParent->saveSettings();
     }
Index: /trunk/src/VBox/Main/MachineImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/MachineImpl.cpp	(revision 30303)
+++ /trunk/src/VBox/Main/MachineImpl.cpp	(revision 30304)
@@ -3116,7 +3116,10 @@
         alock.leave();
 
-        rc = medium->createDiffStorage(diff, MediumVariant_Standard,
-                                       pMediumLockList, NULL /* aProgress */,
-                                       true /* aWait */, &fNeedsSaveSettings);
+        rc = medium->createDiffStorage(diff,
+                                       MediumVariant_Standard,
+                                       pMediumLockList,
+                                       NULL /* aProgress */,
+                                       true /* aWait */,
+                                       &fNeedsSaveSettings);
 
         alock.enter();
@@ -4872,7 +4875,7 @@
         return setError(VBOX_E_OBJECT_IN_USE, tr("CPU %lu is already attached"), aCpu);
 
-    alock.leave();
+    alock.release();
     rc = onCPUChange(aCpu, false);
-    alock.enter();
+    alock.acquire();
     if (FAILED(rc)) return rc;
 
@@ -4883,5 +4886,5 @@
     /* Save settings if online */
     if (Global::IsOnline(mData->mMachineState))
-        SaveSettings();
+        saveSettings();
 
     return S_OK;
@@ -4913,7 +4916,7 @@
         return setError(E_INVALIDARG, tr("It is not possible to detach CPU 0"));
 
-    alock.leave();
+    alock.release();
     rc = onCPUChange(aCpu, true);
-    alock.enter();
+    alock.acquire();
     if (FAILED(rc)) return rc;
 
@@ -4924,5 +4927,5 @@
     /* Save settings if online */
     if (Global::IsOnline(mData->mMachineState))
-        SaveSettings();
+        saveSettings();
 
     return S_OK;
@@ -11128,5 +11131,5 @@
             mData->mCurrentStateModified = TRUE;
             stsFlags |= SaveSTS_CurStateModified;
-            SaveSettings();
+            SaveSettings();     // @todo r=dj why the public method? why first SaveSettings and then saveStateSettings?
         }
     }
