Index: trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserAbstractModel.cpp
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserAbstractModel.cpp	(revision 86724)
+++ trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserAbstractModel.cpp	(revision 86731)
@@ -350,4 +350,49 @@
 
 /*********************************************************************************************************************************
+*   Class UICloudEntityKey implementation.                                                                                       *
+*********************************************************************************************************************************/
+
+UICloudEntityKey::UICloudEntityKey(const QString &strProviderShortName /* = QString() */,
+                                   const QString &strProfileName /* = QString() */,
+                                   const QString &strMachineName /* = QString() */)
+    : m_strProviderShortName(strProviderShortName)
+    , m_strProfileName(strProfileName)
+    , m_strMachineName(strMachineName)
+{
+}
+
+UICloudEntityKey::UICloudEntityKey(const UICloudEntityKey &another)
+    : m_strProviderShortName(another.m_strProviderShortName)
+    , m_strProfileName(another.m_strProfileName)
+    , m_strMachineName(another.m_strMachineName)
+{
+}
+
+bool UICloudEntityKey::operator==(const UICloudEntityKey &another) const
+{
+    return    true
+           && m_strProviderShortName == another.m_strProviderShortName
+           && m_strProfileName == another.m_strProfileName
+           && m_strProfileName == another.m_strProfileName
+              ;
+}
+
+QString UICloudEntityKey::toString() const
+{
+    QString strResult;
+    if (m_strProviderShortName.isEmpty())
+        return strResult;
+    strResult += QString("/%1").arg(m_strProviderShortName);
+    if (m_strProfileName.isEmpty())
+        return strResult;
+    strResult += QString("/%1").arg(m_strProfileName);
+    if (m_strMachineName.isEmpty())
+        return strResult;
+    strResult += QString("/%1").arg(m_strMachineName);
+    return strResult;
+}
+
+
+/*********************************************************************************************************************************
 *   Class UIChooserAbstractModel implementation.                                                                                 *
 *********************************************************************************************************************************/
@@ -582,24 +627,26 @@
 }
 
