Index: /branches/EnhancedProgress/HeuristicLab.MainForm.WindowsForms/3.3/Controls/ProgressView.cs
===================================================================
--- /branches/EnhancedProgress/HeuristicLab.MainForm.WindowsForms/3.3/Controls/ProgressView.cs	(revision 15416)
+++ /branches/EnhancedProgress/HeuristicLab.MainForm.WindowsForms/3.3/Controls/ProgressView.cs	(revision 15417)
@@ -48,13 +48,9 @@
       this.content = content;
 
-      UpdateButtonsState();
-      if (content.Visible) ShowProgress();
+      if (content.ProgressState != ProgressState.Finished)
+        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();
@@ -72,5 +68,4 @@
       content.ProgressBarModeChanged += new EventHandler(Content_ProgressBarModeChanged);
       content.ProgressValueChanged += new EventHandler(Content_ProgressValueChanged);
-      content.VisibleChanged += new EventHandler(Content_VisibleChanged);
       content.CanBeStoppedChanged += new EventHandler(Content_CanBeStoppedChanged);
       content.CanBeCanceledChanged += new EventHandler(Content_CanBeCanceledChanged);
@@ -81,5 +76,4 @@
       content.ProgressBarModeChanged -= new EventHandler(Content_ProgressBarModeChanged);
       content.ProgressValueChanged -= new EventHandler(Content_ProgressValueChanged);
-      content.VisibleChanged -= new EventHandler(Content_VisibleChanged);
       content.CanBeStoppedChanged -= new EventHandler(Content_CanBeStoppedChanged);
       content.CanBeCanceledChanged -= new EventHandler(Content_CanBeCanceledChanged);
@@ -102,69 +96,65 @@
     }
 
