Index: /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIMessageCenter.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIMessageCenter.cpp	(revision 45367)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIMessageCenter.cpp	(revision 45368)
@@ -86,5 +86,5 @@
 int UIMessageCenter::message(QWidget *pParent, MessageType type,
                              const QString &strMessage,
-                             const QString &strDetails /* = QString() */,
+                             const QString &strDetails,
                              const char *pcszAutoConfirmId /*= 0*/,
                              int iButton1 /*= 0*/,
@@ -116,7 +116,40 @@
 }
 
-int UIMessageCenter::message(QWidget *pParent, MessageType type,
+void UIMessageCenter::error(QWidget *pParent, MessageType type,
+                           const QString &strMessage,
+                           const QString &strDetails,
+                           const char *pcszAutoConfirmId /*= 0*/) const
+{
+    message(pParent, type, strMessage, strDetails, pcszAutoConfirmId,
+            AlertButton_Ok | AlertButtonOption_Default);
+}
+
+bool UIMessageCenter::errorWithQuestion(QWidget *pParent, MessageType type,
+                                        const QString &strMessage,
+                                        const QString &strDetails,
+                                        const char *pcszAutoConfirmId /*= 0*/,
+                                        const QString &strOkButtonText /*= QString()*/,
+                                        const QString &strCancelButtonText /*= QString()*/) const
+{
+    return (message(pParent, type, strMessage, strDetails, pcszAutoConfirmId,
+                    AlertButton_Ok | AlertButtonOption_Default,
+                    AlertButton_Cancel | AlertButtonOption_Escape,
+                    0 /* third button */,
+                    strOkButtonText,
+                    strCancelButtonText,
+                    QString() /* third button */) &
+            AlertButtonMask) == AlertButton_Ok;
+}
+
+void UIMessageCenter::alert(QWidget *pParent, MessageType type,
+                           const QString &strMessage,
+                           const char *pcszAutoConfirmId /*= 0*/) const
+{
+    error(pParent, type, strMessage, QString(), pcszAutoConfirmId);
+}
+
+int UIMessageCenter::question(QWidget *pParent, MessageType type,
                               const QString &strMessage,
-                              const char *pcszAutoConfirmId,
+                              const char *pcszAutoConfirmId/* = 0*/,
                               int iButton1 /*= 0*/,
                               int iButton2 /*= 0*/,
@@ -130,32 +163,34 @@
 }
 
-bool UIMessageCenter::messageOkCancel(QWidget *pParent, MessageType type,
-                                      const QString &strMessage,
-                                      const QString &strDetails /*= QString()*/,
-                                      const char *pcszAutoConfirmId /*= 0*/,
-                                      const QString &strOkButtonText /*= QString()*/,
-                                      const QString &strCancelButtonText /*= QString()*/,
-                                      bool fOkByDefault /*= true*/) const
-{
-    /* Which button will be the default one? Ok or Cancel? */
-    int iOkButton = fOkByDefault ? AlertButton_Ok | AlertButtonOption_Default :
-                                   AlertButton_Ok;
-    int iCancelButton = fOkByDefault ? AlertButton_Cancel | AlertButtonOption_Escape :
-                                       AlertButton_Cancel | AlertButtonOption_Escape | AlertButtonOption_Default;
-    /* Show the message wrapping main function: */
-    return (message(pParent, type, strMessage, strDetails, pcszAutoConfirmId,
-                    iOkButton, iCancelButton, 0, strOkButtonText, strCancelButtonText, QString()) &
+bool UIMessageCenter::questionBinary(QWidget *pParent, MessageType type,
+                                     const QString &strMessage,
+                                     const char *pcszAutoConfirmId /*= 0*/,
+                                     const QString &strOkButtonText /*= QString()*/,
+                                     const QString &strCancelButtonText /*= QString()*/) const
+{
+    return (question(pParent, type, strMessage, pcszAutoConfirmId,
+                     AlertButton_Ok | AlertButtonOption_Default,
+                     AlertButton_Cancel | AlertButtonOption_Escape,
+                     0 /* third button */,
+                     strOkButtonText,
+                     strCancelButtonText,
+                     QString() /* third button */) &
             AlertButtonMask) == AlertButton_Ok;
 }
 
-bool UIMessageCenter::messageOkCancel(QWidget *pParent, MessageType type,
-                                      const QString &strMessage,
-                                      const char *pcszAutoConfirmId,
-                                      const QString &strOkButtonText /*= QString()*/,
-                                      const QString &strCancelButtonText /*= QString()*/,
-                                      bool fOkByDefault /*= true*/) const
-{
-    return messageOkCancel(pParent, type, strMessage, QString(), pcszAutoConfirmId,
-                           strOkButtonText, strCancelButtonText, fOkByDefault);
+int UIMessageCenter::questionTrinary(QWidget *pParent, MessageType type,
+                                     const QString &strMessage,
+                                     const char *pcszAutoConfirmId /*= 0*/,
+                                     const QString &strChoice1ButtonText /*= QString()*/,
+                                     const QString &strChoice2ButtonText /*= QString()*/,
+                                     const QString &strCancelButtonText /*= QString()*/) const
+{
+    return question(pParent, type, strMessage, pcszAutoConfirmId,
+                    AlertButton_Choice1,
+                    AlertButton_Choice2 | AlertButtonOption_Default,
+                    AlertButton_Cancel | AlertButtonOption_Escape,
+                    strChoice1ButtonText,
+                    strChoice2ButtonText,
+                    strCancelButtonText);
 }
 
@@ -164,5 +199,4 @@
                                        const QString &strOptionText,
                                        bool fDefaultOptionValue /* = true */,
-                                       const QString &strDetails /* = QString() */,
                                        int iButton1 /*= 0*/,
                                        int iButton2 /*= 0*/,
@@ -228,6 +262,4 @@
     if (!strButtonName3.isNull())
         pBox->setButtonText(2, strButtonName3);
-    if (!strDetails.isEmpty())
-        pBox->setDetailsText(strDetails);
 
     /* Show box: */
@@ -331,9 +363,9 @@
 void UIMessageCenter::warnAboutWrongUSBMounted() const
 {
-    message(mainWindowShown(), MessageType_Warning,
-            tr("You seem to have the USBFS filesystem mounted at /sys/bus/usb/drivers. "
-               "We strongly recommend that you change this, as it is a severe mis-configuration of "
-               "your system which could cause USB devices to fail in unexpected ways."),
-            "checkForMountedWrongUSB");
+    alert(mainWindowShown(), MessageType_Warning,
+          tr("You seem to have the USBFS filesystem mounted at /sys/bus/usb/drivers. "
+             "We strongly recommend that you change this, as it is a severe mis-configuration of "
+             "your system which could cause USB devices to fail in unexpected ways."),
+          "checkForMountedWrongUSB");
 }
 #endif /* RT_OS_LINUX */
@@ -341,69 +373,69 @@
 void UIMessageCenter::cannotStartSelector() const
 {
-    message(0, MessageType_Critical,
-            tr("<p>Cannot start VirtualBox Manager due to local restrictions.</p>"
-               "<p>The application will now terminate.</p>"));
+    alert(0, MessageType_Critical,
+          tr("<p>Cannot start VirtualBox Manager due to local restrictions.</p>"
+             "<p>The application will now terminate.</p>"));
 }
 
 void UIMessageCenter::showBETAWarning() const
 {
-    message(0, MessageType_Warning,
-            tr("You are running a prerelease version of VirtualBox. "
-               "This version is not suitable for production use."));
+    alert(0, MessageType_Warning,
+          tr("You are running a prerelease version of VirtualBox. "
+             "This version is not suitable for production use."));
 }
 
 void UIMessageCenter::showBEBWarning() const
 {
-    message(0, MessageType_Warning,
-            tr("You are running an EXPERIMENTAL build of VirtualBox. "
-               "This version is not suitable for production use."));
+    alert(0, MessageType_Warning,
+          tr("You are running an EXPERIMENTAL build of VirtualBox. "
+             "This version is not suitable for production use."));
 }
 
 void UIMessageCenter::cannotInitUserHome(const QString &strUserHome) const
 {
-    message(0, MessageType_Critical,
-            tr("<p>Failed to initialize COM because the VirtualBox global "
-               "configuration directory <b><nobr>%1</nobr></b> is not accessible. "
-               "Please check the permissions of this directory and of its parent directory.</p>"
-               "<p>The application will now terminate.</p>")
-               .arg(strUserHome),
-            formatErrorInfo(COMErrorInfo()));
+    error(0, MessageType_Critical,
+          tr("<p>Failed to initialize COM because the VirtualBox global "
+             "configuration directory <b><nobr>%1</nobr></b> is not accessible. "
+             "Please check the permissions of this directory and of its parent directory.</p>"
+             "<p>The application will now terminate.</p>")
+             .arg(strUserHome),
+          formatErrorInfo(COMErrorInfo()));
 }
 
 void UIMessageCenter::cannotInitCOM(HRESULT rc) const
 {
-    message(0, MessageType_Critical,
-            tr("<p>Failed to initialize COM or to find the VirtualBox COM server. "
-               "Most likely, the VirtualBox server is not running or failed to start.</p>"
-               "<p>The application will now terminate.</p>"),
-            formatErrorInfo(COMErrorInfo(), rc));
+    error(0, MessageType_Critical,
+          tr("<p>Failed to initialize COM or to find the VirtualBox COM server. "
+             "Most likely, the VirtualBox server is not running or failed to start.</p>"
+             "<p>The application will now terminate.</p>"),
+          formatErrorInfo(COMErrorInfo(), rc));
 }
 
 void UIMessageCenter::cannotCreateVirtualBox(const CVirtualBox &vbox) const
 {
-    message(0, MessageType_Critical,
-            tr("<p>Failed to create the VirtualBox COM object.</p>"
-               "<p>The application will now terminate.</p>"),
-            formatErrorInfo(vbox));
+    error(0, MessageType_Critical,
+          tr("<p>Failed to create the VirtualBox COM object.</p>"
+             "<p>The application will now terminate.</p>"),
+          formatErrorInfo(vbox));
 }
 
 void UIMessageCenter::cannotFindLanguage(const QString &strLangId, const QString &strNlsPath) const
 {
-    message(0, MessageType_Error,
-            tr("<p>Could not find a language file for the language <b>%1</b> in the directory <b><nobr>%2</nobr></b>.</p>"
-               "<p>The language will be temporarily reset to the system default language. "
-               "Please go to the <b>Preferences</b> dialog which you can open from the <b>File</b> menu "
-               "of the main VirtualBox window, and select one of the existing languages on the <b>Language</b> page.</p>")
-               .arg(strLangId).arg(strNlsPath));
+    alert(0, MessageType_Error,
+          tr("<p>Could not find a language file for the language <b>%1</b> in the directory <b><nobr>%2</nobr></b>.</p>"
+             "<p>The language will be temporarily reset to the system default language. "
+             "Please go to the <b>Preferences</b> dialog which you can open from the <b>File</b> menu "
+             "of the main VirtualBox window, and select one of the existing languages on the <b>Language</b> page.</p>")
+             .arg(strLangId).arg(strNlsPath));
 }
 
 void UIMessageCenter::cannotLoadLanguage(const QString &strLangFile) const
 {
-    message(0, MessageType_Error,
-            tr("<p>Could not load the language file <b><nobr>%1</nobr></b>. "
-               "<p>The language will be temporarily reset to English (built-in). "
-               "Please go to the <b>Preferences</b> dialog which you can open from the <b>File</b> menu "
-               "of the main VirtualBox window, and select one of the existing languages on the <b>Language</b> page.</p>")
-               .arg(strLangFile));
+    alert(0, MessageType_Error,
+          tr("<p>Could not load the language file <b><nobr>%1</nobr></b>. "
+             "<p>The language will be temporarily reset to English (built-in). "
+             "Please go to the <b>Preferences</b> dialog which you can open from the <b>File</b> menu "
+             "of the main VirtualBox window, and select one of the existing languages on the <b>Language</b> page.</p>")
+             .arg(strLangFile));
 }
 
@@ -412,10 +444,10 @@
     /* Preserve error-info: */
     COMResult res(vbox);
-    /* Show the message: */
-    message(0, MessageType_Critical,
-            tr("<p>Failed to load the global GUI configuration from <b><nobr>%1</nobr></b>.</p>"
-               "<p>The application will now terminate.</p>")
-               .arg(vbox.GetSettingsFilePath()),
-            !res.isOk() ? formatErrorInfo(res) : QString("<!--EOM--><p>%1</p>").arg(vboxGlobal().emphasize(strError)));
+    /* Show the error: */
+    error(0, MessageType_Critical,
+          tr("<p>Failed to load the global GUI configuration from <b><nobr>%1</nobr></b>.</p>"
+             "<p>The application will now terminate.</p>")
+             .arg(vbox.GetSettingsFilePath()),
+          !res.isOk() ? formatErrorInfo(res) : QString("<!--EOM--><p>%1</p>").arg(vboxGlobal().emphasize(strError)));
 }
 
@@ -424,34 +456,33 @@
     /* Preserve error-info: */
     COMResult res(vbox);
-    /* Show the message: */
-    message(0, MessageType_Critical,
-            tr("<p>Failed to save the global GUI configuration to <b><nobr>%1</nobr></b>.</p>"
-               "<p>The application will now terminate.</p>")
-               .arg(vbox.GetSettingsFilePath()),
-            formatErrorInfo(res));
+    /* Show the error: */
+    error(0, MessageType_Critical,
+          tr("<p>Failed to save the global GUI configuration to <b><nobr>%1</nobr></b>.</p>"
+             "<p>The application will now terminate.</p>")
+             .arg(vbox.GetSettingsFilePath()),
+          formatErrorInfo(res));
 }
 
 void UIMessageCenter::cannotFindMachineByName(const CVirtualBox &vbox, const QString &strName) const
 {
-    message(0, MessageType_Error,
-            tr("There is no virtual machine named <b>%1</b>.")
-               .arg(strName),
-            formatErrorInfo(vbox));
+    error(0, MessageType_Error,
+          tr("There is no virtual machine named <b>%1</b>.")
+             .arg(strName),
+          formatErrorInfo(vbox));
 }
 
 void UIMessageCenter::cannotFindMachineById(const CVirtualBox &vbox, const QString &strId) const
 {
-    message(0, MessageType_Error,
-            tr("There is no virtual machine with id <b>%1</b>.")
-               .arg(strId),
-            formatErrorInfo(vbox));
+    error(0, MessageType_Error,
+          tr("There is no virtual machine with id <b>%1</b>.")
+             .arg(strId),
+          formatErrorInfo(vbox));
 }
 
 void UIMessageCenter::cannotOpenSession(const CSession &session) const
 {
-    /* Show the message: */
-    message(mainWindowShown(), MessageType_Error,
-            tr("Failed to create a new session."),
-            formatErrorInfo(session));
+    error(mainWindowShown(), MessageType_Error,
+          tr("Failed to create a new session."),
+          formatErrorInfo(session));
 }
 
@@ -460,68 +491,68 @@
     /* Preserve error-info: */
     QString strErrorInfo = formatErrorInfo(machine);
-    /* Show the message: */
-    message(mainWindowShown(), MessageType_Error,
-            tr("Failed to open a session for the virtual machine <b>%1</b>.")
-               .arg(machine.GetName()),
-            strErrorInfo);
+    /* Show the error: */
+    error(mainWindowShown(), MessageType_Error,
+          tr("Failed to open a session for the virtual machine <b>%1</b>.")
+             .arg(machine.GetName()),
+          strErrorInfo);
 }
 
 void UIMessageCenter::cannotOpenSession(const CProgress &progress, const QString &strMachineName) const
 {
-    message(mainWindowShown(), MessageType_Error,
-            tr("Failed to open a session for the virtual machine <b>%1</b>.")
-               .arg(strMachineName),
-            !progress.isOk() ? formatErrorInfo(progress) : formatErrorInfo(progress.GetErrorInfo()));
+    error(mainWindowShown(), MessageType_Error,
+          tr("Failed to open a session for the virtual machine <b>%1</b>.")
+             .arg(strMachineName),
+          !progress.isOk() ? formatErrorInfo(progress) : formatErrorInfo(progress.GetErrorInfo()));
 }
 
 void UIMessageCenter::cannotGetMediaAccessibility(const UIMedium &medium) const
 {
-    message(mainWindowShown(), MessageType_Error,
-            tr("Failed to determine the accessibility state of the medium <nobr><b>%1</b></nobr>.")
-               .arg(medium.location()),
-            formatErrorInfo(medium.result()));
+    error(mainWindowShown(), MessageType_Error,
+          tr("Failed to determine the accessibility state of the medium <nobr><b>%1</b></nobr>.")
+             .arg(medium.location()),
+          formatErrorInfo(medium.result()));
 }
 
 void UIMessageCenter::cannotOpenURL(const QString &strUrl) const
 {
-    message(mainWindowShown(), MessageType_Error,
-            tr("Failed to open <tt>%1</tt>. "
-               "Make sure your desktop environment can properly handle URLs of this type.")
-               .arg(strUrl));
+    alert(mainWindowShown(), MessageType_Error,
+          tr("Failed to open <tt>%1</tt>. "
+             "Make sure your desktop environment can properly handle URLs of this type.")
+             .arg(strUrl));
 }
 
 void UIMessageCenter::cannotOpenMachine(const CVirtualBox &vbox, const QString &strMachinePath) const
 {
-    message(mainWindowShown(), MessageType_Error,
-            tr("Failed to open virtual machine located in %1.")
-               .arg(strMachinePath),
-            formatErrorInfo(vbox));
+    error(mainWindowShown(), MessageType_Error,
+          tr("Failed to open virtual machine located in %1.")
+             .arg(strMachinePath),
+          formatErrorInfo(vbox));
 }
 
 void UIMessageCenter::cannotReregisterExistingMachine(const QString &strMachinePath, const QString &strMachineName) const
 {
-    message(mainWindowShown(), MessageType_Error,
-            tr("Failed to add virtual machine <b>%1</b> located in <i>%2</i> because its already present.")
-               .arg(strMachineName).arg(strMachinePath));
+    alert(mainWindowShown(), MessageType_Error,
+          tr("Failed to add virtual machine <b>%1</b> located in <i>%2</i> because its already present.")
+             .arg(strMachineName).arg(strMachinePath));
 }
 
 void UIMessageCenter::cannotResolveCollisionAutomatically(const QString &strName, const QString &strGroupName) const
 {
-    message(mainWindowShown(), MessageType_Error,
-            tr("<p>You are trying to move machine <nobr><b>%1</b></nobr> "
-               "to group <nobr><b>%2</b></nobr> which already have sub-group <nobr><b>%1</b></nobr>.</p>"
-               "<p>Please resolve this name-conflict and try again.</p>")
-               .arg(strName, strGroupName));
+    alert(mainWindowShown(), MessageType_Error,
+          tr("<p>You are trying to move machine <nobr><b>%1</b></nobr> "
+             "to group <nobr><b>%2</b></nobr> which already have sub-group <nobr><b>%1</b></nobr>.</p>"
+             "<p>Please resolve this name-conflict and try again.</p>")
+             .arg(strName, strGroupName));
 }
 
 bool UIMessageCenter::confirmAutomaticCollisionResolve(const QString &strName, const QString &strGroupName) const
 {
-    return messageOkCancel(mainWindowShown(), MessageType_Question,
-                           tr("<p>You are trying to move group <nobr><b>%1</b></nobr> "
-                              "to group <nobr><b>%2</b></nobr> which already have another item with the same name.</p>"
-                              "<p>Would you like to automatically rename it?</p>")
-                              .arg(strName, strGroupName),
-                           0 /* auto-confirm id */,
-                           tr("Rename"));
+    return questionBinary(mainWindowShown(), MessageType_Question,
+                          tr("<p>You are trying to move group <nobr><b>%1</b></nobr> "
+                             "to group <nobr><b>%2</b></nobr> which already have another item with the same name.</p>"
+                             "<p>Would you like to automatically rename it?</p>")
+                             .arg(strName, strGroupName),
+                          0 /* auto-confirm id */,
+                          tr("Rename"));
 }
 
@@ -534,19 +565,19 @@
     if (strName.isEmpty())
         strName = QFileInfo(machine.GetSettingsFilePath()).baseName();
-    /* Show the message: */
-    message(mainWindowShown(), MessageType_Error,
-            tr("Failed to set groups of the virtual machine <b>%1</b>.")
-               .arg(strName),
-            formatErrorInfo(res));
+    /* Show the error: */
+    error(mainWindowShown(), MessageType_Error,
+          tr("Failed to set groups of the virtual machine <b>%1</b>.")
+             .arg(strName),
+          formatErrorInfo(res));
 }
 
 bool UIMessageCenter::confirmMachineItemRemoval(const QStringList &names) const
 {
-    return messageOkCancel(mainWindowShown(), MessageType_Question,
-                           tr("<p>You are about to remove following virtual machine items from the machine list:</p>"
-                              "<p><b>%1</b></p><p>Do you wish to proceed?</p>")
-                              .arg(names.join(", ")),
-                           0 /* auto-confirm id */,
-                           tr("Remove"));
+    return questionBinary(mainWindowShown(), MessageType_Question,
+                          tr("<p>You are about to remove following virtual machine items from the machine list:</p>"
+                             "<p><b>%1</b></p><p>Do you wish to proceed?</p>")
+                             .arg(names.join(", ")),
+                          0 /* auto-confirm id */,
+                          tr("Remove"));
 }
 
