Index: trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsElement.h
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsElement.h	(revision 44015)
+++ trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsElement.h	(revision 44016)
@@ -50,6 +50,6 @@
 signals:
 
-    /* Notifier: Prepare stuff: */
-    void sigElementUpdateDone();
+    /* Notifier: Build stuff: */
+    void sigBuildDone();
 
     /* Notifiers: Hover stuff: */
Index: trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsElements.cpp
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsElements.cpp	(revision 44015)
+++ trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsElements.cpp	(revision 44016)
@@ -79,5 +79,5 @@
         setText(newText);
     cleanupThread();
-    emit sigElementUpdateDone();
+    emit sigBuildDone();
 }
 
@@ -232,5 +232,5 @@
 {
     m_pPreview->setMachine(machine());
-    emit sigElementUpdateDone();
+    emit sigBuildDone();
 }
 
Index: trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsGroup.cpp
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsGroup.cpp	(revision 44015)
+++ trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsGroup.cpp	(revision 44016)
@@ -27,6 +27,5 @@
 UIGDetailsGroup::UIGDetailsGroup()
     : UIGDetailsItem(0)
-    , m_pStep(0)
-    , m_iStep(0)
+    , m_pBuildStep(0)
 {
     /* Prepare connections: */
@@ -40,5 +39,5 @@
 }
 
-void UIGDetailsGroup::setItems(const QList<UIVMItem*> &machineItems)
+void UIGDetailsGroup::buildGroup(const QList<UIVMItem*> &machineItems)
 {
     /* Remember passed machine-items: */
@@ -49,25 +48,25 @@
         delete m_items.last();
 
-    /* Update items: */
-    updateItems();
-}
-
-void UIGDetailsGroup::updateItems()
+    /* Start building group: */
+    rebuildGroup();
+}
+
+void UIGDetailsGroup::rebuildGroup()
 {
     /* Load settings: */
     loadSettings();
 
-    /* Cleanup step: */
-    delete m_pStep;
-    m_pStep = 0;
+    /* Cleanup build-step: */
+    delete m_pBuildStep;
+    m_pBuildStep = 0;
 
     /* Generate new group-id: */
     m_strGroupId = QUuid::createUuid().toString();
 
-    /* Request to prepare first set: */
-    emit sigStartFirstStep(m_strGroupId);
-}
-
-void UIGDetailsGroup::stopPopulatingItems()
+    /* Request to build first step: */
+    emit sigBuildStep(m_strGroupId, 0);
+}
+
+void UIGDetailsGroup::stopBuildingGroup()
 {
     /* Generate new group-id: */
@@ -75,32 +74,38 @@
 }
 
-void UIGDetailsGroup::sltFirstStep(QString strGroupId)
-{
-    /* Cleanup step: */
-    delete m_pStep;
-    m_pStep = 0;
+void UIGDetailsGroup::sltBuildStep(QString strStepId, int iStepNumber)
+{
+    /* Cleanup build-step: */
+    delete m_pBuildStep;
+    m_pBuildStep = 0;
 
     /* Is step id valid? */
-    if (strGroupId != m_strGroupId)
+    if (strStepId != m_strGroupId)
         return;
 
-    /* Prepare first set: */
-    m_iStep = 0;
-    prepareSet(strGroupId);
-}
-
-void UIGDetailsGroup::sltNextStep(QString strGroupId)
-{
-    /* Cleanup step: */
-    delete m_pStep;
-    m_pStep = 0;
-
-    /* Is step id valid? */
-    if (strGroupId != m_strGroupId)
-        return;
-
-    /* Prepare next set: */
-    ++m_iStep;
-    prepareSet(strGroupId);
+    /* Step number feats the bounds: */
+    if (iStepNumber >= 0 && iStepNumber < m_machineItems.size())
+    {
+        /* Should we create a new set for this step? */
+        UIGDetailsSet *pSet = 0;
+        if (iStepNumber > m_items.size() - 1)
+            pSet = new UIGDetailsSet(this);
+        /* Or use existing? */
+        else
+            pSet = m_items.at(iStepNumber)->toSet();
+
+        /* Create next build-step: */
+        m_pBuildStep = new UIBuildStep(this, strStepId, iStepNumber + 1);
+        connect(pSet, SIGNAL(sigBuildDone()), m_pBuildStep, SLOT(sltStepDone()), Qt::QueuedConnection);
+        connect(m_pBuildStep, SIGNAL(sigStepDone(QString, int)), this, SLOT(sltBuildStep(QString, int)), Qt::QueuedConnection);
+
+        /* Build set: */
+        pSet->buildSet(m_machineItems[iStepNumber], m_machineItems.size() == 1, m_settings);
+    }
+    else
+    {
+        /* Update model: */
+        model()->updateLayout();
+    }
 }
 
@@ -171,5 +176,5 @@
 void UIGDetailsGroup::prepareConnections()
 {
-    connect(this, SIGNAL(sigStartFirstStep(QString)), this, SLOT(sltFirstStep(QString)), Qt::QueuedConnection);
+    connect(this, SIGNAL(sigBuildStep(QString, int)), this, SLOT(sltBuildStep(QString, int)), Qt::QueuedConnection);
 }
 
@@ -196,29 +201,4 @@
 }
 
