Index: branches/GP-MoveOperators/HeuristicLab.Clients.Hive.JobManager/3.3/Views/HiveResourceSelector.cs
===================================================================
--- branches/GP-MoveOperators/HeuristicLab.Clients.Hive.JobManager/3.3/Views/HiveResourceSelector.cs	(revision 8085)
+++ branches/GP-MoveOperators/HeuristicLab.Clients.Hive.JobManager/3.3/Views/HiveResourceSelector.cs	(revision 8206)
@@ -42,4 +42,6 @@
     private ISet<TreeNode> filteredTreeNodes;
     private ISet<TreeNode> nodeStore;
+    private Progress progress;
+    private ProgressView progressView;
 
     private ISet<Resource> selectedResources;
@@ -47,10 +49,4 @@
       get { return selectedResources; }
       set { selectedResources = value; }
-    }
-
-    private ProgressView progressView;
-    public ProgressView ProgressView {
-      get { return progressView; }
-      set { progressView = value; }
     }
 
@@ -68,4 +64,22 @@
       imageList.Images.Add(HeuristicLab.Common.Resources.VSImageLibrary.MonitorLarge);
       imageList.Images.Add(HeuristicLab.Common.Resources.VSImageLibrary.NetworkCenterLarge);
+      progress = new Progress() {
+        CanBeCanceled = false,
+        ProgressState = ProgressState.Finished
+      };
+    }
+
+    protected override void DeregisterContentEvents() {
+      if (progressView != null) {
+        progressView.Content = null;
+        progressView.Dispose();
+        progressView = null;
+      }
+      base.DeregisterContentEvents();
+    }
+
+    protected override void RegisterContentEvents() {
+      base.RegisterContentEvents();
+      progressView = new ProgressView(this, progress);
     }
 
@@ -74,9 +88,6 @@
         Invoke(new Action(StartProgressView));
       } else {
-        if (progressView == null) {
-          IProgress prog = new Progress();
-          prog.Status = "Downloading resources. Please be patient.";
-          progressView = new ProgressView(this, prog);
-        }
+        progress.Status = "Downloading resources. Please be patient.";
+        progress.ProgressState = ProgressState.Started;
       }
     }
@@ -86,9 +97,5 @@
         Invoke(new Action(FinishProgressView));
       } else {
-        if (progressView != null) {
-          progressView.Finish();
-          progressView = null;
-          SetEnabledStateOfControls();
-        }
+        progress.Finish();
       }
     }
Index: branches/GP-MoveOperators/HeuristicLab.Clients.Hive.JobManager/3.3/Views/HiveResourceSelectorDialog.Designer.cs
===================================================================
--- branches/GP-MoveOperators/HeuristicLab.Clients.Hive.JobManager/3.3/Views/HiveResourceSelectorDialog.Designer.cs	(revision 8085)
+++ branches/GP-MoveOperators/HeuristicLab.Clients.Hive.JobManager/3.3/Views/HiveResourceSelectorDialog.Designer.cs	(revision 8206)
@@ -73,5 +73,4 @@
       this.hiveResourceSelector.Location = new System.Drawing.Point(12, 12);
       this.hiveResourceSelector.Name = "hiveResourceSelector";
-      this.hiveResourceSelector.ProgressView = null;
       this.hiveResourceSelector.ReadOnly = false;
       this.hiveResourceSelector.Size = new System.Drawing.Size(549, 591);
Index: branches/GP-MoveOperators/HeuristicLab.Clients.Hive.JobManager/3.3/Views/RefreshableHiveJobView.Designer.cs
===================================================================
--- branches/GP-MoveOperators/HeuristicLab.Clients.Hive.JobManager/3.3/Views/RefreshableHiveJobView.Designer.cs	(revision 8085)
+++ branches/GP-MoveOperators/HeuristicLab.Clients.Hive.JobManager/3.3/Views/RefreshableHiveJobView.Designer.cs	(revision 8206)
@@ -365,5 +365,5 @@
       this.refreshAutomaticallyCheckBox.Text = "&Refresh automatically";
       this.refreshAutomaticallyCheckBox.UseVisualStyleBackColor = true;
