Index: /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataDefs.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataDefs.cpp	(revision 52034)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataDefs.cpp	(revision 52035)
@@ -110,4 +110,5 @@
 const char* UIExtraDataDefs::GUI_MiniToolBarAlignment = "GUI/MiniToolBarAlignment";
 const char* UIExtraDataDefs::GUI_RestrictedStatusBarIndicators = "GUI/RestrictedStatusBarIndicators";
+const char* UIExtraDataDefs::GUI_StatusBar_IndicatorOrder = "GUI/StatusBar/IndicatorOrder";
 #ifdef Q_WS_MAC
 const char* UIExtraDataDefs::GUI_PresentationModeEnabled = "GUI/PresentationModeEnabled";
Index: /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataDefs.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataDefs.h	(revision 52034)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataDefs.h	(revision 52035)
@@ -203,4 +203,6 @@
         /** Holds restricted Runtime UI status-bar indicators. */
         extern const char* GUI_RestrictedStatusBarIndicators;
+        /** Holds Runtime UI status-bar indicator order. */
+        extern const char* GUI_StatusBar_IndicatorOrder;
 #ifdef Q_WS_MAC
         /** Mac OS X: Holds whether 'presentation mode' enabled. */
Index: /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.cpp	(revision 52034)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.cpp	(revision 52035)
@@ -1783,5 +1783,5 @@
            << GUI_HiDPI_Optimization
            << GUI_ShowMiniToolBar << GUI_MiniToolBarAutoHide << GUI_MiniToolBarAlignment
-           << GUI_RestrictedStatusBarIndicators
+           << GUI_RestrictedStatusBarIndicators << GUI_StatusBar_IndicatorOrder
 #ifdef Q_WS_MAC
            << GUI_PresentationModeEnabled
@@ -2810,9 +2810,9 @@
     /* Prepare result: */
     QList<IndicatorType> result;
-    /* Get restricted status-bar-indicators: */
+    /* Get restricted status-bar indicators: */
     foreach (const QString &strValue, extraDataStringList(GUI_RestrictedStatusBarIndicators, strID))
     {
-        IndicatorType value = gpConverter->fromInternalString<IndicatorType>(strValue);
-        if (value != IndicatorType_Invalid)
+        const IndicatorType value = gpConverter->fromInternalString<IndicatorType>(strValue);
+        if (value != IndicatorType_Invalid && !result.contains(value))
             result << value;
     }
@@ -2830,4 +2830,30 @@
     /* Re-cache corresponding extra-data: */
     setExtraDataStringList(GUI_RestrictedStatusBarIndicators, data, strID);
+}
+
+QList<IndicatorType> UIExtraDataManager::statusBarIndicatorOrder(const QString &strID)
+{
+    /* Prepare result: */
+    QList<IndicatorType> result;
+    /* Get status-bar indicator order: */
+    foreach (const QString &strValue, extraDataStringList(GUI_StatusBar_IndicatorOrder, strID))
+    {
+        const IndicatorType value = gpConverter->fromInternalString<IndicatorType>(strValue);
+        if (value != IndicatorType_Invalid && !result.contains(value))
+            result << value;
+    }
+    /* Return result: */
+    return result;
+}
+
+void UIExtraDataManager::setStatusBarIndicatorOrder(const QList<IndicatorType> &list, const QString &strID)
+{
+    /* Parse passed list: */
+    QStringList data;
+    foreach (const IndicatorType &indicatorType, list)
+        data << gpConverter->toInternalString(indicatorType);
+
+    /* Re-cache corresponding extra-data: */
+    setExtraDataStringList(GUI_StatusBar_IndicatorOrder, data, strID);
 }
 
