Index: /trunk/src/VBox/Frontends/VirtualBox/src/extensions/QIMainDialog.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/extensions/QIMainDialog.cpp	(revision 35130)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/extensions/QIMainDialog.cpp	(revision 35131)
@@ -328,6 +328,7 @@
                             reject();
                             return true;
+                        }
+                        default:
                             break;
-                        }
                     }
                 }
Index: /trunk/src/VBox/Frontends/VirtualBox/src/extensions/QIMainDialog.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/extensions/QIMainDialog.h	(revision 35130)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/extensions/QIMainDialog.h	(revision 35131)
@@ -67,8 +67,8 @@
 protected slots:
 
-    void accept();
-    void reject();
+    virtual void accept();
+    virtual void reject();
+
     void done (QDialog::DialogCode aRescode);
-
     void setResult (QDialog::DialogCode aRescode);
 
Index: /trunk/src/VBox/Frontends/VirtualBox/src/settings/UISettingsDialog.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/settings/UISettingsDialog.cpp	(revision 35130)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/settings/UISettingsDialog.cpp	(revision 35131)
@@ -22,4 +22,5 @@
 #include <QStackedWidget>
 #include <QTimer>
+#include <QCloseEvent>
 
 /* Local includes */
@@ -49,4 +50,6 @@
     /* Common variables: */
     , m_fPolished(false)
+    /* Loading stuff: */
+    , m_fProcessed(false)
     /* Error/Warning stuff: */
     , m_fValid(true)
@@ -188,4 +191,9 @@
 }
 
+void UISettingsDialog::sltMarkProcessed()
+{
+    m_fProcessed = true;
+}
+
 void UISettingsDialog::retranslateUi()
 {
@@ -410,4 +418,10 @@
         pWhatsThisWidget->setToolTip(QString("<qt>%1</qt>").arg(strWhatsThisText));
 #endif
+}
+
+void UISettingsDialog::reject()
+{
+    if (m_fProcessed)
+        QIMainDialog::reject();
 }
 
@@ -509,4 +523,9 @@
 }
 
+void UISettingsDialog::closeEvent(QCloseEvent *pEvent)
+{
+    m_fProcessed ? pEvent->accept() : pEvent->ignore();
+}
+
 void UISettingsDialog::assignValidator(UISettingsPage *pPage)
 {
Index: /trunk/src/VBox/Frontends/VirtualBox/src/settings/UISettingsDialog.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/settings/UISettingsDialog.h	(revision 35130)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/settings/UISettingsDialog.h	(revision 35131)
@@ -56,4 +56,7 @@
     virtual void sltCategoryChanged(int cId);
 
+    /* Mark dialog as processed: */
+    virtual void sltMarkProcessed();
+
 protected:
 
@@ -91,4 +94,7 @@
     void sltUpdateWhatsThis(bool fGotFocus = false);
 
+    /* Slot to handle reject: */
+    void reject();
+
 private:
 
@@ -96,4 +102,5 @@
     bool eventFilter(QObject *pObject, QEvent *pEvent);
     void showEvent(QShowEvent *pEvent);
+    void closeEvent(QCloseEvent *pEvent);
 
     void assignValidator(UISettingsPage *pPage);
@@ -103,4 +110,5 @@
 
     /* Error & Warning stuff: */
+    bool m_fProcessed;
     bool m_fValid;
     bool m_fSilent;
Index: /trunk/src/VBox/Frontends/VirtualBox/src/settings/UISettingsDialogSpecific.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/settings/UISettingsDialogSpecific.cpp	(revision 35130)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/settings/UISettingsDialogSpecific.cpp	(revision 35131)
@@ -394,4 +394,5 @@
      * it will load global settings & delete itself in the appropriate time: */
     UISettingsSerializer *pGlobalSettingsLoader = new UISettingsSerializer(this, QVariant::fromValue(data), UISettingsSerializeDirection_Load);
+    connect(pGlobalSettingsLoader, SIGNAL(destroyed(QObject*)), this, SLOT(sltMarkProcessed()));
     /* Set pages to be loaded: */
     pGlobalSettingsLoader->setPageList(m_pSelector->settingPages());
@@ -692,4 +693,5 @@
      * it will load machine settings & delete itself in the appropriate time: */
     UISettingsSerializer *pMachineSettingsLoader = new UISettingsSerializer(this, QVariant::fromValue(data), UISettingsSerializeDirection_Load);
+    connect(pMachineSettingsLoader, SIGNAL(destroyed(QObject*)), this, SLOT(sltMarkProcessed()));
     connect(pMachineSettingsLoader, SIGNAL(sigNotifyAboutPagesProcessed()), this, SLOT(sltSetFirstRunFlag()));
     /* Set pages to be loaded: */
