Index: /trunk/src/VBox/Frontends/VirtualBox/src/converter/UIConverterBackend.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/converter/UIConverterBackend.h	(revision 68303)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/converter/UIConverterBackend.h	(revision 68304)
@@ -85,4 +85,6 @@
 template<> bool canConvert<UIExtraDataMetaDefs::MenuWindowActionType>();
 #endif /* VBOX_WS_MAC */
+template<> bool canConvert<ToolTypeMachine>();
+template<> bool canConvert<ToolTypeGlobal>();
 template<> bool canConvert<UIVisualStateType>();
 template<> bool canConvert<DetailsElementType>();
@@ -157,4 +159,8 @@
 template<> UIExtraDataMetaDefs::MenuWindowActionType fromInternalString<UIExtraDataMetaDefs::MenuWindowActionType>(const QString &strMenuWindowActionType);
 #endif /* VBOX_WS_MAC */
+template<> QString toInternalString(const ToolTypeMachine &enmToolTypeMachine);
+template<> ToolTypeMachine fromInternalString<ToolTypeMachine>(const QString &strToolTypeMachine);
+template<> QString toInternalString(const ToolTypeGlobal &enmToolTypeGlobal);
+template<> ToolTypeGlobal fromInternalString<ToolTypeGlobal>(const QString &strToolTypeGlobal);
 template<> QString toInternalString(const UIVisualStateType &visualStateType);
 template<> UIVisualStateType fromInternalString<UIVisualStateType>(const QString &strVisualStateType);
Index: /trunk/src/VBox/Frontends/VirtualBox/src/converter/UIConverterBackendGlobal.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/converter/UIConverterBackendGlobal.cpp	(revision 68303)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/converter/UIConverterBackendGlobal.cpp	(revision 68304)
@@ -53,4 +53,6 @@
 template<> bool canConvert<UIExtraDataMetaDefs::MenuWindowActionType>() { return true; }
 #endif /* VBOX_WS_MAC */
+template<> bool canConvert<ToolTypeMachine>() { return true; }
+template<> bool canConvert<ToolTypeGlobal>() { return true; }
 template<> bool canConvert<UIVisualStateType>() { return true; }
 template<> bool canConvert<DetailsElementType>() { return true; }
@@ -856,4 +858,68 @@
 #endif /* VBOX_WS_MAC */
 
+/* QString <= ToolTypeMachine: */
+template<> QString toInternalString(const ToolTypeMachine &enmToolTypeMachine)
+{
+    QString strResult;
+    switch (enmToolTypeMachine)
+    {
+        case ToolTypeMachine_Details:   strResult = "Details"; break;
+        case ToolTypeMachine_Snapshots: strResult = "Snapshots"; break;
+        default:
+        {
+            AssertMsgFailed(("No text for machine tool type=%d", enmToolTypeMachine));
+            break;
+        }
+    }
+    return strResult;
+}
+
+/* ToolTypeMachine <= QString: */
+template<> ToolTypeMachine fromInternalString<ToolTypeMachine>(const QString &strToolTypeMachine)
+{
+    /* Here we have some fancy stuff allowing us
+     * to search through the keys using 'case-insensitive' rule: */
+    QStringList keys;    QList<ToolTypeMachine> values;
+    keys << "Details";   values << ToolTypeMachine_Details;
+    keys << "Snapshots"; values << ToolTypeMachine_Snapshots;
+    /* Invalid type for unknown words: */
+    if (!keys.contains(strToolTypeMachine, Qt::CaseInsensitive))
+        return ToolTypeMachine_Invalid;
+    /* Corresponding type for known words: */
+    return values.at(keys.indexOf(QRegExp(strToolTypeMachine, Qt::CaseInsensitive)));
+}
+
+/* QString <= ToolTypeGlobal: */
+template<> QString toInternalString(const ToolTypeGlobal &enmToolTypeGlobal)
+{
+    QString strResult;
+    switch (enmToolTypeGlobal)
+    {
+        case ToolTypeGlobal_VirtualMedia: strResult = "VirtualMedia"; break;
+        case ToolTypeGlobal_HostNetwork:  strResult = "HostNetwork"; break;
+        default:
+        {
+            AssertMsgFailed(("No text for global tool type=%d", enmToolTypeGlobal));
+            break;
+        }
+    }
+    return strResult;
+}
+
+/* ToolTypeGlobal <= QString: */
+template<> ToolTypeGlobal fromInternalString<ToolTypeGlobal>(const QString &strToolTypeGlobal)
+{
+    /* Here we have some fancy stuff allowing us
+     * to search through the keys using 'case-insensitive' rule: */
+    QStringList keys;       QList<ToolTypeGlobal> values;
+    keys << "VirtualMedia"; values << ToolTypeGlobal_VirtualMedia;
+    keys << "HostNetwork";  values << ToolTypeGlobal_HostNetwork;
+    /* Invalid type for unknown words: */
+    if (!keys.contains(strToolTypeGlobal, Qt::CaseInsensitive))
+        return ToolTypeGlobal_Invalid;
+    /* Corresponding type for known words: */
+    return values.at(keys.indexOf(QRegExp(strToolTypeGlobal, Qt::CaseInsensitive)));
+}
+
 /* QString <= UIVisualStateType: */
 template<> QString toInternalString(const UIVisualStateType &visualStateType)
