Index: branches/2892_LR-prediction-intervals/HeuristicLab.Problems.DataAnalysis.Views/3.4/Classification/ClassificationSolutionVariableImpactsView.Designer.cs
===================================================================
--- branches/2892_LR-prediction-intervals/HeuristicLab.Problems.DataAnalysis.Views/3.4/Classification/ClassificationSolutionVariableImpactsView.Designer.cs	(revision 15743)
+++ branches/2892_LR-prediction-intervals/HeuristicLab.Problems.DataAnalysis.Views/3.4/Classification/ClassificationSolutionVariableImpactsView.Designer.cs	(revision 16388)
@@ -170,9 +170,4 @@
       this.sortByComboBox.SelectedIndexChanged += new System.EventHandler(this.sortByComboBox_SelectedIndexChanged);
       // 
-      // backgroundWorker
-      // 
-      this.backgroundWorker.DoWork += new System.ComponentModel.DoWorkEventHandler(this.backgroundWorker_DoWork);
-      this.backgroundWorker.RunWorkerCompleted += new System.ComponentModel.RunWorkerCompletedEventHandler(this.backgroundWorker_RunWorkerCompleted);
-      // 
       // ClassificationSolutionVariableImpactsView
       // 
@@ -191,4 +186,5 @@
       this.Name = "ClassificationSolutionVariableImpactsView";
       this.Size = new System.Drawing.Size(668, 365);
+      this.VisibleChanged += new System.EventHandler(this.ClassificationSolutionVariableImpactsView_VisibleChanged);
       this.ResumeLayout(false);
       this.PerformLayout();
Index: branches/2892_LR-prediction-intervals/HeuristicLab.Problems.DataAnalysis.Views/3.4/Classification/ClassificationSolutionVariableImpactsView.cs
===================================================================
--- branches/2892_LR-prediction-intervals/HeuristicLab.Problems.DataAnalysis.Views/3.4/Classification/ClassificationSolutionVariableImpactsView.cs	(revision 15743)
+++ branches/2892_LR-prediction-intervals/HeuristicLab.Problems.DataAnalysis.Views/3.4/Classification/ClassificationSolutionVariableImpactsView.cs	(revision 16388)
@@ -23,4 +23,6 @@
 using System.Collections.Generic;
 using System.Linq;
+using System.Threading;
+using System.Threading.Tasks;
 using HeuristicLab.Common;
 using HeuristicLab.Data;
@@ -32,11 +34,4 @@
   public partial class ClassificationSolutionVariableImpactsView : DataAnalysisSolutionEvaluationView {
     #region Nested Types
-    private class BackgroundWorkerArguments {
-      internal MainForm.WindowsForms.MainForm mainForm;
-      internal ClassificationSolutionVariableImpactsCalculator.ReplacementMethodEnum replMethod;
-      internal ClassificationSolutionVariableImpactsCalculator.FactorReplacementMethodEnum factorReplMethod;
-      internal ClassificationSolutionVariableImpactsCalculator.DataPartitionEnum dataPartition;
-    }
-
     private enum SortingCriteria {
       ImpactValue,
@@ -48,4 +43,5 @@
     #region Fields
     private Dictionary<string, double> rawVariableImpacts = new Dictionary<string, double>();
+    private Thread thread;
     #endregion
 
@@ -64,5 +60,4 @@
       InitializeComponent();
 
-      //Little workaround. If you fill the ComboBox-Items in the other partial class, the UI-Designer will moan.
       this.sortByComboBox.Items.AddRange(Enum.GetValues(typeof(SortingCriteria)).Cast<object>().ToArray());
       this.sortByComboBox.SelectedItem = SortingCriteria.ImpactValue;
@@ -101,15 +96,22 @@
         variableImactsArrayView.Content = null;
       } else {
-        StartBackgroundWorker();
-      }
+        UpdateVariableImpact();
+      }
+    }
+
+    private void ClassificationSolutionVariableImpactsView_VisibleChanged(object sender, EventArgs e) {
+      if (thread == null) { return; }
+
+      if (thread.IsAlive) { thread.Abort(); }
+      thread = null;
     }
 
 
     private void dataPartitionComboBox_SelectedIndexChanged(object sender, EventArgs e) {
-      StartBackgroundWorker();
+      UpdateVariableImpact();
     }
 
     private void replacementComboBox_SelectedIndexChanged(object sender, EventArgs e) {
-      StartBackgroundWorker();
+      UpdateVariableImpact();
     }
 
@@ -139,35 +141,8 @@
     }
 
