Index: /branches/HeuristicLab.Hive.Azure/HeuristicLab.Clients.Hive.CloudManager/3.3/HeuristicLab.Clients.Hive.CloudManager-3.3.csproj
===================================================================
--- /branches/HeuristicLab.Hive.Azure/HeuristicLab.Clients.Hive.CloudManager/3.3/HeuristicLab.Clients.Hive.CloudManager-3.3.csproj	(revision 7607)
+++ /branches/HeuristicLab.Hive.Azure/HeuristicLab.Clients.Hive.CloudManager/3.3/HeuristicLab.Clients.Hive.CloudManager-3.3.csproj	(revision 7608)
@@ -105,4 +105,10 @@
       <DependentUpon>CloudResourcesView.cs</DependentUpon>
     </Compile>
+    <Compile Include="Views\DeleteHostedServiceView.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="Views\DeleteHostedServiceView.Designer.cs">
+      <DependentUpon>DeleteHostedServiceView.cs</DependentUpon>
+    </Compile>
     <Compile Include="Views\DeleteDeploymentView.cs">
       <SubType>Form</SubType>
@@ -222,4 +228,7 @@
     <EmbeddedResource Include="Views\CloudResourcesView.resx">
       <DependentUpon>CloudResourcesView.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Views\DeleteHostedServiceView.resx">
+      <DependentUpon>DeleteHostedServiceView.cs</DependentUpon>
     </EmbeddedResource>
     <EmbeddedResource Include="Views\DeleteDeploymentView.resx">
