Index: /trunk/src/VBox/Frontends/VirtualBox/src/medium/UIMediumManager.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/medium/UIMediumManager.cpp	(revision 50367)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/medium/UIMediumManager.cpp	(revision 50368)
@@ -326,6 +326,6 @@
     repopulateTreeWidgets();
 
-    /* Update current tab: */
-    sltHandleCurrentTabChanged();
+    /* Re-fetch all current medium-items: */
+    refetchCurrentMediumItems();
 }
 
@@ -359,6 +359,6 @@
     m_pActionRefresh->setEnabled(true);
 
-    /* Update current tab: */
-    sltHandleCurrentTabChanged();
+    /* Re-fetch all current medium-items: */
+    refetchCurrentMediumItems();
 }
 
@@ -515,7 +515,6 @@
     {
         /* This may happen if medium was already released by a third party,
-         * update the details and silently return. */
-        sltHandleCurrentItemChanged(pMediumItem);
-        return;
+         * re-fetch currently chosen medium-item and silently return. */
+        return refetchCurrentChosenMediumItem();
     }
 
@@ -551,28 +550,16 @@
         pTree->setFocus();
 
-    /* Make sure current medium-item is selected: */
-    sltHandleCurrentItemChanged(pTree->currentItem());
-}
-
-void UIMediumManager::sltHandleCurrentItemChanged(QTreeWidgetItem *pItem)
-{
-    /* If item set => make sure it's of valid type: */
-    UIMediumItem *pMediumItem = toMediumItem(pItem);
-    AssertReturnVoid(!pItem || pMediumItem);
-
-    /* If medium-item set: */
-    if (pMediumItem)
-    {
-        /* Set the file for the proxy icon: */
-        setFileForProxyIcon(pMediumItem->location());
-        /* Make sure current medium-item visible: */
-        pMediumItem->treeWidget()->scrollToItem(pMediumItem, QAbstractItemView::EnsureVisible);
-    }
-
-    /* Update actions: */
-    updateActions();
-
-    /* Update current information-panes: */
-    updateInformationPanes(currentMediumType());
+    /* Re-fetch currently chosen medium-item: */
+    refetchCurrentChosenMediumItem();
+}
+
+void UIMediumManager::sltHandleCurrentItemChanged()
+{
+    /* Determine tree-widget sender: */
+    QTreeWidget *pTreeWidget = qobject_cast<QTreeWidget*>(sender());
+    AssertMsgReturnVoid(pTreeWidget, ("This slot should be called by tree-widget only!\n"));
+
+    /* Re-fetch current medium-item of required type: */
+    refetchCurrentMediumItem(mediumType(pTreeWidget));
 }
 
@@ -866,5 +853,5 @@
     prepareTreeWidgetFD();
 
-    /* Focus current tree: */
+    /* Focus current tree-widget: */
     currentTreeWidget()->setFocus();
 }
@@ -883,5 +870,5 @@
         mTwHD->setSortingEnabled(true);
         connect(mTwHD, SIGNAL(currentItemChanged(QTreeWidgetItem*, QTreeWidgetItem*)),
-                this, SLOT(sltHandleCurrentItemChanged(QTreeWidgetItem*)));
+                this, SLOT(sltHandleCurrentItemChanged()));
         connect(mTwHD, SIGNAL(itemDoubleClicked(QTreeWidgetItem*, int)),
                 this, SLOT(sltHandleDoubleClick()));
@@ -907,5 +894,5 @@
         mTwCD->setSortingEnabled(true);
         connect(mTwCD, SIGNAL(currentItemChanged(QTreeWidgetItem*, QTreeWidgetItem*)),
-                this, SLOT(sltHandleCurrentItemChanged(QTreeWidgetItem*)));
+                this, SLOT(sltHandleCurrentItemChanged()));
         connect(mTwCD, SIGNAL(itemDoubleClicked(QTreeWidgetItem*, int)),
                 this, SLOT(sltHandleDoubleClick()));
@@ -931,5 +918,5 @@
         mTwFD->setSortingEnabled(true);
         connect(mTwFD, SIGNAL(currentItemChanged(QTreeWidgetItem*, QTreeWidgetItem*)),
-                this, SLOT(sltHandleCurrentItemChanged(QTreeWidgetItem*)));
+                this, SLOT(sltHandleCurrentItemChanged()));
         connect(mTwFD, SIGNAL(itemDoubleClicked(QTreeWidgetItem*, int)),
                 this, SLOT(sltHandleDoubleClick()));
@@ -1020,4 +1007,37 @@
         if (QTreeWidgetItem *pItem = pTreeWidgetFD->topLevelItem(0))
             setCurrentItem(pTreeWidgetFD, pItem);
+}
+
+void UIMediumManager::refetchCurrentMediumItem(UIMediumType type)
+{
+    /* Get corresponding medium-item: */
+    UIMediumItem *pMediumItem = mediumItem(type);
+
+    /* If medium-item set: */
+    if (pMediumItem)
+    {
+        /* Set the file for the proxy icon: */
+        setFileForProxyIcon(pMediumItem->location());
+        /* Make sure current medium-item visible: */
+        treeWidget(type)->scrollToItem(pMediumItem, QAbstractItemView::EnsureVisible);
+    }
+
+    /* Update actions: */
+    updateActions();
+
+    /* Update corresponding information-panes: */
+    updateInformationPanes(type);
+}
+
+void UIMediumManager::refetchCurrentChosenMediumItem()
+{
+    refetchCurrentMediumItem(currentMediumType());
+}
+
+void UIMediumManager::refetchCurrentMediumItems()
+{
+    refetchCurrentMediumItem(UIMediumType_HardDisk);
+    refetchCurrentMediumItem(UIMediumType_DVD);
+    refetchCurrentMediumItem(UIMediumType_Floppy);
 }
 
