Index: trunk/src/VBox/Frontends/VirtualBox/src/net/UIUpdateManager.cpp
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/net/UIUpdateManager.cpp	(revision 71447)
+++ trunk/src/VBox/Frontends/VirtualBox/src/net/UIUpdateManager.cpp	(revision 71448)
@@ -30,8 +30,8 @@
 # include "QIProcess.h"
 # include "VBoxGlobal.h"
+# include "VBoxLicenseViewer.h"
 # include "VBoxUtils.h"
 # include "UIDownloaderExtensionPack.h"
 # include "UIExtraDataManager.h"
-# include "UIGlobalSettingsExtension.h"
 # include "UIMessageCenter.h"
 # include "UIModalWindowManager.h"
@@ -44,5 +44,7 @@
 /* COM includes: */
 # include "CExtPack.h"
+# include "CExtPackFile.h"
 # include "CExtPackManager.h"
+# include "CSystemProperties.h"
 
 /* Other VBox includes: */
@@ -490,5 +492,5 @@
     /* Warn the user about extension pack was downloaded and saved, propose to install it: */
     if (msgCenter().proposeInstallExtentionPack(GUI_ExtPackName, strSource, QDir::toNativeSeparators(strTarget)))
-        UIGlobalSettingsExtension::doInstallation(strTarget, strDigest, windowManager().networkManagerOrMainWindowShown(), 0);
+        UIUpdateManager::doExtPackInstallation(strTarget, strDigest, windowManager().networkManagerOrMainWindowShown(), NULL);
     /* Propose to delete the downloaded extension pack: */
     if (msgCenter().proposeDeleteExtentionPack(QDir::toNativeSeparators(strTarget)))
@@ -570,4 +572,92 @@
 }
 