-    private void Content_VisibleChanged(object sender, EventArgs e) {
-      if (content.Visible)
+    private void Content_CanBeStoppedChanged(object sender, EventArgs e) {
+      UpdateButtonsState();
+    }
+    private void Content_CanBeCanceledChanged(object sender, EventArgs e) {
+      UpdateButtonsState();
+    }
+
+    private void ShowProgress() {
+      if (control.InvokeRequired) {
+        control.Invoke((Action)ShowProgress);
+        return;
+      }
+      if (Parent != null) return;
+
+      int height = (content.CanBeStopped || content.CanBeCanceled) ? Height : collapsedControlHeight;
+      Left = (control.ClientRectangle.Width / 2) - (Width / 2);
+      Top = (control.ClientRectangle.Height / 2) - (height / 2);
+      Anchor = AnchorStyles.None;
+
+      UpdateProgressMessage();
+      UpdateProgressValue();
+      UpdateButtonsState();
+
+      control.Enabled = false;
+      Parent = control.Parent;
+      BringToFront();
+      Visible = true;
+    }
+
+    private void HideProgress() {
+      if (control.InvokeRequired) {
+        control.Invoke((Action)HideProgress);
+        return;
+      }
+      if (Parent == null) return;
+
+      Visible = false;
+      control.Enabled = true;
+      Parent = null;
+    }
+
+    private void UpdateProgressState() {
+      if (control.InvokeRequired) {
+        control.Invoke((Action)UpdateProgressState);
+        return;
+      }
+
+      if (content.ProgressState != ProgressState.Finished)
         ShowProgress();
       else
         HideProgress();
-    }
-
-    private void Content_CanBeStoppedChanged(object sender, EventArgs e) {
-      UpdateButtonsState();
-    }
-    private void Content_CanBeCanceledChanged(object sender, EventArgs e) {
-      UpdateButtonsState();
-    }
-
-    private void ShowProgress() {
-      if (control.InvokeRequired) {
-        control.Invoke((Action)ShowProgress);
-        return;
-      }
-
-      int height = (content.CanBeStopped || content.CanBeCanceled) ? Height : collapsedControlHeight;
-
-      Left = (control.ClientRectangle.Width / 2) - (Width / 2);
-      Top = (control.ClientRectangle.Height / 2) - (height / 2);
-      Anchor = AnchorStyles.None;
-
-      control.Enabled = false;
-      Parent = control.Parent;
-      BringToFront();
-
-      UpdateProgressValue();
-      UpdateProgressMessage();
-      UpdateButtonsState();
-      Visible = true;
-    }
-
-    private void HideProgress() {
-      if (control.InvokeRequired) {
-        control.Invoke((Action)HideProgress);
-        return;
-      }
-
-      control.Enabled = true;
-      Parent = null;
-      Visible = false;
-    }
-
-    private void UpdateProgressState() {
-      if (control.InvokeRequired) {
-        control.Invoke((Action)UpdateProgressState);
-        return;
-      }
 
       switch (content.ProgressState) {
         case ProgressState.Started:
+        case ProgressState.Finished:
           progressBar.SetState(ProgressBarState.Normal);
           break;
-        case ProgressState.Finished:
-          HideProgress();
-          progressBar.SetState(ProgressBarState.Normal);
-          break;
-        case ProgressState.Stopped:
+        case ProgressState.StopRequested:
           progressBar.SetState(ProgressBarState.Warning);
           break;
-        case ProgressState.Canceled:
+        case ProgressState.CancelRequested:
           progressBar.SetState(ProgressBarState.Error);
           break;
@@ -211,8 +201,8 @@
 
       stopButton.Visible = content.CanBeStopped;
-      stopButton.Enabled = content.ProgressState == ProgressState.Started && content.CanBeStopped;
+      stopButton.Enabled = content.CanBeStopped && content.ProgressState == ProgressState.Started;
 
       cancelButton.Visible = content.CanBeCanceled;
-      cancelButton.Enabled = content.ProgressState == ProgressState.Started && content.CanBeCanceled;
+      cancelButton.Enabled = content.CanBeCanceled && content.ProgressState == ProgressState.Started;
 
       if (content.CanBeStopped || content.CanBeCanceled) {
Index: /branches/EnhancedProgress/HeuristicLab.MainForm.WindowsForms/3.3/Controls/ProgressView.designer.cs
===================================================================
--- /branches/EnhancedProgress/HeuristicLab.MainForm.WindowsForms/3.3/Controls/ProgressView.designer.cs	(revision 15416)
+++ /branches/EnhancedProgress/HeuristicLab.MainForm.WindowsForms/3.3/Controls/ProgressView.designer.cs	(revision 15417)
@@ -103,5 +103,4 @@
       // stopButton
       // 
-      this.stopButton.Dock = System.Windows.Forms.DockStyle.Left;
       this.stopButton.Location = new System.Drawing.Point(193, 3);
       this.stopButton.Name = "stopButton";
Index: /branches/EnhancedProgress/HeuristicLab.MainForm/3.3/Interfaces/IProgress.cs
===================================================================
--- /branches/EnhancedProgress/HeuristicLab.MainForm/3.3/Interfaces/IProgress.cs	(revision 15416)
+++ /branches/EnhancedProgress/HeuristicLab.MainForm/3.3/Interfaces/IProgress.cs	(revision 15417)
@@ -24,5 +24,5 @@
 
 namespace HeuristicLab.MainForm {
-  public enum ProgressState { Started, Finished, Stopped, Canceled }
+  public enum ProgressState { Started, Finished, StopRequested, CancelRequested }
   public enum ProgressBarMode { Continuous, Marquee }
 
@@ -36,5 +36,4 @@
     /// </summary>
     double ProgressValue { get; set; }
-    bool Visible { get; set; }
     bool CanBeStopped { get; }
     bool CanBeCanceled { get; }
@@ -56,5 +55,4 @@
     event EventHandler ProgressBarModeChanged;
     event EventHandler ProgressValueChanged;
-    event EventHandler VisibleChanged;
     event EventHandler CanBeStoppedChanged;
     event EventHandler CanBeCanceledChanged;
Index: /branches/EnhancedProgress/HeuristicLab.MainForm/3.3/Progress.cs
===================================================================
--- /branches/EnhancedProgress/HeuristicLab.MainForm/3.3/Progress.cs	(revision 15416)
+++ /branches/EnhancedProgress/HeuristicLab.MainForm/3.3/Progress.cs	(revision 15417)
@@ -70,15 +70,4 @@
     }
 
-    private bool visible;
-    public bool Visible {
-      get { return visible; }
-      set {
-        if (visible != value) {
-          visible = value;
-          OnVisibleChanged();
-        }
-      }
-    }
-
     private bool canBeStopped;
     public bool CanBeStopped {
@@ -115,5 +104,4 @@
       ProgressBarMode = ProgressBarMode.Marquee;
       Message = message;
-      Visible = true;
     }
     public void Start(string message, double progressValue) {
@@ -122,5 +110,4 @@
       ProgressValue = progressValue;
       Message = message;
-      Visible = true;
     }
 
@@ -129,10 +116,9 @@
         ProgressValue = 1.0;
       ProgressState = ProgressState.Finished;
-      Visible = false;
     }
 
     public void Stop() {
       if (canBeStopped) {
-        ProgressState = ProgressState.Stopped;
+        ProgressState = ProgressState.StopRequested;
         OnStopRequested();
       } else throw new NotSupportedException("This progress cannot be stopped.");
@@ -140,5 +126,5 @@
     public void Cancel() {
       if (canBeCanceled) {
-        ProgressState = ProgressState.Canceled;
+        ProgressState = ProgressState.CancelRequested;
         OnCancelRequested();
       } else throw new NotSupportedException("This progress cannot be canceled.");
@@ -170,10 +156,4 @@
     }
 
-    public event EventHandler VisibleChanged;
-    private void OnVisibleChanged() {
-      var handler = VisibleChanged;
-      if (handler != null) handler(this, EventArgs.Empty);
-    }
-
     public event EventHandler CanBeStoppedChanged;
     private void OnCanBeStoppedChanged() {
Index: /branches/EnhancedProgress/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/InteractiveSymbolicDataAnalysisSolutionSimplifierView.cs
===================================================================
--- /branches/EnhancedProgress/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/InteractiveSymbolicDataAnalysisSolutionSimplifierView.cs	(revision 15416)
+++ /branches/EnhancedProgress/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/InteractiveSymbolicDataAnalysisSolutionSimplifierView.cs	(revision 15417)
@@ -40,5 +40,5 @@
     private readonly ISymbolicDataAnalysisSolutionImpactValuesCalculator impactCalculator;
 
-    private readonly IProgress progress = new Progress() { CanBeCanceled = true, CanBeStopped = true };
+    private readonly Progress progress = new Progress();
 
     private enum TreeState { Valid, Invalid }
@@ -184,6 +184,8 @@
 
       progress.Start("Calculate Impact and Replacement Values ...", 0);
+      progress.CanBeStopped = true;
       var impactAndReplacementValues = await Task.Run(() => CalculateImpactAndReplacementValues(tree));
-      await Task.Delay(500); // wait for progressbar to finish animation
+      if (progress.ProgressState != ProgressState.StopRequested)
+        await Task.Delay(500); // wait for progressbar to finish animation
       var replacementValues = impactAndReplacementValues.ToDictionary(x => x.Key, x => x.Value.Item2);
       foreach (var pair in replacementValues.Where(pair => !(pair.Key is ConstantTreeNode))) {
@@ -192,4 +194,5 @@
       nodeImpacts = impactAndReplacementValues.ToDictionary(x => x.Key, x => x.Value.Item1);
       progress.Finish();
+      progress.CanBeStopped = false;
       PaintNodeImpacts();
     }
@@ -198,4 +201,5 @@
       var impactAndReplacementValues = new Dictionary<ISymbolicExpressionTreeNode, Tuple<double, double>>();
       foreach (var node in tree.Root.GetSubtree(0).GetSubtree(0).IterateNodesPrefix()) {
+        if (progress.ProgressState == ProgressState.StopRequested) continue;
         double impactValue, replacementValue, newQualityForImpactsCalculation;
         impactCalculator.CalculateImpactAndReplacementValues(Content.Model, node, Content.ProblemData, Content.ProblemData.TrainingIndices, out impactValue, out replacementValue, out newQualityForImpactsCalculation);
