Index: /trunk/src/VBox/Frontends/VirtualBox/Makefile.kmk
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/Makefile.kmk	(revision 71100)
+++ /trunk/src/VBox/Frontends/VirtualBox/Makefile.kmk	(revision 71101)
@@ -379,5 +379,5 @@
 	src/runtime/information/guestctrl/UIGuestControlInterface.h \
 	src/runtime/information/guestctrl/UIGuestControlTreeItem.h \
-	src/runtime/information/guestctrl/UIInformationGuestSession.h \
+	src/runtime/information/guestctrl/UIGuestControlWidget.h \
 	src/runtime/normal/UIKeyboardHandlerNormal.h \
 	src/runtime/normal/UIMachineLogicNormal.h \
@@ -565,5 +565,5 @@
 	src/runtime/UIIndicatorsPool.cpp \
 	src/runtime/UIStatusBarEditorWindow.cpp \
-	src/runtime/information/guestctrl/UIInformationGuestSession.cpp \
+	src/runtime/information/guestctrl/UIGuestControlWidget.cpp \
 	src/selector/UIActionPoolSelector.cpp \
 	src/selector/UIDesktopPane.cpp \
@@ -708,6 +708,6 @@
 	src/runtime/information/guestctrl/UIGuestControlConsole.cpp \
 	src/runtime/information/guestctrl/UIGuestControlInterface.cpp \
-	src/runtime/information/guestctrl/UIInformationGuestSession.cpp \
 	src/runtime/information/guestctrl/UIGuestControlTreeItem.cpp \
+	src/runtime/information/guestctrl/UIGuestControlWidget.cpp \
 	src/runtime/normal/UIKeyboardHandlerNormal.cpp \
 	src/runtime/normal/UIMachineLogicNormal.cpp \
Index: /trunk/src/VBox/Frontends/VirtualBox/src/runtime/information/UIVMInformationDialog.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/runtime/information/UIVMInformationDialog.cpp	(revision 71100)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/runtime/information/UIVMInformationDialog.cpp	(revision 71101)
@@ -38,5 +38,5 @@
 # include "VBoxUtils.h"
 # include "UIInformationConfiguration.h"
-# include "UIInformationGuestSession.h"
+# include "UIGuestControlWidget.h"
 # include "UIInformationRuntime.h"
 # include "UIMachine.h"
