Index: /trunk/src/VBox/Frontends/VirtualBox/Makefile.kmk
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/Makefile.kmk	(revision 68174)
+++ /trunk/src/VBox/Frontends/VirtualBox/Makefile.kmk	(revision 68175)
@@ -380,5 +380,5 @@
 	src/selector/UISnapshotDetailsWidget.h \
 	src/selector/UISnapshotPane.h \
-	src/selector/UIToolsPane.h \
+	src/selector/UIToolsPaneMachine.h \
 	src/selector/UIToolsToolbar.h \
 	src/selector/graphics/chooser/UIGChooser.h \
@@ -697,5 +697,5 @@
 	src/selector/UISnapshotDetailsWidget.cpp \
 	src/selector/UISnapshotPane.cpp \
-	src/selector/UIToolsPane.cpp \
+	src/selector/UIToolsPaneMachine.cpp \
 	src/selector/UIToolsToolbar.cpp \
 	src/selector/graphics/chooser/UIGChooser.cpp \
Index: /trunk/src/VBox/Frontends/VirtualBox/VirtualBox2.qrc
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/VirtualBox2.qrc	(revision 68174)
+++ /trunk/src/VBox/Frontends/VirtualBox/VirtualBox2.qrc	(revision 68175)
@@ -186,4 +186,5 @@
         <file alias="statusbar_settings_16px.png">images/statusbar_settings_16px.png</file>
         <file alias="statusbar_settings_disabled_16px.png">images/statusbar_settings_disabled_16px.png</file>
+        <file alias="tools_machine_32px.png">images/tools_machine_32px.png</file>
         <file alias="tpixel.png">images/tpixel.png</file>
         <file alias="usb_16px.png">images/usb_16px.png</file>
Index: /trunk/src/VBox/Frontends/VirtualBox/VirtualBox2_hidpi.qrc
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/VirtualBox2_hidpi.qrc	(revision 68174)
+++ /trunk/src/VBox/Frontends/VirtualBox/VirtualBox2_hidpi.qrc	(revision 68175)
@@ -195,4 +195,5 @@
         <file alias="statusbar_settings_16px_hidpi.png">images/hidpi/statusbar_settings_16px_hidpi.png</file>
         <file alias="statusbar_settings_disabled_16px_hidpi.png">images/hidpi/statusbar_settings_disabled_16px_hidpi.png</file>
+        <file alias="tools_machine_32px_hidpi.png">images/hidpi/tools_machine_32px_hidpi.png</file>
         <file alias="usb_16px_hidpi.png">images/hidpi/usb_16px_hidpi.png</file>
         <file alias="usb_24px_hidpi.png">images/hidpi/usb_24px_hidpi.png</file>
Index: /trunk/src/VBox/Frontends/VirtualBox/src/selector/UISelectorWindow.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/selector/UISelectorWindow.cpp	(revision 68174)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/selector/UISelectorWindow.cpp	(revision 68175)
@@ -22,56 +22,48 @@
 /* Qt includes: */
 # include <QMenuBar>
+# include <QResizeEvent>
+# include <QStandardPaths>
 # include <QStatusBar>
-# include <QResizeEvent>
-# include <QStackedWidget>
 # include <QToolButton>
 # include <QTimer>
-# if QT_VERSION >= 0x050000
-#  include <QStandardPaths>
-# else /* QT_VERSION < 0x050000 */
-#  include <QDesktopServices>
-# endif /* QT_VERSION < 0x050000 */
 
 /* GUI includes: */
+# include "QIFileDialog.h"
 # include "QISplitter.h"
-# include "QIFileDialog.h"
+# include "UIActionPoolSelector.h"
 # include "UIBar.h"
+# include "UIDesktopServices.h"
+# include "UIExtraDataManager.h"
+# include "UIGChooser.h"
+# include "UIGlobalSettingsExtension.h"
+# include "UIHostNetworkManager.h"
+# include "UIMedium.h"
+# include "UIMediumManager.h"
+# include "UIMessageCenter.h"
+# include "UIModalWindowManager.h"
+# include "UISelectorWindow.h"
+# include "UISettingsDialogSpecific.h"
+# include "UISpacerWidgets.h"
+# include "UIToolBar.h"
+# include "UIVMLogViewer.h"
+# include "UIVMItem.h"
+# include "UIToolsPaneMachine.h"
+# include "UIToolsToolbar.h"
+# include "UIVirtualBoxEventHandler.h"
+# include "UIWizardCloneVM.h"
+# include "UIWizardExportApp.h"
+# include "UIWizardImportApp.h"
 # ifdef VBOX_GUI_WITH_NETWORK_MANAGER
 #  include "UINetworkManager.h"
 #  include "UINetworkManagerIndicator.h"
-#  include "UIUpdateManager.h"
-#  include "UIDownloaderUserManual.h"
-#  include "UIDownloaderExtensionPack.h"
 # endif /* VBOX_GUI_WITH_NETWORK_MANAGER */
-# include "UIIconPool.h"
-# include "UIWizardCloneVM.h"
-# include "UIWizardExportApp.h"
-# include "UIWizardImportApp.h"
-# include "UIDesktopPane.h"
-# include "UIVirtualBoxEventHandler.h"
-# include "UIHostNetworkManager.h"
-# include "UIMediumManager.h"
-# include "UIMedium.h"
-# include "UIMessageCenter.h"
-# include "UISelectorWindow.h"
-# include "UISettingsDialogSpecific.h"
-# include "UISpacerWidgets.h"
-# include "UISpecialControls.h"
-# include "UIToolBar.h"
-# include "UIVMLogViewer.h"
-# include "UIDesktopServices.h"
-# include "UIGlobalSettingsExtension.h"
-# include "UIActionPoolSelector.h"
-# include "UIGChooser.h"
-# include "UIGDetails.h"
-# include "UIVMItem.h"
-# include "UIExtraDataManager.h"
-# include "UIDesktopWidgetWatchdog.h"
-# include "UIModalWindowManager.h"
 # ifdef VBOX_WS_MAC
+#  include "UIImageTools.h"
+#  include "UIWindowMenuManager.h"
 #  include "VBoxUtils.h"
-#  include "UIWindowMenuManager.h"
-#  include "UIImageTools.h"
 # endif /* VBOX_WS_MAC */
+# ifdef VBOX_WS_X11
+#  include "UIDesktopWidgetWatchdog.h"
+# endif
 
 /* Other VBox stuff: */
@@ -122,12 +114,9 @@
 #ifndef VBOX_WS_MAC
     , m_pBar(0)
-#endif /* !VBOX_WS_MAC */
+#endif
     , m_pToolBar(0)
-    , m_pSegmentedButton(0)
-    , m_pContainerDetails(0)
+    , m_pToolbarTools(0)
     , m_pPaneChooser(0)
-    , m_pPaneDetails(0)
-    , m_pPaneDesktop(0)
-    , m_pPaneTools(0)
+    , m_pPaneToolsMachine(0)
     , m_pGroupMenuAction(0)
     , m_pMachineMenuAction(0)
@@ -239,23 +228,27 @@
 
     /* Update Details-pane: */
