Index: trunk/src/VBox/Frontends/VirtualBox/Makefile.kmk
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/Makefile.kmk	(revision 71490)
+++ trunk/src/VBox/Frontends/VirtualBox/Makefile.kmk	(revision 71505)
@@ -599,5 +599,5 @@
 	src/runtime/guestctrl/UIGuestControlFileManager.cpp \
 	src/runtime/guestctrl/UIGuestControlFileTable.cpp \
-	src/runtime/guestctrl/UIGuestControlWidget.cpp \
+	src/runtime/guestctrl/UIHostFileTable.cpp \
 	src/selector/UIActionPoolSelector.cpp \
 	src/selector/UIDesktopPane.cpp \
Index: trunk/src/VBox/Frontends/VirtualBox/src/runtime/guestctrl/UIGuestControlFileManager.cpp
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/runtime/guestctrl/UIGuestControlFileManager.cpp	(revision 71490)
+++ trunk/src/VBox/Frontends/VirtualBox/src/runtime/guestctrl/UIGuestControlFileManager.cpp	(revision 71505)
@@ -348,5 +348,5 @@
         m_pMainLayout->addWidget(m_pVerticalSplitter);
         m_pVerticalSplitter->setOrientation(Qt::Vertical);
-        m_pVerticalSplitter->setHandleWidth(2);
+        m_pVerticalSplitter->setHandleWidth(4);
     }
 
Index: trunk/src/VBox/Frontends/VirtualBox/src/runtime/guestctrl/UIGuestControlFileTable.cpp
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/runtime/guestctrl/UIGuestControlFileTable.cpp	(revision 71490)
+++ trunk/src/VBox/Frontends/VirtualBox/src/runtime/guestctrl/UIGuestControlFileTable.cpp	(revision 71505)
@@ -128,26 +128,4 @@
 };
 
-/*********************************************************************************************************************************
-*   UIPropertiesDialog definition.                                                                                          *
-*********************************************************************************************************************************/
-
-/** A QIDialog child to display properties of a file object */
-class UIPropertiesDialog : public QIDialog
-{
-
-    Q_OBJECT;
-
-public:
-
-    UIPropertiesDialog(QWidget *pParent = 0, Qt::WindowFlags flags = 0);
-    void setPropertyText(const QString &strProperty);
-
-private:
-
-    QVBoxLayout    *m_pMainLayout;
-    QTextEdit *m_pInfoEdit;
-
-};
-
 
 /*********************************************************************************************************************************
@@ -452,8 +430,33 @@
     if (!m_pInfoEdit)
         return;
-
-    m_pInfoEdit->setText(strProperty);
-}
-
+    m_strProperty = strProperty;
+    m_pInfoEdit->setHtml(strProperty);
+}
+
+void UIPropertiesDialog::addDirectoryStatistics(UIDirectoryStatistics directoryStatistics)
+{
+    if (!m_pInfoEdit)
+        return;
+    // QString propertyString = m_pInfoEdit->toHtml();
+    // propertyString += "<b>Total Size:</b> " + QString::number(directoryStatistics.m_totalSize) + QString(" bytes");
+    // if (directoryStatistics.m_totalSize >= UIGuestControlFileTable::m_iKiloByte)
+    //     propertyString += " (" + UIGuestControlFileTable::humanReadableSize(directoryStatistics.m_totalSize) + ")";
+    // propertyString += "<br/>";
+    // propertyString += "<b>File Count:</b> " + QString::number(directoryStatistics.m_uFileCount);
+
+    // m_pInfoEdit->setHtml(propertyString);
+
+    QString detailsString(m_strProperty);
+    detailsString += "<br/>";
+    detailsString += "<b>Total Size:</b> " + QString::number(directoryStatistics.m_totalSize) + QString(" bytes");
+    if (directoryStatistics.m_totalSize >= UIGuestControlFileTable::m_iKiloByte)
+        detailsString += " (" + UIGuestControlFileTable::humanReadableSize(directoryStatistics.m_totalSize) + ")";
+    detailsString += "<br/>";
+
+    detailsString += "<b>File Count:</b> " + QString::number(directoryStatistics.m_uFileCount);
+
+    m_pInfoEdit->setHtml(detailsString);
+
+}
 
 /*********************************************************************************************************************************
@@ -635,5 +638,5 @@
 *   UIGuestControlFileTable implementation.                                                                                      *
 *********************************************************************************************************************************/
