Index: branches/HeuristicLab.Hive.Azure/HeuristicLab.Clients.Hive.CloudManager/3.3/Azure/AzureProvider.cs
===================================================================
--- branches/HeuristicLab.Hive.Azure/HeuristicLab.Clients.Hive.CloudManager/3.3/Azure/AzureProvider.cs	(revision 7578)
+++ branches/HeuristicLab.Hive.Azure/HeuristicLab.Clients.Hive.CloudManager/3.3/Azure/AzureProvider.cs	(revision 7597)
@@ -186,4 +186,18 @@
     }
 
+    public string DeleteDeployment(Subscription subscription, string serviceName, string deploymentName) {
+      if (subscription == null) {
+        throw new ArgumentNullException("Subscription must not be null.", "subscription");
+      }
+      if (serviceName.Length == 0) {
+        throw new ArgumentException("Servicename is not valid.", "serviceName");
+      }
+      if (deploymentName.Length == 0) {
+        throw new ArgumentException("Deploymentname is not valid.", "deploymentName");
+      }
+
+      return ServiceManagementOperation.DeleteDeployment(subscription.SubscriptionID, subscription.CertificateThumbprint, serviceName, deploymentName);
+    }
+
     public List<HostedService> DiscoverSlaveService(Subscription subscription) {
       if (subscription == null) {
@@ -206,4 +220,11 @@
       return ServiceManagementOperation.ChangeInstanceCount(subscription.SubscriptionID, subscription.CertificateThumbprint, serviceName, deploymentSlot, roleName, instanceCount);
     }
+
+    public Constants.OperationResult PollGetOperationStatus(Subscription subscription, string requestId, int pollIntervallSeconds, int timeoutSeconds) {
+      if (subscription == null) {
+        throw new ArgumentNullException("Subscription must not be null.", "subscription");
+      }
+      return ServiceManagementOperation.PollGetOperationStatus(subscription.SubscriptionID, subscription.CertificateThumbprint, requestId, pollIntervallSeconds, timeoutSeconds);
+    }
   }
 }
Index: branches/HeuristicLab.Hive.Azure/HeuristicLab.Clients.Hive.CloudManager/3.3/Azure/Constants.cs
===================================================================
--- branches/HeuristicLab.Hive.Azure/HeuristicLab.Clients.Hive.CloudManager/3.3/Azure/Constants.cs	(revision 7578)
+++ branches/HeuristicLab.Hive.Azure/HeuristicLab.Clients.Hive.CloudManager/3.3/Azure/Constants.cs	(revision 7597)
@@ -20,4 +20,6 @@
 #endregion
 
+using System;
+using System.Net;
 using System.Xml.Linq;
 namespace HeuristicLab.Clients.Hive.CloudManager.Azure {
@@ -114,4 +116,23 @@
     }
 
+    public enum OperationStatus {
+      InProgress,
+      Failed,
+      Succeeded,
+      TimedOut
+    }
+
+    #endregion
+
+    #region Structs
+
+    public struct OperationResult {
+      public Constants.OperationStatus Status { get; set; }
+      public HttpStatusCode StatusCode { get; set; }
+      public TimeSpan RunningTime { get; set; }
+      public string Code { get; set; }
+      public string Message { get; set; }
+    }
+
     #endregion
   }
Index: branches/HeuristicLab.Hive.Azure/HeuristicLab.Clients.Hive.CloudManager/3.3/Azure/IAzureProvider.cs
===================================================================
--- branches/HeuristicLab.Hive.Azure/HeuristicLab.Clients.Hive.CloudManager/3.3/Azure/IAzureProvider.cs	(revision 7578)
+++ branches/HeuristicLab.Hive.Azure/HeuristicLab.Clients.Hive.CloudManager/3.3/Azure/IAzureProvider.cs	(revision 7597)
@@ -40,4 +40,6 @@
     string CreateDeployment(Subscription subscription, string serviceName, string deploymentName, string deploymentSlot, string packageUrl, FileInfo configuration, string label, int instanceCount);
     string DeleteHostedService(Subscription subscription, string serviceName);
+    string DeleteDeployment(Subscription subscription, string serviceName, string deploymentName);
+    Constants.OperationResult PollGetOperationStatus(Subscription subscription, string requestId, int pollIntervallSeconds, int timeoutSeconds);
 
     List<HostedService> DiscoverSlaveService(Subscription subscription);
