Index: branches/HeuristicLab.Hive.Azure/HeuristicLab.Clients.Hive.CloudManager/3.3/Views/AddAzureServiceDialog.Designer.cs
===================================================================
--- branches/HeuristicLab.Hive.Azure/HeuristicLab.Clients.Hive.CloudManager/3.3/Views/AddAzureServiceDialog.Designer.cs	(revision 7361)
+++ branches/HeuristicLab.Hive.Azure/HeuristicLab.Clients.Hive.CloudManager/3.3/Views/AddAzureServiceDialog.Designer.cs	(revision 7362)
@@ -52,4 +52,5 @@
       this.btnOk = new System.Windows.Forms.Button();
       this.btnCancel = new System.Windows.Forms.Button();
+      this.lblCertificateFile = new System.Windows.Forms.Label();
       this.gbNewHostedService.SuspendLayout();
       this.panelDeploymentOptions.SuspendLayout();
@@ -321,4 +322,12 @@
       this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click);
       // 
+      // lblCertificateFile
+      // 
+      this.lblCertificateFile.AutoSize = true;
+      this.lblCertificateFile.Location = new System.Drawing.Point(118, 341);
+      this.lblCertificateFile.Name = "lblCertificateFile";
+      this.lblCertificateFile.Size = new System.Drawing.Size(0, 13);
+      this.lblCertificateFile.TabIndex = 19;
+      // 
       // AddAzureServiceDialog
       // 
@@ -326,4 +335,5 @@
       this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
       this.ClientSize = new System.Drawing.Size(496, 436);
+      this.Controls.Add(this.lblCertificateFile);
       this.Controls.Add(this.lblCores);
       this.Controls.Add(this.btnCancel);
@@ -383,4 +393,5 @@
     private System.Windows.Forms.Button btnOk;
     private System.Windows.Forms.Button btnCancel;
+    private System.Windows.Forms.Label lblCertificateFile;
   }
 }
Index: branches/HeuristicLab.Hive.Azure/HeuristicLab.Clients.Hive.CloudManager/3.3/Views/AddAzureServiceDialog.cs
===================================================================
--- branches/HeuristicLab.Hive.Azure/HeuristicLab.Clients.Hive.CloudManager/3.3/Views/AddAzureServiceDialog.cs	(revision 7361)
+++ branches/HeuristicLab.Hive.Azure/HeuristicLab.Clients.Hive.CloudManager/3.3/Views/AddAzureServiceDialog.cs	(revision 7362)
@@ -18,4 +18,7 @@
     private bool bwCompleted;
     private bool closePending;
+
+    private string certificateFile;
+    private string certificatePassword;
 
     public AddAzureServiceDialog(IItemList<Subscription> subs) {
@@ -124,4 +127,9 @@
       using (var form = new AddCertificate()) {
         form.ShowDialog();
+        if (!form.ErrorOccured) {
+          certificateFile = form.CertificateFile;
+          certificatePassword = form.CertificatePassword;
+          lblCertificateFile.Text = certificateFile;
+        }
       }
     }
Index: branches/HeuristicLab.Hive.Azure/HeuristicLab.Clients.Hive.CloudManager/3.3/Views/AddCertificate.Designer.cs
===================================================================
--- branches/HeuristicLab.Hive.Azure/HeuristicLab.Clients.Hive.CloudManager/3.3/Views/AddCertificate.Designer.cs	(revision 7361)
+++ branches/HeuristicLab.Hive.Azure/HeuristicLab.Clients.Hive.CloudManager/3.3/Views/AddCertificate.Designer.cs	(revision 7362)
@@ -24,4 +24,5 @@
     /// </summary>
     private void InitializeComponent() {
+      System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AddCertificate));
       this.label1 = new System.Windows.Forms.Label();
       this.tbCertificateFile = new System.Windows.Forms.TextBox();
@@ -121,4 +122,5 @@
       this.Controls.Add(this.tbCertificateFile);
       this.Controls.Add(this.label1);
