Index: /trunk/sources/HeuristicLab.Clients.Hive.JobManager/3.3/Views/HiveJobManagerView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.Hive.JobManager/3.3/Views/HiveJobManagerView.cs	(revision 9222)
+++ /trunk/sources/HeuristicLab.Clients.Hive.JobManager/3.3/Views/HiveJobManagerView.cs	(revision 9223)
@@ -25,5 +25,4 @@
 using System.Windows.Forms;
 using HeuristicLab.Clients.Hive.Views;
-using HeuristicLab.Collections;
 using HeuristicLab.MainForm;
 using HeuristicLab.MainForm.WindowsForms;
@@ -54,5 +53,4 @@
       Content.Refreshing += new EventHandler(Content_Refreshing);
       Content.Refreshed += new EventHandler(Content_Refreshed);
-      Content.HiveJobsChanged += new EventHandler(Content_HiveJobsChanged);
     }
 
@@ -60,5 +58,4 @@
       Content.Refreshing -= new EventHandler(Content_Refreshing);
       Content.Refreshed -= new EventHandler(Content_Refreshed);
-      Content.HiveJobsChanged -= new EventHandler(Content_HiveJobsChanged);
       base.DeregisterContentEvents();
     }
@@ -130,6 +127,5 @@
       } else {
         base.OnClosing(e);
-        if (Content != null && Content.Jobs != null) {
-          Content.Jobs.ItemsRemoved -= new CollectionItemsChangedEventHandler<RefreshableJob>(HiveExperiments_ItemsRemoved);
+        if (Content != null) {
           Content.ClearHiveClient();
           Content = null;
@@ -137,16 +133,4 @@
       }
     }
-
-    private void HiveExperiments_ItemsRemoved(object sender, CollectionItemsChangedEventArgs<RefreshableJob> e) {
-      foreach (var item in e.Items) {
-        HiveClient.Delete(item);
-      }
-    }
-
-    private void Content_HiveJobsChanged(object sender, EventArgs e) {
-      if (Content.Jobs != null) {
-        Content.Jobs.ItemsRemoved += new CollectionItemsChangedEventHandler<RefreshableJob>(HiveExperiments_ItemsRemoved);
-      }
-    }
   }
 }
Index: /trunk/sources/HeuristicLab.Clients.Hive.JobManager/3.3/Views/RefreshableHiveJobListView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.Hive.JobManager/3.3/Views/RefreshableHiveJobListView.Designer.cs	(revision 9222)
+++ /trunk/sources/HeuristicLab.Clients.Hive.JobManager/3.3/Views/RefreshableHiveJobListView.Designer.cs	(revision 9223)
@@ -27,14 +27,4 @@
     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) {
-        if (components != null) components.Dispose();
-      }
-      base.Dispose(disposing);
-    }
 
     #region Component Designer generated code
Index: /trunk/sources/HeuristicLab.Clients.Hive.JobManager/3.3/Views/RefreshableHiveJobListView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.Hive.JobManager/3.3/Views/RefreshableHiveJobListView.cs	(revision 9222)
+++ /trunk/sources/HeuristicLab.Clients.Hive.JobManager/3.3/Views/RefreshableHiveJobListView.cs	(revision 9223)
@@ -21,8 +21,11 @@
 
 using System;
+using System.Collections.Generic;
+using System.Threading.Tasks;
 using System.Windows.Forms;
 using HeuristicLab.Collections;
 using HeuristicLab.Core;
 using HeuristicLab.MainForm;
