Index: /trunk/src/VBox/Frontends/VirtualBox/Makefile.kmk
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/Makefile.kmk	(revision 73599)
+++ /trunk/src/VBox/Frontends/VirtualBox/Makefile.kmk	(revision 73600)
@@ -761,4 +761,5 @@
 	src/manager/chooser/UIChooserItem.h \
 	src/manager/chooser/UIChooserItemGroup.h \
+	src/manager/chooser/UIChooserItemGlobal.h \
 	src/manager/chooser/UIChooserItemMachine.h \
 	src/manager/details/UIDetails.h \
@@ -1438,4 +1439,5 @@
 	src/manager/chooser/UIChooserItem.cpp \
 	src/manager/chooser/UIChooserItemGroup.cpp \
+	src/manager/chooser/UIChooserItemGlobal.cpp \
 	src/manager/chooser/UIChooserItemMachine.cpp \
 	src/manager/details/UIDetails.cpp \
Index: /trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooser.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooser.cpp	(revision 73599)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooser.cpp	(revision 73600)
@@ -72,5 +72,15 @@
 }
 
-UIVirtualMachineItem* UIChooser::currentItem() const
+bool UIChooser::isGlobalItemSelected() const
+{
+    return m_pChooserModel->isGlobalItemSelected();
+}
+
+bool UIChooser::isMachineItemSelected() const
+{
+    return m_pChooserModel->isMachineItemSelected();
+}
+
+UIVirtualMachineItem *UIChooser::currentItem() const
 {
     return m_pChooserModel->currentMachineItem();
Index: /trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooser.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooser.h	(revision 73599)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooser.h	(revision 73600)
@@ -71,5 +71,7 @@
 
     /* API: Current-item stuff: */
-    UIVirtualMachineItem* currentItem() const;
+    bool isGlobalItemSelected() const;
+    bool isMachineItemSelected() const;
+    UIVirtualMachineItem *currentItem() const;
     QList<UIVirtualMachineItem*> currentItems() const;
     bool isSingleGroupSelected() const;
Index: /trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserHandlerKeyboard.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserHandlerKeyboard.cpp	(revision 73599)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserHandlerKeyboard.cpp	(revision 73600)
@@ -268,4 +268,5 @@
                 {
                     case UIChooserItemType_Group:
+                    case UIChooserItemType_Global:
                     case UIChooserItemType_Machine:
                     {
Index: /trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserHandlerMouse.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserHandlerMouse.cpp	(revision 73599)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserHandlerMouse.cpp	(revision 73600)
@@ -27,4 +27,5 @@
 # include "UIChooserModel.h"
 # include "UIChooserItemGroup.h"
+# include "UIChooserItemGlobal.h"
 # include "UIChooserItemMachine.h"
 
@@ -73,4 +74,7 @@
                 if (UIChooserItemGroup *pGroupItem = qgraphicsitem_cast<UIChooserItemGroup*>(pItemUnderMouse))
                     pClickedItem = pGroupItem;
+                /* Or a global one? */
+                else if (UIChooserItemGlobal *pGlobalItem = qgraphicsitem_cast<UIChooserItemGlobal*>(pItemUnderMouse))
+                    pClickedItem = pGlobalItem;
                 /* Or a machine one? */
                 else if (UIChooserItemMachine *pMachineItem = qgraphicsitem_cast<UIChooserItemMachine*>(pItemUnderMouse))
@@ -128,4 +132,7 @@
                 if (UIChooserItemGroup *pGroupItem = qgraphicsitem_cast<UIChooserItemGroup*>(pItemUnderMouse))
                     pClickedItem = pGroupItem;
+                /* Or a global one? */
+                else if (UIChooserItemGlobal *pGlobalItem = qgraphicsitem_cast<UIChooserItemGlobal*>(pItemUnderMouse))
+                    pClickedItem = pGlobalItem;
                 /* Or a machine one? */
                 else if (UIChooserItemMachine *pMachineItem = qgraphicsitem_cast<UIChooserItemMachine*>(pItemUnderMouse))
@@ -211,5 +218,5 @@
                 else if (pItemUnderMouse->type() == UIChooserItemType_Machine)
                 {
-                    /* Activate machine item: */
+                    /* Activate machine-item: */
                     model()->activateMachineItem();
                 }
Index: /trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserItem.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserItem.cpp	(revision 73599)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserItem.cpp	(revision 73600)
@@ -39,4 +39,5 @@
 # include "UIChooserModel.h"
 # include "UIChooserItemGroup.h"
+# include "UIChooserItemGlobal.h"
 # include "UIChooserItemMachine.h"
 
@@ -265,4 +266,11 @@
 }
 
+UIChooserItemGlobal* UIChooserItem::toGlobalItem()
+{
+    UIChooserItemGlobal *pItem = qgraphicsitem_cast<UIChooserItemGlobal*>(this);
+    AssertMsg(pItem, ("Trying to cast invalid item type to UIChooserItemGlobal!"));
+    return pItem;
+}
+
 UIChooserItemMachine* UIChooserItem::toMachineItem()
 {
Index: /trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserItem.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserItem.h	(revision 73599)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserItem.h	(revision 73600)
@@ -21,4 +21,5 @@
 /* Qt includes: */
 #include <QMimeData>
+#include <QString>
 
 /* GUI includes: */
@@ -33,4 +34,5 @@
 class UIChooserModel;
 class UIChooserItemGroup;
+class UIChooserItemGlobal;
 class UIChooserItemMachine;
 class QGraphicsSceneHoverEvent;
@@ -43,7 +45,8 @@
 enum UIChooserItemType
 {
-    UIChooserItemType_Any     = QGraphicsItem::UserType,
-    UIChooserItemType_Group   = QGraphicsItem::UserType + 1,
-    UIChooserItemType_Machine = QGraphicsItem::UserType + 2
+    UIChooserItemType_Any = QGraphicsItem::UserType,
+    UIChooserItemType_Group,
+    UIChooserItemType_Global,
+    UIChooserItemType_Machine
 };
 
@@ -52,6 +55,7 @@
 {
     UIChooserItemSearchFlag_Machine   = RT_BIT(0),
-    UIChooserItemSearchFlag_Group     = RT_BIT(1),
-    UIChooserItemSearchFlag_ExactName = RT_BIT(2)
+    UIChooserItemSearchFlag_Global    = RT_BIT(1),
+    UIChooserItemSearchFlag_Group     = RT_BIT(2),
+    UIChooserItemSearchFlag_ExactName = RT_BIT(3)
 };
 
@@ -82,6 +86,7 @@
 
     /* API: Cast stuff: */
-    UIChooserItemGroup* toGroupItem();
-    UIChooserItemMachine* toMachineItem();
+    UIChooserItemGroup *toGroupItem();
+    UIChooserItemGlobal *toGlobalItem();
+    UIChooserItemMachine *toMachineItem();
 
     /* API: Model stuff: */
@@ -118,5 +123,5 @@
     virtual void removeAll(const QString &strId) = 0;
     virtual UIChooserItem* searchForItem(const QString &strSearchTag, int iItemSearchFlags) = 0;
-    virtual UIChooserItemMachine* firstMachineItem() = 0;
+    virtual UIChooserItem* firstMachineItem() = 0;
     virtual void sortItems() = 0;
 
Index: /trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserItemGlobal.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserItemGlobal.cpp	(revision 73600)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserItemGlobal.cpp	(revision 73600)
@@ -0,0 +1,604 @@
+/* $Id$ */
+/** @file
+ * VBox Qt GUI - UIChooserItemGlobal class implementation.
+ */
+
+/*
+ * Copyright (C) 2012-2018 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 <QPainter>
+# include <QStyleOptionGraphicsItem>
+# include <QGraphicsSceneMouseEvent>
+
+/* GUI includes: */
+# include "VBoxGlobal.h"
+# include "UIChooserItemGlobal.h"
+# include "UIChooserModel.h"
+# include "UIIconPool.h"
+//# include "UIImageTools.h"
+# include "UIVirtualBoxManager.h"
+
+#endif /* !VBOX_WITH_PRECOMPILED_HEADERS */
+
+
+UIChooserItemGlobal::UIChooserItemGlobal(UIChooserItem *pParent,
+                                         int iPosition /* = -1 */)
+    : UIChooserItem(pParent, pParent->isTemporary())
+{
+    /* Prepare: */
+    prepare();
+
+    /* Add item to the parent: */
+    AssertMsg(parentItem(), ("No parent set for global-item!"));
+    parentItem()->addItem(this, iPosition);
+    setZValue(parentItem()->zValue() + 1);
+
+    /* Configure connections: */
+    connect(gpManager, &UIVirtualBoxManager::sigWindowRemapped,
+            this, &UIChooserItemGlobal::sltHandleWindowRemapped);
+
+    /* Init: */
+    updatePixmap();
+
+    /* Translate finally: */
+    retranslateUi();
+}
+
+UIChooserItemGlobal::UIChooserItemGlobal(UIChooserItem *pParent,
+                                         UIChooserItemGlobal * ,
+                                         int iPosition /* = -1 */)
+    : UIChooserItem(pParent, pParent->isTemporary())
+{
+    /* Prepare: */
+    prepare();
+
+    /* Add item to the parent: */
+    AssertMsg(parentItem(), ("No parent set for global-item!"));
+    parentItem()->addItem(this, iPosition);
+    setZValue(parentItem()->zValue() + 1);
+
+    /* Configure connections: */
+    connect(gpManager, &UIVirtualBoxManager::sigWindowRemapped,
+            this, &UIChooserItemGlobal::sltHandleWindowRemapped);
+
+    /* Init: */
+    updatePixmap();
+
+    /* Translate finally: */
+    retranslateUi();
+}
+
+UIChooserItemGlobal::~UIChooserItemGlobal()
+{
+    /* If that item is focused: */
+    if (model()->focusItem() == this)
+    {
+        /* Unset the focus: */
+        model()->setFocusItem(0);
+    }
+    /* If that item is in selection list: */
+    if (model()->currentItems().contains(this))
+    {
+        /* Remove item from the selection list: */
+        model()->removeFromCurrentItems(this);
+    }
+    /* If that item is in navigation list: */
+    if (model()->navigationList().contains(this))
+    {
+        /* Remove item from the navigation list: */
+        model()->removeFromNavigationList(this);
+    }
+
+    /* Remove item from the parent: */
+    AssertMsg(parentItem(), ("No parent set for global-item!"));
+    parentItem()->removeItem(this);
+}
+
+QString UIChooserItemGlobal::name() const
+{
+    return m_strName;
+}
+
+QString UIChooserItemGlobal::description() const
+{
+    return m_strDescription;
+}
+
+QString UIChooserItemGlobal::fullName() const
+{
+    return m_strName;
+}
+
+QString UIChooserItemGlobal::definition() const
+{
+    return QString("n=%1").arg(name());
+}
+
+void UIChooserItemGlobal::sltHandleWindowRemapped()
+{
+    updatePixmap();
+}
+
+QVariant UIChooserItemGlobal::data(int iKey) const
+{
+    /* Provide other members with required data: */
+    switch (iKey)
+    {
+        /* Layout hints: */
+        case GlobalItemData_Margin: return QApplication::style()->pixelMetric(QStyle::PM_SmallIconSize) / 4;
+        case GlobalItemData_Spacing: return QApplication::style()->pixelMetric(QStyle::PM_SmallIconSize) / 2;
+
+        /* Default: */
+        default: break;
+    }
+    return QVariant();
+}
+
+void UIChooserItemGlobal::updatePixmap()
+{
+    /* Acquire new metric, then compose pixmap-size: */
+    const int iMetric = QApplication::style()->pixelMetric(QStyle::PM_LargeIconSize);
+    const QSize pixmapSize = QSize(iMetric, iMetric);
+
+    /* Create new icon, then acquire pixmap: */
+    const QIcon icon = UIIconPool::iconSet(":/tools_global_32px.png");
+    const QPixmap pixmap = icon.pixmap(gpManager->windowHandle(), pixmapSize);
+
+    /* Update linked values: */
+    if (m_pixmapSize != pixmapSize)
+    {
+        m_pixmapSize = pixmapSize;
+        updateMaximumNameWidth();
+        updateGeometry();
+    }
+    if (m_pixmap.toImage() != pixmap.toImage())
+    {
+        m_pixmap = pixmap;
+        update();
+    }
+}
+
+void UIChooserItemGlobal::updateMinimumNameWidth()
+{
+    /* Calculate new minimum name width: */
+    QPaintDevice *pPaintDevice = model()->paintDevice();
+    const QFontMetrics fm(m_nameFont, pPaintDevice);
+    const int iMinimumNameWidth = fm.width(compressText(m_nameFont, pPaintDevice, m_strName, textWidth(m_nameFont, pPaintDevice, 15)));
+
+    /* Is there something changed? */
+    if (m_iMinimumNameWidth == iMinimumNameWidth)
+        return;
+
+    /* Update linked values: */
+    m_iMinimumNameWidth = iMinimumNameWidth;
+    updateGeometry();
+}
+
+void UIChooserItemGlobal::updateMaximumNameWidth()
+{
+    /* Prepare variables: */
+    const int iMargin = data(GlobalItemData_Margin).toInt();
+    const int iSpacing = data(GlobalItemData_Spacing).toInt();
+
+    /* Calculate new maximum name width: */
+    int iMaximumNameWidth = (int)geometry().width();
+    iMaximumNameWidth -= iMargin; /* left margin */
+    iMaximumNameWidth -= m_pixmapSize.width(); /* pixmap width */
+    iMaximumNameWidth -= iSpacing; /* spacing between pixmap and name */
+    iMaximumNameWidth -= iMargin; /* right margin */
+
+    /* Is there something changed? */
+    if (m_iMaximumNameWidth == iMaximumNameWidth)
+        return;
+
+    /* Update linked values: */
+    m_iMaximumNameWidth = iMaximumNameWidth;
+    updateVisibleName();
+}
+
+void UIChooserItemGlobal::updateVisibleName()
+{
+    /* Prepare variables: */
+    QPaintDevice *pPaintDevice = model()->paintDevice();
+
+    /* Calculate new visible name and name-size: */
+    const QString strVisibleName = compressText(m_nameFont, pPaintDevice, m_strName, m_iMaximumNameWidth);
+    const QSize visibleNameSize = textSize(m_nameFont, pPaintDevice, strVisibleName);
+
+    /* Update linked values: */
+    if (m_visibleNameSize != visibleNameSize)
+    {
+        m_visibleNameSize = visibleNameSize;
+        updateGeometry();
+    }
+    if (m_strVisibleName != strVisibleName)
+    {
+        m_strVisibleName = strVisibleName;
+        update();
+    }
+}
+
+void UIChooserItemGlobal::retranslateUi()
+{
+    /* Update description: */
+    m_strName = tr("Global Tools");
+    m_strDescription = m_strName;
+
+    /* Update linked values: */
+    updateMinimumNameWidth();
+    updateVisibleName();
+
+    /* Update tool-tip: */
+    updateToolTip();
+}
+
+void UIChooserItemGlobal::startEditing()
+{
+    AssertMsgFailed(("Global graphics item do NOT support editing yet!"));
+}
+
+void UIChooserItemGlobal::updateToolTip()
+{
+//    setToolTip(toolTipText());
+}
+
+void UIChooserItemGlobal::addItem(UIChooserItem*, int)
+{
+    AssertMsgFailed(("Global graphics item do NOT support children!"));
+}
+
+void UIChooserItemGlobal::removeItem(UIChooserItem*)
+{
+    AssertMsgFailed(("Global graphics item do NOT support children!"));
+}
+
+void UIChooserItemGlobal::setItems(const QList<UIChooserItem*>&, UIChooserItemType)
+{
+    AssertMsgFailed(("Global graphics item do NOT support children!"));
+}
+
+QList<UIChooserItem*> UIChooserItemGlobal::items(UIChooserItemType) const
+{
+    AssertMsgFailedReturn(("Global graphics item do NOT support children!"), QList<UIChooserItem*>());
+}
+
+bool UIChooserItemGlobal::hasItems(UIChooserItemType) const
+{
+    AssertMsgFailedReturn(("Global graphics item do NOT support children!"), false);
+}
+
+void UIChooserItemGlobal::clearItems(UIChooserItemType)
+{
+    AssertMsgFailed(("Global graphics item do NOT support children!"));
+}
+
+void UIChooserItemGlobal::updateAll(const QString &)
+{
+    /* Update this global-item: */
+    updatePixmap();
+    updateToolTip();
+
+    /* Update parent group-item: */
+    parentItem()->updateToolTip();
+    parentItem()->update();
+}
+
+void UIChooserItemGlobal::removeAll(const QString &)
+{
+    AssertMsgFailed(("Global graphics item do NOT support deleting!"));
+}
+
+UIChooserItem *UIChooserItemGlobal::searchForItem(const QString &, int iItemSearchFlags)
+{
+    /* Ignoring if we are not searching for the global-item? */
+    if (!(iItemSearchFlags & UIChooserItemSearchFlag_Global))
+        return 0;
+
+    /* Returning this: */
+    return this;
+}
+
+UIChooserItem *UIChooserItemGlobal::firstMachineItem()
+{
+    return 0;
+}
+
+void UIChooserItemGlobal::sortItems()
+{
+    AssertMsgFailed(("Global graphics item do NOT support children!"));
+}
+
+int UIChooserItemGlobal::minimumWidthHint() const
+{
+    /* Prepare variables: */
+    int iMargin = data(GlobalItemData_Margin).toInt();
+    int iSpacing = data(GlobalItemData_Spacing).toInt();
+
+    /* Calculating proposed width: */
+    int iProposedWidth = 0;
+
+    /* Two margins: */
+    iProposedWidth += 2 * iMargin;
+    /* And global-item content to take into account: */
+    iProposedWidth += (m_pixmapSize.width() +
+                       iSpacing +
+                       m_iMinimumNameWidth);
+
+    /* Return result: */
+    return iProposedWidth;
+}
+
+int UIChooserItemGlobal::minimumHeightHint() const
+{
+    /* Prepare variables: */
+    int iMargin = data(GlobalItemData_Margin).toInt();
+
+    /* Calculating proposed height: */
+    int iProposedHeight = 0;
+
+    /* Two margins: */
+    iProposedHeight += 2 * iMargin;
+    /* And global-item content to take into account: */
+    iProposedHeight += qMax(m_pixmapSize.height(), m_visibleNameSize.height());
+
+    /* Return result: */
+    return iProposedHeight;
+}
+
+QSizeF UIChooserItemGlobal::sizeHint(Qt::SizeHint which, const QSizeF &constraint /* = QSizeF() */) const
+{
+    /* If Qt::MinimumSize requested: */
+    if (which == Qt::MinimumSize)
+        return QSizeF(minimumWidthHint(), minimumHeightHint());
+    /* Else call to base-class: */
+    return UIChooserItem::sizeHint(which, constraint);
+}
+
+QPixmap UIChooserItemGlobal::toPixmap()
+{
+    /* Ask item to paint itself into pixmap: */
+    const QSize minimumSize = minimumSizeHint().toSize();
+    QPixmap pixmap(minimumSize);
+    QPainter painter(&pixmap);
+    QStyleOptionGraphicsItem options;
+    options.rect = QRect(QPoint(0, 0), minimumSize);
+    paint(&painter, &options);
+    return pixmap;
+}
+
+bool UIChooserItemGlobal::isDropAllowed(QGraphicsSceneDragDropEvent *, DragToken) const
+{
+    /* No drops at all: */
+    return false;
+}
+
+void UIChooserItemGlobal::processDrop(QGraphicsSceneDragDropEvent *, UIChooserItem *, DragToken)
+{
+    /* Nothing to process: */
+}
+
+void UIChooserItemGlobal::resetDragToken()
+{
+    /* Nothing to process: */
+}
+
+QMimeData *UIChooserItemGlobal::createMimeData()
+{
+    /* Nothing to return: */
+    return 0;
+}
+
+void UIChooserItemGlobal::showEvent(QShowEvent *pEvent)
+{
+    /* Call to base-class: */
+    UIChooserItem::showEvent(pEvent);
+
+    /* Update pixmaps: */
+    updatePixmap();
+}
+
+void UIChooserItemGlobal::resizeEvent(QGraphicsSceneResizeEvent *pEvent)
+{
+    /* Call to base-class: */
+    UIChooserItem::resizeEvent(pEvent);
+
+    /* What is the new geometry? */
+    const QRectF newGeometry = geometry();
+
+    /* Should we update visible name? */
+    if (previousGeometry().width() != newGeometry.width())
+        updateMaximumNameWidth();
+
+    /* Remember the new geometry: */
+    setPreviousGeometry(newGeometry);
+}
+
+void UIChooserItemGlobal::mousePressEvent(QGraphicsSceneMouseEvent *pEvent)
+{
+    /* Call to base-class: */
+    UIChooserItem::mousePressEvent(pEvent);
+    /* No drag at all: */
+    pEvent->ignore();
+}
+
+void UIChooserItemGlobal::paint(QPainter *pPainter, const QStyleOptionGraphicsItem *pOption, QWidget * /* pWidget = 0 */)
+{
+    /* Setup: */
+    pPainter->setRenderHint(QPainter::Antialiasing);
+
+    /* Paint decorations: */
+    paintDecorations(pPainter, pOption);
+
+    /* Paint machine info: */
+    paintMachineInfo(pPainter, pOption);
+}
+
+void UIChooserItemGlobal::paintDecorations(QPainter *pPainter, const QStyleOptionGraphicsItem *pOption)
+{
+    /* Prepare variables: */
+    QRect fullRect = pOption->rect;
+
+    /* Paint background: */
+    paintBackground(pPainter, fullRect);
+
+    /* Paint frame: */
+    paintFrameRectangle(pPainter, fullRect);
+}
+
+void UIChooserItemGlobal::paintBackground(QPainter *pPainter, const QRect &rect)
+{
+    /* Save painter: */
+    pPainter->save();
+
+    /* Prepare color: */
+    const QPalette pal = palette();
+
+    /* Selection background: */
+    if (model()->currentItems().contains(this))
+    {
+        /* Prepare color: */
+        QColor highlight = pal.color(QPalette::Active, QPalette::Highlight);
+        /* Draw gradient: */
+        QLinearGradient bgGrad(rect.topLeft(), rect.bottomLeft());
+        bgGrad.setColorAt(0, highlight.lighter(m_iHighlightLightness));
+        bgGrad.setColorAt(1, highlight);
+        pPainter->fillRect(rect, bgGrad);
+    }
+    /* Hovering background: */
+    else if (isHovered())
+    {
+        /* Prepare color: */
+        QColor highlight = pal.color(QPalette::Active, QPalette::Highlight);
+        /* Draw gradient: */
+        QLinearGradient bgGrad(rect.topLeft(), rect.bottomLeft());
+        bgGrad.setColorAt(0, highlight.lighter(m_iHoverHighlightLightness));
+        bgGrad.setColorAt(1, highlight.lighter(m_iHoverLightness));
+        pPainter->fillRect(rect, bgGrad);
+    }
+
+    /* Restore painter: */
+    pPainter->restore();
+}
+
+void UIChooserItemGlobal::paintFrameRectangle(QPainter *pPainter, const QRect &rect)
+{
+    /* Only chosen and/or hovered item should have a frame: */
+    if (!model()->currentItems().contains(this) && !isHovered())
+        return;
+
+    /* Simple frame: */
+    pPainter->save();
+    const QPalette pal = palette();
+    QColor strokeColor = pal.color(QPalette::Active,
+                                   model()->currentItems().contains(this) ?
+                                   QPalette::Mid : QPalette::Highlight);
+    pPainter->setPen(strokeColor);
+    pPainter->drawRect(rect);
+    pPainter->restore();
+}
+
+void UIChooserItemGlobal::paintMachineInfo(QPainter *pPainter, const QStyleOptionGraphicsItem *pOption)
+{
+    /* Prepare variables: */
+    const QRect fullRect = pOption->rect;
+    const int iFullHeight = fullRect.height();
+    const int iMargin = data(GlobalItemData_Margin).toInt();
+    const int iSpacing = data(GlobalItemData_Spacing).toInt();
+
+    /* Selected item foreground: */
+    if (model()->currentItems().contains(this))
+    {
+        const QPalette pal = palette();
+        pPainter->setPen(pal.color(QPalette::HighlightedText));
+    }
+    /* Hovered item foreground: */
+    else if (isHovered())
+    {
+        /* Prepare color: */
+        const QPalette pal = palette();
+        const QColor highlight = pal.color(QPalette::Active, QPalette::Highlight);
+        const QColor hhl = highlight.lighter(m_iHoverHighlightLightness);
+        if (hhl.value() - hhl.saturation() > 0)
+            pPainter->setPen(pal.color(QPalette::Active, QPalette::Text));
+        else
+            pPainter->setPen(pal.color(QPalette::Active, QPalette::HighlightedText));
+    }
+
+    /* Calculate indents: */
+    int iLeftColumnIndent = iMargin;
+
+    /* Paint left column: */
+    {
+        /* Prepare variables: */
+        const int iGlobalPixmapX = iLeftColumnIndent;
+        const int iGlobalPixmapY = (iFullHeight - m_pixmap.height() / m_pixmap.devicePixelRatio()) / 2;
+
+        /* Paint pixmap: */
+        paintPixmap(/* Painter: */
+                    pPainter,
+                    /* Point to paint in: */
+                    QPoint(iGlobalPixmapX, iGlobalPixmapY),
+                    /* Pixmap to paint: */
+                    m_pixmap);
+    }
+
+    /* Calculate indents: */
+    const int iRightColumnIndent = iLeftColumnIndent +
+                                   m_pixmapSize.width() +
+                                   iSpacing;
+
+    /* Paint right column: */
+    {
+        /* Prepare variables: */
+        const int iNameX = iRightColumnIndent;
+        const int iNameY = (iFullHeight - m_visibleNameSize.height()) / 2;
+
+        /* Paint name: */
+        paintText(/* Painter: */
+                  pPainter,
+                  /* Point to paint in: */
+                  QPoint(iNameX, iNameY),
+                  /* Font to paint text: */
+                  m_nameFont,
+                  /* Paint device: */
+                  model()->paintDevice(),
+                  /* Text to paint: */
+                  m_strVisibleName);
+    }
+}
+
+void UIChooserItemGlobal::prepare()
+{
+    /* Colors: */
+#ifdef VBOX_WS_MAC
+    m_iHighlightLightness = 115;
+    m_iHoverLightness = 110;
+    m_iHoverHighlightLightness = 120;
+#else /* VBOX_WS_MAC */
+    m_iHighlightLightness = 130;
+    m_iHoverLightness = 155;
+    m_iHoverHighlightLightness = 175;
+#endif /* !VBOX_WS_MAC */
+
+    /* Fonts: */
+    m_nameFont = font();
+    m_nameFont.setWeight(QFont::Bold);
+
+    /* Sizes: */
+    m_iMinimumNameWidth = 0;
+    m_iMaximumNameWidth = 0;
+}
Index: /trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserItemGlobal.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserItemGlobal.h	(revision 73600)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserItemGlobal.h	(revision 73600)
@@ -0,0 +1,156 @@
+/* $Id$ */
+/** @file
+ * VBox Qt GUI - UIChooserItemGlobal class declaration.
+ */
+
+/*
+ * Copyright (C) 2012-2018 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 __UIChooserItemGlobal_h__
+#define __UIChooserItemGlobal_h__
+
+/* GUI includes: */
+#include "UIChooserItem.h"
+
+/* Forward declarations: */
+class UIGraphicsToolBar;
+class UIGraphicsZoomButton;
+
+/* Machine-item enumeration flags: */
+enum UIChooserItemGlobalEnumerationFlag
+{
+    UIChooserItemGlobalEnumerationFlag_Unique       = RT_BIT(0),
+    UIChooserItemGlobalEnumerationFlag_Inaccessible = RT_BIT(1)
+};
+
+/* Graphics global-item
+ * for graphics selector model/view architecture: */
+class UIChooserItemGlobal : public UIChooserItem
+{
+    Q_OBJECT;
+
+public:
+
+    /* Graphics-item type: */
+    enum { Type = UIChooserItemType_Global };
+    int type() const { return Type; }
+
+    /* Constructor (new item): */
+    UIChooserItemGlobal(UIChooserItem *pParent, int iPosition = -1);
+    /* Constructor (new item copy): */
+    UIChooserItemGlobal(UIChooserItem *pParent, UIChooserItemGlobal *pCopyFrom, int iPosition = -1);
+    /* Destructor: */
+    ~UIChooserItemGlobal();
+
+    /* API: Basic stuff: */
+    QString name() const;
+    QString description() const;
+    QString fullName() const;
+    QString definition() const;
+
+private slots:
+
+    /** Handles top-level window remaps. */
+    void sltHandleWindowRemapped();
+
+private:
+
+    /* Data enumerator: */
+    enum GlobalItemData
+    {
+        /* Layout hints: */
+        GlobalItemData_Margin,
+        GlobalItemData_Spacing,
+    };
+
+    /* Data provider: */
+    QVariant data(int iKey) const;
+
+    /* Helpers: Update stuff: */
+    void updatePixmap();
+    void updateMinimumNameWidth();
+    void updateMaximumNameWidth();
+    void updateVisibleName();
+
+    /* Helper: Translate stuff: */
+    void retranslateUi();
+
+    /* Helpers: Basic stuff: */
+    void startEditing();
+    void updateToolTip();
+
+    /* Helpers: Children stuff: */
+    void addItem(UIChooserItem *pItem, int iPosition);
+    void removeItem(UIChooserItem *pItem);
+    void setItems(const QList<UIChooserItem*> &items, UIChooserItemType type);
+    QList<UIChooserItem*> items(UIChooserItemType type) const;
+    bool hasItems(UIChooserItemType type) const;
+    void clearItems(UIChooserItemType type);
+    void updateAll(const QString &strId);
+    void removeAll(const QString &strId);
+    UIChooserItem *searchForItem(const QString &strSearchTag, int iItemSearchFlags);
+    UIChooserItem *firstMachineItem();
+    void sortItems();
+
+    /* Helpers: Layout stuff: */
+    void updateLayout() {}
+    int minimumWidthHint() const;
+    int minimumHeightHint() const;
+    QSizeF sizeHint(Qt::SizeHint which, const QSizeF &constraint = QSizeF()) const;
+
+    /* Helpers: Drag and drop stuff: */
+    QPixmap toPixmap();
+    bool isDropAllowed(QGraphicsSceneDragDropEvent *pEvent, DragToken where) const;
+    void processDrop(QGraphicsSceneDragDropEvent *pEvent, UIChooserItem *pFromWho, DragToken where);
+    void resetDragToken();
+    QMimeData *createMimeData();
+
+    /** Handles show @a pEvent. */
+    virtual void showEvent(QShowEvent *pEvent) /* override */;
+
+    /* Handler: Resize handling stuff: */
+    void resizeEvent(QGraphicsSceneResizeEvent *pEvent);
+
+    /* Handler: Mouse handling stuff: */
+    void mousePressEvent(QGraphicsSceneMouseEvent *pEvent);
+
+    /* Helpers: Paint stuff: */
+    void paint(QPainter *pPainter, const QStyleOptionGraphicsItem *pOption, QWidget *pWidget = 0);
+    void paintDecorations(QPainter *pPainter, const QStyleOptionGraphicsItem *pOption);
+    void paintBackground(QPainter *pPainter, const QRect &rect);
+    void paintFrameRectangle(QPainter *pPainter, const QRect &rect);
+    void paintMachineInfo(QPainter *pPainter, const QStyleOptionGraphicsItem *pOption);
+
+    /* Helpers: Prepare stuff: */
+    void prepare();
+
+    /* Helper: Machine-item enumeration stuff: */
+    static bool contains(const QList<UIChooserItemGlobal*> &list,
+                         UIChooserItemGlobal *pItem);
+
+    /* Variables: */
+    int m_iHighlightLightness;
+    int m_iHoverLightness;
+    int m_iHoverHighlightLightness;
+    /* Cached values: */
+    QFont m_nameFont;
+    QPixmap m_pixmap;
+    QString m_strName;
+    QString m_strDescription;
+    QString m_strVisibleName;
+    QSize m_pixmapSize;
+    QSize m_visibleNameSize;
+    int m_iMinimumNameWidth;
+    int m_iMaximumNameWidth;
+};
+
+#endif /* __UIChooserItemGlobal_h__ */
Index: /trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserItemGroup.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserItemGroup.cpp	(revision 73599)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserItemGroup.cpp	(revision 73600)
@@ -31,4 +31,5 @@
 /* GUI includes: */
 # include "UIChooserItemGroup.h"
+# include "UIChooserItemGlobal.h"
 # include "UIChooserItemMachine.h"
 # include "UIChooserModel.h"
@@ -470,4 +471,7 @@
     foreach (UIChooserItem *pGroupItem, pFrom->items(UIChooserItemType_Group))
         new UIChooserItemGroup(pTo, pGroupItem->toGroupItem());
+    /* Copy global-items: */
+    foreach (UIChooserItem *pGlobalItem, pFrom->items(UIChooserItemType_Global))
+        new UIChooserItemGlobal(pTo, pGlobalItem->toGlobalItem());
     /* Copy machine-items: */
     foreach (UIChooserItem *pMachineItem, pFrom->items(UIChooserItemType_Machine))
@@ -807,4 +811,14 @@
             break;
         }
+        case UIChooserItemType_Global:
+        {
+            AssertMsg(!m_globalItems.contains(pItem), ("Global-item already added!"));
+            if (iPosition < 0 || iPosition >= m_globalItems.size())
+                m_globalItems.append(pItem);
+            else
+                m_globalItems.insert(iPosition, pItem);
+            scene()->addItem(pItem);
+            break;
+        }
         case UIChooserItemType_Machine:
         {
@@ -842,4 +856,11 @@
             break;
         }
+        case UIChooserItemType_Global:
+        {
+            AssertMsg(m_globalItems.contains(pItem), ("Global-item was not found!"));
+            scene()->removeItem(pItem);
+            m_globalItems.removeAt(m_globalItems.indexOf(pItem));
+            break;
+        }
         case UIChooserItemType_Machine:
         {
@@ -868,4 +889,5 @@
     {
         case UIChooserItemType_Group: m_groupItems = items; break;
+        case UIChooserItemType_Global: m_globalItems = items; break;
         case UIChooserItemType_Machine: m_machineItems = items; break;
         default: AssertMsgFailed(("Invalid item type!")); break;
@@ -882,6 +904,7 @@
     switch (type)
     {
-        case UIChooserItemType_Any: return items(UIChooserItemType_Group) + items(UIChooserItemType_Machine);
+        case UIChooserItemType_Any: return items(UIChooserItemType_Global) + items(UIChooserItemType_Group) + items(UIChooserItemType_Machine);
         case UIChooserItemType_Group: return m_groupItems;
+        case UIChooserItemType_Global: return m_globalItems;
         case UIChooserItemType_Machine: return m_machineItems;
         default: break;
@@ -895,7 +918,9 @@
     {
         case UIChooserItemType_Any:
-            return hasItems(UIChooserItemType_Group) || hasItems(UIChooserItemType_Machine);
+            return hasItems(UIChooserItemType_Global) || hasItems(UIChooserItemType_Group) || hasItems(UIChooserItemType_Machine);
         case UIChooserItemType_Group:
             return !m_groupItems.isEmpty();
+        case UIChooserItemType_Global:
+            return !m_globalItems.isEmpty();
         case UIChooserItemType_Machine:
             return !m_machineItems.isEmpty();
@@ -911,4 +936,5 @@
         {
             clearItems(UIChooserItemType_Group);
+            clearItems(UIChooserItemType_Global);
             clearItems(UIChooserItemType_Machine);
             break;
@@ -918,4 +944,10 @@
             while (!m_groupItems.isEmpty()) { delete m_groupItems.last(); }
             AssertMsg(m_groupItems.isEmpty(), ("Group items cleanup failed!"));
+            break;
+        }
+        case UIChooserItemType_Global:
+        {
+            while (!m_globalItems.isEmpty()) { delete m_globalItems.last(); }
+            AssertMsg(m_globalItems.isEmpty(), ("Global items cleanup failed!"));
             break;
         }
@@ -971,4 +1003,7 @@
     /* Search among all the children, but machines first: */
     foreach (UIChooserItem *pItem, items(UIChooserItemType_Machine))
+        if (UIChooserItem *pFoundItem = pItem->searchForItem(strSearchTag, iItemSearchFlags))
+            return pFoundItem;
+    foreach (UIChooserItem *pItem, items(UIChooserItemType_Global))
         if (UIChooserItem *pFoundItem = pItem->searchForItem(strSearchTag, iItemSearchFlags))
             return pFoundItem;
@@ -981,5 +1016,5 @@
 }
 
-UIChooserItemMachine* UIChooserItemGroup::firstMachineItem()
+UIChooserItem *UIChooserItemGroup::firstMachineItem()
 {
     /* If this group-item have at least one machine-item: */
Index: /trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserItemGroup.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserItemGroup.h	(revision 73599)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserItemGroup.h	(revision 73600)
@@ -145,6 +145,6 @@
     void updateAll(const QString &strId);
     void removeAll(const QString &strId);
-    UIChooserItem* searchForItem(const QString &strSearchTag, int iItemSearchFlags);
-    UIChooserItemMachine* firstMachineItem();
+    UIChooserItem *searchForItem(const QString &strSearchTag, int iItemSearchFlags);
+    UIChooserItem *firstMachineItem();
     void sortItems();
 
@@ -203,4 +203,5 @@
     QGraphicsProxyWidget *m_pNameEditor;
     QList<UIChooserItem*> m_groupItems;
+    QList<UIChooserItem*> m_globalItems;
     QList<UIChooserItem*> m_machineItems;
     int m_iAdditionalHeight;
Index: /trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserItemMachine.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserItemMachine.cpp	(revision 73599)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserItemMachine.cpp	(revision 73600)
@@ -605,5 +605,5 @@
 }
 
-UIChooserItemMachine* UIChooserItemMachine::firstMachineItem()
+UIChooserItem *UIChooserItemMachine::firstMachineItem()
 {
     return this;
Index: /trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserItemMachine.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserItemMachine.h	(revision 73599)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserItemMachine.h	(revision 73600)
@@ -35,5 +35,5 @@
 };
 
-/* Graphics machine item
+/* Graphics machine-item
  * for graphics selector model/view architecture: */
 class UIChooserItemMachine : public UIChooserItem, public UIVirtualMachineItem
@@ -127,6 +127,6 @@
     void updateAll(const QString &strId);
     void removeAll(const QString &strId);
-    UIChooserItem* searchForItem(const QString &strSearchTag, int iItemSearchFlags);
-    UIChooserItemMachine* firstMachineItem();
+    UIChooserItem *searchForItem(const QString &strSearchTag, int iItemSearchFlags);
+    UIChooserItem *firstMachineItem();
     void sortItems();
 
Index: /trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserModel.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserModel.cpp	(revision 73599)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserModel.cpp	(revision 73600)
@@ -37,4 +37,5 @@
 # include "UIChooserModel.h"
 # include "UIChooserItemGroup.h"
+# include "UIChooserItemGlobal.h"
 # include "UIChooserItemMachine.h"
 # include "UIExtraDataDefs.h"
@@ -207,8 +208,20 @@
 }
 
+bool UIChooserModel::isGlobalItemSelected() const
+{
+    return currentItem() && currentItem()->type() == UIChooserItemType_Global;
+}
+
+bool UIChooserModel::isMachineItemSelected() const
+{
+    return currentItem() && currentItem()->type() == UIChooserItemType_Machine;
+}
+
 UIVirtualMachineItem* UIChooserModel::currentMachineItem() const
 {
     /* Return first machine-item of the current-item: */
-    return currentItem() ? currentItem()->firstMachineItem() : 0;
+    return   currentItem() && currentItem()->firstMachineItem()
+           ? currentItem()->firstMachineItem()->toMachineItem()
+           : 0;
 }
 
@@ -218,5 +231,5 @@
     QList<UIChooserItemMachine*> currentMachineItemList;
     UIChooserItemMachine::enumerateMachineItems(currentItems(), currentMachineItemList,
-                                                 UIChooserItemMachineEnumerationFlag_Unique);
+                                                UIChooserItemMachineEnumerationFlag_Unique);
 
     /* Reintegrate machine-items into valid format: */
@@ -982,5 +995,5 @@
                 /* Add name to busy: */
                 busyMachineNames << pItem->name();
-                /* Copy or move machine item: */
+                /* Copy or move machine-item: */
                 new UIChooserItemMachine(pNewGroupItem, pItem->toMachineItem());
                 delete pItem;
@@ -1451,4 +1464,7 @@
             navigationItems << createNavigationList(pGroupItem);
     }
+    /* Iterate over all the global-items: */
+    foreach (UIChooserItem *pGlobalItem, pItem->items(UIChooserItemType_Global))
+        navigationItems << pGlobalItem;
     /* Iterate over all the machine-items: */
     foreach (UIChooserItem *pMachineItem, pItem->items(UIChooserItemType_Machine))
@@ -1750,4 +1766,7 @@
 void UIChooserModel::loadGroupTree()
 {
+    /* Create Global item: */
+    createGlobalItem(mainRoot());
+
     /* Add all the approved machines we have into the group-tree: */
     LogRelFlow(("UIChooserModel: Loading VMs...\n"));
@@ -1960,9 +1979,12 @@
 void UIChooserModel::createMachineItem(const CMachine &machine, UIChooserItem *pParentItem)
 {
-    /* Create corresponding item: */
-    new UIChooserItemMachine(/* Parent item and corresponding machine: */
-                              pParentItem, machine,
-                              /* Which position new group-item should be placed in? */
-                              getDesiredPosition(pParentItem, UIChooserItemType_Machine, machine.GetId()));
+    /* Create machine-item: */
+    new UIChooserItemMachine(pParentItem, machine, getDesiredPosition(pParentItem, UIChooserItemType_Machine, machine.GetId()));
+}
+
+void UIChooserModel::createGlobalItem(UIChooserItem *pParentItem)
+{
+    /* Create global-item: */
+    new UIChooserItemGlobal(pParentItem, 0);
 }
 
Index: /trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserModel.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserModel.h	(revision 73599)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserModel.h	(revision 73600)
@@ -110,5 +110,7 @@
 
     /* API: Current-item stuff: */
-    UIVirtualMachineItem* currentMachineItem() const;
+    bool isGlobalItemSelected() const;
+    bool isMachineItemSelected() const;
+    UIVirtualMachineItem *currentMachineItem() const;
     QList<UIVirtualMachineItem*> currentMachineItems() const;
     UIChooserItem* currentItem() const;
@@ -265,4 +267,5 @@
     int positionFromDefinitions(UIChooserItem *pParentItem, UIChooserItemType type, const QString &strName);
     void createMachineItem(const CMachine &machine, UIChooserItem *pParentItem);
+    void createGlobalItem(UIChooserItem *pParentItem);
 
     /* Helpers: Saving stuff: */
