Index: /trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserItem.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserItem.cpp	(revision 43808)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserItem.cpp	(revision 43809)
@@ -134,4 +134,5 @@
 {
     m_fRoot = fRoot;
+    handleRootStatusChange();
 }
 
Index: /trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserItem.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserItem.h	(revision 43808)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserItem.h	(revision 43809)
@@ -150,4 +150,7 @@
     void dropEvent(QGraphicsSceneDragDropEvent *pEvent);
 
+    /* Helper: Recache stuff: */
+    virtual void handleRootStatusChange() {}
+
     /* Static paint stuff: */
     static void configurePainterShape(QPainter *pPainter, const QStyleOptionGraphicsItem *pOption, int iRadius);
Index: /trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserItemGroup.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserItemGroup.cpp	(revision 43808)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserItemGroup.cpp	(revision 43809)
@@ -53,4 +53,7 @@
     /* Translate finally: */
     retranslateUi();
+
+    /* Calculate minimum header size: */
+    recacheHeaderSize();
 }
 
@@ -75,4 +78,7 @@
     /* Translate finally: */
     retranslateUi();
+
+    /* Calculate minimum header size: */
+    recacheHeaderSize();
 }
 
@@ -98,4 +104,7 @@
     /* Translate finally: */
     retranslateUi();
+
+    /* Calculate minimum header size: */
+    recacheHeaderSize();
 }
 
@@ -123,4 +132,7 @@
     /* Translate finally: */
     retranslateUi();
+
+    /* Calculate minimum header size: */
+    recacheHeaderSize();
 }
 
@@ -265,4 +277,5 @@
     m_strName = strNewName;
     recacheVisibleName();
+    recacheHeaderSize();
     model()->saveGroupSettings();
 }
@@ -367,57 +380,5 @@
         case GroupItemData_MachineCountTextSize: return isMainRoot() ? QSize(0, 0) : textSize(m_infoFont, model()->paintDevice(),
                                                                                               data(GroupItemData_MachineCountText).toString());
-        case GroupItemData_FullHeaderSize:
-        {
-            /* Prepare variables: */
-            int iMajorSpacing = data(GroupItemData_MajorSpacing).toInt();
-            QSize toggleButtonSize = data(GroupItemData_ToggleButtonSize).toSize();
-            QSize enterButtonSize = data(GroupItemData_EnterButtonSize).toSize();
-            QSize exitButtonSize = data(GroupItemData_ExitButtonSize).toSize();
-            QSize minimumNameSize = data(GroupItemData_MinimumNameSize).toSize();
-            QSize groupPixmapSize = data(GroupItemData_GroupPixmapSize).toSize();
-            QSize machinePixmapSize = data(GroupItemData_MachinePixmapSize).toSize();
-            QSize groupCountTextSize = data(GroupItemData_GroupCountTextSize).toSize();
-            QSize machineCountTextSize = data(GroupItemData_MachineCountTextSize).toSize();
-
-            /* Calculate minimum width: */
-            int iGroupItemHeaderWidth = 0;
-            if (isRoot() && !isMainRoot())
-                iGroupItemHeaderWidth += exitButtonSize.width();
-            if (!isRoot())
-                iGroupItemHeaderWidth += toggleButtonSize.width();
-            if (!isMainRoot())
-                iGroupItemHeaderWidth += /* Spacing between button and name: */
-                                         iMajorSpacing +
-                                         minimumNameSize.width() +
-                                         /* Spacing between name and info: */
-                                         iMajorSpacing +
-                                         /* Group stuff width: */
-                                         groupPixmapSize.width() +
-                                         groupCountTextSize.width() +
-                                         /* Machine stuff width: */
-                                         machinePixmapSize.width() +
-                                         machineCountTextSize.width();
-            if (!isRoot())
-                iGroupItemHeaderWidth += enterButtonSize.width();
-
-            /* Search for maximum height: */
-            QList<int> heights;
-            if (isRoot() && !isMainRoot())
-                heights << exitButtonSize.height();
-            if (!isRoot())
-                heights << toggleButtonSize.height();
-            if (!isMainRoot())
-                heights << minimumNameSize.height()
-                        << groupPixmapSize.height() << machinePixmapSize.height()
-                        << groupCountTextSize.height() << machineCountTextSize.height();
-            if (!isRoot())
-                heights << enterButtonSize.height();
-            int iGroupItemHeaderHeight = 0;
-            foreach (int iHeight, heights)
-                iGroupItemHeaderHeight = qMax(iGroupItemHeaderHeight, iHeight);
-
-            /* Return result: */
-            return QSize(iGroupItemHeaderWidth, iGroupItemHeaderHeight);
-        }
+        case GroupItemData_FullHeaderSize: return m_headerSize;
         /* Default: */
         default: break;