+using HeuristicLab.MainForm.WindowsForms;
 
 namespace HeuristicLab.Clients.Hive.JobManager.Views {
@@ -30,9 +33,11 @@
   [Content(typeof(ItemCollection<RefreshableJob>), false)]
   public partial class RefreshableHiveJobListView : HeuristicLab.Core.Views.ItemCollectionView<RefreshableJob> {
+    private Progress progress;
+    private ProgressView progressView;
 
     public RefreshableHiveJobListView() {
       InitializeComponent();
       itemsGroupBox.Text = "Jobs";
-      this.itemsListView.View = View.Details;
+      this.itemsListView.View = System.Windows.Forms.View.Details;
       this.itemsListView.Columns.Clear();
       this.itemsListView.Columns.Add(new ColumnHeader("Date") { Text = "Date" });
@@ -47,4 +52,10 @@
       this.itemsListView.Sorting = SortOrder.Ascending;
       this.itemsListView.Sort();
+
+      progress = new Progress() {
+        CanBeCanceled = false,
+        ProgressState = ProgressState.Finished
+      };
+      progressView = new ProgressView(this, progress);
     }
 
@@ -53,4 +64,20 @@
       refreshableJob.Job.Name = "New Hive Job";
       return refreshableJob;
+    }
+
+    protected override void OnLockedChanged() {
+      base.OnLockedChanged();
+
+      itemsListView.Enabled = !Locked;
+      addButton.Enabled = !Locked;
+      sortAscendingButton.Enabled = !Locked;
+      sortDescendingButton.Enabled = !Locked;
+      removeButton.Enabled = !Locked;
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      // if the view is locked, a job is currently beeing deleted and everything should be disabled
+      if (!Locked)
+        base.SetEnabledStateOfControls();
     }
 
@@ -72,7 +99,36 @@
           return;
         } else {
-          base.removeButton_Click(sender, e);
-        }
-      }
+          DeleteHiveJobs(e);
+        }
+      }
+    }
+
+    private void DeleteHiveJobs(EventArgs e) {
+      if (itemsListView.SelectedItems.Count > 0) {
+        List<RefreshableJob> items = new List<RefreshableJob>();
+        foreach (ListViewItem item in itemsListView.SelectedItems)
+          items.Add((RefreshableJob)item.Tag);
+
+        var task = System.Threading.Tasks.Task.Factory.StartNew(DeleteHiveJobsAsync, items);
+
+        task.ContinueWith((t) => {
+          progress.Finish();
+          MessageBox.Show("An error occured while deleting the job: " + Environment.NewLine + t.Exception, "HeuristicLab Hive Job Manager", MessageBoxButtons.OK, MessageBoxIcon.Error);
+        }, TaskContinuationOptions.OnlyOnFaulted);
+
+        task.ContinueWith((t) => {
+          itemsListView.SelectedItems.Clear();
+        }, TaskContinuationOptions.OnlyOnRanToCompletion);
+      }
+    }
+
+    private void DeleteHiveJobsAsync(object items) {
+      progress.Status = "Deleting job...";
+      progress.ProgressState = ProgressState.Started;
+      progress.ProgressValue = 0.0;
+      foreach (RefreshableJob item in (List<RefreshableJob>)items) {
+        Content.Remove(item);
+      }
+      progress.Finish();
     }
 
@@ -158,4 +214,17 @@
       return newGroup;
     }
+
+    /// <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) {
+        if (components != null) components.Dispose();
+        progressView.Content = null;
+        progressView.Dispose();
+      }
+      base.Dispose(disposing);
+    }
   }
 }
Index: /trunk/sources/HeuristicLab.Clients.Hive.JobManager/3.3/Views/RefreshableHiveJobView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.Hive.JobManager/3.3/Views/RefreshableHiveJobView.cs	(revision 9222)
+++ /trunk/sources/HeuristicLab.Clients.Hive.JobManager/3.3/Views/RefreshableHiveJobView.cs	(revision 9223)
@@ -166,30 +166,52 @@
     }
 
