Index: /trunk/sources/HeuristicLab.Clients.Access.Views/3.3/ClientViews/ClientView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.Access.Views/3.3/ClientViews/ClientView.cs	(revision 8144)
+++ /trunk/sources/HeuristicLab.Clients.Access.Views/3.3/ClientViews/ClientView.cs	(revision 8145)
@@ -35,7 +35,9 @@
 
     private ProgressView progressView;
+    IProgress progress;
 
     public ClientView() {
       InitializeComponent();
+      progressView = new ProgressView(this);
     }
 
@@ -82,9 +84,7 @@
         Invoke(new Action(StartProgressView));
       } else {
-        if (progressView == null) {
-          IProgress prog = new Progress();
-          prog.Status = "Downloading client information. Please be patient.";
-          progressView = new ProgressView(this, prog);
-        }
+        progress = new Progress();
+        progress.Status = "Downloading client information. Please be patient.";
+        progressView.Progress = progress;
       }
     }
@@ -94,9 +94,6 @@
         Invoke(new Action(FinishProgressView));
       } else {
-        if (progressView != null) {
-          progressView.Finish();
-          progressView = null;
-          SetEnabledStateOfControls();
-        }
+        progress.Finish();
+        SetEnabledStateOfControls();
       }
     }
Index: /trunk/sources/HeuristicLab.Clients.Hive.JobManager/3.3/Views/HiveResourceSelector.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.Hive.JobManager/3.3/Views/HiveResourceSelector.cs	(revision 8144)
+++ /trunk/sources/HeuristicLab.Clients.Hive.JobManager/3.3/Views/HiveResourceSelector.cs	(revision 8145)
@@ -42,4 +42,5 @@
     private ISet<TreeNode> filteredTreeNodes;
     private ISet<TreeNode> nodeStore;
+    private IProgress currentProgress;
 
     private ISet<Resource> selectedResources;
@@ -68,4 +69,5 @@
       imageList.Images.Add(HeuristicLab.Common.Resources.VSImageLibrary.MonitorLarge);
       imageList.Images.Add(HeuristicLab.Common.Resources.VSImageLibrary.NetworkCenterLarge);
+      progressView = new ProgressView(this);
     }
 
@@ -74,9 +76,7 @@
         Invoke(new Action(StartProgressView));
       } else {
-        if (progressView == null) {
-          IProgress prog = new Progress();
-          prog.Status = "Downloading resources. Please be patient.";
-          progressView = new ProgressView(this, prog);
-        }
+        currentProgress = new Progress();
+        currentProgress.Status = "Downloading resources. Please be patient.";
+        progressView.Progress = currentProgress;
       }
     }
@@ -86,9 +86,6 @@
         Invoke(new Action(FinishProgressView));
       } else {
-        if (progressView != null) {
-          progressView.Finish();
-          progressView = null;
-          SetEnabledStateOfControls();
-        }
+        currentProgress.Finish();
+        SetEnabledStateOfControls();
       }
     }
Index: /trunk/sources/HeuristicLab.Clients.Hive.JobManager/3.3/Views/RefreshableHiveJobView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.Hive.JobManager/3.3/Views/RefreshableHiveJobView.cs	(revision 8144)
+++ /trunk/sources/HeuristicLab.Clients.Hive.JobManager/3.3/Views/RefreshableHiveJobView.cs	(revision 8145)
@@ -55,4 +55,5 @@
     public RefreshableHiveJobView() {
       InitializeComponent();
+      progressView = new ProgressView(this);
     }
 
@@ -475,9 +476,5 @@
         Invoke(new Action(SetProgressView));
       } else {
-        if (progressView == null) {
-          progressView = new ProgressView(this, Content.Progress);
-        } else {
-          progressView.Progress = Content.Progress;
-        }
+        progressView.Progress = Content.Progress;
       }
     }
@@ -487,9 +484,5 @@
         Invoke(new Action<IProgress>(SetProgressView), progress);
       } else {
-        if (progressView == null) {
-          progressView = new ProgressView(this, progress);
-        } else {
-          progressView.Progress = progress;
-        }
+        progressView.Progress = progress;
       }
     }
@@ -499,9 +492,7 @@
         Invoke(new Action(FinishProgressView));
       } else {
-        if (progressView != null) {
-          progressView.Finish();
-          progressView = null;
-          SetEnabledStateOfControls();
-        }
+        if (Content.Progress != null)
+          Content.Progress.Finish();
+        SetEnabledStateOfControls();
       }
     }
