Index: /trunk/src/VBox/Frontends/VirtualBox/src/settings/UISettingsDialog.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/settings/UISettingsDialog.cpp	(revision 54920)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/settings/UISettingsDialog.cpp	(revision 54921)
@@ -35,4 +35,5 @@
 # include "QIWidgetValidator.h"
 # include "VBoxSettingsSelector.h"
+# include "UISettingsSerializer.h"
 # include "UISettingsPage.h"
 # include "UIToolBar.h"
@@ -158,5 +159,5 @@
 {
     /* Load data: */
-    loadData();
+    loadOwnData();
 
     /* Execute dialog and wait for completion: */
@@ -165,5 +166,5 @@
 
     /* Save data: */
-    saveData();
+    saveOwnData();
 }
 
@@ -197,4 +198,5 @@
 void UISettingsDialog::sltMarkLoaded()
 {
+    /* Mark as loaded: */
     m_fLoaded = true;
 }
@@ -202,4 +204,5 @@
 void UISettingsDialog::sltMarkSaved()
 {
+    /* Mark as saved: */
     m_fSaved = true;
 }
@@ -223,12 +226,39 @@
 }
 
-void UISettingsDialog::loadData()
-{
+void UISettingsDialog::loadData(QVariant &data)
+{
+    /* Mark as not loaded: */
     m_fLoaded = false;
-}
-
-void UISettingsDialog::saveData()
-{
+
+    /* Create settings loader: */
+    UISettingsSerializer *pSettingsLoader = new UISettingsSerializer(this,
+                                                                     UISettingsSerializer::Load,
+                                                                     QVariant::fromValue(data),
+                                                                     m_pSelector->settingPages());
+    connect(pSettingsLoader, SIGNAL(destroyed(QObject*)), this, SLOT(sltMarkLoaded()));
+    /* Ask to raise required page priority: */
+    pSettingsLoader->raisePriorityOfPage(m_pSelector->currentId());
+    /* Start loader: */
+    pSettingsLoader->start();
+
+    /* Upload data finally: */
+    data = pSettingsLoader->data();
+}
+
+void UISettingsDialog::saveData(QVariant &data)
+{
+    /* Mark as not saved: */
     m_fSaved = false;
+
+    /* Create settings saver: */
+    UISettingsSerializer *pSettingsSaver = new UISettingsSerializer(this,
+                                                                    UISettingsSerializer::Save,
+                                                                    QVariant::fromValue(data),
+                                                                    m_pSelector->settingPages());
+    /* Start saver: */
+    pSettingsSaver->start();
+
+    /* Upload data finally: */
+    data = pSettingsSaver->data();
 }
 
Index: /trunk/src/VBox/Frontends/VirtualBox/src/settings/UISettingsDialog.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/settings/UISettingsDialog.h	(revision 54920)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/settings/UISettingsDialog.h	(revision 54921)
@@ -66,7 +66,15 @@
 protected:
 
-    /* Save/load API: */
-    virtual void loadData();
-    virtual void saveData();
+    /** Loads the @a data. */
+    void loadData(QVariant &data);
+    /** Wrapper for the method above.
+      * Loads the data from the corresponding source. */
+    virtual void loadOwnData() = 0;
+
+    /** Saves the @a data. */
+    void saveData(QVariant &data);
+    /** Wrapper for the method above.
+      * Saves the data to the corresponding source. */
+    virtual void saveOwnData() = 0;
 
     /* UI translator: */
Index: /trunk/src/VBox/Frontends/VirtualBox/src/settings/UISettingsDialogSpecific.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/settings/UISettingsDialogSpecific.cpp	(revision 54920)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/settings/UISettingsDialogSpecific.cpp	(revision 54921)
@@ -206,9 +206,6 @@
 }
 