-    if (fUpdateDetails)
-        m_pPaneDetails->setItems(currentItems());
+    if (   fUpdateDetails
+        && m_pPaneToolsMachine->isToolOpened(ToolTypeMachine_Details))
+        m_pPaneToolsMachine->setItems(currentItems());
 
     /* If current item exists & accessible: */
     if (pItem && pItem->accessible())
     {
-        /* Make sure at least Details-pane raised: */
-        if (m_pContainerDetails->currentWidget() == m_pPaneDesktop)
-            sltPerformSegmentedButtonSwitch(SegmentType_Details);
-
-        /* Refresh Tools-pane if requested: */
-        if (fUpdateTools)
-            m_pPaneTools->setMachine(pItem->machine());
+        /* Make sure Machine Tools-pane raised: */
+        if (m_pPaneToolsMachine->isToolOpened(ToolTypeMachine_Details))
+            m_pPaneToolsMachine->openTool(ToolTypeMachine_Details);
+        else
+        if (m_pPaneToolsMachine->isToolOpened(ToolTypeMachine_Snapshots))
+            m_pPaneToolsMachine->openTool(ToolTypeMachine_Snapshots);
+
+        /* Refresh Machine Tools-pane if requested: */
+        if (   fUpdateTools
+            && m_pPaneToolsMachine->isToolOpened(ToolTypeMachine_Snapshots))
+            m_pPaneToolsMachine->setMachine(pItem->machine());
     }
     else
     {
         /* Make sure Desktop-pane raised: */
-        if (m_pContainerDetails->currentWidget() != m_pPaneDesktop)
-            sltPerformSegmentedButtonSwitch(SegmentType_None);
+        m_pPaneToolsMachine->openTool(ToolTypeMachine_Desktop);
 
         /* Note that the machine becomes inaccessible (or if the last VM gets
@@ -264,10 +257,10 @@
         {
             /* The VM is inaccessible: */
-            m_pPaneDesktop->updateDetailsError(UIMessageCenter::formatErrorInfo(pItem->accessError()));
+            m_pPaneToolsMachine->setDetailsError(UIMessageCenter::formatErrorInfo(pItem->accessError()));
         }
         else
         {
             /* Default HTML support in Qt is terrible so just try to get something really simple: */
-            m_pPaneDesktop->updateDetailsText(
+            m_pPaneToolsMachine->setDetailsText(
                 tr("<h3>Welcome to VirtualBox!</h3>"
                    "<p>The left part of this window is  "
@@ -287,5 +280,6 @@
 
         /* Refresh Tools-pane in any case: */
-        m_pPaneTools->setMachine(CMachine());
+        if (m_pPaneToolsMachine->isToolOpened(ToolTypeMachine_Snapshots))
+            m_pPaneToolsMachine->setMachine(CMachine());
     }
 }
@@ -301,6 +295,5 @@
 
     /* Make sure MM window is not opened: */
-    if (   m_pManagerVirtualMedia
-        || m_pPaneTools->isToolOpened(ToolType_VirtualMediaManager))
+    if (m_pManagerVirtualMedia)
         return;
 
@@ -407,12 +400,4 @@
 void UISelectorWindow::sltOpenVirtualMediumManagerWindow()
 {
-    /* First check if instance of widget opened embedded: */
-    if (m_pPaneTools->isToolOpened(ToolType_VirtualMediaManager))
-    {
-        sltPerformSegmentedButtonSwitch(SegmentType_Tools);
-        m_pPaneTools->setCurrentTool(ToolType_VirtualMediaManager);
-        return;
-    }
-
     /* Create instance if not yet created: */
     if (!m_pManagerVirtualMedia)
@@ -441,12 +426,4 @@
 void UISelectorWindow::sltOpenHostNetworkManagerWindow()
 {
-    /* First check if instance of widget opened embedded: */
-    if (m_pPaneTools->isToolOpened(ToolType_HostNetworkManager))
-    {
-        sltPerformSegmentedButtonSwitch(SegmentType_Tools);
-        m_pPaneTools->setCurrentTool(ToolType_HostNetworkManager);
-        return;
-    }
-
     /* Create instance if not yet created: */
     if (!m_pManagerHostNetwork)
@@ -1048,55 +1025,25 @@
 }
 
-void UISelectorWindow::sltHandleSegmentedButtonSwitch(int iSegment)
-{
-    /* Get current item: */
-    const UIVMItem *pItem = currentItem();
-
-    /* If current item exists & accessible: */
-    if (pItem && pItem->accessible())
-    {
-        /* Raise the required widget: */
-        switch (iSegment)
-        {
-            case SegmentType_Details: m_pContainerDetails->setCurrentWidget(m_pPaneDetails); break;
-            case SegmentType_Tools:   m_pContainerDetails->setCurrentWidget(m_pPaneTools); break;
-            default:                  break;
-        }
-    }
-    else
-    {
-        /* Raise the Desktop-pane with welcome text or error details: */
-        m_pContainerDetails->setCurrentWidget(m_pPaneDesktop);
-    }
-
-#ifdef VBOX_WS_MAC
-    // WORKAROUND:
-    // Qt 5.6.x has weird bug:
-    // When some cocoa widget being focused for a first time
-    // previously focused Qt widget being erased unless
-    // someone calls for it's update directly or
-    // indirectly (like with mouse hovering).
-    // Doing that directly for Chooser pane.
-    m_pPaneChooser->update();
-#endif
-}
-
-void UISelectorWindow::sltPerformSegmentedButtonSwitch(int iSegment)
-{
-    /* Perform silent segmented-button switch: */
-    if (iSegment >= 0 && iSegment < m_pSegmentedButton->count())
-        m_pSegmentedButton->setSelected(iSegment);
-    /* Manually handle that switch as well: */
-    sltHandleSegmentedButtonSwitch(iSegment);
-}
-
-void UISelectorWindow::sltHandleToolsPaneToolOpened(ToolType enmType)
-{
-    switch (enmType)
-    {
-        case ToolType_VirtualMediaManager: sltCloseVirtualMediumManagerWindow(); break;
-        case ToolType_HostNetworkManager:  sltCloseHostNetworkManagerWindow(); break;
-        default:                           break;
-    }
+void UISelectorWindow::sltHandleToolOpenedMachine(ToolTypeMachine enmType)
+{
+    /* Open corresponding tool: */
+    m_pPaneToolsMachine->openTool(enmType);
+    /* If that was 'Details' => pass there current items: */
+    if (   enmType == ToolTypeMachine_Details
+        && m_pPaneToolsMachine->isToolOpened(ToolTypeMachine_Details))
+        m_pPaneToolsMachine->setItems(currentItems());
+    /* If that was 'Snapshot' => pass there current or null machine: */
+    if (   enmType == ToolTypeMachine_Snapshots
+        && m_pPaneToolsMachine->isToolOpened(ToolTypeMachine_Snapshots))
+    {
+        UIVMItem *pItem = currentItem();
+        m_pPaneToolsMachine->setMachine(pItem ? pItem->machine() : CMachine());
+    }
+}
+
+void UISelectorWindow::sltHandleToolClosedMachine(ToolTypeMachine enmType)
+{
+    /* Close corresponding tool: */
+    m_pPaneToolsMachine->closeTool(enmType);
 }
 
@@ -1125,8 +1072,19 @@
     setWindowTitle(strTitle);
 
-    /* Translate segmented-button: */
-    // TODO: Move that NLS from UIDesktopPane to UISelectorWindow context.
-    m_pSegmentedButton->setTitle(SegmentType_Details, QApplication::translate("UIDesktopPane", "&Details"));
-    m_pSegmentedButton->setTitle(SegmentType_Tools, QApplication::translate("UIDesktopPane", "&Tools"));
+    /* Translate Machine Tools welcome screen: */
+    m_pPaneToolsMachine->setDetailsText(
+        tr("<h3>Welcome to VirtualBox!</h3>"
+           "<p>The left part of this window is a list of all virtual machines "
+           "and virtual machine groups on your computer. "
+           "<img src=:/welcome.png align=right/></p>"
+           "<p>The right part of this window represents a set of tools "
+           "you have opened for the currently chosen machine. "
+           "For more tools check the corresponding menu at the right side "
+           "of the main tool bar located at the top of the window.</p>"
+           "<p>You can press the <b>%1</b> key to get instant help, "
+           "or visit "
+           "<a href=https://www.virtualbox.org>www.virtualbox.org</a> "
+           "for the latest information and news.</p>")
+           .arg(QKeySequence(QKeySequence::HelpContents).toString(QKeySequence::NativeText)));
 
     /* Make sure details and snapshot panes are updated: */
@@ -1275,4 +1233,7 @@
     prepareConnections();
 
+    /* Make sure at least 'Details' Machine tool is opened at startup: */
+    actionPool()->action(UIActionIndexST_M_Tools_M_Machine_Details)->trigger();
+
     /* Load settings: */
     loadSettings();
@@ -1295,7 +1256,4 @@
     qApp->installEventFilter(this);
 #endif /* VBOX_WS_MAC */
-
-    /* Switch segmented-button to Details-pane: */
-    sltPerformSegmentedButtonSwitchToDetails();
 
     /* Make sure current Chooser-pane index fetched: */
@@ -1755,11 +1713,25 @@
         m_pToolBar->addWidget(new UIHorizontalSpacerWidget);
 
-        /* Create/add segmented-button: */
-        m_pSegmentedButton = new UITexturedSegmentedButton(this, 2);
-        m_pSegmentedButton->setIcon(SegmentType_Details, UIIconPool::iconSet(":/edataman_16px.png",
-                                                                             ":/edataman_16px.png"));
-        m_pSegmentedButton->setIcon(SegmentType_Tools, UIIconPool::iconSet(":/guesttools_16px.png",
-                                                                           ":/guesttools_disabled_16px.png"));
-        m_pToolBar->addWidget(m_pSegmentedButton);
+        /* Create Tools toolbar: */
+        m_pToolbarTools = new UIToolsToolbar(actionPool());
+        if (m_pToolbarTools)
+        {
+            /* Configure toolbar: */
+            m_pToolbarTools->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::MinimumExpanding);
+
+            /* Create exclusive action-group: */
+            QActionGroup *pActionGroupTools = new QActionGroup(m_pToolbarTools);
+            AssertPtrReturnVoid(pActionGroupTools);
+            {
+                /* Configure action-group: */
+                pActionGroupTools->setExclusive(true);
+
+                /* Add 'Tools' actions into action-group: */
+                pActionGroupTools->addAction(actionPool()->action(UIActionIndexST_M_Tools_T_Machine));
+            }
+
+            /* Add into toolbar: */
+            m_pToolBar->addWidget(m_pToolbarTools);
+        }
 
         /* Create/add horizontal spacer widget of fixed size for the beta label: */
@@ -1770,5 +1742,5 @@
                 pSpace->setFixedSize(28, 1);
             else
-                pSpace->setFixedSize(10, 1);
+                pSpace->setFixedSize(1, 1);
             m_pToolBar->addWidget(pSpace);
         }
@@ -1840,39 +1812,15 @@
                 }
 
-                /* Create container: */
-                m_pContainerDetails = new QStackedWidget;
-                AssertPtrReturnVoid(m_pContainerDetails);
+                /* Prepare Machine Tools-pane: */
+                m_pPaneToolsMachine = new UIToolsPaneMachine(actionPool());
+                AssertPtrReturnVoid(m_pPaneToolsMachine);
                 {
-                    /* Prepare Details-pane: */
-                    m_pPaneDetails = new UIGDetails(this);
-                    AssertPtrReturnVoid(m_pPaneDetails);
-                    {
-                        /* Add into container: */
-                        m_pContainerDetails->addWidget(m_pPaneDetails);
-                    }
-
-                    /* Prepare Desktop-pane: */
-                    m_pPaneDesktop = new UIDesktopPane(actionPool()->action(UIActionIndexST_M_Group_S_Refresh));
-                    AssertPtrReturnVoid(m_pPaneDesktop);
-                    {
-                        /* Add into container: */
-                        m_pContainerDetails->addWidget(m_pPaneDesktop);
-                    }
-
-                    /* Prepare Tools-pane: */
-                    m_pPaneTools = new UIToolsPane;
-                    AssertPtrReturnVoid(m_pPaneTools);
-                    {
-                        /* Add into container: */
-                        m_pContainerDetails->addWidget(m_pPaneTools);
-                    }
-
                     /* Add into splitter: */
-                    m_pSplitter->addWidget(m_pContainerDetails);
+                    m_pSplitter->addWidget(m_pPaneToolsMachine);
                 }
 
                 /* Adjust splitter colors according to main widgets it splits: */
                 m_pSplitter->configureColors(m_pPaneChooser->palette().color(QPalette::Active, QPalette::Window),
-                                             m_pPaneDetails->palette().color(QPalette::Active, QPalette::Window));
+                                             m_pPaneToolsMachine->palette().color(QPalette::Active, QPalette::Window));
                 /* Set the initial distribution. The right site is bigger. */
                 m_pSplitter->setStretchFactor(0, 2);