+/* static */
+void UIUpdateManager::doExtPackInstallation(QString const &strFilePath, QString const &strDigest,
+                                            QWidget *pParent, QString *pstrExtPackName)
+{
+    /* Open the extpack tarball via IExtPackManager: */
+    CExtPackManager comManager = vboxGlobal().virtualBox().GetExtensionPackManager();
+    CExtPackFile comExtPackFile;
+    if (strDigest.isEmpty())
+        comExtPackFile = comManager.OpenExtPackFile(strFilePath);
+    else
+    {
+        QString strFileAndHash = QString("%1::SHA-256=%2").arg(strFilePath).arg(strDigest);
+        comExtPackFile = comManager.OpenExtPackFile(strFileAndHash);
+    }
+    if (!comManager.isOk())
+    {
+        msgCenter().cannotOpenExtPack(strFilePath, comManager, pParent);
+        return;
+    }
+
+    if (!comExtPackFile.GetUsable())
+    {
+        msgCenter().warnAboutBadExtPackFile(strFilePath, comExtPackFile, pParent);
+        return;
+    }
+
+    const QString strPackName = comExtPackFile.GetName();
+    const QString strPackDescription = comExtPackFile.GetDescription();
+    const QString strPackVersion = QString("%1r%2%3").arg(comExtPackFile.GetVersion()).arg(comExtPackFile.GetRevision()).arg(comExtPackFile.GetEdition());
+
+    /* Check if there is a version of the extension pack already
+     * installed on the system and let the user decide what to do about it. */
+    CExtPack comExtPackCur = comManager.Find(strPackName);
+    bool fReplaceIt = comExtPackCur.isOk();
+    if (fReplaceIt)
+    {
+        QString strPackVersionCur = QString("%1r%2%3").arg(comExtPackCur.GetVersion()).arg(comExtPackCur.GetRevision()).arg(comExtPackCur.GetEdition());
+        if (!msgCenter().confirmReplaceExtensionPack(strPackName, strPackVersion, strPackVersionCur, strPackDescription, pParent))
+            return;
+    }
+    /* If it's a new package just ask for general confirmation. */
+    else
+    {
+        if (!msgCenter().confirmInstallExtensionPack(strPackName, strPackVersion, strPackDescription, pParent))
+            return;
+    }
+
+    /* Display the license dialog if required by the extension pack. */
+    if (comExtPackFile.GetShowLicense())
+    {
+        QString strLicense = comExtPackFile.GetLicense();
+        VBoxLicenseViewer licenseViewer(pParent);
+        if (licenseViewer.showLicenseFromString(strLicense) != QDialog::Accepted)
+            return;
+    }
+
+    /* Install the selected package.
+     * Set the package name return value before doing
+     * this as the caller should do a refresh even on failure. */
+    QString strDisplayInfo;
+#ifdef VBOX_WS_WIN
+    if (pParent)
+        strDisplayInfo.sprintf("hwnd=%#llx", (uint64_t)(uintptr_t)pParent->winId());
+#endif
+    /* Prepare installation progress: */
+    CProgress comProgress = comExtPackFile.Install(fReplaceIt, strDisplayInfo);
+    if (comExtPackFile.isOk())
+    {
+        /* Show installation progress: */
+        /** @todo move this tr into UIUpdateManager context */
+        msgCenter().showModalProgressDialog(comProgress, QApplication::translate("UIGlobalSettingsExtension",
+                                                                              "Extensions"),
+                                            ":/progress_install_guest_additions_90px.png", pParent);
+        if (!comProgress.GetCanceled())
+        {
+            if (comProgress.isOk() && comProgress.GetResultCode() == 0)
+                msgCenter().warnAboutExtPackInstalled(strPackName, pParent);
+            else
+                msgCenter().cannotInstallExtPack(comProgress, strFilePath, pParent);
+        }
+    }
+    else
+        msgCenter().cannotInstallExtPack(comExtPackFile, strFilePath, pParent);
+
+    if (pstrExtPackName)
+        *pstrExtPackName = strPackName;
+}
+
 void UIUpdateManager::sltForceCheck()
 {
Index: trunk/src/VBox/Frontends/VirtualBox/src/net/UIUpdateManager.h
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/net/UIUpdateManager.h	(revision 71447)
+++ trunk/src/VBox/Frontends/VirtualBox/src/net/UIUpdateManager.h	(revision 71448)
@@ -45,4 +45,14 @@
     static UIUpdateManager *instance() { return s_pInstance; }
 
+    /** Initiates the extension pack installation process.
+      * @param  strFilePath      Brings the extension pack file path.
+      * @param  strDigest        Brings the extension pack file digest.
+      * @param  pParent          Brings the parent dialog reference.
+      * @param  pstrExtPackName  Brings the extension pack name. */
+    static void doExtPackInstallation(QString const &strFilePath,
+                                      QString const &strDigest,
+                                      QWidget *pParent,
+                                      QString *pstrExtPackName);
+
 public slots:
 
Index: trunk/src/VBox/Frontends/VirtualBox/src/settings/global/UIGlobalSettingsExtension.cpp
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/settings/global/UIGlobalSettingsExtension.cpp	(revision 71447)
+++ trunk/src/VBox/Frontends/VirtualBox/src/settings/global/UIGlobalSettingsExtension.cpp	(revision 71448)
@@ -26,13 +26,12 @@
 /* GUI includes: */
 # include "QIFileDialog.h"
+# include "VBoxGlobal.h"
 # include "UIGlobalSettingsExtension.h"
 # include "UIIconPool.h"
 # include "UIMessageCenter.h"
-# include "VBoxGlobal.h"
-# include "VBoxLicenseViewer.h"
+# include "UIUpdateManager.h"
 
 /* COM includes: */
 # include "CExtPack.h"
-# include "CExtPackFile.h"
 # include "CExtPackManager.h"
 
@@ -185,89 +184,4 @@
 }
 