-void UIGDetailsGroup::prepareSet(QString strGroupId)
-{
-    /* Step number feats the bounds: */
-    if (m_iStep >= 0 && m_iStep < m_machineItems.size())
-    {
-        /* Should we create set? */
-        UIGDetailsSet *pSet = 0;
-        if (m_iStep > m_items.size() - 1)
-            pSet = new UIGDetailsSet(this);
-        else
-            pSet = m_items.at(m_iStep)->toSet();
-        /* Create prepare step: */
-        m_pStep = new UIPrepareStep(this, strGroupId);
-        connect(pSet, SIGNAL(sigSetCreationDone()), m_pStep, SLOT(sltStepDone()), Qt::QueuedConnection);
-        connect(m_pStep, SIGNAL(sigStepDone(const QString&)), this, SLOT(sltNextStep(const QString&)), Qt::QueuedConnection);
-        /* Configure set: */
-        pSet->configure(m_machineItems[m_iStep], m_settings, m_machineItems.size() == 1);
-    }
-    else
-    {
-        /* Update model after group update: */
-        model()->updateLayout();
-    }
-}
-
 int UIGDetailsGroup::minimumWidthHint() const
 {
Index: trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsGroup.h
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsGroup.h	(revision 44015)
+++ trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsGroup.h	(revision 44016)
@@ -34,6 +34,6 @@
 signals:
 
-    /* Notifier: Prepare stuff: */
-    void sigStartFirstStep(QString strGroupId);
+    /* Notifier: Build stuff: */
+    void sigBuildStep(QString strStepId, int iStepNumber);
 
 public:
@@ -47,14 +47,13 @@
     ~UIGDetailsGroup();
 
-    /* API: Prepare stuff: */
-    void setItems(const QList<UIVMItem*> &machineItems);
-    void updateItems();
-    void stopPopulatingItems();
+    /* API: Build stuff: */
+    void buildGroup(const QList<UIVMItem*> &machineItems);
+    void rebuildGroup();
+    void stopBuildingGroup();
 
 private slots:
 
-    /* Handlers: Prepare stuff: */
-    void sltFirstStep(QString strGroupId);
-    void sltNextStep(QString strGroupId);
+    /* Handler: Build stuff: */
+    void sltBuildStep(QString strStepId, int iStepNumber);
 
 private:
@@ -81,5 +80,4 @@
     void prepareConnections();
     void loadSettings();
-    void prepareSet(QString strGroupId);
 
     /* Helpers: Layout stuff: */
@@ -91,6 +89,5 @@
     QList<UIGDetailsItem*> m_items;
     QList<UIVMItem*> m_machineItems;
-    UIPrepareStep *m_pStep;
-    int m_iStep;
+    UIBuildStep *m_pBuildStep;
     QString m_strGroupId;
     QStringList m_settings;
Index: trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsItem.cpp
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsItem.cpp	(revision 44015)
+++ trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsItem.cpp	(revision 44016)
@@ -144,13 +144,14 @@
 }
 
-UIPrepareStep::UIPrepareStep(QObject *pParent, const QString &strStepId /* = QString() */)
+UIBuildStep::UIBuildStep(QObject *pParent, const QString &strStepId, int iStepNumber)
     : QObject(pParent)
     , m_strStepId(strStepId)
+    , m_iStepNumber(iStepNumber)
 {
 }
 
-void UIPrepareStep::sltStepDone()
+void UIBuildStep::sltStepDone()
 {
-    emit sigStepDone(m_strStepId);
+    emit sigStepDone(m_strStepId, m_iStepNumber);
 }
 
