Index: /trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserModel.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserModel.cpp	(revision 88559)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserModel.cpp	(revision 88560)
@@ -62,4 +62,5 @@
     , m_pMouseHandler(0)
     , m_pKeyboardHandler(0)
+    , m_fSelectionSaveAllowed(false)
     , m_iCurrentSearchResultIndex(-1)
     , m_iScrollingTokenSize(30)
@@ -82,12 +83,12 @@
     /* Build tree for main root: */
     buildTreeForMainRoot();
-    /* Load last selected-item: */
-    loadLastSelectedItem();
+    /* Load settings: */
+    loadSettings();
 }
 
 void UIChooserModel::deinit()
 {
-    /* Save last selected-item: */
-    saveLastSelectedItem();
+    /* Clean tree for main root: */
+    clearTreeForMainRoot();
 
     /* Call to base-class: */
@@ -188,4 +189,26 @@
         pItem->setSelected(true);
         pItem->update();
+    }
+
+    /* Should the selection changes be saved? */
+    if (m_fSelectionSaveAllowed)
+    {
+        /* Acquire first selected item: */
+        UIChooserItem *pFirstSelectedItem = m_selectedItems.value(0);
+        /* If this item is of machine type: */
+        if (   pFirstSelectedItem
+            && pFirstSelectedItem->type() == UIChooserNodeType_Machine)
+        {
+            /* Cast to machine item: */
+            UIChooserItemMachine *pMachineItem = pFirstSelectedItem->toMachineItem();
+            /* If this machine item is of cloud type =>
+             * Choose the parent (profile) group item as the last one selected: */
+            if (   pMachineItem
+                && (   pMachineItem->cacheType() == UIVirtualMachineItemType_CloudFake
+                    || pMachineItem->cacheType() == UIVirtualMachineItemType_CloudReal))
+                pFirstSelectedItem = pMachineItem->parentItem();
+        }
+        /* Save last selected-item: */
+        gEDataManager->setSelectorWindowLastItemChosen(pFirstSelectedItem ? pFirstSelectedItem->definition() : QString());
     }
 
@@ -1546,32 +1569,9 @@
 }
 
-void UIChooserModel::loadLastSelectedItem()
+void UIChooserModel::loadSettings()
 {
     /* Load last selected-item (choose first if unable to load): */
     setSelectedItem(gEDataManager->selectorWindowLastItemChosen());
     makeSureAtLeastOneItemSelected();
-}
-
-void UIChooserModel::saveLastSelectedItem()
-{
-    /* Acquire first selected item: */
-    UIChooserItem *pFirstSelectedItem = firstSelectedItem();
-    /* If this item is of machine type: */
-    if (   pFirstSelectedItem
-        && pFirstSelectedItem->type() == UIChooserNodeType_Machine)
-    {
-        /* Cast to machine item: */
-        UIChooserItemMachine *pMachineItem = pFirstSelectedItem->toMachineItem();
-        AssertPtrReturnVoid(pMachineItem);
-        /* If this machine item is of cloud type: */
-        if (   pMachineItem->cacheType() == UIVirtualMachineItemType_CloudFake
-            || pMachineItem->cacheType() == UIVirtualMachineItemType_CloudReal)
-        {
-            /* Choose the parent (profile) group item as the last one selected: */
-            pFirstSelectedItem = pMachineItem->parentItem();
-        }
-    }
-    /* Save last selected-item: */
-    gEDataManager->setSelectorWindowLastItemChosen(pFirstSelectedItem ? pFirstSelectedItem->definition() : QString());
 }
 
@@ -1761,4 +1761,14 @@
 }
 
+void UIChooserModel::clearTreeForMainRoot()
+{
+    /* Forbid to save selection changes: */
+    m_fSelectionSaveAllowed = false;
+
+    /* Cleanup tree if exists: */
+    delete m_pRoot;
+    m_pRoot = 0;
+}
+
 void UIChooserModel::buildTreeForMainRoot(bool fPreserveSelection /* = false */)
 {
@@ -1778,7 +1788,6 @@
             selectedItemDefinitions << pSelectedItem->definition();
 
-    /* Cleanup previous tree if exists: */
-    delete m_pRoot;
-    m_pRoot = 0;
+    /* Clean tree for main root: */
+    clearTreeForMainRoot();
 
     /* Build whole tree for invisible root item: */
@@ -1813,4 +1822,7 @@
     if (view() && view()->isSearchWidgetVisible())
         view()->redoSearch();
+
+    /* Allow to save selection changes: */
+    m_fSelectionSaveAllowed = true;
 }
 
Index: /trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserModel.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserModel.h	(revision 88559)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserModel.h	(revision 88560)
@@ -360,9 +360,7 @@
         /** Prepares connections. */
         void prepareConnections();
-        /** Loads last selected-items. */
-        void loadLastSelectedItem();
-
-        /** Saves last selected-items. */
-        void saveLastSelectedItem();
+        /** Loads settings. */
+        void loadSettings();
+
         /** Cleanups connections. */
         void cleanupConnections();
@@ -399,4 +397,6 @@
     /** @name Children stuff.
       * @{ */
+        /** Clears tree for main root. */
+        void clearTreeForMainRoot();
         /** [Re]builds tree for main root, preserves selection if requested. */
         void buildTreeForMainRoot(bool fPreserveSelection = false);
@@ -440,4 +440,7 @@
         /** Holds the current-item reference. */
         QPointer<UIChooserItem>  m_pCurrentItem;
+
+        /** Holds whether selection save allowed. */
+        bool  m_fSelectionSaveAllowed;
     /** @} */
 
