Index: /trunk/src/VBox/Main/include/MediumImpl.h
===================================================================
--- /trunk/src/VBox/Main/include/MediumImpl.h	(revision 60626)
+++ /trunk/src/VBox/Main/include/MediumImpl.h	(revision 60627)
@@ -5,5 +5,5 @@
 
 /*
- * Copyright (C) 2008-2015 Oracle Corporation
+ * Copyright (C) 2008-2016 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
@@ -158,5 +158,5 @@
 
     HRESULT i_createMediumLockList(bool fFailIfInaccessible,
-                                   bool fMediumLockWrite,
+                                   Medium *pToLock,
                                    bool fMediumLockWriteAll,
                                    Medium *pToBeParent,
Index: /trunk/src/VBox/Main/src-server/MachineImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/src-server/MachineImpl.cpp	(revision 60626)
+++ /trunk/src/VBox/Main/src-server/MachineImpl.cpp	(revision 60627)
@@ -5,5 +5,5 @@
 
 /*
- * Copyright (C) 2004-2015 Oracle Corporation
+ * Copyright (C) 2004-2016 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
@@ -3923,5 +3923,5 @@
 
                         rc = medium->i_createMediumLockList(true /* fFailIfInaccessible */,
-                                                            true /* fMediumLockWrite */,
+                                                            medium /* pToLockWrite */,
                                                             false /* fMediumLockWriteAll */,
                                                             NULL,