Index: /trunk/sources/HeuristicLab.Clients.Hive.Views/3.3/HiveTasks/OptimizerHiveTaskView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.Hive.Views/3.3/HiveTasks/OptimizerHiveTaskView.cs	(revision 8144)
+++ /trunk/sources/HeuristicLab.Clients.Hive.Views/3.3/HiveTasks/OptimizerHiveTaskView.cs	(revision 8145)
@@ -32,4 +32,5 @@
   public partial class OptimizerHiveTaskView : HiveTaskView {
     private ProgressView progressView;
+    private IProgress progress;
 
     public new OptimizerHiveTask Content {
@@ -44,4 +45,5 @@
     public OptimizerHiveTaskView() {
       InitializeComponent();
+      progressView = new ProgressView(this);
     }
 
@@ -97,7 +99,7 @@
 
     private void PauseTaskAsync() {
-      IProgress prog = new Progress();
-      prog.Status = "Pausing task. Please be patient for the command to take effect.";
-      SetProgressView(prog);
+      progress = new Progress();
+      progress.Status = "Pausing task. Please be patient for the command to take effect.";
+      SetProgressView(progress);
       Content.Pause();
       FinishProgressView();
@@ -105,7 +107,7 @@
 
     private void StopTaskAsync() {
-      IProgress prog = new Progress();
-      prog.Status = "Stopping task. Please be patient for the command to take effect.";
-      SetProgressView(prog);
+      progress = new Progress();
+      progress.Status = "Stopping task. Please be patient for the command to take effect.";
+      SetProgressView(progress);
       Content.Stop();
       FinishProgressView();
@@ -113,7 +115,7 @@
 
     private void ResumeTaskAsync() {
-      IProgress prog = new Progress();
-      prog.Status = "Resuming task. Please be patient for the command to take effect.";
-      SetProgressView(prog);
+      progress = new Progress();
+      progress.Status = "Resuming task. Please be patient for the command to take effect.";
+      SetProgressView(progress);
       Content.Restart();
       FinishProgressView();
@@ -124,9 +126,5 @@
         Invoke(new Action<IProgress>(SetProgressView), progress);
       } else {
-        if (progressView == null) {
-          progressView = new ProgressView(this, progress);
-        } else {
-          progressView.Progress = progress;
-        }
+        progressView.Progress = progress;
       }
     }
@@ -136,9 +134,6 @@
         Invoke(new Action(FinishProgressView));
       } else {
-        if (progressView != null) {
-          progressView.Finish();
-          progressView = null;
-          SetEnabledStateOfControls();
-        }
+        progress.Finish();
+        SetEnabledStateOfControls();
       }
     }
Index: /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/RunCreation/Views/OKBExperimentUploadView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/RunCreation/Views/OKBExperimentUploadView.cs	(revision 8144)
+++ /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/RunCreation/Views/OKBExperimentUploadView.cs	(revision 8145)
@@ -57,7 +57,9 @@
     Problem selectedProblem = null;
     private ProgressView progressView;
+    private IProgress progress;
 
     public OKBExperimentUploadView() {
       InitializeComponent();
+      progressView = new ProgressView(this);
     }
 
@@ -176,7 +178,7 @@
         Invoke(new EventHandler(RunCreationClient_Refreshing), sender, e);
       } else {
-        IProgress prog = new Progress();
-        prog.Status = "Refreshing algorithms and problems...";
-        SetProgressView(prog);
+        progress = new Progress();
+        progress.Status = "Refreshing algorithms and problems...";
+        SetProgressView(progress);
       }
     }
@@ -200,11 +202,11 @@
 
     private void UploadAsync() {
-      IProgress prog = new Progress();
-      prog.Status = "Uploading runs to OKB...";
-      prog.ProgressValue = 0;
+      progress = new Progress();
+      progress.Status = "Uploading runs to OKB...";
+      progress.ProgressValue = 0;
       double count = dataGridView.Rows.Count;
       int i = 0;
 
-      SetProgressView(prog);
+      SetProgressView(progress);
       foreach (DataGridViewRow row in dataGridView.Rows) {
         selectedAlgorithm = algorithms.Where(x => x.Name == row.Cells[algorithmColumnIndex].Value.ToString()).FirstOrDefault();
@@ -217,5 +219,5 @@
         run.Store();
         i++;
-        prog.ProgressValue = ((double)i) / count;
+        progress.ProgressValue = ((double)i) / count;
       }
       FinishProgressView();
@@ -226,9 +228,5 @@
         Invoke(new Action<IProgress>(SetProgressView), progress);
       } else {
-        if (progressView == null) {
-          progressView = new ProgressView(this, progress);
-        } else {
-          progressView.Progress = progress;
-        }
+        progressView.Progress = progress;
       }
     }
@@ -238,10 +236,7 @@
         Invoke(new Action(FinishProgressView));
       } else {
-        if (progressView != null) {
-          progressView.Finish();
-          progressView = null;
-          SetEnabledStateOfControls();
-          ClearRuns();
-        }
+        progress.Finish();
+        SetEnabledStateOfControls();
+        ClearRuns();
       }
     }