-      this.refreshAutomaticallyCheckBox.Validated += new System.EventHandler(this.refreshAutomaticallyCheckBox_Validated);
+      this.refreshAutomaticallyCheckBox.CheckedChanged += new System.EventHandler(this.refreshAutomaticallyCheckBox_CheckedChanged);
       // 
       // infoGroupBox
Index: branches/GP-MoveOperators/HeuristicLab.Clients.Hive.JobManager/3.3/Views/RefreshableHiveJobView.cs
===================================================================
--- branches/GP-MoveOperators/HeuristicLab.Clients.Hive.JobManager/3.3/Views/RefreshableHiveJobView.cs	(revision 8085)
+++ branches/GP-MoveOperators/HeuristicLab.Clients.Hive.JobManager/3.3/Views/RefreshableHiveJobView.cs	(revision 8206)
@@ -42,4 +42,5 @@
   [Content(typeof(RefreshableJob), true)]
   public partial class RefreshableHiveJobView : HeuristicLab.Core.Views.ItemView {
+    private Progress progress;
     private ProgressView progressView;
     private HiveResourceSelectorDialog hiveResourceSelectorDialog;
@@ -55,4 +56,8 @@
     public RefreshableHiveJobView() {
       InitializeComponent();
+      progress = new Progress() {
+        CanBeCanceled = false,
+        ProgressState = ProgressState.Finished
+      };
     }
 
@@ -72,4 +77,5 @@
       Content.Loaded += new EventHandler(Content_Loaded);
       Content.TaskReceived += new EventHandler(Content_TaskReceived);
+      progressView = new ProgressView(this, progress);
     }
 
@@ -87,4 +93,9 @@
       Content.Loaded -= new EventHandler(Content_Loaded);
       Content.TaskReceived -= new EventHandler(Content_TaskReceived);
+      if (progressView != null) {
+        progressView.Content = null;
+        progressView.Dispose();
+        progressView = null;
+      }
       base.DeregisterContentEvents();
     }
@@ -148,14 +159,15 @@
         bool alreadyUploaded = Content.Id != Guid.Empty;
         bool jobsLoaded = Content.HiveTasks != null && Content.HiveTasks.All(x => x.Task.Id != Guid.Empty);
-
-        this.nameTextBox.ReadOnly = !Content.IsControllable || Content.ExecutionState != ExecutionState.Prepared || alreadyUploaded;
-        this.resourceNamesTextBox.ReadOnly = !Content.IsControllable || Content.ExecutionState != ExecutionState.Prepared || alreadyUploaded;
-        this.searchButton.Enabled = Content.IsControllable && !(Content.ExecutionState != ExecutionState.Prepared || alreadyUploaded);
-        this.jobsTreeView.ReadOnly = !Content.IsControllable || Content.ExecutionState != ExecutionState.Prepared || alreadyUploaded;
-
-        this.isPrivilegedCheckBox.Enabled = Content.IsAllowedPrivileged && Content.IsControllable && !(Content.ExecutionState != ExecutionState.Prepared || alreadyUploaded); // TODO: check if user has the rights to do this        
-        this.refreshAutomaticallyCheckBox.Enabled = Content.IsControllable && alreadyUploaded && jobsLoaded && Content.ExecutionState == ExecutionState.Started;
-        this.refreshButton.Enabled = Content.IsDownloadable && alreadyUploaded;
-        this.Locked = !Content.IsControllable || Content.ExecutionState == ExecutionState.Started;
+        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 = Content.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;
       }
       SetEnabledStateOfExecutableButtons();
@@ -342,5 +354,5 @@
         foreach (Resource resource in hiveResourceSelectorDialog.GetSelectedResources()) {
           sb.Append(resource.Name);
-          sb.Append("; ");
+          sb.Append(";");
         }
         resourceNamesTextBox.Text = sb.ToString();
