Index: branches/2845_EnhancedProgress/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ProjectJobsView.cs
===================================================================
--- branches/2845_EnhancedProgress/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ProjectJobsView.cs	(revision 16317)
+++ branches/2845_EnhancedProgress/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ProjectJobsView.cs	(revision 16318)
@@ -81,10 +81,10 @@
       base.RegisterContentEvents();
       matrixView.DataGridView.SelectionChanged += DataGridView_SelectionChanged;
-      MainForm.Progress.AddProgressToView(this, progress);
+      MainForm.Progress.Show(this, progress);
     }
 
     protected override void DeregisterContentEvents() {
       matrixView.DataGridView.SelectionChanged -= DataGridView_SelectionChanged;
-      MainForm.Progress.RemoveProgressFromView(this, false);
+      MainForm.Progress.Hide(this, false);
       base.DeregisterContentEvents();
     }
Index: branches/2845_EnhancedProgress/HeuristicLab.Clients.Hive.JobManager/3.3/Views/RefreshableHiveJobView.cs
===================================================================
--- branches/2845_EnhancedProgress/HeuristicLab.Clients.Hive.JobManager/3.3/Views/RefreshableHiveJobView.cs	(revision 16317)
+++ branches/2845_EnhancedProgress/HeuristicLab.Clients.Hive.JobManager/3.3/Views/RefreshableHiveJobView.cs	(revision 16318)
@@ -75,5 +75,5 @@
       Content.Loaded += new EventHandler(Content_Loaded);
       Content.TaskReceived += new EventHandler(Content_TaskReceived);
-      Progress.AddProgressToView(this, Content.Progress);
+      Progress.Show(this, Content.Progress);
     }
 
@@ -90,5 +90,5 @@
       Content.Loaded -= new EventHandler(Content_Loaded);
       Content.TaskReceived -= new EventHandler(Content_TaskReceived);
-      Progress.RemoveProgressFromView(this, false);
+      Progress.Hide(this, false);
       DeregisterHiveExperimentEvents();
       DeregisterHiveTasksEvents();
Index: branches/2845_EnhancedProgress/HeuristicLab.Clients.Hive.Views/3.3/HiveTasks/OptimizerHiveTaskView.cs
===================================================================
--- branches/2845_EnhancedProgress/HeuristicLab.Clients.Hive.Views/3.3/HiveTasks/OptimizerHiveTaskView.cs	(revision 16317)
+++ branches/2845_EnhancedProgress/HeuristicLab.Clients.Hive.Views/3.3/HiveTasks/OptimizerHiveTaskView.cs	(revision 16318)
@@ -58,10 +58,10 @@
       base.RegisterContentEvents();
       Content.IsControllableChanged += new EventHandler(Content_IsControllableChanged);
-      Progress.AddProgressToView(this, Content.Progress);
+      Progress.Show(this, Content.Progress);
     }
 
     protected override void DeregisterContentEvents() {
       Content.IsControllableChanged -= new EventHandler(Content_IsControllableChanged);
-      Progress.RemoveProgressFromView(this, false);
+      Progress.Hide(this, false);
       base.DeregisterContentEvents();
     }
Index: branches/2845_EnhancedProgress/HeuristicLab.MainForm.WindowsForms/3.3/MainForms/MainForm.cs
===================================================================
--- branches/2845_EnhancedProgress/HeuristicLab.MainForm.WindowsForms/3.3/MainForms/MainForm.cs	(revision 16317)
+++ branches/2845_EnhancedProgress/HeuristicLab.MainForm.WindowsForms/3.3/MainForms/MainForm.cs	(revision 16318)
@@ -353,5 +353,5 @@
     /// Adds a <see cref="ProgressView"/> to the <see cref="ContentView"/>s showing the specified content.
     /// </summary>
