Index: trunk/src/VBox/Frontends/VirtualBox/src/VBoxLicenseViewer.cpp
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/VBoxLicenseViewer.cpp	(revision 34810)
+++ trunk/src/VBox/Frontends/VirtualBox/src/VBoxLicenseViewer.cpp	(revision 34811)
@@ -34,10 +34,9 @@
 #endif /* !VBOX_WITH_PRECOMPILED_HEADERS */
 
-VBoxLicenseViewer::VBoxLicenseViewer (const QString &aFilePath)
-    : QIWithRetranslateUI<QDialog> ()
-      , mFilePath (aFilePath)
-      , mLicenseText (0)
-      , mAgreeButton (0)
-      , mDisagreeButton (0)
+VBoxLicenseViewer::VBoxLicenseViewer()
+    : QIWithRetranslateUI<QDialog>()
+    , mLicenseText (0)
+    , mAgreeButton (0)
+    , mDisagreeButton (0)
 {
 #ifndef Q_WS_WIN
@@ -71,18 +70,24 @@
 }
 
-int VBoxLicenseViewer::exec()
+int VBoxLicenseViewer::showLicenseFromFile(const QString &strLicenseFileName)
 {
-    /* read & show the license file */
-    QFile file (mFilePath);
-    if (file.open (QIODevice::ReadOnly))
+    /* Read license file: */
+    QFile file(strLicenseFileName);
+    if (file.open(QIODevice::ReadOnly))
     {
-        mLicenseText->setText (file.readAll());
-        return QDialog::exec();
+        return showLicenseFromString(file.readAll());
     }
     else
     {
-        vboxProblem().cannotOpenLicenseFile (this, mFilePath);
+        vboxProblem().cannotOpenLicenseFile(this, strLicenseFileName);
         return QDialog::Rejected;
     }
+}
+
+int VBoxLicenseViewer::showLicenseFromString(const QString &strLicenseText)
+{
+    /* Set license text: */
+    mLicenseText->setText(strLicenseText);
+    return exec();
 }
 
@@ -93,4 +98,9 @@
     mAgreeButton->setText (tr ("I &Agree"));
     mDisagreeButton->setText (tr ("I &Disagree"));
+}
+
+int VBoxLicenseViewer::exec()
+{
+    return QDialog::exec();
 }
 
Index: trunk/src/VBox/Frontends/VirtualBox/src/VBoxLicenseViewer.h
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/VBoxLicenseViewer.h	(revision 34810)
+++ trunk/src/VBox/Frontends/VirtualBox/src/VBoxLicenseViewer.h	(revision 34811)
@@ -37,9 +37,8 @@
 public:
 
-    VBoxLicenseViewer (const QString &aFilePath);
+    VBoxLicenseViewer();
 
-public slots:
-
-    int exec();
+    int showLicenseFromFile(const QString &strLicenseFileName);
+    int showLicenseFromString(const QString &strLicenseText);
 
 protected:
@@ -48,4 +47,6 @@
 
 private slots:
+
+    int exec();
 
     void onScrollBarMoving (int aValue);
@@ -60,5 +61,4 @@
 
     /* Private member vars */
-    QString       mFilePath;
     QTextBrowser *mLicenseText;
     QPushButton  *mAgreeButton;
Index: trunk/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.cpp
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.cpp	(revision 34810)
+++ trunk/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.cpp	(revision 34811)
@@ -2137,6 +2137,6 @@
             return true;
 
-    VBoxLicenseViewer licenseDialog (latestFilePath);
-    bool result = licenseDialog.exec() == QDialog::Accepted;
+    VBoxLicenseViewer licenseDialog;
+    bool result = licenseDialog.showLicenseFromFile(latestFilePath) == QDialog::Accepted;
     if (result)
         virtualBox().SetExtraData (VBoxDefs::GUI_LicenseKey, (strList << latestVersion).join(","));
Index: trunk/src/VBox/Frontends/VirtualBox/src/settings/global/UIGlobalSettingsExtension.cpp
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/settings/global/UIGlobalSettingsExtension.cpp	(revision 34810)
+++ trunk/src/VBox/Frontends/VirtualBox/src/settings/global/UIGlobalSettingsExtension.cpp	(revision 34811)
@@ -27,4 +27,5 @@
 #include "VBoxGlobal.h"
 #include "VBoxProblemReporter.h"
+#include "VBoxLicenseViewer.h"
 
 /* Extension package item: */
@@ -129,18 +130,23 @@
         if (extPackFile.GetUsable())
         {
-            bool fAck = vboxProblem().confirmInstallingPackage(extPackFile.GetName(),
-                                                               QString("%1.%2").arg(extPackFile.GetVersion()).arg(extPackFile.GetRevision()),
-                                                               extPackFile.GetDescription());
-
-            if (fAck)
+            /* Ask user to confirm installation: */
+            QString strPackName = extPackFile.GetName();
+            QString strPackVersion = QString("%1.%2").arg(extPackFile.GetVersion()).arg(extPackFile.GetRevision());
+            QString strPackDescription = extPackFile.GetDescription();
+            if (vboxProblem().confirmInstallingPackage(strPackName, strPackVersion, strPackDescription))
             {
-                /* TODO: Display license! */
-
-                /* Install package: */
-                extPackFile.Install();
-                if (extPackFile.isOk())
-                    fInstalled = true;
-                else
-                    vboxProblem().cannotInstallExtPack(strFilePath, extPackFile, pParent);
+                /* Display license if necessary: */
+                bool fShouldBeLicenseShown = extPackFile.GetShowLicense();
+                QString strLicense = extPackFile.GetLicense();
+                VBoxLicenseViewer licenseViewer;
+                if (!fShouldBeLicenseShown || licenseViewer.showLicenseFromString(strLicense) == QDialog::Accepted)
+                {
+                    /* Install package: */
+                    extPackFile.Install();
+                    if (extPackFile.isOk())
+                        fInstalled = true;
+                    else
+                        vboxProblem().cannotInstallExtPack(strFilePath, extPackFile, pParent);
+                }
             }
         }