-
-    private void backgroundWorker_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e) {
-      variableImactsArrayView.Caption = Content.Name + " Variable Impacts";
-
-      var argument = e.Argument as BackgroundWorkerArguments;
-      if (!(argument is BackgroundWorkerArguments)) {
-        throw new ArgumentException("Argument for Backgroundworker must be of type BackgroundworkerArguments");
-      }
-
-      argument.mainForm.AddOperationProgressToView(this, "Calculating variable impacts for " + Content.Name);
-      try {
-        //Remember the original ordering of the variables
-        var impacts = ClassificationSolutionVariableImpactsCalculator.CalculateImpacts(Content, argument.dataPartition, argument.replMethod, argument.factorReplMethod);
-        var problemData = Content.ProblemData;
-        var inputvariables = new HashSet<string>(problemData.AllowedInputVariables.Union(Content.Model.VariablesUsedForPrediction));
-        var originalVariableOrdering = problemData.Dataset.VariableNames.Where(v => inputvariables.Contains(v)).Where(problemData.Dataset.VariableHasType<double>).ToList();
-
-        rawVariableImpacts.Clear();
-        originalVariableOrdering.ForEach(v => rawVariableImpacts.Add(v, impacts.First(vv => vv.Item1 == v).Item2));
-      } finally {
-        argument.mainForm.RemoveOperationProgressFromView(this);
-      }
-    }
-
-    private void backgroundWorker_RunWorkerCompleted(object sender, System.ComponentModel.RunWorkerCompletedEventArgs e) {
-      UpdateDataOrdering();
-    }
-    #endregion
-
-    #region Helper Methods
-    private void StartBackgroundWorker() {
+    #endregion
+
+    #region Helper Methods   
+    private void UpdateVariableImpact() {
       //Check if the selection is valid
       if (Content == null) { return; }
@@ -181,14 +156,24 @@
       var factorReplMethod = (ClassificationSolutionVariableImpactsCalculator.FactorReplacementMethodEnum)factorVarReplComboBox.Items[factorVarReplComboBox.SelectedIndex];
       var dataPartition = (ClassificationSolutionVariableImpactsCalculator.DataPartitionEnum)dataPartitionComboBox.SelectedItem;
-      var args = new BackgroundWorkerArguments() {
-        mainForm = mainForm,
-        replMethod = replMethod,
-        factorReplMethod = factorReplMethod,
-        dataPartition = dataPartition
-      };
-
-      //Let the backgroundWorker do his job (unless he's already running)
-      //fholzing: Possible bug -> A ContentChanged won't update the data if the backgroundworker is already running
-      if (!backgroundWorker.IsBusy) { backgroundWorker.RunWorkerAsync(args); }
+
+      variableImactsArrayView.Caption = Content.Name + " Variable Impacts";
+
+      mainForm.AddOperationProgressToView(this, "Calculating variable impacts for " + Content.Name);
+
+      Task.Factory.StartNew(() => {
+        thread = Thread.CurrentThread;
+        //Remember the original ordering of the variables
+        var impacts = ClassificationSolutionVariableImpactsCalculator.CalculateImpacts(Content, dataPartition, replMethod, factorReplMethod);
+        var problemData = Content.ProblemData;
+        var inputvariables = new HashSet<string>(problemData.AllowedInputVariables.Union(Content.Model.VariablesUsedForPrediction));
+        var originalVariableOrdering = problemData.Dataset.VariableNames.Where(v => inputvariables.Contains(v)).Where(problemData.Dataset.VariableHasType<double>).ToList();
+
+        rawVariableImpacts.Clear();
+        originalVariableOrdering.ForEach(v => rawVariableImpacts.Add(v, impacts.First(vv => vv.Item1 == v).Item2));
+      }).ContinueWith((o) => {
+        UpdateDataOrdering();
+        mainForm.RemoveOperationProgressFromView(this);
+        thread = null;
+      }, TaskScheduler.FromCurrentSynchronizationContext());
     }
 
@@ -230,10 +215,10 @@
       };
 
-      //Could be, if the View was closed during the BackgroundWorker-run
+      //Could be, if the View was closed
       if (!variableImactsArrayView.IsDisposed) {
         variableImactsArrayView.Content = (DoubleArray)impactArray.AsReadOnly();
       }
     }
-    #endregion 
+    #endregion  
   }
 }
Index: branches/2892_LR-prediction-intervals/HeuristicLab.Problems.DataAnalysis.Views/3.4/Controls/FactorPartialDependencePlot.cs
===================================================================
--- branches/2892_LR-prediction-intervals/HeuristicLab.Problems.DataAnalysis.Views/3.4/Controls/FactorPartialDependencePlot.cs	(revision 15743)
+++ branches/2892_LR-prediction-intervals/HeuristicLab.Problems.DataAnalysis.Views/3.4/Controls/FactorPartialDependencePlot.cs	(revision 16388)
@@ -143,11 +143,8 @@
       // Configure axis
       chart.CustomizeAllChartAreas();