@@ -616,5 +647,6 @@
     return cInacessibleMachineCount == machines.size() ?
            message(mainWindowShown(), MessageType_Question,
-                   strText, 0 /* auto-confirm id */,
+                   strText, QString(),
+                   0 /* auto-confirm id */,
                    AlertButton_Ok | AlertButtonOption_Default,
                    AlertButton_Cancel | AlertButtonOption_Escape,
@@ -622,5 +654,6 @@
                    tr("Remove")) :
            message(mainWindowShown(), MessageType_Question,
-                   strText, 0 /* auto-confirm id */,
+                   strText, QString(),
+                   0 /* auto-confirm id */,
                    AlertButton_Choice1,
                    AlertButton_Choice2 | AlertButtonOption_Default,
@@ -634,77 +667,75 @@
     /* Preserve error-info: */
     COMResult res(machine);
-    /* Show the message: */
-    message(mainWindowShown(),
-            MessageType_Error,
-            tr("Failed to remove the virtual machine <b>%1</b>.")
-               .arg(machine.GetName()),
-            !machine.isOk() ? formatErrorInfo(machine) : formatErrorInfo(res));
+    /* Show the error: */
+    error(mainWindowShown(), MessageType_Error,
+          tr("Failed to remove the virtual machine <b>%1</b>.")
+             .arg(machine.GetName()),
+          !machine.isOk() ? formatErrorInfo(machine) : formatErrorInfo(res));
 }
 
 void UIMessageCenter::cannotRemoveMachine(const CMachine &machine, const CProgress &progress) const
 {
-    message(mainWindowShown(),
-            MessageType_Error,
-            tr("Failed to remove the virtual machine <b>%1</b>.")
-               .arg(machine.GetName()),
-            !progress.isOk() ? formatErrorInfo(progress) : formatErrorInfo(progress.GetErrorInfo()));
+    error(mainWindowShown(), MessageType_Error,
+          tr("Failed to remove the virtual machine <b>%1</b>.")
+             .arg(machine.GetName()),
+          !progress.isOk() ? formatErrorInfo(progress) : formatErrorInfo(progress.GetErrorInfo()));
 }
 
 bool UIMessageCenter::warnAboutInaccessibleMedia() const
 {
-    return messageOkCancel(mainWindowShown(), MessageType_Warning,
-                           tr("<p>One or more virtual hard disks, CD/DVD or "
-                              "floppy media are not currently accessible. As a result, you will "
-                              "not be able to operate virtual machines that use these media until "
-                              "they become accessible later.</p>"
-                              "<p>Press <b>Check</b> to open the Virtual Media Manager window and "
-                              "see what media are inaccessible, or press <b>Ignore</b> to "
-                              "ignore this message.</p>"),
-                           "warnAboutInaccessibleMedia",
-                           tr("Ignore"), tr("Check", "inaccessible media message box"));
+    return questionBinary(mainWindowShown(), MessageType_Warning,
+                          tr("<p>One or more virtual hard disks, CD/DVD or "
+                             "floppy media are not currently accessible. As a result, you will "
+                             "not be able to operate virtual machines that use these media until "
+                             "they become accessible later.</p>"
+                             "<p>Press <b>Check</b> to open the Virtual Media Manager window and "
+                             "see what media are inaccessible, or press <b>Ignore</b> to "
+                             "ignore this message.</p>"),
+                          "warnAboutInaccessibleMedia",
+                          tr("Ignore"), tr("Check", "inaccessible media message box"));
 }
 
 bool UIMessageCenter::confirmDiscardSavedState(const QString &strNames) const
 {
-    return messageOkCancel(mainWindowShown(), MessageType_Question,
-                           tr("<p>Are you sure you want to discard the saved state of "
-                              "the following virtual machines?</p><p><b>%1</b></p>"
-                              "<p>This operation is equivalent to resetting or powering off "
-                              "the machine without doing a proper shutdown of the guest OS.</p>")
-                              .arg(strNames),
-                           0 /* auto-confirm id */,
-                           tr("Discard", "saved state"));
+    return questionBinary(mainWindowShown(), MessageType_Question,
+                          tr("<p>Are you sure you want to discard the saved state of "
+                             "the following virtual machines?</p><p><b>%1</b></p>"
+                             "<p>This operation is equivalent to resetting or powering off "
+                             "the machine without doing a proper shutdown of the guest OS.</p>")
+                             .arg(strNames),
+                          0 /* auto-confirm id */,
+                          tr("Discard", "saved state"));
 }
 
 bool UIMessageCenter::confirmResetMachine(const QString &strNames) const
 {
-    return messageOkCancel(mainWindowShown(), MessageType_Question,
-                           tr("<p>Do you really want to reset the following virtual machines?</p>"
-                              "<p><b>%1</b></p><p>This will cause any unsaved data "
-                              "in applications running inside it to be lost.</p>")
-                              .arg(strNames),
-                           "confirmResetMachine" /* auto-confirm id */,
-                           tr("Reset", "machine"));
+    return questionBinary(mainWindowShown(), MessageType_Question,
+                          tr("<p>Do you really want to reset the following virtual machines?</p>"
+                             "<p><b>%1</b></p><p>This will cause any unsaved data "
+                             "in applications running inside it to be lost.</p>")
+                             .arg(strNames),
+                          "confirmResetMachine" /* auto-confirm id */,
+                          tr("Reset", "machine"));
 }
 
 bool UIMessageCenter::confirmACPIShutdownMachine(const QString &strNames) const
 {
-    return messageOkCancel(mainWindowShown(), MessageType_Question,
-                           tr("<p>Do you really want to send an ACPI shutdown signal "
-                              "to the following virtual machines?</p><p><b>%1</b></p>")
-                              .arg(strNames),
-                           "confirmACPIShutdownMachine" /* auto-confirm id */,
-                           tr("ACPI Shutdown", "machine"));
+    return questionBinary(mainWindowShown(), MessageType_Question,
+                          tr("<p>Do you really want to send an ACPI shutdown signal "
+                             "to the following virtual machines?</p><p><b>%1</b></p>")
+                             .arg(strNames),
+                          "confirmACPIShutdownMachine" /* auto-confirm id */,
+                          tr("ACPI Shutdown", "machine"));
 }
 
 bool UIMessageCenter::confirmPowerOffMachine(const QString &strNames) const
 {
-    return messageOkCancel(mainWindowShown(), MessageType_Question,
-                           tr("<p>Do you really want to power off the following virtual machines?</p>"
-                              "<p><b>%1</b></p><p>This will cause any unsaved data in applications "
-                              "running inside it to be lost.</p>")
-                              .arg(strNames),
-                           "confirmPowerOffMachine" /* auto-confirm id */,
-                           tr("Power Off", "machine"));
+    return questionBinary(mainWindowShown(), MessageType_Question,
+                          tr("<p>Do you really want to power off the following virtual machines?</p>"
+                             "<p><b>%1</b></p><p>This will cause any unsaved data in applications "
+                             "running inside it to be lost.</p>")
+                             .arg(strNames),
+                          "confirmPowerOffMachine" /* auto-confirm id */,
+                          tr("Power Off", "machine"));
 }
 
@@ -713,9 +744,9 @@
     /* Preserve error-info: */
     COMResult res(console);
-    /* Show the message: */
-    message(mainWindowShown(), MessageType_Error,
-            tr("Failed to pause the execution of the virtual machine <b>%1</b>.")
-               .arg(console.GetMachine().GetName()),
-            formatErrorInfo(res));
+    /* Show the error: */
+    error(mainWindowShown(), MessageType_Error,
+          tr("Failed to pause the execution of the virtual machine <b>%1</b>.")
+             .arg(console.GetMachine().GetName()),
+          formatErrorInfo(res));
 }
 
@@ -724,9 +755,9 @@
     /* Preserve error-info: */
     COMResult res(console);
-    /* Show the message: */
-    message(mainWindowShown(), MessageType_Error,
-            tr("Failed to resume the execution of the virtual machine <b>%1</b>.")
-               .arg(console.GetMachine().GetName()),
-            formatErrorInfo(res));
+    /* Show the error: */
+    error(mainWindowShown(), MessageType_Error,
+          tr("Failed to resume the execution of the virtual machine <b>%1</b>.")
+             .arg(console.GetMachine().GetName()),
+          formatErrorInfo(res));
 }
 
@@ -735,9 +766,9 @@
     /* Preserve error-info: */
     COMResult res(console);
-    /* Show the message: */
-    message(mainWindowShown(), MessageType_Error,
-            tr("Failed to discard the saved state of the virtual machine <b>%1</b>.")
-               .arg(console.GetMachine().GetName()),
-            formatErrorInfo(res));
+    /* Show the error: */
+    error(mainWindowShown(), MessageType_Error,
+          tr("Failed to discard the saved state of the virtual machine <b>%1</b>.")
+             .arg(console.GetMachine().GetName()),
+          formatErrorInfo(res));
 }
 
@@ -746,17 +777,17 @@
     /* Preserve error-info: */
     COMResult res(console);
-    /* Show the message: */
-    message(mainWindowShown(), MessageType_Error,
-            tr("Failed to save the state of the virtual machine <b>%1</b>.")
-               .arg(console.GetMachine().GetName()),
-            formatErrorInfo(res));
+    /* Show the error: */
+    error(mainWindowShown(), MessageType_Error,
+          tr("Failed to save the state of the virtual machine <b>%1</b>.")
+             .arg(console.GetMachine().GetName()),
+          formatErrorInfo(res));
 }
 
 void UIMessageCenter::cannotSaveMachineState(const CProgress &progress, const QString &strName)
 {
-    message(mainWindowShown(), MessageType_Error,
-            tr("Failed to save the state of the virtual machine <b>%1</b>.")
-               .arg(strName),
-            !progress.isOk() ? formatErrorInfo(progress) : formatErrorInfo(progress.GetErrorInfo()));
+    error(mainWindowShown(), MessageType_Error,
+          tr("Failed to save the state of the virtual machine <b>%1</b>.")
+             .arg(strName),
+          !progress.isOk() ? formatErrorInfo(progress) : formatErrorInfo(progress.GetErrorInfo()));
 }
 
@@ -765,10 +796,10 @@
     /* Preserve error-info: */
     COMResult res(console);
-    /* Show the message: */
-    message(mainWindowShown(), MessageType_Error,
-            tr("Failed to send the ACPI Power Button press event to the "
-               "virtual machine <b>%1</b>.")
-               .arg(console.GetMachine().GetName()),
-            formatErrorInfo(res));
+    /* Show the error: */
+    error(mainWindowShown(), MessageType_Error,
+          tr("Failed to send the ACPI Power Button press event to the "
+             "virtual machine <b>%1</b>.")
+             .arg(console.GetMachine().GetName()),
+          formatErrorInfo(res));
 }
 
@@ -777,17 +808,17 @@
     /* Preserve error-info: */
     COMResult res(console);
-    /* Show the message: */
-    message(mainWindowShown(), MessageType_Error,
-            tr("Failed to stop the virtual machine <b>%1</b>.")
-               .arg(console.GetMachine().GetName()),
-            formatErrorInfo(res));
+    /* Show the error: */
+    error(mainWindowShown(), MessageType_Error,
+          tr("Failed to stop the virtual machine <b>%1</b>.")
+             .arg(console.GetMachine().GetName()),
+          formatErrorInfo(res));
 }
 
 void UIMessageCenter::cannotPowerDownMachine(const CProgress &progress, const QString &strName) const
 {
-    message(mainWindowShown(), MessageType_Error,
-            tr("Failed to stop the virtual machine <b>%1</b>.")
-                .arg(strName),
-            !progress.isOk() ? formatErrorInfo(progress) : formatErrorInfo(progress.GetErrorInfo()));
+    error(mainWindowShown(), MessageType_Error,
+          tr("Failed to stop the virtual machine <b>%1</b>.")
+              .arg(strName),
+          !progress.isOk() ? formatErrorInfo(progress) : formatErrorInfo(progress.GetErrorInfo()));
 }
 
@@ -802,5 +833,4 @@
                              tr("Create a snapshot of the current machine state"),
                              !vboxGlobal().virtualBox().GetExtraDataStringList(GUI_InvertMessageOption).contains("confirmSnapshotRestoring"),
-                             QString() /* details */,
                              AlertButton_Ok | AlertButtonOption_Default,
                              AlertButton_Cancel | AlertButtonOption_Escape,
@@ -810,4 +840,5 @@
                    tr("<p>Are you sure you want to restore snapshot <nobr><b>%1</b></nobr>?</p>")
                       .arg(strSnapshotName),
+                   QString() /* details */,
                    0 /* auto-confirm id */,
                    AlertButton_Ok | AlertButtonOption_Default,
@@ -819,12 +850,12 @@
 bool UIMessageCenter::confirmSnapshotRemoval(const QString &strSnapshotName) const
 {
-    return messageOkCancel(mainWindowShown(), MessageType_Question,
-                           tr("<p>Deleting the snapshot will cause the state information saved in it to be lost, and disk data spread over "
-                              "several image files that VirtualBox has created together with the snapshot will be merged into one file. "
-                              "This can be a lengthy process, and the information in the snapshot cannot be recovered.</p>"
-                              "</p>Are you sure you want to delete the selected snapshot <b>%1</b>?</p>")
-                              .arg(strSnapshotName),
-                           0 /* auto-confirm id */,
-                           tr("Delete"));
+    return questionBinary(mainWindowShown(), MessageType_Question,
+                          tr("<p>Deleting the snapshot will cause the state information saved in it to be lost, and disk data spread over "
+                             "several image files that VirtualBox has created together with the snapshot will be merged into one file. "
+                             "This can be a lengthy process, and the information in the snapshot cannot be recovered.</p>"
+                             "</p>Are you sure you want to delete the selected snapshot <b>%1</b>?</p>")
+                             .arg(strSnapshotName),
+                          0 /* auto-confirm id */,
+                          tr("Delete"));
 }
 
@@ -834,116 +865,113 @@
                                                         const QString &strTargetFileSystemFree) const
 {
-    return messageOkCancel(mainWindowShown(), MessageType_Question,
-                           tr("<p>Deleting the snapshot %1 will temporarily need more disk space. In the worst case the size of image %2 will grow by %3, "
-                               "however on this filesystem there is only %4 free.</p><p>Running out of disk space during the merge operation can result in "
-                               "corruption of the image and the VM configuration, i.e. loss of the VM and its data.</p><p>You may continue with deleting "
-                               "the snapshot at your own risk.</p>")
-                               .arg(strSnapshotName)
-                               .arg(strTargetImageName)
-                               .arg(strTargetImageMaxSize)
-                               .arg(strTargetFileSystemFree),
-                           0 /* auto-confirm id */,
-                           tr("Delete"));
+    return questionBinary(mainWindowShown(), MessageType_Question,
+                          tr("<p>Deleting the snapshot %1 will temporarily need more disk space. In the worst case the size of image %2 will grow by %3, "
+                              "however on this filesystem there is only %4 free.</p><p>Running out of disk space during the merge operation can result in "
+                              "corruption of the image and the VM configuration, i.e. loss of the VM and its data.</p><p>You may continue with deleting "
+                              "the snapshot at your own risk.</p>")
+                              .arg(strSnapshotName, strTargetImageName, strTargetImageMaxSize, strTargetFileSystemFree),
+                          0 /* auto-confirm id */,
+                          tr("Delete"));
 }
 
 void UIMessageCenter::cannotTakeSnapshot(const CConsole &console, const QString &strMachineName, QWidget *pParent /*= 0*/) const
 {
-    message(pParent ? pParent : mainWindowShown(), MessageType_Error,
-            tr("Failed to create a snapshot of the virtual machine <b>%1</b>.")
-               .arg(strMachineName),
-            formatErrorInfo(console));
+    error(pParent ? pParent : mainWindowShown(), MessageType_Error,
+          tr("Failed to create a snapshot of the virtual machine <b>%1</b>.")
+             .arg(strMachineName),
+          formatErrorInfo(console));
 }
 
 void UIMessageCenter::cannotTakeSnapshot(const CProgress &progress, const QString &strMachineName, QWidget *pParent /*= 0*/) const
 {
-    message(pParent ? pParent : mainWindowShown(), MessageType_Error,
-            tr("Failed to create a snapshot of the virtual machine <b>%1</b>.")
-               .arg(strMachineName),
-            !progress.isOk() ? formatErrorInfo(progress) : formatErrorInfo(progress.GetErrorInfo()));
+    error(pParent ? pParent : mainWindowShown(), MessageType_Error,
+          tr("Failed to create a snapshot of the virtual machine <b>%1</b>.")
+             .arg(strMachineName),
+          !progress.isOk() ? formatErrorInfo(progress) : formatErrorInfo(progress.GetErrorInfo()));
 }
 
 void UIMessageCenter::cannotRestoreSnapshot(const CConsole &console, const QString &strSnapshotName, const QString &strMachineName, QWidget *pParent /*= 0*/) const
 {
-    message(pParent ? pParent : mainWindowShown(), MessageType_Error,
-            tr("Failed to restore the snapshot <b>%1</b> of the virtual machine <b>%2</b>.")
-               .arg(strSnapshotName, strMachineName),
-            formatErrorInfo(console));
+    error(pParent ? pParent : mainWindowShown(), MessageType_Error,
+          tr("Failed to restore the snapshot <b>%1</b> of the virtual machine <b>%2</b>.")
+             .arg(strSnapshotName, strMachineName),
+          formatErrorInfo(console));
 }
 
 void UIMessageCenter::cannotRestoreSnapshot(const CProgress &progress, const QString &strSnapshotName, const QString &strMachineName, QWidget *pParent /*= 0*/) const
 {
-    message(pParent ? pParent : mainWindowShown(), MessageType_Error,
-            tr("Failed to restore the snapshot <b>%1</b> of the virtual machine <b>%2</b>.")
-               .arg(strSnapshotName, strMachineName),
-            !progress.isOk() ? formatErrorInfo(progress) : formatErrorInfo(progress.GetErrorInfo()));
+    error(pParent ? pParent : mainWindowShown(), MessageType_Error,
+          tr("Failed to restore the snapshot <b>%1</b> of the virtual machine <b>%2</b>.")
+             .arg(strSnapshotName, strMachineName),
+          !progress.isOk() ? formatErrorInfo(progress) : formatErrorInfo(progress.GetErrorInfo()));
 }
 
 void UIMessageCenter::cannotRemoveSnapshot(const CConsole &console, const QString &strSnapshotName, const QString &strMachineName) const
 {
-    message(mainWindowShown(), MessageType_Error,
-            tr("Failed to delete the snapshot <b>%1</b> of the virtual machine <b>%2</b>.")
-               .arg(strSnapshotName, strMachineName),
-            formatErrorInfo(console));
+    error(mainWindowShown(), MessageType_Error,
+          tr("Failed to delete the snapshot <b>%1</b> of the virtual machine <b>%2</b>.")
+             .arg(strSnapshotName, strMachineName),
+          formatErrorInfo(console));
 }
 
 void UIMessageCenter::cannotRemoveSnapshot(const CProgress &progress, const QString &strSnapshotName, const QString &strMachineName) const
 {
-    message(mainWindowShown(), MessageType_Error,
-            tr("Failed to delete the snapshot <b>%1</b> of the virtual machine <b>%2</b>.")
-               .arg(strSnapshotName).arg(strMachineName),
-            !progress.isOk() ? formatErrorInfo(progress) : formatErrorInfo(progress.GetErrorInfo()));
+    error(mainWindowShown(), MessageType_Error,
+          tr("Failed to delete the snapshot <b>%1</b> of the virtual machine <b>%2</b>.")
+             .arg(strSnapshotName).arg(strMachineName),
+          !progress.isOk() ? formatErrorInfo(progress) : formatErrorInfo(progress.GetErrorInfo()));
 }
 
 bool UIMessageCenter::confirmHostInterfaceRemoval(const QString &strName, QWidget *pParent /*= 0*/) const
 {
-    return messageOkCancel(pParent ? pParent : mainWindowShown(), MessageType_Question,
-                           tr("<p>Deleting this host-only network will remove "
-                              "the host-only interface this network is based on. Do you want to "
-                              "remove the (host-only network) interface <nobr><b>%1</b>?</nobr></p>"
-                              "<p><b>Note:</b> this interface may be in use by one or more "
-                              "virtual network adapters belonging to one of your VMs. "
-                              "After it is removed, these adapters will no longer be usable until "
-                              "you correct their settings by either choosing a different interface "
-                              "name or a different adapter attachment type.</p>")
-                              .arg(strName),
-                           0 /* auto-confirm id */,
-                           tr("Remove"));
+    return questionBinary(pParent ? pParent : mainWindowShown(), MessageType_Question,
+                          tr("<p>Deleting this host-only network will remove "
+                             "the host-only interface this network is based on. Do you want to "
+                             "remove the (host-only network) interface <nobr><b>%1</b>?</nobr></p>"
+                             "<p><b>Note:</b> this interface may be in use by one or more "
+                             "virtual network adapters belonging to one of your VMs. "
+                             "After it is removed, these adapters will no longer be usable until "
+                             "you correct their settings by either choosing a different interface "
+                             "name or a different adapter attachment type.</p>")
+                             .arg(strName),
+                          0 /* auto-confirm id */,
+                          tr("Remove"));
 }
 
 void UIMessageCenter::cannotCreateHostInterface(const CHost &host, QWidget *pParent /*= 0*/)
 {
-    message(pParent ? pParent : mainWindowShown(), MessageType_Error,
-            tr("Failed to create the host network interface."),
-            formatErrorInfo(host));
+    error(pParent ? pParent : mainWindowShown(), MessageType_Error,
+          tr("Failed to create the host network interface."),
+          formatErrorInfo(host));
 }
 
 void UIMessageCenter::cannotCreateHostInterface(const CProgress &progress, QWidget *pParent /*= 0*/)
 {
-    message(pParent ? pParent : mainWindowShown(), MessageType_Error,
-            tr("Failed to create the host network interface."),
-            !progress.isOk() ? formatErrorInfo(progress) : formatErrorInfo(progress.GetErrorInfo()));
+    error(pParent ? pParent : mainWindowShown(), MessageType_Error,
+          tr("Failed to create the host network interface."),
+          !progress.isOk() ? formatErrorInfo(progress) : formatErrorInfo(progress.GetErrorInfo()));
 }
 
 void UIMessageCenter::cannotRemoveHostInterface(const CHost &host, const QString &strName, QWidget *pParent /*= 0*/)
 {
-    message(pParent ? pParent : mainWindowShown(), MessageType_Error,
-            tr("Failed to remove the host network interface <b>%1</b>.")
-               .arg(strName),
-            formatErrorInfo(host));
+    error(pParent ? pParent : mainWindowShown(), MessageType_Error,
+          tr("Failed to remove the host network interface <b>%1</b>.")
+             .arg(strName),
+          formatErrorInfo(host));
 }
 
 void UIMessageCenter::cannotRemoveHostInterface(const CProgress &progress, const QString &strName, QWidget *pParent /*= 0*/)
 {
-    message(pParent ? pParent : mainWindowShown(), MessageType_Error,
-            tr("Failed to remove the host network interface <b>%1</b>.")
-               .arg(strName),
-            !progress.isOk() ? formatErrorInfo(progress) : formatErrorInfo(progress.GetErrorInfo()));
+    error(pParent ? pParent : mainWindowShown(), MessageType_Error,
+          tr("Failed to remove the host network interface <b>%1</b>.")
+             .arg(strName),
+          !progress.isOk() ? formatErrorInfo(progress) : formatErrorInfo(progress.GetErrorInfo()));
 }
 
 void UIMessageCenter::cannotSetSystemProperties(const CSystemProperties &properties, QWidget *pParent /*= 0*/) const
 {
-    message(pParent ? pParent : mainWindowShown(), MessageType_Critical,
-            tr("Failed to set global VirtualBox properties."),
-            formatErrorInfo(properties));
+    error(pParent ? pParent : mainWindowShown(), MessageType_Critical,
+          tr("Failed to set global VirtualBox properties."),
+          formatErrorInfo(properties));
 }
 