-void UIChooserAbstractModel::insertCloudAccountKey(const UICloudAccountKey &key)
-{
-    m_cloudAccountKeysBeingUpdated.insert(key);
+void UIChooserAbstractModel::insertCloudEntityKey(const UICloudEntityKey &key)
+{
+//    printf("Cloud entity with key %s being updated..\n", key.toString().toUtf8().constData());
+    m_cloudEntityKeysBeingUpdated.insert(key);
     emit sigCloudUpdateStateChanged();
 }
 
-void UIChooserAbstractModel::removeCloudAccountKey(const UICloudAccountKey &key)
-{
-    m_cloudAccountKeysBeingUpdated.remove(key);
+void UIChooserAbstractModel::removeCloudEntityKey(const UICloudEntityKey &key)
+{
+//    printf("Cloud entity with key %s is updated!\n", key.toString().toUtf8().constData());
+    m_cloudEntityKeysBeingUpdated.remove(key);
     emit sigCloudUpdateStateChanged();
 }
 
-bool UIChooserAbstractModel::containsCloudAccountKey(const UICloudAccountKey &key) const
-{
-    return m_cloudAccountKeysBeingUpdated.contains(key);
+bool UIChooserAbstractModel::containsCloudEntityKey(const UICloudEntityKey &key) const
+{
+    return m_cloudEntityKeysBeingUpdated.contains(key);
 }
 
 bool UIChooserAbstractModel::isCloudUpdateInProgress() const
 {
-    return !m_cloudAccountKeysBeingUpdated.isEmpty();
+    return !m_cloudEntityKeysBeingUpdated.isEmpty();
 }
 
@@ -860,7 +907,7 @@
     }
 
-    /* Remove cloud account key from the list of keys currently being updated: */
-    const UICloudAccountKey accountKey = qMakePair(strProviderShortName, strProfileName);
-    removeCloudAccountKey(accountKey);
+    /* Remove cloud entity key from the list of keys currently being updated: */
+    const UICloudEntityKey cloudEntityKey = UICloudEntityKey(strProviderShortName, strProfileName);
+    removeCloudEntityKey(cloudEntityKey);
 }
 
@@ -1060,7 +1107,7 @@
             createCloudMachineNode(pProfileNode, UIFakeCloudVirtualMachineItemState_Loading);
 
-            /* Insert cloud account key into a list of keys currently being updated: */
-            const UICloudAccountKey cloudAccountKey = qMakePair(strProviderShortName, strProfileName);
-            insertCloudAccountKey(cloudAccountKey);
+            /* Insert cloud entity key into a list of keys currently being updated: */
+            const UICloudEntityKey cloudEntityKey = UICloudEntityKey(strProviderShortName, strProfileName);
+            insertCloudEntityKey(cloudEntityKey);
 
             /* Create list cloud machines task: */
Index: trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserAbstractModel.h
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserAbstractModel.h	(revision 86724)
+++ trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserAbstractModel.h	(revision 86731)
@@ -33,7 +33,4 @@
 #include "COMEnums.h"
 
-/* Typedefs: */
-typedef QPair<QString, QString> UICloudAccountKey;
-
 /* Forward declaration: */
 class UIChooser;
@@ -42,4 +39,38 @@
 class CCloudMachine;
 class CMachine;
+
+
+/** Cloud entity key definition. */
+struct UICloudEntityKey
+{
+    /** Constructs cloud entity key on the basis of passed parameters.
+      * @param  strProviderShortName  Brings provider short name.
+      * @param  strProfileName        Brings profile name.
+      * @param  strMachineName        Brings machine name. */
+    UICloudEntityKey(const QString &strProviderShortName = QString(),
+                     const QString &strProfileName = QString(),
+                     const QString &strMachineName = QString());
+    /** Constructs cloud entity key on the basis of @a another one. */
+    UICloudEntityKey(const UICloudEntityKey &another);
+
+    /** Returns whether this one key equals to @a another one. */
+    bool operator==(const UICloudEntityKey &another) const;
+
+    /** Returns string key representation. */
+    QString toString() const;
+
+    /** Holds provider short name. */
+    QString m_strProviderShortName;
+    /** Holds profile name. */
+    QString m_strProfileName;
+    /** Holds machine name. */
+    QString m_strMachineName;
+};
+
+inline uint qHash(const UICloudEntityKey &key, uint uSeed)
+{
+    return qHash(key.toString(), uSeed);
+}
+
 
 /** QObject extension used as VM Chooser-pane abstract model.
@@ -134,11 +165,11 @@
     /** @name Cloud update stuff.
       * @{ */
-        /** Inserts cloud account @a key into a set of keys currently being updated. */
-        void insertCloudAccountKey(const UICloudAccountKey &key);
-        /** Removes cloud account @a key from a set of keys currently being updated. */
-        void removeCloudAccountKey(const UICloudAccountKey &key);
-        /** Returns whether cloud account @a key is a part of key set currently being updated. */
-        bool containsCloudAccountKey(const UICloudAccountKey &key) const;
-        /** Returns whether at least one cloud account update is in progress. */
+        /** Inserts cloud entity @a key into a set of keys currently being updated. */
+        void insertCloudEntityKey(const UICloudEntityKey &key);
+        /** Removes cloud entity @a key from a set of keys currently being updated. */
+        void removeCloudEntityKey(const UICloudEntityKey &key);
+        /** Returns whether cloud entity @a key is a part of key set currently being updated. */
+        bool containsCloudEntityKey(const UICloudEntityKey &key) const;
+        /** Returns whether at least one cloud entity update is in progress. */
         bool isCloudUpdateInProgress() const;
     /** @} */
@@ -345,6 +376,6 @@
     /** @name Cloud update stuff.
       * @{ */
-        /** Holds the set of cloud account keys currently being updated. */
-        QSet<UICloudAccountKey>  m_cloudAccountKeysBeingUpdated;
+        /** Holds the set of cloud entity keys currently being updated. */
+        QSet<UICloudEntityKey>  m_cloudEntityKeysBeingUpdated;
     /** @} */
 };
