Index: /branches/2845_EnhancedProgress/HeuristicLab.Algorithms.Benchmarks/3.3/BenchmarkAlgorithm.cs
===================================================================
--- /branches/2845_EnhancedProgress/HeuristicLab.Algorithms.Benchmarks/3.3/BenchmarkAlgorithm.cs	(revision 16313)
+++ /branches/2845_EnhancedProgress/HeuristicLab.Algorithms.Benchmarks/3.3/BenchmarkAlgorithm.cs	(revision 16314)
@@ -39,6 +39,8 @@
   [Creatable(CreatableAttribute.Categories.TestingAndAnalysis, Priority = 130)]
   [StorableClass]
-  public sealed class BenchmarkAlgorithm : IAlgorithm {
+  public sealed class BenchmarkAlgorithm : IAlgorithm, IStorableContent {
     private CancellationTokenSource cancellationTokenSource;
+
+    public string Filename { get; set; }
 
     public string ItemName {
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 16313)
+++ /branches/2845_EnhancedProgress/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ProjectJobsView.cs	(revision 16314)
@@ -81,10 +81,10 @@
       base.RegisterContentEvents();
       matrixView.DataGridView.SelectionChanged += DataGridView_SelectionChanged;
-      MainFormManager.GetMainForm<HeuristicLab.MainForm.WindowsForms.MainForm>().AddProgressToView(this, progress);
+      MainForm.Progress.AddProgressToView(this, progress);
     }
 
     protected override void DeregisterContentEvents() {
       matrixView.DataGridView.SelectionChanged -= DataGridView_SelectionChanged;
-      MainFormManager.GetMainForm<HeuristicLab.MainForm.WindowsForms.MainForm>().RemoveProgressFromView(this, false);
+      MainForm.Progress.RemoveProgressFromView(this, false);
       base.DeregisterContentEvents();
     }
@@ -191,5 +191,5 @@
 
         if (result == DialogResult.Yes) {
-          progress.Start("Resuming job(s)...");
+          progress.StartMarquee("Resuming job(s)...");
           SetEnabledStateOfControls();
           var task = System.Threading.Tasks.Task.Factory.StartNew(ResumeJobsAsync, jobs);
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 16313)
+++ /branches/2845_EnhancedProgress/HeuristicLab.Clients.Hive.JobManager/3.3/Views/RefreshableHiveJobView.cs	(revision 16314)
@@ -75,5 +75,5 @@
       Content.Loaded += new EventHandler(Content_Loaded);
       Content.TaskReceived += new EventHandler(Content_TaskReceived);
-      MainFormManager.GetMainForm<HeuristicLab.MainForm.WindowsForms.MainForm>().AddProgressToView(this, Content.Progress);
+      Progress.AddProgressToView(this, Content.Progress);
     }
 
@@ -90,5 +90,5 @@
       Content.Loaded -= new EventHandler(Content_Loaded);
       Content.TaskReceived -= new EventHandler(Content_TaskReceived);
-      MainFormManager.GetMainForm<HeuristicLab.MainForm.WindowsForms.MainForm>().RemoveProgressFromView(this, false);
+      Progress.RemoveProgressFromView(this, false);
       DeregisterHiveExperimentEvents();
       DeregisterHiveTasksEvents();
@@ -133,6 +133,6 @@
           stateLogViewHost.Content = null;
         } else {
-          if(Content.Job != null 
-            && Content.Job.Id != Guid.Empty 
+          if (Content.Job != null
+            && Content.Job.Id != Guid.Empty
             && !originalJobProjectAssignment.ContainsKey(Content.Job.Id)) {
             originalJobProjectAssignment.Add(Content.Job.Id, Content.Job.ProjectId);
@@ -159,5 +159,5 @@
                 projectNameTextBox.Text = HiveClient.Instance.GetProjectAncestry(Content.Job.ProjectId);
                 projectNameTextBox.Text += "   (" + (cores.HasValue ? cores.Value.ToString() : "0") + " cores)";
-              }                
+              }
             }
           } else if (Content.Job != null && Content.Job.ProjectId != Guid.Empty) {
@@ -167,5 +167,5 @@
             }
 