-void UISettingsDialogGlobal::loadData()
-{
-    /* Call to base-class: */
-    UISettingsDialog::loadData();
-
+void UISettingsDialogGlobal::loadOwnData()
+{
     /* Get properties and settings: */
     CSystemProperties properties = vboxGlobal().virtualBox().GetSystemProperties();
@@ -217,19 +214,12 @@
     qRegisterMetaType<UISettingsDataGlobal>();
     UISettingsDataGlobal data(properties, settings);
-    /* Create global settings loader: */
-    UISettingsSerializer *pGlobalSettingsLoader = new UISettingsSerializer(this,
-                                                                           UISettingsSerializer::Load,
-                                                                           QVariant::fromValue(data),
-                                                                           m_pSelector->settingPages());
-    connect(pGlobalSettingsLoader, SIGNAL(destroyed(QObject*)), this, SLOT(sltMarkLoaded()));
-    /* Start loader: */
-    pGlobalSettingsLoader->start();
-}
-
-void UISettingsDialogGlobal::saveData()
-{
+    QVariant varData = QVariant::fromValue(data);
+
     /* Call to base-class: */
-    UISettingsDialog::saveData();
-
+    UISettingsDialog::loadData(varData);
+}
+
+void UISettingsDialogGlobal::saveOwnData()
+{
     /* Get properties and settings: */
     CSystemProperties properties = vboxGlobal().virtualBox().GetSystemProperties();
@@ -238,15 +228,12 @@
     qRegisterMetaType<UISettingsDataGlobal>();
     UISettingsDataGlobal data(properties, settings);
-    /* Create global settings saver: */
-    UISettingsSerializer *pGlobalSettingsSaver = new UISettingsSerializer(this,
-                                                                          UISettingsSerializer::Save,
-                                                                          QVariant::fromValue(data),
-                                                                          m_pSelector->settingPages());
-    /* Start saver: */
-    pGlobalSettingsSaver->start();
+    QVariant varData = QVariant::fromValue(data);
+
+    /* Call to base-class: */
+    UISettingsDialog::saveData(varData);
 
     /* Get updated properties & settings: */
-    CSystemProperties newProperties = pGlobalSettingsSaver->data().value<UISettingsDataGlobal>().m_properties;
-    VBoxGlobalSettings newSettings = pGlobalSettingsSaver->data().value<UISettingsDataGlobal>().m_settings;
+    CSystemProperties newProperties = varData.value<UISettingsDataGlobal>().m_properties;
+    VBoxGlobalSettings newSettings = varData.value<UISettingsDataGlobal>().m_settings;
     /* If properties are not OK => show the error: */
     if (!newProperties.isOk())
@@ -506,12 +493,9 @@
 }
 
-void UISettingsDialogMachine::loadData()
+void UISettingsDialogMachine::loadOwnData()
 {
     /* Check that session is NOT created: */
     if (!m_session.isNull())
         return;
-
-    /* Call to base-class: */
-    UISettingsDialog::loadData();
 
     /* Disconnect global VBox events from this dialog: */
@@ -532,25 +516,15 @@
     qRegisterMetaType<UISettingsDataMachine>();
     UISettingsDataMachine data(m_machine, m_console);
-    /* Create machine settings loader: */
-    UISettingsSerializer *pMachineSettingsLoader = new UISettingsSerializer(this,
-                                                                            UISettingsSerializer::Load,
-                                                                            QVariant::fromValue(data),
-                                                                            m_pSelector->settingPages());
-    connect(pMachineSettingsLoader, SIGNAL(destroyed(QObject*)), this, SLOT(sltMarkLoaded()));
-    connect(pMachineSettingsLoader, SIGNAL(sigNotifyAboutPagesProcessed()), this, SLOT(sltSetFirstRunFlag()));
-    /* Ask to raise required page priority: */
-    pMachineSettingsLoader->raisePriorityOfPage(m_pSelector->currentId());
-    /* Start page loader: */
-    pMachineSettingsLoader->start();
-}
-
-void UISettingsDialogMachine::saveData()
+    QVariant varData = QVariant::fromValue(data);
+
+    /* Call to base-class: */
+    UISettingsDialog::loadData(varData);
+}
+
+void UISettingsDialogMachine::saveOwnData()
 {
     /* Check that session is NOT created: */
     if (!m_session.isNull())
         return;
-
-    /* Call to base-class: */
-    UISettingsDialog::saveData();
 
     /* Disconnect global VBox events from this dialog: */
@@ -571,14 +545,11 @@
     qRegisterMetaType<UISettingsDataMachine>();
     UISettingsDataMachine data(m_machine, m_console);
-    /* Create machine settings saver: */
-    UISettingsSerializer *pMachineSettingsSaver = new UISettingsSerializer(this,
-                                                                           UISettingsSerializer::Save,
-                                                                           QVariant::fromValue(data),
-                                                                           m_pSelector->settingPages());
-    /* Start saver: */
-    pMachineSettingsSaver->start();
+    QVariant varData = QVariant::fromValue(data);
+
+    /* Call to base-class: */
+    UISettingsDialog::saveData(varData);
 
     /* Get updated machine: */
-    m_machine = pMachineSettingsSaver->data().value<UISettingsDataMachine>().m_machine;
+    m_machine = varData.value<UISettingsDataMachine>().m_machine;
     /* If machine is OK => perform final operations: */
     if (m_machine.isOk())
@@ -743,4 +714,6 @@
     UISettingsDialog::sltMarkLoaded();
 
+    sltSetFirstRunFlag();
+
     /* Unlock the session if exists: */
     if (!m_session.isNull())
@@ -821,5 +794,5 @@
 
     /* Reload data: */
-    loadData();
+    loadOwnData();
 }
 
Index: /trunk/src/VBox/Frontends/VirtualBox/src/settings/UISettingsDialogSpecific.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/settings/UISettingsDialogSpecific.h	(revision 54920)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/settings/UISettingsDialogSpecific.h	(revision 54921)
@@ -41,6 +41,8 @@
 protected:
 
-    void loadData();
-    void saveData();
+    /** Loads the data from the corresponding source. */
+    void loadOwnData();
+    /** Saves the data to the corresponding source. */
+    void saveOwnData();
 
     void retranslateUi();
@@ -66,6 +68,8 @@
 protected:
 
-    void loadData();
-    void saveData();
+    /** Loads the data from the corresponding source. */
+    void loadOwnData();
+    /** Saves the data to the corresponding source. */
+    void saveOwnData();
 
     void retranslateUi();
