Index: /branches/EnhancedProgress/HeuristicLab.Analysis.Statistics.Views/3.3/ChartAnalysisView.cs
===================================================================
--- /branches/EnhancedProgress/HeuristicLab.Analysis.Statistics.Views/3.3/ChartAnalysisView.cs	(revision 15476)
+++ /branches/EnhancedProgress/HeuristicLab.Analysis.Statistics.Views/3.3/ChartAnalysisView.cs	(revision 15477)
@@ -173,5 +173,5 @@
 
     private void addLineToChart_Click(object sender, EventArgs e) {
-      MainFormManager.GetMainForm<MainForm.WindowsForms.MainForm>().AddOperationProgressToView(this, "Adding fitted lines to charts...");
+      Progress.ShowMarquee(this, "Adding fitted lines to charts...");
 
       string resultName = (string)dataTableComboBox.SelectedItem;
@@ -181,10 +181,10 @@
 
       task.ContinueWith((t) => {
-        MainFormManager.GetMainForm<MainForm.WindowsForms.MainForm>().RemoveOperationProgressFromView(this);
+        Progress.Hide(this);
         ErrorHandling.ShowErrorDialog("An error occured while adding lines to charts. ", t.Exception);
       }, TaskContinuationOptions.OnlyOnFaulted);
 
       task.ContinueWith((t) => {
-        MainFormManager.GetMainForm<MainForm.WindowsForms.MainForm>().RemoveOperationProgressFromView(this);
+        Progress.Hide(this);
       }, TaskContinuationOptions.OnlyOnRanToCompletion);
     }
@@ -273,10 +273,10 @@
       var task = Task.Factory.StartNew(() => {
         sem.Wait();
-        progress = MainFormManager.GetMainForm<MainForm.WindowsForms.MainForm>().AddOperationProgressToView(this, "Calculating values...", 0);
+        progress = Progress.Show(this, "Calculating values...");
         RebuildDataTable(resultName, rowName);
       });
 
       task.ContinueWith((t) => {
-        MainFormManager.GetMainForm<MainForm.WindowsForms.MainForm>().RemoveOperationProgressFromView(this);
+        Progress.Hide(this);
         ErrorHandling.ShowErrorDialog("An error occured while calculating values. ", t.Exception);
         sem.Release();
@@ -284,5 +284,5 @@
 
       task.ContinueWith((t) => {
-        MainFormManager.GetMainForm<MainForm.WindowsForms.MainForm>().RemoveOperationProgressFromView(this);
+        Progress.Hide(this);
         sem.Release();
       }, TaskContinuationOptions.OnlyOnRanToCompletion);
Index: /branches/EnhancedProgress/HeuristicLab.Analysis.Statistics.Views/3.3/StatisticalTestsView.cs
===================================================================
--- /branches/EnhancedProgress/HeuristicLab.Analysis.Statistics.Views/3.3/StatisticalTestsView.cs	(revision 15476)
+++ /branches/EnhancedProgress/HeuristicLab.Analysis.Statistics.Views/3.3/StatisticalTestsView.cs	(revision 15477)
@@ -356,6 +356,5 @@
 
       if (data != null && data.All(x => x != null)) {
-        MainFormManager.GetMainForm<MainForm.WindowsForms.MainForm>()
-          .AddOperationProgressToView(this, "Calculating...");
+        Progress.ShowMarquee(this, "Calculating...");
 
         string curItem = (string)groupCompComboBox.SelectedItem;
@@ -369,5 +368,5 @@
       CalculatePairwiseTest(groupName);
 
-      MainFormManager.GetMainForm<MainForm.WindowsForms.MainForm>().RemoveOperationProgressFromView(this);
+      Progress.Hide(this);
     }
 
@@ -377,5 +376,5 @@
         return;
 
-      MainFormManager.GetMainForm<MainForm.WindowsForms.MainForm>().AddOperationProgressToView(pairwiseTestGroupBox, "Calculating...");
+      Progress.ShowMarquee(pairwiseTestGroupBox, "Calculating...");
       Task.Factory.StartNew(() => CalculatePairwiseAsync(groupName));
     }
@@ -384,5 +383,5 @@
       CalculatePairwiseTest(groupName);
 
-      MainFormManager.GetMainForm<MainForm.WindowsForms.MainForm>().RemoveOperationProgressFromView(pairwiseTestGroupBox);
+      Progress.Hide(pairwiseTestGroupBox);
     }
 
Index: /branches/EnhancedProgress/HeuristicLab.Clients.Access.Views/3.3/ClientViews/ClientView.cs
===================================================================
--- /branches/EnhancedProgress/HeuristicLab.Clients.Access.Views/3.3/ClientViews/ClientView.cs	(revision 15476)
+++ /branches/EnhancedProgress/HeuristicLab.Clients.Access.Views/3.3/ClientViews/ClientView.cs	(revision 15477)
@@ -77,9 +77,9 @@
     public void StartProgressView() {
       var message = "Downloading client information. Please be patient.";
-      MainFormManager.GetMainForm<HeuristicLab.MainForm.WindowsForms.MainForm>().AddOperationProgressToView(this, message);
+      Progress.ShowMarquee(this, message);
     }
 
     public void FinishProgressView() {
-      MainFormManager.GetMainForm<HeuristicLab.MainForm.WindowsForms.MainForm>().RemoveOperationProgressFromView(this);
+      Progress.Hide(this);
     }
   }
Index: /branches/EnhancedProgress/HeuristicLab.Clients.Hive.JobManager/3.3/MenuItems/RunInHiveMenuItem.cs
===================================================================
--- /branches/EnhancedProgress/HeuristicLab.Clients.Hive.JobManager/3.3/MenuItems/RunInHiveMenuItem.cs	(revision 15476)
+++ /branches/EnhancedProgress/HeuristicLab.Clients.Hive.JobManager/3.3/MenuItems/RunInHiveMenuItem.cs	(revision 15477)
@@ -82,5 +82,5 @@
       task.ItemTask.ComputeInParallel = content is Experiment || content is BatchRun;
 
-      progress = MainFormManager.GetMainForm<MainForm.WindowsForms.MainForm>().AddOperationProgressToContent(this.content, "Uploading to Hive...");
+      progress = Progress.ShowMarquee(this.content, "Uploading to Hive...");
       rJob.Progress = progress;
       progress.ProgressStateChanged += progress_ProgressStateChanged;
@@ -91,5 +91,5 @@
     private void progress_ProgressStateChanged(object sender, EventArgs e) {
       if (progress.ProgressState != ProgressState.Started) {
-        MainFormManager.GetMainForm<MainForm.WindowsForms.MainForm>().RemoveOperationProgressFromContent(content);
+        Progress.Hide(content);
         progress.ProgressStateChanged -= progress_ProgressStateChanged;
       }
@@ -97,5 +97,5 @@
 
     private void HandleEx(Exception ex) {
-      MainFormManager.GetMainForm<MainForm.WindowsForms.MainForm>().RemoveOperationProgressFromContent(content);
+      Progress.Hide(content);
       progress.ProgressStateChanged -= progress_ProgressStateChanged;
       ErrorHandling.ShowErrorDialog("Error uploading tasks", ex);
Index: /branches/EnhancedProgress/HeuristicLab.Clients.Hive.JobManager/3.3/Views/HiveResourceSelector.cs
===================================================================
--- /branches/EnhancedProgress/HeuristicLab.Clients.Hive.JobManager/3.3/Views/HiveResourceSelector.cs	(revision 15476)
+++ /branches/EnhancedProgress/HeuristicLab.Clients.Hive.JobManager/3.3/Views/HiveResourceSelector.cs	(revision 15477)
@@ -68,6 +68,5 @@
         Invoke(new Action(StartProgressView));
       } else {
-        var message = "Downloading resources. Please be patient.";
-        MainFormManager.GetMainForm<HeuristicLab.MainForm.WindowsForms.MainForm>().AddOperationProgressToView(this, message);
+        Progress.ShowMarquee(this, "Downloading resources. Please be patient.");
       }
     }