-
+const unsigned UIGuestControlFileTable::m_iKiloByte = 1000;
 UIGuestControlFileTable::UIGuestControlFileTable(QWidget *pParent /* = 0 */)
     :QIWithRetranslateUI<QWidget>(pParent)
@@ -642,5 +645,4 @@
     , m_pModel(0)
     , m_pLocationLabel(0)
-    , m_iKiloByte(1000)
     , m_pCopy(0)
     , m_pCut(0)
@@ -1135,14 +1137,5 @@
 void UIGuestControlFileTable::sltShowProperties()
 {
-    QString fsPropertyString = fsObjectPropertyString();
-    if (fsPropertyString.isEmpty())
-        return;
-
-    UIPropertiesDialog *dialog = new UIPropertiesDialog();
-    if (!dialog)
-        return;
-    dialog->setWindowTitle("Properties");
-    dialog->setPropertyText(fsPropertyString);
-    dialog->execute();
+    showProperties();
 }
 
@@ -1381,5 +1374,5 @@
 }
 
-QString UIGuestControlFileTable::humanReadableSize(ULONG64 size)
+/* static */ QString UIGuestControlFileTable::humanReadableSize(ULONG64 size)
 {
     int i = 0;
Index: trunk/src/VBox/Frontends/VirtualBox/src/runtime/guestctrl/UIGuestControlFileTable.h
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/runtime/guestctrl/UIGuestControlFileTable.h	(revision 71490)
+++ trunk/src/VBox/Frontends/VirtualBox/src/runtime/guestctrl/UIGuestControlFileTable.h	(revision 71505)
@@ -27,4 +27,5 @@
 
 /* GUI includes: */
+#include "QIDialog.h"
 #include "QITableView.h"
 #include "QIWithRetranslateUI.h"
@@ -33,7 +34,10 @@
 class QAction;
 class QFileInfo;
+
 class QILabel;
 class QILineEdit;
 class QGridLayout;
+class QTextEdit;
+class QVBoxLayout;
 class UIFileTableItem;
 class UIGuestControlFileModel;
@@ -49,4 +53,35 @@
     FileObjectType_Unknown,
     FileObjectType_Max
+};
+
+class UIDirectoryStatistics
+{
+public:
+    UIDirectoryStatistics();
+    ULONG64    m_totalSize;
+    unsigned   m_uFileCount;
+    unsigned   m_uDirectoryCount;
+    unsigned   m_uSymlinkCount;
+};
+
+Q_DECLARE_METATYPE(UIDirectoryStatistics);
+
+/** A QIDialog child to display properties of a file object */
+class UIPropertiesDialog : public QIDialog
+{
+
+    Q_OBJECT;
+
+public:
+
+    UIPropertiesDialog(QWidget *pParent = 0, Qt::WindowFlags flags = 0);
+    void setPropertyText(const QString &strProperty);
+    void addDirectoryStatistics(UIDirectoryStatistics statictics);
+
+private:
+
+    QVBoxLayout    *m_pMainLayout;
+    QTextEdit *m_pInfoEdit;
+    QString   m_strProperty;
 };
 
@@ -144,13 +179,4 @@
 };
 