@@ -956,9 +984,9 @@
     if (res.rc() == E_NOTIMPL)
         return;
-    /* Show the message: */
-    message(pParent ? pParent : mainWindowShown(), res.isWarning() ? MessageType_Warning : MessageType_Error,
-            tr("Failed to access the USB subsystem."),
-            formatErrorInfo(res),
-            "warnAboutUnaccessibleUSB");
+    /* Show the error: */
+    error(pParent ? pParent : mainWindowShown(), res.isWarning() ? MessageType_Warning : MessageType_Error,
+          tr("Failed to access the USB subsystem."),
+          formatErrorInfo(res),
+          "warnAboutUnaccessibleUSB");
 }
 
@@ -969,11 +997,11 @@
     setWarningShown("warnAboutUnsupportedUSB2", true);
 
-    message(pParent ? pParent : mainMachineWindowShown(), MessageType_Warning,
-            tr("<p>USB 2.0 is currently enabled for this virtual machine. "
-               "However, this requires the <b><nobr>%1</nobr></b> to be installed.</p>"
-               "<p>Please install the Extension Pack from the VirtualBox download site. "
-               "After this you will be able to re-enable USB 2.0. "
-               "It will be disabled in the meantime unless you cancel the current settings changes.</p>")
-               .arg(strExtPackName));
+    alert(pParent ? pParent : mainMachineWindowShown(), MessageType_Warning,
+          tr("<p>USB 2.0 is currently enabled for this virtual machine. "
+             "However, this requires the <b><nobr>%1</nobr></b> to be installed.</p>"
+             "<p>Please install the Extension Pack from the VirtualBox download site. "
+             "After this you will be able to re-enable USB 2.0. "
+             "It will be disabled in the meantime unless you cancel the current settings changes.</p>")
+             .arg(strExtPackName));
 
     setWarningShown("warnAboutUnsupportedUSB2", false);
@@ -986,9 +1014,9 @@
         return;
     setWarningShown("warnAboutStateChange", true);
-    /* Show the message: */
-    message(pParent ? pParent : mainWindowShown(), MessageType_Warning,
-            tr("The virtual machine that you are changing has been started. "
-               "Only certain settings can be changed while a machine is running. "
-               "All other changes will be lost if you close this window now."));
+    /* Show the error: */
+    alert(pParent ? pParent : mainWindowShown(), MessageType_Warning,
+          tr("The virtual machine that you are changing has been started. "
+             "Only certain settings can be changed while a machine is running. "
+             "All other changes will be lost if you close this window now."));
     /* Allow to show this async warning: */
     setWarningShown("warnAboutStateChange", false);
@@ -997,64 +1025,55 @@
 bool UIMessageCenter::confirmSettingsReloading(QWidget *pParent /*= 0*/) const
 {
-    return messageOkCancel(pParent ? pParent : mainWindowShown(), MessageType_Question,
-                           tr("<p>The machine settings were changed while you were editing them. "
-                              "You currently have unsaved setting changes.</p>"
-                              "<p>Would you like to reload the changed settings or to keep your own changes?</p>"),
+    return questionBinary(pParent ? pParent : mainWindowShown(), MessageType_Question,
+                          tr("<p>The machine settings were changed while you were editing them. "
+                             "You currently have unsaved setting changes.</p>"
+                             "<p>Would you like to reload the changed settings or to keep your own changes?</p>"),
+                          0 /* auto-confirm id */,
+                          tr("Reload settings"), tr("Keep changes"));
+}
+
+int UIMessageCenter::confirmHardDiskAttachmentCreation(const QString &strControllerName, QWidget *pParent /*= 0*/) const
+{
+    return questionTrinary(pParent ? pParent : mainWindowShown(), MessageType_Question,
+                           tr("<p>You are about to add a virtual hard disk to controller <b>%1</b>.</p>"
+                              "<p>Would you like to create a new, empty file to hold the disk contents or select an existing one?</p>")
+                              .arg(strControllerName),
                            0 /* auto-confirm id */,
-                           tr("Reload settings"), tr("Keep changes"));
-}
-
-int UIMessageCenter::confirmHardDiskAttachmentCreation(const QString &strControllerName, QWidget *pParent /*= 0*/) const
-{
-    return message(pParent ? pParent : mainWindowShown(), MessageType_Question,
-                   tr("<p>You are about to add a virtual hard disk to controller <b>%1</b>.</p>"
-                      "<p>Would you like to create a new, empty file to hold the disk contents or select an existing one?</p>")
-                      .arg(strControllerName),
-                   0 /* auto-confirm id */,
-                   AlertButton_Choice1,
-                   AlertButton_Choice2 | AlertButtonOption_Default,
-                   AlertButton_Cancel | AlertButtonOption_Escape,
-                   tr("Create &new disk", "add attachment routine"),
-                   tr("&Choose existing disk", "add attachment routine"));
+                           tr("Create &new disk", "add attachment routine"),
+                           tr("&Choose existing disk", "add attachment routine"));
 }
 
 int UIMessageCenter::confirmOpticalAttachmentCreation(const QString &strControllerName, QWidget *pParent /*= 0*/) const
 {
-    return message(pParent ? pParent : mainWindowShown(), MessageType_Question,
-                   tr("<p>You are about to add a new CD/DVD drive to controller <b>%1</b>.</p>"
-                      "<p>Would you like to choose a virtual CD/DVD disk to put in the drive "
-                      "or to leave it empty for now?</p>")
-                      .arg(strControllerName),
-                   0 /* auto-confirm id */,
-                   AlertButton_Choice1 | AlertButtonOption_Default,
-                   AlertButton_Choice2,
-                   AlertButton_Cancel | AlertButtonOption_Escape,
-                   tr("&Choose disk", "add attachment routine"),
-                   tr("Leave &empty", "add attachment routine"));
+    return questionTrinary(pParent ? pParent : mainWindowShown(), MessageType_Question,
+                           tr("<p>You are about to add a new CD/DVD drive to controller <b>%1</b>.</p>"
+                              "<p>Would you like to choose a virtual CD/DVD disk to put in the drive "
+                              "or to leave it empty for now?</p>")
+                              .arg(strControllerName),
+                           0 /* auto-confirm id */,
+                           tr("Leave &empty", "add attachment routine"),
+                           tr("&Choose disk", "add attachment routine"));
 }
 
 int UIMessageCenter::confirmFloppyAttachmentCreation(const QString &strControllerName, QWidget *pParent /*= 0*/) const
 {
-    return message(pParent ? pParent : mainWindowShown(), MessageType_Question,
-                   tr("<p>You are about to add a new floppy drive to controller <b>%1</b>.</p>"
-                      "<p>Would you like to choose a virtual floppy disk to put in the drive "
-                      "or to leave it empty for now?</p>")
-                      .arg(strControllerName),
-                   0 /* auto-confirm id */,
-                   AlertButton_Choice1 | AlertButtonOption_Default,
-                   AlertButton_Choice2,
-                   AlertButton_Cancel | AlertButtonOption_Escape,
-                   tr("&Choose disk", "add attachment routine"),
-                   tr("Leave &empty", "add attachment routine"));
+    return questionTrinary(pParent ? pParent : mainWindowShown(), MessageType_Question,
+                           tr("<p>You are about to add a new floppy drive to controller <b>%1</b>.</p>"
+                              "<p>Would you like to choose a virtual floppy disk to put in the drive "
+                              "or to leave it empty for now?</p>")
+                              .arg(strControllerName),
+                           0 /* auto-confirm id */,
+                           tr("Leave &empty", "add attachment routine"),
+                           tr("&Choose disk", "add attachment routine"));
 }
 
 int UIMessageCenter::confirmRemovingOfLastDVDDevice(QWidget *pParent /*= 0*/) const
 {
-    return messageOkCancel(pParent ? pParent : mainWindowShown(), MessageType_Info,
-                           tr("<p>Are you sure you want to delete the CD/DVD-ROM device?</p>"
-                              "<p>You will not be able to mount any CDs or ISO images "
-                              "or install the Guest Additions without it!</p>"),
-                           0 /* auto-confirm id */,
-                           tr("&Remove", "medium"));
+    return questionBinary(pParent ? pParent : mainWindowShown(), MessageType_Info,
+                          tr("<p>Are you sure you want to delete the CD/DVD-ROM device?</p>"
+                             "<p>You will not be able to mount any CDs or ISO images "
+                             "or install the Guest Additions without it!</p>"),
+                          0 /* auto-confirm id */,
+                          tr("&Remove", "medium"));
 }
 
@@ -1087,19 +1106,20 @@
             break;
     }
-    message(pParent ? pParent : mainWindowShown(), MessageType_Error, strMessage, formatErrorInfo(machine));
+    error(pParent ? pParent : mainWindowShown(), MessageType_Error,
+          strMessage, formatErrorInfo(machine));
 }
 
 void UIMessageCenter::warnAboutIncorrectPort(QWidget *pParent /*= 0*/) const
 {
-    message(pParent ? pParent : mainWindowShown(), MessageType_Error,
-            tr("The current port forwarding rules are not valid. "
-               "None of the host or guest port values may be set to zero."));
+    alert(pParent ? pParent : mainWindowShown(), MessageType_Error,
+          tr("The current port forwarding rules are not valid. "
+             "None of the host or guest port values may be set to zero."));
 }
 
 bool UIMessageCenter::confirmCancelingPortForwardingDialog(QWidget *pParent /*= 0*/) const
 {
-    return messageOkCancel(pParent ? pParent : mainWindowShown(), MessageType_Question,
-                           tr("<p>There are unsaved changes in the port forwarding configuration.</p>"
-                              "<p>If you proceed your changes will be discarded.</p>"));
+    return questionBinary(pParent ? pParent : mainWindowShown(), MessageType_Question,
+                          tr("<p>There are unsaved changes in the port forwarding configuration.</p>"
+                             "<p>If you proceed your changes will be discarded.</p>"));
 }
 
@@ -1108,9 +1128,9 @@
                                                QWidget *pParent /*= 0*/)
 {
-    message(pParent ? pParent : mainMachineWindowShown(), MessageType_Error,
-            tr("Failed to create the shared folder <b>%1</b> (pointing to "
-               "<nobr><b>%2</b></nobr>) for the virtual machine <b>%3</b>.")
-               .arg(strName, strPath, strMachineName),
-            formatErrorInfo(machine));
+    error(pParent ? pParent : mainMachineWindowShown(), MessageType_Error,
+          tr("Failed to create the shared folder <b>%1</b> (pointing to "
+             "<nobr><b>%2</b></nobr>) for the virtual machine <b>%3</b>.")
+             .arg(strName, strPath, strMachineName),
+          formatErrorInfo(machine));
 }
 
@@ -1119,9 +1139,9 @@
                                                QWidget *pParent /*= 0*/)
 {
-    message(pParent ? pParent : mainMachineWindowShown(), MessageType_Error,
-            tr("Failed to create the shared folder <b>%1</b> (pointing to "
-               "<nobr><b>%2</b></nobr>) for the virtual machine <b>%3</b>.")
-               .arg(strName, strPath, strMachineName),
-            formatErrorInfo(console));
+    error(pParent ? pParent : mainMachineWindowShown(), MessageType_Error,
+          tr("Failed to create the shared folder <b>%1</b> (pointing to "
+             "<nobr><b>%2</b></nobr>) for the virtual machine <b>%3</b>.")
+             .arg(strName, strPath, strMachineName),
+          formatErrorInfo(console));
 }
 
@@ -1130,11 +1150,11 @@
                                                QWidget *pParent /*= 0*/)
 {
-    message(pParent ? pParent : mainMachineWindowShown(), MessageType_Error,
-            tr("<p>Failed to remove the shared folder <b>%1</b> (pointing to "
-               "<nobr><b>%2</b></nobr>) from the virtual machine <b>%3</b>.</p>"
-               "<p>Please close all programs in the guest OS that "
-               "may be using this shared folder and try again.</p>")
-               .arg(strName, strPath, strMachineName),
-            formatErrorInfo(machine));
+    error(pParent ? pParent : mainMachineWindowShown(), MessageType_Error,
+          tr("<p>Failed to remove the shared folder <b>%1</b> (pointing to "
+             "<nobr><b>%2</b></nobr>) from the virtual machine <b>%3</b>.</p>"
+             "<p>Please close all programs in the guest OS that "
+             "may be using this shared folder and try again.</p>")
+             .arg(strName, strPath, strMachineName),
+          formatErrorInfo(machine));
 }
 
@@ -1143,11 +1163,11 @@
                                                QWidget *pParent /*= 0*/)
 {
-    message(pParent ? pParent : mainMachineWindowShown(), MessageType_Error,
-            tr("<p>Failed to remove the shared folder <b>%1</b> (pointing to "
-               "<nobr><b>%2</b></nobr>) from the virtual machine <b>%3</b>.</p>"
-               "<p>Please close all programs in the guest OS that "
-               "may be using this shared folder and try again.</p>")
-               .arg(strName, strPath, strMachineName),
-            formatErrorInfo(console));
+    error(pParent ? pParent : mainMachineWindowShown(), MessageType_Error,
+          tr("<p>Failed to remove the shared folder <b>%1</b> (pointing to "
+             "<nobr><b>%2</b></nobr>) from the virtual machine <b>%3</b>.</p>"
+             "<p>Please close all programs in the guest OS that "
+             "may be using this shared folder and try again.</p>")
+             .arg(strName, strPath, strMachineName),
+          formatErrorInfo(console));
 }
 
@@ -1156,9 +1176,9 @@
     /* Preserve error-info: */
     COMResult res(machine);
-    /* Show the message: */
-    message(pParent ? pParent : mainWindowShown(), MessageType_Error,
-            tr("Failed to save the settings of the virtual machine <b>%1</b> to <b><nobr>%2</nobr></b>.")
-               .arg(machine.GetName(), machine.GetSettingsFilePath()),
-            formatErrorInfo(res));
+    /* Show the error: */
+    error(pParent ? pParent : mainWindowShown(), MessageType_Error,
+          tr("Failed to save the settings of the virtual machine <b>%1</b> to <b><nobr>%2</nobr></b>.")
+             .arg(machine.GetName(), machine.GetSettingsFilePath()),
+          formatErrorInfo(res));
 }
 
@@ -1166,8 +1186,8 @@
                                              QWidget *pParent /*= 0*/) const
 {
-    message(pParent ? pParent : mainWindowShown(), MessageType_Error,
-            tr("<p>Error changing medium type from <b>%1</b> to <b>%2</b>.</p>")
-               .arg(gpConverter->toString(oldMediumType)).arg(gpConverter->toString(newMediumType)),
-            formatErrorInfo(medium));
+    error(pParent ? pParent : mainWindowShown(), MessageType_Error,
+          tr("<p>Error changing medium type from <b>%1</b> to <b>%2</b>.</p>")
+             .arg(gpConverter->toString(oldMediumType)).arg(gpConverter->toString(newMediumType)),
+          formatErrorInfo(medium));
 }
 
@@ -1199,8 +1219,8 @@
             break;
     }
-    /* Show the message: */
-    return messageOkCancel(pParent ? pParent : mainWindowShown(), MessageType_Question,
-                           strMessage.arg(medium.location(), strUsage),
-                           0 /* auto-confirm id */, tr("Release", "detach medium"));
+    /* Show the question: */
+    return questionBinary(pParent ? pParent : mainWindowShown(), MessageType_Question,
+                          strMessage.arg(medium.location(), strUsage),
+                          0 /* auto-confirm id */, tr("Release", "detach medium"));
 }
 
@@ -1249,45 +1269,42 @@
             break;
     }