@@ -4021,5 +4021,5 @@
 
                                 rc = medium->i_createMediumLockList(true /* fFailIfInaccessible */,
-                                                                    true /* fMediumLockWrite */,
+                                                                    medium /* pToLockWrite */,
                                                                     false /* fMediumLockWriteAll */,
                                                                     NULL,
@@ -4188,5 +4188,5 @@
         treeLock.release();
         rc = diff->i_createMediumLockList(true /* fFailIfInaccessible */,
-                                          true /* fMediumLockWrite */,
+                                          diff /* pToLockWrite */,
                                           false /* fMediumLockWriteAll */,
                                           medium,
@@ -4292,5 +4292,5 @@
 
             rc = medium->i_createMediumLockList(true /* fFailIfInaccessible */,
-                                                true /* fMediumLockWrite */,
+                                                medium /* pToLockWrite */,
                                                 false /* fMediumLockWriteAll */,
                                                 NULL,
@@ -10740,5 +10740,5 @@
                     alock.release();
                     rc = pMedium->i_createMediumLockList(true /* fFailIfInaccessible */,
-                                                         false /* fMediumLockWrite */,
+                                                         NULL /* pToLockWrite */,
                                                          false /* fMediumLockWriteAll */,
                                                          NULL,
@@ -10994,5 +10994,5 @@
                     alock.release();
                     rc = pMedium->i_createMediumLockList(true /* fFailIfInaccessible */,
-                                                         false /* fMediumLockWrite */,
+                                                         NULL /* pToLockWrite */,
                                                          false /* fMediumLockWriteAll */,
                                                          NULL,
@@ -14404,5 +14404,5 @@
             alock.release();
             mrc = pMedium->i_createMediumLockList(fIsVitalImage /* fFailIfInaccessible */,
-                                                  !fIsReadOnlyLock /* fMediumLockWrite */,
+                                                  !fIsReadOnlyLock ? pMedium : NULL /* pToLockWrite */,
                                                   false /* fMediumLockWriteAll */,
                                                   NULL,
Index: /trunk/src/VBox/Main/src-server/MachineImplCloneVM.cpp
===================================================================
--- /trunk/src/VBox/Main/src-server/MachineImplCloneVM.cpp	(revision 60626)
+++ /trunk/src/VBox/Main/src-server/MachineImplCloneVM.cpp	(revision 60627)
@@ -5,5 +5,5 @@
 
 /*
- * Copyright (C) 2011-2015 Oracle Corporation
+ * Copyright (C) 2011-2016 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
@@ -716,5 +716,5 @@
         MediumLockList *pMediumLockList(new MediumLockList());
         rc = diff->i_createMediumLockList(true /* fFailIfInaccessible */,
-                                          true /* fMediumLockWrite */,
+                                          diff /* pToLockWrite */,
                                           false /* fMediumLockWriteAll */,
                                           pParent,
Index: /trunk/src/VBox/Main/src-server/MediumImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/src-server/MediumImpl.cpp	(revision 60626)
+++ /trunk/src/VBox/Main/src-server/MediumImpl.cpp	(revision 60627)
@@ -2615,5 +2615,5 @@
     alock.release();
     HRESULT rc = diff->i_createMediumLockList(true /* fFailIfInaccessible */,
-                                              true /* fMediumLockWrite */,
+                                              diff /* pToLockWrite */,
                                               false /* fMediumLockWriteAll */,
                                               this,
@@ -2755,5 +2755,5 @@
         alock.release();
         rc = i_createMediumLockList(true /* fFailIfInaccessible */,
-                                    false /* fMediumLockWrite */,
+                                    NULL /* pToLockWrite */,
                                     false /* fMediumLockWriteAll */,
                                     NULL,
@@ -2770,5 +2770,5 @@
         alock.release();
         rc = pTarget->i_createMediumLockList(true /* fFailIfInaccessible */,
-                                             true /* fMediumLockWrite */,
+                                             pTarget /* pToLockWrite */,
                                              false /* fMediumLockWriteAll */,
                                              pParent,
@@ -2885,5 +2885,5 @@
         alock.release();
         rc = i_createMediumLockList(true /* fFailIfInaccessible */ ,
-                                    true /* fMediumLockWrite */,
+                                    this /* pToLockWrite */,
                                     false /* fMediumLockWriteAll */,
                                     NULL,
@@ -2955,5 +2955,5 @@
         alock.release();
         rc = i_createMediumLockList(true /* fFailIfInaccessible */ ,
-                                    true /* fMediumLockWrite */,
+                                    this /* pToLockWrite */,
                                     false /* fMediumLockWriteAll */,
                                     NULL,
@@ -3038,5 +3038,5 @@
         multilock.release();
         rc = i_createMediumLockList(true /* fFailIfInaccessible */,
-                                    true /* fMediumLockWrite */,
+                                    this /* pToLockWrite */,
                                     false /* fMediumLockWriteAll */,
                                     NULL,
@@ -3127,5 +3127,5 @@
         alock.release();
         rc = i_createMediumLockList(true /* fFailIfInaccessible */ ,
-                                    true /* fMediumLockWrite */,
+                                    this /* pToLockWrite */,
                                     true /* fMediumLockAllWrite */,
                                     NULL,
@@ -4272,5 +4272,5 @@
  *          inaccessible media are silently skipped and not locked (i.e. their state remains "Inaccessible");
  *          this is necessary for a VM's removable media VM startup for which we do not want to fail.
- * @param fMediumLockWrite     Whether to associate a write lock with this medium.
+ * @param pToLockWrite         If not NULL, associate a write lock with this medium object.
  * @param fMediumLockWriteAll  Whether to associate a write lock to all other media too.
  * @param pToBeParent          Medium which will become the parent of this medium.
@@ -4278,5 +4278,5 @@
  */
 HRESULT Medium::i_createMediumLockList(bool fFailIfInaccessible,
-                                       bool fMediumLockWrite,
+                                       Medium *pToLockWrite,
                                        bool fMediumLockWriteAll,
                                        Medium *pToBeParent,
@@ -4344,6 +4344,6 @@
         }
 
-        if (pMedium == this)
-            mediumLockList.Prepend(pMedium, fMediumLockWrite);
+        if (pMedium == pToLockWrite)
+            mediumLockList.Prepend(pMedium, true);
         else
             mediumLockList.Prepend(pMedium, fMediumLockWriteAll);
@@ -4750,5 +4750,5 @@
         multilock.release();
         rc = i_createMediumLockList(true /* fFailIfInaccessible */,
-                                    true /* fMediumLockWrite */,
+                                    this /* pToLockWrite */,
                                     false /* fMediumLockWriteAll */,
                                     NULL,
@@ -5113,5 +5113,5 @@
         if (fMergeForward)
             rc = pTarget->i_createMediumLockList(true /* fFailIfInaccessible */,
-                                                 true /* fMediumLockWrite */,
+                                                 pTarget /* pToLockWrite */,
                                                  false /* fMediumLockWriteAll */,
                                                  NULL,
@@ -5119,5 +5119,5 @@
         else
             rc = i_createMediumLockList(true /* fFailIfInaccessible */,
-                                        true /* fMediumLockWrite */,
+                                        pTarget /* pToLockWrite */,
                                         false /* fMediumLockWriteAll */,
                                         NULL,
@@ -5567,5 +5567,5 @@
     MediumLockList mediumLockList;
     HRESULT rc = i_createMediumLockList(true /* fFailIfInaccessible */,
-                                        false /* fMediumLockWrite */,
+                                        NULL /* pToLockWrite */,
                                         false /* fMediumLockWriteAll */,
                                         this,
@@ -5684,5 +5684,5 @@
         MediumLockList *pSourceMediumLockList(new MediumLockList());
         rc = i_createMediumLockList(true /* fFailIfInaccessible */,
-                                    false /* fMediumLockWrite */,
+                                    NULL /* pToLockWrite */,
                                     false /* fMediumLockWriteAll */,
                                     NULL,
@@ -5774,5 +5774,5 @@
         alock.release();
         rc = i_createMediumLockList(true /* fFailIfInaccessible */,
-                                    true /* fMediumLockWrite */,
+                                    this /* pToLockWrite */,
                                     false /* fMediumLockWriteAll */,
                                     aParent,
@@ -5872,5 +5872,5 @@
         alock.release();
         rc = i_createMediumLockList(true /* fFailIfInaccessible */,
-                                    false /* fMediumLockWrite */,
+                                    NULL /* pToLockWrite */,
                                     false /* fMediumLockWriteAll */,
                                     NULL,
@@ -5887,5 +5887,5 @@
         alock.release();
         rc = aTarget->i_createMediumLockList(true /* fFailIfInaccessible */,
-                                             true /* fMediumLockWrite */,
+                                             aTarget /* pToLockWrite */,
                                              false /* fMediumLockWriteAll */,
                                              aParent,