Index: /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/Views/ProgressView.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/Views/ProgressView.cs	(revision 8144)
+++ /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/Views/ProgressView.cs	(revision 8145)
@@ -35,4 +35,5 @@
         progress = value;
         RegisterProgressEvents();
+        ShowProgress();
         OnProgressChanged();
       }
@@ -48,20 +49,27 @@
     }
 
-    /// <param name="parentView">This is the view which will be locked while progress is made.</param>
-    public ProgressView(ContentView parentView, IProgress progress) {
+    private void ShowProgress() {
+      this.Left = (parentView.ClientRectangle.Width / 2) - (this.Width / 2);
+      this.Top = (parentView.ClientRectangle.Height / 2) - (this.Height / 2);
+      this.Anchor = AnchorStyles.Left | AnchorStyles.Top;
+
+      LockBackground();
+
+      if (!parentView.Controls.Contains(this)) {
+        parentView.Controls.Add(this);
+      }
+
+      BringToFront();
+      Visible = true;
+    }
+
+    public ProgressView(ContentView parentView) {
       InitializeComponent();
-      Progress = progress;
       CancelEnabled = false;
 
       if (parentView != null) {
         this.parentView = parentView;
-        this.Left = (parentView.ClientRectangle.Width / 2) - (this.Width / 2);
-        this.Top = (parentView.ClientRectangle.Height / 2) - (this.Height / 2);
-        this.Anchor = AnchorStyles.Left | AnchorStyles.Top;
-
-        LockBackground();
-
-        parentView.Controls.Add(this);
-        BringToFront();
+      } else {
+        throw new ArgumentNullException("The parent view is null.");
       }
     }
@@ -72,4 +80,5 @@
       progress.StatusChanged += new EventHandler(progress_StatusChanged);
       progress.ProgressValueChanged += new EventHandler(progress_ProgressValueChanged);
+      progress.Canceled += new EventHandler(progress_Canceled);
     }
 
@@ -79,4 +88,5 @@
       progress.StatusChanged -= new EventHandler(progress_StatusChanged);
       progress.ProgressValueChanged -= new EventHandler(progress_ProgressValueChanged);
+      progress.Canceled -= new EventHandler(progress_Canceled);
     }
 
@@ -91,4 +101,8 @@
     private void progress_ProgressValueChanged(object sender, EventArgs e) {
       UpdateProgressValue();
+    }
+
+    void progress_Canceled(object sender, EventArgs e) {
+      Finish();
     }
 
@@ -128,5 +142,5 @@
     }
 
-    public void Finish() {
+    private void Finish() {
       if (InvokeRequired) {
         Invoke(new Action(Finish));
@@ -139,11 +153,14 @@
           c.Enabled = true;
         DeregisterProgressEvents();
-        Dispose();
+        progress = null;
+        this.Visible = false;
       }
     }
 
     private void cancelButton_Click(object sender, EventArgs e) {
-      OnCanceled();
-      Finish();
+      if (progress != null) {
+        progress.CancelRequested = true;
+        cancelButton.Enabled = false;
+      }
     }
 
@@ -160,10 +177,4 @@
       UpdateProgressValue();
     }
-
-    public event EventHandler Canceled;
-    protected virtual void OnCanceled() {
-      var handler = Canceled;
-      if (handler != null) Canceled(this, EventArgs.Empty);
-    }
   }
 }
Index: /trunk/sources/HeuristicLab.MainForm/3.3/Interfaces/IProgress.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm/3.3/Interfaces/IProgress.cs	(revision 8144)
+++ /trunk/sources/HeuristicLab.MainForm/3.3/Interfaces/IProgress.cs	(revision 8145)
@@ -28,8 +28,14 @@
 
     void Finish();
+    void SignalSuccessfulCancelation();
 
     event EventHandler Finished;
     event EventHandler StatusChanged;
     event EventHandler ProgressValueChanged;
+
+    bool CancelRequested { get; set; }
+    event EventHandler Canceled;
+
+
   }
 }
Index: /trunk/sources/HeuristicLab.MainForm/3.3/Progress.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm/3.3/Progress.cs	(revision 8144)
+++ /trunk/sources/HeuristicLab.MainForm/3.3/Progress.cs	(revision 8145)
@@ -37,4 +37,6 @@
     }
 
+    public bool CancelRequested { get; set; }
+
     private double progressValue;
     public double ProgressValue {
@@ -60,5 +62,18 @@
     }
 
+    public void SignalSuccessfulCancelation() {
+      OnCanceled();
+    }
+
     #region Event Handler
+    public event EventHandler Canceled;
+    private void OnCanceled() {
+      var handler = Canceled;
+      try {
+        if (handler != null) handler(this, EventArgs.Empty);
+      }
+      catch (Exception) { }
+    }
+
     public event EventHandler Finished;
     private void OnFinished() {