-    /* Show the message: */
-    return messageOkCancel(pParent ? pParent : mainWindowShown(), MessageType_Question,
-                           strMessage.arg(medium.location()),
-                           "confirmMediumRemoval" /* auto-confirm id */, tr("Remove", "medium"));
+    /* Show the question: */
+    return questionBinary(pParent ? pParent : mainWindowShown(), MessageType_Question,
+                          strMessage.arg(medium.location()),
+                          "confirmMediumRemoval" /* auto-confirm id */, tr("Remove", "medium"));
 }
 
 int UIMessageCenter::confirmDeleteHardDiskStorage(const QString &strLocation, QWidget *pParent /*= 0*/) const
 {
-    return message(pParent ? pParent : mainWindowShown(), MessageType_Question,
-                   tr("<p>Do you want to delete the storage unit of the hard disk "
-                      "<nobr><b>%1</b></nobr>?</p>"
-                      "<p>If you select <b>Delete</b> then the specified storage unit "
-                      "will be permanently deleted. This operation <b>cannot be "
-                      "undone</b>.</p>"
-                      "<p>If you select <b>Keep</b> then the hard disk will be only "
-                      "removed from the list of known hard disks, but the storage unit "
-                      "will be left untouched which makes it possible to add this hard "
-                      "disk to the list later again.</p>")
-                      .arg(strLocation),
-                   0 /* auto-confirm id */,
-                   AlertButton_Choice1,
-                   AlertButton_Choice2 | AlertButtonOption_Default,
-                   AlertButton_Cancel | AlertButtonOption_Escape,
-                   tr("Delete", "hard disk storage"),
-                   tr("Keep", "hard disk storage"));
+    return questionTrinary(pParent ? pParent : mainWindowShown(), MessageType_Question,
+                           tr("<p>Do you want to delete the storage unit of the hard disk "
+                              "<nobr><b>%1</b></nobr>?</p>"
+                              "<p>If you select <b>Delete</b> then the specified storage unit "
+                              "will be permanently deleted. This operation <b>cannot be "
+                              "undone</b>.</p>"
+                              "<p>If you select <b>Keep</b> then the hard disk will be only "
+                              "removed from the list of known hard disks, but the storage unit "
+                              "will be left untouched which makes it possible to add this hard "
+                              "disk to the list later again.</p>")
+                              .arg(strLocation),
+                           0 /* auto-confirm id */,
+                           tr("Delete", "hard disk storage"),
+                           tr("Keep", "hard disk storage"));
 }
 
 void UIMessageCenter::cannotDeleteHardDiskStorage(const CMedium &medium, const QString &strLocation, QWidget *pParent /*= 0*/) const
 {
-    message(pParent ? pParent : mainWindowShown(), MessageType_Error,
-            tr("Failed to delete the storage unit of the hard disk <b>%1</b>.")
-               .arg(strLocation),
-            formatErrorInfo(medium));
+    error(pParent ? pParent : mainWindowShown(), MessageType_Error,
+          tr("Failed to delete the storage unit of the hard disk <b>%1</b>.")
+             .arg(strLocation),
+          formatErrorInfo(medium));
 }
 
 void UIMessageCenter::cannotDeleteHardDiskStorage(const CProgress &progress, const QString &strLocation, QWidget *pParent /*= 0*/) const
 {
-    message(pParent ? pParent : mainWindowShown(), MessageType_Error,
-            tr("Failed to delete the storage unit of the hard disk <b>%1</b>.")
-               .arg(strLocation),
-            !progress.isOk() ? formatErrorInfo(progress) : formatErrorInfo(progress.GetErrorInfo()));
+    error(pParent ? pParent : mainWindowShown(), MessageType_Error,
+          tr("Failed to delete the storage unit of the hard disk <b>%1</b>.")
+             .arg(strLocation),
+          !progress.isOk() ? formatErrorInfo(progress) : formatErrorInfo(progress.GetErrorInfo()));
 }
 
@@ -1321,9 +1338,10 @@
             break;
     }
-    /* Show the message: */
-    message(pParent ? pParent : mainWindowShown(), MessageType_Error, strMessage, strErrorInfo);
-}
-
-int UIMessageCenter::cannotRemountMedium(const CMachine &machine, const UIMedium &medium, bool fMount, bool fRetry, QWidget *pParent /*= 0*/) const
+    /* Show the error: */
+    error(pParent ? pParent : mainWindowShown(), MessageType_Error,
+          strMessage, strErrorInfo);
+}
+
+bool UIMessageCenter::cannotRemountMedium(const CMachine &machine, const UIMedium &medium, bool fMount, bool fRetry, QWidget *pParent /*= 0*/) const
 {
     /* Preserve error-info: */
@@ -1370,12 +1388,13 @@
     /* Show the messsage: */
     if (fRetry)
-        return messageOkCancel(pParent ? pParent : mainWindowShown(), MessageType_Question,
-                               strMessage.arg(medium.isHostDrive() ? medium.name() : medium.location()).arg(machine.GetName()),
-                               strErrorInfo,
-                               0 /* Auto Confirm ID */,
-                               tr("Force Unmount"));
-    return message(pParent ? pParent : mainWindowShown(), MessageType_Error,
-                   strMessage.arg(medium.isHostDrive() ? medium.name() : medium.location()).arg(machine.GetName()),
-                   strErrorInfo);
+        return errorWithQuestion(pParent ? pParent : mainWindowShown(), MessageType_Question,
+                                 strMessage.arg(medium.isHostDrive() ? medium.name() : medium.location()).arg(machine.GetName()),
+                                 strErrorInfo,
+                                 0 /* Auto Confirm ID */,
+                                 tr("Force Unmount"));
+    error(pParent ? pParent : mainWindowShown(), MessageType_Error,
+          strMessage.arg(medium.isHostDrive() ? medium.name() : medium.location()).arg(machine.GetName()),
+          strErrorInfo);
+    return false;
 }
 
@@ -1404,7 +1423,7 @@
             break;
     }
-    /* Show the message: */
-    message(pParent ? pParent : mainWindowShown(), MessageType_Error,
-            strMessage.arg(strLocation), formatErrorInfo(vbox));
+    /* Show the error: */
+    error(pParent ? pParent : mainWindowShown(), MessageType_Error,
+          strMessage.arg(strLocation), formatErrorInfo(vbox));
 }
 
@@ -1433,34 +1452,34 @@
             break;
     }
-    /* Show the message: */
-    message(pParent ? pParent : mainWindowShown(), MessageType_Error,
-            strMessage.arg(medium.location()), formatErrorInfo(rc));
+    /* Show the error: */
+    error(pParent ? pParent : mainWindowShown(), MessageType_Error,
+          strMessage.arg(medium.location()), formatErrorInfo(rc));
 }
 
 bool UIMessageCenter::confirmHardDisklessMachine(QWidget *pParent /*= 0*/) const
 {
-    return messageOkCancel(pParent ? pParent : mainWindowShown(), MessageType_Warning,
-                           tr("You are about to create a new virtual machine without a hard drive. "
-                              "You will not be able to install an operating system on the machine "
-                              "until you add one. In the mean time you will only be able to start the "
-                              "machine using a virtual optical disk or from the network."),
-                           0 /* auto-confirm id */,
-                           tr("Continue", "no hard disk attached"),
-                           tr("Go Back", "no hard disk attached"));
+    return questionBinary(pParent ? pParent : mainWindowShown(), MessageType_Warning,
+                          tr("You are about to create a new virtual machine without a hard drive. "
+                             "You will not be able to install an operating system on the machine "
+                             "until you add one. In the mean time you will only be able to start the "
+                             "machine using a virtual optical disk or from the network."),
+                          0 /* auto-confirm id */,
+                          tr("Continue", "no hard disk attached"),
+                          tr("Go Back", "no hard disk attached"));
 }
 
 void UIMessageCenter::cannotCreateMachine(const CVirtualBox &vbox, QWidget *pParent /*= 0*/) const
 {
-    message(pParent ? pParent : mainWindowShown(), MessageType_Error,
-            tr("Failed to create a new virtual machine."),
-            formatErrorInfo(vbox));
+    error(pParent ? pParent : mainWindowShown(), MessageType_Error,
+          tr("Failed to create a new virtual machine."),
+          formatErrorInfo(vbox));
 }
 
 void UIMessageCenter::cannotRegisterMachine(const CVirtualBox &vbox, const QString &strMachineName, QWidget *pParent /*= 0*/) const
 {
-    message(pParent ? pParent : mainWindowShown(), MessageType_Error,
-            tr("Failed to register the virtual machine <b>%1</b>.")
-               .arg(strMachineName),
-            formatErrorInfo(vbox));
+    error(pParent ? pParent : mainWindowShown(), MessageType_Error,
+          tr("Failed to register the virtual machine <b>%1</b>.")
+             .arg(strMachineName),
+          formatErrorInfo(vbox));
 }
 
@@ -1469,51 +1488,51 @@
     /* Preserve error-info: */
     QString strErrorInfo = formatErrorInfo(machine);
-    /* Show the message: */
-    message(pParent ? pParent : mainWindowShown(), MessageType_Error,
-            tr("Failed to clone the virtual machine <b>%1</b>.")
-               .arg(machine.GetName()),
-            strErrorInfo);
+    /* Show the error: */
+    error(pParent ? pParent : mainWindowShown(), MessageType_Error,
+          tr("Failed to clone the virtual machine <b>%1</b>.")
+             .arg(machine.GetName()),
+          strErrorInfo);
 }
 
 void UIMessageCenter::cannotCreateClone(const CProgress &progress, const QString &strMachineName, QWidget *pParent /*= 0*/) const
 {
-    message(pParent ? pParent : mainWindowShown(), MessageType_Error,
-            tr("Failed to clone the virtual machine <b>%1</b>.")
-               .arg(strMachineName),
-            !progress.isOk() ? formatErrorInfo(progress) : formatErrorInfo(progress.GetErrorInfo()));
+    error(pParent ? pParent : mainWindowShown(), MessageType_Error,
+          tr("Failed to clone the virtual machine <b>%1</b>.")
+             .arg(strMachineName),
+          !progress.isOk() ? formatErrorInfo(progress) : formatErrorInfo(progress.GetErrorInfo()));
 }
 
 void UIMessageCenter::cannotOverwriteHardDiskStorage(const QString &strLocation, QWidget *pParent /*= 0*/) const
 {
-    message(pParent ? pParent : mainWindowShown(), MessageType_Info,
-            tr("<p>The hard disk storage unit at location <b>%1</b> already exists. "
-               "You cannot create a new virtual hard disk that uses this location "
-               "because it can be already used by another virtual hard disk.</p>"
-               "<p>Please specify a different location.</p>")
-               .arg(strLocation));
+    alert(pParent ? pParent : mainWindowShown(), MessageType_Info,
+          tr("<p>The hard disk storage unit at location <b>%1</b> already exists. "
+             "You cannot create a new virtual hard disk that uses this location "
+             "because it can be already used by another virtual hard disk.</p>"
+             "<p>Please specify a different location.</p>")
+             .arg(strLocation));
 }
 
 void UIMessageCenter::cannotCreateHardDiskStorage(const CVirtualBox &vbox, const QString &strLocation, QWidget *pParent /*= 0*/) const
 {
-    message(pParent ? pParent : mainWindowShown(), MessageType_Error,
-            tr("Failed to create the hard disk storage <nobr><b>%1</b>.</nobr>")
-               .arg(strLocation),
-            formatErrorInfo(vbox));
+    error(pParent ? pParent : mainWindowShown(), MessageType_Error,
+          tr("Failed to create the hard disk storage <nobr><b>%1</b>.</nobr>")
+             .arg(strLocation),
+          formatErrorInfo(vbox));
 }
 
 void UIMessageCenter::cannotCreateHardDiskStorage(const CMedium &medium, const QString &strLocation, QWidget *pParent /*= 0*/) const
 {
-    message(pParent ? pParent : mainWindowShown(), MessageType_Error,
-            tr("Failed to create the hard disk storage <nobr><b>%1</b>.</nobr>")
-               .arg(strLocation),
-            formatErrorInfo(medium));
+    error(pParent ? pParent : mainWindowShown(), MessageType_Error,
+          tr("Failed to create the hard disk storage <nobr><b>%1</b>.</nobr>")
+             .arg(strLocation),
+          formatErrorInfo(medium));
 }
 
 void UIMessageCenter::cannotCreateHardDiskStorage(const CProgress &progress, const QString &strLocation, QWidget *pParent /*= 0*/) const
 {
-    message(pParent ? pParent : mainWindowShown(), MessageType_Error,
-            tr("Failed to create the hard disk storage <nobr><b>%1</b>.</nobr>")
-               .arg(strLocation),
-            !progress.isOk() ? formatErrorInfo(progress) : formatErrorInfo(progress.GetErrorInfo()));
+    error(pParent ? pParent : mainWindowShown(), MessageType_Error,
+          tr("Failed to create the hard disk storage <nobr><b>%1</b>.</nobr>")
+             .arg(strLocation),
+          !progress.isOk() ? formatErrorInfo(progress) : formatErrorInfo(progress.GetErrorInfo()));
 }
 
@@ -1521,8 +1540,8 @@
 {
     QFileInfo fi(strFolderName);
-    message(pParent ? pParent : mainWindowShown(), MessageType_Critical,
-            tr("<p>Cannot remove the machine folder <nobr><b>%1</b>.</nobr></p>"
-               "<p>Please check that this folder really exists and that you have permissions to remove it.</p>")
-               .arg(fi.fileName()));
+    alert(pParent ? pParent : mainWindowShown(), MessageType_Critical,
+          tr("<p>Cannot remove the machine folder <nobr><b>%1</b>.</nobr></p>"
+             "<p>Please check that this folder really exists and that you have permissions to remove it.</p>")
+             .arg(fi.fileName()));
 }
 
@@ -1530,8 +1549,8 @@
 {
     QFileInfo fi(strFolderName);
-    message(pParent ? pParent : mainWindowShown(), MessageType_Critical,
-            tr("<p>Cannot create the machine folder <b>%1</b> in the parent folder <nobr><b>%2</b>.</nobr></p>"
-               "<p>This folder already exists and possibly belongs to another machine.</p>")
-               .arg(fi.fileName()).arg(fi.absolutePath()));
+    alert(pParent ? pParent : mainWindowShown(), MessageType_Critical,
+          tr("<p>Cannot create the machine folder <b>%1</b> in the parent folder <nobr><b>%2</b>.</nobr></p>"
+             "<p>This folder already exists and possibly belongs to another machine.</p>")
+             .arg(fi.fileName()).arg(fi.absolutePath()));
 }
 
@@ -1539,8 +1558,8 @@
 {
     QFileInfo fi(strFolderName);
-    message(pParent ? pParent : mainWindowShown(), MessageType_Critical,
-            tr("<p>Cannot create the machine folder <b>%1</b> in the parent folder <nobr><b>%2</b>.</nobr></p>"
-               "<p>Please check that the parent really exists and that you have permissions to create the machine folder.</p>")
-               .arg(fi.fileName()).arg(fi.absolutePath()));
+    alert(pParent ? pParent : mainWindowShown(), MessageType_Critical,
+          tr("<p>Cannot create the machine folder <b>%1</b> in the parent folder <nobr><b>%2</b>.</nobr></p>"
+             "<p>Please check that the parent really exists and that you have permissions to create the machine folder.</p>")
+             .arg(fi.fileName()).arg(fi.absolutePath()));
 }
 
@@ -1555,46 +1574,45 @@
     if (!strWarningInfo.isEmpty())
         strWarningInfo = "<br />" + strWarningInfo;
-    /* Show the message: */
-    message(pParent ? pParent : mainWindowShown(), MessageType_Error,
-            tr("Failed to open/interpret appliance <b>%1</b>.")
-               .arg(appliance.GetPath()),
-            strWarningInfo + strErrorInfo);
+    /* Show the error: */
+    error(pParent ? pParent : mainWindowShown(), MessageType_Error,
+          tr("Failed to open/interpret appliance <b>%1</b>.")
+             .arg(appliance.GetPath()),
+          strWarningInfo + strErrorInfo);
 }
 
 void UIMessageCenter::cannotImportAppliance(const CProgress &progress, const QString &strPath, QWidget *pParent /*= 0*/) const
 {
-    message(pParent ? pParent : mainWindowShown(), MessageType_Error,
-            tr("Failed to import appliance <b>%1</b>.")
-               .arg(strPath),
-            !progress.isOk() ? formatErrorInfo(progress) : formatErrorInfo(progress.GetErrorInfo()));
+    error(pParent ? pParent : mainWindowShown(), MessageType_Error,
+          tr("Failed to import appliance <b>%1</b>.")
+             .arg(strPath),
+          !progress.isOk() ? formatErrorInfo(progress) : formatErrorInfo(progress.GetErrorInfo()));
 }
 
 void UIMessageCenter::cannotCheckFiles(const CProgress &progress, QWidget *pParent /*= 0*/) const
 {
-    message(pParent ? pParent : mainWindowShown(), MessageType_Error,
-            tr("Failed to check files."),
-            !progress.isOk() ? formatErrorInfo(progress) : formatErrorInfo(progress.GetErrorInfo()));
+    error(pParent ? pParent : mainWindowShown(), MessageType_Error,
+          tr("Failed to check files."),
+          !progress.isOk() ? formatErrorInfo(progress) : formatErrorInfo(progress.GetErrorInfo()));
 }
 
 void UIMessageCenter::cannotRemoveFiles(const CProgress &progress, QWidget *pParent /*= 0*/) const
 {
-    message(pParent ? pParent : mainWindowShown(), MessageType_Error,
-            tr("Failed to remove file."),
-            !progress.isOk() ? formatErrorInfo(progress) : formatErrorInfo(progress.GetErrorInfo()));
+    error(pParent ? pParent : mainWindowShown(), MessageType_Error,
+          tr("Failed to remove file."),
+          !progress.isOk() ? formatErrorInfo(progress) : formatErrorInfo(progress.GetErrorInfo()));
 }
 
 bool UIMessageCenter::confirmExportMachinesInSaveState(const QStringList &machineNames, QWidget *pParent /*= 0*/) const
 {
-    return messageOkCancel(pParent ? pParent : mainWindowShown(), MessageType_Warning,
-                           tr("<p>The %n following virtual machine(s) are currently in a saved state: <b>%1</b></p>"
-                              "<p>If you continue the runtime state of the exported machine(s) will be discarded. "
-                              "The other machine(s) will not be changed.</p>",
-                              "This text is never used with n == 0. Feel free to drop the %n where possible, "
-                              "we only included it because of problems with Qt Linguist "
-                              "(but the user can see how many machines are in the list and doesn't need to be told).",
-                              machineNames.size())
-                              .arg(machineNames.join(", ")),
-                           0 /* auto-confirm id */,
-                           tr("Continue"));
+    return questionBinary(pParent ? pParent : mainWindowShown(), MessageType_Warning,
+                          tr("<p>The %n following virtual machine(s) are currently in a saved state: <b>%1</b></p>"
+                             "<p>If you continue the runtime state of the exported machine(s) will be discarded. "
+                             "The other machine(s) will not be changed.</p>",
+                             "This text is never used with n == 0. Feel free to drop the %n where possible, "
+                             "we only included it because of problems with Qt Linguist (but the user can see "
+                             "how many machines are in the list and doesn't need to be told).", machineNames.size())
+                             .arg(machineNames.join(", ")),
+                          0 /* auto-confirm id */,
+                          tr("Continue"));
 }
 
@@ -1603,33 +1621,33 @@
     /* Preserve error-info: */
     QString strErrorInfo = formatErrorInfo(appliance);
-    /* Show the message: */
-    message(pParent ? pParent : mainWindowShown(), MessageType_Error,
-            tr("Failed to prepare the export of the appliance <b>%1</b>.")
-               .arg(appliance.GetPath()),
-            strErrorInfo);
+    /* Show the error: */
+    error(pParent ? pParent : mainWindowShown(), MessageType_Error,
+          tr("Failed to prepare the export of the appliance <b>%1</b>.")
+             .arg(appliance.GetPath()),
+          strErrorInfo);
 }
 
 void UIMessageCenter::cannotExportAppliance(const CMachine &machine, const QString &strPath, QWidget *pParent /*= 0*/) const
 {
-    message(pParent ? pParent : mainWindowShown(), MessageType_Error,
-            tr("Failed to prepare the export of the appliance <b>%1</b>.")
-               .arg(strPath),
-            formatErrorInfo(machine));
+    error(pParent ? pParent : mainWindowShown(), MessageType_Error,
+          tr("Failed to prepare the export of the appliance <b>%1</b>.")
+             .arg(strPath),
+          formatErrorInfo(machine));
 }
 
 void UIMessageCenter::cannotExportAppliance(const CProgress &progress, const QString &strPath, QWidget *pParent /*= 0*/) const
 {
-    message(pParent ? pParent : mainWindowShown(), MessageType_Error,
-            tr("Failed to export appliance <b>%1</b>.")
-               .arg(strPath),
-            !progress.isOk() ? formatErrorInfo(progress) : formatErrorInfo(progress.GetErrorInfo()));
+    error(pParent ? pParent : mainWindowShown(), MessageType_Error,
+          tr("Failed to export appliance <b>%1</b>.")
+             .arg(strPath),
+          !progress.isOk() ? formatErrorInfo(progress) : formatErrorInfo(progress.GetErrorInfo()));
 }
 
 void UIMessageCenter::cannotFindSnapshotByName(const CMachine &machine, const QString &strName, QWidget *pParent /*= 0*/) const
 {
-    message(pParent ? pParent : mainWindowShown(), MessageType_Error,
-            tr("Can't find snapshot named <b>%1</b>.")
-               .arg(strName),
-            formatErrorInfo(machine));
+    error(pParent ? pParent : mainWindowShown(), MessageType_Error,
+          tr("Can't find snapshot named <b>%1</b>.")
+             .arg(strName),
+          formatErrorInfo(machine));
 }
 
@@ -1692,27 +1710,27 @@
         formatted = "<qt>" + formatted + "</qt>";
 