+    protected override void OnLockedChanged() {
+      base.OnLockedChanged();
+      executionTimeTextBox.Enabled = !Locked;
+      jobsTextBox.Enabled = !Locked;
+      calculatingTextBox.Enabled = !Locked;
+      finishedTextBox.Enabled = !Locked;
+      tabControl.Enabled = !Locked;
+      nameTextBox.Enabled = !Locked;
+      resourceNamesTextBox.Enabled = !Locked;
+      searchButton.Enabled = !Locked;
+      jobsTreeView.Enabled = !Locked;
+      isPrivilegedCheckBox.Enabled = !Locked;
+      refreshAutomaticallyCheckBox.Enabled = !Locked;
+      refreshButton.Enabled = !Locked;
+      UnloadButton.Enabled = !Locked;
+      startButton.Enabled = !Locked;
+      pauseButton.Enabled = !Locked;
+      stopButton.Enabled = !Locked;
+      resetButton.Enabled = !Locked;
+    }
+
     protected override void SetEnabledStateOfControls() {
       base.SetEnabledStateOfControls();
-      executionTimeTextBox.Enabled = Content != null;
-      jobsTextBox.ReadOnly = true;
-      calculatingTextBox.ReadOnly = true;
-      finishedTextBox.ReadOnly = true;
-
-      if (Content != null) {
-        bool alreadyUploaded = Content.Id != Guid.Empty;
-        bool jobsLoaded = Content.HiveTasks != null && Content.HiveTasks.All(x => x.Task.Id != Guid.Empty);
-        tabControl.Enabled = !Content.IsProgressing;
-
-        this.nameTextBox.ReadOnly = !Content.IsControllable || Content.ExecutionState != ExecutionState.Prepared || alreadyUploaded || Content.IsProgressing;
-        this.resourceNamesTextBox.ReadOnly = !Content.IsControllable || Content.ExecutionState != ExecutionState.Prepared || alreadyUploaded || Content.IsProgressing;
-        this.searchButton.Enabled = Content.IsControllable && Content.ExecutionState == ExecutionState.Prepared && !alreadyUploaded && !Content.IsProgressing;
-        this.jobsTreeView.ReadOnly = !Content.IsControllable || Content.ExecutionState != ExecutionState.Prepared || alreadyUploaded || Content.IsProgressing;
-
-        this.isPrivilegedCheckBox.Enabled = HiveClient.Instance.IsAllowedPrivileged && Content.IsControllable && !(Content.ExecutionState != ExecutionState.Prepared || alreadyUploaded) && !Content.IsProgressing;
-        this.refreshAutomaticallyCheckBox.Enabled = Content.IsControllable && alreadyUploaded && jobsLoaded && Content.ExecutionState == ExecutionState.Started && !Content.IsProgressing;
-        this.refreshButton.Enabled = Content.IsDownloadable && alreadyUploaded && !Content.IsProgressing;
-        this.Locked = !Content.IsControllable || Content.ExecutionState == ExecutionState.Started || Content.IsProgressing;
-
-        this.UnloadButton.Enabled = Content.HiveTasks != null && Content.HiveTasks.Count > 0 && alreadyUploaded && !Content.IsProgressing;
-      }
-      SetEnabledStateOfExecutableButtons();
-      tabControl_SelectedIndexChanged(this, EventArgs.Empty); // ensure sharing tabpage is disabled
+      if (!Locked) {
+        executionTimeTextBox.Enabled = Content != null;
+        jobsTextBox.ReadOnly = true;
+        calculatingTextBox.ReadOnly = true;
+        finishedTextBox.ReadOnly = true;
+
+        if (Content != null) {
+          bool alreadyUploaded = Content.Id != Guid.Empty;
+          bool jobsLoaded = Content.HiveTasks != null && Content.HiveTasks.All(x => x.Task.Id != Guid.Empty);
+          tabControl.Enabled = !Content.IsProgressing;
+
+          this.nameTextBox.ReadOnly = !Content.IsControllable || Content.ExecutionState != ExecutionState.Prepared || alreadyUploaded || Content.IsProgressing;
+          this.resourceNamesTextBox.ReadOnly = !Content.IsControllable || Content.ExecutionState != ExecutionState.Prepared || alreadyUploaded || Content.IsProgressing;
+          this.searchButton.Enabled = Content.IsControllable && Content.ExecutionState == ExecutionState.Prepared && !alreadyUploaded && !Content.IsProgressing;
+          this.jobsTreeView.ReadOnly = !Content.IsControllable || Content.ExecutionState != ExecutionState.Prepared || alreadyUploaded || Content.IsProgressing;
+
+          this.isPrivilegedCheckBox.Enabled = HiveClient.Instance.IsAllowedPrivileged && Content.IsControllable && !(Content.ExecutionState != ExecutionState.Prepared || alreadyUploaded) && !Content.IsProgressing;
+          this.refreshAutomaticallyCheckBox.Enabled = Content.IsControllable && alreadyUploaded && jobsLoaded && Content.ExecutionState == ExecutionState.Started && !Content.IsProgressing;
+          this.refreshButton.Enabled = Content.IsDownloadable && alreadyUploaded && !Content.IsProgressing;
+
+          this.UnloadButton.Enabled = Content.HiveTasks != null && Content.HiveTasks.Count > 0 && alreadyUploaded && !Content.IsProgressing;
+        }
+        SetEnabledStateOfExecutableButtons();
+        tabControl_SelectedIndexChanged(this, EventArgs.Empty); // ensure sharing tabpage is disabled
+      }
     }
 