Index: trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsItem.h
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsItem.h	(revision 44015)
+++ trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsItem.h	(revision 44016)
@@ -91,6 +91,6 @@
 };
 
-/* Allows to prepare item synchronously: */
-class UIPrepareStep : public QObject
+/* Allows to build item content synchronously: */
+class UIBuildStep : public QObject
 {
     Q_OBJECT;
@@ -98,15 +98,15 @@
 signals:
 
-    /* Notifier: Prepare stuff: */
-    void sigStepDone(QString strStepId);
+    /* Notifier: Build stuff: */
+    void sigStepDone(QString strStepId, int iStepNumber);
 
 public:
 
     /* Constructor: */
-    UIPrepareStep(QObject *pParent, const QString &strStepId = QString());
+    UIBuildStep(QObject *pParent, const QString &strStepId, int iStepNumber);
 
 private slots:
 
-    /* Handlers: Prepare stuff: */
+    /* Handler: Build stuff: */
     void sltStepDone();
 
@@ -115,4 +115,5 @@
     /* Variables: */
     QString m_strStepId;
+    int m_iStepNumber;
 };
 
Index: trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsModel.cpp
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsModel.cpp	(revision 44015)
+++ trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsModel.cpp	(revision 44016)
@@ -93,5 +93,5 @@
 void UIGDetailsModel::setItems(const QList<UIVMItem*> &items)
 {
-    m_pRoot->setItems(items);
+    m_pRoot->buildGroup(items);
 }
 
@@ -196,20 +196,20 @@
     }
     vboxGlobal().virtualBox().SetExtraDataStringList(GUI_DetailsPageBoxes, detailsSettings);
-    m_pRoot->updateItems();
+    m_pRoot->rebuildGroup();
 }
 
 void UIGDetailsModel::sltHandleSlidingStarted()
 {
-    m_pRoot->stopPopulatingItems();
+    m_pRoot->stopBuildingGroup();
 }
 
 void UIGDetailsModel::sltHandleToggleStarted()
 {
-    m_pRoot->stopPopulatingItems();
+    m_pRoot->stopBuildingGroup();
 }
 
 void UIGDetailsModel::sltHandleToggleFinished()
 {
-    m_pRoot->updateItems();
+    m_pRoot->rebuildGroup();
 }
 
Index: trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsSet.cpp
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsSet.cpp	(revision 44015)
+++ trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsSet.cpp	(revision 44016)
@@ -33,6 +33,5 @@
     : UIGDetailsItem(pParent)
     , m_fFullSet(true)
-    , m_pStep(0)
-    , m_iStep(-1)
+    , m_pBuildStep(0)
     , m_iLastStepNumber(-1)
 {
@@ -56,5 +55,5 @@
 }
 
-void UIGDetailsSet::configure(UIVMItem *pItem, const QStringList &settings, bool fFullSet)
+void UIGDetailsSet::buildSet(UIVMItem *pItem, bool fFullSet, const QStringList &settings)
 {
     /* Remember passed arguments: */
@@ -82,44 +81,91 @@
     }
 