-    /* Show the message: */
+    /* Show the error: */
     if (type == MessageType_Critical)
     {
-        message(mainMachineWindowShown(), type,
-                tr("<p>A fatal error has occurred during virtual machine execution! "
-                   "The virtual machine will be powered off. Please copy the following error message "
-                   "using the clipboard to help diagnose the problem:</p>"),
-                formatted, autoConfimId.data());
+        error(mainMachineWindowShown(), type,
+              tr("<p>A fatal error has occurred during virtual machine execution! "
+                 "The virtual machine will be powered off. Please copy the following error message "
+                 "using the clipboard to help diagnose the problem:</p>"),
+              formatted, autoConfimId.data());
     }
     else if (type == MessageType_Error)
     {
-        message(mainMachineWindowShown(), type,
-                tr("<p>An error has occurred during virtual machine execution! "
-                   "The error details are shown below. You may try to correct the error "
-                   "and resume the virtual machine execution.</p>"),
-                formatted, autoConfimId.data());
+        error(mainMachineWindowShown(), type,
+              tr("<p>An error has occurred during virtual machine execution! "
+                 "The error details are shown below. You may try to correct the error "
+                 "and resume the virtual machine execution.</p>"),
+              formatted, autoConfimId.data());
     }
     else
     {
-        message(mainMachineWindowShown(), type,
-                tr("<p>The virtual machine execution may run into an error condition as described below. "
-                   "We suggest that you take an appropriate action to avert the error.</p>"),
-                formatted, autoConfimId.data());
+        error(mainMachineWindowShown(), type,
+              tr("<p>The virtual machine execution may run into an error condition as described below. "
+                 "We suggest that you take an appropriate action to avert the error.</p>"),
+              formatted, autoConfimId.data());
     }
 
@@ -1728,26 +1746,26 @@
 bool UIMessageCenter::remindAboutGuruMeditation(const QString &strLogFolder)
 {
-    return messageOkCancel(mainMachineWindowShown(), MessageType_GuruMeditation,
-                           tr("<p>A critical error has occurred while running the virtual "
-                              "machine and the machine execution has been stopped.</p>"
-                              ""
-                              "<p>For help, please see the Community section on "
-                              "<a href=http://www.virtualbox.org>http://www.virtualbox.org</a> "
-                              "or your support contract. Please provide the contents of the "
-                              "log file <tt>VBox.log</tt> and the image file <tt>VBox.png</tt>, "
-                              "which you can find in the <nobr><b>%1</b></nobr> directory, "
-                              "as well as a description of what you were doing when this error happened. "
-                              ""
-                              "Note that you can also access the above files by selecting <b>Show Log</b> "
-                              "from the <b>Machine</b> menu of the main VirtualBox window.</p>"
-                              ""
-                              "<p>Press <b>OK</b> if you want to power off the machine "
-                              "or press <b>Ignore</b> if you want to leave it as is for debugging. "
-                              "Please note that debugging requires special knowledge and tools, "
-                              "so it is recommended to press <b>OK</b> now.</p>")
-                              .arg(strLogFolder),
-                           0 /* auto-confirm id */,
-                           QIMessageBox::tr("OK"),
-                           tr("Ignore"));
+    return questionBinary(mainMachineWindowShown(), MessageType_GuruMeditation,
+                          tr("<p>A critical error has occurred while running the virtual "
+                             "machine and the machine execution has been stopped.</p>"
+                             ""
+                             "<p>For help, please see the Community section on "
+                             "<a href=http://www.virtualbox.org>http://www.virtualbox.org</a> "
+                             "or your support contract. Please provide the contents of the "
+                             "log file <tt>VBox.log</tt> and the image file <tt>VBox.png</tt>, "
+                             "which you can find in the <nobr><b>%1</b></nobr> directory, "
+                             "as well as a description of what you were doing when this error happened. "
+                             ""
+                             "Note that you can also access the above files by selecting <b>Show Log</b> "
+                             "from the <b>Machine</b> menu of the main VirtualBox window.</p>"
+                             ""
+                             "<p>Press <b>OK</b> if you want to power off the machine "
+                             "or press <b>Ignore</b> if you want to leave it as is for debugging. "
+                             "Please note that debugging requires special knowledge and tools, "
+                             "so it is recommended to press <b>OK</b> now.</p>")
+                             .arg(strLogFolder),
+                          0 /* auto-confirm id */,
+                          QIMessageBox::tr("OK"),
+                          tr("Ignore"));
 }
 
@@ -1755,19 +1773,19 @@
 {
     if (fHWVirtExSupported)
-        return messageOkCancel(mainMachineWindowShown(), MessageType_Error,
-                               tr("<p>VT-x/AMD-V hardware acceleration has been enabled, but is "
-                                  "not operational. Your 64-bit guest will fail to detect a "
-                                  "64-bit CPU and will not be able to boot.</p><p>Please ensure "
-                                  "that you have enabled VT-x/AMD-V properly in the BIOS of your "
-                                  "host computer.</p>"),
-                               0 /* auto-confirm id */,
-                               tr("Close VM"), tr("Continue"));
+        return questionBinary(mainMachineWindowShown(), MessageType_Error,
+                              tr("<p>VT-x/AMD-V hardware acceleration has been enabled, but is "
+                                 "not operational. Your 64-bit guest will fail to detect a "
+                                 "64-bit CPU and will not be able to boot.</p><p>Please ensure "
+                                 "that you have enabled VT-x/AMD-V properly in the BIOS of your "
+                                 "host computer.</p>"),
+                              0 /* auto-confirm id */,
+                              tr("Close VM"), tr("Continue"));
     else
-        return messageOkCancel(mainMachineWindowShown(), MessageType_Error,
-                               tr("<p>VT-x/AMD-V hardware acceleration is not available on your system. "
-                                  "Your 64-bit guest will fail to detect a 64-bit CPU and will "
-                                  "not be able to boot."),
-                               0 /* auto-confirm id */,
-                               tr("Close VM"), tr("Continue"));
+        return questionBinary(mainMachineWindowShown(), MessageType_Error,
+                              tr("<p>VT-x/AMD-V hardware acceleration is not available on your system. "
+                                 "Your 64-bit guest will fail to detect a 64-bit CPU and will "
+                                 "not be able to boot."),
+                              0 /* auto-confirm id */,
+                              tr("Close VM"), tr("Continue"));
 }
 
@@ -1775,72 +1793,71 @@
 {
     if (fHWVirtExSupported)
-        return messageOkCancel(mainMachineWindowShown(), MessageType_Error,
-                               tr("<p>VT-x/AMD-V hardware acceleration has been enabled, but is not operational. "
-                                  "Certain guests (e.g. OS/2 and QNX) require this feature.</p>"
-                                  "<p>Please ensure that you have enabled VT-x/AMD-V properly in the BIOS of your host computer.</p>"),
-                               0 /* auto-confirm id */,
-                               tr("Close VM"), tr("Continue"));
+        return questionBinary(mainMachineWindowShown(), MessageType_Error,
+                              tr("<p>VT-x/AMD-V hardware acceleration has been enabled, but is not operational. "
+                                 "Certain guests (e.g. OS/2 and QNX) require this feature.</p>"
+                                 "<p>Please ensure that you have enabled VT-x/AMD-V properly in the BIOS of your host computer.</p>"),
+                              0 /* auto-confirm id */,
+                              tr("Close VM"), tr("Continue"));
     else
-        return messageOkCancel(mainMachineWindowShown(), MessageType_Error,
-                               tr("<p>VT-x/AMD-V hardware acceleration is not available on your system. "
-                                  "Certain guests (e.g. OS/2 and QNX) require this feature and will fail to boot without it.</p>"),
-                               0 /* auto-confirm id */,
-                               tr("Close VM"), tr("Continue"));
+        return questionBinary(mainMachineWindowShown(), MessageType_Error,
+                              tr("<p>VT-x/AMD-V hardware acceleration is not available on your system. "
+                                 "Certain guests (e.g. OS/2 and QNX) require this feature and will fail to boot without it.</p>"),
+                              0 /* auto-confirm id */,
+                              tr("Close VM"), tr("Continue"));
 }
 
 bool UIMessageCenter::cannotStartWithoutNetworkIf(const QString &strMachineName, const QString &strIfNames) const
 {
-    return messageOkCancel(mainMachineWindowShown(), MessageType_Error,
-                           tr("<p>Could not start the machine <b>%1</b> because the following "
-                              "physical network interfaces were not found:</p><p><b>%2</b></p>"
-                              "<p>You can either change the machine's network settings or stop the machine.</p>")
-                              .arg(strMachineName)
-                              .arg(strIfNames),
-                           0 /* auto-confirm id */,
-                           tr("Change Network Settings"), tr("Close VM"));
+    return questionBinary(mainMachineWindowShown(), MessageType_Error,
+                          tr("<p>Could not start the machine <b>%1</b> because the following "
+                             "physical network interfaces were not found:</p><p><b>%2</b></p>"
+                             "<p>You can either change the machine's network settings or stop the machine.</p>")
+                             .arg(strMachineName, strIfNames),
+                          0 /* auto-confirm id */,
+                          tr("Change Network Settings"), tr("Close VM"));
 }
 
 void UIMessageCenter::cannotStartMachine(const CConsole &console, const QString &strName) const
 {
-    message(mainMachineWindowShown(), MessageType_Error,
-            tr("Failed to start the virtual machine <b>%1</b>.")
-               .arg(strName),
-            formatErrorInfo(console));
+    error(mainMachineWindowShown(), MessageType_Error,
+          tr("Failed to start the virtual machine <b>%1</b>.")
+             .arg(strName),
+          formatErrorInfo(console));
 }
 
 void UIMessageCenter::cannotStartMachine(const CProgress &progress, const QString &strName) const
 {
-    message(mainMachineWindowShown(), MessageType_Error,
-            tr("Failed to start the virtual machine <b>%1</b>.")
-               .arg(strName),
-            !progress.isOk() ? formatErrorInfo(progress) : formatErrorInfo(progress.GetErrorInfo()));
+    error(mainMachineWindowShown(), MessageType_Error,
+          tr("Failed to start the virtual machine <b>%1</b>.")
+             .arg(strName),
+          !progress.isOk() ? formatErrorInfo(progress) : formatErrorInfo(progress.GetErrorInfo()));
 }
 
 void UIMessageCenter::cannotSendACPIToMachine() const
 {
-    message(mainMachineWindowShown(),  MessageType_Warning,
-            tr("You are trying to shut down the guest with the ACPI power button. "
-               "This is currently not possible because the guest does not support software shutdown."));
+    alert(mainMachineWindowShown(),  MessageType_Warning,
+          tr("You are trying to shut down the guest with the ACPI power button. "
+             "This is currently not possible because the guest does not support software shutdown."));
 }
 
 bool UIMessageCenter::confirmInputCapture(bool &fAutoConfirmed) const
 {
-    int rc = message(mainMachineWindowShown(), MessageType_Info,
-                     tr("<p>You have <b>clicked the mouse</b> inside the Virtual Machine display or pressed the <b>host key</b>. "
-                        "This will cause the Virtual Machine to <b>capture</b> the host mouse pointer (only if the mouse pointer "
-                        "integration is not currently supported by the guest OS) and the keyboard, which will make them "
-                        "unavailable to other applications running on your host machine.</p>"
-                        "<p>You can press the <b>host key</b> at any time to <b>uncapture</b> the keyboard and mouse "
-                        "(if it is captured) and return them to normal operation. "
-                        "The currently assigned host key is shown on the status bar at the bottom of the Virtual Machine window, "
-                        "next to the&nbsp;<img src=:/hostkey_16px.png/>&nbsp;icon. "
-                        "This icon, together with the mouse icon placed nearby, indicate the current keyboard and mouse capture state.</p>") +
-                     tr("<p>The host key is currently defined as <b>%1</b>.</p>", "additional message box paragraph")
-                        .arg(UIHostCombo::toReadableString(vboxGlobal().settings().hostCombo())),
-                     "confirmInputCapture",
-                     AlertButton_Ok | AlertButtonOption_Default,
-                     AlertButton_Cancel | AlertButtonOption_Escape,
-                     0,
-                     tr("Capture", "do input capture"));
+    int rc = question(mainMachineWindowShown(), MessageType_Info,
+                      tr("<p>You have <b>clicked the mouse</b> inside the Virtual Machine display or pressed the <b>host key</b>. "
+                         "This will cause the Virtual Machine to <b>capture</b> the host mouse pointer (only if the mouse pointer "
+                         "integration is not currently supported by the guest OS) and the keyboard, which will make them "
+                         "unavailable to other applications running on your host machine.</p>"
+                         "<p>You can press the <b>host key</b> at any time to <b>uncapture</b> the keyboard and mouse "
+                         "(if it is captured) and return them to normal operation. "
+                         "The currently assigned host key is shown on the status bar at the bottom of the Virtual Machine window, "
+                         "next to the&nbsp;<img src=:/hostkey_16px.png/>&nbsp;icon. "
+                         "This icon, together with the mouse icon placed nearby, indicate the current keyboard and mouse capture state.</p>") +
+                      tr("<p>The host key is currently defined as <b>%1</b>.</p>", "additional message box paragraph")
+                         .arg(UIHostCombo::toReadableString(vboxGlobal().settings().hostCombo())),
+                      "confirmInputCapture",
+                      AlertButton_Ok | AlertButtonOption_Default,
+                      AlertButton_Cancel | AlertButtonOption_Escape,
+                      0,
+                      tr("Capture", "do input capture"));
     /* Was the message auto-confirmed? */
     fAutoConfirmed = (rc & AutoConfirmed);
@@ -1851,22 +1868,22 @@
 void UIMessageCenter::remindAboutAutoCapture() const
 {
-    message(mainMachineWindowShown(), MessageType_Info,
-            tr("<p>You have the <b>Auto capture keyboard</b> option turned on. "
-               "This will cause the Virtual Machine to automatically <b>capture</b> "
-               "the keyboard every time the VM window is activated and make it "
-               "unavailable to other applications running on your host machine: "
-               "when the keyboard is captured, all keystrokes (including system ones "
-               "like Alt-Tab) will be directed to the VM.</p>"
-               "<p>You can press the <b>host key</b> at any time to <b>uncapture</b> the "
-               "keyboard and mouse (if it is captured) and return them to normal "
-               "operation. The currently assigned host key is shown on the status bar "
-               "at the bottom of the Virtual Machine window, next to the&nbsp;"
-               "<img src=:/hostkey_16px.png/>&nbsp;icon. This icon, together "
-               "with the mouse icon placed nearby, indicate the current keyboard "
-               "and mouse capture state.</p>") +
-            tr("<p>The host key is currently defined as <b>%1</b>.</p>",
-               "additional message box paragraph")
-                .arg(UIHostCombo::toReadableString(vboxGlobal().settings().hostCombo())),
-            "remindAboutAutoCapture");
+    alert(mainMachineWindowShown(), MessageType_Info,
+          tr("<p>You have the <b>Auto capture keyboard</b> option turned on. "
+             "This will cause the Virtual Machine to automatically <b>capture</b> "
+             "the keyboard every time the VM window is activated and make it "
+             "unavailable to other applications running on your host machine: "
+             "when the keyboard is captured, all keystrokes (including system ones "
+             "like Alt-Tab) will be directed to the VM.</p>"
+             "<p>You can press the <b>host key</b> at any time to <b>uncapture</b> the "
+             "keyboard and mouse (if it is captured) and return them to normal "
+             "operation. The currently assigned host key is shown on the status bar "
+             "at the bottom of the Virtual Machine window, next to the&nbsp;"
+             "<img src=:/hostkey_16px.png/>&nbsp;icon. This icon, together "
+             "with the mouse icon placed nearby, indicate the current keyboard "
+             "and mouse capture state.</p>") +
+          tr("<p>The host key is currently defined as <b>%1</b>.</p>",
+             "additional message box paragraph")
+             .arg(UIHostCombo::toReadableString(vboxGlobal().settings().hostCombo())),
+          "remindAboutAutoCapture");
 }
 
@@ -1886,23 +1903,23 @@
     if (fSupportsAbsolute)
     {
-        message(mainMachineWindowShown(), MessageType_Info,
-                tr("<p>The Virtual Machine reports that the guest OS supports <b>mouse pointer integration</b>. "
-                   "This means that you do not need to <i>capture</i> the mouse pointer to be able to use it in your guest OS -- "
-                   "all mouse actions you perform when the mouse pointer is over the Virtual Machine's display "
-                   "are directly sent to the guest OS. If the mouse is currently captured, it will be automatically uncaptured.</p>"
-                   "<p>The mouse icon on the status bar will look like&nbsp;<img src=:/mouse_seamless_16px.png/>&nbsp;to inform you "
-                   "that mouse pointer integration is supported by the guest OS and is currently turned on.</p>"
-                   "<p><b>Note</b>: Some applications may behave incorrectly in mouse pointer integration mode. "
-                   "You can always disable it for the current session (and enable it again) "
-                   "by selecting the corresponding action from the menu bar.</p>"),
-                kNames [1] /* auto-confirm id */);
+        alert(mainMachineWindowShown(), MessageType_Info,
+              tr("<p>The Virtual Machine reports that the guest OS supports <b>mouse pointer integration</b>. "
+                 "This means that you do not need to <i>capture</i> the mouse pointer to be able to use it in your guest OS -- "
+                 "all mouse actions you perform when the mouse pointer is over the Virtual Machine's display "
+                 "are directly sent to the guest OS. If the mouse is currently captured, it will be automatically uncaptured.</p>"
+                 "<p>The mouse icon on the status bar will look like&nbsp;<img src=:/mouse_seamless_16px.png/>&nbsp;to inform you "
+                 "that mouse pointer integration is supported by the guest OS and is currently turned on.</p>"
+                 "<p><b>Note</b>: Some applications may behave incorrectly in mouse pointer integration mode. "
+                 "You can always disable it for the current session (and enable it again) "
+                 "by selecting the corresponding action from the menu bar.</p>"),
+              kNames [1] /* auto-confirm id */);
     }
     else
     {
-        message(mainMachineWindowShown(), MessageType_Info,
-                tr("<p>The Virtual Machine reports that the guest OS does not support <b>mouse pointer integration</b> "
-                   "in the current video mode. You need to capture the mouse (by clicking over the VM display "
-                   "or pressing the host key) in order to use the mouse inside the guest OS.</p>"),
-                kNames [0] /* auto-confirm id */);
+        alert(mainMachineWindowShown(), MessageType_Info,
+              tr("<p>The Virtual Machine reports that the guest OS does not support <b>mouse pointer integration</b> "
+                 "in the current video mode. You need to capture the mouse (by clicking over the VM display "
+                 "or pressing the host key) in order to use the mouse inside the guest OS.</p>"),
+              kNames [0] /* auto-confirm id */);
     }
 
@@ -1911,190 +1928,182 @@
 }
 
