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 7668)
+++ branches/HeuristicLab.Hive.Azure/HeuristicLab.Clients.Hive.CloudManager/3.3/Views/CloudResourcesView.cs	(revision 7670)
@@ -1,4 +1,6 @@
 ﻿using System;
+using System.Collections.Generic;
 using System.Diagnostics;
+using System.Threading.Tasks;
 using System.Timers;
 using System.Windows.Forms;
@@ -8,4 +10,6 @@
 using HeuristicLab.Core.Views;
 using HeuristicLab.MainForm;
+using HeuristicLab.MainForm.WindowsForms;
+using HeuristicLab.PluginInfrastructure;
 
 namespace HeuristicLab.Clients.Hive.CloudManager.Views {
@@ -13,4 +17,5 @@
   [Content(typeof(IItemList<Subscription>), IsDefaultView = true)]
   public partial class CloudResourcesView : ItemView, IDisposable {
+    ProgressView progressView;
     private System.Timers.Timer timer = new System.Timers.Timer();
     private int updateInterval = 15000;
@@ -52,5 +57,9 @@
       dueTime = DateTime.Now.AddMilliseconds(updateInterval);
 
-      CloudManagerClient.Instance.RestoreSubscriptionsFromUserConfig();
+      //IProgress progress = new Progress();
+      //progress.Status = "Restore Subscriptions";
+      //progressView = new ProgressView(this, progress);
+      //CloudManagerClient.Instance.RestoreSubscriptionsFromUserConfig();
+      //progressView.Finish();
     }
 
@@ -85,15 +94,67 @@
     }
 
+    private void SetProgressView(IProgress progress) {
+      if (InvokeRequired) {
+        Invoke(new Action<IProgress>(SetProgressView), progress);
+      } else {
+        if (progressView == null) {
+          progressView = new ProgressView(this, progress);
+        } else {
+          progressView.Progress = progress;
+        }
+      }
+    }
+
+    private void FinishProgressView() {
+      if (InvokeRequired) {
+        Invoke(new Action(FinishProgressView));
+      } else {
+        if (progressView != null) {
+          progressView.Finish();
+          progressView = null;
+          SetEnabledStateOfControls();
+        }
+      }
+    }
+
+    public void Restore() {
+      var task = System.Threading.Tasks.Task.Factory.StartNew(RestoreAsync);
+      task.ContinueWith((t) => {
+        FinishProgressView();
+        ErrorHandling.ShowErrorDialog(this, "An error occured while restoring Azure Subscriptions.", t.Exception);
+      }, TaskContinuationOptions.OnlyOnFaulted);
+      FinishProgressView();
+    }
+
+    private void RestoreAsync() {
+      IProgress progress = new Progress();
+      progress.Status = "Restoring Azure Subscriptions";
+      SetProgressView(progress);
+      List<Subscription> result = CloudManagerClient.Instance.RestoreSubscriptionsFromUserConfig();
+      FinishProgressView();
+      foreach (Subscription s in result) this.BeginInvoke((MethodInvoker)delegate() { CloudManagerClient.Instance.Add(s); });
+    }
+
     protected override void SetEnabledStateOfControls() {
       base.SetEnabledStateOfControls();
       if (Content == null || Content.Count == 0) {
-        btnAddSlaveService.Enabled = false;
-        btnDelete.Enabled = false;
-        btnSave.Enabled = false;
-      } else {
-        btnAddSlaveService.Enabled = true;
-        btnDelete.Enabled = true;
-        btnSave.Enabled = true;
-      }
+        if (this.InvokeRequired) {
+          this.BeginInvoke((MethodInvoker)delegate() { SetBtnControlsEnabled(false); });
+        } else {
+          SetBtnControlsEnabled(false);
+        }
+      } else {
+        if (this.InvokeRequired) {
+          this.BeginInvoke((MethodInvoker)delegate() { SetBtnControlsEnabled(true); });
+        } else {
+          SetBtnControlsEnabled(true);
+        }
+      }
+    }
+
+    private void SetBtnControlsEnabled(bool enabled) {
+      btnAddSlaveService.Enabled = enabled;
+      btnDelete.Enabled = enabled;
+      btnSave.Enabled = enabled;
     }
 
Index: branches/HeuristicLab.Hive.Azure/HeuristicLab.Clients.Hive.CloudManager/3.3/Views/HiveCloudManagerView.cs
===================================================================
--- branches/HeuristicLab.Hive.Azure/HeuristicLab.Clients.Hive.CloudManager/3.3/Views/HiveCloudManagerView.cs	(revision 7668)
+++ branches/HeuristicLab.Hive.Azure/HeuristicLab.Clients.Hive.CloudManager/3.3/Views/HiveCloudManagerView.cs	(revision 7670)
@@ -40,4 +40,6 @@
       cloudResourcesView.Content = CloudManagerClient.Instance.Subscriptions;
       cloudResourcesView.HostedServices = CloudManagerClient.Instance.HostedServices;
+
+      cloudResourcesView.Restore();
     }
 