-      chart.ChartAreas[0].CursorX.IsUserSelectionEnabled = true;
-      chart.ChartAreas[0].AxisX.ScaleView.Zoomable = true;
-      chart.ChartAreas[0].CursorX.Interval = 0;
-
-      chart.ChartAreas[0].CursorY.IsUserSelectionEnabled = true;
-      chart.ChartAreas[0].AxisY.ScaleView.Zoomable = true;
-      chart.ChartAreas[0].CursorY.Interval = 0;
+      chart.ChartAreas[0].CursorX.IsUserSelectionEnabled = false;
+      chart.ChartAreas[0].CursorY.IsUserSelectionEnabled = false;
+
+      chart.ChartAreas[0].Axes.ToList().ForEach(x => { x.ScaleView.Zoomable = false; });
 
       Disposed += Control_Disposed;
Index: branches/2892_LR-prediction-intervals/HeuristicLab.Problems.DataAnalysis.Views/3.4/Controls/PartialDependencePlot.cs
===================================================================
--- branches/2892_LR-prediction-intervals/HeuristicLab.Problems.DataAnalysis.Views/3.4/Controls/PartialDependencePlot.cs	(revision 15743)
+++ branches/2892_LR-prediction-intervals/HeuristicLab.Problems.DataAnalysis.Views/3.4/Controls/PartialDependencePlot.cs	(revision 16388)
@@ -215,11 +215,8 @@
       // Configure axis
       chart.CustomizeAllChartAreas();
-      chart.ChartAreas[0].CursorX.IsUserSelectionEnabled = true;
-      chart.ChartAreas[0].AxisX.ScaleView.Zoomable = true;
-      chart.ChartAreas[0].CursorX.Interval = 0;
-
-      chart.ChartAreas[0].CursorY.IsUserSelectionEnabled = true;
-      chart.ChartAreas[0].AxisY.ScaleView.Zoomable = true;
-      chart.ChartAreas[0].CursorY.Interval = 0;
+      chart.ChartAreas[0].CursorX.IsUserSelectionEnabled = false;
+      chart.ChartAreas[0].CursorY.IsUserSelectionEnabled = false;
+
+      chart.ChartAreas[0].Axes.ToList().ForEach(x => { x.ScaleView.Zoomable = false; });
 
       configToolStripMenuItem = new ToolStripMenuItem("Configuration");