Index: /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataDefs.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataDefs.cpp	(revision 68303)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataDefs.cpp	(revision 68304)
@@ -81,4 +81,6 @@
 const char* UIExtraDataDefs::GUI_Toolbar = "GUI/Toolbar";
 const char* UIExtraDataDefs::GUI_Toolbar_Text = "GUI/Toolbar/Text";
+const char* UIExtraDataDefs::GUI_Toolbar_MachineTools_Order = "GUI/Toolbar/MachineTools/Order";
+const char* UIExtraDataDefs::GUI_Toolbar_GlobalTools_Order = "GUI/Toolbar/GlobalTools/Order";
 const char* UIExtraDataDefs::GUI_Statusbar = "GUI/Statusbar";
 const char* UIExtraDataDefs::GUI_GroupDefinitions = "GUI/GroupDefinitions";
Index: /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataDefs.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataDefs.h	(revision 68303)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataDefs.h	(revision 68304)
@@ -136,4 +136,8 @@
         /** Holds whether selector-window tool-bar text visible. */
         extern const char* GUI_Toolbar_Text;
+        /** Holds the selector-window machine tools order. */
+        extern const char* GUI_Toolbar_MachineTools_Order;
+        /** Holds the selector-window global tools order. */
+        extern const char* GUI_Toolbar_GlobalTools_Order;
         /** Holds whether selector-window status-bar visible. */
         extern const char* GUI_Statusbar;
@@ -599,4 +603,24 @@
 
 
+/** Selector UI: Machine tool types. */
+enum ToolTypeMachine
+{
+    ToolTypeMachine_Invalid,
+    ToolTypeMachine_Desktop,
+    ToolTypeMachine_Details,
+    ToolTypeMachine_Snapshots,
+};
+Q_DECLARE_METATYPE(ToolTypeMachine);
+
+/** Selector UI: Global tool types. */
+enum ToolTypeGlobal
+{
+    ToolTypeGlobal_Invalid,
+    ToolTypeGlobal_Desktop,
+    ToolTypeGlobal_VirtualMedia,
+    ToolTypeGlobal_HostNetwork,
+};
+Q_DECLARE_METATYPE(ToolTypeGlobal);
+
 /** Selector UI: Details-element types. */
 enum DetailsElementType
Index: /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.cpp	(revision 68303)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.cpp	(revision 68304)
@@ -1948,5 +1948,7 @@
            << GUI_RecentListHD << GUI_RecentListCD << GUI_RecentListFD
            << GUI_LastSelectorWindowPosition << GUI_SplitterSizes
-           << GUI_Toolbar << GUI_Toolbar_Text << GUI_Statusbar
+           << GUI_Toolbar << GUI_Toolbar_Text
+           << GUI_Toolbar_MachineTools_Order << GUI_Toolbar_GlobalTools_Order
+           << GUI_Statusbar
            << GUI_GroupDefinitions << GUI_LastItemSelected
            << GUI_DetailsPageBoxes << GUI_PreviewUpdate
@@ -2687,4 +2689,56 @@
 }
 