-    /* Create elements step-by-step: */
-    prepareElements();
-}
-
-void UIGDetailsSet::sltFirstStep(QString strSetId)
-{
-    /* Cleanup step: */
-    delete m_pStep;
-    m_pStep = 0;
+    /* Start building set: */
+    rebuildSet();
+}
+
+void UIGDetailsSet::sltBuildStep(QString strStepId, int iStepNumber)
+{
+    /* Cleanup build-step: */
+    delete m_pBuildStep;
+    m_pBuildStep = 0;
 
     /* Is step id valid? */
-    if (strSetId != m_strSetId)
+    if (strStepId != m_strSetId)
         return;
 
-    /* Prepare first element: */
-    m_iStep = DetailsElementType_General;
-    prepareElement(strSetId);
-}
-
-void UIGDetailsSet::sltNextStep(QString strSetId)
-{
-    /* Clear step: */
-    delete m_pStep;
-    m_pStep = 0;
-
-    /* Was that a requested set? */
-    if (strSetId != m_strSetId)
-        return;
-
-    /* Prepare next element: */
-    ++m_iStep;
-    prepareElement(strSetId);
-}
-
-void UIGDetailsSet::sltSetPrepared()
-{
-    /* Reset step index: */
-    m_iStep = -1;
-    /* Notify parent group: */
-    emit sigSetCreationDone();
+    /* Step number feats the bounds: */
+    if (iStepNumber >= 0 && iStepNumber <= m_iLastStepNumber)
+    {
+        /* Load details settings: */
+        DetailsElementType elementType = (DetailsElementType)iStepNumber;
+        QString strElementTypeOpened = gpConverter->toInternalString(elementType);
+        QString strElementTypeClosed = strElementTypeOpened + "Closed";
+        /* Should the element be visible? */
+        bool fVisible = m_settings.contains(strElementTypeOpened) || m_settings.contains(strElementTypeClosed);
+        /* Should the element be opened? */
+        bool fOpen = m_settings.contains(strElementTypeOpened);
+
+        /* Check if element is present already: */
+        UIGDetailsElement *pElement = element(elementType);
+        if (pElement && fOpen)
+            pElement->open(false);
+        /* Create element if necessary: */
+        bool fJustCreated = false;
+        if (!pElement)
+        {
+            fJustCreated = true;
+            pElement = createElement(elementType, fOpen);
+        }
+
+        /* Show element if necessary: */
+        if (fVisible && !pElement->isVisible())
+        {
+            /* Show the element: */
+            pElement->show();
+            /* Update layout: */
+            model()->updateLayout();
+        }
+        /* Hide element if necessary: */
+        else if (!fVisible && pElement->isVisible())
+        {
+            /* Hide the element: */
+            pElement->hide();
+            /* Update layout: */
+            model()->updateLayout();
+        }
+        /* Update model if necessary: */
+        else if (fJustCreated)
+            model()->updateLayout();
+
+        /* For visible element: */
+        if (pElement->isVisible())
+        {
+            /* Create next build-step: */
+            m_pBuildStep = new UIBuildStep(this, strStepId, iStepNumber + 1);
+            connect(pElement, SIGNAL(sigBuildDone()), m_pBuildStep, SLOT(sltStepDone()), Qt::QueuedConnection);
+            connect(m_pBuildStep, SIGNAL(sigStepDone(QString, int)), this, SLOT(sltBuildStep(QString, int)), Qt::QueuedConnection);
+
+            /* Build element: */
+            pElement->updateAppearance();
+        }
+        /* For invisible element: */
+        else
+        {
+            /* Just build next step: */
+            sltBuildStep(strStepId, iStepNumber + 1);
+        }
+    }
+    /* Step number out of bounds: */
+    else
+    {
+        /* Update model: */
+        model()->updateLayout();
+        /* Repaint all the items: */
+        foreach (UIGDetailsItem *pItem, items())
+            pItem->update();
+        /* Notify group about build done: */
+        emit sigBuildDone();
+    }
 }
 
@@ -135,5 +181,5 @@
 
     /* Update appearance: */
-    prepareElements();
+    rebuildSet();
 }
 
@@ -145,5 +191,5 @@
 
     /* Update appearance: */
-    prepareElements();
+    rebuildSet();
 }
 
@@ -151,5 +197,5 @@
 {
     /* Update appearance: */
-    prepareElements();
+    rebuildSet();
 }
 
@@ -271,6 +317,5 @@
 {
     /* Build connections: */
-    connect(this, SIGNAL(sigStartFirstStep(QString)), this, SLOT(sltFirstStep(QString)), Qt::QueuedConnection);
-    connect(this, SIGNAL(sigSetPrepared()), this, SLOT(sltSetPrepared()), Qt::QueuedConnection);
+    connect(this, SIGNAL(sigBuildStep(QString, int)), this, SLOT(sltBuildStep(QString, int)), Qt::QueuedConnection);
 
     /* Global-events connections: */
@@ -474,90 +519,15 @@
 }
 
