Index: /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataDefs.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataDefs.cpp	(revision 74264)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataDefs.cpp	(revision 74265)
@@ -92,4 +92,5 @@
 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_Tools_LastItemsSelected = "GUI/Tools/LastItemsSelected";
 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 74264)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataDefs.h	(revision 74265)
@@ -151,4 +151,6 @@
         /** Holds the selector-window global tools order. */
         SHARED_LIBRARY_STUFF extern const char *GUI_Toolbar_GlobalTools_Order;
+        /** Holds the last selected tool set of VirtualBox Manager. */
+        SHARED_LIBRARY_STUFF extern const char *GUI_Tools_LastItemsSelected;
         /** Holds whether selector-window status-bar visible. */
         SHARED_LIBRARY_STUFF extern const char *GUI_Statusbar;
Index: /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.cpp	(revision 74264)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.cpp	(revision 74265)
@@ -1973,4 +1973,5 @@
            << GUI_Toolbar << GUI_Toolbar_Text
            << GUI_Toolbar_MachineTools_Order << GUI_Toolbar_GlobalTools_Order
+           << GUI_Tools_LastItemsSelected
            << GUI_Statusbar
            << GUI_GroupDefinitions << GUI_LastItemSelected
@@ -2796,4 +2797,14 @@
 }
 
+QString UIExtraDataManager::toolsPaneLastItemsChosen()
+{
+    return extraDataString(GUI_Tools_LastItemsSelected);
+}
+
+void UIExtraDataManager::setToolsPaneLastItemsChosen(const QString &strSet)
+{
+    setExtraDataString(GUI_Tools_LastItemsSelected, strSet);
+}
+
 bool UIExtraDataManager::selectorWindowStatusBarVisible()
 {
Index: /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.h	(revision 74264)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.h	(revision 74265)
@@ -318,4 +318,9 @@
         /** Defines selector-window global tools @a aOrder. */
         void setSelectorWindowToolsOrderGlobal(const QList<ToolTypeGlobal> &aOrder);
+
+        /** Returns last selected tool set of VirtualBox Manager. */
+        QString toolsPaneLastItemsChosen();
+        /** Defines last selected tool @a strSet of VirtualBox Manager. */
+        void setToolsPaneLastItemsChosen(const QString &strSet);
 
         /** Returns whether selector-window status-bar visible. */
Index: /trunk/src/VBox/Frontends/VirtualBox/src/manager/UIVirtualBoxManagerWidget.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/manager/UIVirtualBoxManagerWidget.cpp	(revision 74264)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/manager/UIVirtualBoxManagerWidget.cpp	(revision 74265)
@@ -561,4 +561,7 @@
                                        : Qt::ToolButtonIconOnly);
     }
+
+    /* Open tool currently chosen in Tools-pane:  */
+    sltHandleToolsPaneIndexChange();
 }
 
Index: /trunk/src/VBox/Frontends/VirtualBox/src/manager/tools/UITools.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/manager/tools/UITools.h	(revision 74264)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/manager/tools/UITools.h	(revision 74265)
@@ -42,4 +42,5 @@
 enum UIToolsType
 {
+    UIToolsType_Invalid,
     /* Global class: */
     UIToolsType_Media,
@@ -49,6 +50,4 @@
     UIToolsType_Snapshots,
     UIToolsType_Logs,
-    /* Max */
-    UIToolsType_Max
 };
 
Index: /trunk/src/VBox/Frontends/VirtualBox/src/manager/tools/UIToolsModel.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/manager/tools/UIToolsModel.cpp	(revision 74264)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/manager/tools/UIToolsModel.cpp	(revision 74265)
@@ -152,5 +152,12 @@
         /* Set this item to current if navigation list contains it: */
         if (navigationList().contains(pItem))
+        {
             m_pCurrentItem = pItem;
+            switch (m_pCurrentItem->itemClass())
+            {
+                case UIToolsClass_Global:  m_pLastItemGlobal  = m_pCurrentItem; break;
+                case UIToolsClass_Machine: m_pLastItemMachine = m_pCurrentItem; break;
+            }
+        }
         /* Otherwise it's error: */
         else
@@ -250,4 +257,10 @@
         if (pItem->isVisible())
             m_navigationList << pItem;
+
+    /* Choose last selected item of current class: */
+    UIToolsItem *pLastSelectedItem = m_enmCurrentClass == UIToolsClass_Global
+                                   ? m_pLastItemGlobal : m_pLastItemMachine;
+    if (navigationList().contains(pLastSelectedItem))
+        setCurrentItem(pLastSelectedItem);
 }
 
