Index: /trunk/src/VBox/Frontends/VirtualBox/src/settings/UISettingsDialog.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/settings/UISettingsDialog.cpp	(revision 54922)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/settings/UISettingsDialog.cpp	(revision 54923)
@@ -203,4 +203,8 @@
 void UISettingsDialog::sltMarkLoaded()
 {
+    /* Delete serializer early if exists: */
+    if (UISettingsSerializer::instance())
+        delete UISettingsSerializer::instance();
+
     /* Mark as loaded: */
     m_fLoaded = true;
@@ -209,4 +213,8 @@
 void UISettingsDialog::sltMarkSaved()
 {
+    /* Delete serializer early if exists: */
+    if (UISettingsSerializer::instance())
+        delete UISettingsSerializer::instance();
+
     /* Mark as saved: */
     m_fSaved = true;
@@ -241,9 +249,15 @@
                                                                      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();
+    AssertPtrReturnVoid(pSettingsLoader);
+    {
+        /* Configure settings loader: */
+        connect(pSettingsLoader, SIGNAL(sigNotifyAboutProcessStarted()), this, SLOT(sltHandleProcessStarted()));
+        connect(pSettingsLoader, SIGNAL(sigNotifyAboutPagePostprocessed(int)), this, SLOT(sltHandlePageProcessed()));
+        connect(pSettingsLoader, SIGNAL(sigNotifyAboutProcessFinished()), this, SLOT(sltMarkLoaded()));
+        /* Raise current page priority: */
+        pSettingsLoader->raisePriorityOfPage(m_pSelector->currentId());
+        /* Start settings loader: */
+        pSettingsLoader->start();
+    }
 
     /* Upload data finally: */
@@ -261,6 +275,9 @@
                                                                     QVariant::fromValue(data),
                                                                     m_pSelector->settingPages());
-    /* Start saver: */
-    pSettingsSaver->start();
+    AssertPtrReturnVoid(pSettingsSaver);
+    {
+        /* Start settings saver: */
+        pSettingsSaver->start();
+    }
 
     /* Upload data finally: */
Index: /trunk/src/VBox/Frontends/VirtualBox/src/settings/UISettingsSerializer.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/settings/UISettingsSerializer.cpp	(revision 54922)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/settings/UISettingsSerializer.cpp	(revision 54923)
@@ -34,5 +34,4 @@
     , m_data(data)
     , m_fSavingComplete(m_direction == Load)
-    , m_fAllowToDestroySerializer(m_direction == Load)
     , m_iIdOfHighPriorityPage(-1)
 {
@@ -47,11 +46,10 @@
     }
 
-    /* Connecting this signals: */
+    /* Handling internal signals, they are also redirected in their handlers: */
     connect(this, SIGNAL(sigNotifyAboutPageProcessed(int)), this, SLOT(sltHandleProcessedPage(int)), Qt::QueuedConnection);
     connect(this, SIGNAL(sigNotifyAboutPagesProcessed()), this, SLOT(sltHandleProcessedPages()), Qt::QueuedConnection);
-    connect(this, SIGNAL(finished()), this, SLOT(sltDestroySerializer()), Qt::QueuedConnection);
-    /* Connecting parent signals: */
-    connect(this, SIGNAL(sigNotifyAboutProcessStarted()), parent(), SLOT(sltHandleProcessStarted()), Qt::QueuedConnection);
-    connect(this, SIGNAL(sigNotifyAboutPageProcessed(int)), parent(), SLOT(sltHandlePageProcessed()), Qt::QueuedConnection);
+
+    /* Redirecting unhandled internal signals: */
+    connect(this, SIGNAL(finished()), this, SIGNAL(sigNotifyAboutProcessFinished()), Qt::QueuedConnection);
 }
 
@@ -108,6 +106,4 @@
             m_mutex.unlock();
         }
-        /* Allow to destroy serializer finally: */
-        m_fAllowToDestroySerializer = true;
     }
 }
@@ -128,4 +124,6 @@
         }
     }
+    /* Notify listeners about page postprocessed: */
+    emit sigNotifyAboutPagePostprocessed(iPageId);
 }
 
@@ -146,14 +144,6 @@
             pPage->revalidate();
     }
-}
-
-void UISettingsSerializer::sltDestroySerializer()
-{
-    /* If not yet all events were processed,
-     * we should postpone destruction for now: */
-    if (!m_fAllowToDestroySerializer)
-        QTimer::singleShot(0, this, SLOT(sltDestroySerializer()));
-    else
-        deleteLater();
+    /* Notify listeners about pages postprocessed: */
+    emit sigNotifyAboutPagesPostprocessed();
 }
 
Index: /trunk/src/VBox/Frontends/VirtualBox/src/settings/UISettingsSerializer.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/settings/UISettingsSerializer.h	(revision 54922)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/settings/UISettingsSerializer.h	(revision 54923)
@@ -46,7 +46,14 @@
     /** Notifies GUI thread about some page was processed. */
     void sigNotifyAboutPageProcessed(int iPageId);
-
     /** Notifies GUI thread about all pages were processed. */
     void sigNotifyAboutPagesProcessed();
+
+    /** Notifies listeners about some page was post-processed. */
+    void sigNotifyAboutPagePostprocessed(int iPageId);
+    /** Notifies listeners about all pages were post-processed. */
+    void sigNotifyAboutPagesPostprocessed();
+
+    /** Notifies listeners about process has been finished. */
+    void sigNotifyAboutProcessFinished();
 
 public:
@@ -88,7 +95,4 @@
     void sltHandleProcessedPages();
 
-    /** Killing serializer, softly :) */
-    void sltDestroySerializer();
-
 protected:
 
@@ -109,6 +113,4 @@
     /** Holds whether the save was complete. */
     bool m_fSavingComplete;
-    /** Holds whether it is allowed to destroy the serializer. */
-    bool m_fAllowToDestroySerializer;
     /** Holds the ID of the high priority page. */
     int m_iIdOfHighPriorityPage;
