Index: trunk/src/VBox/Frontends/VirtualBox/Makefile.kmk
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/Makefile.kmk	(revision 85034)
+++ trunk/src/VBox/Frontends/VirtualBox/Makefile.kmk	(revision 85035)
@@ -928,4 +928,5 @@
 #
 VirtualBox_QT_MOCSRCS = \
+	src/cloud/profilemanager/UICloudProfileManager.cpp \
 	src/hostnetwork/UIHostNetworkManager.cpp \
 	src/manager/UIWelcomePane.cpp \
Index: trunk/src/VBox/Frontends/VirtualBox/src/cloud/profilemanager/UICloudProfileDetailsWidget.h
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/cloud/profilemanager/UICloudProfileDetailsWidget.h	(revision 85034)
+++ trunk/src/VBox/Frontends/VirtualBox/src/cloud/profilemanager/UICloudProfileDetailsWidget.h	(revision 85035)
@@ -45,5 +45,5 @@
     /** Constructs data. */
     UIDataCloudProvider()
-        : m_strName(QString())
+        : m_fRestricted(false)
     {}
 
@@ -53,5 +53,7 @@
         return true
                && (m_uuid == other.m_uuid)
+               && (m_strShortName == other.m_strShortName)
                && (m_strName == other.m_strName)
+               && (m_fRestricted == other.m_fRestricted)
                ;
     }
@@ -64,6 +66,10 @@
     /** Holds the provider ID. */
     QUuid    m_uuid;
+    /** Holds the provider short name. */
+    QString  m_strShortName;
     /** Holds the provider name. */
     QString  m_strName;
+    /** Holds whether provider is restricted. */
+    bool     m_fRestricted;
 
     /** Holds the profile supported property descriptions. */
@@ -76,5 +82,5 @@
     /** Constructs data. */
     UIDataCloudProfile()
-        : m_strName(QString())
+        : m_fRestricted(false)
     {}
 
@@ -83,5 +89,7 @@
     {
         return true
+               && (m_strProviderShortName == other.m_strProviderShortName)
                && (m_strName == other.m_strName)
+               && (m_fRestricted == other.m_fRestricted)
                && (m_data == other.m_data)
                ;
@@ -93,6 +101,10 @@
     bool operator!=(const UIDataCloudProfile &other) const { return !equal(other); }
 
+    /** Holds the provider short name. */
+    QString  m_strProviderShortName;
     /** Holds the profile name. */
     QString  m_strName;
+    /** Holds whether provider is restricted. */
+    bool     m_fRestricted;
 
     /** Holds the profile data. */
Index: trunk/src/VBox/Frontends/VirtualBox/src/cloud/profilemanager/UICloudProfileManager.cpp
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/cloud/profilemanager/UICloudProfileManager.cpp	(revision 85034)
+++ trunk/src/VBox/Frontends/VirtualBox/src/cloud/profilemanager/UICloudProfileManager.cpp	(revision 85035)
@@ -63,4 +63,5 @@
 {
     Column_Name,
+    Column_ListVMs,
     Column_Max
 };
@@ -70,4 +71,6 @@
 class UIItemCloudProvider : public QITreeWidgetItem, public UIDataCloudProvider
 {
+    Q_OBJECT;
+
 public:
 
@@ -85,4 +88,6 @@
 class UIItemCloudProfile : public QITreeWidgetItem, public UIDataCloudProfile
 {
+    Q_OBJECT;
+
 public:
 
@@ -115,4 +120,5 @@
     setText(Column_Name, m_strName);
     setData(Column_Name, Data_ProviderID, m_uuid);
+    setCheckState(Column_ListVMs, m_fRestricted ? Qt::Unchecked : Qt::Checked);
 }
 
@@ -134,4 +140,5 @@
     /* Update item fields: */
     setText(Column_Name, m_strName);
+    setCheckState(Column_ListVMs, m_fRestricted ? Qt::Unchecked : Qt::Checked);
 }
 
@@ -172,4 +179,9 @@
         m_pToolBar->updateLayout();
 #endif
+
+    /* Translate tree-widget: */
+    m_pTreeWidget->setHeaderLabels(   QStringList()
+                                   << tr("Source")
+                                   << tr("List VMs"));
 }
 
@@ -491,4 +503,12 @@
 }
 
