Index: /trunk/sources/HeuristicLab.Clients.Hive.JobManager/3.3/Views/HiveResourceSelector.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.Hive.JobManager/3.3/Views/HiveResourceSelector.cs	(revision 9893)
+++ /trunk/sources/HeuristicLab.Clients.Hive.JobManager/3.3/Views/HiveResourceSelector.cs	(revision 9894)
@@ -42,7 +42,5 @@
     private ISet<TreeNode> filteredTreeNodes;
     private ISet<TreeNode> nodeStore;
-    private Progress progress;
-    private ProgressView progressView;
-
+    
     private ISet<Resource> selectedResources;
     public ISet<Resource> SelectedResources {
@@ -64,26 +62,12 @@
       imageList.Images.Add(HeuristicLab.Common.Resources.VSImageLibrary.MonitorLarge);
       imageList.Images.Add(HeuristicLab.Common.Resources.VSImageLibrary.NetworkCenterLarge);
-      progress = new Progress();
-    }
-
-    protected override void DeregisterContentEvents() {
-      if (progressView != null) {
-        progressView.Dispose();
-        progressView = null;
-      }
-      base.DeregisterContentEvents();
-    }
-
-    protected override void RegisterContentEvents() {
-      base.RegisterContentEvents();
-      progressView = new ProgressView(this, progress);
-    }
-
+    }
+  
     public void StartProgressView() {
       if (InvokeRequired) {
         Invoke(new Action(StartProgressView));
       } else {
-        progress.Status = "Downloading resources. Please be patient.";
-        progress.ProgressState = ProgressState.Started;
+        var message = "Downloading resources. Please be patient.";
+        MainFormManager.GetMainForm<HeuristicLab.MainForm.WindowsForms.MainForm>().AddOperationProgressToView(this, message);
       }
     }
@@ -93,5 +77,5 @@
         Invoke(new Action(FinishProgressView));
       } else {
-        progress.Finish();
+        MainFormManager.GetMainForm<HeuristicLab.MainForm.WindowsForms.MainForm>().RemoveOperationProgressFromView(this);
       }
     }
Index: /trunk/sources/HeuristicLab.Clients.Hive.JobManager/3.3/Views/RefreshableHiveJobListView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.Hive.JobManager/3.3/Views/RefreshableHiveJobListView.cs	(revision 9893)
+++ /trunk/sources/HeuristicLab.Clients.Hive.JobManager/3.3/Views/RefreshableHiveJobListView.cs	(revision 9894)
@@ -34,7 +34,4 @@
   [Content(typeof(ItemCollection<RefreshableJob>), false)]
   public partial class RefreshableHiveJobListView : HeuristicLab.Core.Views.ItemCollectionView<RefreshableJob> {
-    private Progress progress;
-    private ProgressView progressView;
-
     public RefreshableHiveJobListView() {
       InitializeComponent();
@@ -49,7 +46,4 @@
 
       this.itemsListView.ListViewItemSorter = new ListViewItemDateComparer(0, SortOrder.Ascending);
-
-      progress = new Progress();
-      progressView = new ProgressView(this, progress);
     }
 
@@ -115,5 +109,5 @@
 
         task.ContinueWith((t) => {
-          progress.Finish();
+          MainFormManager.GetMainForm<HeuristicLab.MainForm.WindowsForms.MainForm>().RemoveOperationProgressFromView(this);
           ErrorHandling.ShowErrorDialog("An error occured while deleting the job. ", t.Exception);
         }, TaskContinuationOptions.OnlyOnFaulted);
@@ -126,9 +120,9 @@
 
     private void DeleteHiveJobsAsync(object items) {
-      progress.Start("Deleting job...");
+      MainFormManager.GetMainForm<HeuristicLab.MainForm.WindowsForms.MainForm>().AddOperationProgressToView(this, "Deleting job...");
       foreach (RefreshableJob item in (List<RefreshableJob>)items) {
         Content.Remove(item);
       }
-      progress.Finish();
+      MainFormManager.GetMainForm<HeuristicLab.MainForm.WindowsForms.MainForm>().RemoveOperationProgressFromView(this);
     }
 
@@ -222,6 +216,4 @@
       if (disposing) {
         if (components != null) components.Dispose();
-        progressView.Dispose();
-        progressView = null;
       }
       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 9893)