+      this.Icon = HeuristicLab.Common.Resources.HeuristicLab.Icon;
       this.Name = "AddCertificate";
       this.Text = "AddCertificate";
Index: branches/HeuristicLab.Hive.Azure/HeuristicLab.Clients.Hive.CloudManager/3.3/Views/AddCertificate.cs
===================================================================
--- branches/HeuristicLab.Hive.Azure/HeuristicLab.Clients.Hive.CloudManager/3.3/Views/AddCertificate.cs	(revision 7361)
+++ branches/HeuristicLab.Hive.Azure/HeuristicLab.Clients.Hive.CloudManager/3.3/Views/AddCertificate.cs	(revision 7362)
@@ -1,5 +1,5 @@
 ﻿using System;
 using System.ComponentModel;
-using System.Threading;
+using System.Security.Cryptography.X509Certificates;
 using System.Windows.Forms;
 
@@ -8,7 +8,11 @@
     private BackgroundWorker worker = new BackgroundWorker();
     public bool ErrorOccured { get; set; }
+    public string CertificateFile { get; set; }
+    public string CertificatePassword { get; set; }
 
     public AddCertificate() {
       InitializeComponent();
+      ErrorOccured = true;
+
       worker.DoWork += new DoWorkEventHandler(AddCertificateTask);
       worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(WorkerCompleted);
@@ -28,14 +32,17 @@
 
     private void btnOk_Click(object sender, EventArgs e) {
-      if (tbCertificateFile.Text.Length == 0) {
+      CertificateFile = tbCertificateFile.Text;
+      CertificatePassword = tbCertificatePassword.Text;
+
+      if (CertificateFile.Length == 0) {
         MessageBox.Show("Certificate file is required", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
-      } else if (tbCertificatePassword.Text.Length == 0) {
+      } else if (CertificatePassword.Length == 0) {
         MessageBox.Show("Password is required", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
       } else {
         SetControlsEnabled(false);
         progressBar.Visible = true;
-        worker.RunWorkerAsync();
+        var parameters = Tuple.Create<string, string>(CertificateFile, CertificatePassword);
+        worker.RunWorkerAsync(parameters);
       }
-
     }
 
@@ -48,19 +55,22 @@
 
     private void AddCertificateTask(object sender, DoWorkEventArgs e) {
-      try {
-        // simulate service call
-        Thread.Sleep(3000);
-      }
-      catch (Exception ex) {
-        ErrorOccured = true;
-        MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
-      }
+      Tuple<string, string> parameters = e.Argument as Tuple<string, string>;
+      string file = parameters.Item1;
+      string pw = parameters.Item2;
+
+      X509Certificate cert = new X509Certificate(file, pw);
     }
 
     private void WorkerCompleted(object sender, RunWorkerCompletedEventArgs e) {
       progressBar.Visible = false;
-      if (!ErrorOccured) {
+
+      if (e.Error == null) {
+        ErrorOccured = false;
         this.Close();
       } else {
+        MessageBox.Show(e.Error.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+        CertificateFile = string.Empty;
+        CertificateFile = string.Empty;
+        ErrorOccured = true;
         this.Show();
         SetControlsEnabled(true);
Index: branches/HeuristicLab.Hive.Azure/HeuristicLab.Clients.Hive.CloudManager/3.3/Views/AddSubscriptionDialog.Designer.cs
===================================================================
--- branches/HeuristicLab.Hive.Azure/HeuristicLab.Clients.Hive.CloudManager/3.3/Views/AddSubscriptionDialog.Designer.cs	(revision 7361)
+++ branches/HeuristicLab.Hive.Azure/HeuristicLab.Clients.Hive.CloudManager/3.3/Views/AddSubscriptionDialog.Designer.cs	(revision 7362)
@@ -122,6 +122,8 @@
       // 
       this.progressBar.Location = new System.Drawing.Point(15, 107);
+      this.progressBar.MarqueeAnimationSpeed = 10;
       this.progressBar.Name = "progressBar";
       this.progressBar.Size = new System.Drawing.Size(340, 23);
+      this.progressBar.Style = System.Windows.Forms.ProgressBarStyle.Marquee;
       this.progressBar.TabIndex = 29;
       this.progressBar.Visible = false;
Index: branches/HeuristicLab.Hive.Azure/HeuristicLab.Clients.Hive.CloudManager/3.3/Views/AddSubscriptionDialog.cs
===================================================================
--- branches/HeuristicLab.Hive.Azure/HeuristicLab.Clients.Hive.CloudManager/3.3/Views/AddSubscriptionDialog.cs	(revision 7361)
+++ branches/HeuristicLab.Hive.Azure/HeuristicLab.Clients.Hive.CloudManager/3.3/Views/AddSubscriptionDialog.cs	(revision 7362)
@@ -1,5 +1,3 @@
-﻿using System;
-using System.ComponentModel;
-using System.Threading;
+﻿using System.ComponentModel;
 using System.Windows.Forms;
 using HeuristicLab.Clients.Hive.CloudManager.Model;
@@ -20,5 +18,7 @@
       cbDiscoverServices.Checked = true;
 
-      SetWorkerEvents();
+      worker.DoWork += new DoWorkEventHandler(LoadSubscription);
+      worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(WorkerCompleted);
+
       ErrorOccured = true;
     }
@@ -26,5 +26,4 @@
     private void btnOk_Click(object sender, System.EventArgs e) {
       this.progressBar.Visible = true;
-      //this.progressBar.Style = ProgressBarStyle.Continuous;
       worker.RunWorkerAsync();
     }
@@ -34,54 +33,21 @@
     }
 
-    private void SetWorkerEvents() {
-      worker.WorkerReportsProgress = true;
-      worker.DoWork += new DoWorkEventHandler(LoadSubscription);
-      worker.ProgressChanged += new ProgressChangedEventHandler(ProgressChanged);
-      worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(WorkerCompleted);
-    }
-
-    private void ProgressChanged(object sender, ProgressChangedEventArgs e) {
-      progressBar.Value = e.ProgressPercentage;
+    private void LoadSubscription(object sender, DoWorkEventArgs e) {
+      e.Result = CloudManagerClient.Instance.AzureProvider.GetSubscriptionInfo(txtSubscriptionId.Text, txtCertThumbprint.Text);
     }
 
     private void WorkerCompleted(object sender, RunWorkerCompletedEventArgs e) {
       progressBar.Visible = false;
-      if (!ErrorOccured) {
+      if (e.Error == null) {
+        ErrorOccured = false;
+        Subscription = (Subscription)e.Result;
+        Subscription.SaveToConfig = cbSaveSubscription.Checked;
+        Subscription.DiscoverServices = cbDiscoverServices.Checked;
         this.Close();
       } else {
+        MessageBox.Show(e.Error.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+        ErrorOccured = true;
+        Subscription = null;
         this.Show();
-      }
-    }
-
-    private void LoadSubscription(object sender, DoWorkEventArgs e) {
-      try {
-        worker.ReportProgress(25, "Add Subscription");
-        Subscription = CloudManagerClient.Instance.AzureProvider.GetSubscriptionInfo(txtSubscriptionId.Text, txtCertThumbprint.Text);
-        Subscription.SaveToConfig = cbSaveSubscription.Checked;
-        Subscription.DiscoverServices = cbDiscoverServices.Checked;
-        ErrorOccured = false;
-      }
-      catch (SystemException ex) {
-        ErrorOccured = true;
-        MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
-      }
-      try {
-
-        if (!ErrorOccured) {
-          worker.ReportProgress(50, "Get Subscription Info");
-          //TODO: operation
-          ErrorOccured = false;
-        }
-      }
-      catch (SystemException ex) {
-        ErrorOccured = true;
-        MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
-        worker.ReportProgress(25, "Rollback: Remove hosted service");
-        // Rollback operation
-      }
-
-      if (!ErrorOccured) {
-        worker.ReportProgress(100, "");
-        Thread.Sleep(1000);
       }
     }
