Index: /trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsElement.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsElement.h	(revision 42812)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsElement.h	(revision 42813)
@@ -49,4 +49,7 @@
 
 signals:
+
+    /* Notifier: Prepare stuff: */
+    void sigElementUpdateDone();
 
     /* 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 42812)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsElements.cpp	(revision 42813)
@@ -77,10 +77,7 @@
 {
     if (text() != newText)
-    {
         setText(newText);
-        model()->updateLayout();
-        update();
-    }
     cleanupThread();
+    emit sigElementUpdateDone();
 }
 
@@ -224,4 +221,5 @@
 {
     m_pPreview->setMachine(machine());
+    emit sigElementUpdateDone();
 }
 
Index: /trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsGroup.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsGroup.cpp	(revision 42812)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsGroup.cpp	(revision 42813)
@@ -160,5 +160,5 @@
 }
 
-void UIGDetailsGroup::sltNextDone(QString strGroupId)
+void UIGDetailsGroup::sltNextStep(QString strGroupId)
 {
     /* Clear step: */
@@ -256,10 +256,8 @@
         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(sltNextDone(const QString&)), Qt::QueuedConnection);
+        connect(m_pStep, SIGNAL(sigStepDone(const QString&)), this, SLOT(sltNextStep(const QString&)), Qt::QueuedConnection);
         /* Configure set: */
         pSet->configure(m_items[m_iStep], m_settings, m_items.size() == 1);
-        /* Update model: */
-        model()->updateLayout();
-    }
-}
-
+    }
+}
+
Index: /trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsGroup.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsGroup.h	(revision 42812)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsGroup.h	(revision 42813)
@@ -67,5 +67,5 @@
     /* Handlers: Prepare stuff: */
     void sltFirstStep(QString strGroupId);
-    void sltNextDone(QString strGroupId);
+    void sltNextStep(QString strGroupId);
 
 private:
Index: /trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsSet.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsSet.cpp	(revision 42812)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsSet.cpp	(revision 42813)
@@ -32,4 +32,5 @@
 UIGDetailsSet::UIGDetailsSet(UIGDetailsItem *pParent)
     : UIGDetailsItem(pParent)
+    , m_pStep(0)
     , m_iStep(-1)
     , m_iLastStep(-1)
@@ -43,5 +44,4 @@
     /* Prepare connections: */
     connect(this, SIGNAL(sigStartFirstStep(QString)), this, SLOT(sltFirstStep(QString)), Qt::QueuedConnection);
-    connect(this, SIGNAL(sigElementPrepared(QString)), this, SLOT(sltNextStep(QString)), Qt::QueuedConnection);
     connect(this, SIGNAL(sigSetPrepared()), this, SLOT(sltSetPrepared()), Qt::QueuedConnection);
     connect(gVBoxEvents, SIGNAL(sigMachineStateChange(QString, KMachineState)), this, SLOT(sltMachineStateChange(QString)));
@@ -79,4 +79,8 @@
 void UIGDetailsSet::sltFirstStep(QString strSetId)
 {
+    /* Clear step: */
+    delete m_pStep;
+    m_pStep = 0;
+
     /* Was that a requested set? */
     if (strSetId != m_strSetId)
@@ -90,4 +94,8 @@
 void UIGDetailsSet::sltNextStep(QString strSetId)
 {
+    /* Clear step: */
+    delete m_pStep;
+    m_pStep = 0;
+
     /* Was that a requested set? */
     if (strSetId != m_strSetId)
@@ -477,4 +485,8 @@
     }
 
+    /* Clear step: */
+    delete m_pStep;
+    m_pStep = 0;
+
     /* Prepare first element: */
     m_strSetId = QUuid::createUuid().toString();
@@ -498,17 +510,45 @@
         /* Check if element is present already: */
         UIGDetailsElement *pElement = element(elementType);
-        /* Create if necessary: */
+        /* Create element if necessary: */
+        bool fJustCreated = false;
         if (!pElement)
+        {
+            fJustCreated = true;
             pElement = createElement(elementType, fOpen);
-        /* Prepare element: */
+        }
+
+        /* Show element if necessary: */
         if (fVisible && !pElement->isVisible())
+        {
             pElement->show();
+            model()->updateLayout();
+        }
+        /* Hide element if necessary: */
         else if (!fVisible && pElement->isVisible())
+        {
             pElement->hide();
+            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();
-        model()->updateLayout();
-        /* Mark element prepared: */
-        emit sigElementPrepared(strSetId);
+        }
+        /* For invisible element: */
+        else
+        {
+            /* Just go to the next step: */
+            sltNextStep(strSetId);
+        }
     }
     /* Step number out of bounds: */
@@ -516,4 +556,7 @@
     {
         /* Mark whole set prepared: */
+        model()->updateLayout();
+        foreach (UIGDetailsItem *pElement, items())
+            pElement->update();
         emit sigSetPrepared();
     }
Index: /trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsSet.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsSet.h	(revision 42812)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsSet.h	(revision 42813)
@@ -41,5 +41,4 @@
     /* Notifiers: Prepare stuff: */
     void sigStartFirstStep(QString strSetId);
-    void sigElementPrepared(QString strSetId);
     void sigSetPrepared();
     void sigSetCreationDone();
@@ -112,4 +111,5 @@
 
     /* Prepare variables: */
+    UIPrepareStep *m_pStep;
     int m_iStep;
     int m_iLastStep;