-    internal void AddProgressToContent(IContent content, IProgress progress, bool addToObjectGraphObjects = true) {
+    internal void AddProgressToContent(IContent content, IProgress progress, bool addToObjectGraphObjects) {
       if (InvokeRequired) {
         Invoke((Action<IContent, IProgress, bool>)AddProgressToContent, content, progress, addToObjectGraphObjects);
@@ -405,5 +405,5 @@
     /// Removes an existing <see cref="ProgressView"/> from the <see cref="ContentView"/>s showing the specified content.
     /// </summary>
-    internal void RemoveProgressFromContent(IContent content, bool finishProgress = true) {
+    internal void RemoveProgressFromContent(IContent content, bool finishProgress) {
       if (InvokeRequired) {
         Invoke((Action<IContent, bool>)RemoveProgressFromContent, content, finishProgress);
@@ -426,5 +426,5 @@
     /// Removes an existing <see cref="ProgressView"/> from the specified view.
     /// </summary>
-    internal void RemoveProgressFromControl(Control control, bool finishProgress = true) {
+    internal void RemoveProgressFromControl(Control control, bool finishProgress) {
       if (InvokeRequired) {
         Invoke((Action<Control, bool>)RemoveProgressFromControl, control, finishProgress);
Index: branches/2845_EnhancedProgress/HeuristicLab.MainForm.WindowsForms/3.3/Progress.cs
===================================================================
--- branches/2845_EnhancedProgress/HeuristicLab.MainForm.WindowsForms/3.3/Progress.cs	(revision 16317)
+++ branches/2845_EnhancedProgress/HeuristicLab.MainForm.WindowsForms/3.3/Progress.cs	(revision 16318)
@@ -129,32 +129,65 @@
     }
 
-    #region Show/Hide Progress
+    #region Show and Hide Progress
     /// <summary>
     /// Shows a started Progress on all Views of the specified content.
     /// </summary>
-    public static IProgress Show(IContent content, string progressMessage, ProgressMode mode = ProgressMode.Determinate, bool addToObjectGraphObjects = true) {
+    public static IProgress Show(IContent content, string progressMessage, ProgressMode mode = ProgressMode.Determinate, Action stopRequestHandler = null, Action cancelRequestHandler = null, bool addToObjectGraphObjects = true) {
+      var progress = CreateAndStartProgress(progressMessage, mode, stopRequestHandler, cancelRequestHandler);
+      Show(content, progress, addToObjectGraphObjects);
+      return progress;
+    }
+
+    /// <summary>
+    /// Shows a started Progress on the specified view.
+    /// </summary>
+    public static IProgress Show(IView view, string progressMessage, ProgressMode mode = ProgressMode.Determinate, Action stopRequestHandler = null, Action cancelRequestHandler = null) {
+      var progress = CreateAndStartProgress(progressMessage, mode, stopRequestHandler, cancelRequestHandler);
+      Show(view, progress);
+      return progress;
+    }
+    /// <summary>
+    /// Shows a started Progress on the specified control.
+    /// </summary>
+    /// <remarks>For backwards compatibility. Use Progress.Show(IView, ...) if possible.</remarks>
+    public static IProgress ShowOnControl(Control control, string progressMessage, ProgressMode mode = ProgressMode.Determinate, Action stopRequestHandler = null, Action cancelRequestHandler = null) {
+      var progress = CreateAndStartProgress(progressMessage, mode, stopRequestHandler, cancelRequestHandler);
+      ShowOnControl(control, progress);
+      return progress;
+    }
+
+    private static IProgress CreateAndStartProgress(string progressMessage, ProgressMode mode, Action stopRequestHandler, Action cancelRequestHandler) {
       var progress = new Progress();
+      if (stopRequestHandler != null) {
+        progress.CanBeStopped = true;
+        progress.StopRequested += (s, a) => stopRequestHandler();
+      }
+      if (cancelRequestHandler != null) {
+        progress.CanBeCanceled = true;
+        progress.CancelRequested += (s, a) => cancelRequestHandler();
+      }
       progress.Start(progressMessage, mode);
-      AddProgressToContent(content, progress, addToObjectGraphObjects);
-      return progress;
-    }
-
-    /// <summary>
-    /// Shows a started Progress on the specified view.
-    /// </summary>
-    public static IProgress Show(IView view, string progressMessage, ProgressMode mode = ProgressMode.Determinate) {
-      var progress = new Progress();
-      progress.Start(progressMessage, mode);
-      AddProgressToView(view, progress);
-      return progress;
-    }
-    /// <summary>
-    /// Shows a started Progress on the specified control.
-    /// </summary>
-    /// <remarks>Use Progress.Show(IView, ...) if possible.</remarks>
-    public static IProgress ShowOnControl(Control control, string progressMessage, ProgressMode mode = ProgressMode.Determinate) {
-      var progress = new Progress();
-      progress.Start(progressMessage, mode);
-      AddProgressToControl(control, progress);
+      return progress;
+    }
+
+    /// <summary>
+    /// Shows an existing progress on all Views of the specified content.
+    /// </summary>
+    public static IProgress Show(IContent content, IProgress progress, bool addToObjectGraphObjects = true) {
+      MainFormManager.GetMainForm<WindowsForms.MainForm>().AddProgressToContent(content, progress, addToObjectGraphObjects);
+      return progress;
+    }
+    /// <summary>
+    /// Shows an existing progress on the specified View.
+    /// </summary>
+    public static IProgress Show(IView view, IProgress progress) {
+      return ShowOnControl((Control)view, progress);
+    }
+    /// <summary>
+    /// Shows an existing progress on the specified control.
+    /// </summary>
+    /// <remarks>For backwards compatibility. Use Progress.Show(IView, ...) if possible.</remarks>
+    public static IProgress ShowOnControl(Control control, IProgress progress) {
+      MainFormManager.GetMainForm<WindowsForms.MainForm>().AddProgressToControl(control, progress);
       return progress;
     }
@@ -163,44 +196,18 @@
     /// Hides the Progress from all Views of the specified content.
     /// </summary>
-    public static void Hide(IContent content) {
-      RemoveProgressFromContent(content);
+    public static void Hide(IContent content, bool finishProgress = true) {
+      MainFormManager.GetMainForm<WindowsForms.MainForm>().RemoveProgressFromContent(content, finishProgress);
     }
     /// <summary>
     /// Hides the Progress from the specified view.
     /// </summary>
-    public static void Hide(IView view) {
-      RemoveProgressFromView(view);
+    public static void Hide(IView view, bool finishProgress = true) {
+      HideFromControl((Control)view, finishProgress);
     }
     /// <summary>
     /// Hides the Progress from the specified control.
     /// </summary>
-    /// <remarks>Use Progress.Hide(IView) if possible.</remarks>
-    public static void HideFromControl(Control control) {
-      RemoveProgressFromControl(control);
-    }
-    #endregion
-
-    #region Interface to MainForm
-    public static IProgress AddProgressToContent(IContent content, IProgress progress, bool addToObjectGraphObjects = true) {
-      MainFormManager.GetMainForm<WindowsForms.MainForm>().AddProgressToContent(content, progress, addToObjectGraphObjects);
-      return progress;
-    }
-    public static IProgress AddProgressToView(IView view, IProgress progress) {
-      //return AddProgressToControl(MainFormManager.GetMainForm<WindowsForms.MainForm>().GetForm(view), progress);
-      return AddProgressToControl((Control)view, progress);
-    }
-    public static IProgress AddProgressToControl(Control control, IProgress progress) {
-      MainFormManager.GetMainForm<WindowsForms.MainForm>().AddProgressToControl(control, progress);
-      return progress;
-    }
-
-    public static void RemoveProgressFromContent(IContent content, bool finishProgress = true) {
-      MainFormManager.GetMainForm<WindowsForms.MainForm>().RemoveProgressFromContent(content, finishProgress);
-    }
-    public static void RemoveProgressFromView(IView view, bool finishProgress = true) {
-      //RemoveProgressFromControl(MainFormManager.GetMainForm<WindowsForms.MainForm>().GetForm(view), finishProgress);
-      RemoveProgressFromControl((Control)view, finishProgress);
-    }
-    public static void RemoveProgressFromControl(Control control, bool finishProgress = true) {
+    /// <remarks>For backwards compatibility. Use Progress.Hide(IView) if possible.</remarks>
+    public static void HideFromControl(Control control, bool finishProgress = true) {
       MainFormManager.GetMainForm<WindowsForms.MainForm>().RemoveProgressFromControl(control, finishProgress);
     }
Index: branches/2845_EnhancedProgress/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/InteractiveSymbolicDataAnalysisSolutionSimplifierView.cs
===================================================================
--- branches/2845_EnhancedProgress/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/InteractiveSymbolicDataAnalysisSolutionSimplifierView.cs	(revision 16317)
+++ branches/2845_EnhancedProgress/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/InteractiveSymbolicDataAnalysisSolutionSimplifierView.cs	(revision 16318)
@@ -154,5 +154,5 @@
       Content.ProblemDataChanged += Content_Changed;
       treeChart.Repainted += treeChart_Repainted;
-      Progress.AddProgressToControl(grpSimplify, progress);
+      Progress.ShowOnControl(grpSimplify, progress);
       progress.StopRequested += progress_StopRequested;
     }
@@ -162,5 +162,5 @@
       Content.ProblemDataChanged -= Content_Changed;
       treeChart.Repainted -= treeChart_Repainted;
-      Progress.RemoveProgressFromControl(grpSimplify, false);
+      Progress.HideFromControl(grpSimplify, false);
       progress.StopRequested -= progress_StopRequested;
     }