@@ -351,6 +348,6 @@
 
     private void RecalculateTrainingLimits(bool initializeAxisRanges) {
-      trainingMin = solutions.Select(s => s.ProblemData.Dataset.GetDoubleValues(freeVariable, s.ProblemData.TrainingIndices).Min()).Max();
-      trainingMax = solutions.Select(s => s.ProblemData.Dataset.GetDoubleValues(freeVariable, s.ProblemData.TrainingIndices).Max()).Min();
+      trainingMin = solutions.Select(s => s.ProblemData.Dataset.GetDoubleValues(freeVariable, s.ProblemData.TrainingIndices).Where(x => !double.IsNaN(x)).Min()).Max();
+      trainingMax = solutions.Select(s => s.ProblemData.Dataset.GetDoubleValues(freeVariable, s.ProblemData.TrainingIndices).Where(x => !double.IsNaN(x)).Max()).Min();
 
       if (initializeAxisRanges) {
@@ -702,4 +699,5 @@
     private void config_Click(object sender, EventArgs e) {
       configurationDialog.ShowDialog(this);
+      OnZoomChanged(this, EventArgs.Empty);
     }
 
Index: branches/2892_LR-prediction-intervals/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/RegressionSolutionErrorCharacteristicsCurveView.cs
===================================================================
--- branches/2892_LR-prediction-intervals/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/RegressionSolutionErrorCharacteristicsCurveView.cs	(revision 15743)
+++ branches/2892_LR-prediction-intervals/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/RegressionSolutionErrorCharacteristicsCurveView.cs	(revision 16388)
@@ -249,9 +249,12 @@
     protected virtual List<double> GetResiduals(IEnumerable<double> originalValues, IEnumerable<double> estimatedValues) {
       switch (residualComboBox.SelectedItem.ToString()) {
-        case "Absolute error": return originalValues.Zip(estimatedValues, (x, y) => Math.Abs(x - y)).ToList();
-        case "Squared error": return originalValues.Zip(estimatedValues, (x, y) => (x - y) * (x - y)).ToList();
-        case "Relative error": return originalValues.Zip(estimatedValues, (x, y) => x.IsAlmost(0.0) ? -1 : Math.Abs((x - y) / x))
-          .Where(x => x > 0) // remove entries where the original value is 0
-          .ToList();
+        case "Absolute error": return originalValues.Zip(estimatedValues, (x, y) => Math.Abs(x - y))
+            .Where(r => !double.IsNaN(r) && !double.IsInfinity(r)).ToList();
+        case "Squared error": return originalValues.Zip(estimatedValues, (x, y) => (x - y) * (x - y))
+            .Where(r => !double.IsNaN(r) && !double.IsInfinity(r)).ToList();
+        case "Relative error":
+          return originalValues.Zip(estimatedValues, (x, y) => x.IsAlmost(0.0) ? -1 : Math.Abs((x - y) / x))
+            .Where(r => r > 0 && !double.IsNaN(r) && !double.IsInfinity(r)) // remove entries where the original value is 0
+            .ToList();
         default: throw new NotSupportedException();
       }
Index: branches/2892_LR-prediction-intervals/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/RegressionSolutionLineChartViewBase.cs
===================================================================
--- branches/2892_LR-prediction-intervals/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/RegressionSolutionLineChartViewBase.cs	(revision 15743)
+++ branches/2892_LR-prediction-intervals/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/RegressionSolutionLineChartViewBase.cs	(revision 16388)
@@ -20,5 +20,4 @@
 #endregion
 using System;
-using System.Collections.Generic;
 using System.Drawing;
 using System.Linq;
@@ -72,6 +71,10 @@
         this.chart.Series[TARGETVARIABLE_SERIES_NAME].LegendText = TARGETVARIABLE_SERIES_NAME;
         this.chart.Series[TARGETVARIABLE_SERIES_NAME].ChartType = SeriesChartType.FastLine;
-        this.chart.Series[TARGETVARIABLE_SERIES_NAME].Points.DataBindXY(Enumerable.Range(0, Content.ProblemData.Dataset.Rows).ToArray(),
-          Content.ProblemData.Dataset.GetDoubleValues(Content.ProblemData.TargetVariable).ToArray());
+
+        var rows = Enumerable.Range(0, Content.ProblemData.Dataset.Rows).ToArray();
+        var targetValues = Content.ProblemData.Dataset.GetDoubleValues(Content.ProblemData.TargetVariable);
+
+
+        this.chart.Series[TARGETVARIABLE_SERIES_NAME].Points.DataBindXY(rows.ToArray(), targetValues.Select(v => double.IsInfinity(v) ? double.NaN : v).ToArray());
         // training series
         this.chart.Series.Add(ESTIMATEDVALUES_TRAINING_SERIES_NAME);
@@ -161,5 +164,6 @@
       var targetValues = this.chart.Series[TARGETVARIABLE_SERIES_NAME].Points.Select(x => x.YValues[0]).DefaultIfEmpty(1.0);
       double estimatedValuesRange = estimatedValues.Max() - estimatedValues.Min();
-      double targetValuesRange = targetValues.Max() - targetValues.Min();
+      double targetValuesRange = targetValues.Where(v => !double.IsInfinity(v) && !double.IsNaN(v)).Max() - 
+                                 targetValues.Where(v => !double.IsInfinity(v) && !double.IsNaN(v)).Min();
       double interestingValuesRange = Math.Min(Math.Max(targetValuesRange, 1.0), Math.Max(estimatedValuesRange, 1.0));
       double digits = (int)Math.Log10(interestingValuesRange) - 3;
Index: branches/2892_LR-prediction-intervals/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/RegressionSolutionResidualAnalysisView.cs
===================================================================
--- branches/2892_LR-prediction-intervals/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/RegressionSolutionResidualAnalysisView.cs	(revision 15743)
+++ branches/2892_LR-prediction-intervals/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/RegressionSolutionResidualAnalysisView.cs	(revision 16388)
@@ -89,5 +89,5 @@
       var runs = new RunCollection();
       // determine relevant variables (at least two different values)
-      var doubleVars = ds.DoubleVariables.Where(vn => ds.GetDoubleValues(vn).Max() > ds.GetDoubleValues(vn).Min()).ToArray();
+      var doubleVars = ds.DoubleVariables.Where(vn => ds.GetDoubleValues(vn).Distinct().Skip(1).Any()).ToArray();
       var stringVars = ds.StringVariables.Where(vn => ds.GetStringValues(vn).Distinct().Skip(1).Any()).ToArray();
       var dateTimeVars = ds.DateTimeVariables.Where(vn => ds.GetDateTimeValues(vn).Distinct().Skip(1).Any()).ToArray();
Index: branches/2892_LR-prediction-intervals/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/RegressionSolutionResidualHistogram.cs
===================================================================
--- branches/2892_LR-prediction-intervals/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/RegressionSolutionResidualHistogram.cs	(revision 15743)
+++ branches/2892_LR-prediction-intervals/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/RegressionSolutionResidualHistogram.cs	(revision 16388)
@@ -126,4 +126,6 @@
 
       for (int i = 0; i < solution.ProblemData.Dataset.Rows; i++) {
+        if (double.IsNaN(estimatedValues[i]) || double.IsInfinity(estimatedValues[i])) continue;
+        if (double.IsNaN(targetValues[i]) || double.IsInfinity(targetValues[i])) continue;
         double residual = estimatedValues[i] - targetValues[i];
         residuals.Add(residual);
Index: branches/2892_LR-prediction-intervals/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/RegressionSolutionResidualsLineChartView.cs
===================================================================
--- branches/2892_LR-prediction-intervals/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/RegressionSolutionResidualsLineChartView.cs	(revision 15743)
+++ branches/2892_LR-prediction-intervals/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/RegressionSolutionResidualsLineChartView.cs	(revision 16388)
@@ -38,5 +38,10 @@
       var target = problemData.Dataset.GetDoubleValues(problemData.TargetVariable, idx).ToArray();
       for (int i = 0; i < idx.Length; i++) {
-        x[i] = target[i] - x[i];
+        if (!double.IsInfinity(target[i]) && !double.IsNaN(target[i]) &&
+            !double.IsInfinity(x[i]) && !double.IsNaN(x[i])) {
+          x[i] = target[i] - x[i];
+        } else {
+          x[i] = 0.0;
+        }
       }
     }
Index: branches/2892_LR-prediction-intervals/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/RegressionSolutionScatterPlotView.cs
===================================================================
--- branches/2892_LR-prediction-intervals/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/RegressionSolutionScatterPlotView.cs	(revision 15743)
+++ branches/2892_LR-prediction-intervals/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/RegressionSolutionScatterPlotView.cs	(revision 16388)
@@ -166,6 +166,14 @@
           this.chart.Series[TEST_SERIES].Points.DataBindXY(dataset.GetDoubleValues(targetVariableName, Content.ProblemData.TestIndices).ToArray(), "",
             Content.EstimatedTestValues.ToArray(), "");
-        double max = Content.EstimatedTrainingValues.Concat(Content.EstimatedTestValues.Concat(Content.EstimatedValues.Concat(dataset.GetDoubleValues(targetVariableName)))).Max();
-        double min = Content.EstimatedTrainingValues.Concat(Content.EstimatedTestValues.Concat(Content.EstimatedValues.Concat(dataset.GetDoubleValues(targetVariableName)))).Min();
+        double max = Content.EstimatedTrainingValues
+          .Concat(Content.EstimatedTestValues
+          .Concat(Content.EstimatedValues
+          .Concat(dataset.GetDoubleValues(targetVariableName))))
+          .Where(v => !double.IsNaN(v) && !double.IsInfinity(v)).Max();
+        double min = Content.EstimatedTrainingValues
+          .Concat(Content.EstimatedTestValues
+          .Concat(Content.EstimatedValues
+          .Concat(dataset.GetDoubleValues(targetVariableName))))
+          .Where(v => !double.IsNaN(v) && !double.IsInfinity(v)).Min();
 
         double axisMin, axisMax, axisInterval;
Index: branches/2892_LR-prediction-intervals/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/RegressionSolutionVariableImpactsView.Designer.cs
===================================================================
--- branches/2892_LR-prediction-intervals/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/RegressionSolutionVariableImpactsView.Designer.cs	(revision 15743)
+++ branches/2892_LR-prediction-intervals/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/RegressionSolutionVariableImpactsView.Designer.cs	(revision 16388)
@@ -19,4 +19,5 @@
  */
 #endregion
+
 
 namespace HeuristicLab.Problems.DataAnalysis.Views {
@@ -55,5 +56,4 @@
       this.dataPartitionComboBox = new System.Windows.Forms.ComboBox();
       this.variableImactsArrayView = new HeuristicLab.Data.Views.StringConvertibleArrayView();
-      this.backgroundWorker = new System.ComponentModel.BackgroundWorker();
       this.SuspendLayout();
       // 
@@ -82,4 +82,8 @@
       this.sortByComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
       this.sortByComboBox.FormattingEnabled = true;
+      this.sortByComboBox.Items.AddRange(new object[] {
+            HeuristicLab.Problems.DataAnalysis.Views.RegressionSolutionVariableImpactsView.SortingCriteria.ImpactValue,
+            HeuristicLab.Problems.DataAnalysis.Views.RegressionSolutionVariableImpactsView.SortingCriteria.Occurrence,
+            HeuristicLab.Problems.DataAnalysis.Views.RegressionSolutionVariableImpactsView.SortingCriteria.VariableName});
       this.sortByComboBox.Location = new System.Drawing.Point(407, 3);
       this.sortByComboBox.Name = "sortByComboBox";
@@ -160,6 +164,6 @@
       // variableImactsArrayView
       // 
-      this.variableImactsArrayView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
-            | System.Windows.Forms.AnchorStyles.Left) 
+      this.variableImactsArrayView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+            | System.Windows.Forms.AnchorStyles.Left)
             | System.Windows.Forms.AnchorStyles.Right)));
       this.variableImactsArrayView.Caption = "StringConvertibleArray View";