Index: trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserModel.cpp
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserModel.cpp	(revision 86724)
+++ trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserModel.cpp	(revision 86731)
@@ -927,5 +927,5 @@
             case UIVirtualMachineItemType_CloudFake:
             {
-                /* Compose cloud account key: */
+                /* Compose cloud entity key: */
                 UIChooserItem *pParent = pItem->parentItem();
                 AssertPtrReturnVoid(pParent);
@@ -933,11 +933,11 @@
                 AssertPtrReturnVoid(pParentOfParent);
 
-                /* Insert cloud account key into a list of keys currently being updated: */
-                const UICloudAccountKey cloudAccountKey = qMakePair(pParentOfParent->name(), pParent->name());
-                insertCloudAccountKey(cloudAccountKey);
+                /* Insert cloud entity key into a list of keys currently being updated: */
+                const UICloudEntityKey cloudEntityKey = UICloudEntityKey(pParentOfParent->name(), pParent->name());
+                insertCloudEntityKey(cloudEntityKey);
 
                 /* Create list cloud machines task: */
-                UITaskCloudListMachines *pTask = new UITaskCloudListMachines(cloudAccountKey.first /* short provider name */,
-                                                                             cloudAccountKey.second /* profile name */,
+                UITaskCloudListMachines *pTask = new UITaskCloudListMachines(cloudEntityKey.m_strProviderShortName,
+                                                                             cloudEntityKey.m_strProfileName,
                                                                              true /* with refresh? */);
                 AssertPtrReturnVoid(pTask);
@@ -1309,8 +1309,8 @@
 {
     /* For every selected item: */
-    QSet<UICloudAccountKey> selectedCloudAccountKeys;
+    QSet<UICloudEntityKey> selectedCloudAccountKeys;
     foreach (UIChooserItem *pSelectedItem, selectedItems())
     {
-        /* Enumerate cloud account keys to update: */
+        /* Enumerate cloud entity keys to update: */
         switch (pSelectedItem->type())
         {
@@ -1327,7 +1327,7 @@
                         {
                             const QString strProfileName = pChildItem->name();
-                            const UICloudAccountKey cloudAccountKey = qMakePair(strProviderShortName, strProfileName);
-                            if (!selectedCloudAccountKeys.contains(cloudAccountKey))
-                                selectedCloudAccountKeys.insert(cloudAccountKey);
+                            const UICloudEntityKey cloudEntityKey = UICloudEntityKey(strProviderShortName, strProfileName);
+                            if (!selectedCloudAccountKeys.contains(cloudEntityKey))
+                                selectedCloudAccountKeys.insert(cloudEntityKey);
                         }
                         break;
@@ -1337,7 +1337,7 @@
                         const QString strProviderShortName = pSelectedItem->parentItem()->name();
                         const QString strProfileName = pSelectedItem->name();
-                        const UICloudAccountKey cloudAccountKey = qMakePair(strProviderShortName, strProfileName);
-                        if (!selectedCloudAccountKeys.contains(cloudAccountKey))
-                            selectedCloudAccountKeys.insert(cloudAccountKey);
+                        const UICloudEntityKey cloudEntityKey = UICloudEntityKey(strProviderShortName, strProfileName);
+                        if (!selectedCloudAccountKeys.contains(cloudEntityKey))
+                            selectedCloudAccountKeys.insert(cloudEntityKey);
                         break;
                     }
@@ -1356,7 +1356,7 @@
                     const QString strProviderShortName = pMachineItem->parentItem()->parentItem()->name();
                     const QString strProfileName = pMachineItem->parentItem()->name();
-                    const UICloudAccountKey cloudAccountKey = qMakePair(strProviderShortName, strProfileName);
-                    if (!selectedCloudAccountKeys.contains(cloudAccountKey))
-                        selectedCloudAccountKeys.insert(cloudAccountKey);
+                    const UICloudEntityKey cloudEntityKey = UICloudEntityKey(strProviderShortName, strProfileName);
+                    if (!selectedCloudAccountKeys.contains(cloudEntityKey))
+                        selectedCloudAccountKeys.insert(cloudEntityKey);
                 }
                 break;
@@ -1366,14 +1366,14 @@
 
     /* Restart List Cloud Machines task for selected account keys: */
-    foreach (const UICloudAccountKey &cloudAccountKey, selectedCloudAccountKeys)
-    {
-        /* Skip cloud account keys already being updated: */
-        if (containsCloudAccountKey(cloudAccountKey))
+    foreach (const UICloudEntityKey &cloudEntityKey, selectedCloudAccountKeys)
+    {
+        /* Skip cloud entity keys already being updated: */
+        if (containsCloudEntityKey(cloudEntityKey))
             continue;
-        insertCloudAccountKey(cloudAccountKey);
-
-        /* Create a task for particular cloud account key: */
-        UITaskCloudListMachines *pTask = new UITaskCloudListMachines(cloudAccountKey.first /* short provider name */,
-                                                                     cloudAccountKey.second /* profile name */,
+        insertCloudEntityKey(cloudEntityKey);
+
+        /* Create a task for particular cloud entity key: */
+        UITaskCloudListMachines *pTask = new UITaskCloudListMachines(cloudEntityKey.m_strProviderShortName,
+                                                                     cloudEntityKey.m_strProfileName,
                                                                      false /* with refresh? */);
         AssertPtrReturnVoid(pTask);
@@ -1923,5 +1923,5 @@
 
     /* For every selected machine-item: */
-    QSet<UICloudAccountKey> changedCloudAccountKeys;
+    QSet<UICloudEntityKey> changedCloudAccountKeys;
     foreach (UIChooserItemMachine *pMachineItem, machineItems)
     {
@@ -1947,23 +1947,23 @@
             continue;
         }
-        /* Compose cloud account key to update: */
+        /* Compose cloud entity key to update: */
         const QString strProviderShortName = pMachineItem->parentItem()->parentItem()->name();
         const QString strProfileName = pMachineItem->parentItem()->name();
-        const UICloudAccountKey cloudAccountKey = qMakePair(strProviderShortName, strProfileName);
-        if (!changedCloudAccountKeys.contains(cloudAccountKey))
-            changedCloudAccountKeys.insert(cloudAccountKey);
+        const UICloudEntityKey cloudEntityKey = UICloudEntityKey(strProviderShortName, strProfileName);
+        if (!changedCloudAccountKeys.contains(cloudEntityKey))
+            changedCloudAccountKeys.insert(cloudEntityKey);
     }
 
     /* Restart List Cloud Machines task for required account keys: */
-    foreach (const UICloudAccountKey &cloudAccountKey, changedCloudAccountKeys)
-    {
-        /* Skip cloud account keys already being updated: */
-        if (containsCloudAccountKey(cloudAccountKey))
+    foreach (const UICloudEntityKey &cloudEntityKey, changedCloudAccountKeys)
+    {
+        /* Skip cloud entity keys already being updated: */
+        if (containsCloudEntityKey(cloudEntityKey))
             continue;
-        insertCloudAccountKey(cloudAccountKey);
-
-        /* Create a task for particular cloud account key: */
-        UITaskCloudListMachines *pTask = new UITaskCloudListMachines(cloudAccountKey.first /* short provider name */,
-                                                                     cloudAccountKey.second /* profile name */,
+        insertCloudEntityKey(cloudEntityKey);
+
+        /* Create a task for particular cloud entity key: */
+        UITaskCloudListMachines *pTask = new UITaskCloudListMachines(cloudEntityKey.m_strProviderShortName,
+                                                                     cloudEntityKey.m_strProfileName,
                                                                      false /* with refresh? */);
         AssertPtrReturnVoid(pTask);