@@ -354,5 +366,5 @@
         var task = System.Threading.Tasks.Task.Factory.StartNew(ResumeJobAsync, Content);
         task.ContinueWith((t) => {
-          FinishProgressView();
+          progress.Finish();
           MessageBox.Show("An error occured resuming the job. See the log for more information.", "HeuristicLab Hive Job Manager", MessageBoxButtons.OK, MessageBoxIcon.Error);
           Content.Log.LogException(t.Exception);
@@ -366,5 +378,5 @@
       var task = System.Threading.Tasks.Task.Factory.StartNew(PauseJobAsync, Content);
       task.ContinueWith((t) => {
-        FinishProgressView();
+        progress.Finish();
         MessageBox.Show("An error occured pausing the job. See the log for more information.", "HeuristicLab Hive Job Manager", MessageBoxButtons.OK, MessageBoxIcon.Error);
         Content.Log.LogException(t.Exception);
@@ -375,5 +387,5 @@
       var task = System.Threading.Tasks.Task.Factory.StartNew(StopJobAsync, Content);
       task.ContinueWith((t) => {
-        FinishProgressView();
+        progress.Finish();
         MessageBox.Show("An error occured stopping the job. See the log for more information.", "HeuristicLab Hive Job Manager", MessageBoxButtons.OK, MessageBoxIcon.Error);
         Content.Log.LogException(t.Exception);
@@ -383,25 +395,22 @@
 
     private void PauseJobAsync(object job) {
-      IProgress prog = new Progress();
-      prog.Status = "Pausing job...";
-      SetProgressView(prog);
+      progress.Status = "Pausing job...";
+      progress.ProgressState = ProgressState.Started;
       HiveClient.PauseJob((RefreshableJob)job);
-      FinishProgressView();
+      progress.Finish();
     }
 
     private void StopJobAsync(object job) {
-      IProgress prog = new Progress();
-      prog.Status = "Stopping job...";
-      SetProgressView(prog);
+      progress.Status = "Stopping job...";
+      progress.ProgressState = ProgressState.Started;
       HiveClient.StopJob((RefreshableJob)job);
-      FinishProgressView();
+      progress.Finish();
     }
 
     private void ResumeJobAsync(object job) {
-      IProgress prog = new Progress();
-      prog.Status = "Resuming job...";
-      SetProgressView(prog);
+      progress.Status = "Resuming job...";
+      progress.ProgressState = ProgressState.Started;
       HiveClient.ResumeJob((RefreshableJob)job);
-      FinishProgressView();
+      progress.Finish();
     }
 
@@ -416,5 +425,5 @@
     }
 
-    private void refreshAutomaticallyCheckBox_Validated(object sender, EventArgs e) {
+    private void refreshAutomaticallyCheckBox_CheckedChanged(object sender, EventArgs e) {
       if (Content != null) Content.RefreshAutomatically = refreshAutomaticallyCheckBox.Checked;
     }
@@ -450,7 +459,7 @@
         startButton.Enabled = pauseButton.Enabled = stopButton.Enabled = resetButton.Enabled = false;
       } else {
-        startButton.Enabled = Content.IsControllable && Content.HiveTasks != null && Content.HiveTasks.Count > 0 && (Content.ExecutionState == ExecutionState.Prepared || Content.ExecutionState == ExecutionState.Paused);
-        pauseButton.Enabled = Content.IsControllable && Content.ExecutionState == ExecutionState.Started;
-        stopButton.Enabled = Content.IsControllable && Content.ExecutionState == ExecutionState.Started;
+        startButton.Enabled = Content.IsControllable && Content.HiveTasks != null && Content.HiveTasks.Count > 0 && (Content.ExecutionState == ExecutionState.Prepared || Content.ExecutionState == ExecutionState.Paused) && !Content.IsProgressing;
+        pauseButton.Enabled = Content.IsControllable && Content.ExecutionState == ExecutionState.Started && !Content.IsProgressing;
+        stopButton.Enabled = Content.IsControllable && Content.ExecutionState == ExecutionState.Started && !Content.IsProgressing;
         resetButton.Enabled = false;
       }
@@ -463,44 +472,8 @@
         Invoke(new EventHandler(Content_IsProgressingChanged), sender, e);
       } else {
-        if (Content != null && Content.IsProgressing) {
-          SetProgressView();
-        } else {
-          FinishProgressView();
-        }
-      }
-    }
-
-    private void SetProgressView() {
-      if (InvokeRequired) {
-        Invoke(new Action(SetProgressView));
-      } else {
-        if (progressView == null) {
-          progressView = new ProgressView(this, Content.Progress);
-        } else {
-          progressView.Progress = Content.Progress;
-        }
-      }
-    }
-
-    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();
+        if (Content != null && Content.Progress != null && Content.IsProgressing) {
+          progressView.Content = Content.Progress;
+        } else if (Content != null) {
+          progressView.Content = progress;
         }
       }