Index: branches/HeuristicLab.Hive.Azure/HeuristicLab.Clients.Hive.CloudManager/3.3/Azure/ServiceManagementOperation.cs
===================================================================
--- branches/HeuristicLab.Hive.Azure/HeuristicLab.Clients.Hive.CloudManager/3.3/Azure/ServiceManagementOperation.cs	(revision 7578)
+++ branches/HeuristicLab.Hive.Azure/HeuristicLab.Clients.Hive.CloudManager/3.3/Azure/ServiceManagementOperation.cs	(revision 7597)
@@ -25,4 +25,5 @@
 using System.Linq;
 using System.Net;
+using System.Threading;
 using System.Xml.Linq;
 using HeuristicLab.Clients.Hive.CloudManager.Model;
@@ -260,4 +261,11 @@
     }
 
+    public static string DeleteDeployment(string subscriptionId, string thumbprint, string serviceName, string deploymentName) {
+      string uri = string.Format(Constants.URISpecificDeploymentFormat, subscriptionId, serviceName, deploymentName);
+      ServiceWebRequest operation = new ServiceWebRequest(thumbprint);
+      string requestId = operation.Invoke(uri, Constants.HttpMethodDELETE);
+      return requestId;
+    }
+
     public static string ChangeInstanceCount(string subscriptionId, string thumbprint, string serviceName, string deploymentSlot, string roleName, int instanceCount) {
       string requestId = string.Empty;
@@ -270,10 +278,56 @@
     }
 
-    public static string GetOperationStatus(string subscriptionId, string thumbprint, string requestId) {
+    public static string GetOperationStatusString(string subscriptionId, string thumbprint, string requestId) {
+      string status = GetOperationStatus(subscriptionId, thumbprint, requestId).Element(wa + "Status").Value;
+      return status;
+    }
+
+    public static XElement GetOperationStatus(string subscriptionId, string thumbprint, string requestId) {
       string uri = string.Format(Constants.URIGetOperationStatusFormat, subscriptionId, requestId);
       ServiceWebRequest operation = new ServiceWebRequest(thumbprint);
       XDocument operationStatus = operation.Invoke(uri);
-      string status = operationStatus.Element(wa + "Operation").Element(wa + "Status").Value;
-      return status;
+      return operationStatus.Element(wa + "Operation");
+    }
+
+    public static Constants.OperationResult PollGetOperationStatus(string subscriptionId, string thumbprint, string requestId, int pollIntervallSeconds, int timeoutSeconds) {
+      Constants.OperationResult result = new Constants.OperationResult();
+      DateTime beginPollTime = DateTime.UtcNow;
+      TimeSpan pollInterval = new TimeSpan(0, 0, pollIntervallSeconds);
+      DateTime endPollTime = beginPollTime + new TimeSpan(0, 0, timeoutSeconds);
+
+      bool done = false;
+      while (!done) {
+        XElement operationStatus = GetOperationStatus(subscriptionId, thumbprint, requestId);
+        result.RunningTime = DateTime.UtcNow - beginPollTime;
+        try {
+          result.Status = (Constants.OperationStatus)Enum.Parse(typeof(Constants.OperationStatus), operationStatus.Element(wa + "Status").Value);
+        }
+        catch (Exception ex) {
+          throw new ApplicationException(string.Format("Get Operation Status {0} returned unexpected status: {1}{2}", requestId, Environment.NewLine, operationStatus.ToString(SaveOptions.OmitDuplicateNamespaces)));
+        }
+
+        switch (result.Status) {
+          case Constants.OperationStatus.InProgress:
+            Thread.Sleep((int)pollInterval.TotalMilliseconds);
+            break;
+          case Constants.OperationStatus.Failed:
+            result.StatusCode = (HttpStatusCode)Convert.ToInt32(operationStatus.Element(wa + "HttpStatusCode").Value);
+            XElement error = operationStatus.Element(wa + "Error");
+            result.Code = error.Element(wa + "Code").Value;
+            result.Message = error.Element(wa + "Message").Value;
+            done = true;
+            break;
+          case Constants.OperationStatus.Succeeded:
+            result.StatusCode = (HttpStatusCode)Convert.ToInt32(operationStatus.Element(wa + "HttpStatusCode").Value);
+            done = true;
+            break;
+        }
+
+        if (!done && DateTime.UtcNow > endPollTime) {
+          result.Status = Constants.OperationStatus.TimedOut;
+          done = true;
+        }
+      }
+      return result;
     }
 