-void UIGDetailsSet::prepareElements()
-{
-    /* Cleanup step: */
-    delete m_pStep;
-    m_pStep = 0;
+void UIGDetailsSet::rebuildSet()
+{
+    /* Cleanup build-step: */
+    delete m_pBuildStep;
+    m_pBuildStep = 0;
 
     /* Generate new set-id: */
     m_strSetId = QUuid::createUuid().toString();
 
-    /* Request to prepare first step: */
-    emit sigStartFirstStep(m_strSetId);
-}
-
-void UIGDetailsSet::prepareElement(QString strSetId)
-{
-    /* Step number feats the bounds: */
-    if (m_iStep <= m_iLastStepNumber)
-    {
-        /* Load details settings: */
-        DetailsElementType elementType = (DetailsElementType)m_iStep;
-        QString strElementTypeOpened = gpConverter->toInternalString(elementType);
-        QString strElementTypeClosed = strElementTypeOpened + "Closed";
-        /* Should be element visible? */
-        bool fVisible = m_settings.contains(strElementTypeOpened) || m_settings.contains(strElementTypeClosed);
-        /* Should be element opened? */
-        bool fOpen = m_settings.contains(strElementTypeOpened);
-
-        /* Check if element is present already: */
-        UIGDetailsElement *pElement = element(elementType);
-        if (pElement && fOpen)
-            pElement->open(false);
-        /* Create element if necessary: */
-        bool fJustCreated = false;
-        if (!pElement)
-        {
-            fJustCreated = true;
-            pElement = createElement(elementType, fOpen);
-        }
-
-        /* Show element if necessary: */
-        if (fVisible && !pElement->isVisible())
-        {
-            /* Show the element: */
-            pElement->show();
-            /* Update layout: */
-            model()->updateLayout();
-        }
-        /* Hide element if necessary: */
-        else if (!fVisible && pElement->isVisible())
-        {
-            /* Hide the element: */
-            pElement->hide();
-            /* Update layout: */
-            model()->updateLayout();
-        }
-        /* Update model if necessary: */
-        else if (fJustCreated)
-            model()->updateLayout();
-
-        /* For visible element: */
-        if (pElement->isVisible())
-        {
-            /* Create prepare step: */
-            m_pStep = new UIPrepareStep(this, strSetId);
-            connect(pElement, SIGNAL(sigElementUpdateDone()), m_pStep, SLOT(sltStepDone()), Qt::QueuedConnection);
-            connect(m_pStep, SIGNAL(sigStepDone(const QString&)), this, SLOT(sltNextStep(const QString&)), Qt::QueuedConnection);
-
-            /* Update element: */
-            pElement->updateAppearance();
-        }
-        /* For invisible element: */
-        else
-        {
-            /* Just go to the next step: */
-            sltNextStep(strSetId);
-        }
-    }
-    /* Step number out of bounds: */
-    else
-    {
-        /* Mark whole set prepared: */
-        model()->updateLayout();
-        foreach (UIGDetailsItem *pElement, items())
-            pElement->update();
-        emit sigSetPrepared();
-    }
+    /* Request to build first step: */
+    emit sigBuildStep(m_strSetId, DetailsElementType_General);
 }
 
Index: trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsSet.h
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsSet.h	(revision 44015)
+++ trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsSet.h	(revision 44016)
@@ -39,8 +39,7 @@
 signals:
 
-    /* Notifiers: Prepare stuff: */
-    void sigStartFirstStep(QString strSetId);
-    void sigSetPrepared();
-    void sigSetCreationDone();
+    /* Notifiers: Build stuff: */
+    void sigBuildStep(QString strSetId, int iStepNumber);
+    void sigBuildDone();
 
 public:
@@ -54,6 +53,6 @@
     ~UIGDetailsSet();
 
-    /* API: Configure stuff: */
-    void configure(UIVMItem *pItem, const QStringList &settings, bool fFullSet);
+    /* API: Build stuff: */
+    void buildSet(UIVMItem *pItem, bool fFullSet, const QStringList &settings);
 
     /* API: Machine stuff: */
@@ -62,8 +61,6 @@
 private slots:
 
-    /* Handlers: Prepare stuff: */
-    void sltFirstStep(QString strSetId);
-    void sltNextStep(QString strSetId);
-    void sltSetPrepared();
+    /* Handler: Build stuff: */
+    void sltBuildStep(QString strStepId, int iStepNumber);
 
     /* Handlers: Global event stuff: */
@@ -104,7 +101,6 @@
     void updateLayout();
 
-    /* Helpers: Prepare stuff: */
-    void prepareElements();
-    void prepareElement(QString strSetId);
+    /* Helpers: Build stuff: */
+    void rebuildSet();
     UIGDetailsElement* createElement(DetailsElementType elementType, bool fOpen);
 
@@ -115,6 +111,5 @@
     /* Prepare variables: */
     bool m_fFullSet;
-    UIPrepareStep *m_pStep;
-    int m_iStep;
+    UIBuildStep *m_pBuildStep;
     int m_iLastStepNumber;
     QString m_strSetId;