+++ /trunk/sources/HeuristicLab.Clients.Hive.JobManager/3.3/Views/RefreshableHiveJobView.cs	(revision 9894)
@@ -42,5 +42,4 @@
   [Content(typeof(RefreshableJob), true)]
   public partial class RefreshableHiveJobView : HeuristicLab.Core.Views.ItemView {
-    private ProgressView progressView;
     private HiveResourceSelectorDialog hiveResourceSelectorDialog;
     private bool SuppressEvents { get; set; }
@@ -72,5 +71,5 @@
       Content.Loaded += new EventHandler(Content_Loaded);
       Content.TaskReceived += new EventHandler(Content_TaskReceived);
-      progressView = new ProgressView(this, Content.Progress);
+      MainFormManager.GetMainForm<HeuristicLab.MainForm.WindowsForms.MainForm>().AddOperationProgressToView(this, Content.Progress);
     }
 
@@ -87,8 +86,5 @@
       Content.Loaded -= new EventHandler(Content_Loaded);
       Content.TaskReceived -= new EventHandler(Content_TaskReceived);
-      if (progressView != null) {
-        progressView.Dispose();
-        progressView = null;
-      }
+      MainFormManager.GetMainForm<HeuristicLab.MainForm.WindowsForms.MainForm>().RemoveOperationProgressFromView(this, false);
       DeregisterHiveExperimentEvents();
       DeregisterHiveTasksEvents();
@@ -251,38 +247,5 @@
         SetEnabledStateOfControls();
     }
-    private void Content_Prepared(object sender, EventArgs e) {
-      if (InvokeRequired)
-        Invoke(new EventHandler(Content_Prepared), sender, e);
-      else {
-        nameTextBox.Enabled = true;
-        Locked = false;
-        SetEnabledStateOfControls();
-      }
-    }
-    private void Content_Started(object sender, EventArgs e) {
-      if (InvokeRequired)
-        Invoke(new EventHandler(Content_Started), sender, e);
-      else {
-        nameTextBox.Enabled = false;
-        SetEnabledStateOfControls();
-      }
-    }
-    private void Content_Paused(object sender, EventArgs e) {
-      if (InvokeRequired)
-        Invoke(new EventHandler(Content_Paused), sender, e);
-      else {
-        nameTextBox.Enabled = true;
-        SetEnabledStateOfControls();
-      }
-    }
-    private void Content_Stopped(object sender, EventArgs e) {
-      if (InvokeRequired)
-        Invoke(new EventHandler(Content_Stopped), sender, e);
-      else {
-        nameTextBox.Enabled = true;
-        Locked = false;
-        SetEnabledStateOfControls();
-      }
-    }
+
     private void Content_ExecutionTimeChanged(object sender, EventArgs e) {
       if (InvokeRequired)
Index: /trunk/sources/HeuristicLab.Clients.Hive.Views/3.3/HiveTasks/OptimizerHiveTaskView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.Hive.Views/3.3/HiveTasks/OptimizerHiveTaskView.cs	(revision 9893)
+++ /trunk/sources/HeuristicLab.Clients.Hive.Views/3.3/HiveTasks/OptimizerHiveTaskView.cs	(revision 9894)
@@ -32,6 +32,5 @@
   public partial class OptimizerHiveTaskView : HiveTaskView {
     private Progress progress;
-    private ProgressView progressView;
-
+    
     public new OptimizerHiveTask Content {
       get { return (OptimizerHiveTask)base.Content; }
@@ -61,13 +60,10 @@
       base.RegisterContentEvents();
       Content.IsControllableChanged += new EventHandler(Content_IsControllableChanged);
-      progressView = new ProgressView(this, progress);
+      MainFormManager.GetMainForm<HeuristicLab.MainForm.WindowsForms.MainForm>().AddOperationProgressToView(this, progress);
     }
 
     protected override void DeregisterContentEvents() {
       Content.IsControllableChanged -= new EventHandler(Content_IsControllableChanged);
-      if (progressView != null) {
-        progressView.Dispose();
-        progressView = null;
-      }
+      MainFormManager.GetMainForm<HeuristicLab.MainForm.WindowsForms.MainForm>().RemoveOperationProgressFromView(this, false);
       base.DeregisterContentEvents();
     }
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 9893)
+++ /trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/RunCreation/Views/OKBExperimentUploadView.cs	(revision 9894)
@@ -54,10 +54,7 @@
     Algorithm selectedAlgorithm = null;
     Problem selectedProblem = null;
-    private ProgressView progressView;
-    private Progress progress;
 
     public OKBExperimentUploadView() {
       InitializeComponent();
-      progress = new Progress();
     }
 
@@ -93,5 +90,4 @@
       RunCreationClient.Instance.Refreshing += new EventHandler(RunCreationClient_Refreshing);
       RunCreationClient.Instance.Refreshed += new EventHandler(RunCreationClient_Refreshed);
-      progressView = new ProgressView(this, progress);
     }
 