+void UICloudProfileManagerWidget::sltPerformTableAdjustment()
+{
+    AssertPtrReturnVoid(m_pTreeWidget);
+    AssertPtrReturnVoid(m_pTreeWidget->header());
+    AssertPtrReturnVoid(m_pTreeWidget->viewport());
+    m_pTreeWidget->header()->resizeSection(0, m_pTreeWidget->viewport()->width() - m_pTreeWidget->header()->sectionSize(1));
+}
+
 void UICloudProfileManagerWidget::sltHandleCurrentItemChange()
 {
@@ -546,4 +566,34 @@
     /* And show it: */
     menu.exec(m_pTreeWidget->mapToGlobal(position));
+}
+
+void UICloudProfileManagerWidget::sltHandleItemChange(QTreeWidgetItem *pItem)
+{
+    /* Cast pItem to QITreeWidgetItem: */
+    QITreeWidgetItem *pChangedItem = QITreeWidgetItem::toItem(pItem);
+    AssertMsgReturnVoid(pChangedItem, ("Changed item must not be null!\n"));
+
+    /* Check whether item is of provider or profile type, then check whether it changed: */
+    bool fChanged = false;
+    UIItemCloudProvider *pProviderItem = qobject_cast<UIItemCloudProvider*>(pChangedItem);
+    UIItemCloudProfile *pProfileItem = qobject_cast<UIItemCloudProfile*>(pChangedItem);
+    if (pProviderItem)
+    {
+        const UIDataCloudProvider oldData = *pProviderItem;
+        if (   (oldData.m_fRestricted && pProviderItem->checkState(Column_ListVMs) == Qt::Checked)
+            || (!oldData.m_fRestricted && pProviderItem->checkState(Column_ListVMs) == Qt::Unchecked))
+            fChanged = true;
+    }
+    else if (pProfileItem)
+    {
+        const UIDataCloudProfile oldData = *pProfileItem;
+        if (   (oldData.m_fRestricted && pProfileItem->checkState(Column_ListVMs) == Qt::Checked)
+            || (!oldData.m_fRestricted && pProfileItem->checkState(Column_ListVMs) == Qt::Unchecked))
+            fChanged = true;
+    }
+
+    /* Gather Cloud Profile Manager restrictions and save them to extra-data: */
+    if (fChanged)
+        gEDataManager->setCloudProfileManagerRestrictions(gatherCloudProfileManagerRestrictions(m_pTreeWidget->invisibleRootItem()));
 }
 
@@ -644,5 +694,5 @@
     {
         /* Configure tree-widget: */
-        m_pTreeWidget->header()->hide();
+        m_pTreeWidget->header()->setStretchLastSection(false);
         m_pTreeWidget->setRootIsDecorated(false);
         m_pTreeWidget->setAlternatingRowColors(true);
@@ -691,4 +741,8 @@
 
     /* Tree-widget connections: */
+    connect(m_pTreeWidget, &QITreeWidget::resized,
+            this, &UICloudProfileManagerWidget::sltPerformTableAdjustment, Qt::QueuedConnection);
+    connect(m_pTreeWidget->header(), &QHeaderView::sectionResized,
+            this, &UICloudProfileManagerWidget::sltPerformTableAdjustment, Qt::QueuedConnection);
     connect(m_pTreeWidget, &QITreeWidget::currentItemChanged,
             this, &UICloudProfileManagerWidget::sltHandleCurrentItemChange);
@@ -697,4 +751,6 @@
     connect(m_pTreeWidget, &QITreeWidget::itemDoubleClicked,
             m_pActionPool->action(UIActionIndexST_M_Cloud_T_Details), &QAction::setChecked);
+    connect(m_pTreeWidget, &QITreeWidget::itemChanged,
+            this, &UICloudProfileManagerWidget::sltHandleItemChange);
 
     /* Details-widget connections: */
@@ -705,4 +761,8 @@
     connect(m_pDetailsWidget, &UICloudProfileDetailsWidget::sigDataChangeAccepted,
             this, &UICloudProfileManagerWidget::sltApplyCloudProfileDetailsChanges);
+
+    /* Extra-data connections: */
+    connect(gEDataManager, &UIExtraDataManager::sigCloudProfileManagerRestrictionChange,
+            this, &UICloudProfileManagerWidget::sltLoadCloudStuff);
 }
 