-bool UIMessageCenter::remindAboutPausedVMInput() const
-{
-    int rc = message(mainMachineWindowShown(), MessageType_Info,
-                     tr("<p>The Virtual Machine is currently in the <b>Paused</b> state and "
-                        "not able to see any keyboard or mouse input. If you want to "
-                        "continue to work inside the VM, you need to resume it by selecting the "
-                        "corresponding action from the menu bar.</p>"),
-                        "remindAboutPausedVMInput");
-    return !(rc & AutoConfirmed);
+void UIMessageCenter::remindAboutPausedVMInput() const
+{
+    alert(mainMachineWindowShown(), MessageType_Info,
+          tr("<p>The Virtual Machine is currently in the <b>Paused</b> state and "
+             "not able to see any keyboard or mouse input. If you want to "
+             "continue to work inside the VM, you need to resume it by selecting the "
+             "corresponding action from the menu bar.</p>"),
+             "remindAboutPausedVMInput");
 }
 
 bool UIMessageCenter::confirmGoingFullscreen(const QString &strHotKey) const
 {
-    return messageOkCancel(mainMachineWindowShown(), MessageType_Info,
-                           tr("<p>The virtual machine window will be now switched to <b>fullscreen</b> mode. "
-                              "You can go back to windowed mode at any time by pressing <b>%1</b>.</p>"
-                              "<p>Note that the <i>Host</i> key is currently defined as <b>%2</b>.</p>"
-                              "<p>Note that the main menu bar is hidden in fullscreen mode. "
-                              "You can access it by pressing <b>Host+Home</b>.</p>")
-                              .arg(strHotKey)
-                              .arg(UIHostCombo::toReadableString(vboxGlobal().settings().hostCombo())),
-                           "confirmGoingFullscreen",
-                           tr("Switch"));
+    return questionBinary(mainMachineWindowShown(), MessageType_Info,
+                          tr("<p>The virtual machine window will be now switched to <b>fullscreen</b> mode. "
+                             "You can go back to windowed mode at any time by pressing <b>%1</b>.</p>"
+                             "<p>Note that the <i>Host</i> key is currently defined as <b>%2</b>.</p>"
+                             "<p>Note that the main menu bar is hidden in fullscreen mode. "
+                             "You can access it by pressing <b>Host+Home</b>.</p>")
+                             .arg(strHotKey, UIHostCombo::toReadableString(vboxGlobal().settings().hostCombo())),
+                          "confirmGoingFullscreen",
+                          tr("Switch"));
 }
 
 bool UIMessageCenter::confirmGoingSeamless(const QString &strHotKey) const
 {
-    return messageOkCancel(mainMachineWindowShown(), MessageType_Info,
-                           tr("<p>The virtual machine window will be now switched to <b>Seamless</b> mode. "
-                              "You can go back to windowed mode at any time by pressing <b>%1</b>.</p>"
-                              "<p>Note that the <i>Host</i> key is currently defined as <b>%2</b>.</p>"
-                              "<p>Note that the main menu bar is hidden in seamless mode. "
-                              "You can access it by pressing <b>Host+Home</b>.</p>")
-                              .arg(strHotKey)
-                              .arg(UIHostCombo::toReadableString(vboxGlobal().settings().hostCombo())),
-                           "confirmGoingSeamless",
-                           tr("Switch"));
+    return questionBinary(mainMachineWindowShown(), MessageType_Info,
+                          tr("<p>The virtual machine window will be now switched to <b>Seamless</b> mode. "
+                             "You can go back to windowed mode at any time by pressing <b>%1</b>.</p>"
+                             "<p>Note that the <i>Host</i> key is currently defined as <b>%2</b>.</p>"
+                             "<p>Note that the main menu bar is hidden in seamless mode. "
+                             "You can access it by pressing <b>Host+Home</b>.</p>")
+                             .arg(strHotKey, UIHostCombo::toReadableString(vboxGlobal().settings().hostCombo())),
+                          "confirmGoingSeamless",
+                          tr("Switch"));
 }
 
 bool UIMessageCenter::confirmGoingScale(const QString &strHotKey) const
 {
-    return messageOkCancel(mainMachineWindowShown(), MessageType_Info,
-                           tr("<p>The virtual machine window will be now switched to <b>Scale</b> mode. "
-                              "You can go back to windowed mode at any time by pressing <b>%1</b>.</p>"
-                              "<p>Note that the <i>Host</i> key is currently defined as <b>%2</b>.</p>"
-                              "<p>Note that the main menu bar is hidden in scale mode. "
-                              "You can access it by pressing <b>Host+Home</b>.</p>")
-                              .arg(strHotKey)
-                              .arg(UIHostCombo::toReadableString(vboxGlobal().settings().hostCombo())),
-                           "confirmGoingScale",
-                           tr("Switch"));
+    return questionBinary(mainMachineWindowShown(), MessageType_Info,
+                          tr("<p>The virtual machine window will be now switched to <b>Scale</b> mode. "
+                             "You can go back to windowed mode at any time by pressing <b>%1</b>.</p>"
+                             "<p>Note that the <i>Host</i> key is currently defined as <b>%2</b>.</p>"
+                             "<p>Note that the main menu bar is hidden in scale mode. "
+                             "You can access it by pressing <b>Host+Home</b>.</p>")
+                             .arg(strHotKey, UIHostCombo::toReadableString(vboxGlobal().settings().hostCombo())),
+                          "confirmGoingScale",
+                          tr("Switch"));
 }
 
 bool UIMessageCenter::cannotEnterFullscreenMode(ULONG /* uWidth */, ULONG /* uHeight */, ULONG /* uBpp */, ULONG64 uMinVRAM) const
 {
-    return messageOkCancel(mainMachineWindowShown(), MessageType_Warning,
-                           tr("<p>Could not switch the guest display to fullscreen mode due to insufficient guest video memory.</p>"
-                              "<p>You should configure the virtual machine to have at least <b>%1</b> of video memory.</p>"
-                              "<p>Press <b>Ignore</b> to switch to fullscreen mode anyway or press <b>Cancel</b> to cancel the operation.</p>")
-                              .arg(VBoxGlobal::formatSize(uMinVRAM)),
-                           0 /* auto-confirm id */,
-                           tr("Ignore"));
+    return questionBinary(mainMachineWindowShown(), MessageType_Warning,
+                          tr("<p>Could not switch the guest display to fullscreen mode due to insufficient guest video memory.</p>"
+                             "<p>You should configure the virtual machine to have at least <b>%1</b> of video memory.</p>"
+                             "<p>Press <b>Ignore</b> to switch to fullscreen mode anyway or press <b>Cancel</b> to cancel the operation.</p>")
+                             .arg(VBoxGlobal::formatSize(uMinVRAM)),
+                          0 /* auto-confirm id */,
+                          tr("Ignore"));
 }
 
 void UIMessageCenter::cannotEnterSeamlessMode(ULONG /* uWidth */, ULONG /* uHeight */, ULONG /* uBpp */, ULONG64 uMinVRAM) const
 {
-    message(mainMachineWindowShown(), MessageType_Error,
-            tr("<p>Could not enter seamless mode due to insufficient guest "
-               "video memory.</p>"
-               "<p>You should configure the virtual machine to have at "
-               "least <b>%1</b> of video memory.</p>")
-               .arg(VBoxGlobal::formatSize(uMinVRAM)));
+    alert(mainMachineWindowShown(), MessageType_Error,
+          tr("<p>Could not enter seamless mode due to insufficient guest "
+             "video memory.</p>"
+             "<p>You should configure the virtual machine to have at "
+             "least <b>%1</b> of video memory.</p>")
+             .arg(VBoxGlobal::formatSize(uMinVRAM)));
 }
 
 bool UIMessageCenter::cannotSwitchScreenInFullscreen(quint64 uMinVRAM) const
 {
-    return messageOkCancel(mainMachineWindowShown(), MessageType_Warning,
-                           tr("<p>Could not change the guest screen to this host screen due to insufficient guest video memory.</p>"
-                              "<p>You should configure the virtual machine to have at least <b>%1</b> of video memory.</p>"
-                              "<p>Press <b>Ignore</b> to switch the screen anyway or press <b>Cancel</b> to cancel the operation.</p>")
-                              .arg(VBoxGlobal::formatSize(uMinVRAM)),
-                           0 /* auto-confirm id */,
-                           tr("Ignore"));
+    return questionBinary(mainMachineWindowShown(), MessageType_Warning,
+                          tr("<p>Could not change the guest screen to this host screen due to insufficient guest video memory.</p>"
+                             "<p>You should configure the virtual machine to have at least <b>%1</b> of video memory.</p>"
+                             "<p>Press <b>Ignore</b> to switch the screen anyway or press <b>Cancel</b> to cancel the operation.</p>")
+                             .arg(VBoxGlobal::formatSize(uMinVRAM)),
+                          0 /* auto-confirm id */,
+                          tr("Ignore"));
 }
 
 void UIMessageCenter::cannotSwitchScreenInSeamless(quint64 uMinVRAM) const
 {
-    message(mainMachineWindowShown(), MessageType_Error,
-            tr("<p>Could not change the guest screen to this host screen "
-               "due to insufficient guest video memory.</p>"
-               "<p>You should configure the virtual machine to have at "
-               "least <b>%1</b> of video memory.</p>")
-               .arg(VBoxGlobal::formatSize(uMinVRAM)));
-}
-
-void UIMessageCenter::cannotAttachUSBDevice(const CConsole &console, const QString &strDevice)
+    alert(mainMachineWindowShown(), MessageType_Error,
+          tr("<p>Could not change the guest screen to this host screen "
+             "due to insufficient guest video memory.</p>"
+             "<p>You should configure the virtual machine to have at "
+             "least <b>%1</b> of video memory.</p>")
+             .arg(VBoxGlobal::formatSize(uMinVRAM)));
+}
+
+void UIMessageCenter::cannotAttachUSBDevice(const CConsole &console, const QString &strDevice) const
 {
     /* Preserve error-info: */
     QString strErrorInfo = formatErrorInfo(console);
-    /* Show the message: */
-    message(mainMachineWindowShown(), MessageType_Error,
-            tr("Failed to attach the USB device <b>%1</b> to the virtual machine <b>%2</b>.")
-               .arg(strDevice, console.GetMachine().GetName()),
-            strErrorInfo);
-}
-
-void UIMessageCenter::cannotAttachUSBDevice(const CVirtualBoxErrorInfo &error, const QString &strDevice, const QString &strMachineName)
-{
-    message(mainMachineWindowShown(), MessageType_Error,
-            tr("Failed to attach the USB device <b>%1</b> to the virtual machine <b>%2</b>.")
-               .arg(strDevice, strMachineName),
-            formatErrorInfo(error));
-}
-
-void UIMessageCenter::cannotDetachUSBDevice(const CConsole &console, const QString &strDevice)
+    /* Show the error: */
+    error(mainMachineWindowShown(), MessageType_Error,
+          tr("Failed to attach the USB device <b>%1</b> to the virtual machine <b>%2</b>.")
+             .arg(strDevice, console.GetMachine().GetName()),
+          strErrorInfo);
+}
+
+void UIMessageCenter::cannotAttachUSBDevice(const CVirtualBoxErrorInfo &errorInfo, const QString &strDevice, const QString &strMachineName) const
+{
+    error(mainMachineWindowShown(), MessageType_Error,
+          tr("Failed to attach the USB device <b>%1</b> to the virtual machine <b>%2</b>.")
+             .arg(strDevice, strMachineName),
+          formatErrorInfo(errorInfo));
+}
+
+void UIMessageCenter::cannotDetachUSBDevice(const CConsole &console, const QString &strDevice) const
 {
     /* Preserve error-info: */
     QString strErrorInfo = formatErrorInfo(console);
-    /* Show the message: */
-    message(mainMachineWindowShown(), MessageType_Error,
-            tr("Failed to detach the USB device <b>%1</b> from the virtual machine <b>%2</b>.")
-               .arg(strDevice, console.GetMachine().GetName()),
-            strErrorInfo);
-}
-
-void UIMessageCenter::cannotDetachUSBDevice(const CVirtualBoxErrorInfo &error, const QString &strDevice, const QString &strMachineName)
-{
-    message(mainMachineWindowShown(), MessageType_Error,
-            tr("Failed to detach the USB device <b>%1</b> from the virtual machine <b>%2</b>.")
-               .arg(strDevice, strMachineName),
-            formatErrorInfo(error));
-}
-
-void UIMessageCenter::remindAboutGuestAdditionsAreNotActive(QWidget *pParent /*= 0*/)
-{
-    message(pParent ? pParent : mainMachineWindowShown(), MessageType_Warning,
-            tr("<p>The VirtualBox Guest Additions do not appear to be available on this virtual machine, "
-               "and shared folders cannot be used without them. To use shared folders inside the virtual machine, "
-               "please install the Guest Additions if they are not installed, or re-install them if they are "
-               "not working correctly, by selecting <b>Install Guest Additions</b> from the <b>Devices</b> menu. "
-               "If they are installed but the machine is not yet fully started then shared folders will be available once it is.</p>"),
-            "remindAboutGuestAdditionsAreNotActive");
-}
-
-bool UIMessageCenter::confirmCancelingAllNetworkRequests()
-{
-    return messageOkCancel(networkManagerOrMainWindowShown(), MessageType_Question,
-                           tr("Do you wish to cancel all current network operations?"));
-}
-
-void UIMessageCenter::showUpdateSuccess(const QString &strVersion, const QString &strLink)
-{
-    message(networkManagerOrMainWindowShown(), MessageType_Info,
-            tr("<p>A new version of VirtualBox has been released! Version <b>%1</b> is available "
-               "at <a href=\"http://www.virtualbox.org/\">virtualbox.org</a>.</p>"
-               "<p>You can download this version using the link:</p>"
-               "<p><a href=%2>%3</a></p>")
-               .arg(strVersion, strLink, strLink));
-}
-
-void UIMessageCenter::showUpdateNotFound()
-{
-    message(networkManagerOrMainWindowShown(), MessageType_Info,
-            tr("You are already running the most recent version of VirtualBox."));
-}
-
-bool UIMessageCenter::askUserToDownloadExtensionPack(const QString &strExtPackName, const QString &strExtPackVersion, const QString &strVBoxVersion)
-{
-    return message(mainWindowShown(), MessageType_Info,
-                   tr("<p>You have version %1 of the <b><nobr>%2</nobr></b> installed.</p>"
-                      "<p>You should download and install version %3 of this extension pack from Oracle!</p>")
-                      .arg(strExtPackVersion).arg(strExtPackName).arg(strVBoxVersion),
-                      0 /* auto-confirm id */,
-                      AlertButton_Ok | AlertButtonOption_Default,
-                      0,
-                      0,
-                      tr("Ok", "extension pack"));
+    /* Show the error: */
+    error(mainMachineWindowShown(), MessageType_Error,
+          tr("Failed to detach the USB device <b>%1</b> from the virtual machine <b>%2</b>.")
+             .arg(strDevice, console.GetMachine().GetName()),
+          strErrorInfo);
+}
+
+void UIMessageCenter::cannotDetachUSBDevice(const CVirtualBoxErrorInfo &errorInfo, const QString &strDevice, const QString &strMachineName) const
+{
+    error(mainMachineWindowShown(), MessageType_Error,
+          tr("Failed to detach the USB device <b>%1</b> from the virtual machine <b>%2</b>.")
+             .arg(strDevice, strMachineName),
+          formatErrorInfo(errorInfo));
+}
+
+void UIMessageCenter::remindAboutGuestAdditionsAreNotActive(QWidget *pParent /*= 0*/) const
+{
+    alert(pParent ? pParent : mainMachineWindowShown(), MessageType_Warning,
+          tr("<p>The VirtualBox Guest Additions do not appear to be available on this virtual machine, "
+             "and shared folders cannot be used without them. To use shared folders inside the virtual machine, "
+             "please install the Guest Additions if they are not installed, or re-install them if they are "
+             "not working correctly, by selecting <b>Install Guest Additions</b> from the <b>Devices</b> menu. "
+             "If they are installed but the machine is not yet fully started then shared folders will be available once it is.</p>"),
+          "remindAboutGuestAdditionsAreNotActive");
+}
+
+bool UIMessageCenter::confirmCancelingAllNetworkRequests() const
+{
+    return questionBinary(networkManagerOrMainWindowShown(), MessageType_Question,
+                          tr("Do you wish to cancel all current network operations?"));
+}
+
+void UIMessageCenter::showUpdateSuccess(const QString &strVersion, const QString &strLink) const
+{
+    alert(networkManagerOrMainWindowShown(), MessageType_Info,
+          tr("<p>A new version of VirtualBox has been released! Version <b>%1</b> is available "
+             "at <a href=\"http://www.virtualbox.org/\">virtualbox.org</a>.</p>"
+             "<p>You can download this version using the link:</p>"
+             "<p><a href=%2>%3</a></p>")
+             .arg(strVersion, strLink, strLink));
+}
+
+void UIMessageCenter::showUpdateNotFound() const
+{
+    alert(networkManagerOrMainWindowShown(), MessageType_Info,
+          tr("You are already running the most recent version of VirtualBox."));
+}
+
+void UIMessageCenter::askUserToDownloadExtensionPack(const QString &strExtPackName, const QString &strExtPackVersion, const QString &strVBoxVersion) const
+{
+    alert(mainWindowShown(), MessageType_Info,
+          tr("<p>You have version %1 of the <b><nobr>%2</nobr></b> installed.</p>"
+             "<p>You should download and install version %3 of this extension pack from Oracle!</p>")
+             .arg(strExtPackVersion).arg(strExtPackName).arg(strVBoxVersion),
+          0 /* auto-confirm id */);
 }
 
 bool UIMessageCenter::cannotFindGuestAdditions() const
 {
-    return messageOkCancel(mainMachineWindowShown(), MessageType_Question,
-                           tr("<p>Could not find the <b>VirtualBox Guest Additions</b> CD image.</p>"
-                              "<p>Do you wish to download this CD image from the Internet?</p>"),
-                           0 /* auto-confirm id */,
-                           tr("Download"));
+    return questionBinary(mainMachineWindowShown(), MessageType_Question,
+                          tr("<p>Could not find the <b>VirtualBox Guest Additions</b> CD image.</p>"
+                             "<p>Do you wish to download this CD image from the Internet?</p>"),
+                          0 /* auto-confirm id */,
+                          tr("Download"));
 }
 
@@ -2102,59 +2111,59 @@
 {
     QLocale loc(VBoxGlobal::languageId());
-    return messageOkCancel(networkManagerOrMainMachineWindowShown(), MessageType_Question,
-                           tr("<p>Are you sure you want to download the <b>VirtualBox Guest Additions</b> CD image "
-                              "from <nobr><a href=\"%1\">%1</a></nobr> (size %2 bytes)?</p>")
-                              .arg(strUrl, loc.toString(uSize)),
-                           0 /* auto-confirm id */,
-                           tr("Download"));
+    return questionBinary(networkManagerOrMainMachineWindowShown(), MessageType_Question,
+                          tr("<p>Are you sure you want to download the <b>VirtualBox Guest Additions</b> CD image "
+                             "from <nobr><a href=\"%1\">%1</a></nobr> (size %2 bytes)?</p>")
+                             .arg(strUrl, loc.toString(uSize)),
+                          0 /* auto-confirm id */,
+                          tr("Download"));
 }
 
 void UIMessageCenter::cannotSaveGuestAdditions(const QString &strURL, const QString &strTarget) const
 {
-    message(networkManagerOrMainMachineWindowShown(), MessageType_Error,
-            tr("<p>The <b>VirtualBox Guest Additions</b> CD image has been successfully downloaded "
-               "from <nobr><a href=\"%1\">%1</a></nobr> "
-               "but can't be saved locally as <nobr><b>%2</b>.</nobr></p>"
-               "<p>Please choose another location for that file.</p>")
-               .arg(strURL, strTarget));
+    alert(networkManagerOrMainMachineWindowShown(), MessageType_Error,
+          tr("<p>The <b>VirtualBox Guest Additions</b> CD image has been successfully downloaded "
+             "from <nobr><a href=\"%1\">%1</a></nobr> "
+             "but can't be saved locally as <nobr><b>%2</b>.</nobr></p>"
+             "<p>Please choose another location for that file.</p>")
+             .arg(strURL, strTarget));
 }
 
 bool UIMessageCenter::proposeMountGuestAdditions(const QString &strUrl, const QString &strSrc) const
 {
-    return messageOkCancel(networkManagerOrMainMachineWindowShown(), MessageType_Question,
-                           tr("<p>The <b>VirtualBox Guest Additions</b> CD image has been successfully downloaded "
-                              "from <nobr><a href=\"%1\">%1</a></nobr> "
-                              "and saved locally as <nobr><b>%2</b>.</nobr></p>"
-                              "<p>Do you wish to register this CD image and mount it on the virtual CD/DVD drive?</p>")
-                              .arg(strUrl, strSrc),
-                           0 /* auto-confirm id */,
-                           tr("Mount", "additions"));
+    return questionBinary(networkManagerOrMainMachineWindowShown(), MessageType_Question,
+                          tr("<p>The <b>VirtualBox Guest Additions</b> CD image has been successfully downloaded "
+                             "from <nobr><a href=\"%1\">%1</a></nobr> "
+                             "and saved locally as <nobr><b>%2</b>.</nobr></p>"
+                             "<p>Do you wish to register this CD image and mount it on the virtual CD/DVD drive?</p>")
+                             .arg(strUrl, strSrc),
+                          0 /* auto-confirm id */,
+                          tr("Mount", "additions"));
 }
 
 void UIMessageCenter::cannotMountGuestAdditions(const QString &strMachineName) const
 {
-    message(mainMachineWindowShown(), MessageType_Error,
-            tr("<p>Could not insert the <b>VirtualBox Guest Additions</b> CD image into the virtual machine <b>%1</b>, "
-               "as the machine has no CD/DVD-ROM drives. Please add a drive using the storage page of the "
-               "virtual machine settings dialog.</p>")
-               .arg(strMachineName));
+    alert(mainMachineWindowShown(), MessageType_Error,
+          tr("<p>Could not insert the <b>VirtualBox Guest Additions</b> CD image into the virtual machine <b>%1</b>, "
+             "as the machine has no CD/DVD-ROM drives. Please add a drive using the storage page of the "
+             "virtual machine settings dialog.</p>")
+             .arg(strMachineName));
 }
 
 void UIMessageCenter::cannotUpdateGuestAdditions(const CProgress &progress) const
 {
-    message(mainMachineWindowShown(), MessageType_Error,
-            tr("Failed to update Guest Additions. "
-               "The Guest Additions installation image will be mounted to provide a manual installation."),
-            !progress.isOk() ? formatErrorInfo(progress) : formatErrorInfo(progress.GetErrorInfo()));
+    error(mainMachineWindowShown(), MessageType_Error,
+          tr("Failed to update Guest Additions. "
+             "The Guest Additions installation image will be mounted to provide a manual installation."),
+          !progress.isOk() ? formatErrorInfo(progress) : formatErrorInfo(progress.GetErrorInfo()));
 }
 
 bool UIMessageCenter::cannotFindUserManual(const QString &strMissedLocation) const
 {
-    return messageOkCancel(mainWindowShown(), MessageType_Question,
-                           tr("<p>Could not find the <b>VirtualBox User Manual</b> <nobr><b>%1</b>.</nobr></p>"
-                              "<p>Do you wish to download this file from the Internet?</p>")
-                              .arg(strMissedLocation),
-                           0 /* auto-confirm id */,
-                           tr("Download"));
+    return questionBinary(mainWindowShown(), MessageType_Question,
+                          tr("<p>Could not find the <b>VirtualBox User Manual</b> <nobr><b>%1</b>.</nobr></p>"
+                             "<p>Do you wish to download this file from the Internet?</p>")
+                             .arg(strMissedLocation),
+                          0 /* auto-confirm id */,
+                          tr("Download"));
 }
 