@@ -170,9 +174,4 @@
       this.variableImactsArrayView.Size = new System.Drawing.Size(706, 278);
       this.variableImactsArrayView.TabIndex = 2;
-      // 
-      // backgroundWorker
-      // 
-      this.backgroundWorker.DoWork += new System.ComponentModel.DoWorkEventHandler(this.backgroundWorker_DoWork);
-      this.backgroundWorker.RunWorkerCompleted += new System.ComponentModel.RunWorkerCompletedEventHandler(this.backgroundWorker_RunWorkerCompleted);
       // 
       // RegressionSolutionVariableImpactsView
@@ -192,4 +191,5 @@
       this.Name = "RegressionSolutionVariableImpactsView";
       this.Size = new System.Drawing.Size(712, 365);
+      this.VisibleChanged += new System.EventHandler(this.RegressionSolutionVariableImpactsView_VisibleChanged);
       this.ResumeLayout(false);
       this.PerformLayout();
@@ -209,5 +209,4 @@
     private System.Windows.Forms.ComboBox sortByComboBox;
     private System.Windows.Forms.CheckBox ascendingCheckBox;
-    private System.ComponentModel.BackgroundWorker backgroundWorker;
   }
 }
Index: branches/2892_LR-prediction-intervals/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/RegressionSolutionVariableImpactsView.cs
===================================================================
--- branches/2892_LR-prediction-intervals/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/RegressionSolutionVariableImpactsView.cs	(revision 15743)
+++ branches/2892_LR-prediction-intervals/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/RegressionSolutionVariableImpactsView.cs	(revision 16388)
@@ -23,4 +23,6 @@
 using System.Collections.Generic;
 using System.Linq;
