Index: /trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsElement.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsElement.cpp	(revision 50870)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsElement.cpp	(revision 50871)
@@ -34,4 +34,5 @@
 #include "UIIconPool.h"
 #include "UIConverter.h"
+#include "VBoxGlobal.h"
 
 UIGDetailsElement::UIGDetailsElement(UIGDetailsSet *pParent, DetailsElementType type, bool fOpened)
@@ -133,4 +134,27 @@
 }
 
+void UIGDetailsElement::sltHandleAnchorClicked(const QString &strAnchor)
+{
+    /* Current anchor role: */
+    QString strRole = strAnchor.section(',', 0, 0);
+
+    /* Handle known roles: */
+    if (strRole == "#choose")
+        handleAnchorClickedRoleChoose(strAnchor.section(',', 1));
+}
+
+void UIGDetailsElement::sltMountStorageMedium()
+{
+    /* Sender action: */
+    QAction *pAction = qobject_cast<QAction*>(sender());
+    AssertMsgReturnVoid(pAction, ("This slot should only be called by menu action!\n"));
+
+    /* Current mount-target: */
+    const UIMediumTarget target = pAction->data().value<UIMediumTarget>();
+
+    /* Update current machine mount-target: */
+    vboxGlobal().updateMachineStorage(machine(), target);
+}
+
 void UIGDetailsElement::resizeEvent(QGraphicsSceneResizeEvent*)
 {
@@ -392,4 +416,5 @@
     m_pTextPane = new UIGraphicsTextPane(this, model()->paintDevice());
     connect(m_pTextPane, SIGNAL(sigGeometryChanged()), this, SLOT(sltUpdateGeometry()));
+    connect(m_pTextPane, SIGNAL(sigAnchorClicked(const QString&)), this, SLOT(sltHandleAnchorClicked(const QString&)));
 }
 
@@ -625,2 +650,20 @@
 }
 
+void UIGDetailsElement::handleAnchorClickedRoleChoose(const QString &strData)
+{
+    /* Prepare storage-menu: */
+    QMenu menu;
+
+    /* Storage-controller name: */
+    QString strControllerName = strData.section(',', 0, 0);
+    /* Storage-slot: */
+    StorageSlot storageSlot = gpConverter->fromString<StorageSlot>(strData.section(',', 1));
+
+    /* Fill storage-menu: */
+    vboxGlobal().prepareStorageMenu(menu, this, SLOT(sltMountStorageMedium()),
+                                    machine(), strControllerName, storageSlot);
+
+    /* Exec menu: */
+    menu.exec(QCursor::pos());
+}
+
Index: /trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsElement.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsElement.h	(revision 50870)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsElement.h	(revision 50871)
@@ -96,4 +96,10 @@
     void sltUpdateGeometry() { updateGeometry(); }
 
+    /** Handles children anchor clicks. */
+    void sltHandleAnchorClicked(const QString &strAnchor);
+
+    /** Handles mount storage medium requests. */
+    void sltMountStorageMedium();
+
 protected:
 
@@ -181,4 +187,7 @@
     /* Helper: Animation stuff: */
     void updateAnimationParameters();
+
+    /** Handle clicked anchor with role '#choose'. */
+    void handleAnchorClickedRoleChoose(const QString &strData);
 
     /* Variables: */
Index: /trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsElements.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsElements.cpp	(revision 50870)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsElements.cpp	(revision 50871)
@@ -507,5 +507,6 @@
                     } // hack
                     /* Append 'device slot name' with 'device type name' for CD/DVD devices only: */
-                    QString strDeviceType = attachment.GetType() == KDeviceType_DVD ?
+                    KDeviceType deviceType = attachment.GetType();
+                    QString strDeviceType = deviceType == KDeviceType_DVD ?
                                 QApplication::translate("UIGDetails", "[CD/DVD]", "details (storage)") : QString();
                     if (!strDeviceType.isNull())
@@ -513,5 +514,16 @@
                     /* Insert that attachment information into the map: */
                     if (!strAttachmentInfo.isNull())
-                        attachmentsMap.insert(attachmentSlot, strDeviceType + strAttachmentInfo);
+                    {
+                        /* Hovering anchors for dvd/floppy stuff: */
+                        if (deviceType == KDeviceType_DVD || deviceType == KDeviceType_Floppy)
+                            attachmentsMap.insert(attachmentSlot,
+                                                  QString("<a href=#choose,%1,%2>%3</a>")
+                                                          .arg(controller.GetName(),
+                                                               gpConverter->toString(attachmentSlot),
+                                                               strDeviceType + strAttachmentInfo));
+                        /* Usual stuff for hard-drives: */
+                        else
+                            attachmentsMap.insert(attachmentSlot, strDeviceType + strAttachmentInfo);
+                    }
                 }
                 /* Iterate over the sorted map: */