@@ -719,4 +779,7 @@
     m_pTreeWidget->clear();
 
+    /* Acquire cloud profile manager restrictions: */
+    const QStringList restrictions = gEDataManager->cloudProfileManagerRestrictions();
+
     /* Iterate through existing providers: */
     foreach (const CCloudProvider &comCloudProvider, listCloudProviders())
@@ -729,4 +792,6 @@
         UIDataCloudProvider providerData;
         loadCloudProvider(comCloudProvider, providerData);
+        const QString strProviderPath = QString("/%1").arg(providerData.m_strShortName);
+        providerData.m_fRestricted = restrictions.contains(strProviderPath);
         createItemForCloudProvider(providerData, false);
 
@@ -744,4 +809,6 @@
             UIDataCloudProfile profileData;
             loadCloudProfile(comCloudProfile, providerData, profileData);
+            const QString strProfilePath = QString("/%1/%2").arg(providerData.m_strShortName).arg(profileData.m_strName);
+            profileData.m_fRestricted = restrictions.contains(strProfilePath);
             createItemForCloudProfile(pItem, profileData, false);
         }
@@ -762,4 +829,6 @@
         data.m_uuid = comProvider.GetId();
     if (comProvider.isOk())
+        data.m_strShortName = comProvider.GetShortName();
+    if (comProvider.isOk())
         data.m_strName = comProvider.GetName();
     foreach (const QString &strSupportedPropertyName, comProvider.GetSupportedPropertyNames())
@@ -773,4 +842,7 @@
 void UICloudProfileManagerWidget::loadCloudProfile(const CCloudProfile &comProfile, const UIDataCloudProvider &providerData, UIDataCloudProfile &profileData)
 {
+    /* Gather provider settings: */
+    profileData.m_strProviderShortName = providerData.m_strShortName;
+
     /* Gather profile settings: */
     if (comProfile.isOk())
@@ -858,4 +930,38 @@
             m_pTreeWidget->setCurrentItem(pItem);
     }
+}
+
+QStringList UICloudProfileManagerWidget::gatherCloudProfileManagerRestrictions(QTreeWidgetItem *pParentItem)
+{
+    /* Prepare result: */
+    QStringList result;
+    AssertPtrReturn(pParentItem, result);
+
+    /* Process unchecked QITreeWidgetItem(s) only: */
+    QITreeWidgetItem *pChangedItem = QITreeWidgetItem::toItem(pParentItem);
+    if (   pChangedItem
+        && pChangedItem->checkState(Column_ListVMs) == Qt::Unchecked)
+    {
+        /* Check whether item is of provider or profile type: */
+        UIItemCloudProvider *pProviderItem = qobject_cast<UIItemCloudProvider*>(pChangedItem);
+        UIItemCloudProfile *pProfileItem = qobject_cast<UIItemCloudProfile*>(pChangedItem);
+        if (pProviderItem)
+        {
+            const UIDataCloudProvider oldData = *pProviderItem;
+            result << QString("/%1").arg(oldData.m_strShortName);
+        }
+        else if (pProfileItem)
+        {
+            const UIDataCloudProfile oldData = *pProfileItem;
+            result << QString("/%1/%2").arg(oldData.m_strProviderShortName, oldData.m_strName);
+        }
+    }
+
+    /* Iterate through children recursively: */
+    for (int i = 0; i < pParentItem->childCount(); ++i)
+        result << gatherCloudProfileManagerRestrictions(pParentItem->child(i));
+
+    /* Return result: */
+    return result;
 }
 
@@ -980,2 +1086,5 @@
     return qobject_cast<UICloudProfileManagerWidget*>(QIManagerDialog::widget());
 }
+
+
+#include "UICloudProfileManager.moc"
Index: trunk/src/VBox/Frontends/VirtualBox/src/cloud/profilemanager/UICloudProfileManager.h
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/cloud/profilemanager/UICloudProfileManager.h	(revision 85034)
+++ trunk/src/VBox/Frontends/VirtualBox/src/cloud/profilemanager/UICloudProfileManager.h	(revision 85035)
@@ -111,8 +111,14 @@
     /** @name Tree-widget stuff.
       * @{ */