+using System.Threading;
+using System.Threading.Tasks;
 using HeuristicLab.Common;
 using HeuristicLab.Data;
@@ -31,12 +33,5 @@
   [Content(typeof(IRegressionSolution))]
   public partial class RegressionSolutionVariableImpactsView : DataAnalysisSolutionEvaluationView {
-    #region Nested Types
-    private class BackgroundWorkerArguments {
-      internal MainForm.WindowsForms.MainForm mainForm;
-      internal RegressionSolutionVariableImpactsCalculator.ReplacementMethodEnum replMethod;
-      internal RegressionSolutionVariableImpactsCalculator.FactorReplacementMethodEnum factorReplMethod;
-      internal RegressionSolutionVariableImpactsCalculator.DataPartitionEnum dataPartition;
-    }
-
+    private CancellationTokenSource cancellationToken = new CancellationTokenSource();
     private enum SortingCriteria {
       ImpactValue,
@@ -44,11 +39,6 @@
       VariableName
     }
-    #endregion
-
-    #region Fields
-    private Dictionary<string, double> rawVariableImpacts = new Dictionary<string, double>();
-    #endregion
-
-    #region Getter/Setter
+    private List<Tuple<string, double>> rawVariableImpacts = new List<Tuple<string, double>>();
+
     public new IRegressionSolution Content {
       get { return (IRegressionSolution)base.Content; }
@@ -57,23 +47,16 @@
       }
     }
-    #endregion
-
-    #region Ctor
+
     public RegressionSolutionVariableImpactsView()
       : base() {
       InitializeComponent();
 
-      //Little workaround. If you fill the ComboBox-Items in the other partial class, the UI-Designer will moan.
-      this.sortByComboBox.Items.AddRange(Enum.GetValues(typeof(SortingCriteria)).Cast<object>().ToArray());
-      this.sortByComboBox.SelectedItem = SortingCriteria.ImpactValue;
-
       //Set the default values
       this.dataPartitionComboBox.SelectedIndex = 0;
-      this.replacementComboBox.SelectedIndex = 0;
+      this.replacementComboBox.SelectedIndex = 3;
       this.factorVarReplComboBox.SelectedIndex = 0;
-    }
-    #endregion
-
-    #region Events
+      this.sortByComboBox.SelectedItem = SortingCriteria.ImpactValue;
+    }
+
     protected override void RegisterContentEvents() {
       base.RegisterContentEvents();
@@ -101,15 +84,19 @@
         variableImactsArrayView.Content = null;
       } else {
-        StartBackgroundWorker();
-      }
+        UpdateVariableImpact();
+      }
+    }
+
+    private void RegressionSolutionVariableImpactsView_VisibleChanged(object sender, EventArgs e) {
+      cancellationToken.Cancel();
     }
 
 
     private void dataPartitionComboBox_SelectedIndexChanged(object sender, EventArgs e) {
-      StartBackgroundWorker();
+      UpdateVariableImpact();
     }
 
     private void replacementComboBox_SelectedIndexChanged(object sender, EventArgs e) {
-      StartBackgroundWorker();
+      UpdateVariableImpact();
     }
 