+QList<ToolTypeMachine> UIExtraDataManager::selectorWindowToolsOrderMachine()
+{
+    /* Prepare result: */
+    QList<ToolTypeMachine> result;
+    /* Get machine tools order: */
+    foreach (const QString &strValue, extraDataStringList(GUI_Toolbar_MachineTools_Order))
+    {
+        const ToolTypeMachine enmValue = gpConverter->fromInternalString<ToolTypeMachine>(strValue);
+        if (enmValue != ToolTypeMachine_Invalid && !result.contains(enmValue))
+            result << enmValue;
+    }
+    /* Return result: */
+    return result;
+}
+
+void UIExtraDataManager::setSelectorWindowToolsOrderMachine(const QList<ToolTypeMachine> &aOrder)
+{
+    /* Parse passed list: */
+    QStringList aSerializedOrder;
+    foreach (const ToolTypeMachine &enmToolType, aOrder)
+        aSerializedOrder << gpConverter->toInternalString(enmToolType);
+
+    /* Re-cache corresponding extra-data: */
+    setExtraDataStringList(GUI_Toolbar_MachineTools_Order, aSerializedOrder);
+}
+
+QList<ToolTypeGlobal> UIExtraDataManager::selectorWindowToolsOrderGlobal()
+{
+    /* Prepare result: */
+    QList<ToolTypeGlobal> result;
+    /* Get global tools order: */
+    foreach (const QString &strValue, extraDataStringList(GUI_Toolbar_GlobalTools_Order))
+    {
+        const ToolTypeGlobal enmValue = gpConverter->fromInternalString<ToolTypeGlobal>(strValue);
+        if (enmValue != ToolTypeGlobal_Invalid && !result.contains(enmValue))
+            result << enmValue;
+    }
+    /* Return result: */
+    return result;
+}
+
+void UIExtraDataManager::setSelectorWindowToolsOrderGlobal(const QList<ToolTypeGlobal> &aOrder)
+{
+    /* Parse passed list: */
+    QStringList aSerializedOrder;
+    foreach (const ToolTypeGlobal &enmToolType, aOrder)
+        aSerializedOrder << gpConverter->toInternalString(enmToolType);
+
+    /* Re-cache corresponding extra-data: */
+    setExtraDataStringList(GUI_Toolbar_GlobalTools_Order, aSerializedOrder);
+}
+
 bool UIExtraDataManager::selectorWindowStatusBarVisible()
 {
Index: /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.h	(revision 68303)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.h	(revision 68304)
@@ -301,4 +301,14 @@
         /** Defines whether selector-window tool-bar text @a fVisible. */
         void setSelectorWindowToolBarTextVisible(bool fVisible);
+
+        /** Returns selector-window machine tools order. */
+        QList<ToolTypeMachine> selectorWindowToolsOrderMachine();
+        /** Defines selector-window machine tools @a aOrder. */
+        void setSelectorWindowToolsOrderMachine(const QList<ToolTypeMachine> &aOrder);
+
+        /** Returns selector-window global tools order. */
+        QList<ToolTypeGlobal> selectorWindowToolsOrderGlobal();
+        /** Defines selector-window global tools @a aOrder. */
+        void setSelectorWindowToolsOrderGlobal(const QList<ToolTypeGlobal> &aOrder);
 
         /** Returns whether selector-window status-bar visible. */
Index: /trunk/src/VBox/Frontends/VirtualBox/src/selector/UISelectorWindow.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/selector/UISelectorWindow.cpp	(revision 68303)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/selector/UISelectorWindow.cpp	(revision 68304)
@@ -154,9 +154,14 @@
     {
         // WORKAROUND:
-        // By some reason some of X11 DEs unable to update()
-        // tab-bars on startup.  Let's try to _create_ them instead.
-        /* Make sure 'Details' and 'Snapshots' Machine tools ares opened at startup for now: */
-        actionPool()->action(UIActionIndexST_M_Tools_M_Machine_Snapshots)->trigger();
-        actionPool()->action(UIActionIndexST_M_Tools_M_Machine_Details)->trigger();
+        // By some reason some of X11 DEs unable to update() tab-bars on startup.
+        // Let's just _create_ them later, asynchronously after the showEvent().
+        /* Restore previously opened Machine tools at startup: */
+        QMap<ToolTypeMachine, QAction*> mapActionsMachine;
+        mapActionsMachine[ToolTypeMachine_Details] = actionPool()->action(UIActionIndexST_M_Tools_M_Machine_Details);
+        mapActionsMachine[ToolTypeMachine_Snapshots] = actionPool()->action(UIActionIndexST_M_Tools_M_Machine_Snapshots);
+        for (int i = m_orderMachine.size() - 1; i >= 0; --i)
+            mapActionsMachine.value(m_orderMachine.at(i))->trigger();
+        /* Make sure further action triggering cause tool type switch as well: */
+        actionPool()->action(UIActionIndexST_M_Tools_T_Machine)->setProperty("watch_child_activation", true);
     }
 }