-/* static */
-void UIGlobalSettingsExtension::doInstallation(QString const &strFilePath, QString const &strDigest,
-                                               QWidget *pParent, QString *pstrExtPackName)
-{
-    /* Open the extpack tarball via IExtPackManager: */
-    CExtPackManager manager = vboxGlobal().virtualBox().GetExtensionPackManager();
-    CExtPackFile extPackFile;
-    if (strDigest.isEmpty())
-        extPackFile = manager.OpenExtPackFile(strFilePath);
-    else
-    {
-        QString strFileAndHash = QString("%1::SHA-256=%2").arg(strFilePath).arg(strDigest);
-        extPackFile = manager.OpenExtPackFile(strFileAndHash);
-    }
-    if (!manager.isOk())
-    {
-        msgCenter().cannotOpenExtPack(strFilePath, manager, pParent);
-        return;
-    }
-
-    if (!extPackFile.GetUsable())
-    {
-        msgCenter().warnAboutBadExtPackFile(strFilePath, extPackFile, pParent);
-        return;
-    }
-
-    const QString strPackName = extPackFile.GetName();
-    const QString strPackDescription = extPackFile.GetDescription();
-    const QString strPackVersion = QString("%1r%2%3").arg(extPackFile.GetVersion()).arg(extPackFile.GetRevision()).arg(extPackFile.GetEdition());
-
-    /* Check if there is a version of the extension pack already
-     * installed on the system and let the user decide what to do about it. */
-    CExtPack extPackCur = manager.Find(strPackName);
-    bool fReplaceIt = extPackCur.isOk();
-    if (fReplaceIt)
-    {
-        QString strPackVersionCur = QString("%1r%2%3").arg(extPackCur.GetVersion()).arg(extPackCur.GetRevision()).arg(extPackCur.GetEdition());
-        if (!msgCenter().confirmReplaceExtensionPack(strPackName, strPackVersion, strPackVersionCur, strPackDescription, pParent))
-            return;
-    }
-    /* If it's a new package just ask for general confirmation. */
-    else
-    {
-        if (!msgCenter().confirmInstallExtensionPack(strPackName, strPackVersion, strPackDescription, pParent))
-            return;
-    }
-
-    /* Display the license dialog if required by the extension pack. */
-    if (extPackFile.GetShowLicense())
-    {
-        QString strLicense = extPackFile.GetLicense();
-        VBoxLicenseViewer licenseViewer(pParent);
-        if (licenseViewer.showLicenseFromString(strLicense) != QDialog::Accepted)
-            return;
-    }
-
-    /* Install the selected package.
-     * Set the package name return value before doing
-     * this as the caller should do a refresh even on failure. */
-    QString displayInfo;
-#ifdef VBOX_WS_WIN
-    if (pParent)
-        displayInfo.sprintf("hwnd=%#llx", (uint64_t)(uintptr_t)pParent->winId());
-#endif
-    /* Prepare installation progress: */
-    CProgress progress = extPackFile.Install(fReplaceIt, displayInfo);
-    if (extPackFile.isOk())
-    {
-        /* Show installation progress: */
-        msgCenter().showModalProgressDialog(progress, tr("Extensions"), ":/progress_install_guest_additions_90px.png", pParent);
-        if (!progress.GetCanceled())
-        {
-            if (progress.isOk() && progress.GetResultCode() == 0)
-                msgCenter().warnAboutExtPackInstalled(strPackName, pParent);
-            else
-                msgCenter().cannotInstallExtPack(progress, strFilePath, pParent);
-        }
-    }
-    else
-        msgCenter().cannotInstallExtPack(extPackFile, strFilePath, pParent);
-
-    if (pstrExtPackName)
-        *pstrExtPackName = strPackName;
-}
-
 void UIGlobalSettingsExtension::loadToCacheFrom(QVariant &data)
 {
@@ -394,5 +308,5 @@
     {
         QString strExtPackName;
-        doInstallation(strFilePath, QString(), this, &strExtPackName);
+        UIUpdateManager::doExtPackInstallation(strFilePath, QString(), this, &strExtPackName);
 
         /* Since we might be reinstalling an existing package, we have to
Index: trunk/src/VBox/Frontends/VirtualBox/src/settings/global/UIGlobalSettingsExtension.h
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/settings/global/UIGlobalSettingsExtension.h	(revision 71447)
+++ trunk/src/VBox/Frontends/VirtualBox/src/settings/global/UIGlobalSettingsExtension.h	(revision 71448)
@@ -41,11 +41,4 @@
     /** Destructs Extension settings page. */
     ~UIGlobalSettingsExtension();
-
-    /** Initiates the extension pack installation process.
-      * @param  strFilePath      Brings the extension pack file path.
-      * @param  strDigest        Brings the extension pack file digest.
-      * @param  pParent          Brings the parent dialog reference.
-      * @param  pstrExtPackName  Brings the extension pack name. */
-    static void doInstallation(QString const &strFilePath, QString const &strDigest, QWidget *pParent, QString *pstrExtPackName);
 
 protected:
