Index: /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.cpp	(revision 51952)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.cpp	(revision 51953)
@@ -356,4 +356,6 @@
         /** Handles machine (un)registration. */
         void sltMachineRegistered(QString strID, bool fAdded);
+        /** Handles extra-data map acknowledging. */
+        void sltExtraDataMapAcknowledging(QString strID);
         /** Handles extra-data change. */
         void sltExtraDataChange(QString strID, QString strKey, QString strValue);
@@ -639,4 +641,12 @@
 }
 
+void UIExtraDataManagerWindow::sltExtraDataMapAcknowledging(QString strID)
+{
+    /* Update item with 'changed ID' if it is among 'known IDs': */
+    for (int iRow = 0; iRow < m_pModelSourceOfChooser->rowCount(); ++iRow)
+        if (chooserID(iRow) == strID)
+            m_pModelSourceOfChooser->itemFromIndex(chooserIndex(iRow))->setData(true, Field_Known);
+}
+
 void UIExtraDataManagerWindow::sltExtraDataChange(QString strID, QString strKey, QString strValue)
 {
@@ -705,5 +715,6 @@
     /* Add all the new items finally: */
     const QString strID = index.data(Field_ID).toString();
-    AssertReturnVoid(gEDataManager->contains(strID));
+    if (!gEDataManager->contains(strID))
+        gEDataManager->hotloadMachineExtraDataMap(strID);
     const ExtraDataMap data = gEDataManager->map(strID);
     foreach (const QString &strKey, data.keys())
@@ -1828,4 +1839,32 @@
 #endif /* DEBUG */
 
+void UIExtraDataManager::hotloadMachineExtraDataMap(const QString &strID)
+{
+    /* Make sure it is valid ID: */
+    AssertMsgReturnVoid(!strID.isNull() && strID != GlobalID,
+                        ("Invalid VM ID = {%s}\n", strID.toAscii().constData()));
+    /* Which is not loaded yet: */
+    AssertReturnVoid(!m_data.contains(strID));
+
+    /* Search for corresponding machine: */
+    CVirtualBox vbox = vboxGlobal().virtualBox();
+    CMachine machine = vbox.FindMachine(strID);
+    AssertReturnVoid(vbox.isOk() && !machine.isNull());
+
+    /* Make sure at least empty map is created: */
+    m_data[strID] = ExtraDataMap();
+
+    /* Do not handle inaccessible machine: */
+    if (!machine.GetAccessible())
+        return;
+
+    /* Load machine extra-data map: */
+    foreach (const QString &strKey, machine.GetExtraDataKeys())
+        m_data[strID][strKey] = machine.GetExtraData(strKey);
+
+    /* Notifies about extra-data map acknowledged: */
+    emit sigExtraDataMapAcknowledging(strID);
+}
+
 QString UIExtraDataManager::extraDataString(const QString &strKey, const QString &strID /* = GlobalID */)
 {
@@ -3199,4 +3238,6 @@
         m_pWindow = new UIExtraDataManagerWindow;
         /* Configure window connections: */
+        connect(this, SIGNAL(sigExtraDataMapAcknowledging(QString)),
+                m_pWindow, SLOT(sltExtraDataMapAcknowledging(QString)));
         connect(this, SIGNAL(sigExtraDataChange(QString, QString, QString)),
                 m_pWindow, SLOT(sltExtraDataChange(QString, QString, QString)));
@@ -3206,29 +3247,4 @@
 }
 #endif /* DEBUG */
-
-void UIExtraDataManager::hotloadMachineExtraDataMap(const QString &strID)
-{
-    /* Make sure it is valid ID: */
-    AssertMsgReturnVoid(!strID.isNull() && strID != GlobalID,
-                        ("Invalid VM ID = {%s}\n", strID.toAscii().constData()));
-    /* Which is not loaded yet: */
-    AssertReturnVoid(!m_data.contains(strID));
-
-    /* Search for corresponding machine: */
-    CVirtualBox vbox = vboxGlobal().virtualBox();
-    CMachine machine = vbox.FindMachine(strID);
-    AssertReturnVoid(vbox.isOk() && !machine.isNull());
-
-    /* Make sure at least empty map is created: */
-    m_data[strID] = ExtraDataMap();
-
-    /* Do not handle inaccessible machine: */
-    if (!machine.GetAccessible())
-        return;
-
-    /* Load machine extra-data map: */
-    foreach (const QString &strKey, machine.GetExtraDataKeys())
-        m_data[strID][strKey] = machine.GetExtraData(strKey);
-}
 
 bool UIExtraDataManager::isFeatureAllowed(const QString &strKey, const QString &strID /* = GlobalID */)
Index: /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.h	(revision 51952)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.h	(revision 51953)
@@ -54,4 +54,7 @@
 signals:
 
+    /** Notifies about extra-data map acknowledging. */
+    void sigExtraDataMapAcknowledging(QString strID);
+
     /** Notifies about extra-data change. */
     void sigExtraDataChange(QString strID, QString strKey, QString strValue);
@@ -96,4 +99,7 @@
         /** Returns read-only extra-data map for passed @a strID. */
         const ExtraDataMap map(const QString &strID) const { return m_data.value(strID); }
+
+        /** Hot-load machine extra-data map. */
+        void hotloadMachineExtraDataMap(const QString &strID);
 
         /** Returns extra-data value corresponding to passed @a strKey as QString.
@@ -470,7 +476,4 @@
 #endif /* DEBUG */
 
-    /** Hot-load machine extra-data map. */
-    void hotloadMachineExtraDataMap(const QString &strID);
-
     /** Determines whether feature corresponding to passed @a strKey is allowed.
       * If valid @a strID is set => applies to machine extra-data, otherwise => to global one. */