@@ -77,5 +76,5 @@
         Invoke(new Action(FinishProgressView));
       } else {
-        MainFormManager.GetMainForm<HeuristicLab.MainForm.WindowsForms.MainForm>().RemoveOperationProgressFromView(this);
+        Progress.Hide(this);
       }
     }
Index: /branches/EnhancedProgress/HeuristicLab.Clients.Hive.JobManager/3.3/Views/RefreshableHiveJobListView.cs
===================================================================
--- /branches/EnhancedProgress/HeuristicLab.Clients.Hive.JobManager/3.3/Views/RefreshableHiveJobListView.cs	(revision 15476)
+++ /branches/EnhancedProgress/HeuristicLab.Clients.Hive.JobManager/3.3/Views/RefreshableHiveJobListView.cs	(revision 15477)
@@ -109,5 +109,5 @@
 
         task.ContinueWith((t) => {
-          MainFormManager.GetMainForm<HeuristicLab.MainForm.WindowsForms.MainForm>().RemoveOperationProgressFromView(this);
+          Progress.Hide(this);
           ErrorHandling.ShowErrorDialog("An error occured while deleting the job. ", t.Exception);
         }, TaskContinuationOptions.OnlyOnFaulted);
@@ -120,9 +120,9 @@
 
     private void DeleteHiveJobsAsync(object items) {
-      MainFormManager.GetMainForm<HeuristicLab.MainForm.WindowsForms.MainForm>().AddOperationProgressToView(this, "Deleting job...");
+      Progress.ShowMarquee(this, "Deleting job...");
       foreach (RefreshableJob item in (List<RefreshableJob>)items) {
         Content.Remove(item);
       }
-      MainFormManager.GetMainForm<HeuristicLab.MainForm.WindowsForms.MainForm>().RemoveOperationProgressFromView(this);
+      Progress.Hide(this);
     }
 
Index: /branches/EnhancedProgress/HeuristicLab.Clients.Hive.JobManager/3.3/Views/RefreshableHiveJobView.cs
===================================================================
--- /branches/EnhancedProgress/HeuristicLab.Clients.Hive.JobManager/3.3/Views/RefreshableHiveJobView.cs	(revision 15476)
+++ /branches/EnhancedProgress/HeuristicLab.Clients.Hive.JobManager/3.3/Views/RefreshableHiveJobView.cs	(revision 15477)
@@ -71,5 +71,5 @@
       Content.Loaded += new EventHandler(Content_Loaded);
       Content.TaskReceived += new EventHandler(Content_TaskReceived);
-      MainFormManager.GetMainForm<HeuristicLab.MainForm.WindowsForms.MainForm>().AddOperationProgressToView(this, Content.Progress);
+      MainFormManager.GetMainForm<HeuristicLab.MainForm.WindowsForms.MainForm>().AddProgressToView(this, Content.Progress);
     }
 
@@ -86,5 +86,5 @@
       Content.Loaded -= new EventHandler(Content_Loaded);
       Content.TaskReceived -= new EventHandler(Content_TaskReceived);
-      MainFormManager.GetMainForm<HeuristicLab.MainForm.WindowsForms.MainForm>().RemoveOperationProgressFromView(this, false);
+      MainFormManager.GetMainForm<HeuristicLab.MainForm.WindowsForms.MainForm>().RemoveProgressFromView(this, false);
       DeregisterHiveExperimentEvents();
       DeregisterHiveTasksEvents();
@@ -137,6 +137,5 @@
           }
         }
-      }
-      finally {
+      } finally {
         SuppressEvents = false;
       }
