Index: /trunk/src/VBox/Frontends/VirtualBox/src/medium/UIMedium.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/medium/UIMedium.cpp	(revision 48271)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/medium/UIMedium.cpp	(revision 48272)
@@ -69,4 +69,5 @@
     m_fHostDrive = other.isHostDrive();
 
+    m_machineIds = other.machineIds();
     m_curStateMachineIds = other.curStateMachineIds();
 
@@ -218,6 +219,6 @@
     {
         m_curStateMachineIds.clear();
-        QVector <QString> machineIds = m_medium.GetMachineIds();
-        if (machineIds.size() > 0)
+        m_machineIds = m_medium.GetMachineIds().toList();
+        if (m_machineIds.size() > 0)
         {
             /* We assume this flag is 'true' if at least one machine present: */
@@ -228,7 +229,7 @@
             CVirtualBox vbox = vboxGlobal().virtualBox();
 
-            for (QVector <QString>::ConstIterator it = machineIds.begin(); it != machineIds.end(); ++it)
+            foreach (const QString &strMachineID, m_machineIds)
             {
-                CMachine machine = vbox.FindMachine(*it);
+                CMachine machine = vbox.FindMachine(strMachineID);
 
                 /* UIMedium object can wrap newly created CMedium object which belongs to
@@ -251,8 +252,8 @@
                 QString strSnapshots;
 
-                QVector <QString> snapIds = m_medium.GetSnapshotIds(*it);
+                QVector <QString> snapIds = m_medium.GetSnapshotIds(strMachineID);
                 for (QVector <QString>::ConstIterator jt = snapIds.begin(); jt != snapIds.end(); ++jt)
                 {
-                    if (*jt == *it)
+                    if (*jt == strMachineID)
                     {
                         /* The medium is attached to the machine in the current
@@ -515,4 +516,10 @@
 }
 
+/* static */
+QString UIMedium::nullID()
+{
+    return QUuid().toString().remove('{').remove('}');
+}
+
 /**
  * Checks if m_noDiffs is filled in and does it if not.
Index: /trunk/src/VBox/Frontends/VirtualBox/src/medium/UIMedium.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/medium/UIMedium.h	(revision 48271)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/medium/UIMedium.h	(revision 48272)
@@ -21,6 +21,7 @@
 
 /* Qt includes: */
+#include <QMap>
+#include <QLinkedList>
 #include <QPixmap>
-#include <QLinkedList>
 
 /* GUI includes: */
@@ -200,4 +201,9 @@
 
     /**
+     * Returns a vector of IDs of all machines this medium is attached to.
+     */
+    const QList <QString> &machineIds() const { return m_machineIds; }
+
+    /**
      * Returns @c true if this medium is attached to the given machine in the current state.
      */
@@ -233,4 +239,7 @@
     /** Returns @c true if this media descriptor is a null object. */
     bool isNull() const { return m_medium.isNull(); }
+
+    /* Static API: Null medium ID: */
+    static QString nullID();
 
 private:
@@ -267,4 +276,5 @@
     bool m_fHostDrive                    : 1;
 
+    QList<QString> m_machineIds;
     QList<QString> m_curStateMachineIds;
 
@@ -276,6 +286,8 @@
     static QString m_sstrRow;
 };
+Q_DECLARE_METATYPE(UIMedium);
 
 typedef QLinkedList<UIMedium> VBoxMediaList;
+typedef QMap<QString, UIMedium> UIMediumMap;
 
 #endif /* __UIMedium_h__ */