@@ -1388,19 +1408,22 @@
 
     /* If medium-enumeration is not currently in progress or
-     * if there is no 'current' medium-item yet selected
-     * we have to choose newly added medium-item as 'current' one: */
+     * if there is no current medium-item yet selected
+     * we have to choose newly added medium-item as current one: */
     if (   !vboxGlobal().isMediumEnumerationInProgress()
         || !pTreeWidget->currentItem())
         setCurrentItem(pTreeWidget, pMediumItem);
 
-    /* Update linked stuff if that was current medium-item created: */
-    if (pMediumItem == currentMediumItem())
-        sltHandleCurrentItemChanged(pMediumItem);
+    /* Re-fetch medium-item if it is current one created: */
+    if (pMediumItem == mediumItem(type))
+        refetchCurrentMediumItem(type);
 }
 
 void UIMediumManager::updateMediumItem(const UIMedium &medium)
 {
+    /* Get medium type: */
+    UIMediumType type = medium.type();
+
     /* Search for existing medium-item: */
-    UIMediumItem *pMediumItem = searchItem(treeWidget(medium.type()), CheckIfSuitableByID(medium.id()));
+    UIMediumItem *pMediumItem = searchItem(treeWidget(type), CheckIfSuitableByID(medium.id()));
 
     /* Create medium-item (if it was not found): */
@@ -1415,7 +1438,7 @@
     updateTabIcons(pMediumItem, ItemAction_Updated);
 
-    /* Update linked stuff if that was current medium-item updated: */
-    if (pMediumItem == currentMediumItem())
-        sltHandleCurrentItemChanged(pMediumItem);
+    /* Re-fetch medium-item if it is current one updated: */
+    if (pMediumItem == mediumItem(type))
+        refetchCurrentMediumItem(type);
 }
 
@@ -1448,6 +1471,6 @@
     LogRel2(("UIMediumManager: Medium-item with ID={%s} deleted.\n", strMediumID.toAscii().constData()));
 
-    /* If there is no 'current' medium-item now selected
-     * we have to choose first-available medium-item as 'current' one: */
+    /* If there is no current medium-item now selected
+     * we have to choose first-available medium-item as current one: */
     if (!pTreeWidget->currentItem())
         setCurrentItem(pTreeWidget, pTreeWidget->topLevelItem(0));
@@ -1596,4 +1619,16 @@
 }
 
+UIMediumType UIMediumManager::mediumType(QTreeWidget *pTreeWidget) const
+{
+    /* Hard-drive tree-widget: */
+    if (pTreeWidget == mTwHD) return UIMediumType_HardDisk;
+    /* Optical-image tree-widget: */
+    if (pTreeWidget == mTwCD) return UIMediumType_DVD;
+    /* Floppy-image tree-widget: */
+    if (pTreeWidget == mTwFD) return UIMediumType_Floppy;
+    /* Invalid by default: */
+    AssertFailedReturn(UIMediumType_Invalid);
+}
+
 UIMediumType UIMediumManager::currentMediumType() const
 {
@@ -1649,5 +1684,5 @@
     AssertPtrReturnVoid(pTreeWidget);
 
-    /* Make passed item 'current' for passed tree-widget: */
+    /* Make passed item current for passed tree-widget: */
     pTreeWidget->setCurrentItem(pItem);
 
@@ -1660,6 +1695,6 @@
     }
 
-    /* Update linked stuff: */
-    sltHandleCurrentItemChanged(pItem);
+    /* Re-fetch currently chosen medium-item: */
+    refetchCurrentChosenMediumItem();
 }
 
Index: /trunk/src/VBox/Frontends/VirtualBox/src/medium/UIMediumManager.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/medium/UIMediumManager.h	(revision 50367)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/medium/UIMediumManager.h	(revision 50368)
@@ -87,5 +87,5 @@
     /* Handlers: Navigation stuff: */
     void sltHandleCurrentTabChanged();
-    void sltHandleCurrentItemChanged(QTreeWidgetItem *pItem);
+    void sltHandleCurrentItemChanged();
     void sltHandleDoubleClick();
     void sltHandleContextMenuCall(const QPoint &position);
@@ -119,4 +119,11 @@
     void repopulateTreeWidgets();
 
+    /** Updates details according latest changes in current medium-item of predefined @a type. */
+    void refetchCurrentMediumItem(UIMediumType type);
+    /** Updates details according latest changes in current medium-item of chosen type. */
+    void refetchCurrentChosenMediumItem();
+    /** Updates details according latest changes in all current medium-items. */
+    void refetchCurrentMediumItems();
+
     /** Update actions according currently chosen medium-item. */
     void updateActions();
@@ -154,4 +161,7 @@
     bool releaseFloppyDiskFrom(const UIMedium &medium, CMachine &machine);
 
+    /** Determines medium type for passed @a pTreeWidget. */
+    UIMediumType mediumType(QTreeWidget *pTreeWidget) const;
+
     /** Returns current medium type. */
     UIMediumType currentMediumType() const;