@@ -418,10 +431,38 @@
 void UIToolsModel::loadLastSelectedItems()
 {
-    /// @todo implement
+    /* Load selected items data: */
+    const QString strData = gEDataManager->toolsPaneLastItemsChosen();
+
+    /* Split serialized data to pair of values: */
+    const QStringList values = strData.split(",");
+
+    /* First of them is current global class item definition: */
+    UIToolsType enmTypeGlobal = typeFromString(values.value(0));
+    if (!isTypeOfClass(enmTypeGlobal, UIToolsClass_Global))
+        enmTypeGlobal = UIToolsType_Media;
+    foreach (UIToolsItem *pItem, items())
+        if (pItem->itemType() == enmTypeGlobal)
+            m_pLastItemGlobal = pItem;
+    AssertPtr(m_pLastItemGlobal.data());
+
+    /* Second of them is current machine class item definition: */
+    UIToolsType enmTypeMachine = typeFromString(values.value(1));
+    if (!isTypeOfClass(enmTypeMachine, UIToolsClass_Machine))
+        enmTypeMachine = UIToolsType_Details;
+    foreach (UIToolsItem *pItem, items())
+        if (pItem->itemType() == enmTypeMachine)
+            m_pLastItemMachine = pItem;
+    AssertPtr(m_pLastItemMachine.data());
 }
 
 void UIToolsModel::saveLastSelectedItems()
 {
-    /// @todo implement
+    /* Prepare selected items data: */
+    const QString strData = QString("%1,%2")
+          .arg(typeToString(m_pLastItemGlobal->itemType()))
+          .arg(typeToString(m_pLastItemMachine->itemType()));
+
+    /* Save selected items data: */
+    gEDataManager->setToolsPaneLastItemsChosen(strData);
 }
 
@@ -456,2 +497,66 @@
     cleanupScene();
 }
+
+/* static */
+QString UIToolsModel::typeToString(UIToolsType enmType)
+{
+    switch (enmType)
+    {
+        /* Global classes: */
+        case UIToolsType_Media:     return "Media";
+        case UIToolsType_Network:   return "Network";
+        /* Machine classes: */
+        case UIToolsType_Details:   return "Details";
+        case UIToolsType_Snapshots: return "Snapshots";
+        case UIToolsType_Logs:      return "Logs";
+        default: break;
+    }
+    return QString();
+}
+
+/* static */
+UIToolsType UIToolsModel::typeFromString(const QString &strType)
+{
+    /* Global classes: */
+    if      (strType == "Media")     return UIToolsType_Media;
+    else if (strType == "Network")   return UIToolsType_Network;
+    /* Machine classes: */
+    else if (strType == "Details")   return UIToolsType_Details;
+    else if (strType == "Snapshots") return UIToolsType_Snapshots;
+    else if (strType == "Logs")      return UIToolsType_Logs;
+    return UIToolsType_Invalid;
+}
+
+/* static */
+bool UIToolsModel::isTypeOfClass(UIToolsType enmType, UIToolsClass enmClass)
+{
+    switch (enmClass)
+    {
+        case UIToolsClass_Global:
+        {
+            switch (enmType)
+            {
+                case UIToolsType_Media:
+                case UIToolsType_Network:
+                    return true;
+                default:
+                    break;
+            }
+            break;
+        }
+        case UIToolsClass_Machine:
+        {
+            switch (enmType)
+            {
+                case UIToolsType_Details:
+                case UIToolsType_Snapshots:
+                case UIToolsType_Logs:
+                    return true;
+                default:
+                    break;
+            }
+            break;
+        }
+    }
+    return false;
+}
Index: /trunk/src/VBox/Frontends/VirtualBox/src/manager/tools/UIToolsModel.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/manager/tools/UIToolsModel.h	(revision 74264)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/manager/tools/UIToolsModel.h	(revision 74265)
@@ -206,4 +206,17 @@
     /** @name General stuff.
       * @{ */
+        /** Returns @a enmType string representation.
+          * @todo move to UIConverter one day .. */
+        static QString typeToString(UIToolsType enmType);
+        /** Returns @a strType converted to corresponding UIToolsType.
+          * @todo move to UIConverter one day .. */
+        static UIToolsType typeFromString(const QString &strType);
+
+        /** Returns whether passed @a enmType is of passed @a enmClass. */
+        static bool isTypeOfClass(UIToolsType enmType, UIToolsClass enmClass);
+    /** @} */
+
+    /** @name General stuff.
+      * @{ */
         /** Holds the Tools reference. */
         UITools *m_pTools;
@@ -239,4 +252,9 @@
         /** Holds the navigation list. */
         QList<UIToolsItem*>  m_navigationList;
+
+        /** Holds the last chosen navigation item of global class. */
+        QPointer<UIToolsItem> m_pLastItemGlobal;
+        /** Holds the last chosen navigation item of machine class. */
+        QPointer<UIToolsItem> m_pLastItemMachine;
     /** @} */
 };