@@ -245,9 +245,9 @@
         if(m_pMachineWindow->console().isOk())
         {
-            UIInformationGuestSession *pGuestSessionWidget =
-                new UIInformationGuestSession(this, m_pMachineWindow->console().GetGuest());
-            if (pGuestSessionWidget)
+            UIGuestControlWidget *pGuestControlWidget =
+                new UIGuestControlWidget(this, m_pMachineWindow->console().GetGuest());
+            if (pGuestControlWidget)
             {
-                m_tabs.insert(2, pGuestSessionWidget);
+                m_tabs.insert(2, pGuestControlWidget);
                 m_pTabWidget->addTab(m_tabs.value(2), QString());
             }
Index: /trunk/src/VBox/Frontends/VirtualBox/src/runtime/information/guestctrl/UIGuestControlWidget.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/runtime/information/guestctrl/UIGuestControlWidget.cpp	(revision 71101)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/runtime/information/guestctrl/UIGuestControlWidget.cpp	(revision 71101)
@@ -0,0 +1,426 @@
+/* $Id$ */
+/** @file
+ * VBox Qt GUI - UIGuestControlWidget class implementation.
+ */
+
+/*
+ * Copyright (C) 2016-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 <QApplication>
+# include <QSplitter>
+# include <QVBoxLayout>
+
+
+/* GUI includes: */
+# include "QITreeWidget.h"
+# include "UIExtraDataManager.h"
+# include "UIGuestControlConsole.h"
+# include "UIGuestControlInterface.h"
+# include "UIGuestControlTreeItem.h"
+# include "UIGuestControlWidget.h"
+# include "UIVMInformationDialog.h"
+# include "VBoxGlobal.h"
+
+/* COM includes: */
+# include "CGuest.h"
+# include "CEventSource.h"
+
+#endif /* !VBOX_WITH_PRECOMPILED_HEADERS */
+
+class UIGuestControlTreeWidget : public QITreeWidget
+{
+
+    Q_OBJECT;
+
+signals:
+
+    void sigCloseSessionOrProcess();
+
+public:
+
+    UIGuestControlTreeWidget(QWidget *pParent = 0)
+        :QITreeWidget(pParent)
+    {
+        setSelectionMode(QAbstractItemView::SingleSelection);
+    }
+
+    UIGuestControlTreeItem *selectedItem()
+    {
+        QList<QTreeWidgetItem*> selectedList = selectedItems();
+        if (selectedList.isEmpty())
+            return 0;
+        UIGuestControlTreeItem *item =
+            dynamic_cast<UIGuestControlTreeItem*>(selectedList[0]);
+        /* Return the firstof the selected items */
+        return item;
+    }
+
+protected:
+
+    void contextMenuEvent(QContextMenuEvent *pEvent) /* override */
+    {
+        QMenu *menu = new QMenu(this);
+        QList<QTreeWidgetItem *> selectedList = selectedItems();
+
+        UIGuestSessionTreeItem *sessionTreeItem = 0;
+        if (!selectedList.isEmpty())
+            sessionTreeItem = dynamic_cast<UIGuestSessionTreeItem*>(selectedList[0]);
+        QAction *pSessionCloseAction = 0;
+
+        /* Create a guest session related context menu */
+        if (sessionTreeItem)
+        {
+            pSessionCloseAction = menu->addAction(UIVMInformationDialog::tr("Close Session"));
+            if (pSessionCloseAction)
+                connect(pSessionCloseAction, &QAction::triggered,
+                        this, &UIGuestControlTreeWidget::sigCloseSessionOrProcess);
+        }
+        UIGuestProcessTreeItem *processTreeItem = 0;
+        if (!selectedList.isEmpty())
+            processTreeItem = dynamic_cast<UIGuestProcessTreeItem*>(selectedList[0]);
+        QAction *pProcessTerminateAction = 0;
+        if (processTreeItem)
+        {
+            pProcessTerminateAction = menu->addAction(UIVMInformationDialog::tr("Terminate Process"));
+            if (pProcessTerminateAction)
+                connect(pProcessTerminateAction, &QAction::triggered,
+                        this, &UIGuestControlTreeWidget::sigCloseSessionOrProcess);
+        }
+        if (pProcessTerminateAction || pSessionCloseAction)
+            menu->addSeparator();
+        // Add actions to expand/collapse all tree items
+        QAction *pExpandAllAction = menu->addAction(UIVMInformationDialog::tr("Expand All"));
+        if (pExpandAllAction)
+            connect(pExpandAllAction, &QAction::triggered,
+                    this, &UIGuestControlTreeWidget::sltExpandAll);
+        QAction *pCollapseAllAction = menu->addAction(UIVMInformationDialog::tr("Collapse All"));
+        if (pCollapseAllAction)
+            connect(pCollapseAllAction, &QAction::triggered,
+                    this, &UIGuestControlTreeWidget::sltCollapseAll);
+
+        menu->exec(pEvent->globalPos());
+
+        if (pSessionCloseAction)
+            disconnect(pSessionCloseAction, &QAction::triggered,
+                       this, &UIGuestControlTreeWidget::sigCloseSessionOrProcess);
+        if (pProcessTerminateAction)
+            disconnect(pProcessTerminateAction, &QAction::triggered,
+                       this, &UIGuestControlTreeWidget::sigCloseSessionOrProcess);
+
+        if (pExpandAllAction)
+            disconnect(pExpandAllAction, &QAction::triggered,
+                    this, &UIGuestControlTreeWidget::sltExpandAll);
+
+        if (pCollapseAllAction)
+            disconnect(pCollapseAllAction, &QAction::triggered,
+                    this, &UIGuestControlTreeWidget::sltCollapseAll);
+
+        delete menu;
+    }
+
+private slots:
+
+    void sltExpandAll()
+    {
+        expandCollapseAll(true);
+    }
+
+    void sltCollapseAll()
+    {
+        expandCollapseAll(false);
+    }
+
+    void expandCollapseAll(bool bFlag)
+    {
+        for(int i = 0; i < topLevelItemCount(); ++i)
+        {
+            if (!topLevelItem(i))
+                break;
+            topLevelItem(i)->setExpanded(bFlag);
+            for (int j = 0; j < topLevelItem(i)->childCount(); ++j)
+            {
+                if (topLevelItem(i)->child(j))
+                {
+                    topLevelItem(i)->child(j)->setExpanded(bFlag);
+                }
+            }
+        }
+    }
+
+};
+
+UIGuestControlWidget::UIGuestControlWidget(QWidget *pParent, const CGuest &comGuest)
+    : QWidget(pParent)
+    , m_comGuest(comGuest)
+    , m_pMainLayout(0)
+    , m_pSplitter(0)
+    , m_pTreeWidget(0)
+    , m_pConsole(0)
+    , m_pControlInterface(0)
+    , m_pQtListener(0)
+{
+    prepareListener();
+    prepareObjects();
+    prepareConnections();
+    initGuestSessionTree();
+}
+
+void UIGuestControlWidget::prepareObjects()
+{
+    m_pControlInterface = new UIGuestControlInterface(this, m_comGuest);
+
+    /* Create layout: */
+    m_pMainLayout = new QVBoxLayout(this);
+    if (!m_pMainLayout)
+        return;
+
+    /* Configure layout: */
+    m_pMainLayout->setSpacing(0);
+
+    m_pSplitter = new QSplitter;
+
+    if (!m_pSplitter)
+        return;
+
+    m_pSplitter->setOrientation(Qt::Vertical);
+
+    m_pMainLayout->addWidget(m_pSplitter);
+
+
+    m_pTreeWidget = new UIGuestControlTreeWidget;
+
+    if (m_pTreeWidget)
+    {
+        m_pSplitter->addWidget(m_pTreeWidget);
+        m_pTreeWidget->setColumnCount(3);
+        QStringList labels;
+        labels << "" << "" << "";
+
+        m_pTreeWidget->setHeaderLabels(labels);
+    }
+    m_pConsole = new UIGuestControlConsole;
+    if (m_pConsole)
+    {
+        m_pSplitter->addWidget(m_pConsole);
+        setFocusProxy(m_pConsole);
+    }
+
+    m_pSplitter->setStretchFactor(0, 9);
+    m_pSplitter->setStretchFactor(1, 4);
+
+    updateTreeWidget();
+}
+
+void UIGuestControlWidget::updateTreeWidget()
+{
+    if (!m_pTreeWidget)
+        return;
+
+    m_pTreeWidget->clear();
+    QVector<QITreeWidgetItem> treeItemVector;
+    update();
+}
+
+void UIGuestControlWidget::prepareConnections()
+{
+    qRegisterMetaType<QVector<int> >();
+    connect(m_pControlInterface, &UIGuestControlInterface::sigOutputString,
+            this, &UIGuestControlWidget::sltConsoleOutputReceived);
+    connect(m_pConsole, &UIGuestControlConsole::commandEntered,
+            this, &UIGuestControlWidget::sltConsoleCommandEntered);
+
+    if (m_pTreeWidget)
+        connect(m_pTreeWidget, &UIGuestControlTreeWidget::sigCloseSessionOrProcess,
+                this, &UIGuestControlWidget::sltCloseSessionOrProcess);
+
+    if (m_pQtListener)
+    {
+        connect(m_pQtListener->getWrapped(), &UIMainEventListener::sigGuestSessionRegistered,
+                this, &UIGuestControlWidget::sltGuestSessionRegistered, Qt::DirectConnection);
+        connect(m_pQtListener->getWrapped(), &UIMainEventListener::sigGuestSessionUnregistered,
+                this, &UIGuestControlWidget::sltGuestSessionUnregistered, Qt::DirectConnection);
+    }
+}
+
+void UIGuestControlWidget::sltGuestSessionsUpdated()
+{
+    updateTreeWidget();
+}
+
+void UIGuestControlWidget::sltConsoleCommandEntered(const QString &strCommand)
+{
+    if (m_pControlInterface)
+    {
+        m_pControlInterface->putCommand(strCommand);
+    }
+}
+
+void UIGuestControlWidget::sltConsoleOutputReceived(const QString &strOutput)
+{
+    if (m_pConsole)
+    {
+        m_pConsole->putOutput(strOutput);
+    }
+}
+
+void UIGuestControlWidget::sltCloseSessionOrProcess()
+{
+    if (!m_pTreeWidget)
+        return;
+    UIGuestControlTreeItem *selectedTreeItem =
+        m_pTreeWidget->selectedItem();
+    if (!selectedTreeItem)
+        return;
+    UIGuestProcessTreeItem *processTreeItem =
+        dynamic_cast<UIGuestProcessTreeItem*>(selectedTreeItem);
+    if (processTreeItem)
+    {
+        CGuestProcess guestProcess = processTreeItem->guestProcess();
+        if (guestProcess.isOk())
+        {
+            guestProcess.Terminate();
+        }
+        return;
+    }
+    UIGuestSessionTreeItem *sessionTreeItem =
+        dynamic_cast<UIGuestSessionTreeItem*>(selectedTreeItem);
+    if (!sessionTreeItem)
+        return;
+    CGuestSession guestSession = sessionTreeItem->guestSession();
+    if (!guestSession.isOk())
+        return;
+    guestSession.Close();
+}
+
+void UIGuestControlWidget::prepareListener()
+{
+    /* Create event listener instance: */
+    m_pQtListener.createObject();
+    m_pQtListener->init(new UIMainEventListener, this);
+    m_comEventListener = CEventListener(m_pQtListener);
+
+    /* Get CProgress event source: */
+    CEventSource comEventSource = m_comGuest.GetEventSource();
+    AssertWrapperOk(comEventSource);
+
+    /* Enumerate all the required event-types: */
+    QVector<KVBoxEventType> eventTypes;
+    eventTypes << KVBoxEventType_OnGuestSessionRegistered;
+
+
+    /* Register event listener for CProgress event source: */
+    comEventSource.RegisterListener(m_comEventListener, eventTypes,
+        gEDataManager->eventHandlingType() == EventHandlingType_Active ? TRUE : FALSE);
+    AssertWrapperOk(comEventSource);
+
+    /* If event listener registered as passive one: */
+    if (gEDataManager->eventHandlingType() == EventHandlingType_Passive)
+    {
+        /* Register event sources in their listeners as well: */
+        m_pQtListener->getWrapped()->registerSource(comEventSource, m_comEventListener);
+    }
+}
+
+void UIGuestControlWidget::initGuestSessionTree()
+{
+    if (!m_comGuest.isOk())
+        return;
+
+    QVector<CGuestSession> sessions = m_comGuest.GetSessions();
+    for (int i = 0; i < sessions.size(); ++i)
+    {
+        addGuestSession(sessions.at(i));
+    }
+}
+
+void UIGuestControlWidget::cleanupListener()
+{
+    /* If event listener registered as passive one: */
+    if (gEDataManager->eventHandlingType() == EventHandlingType_Passive)
+    {
+        /* Unregister everything: */
+        m_pQtListener->getWrapped()->unregisterSources();
+    }
+
+    /* Make sure VBoxSVC is available: */
+    if (!vboxGlobal().isVBoxSVCAvailable())
+        return;
+
+    /* Get CProgress event source: */
+    CEventSource comEventSource = m_comGuest.GetEventSource();
+    AssertWrapperOk(comEventSource);
+
+    /* Unregister event listener for CProgress event source: */
+    comEventSource.UnregisterListener(m_comEventListener);
+}
+
+
+void UIGuestControlWidget::sltGuestSessionRegistered(CGuestSession guestSession)
+{
+    if (!guestSession.isOk())
+        return;
+    addGuestSession(guestSession);
+}
+
+void UIGuestControlWidget::addGuestSession(CGuestSession guestSession)
+{
+    UIGuestSessionTreeItem* sessionTreeItem = new UIGuestSessionTreeItem(m_pTreeWidget, guestSession);
+    connect(sessionTreeItem, &UIGuestSessionTreeItem::sigGuessSessionUpdated,
+            this, &UIGuestControlWidget::sltTreeItemUpdated);
+    connect(sessionTreeItem, &UIGuestSessionTreeItem::sigGuestSessionErrorText,
+            this, &UIGuestControlWidget::sltGuestControlErrorText);
+}
+
+void UIGuestControlWidget::sltGuestControlErrorText(QString strError)
+{
+    if (m_pConsole)
+    {
+        m_pConsole->putOutput(strError);
+    }
+}
+
+void UIGuestControlWidget::sltTreeItemUpdated()
+{
+    if (m_pTreeWidget)
+        m_pTreeWidget->update();
+}
+
+void UIGuestControlWidget::sltGuestSessionUnregistered(CGuestSession guestSession)
+{
+    if (!guestSession.isOk())
+        return;
+    if (!m_pTreeWidget)
+        return;
+
+    UIGuestSessionTreeItem *selectedItem = NULL;
+
+
+    for (int i = 0; i < m_pTreeWidget->topLevelItemCount(); ++i)
+    {
+        QTreeWidgetItem *item = m_pTreeWidget->topLevelItem( i );
+
+        UIGuestSessionTreeItem *treeItem = dynamic_cast<UIGuestSessionTreeItem*>(item);
+        if (treeItem && treeItem->guestSession() == guestSession)
+        {
+            selectedItem = treeItem;
+            break;
+        }
+    }
+    delete selectedItem;
+}
+
+#include "UIGuestControlWidget.moc"
Index: /trunk/src/VBox/Frontends/VirtualBox/src/runtime/information/guestctrl/UIGuestControlWidget.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/runtime/information/guestctrl/UIGuestControlWidget.h	(revision 71101)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/runtime/information/guestctrl/UIGuestControlWidget.h	(revision 71101)
@@ -0,0 +1,87 @@
+/* $Id$ */
+/** @file
+ * VBox Qt GUI - UIGuestControlWidget class declaration.
+ */
+
+/*
+ * Copyright (C) 2016-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 ___UIGuestControlWidget_h___
+#define ___UIGuestControlWidget_h___
+
+/* Qt includes: */
+#include <QWidget>
+
+/* COM includes: */
+#include "COMEnums.h"
+#include "CGuest.h"
+#include "CEventListener.h"
+
+/* GUI includes: */
+#include "UIMainEventListener.h"
+
+/* Forward declarations: */
+class QITreeWidget;
+class QVBoxLayout;
+class QSplitter;
+class UIGuestControlConsole;
+class UIGuestControlInterface;
+class UIGuestSessionsEventHandler;
+class UIGuestControlTreeWidget;
+
+/** QWidget extension
+  * providing GUI with guest session information and control tab in session-information window. */
+class UIGuestControlWidget : public QWidget
+{
+    Q_OBJECT;
+
+public:
+
+    UIGuestControlWidget(QWidget *pParent, const CGuest &comGuest);
+
+private slots:
+
+    void sltGuestSessionsUpdated();
+    void sltConsoleCommandEntered(const QString &strCommand);
+    void sltConsoleOutputReceived(const QString &strOutput);
+
+    void sltGuestSessionRegistered(CGuestSession guestSession);
+    void sltGuestSessionUnregistered(CGuestSession guestSession);
+    void sltGuestControlErrorText(QString strError);
+
+    void sltTreeItemUpdated();
+    void sltCloseSessionOrProcess();
+
+private:
+
+    void prepareObjects();
+    void prepareConnections();
+    void prepareListener();
+    void initGuestSessionTree();
+    void updateTreeWidget();
+    void cleanupListener();
+    void addGuestSession(CGuestSession guestSession);
+
+    CGuest                    m_comGuest;
+    QVBoxLayout              *m_pMainLayout;
+    QSplitter                *m_pSplitter;
+    UIGuestControlTreeWidget *m_pTreeWidget;
+    UIGuestControlConsole    *m_pConsole;
+    UIGuestControlInterface  *m_pControlInterface;
+
+    /** Holds the Qt event listener instance. */
+    ComObjPtr<UIMainEventListenerImpl> m_pQtListener;
+    /** Holds the COM event listener instance. */
+    CEventListener m_comEventListener;
+};
+
+#endif /* !___UIGuestControlWidget_h___ */
Index: unk/src/VBox/Frontends/VirtualBox/src/runtime/information/guestctrl/UIInformationGuestSession.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/runtime/information/guestctrl/UIInformationGuestSession.cpp	(revision 71100)
+++ 	(revision )
@@ -1,426 +1,0 @@
-/* $Id$ */
-/** @file
- * VBox Qt GUI - UIInformationGuestSession class implementation.
- */
-
-/*
- * Copyright (C) 2016-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 <QApplication>
-# include <QSplitter>
-# include <QVBoxLayout>
-
-
-/* GUI includes: */
-# include "QITreeWidget.h"
-# include "UIExtraDataManager.h"
-# include "UIGuestControlConsole.h"
-# include "UIGuestControlInterface.h"
-# include "UIGuestControlTreeItem.h"
-# include "UIInformationGuestSession.h"
-# include "UIVMInformationDialog.h"
-# include "VBoxGlobal.h"
-
-/* COM includes: */
-# include "CGuest.h"
-# include "CEventSource.h"
-
-#endif /* !VBOX_WITH_PRECOMPILED_HEADERS */
-
-class UIGuestControlTreeWidget : public QITreeWidget
-{
-
-    Q_OBJECT;
-
-signals:
-
-    void sigCloseSessionOrProcess();
-
-public:
-
-    UIGuestControlTreeWidget(QWidget *pParent = 0)
-        :QITreeWidget(pParent)
-    {
-        setSelectionMode(QAbstractItemView::SingleSelection);
-    }
-
-    UIGuestControlTreeItem *selectedItem()
-    {
-        QList<QTreeWidgetItem*> selectedList = selectedItems();
-        if (selectedList.isEmpty())
-            return 0;
-        UIGuestControlTreeItem *item =
-            dynamic_cast<UIGuestControlTreeItem*>(selectedList[0]);
-        /* Return the firstof the selected items */
-        return item;
-    }
-
-protected:
-
-    void contextMenuEvent(QContextMenuEvent *pEvent) /* override */
-    {
-        QMenu *menu = new QMenu(this);
-        QList<QTreeWidgetItem *> selectedList = selectedItems();
-
-        UIGuestSessionTreeItem *sessionTreeItem = 0;
-        if (!selectedList.isEmpty())
-            sessionTreeItem = dynamic_cast<UIGuestSessionTreeItem*>(selectedList[0]);
-        QAction *pSessionCloseAction = 0;
-
-        /* Create a guest session related context menu */
-        if (sessionTreeItem)
-        {
-            pSessionCloseAction = menu->addAction(UIVMInformationDialog::tr("Close Session"));
-            if (pSessionCloseAction)
-                connect(pSessionCloseAction, &QAction::triggered,
-                        this, &UIGuestControlTreeWidget::sigCloseSessionOrProcess);
-        }
-        UIGuestProcessTreeItem *processTreeItem = 0;
-        if (!selectedList.isEmpty())
-            processTreeItem = dynamic_cast<UIGuestProcessTreeItem*>(selectedList[0]);
-        QAction *pProcessTerminateAction = 0;
-        if (processTreeItem)
-        {
-            pProcessTerminateAction = menu->addAction(UIVMInformationDialog::tr("Terminate Process"));
-            if (pProcessTerminateAction)
-                connect(pProcessTerminateAction, &QAction::triggered,
-                        this, &UIGuestControlTreeWidget::sigCloseSessionOrProcess);
-        }
-        if (pProcessTerminateAction || pSessionCloseAction)
-            menu->addSeparator();
-        // Add actions to expand/collapse all tree items
-        QAction *pExpandAllAction = menu->addAction(UIVMInformationDialog::tr("Expand All"));
-        if (pExpandAllAction)
-            connect(pExpandAllAction, &QAction::triggered,
-                    this, &UIGuestControlTreeWidget::sltExpandAll);
-        QAction *pCollapseAllAction = menu->addAction(UIVMInformationDialog::tr("Collapse All"));
-        if (pCollapseAllAction)
-            connect(pCollapseAllAction, &QAction::triggered,
-                    this, &UIGuestControlTreeWidget::sltCollapseAll);
-
-        menu->exec(pEvent->globalPos());
-
-        if (pSessionCloseAction)
-            disconnect(pSessionCloseAction, &QAction::triggered,
-                       this, &UIGuestControlTreeWidget::sigCloseSessionOrProcess);
-        if (pProcessTerminateAction)
-            disconnect(pProcessTerminateAction, &QAction::triggered,
-                       this, &UIGuestControlTreeWidget::sigCloseSessionOrProcess);
-
-        if (pExpandAllAction)
-            disconnect(pExpandAllAction, &QAction::triggered,
-                    this, &UIGuestControlTreeWidget::sltExpandAll);
-
-        if (pCollapseAllAction)
-            disconnect(pCollapseAllAction, &QAction::triggered,
-                    this, &UIGuestControlTreeWidget::sltCollapseAll);
-
-        delete menu;
-    }
-
-private slots:
-
-    void sltExpandAll()
-    {
-        expandCollapseAll(true);
-    }
-
-    void sltCollapseAll()
-    {
-        expandCollapseAll(false);
-    }
-
-    void expandCollapseAll(bool bFlag)
-    {
-        for(int i = 0; i < topLevelItemCount(); ++i)
-        {
-            if (!topLevelItem(i))
-                break;
-            topLevelItem(i)->setExpanded(bFlag);
-            for (int j = 0; j < topLevelItem(i)->childCount(); ++j)
-            {
-                if (topLevelItem(i)->child(j))
-                {
-                    topLevelItem(i)->child(j)->setExpanded(bFlag);
-                }
-            }
-        }
-    }
-
-};
-
-UIInformationGuestSession::UIInformationGuestSession(QWidget *pParent, const CGuest &comGuest)
-    : QWidget(pParent)
-    , m_comGuest(comGuest)
-    , m_pMainLayout(0)
-    , m_pSplitter(0)
-    , m_pTreeWidget(0)
-    , m_pConsole(0)
-    , m_pControlInterface(0)
-    , m_pQtListener(0)
-{
-    prepareListener();
-    prepareObjects();
-    prepareConnections();
-    initGuestSessionTree();
-}
-
-void UIInformationGuestSession::prepareObjects()
-{
-    m_pControlInterface = new UIGuestControlInterface(this, m_comGuest);
-
-    /* Create layout: */
-    m_pMainLayout = new QVBoxLayout(this);
-    if (!m_pMainLayout)
-        return;
-
-    /* Configure layout: */
-    m_pMainLayout->setSpacing(0);
-
-    m_pSplitter = new QSplitter;
-
-    if (!m_pSplitter)
-        return;
-
-    m_pSplitter->setOrientation(Qt::Vertical);
-
-    m_pMainLayout->addWidget(m_pSplitter);
-
-
-    m_pTreeWidget = new UIGuestControlTreeWidget;
-
-    if (m_pTreeWidget)
-    {
-        m_pSplitter->addWidget(m_pTreeWidget);
-        m_pTreeWidget->setColumnCount(3);
-        QStringList labels;
-        labels << "" << "" << "";
-
-        m_pTreeWidget->setHeaderLabels(labels);
-    }
-    m_pConsole = new UIGuestControlConsole;
-    if (m_pConsole)
-    {
-        m_pSplitter->addWidget(m_pConsole);
-        setFocusProxy(m_pConsole);
-    }
-
-    m_pSplitter->setStretchFactor(0, 9);
-    m_pSplitter->setStretchFactor(1, 4);
-
-    updateTreeWidget();
-}
-
-void UIInformationGuestSession::updateTreeWidget()
-{
-    if (!m_pTreeWidget)
-        return;
-
-    m_pTreeWidget->clear();
-    QVector<QITreeWidgetItem> treeItemVector;
-    update();
-}
-
-void UIInformationGuestSession::prepareConnections()
-{
-    qRegisterMetaType<QVector<int> >();
-    connect(m_pControlInterface, &UIGuestControlInterface::sigOutputString,
-            this, &UIInformationGuestSession::sltConsoleOutputReceived);
-    connect(m_pConsole, &UIGuestControlConsole::commandEntered,
-            this, &UIInformationGuestSession::sltConsoleCommandEntered);
-
-    if (m_pTreeWidget)
-        connect(m_pTreeWidget, &UIGuestControlTreeWidget::sigCloseSessionOrProcess,
-                this, &UIInformationGuestSession::sltCloseSessionOrProcess);
-
-    if (m_pQtListener)
-    {
-        connect(m_pQtListener->getWrapped(), &UIMainEventListener::sigGuestSessionRegistered,
-                this, &UIInformationGuestSession::sltGuestSessionRegistered, Qt::DirectConnection);
-        connect(m_pQtListener->getWrapped(), &UIMainEventListener::sigGuestSessionUnregistered,
-                this, &UIInformationGuestSession::sltGuestSessionUnregistered, Qt::DirectConnection);
-    }
-}
-
-void UIInformationGuestSession::sltGuestSessionsUpdated()
-{
-    updateTreeWidget();
-}
-
-void UIInformationGuestSession::sltConsoleCommandEntered(const QString &strCommand)
-{
-    if (m_pControlInterface)
-    {
-        m_pControlInterface->putCommand(strCommand);
-    }
-}
-
-void UIInformationGuestSession::sltConsoleOutputReceived(const QString &strOutput)
-{
-    if (m_pConsole)
-    {
-        m_pConsole->putOutput(strOutput);
-    }
-}
-
-void UIInformationGuestSession::sltCloseSessionOrProcess()
-{
-    if (!m_pTreeWidget)
-        return;
-    UIGuestControlTreeItem *selectedTreeItem =
-        m_pTreeWidget->selectedItem();
-    if (!selectedTreeItem)
-        return;
-    UIGuestProcessTreeItem *processTreeItem =
-        dynamic_cast<UIGuestProcessTreeItem*>(selectedTreeItem);
-    if (processTreeItem)
-    {
-        CGuestProcess guestProcess = processTreeItem->guestProcess();
-        if (guestProcess.isOk())
-        {
-            guestProcess.Terminate();
-        }
-        return;
-    }
-    UIGuestSessionTreeItem *sessionTreeItem =
-        dynamic_cast<UIGuestSessionTreeItem*>(selectedTreeItem);
-    if (!sessionTreeItem)
-        return;
-    CGuestSession guestSession = sessionTreeItem->guestSession();
-    if (!guestSession.isOk())
-        return;
-    guestSession.Close();
-}
-
-void UIInformationGuestSession::prepareListener()
-{
-    /* Create event listener instance: */
-    m_pQtListener.createObject();
-    m_pQtListener->init(new UIMainEventListener, this);
-    m_comEventListener = CEventListener(m_pQtListener);
-
-    /* Get CProgress event source: */
-    CEventSource comEventSource = m_comGuest.GetEventSource();
-    AssertWrapperOk(comEventSource);
-
-    /* Enumerate all the required event-types: */
-    QVector<KVBoxEventType> eventTypes;
-    eventTypes << KVBoxEventType_OnGuestSessionRegistered;
-
-
-    /* Register event listener for CProgress event source: */
-    comEventSource.RegisterListener(m_comEventListener, eventTypes,
-        gEDataManager->eventHandlingType() == EventHandlingType_Active ? TRUE : FALSE);
-    AssertWrapperOk(comEventSource);
-
-    /* If event listener registered as passive one: */
-    if (gEDataManager->eventHandlingType() == EventHandlingType_Passive)
-    {
-        /* Register event sources in their listeners as well: */
-        m_pQtListener->getWrapped()->registerSource(comEventSource, m_comEventListener);
-    }
-}
-
-void UIInformationGuestSession::initGuestSessionTree()
-{
-    if (!m_comGuest.isOk())
-        return;
-
-    QVector<CGuestSession> sessions = m_comGuest.GetSessions();
-    for (int i = 0; i < sessions.size(); ++i)
-    {
-        addGuestSession(sessions.at(i));
-    }
-}
-
-void UIInformationGuestSession::cleanupListener()
-{
-    /* If event listener registered as passive one: */
-    if (gEDataManager->eventHandlingType() == EventHandlingType_Passive)
-    {
-        /* Unregister everything: */
-        m_pQtListener->getWrapped()->unregisterSources();
-    }
-
-    /* Make sure VBoxSVC is available: */
-    if (!vboxGlobal().isVBoxSVCAvailable())
-        return;
-
-    /* Get CProgress event source: */
-    CEventSource comEventSource = m_comGuest.GetEventSource();
-    AssertWrapperOk(comEventSource);
-
-    /* Unregister event listener for CProgress event source: */
-    comEventSource.UnregisterListener(m_comEventListener);
-}
-
-
-void UIInformationGuestSession::sltGuestSessionRegistered(CGuestSession guestSession)
-{
-    if (!guestSession.isOk())
-        return;
-    addGuestSession(guestSession);
-}
-
-void UIInformationGuestSession::addGuestSession(CGuestSession guestSession)
-{
-    UIGuestSessionTreeItem* sessionTreeItem = new UIGuestSessionTreeItem(m_pTreeWidget, guestSession);
-    connect(sessionTreeItem, &UIGuestSessionTreeItem::sigGuessSessionUpdated,
-            this, &UIInformationGuestSession::sltTreeItemUpdated);
-    connect(sessionTreeItem, &UIGuestSessionTreeItem::sigGuestSessionErrorText,
-            this, &UIInformationGuestSession::sltGuestControlErrorText);
-}
-
-void UIInformationGuestSession::sltGuestControlErrorText(QString strError)
-{
-    if (m_pConsole)
-    {
-        m_pConsole->putOutput(strError);
-    }
-}
-
-void UIInformationGuestSession::sltTreeItemUpdated()
-{
-    if (m_pTreeWidget)
-        m_pTreeWidget->update();
-}
-
-void UIInformationGuestSession::sltGuestSessionUnregistered(CGuestSession guestSession)
-{
-    if (!guestSession.isOk())
-        return;
-    if (!m_pTreeWidget)
-        return;
-
-    UIGuestSessionTreeItem *selectedItem = NULL;
-
-
-    for (int i = 0; i < m_pTreeWidget->topLevelItemCount(); ++i)
-    {
-        QTreeWidgetItem *item = m_pTreeWidget->topLevelItem( i );
-
-        UIGuestSessionTreeItem *treeItem = dynamic_cast<UIGuestSessionTreeItem*>(item);
-        if (treeItem && treeItem->guestSession() == guestSession)
-        {
-            selectedItem = treeItem;
-            break;
-        }
-    }
-    delete selectedItem;
-}
-
-#include "UIInformationGuestSession.moc"
Index: unk/src/VBox/Frontends/VirtualBox/src/runtime/information/guestctrl/UIInformationGuestSession.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/runtime/information/guestctrl/UIInformationGuestSession.h	(revision 71100)
+++ 	(revision )
@@ -1,87 +1,0 @@
-/* $Id$ */
-/** @file
- * VBox Qt GUI - UIInformationGuestSession class declaration.
- */
-
-/*
- * Copyright (C) 2016-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 ___UIInformationGuestSession_h___
-#define ___UIInformationGuestSession_h___
-
-/* Qt includes: */
-#include <QWidget>
-
-/* COM includes: */
-#include "COMEnums.h"
-#include "CGuest.h"
-#include "CEventListener.h"
-
-/* GUI includes: */
-#include "UIMainEventListener.h"
-
-/* Forward declarations: */
-class QITreeWidget;
-class QVBoxLayout;
-class QSplitter;
-class UIGuestControlConsole;
-class UIGuestControlInterface;
-class UIGuestSessionsEventHandler;
-class UIGuestControlTreeWidget;
-
-/** QWidget extension
-  * providing GUI with guest session information and control tab in session-information window. */
-class UIInformationGuestSession : public QWidget
-{
-    Q_OBJECT;
-
-public:
-
-    UIInformationGuestSession(QWidget *pParent, const CGuest &comGuest);
-
-private slots:
-
-    void sltGuestSessionsUpdated();
-    void sltConsoleCommandEntered(const QString &strCommand);
-    void sltConsoleOutputReceived(const QString &strOutput);
-
-    void sltGuestSessionRegistered(CGuestSession guestSession);
-    void sltGuestSessionUnregistered(CGuestSession guestSession);
-    void sltGuestControlErrorText(QString strError);
-
-    void sltTreeItemUpdated();
-    void sltCloseSessionOrProcess();
-
-private:
-
-    void prepareObjects();
-    void prepareConnections();
-    void prepareListener();
-    void initGuestSessionTree();
-    void updateTreeWidget();
-    void cleanupListener();
-    void addGuestSession(CGuestSession guestSession);
-
-    CGuest                    m_comGuest;
-    QVBoxLayout              *m_pMainLayout;
-    QSplitter                *m_pSplitter;
-    UIGuestControlTreeWidget *m_pTreeWidget;
-    UIGuestControlConsole    *m_pConsole;
-    UIGuestControlInterface  *m_pControlInterface;
-
-    /** Holds the Qt event listener instance. */
-    ComObjPtr<UIMainEventListenerImpl> m_pQtListener;
-    /** Holds the COM event listener instance. */
-    CEventListener m_comEventListener;
-};
-
-#endif /* !___UIInformationGuestSession_h___ */