@@ -381,5 +380,5 @@
 
     private void PauseJobAsync(object job) {
-      Content.Progress.Start("Pausing job...");
+      Content.Progress.StartMarquee("Pausing job...");
       HiveClient.PauseJob((RefreshableJob)job);
       Content.Progress.Finish();
@@ -387,5 +386,5 @@
 
     private void StopJobAsync(object job) {
-      Content.Progress.Start("Stopping job...");
+      Content.Progress.StartMarquee("Stopping job...");
       HiveClient.StopJob((RefreshableJob)job);
       Content.Progress.Finish();
@@ -393,5 +392,5 @@
 
     private void ResumeJobAsync(object job) {
-      Content.Progress.Start("Resuming job...");
+      Content.Progress.StartMarquee("Resuming job...");
       HiveClient.ResumeJob((RefreshableJob)job);
       Content.Progress.Finish();
@@ -417,7 +416,6 @@
         try {
           invoker.EndInvoke(ar);
-        }
-        catch (Exception ex) {
-          ThreadPool.QueueUserWorkItem(delegate(object exception) { ErrorHandling.ShowErrorDialog(this, (Exception)exception); }, ex);
+        } catch (Exception ex) {
+          ThreadPool.QueueUserWorkItem(delegate (object exception) { ErrorHandling.ShowErrorDialog(this, (Exception)exception); }, ex);
         }
       }, null);
@@ -506,5 +504,5 @@
           if (subTask is OptimizerHiveTask) {
             OptimizerHiveTask ohTask = subTask as OptimizerHiveTask;
-            ohTask.ExecuteReadActionOnItemTask(new Action(delegate() {
+            ohTask.ExecuteReadActionOnItemTask(new Action(delegate () {
               runs.AddRange(ohTask.ItemTask.Item.Runs);
             }));
Index: /branches/EnhancedProgress/HeuristicLab.Clients.Hive.Views/3.3/HiveTasks/OptimizerHiveTaskView.cs
===================================================================
--- /branches/EnhancedProgress/HeuristicLab.Clients.Hive.Views/3.3/HiveTasks/OptimizerHiveTaskView.cs	(revision 15476)
+++ /branches/EnhancedProgress/HeuristicLab.Clients.Hive.Views/3.3/HiveTasks/OptimizerHiveTaskView.cs	(revision 15477)
@@ -46,5 +46,5 @@
     protected override void Job_ItemChanged(object sender, EventArgs e) {
       if (Content != null && Content.Task != null && Content.ItemTask.Item != null) {
-        Content.ExecuteReadActionOnItemTask(new Action(delegate() {
+        Content.ExecuteReadActionOnItemTask(new Action(delegate () {
           runCollectionViewHost.Content = Content.ItemTask.Item.Runs;
         }));
@@ -58,10 +58,10 @@
       base.RegisterContentEvents();
       Content.IsControllableChanged += new EventHandler(Content_IsControllableChanged);
-      MainFormManager.GetMainForm<HeuristicLab.MainForm.WindowsForms.MainForm>().AddOperationProgressToView(this, Content.Progress);
+      MainFormManager.GetMainForm<HeuristicLab.MainForm.WindowsForms.MainForm>().AddProgressToView(this, Content.Progress);
     }
 
     protected override void DeregisterContentEvents() {
       Content.IsControllableChanged -= new EventHandler(Content_IsControllableChanged);
-      MainFormManager.GetMainForm<HeuristicLab.MainForm.WindowsForms.MainForm>().RemoveOperationProgressFromView(this, false);
+      MainFormManager.GetMainForm<HeuristicLab.MainForm.WindowsForms.MainForm>().RemoveProgressFromView(this, false);
       base.DeregisterContentEvents();
     }
@@ -99,5 +99,5 @@
 
     private void PauseTaskAsync() {
-      Content.Progress.Start("Pausing task. Please be patient for the command to take effect.");
+      Content.Progress.StartMarquee("Pausing task. Please be patient for the command to take effect.");
       Content.Pause();
       Content.Progress.Finish();
@@ -105,5 +105,5 @@
 
     private void StopTaskAsync() {
-      Content.Progress.Start("Stopping task. Please be patient for the command to take effect.");
+      Content.Progress.StartMarquee("Stopping task. Please be patient for the command to take effect.");
       Content.Stop();
       Content.Progress.Finish();
@@ -111,5 +111,5 @@
 
     private void ResumeTaskAsync() {
-      Content.Progress.Start("Resuming task. Please be patient for the command to take effect.");
+      Content.Progress.StartMarquee("Resuming task. Please be patient for the command to take effect.");
       Content.Restart();
       Content.Progress.Finish();
Index: /branches/EnhancedProgress/HeuristicLab.Clients.Hive/3.3/HeuristicLab.Clients.Hive-3.3.csproj
===================================================================
--- /branches/EnhancedProgress/HeuristicLab.Clients.Hive/3.3/HeuristicLab.Clients.Hive-3.3.csproj	(revision 15476)
+++ /branches/EnhancedProgress/HeuristicLab.Clients.Hive/3.3/HeuristicLab.Clients.Hive-3.3.csproj	(revision 15477)
@@ -229,4 +229,9 @@
       <Private>False</Private>
     </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.MainForm.WindowsForms\3.3\HeuristicLab.MainForm.WindowsForms-3.3.csproj">
+      <Project>{AB687BBE-1BFE-476B-906D-44237135431D}</Project>
+      <Name>HeuristicLab.MainForm.WindowsForms-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
     <ProjectReference Include="..\..\HeuristicLab.MainForm\3.3\HeuristicLab.MainForm-3.3.csproj">
       <Project>{3BD61258-31DA-4B09-89C0-4F71FEF5F05A}</Project>
Index: /branches/EnhancedProgress/HeuristicLab.Clients.Hive/3.3/HiveClient.cs
===================================================================
--- /branches/EnhancedProgress/HeuristicLab.Clients.Hive/3.3/HiveClient.cs	(revision 15476)
+++ /branches/EnhancedProgress/HeuristicLab.Clients.Hive/3.3/HiveClient.cs	(revision 15477)
@@ -249,5 +249,5 @@
       try {
         refreshableJob.IsProgressing = true;
-        refreshableJob.Progress.Start("Connecting to server...");
+        refreshableJob.Progress.StartMarquee("Connecting to server...");
         IEnumerable<string> resourceNames = ToResourceNameList(refreshableJob.Job.ResourceNames);
         var resourceIds = new List<Guid>();
@@ -414,5 +414,5 @@
 
         // fetch all task objects to create the full tree of tree of HiveTask objects
-        refreshableJob.Progress.Start("Downloading list of tasks...");
+        refreshableJob.Progress.StartMarquee("Downloading list of tasks...");
         allTasks = HiveServiceLocator.Instance.CallHiveService(s => s.GetLightweightJobTasksWithoutStateLog(hiveExperiment.Id));
         totalJobCount = allTasks.Count();
Index: /branches/EnhancedProgress/HeuristicLab.Clients.Hive/3.3/Plugin.cs.frame
===================================================================
--- /branches/EnhancedProgress/HeuristicLab.Clients.Hive/3.3/Plugin.cs.frame	(revision 15476)
+++ /branches/EnhancedProgress/HeuristicLab.Clients.Hive/3.3/Plugin.cs.frame	(revision 15477)
@@ -36,4 +36,5 @@
   [PluginDependency("HeuristicLab.Hive", "3.3")]  
   [PluginDependency("HeuristicLab.MainForm", "3.3")]
+  [PluginDependency("HeuristicLab.MainForm.WindowsForms", "3.3")]
   [PluginDependency("HeuristicLab.Optimization", "3.3")]
   [PluginDependency("HeuristicLab.Persistence", "3.3")]
Index: /branches/EnhancedProgress/HeuristicLab.Clients.OKB.Views/3.3/RunCreation/Views/OKBExperimentUploadView.cs
===================================================================
--- /branches/EnhancedProgress/HeuristicLab.Clients.OKB.Views/3.3/RunCreation/Views/OKBExperimentUploadView.cs	(revision 15476)
+++ /branches/EnhancedProgress/HeuristicLab.Clients.OKB.Views/3.3/RunCreation/Views/OKBExperimentUploadView.cs	(revision 15477)
@@ -188,5 +188,5 @@
       if (InvokeRequired) { Invoke((Action<object, EventArgs>)RunCreationClient_Refreshing, sender, e); return; }
       var message = "Refreshing algorithms and problems...";
-      MainFormManager.GetMainForm<HeuristicLab.MainForm.WindowsForms.MainForm>().AddOperationProgressToView(this, message);
+      Progress.ShowMarquee(this, message);
       refreshing = true;
       SetEnabledStateOfControls();
@@ -195,5 +195,5 @@
     private void RunCreationClient_Refreshed(object sender, EventArgs e) {
       if (InvokeRequired) { Invoke((Action<object, EventArgs>)RunCreationClient_Refreshed, sender, e); return; }
-      MainFormManager.GetMainForm<HeuristicLab.MainForm.WindowsForms.MainForm>().RemoveOperationProgressFromView(this);
+      Progress.Hide(this);
       refreshing = false;
       SetEnabledStateOfControls();
@@ -203,5 +203,5 @@
       var task = System.Threading.Tasks.Task.Factory.StartNew(UploadAsync);
       task.ContinueWith((t) => {
-        MainFormManager.GetMainForm<HeuristicLab.MainForm.WindowsForms.MainForm>().RemoveOperationProgressFromView(this);
+        Progress.Hide(this);
         PluginInfrastructure.ErrorHandling.ShowErrorDialog("An exception occured while uploading the runs to the OKB.", t.Exception);
       }, TaskContinuationOptions.OnlyOnFaulted);
@@ -210,5 +210,5 @@
     private void UploadAsync() {
       var message = "Uploading runs to OKB...";
-      IProgress progress = MainFormManager.GetMainForm<HeuristicLab.MainForm.WindowsForms.MainForm>().AddOperationProgressToView(this, message, 0);
+      IProgress progress = Progress.Show(this, message);
       double count = dataGridView.Rows.Count;
       int i = 0;
@@ -226,5 +226,5 @@
         progress.ProgressValue = ((double)i) / count;
       }
-      MainFormManager.GetMainForm<HeuristicLab.MainForm.WindowsForms.MainForm>().RemoveOperationProgressFromView(this);
+      Progress.Hide(this);
       ClearRuns();
     }
Index: /branches/EnhancedProgress/HeuristicLab.DataPreprocessing.Views/3.4/DataPreprocessingView.cs
===================================================================
--- /branches/EnhancedProgress/HeuristicLab.DataPreprocessing.Views/3.4/DataPreprocessingView.cs	(revision 15476)
+++ /branches/EnhancedProgress/HeuristicLab.DataPreprocessing.Views/3.4/DataPreprocessingView.cs	(revision 15477)
@@ -169,11 +169,8 @@
         await Task.Run(() => {
           TProblemData instance;
-          var mainForm = (MainForm.WindowsForms.MainForm)MainFormManager.MainForm;
           // lock active view and show progress bar
-          var activeView = (IContentView)MainFormManager.MainForm.ActiveView;
 
           try {
-            var progress = mainForm.AddOperationProgressToContent(activeView.Content, "Loading problem instance.", 0);
-
+            var progress = Progress.Show(Content, "Loading problem instance.");
             instanceProvider.ProgressChanged += (o, args) => { progress.ProgressValue = args.ProgressPercentage / 100.0; };
 
@@ -181,5 +178,5 @@
           } catch (IOException ex) {
             MessageBox.Show(string.Format("There was an error parsing the file: {0}", Environment.NewLine + ex.Message), "Error while parsing", MessageBoxButtons.OK, MessageBoxIcon.Error);
-            mainForm.RemoveOperationProgressFromContent(activeView.Content);
+            Progress.Hide(Content);
             return;
           }
@@ -189,5 +186,5 @@
             MessageBox.Show(string.Format("This problem does not support loading the instance {0}: {1}", Path.GetFileName(importDialog.Path), Environment.NewLine + ex.Message), "Cannot load instance");
           } finally {
-            mainForm.RemoveOperationProgressFromContent(activeView.Content);
+            Progress.Hide(Content);
           }
         });
@@ -226,11 +223,9 @@
           var storable = itemCreator() as IStorableContent;
           if (storable != null) {
-            var mainForm = (MainForm.WindowsForms.MainForm)MainFormManager.MainForm;
-            var activeView = (IContentView)MainFormManager.MainForm.ActiveView;
             try {
-              mainForm.AddOperationProgressToContent(activeView.Content, "Exporting data.");
+              Progress.ShowMarquee(Content, "Exporting data.");
               ContentManager.Save(storable, saveFileDialog.FileName, compressed);
             } finally {
-              mainForm.RemoveOperationProgressFromContent(activeView.Content);
+              Progress.Hide(Content);
             }
           }
@@ -248,9 +243,7 @@
       if (saveFileDialog.ShowDialog() == DialogResult.OK) {
         Task.Run(() => {
-          var mainForm = (MainForm.WindowsForms.MainForm)MainFormManager.MainForm;
-          var activeView = (IContentView)MainFormManager.MainForm.ActiveView;
           try {
             var problemData = Content.CreateNewProblemData();
-            mainForm.AddOperationProgressToContent(activeView.Content, "Exporting data.");
+            Progress.ShowMarquee(Content, "Exporting data.");
             if (problemData is TimeSeriesPrognosisProblemData)
               Export(new TimeSeriesPrognosisCSVInstanceProvider(), problemData, saveFileDialog.FileName);
@@ -260,5 +253,5 @@
               Export(new ClassificationCSVInstanceProvider(), problemData, saveFileDialog.FileName);
           } finally {
-            mainForm.RemoveOperationProgressFromContent(activeView.Content);
+            Progress.Hide(Content);
           }
         });
Index: /branches/EnhancedProgress/HeuristicLab.MainForm.WindowsForms/3.3/HeuristicLab.MainForm.WindowsForms-3.3.csproj
===================================================================
--- /branches/EnhancedProgress/HeuristicLab.MainForm.WindowsForms/3.3/HeuristicLab.MainForm.WindowsForms-3.3.csproj	(revision 15476)
+++ /branches/EnhancedProgress/HeuristicLab.MainForm.WindowsForms/3.3/HeuristicLab.MainForm.WindowsForms-3.3.csproj	(revision 15477)
@@ -151,4 +151,5 @@
     </Compile>
     <Compile Include="Plugin.cs" />
+    <Compile Include="Progress.cs" />
     <Compile Include="Views\AsynchronousContentView.cs">
       <SubType>UserControl</SubType>
Index: /branches/EnhancedProgress/HeuristicLab.MainForm.WindowsForms/3.3/MainForms/MainForm.cs
===================================================================
--- /branches/EnhancedProgress/HeuristicLab.MainForm.WindowsForms/3.3/MainForms/MainForm.cs	(revision 15476)
+++ /branches/EnhancedProgress/HeuristicLab.MainForm.WindowsForms/3.3/MainForms/MainForm.cs	(revision 15477)
@@ -350,19 +350,10 @@
     private readonly List<ProgressView> progressViews = new List<ProgressView>();
 
-    public IProgress AddOperationProgressToContent(IContent content, string progressMessage, double? initialProgressValue = null, bool addToObjectGraphObjects = true) {
-      var progress = new Progress();
-      if (initialProgressValue.HasValue)
-        progress.Start(progressMessage, initialProgressValue.Value);
-      else
-        progress.Start(progressMessage);
-      AddOperationProgressToContent(content, progress, addToObjectGraphObjects);
-      return progress;
-    }
     /// <summary>
     /// Adds a <see cref="ProgressView"/> to the <see cref="ContentView"/>s showing the specified content.
     /// </summary>
-    public void AddOperationProgressToContent(IContent content, IProgress progress, bool addToObjectGraphObjects = true) {
+    public void AddProgressToContent(IContent content, IProgress progress, bool addToObjectGraphObjects = true) {
       if (InvokeRequired) {
-        Invoke((Action<IContent, IProgress, bool>)AddOperationProgressToContent, content, progress, addToObjectGraphObjects);
+        Invoke((Action<IContent, IProgress, bool>)AddProgressToContent, content, progress, addToObjectGraphObjects);
         return;
       }
@@ -387,19 +378,10 @@
     }
 
-    public IProgress AddOperationProgressToView(Control control, string progressMessage, double? initialProgressValue = null) {
-      var progress = new Progress();
-      if (initialProgressValue.HasValue)
-        progress.Start(progressMessage, initialProgressValue.Value);
-      else
-        progress.Start(progressMessage);
-      AddOperationProgressToView(control, progress);
-      return progress;
-    }
     /// <summary>
     /// Adds a <see cref="ProgressView"/> to the specified view.
     /// </summary>
-    public void AddOperationProgressToView(Control control, IProgress progress) {
+    public void AddProgressToView(Control control, IProgress progress) {
       if (InvokeRequired) {
-        Invoke((Action<Control, IProgress>)AddOperationProgressToView, control, progress);
+        Invoke((Action<Control, IProgress>)AddProgressToView, control, progress);
         return;
       }
@@ -423,7 +405,7 @@
     /// Removes an existing <see cref="ProgressView"/> from the <see cref="ContentView"/>s showing the specified content.
     /// </summary>
-    public void RemoveOperationProgressFromContent(IContent content, bool finishProgress = true) {
+    public void RemoveProgressFromContent(IContent content, bool finishProgress = true) {
       if (InvokeRequired) {
-        Invoke((Action<IContent, bool>)RemoveOperationProgressFromContent, content, finishProgress);
+        Invoke((Action<IContent, bool>)RemoveProgressFromContent, content, finishProgress);
         return;
       }
@@ -439,5 +421,4 @@
       }
       contentProgressLookup.Remove(content);
-
     }
 
@@ -445,7 +426,7 @@
     /// Removes an existing <see cref="ProgressView"/> from the specified view.
     /// </summary>
-    public void RemoveOperationProgressFromView(Control control, bool finishProgress = true) {
+    public void RemoveProgressFromView(Control control, bool finishProgress = true) {
       if (InvokeRequired) {
-        Invoke((Action<Control, bool>)RemoveOperationProgressFromView, control, finishProgress);
+        Invoke((Action<Control, bool>)RemoveProgressFromView, control, finishProgress);
         return;
       }
Index: /branches/EnhancedProgress/HeuristicLab.MainForm.WindowsForms/3.3/Progress.cs
===================================================================
--- /branches/EnhancedProgress/HeuristicLab.MainForm.WindowsForms/3.3/Progress.cs	(revision 15477)
+++ /branches/EnhancedProgress/HeuristicLab.MainForm.WindowsForms/3.3/Progress.cs	(revision 15477)
@@ -0,0 +1,238 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2016 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Windows.Forms;
+using HeuristicLab.Common;
+
+namespace HeuristicLab.MainForm {
+  public class Progress : IProgress {
+    private ProgressState progressState;
+    public ProgressState ProgressState {
+      get { return progressState; }
+      private set {
+        if (progressState != value) {
+          progressState = value;
+          OnProgressStateChanged();
+        }
+      }
+    }
+
+    private string message;
+    public string Message {
+      get { return message; }
+      set {
+        if (message != value) {
+          message = value;
+          OnMessageChanged();
+        }
+      }
+    }
+
+    private ProgressBarMode progressBarMode;
+    public ProgressBarMode ProgressBarMode {
+      get { return progressBarMode; }
+      set {
+        if (progressBarMode != value) {
+          progressBarMode = value;
+          OnProgressBarModeChanged();
+        }
+      }
+    }
+
+    private double progressValue;
+    public double ProgressValue {
+      get { return progressValue; }
+      set {
+        if (progressBarMode == ProgressBarMode.Marquee)
+          throw new InvalidOperationException("Cannot set ProgressValue while ProgressBar is in Marquee-Mode");
+        if (progressValue != value) {
+          progressValue = Math.Max(Math.Min(value, 1.0), 0.0);
+          OnProgressChanged();
+        }
+      }
+    }
+
+    private bool canBeStopped;
+    public bool CanBeStopped {
+      get { return canBeStopped; }
+      set {
+        if (canBeStopped != value) {
+          canBeStopped = value;
+          OnCanBeStoppedChanged();
+        }
+      }
+    }
+
+    private bool canBeCanceled;
+    public bool CanBeCanceled {
+      get { return canBeCanceled; }
+      set {
+        if (canBeCanceled != value) {
+          canBeCanceled = value;
+          OnCanBeCanceledChanged();
+        }
+      }
+    }
+
+    public Progress() {
+      progressState = ProgressState.Finished;
+      canBeStopped = false;
+      canBeCanceled = false;
+      progressBarMode = ProgressBarMode.Marquee;
+      progressValue = 0.0;
+    }
+
+    public void Start(string message, double progressValue = 0) {
+      ProgressState = ProgressState.Started;
+      ProgressBarMode = ProgressBarMode.Continuous;
+      ProgressValue = progressValue;
+      Message = message;
+    }
+    public void StartMarquee(string message) {
+      ProgressState = ProgressState.Started;
+      ProgressBarMode = ProgressBarMode.Marquee;
+      Message = message;
+    }
+
+    public void Finish() {
+      if (ProgressBarMode == ProgressBarMode.Continuous && ProgressValue != 1.0)
+        ProgressValue = 1.0;
+      ProgressState = ProgressState.Finished;
+    }
+
+    public void Stop() {
+      if (canBeStopped) {
+        ProgressState = ProgressState.StopRequested;
+        OnStopRequested();
+      } else throw new NotSupportedException("This progress cannot be stopped.");
+    }
+    public void Cancel() {
+      if (canBeCanceled) {
+        ProgressState = ProgressState.CancelRequested;
+        OnCancelRequested();
+      } else throw new NotSupportedException("This progress cannot be canceled.");
+    }
+
+    #region Show/Hide Progress
+    /// <summary>
+    /// Shows a started Progress in Continuous-mode on all Views of the specified content.
+    /// </summary>
+    public static IProgress Show(IContent content, string progressMessage, double initialProgressValue = 0, bool addToObjectGraphObjects = true) {
+      var progress = new Progress();
+      progress.Start(progressMessage, initialProgressValue);
+      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);
+      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);
+    }
+    #endregion
+
+    #region Event Handler
+    public event EventHandler ProgressStateChanged;
+    private void OnProgressStateChanged() {
+      var handler = ProgressStateChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public event EventHandler MessageChanged;
+    private void OnMessageChanged() {
+      var handler = MessageChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public event EventHandler ProgressBarModeChanged;
+    private void OnProgressBarModeChanged() {
+      var handler = ProgressBarModeChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public event EventHandler ProgressValueChanged;
+    private void OnProgressChanged() {
+      var handler = ProgressValueChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public event EventHandler CanBeStoppedChanged;
+    private void OnCanBeStoppedChanged() {
+      var handler = CanBeStoppedChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public event EventHandler CanBeCanceledChanged;
+    private void OnCanBeCanceledChanged() {
+      var handler = CanBeCanceledChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public event EventHandler StopRequested;
+    private void OnStopRequested() {
+      var handler = StopRequested;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public event EventHandler CancelRequested;
+    private void OnCancelRequested() {
+      var handler = CancelRequested;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    #endregion
+  }
+}
Index: /branches/EnhancedProgress/HeuristicLab.MainForm/3.3/HeuristicLab.MainForm-3.3.csproj
===================================================================
--- /branches/EnhancedProgress/HeuristicLab.MainForm/3.3/HeuristicLab.MainForm-3.3.csproj	(revision 15476)
+++ /branches/EnhancedProgress/HeuristicLab.MainForm/3.3/HeuristicLab.MainForm-3.3.csproj	(revision 15477)
@@ -124,5 +124,4 @@
     <Compile Include="Interfaces\IProgress.cs" />
     <Compile Include="Plugin.cs" />
-    <Compile Include="Progress.cs" />
     <Compile Include="ViewAttribute.cs" />
     <Compile Include="Interfaces\IContentView.cs" />
Index: /branches/EnhancedProgress/HeuristicLab.MainForm/3.3/Interfaces/IProgress.cs
===================================================================
--- /branches/EnhancedProgress/HeuristicLab.MainForm/3.3/Interfaces/IProgress.cs	(revision 15476)
+++ /branches/EnhancedProgress/HeuristicLab.MainForm/3.3/Interfaces/IProgress.cs	(revision 15477)
@@ -35,4 +35,5 @@
     /// Changing the ProgressValue when ProgressBarMode is Marquee raises an Exception.
     /// </summary>
+    /// <exception cref="InvalidOperationException">Setting the ProgressValue-property while in the Marquee state is invalid.</exception>
     double ProgressValue { get; set; }
     bool CanBeStopped { get; }
@@ -40,11 +41,16 @@
 
     /// <summary>
-    /// Start (or Restart) a progress with ProgressBarMode Marquee
+    /// Start (or Restart) a progress in ProgressBarMode Continues to display specific progress values (from 0 to 1).
+    /// A new progress value is reported by setting the ProgressValue-property.
     /// </summary>
-    void Start(string message);
+    void Start(string message, double progressValue = 0);
+
     /// <summary>
-    /// Start (or Restart) a progress with ProgressBarMode Continues
+    /// Start (or Restart) a progress in ProgressBarMode Marquee to define an "unknown" progress state.
+    /// Consider using marquee when the progress is not measurable but the user should be notified that something is still happening.
+    /// Setting the ProgressValue-property in the Marquee state throws an exception.
     /// </summary>
-    void Start(string message, double progressValue);
+    void StartMarquee(string message);
+
     void Finish();
     void Stop();
Index: anches/EnhancedProgress/HeuristicLab.MainForm/3.3/Progress.cs
===================================================================
--- /branches/EnhancedProgress/HeuristicLab.MainForm/3.3/Progress.cs	(revision 15476)
+++ 	(revision )
@@ -1,189 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2016 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System;
-
-namespace HeuristicLab.MainForm {
-  public class Progress : IProgress {
-    private ProgressState progressState;
-    public ProgressState ProgressState {
-      get { return progressState; }
-      private set {
-        if (progressState != value) {
-          progressState = value;
-          OnProgressStateChanged();
-        }
-      }
-    }
-
-    private string message;
-    public string Message {
-      get { return message; }
-      set {
-        if (message != value) {
-          message = value;
-          OnMessageChanged();
-        }
-      }
-    }
-
-    private ProgressBarMode progressBarMode;
-    public ProgressBarMode ProgressBarMode {
-      get { return progressBarMode; }
-      set {
-        if (progressBarMode != value) {
-          progressBarMode = value;
-          OnProgressBarModeChanged();
-        }
-      }
-    }
-
-    private double progressValue;
-    public double ProgressValue {
-      get { return progressValue; }
-      set {
-        if (progressBarMode == ProgressBarMode.Marquee)
-          throw new InvalidOperationException("Cannot set ProgressValue while ProgressBar is in Marquee-Mode");
-        if (progressValue != value) {
-          progressValue = Math.Max(Math.Min(value, 1.0), 0.0);
-          OnProgressChanged();
-        }
-      }
-    }
-
-    private bool canBeStopped;
-    public bool CanBeStopped {
-      get { return canBeStopped; }
-      set {
-        if (canBeStopped != value) {
-          canBeStopped = value;
-          OnCanBeStoppedChanged();
-        }
-      }
-    }
-
-    private bool canBeCanceled;
-    public bool CanBeCanceled {
-      get { return canBeCanceled; }
-      set {
-        if (canBeCanceled != value) {
-          canBeCanceled = value;
-          OnCanBeCanceledChanged();
-        }
-      }
-    }
-
-    public Progress() {
-      progressState = ProgressState.Finished;
-      canBeStopped = false;
-      canBeCanceled = false;
-      progressBarMode = ProgressBarMode.Marquee;
-      progressValue = 0.0;
-    }
-
-    /// <summary>
-    /// Starts or restarts an "undefined" progress in marquee-mode
-    /// </summary>
-    public void Start(string message) {
-      ProgressState = ProgressState.Started;
-      ProgressBarMode = ProgressBarMode.Marquee;
-      Message = message;
-    }
-    /// <summary>
-    /// Starts or restarts a progress in continuous-mode
-    /// </summary>
-    public void Start(string message, double progressValue) {
-      ProgressState = ProgressState.Started;
-      ProgressBarMode = ProgressBarMode.Continuous;
-      ProgressValue = progressValue;
-      Message = message;
-    }
-
-    public void Finish() {
-      if (ProgressBarMode == ProgressBarMode.Continuous && ProgressValue != 1.0)
-        ProgressValue = 1.0;
-      ProgressState = ProgressState.Finished;
-    }
-
-    public void Stop() {
-      if (canBeStopped) {
-        ProgressState = ProgressState.StopRequested;
-        OnStopRequested();
-      } else throw new NotSupportedException("This progress cannot be stopped.");
-    }
-    public void Cancel() {
-      if (canBeCanceled) {
-        ProgressState = ProgressState.CancelRequested;
-        OnCancelRequested();
-      } else throw new NotSupportedException("This progress cannot be canceled.");
-    }
-
-    #region Event Handler
-    public event EventHandler ProgressStateChanged;
-    private void OnProgressStateChanged() {
-      var handler = ProgressStateChanged;
-      if (handler != null) handler(this, EventArgs.Empty);
-    }
-
-    public event EventHandler MessageChanged;
-    private void OnMessageChanged() {
-      var handler = MessageChanged;
-      if (handler != null) handler(this, EventArgs.Empty);
-    }
-
-    public event EventHandler ProgressBarModeChanged;
-    private void OnProgressBarModeChanged() {
-      var handler = ProgressBarModeChanged;
-      if (handler != null) handler(this, EventArgs.Empty);
-    }
-
-    public event EventHandler ProgressValueChanged;
-    private void OnProgressChanged() {
-      var handler = ProgressValueChanged;
-      if (handler != null) handler(this, EventArgs.Empty);
-    }
-
-    public event EventHandler CanBeStoppedChanged;
-    private void OnCanBeStoppedChanged() {
-      var handler = CanBeStoppedChanged;
-      if (handler != null) handler(this, EventArgs.Empty);
-    }
-
-    public event EventHandler CanBeCanceledChanged;
-    private void OnCanBeCanceledChanged() {
-      var handler = CanBeCanceledChanged;
-      if (handler != null) handler(this, EventArgs.Empty);
-    }
-
-    public event EventHandler StopRequested;
-    private void OnStopRequested() {
-      var handler = StopRequested;
-      if (handler != null) handler(this, EventArgs.Empty);
-    }
-
-    public event EventHandler CancelRequested;
-    private void OnCancelRequested() {
-      var handler = CancelRequested;
-      if (handler != null) handler(this, EventArgs.Empty);
-    }
-    #endregion
-  }
-}
Index: /branches/EnhancedProgress/HeuristicLab.Optimizer/3.3/FileManager.cs
===================================================================
--- /branches/EnhancedProgress/HeuristicLab.Optimizer/3.3/FileManager.cs	(revision 15476)
+++ /branches/EnhancedProgress/HeuristicLab.Optimizer/3.3/FileManager.cs	(revision 15477)
@@ -161,7 +161,7 @@
       mainForm.Invoke((Action)delegate {
         if (showProgress) {
-          mainForm.AddOperationProgressToContent(content, string.Format("Saving to file \"{0}\"...", Path.GetFileName(fileName ?? content.Filename)));
+          Progress.ShowMarquee(content, string.Format("Saving to file \"{0}\"...", Path.GetFileName(fileName ?? content.Filename)));
         } else
-          mainForm.RemoveOperationProgressFromContent(content);
+          Progress.Hide(content);
       });
       #endregion
Index: /branches/EnhancedProgress/HeuristicLab.Optimizer/3.3/StartPage.cs
===================================================================
--- /branches/EnhancedProgress/HeuristicLab.Optimizer/3.3/StartPage.cs	(revision 15476)
+++ /branches/EnhancedProgress/HeuristicLab.Optimizer/3.3/StartPage.cs	(revision 15477)
@@ -88,5 +88,5 @@
 
     private void LoadSamples(object state) {
-      progress = MainFormManager.GetMainForm<HeuristicLab.MainForm.WindowsForms.MainForm>().AddOperationProgressToView(samplesListView, "Loading...", 0);
+      progress = Progress.Show(samplesListView, "Loading...");
       try {
         var assembly = Assembly.GetExecutingAssembly();
@@ -112,5 +112,5 @@
         OnAllSamplesLoaded();
       } finally {
-        MainFormManager.GetMainForm<HeuristicLab.MainForm.WindowsForms.MainForm>().RemoveOperationProgressFromView(samplesListView);
+        Progress.Hide(samplesListView);
       }
     }
Index: /branches/EnhancedProgress/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification.Views/3.4/SymbolicClassificationSolutionView.cs
===================================================================
--- /branches/EnhancedProgress/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification.Views/3.4/SymbolicClassificationSolutionView.cs	(revision 15476)
+++ /branches/EnhancedProgress/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification.Views/3.4/SymbolicClassificationSolutionView.cs	(revision 15477)
@@ -60,7 +60,7 @@
         var name = exportFileDialog.FileName;
         using (BackgroundWorker bg = new BackgroundWorker()) {
-          MainFormManager.GetMainForm<MainForm.WindowsForms.MainForm>().AddOperationProgressToView(this, "Exportion solution to " + name + ".");
+          Progress.ShowMarquee(this, "Exportion solution to " + name + ".");
           bg.DoWork += (o, a) => exporter.Export(Content, name);
-          bg.RunWorkerCompleted += (o, a) => MainFormManager.GetMainForm<MainForm.WindowsForms.MainForm>().RemoveOperationProgressFromView(this);
+          bg.RunWorkerCompleted += (o, a) => Progress.Hide(this);
           bg.RunWorkerAsync();
         }
Index: /branches/EnhancedProgress/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification.Views/3.4/SymbolicDiscriminantFunctionClassificationSolutionView.cs
===================================================================
--- /branches/EnhancedProgress/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification.Views/3.4/SymbolicDiscriminantFunctionClassificationSolutionView.cs	(revision 15476)
+++ /branches/EnhancedProgress/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification.Views/3.4/SymbolicDiscriminantFunctionClassificationSolutionView.cs	(revision 15477)
@@ -59,7 +59,7 @@
         var name = exportFileDialog.FileName;
         using (BackgroundWorker bg = new BackgroundWorker()) {
-          MainFormManager.GetMainForm<MainForm.WindowsForms.MainForm>().AddOperationProgressToView(this, "Exportion solution to " + name + ".");
+          Progress.ShowMarquee(this, "Exportion solution to " + name + ".");
           bg.DoWork += (o, a) => exporter.Export(Content, name);
-          bg.RunWorkerCompleted += (o, a) => MainFormManager.GetMainForm<MainForm.WindowsForms.MainForm>().RemoveOperationProgressFromView(this);
+          bg.RunWorkerCompleted += (o, a) => Progress.Hide(this);
           bg.RunWorkerAsync();
         }
Index: /branches/EnhancedProgress/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views/3.4/SymbolicRegressionSolutionView.cs
===================================================================
--- /branches/EnhancedProgress/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views/3.4/SymbolicRegressionSolutionView.cs	(revision 15476)
+++ /branches/EnhancedProgress/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views/3.4/SymbolicRegressionSolutionView.cs	(revision 15477)
@@ -61,7 +61,7 @@
         var name = exportFileDialog.FileName;
         using (BackgroundWorker bg = new BackgroundWorker()) {
-          MainFormManager.GetMainForm<MainForm.WindowsForms.MainForm>().AddOperationProgressToView(this, "Exporting solution to " + name + ".");
+          Progress.ShowMarquee(this, "Exporting solution to " + name + ".");
           bg.DoWork += (o, a) => exporter.Export(Content, name);
-          bg.RunWorkerCompleted += (o, a) => MainFormManager.GetMainForm<MainForm.WindowsForms.MainForm>().RemoveOperationProgressFromView(this);
+          bg.RunWorkerCompleted += (o, a) => Progress.Hide(this);
           bg.RunWorkerAsync();
         }
Index: /branches/EnhancedProgress/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/InteractiveSymbolicDataAnalysisSolutionSimplifierView.cs
===================================================================
--- /branches/EnhancedProgress/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/InteractiveSymbolicDataAnalysisSolutionSimplifierView.cs	(revision 15476)
+++ /branches/EnhancedProgress/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/InteractiveSymbolicDataAnalysisSolutionSimplifierView.cs	(revision 15477)
@@ -154,5 +154,5 @@
       Content.ProblemDataChanged += Content_Changed;
       treeChart.Repainted += treeChart_Repainted;
-      MainFormManager.GetMainForm<MainForm.WindowsForms.MainForm>().AddOperationProgressToView(grpSimplify, progress);
+      MainFormManager.GetMainForm<MainForm.WindowsForms.MainForm>().AddProgressToView(grpSimplify, progress);
       progress.StopRequested += progress_StopRequested;
     }
@@ -162,5 +162,5 @@
       Content.ProblemDataChanged -= Content_Changed;
       treeChart.Repainted -= treeChart_Repainted;
-      MainFormManager.GetMainForm<MainForm.WindowsForms.MainForm>().RemoveOperationProgressFromView(grpSimplify, false);
+      MainFormManager.GetMainForm<MainForm.WindowsForms.MainForm>().RemoveProgressFromView(grpSimplify, false);
       progress.StopRequested -= progress_StopRequested;
     }
@@ -191,5 +191,5 @@
       treeChart.Tree = tree.Root.SubtreeCount > 1 ? new SymbolicExpressionTree(tree.Root) : new SymbolicExpressionTree(tree.Root.GetSubtree(0).GetSubtree(0));
 
-      progress.Start("Calculate Impact and Replacement Values ...", 0);
+      progress.Start("Calculate Impact and Replacement Values ...");
       progress.CanBeStopped = true;
       cancellationTokenSource = new CancellationTokenSource();
@@ -312,5 +312,5 @@
 
     private async void btnOptimizeConstants_Click(object sender, EventArgs e) {
-      progress.Start("Optimizing Constants ...", 0);
+      progress.Start("Optimizing Constants ...");
       var tree = (ISymbolicExpressionTree)Content.Model.SymbolicExpressionTree.Clone();
       var newTree = await Task.Run(() => OptimizeConstants(tree, progress));
Index: /branches/EnhancedProgress/HeuristicLab.Problems.DataAnalysis.Views/3.4/MenuItems/ShrinkDataAnalysisRunsMenuItem.cs
===================================================================
--- /branches/EnhancedProgress/HeuristicLab.Problems.DataAnalysis.Views/3.4/MenuItems/ShrinkDataAnalysisRunsMenuItem.cs	(revision 15476)
+++ /branches/EnhancedProgress/HeuristicLab.Problems.DataAnalysis.Views/3.4/MenuItems/ShrinkDataAnalysisRunsMenuItem.cs	(revision 15477)
@@ -76,6 +76,6 @@
     public override void Execute() {
       IContentView activeView = (IContentView)MainFormManager.MainForm.ActiveView;
-      var mainForm = (MainForm.WindowsForms.MainForm)MainFormManager.MainForm;
-      mainForm.AddOperationProgressToContent(activeView.Content, "Removing duplicate datasets.");
+      var content = activeView.Content;
+      Progress.ShowMarquee(content, "Removing duplicate datasets.");
 
       Action<IContentView> action = (view) => {
@@ -90,7 +90,7 @@
       };
 
-      action.BeginInvoke(activeView, delegate(IAsyncResult result) {
+      action.BeginInvoke(activeView, delegate (IAsyncResult result) {
         action.EndInvoke(result);
-        mainForm.RemoveOperationProgressFromContent(activeView.Content);
+        Progress.Hide(content);
       }, null);
     }
Index: /branches/EnhancedProgress/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/RegressionSolutionVariableImpactsView.cs
===================================================================
--- /branches/EnhancedProgress/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/RegressionSolutionVariableImpactsView.cs	(revision 15476)
+++ /branches/EnhancedProgress/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/RegressionSolutionVariableImpactsView.cs	(revision 15477)
@@ -24,5 +24,4 @@
 using HeuristicLab.Data;
 using HeuristicLab.MainForm;
-using HeuristicLab.Problems.DataAnalysis.Symbolic.Regression;
 
 namespace HeuristicLab.Problems.DataAnalysis.Views {
@@ -80,5 +79,4 @@
         || factorVarReplComboBox.SelectedIndex < 0
         || dataPartitionComboBox.SelectedIndex < 0) return;
-      var mainForm = (MainForm.WindowsForms.MainForm)MainFormManager.MainForm;
       variableImactsArrayView.Caption = Content.Name + " Variable Impacts";
       var replMethod =
@@ -93,5 +91,5 @@
       Task.Factory.StartNew(() => {
         try {
-          mainForm.AddOperationProgressToView(this, "Calculating variable impacts for " + Content.Name);
+          Progress.ShowMarquee(this, "Calculating variable impacts for " + Content.Name);
 
           var impacts = RegressionSolutionVariableImpactsCalculator.CalculateImpacts(Content, dataPartition, replMethod, factorReplMethod);
@@ -100,5 +98,5 @@
           variableImactsArrayView.Content = (DoubleArray)impactArray.AsReadOnly();
         } finally {
-          mainForm.RemoveOperationProgressFromView(this);
+          Progress.Hide(this);
         }
       });
Index: /branches/EnhancedProgress/HeuristicLab.Problems.Instances.DataAnalysis.Views/3.3/RegressionInstanceProviderView.cs
===================================================================
--- /branches/EnhancedProgress/HeuristicLab.Problems.Instances.DataAnalysis.Views/3.3/RegressionInstanceProviderView.cs	(revision 15476)
+++ /branches/EnhancedProgress/HeuristicLab.Problems.Instances.DataAnalysis.Views/3.3/RegressionInstanceProviderView.cs	(revision 15477)
@@ -46,22 +46,18 @@
 
         Task.Factory.StartNew(() => {
-          var mainForm = (MainForm.WindowsForms.MainForm)MainFormManager.MainForm;
+          var activeView = (IContentView)MainFormManager.MainForm.ActiveView;
+          var content = activeView.Content;
           // lock active view and show progress bar
-          IContentView activeView = (IContentView)MainFormManager.MainForm.ActiveView;
+          try {
+            var progress = Progress.Show(content, "Loading problem instance.");
 
-          try {
-            var progress = mainForm.AddOperationProgressToContent(activeView.Content,
-              "Loading problem instance.", 0);
+            Content.ProgressChanged += (o, args) => { progress.ProgressValue = args.ProgressPercentage / 100.0; };
 
-            Content.ProgressChanged +=
-              (o, args) => { progress.ProgressValue = args.ProgressPercentage / 100.0; };
-
-            instance = Content.ImportData(importTypeDialog.Path, importTypeDialog.ImportType,
-              importTypeDialog.CSVFormat);
+            instance = Content.ImportData(importTypeDialog.Path, importTypeDialog.ImportType, importTypeDialog.CSVFormat);
           } catch (Exception ex) {
             ErrorWhileParsing(ex);
             return;
           } finally {
-            mainForm.RemoveOperationProgressFromContent(activeView.Content);
+            Progress.Hide(content);
           }
 
Index: /branches/EnhancedProgress/HeuristicLab.Problems.Instances.Views/3.3/ProblemInstanceProviderViewGeneric.cs
===================================================================
--- /branches/EnhancedProgress/HeuristicLab.Problems.Instances.Views/3.3/ProblemInstanceProviderViewGeneric.cs	(revision 15476)
+++ /branches/EnhancedProgress/HeuristicLab.Problems.Instances.Views/3.3/ProblemInstanceProviderViewGeneric.cs	(revision 15477)
@@ -121,7 +121,7 @@
 
         IContentView activeView = (IContentView)MainFormManager.MainForm.ActiveView;
-        var mainForm = (MainForm.WindowsForms.MainForm)MainFormManager.MainForm;
+        var content = activeView.Content;
         // lock active view and show progress bar
-        mainForm.AddOperationProgressToContent(activeView.Content, "Loading problem instance.");
+        Progress.ShowMarquee(content, "Loading problem instance.");
 
         Task.Factory.StartNew(() => {
@@ -131,5 +131,5 @@
           } catch (Exception ex) {
             ErrorHandling.ShowErrorDialog(String.Format("Could not load the problem instance {0}", descriptor.Name), ex);
-            mainForm.RemoveOperationProgressFromContent(activeView.Content);
+            Progress.Hide(content);
             return;
           }
@@ -139,5 +139,5 @@
             ErrorHandling.ShowErrorDialog(String.Format("This problem does not support loading the instance {0}", descriptor.Name), ex);
           } finally {
-            mainForm.RemoveOperationProgressFromContent(activeView.Content);
+            Progress.Hide(content);
           }
         });
Index: /branches/EnhancedProgress/HeuristicLab.Scripting.Views/3.3/ScriptView.cs
===================================================================
--- /branches/EnhancedProgress/HeuristicLab.Scripting.Views/3.3/ScriptView.cs	(revision 15476)
+++ /branches/EnhancedProgress/HeuristicLab.Scripting.Views/3.3/ScriptView.cs	(revision 15477)
@@ -178,6 +178,5 @@
 
     private void AddProgressView(string progressMessage) {
-      var mainForm = MainFormManager.GetMainForm<MainForm.WindowsForms.MainForm>();
-      mainForm.AddOperationProgressToView(this, progressMessage);
+      Progress.ShowMarquee(this, progressMessage);
       progressViewCreated = true;
     }
@@ -185,6 +184,5 @@
     private void RemoveProgressView() {
       if (!progressViewCreated) return;
-      var mainForm = MainFormManager.GetMainForm<MainForm.WindowsForms.MainForm>();
-      mainForm.RemoveOperationProgressFromView(this);
+      Progress.Hide(this);
       progressViewCreated = false;
     }