+        /** Handles request to load cloud stuff. */
+        void sltLoadCloudStuff() { loadCloudStuff(); }
+        /** Adjusts tree-widget according content. */
+        void sltPerformTableAdjustment();
         /** Handles tree-widget current item change. */
         void sltHandleCurrentItemChange();
         /** Handles context menu request for tree-widget @a position. */
         void sltHandleContextMenuRequest(const QPoint &position);
+        /** Handles tree-widget @a pItem change. */
+        void sltHandleItemChange(QTreeWidgetItem *pItem);
     /** @} */
 
@@ -161,4 +167,7 @@
         /** Updates the passed tree-widget item on the basis of passed @a data, @a fChooseItem if requested. */
         void updateItemForCloudProfile(const UIDataCloudProfile &data, bool fChooseItem, UIItemCloudProfile *pItem);
+
+        /* Gathers a list of Cloud Profile Manager restrictions starting from @a pParentItem. */
+        QStringList gatherCloudProfileManagerRestrictions(QTreeWidgetItem *pParentItem);
     /** @} */
 
Index: trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataDefs.cpp
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataDefs.cpp	(revision 85034)
+++ trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataDefs.cpp	(revision 85035)
@@ -111,4 +111,5 @@
 
 /* Cloud Profile Manager: */
+const char *UIExtraDataDefs::GUI_CloudProfileManager_Restrictions = "GUI/CloudProfileManager/Restrictions";
 const char *UIExtraDataDefs::GUI_CloudProfileManager_Details_Expanded = "GUI/CloudProfileManager/Details/Expanded";
 
Index: trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataDefs.h
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataDefs.h	(revision 85034)
+++ trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataDefs.h	(revision 85035)
@@ -216,4 +216,6 @@
     /** @name Cloud Profile Manager
       * @{ */
+        /** Holds Cloud Profile Manager restrictions. */
+        SHARED_LIBRARY_STUFF extern const char *GUI_CloudProfileManager_Restrictions;
         /** Holds whether Cloud Profile Manager details expanded. */
         SHARED_LIBRARY_STUFF extern const char *GUI_CloudProfileManager_Details_Expanded;
Index: trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.cpp
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.cpp	(revision 85034)
+++ trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.cpp	(revision 85035)
@@ -1929,4 +1929,5 @@
            << GUI_VirtualMediaManager_Details_Expanded
            << GUI_HostNetworkManager_Details_Expanded
+           << GUI_CloudProfileManager_Restrictions
            << GUI_CloudProfileManager_Details_Expanded
            << GUI_HideDescriptionForWizards
@@ -2974,4 +2975,14 @@
 }
 
+QStringList UIExtraDataManager::cloudProfileManagerRestrictions()
+{
+    return extraDataStringList(GUI_CloudProfileManager_Restrictions);
+}
+
+void UIExtraDataManager::setCloudProfileManagerRestrictions(const QStringList &restrictions)
+{
+    return setExtraDataStringList(GUI_CloudProfileManager_Restrictions, restrictions);
+}
+
 bool UIExtraDataManager::cloudProfileManagerDetailsExpanded()
 {
@@ -4568,4 +4579,7 @@
             else if (strKey == GUI_Input_HostKeyCombination)
                 emit sigRuntimeUIHostKeyCombinationChange();
+            /* Cloud Profile Manager restrictions changed: */
+            else if (strKey == GUI_CloudProfileManager_Restrictions)
+                emit sigCloudProfileManagerRestrictionChange();
             /* Details categories: */
             else if (strKey == GUI_Details_Elements)
Index: trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.h
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.h	(revision 85034)
+++ trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.h	(revision 85035)
@@ -75,4 +75,7 @@
     /** Notifies about Runtime UI host-key combination change. */
     void sigRuntimeUIHostKeyCombinationChange();
+
+    /** Notifies about Cloud Profile Manager restriction change. */
+    void sigCloudProfileManagerRestrictionChange();
 
     /** Notifies about VirtualBox Manager / Details pane categories change. */
@@ -405,4 +408,9 @@
     /** @name Cloud Profile Manager
       * @{ */
+        /** Returns Cloud Profile Manager restrictions. */
+        QStringList cloudProfileManagerRestrictions();
+        /** Defines Cloud Profile Manager @a restrictions. */
+        void setCloudProfileManagerRestrictions(const QStringList &restrictions);
+
         /** Returns whether Cloud Profile Manager details expanded. */
         bool cloudProfileManagerDetailsExpanded();