-            if(hiveResourceSelectorDialog == null)
+            if (hiveResourceSelectorDialog == null)
               hiveResourceSelectorDialog = new HiveResourceSelectorDialog(Content.Job.Id, Content.Job.ProjectId);
 
@@ -203,5 +203,5 @@
           executionTimeTextBox.Text = Content.ExecutionTime.ToString();
           refreshAutomaticallyCheckBox.Checked = Content.RefreshAutomatically;
-          
+
           logView.Content = Content.Log;
           lock (runCollectionViewLocker) {
@@ -408,5 +408,5 @@
       if (hiveResourceSelectorDialog == null) {
         hiveResourceSelectorDialog = new HiveResourceSelectorDialog(Content.Job.Id, Content.Job.ProjectId);
-      } else if(hiveResourceSelectorDialog.JobId != Content.Job.Id) {
+      } else if (hiveResourceSelectorDialog.JobId != Content.Job.Id) {
         hiveResourceSelectorDialog.JobId = Content.Job.Id;
         hiveResourceSelectorDialog.SelectedProjectId = Content.Job.ProjectId;
@@ -418,5 +418,5 @@
           hiveResourceSelectorDialog.ProjectId = Guid.Empty;
         }
-      } else if(hiveResourceSelectorDialog.JobId == Guid.Empty && Content.Job.Id == Guid.Empty) {
+      } else if (hiveResourceSelectorDialog.JobId == Guid.Empty && Content.Job.Id == Guid.Empty) {
         hiveResourceSelectorDialog.JobId = Content.Job.Id;
         hiveResourceSelectorDialog.ProjectId = Guid.Empty;
@@ -430,5 +430,5 @@
       if (hiveResourceSelectorDialog.ShowDialog(this) == DialogResult.OK) {
         selectedProject = hiveResourceSelectorDialog.SelectedProject;
-        if(selectedProject != null) {       
+        if (selectedProject != null) {
           Content.Job.ProjectId = selectedProject.Id;
           Content.Job.ResourceIds = hiveResourceSelectorDialog.SelectedResources.Select(x => x.Id).ToList();
@@ -582,6 +582,6 @@
         startButton.Enabled = pauseButton.Enabled = stopButton.Enabled = false;
       } else {
-        startButton.Enabled = Content.IsControllable && Content.HiveTasks != null && Content.HiveTasks.Count > 0 
-          && Content.Job.ProjectId != Guid.Empty && Content.Job.ResourceIds != null  && Content.Job.ResourceIds.Any() 
+        startButton.Enabled = Content.IsControllable && Content.HiveTasks != null && Content.HiveTasks.Count > 0
+          && Content.Job.ProjectId != Guid.Empty && Content.Job.ResourceIds != null && Content.Job.ResourceIds.Any()
           && (Content.ExecutionState == ExecutionState.Prepared || Content.ExecutionState == ExecutionState.Paused) && !Content.IsProgressing;
         pauseButton.Enabled = Content.IsControllable && Content.ExecutionState == ExecutionState.Started && !Content.IsProgressing;
@@ -589,5 +589,5 @@
       }
     }
-   
+
     private Project GetProject(Guid projectId) {
       return HiveServiceLocator.Instance.CallHiveService(s => s.GetProject(projectId));
@@ -595,5 +595,5 @@
 
     private void UpdateSelectorDialog() {
-      if(hiveResourceSelectorDialog != null) {
+      if (hiveResourceSelectorDialog != null) {
         hiveResourceSelectorDialog = null;
         //hiveResourceSelectorDialog.JobId = Content.Job.Id;
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 16313)
+++ /branches/2845_EnhancedProgress/HeuristicLab.Clients.Hive.Views/3.3/HiveTasks/OptimizerHiveTaskView.cs	(revision 16314)
@@ -58,10 +58,10 @@
       base.RegisterContentEvents();
       Content.IsControllableChanged += new EventHandler(Content_IsControllableChanged);
-      MainFormManager.GetMainForm<HeuristicLab.MainForm.WindowsForms.MainForm>().AddProgressToView(this, Content.Progress);
+      Progress.AddProgressToView(this, Content.Progress);
     }
 
     protected override void DeregisterContentEvents() {
       Content.IsControllableChanged -= new EventHandler(Content_IsControllableChanged);
-      MainFormManager.GetMainForm<HeuristicLab.MainForm.WindowsForms.MainForm>().RemoveProgressFromView(this, false);
+      Progress.RemoveProgressFromView(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 16313)
+++ /branches/2845_EnhancedProgress/HeuristicLab.MainForm.WindowsForms/3.3/MainForms/MainForm.cs	(revision 16314)
@@ -353,5 +353,5 @@
     /// Adds a <see cref="ProgressView"/> to the <see cref="ContentView"/>s showing the specified content.
     /// </summary>
-    public void AddProgressToContent(IContent content, IProgress progress, bool addToObjectGraphObjects = true) {
+    internal void AddProgressToContent(IContent content, IProgress progress, bool addToObjectGraphObjects = true) {
       if (InvokeRequired) {
         Invoke((Action<IContent, IProgress, bool>)AddProgressToContent, content, progress, addToObjectGraphObjects);
@@ -381,5 +381,5 @@
     /// Adds a <see cref="ProgressView"/> to the specified view.
     /// </summary>
-    public void AddProgressToView(Control control, IProgress progress) {
+    internal void AddProgressToView(Control control, IProgress progress) {
       if (InvokeRequired) {
         Invoke((Action<Control, IProgress>)AddProgressToView, control, progress);
@@ -405,5 +405,5 @@
     /// Removes an existing <see cref="ProgressView"/> from the <see cref="ContentView"/>s showing the specified content.
     /// </summary>
-    public void RemoveProgressFromContent(IContent content, bool finishProgress = true) {
+    internal void RemoveProgressFromContent(IContent content, bool finishProgress = true) {
       if (InvokeRequired) {
         Invoke((Action<IContent, bool>)RemoveProgressFromContent, content, finishProgress);
@@ -426,5 +426,5 @@
     /// Removes an existing <see cref="ProgressView"/> from the specified view.
     /// </summary>
-    public void RemoveProgressFromView(Control control, bool finishProgress = true) {
+    internal void RemoveProgressFromView(Control control, bool finishProgress = true) {
       if (InvokeRequired) {
         Invoke((Action<Control, bool>)RemoveProgressFromView, control, finishProgress);
Index: /branches/2845_EnhancedProgress/HeuristicLab.MainForm.WindowsForms/3.3/Progress.cs
===================================================================
--- /branches/2845_EnhancedProgress/HeuristicLab.MainForm.WindowsForms/3.3/Progress.cs	(revision 16313)
+++ /branches/2845_EnhancedProgress/HeuristicLab.MainForm.WindowsForms/3.3/Progress.cs	(revision 16314)
@@ -140,47 +140,65 @@
       var progress = new Progress();
       progress.Start(progressMessage, initialProgressValue);
+      AddProgressToContent(content, progress, addToObjectGraphObjects);
+      return progress;
+    }
+    /// <summary>
+    /// Shows a started Progress in Marquee-mode on all Views of the specified content.
+    /// </summary>
+    public static IProgress ShowMarquee(IContent content, string progressMessage, bool addToObjectGraphObjects = true) {
+      var progress = new Progress();
+      progress.StartMarquee(progressMessage);
+      AddProgressToContent(content, progress, addToObjectGraphObjects);
+      return progress;
+    }
+
+    /// <summary>
+    /// Shows a started Progress in Continuous-mode on the specified view.
+    /// </summary>
+    public static IProgress Show(Control control, string progressMessage, double initialProgressValue = 0) {
+      var progress = new Progress();
+      progress.Start(progressMessage, initialProgressValue);
+      AddProgressToView(control, progress);
+      return progress;
+    }
+    /// <summary>
+    /// Shows a started Progress in Marquee-mode on the specified view.
+    /// </summary>
+    public static IProgress ShowMarquee(Control control, string progressMessage) {
+      var progress = new Progress();
+      progress.StartMarquee(progressMessage);
+      AddProgressToView(control, progress);
+      return progress;
+    }
+
+    /// <summary>
+    /// Hides the Progress from all Views of the specified content.
+    /// </summary>
+    public static void Hide(IContent content) {
+      RemoveProgressFromContent(content);
+    }
+    /// <summary>
+    /// Hides the Progress from the specified view.
+    /// </summary>
+    public static void Hide(Control control) {
+      RemoveProgressFromView(control);
+    }
+    #endregion
+
+    #region Interface to from MainForm
+    public static IProgress AddProgressToContent(IContent content, IProgress progress, bool addToObjectGraphObjects = true) {
       MainFormManager.GetMainForm<WindowsForms.MainForm>().AddProgressToContent(content, progress, addToObjectGraphObjects);
       return progress;
     }
-    /// <summary>
-    /// Shows a started Progress in Marquee-mode on all Views of the specified content.
-    /// </summary>
-    public static IProgress ShowMarquee(IContent content, string progressMessage, bool addToObjectGraphObjects = true) {
-      var progress = new Progress();
-      progress.StartMarquee(progressMessage);
-      MainFormManager.GetMainForm<WindowsForms.MainForm>().AddProgressToContent(content, progress, addToObjectGraphObjects);
-      return progress;
-    }
-
-    /// <summary>
-    /// Shows a started Progress in Continuous-mode on the specified view.
-    /// </summary>
-    public static IProgress Show(Control control, string progressMessage, double initialProgressValue = 0) {
-      var progress = new Progress();
-      progress.Start(progressMessage, initialProgressValue);
+    public static IProgress AddProgressToView(Control control, IProgress progress) {
       MainFormManager.GetMainForm<WindowsForms.MainForm>().AddProgressToView(control, progress);
       return progress;
     }
-    /// <summary>
-    /// Shows a started Progress in Marquee-mode on the specified view.
-    /// </summary>
-    public static IProgress ShowMarquee(Control control, string progressMessage) {
-      var progress = new Progress();
-      progress.StartMarquee(progressMessage);
-      MainFormManager.GetMainForm<WindowsForms.MainForm>().AddProgressToView(control, progress);
-      return progress;
-    }
-
-    /// <summary>
-    /// Hides the Progress fom all Views of the specified content.
-    /// </summary>
-    public static void Hide(IContent content) {
-      MainFormManager.GetMainForm<WindowsForms.MainForm>().RemoveProgressFromContent(content);
-    }
-    /// <summary>
-    /// Hides the Progress fom the specified view.
-    /// </summary>
-    public static void Hide(Control control) {
-      MainFormManager.GetMainForm<WindowsForms.MainForm>().RemoveProgressFromView(control);
+
+    public static void RemoveProgressFromContent(IContent content, bool finishProgress = true) {
+      MainFormManager.GetMainForm<WindowsForms.MainForm>().RemoveProgressFromContent(content, finishProgress);
+    }
+    public static void RemoveProgressFromView(Control control, bool finishProgress = true) {
+      MainFormManager.GetMainForm<WindowsForms.MainForm>().RemoveProgressFromView(control, finishProgress);
     }
     #endregion
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 16313)
+++ /branches/2845_EnhancedProgress/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/InteractiveSymbolicDataAnalysisSolutionSimplifierView.cs	(revision 16314)
@@ -154,5 +154,5 @@
       Content.ProblemDataChanged += Content_Changed;
       treeChart.Repainted += treeChart_Repainted;
-      MainFormManager.GetMainForm<MainForm.WindowsForms.MainForm>().AddProgressToView(grpSimplify, progress);
+      Progress.AddProgressToView(grpSimplify, progress);
       progress.StopRequested += progress_StopRequested;
     }
@@ -162,5 +162,5 @@
       Content.ProblemDataChanged -= Content_Changed;
       treeChart.Repainted -= treeChart_Repainted;
-      MainFormManager.GetMainForm<MainForm.WindowsForms.MainForm>().RemoveProgressFromView(grpSimplify, false);
+      Progress.RemoveProgressFromView(grpSimplify, false);
       progress.StopRequested -= progress_StopRequested;
     }