-class UIDirectoryStatistics
-{
-public:
-    UIDirectoryStatistics();
-    ULONG64    m_totalSize;
-    unsigned   m_uFileCount;
-    unsigned   m_uDirectoryCount;
-    unsigned   m_uSymlinkCount;
-};
 
 /** This class serves a base class for file table. Currently a guest version
@@ -178,4 +204,8 @@
     QStringList selectedItemPathList();
     virtual void refresh();
+
+    static const unsigned    m_iKiloByte;
+    static QString humanReadableSize(ULONG64 size);
+
 
 protected:
@@ -193,4 +223,5 @@
     virtual bool createDirectory(const QString &path, const QString &directoryName) = 0;
     virtual QString fsObjectPropertyString() = 0;
+    virtual void  showProperties() = 0;
     static QString fileTypeString(FileObjectType type);
     void             goIntoDirectory(const QModelIndex &itemIndex);
@@ -202,5 +233,4 @@
     void keyPressEvent(QKeyEvent * pEvent);
     CGuestFsObjInfo guestFsObjectInfo(const QString& path, CGuestSession &comGuestSession) const;
-    QString humanReadableSize(ULONG64 size);
 
     UIFileTableItem         *m_pRootItem;
@@ -209,5 +239,4 @@
     UIGuestControlFileModel *m_pModel;
     QILabel                 *m_pLocationLabel;
-    const unsigned           m_iKiloByte;
     QAction                 *m_pCopy;
     QAction                 *m_pCut;
Index: trunk/src/VBox/Frontends/VirtualBox/src/runtime/guestctrl/UIGuestFileTable.cpp
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/runtime/guestctrl/UIGuestFileTable.cpp	(revision 71490)
+++ trunk/src/VBox/Frontends/VirtualBox/src/runtime/guestctrl/UIGuestFileTable.cpp	(revision 71505)
@@ -329,2 +329,17 @@
     return QString();
 }
+
+void UIGuestFileTable::showProperties()
+{
+    QString fsPropertyString = fsObjectPropertyString();
+    if (fsPropertyString.isEmpty())
+        return;
+
+    UIPropertiesDialog *dialog = new UIPropertiesDialog();
+    if (!dialog)
+        return;
+    dialog->setWindowTitle("Properties");
+    dialog->setPropertyText(fsPropertyString);
+    dialog->execute();
+    delete dialog;
+}
Index: trunk/src/VBox/Frontends/VirtualBox/src/runtime/guestctrl/UIGuestFileTable.h
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/runtime/guestctrl/UIGuestFileTable.h	(revision 71490)
+++ trunk/src/VBox/Frontends/VirtualBox/src/runtime/guestctrl/UIGuestFileTable.h	(revision 71505)
@@ -48,5 +48,5 @@
     virtual bool createDirectory(const QString &path, const QString &directoryName);
     virtual QString fsObjectPropertyString() /* override */;
-
+    virtual void  showProperties() /* override */;
 private:
 
Index: trunk/src/VBox/Frontends/VirtualBox/src/runtime/guestctrl/UIHostFileTable.cpp
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/runtime/guestctrl/UIHostFileTable.cpp	(revision 71490)
+++ trunk/src/VBox/Frontends/VirtualBox/src/runtime/guestctrl/UIHostFileTable.cpp	(revision 71505)
@@ -24,4 +24,6 @@
 # include <QDateTime>
 # include <QDir>
+# include <QMutex>
+# include <QThread>
 
 /* GUI includes: */