@@ -3139,5 +3165,6 @@
     {
         /* Status-bar configuration change: */
-        if (strKey == GUI_RestrictedStatusBarIndicators)
+        if (strKey == GUI_RestrictedStatusBarIndicators ||
+            strKey == GUI_StatusBar_IndicatorOrder)
             emit sigStatusBarConfigurationChange();
         /* HID LEDs sync state changed (allowed if not restricted)? */
Index: /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.h	(revision 52034)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.h	(revision 52035)
@@ -369,4 +369,9 @@
         void setRestrictedStatusBarIndicators(const QList<IndicatorType> &list, const QString &strID);
 
+        /** Returns Runtime UI status-bar indicator order list. */
+        QList<IndicatorType> statusBarIndicatorOrder(const QString &strID);
+        /** Defines Runtime UI status-bar indicator order @a list. */
+        void setStatusBarIndicatorOrder(const QList<IndicatorType> &list, const QString &strID);
+
 #ifdef Q_WS_MAC
         /** Mac OS X: Returns whether 'presentation mode' enabled. */
Index: /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIIndicatorsPool.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIIndicatorsPool.cpp	(revision 52034)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIIndicatorsPool.cpp	(revision 52035)
@@ -1040,23 +1040,53 @@
 void UIIndicatorsPool::updatePool()
 {
-    /* Recache the list of restricted indicators: */
-    m_configuration = gEDataManager->restrictedStatusBarIndicators(vboxGlobal().managedVMUuid());
-
-    /* Update indicators: */
+    /* Recache status-bar configuration: */
+    m_restrictions = gEDataManager->restrictedStatusBarIndicators(vboxGlobal().managedVMUuid());
+    m_order = gEDataManager->statusBarIndicatorOrder(vboxGlobal().managedVMUuid());
+
+    /* Make sure the order is complete taking restrictions into account: */
     for (int iType = IndicatorType_Invalid; iType < IndicatorType_Max; ++iType)
     {
-        /* Determine indicator presence: */
-        const IndicatorType indicatorType = static_cast<IndicatorType>(iType);
-        bool fPresenceAllowed = !m_configuration.contains(indicatorType);
-
-        /* If presence restricted: */
-        if (!fPresenceAllowed && m_pool.contains(indicatorType))
-        {
-            /* Cleanup indicator: */
+        /* Get iterated type: */
+        IndicatorType type = (IndicatorType)iType;
+        /* Skip invalid type: */
+        if (type == IndicatorType_Invalid)
+            continue;
+        /* Take restriction/presence into account: */
+        bool fRestricted = m_restrictions.contains(type);
+        bool fPresent = m_order.contains(type);
+        if (fRestricted && fPresent)
+            m_order.removeAll(type);
+        else if (!fRestricted && !fPresent)
+            m_order << type;
+    }
+
+    /* Remove restricted indicators: */
+    foreach (const IndicatorType &indicatorType, m_restrictions)
+        if (m_pool.contains(indicatorType))
+        {
             delete m_pool.value(indicatorType);
             m_pool.remove(indicatorType);
         }
-        /* If presence allowed: */
-        else if (fPresenceAllowed && !m_pool.contains(indicatorType))
+
+    /* Add/Update allowed indicators: */
+    foreach (const IndicatorType &indicatorType, m_order)
+    {
+        /* Indicator exists: */
+        if (m_pool.contains(indicatorType))
+        {
+            /* Get indicator: */
+            QIStatusBarIndicator *pIndicator = m_pool.value(indicatorType);
+            /* Make sure it have valid position: */
+            const int iWantedIndex = indicatorPosition(indicatorType);
+            const int iActualIndex = m_pMainLayout->indexOf(pIndicator);
+            if (iActualIndex != iWantedIndex)
+            {
+                /* Re-inject indicator into main-layout at proper position: */
+                m_pMainLayout->removeWidget(pIndicator);
+                m_pMainLayout->insertWidget(iWantedIndex, pIndicator);
+            }
+        }
+        /* Indicator missed: */
+        else
         {
             /* Create indicator: */
@@ -1079,5 +1109,5 @@
             connect(m_pool.value(indicatorType), SIGNAL(sigContextMenuRequest(QIStatusBarIndicator*, QContextMenuEvent*)),
                     this, SLOT(sltContextMenuRequest(QIStatusBarIndicator*, QContextMenuEvent*)));
-            /* Insert indicator into main-layout: */
+            /* Insert indicator into main-layout at proper position: */
             m_pMainLayout->insertWidget(indicatorPosition(indicatorType), m_pool.value(indicatorType));
         }
@@ -1118,5 +1148,5 @@
 {
     int iPosition = 0;
-    foreach (const IndicatorType &iteratedIndicatorType, m_pool.keys())
+    foreach (const IndicatorType &iteratedIndicatorType, m_order)
         if (iteratedIndicatorType == indicatorType)
             return iPosition;
Index: /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIIndicatorsPool.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIIndicatorsPool.h	(revision 52034)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIIndicatorsPool.h	(revision 52035)
@@ -57,7 +57,4 @@
     ~UIIndicatorsPool();
 
-    /** Returns indicator corresponding to passed @a indicatorType. */
-    QIStatusBarIndicator* indicator(IndicatorType indicatorType) const { return m_pool.value(indicatorType); }
-
     /** Updates appearance for passed @a indicatorType. */
     void updateAppearance(IndicatorType indicatorType);
@@ -108,6 +105,8 @@
     /** Holds the session reference. */
     CSession &m_session;
-    /** Holds the cached configuration. */
-    QList<IndicatorType> m_configuration;
+    /** Holds the cached restrictions. */
+    QList<IndicatorType> m_restrictions;
+    /** Holds the cached order. */
+    QList<IndicatorType> m_order;
     /** Holds cached indicator instances. */
     QMap<IndicatorType, QIStatusBarIndicator*> m_pool;