@@ -1106,5 +1111,6 @@
 {
     /* First, make sure corresponding tool set opened: */
-    if (!actionPool()->action(UIActionIndexST_M_Tools_T_Machine)->isChecked())
+    if (   !actionPool()->action(UIActionIndexST_M_Tools_T_Machine)->isChecked()
+        && actionPool()->action(UIActionIndexST_M_Tools_T_Machine)->property("watch_child_activation").toBool())
         actionPool()->action(UIActionIndexST_M_Tools_T_Machine)->setChecked(true);
 
@@ -1127,5 +1133,6 @@
 {
     /* First, make sure corresponding tool set opened: */
-    if (!actionPool()->action(UIActionIndexST_M_Tools_T_Global)->isChecked())
+    if (   !actionPool()->action(UIActionIndexST_M_Tools_T_Global)->isChecked()
+        && actionPool()->action(UIActionIndexST_M_Tools_T_Global)->property("watch_child_activation").toBool())
         actionPool()->action(UIActionIndexST_M_Tools_T_Global)->setChecked(true);
 
@@ -2115,8 +2122,32 @@
         statusBar()->setHidden(!gEDataManager->selectorWindowStatusBarVisible());
     }
+
+    /* Restore toolbar Machine/Global tools orders:  */
+    {
+        m_orderMachine = gEDataManager->selectorWindowToolsOrderMachine();
+        m_orderGlobal = gEDataManager->selectorWindowToolsOrderGlobal();
+
+        /* We can restore previously opened Global tools right here: */
+        QMap<ToolTypeGlobal, QAction*> mapActionsGlobal;
+        mapActionsGlobal[ToolTypeGlobal_VirtualMedia] = actionPool()->action(UIActionIndexST_M_Tools_M_Global_VirtualMediaManager);
+        mapActionsGlobal[ToolTypeGlobal_HostNetwork] = actionPool()->action(UIActionIndexST_M_Tools_M_Global_HostNetworkManager);
+        for (int i = m_orderGlobal.size() - 1; i >= 0; --i)
+            mapActionsGlobal.value(m_orderGlobal.at(i))->trigger();
+        /* Make sure further action triggering cause tool type switch as well: */
+        actionPool()->action(UIActionIndexST_M_Tools_T_Global)->setProperty("watch_child_activation", true);
+
+        /* But we can't restore previously opened Machine tools here,
+         * see the reason in corresponding async sltHandlePolishEvent slot. */
+    }
 }
 
 void UISelectorWindow::saveSettings()
 {
+    /* Save toolbar Machine/Global tools orders: */
+    {
+        gEDataManager->setSelectorWindowToolsOrderMachine(m_pToolbarTools->tabOrderMachine());
+        gEDataManager->setSelectorWindowToolsOrderGlobal(m_pToolbarTools->tabOrderGlobal());
+    }
+
     /* Save toolbar and statusbar visibility: */
     {
Index: /trunk/src/VBox/Frontends/VirtualBox/src/selector/UISelectorWindow.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/selector/UISelectorWindow.h	(revision 68303)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/selector/UISelectorWindow.h	(revision 68304)
@@ -356,4 +356,9 @@
     UIToolsToolbar *m_pToolbarTools;
 
+    /** Holds the Machine Tools order. */
+    QList<ToolTypeMachine> m_orderMachine;
+    /** Holds the Global Tools order. */
+    QList<ToolTypeGlobal> m_orderGlobal;
+
     /** Holds the Chooser-pane instance. */
     UIGChooser         *m_pPaneChooser;
Index: /trunk/src/VBox/Frontends/VirtualBox/src/selector/UIToolsPaneGlobal.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/selector/UIToolsPaneGlobal.h	(revision 68303)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/selector/UIToolsPaneGlobal.h	(revision 68304)
@@ -24,4 +24,5 @@
 /* GUI includes: */
 #include "QIWithRetranslateUI.h"
+#include "UIExtraDataDefs.h"
 
 /* Forward declarations: */
@@ -35,17 +36,4 @@
 class UIVMItem;
 class CMachine;
-
-
-/** Global tool types. */
-enum ToolTypeGlobal
-{
-    ToolTypeGlobal_Invalid,
-    ToolTypeGlobal_Desktop,
-    ToolTypeGlobal_VirtualMedia,
-    ToolTypeGlobal_HostNetwork,
-};
-
-/* Make sure QVariant can eat ToolTypeGlobal: */
-Q_DECLARE_METATYPE(ToolTypeGlobal);
 
 
Index: /trunk/src/VBox/Frontends/VirtualBox/src/selector/UIToolsPaneMachine.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/selector/UIToolsPaneMachine.h	(revision 68303)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/selector/UIToolsPaneMachine.h	(revision 68304)
@@ -24,4 +24,5 @@
 /* GUI includes: */
 #include "QIWithRetranslateUI.h"
+#include "UIExtraDataDefs.h"
 
 /* Forward declarations: */
@@ -35,17 +36,4 @@
 class UIVMItem;
 class CMachine;
-
-
-/** Machine tool types. */
-enum ToolTypeMachine
-{
-    ToolTypeMachine_Invalid,
-    ToolTypeMachine_Desktop,
-    ToolTypeMachine_Details,
-    ToolTypeMachine_Snapshots,
-};
-
-/* Make sure QVariant can eat ToolTypeMachine: */
-Q_DECLARE_METATYPE(ToolTypeMachine);
 
 
Index: /trunk/src/VBox/Frontends/VirtualBox/src/selector/UIToolsToolbar.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/selector/UIToolsToolbar.cpp	(revision 68303)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/selector/UIToolsToolbar.cpp	(revision 68304)
@@ -76,4 +76,20 @@
 }
 
+QList<ToolTypeMachine> UIToolsToolbar::tabOrderMachine() const
+{
+    QList<ToolTypeMachine> list;
+    foreach (const QUuid &uuid, m_pTabBarMachine->tabOrder())
+        list << m_mapTabIdsMachine.key(uuid);
+    return list;
+}
+
+QList<ToolTypeGlobal> UIToolsToolbar::tabOrderGlobal() const
+{
+    QList<ToolTypeGlobal> list;
+    foreach (const QUuid &uuid, m_pTabBarGlobal->tabOrder())
+        list << m_mapTabIdsGlobal.key(uuid);
+    return list;
+}
+
 void UIToolsToolbar::sltHandleOpenToolMachine()
 {
Index: /trunk/src/VBox/Frontends/VirtualBox/src/selector/UIToolsToolbar.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/selector/UIToolsToolbar.h	(revision 68303)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/selector/UIToolsToolbar.h	(revision 68304)
@@ -72,4 +72,9 @@
     void setToolButtonStyle(Qt::ToolButtonStyle enmStyle);
 
+    /** Returns Machine tab-bar order. */
+    QList<ToolTypeMachine> tabOrderMachine() const;
+    /** Returns Global tab-bar order. */
+    QList<ToolTypeGlobal> tabOrderGlobal() const;
+
 private slots:
 
Index: /trunk/src/VBox/Frontends/VirtualBox/src/widgets/UITabBar.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/widgets/UITabBar.cpp	(revision 68303)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/widgets/UITabBar.cpp	(revision 68304)
@@ -543,4 +543,12 @@
 }
 
+QList<QUuid> UITabBar::tabOrder() const
+{
+    QList<QUuid> list;
+    foreach (UITabBarItem *pItem, m_aItems)
+        list << pItem->uuid();
+    return list;
+}
+
 void UITabBar::paintEvent(QPaintEvent *pEvent)
 {
Index: /trunk/src/VBox/Frontends/VirtualBox/src/widgets/UITabBar.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/widgets/UITabBar.h	(revision 68303)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/widgets/UITabBar.h	(revision 68304)
@@ -67,4 +67,7 @@
     bool setCurrent(const QUuid &uuid);
 
+    /** Return tab-bar order ID list. */
+    QList<QUuid> tabOrder() const;
+
 protected:
 