@@ -2162,40 +2171,40 @@
 {
     QLocale loc(VBoxGlobal::languageId());
-    return messageOkCancel(networkManagerOrMainWindowShown(), MessageType_Question,
-                           tr("<p>Are you sure you want to download the <b>VirtualBox User Manual</b> "
-                              "from <nobr><a href=\"%1\">%1</a></nobr> (size %2 bytes)?</p>")
-                              .arg(strURL, loc.toString(uSize)),
-                           0 /* auto-confirm id */,
-                           tr("Download"));
+    return questionBinary(networkManagerOrMainWindowShown(), MessageType_Question,
+                          tr("<p>Are you sure you want to download the <b>VirtualBox User Manual</b> "
+                             "from <nobr><a href=\"%1\">%1</a></nobr> (size %2 bytes)?</p>")
+                             .arg(strURL, loc.toString(uSize)),
+                          0 /* auto-confirm id */,
+                          tr("Download"));
 }
 
 void UIMessageCenter::cannotSaveUserManual(const QString &strURL, const QString &strTarget) const
 {
-    message(networkManagerOrMainWindowShown(), MessageType_Error,
-            tr("<p>The VirtualBox User Manual has been successfully downloaded "
-               "from <nobr><a href=\"%1\">%1</a></nobr> "
-               "but can't be saved locally as <nobr><b>%2</b>.</nobr></p>"
-               "<p>Please choose another location for that file.</p>")
-               .arg(strURL, strTarget));
+    alert(networkManagerOrMainWindowShown(), MessageType_Error,
+          tr("<p>The VirtualBox User Manual has been successfully downloaded "
+             "from <nobr><a href=\"%1\">%1</a></nobr> "
+             "but can't be saved locally as <nobr><b>%2</b>.</nobr></p>"
+             "<p>Please choose another location for that file.</p>")
+             .arg(strURL, strTarget));
 }
 
 void UIMessageCenter::warnAboutUserManualDownloaded(const QString &strURL, const QString &strTarget) const
 {
-    message(networkManagerOrMainWindowShown(), MessageType_Warning,
-            tr("<p>The VirtualBox User Manual has been successfully downloaded "
-               "from <nobr><a href=\"%1\">%1</a></nobr> "
-               "and saved locally as <nobr><b>%2</b>.</nobr></p>")
-               .arg(strURL, strTarget));
+    alert(networkManagerOrMainWindowShown(), MessageType_Warning,
+          tr("<p>The VirtualBox User Manual has been successfully downloaded "
+             "from <nobr><a href=\"%1\">%1</a></nobr> "
+             "and saved locally as <nobr><b>%2</b>.</nobr></p>")
+             .arg(strURL, strTarget));
 }
 
 bool UIMessageCenter::warAboutOutdatedExtensionPack(const QString &strExtPackName, const QString &strExtPackVersion) const
 {
-    return messageOkCancel(mainWindowShown(),
-                           MessageType_Question,
-                           tr("<p>You have an old version (%1) of the <b><nobr>%2</nobr></b> installed.</p>"
-                              "<p>Do you wish to download latest one from the Internet?</p>")
-                              .arg(strExtPackVersion).arg(strExtPackName),
-                           0 /* auto-confirm id */,
-                           tr("Download"));
+    return questionBinary(mainWindowShown(),
+                          MessageType_Question,
+                          tr("<p>You have an old version (%1) of the <b><nobr>%2</nobr></b> installed.</p>"
+                             "<p>Do you wish to download latest one from the Internet?</p>")
+                             .arg(strExtPackVersion).arg(strExtPackName),
+                          0 /* auto-confirm id */,
+                          tr("Download"));
 }
 
@@ -2203,32 +2212,32 @@
 {
     QLocale loc(VBoxGlobal::languageId());
-    return messageOkCancel(networkManagerOrMainWindowShown(), MessageType_Question,
-                           tr("<p>Are you sure you want to download the <b><nobr>%1</nobr></b> "
-                              "from <nobr><a href=\"%2\">%2</a></nobr> (size %3 bytes)?</p>")
-                              .arg(strExtPackName, strURL, loc.toString(uSize)),
-                           0 /* auto-confirm id */,
-                           tr("Download"));
+    return questionBinary(networkManagerOrMainWindowShown(), MessageType_Question,
+                          tr("<p>Are you sure you want to download the <b><nobr>%1</nobr></b> "
+                             "from <nobr><a href=\"%2\">%2</a></nobr> (size %3 bytes)?</p>")
+                             .arg(strExtPackName, strURL, loc.toString(uSize)),
+                          0 /* auto-confirm id */,
+                          tr("Download"));
 }
 
 void UIMessageCenter::cannotSaveExtensionPack(const QString &strExtPackName, const QString &strFrom, const QString &strTo) const
 {
-    message(networkManagerOrMainWindowShown(), MessageType_Error,
-            tr("<p>The <b><nobr>%1</nobr></b> has been successfully downloaded "
-               "from <nobr><a href=\"%2\">%2</a></nobr> "
-               "but can't be saved locally as <nobr><b>%3</b>.</nobr></p>"
-               "<p>Please choose another location for that file.</p>")
-               .arg(strExtPackName, strFrom, strTo));
+    alert(networkManagerOrMainWindowShown(), MessageType_Error,
+          tr("<p>The <b><nobr>%1</nobr></b> has been successfully downloaded "
+             "from <nobr><a href=\"%2\">%2</a></nobr> "
+             "but can't be saved locally as <nobr><b>%3</b>.</nobr></p>"
+             "<p>Please choose another location for that file.</p>")
+             .arg(strExtPackName, strFrom, strTo));
 }
 
 bool UIMessageCenter::proposeInstallExtentionPack(const QString &strExtPackName, const QString &strFrom, const QString &strTo) const
 {
-    return messageOkCancel(networkManagerOrMainWindowShown(), MessageType_Question,
-                           tr("<p>The <b><nobr>%1</nobr></b> has been successfully downloaded "
-                              "from <nobr><a href=\"%2\">%2</a></nobr> "
-                              "and saved locally as <nobr><b>%3</b>.</nobr></p>"
-                              "<p>Do you wish to install this extension pack?</p>")
-                              .arg(strExtPackName, strFrom, strTo),
-                           0 /* auto-confirm id */,
-                           tr("Install", "extension pack"));
+    return questionBinary(networkManagerOrMainWindowShown(), MessageType_Question,
+                          tr("<p>The <b><nobr>%1</nobr></b> has been successfully downloaded "
+                             "from <nobr><a href=\"%2\">%2</a></nobr> "
+                             "and saved locally as <nobr><b>%3</b>.</nobr></p>"
+                             "<p>Do you wish to install this extension pack?</p>")
+                             .arg(strExtPackName, strFrom, strTo),
+                          0 /* auto-confirm id */,
+                          tr("Install", "extension pack"));
 }
 
@@ -2236,18 +2245,18 @@
                                                   const QString &strPackDescription, QWidget *pParent /*= 0*/) const
 {
-    return messageOkCancel(pParent ? pParent : mainWindowShown(),
-                           MessageType_Question,
-                           tr("<p>You are about to install a VirtualBox extension pack. "
-                              "Extension packs complement the functionality of VirtualBox and can contain system level software "
-                              "that could be potentially harmful to your system. Please review the description below and only proceed "
-                              "if you have obtained the extension pack from a trusted source.</p>"
-                              "<p><table cellpadding=0 cellspacing=0>"
-                              "<tr><td><b>Name:&nbsp;&nbsp;</b></td><td>%1</td></tr>"
-                              "<tr><td><b>Version:&nbsp;&nbsp;</b></td><td>%2</td></tr>"
-                              "<tr><td><b>Description:&nbsp;&nbsp;</b></td><td>%3</td></tr>"
-                              "</table></p>")
-                              .arg(strPackName).arg(strPackVersion).arg(strPackDescription),
-                           0,
-                           tr("Install", "extension pack"));
+    return questionBinary(pParent ? pParent : mainWindowShown(),
+                          MessageType_Question,
+                          tr("<p>You are about to install a VirtualBox extension pack. "
+                             "Extension packs complement the functionality of VirtualBox and can contain system level software "
+                             "that could be potentially harmful to your system. Please review the description below and only proceed "
+                             "if you have obtained the extension pack from a trusted source.</p>"
+                             "<p><table cellpadding=0 cellspacing=0>"
+                             "<tr><td><b>Name:&nbsp;&nbsp;</b></td><td>%1</td></tr>"
+                             "<tr><td><b>Version:&nbsp;&nbsp;</b></td><td>%2</td></tr>"
+                             "<tr><td><b>Description:&nbsp;&nbsp;</b></td><td>%3</td></tr>"
+                             "</table></p>")
+                             .arg(strPackName).arg(strPackVersion).arg(strPackDescription),
+                          0,
+                          tr("Install", "extension pack"));
 }
 
@@ -2267,47 +2276,47 @@
     int         iVerCmp = RTStrVersionCompare(ba1.constData(), ba2.constData());
 
-    /* Show the message: */
+    /* Show the question: */
     bool fRc;
     if (iVerCmp > 0)
-        fRc = messageOkCancel(pParent ? pParent : mainWindowShown(),
-                              MessageType_Question,
-                              tr("<p>An older version of the extension pack is already installed, would you like to upgrade? "
-                                 "<p>%1</p>"
-                                 "<p><table cellpadding=0 cellspacing=0>"
-                                 "<tr><td><b>Name:&nbsp;&nbsp;</b></td><td>%2</td></tr>"
-                                 "<tr><td><b>New Version:&nbsp;&nbsp;</b></td><td>%3</td></tr>"
-                                 "<tr><td><b>Current Version:&nbsp;&nbsp;</b></td><td>%4</td></tr>"
-                                 "<tr><td><b>Description:&nbsp;&nbsp;</b></td><td>%5</td></tr>"
-                                 "</table></p>")
-                                 .arg(strBelehrung).arg(strPackName).arg(strPackVersionNew).arg(strPackVersionOld).arg(strPackDescription),
-                              0,
-                              tr("&Upgrade"));
+        fRc = questionBinary(pParent ? pParent : mainWindowShown(),
+                             MessageType_Question,
+                             tr("<p>An older version of the extension pack is already installed, would you like to upgrade? "
+                                "<p>%1</p>"
+                                "<p><table cellpadding=0 cellspacing=0>"
+                                "<tr><td><b>Name:&nbsp;&nbsp;</b></td><td>%2</td></tr>"
+                                "<tr><td><b>New Version:&nbsp;&nbsp;</b></td><td>%3</td></tr>"
+                                "<tr><td><b>Current Version:&nbsp;&nbsp;</b></td><td>%4</td></tr>"
+                                "<tr><td><b>Description:&nbsp;&nbsp;</b></td><td>%5</td></tr>"
+                                "</table></p>")
+                                .arg(strBelehrung).arg(strPackName).arg(strPackVersionNew).arg(strPackVersionOld).arg(strPackDescription),
+                             0,
+                             tr("&Upgrade"));
     else if (iVerCmp < 0)
-        fRc = messageOkCancel(pParent ? pParent : mainWindowShown(),
-                              MessageType_Question,
-                              tr("<p>An newer version of the extension pack is already installed, would you like to downgrade? "
-                                 "<p>%1</p>"
-                                 "<p><table cellpadding=0 cellspacing=0>"
-                                 "<tr><td><b>Name:&nbsp;&nbsp;</b></td><td>%2</td></tr>"
-                                 "<tr><td><b>New Version:&nbsp;&nbsp;</b></td><td>%3</td></tr>"
-                                 "<tr><td><b>Current Version:&nbsp;&nbsp;</b></td><td>%4</td></tr>"
-                                 "<tr><td><b>Description:&nbsp;&nbsp;</b></td><td>%5</td></tr>"
-                                 "</table></p>")
-                                 .arg(strBelehrung).arg(strPackName).arg(strPackVersionNew).arg(strPackVersionOld).arg(strPackDescription),
-                              0,
-                              tr("&Downgrade"));
+        fRc = questionBinary(pParent ? pParent : mainWindowShown(),
+                             MessageType_Question,
+                             tr("<p>An newer version of the extension pack is already installed, would you like to downgrade? "
+                                "<p>%1</p>"
+                                "<p><table cellpadding=0 cellspacing=0>"
+                                "<tr><td><b>Name:&nbsp;&nbsp;</b></td><td>%2</td></tr>"
+                                "<tr><td><b>New Version:&nbsp;&nbsp;</b></td><td>%3</td></tr>"
+                                "<tr><td><b>Current Version:&nbsp;&nbsp;</b></td><td>%4</td></tr>"
+                                "<tr><td><b>Description:&nbsp;&nbsp;</b></td><td>%5</td></tr>"
+                                "</table></p>")
+                                .arg(strBelehrung).arg(strPackName).arg(strPackVersionNew).arg(strPackVersionOld).arg(strPackDescription),
+                             0,
+                             tr("&Downgrade"));
     else
-        fRc = messageOkCancel(pParent ? pParent : mainWindowShown(),
-                              MessageType_Question,
-                              tr("<p>The extension pack is already installed with the same version, would you like reinstall it? "
-                                 "<p>%1</p>"
-                                 "<p><table cellpadding=0 cellspacing=0>"
-                                 "<tr><td><b>Name:&nbsp;&nbsp;</b></td><td>%2</td></tr>"
-                                 "<tr><td><b>Version:&nbsp;&nbsp;</b></td><td>%3</td></tr>"
-                                 "<tr><td><b>Description:&nbsp;&nbsp;</b></td><td>%4</td></tr>"
-                                 "</table></p>")
-                                 .arg(strBelehrung).arg(strPackName).arg(strPackVersionOld).arg(strPackDescription),
-                              0,
-                              tr("&Reinstall"));
+        fRc = questionBinary(pParent ? pParent : mainWindowShown(),
+                             MessageType_Question,
+                             tr("<p>The extension pack is already installed with the same version, would you like reinstall it? "
+                                "<p>%1</p>"
+                                "<p><table cellpadding=0 cellspacing=0>"
+                                "<tr><td><b>Name:&nbsp;&nbsp;</b></td><td>%2</td></tr>"
+                                "<tr><td><b>Version:&nbsp;&nbsp;</b></td><td>%3</td></tr>"
+                                "<tr><td><b>Description:&nbsp;&nbsp;</b></td><td>%4</td></tr>"
+                                "</table></p>")
+                                .arg(strBelehrung).arg(strPackName).arg(strPackVersionOld).arg(strPackDescription),
+                             0,
+                             tr("&Reinstall"));
     return fRc;
 }
@@ -2315,65 +2324,64 @@
 bool UIMessageCenter::confirmRemoveExtensionPack(const QString &strPackName, QWidget *pParent /*= 0*/) const
 {
-    return messageOkCancel(pParent ? pParent : mainWindowShown(),
-                           MessageType_Question,
-                           tr("<p>You are about to remove the VirtualBox extension pack <b>%1</b>.</p>"
-                              "<p>Are you sure you want to proceed?</p>")
-                              .arg(strPackName),
-                           0,
-                           tr("&Remove"));
+    return questionBinary(pParent ? pParent : mainWindowShown(),
+                          MessageType_Question,
+                          tr("<p>You are about to remove the VirtualBox extension pack <b>%1</b>.</p>"
+                             "<p>Are you sure you want to proceed?</p>")
+                             .arg(strPackName),
+                          0,
+                          tr("&Remove"));
 }
 
 void UIMessageCenter::cannotOpenExtPack(const QString &strFilename, const CExtPackManager &extPackManager, QWidget *pParent /*= 0*/) const
 {
-    message(pParent ? pParent : mainWindowShown(), MessageType_Error,
-            tr("Failed to open the Extension Pack <b>%1</b>.").arg(strFilename),
-            formatErrorInfo(extPackManager));
+    error(pParent ? pParent : mainWindowShown(), MessageType_Error,
+          tr("Failed to open the Extension Pack <b>%1</b>.").arg(strFilename),
+          formatErrorInfo(extPackManager));
 }
 
 void UIMessageCenter::warnAboutBadExtPackFile(const QString &strFilename, const CExtPackFile &extPackFile, QWidget *pParent /*= 0*/) const
 {
-    message(pParent ? pParent : mainWindowShown(), MessageType_Error,
-            tr("Failed to open the Extension Pack <b>%1</b>.").arg(strFilename),
-            "<!--EOM-->" + extPackFile.GetWhyUnusable());
+    error(pParent ? pParent : mainWindowShown(), MessageType_Error,
+          tr("Failed to open the Extension Pack <b>%1</b>.").arg(strFilename),
+          "<!--EOM-->" + extPackFile.GetWhyUnusable());
 }
 
 void UIMessageCenter::cannotInstallExtPack(const CExtPackFile &extPackFile, const QString &strFilename, QWidget *pParent /*= 0*/) const
 {
-    message(pParent ? pParent : mainWindowShown(), MessageType_Error,
-            tr("Failed to install the Extension Pack <b>%1</b>.")
-               .arg(strFilename),
-            formatErrorInfo(extPackFile));
+    error(pParent ? pParent : mainWindowShown(), MessageType_Error,
+          tr("Failed to install the Extension Pack <b>%1</b>.")
+             .arg(strFilename),
+          formatErrorInfo(extPackFile));
 }
 
 void UIMessageCenter::cannotInstallExtPack(const CProgress &progress, const QString &strFilename, QWidget *pParent /*= 0*/) const
 {
-    message(pParent ? pParent : mainWindowShown(), MessageType_Error,
-            tr("Failed to install the Extension Pack <b>%1</b>.")
-               .arg(strFilename),
-            !progress.isOk() ? formatErrorInfo(progress) : formatErrorInfo(progress.GetErrorInfo()));
+    error(pParent ? pParent : mainWindowShown(), MessageType_Error,
+          tr("Failed to install the Extension Pack <b>%1</b>.")
+             .arg(strFilename),
+          !progress.isOk() ? formatErrorInfo(progress) : formatErrorInfo(progress.GetErrorInfo()));
 }
 
 void UIMessageCenter::cannotUninstallExtPack(const CExtPackManager &extPackManager, const QString &strPackName, QWidget *pParent /*= 0*/) const
 {
-    message(pParent ? pParent : mainWindowShown(), MessageType_Error,
-            tr("Failed to uninstall the Extension Pack <b>%1</b>.")
-               .arg(strPackName),
-            formatErrorInfo(extPackManager));
+    error(pParent ? pParent : mainWindowShown(), MessageType_Error,
+          tr("Failed to uninstall the Extension Pack <b>%1</b>.")
+             .arg(strPackName),
+          formatErrorInfo(extPackManager));
 }
 
 void UIMessageCenter::cannotUninstallExtPack(const CProgress &progress, const QString &strPackName, QWidget *pParent /*= 0*/) const
 {
-    message(pParent ? pParent : mainWindowShown(), MessageType_Error,
-            tr("Failed to uninstall the Extension Pack <b>%1</b>.")
-               .arg(strPackName),
-            !progress.isOk() ? formatErrorInfo(progress) : formatErrorInfo(progress.GetErrorInfo()));
+    error(pParent ? pParent : mainWindowShown(), MessageType_Error,
+          tr("Failed to uninstall the Extension Pack <b>%1</b>.")
+             .arg(strPackName),
+          !progress.isOk() ? formatErrorInfo(progress) : formatErrorInfo(progress.GetErrorInfo()));
 }
 
 void UIMessageCenter::warnAboutExtPackInstalled(const QString &strPackName, QWidget *pParent /*= 0*/) const
 {
-    message(pParent ? pParent : mainWindowShown(),
-            MessageType_Info,
-            tr("The extension pack <br><nobr><b>%1</b><nobr><br> was installed successfully.")
-               .arg(strPackName));
+    alert(pParent ? pParent : mainWindowShown(), MessageType_Info,
+          tr("The extension pack <br><nobr><b>%1</b><nobr><br> was installed successfully.")
+             .arg(strPackName));
 }
 