@@ -117,57 +104,18 @@
       //Update the default ordering (asc,desc), but remove the eventHandler beforehand (otherwise the data would be ordered twice)
       ascendingCheckBox.CheckedChanged -= ascendingCheckBox_CheckedChanged;
-      switch ((SortingCriteria)sortByComboBox.SelectedItem) {
-        case SortingCriteria.ImpactValue:
-          ascendingCheckBox.Checked = false;
-          break;
-        case SortingCriteria.Occurrence:
-          ascendingCheckBox.Checked = true;
-          break;
-        case SortingCriteria.VariableName:
-          ascendingCheckBox.Checked = true;
-          break;
-        default:
-          throw new NotImplementedException("Ordering for selected SortingCriteria not implemented");
-      }
+      ascendingCheckBox.Checked = (SortingCriteria)sortByComboBox.SelectedItem != SortingCriteria.ImpactValue;
       ascendingCheckBox.CheckedChanged += ascendingCheckBox_CheckedChanged;
 
-      UpdateDataOrdering();
+      UpdateOrdering();
     }
 
     private void ascendingCheckBox_CheckedChanged(object sender, EventArgs e) {
-      UpdateDataOrdering();
-    }
-
-
-    private void backgroundWorker_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e) {
-      variableImactsArrayView.Caption = Content.Name + " Variable Impacts";
-
-      var argument = e.Argument as BackgroundWorkerArguments;
-      if (!(argument is BackgroundWorkerArguments)) {
-        throw new ArgumentException("Argument for Backgroundworker must be of type BackgroundworkerArguments");
-      }
-
-      argument.mainForm.AddOperationProgressToView(this, "Calculating variable impacts for " + Content.Name);
-      try {
-        //Remember the original ordering of the variables
-        var impacts = RegressionSolutionVariableImpactsCalculator.CalculateImpacts(Content, argument.dataPartition, argument.replMethod, argument.factorReplMethod);
-        var problemData = Content.ProblemData;
-        var inputvariables = new HashSet<string>(problemData.AllowedInputVariables.Union(Content.Model.VariablesUsedForPrediction));
-        var originalVariableOrdering = problemData.Dataset.VariableNames.Where(v => inputvariables.Contains(v)).Where(problemData.Dataset.VariableHasType<double>).ToList();
-
-        rawVariableImpacts.Clear();
-        originalVariableOrdering.ForEach(v => rawVariableImpacts.Add(v, impacts.First(vv => vv.Item1 == v).Item2));
-      } finally {
-        argument.mainForm.RemoveOperationProgressFromView(this);
-      }
-    }
-
-    private void backgroundWorker_RunWorkerCompleted(object sender, System.ComponentModel.RunWorkerCompletedEventArgs e) {
-      UpdateDataOrdering();
-    }
-    #endregion
-
-    #region Helper Methods   
-    private void StartBackgroundWorker() {
+      UpdateOrdering();
+    }
+
+
+    private async void UpdateVariableImpact() {
+      IProgress progress;
+
       //Check if the selection is valid
       if (Content == null) { return; }
@@ -181,14 +129,33 @@
       var factorReplMethod = (RegressionSolutionVariableImpactsCalculator.FactorReplacementMethodEnum)factorVarReplComboBox.Items[factorVarReplComboBox.SelectedIndex];
       var dataPartition = (RegressionSolutionVariableImpactsCalculator.DataPartitionEnum)dataPartitionComboBox.SelectedItem;
-      var args = new BackgroundWorkerArguments() {
-        mainForm = mainForm,
-        replMethod = replMethod,
-        factorReplMethod = factorReplMethod,
-        dataPartition = dataPartition
-      };
-
-      //Let the backgroundWorker do his job (unless he's already running)
-      //fholzing: Possible bug -> A ContentChanged won't update the data if the backgroundworker is already running
-      if (!backgroundWorker.IsBusy) { backgroundWorker.RunWorkerAsync(args); }
+
+      variableImactsArrayView.Caption = Content.Name + " Variable Impacts";
+      progress = mainForm.AddOperationProgressToView(this, "Calculating variable impacts for " + Content.Name);
+      progress.ProgressValue = 0;
+
+      cancellationToken = new CancellationTokenSource();
+      //Remember the original ordering of the variables
+      try {
+        var impacts = await Task.Run(() => RegressionSolutionVariableImpactsCalculator.CalculateImpacts(Content, dataPartition, replMethod, factorReplMethod,
+          (i, s) => {
+            progress.ProgressValue = i;
+            progress.Status = s;
+            return cancellationToken.Token.IsCancellationRequested;
+          }), cancellationToken.Token);
+
+        if (cancellationToken.Token.IsCancellationRequested) { return; }
+        var problemData = Content.ProblemData;
+        var inputvariables = new HashSet<string>(problemData.AllowedInputVariables.Union(Content.Model.VariablesUsedForPrediction));
+        var originalVariableOrdering = problemData.Dataset.VariableNames
+          .Where(v => inputvariables.Contains(v))
+          .Where(v => problemData.Dataset.VariableHasType<double>(v) || problemData.Dataset.VariableHasType<string>(v))
+          .ToList();
+
+        rawVariableImpacts.Clear();
+        originalVariableOrdering.ForEach(v => rawVariableImpacts.Add(new Tuple<string, double>(v, impacts.First(vv => vv.Item1 == v).Item2)));
+        UpdateOrdering();
+      } finally {
+        ((MainForm.WindowsForms.MainForm)MainFormManager.MainForm).RemoveOperationProgressFromView(this);
+      }
     }
 