@@ -99,8 +95,5 @@
       RunCreationClient.Instance.Refreshing -= new EventHandler(RunCreationClient_Refreshing);
       RunCreationClient.Instance.Refreshed -= new EventHandler(RunCreationClient_Refreshed);
-      if (progressView != null) {
-        progressView.Dispose();
-        progressView = null;
-      }
+
       base.DeregisterContentEvents();
     }
@@ -194,6 +187,6 @@
         Invoke(new EventHandler(RunCreationClient_Refreshing), sender, e);
       } else {
-        progress.Status = "Refreshing algorithms and problems...";
-        progress.ProgressState = ProgressState.Started;
+        var message = "Refreshing algorithms and problems...";
+        MainFormManager.GetMainForm<HeuristicLab.MainForm.WindowsForms.MainForm>().AddOperationProgressToView(this, message);
       }
     }
@@ -203,5 +196,5 @@
         Invoke(new EventHandler(RunCreationClient_Refreshed), sender, e);
       } else {
-        progress.Finish();
+        MainFormManager.GetMainForm<HeuristicLab.MainForm.WindowsForms.MainForm>().RemoveOperationProgressFromView(this);
         SetEnabledStateOfControls();
       }
@@ -211,5 +204,5 @@
       var task = System.Threading.Tasks.Task.Factory.StartNew(UploadAsync);
       task.ContinueWith((t) => {
-        progress.Finish();
+        MainFormManager.GetMainForm<HeuristicLab.MainForm.WindowsForms.MainForm>().RemoveOperationProgressFromView(this);
         PluginInfrastructure.ErrorHandling.ShowErrorDialog("An exception occured while uploading the runs to the OKB.", t.Exception);
       }, TaskContinuationOptions.OnlyOnFaulted);
@@ -217,7 +210,6 @@
 
     private void UploadAsync() {
-      progress.Status = "Uploading runs to OKB...";
-      progress.ProgressValue = 0;
-      progress.ProgressState = ProgressState.Started;
+      var message = "Uploading runs to OKB...";
+      IProgress progress = MainFormManager.GetMainForm<HeuristicLab.MainForm.WindowsForms.MainForm>().AddOperationProgressToView(this, message);
       double count = dataGridView.Rows.Count;
       int i = 0;
@@ -234,5 +226,5 @@
         progress.ProgressValue = ((double)i) / count;
       }
-      progress.Finish();
+      MainFormManager.GetMainForm<HeuristicLab.MainForm.WindowsForms.MainForm>().RemoveOperationProgressFromView(this);
       ClearRuns();
     }