@@ -1965,7 +1913,7 @@
     /* Graphics VM chooser connections: */
     connect(m_pPaneChooser, SIGNAL(sigSelectionChanged()), this, SLOT(sltHandleChooserPaneIndexChange()));
-    connect(m_pPaneChooser, SIGNAL(sigSlidingStarted()), m_pPaneDetails, SIGNAL(sigSlidingStarted()));
-    connect(m_pPaneChooser, SIGNAL(sigToggleStarted()), m_pPaneDetails, SIGNAL(sigToggleStarted()));
-    connect(m_pPaneChooser, SIGNAL(sigToggleFinished()), m_pPaneDetails, SIGNAL(sigToggleFinished()));
+    connect(m_pPaneChooser, SIGNAL(sigSlidingStarted()), m_pPaneToolsMachine, SIGNAL(sigSlidingStarted()));
+    connect(m_pPaneChooser, SIGNAL(sigToggleStarted()), m_pPaneToolsMachine, SIGNAL(sigToggleStarted()));
+    connect(m_pPaneChooser, SIGNAL(sigToggleFinished()), m_pPaneToolsMachine, SIGNAL(sigToggleFinished()));
     connect(m_pPaneChooser, SIGNAL(sigGroupSavingStateChanged()), this, SLOT(sltHandleGroupSavingProgressChange()));
 
@@ -1977,12 +1925,11 @@
     ::darwinRegisterForUnifiedToolbarContextMenuEvents(this);
 #endif /* VBOX_WS_MAC */
-
-    /* Segmented-button connections: */
-    connect(m_pSegmentedButton, SIGNAL(clicked(int)), this, SLOT(sltHandleSegmentedButtonSwitch(int)));
+    connect(m_pToolbarTools, &UIToolsToolbar::sigToolOpenedMachine, this, &UISelectorWindow::sltHandleToolOpenedMachine);
+    connect(m_pToolbarTools, &UIToolsToolbar::sigToolClosedMachine, this, &UISelectorWindow::sltHandleToolClosedMachine);
 
     /* VM desktop connections: */