@@ -197,5 +164,5 @@
     /// The default is "Descending" by "VariableImpact" (as in previous versions)
     /// </summary>
-    private void UpdateDataOrdering() {
+    private void UpdateOrdering() {
       //Check if valid sortingCriteria is selected and data exists
       if (sortByComboBox.SelectedIndex == -1) { return; }
@@ -206,10 +173,10 @@
       bool ascending = ascendingCheckBox.Checked;
 
-      IEnumerable<KeyValuePair<string, double>> orderedEntries = null;
+      IEnumerable<Tuple<string, double>> orderedEntries = null;
 
       //Sort accordingly
       switch (selectedItem) {
         case SortingCriteria.ImpactValue:
-          orderedEntries = rawVariableImpacts.OrderBy(v => v.Value);
+          orderedEntries = rawVariableImpacts.OrderBy(v => v.Item2);
           break;
         case SortingCriteria.Occurrence:
@@ -217,5 +184,5 @@
           break;
         case SortingCriteria.VariableName:
-          orderedEntries = rawVariableImpacts.OrderBy(v => v.Key, new NaturalStringComparer());
+          orderedEntries = rawVariableImpacts.OrderBy(v => v.Item1, new NaturalStringComparer());
           break;
         default:
@@ -226,14 +193,13 @@
 
       //Write the data back
-      var impactArray = new DoubleArray(orderedEntries.Select(i => i.Value).ToArray()) {
-        ElementNames = orderedEntries.Select(i => i.Key)
+      var impactArray = new DoubleArray(orderedEntries.Select(i => i.Item2).ToArray()) {
+        ElementNames = orderedEntries.Select(i => i.Item1)
       };
 
-      //Could be, if the View was closed during the BackgroundWorker-run
+      //Could be, if the View was closed
       if (!variableImactsArrayView.IsDisposed) {
         variableImactsArrayView.Content = (DoubleArray)impactArray.AsReadOnly();
       }
     }
-    #endregion
   }
 }
Index: branches/2892_LR-prediction-intervals/HeuristicLab.Problems.DataAnalysis.Views/3.4/Solution Views/DataAnalysisSolutionView.cs
===================================================================
--- branches/2892_LR-prediction-intervals/HeuristicLab.Problems.DataAnalysis.Views/3.4/Solution Views/DataAnalysisSolutionView.cs	(revision 15743)
+++ branches/2892_LR-prediction-intervals/HeuristicLab.Problems.DataAnalysis.Views/3.4/Solution Views/DataAnalysisSolutionView.cs	(revision 16388)
@@ -141,6 +141,4 @@
 
         var solution = (IDataAnalysisSolution)Content.Clone();
-        problemData.AdjustProblemDataProperties(solution.ProblemData);
-
         solution.ProblemData = problemData;
         if (!solution.Name.EndsWith(" with loaded problemData"))
@@ -231,5 +229,4 @@
 
       try {
-        problemData.AdjustProblemDataProperties(Content.ProblemData);
         Content.ProblemData = problemData;
 
Index: branches/2892_LR-prediction-intervals/HeuristicLab.Problems.DataAnalysis.Views/3.4/TimeSeriesPrognosis/TimeSeriesPrognosisResidualsLineChartView.cs
===================================================================
--- branches/2892_LR-prediction-intervals/HeuristicLab.Problems.DataAnalysis.Views/3.4/TimeSeriesPrognosis/TimeSeriesPrognosisResidualsLineChartView.cs	(revision 15743)
+++ branches/2892_LR-prediction-intervals/HeuristicLab.Problems.DataAnalysis.Views/3.4/TimeSeriesPrognosis/TimeSeriesPrognosisResidualsLineChartView.cs	(revision 16388)
@@ -20,7 +20,5 @@
 #endregion
 
-using System;
 using System.Linq;
-using System.Windows.Forms.DataVisualization.Charting;
 using HeuristicLab.MainForm;
 