Index: /branches/HeuristicLab.Hive.Azure/HeuristicLab.Clients.Hive.CloudManager/3.3/Views/CloudResourcesView.cs
===================================================================
--- /branches/HeuristicLab.Hive.Azure/HeuristicLab.Clients.Hive.CloudManager/3.3/Views/CloudResourcesView.cs	(revision 7607)
+++ /branches/HeuristicLab.Hive.Azure/HeuristicLab.Clients.Hive.CloudManager/3.3/Views/CloudResourcesView.cs	(revision 7608)
@@ -325,5 +325,8 @@
           CloudManagerClient.Instance.Delete((Subscription)obj);
         } else if (obj is HostedService) {
-          // nothing to do so far
+          HostedService hs = (HostedService)obj;
+          using (var form = new DeleteHostedServiceView(hs)) {
+            form.ShowDialog();
+          }
         } else if (obj is Deployment && objParent is HostedService) {
           HostedService hs = (HostedService)objParent;
Index: /branches/HeuristicLab.Hive.Azure/HeuristicLab.Clients.Hive.CloudManager/3.3/Views/DeleteDeploymentView.cs
===================================================================
--- /branches/HeuristicLab.Hive.Azure/HeuristicLab.Clients.Hive.CloudManager/3.3/Views/DeleteDeploymentView.cs	(revision 7607)
+++ /branches/HeuristicLab.Hive.Azure/HeuristicLab.Clients.Hive.CloudManager/3.3/Views/DeleteDeploymentView.cs	(revision 7608)
@@ -1,4 +1,5 @@
 ﻿using System;
 using System.ComponentModel;
+using System.Threading.Tasks;
 using System.Windows.Forms;
 using HeuristicLab.Clients.Hive.CloudManager.Azure;
@@ -54,8 +55,8 @@
 
       if (DeleteHostedService) {
-        foreach (Deployment d in hs.Deployments) {
+        Parallel.ForEach(hs.Deployments, d => {
           string requestId = CloudManagerClient.Instance.AzureProvider.DeleteDeployment(hs.Subscription, hs.ServiceName, d.Name);
-          Constants.OperationResult result = CloudManagerClient.Instance.AzureProvider.PollGetOperationStatus(hs.Subscription, requestId, 5, 30);
-        }
+          Constants.OperationResult result = CloudManagerClient.Instance.AzureProvider.PollGetOperationStatus(hs.Subscription, requestId, 4, 30);
+        });
         CloudManagerClient.Instance.AzureProvider.DeleteHostedService(hs.Subscription, hs.ServiceName);
       } else {
Index: /branches/HeuristicLab.Hive.Azure/HeuristicLab.Clients.Hive.CloudManager/3.3/Views/DeleteHostedServiceView.Designer.cs
===================================================================
--- /branches/HeuristicLab.Hive.Azure/HeuristicLab.Clients.Hive.CloudManager/3.3/Views/DeleteHostedServiceView.Designer.cs	(revision 7608)
+++ /branches/HeuristicLab.Hive.Azure/HeuristicLab.Clients.Hive.CloudManager/3.3/Views/DeleteHostedServiceView.Designer.cs	(revision 7608)
@@ -0,0 +1,99 @@
+﻿namespace HeuristicLab.Clients.Hive.CloudManager.Views {
+  partial class DeleteHostedServiceView {
+    /// <summary>
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary>
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Windows Form Designer generated code
+
+    /// <summary>
+    /// Required method for Designer support - do not modify
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(DeleteHostedServiceView));
+      this.btnNo = new System.Windows.Forms.Button();
+      this.btnYes = new System.Windows.Forms.Button();
+      this.progressBar = new System.Windows.Forms.ProgressBar();
+      this.lblDialogText = new System.Windows.Forms.Label();
+      this.SuspendLayout();
+      // 
+      // btnNo
+      // 
+      this.btnNo.Location = new System.Drawing.Point(407, 66);
+      this.btnNo.Name = "btnNo";
+      this.btnNo.Size = new System.Drawing.Size(75, 23);
+      this.btnNo.TabIndex = 0;
+      this.btnNo.Text = "No";
+      this.btnNo.UseVisualStyleBackColor = true;
+      this.btnNo.Click += new System.EventHandler(this.btnNo_Click);
+      // 
+      // btnYes
+      // 
+      this.btnYes.Location = new System.Drawing.Point(326, 66);
+      this.btnYes.Name = "btnYes";
+      this.btnYes.Size = new System.Drawing.Size(75, 23);
+      this.btnYes.TabIndex = 1;
+      this.btnYes.Text = "Yes";
+      this.btnYes.UseVisualStyleBackColor = true;
+      this.btnYes.Click += new System.EventHandler(this.btnYes_Click);
+      // 
+      // progressBar
+      // 
+      this.progressBar.Location = new System.Drawing.Point(12, 66);
+      this.progressBar.MarqueeAnimationSpeed = 10;
+      this.progressBar.Name = "progressBar";
+      this.progressBar.Size = new System.Drawing.Size(307, 23);
+      this.progressBar.Style = System.Windows.Forms.ProgressBarStyle.Marquee;
+      this.progressBar.TabIndex = 2;
+      this.progressBar.Visible = false;
+      // 
+      // lblDialogText
+      // 
+      this.lblDialogText.AutoSize = true;
+      this.lblDialogText.Location = new System.Drawing.Point(12, 14);
+      this.lblDialogText.Name = "lblDialogText";
+      this.lblDialogText.Size = new System.Drawing.Size(175, 13);
+      this.lblDialogText.TabIndex = 3;
+      this.lblDialogText.Text = "Are you sure you want to delete \"\"?";
+      // 
+      // DeleteHostedServiceView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.ClientSize = new System.Drawing.Size(494, 99);
+      this.Controls.Add(this.lblDialogText);
+      this.Controls.Add(this.progressBar);
+      this.Controls.Add(this.btnYes);
+      this.Controls.Add(this.btnNo);
+      this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
+      this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
+      this.MaximizeBox = false;
+      this.MinimizeBox = false;
+      this.Name = "DeleteHostedServiceView";
+      this.Text = "Delete Hosted Service";
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Button btnNo;
+    private System.Windows.Forms.Button btnYes;
+    private System.Windows.Forms.ProgressBar progressBar;
+    private System.Windows.Forms.Label lblDialogText;
+  }
+}
Index: /branches/HeuristicLab.Hive.Azure/HeuristicLab.Clients.Hive.CloudManager/3.3/Views/DeleteHostedServiceView.cs
===================================================================
--- /branches/HeuristicLab.Hive.Azure/HeuristicLab.Clients.Hive.CloudManager/3.3/Views/DeleteHostedServiceView.cs	(revision 7608)
+++ /branches/HeuristicLab.Hive.Azure/HeuristicLab.Clients.Hive.CloudManager/3.3/Views/DeleteHostedServiceView.cs	(revision 7608)
@@ -0,0 +1,71 @@
+﻿using System.ComponentModel;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using HeuristicLab.Clients.Hive.CloudManager.Azure;
+using HeuristicLab.Clients.Hive.CloudManager.Model;
+
+namespace HeuristicLab.Clients.Hive.CloudManager.Views {
+  public partial class DeleteHostedServiceView : Form {
+    private const string formatDeleteHostedService = "Are you sure you want to delete \"{0}\"";
+    private HostedService hostedService;
+    private BackgroundWorker worker;
+
+    public bool ErrorOccured { get; set; }
+
+    public DeleteHostedServiceView(HostedService hs) {
+      InitializeComponent();
+      worker = new BackgroundWorker();
+      worker.DoWork += new DoWorkEventHandler(DeleteHostedServiceTask);
+      worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(WorkerCompleted);
+
+      hostedService = hs;
+
+      lblDialogText.Text = string.Format(formatDeleteHostedService, hostedService.HostedServiceProperties.Label);
+    }
+
+    private void btnNo_Click(object sender, System.EventArgs e) {
+      this.Close();
+    }
+
+    private void btnYes_Click(object sender, System.EventArgs e) {
+      SetControlsEnabled(false);
+      progressBar.Visible = true;
+
+      worker.RunWorkerAsync(hostedService);
+    }
+
+    private void SetControlsEnabled(bool isEnabled) {
+      btnNo.Enabled = isEnabled;
+      btnYes.Enabled = isEnabled;
+    }
+
+    private void DeleteHostedServiceTask(object sender, DoWorkEventArgs e) {
+      HostedService hs = e.Argument as HostedService;
+
+      //foreach (Deployment d in hs.Deployments) {
+      //  string requestId = CloudManagerClient.Instance.AzureProvider.DeleteDeployment(hs.Subscription, hs.ServiceName, d.Name);
+      //  Constants.OperationResult result = CloudManagerClient.Instance.AzureProvider.PollGetOperationStatus(hs.Subscription, requestId, 5, 30);
+      //}
+
+      Parallel.ForEach(hs.Deployments, dep => {
+        string requestId = CloudManagerClient.Instance.AzureProvider.DeleteDeployment(hs.Subscription, hs.ServiceName, dep.Name);
+        Constants.OperationResult result = CloudManagerClient.Instance.AzureProvider.PollGetOperationStatus(hs.Subscription, requestId, 4, 30);
+      });
+      CloudManagerClient.Instance.AzureProvider.DeleteHostedService(hs.Subscription, hs.ServiceName);
+    }
+
+    private void WorkerCompleted(object sender, RunWorkerCompletedEventArgs e) {
+      progressBar.Visible = false;
+
+      if (e.Error == null) {
+        ErrorOccured = false;
+        this.Close();
+      } else {
+        MessageBox.Show(e.Error.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+        ErrorOccured = true;
+        this.Show();
+        SetControlsEnabled(true);
+      }
+    }
+  }
+}
