Index: /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIMessageCenter.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIMessageCenter.cpp	(revision 83708)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIMessageCenter.cpp	(revision 83709)
@@ -605,4 +605,11 @@
 
 void UIMessageCenter::cannotAcquireMachineParameter(const CMachine &comMachine, QWidget *pParent /* = 0 */) const
+{
+    /* Show the error: */
+    error(pParent, MessageType_Error,
+          tr("Failed to acquire machine parameter."), UIErrorString::formatErrorInfo(comMachine));
+}
+
+void UIMessageCenter::cannotAcquireMachineParameter(const CCloudMachine &comMachine, QWidget *pParent /* = 0 */) const
 {
     /* Show the error: */
@@ -758,4 +765,27 @@
 }
 
+bool UIMessageCenter::confirmCloudMachineRemoval(const QList<CCloudMachine> &machines) const
+{
+    /* Enumerate the machines: */
+    QStringList machineNames;
+    foreach (const CCloudMachine &comMachine, machines)
+    {
+        /* Append machine name to the full name string: */
+        if (comMachine.GetAccessible())
+            machineNames << QString("<b>%1</b>").arg(comMachine.GetName());
+    }
+
+    /* Prepare message text: */
+    QString strText = tr("<p>You are about to remove following cloud virtual machines from the machine list:</p>"
+                         "<p>%1</p>")
+                         .arg(machineNames.join(", "));
+
+    /* Prepare message itself: */
+    return questionBinary(0, MessageType_Question,
+                          strText,
+                          0 /* auto-confirm id */,
+                          tr("Remove"));
+}
+
 void UIMessageCenter::cannotRemoveMachine(const CMachine &machine) const
 {
@@ -772,4 +802,20 @@
              .arg(CMachine(machine).GetName()),
           UIErrorString::formatErrorInfo(progress));
+}
+
+void UIMessageCenter::cannotRemoveCloudMachine(const CCloudMachine &comMachine) const
+{
+    error(0, MessageType_Error,
+          tr("Failed to remove the cloud virtual machine <b>%1</b>.")
+             .arg(CCloudMachine(comMachine).GetName()),
+          UIErrorString::formatErrorInfo(comMachine));
+}
+
+void UIMessageCenter::cannotRemoveCloudMachine(const CCloudMachine &comMachine, const CProgress &comProgress) const
+{
+    error(0, MessageType_Error,
+          tr("Failed to remove the cloud virtual machine <b>%1</b>.")
+             .arg(CCloudMachine(comMachine).GetName()),
+          UIErrorString::formatErrorInfo(comProgress));
 }
 
Index: /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIMessageCenter.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIMessageCenter.h	(revision 83708)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIMessageCenter.h	(revision 83709)
@@ -265,4 +265,5 @@
     void cannotAcquireVirtualBoxParameter(const CVirtualBox &comVBox, QWidget *pParent = 0) const;
     void cannotAcquireMachineParameter(const CMachine &comMachine, QWidget *pParent = 0) const;
+    void cannotAcquireMachineParameter(const CCloudMachine &comMachine, QWidget *pParent = 0) const;
 
     /* API: Global cloud warnings: */
@@ -277,6 +278,9 @@
     bool confirmMachineItemRemoval(const QStringList &names) const;
     int confirmMachineRemoval(const QList<CMachine> &machines) const;
+    bool confirmCloudMachineRemoval(const QList<CCloudMachine> &machines) const;
     void cannotRemoveMachine(const CMachine &machine) const;
     void cannotRemoveMachine(const CMachine &machine, const CProgress &progress) const;
+    void cannotRemoveCloudMachine(const CCloudMachine &comMachine) const;
+    void cannotRemoveCloudMachine(const CCloudMachine &comMachine, const CProgress &comProgress) const;
     bool warnAboutInaccessibleMedia() const;
     bool confirmDiscardSavedState(const QString &strNames) const;
Index: /trunk/src/VBox/Frontends/VirtualBox/src/manager/UIVirtualBoxManager.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/manager/UIVirtualBoxManager.cpp	(revision 83708)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/manager/UIVirtualBoxManager.cpp	(revision 83709)
@@ -1953,6 +1953,5 @@
         {
             return !isGroupSavingInProgress() &&
-                   isAtLeastOneItemRemovable(items) &&
-                   isItemsLocal(items);
+                   isAtLeastOneItemRemovable(items);
         }
         case UIActionIndexST_M_Machine_S_AddGroup:
Index: /trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserModel.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserModel.cpp	(revision 83708)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserModel.cpp	(revision 83709)
@@ -1156,4 +1156,5 @@
     QList<UIChooserItem*> itemsToRemove;
     QList<CMachine> localMachinesToUnregister;
+    QList<CCloudMachine> cloudMachinesToUnregister;
 
     /* For each selected machine-item: */
@@ -1188,5 +1189,10 @@
         verdicts.insert(uId, fVerdict);
         if (fVerdict)
-            localMachinesToUnregister.append(pItem->node()->toMachineNode()->cache()->toLocal()->machine());
+        {
+            if (pItem->node()->toMachineNode()->cache()->itemType() == UIVirtualMachineItem::ItemType_Local)
+                localMachinesToUnregister.append(pItem->node()->toMachineNode()->cache()->toLocal()->machine());
+            else if (pItem->node()->toMachineNode()->cache()->itemType() == UIVirtualMachineItem::ItemType_CloudReal)
+                cloudMachinesToUnregister.append(pItem->node()->toMachineNode()->cache()->toCloud()->machine());
+        }
         else
             itemsToRemove << pItem;
@@ -1199,4 +1205,7 @@
     if (!localMachinesToUnregister.isEmpty())
         unregisterLocalMachines(localMachinesToUnregister);
+    /* If we have something cloud to unregister: */
+    if (!cloudMachinesToUnregister.isEmpty())
+        unregisterCloudMachines(cloudMachinesToUnregister);
 }
 
@@ -1721,4 +1730,48 @@
 }
 
+void UIChooserModel::unregisterCloudMachines(const QList<CCloudMachine> &machines)
+{
+    /* Confirm machine removal: */
+    if (!msgCenter().confirmCloudMachineRemoval(machines))
+        return;
+
+    /* Change selection to some close by item: */
+    setSelectedItem(findClosestUnselectedItem());
+
+    /* For every selected machine: */
+    foreach (CCloudMachine comMachine, machines)
+    {
+        /* Remember machine ID: */
+        const QUuid uId = comMachine.GetId();
+        if (!comMachine.isOk())
+        {
+            msgCenter().cannotAcquireMachineParameter(comMachine);
+            continue;
+        }
+        /* Prepare unregister progress: */
+        CProgress comProgress = comMachine.Unregister();
+        if (!comMachine.isOk())
+        {
+            msgCenter().cannotRemoveCloudMachine(comMachine);
+            continue;
+        }
+        /* And show unregister progress finally: */
+        msgCenter().showModalProgressDialog(comProgress, comMachine.GetName(), ":/progress_delete_90px.png");
+        if (!comProgress.isOk() || comProgress.GetResultCode() != 0)
+        {
+            msgCenter().cannotRemoveCloudMachine(comMachine, comProgress);
+            continue;
+        }
+
+        // WORKAROUND:
+        // Hehey! Now we have to remove deleted VM nodes and then update tree for the main root node
+        // ourselves cause there is no corresponding event yet. So we are calling actual handler to do that.
+        sltCloudMachineRegistered(QString() /* provider name */,
+                                  QString() /* profile name */,
+                                  uId /* machine ID */,
+                                  false /* registered? */);
+    }
+}
+
 bool UIChooserModel::processDragMoveEvent(QGraphicsSceneDragDropEvent *pEvent)
 {
Index: /trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserModel.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserModel.h	(revision 83708)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserModel.h	(revision 83709)
@@ -31,4 +31,5 @@
 /* COM includes: */
 #include "COMEnums.h"
+#include "CCloudMachine.h"
 #include "CMachine.h"
 
@@ -370,4 +371,6 @@
         /** Unregisters a list of local virtual @a machines. */
         void unregisterLocalMachines(const QList<CMachine> &machines);
+        /** Unregisters a list of cloud virtual @a machines. */
+        void unregisterCloudMachines(const QList<CCloudMachine> &machines);
 
         /** Processes drag move @a pEvent. */