@@ -32,6 +34,98 @@
 
 
+/*********************************************************************************************************************************
+*   UIHostDirectoryDiskUsageComputer definition.                                                                                 *
+*********************************************************************************************************************************/
+
+/** Open directories recursively and sum the disk usage. Don't block the GUI thread while doing this */
+class UIHostDirectoryDiskUsageComputer : public QThread
+{
+    Q_OBJECT;
+
+signals:
+
+    void sigResultUpdated(UIDirectoryStatistics, QString);
+
+public:
+
+    UIHostDirectoryDiskUsageComputer(QObject *parent, QString strStartPath);
+    void stopRecursion();
+
+private:
+
+    /** Read the directory with the path @p path recursively and collect #of objects and
+        total size */
+    void directoryStatisticsRecursive(const QString &path, UIDirectoryStatistics &statistics);
+    void                  run();
+    QString               m_strStartPath;
+    UIDirectoryStatistics m_resultStatistics;
+    bool                  m_bContinueRunning;
+    QMutex                m_mutex;
+};
+
+
+/*********************************************************************************************************************************
+*   UIHostDirectoryDiskUsageComputer implementation.                                                                             *
+*********************************************************************************************************************************/
+
+UIHostDirectoryDiskUsageComputer::UIHostDirectoryDiskUsageComputer(QObject *parent, QString strStartPath)
+    :QThread(parent)
+    , m_strStartPath(strStartPath)
+    , m_bContinueRunning(true)
+{
+}
+
+void UIHostDirectoryDiskUsageComputer::run()
+{
+    directoryStatisticsRecursive(m_strStartPath, m_resultStatistics);
+}
+
+/** @todo Move the following function to a worker thread as it may take atbitrarly long time */
+void UIHostDirectoryDiskUsageComputer::directoryStatisticsRecursive(const QString &path, UIDirectoryStatistics &statistics)
+{
+    QDir dir(path);
+    if (!dir.exists())
+        return;
+
+    if (!m_bContinueRunning)
+        return;
+
+    sigResultUpdated(statistics, path);
+
+    QFileInfoList entryList = dir.entryInfoList();
+    for (int i = 0; i < entryList.size(); ++i)
+    {
+        const QFileInfo &entryInfo = entryList.at(i);
+        if (entryInfo.baseName().isEmpty() || entryInfo.baseName() == "." || entryInfo.baseName() == "..")
+            continue;
+        statistics.m_totalSize += entryInfo.size();
+        if (entryInfo.isSymLink())
+            statistics.m_uSymlinkCount++;
+        else if(entryInfo.isFile())
+            statistics.m_uFileCount++;
+        else if (entryInfo.isDir())
+        {
+            statistics.m_uDirectoryCount++;
+            directoryStatisticsRecursive(entryInfo.absoluteFilePath(), statistics);
+        }
+    }
+}
+
+void UIHostDirectoryDiskUsageComputer::stopRecursion()
+{
+    m_mutex.lock();
+    m_bContinueRunning = false;
+    m_mutex.unlock();
+
+}
+
+
+/*********************************************************************************************************************************
+*   UIHostFileTable implementation.                                                                                              *
+*********************************************************************************************************************************/
+
 UIHostFileTable::UIHostFileTable(QWidget *pParent /* = 0 */)
     :UIGuestControlFileTable(pParent)
+    , m_pPropertiesDialog(0)
 {
     initializeFileTree();
@@ -219,16 +313,15 @@
         propertyString += "<b>Owner:</b> " + fileInfo.owner();
 
-        if (fileInfo.isDir())
-        {
-            propertyString += "<br/>";
-            UIDirectoryStatistics directoryStatistics;
-            directoryStatisticsRecursive(fileInfo.absoluteFilePath(), directoryStatistics);
-            propertyString += "<b>Total Size:</b> " + QString::number(directoryStatistics.m_totalSize) + QString(" bytes");
-            if (directoryStatistics.m_totalSize >= m_iKiloByte)
-                propertyString += " (" + humanReadableSize(directoryStatistics.m_totalSize) + ")";
-            propertyString += "<br/>";
-            propertyString += "<b>File Count:</b> " + QString::number(directoryStatistics.m_uFileCount);
-
-        }
+        // if (fileInfo.isDir())
+        // {
+        //     propertyString += "<br/>";
+        //     UIDirectoryStatistics directoryStatistics;
+        //     directoryStatisticsRecursive(fileInfo.absoluteFilePath(), directoryStatistics);
+        //     propertyString += "<b>Total Size:</b> " + QString::number(directoryStatistics.m_totalSize) + QString(" bytes");
+        //     if (directoryStatistics.m_totalSize >= m_iKiloByte)
+        //         propertyString += " (" + humanReadableSize(directoryStatistics.m_totalSize) + ")";
+        //     propertyString += "<br/>";
+        //     propertyString += "<b>File Count:</b> " + QString::number(directoryStatistics.m_uFileCount);
+        // }
         return propertyString;
     }
@@ -236,27 +329,57 @@
 }
 
