Index: trunk/src/VBox/Frontends/VirtualBox/ui/VBoxDiskImageManagerDlg.ui
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/ui/VBoxDiskImageManagerDlg.ui	(revision 5242)
+++ trunk/src/VBox/Frontends/VirtualBox/ui/VBoxDiskImageManagerDlg.ui	(revision 5247)
@@ -599,4 +599,6 @@
     <function specifier="static" access="private" returnType="QString">getDVDImageUsage( const QUuid &amp; id )</function>
     <function specifier="static" access="private" returnType="QString">getFloppyImageUsage( const QUuid &amp; id )</function>
+    <function specifier="static" access="private">sourceSnapshotsCD( const QUuid &amp; aImageId, const CSnapshot &amp; aSnapshot, QString &amp; aUsage )</function>
+    <function specifier="static" access="private">sourceSnapshotsFD( const QUuid &amp; aImageId, const CSnapshot &amp; aSnapshot, QString &amp; aUsage )</function>
     <function access="private" returnType="bool">checkImage( DiskImageItem* item )</function>
     <function access="private">releaseDisk( QUuid machineId, QUuid itemId, VBoxDefs::DiskType diskType )</function>
Index: trunk/src/VBox/Frontends/VirtualBox/ui/VBoxDiskImageManagerDlg.ui.h
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/ui/VBoxDiskImageManagerDlg.ui.h	(revision 5242)
+++ trunk/src/VBox/Frontends/VirtualBox/ui/VBoxDiskImageManagerDlg.ui.h	(revision 5247)
@@ -874,5 +874,11 @@
         if (usage)
             usage += ", ";
-        usage += vbox.GetMachine (QUuid (*it)).GetName();
+        CMachine machine = vbox.GetMachine (QUuid (*it));
+        usage += machine.GetName();
+
+        QString snapshots;
+        sourceSnapshotsCD (aId, machine.GetSnapshot (QUuid()), snapshots);
+        if (!snapshots.isEmpty())
+            usage += QString (" (%1)").arg (snapshots);
     }
 
@@ -888,5 +894,11 @@
             else
                 usage += "[";
-            usage += vbox.GetMachine (QUuid (*it)).GetName() + "]";
+            CMachine machine = vbox.GetMachine (QUuid (*it));
+            usage += machine.GetName() + "]";
+
+            QString snapshots;
+            sourceSnapshotsCD (aId, machine.GetSnapshot (QUuid()), snapshots);
+            if (!snapshots.isEmpty())
+                usage += QString (" (%1)").arg (snapshots);
         }
     }
@@ -912,5 +924,11 @@
         if (usage)
             usage += ", ";
-        usage += vbox.GetMachine (QUuid (*it)).GetName();
+        CMachine machine = vbox.GetMachine (QUuid (*it));
+        usage += machine.GetName();
+
+        QString snapshots;
+        sourceSnapshotsFD (aId, machine.GetSnapshot (QUuid()), snapshots);
+        if (!snapshots.isEmpty())
+            usage += QString (" (%1)").arg (snapshots);
     }
 
@@ -926,9 +944,56 @@
             else
                 usage += "[";
-            usage += vbox.GetMachine (QUuid (*it)).GetName() + "]";
+            CMachine machine = vbox.GetMachine (QUuid (*it));
+            usage += machine.GetName() + "]";
+
+            QString snapshots;
+            sourceSnapshotsFD (aId, machine.GetSnapshot (QUuid()), snapshots);
+            if (!snapshots.isEmpty())
+                usage += QString (" (%1)").arg (snapshots);
         }
     }
 
     return usage;
+}
+
+
+void VBoxDiskImageManagerDlg::sourceSnapshotsCD (const QUuid &aImageId,
+                                                 const CSnapshot &aSnapshot,
+                                                 QString &aUsage)
+{
+    if (aSnapshot.isNull())
+        return;
+
+    if (!aSnapshot.GetMachine().GetDVDDrive().GetImage().isNull() &&
+        aSnapshot.GetMachine().GetDVDDrive().GetImage().GetId() == aImageId)
+    {
+        if (aUsage)
+            aUsage += ", ";
+        aUsage += aSnapshot.GetName();
+    }
+
+    CSnapshotEnumerator en = aSnapshot.GetChildren().Enumerate();
+    while (en.HasMore())
+        sourceSnapshotsCD (aImageId, en.GetNext(), aUsage);
+}
+
+void VBoxDiskImageManagerDlg::sourceSnapshotsFD (const QUuid &aImageId,
+                                                 const CSnapshot &aSnapshot,
+                                                 QString &aUsage)
+{
+    if (aSnapshot.isNull())
+        return;
+
+    if (!aSnapshot.GetMachine().GetFloppyDrive().GetImage().isNull() &&
+        aSnapshot.GetMachine().GetFloppyDrive().GetImage().GetId() == aImageId)
+    {
+        if (aUsage)
+            aUsage += ", ";
+        aUsage += aSnapshot.GetName();
+    }
+
+    CSnapshotEnumerator en = aSnapshot.GetChildren().Enumerate();
+    while (en.HasMore())
+        sourceSnapshotsFD (aImageId, en.GetNext(), aUsage);
 }
 
@@ -1745,7 +1810,8 @@
                           !item->firstChild() && !item->getPath().isNull();
     bool releaseEnabled = item && !item->getUsage().isNull() &&
-                          checkImage (item) &&
-                          !item->parent() && !item->firstChild() &&
-                          item->getSnapshotName().isNull();
+        item->getUsage().find (QRegExp ("\\([\\s\\S]+\\)")) == -1 &&
+        checkImage (item) &&
+        !item->parent() && !item->firstChild() &&
+        item->getSnapshotName().isNull();
     bool newEnabled     = notInEnum &&
                           getCurrentListView() == hdsView ? true : false;
