Index: /trunk/src/VBox/Main/src-server/MediumImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/src-server/MediumImpl.cpp	(revision 35914)
+++ /trunk/src/VBox/Main/src-server/MediumImpl.cpp	(revision 35915)
@@ -6208,5 +6208,5 @@
     bool fGenerateUuid = false;
 
-    GuidList llRegistriesThatNeedSaving;
+    GuidList llRegistriesThatNeedSaving;        // gets copied to task pointer later in synchronous mode
 
     try
Index: /trunk/src/VBox/Main/src-server/SnapshotImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/src-server/SnapshotImpl.cpp	(revision 35914)
+++ /trunk/src/VBox/Main/src-server/SnapshotImpl.cpp	(revision 35915)
@@ -1489,4 +1489,9 @@
                                vrc);
         }
+
+        // if we got this far without an error, then save the media registries
+        // that got modified for the diff images
+        alock.release();
+        mParent->saveRegistries(llRegistriesThatNeedSaving);
     }
     catch (HRESULT hrc)
@@ -1514,8 +1519,4 @@
     else
         *aStateFilePath = NULL;
-
-    // @todo r=dj normally we would need to save the settings if fNeedsGlobalSaveSettings was set to true,
-    // but since we have no error handling that cleans up the diff image that might have gotten created,
-    // there's no point in saving the disk registry at this point either... this needs fixing.
 
     LogFlowThisFunc(("LEAVE - %Rhrc [%s]\n", rc, Global::stringifyMachineState(mData->mMachineState) ));