-/** @todo Move the following function to a worker thread as it may take atbitrarly long time */
-void UIHostFileTable::directoryStatisticsRecursive(const QString &path, UIDirectoryStatistics &statistics)
-{
-    QDir dir(path);
-    if (!dir.exists())
-        return;
-
-    QFileInfoList entryList = dir.entryInfoList();
-    for (int i = 0; i < entryList.size(); ++i)
-    {
-        const QFileInfo &entryInfo = entryList.at(i);
-        if (entryInfo.baseName().isEmpty() || entryInfo.baseName() == "." || entryInfo.baseName() == "..")
-            continue;
-        statistics.m_totalSize += entryInfo.size();
-        if (entryInfo.isSymLink())
-            statistics.m_uSymlinkCount++;
-        else if(entryInfo.isFile())
-            statistics.m_uFileCount++;
-        else if (entryInfo.isDir())
-        {
-            statistics.m_uDirectoryCount++;
-            directoryStatisticsRecursive(entryInfo.absoluteFilePath(), statistics);
-        }
-    }
-}
+void  UIHostFileTable::showProperties()
+{
+    qRegisterMetaType<UIDirectoryStatistics>();
+    QString fsPropertyString = fsObjectPropertyString();
+    if (fsPropertyString.isEmpty())
+        return;
+
+    m_pPropertiesDialog = new UIPropertiesDialog();
+    if (!m_pPropertiesDialog)
+        return;
+
+    UIHostDirectoryDiskUsageComputer *directoryThread = 0;
+
+    QStringList selectedObjects = selectedItemPathList();
+    if (selectedObjects.size() == 1)
+    {
+        QFileInfo fileInfo(selectedObjects.at(0));
+        if (fileInfo.exists() && fileInfo.isDir())
+        {
+            directoryThread = new UIHostDirectoryDiskUsageComputer(this, fileInfo.absoluteFilePath());
+            if (directoryThread)
+            {
+                connect(directoryThread, &UIHostDirectoryDiskUsageComputer::sigResultUpdated,
+                        this, &UIHostFileTable::sltReceiveDirectoryStatistics/*, Qt::DirectConnection*/);
+                directoryThread->start();
+            }
+
+        }
+    }
+    m_pPropertiesDialog->setWindowTitle("Properties");
+    m_pPropertiesDialog->setPropertyText(fsPropertyString);
+    m_pPropertiesDialog->execute();
+    if (directoryThread)
+    {
+        if (directoryThread->isRunning())
+        {
+            directoryThread->stopRecursion();
+            //directoryThread->wait();
+        }
+        disconnect(directoryThread, &UIHostDirectoryDiskUsageComputer::sigResultUpdated,
+                this, &UIHostFileTable::sltReceiveDirectoryStatistics/*, Qt::DirectConnection*/);
+        //delete directoryThread;
+    }
+    delete m_pPropertiesDialog;
+    m_pPropertiesDialog = 0;
+}
+
+void UIHostFileTable::sltReceiveDirectoryStatistics(UIDirectoryStatistics statistics, QString path)
+{
+    if (!m_pPropertiesDialog)
+        return;
+    m_pPropertiesDialog->addDirectoryStatistics(statistics);
+}
+
+#include "UIHostFileTable.moc"
Index: trunk/src/VBox/Frontends/VirtualBox/src/runtime/guestctrl/UIHostFileTable.h
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/runtime/guestctrl/UIHostFileTable.h	(revision 71490)
+++ trunk/src/VBox/Frontends/VirtualBox/src/runtime/guestctrl/UIHostFileTable.h	(revision 71505)
@@ -42,12 +42,15 @@
     virtual bool createDirectory(const QString &path, const QString &directoryName);
     virtual QString fsObjectPropertyString() /* override */;
+    virtual void  showProperties() /* override */;
+
+private slots:
+
+    void sltReceiveDirectoryStatistics(UIDirectoryStatistics statictics, QString path);
 
 private:
 
-    /** Read the directory with the path @p path recursively and collect #of objects and
-        total size */
-    void directoryStatisticsRecursive(const QString &path, UIDirectoryStatistics &statistics);
     void prepareActions();
 
+    UIPropertiesDialog *m_pPropertiesDialog;
 };
 