-    connect(m_pPaneDetails, SIGNAL(sigLinkClicked(const QString&, const QString&, const QString&)),
+    connect(m_pPaneToolsMachine, SIGNAL(sigLinkClicked(const QString&, const QString&, const QString&)),
             this, SLOT(sltOpenMachineSettingsDialog(const QString&, const QString&, const QString&)));
-    connect(m_pPaneTools, &UIToolsPane::sigToolOpened, this, &UISelectorWindow::sltHandleToolsPaneToolOpened);
+
 
     /* Global event handlers: */
Index: /trunk/src/VBox/Frontends/VirtualBox/src/selector/UISelectorWindow.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/selector/UISelectorWindow.h	(revision 68174)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/selector/UISelectorWindow.h	(revision 68175)
@@ -25,22 +25,19 @@
 #include "QIMainWindow.h"
 #include "QIWithRetranslateUI.h"
-#include "UIToolsPane.h"
+#include "UIToolsPaneMachine.h"
 #include "VBoxGlobal.h"
 
 /* Forward declarations: */
 class QMenu;
-class QStackedWidget;
 class QIManagerDialog;
 class QISplitter;
 class UIAction;
 class UIActionPool;
-class UIDesktopPane;
 class UIGChooser;
-class UIGDetails;
 #ifndef VBOX_WS_MAC
 class UIMainBar;
 #endif
-class UITexturedSegmentedButton;
 class UIToolBar;
+class UIToolsToolbar;
 class UIVMItem;
 
@@ -51,12 +48,4 @@
 {
     Q_OBJECT;
-
-    /** Segmented-button segment types. */
-    enum SegmentType
-    {
-        SegmentType_Details,
-        SegmentType_Tools,
-        SegmentType_None,
-    };
 
 public:
@@ -194,17 +183,11 @@
     /** @} */
 
-    /** @name Segmented-button stuff.
-      * @{ */
-        /** Handles segmented-button switch. */
-        void sltHandleSegmentedButtonSwitch(int iSegment);
-        /** Performs segmented-button switch. */
-        void sltPerformSegmentedButtonSwitch(int iSegment);
-        /** Performs segmented-button switch to details pane. */
-        void sltPerformSegmentedButtonSwitchToDetails() { sltPerformSegmentedButtonSwitch(SegmentType_Details); }
-    /** @} */
-
     /** @name Tools-pane stuff.
       * @{ */
-        void sltHandleToolsPaneToolOpened(ToolType enmType);
+        /** Handles rquest to open Machine tool of passed @a enmType. */
+        void sltHandleToolOpenedMachine(ToolTypeMachine enmType);
+
+        /** Handles rquest to close Machine tool of passed @a enmType. */
+        void sltHandleToolClosedMachine(ToolTypeMachine enmType);
     /** @} */
 
@@ -333,23 +316,15 @@
 #ifndef VBOX_WS_MAC
     /** Holds the main bar instance. */
-    UIMainBar *m_pBar;
-#endif /* !VBOX_WS_MAC */
+    UIMainBar      *m_pBar;
+#endif
     /** Holds the main toolbar instance. */
-    UIToolBar *m_pToolBar;
-
-    /** Holds the segmented-button instance. */
-    UITexturedSegmentedButton *m_pSegmentedButton;
-
-    /** Holds the Details-container instance. */
-    QStackedWidget *m_pContainerDetails;
+    UIToolBar      *m_pToolBar;
+    /** Holds the Tools-toolbar instance. */
+    UIToolsToolbar *m_pToolbarTools;
 
     /** Holds the Chooser-pane instance. */
-    UIGChooser *m_pPaneChooser;
-    /** Holds the Details-pane instance. */
-    UIGDetails *m_pPaneDetails;
-    /** Holds the Desktop-pane instance. */
-    UIDesktopPane *m_pPaneDesktop;
+    UIGChooser         *m_pPaneChooser;
     /** Holds the Tools-pane instance. */
-    UIToolsPane *m_pPaneTools;
+    UIToolsPaneMachine *m_pPaneToolsMachine;
 
     /** Holds the list of Group menu actions. */
Index: unk/src/VBox/Frontends/VirtualBox/src/selector/UIToolsPane.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/selector/UIToolsPane.cpp	(revision 68174)
+++ 	(revision )
@@ -1,390 +1,0 @@
-/* $Id$ */
-/** @file
- * VBox Qt GUI - UIToolsPane class implementation.
- */
-
-/*
- * Copyright (C) 2017 Oracle Corporation
- *
- * This file is part of VirtualBox Open Source Edition (OSE), as
- * available from http://www.virtualbox.org. This file is free software;
- * you can redistribute it and/or modify it under the terms of the GNU
- * General Public License (GPL) as published by the Free Software
- * Foundation, in version 2 as it comes in the "COPYING" file of the
- * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
- * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
- */
-
-#ifdef VBOX_WITH_PRECOMPILED_HEADERS
-# include <precomp.h>
-#else  /* !VBOX_WITH_PRECOMPILED_HEADERS */
-
-/* Qt includes: */
-# include <QStackedLayout>
-# include <QTabBar>
-
-/* GUI includes */
-# include "QIToolButton.h"
-# include "UIHostNetworkManager.h"
-# include "UIIconPool.h"
-# include "UIMediumManager.h"
-# include "UIMenuToolBar.h"
-# include "UISnapshotPane.h"
-# include "UIToolsPane.h"
-
-/* Other VBox includes: */
-# include <iprt/assert.h>
-
-#endif /* !VBOX_WITH_PRECOMPILED_HEADERS */
-
-
-UIToolsPane::UIToolsPane(QWidget *pParent /* = 0 */)
-    : QIWithRetranslateUI<QWidget>(pParent)
-    , m_pLayoutMain(0)
-    , m_pStackedLayout(0)
-    , m_pPaneSnapshots(0)
-    , m_pLayoutControls(0)
-    , m_pTabBar(0)
-    , m_pMenuToolbar(0)
-    , m_pMenu(0)
-{
-    /* Prepare: */
-    prepare();
-}
-
-UIToolsPane::~UIToolsPane()
-{
-    /* Cleanup: */
-    cleanup();
-}
-
-bool UIToolsPane::isToolOpened(ToolType enmType) const
-{
-    for (int iTabIndex = 0; iTabIndex < m_pTabBar->count(); ++iTabIndex)
-        if (m_pTabBar->tabData(iTabIndex).value<ToolType>() == enmType)
-            return true;
-    return false;
-}
-
-void UIToolsPane::setCurrentTool(ToolType enmType)
-{
-    activateTabBarTab(enmType, true);
-}
-
-void UIToolsPane::setMachine(const CMachine &comMachine)
-{
-    /* Update snapshots pane: */
-    AssertPtrReturnVoid(m_pPaneSnapshots);
-    m_pPaneSnapshots->setMachine(comMachine);
-}
-
-void UIToolsPane::retranslateUi()
-{
-    /* Translate menu: */
-    m_pMenu->setTitle(tr("More Tools"));
-    m_pMenu->setToolTip(tr("Holds a list of tools"));
-
-    /* Translate actions: */
-    m_actions[ToolType_SnapshotManager]->setText(tr("Snapshot Manager"));
-    m_actions[ToolType_VirtualMediaManager]->setText(tr("Virtual Media Manager"));
-    m_actions[ToolType_HostNetworkManager]->setText(tr("Host Network Manager"));
-
-    /* Translate tab-bar: */
-    for (int iTabIndex = 0; iTabIndex < m_pTabBar->count(); ++iTabIndex)
-    {
-        const ToolType enmType = m_pTabBar->tabData(iTabIndex).value<ToolType>();
-        m_pTabBar->setTabText(iTabIndex, m_actions.value(enmType)->text());
-    }
-}
-
-void UIToolsPane::sltHandleMenuToolbarTrigger()
-{
-    /* Get the sender: */
-    QAction *pAction = sender() ? qobject_cast<QAction*>(sender()) : 0;
-    AssertPtrReturnVoid(pAction);
-
-    /* Acquire sender's type: */
-    const ToolType enmType = pAction->property("ToolType").value<ToolType>();
-    AssertReturnVoid(enmType != ToolType_Invalid);
-
-    /* Activate corresponding tab: */
-    activateTabBarTab(enmType, true);
-}
-
-void UIToolsPane::sltHandleTabBarTabMoved(int iFrom, int iTo)
-{
-    /* Swap stack-widget pages as well: */
-    QWidget *pWidget = m_pStackedLayout->widget(iFrom);
-    m_pStackedLayout->removeWidget(pWidget);
-    m_pStackedLayout->insertWidget(iTo, pWidget);
-}
-
-void UIToolsPane::sltHandleTabBarCurrentChange(int iIndex)
-{
-    /* Activate corresponding indexes: */
-    m_pStackedLayout->setCurrentIndex(iIndex);
-}
-
-void UIToolsPane::sltHandleTabBarButtonClick()
-{
-    /* Get the sender: */
-    QIToolButton *pButton = sender() ? qobject_cast<QIToolButton*>(sender()) : 0;
-    AssertPtrReturnVoid(pButton);
-
-    /* Acquire sender's type: */
-    const ToolType enmType = pButton->property("ToolType").value<ToolType>();
-    AssertReturnVoid(enmType != ToolType_Invalid);
-
-    /* Search for the tab with such type: */
-    int iActualTabIndex = -1;
-    for (int iTabIndex = 0; iTabIndex < m_pTabBar->count(); ++iTabIndex)
-        if (m_pTabBar->tabData(iTabIndex).value<ToolType>() == enmType)
-            iActualTabIndex = iTabIndex;
-    AssertReturnVoid(iActualTabIndex != -1);
-
-    /* Delete the tab and corresponding widget: */
-    m_pTabBar->removeTab(iActualTabIndex);
-    QWidget *pWidget = m_pStackedLayout->widget(iActualTabIndex);
-    m_pStackedLayout->removeWidget(pWidget);
-    delete pWidget;
-
-    /* Make sure action is unchecked: */
-    m_actions[enmType]->blockSignals(true);
-    m_actions[enmType]->setChecked(false);
-    m_actions[enmType]->blockSignals(false);
-}
-
-void UIToolsPane::prepare()
-{
-    /* Create main layout: */
-    m_pLayoutMain = new QVBoxLayout(this);
-    AssertPtrReturnVoid(m_pLayoutMain);
-    {
-        /* Configure layout: */
-        m_pLayoutMain->setSpacing(0);
-        m_pLayoutMain->setContentsMargins(3, 4, 5, 0);
-
-        /* Prepare stacked-layout: */
-        prepareStackedLayout();
-
-        /* Create controls layout: */
-        m_pLayoutControls = new QHBoxLayout;
-        AssertPtrReturnVoid(m_pLayoutControls);
-        {
-            /* Configure layout: */
-            m_pLayoutControls->setSpacing(0);
-            m_pLayoutControls->setContentsMargins(0, 0, 0, 0);
-
-            /* Prepare tab-bar: */
-            prepareTabBar();
-
-            /* Add stretch: */
-            m_pLayoutControls->addStretch();
-
-            /* Prepare menu-toolbar: */
-            prepareMenuToolbar();
-
-            /* Add and activate snapshots pane: */
-            activateTabBarTab(ToolType_SnapshotManager, false);
-
-            /* Add into layout: */
-            m_pLayoutMain->addLayout(m_pLayoutControls);
-        }
-    }
-
-    /* Apply language settings: */
-    retranslateUi();
-}
-
-void UIToolsPane::prepareStackedLayout()
-{
-    /* Create stacked-layout: */
-    m_pStackedLayout = new QStackedLayout;
-    AssertPtrReturnVoid(m_pStackedLayout);
-    {
-        /* Add into layout: */
-        m_pLayoutMain->addLayout(m_pStackedLayout);
-    }
-}
-
-void UIToolsPane::prepareTabBar()
-{
-    /* Create tab-bar: */
-    m_pTabBar = new QTabBar;
-    AssertPtrReturnVoid(m_pTabBar);
-    {
-        /* Configure tab-bar: */
-        const int iIconMetric = QApplication::style()->pixelMetric(QStyle::PM_SmallIconSize) * 1.375;
-        m_pTabBar->setIconSize(QSize(iIconMetric, iIconMetric));
-        m_pTabBar->setMovable(true);
-#ifdef VBOX_WS_MAC
-        /* Snapshots pane tab looks quite alone under macOS: */
-        m_pTabBar->setAutoHide(true);
-#endif
-        m_pTabBar->setDrawBase(false);
-        m_pTabBar->setExpanding(false);
-        m_pTabBar->setShape(QTabBar::RoundedSouth);
-        m_pTabBar->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
-        connect(m_pTabBar, &QTabBar::tabMoved, this, &UIToolsPane::sltHandleTabBarTabMoved);
-        connect(m_pTabBar, &QTabBar::currentChanged, this, &UIToolsPane::sltHandleTabBarCurrentChange);
-
-        /* Add into layout: */
-        m_pLayoutControls->addWidget(m_pTabBar);
-    }
-}
-
-void UIToolsPane::prepareMenuToolbar()
-{
-    /* Create menu-toolbar: */
-    m_pMenuToolbar = new UIMenuToolBar;
-    AssertPtrReturnVoid(m_pMenuToolbar);
-    {
-        /* Configure menu-toolbar: */
-        const int iIconMetric = QApplication::style()->pixelMetric(QStyle::PM_SmallIconSize);
-        m_pMenuToolbar->setIconSize(QSize(iIconMetric, iIconMetric));
-        m_pMenuToolbar->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
-        m_pMenuToolbar->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
-        m_pMenuToolbar->setAlignmentType(UIMenuToolBar::AlignmentType_BottomRight);
-
-        /* Prepare menu: */
-        prepareMenu();
-
-        /* Add into layout: */
-        m_pLayoutControls->addWidget(m_pMenuToolbar);
-    }
-}
-
-void UIToolsPane::prepareMenu()
-{
-    /* Create menu: */
-    m_pMenu = new QMenu(m_pMenuToolbar);
-    AssertPtrReturnVoid(m_pMenu);
-    {
-        /* Configure menus: */
-        m_pMenu->setIcon(UIIconPool::iconSet(":/guesttools_16px.png"));
-
-        /* Create SnapShot manager action: */
-        m_actions[ToolType_SnapshotManager] = m_pMenu->addAction(UIIconPool::iconSetFull(":/snapshot_manager_22px.png",
-                                                                                          ":/snapshot_manager_16px.png"),
-                                                                  QString(), this, &UIToolsPane::sltHandleMenuToolbarTrigger);
-        {
-            m_actions[ToolType_SnapshotManager]->setCheckable(true);
-            m_actions[ToolType_SnapshotManager]->
-                setProperty("ToolType", QVariant::fromValue(ToolType_SnapshotManager));
-        }
-
-        /* Create Virtual Media manager action: */
-        m_actions[ToolType_VirtualMediaManager] = m_pMenu->addAction(UIIconPool::iconSetFull(":/diskimage_22px.png",
-                                                                                              ":/diskimage_16px.png"),
-                                                                      QString(), this, &UIToolsPane::sltHandleMenuToolbarTrigger);
-        {
-            m_actions[ToolType_VirtualMediaManager]->setCheckable(true);
-            m_actions[ToolType_VirtualMediaManager]->
-                setProperty("ToolType", QVariant::fromValue(ToolType_VirtualMediaManager));
-        }
-
-        /* Create Host Network manager action: */
-        m_actions[ToolType_HostNetworkManager] = m_pMenu->addAction(UIIconPool::iconSetFull(":/host_iface_manager_22px.png",
-                                                                                             ":/host_iface_manager_16px.png"),
-                                                                     QString(), this, &UIToolsPane::sltHandleMenuToolbarTrigger);
-        {
-            m_actions[ToolType_HostNetworkManager]->setCheckable(true);
-            m_actions[ToolType_HostNetworkManager]->
-                setProperty("ToolType", QVariant::fromValue(ToolType_HostNetworkManager));
-        }
-
-        /* Add as tool-button into tool-bar: */
-        m_pMenuToolbar->setMenuAction(m_pMenu->menuAction());
-    }
-}
-
-void UIToolsPane::cleanup()
-{
-    /* Remove all tab prematurelly: */
-    while (m_pTabBar->count())
-    {
-        m_pTabBar->removeTab(0);
-        QWidget *pWidget = m_pStackedLayout->widget(0);
-        m_pStackedLayout->removeWidget(pWidget);
-        delete pWidget;
-    }
-}
-
-void UIToolsPane::activateTabBarTab(ToolType enmType, bool fCloseable)
-{
-    /* Search for a tab with such type: */
-    int iActualTabIndex = -1;
-    for (int iTabIndex = 0; iTabIndex < m_pTabBar->count(); ++iTabIndex)
-        if (m_pTabBar->tabData(iTabIndex).value<ToolType>() == enmType)
-            iActualTabIndex = iTabIndex;
-
-    /* If tab with such type doesn't exist: */
-    m_pTabBar->blockSignals(true);
-    if (iActualTabIndex == -1)
-    {
-        /* Append stack-widget with corresponding page: */
-        switch (enmType)
-        {
-            case ToolType_SnapshotManager:
-                m_pPaneSnapshots = new UISnapshotPane;
-                m_pStackedLayout->addWidget(m_pPaneSnapshots);
-                break;
-            case ToolType_VirtualMediaManager:
-                m_pStackedLayout->addWidget(new UIMediumManagerWidget(EmbedTo_Stack));
-                break;
-            case ToolType_HostNetworkManager:
-                m_pStackedLayout->addWidget(new UIHostNetworkManagerWidget(EmbedTo_Stack));
-                break;
-            default:
-                AssertFailedReturnVoid();
-        }
-
-        /* Append tab-bar with corresponding tab: */
-        iActualTabIndex = m_pTabBar->addTab(m_actions.value(enmType)->icon(), m_actions.value(enmType)->text());
-        {
-            /* Create close button if requested: */
-            if (fCloseable)
-            {
-                QIToolButton *pButtonClose = new QIToolButton;
-                AssertPtrReturnVoid(pButtonClose);
-                {
-                    /* Configure button: */
-#ifdef VBOX_WS_MAC
-                    /* Close buttons should be a bit smaller on macOS: */
-                    pButtonClose->setIconSize(QSize(12, 12));
-#endif
-                    pButtonClose->setIcon(UIIconPool::iconSet(":/close_16px.png"));
-                    pButtonClose->setProperty("ToolType", QVariant::fromValue(enmType));
-                    connect(pButtonClose, &QIToolButton::clicked, this, &UIToolsPane::sltHandleTabBarButtonClick);
-                    /* Add into tab-bar: */
-                    m_pTabBar->setTabButton(iActualTabIndex, QTabBar::RightSide, pButtonClose);
-                }
-            }
-#ifdef VBOX_WS_MAC
-            /* Create placeholder of the same height if on macOS: */
-            else
-            {
-                QWidget *pWidget = new QWidget;
-                pWidget->setFixedSize(1, 26);
-                m_pTabBar->setTabButton(iActualTabIndex, QTabBar::RightSide, pWidget);
-            }
-#endif
-            /* Store the data: */
-            m_pTabBar->setTabData(iActualTabIndex, QVariant::fromValue(enmType));
-        }
-
-        /* Notify listeners: */
-        emit sigToolOpened(enmType);
-    }
-
-    /* Activate corresponding indexes: */
-    m_pStackedLayout->setCurrentIndex(iActualTabIndex);
-    m_pTabBar->setCurrentIndex(iActualTabIndex);
-    m_pTabBar->blockSignals(false);
-
-    /* Make sure action is checked: */
-    m_actions[enmType]->blockSignals(true);
-    m_actions[enmType]->setChecked(true);
-    m_actions[enmType]->blockSignals(false);
-}
-
Index: unk/src/VBox/Frontends/VirtualBox/src/selector/UIToolsPane.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/selector/UIToolsPane.h	(revision 68174)
+++ 	(revision )
@@ -1,131 +1,0 @@
-/* $Id$ */
-/** @file
- * VBox Qt GUI - UIToolsPane class declaration.
- */
-
-/*
- * Copyright (C) 2017 Oracle Corporation
- *
- * This file is part of VirtualBox Open Source Edition (OSE), as
- * available from http://www.virtualbox.org. This file is free software;
- * you can redistribute it and/or modify it under the terms of the GNU
- * General Public License (GPL) as published by the Free Software
- * Foundation, in version 2 as it comes in the "COPYING" file of the
- * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
- * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
- */
-
-#ifndef ___UIToolsPane_h___
-#define ___UIToolsPane_h___
-
-/* Qt includes: */
-#include <QWidget>
-
-/* GUI includes: */
-#include "QIWithRetranslateUI.h"
-
-/* Forward declarations: */
-class QAction;
-class QHBoxLayout;
-class QMenu;
-class QStackedLayout;
-class QTabBar;
-class QVBoxLayout;
-class UIMenuToolBar;
-class UISnapshotPane;
-class CMachine;
-
-
-/** Tool types. */
-enum ToolType
-{
-    ToolType_Invalid,
-    ToolType_SnapshotManager,
-    ToolType_VirtualMediaManager,
-    ToolType_HostNetworkManager,
-};
-
-/* Make sure QVariant can eat ToolType: */
-Q_DECLARE_METATYPE(ToolType);
-
-
-/** QWidget subclass representing container for tool panes. */
-class UIToolsPane : public QIWithRetranslateUI<QWidget>
-{
-    Q_OBJECT;
-
-signals:
-
-    /** Notifies listeners about tool of particular @a enmType is opened. */
-    void sigToolOpened(ToolType enmType);
-
-public:
-
-    /** Constructs tools pane passing @a pParent to the base-class. */
-    UIToolsPane(QWidget *pParent = 0);
-    /** Destructs tools pane. */
-    virtual ~UIToolsPane() /* override */;
-
-    /** Returns whether tool of particular @a enmType is opened. */
-    bool isToolOpened(ToolType enmType) const;
-    /** Activates tool of particular @a enmType, creates new one if necessary. */
-    void setCurrentTool(ToolType enmType);
-
-    /** Defines the @a comMachine object. */
-    void setMachine(const CMachine &comMachine);
-
-protected:
-
-    /** Handles translation event. */
-    virtual void retranslateUi() /* override */;
-
-private slots:
-
-    /** Handles menu-toolbar trigger. */
-    void sltHandleMenuToolbarTrigger();
-
-    /** Handles Tools tab-bar tab movement. */
-    void sltHandleTabBarTabMoved(int iFrom, int iTo);
-    /** Handles Tools tab-bar current tab change. */
-    void sltHandleTabBarCurrentChange(int iIndex);
-    /** Handles Tools tab-bar button click. */
-    void sltHandleTabBarButtonClick();
-
-private:
-
-    /** Prepares all. */
-    void prepare();
-    /** Prepares stacked-layout. */
-    void prepareStackedLayout();
-    /** Prepares tab-bar. */
-    void prepareTabBar();
-    /** Prepares menu-toolbar. */
-    void prepareMenuToolbar();
-    /** Prepares menu. */
-    void prepareMenu();
-    /** Cleanups all. */
-    void cleanup();
-
-    /** Activates corresponding tab-bar tab, adds new if necessary. */
-    void activateTabBarTab(ToolType enmType, bool fCloseable);
-
-    /** Holds the main layout isntance. */
-    QVBoxLayout               *m_pLayoutMain;
-    /** Holds the stacked-layout instance. */
-    QStackedLayout            *m_pStackedLayout;
-    /** Holds the snapshot pane. */
-    UISnapshotPane            *m_pPaneSnapshots;
-    /** Holds the controls layout instance. */
-    QHBoxLayout               *m_pLayoutControls;
-    /** Holds the tab-bar instance. */
-    QTabBar                   *m_pTabBar;
-    /** Holds the menu-toolbar instance. */
-    UIMenuToolBar             *m_pMenuToolbar;
-    /** Holds the menu instance. */
-    QMenu                     *m_pMenu;
-    /** Holds the menu action instances. */
-    QMap<ToolType, QAction*>  m_actions;
-};
-
-#endif /* !___UIToolsPane_h___ */
-
Index: /trunk/src/VBox/Frontends/VirtualBox/src/selector/UIToolsPaneMachine.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/selector/UIToolsPaneMachine.cpp	(revision 68175)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/selector/UIToolsPaneMachine.cpp	(revision 68175)
@@ -0,0 +1,219 @@
+/* $Id$ */
+/** @file
+ * VBox Qt GUI - UIToolsPaneMachine class implementation.
+ */
+
+/*
+ * Copyright (C) 2017 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+#ifdef VBOX_WITH_PRECOMPILED_HEADERS
+# include <precomp.h>
+#else  /* !VBOX_WITH_PRECOMPILED_HEADERS */
+
+/* Qt includes: */
+# include <QStackedLayout>
+
+/* GUI includes */
+# include "UIActionPoolSelector.h"
+# include "UIDesktopPane.h"
+# include "UIGDetails.h"
+# include "UISnapshotPane.h"
+# include "UIToolsPaneMachine.h"
+
+/* Other VBox includes: */
+# include <iprt/assert.h>
+
+#endif /* !VBOX_WITH_PRECOMPILED_HEADERS */
+
+
+UIToolsPaneMachine::UIToolsPaneMachine(UIActionPool *pActionPool, QWidget *pParent /* = 0 */)
+    : QWidget(pParent)
+    , m_pActionPool(pActionPool)
+    , m_pLayout(0)
+    , m_pPaneDesktop(0)
+    , m_pPaneDetails(0)
+    , m_pPaneSnapshots(0)
+{
+    /* Prepare: */
+    prepare();
+}
+
+UIToolsPaneMachine::~UIToolsPaneMachine()
+{
+    /* Cleanup: */
+    cleanup();
+}
+
+bool UIToolsPaneMachine::isToolOpened(ToolTypeMachine enmType) const
+{
+    /* Search through the stacked widgets: */
+    for (int iIndex = 0; iIndex < m_pLayout->count(); ++iIndex)
+        if (m_pLayout->widget(iIndex)->property("ToolType").value<ToolTypeMachine>() == enmType)
+            return true;
+    return false;
+}
+
+void UIToolsPaneMachine::openTool(ToolTypeMachine enmType)
+{
+    /* Search through the stacked widgets: */
+    int iActualIndex = -1;
+    for (int iIndex = 0; iIndex < m_pLayout->count(); ++iIndex)
+        if (m_pLayout->widget(iIndex)->property("ToolType").value<ToolTypeMachine>() == enmType)
+            iActualIndex = iIndex;
+
+    /* If widget with such type exists: */
+    if (iActualIndex != -1)
+    {
+        /* Activate corresponding index: */
+        m_pLayout->setCurrentIndex(iActualIndex);
+    }
+    /* Otherwise: */
+    else
+    {
+        /* Create, remember, append corresponding stacked widget: */
+        switch (enmType)
+        {
+            case ToolTypeMachine_Desktop:
+            {
+                /* Create Desktop pane: */
+                m_pPaneDesktop = new UIDesktopPane(m_pActionPool->action(UIActionIndexST_M_Group_S_Refresh));
+                AssertPtrReturnVoid(m_pPaneDesktop);
+                {
+                    /* Configure pane: */
+                    m_pPaneDesktop->setProperty("ToolType", QVariant::fromValue(ToolTypeMachine_Desktop));
+
+                    /* Add into layout: */
+                    m_pLayout->addWidget(m_pPaneDesktop);
+                    m_pLayout->setCurrentWidget(m_pPaneDesktop);
+                }
+                break;
+            }
+            case ToolTypeMachine_Details:
+            {
+                /* Create Details pane: */
+                m_pPaneDetails = new UIGDetails;
+                AssertPtrReturnVoid(m_pPaneDetails);
+                {
+                    /* Configure pane: */
+                    m_pPaneDetails->setProperty("ToolType", QVariant::fromValue(ToolTypeMachine_Details));
+                    connect(this, &UIToolsPaneMachine::sigSlidingStarted, m_pPaneDetails, &UIGDetails::sigSlidingStarted);
+                    connect(this, &UIToolsPaneMachine::sigToggleStarted,  m_pPaneDetails, &UIGDetails::sigToggleStarted);
+                    connect(this, &UIToolsPaneMachine::sigToggleFinished, m_pPaneDetails, &UIGDetails::sigToggleFinished);
+                    connect(m_pPaneDetails, &UIGDetails::sigLinkClicked,  this, &UIToolsPaneMachine::sigLinkClicked);
+
+                    /* Add into layout: */
+                    m_pLayout->addWidget(m_pPaneDetails);
+                    m_pLayout->setCurrentWidget(m_pPaneDetails);
+                }
+                break;
+            }
+            case ToolTypeMachine_Snapshots:
+            {
+                /* Create Snapshots pane: */
+                m_pPaneSnapshots = new UISnapshotPane;
+                AssertPtrReturnVoid(m_pPaneSnapshots);
+                {
+                    /* Configure pane: */
+                    m_pPaneSnapshots->setProperty("ToolType", QVariant::fromValue(ToolTypeMachine_Snapshots));
+
+                    /* Add into layout: */
+                    m_pLayout->addWidget(m_pPaneSnapshots);
+                    m_pLayout->setCurrentWidget(m_pPaneSnapshots);
+                }
+                break;
+            }
+            default:
+                AssertFailedReturnVoid();
+        }
+    }
+}
+
+void UIToolsPaneMachine::closeTool(ToolTypeMachine enmType)
+{
+    /* Search through the stacked widgets: */
+    int iActualIndex = -1;
+    for (int iIndex = 0; iIndex < m_pLayout->count(); ++iIndex)
+        if (m_pLayout->widget(iIndex)->property("ToolType").value<ToolTypeMachine>() == enmType)
+            iActualIndex = iIndex;
+
+    /* If widget with such type doesn't exist: */
+    if (iActualIndex != -1)
+    {
+        /* Forget corresponding widget: */
+        switch (enmType)
+        {
+            case ToolTypeMachine_Desktop:   m_pPaneDesktop = 0; break;
+            case ToolTypeMachine_Details:   m_pPaneDetails = 0; break;
+            case ToolTypeMachine_Snapshots: m_pPaneSnapshots = 0; break;
+            default: break;
+        }
+        /* Delete corresponding widget: */
+        QWidget *pWidget = m_pLayout->widget(iActualIndex);
+        m_pLayout->removeWidget(pWidget);
+        delete pWidget;
+    }
+}
+
+void UIToolsPaneMachine::setDetailsText(const QString &strText)
+{
+    /* Update desktop pane: */
+    AssertPtrReturnVoid(m_pPaneDesktop);
+    m_pPaneDesktop->updateDetailsText(strText);
+}
+
+void UIToolsPaneMachine::setDetailsError(const QString &strError)
+{
+    /* Update desktop pane: */
+    AssertPtrReturnVoid(m_pPaneDesktop);
+    m_pPaneDesktop->updateDetailsError(strError);
+}
+
+void UIToolsPaneMachine::setItems(const QList<UIVMItem*> &items)
+{
+    /* Update details pane: */
+    AssertPtrReturnVoid(m_pPaneDetails);
+    m_pPaneDetails->setItems(items);
+}
+
+void UIToolsPaneMachine::setMachine(const CMachine &comMachine)
+{
+    /* Update snapshots pane: */
+    AssertPtrReturnVoid(m_pPaneSnapshots);
+    m_pPaneSnapshots->setMachine(comMachine);
+}
+
+void UIToolsPaneMachine::prepare()
+{
+    /* Create stacked-layout: */
+    m_pLayout = new QStackedLayout(this);
+    AssertPtrReturnVoid(m_pLayout);
+    {
+        /* Configure layout: */
+        m_pLayout->setSpacing(0);
+        m_pLayout->setContentsMargins(3, 4, 5, 0);
+    }
+
+    /* Create desktop pane: */
+    openTool(ToolTypeMachine_Desktop);
+}
+
+void UIToolsPaneMachine::cleanup()
+{
+    /* Remove all widgets prematurelly: */
+    while (m_pLayout->count())
+    {
+        QWidget *pWidget = m_pLayout->widget(0);
+        m_pLayout->removeWidget(pWidget);
+        delete pWidget;
+    }
+}
+
Index: /trunk/src/VBox/Frontends/VirtualBox/src/selector/UIToolsPaneMachine.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/selector/UIToolsPaneMachine.h	(revision 68175)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/selector/UIToolsPaneMachine.h	(revision 68175)
@@ -0,0 +1,113 @@
+/* $Id$ */
+/** @file
+ * VBox Qt GUI - UIToolsPaneMachine class declaration.
+ */
+
+/*
+ * Copyright (C) 2017 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+#ifndef ___UIToolsPaneMachine_h___
+#define ___UIToolsPaneMachine_h___
+
+/* Qt includes: */
+#include <QWidget>
+
+/* Forward declarations: */
+class QHBoxLayout;
+class QStackedLayout;
+class QVBoxLayout;
+class UIActionPool;
+class UIDesktopPane;
+class UIGDetails;
+class UISnapshotPane;
+class UIVMItem;
+class CMachine;
+
+
+/** Machine tool types. */
+enum ToolTypeMachine
+{
+    ToolTypeMachine_Invalid,
+    ToolTypeMachine_Desktop,
+    ToolTypeMachine_Details,
+    ToolTypeMachine_Snapshots,
+};
+
+/* Make sure QVariant can eat ToolTypeMachine: */
+Q_DECLARE_METATYPE(ToolTypeMachine);
+
+
+/** QWidget subclass representing container for tool panes. */
+class UIToolsPaneMachine : public QWidget
+{
+    Q_OBJECT;
+
+signals:
+
+    /** Redirects signal from UISelectorWindow to UIGDetails. */
+    void sigSlidingStarted();
+    /** Redirects signal from UISelectorWindow to UIGDetails. */
+    void sigToggleStarted();
+    /** Redirects signal from UISelectorWindow to UIGDetails. */
+    void sigToggleFinished();
+    /** Redirects signal from UIGDetails to UISelectorWindow. */
+    void sigLinkClicked(const QString &strCategory, const QString &strControl, const QString &strId);
+
+public:
+
+    /** Constructs tools pane passing @a pParent to the base-class. */
+    UIToolsPaneMachine(UIActionPool *pActionPool, QWidget *pParent = 0);
+    /** Destructs tools pane. */
+    virtual ~UIToolsPaneMachine() /* override */;
+
+    /** Returns whether tool of particular @a enmType is opened. */
+    bool isToolOpened(ToolTypeMachine enmType) const;
+    /** Activates tool of passed @a enmType, creates new one if necessary. */
+    void openTool(ToolTypeMachine enmType);
+    /** Closes tool of passed @a enmType, deletes one if exists. */
+    void closeTool(ToolTypeMachine enmType);
+
+    /** Defines @a strText and switches to text details pane. */
+    void setDetailsText(const QString &strText);
+    /** Defines @a strError and switches to error details pane. */
+    void setDetailsError(const QString &strError);
+
+    /** Defines the machine @a items. */
+    void setItems(const QList<UIVMItem*> &items);
+
+    /** Defines the @a comMachine object. */
+    void setMachine(const CMachine &comMachine);
+
+private:
+
+    /** Prepares all. */
+    void prepare();
+    /** Prepares stacked-layout. */
+    void prepareStackedLayout();
+    /** Cleanups all. */
+    void cleanup();
+
+    /** Holds the action pool reference. */
+    UIActionPool *m_pActionPool;
+
+    /** Holds the stacked-layout instance. */
+    QStackedLayout *m_pLayout;
+    /** Holds the Desktop pane instance. */
+    UIDesktopPane  *m_pPaneDesktop;
+    /** Holds the Details pane instance. */
+    UIGDetails     *m_pPaneDetails;
+    /** Holds the Snapshots pane instance. */
+    UISnapshotPane *m_pPaneSnapshots;
+};
+
+#endif /* !___UIToolsPaneMachine_h___ */
+
Index: /trunk/src/VBox/Frontends/VirtualBox/src/selector/UIToolsToolbar.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/selector/UIToolsToolbar.cpp	(revision 68174)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/selector/UIToolsToolbar.cpp	(revision 68175)
@@ -161,5 +161,5 @@
 
         /* Create stacked layout: */
-        m_pLayoutStacked = new QStackedLayout;
+        m_pLayoutStacked = new QStackedLayout(m_pLayoutMain);
         AssertPtrReturnVoid(m_pLayoutStacked);
         {
Index: /trunk/src/VBox/Frontends/VirtualBox/src/selector/UIToolsToolbar.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/selector/UIToolsToolbar.h	(revision 68174)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/selector/UIToolsToolbar.h	(revision 68175)
@@ -24,4 +24,7 @@
 #include <QWidget>
 
+/* GUI includes: */
+#include "UIToolsPaneMachine.h"
+
 /* Forward declarations: */
 class QAction;
@@ -35,17 +38,4 @@
 class UIActionPool;
 class UITabBar;
-
-
-/** Machine tool types. */
-enum ToolTypeMachine
-{
-    ToolTypeMachine_Invalid,
-    ToolTypeMachine_Desktop,
-    ToolTypeMachine_Details,
-    ToolTypeMachine_Snapshots,
-};
-
-/* Make sure QVariant can eat ToolTypeMachine: */
-Q_DECLARE_METATYPE(ToolTypeMachine);
 
 