@@ -2381,34 +2389,34 @@
 void UIMessageCenter::cannotDropData(const CGuest &guest, QWidget *pParent /*= 0*/) const
 {
-    message(pParent ? pParent : mainWindowShown(), MessageType_Error,
-            tr("Failed to drop data."),
-            formatErrorInfo(guest));
+    error(pParent ? pParent : mainWindowShown(), MessageType_Error,
+          tr("Failed to drop data."),
+          formatErrorInfo(guest));
 }
 
 void UIMessageCenter::cannotDropData(const CProgress &progress, QWidget *pParent /*= 0*/) const
 {
-    message(pParent ? pParent : mainWindowShown(), MessageType_Error,
-            tr("Failed to drop data."),
-            !progress.isOk() ? formatErrorInfo(progress) : formatErrorInfo(progress.GetErrorInfo()));
+    error(pParent ? pParent : mainWindowShown(), MessageType_Error,
+          tr("Failed to drop data."),
+          !progress.isOk() ? formatErrorInfo(progress) : formatErrorInfo(progress.GetErrorInfo()));
 }
 #endif /* VBOX_WITH_DRAG_AND_DROP */
 
-void UIMessageCenter::cannotOpenLicenseFile(const QString &strPath, QWidget *pParent /*= 0*/)
-{
-    message(pParent ? pParent : mainWindowShown(), MessageType_Error,
-            tr("Failed to open the license file <nobr><b>%1</b></nobr>. Check file permissions.")
-               .arg(strPath));
-}
-
-bool UIMessageCenter::confirmOverridingFile(const QString &strPath, QWidget *pParent /*= 0*/)
-{
-    return messageOkCancel(pParent, MessageType_Question,
-                           tr("A file named <b>%1</b> already exists. "
-                              "Are you sure you want to replace it?<br /><br />"
-                              "Replacing it will overwrite its contents.")
-                              .arg(strPath));
-}
-
-bool UIMessageCenter::confirmOverridingFiles(const QVector<QString> &strPaths, QWidget *pParent /*= 0*/)
+void UIMessageCenter::cannotOpenLicenseFile(const QString &strPath, QWidget *pParent /*= 0*/) const
+{
+    alert(pParent ? pParent : mainWindowShown(), MessageType_Error,
+          tr("Failed to open the license file <nobr><b>%1</b></nobr>. Check file permissions.")
+             .arg(strPath));
+}
+
+bool UIMessageCenter::confirmOverridingFile(const QString &strPath, QWidget *pParent /*= 0*/) const
+{
+    return questionBinary(pParent, MessageType_Question,
+                          tr("A file named <b>%1</b> already exists. "
+                             "Are you sure you want to replace it?<br /><br />"
+                             "Replacing it will overwrite its contents.")
+                             .arg(strPath));
+}
+
+bool UIMessageCenter::confirmOverridingFiles(const QVector<QString> &strPaths, QWidget *pParent /*= 0*/) const
 {
     /* If it is only one file use the single question versions above: */
@@ -2416,14 +2424,14 @@
         return confirmOverridingFile(strPaths.at(0), pParent);
     else if (strPaths.size() > 1)
-        return messageOkCancel(pParent, MessageType_Question,
-                               tr("The following files already exist:<br /><br />%1<br /><br />"
-                                  "Are you sure you want to replace them? "
-                                  "Replacing them will overwrite their contents.")
-                                  .arg(QStringList(strPaths.toList()).join("<br />")));
+        return questionBinary(pParent, MessageType_Question,
+                              tr("The following files already exist:<br /><br />%1<br /><br />"
+                                 "Are you sure you want to replace them? "
+                                 "Replacing them will overwrite their contents.")
+                                 .arg(QStringList(strPaths.toList()).join("<br />")));
     else
         return true;
 }
 
-bool UIMessageCenter::confirmOverridingFileIfExists(const QString &strPath, QWidget *pParent /*= 0*/)
+bool UIMessageCenter::confirmOverridingFileIfExists(const QString &strPath, QWidget *pParent /*= 0*/) const
 {
     QFileInfo fi(strPath);
@@ -2434,5 +2442,5 @@
 }
 
-bool UIMessageCenter::confirmOverridingFilesIfExists(const QVector<QString> &strPaths, QWidget *pParent /*= 0*/)
+bool UIMessageCenter::confirmOverridingFilesIfExists(const QVector<QString> &strPaths, QWidget *pParent /*= 0*/) const
 {
     QVector<QString> existingFiles;
@@ -2519,5 +2527,5 @@
 }
 
-void UIMessageCenter::remindAboutWrongColorDepth(ulong uRealBPP, ulong uWantedBPP)
+void UIMessageCenter::remindAboutWrongColorDepth(ulong uRealBPP, ulong uWantedBPP) const
 {
     emit sigRemindAboutWrongColorDepth(uRealBPP, uWantedBPP);
@@ -2622,5 +2630,5 @@
 }
 
-void UIMessageCenter::sltRemindAboutWrongColorDepth(ulong uRealBPP, ulong uWantedBPP)
+void UIMessageCenter::sltRemindAboutWrongColorDepth(ulong uRealBPP, ulong uWantedBPP) const
 {
     const char *kName = "remindAboutWrongColorDepth";
@@ -2634,19 +2642,19 @@
     }
 
-    message(mainMachineWindowShown(), MessageType_Info,
-            tr("<p>The virtual machine window is optimized to work in "
-               "<b>%1&nbsp;bit</b> color mode but the "
-               "virtual display is currently set to <b>%2&nbsp;bit</b>.</p>"
-               "<p>Please open the display properties dialog of the guest OS and "
-               "select a <b>%3&nbsp;bit</b> color mode, if it is available, for "
-               "best possible performance of the virtual video subsystem.</p>"
-               "<p><b>Note</b>. Some operating systems, like OS/2, may actually "
-               "work in 32&nbsp;bit mode but report it as 24&nbsp;bit "
-               "(16 million colors). You may try to select a different color "
-               "mode to see if this message disappears or you can simply "
-               "disable the message now if you are sure the required color "
-               "mode (%4&nbsp;bit) is not available in the guest OS.</p>")
-               .arg(uWantedBPP).arg(uRealBPP).arg(uWantedBPP).arg(uWantedBPP),
-            kName);
+    alert(mainMachineWindowShown(), MessageType_Info,
+          tr("<p>The virtual machine window is optimized to work in "
+             "<b>%1&nbsp;bit</b> color mode but the "
+             "virtual display is currently set to <b>%2&nbsp;bit</b>.</p>"
+             "<p>Please open the display properties dialog of the guest OS and "
+             "select a <b>%3&nbsp;bit</b> color mode, if it is available, for "
+             "best possible performance of the virtual video subsystem.</p>"
+             "<p><b>Note</b>. Some operating systems, like OS/2, may actually "
+             "work in 32&nbsp;bit mode but report it as 24&nbsp;bit "
+             "(16 million colors). You may try to select a different color "
+             "mode to see if this message disappears or you can simply "
+             "disable the message now if you are sure the required color "
+             "mode (%4&nbsp;bit) is not available in the guest OS.</p>")
+             .arg(uWantedBPP).arg(uRealBPP).arg(uWantedBPP).arg(uWantedBPP),
+          kName);
 }
 
Index: /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIMessageCenter.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIMessageCenter.h	(revision 45367)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIMessageCenter.h	(revision 45368)
@@ -66,5 +66,5 @@
 
     /* Notifiers: Synchronization stuff: */
-    void sigRemindAboutWrongColorDepth(ulong uRealBPP, ulong uWantedBPP);
+    void sigRemindAboutWrongColorDepth(ulong uRealBPP, ulong uWantedBPP) const;
 
 public:
@@ -79,8 +79,8 @@
     void setWarningShown(const QString &strWarningName, bool fWarningShown) const;
 
-    /* API: Alert providing stuff: Main function: */
+    /* API: Main message function, used directly only in exceptional cases: */
     int message(QWidget *pParent, MessageType type,
                 const QString &strMessage,
-                const QString &strDetails = QString(),
+                const QString &strDetails,
                 const char *pcszAutoConfirmId = 0,
                 int iButton1 = 0, int iButton2 = 0, int iButton3 = 0,
@@ -89,40 +89,58 @@
                 const QString &strButtonText3 = QString()) const;
 
-    /* API: Alert providing stuff: Wrapper to the main function,
+    /* API: Wrapper to 'message' function.
+     * Provides single OK button: */
+    void error(QWidget *pParent, MessageType type,
+               const QString &strMessage,
+               const QString &strDetails,
+               const char *pcszAutoConfirmId = 0) const;
+
+    /* API: Wrapper to 'message' function,
+     * Error with question providing two buttons (OK and Cancel by default): */
+    bool errorWithQuestion(QWidget *pParent, MessageType type,
+                           const QString &strMessage,
+                           const QString &strDetails,
+                           const char *pcszAutoConfirmId = 0,
+                           const QString &strOkButtonText = QString(),
+                           const QString &strCancelButtonText = QString()) const;
+
+    /* API: Wrapper to 'error' function.
      * Omits details: */
-    int message(QWidget *pParent, MessageType type,
-                const QString &strMessage,
-                const char *pcszAutoConfirmId,
-                int iButton1 = 0, int iButton2 = 0, int iButton3 = 0,
-                const QString &strButtonText1 = QString(),
-                const QString &strButtonText2 = QString(),
-                const QString &strButtonText3 = QString()) const;
-
-    /* API: Alert providing stuff: Wrapper to the main function,
-     * Takes button type(s) as "Ok / Cancel": */
-    bool messageOkCancel(QWidget *pParent, MessageType type,
-                         const QString &strMessage,
-                         const QString &strDetails = QString(),
-                         const char *pcszAutoConfirmId = 0,
-                         const QString &strOkButtonText = QString(),
-                         const QString &strCancelButtonText = QString(),
-                         bool fOkByDefault = true) const;
-
-    /* API: Alert providing stuff: Wrapper to the function above,
-     * Takes button type(s) as "Ok / Cancel",
-     * Omits details. */
-    bool messageOkCancel(QWidget *pParent, MessageType type,
-                         const QString &strMessage,
-                         const char *pcszAutoConfirmId,
-                         const QString &strOkButtonText = QString(),
-                         const QString &strCancelButtonText = QString(),
-                         bool fOkByDefault = true) const;
-
-    /* API: Alert providing stuff: One more main function: */
+    void alert(QWidget *pParent, MessageType type,
+               const QString &strMessage,
+               const char *pcszAutoConfirmId = 0) const;
+
+    /* API: Wrapper to 'message' function.
+     * Omits details, provides two or three buttons: */
+    int question(QWidget *pParent, MessageType type,
+                 const QString &strMessage,
+                 const char *pcszAutoConfirmId = 0,
+                 int iButton1 = 0, int iButton2 = 0, int iButton3 = 0,
+                 const QString &strButtonText1 = QString(),
+                 const QString &strButtonText2 = QString(),
+                 const QString &strButtonText3 = QString()) const;
+
+    /* API: Wrapper to 'question' function,
+     * Question providing two buttons (OK and Cancel by default): */
+    bool questionBinary(QWidget *pParent, MessageType type,
+                        const QString &strMessage,
+                        const char *pcszAutoConfirmId = 0,
+                        const QString &strOkButtonText = QString(),
+                        const QString &strCancelButtonText = QString()) const;
+
+    /* API: Wrapper to 'question' function,
+     * Question providing three buttons (Yes, No and Cancel by default): */
+    int questionTrinary(QWidget *pParent, MessageType type,
+                        const QString &strMessage,
+                        const char *pcszAutoConfirmId = 0,
+                        const QString &strChoice1ButtonText = QString(),
+                        const QString &strChoice2ButtonText = QString(),
+                        const QString &strCancelButtonText = QString()) const;
+
+    /* API: One more main function: */
     int messageWithOption(QWidget *pParent, MessageType type,
                           const QString &strMessage,
                           const QString &strOptionText,
                           bool fDefaultOptionValue = true,
-                          const QString &strDetails = QString(),
                           int iButton1 = 0, int iButton2 = 0, int iButton3 = 0,
                           const QString &strButtonText1 = QString(),
@@ -237,5 +255,5 @@
     void cannotDeleteHardDiskStorage(const CProgress &progress, const QString &strLocation, QWidget *pParent = 0) const;
     void cannotDetachDevice(const CMachine &machine, UIMediumType type, const QString &strLocation, const StorageSlot &storageSlot, QWidget *pParent = 0) const;
-    int cannotRemountMedium(const CMachine &machine, const UIMedium &medium, bool fMount, bool fRetry, QWidget *pParent = 0) const;
+    bool cannotRemountMedium(const CMachine &machine, const UIMedium &medium, bool fMount, bool fRetry, QWidget *pParent = 0) const;
     void cannotOpenMedium(const CVirtualBox &vbox, UIMediumType type, const QString &strLocation, QWidget *pParent = 0) const;
     void cannotCloseMedium(const UIMedium &medium, const COMResult &rc, QWidget *pParent = 0) const;
@@ -276,5 +294,5 @@
     void remindAboutAutoCapture() const;
     void remindAboutMouseIntegration(bool fSupportsAbsolute) const;
-    bool remindAboutPausedVMInput() const;
+    void remindAboutPausedVMInput() const;
     bool confirmGoingFullscreen(const QString &strHotKey) const;
     bool confirmGoingSeamless(const QString &strHotKey) const;
@@ -284,15 +302,15 @@
     bool cannotSwitchScreenInFullscreen(quint64 uMinVRAM) const;
     void cannotSwitchScreenInSeamless(quint64 uMinVRAM) const;
-    void cannotAttachUSBDevice(const CConsole &console, const QString &strDevice);
-    void cannotAttachUSBDevice(const CVirtualBoxErrorInfo &error, const QString &strDevice, const QString &strMachineName);
-    void cannotDetachUSBDevice(const CConsole &console, const QString &strDevice);
-    void cannotDetachUSBDevice(const CVirtualBoxErrorInfo &error, const QString &strDevice, const QString &strMachineName);
-    void remindAboutGuestAdditionsAreNotActive(QWidget *pParent = 0);
+    void cannotAttachUSBDevice(const CConsole &console, const QString &strDevice) const;
+    void cannotAttachUSBDevice(const CVirtualBoxErrorInfo &errorInfo, const QString &strDevice, const QString &strMachineName) const;
+    void cannotDetachUSBDevice(const CConsole &console, const QString &strDevice) const;
+    void cannotDetachUSBDevice(const CVirtualBoxErrorInfo &errorInfo, const QString &strDevice, const QString &strMachineName) const;
+    void remindAboutGuestAdditionsAreNotActive(QWidget *pParent = 0) const;
 
     /* API: Network management warnings: */
-    bool confirmCancelingAllNetworkRequests();
-    void showUpdateSuccess(const QString &strVersion, const QString &strLink);
-    void showUpdateNotFound();
-    bool askUserToDownloadExtensionPack(const QString &strExtPackName, const QString &strExtPackVersion, const QString &strVBoxVersion);
+    bool confirmCancelingAllNetworkRequests() const;
+    void showUpdateSuccess(const QString &strVersion, const QString &strLink) const;
+    void showUpdateNotFound() const;
+    void askUserToDownloadExtensionPack(const QString &strExtPackName, const QString &strExtPackVersion, const QString &strVBoxVersion) const;
 
     /* API: Downloading warnings: */
@@ -330,11 +348,11 @@
 
     /* API: License-viewer warnings: */
-    void cannotOpenLicenseFile(const QString &strPath, QWidget *pParent = 0);
+    void cannotOpenLicenseFile(const QString &strPath, QWidget *pParent = 0) const;
 
     /* API: File-dialog warnings: */
-    bool confirmOverridingFile(const QString &strPath, QWidget *pParent = 0);
-    bool confirmOverridingFiles(const QVector<QString> &strPaths, QWidget *pParent = 0);
-    bool confirmOverridingFileIfExists(const QString &strPath, QWidget *pParent = 0);
-    bool confirmOverridingFilesIfExists(const QVector<QString> &strPaths, QWidget *pParent = 0);
+    bool confirmOverridingFile(const QString &strPath, QWidget *pParent = 0) const;
+    bool confirmOverridingFiles(const QVector<QString> &strPaths, QWidget *pParent = 0) const;
+    bool confirmOverridingFileIfExists(const QString &strPath, QWidget *pParent = 0) const;
+    bool confirmOverridingFilesIfExists(const QVector<QString> &strPaths, QWidget *pParent = 0) const;
 
     /* API: Static helpers: */
@@ -346,5 +364,5 @@
 
     /* API: Async stuff: */
-    void remindAboutWrongColorDepth(ulong uRealBPP, ulong uWantedBPP);
+    void remindAboutWrongColorDepth(ulong uRealBPP, ulong uWantedBPP) const;
 
 public slots:
@@ -367,5 +385,5 @@
 
     /* Handlers: Synchronization stuff: */
-    void sltRemindAboutWrongColorDepth(ulong uRealBPP, ulong uWantedBPP);
+    void sltRemindAboutWrongColorDepth(ulong uRealBPP, ulong uWantedBPP) const;
 
 private:
Index: /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIKeyboardHandler.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIKeyboardHandler.cpp	(revision 45367)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIKeyboardHandler.cpp	(revision 45368)
@@ -906,10 +906,5 @@
                     /* Show a possible warning on key release which seems to be more expected by the end user: */
                     if (uisession()->isPaused())
-                    {
-                        /* If the reminder is disabled we pass the event to Qt to enable normal
-                         * keyboard functionality (for example, menu access with Alt+Letter): */
-                        if (!msgCenter().remindAboutPausedVMInput())
-                            break;
-                    }
+                        msgCenter().remindAboutPausedVMInput();
                 }
                 break;
Index: /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineLogic.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineLogic.cpp	(revision 45367)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineLogic.cpp	(revision 45368)
@@ -1504,5 +1504,5 @@
         /* Ask for force remounting: */
         if (msgCenter().cannotRemountMedium(machine, vboxGlobal().findMedium(fMount ? newId : currentId),
-                                            fMount, true /* retry? */, activeMachineWindow()) == AlertButton_Ok)
+                                            fMount, true /* retry? */, activeMachineWindow()))
         {
             /* Force remount medium to the predefined port/device: */
@@ -1565,5 +1565,5 @@
             /* Ask for force remounting: */
             if (msgCenter().cannotRemountMedium(machine, vboxGlobal().findMedium(fMount ? strNewId : strCurrentId),
-                                                fMount, true /* retry? */, activeMachineWindow()) == AlertButton_Ok)
+                                                fMount, true /* retry? */, activeMachineWindow()))
             {
                 /* Force remount medium to the predefined port/device: */
Index: /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UISession.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UISession.cpp	(revision 45367)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UISession.cpp	(revision 45368)
@@ -591,5 +591,5 @@
                 /* Ask for force mounting: */
                 if (msgCenter().cannotRemountMedium(machine, vboxMedium, true /* mount? */,
-                                                    true /* retry? */, mainMachineWindow()) == AlertButton_Ok)
+                                                    true /* retry? */, mainMachineWindow()))
                 {
                     /* Force mount medium to the predefined port/device: */
Index: /trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsStorage.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsStorage.cpp	(revision 45367)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsStorage.cpp	(revision 45368)
@@ -3056,7 +3056,7 @@
             int iAnswer = msgCenter().confirmOpticalAttachmentCreation(strControllerName, this);
             if (iAnswer == AlertButton_Choice1)
+                strMediumId = vboxGlobal().findMedium(strMediumId).id();
+            else if (iAnswer == AlertButton_Choice2)
                 strMediumId = vboxGlobal().openMediumWithFileOpenDialog(UIMediumType_DVD, this, strMachineFolder);
-            else if (iAnswer == AlertButton_Choice2)
-                strMediumId = vboxGlobal().findMedium(strMediumId).id();
             break;
         }
@@ -3065,7 +3065,7 @@
             int iAnswer = msgCenter().confirmFloppyAttachmentCreation(strControllerName, this);
             if (iAnswer == AlertButton_Choice1)
+                strMediumId = vboxGlobal().findMedium(strMediumId).id();
+            else if (iAnswer == AlertButton_Choice2)
                 strMediumId = vboxGlobal().openMediumWithFileOpenDialog(UIMediumType_Floppy, this, strMachineFolder);
-            else if (iAnswer == AlertButton_Choice2)
-                strMediumId = vboxGlobal().findMedium(strMediumId).id();
             break;
         }
