Index: /trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserModel.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserModel.cpp	(revision 84568)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserModel.cpp	(revision 84569)
@@ -85,5 +85,4 @@
     /* Build tree for main root: */
     buildTreeForMainRoot();
-
     /* Load last selected-item: */
     loadLastSelectedItem();
@@ -947,16 +946,6 @@
         firstSelectedItem()->parentItem()->node()->sortNodes();
 
-    /* Remember first selected item definition: */
-    const QString strDefinition = firstSelectedItem() ? firstSelectedItem()->definition() : QString();
-
     /* Rebuild tree for main root: */
-    buildTreeForMainRoot();
-
-    /* Restore selection if there was some item before: */
-    if (!strDefinition.isNull())
-        setSelectedItem(strDefinition);
-    /* Else make sure at least one item selected: */
-    else
-        makeSureAtLeastOneItemSelected();
+    buildTreeForMainRoot(true /* preserve selection */);
 }
 
@@ -1089,6 +1078,5 @@
         {
             /* Rebuild tree for main root: */
-            buildTreeForMainRoot();
-
+            buildTreeForMainRoot(false /* preserve selection */);
             /* Select newly added item: */
             setSelectedItem(root()->searchForItem(uId.toString(),
@@ -1112,16 +1100,6 @@
     if (!fRegistered)
     {
-        /* Remember first selected item definition: */
-        const QString strDefinition = firstSelectedItem() ? firstSelectedItem()->definition() : QString();
-
         /* Rebuild tree for main root: */
-        buildTreeForMainRoot();
-
-        /* Restore selection if there was some item before: */
-        if (!strDefinition.isNull())
-            setSelectedItem(strDefinition);
-        /* Else make sure at least one item selected: */
-        else
-            makeSureAtLeastOneItemSelected();
+        buildTreeForMainRoot(true /* preserve selection */);
     }
     /* New VM registered? */
@@ -1129,6 +1107,5 @@
     {
         /* Rebuild tree for main root: */
-        buildTreeForMainRoot();
-
+        buildTreeForMainRoot(false /* preserve selection */);
         /* Select newly added item: */
         setSelectedItem(root()->searchForItem(uId.toString(),
@@ -1147,6 +1124,5 @@
     {
         /* Rebuild tree for main root: */
-        buildTreeForMainRoot();
-
+        buildTreeForMainRoot(false /* preserve selection */);
         /* Select newly added item: */
         setSelectedItem(root()->searchForItem(uId.toString(),
@@ -1171,16 +1147,6 @@
     UIChooserAbstractModel::sltHandleCloudListMachinesTaskComplete(pTask);
 
-    /* Remember first selected item definition: */
-    const QString strDefinition = firstSelectedItem() ? firstSelectedItem()->definition() : QString();
-
     /* Rebuild tree for main root: */
-    buildTreeForMainRoot();
-
-    /* Restore selection if there was some item before: */
-    if (!strDefinition.isNull())
-        setSelectedItem(strDefinition);
-    /* Make sure at least one item selected: */
-    if (!currentItem())
-        makeSureAtLeastOneItemSelected();
+    buildTreeForMainRoot(true /* preserve selection */);
 }
 
@@ -1570,6 +1536,11 @@
 }
 
-void UIChooserModel::buildTreeForMainRoot()
-{
+void UIChooserModel::buildTreeForMainRoot(bool fPreserveSelection /* = false */)
+{
+    /* Remember first selected item if requested: */
+    QString strSelectedItemDefinition;
+    if (fPreserveSelection && firstSelectedItem())
+        strSelectedItemDefinition = firstSelectedItem()->definition();
+
     /* Cleanup previous tree if exists: */
     delete m_pRoot;
@@ -1585,4 +1556,11 @@
     /* Update tree for main root: */
     updateTreeForMainRoot();
+
+    /* Restore selection if requested: */
+    if (fPreserveSelection)
+    {
+        setSelectedItem(strSelectedItemDefinition);
+        makeSureAtLeastOneItemSelected();
+    }
 }
 
Index: /trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserModel.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserModel.h	(revision 84568)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserModel.h	(revision 84569)
@@ -361,6 +361,6 @@
     /** @name Children stuff.
       * @{ */
-        /** Build tree for main root. */
-        void buildTreeForMainRoot();
+        /** [Re]builds tree for main root, preserves selection if requested. */
+        void buildTreeForMainRoot(bool fPreserveSelection = false);
         /** Update tree for main root. */
         void updateTreeForMainRoot();