@@ -494,4 +455,13 @@
 }
 
+void UIGChooserItemGroup::handleRootStatusChange()
+{
+    /* Update visible name: */
+    recacheVisibleName();
+
+    /* Update minimum header size: */
+    recacheHeaderSize();
+}
+
 void UIGChooserItemGroup::recacheVisibleName()
 {
@@ -532,4 +502,70 @@
     m_strVisibleName = compressText(m_nameFont, model()->paintDevice(), m_strName, iMaximumWidth);
     update();
+}
+
+void UIGChooserItemGroup::recacheHeaderSize()
+{
+    /* Not for main root: */
+    if (isMainRoot())
+        return;
+
+    /* Prepare variables: */
+    int iMajorSpacing = data(GroupItemData_MajorSpacing).toInt();
+    QSize exitButtonSize = data(GroupItemData_ExitButtonSize).toSize();
+    QSize toggleButtonSize = data(GroupItemData_ToggleButtonSize).toSize();
+    QSize minimumNameSize = data(GroupItemData_MinimumNameSize).toSize();
+    QSize groupPixmapSize = data(GroupItemData_GroupPixmapSize).toSize();
+    QSize groupCountTextSize = data(GroupItemData_GroupCountTextSize).toSize();
+    QSize machinePixmapSize = data(GroupItemData_MachinePixmapSize).toSize();
+    QSize machineCountTextSize = data(GroupItemData_MachineCountTextSize).toSize();
+    QSize enterButtonSize = data(GroupItemData_EnterButtonSize).toSize();
+
+    /* Calculate minimum width: */
+    int iHeaderWidth = 0;
+    /* Button width: */
+    if (isRoot())
+        iHeaderWidth += exitButtonSize.width();
+    else
+        iHeaderWidth += toggleButtonSize.width();
+    iHeaderWidth += /* Spacing between button and name: */
+                    iMajorSpacing +
+                    /* Minimum name width: */
+                    minimumNameSize.width() +
+                    /* Spacing between name and info: */
+                    iMajorSpacing;
+    /* Group info width: */
+    if (!m_groupItems.isEmpty())
+        iHeaderWidth += groupPixmapSize.width() +
+                        groupCountTextSize.width();
+    /* Machine info width: */
+    if (!m_machineItems.isEmpty())
+        iHeaderWidth += machinePixmapSize.width() +
+                        machineCountTextSize.width();
+    /* Button width: */
+    if (!isRoot())
+        iHeaderWidth += enterButtonSize.width();
+
+    /* Search for maximum height: */
+    QList<int> heights;
+    /* Button height: */
+    if (isRoot())
+        heights << exitButtonSize.height();
+    else
+        heights << toggleButtonSize.height();
+    heights /* Minimum name height: */
+            << minimumNameSize.height()
+            /* Group info height: */
+            << groupPixmapSize.height() << groupCountTextSize.height()
+            /* Machine info height: */
+            << machinePixmapSize.height() << machineCountTextSize.height();
+    /* Button height: */
+    if (!isRoot())
+        heights << enterButtonSize.height();
+    int iHeaderHeight = 0;
+    foreach (int iHeight, heights)
+        iHeaderHeight = qMax(iHeaderHeight, iHeight);
+
+    /* Return result: */
+    m_headerSize = QSize(iHeaderWidth, iHeaderHeight);
 }
 
Index: /trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserItemGroup.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserItemGroup.h	(revision 43808)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserItemGroup.h	(revision 43809)
@@ -132,6 +132,8 @@
     static void copyContent(UIGChooserItemGroup *pFrom, UIGChooserItemGroup *pTo);
 
-    /* Helper: Recache stuff: */
+    /* Helpers: Recache stuff: */
+    void handleRootStatusChange();
     void recacheVisibleName();
+    void recacheHeaderSize();
 
     /* Helper: Translate stuff: */
@@ -213,4 +215,5 @@
     QRectF m_previousGeometry;
     QString m_strVisibleName;
+    QSize m_headerSize;
     QFont m_nameFont;
     QFont m_infoFont;