Index: /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/Controls/ProgressView.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/Controls/ProgressView.cs	(revision 9893)
+++ /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/Controls/ProgressView.cs	(revision 9894)
@@ -24,5 +24,5 @@
 
 namespace HeuristicLab.MainForm.WindowsForms {
-  public sealed partial class ProgressView : UserControl {
+  internal sealed partial class ProgressView : UserControl {
     private readonly Control control;
     public Control Control {
@@ -46,4 +46,18 @@
         ShowProgress();
       RegisterContentEvents();
+    }
+
+    /// <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) {
+      DeregisterContentEvents();
+      HideProgress();
+
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
     }
 
Index: /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/Controls/ProgressView.designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/Controls/ProgressView.designer.cs	(revision 9893)
+++ /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/Controls/ProgressView.designer.cs	(revision 9894)
@@ -27,16 +27,5 @@
     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) {
-      DeregisterContentEvents();
-      if (disposing && (components != null)) {
-        components.Dispose();
-      }
-      base.Dispose(disposing);
-    }
-
+   
     #region Component Designer generated code
 
Index: /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/MainForms/MainForm.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/MainForms/MainForm.cs	(revision 9893)
+++ /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/MainForms/MainForm.cs	(revision 9894)
@@ -353,5 +353,5 @@
     /// Adds a <see cref="ProgressView"/> to the <see cref="ContentView"/>s showing the specified content.
     /// </summary>
-    public void AddOperationProgressToContent(IContent content, string progressMessage, bool addToObjectGraphObjects = true) {
+    public IProgress AddOperationProgressToContent(IContent content, string progressMessage, bool addToObjectGraphObjects = true) {
       if (contentProgressLookup.ContainsKey(content))
         throw new ArgumentException("A progress is already registered for the specified content.", "content");
@@ -373,4 +373,5 @@
 
       contentProgressLookup[content] = progress;
+      return progress;
     }
 
@@ -378,12 +379,26 @@
     /// Adds a <see cref="ProgressView"/> to the specified view.
     /// </summary>
-    public void AddOperationProgressToView(IView view, string progressMessage) {
-      if (viewProgressLookup.ContainsKey(view))
-        throw new ArgumentException("A progress is already registered for the specified view.", "view");
+    public IProgress AddOperationProgressToView(IView view, string progressMessage) {
+      var progress = new Progress(progressMessage, ProgressState.Started);
+      AddOperationProgressToView(view, progress);
+      return progress;
+    }
+
+    public void AddOperationProgressToView(IView view, IProgress progress) {
+      if (view == null) throw new ArgumentNullException("view", "The view must not be null.");
+      if (progress == null) throw new ArgumentNullException("progress", "The progress must not be null.");
 
       var control = view as Control;
       if (control == null) throw new ArgumentException("The passed view must be a control.", "view");
 
-      var progress = new Progress(progressMessage, ProgressState.Started);
+      IProgress oldProgress;
+      if (viewProgressLookup.TryGetValue(view, out oldProgress)) {
+        foreach (var progressView in progressViews.Where(v => v.Content == oldProgress).ToList()) {
+          progressView.Dispose();
+          progressViews.Remove(progressView);
+        }
+        viewProgressLookup.Remove(view);
+      }
+
       progressViews.Add(new ProgressView(control, progress));
       viewProgressLookup[view] = progress;
@@ -393,10 +408,10 @@
     /// Removes an existing <see cref="ProgressView"/> from the <see cref="ContentView"/>s showing the specified content.
     /// </summary>
-    public void RemoveOperationProgressFromContent(IContent content) {
+    public void RemoveOperationProgressFromContent(IContent content, bool finishProgress = true) {
       IProgress progress;
       if (!contentProgressLookup.TryGetValue(content, out progress))
         throw new ArgumentException("No progress is registered for the specified content.", "content");
 
-      progress.Finish();
+      if (finishProgress) progress.Finish();
       foreach (var progressView in progressViews.Where(v => v.Content == progress).ToList()) {
         progressView.Dispose();
@@ -409,10 +424,10 @@
     /// Removes an existing <see cref="ProgressView"/> from the specified view.
     /// </summary>
-    public void RemoveOperationProgressFromView(IView view) {
+    public void RemoveOperationProgressFromView(IView view, bool finishProgress = true) {
       IProgress progress;
       if (!viewProgressLookup.TryGetValue(view, out progress))
         throw new ArgumentException("No progress is registered for the specified view.", "view");
 
-      progress.Finish();
+      if (finishProgress) progress.Finish();
       foreach (var progressView in progressViews.Where(v => v.Content == progress).ToList()) {
         progressView.Dispose();
Index: /trunk/sources/HeuristicLab.MainForm/3.3/Interfaces/IProgress.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm/3.3/Interfaces/IProgress.cs	(revision 9893)
+++ /trunk/sources/HeuristicLab.MainForm/3.3/Interfaces/IProgress.cs	(revision 9894)
@@ -41,5 +41,5 @@
     /// If it is reused it may be Started again.
     /// </summary>
-    ProgressState ProgressState { get; set; }
+    ProgressState ProgressState { get; }
     /// <summary>
     /// Returns whether the operation can be canceled or not.
@@ -54,6 +54,5 @@
     /// </summary>
     /// <exception cref="NotSupportedException">Thrown when cancellation is not supported.</exception>
-    /// <param name="timeoutMs">The operation is given a certain timeout to cancel. If the operation doesn't cancel in this time it will be forcibly closed.</param>
-    void Cancel(int timeoutMs = 0);
+    void Cancel();
     /// <summary>
     /// Sets the ProgressValue to 1 and the ProgressState to Finished.
@@ -61,7 +60,10 @@
     void Finish();
 
+    /// <summary>
+    /// Starts or restarts a Progress. 
+    /// </summary>
+    void Start();
+
     void Start(string status);
-
-    void Start();
 
     /// <summary>
@@ -82,7 +84,7 @@
     event EventHandler CanBeCanceledChanged;
     /// <summary>
-    /// A cancelation is requested with a certain timeout (in ms) in which it should occur gracefully. If the timeout is surpassed, it should be forcibly canceled.
+    /// A cancelation is requested.
     /// </summary>
-    event EventHandler<EventArgs<int>> CancelRequested;
+    event EventHandler CancelRequested;
   }
 }
Index: /trunk/sources/HeuristicLab.MainForm/3.3/Progress.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm/3.3/Progress.cs	(revision 9893)
+++ /trunk/sources/HeuristicLab.MainForm/3.3/Progress.cs	(revision 9894)
@@ -21,5 +21,4 @@
 
 using System;
-using HeuristicLab.Common;
 
 namespace HeuristicLab.MainForm {
@@ -50,5 +49,5 @@
     public ProgressState ProgressState {
       get { return progressState; }
-      set {
+      private set {
         if (progressState != value) {
           progressState = value;
@@ -83,7 +82,7 @@
     }
 
-    public void Cancel(int timeoutMs = 0) {
+    public void Cancel() {
       if (canBeCanceled)
-        OnCancelRequested(timeoutMs);
+        OnCancelRequested();
     }
 
@@ -126,12 +125,11 @@
       var handler = CanBeCanceledChanged;
       if (handler != null) handler(this, EventArgs.Empty);
-
     }
 
-    public event EventHandler<EventArgs<int>> CancelRequested;
-    private void OnCancelRequested(int timeoutMs) {
+    public event EventHandler CancelRequested;
+    private void OnCancelRequested() {
       var handler = CancelRequested;
       if (handler != null) throw new NotSupportedException("Cancel request was ignored.");
-      else handler(this, new EventArgs<int>(timeoutMs));
+      else handler(this, EventArgs.Empty);
     }
     #endregion
