Index: branches/StatisticalTesting/HeuristicLab.Analysis.Statistics/3.3/ChartAnalysisView.cs
===================================================================
--- branches/StatisticalTesting/HeuristicLab.Analysis.Statistics/3.3/ChartAnalysisView.cs	(revision 9712)
+++ branches/StatisticalTesting/HeuristicLab.Analysis.Statistics/3.3/ChartAnalysisView.cs	(revision 9713)
@@ -23,4 +23,5 @@
 using System.Collections.Generic;
 using System.Linq;
+using System.Threading.Tasks;
 using System.Windows.Forms;
 using HeuristicLab.Common;
@@ -28,9 +29,10 @@
 using HeuristicLab.Data;
 using HeuristicLab.MainForm;
+using HeuristicLab.MainForm.WindowsForms;
 using HeuristicLab.Optimization;
 using HeuristicLab.PluginInfrastructure;
 
 namespace HeuristicLab.Analysis.Statistics {
-  [View("RunCollection Chart Analysis View")]
+  [View("RunCollection Chart Analysis")]
   [Content(typeof(RunCollection), false)]
   public sealed partial class ChartAnalysisView : ItemView {
@@ -46,7 +48,16 @@
 
     private List<IRun> runs;
+    private Progress progress;
+    private ProgressView progressView;
+    private bool valuesAdded = false;
 
     public ChartAnalysisView() {
       InitializeComponent();
+      progress = new Progress() {
+        CanBeCanceled = false,
+        ProgressState = ProgressState.Finished
+      };
+      progressView = new ProgressView(this, progress);
+
       stringConvertibleMatrixView.DataGridView.RowHeaderMouseDoubleClick += new DataGridViewCellMouseEventHandler(DataGridView_RowHeaderMouseDoubleClick);
 
@@ -67,4 +78,6 @@
         components.Dispose();
       }
+      if (disposing)
+        progressView.Dispose();
       base.Dispose(disposing);
     }
@@ -98,18 +111,21 @@
 
     private void Content_CollectionReset(object sender, HeuristicLab.Collections.CollectionItemsChangedEventArgs<IRun> e) {
-      RebuildDataTable();
+      RebuildDataTableAsync();
     }
 
     private void Content_ItemsRemoved(object sender, HeuristicLab.Collections.CollectionItemsChangedEventArgs<IRun> e) {
-      RebuildDataTable();
+      RebuildDataTableAsync();
     }
 
     private void Content_ItemsAdded(object sender, HeuristicLab.Collections.CollectionItemsChangedEventArgs<IRun> e) {
-      RebuildDataTable();
+      RebuildDataTableAsync();
     }
 
     void Content_UpdateOfRunsInProgressChanged(object sender, EventArgs e) {
-      if (!Content.UpdateOfRunsInProgress) {
-        RebuildDataTable();
+      if (!Content.UpdateOfRunsInProgress && !valuesAdded) {
+        RebuildDataTableAsync();
+      }
+      if (valuesAdded) {
+        valuesAdded = false;
       }
     }
@@ -133,8 +149,25 @@
 
     private void dataRowComboBox_SelectedIndexChanged(object sender, EventArgs e) {
-      RebuildDataTable();
+      RebuildDataTableAsync();
     }
 
     private void addLineToChart_Click(object sender, EventArgs e) {
+      progress.Status = "Adding fitted lines to charts...";
+      progress.ProgressState = ProgressState.Started;
+      progress.ProgressValue = 0.0;
+
+      var task = System.Threading.Tasks.Task.Factory.StartNew(AddLineToChart);
+
+      task.ContinueWith((t) => {
+        progress.Finish();
+        ErrorHandling.ShowErrorDialog("An error occured while adding lines to charts. ", t.Exception);
+      }, TaskContinuationOptions.OnlyOnFaulted);
+
+      task.ContinueWith((t) => {
+        progress.Finish();
+      }, TaskContinuationOptions.OnlyOnRanToCompletion);
+    }
+
+    private void AddLineToChart() {
       string resultName = (string)dataTableComboBox.SelectedItem;
       string rowName = (string)dataRowComboBox.SelectedItem;
@@ -171,4 +204,5 @@
         }
       }
+      valuesAdded = true;
       Content.UpdateOfRunsInProgress = false;
     }
@@ -200,8 +234,27 @@
     }
 
+    private void RebuildDataTableAsync() {
+      progress.Status = "Calculating values...";
+      progress.ProgressState = ProgressState.Started;
+      progress.ProgressValue = 0.0;
+
+      var task = System.Threading.Tasks.Task.Factory.StartNew(RebuildDataTable);
+
+      task.ContinueWith((t) => {
+        progress.Finish();
+        ErrorHandling.ShowErrorDialog("An error occured while calculating values. ", t.Exception);
+      }, TaskContinuationOptions.OnlyOnFaulted);
+
+      task.ContinueWith((t) => {
+        progress.Finish();
+      }, TaskContinuationOptions.OnlyOnRanToCompletion);
+    }
+
     private void RebuildDataTable() {
       string resultName = (string)dataTableComboBox.SelectedItem;
       string rowName = (string)dataRowComboBox.SelectedItem;
-      string[] columnNames = new string[] { "Count", "Minimum", "Maximum", "Average", "Median", "Standard Deviation", "Variance", "25th Percentile", "75th Percentile", "Gradient", "Relative Error", "Avg. of Upper 25 %", " Avg. of Lower 25 %", "Avg. of First 25 %", "Avg. of Last 25 %" };
+      LinearLeastSquaresFitting llsFitting = new LinearLeastSquaresFitting();
+      LogFitting logFitting = new LogFitting();
+      string[] columnNames = new string[] { "Count", "Minimum", "Maximum", "Average", "Median", "Standard Deviation", "Variance", "25th Percentile", "75th Percentile", "Avg. of Upper 25 %", " Avg. of Lower 25 %", "Avg. of First 25 %", "Avg. of Last 25 %", "Gradient", "Relative Error", "a", "b" };
 
       runs = Content.Where(x => x.Results.ContainsKey(resultName) && x.Visible).ToList();
@@ -226,12 +279,12 @@
         double percentile25 = values.Percentile(0.25);
         double percentile75 = values.Percentile(0.75);
-        double k, d, r;
-        LinearLeastSquaresFitting llsf = new LinearLeastSquaresFitting();
-        llsf.Calculate(values.ToArray(), out k, out d);
-        r = llsf.CalculateError(values.ToArray(), k, d);
         double lowerAvg = values.OrderBy(x => x).Take((int)(values.Count() * 0.25)).Average();
         double upperAvg = values.OrderByDescending(x => x).Take((int)(values.Count() * 0.25)).Average();
         double firstAvg = values.Take((int)(values.Count() * 0.25)).Average();
         double lastAvg = values.Skip((int)(values.Count() * 0.75)).Average();
+        double k, d, r, a, b;
+        llsFitting.Calculate(values.ToArray(), out k, out d);
+        r = llsFitting.CalculateError(values.ToArray(), k, d);
+        logFitting.Calculate(values.ToArray(), out a, out b);
 
         dt[i, 0] = cnt;
@@ -244,10 +297,12 @@
         dt[i, 7] = percentile25;
         dt[i, 8] = percentile75;
-        dt[i, 9] = k;
-        dt[i, 10] = r;
-        dt[i, 11] = upperAvg;
-        dt[i, 12] = lowerAvg;
-        dt[i, 13] = firstAvg;
-        dt[i, 14] = lastAvg;
+        dt[i, 9] = upperAvg;
+        dt[i, 10] = lowerAvg;
+        dt[i, 11] = firstAvg;
+        dt[i, 12] = lastAvg;
+        dt[i, 13] = k;
+        dt[i, 14] = r;
+        dt[i, 15] = a;
+        dt[i, 16] = b;
 
         i++;
Index: branches/StatisticalTesting/HeuristicLab.Analysis.Statistics/3.3/ChartAnalysisView.designer.cs
===================================================================
--- branches/StatisticalTesting/HeuristicLab.Analysis.Statistics/3.3/ChartAnalysisView.designer.cs	(revision 9712)
+++ branches/StatisticalTesting/HeuristicLab.Analysis.Statistics/3.3/ChartAnalysisView.designer.cs	(revision 9713)
@@ -49,13 +49,13 @@
       this.fittingComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
       this.fittingComboBox.FormattingEnabled = true;
-      this.fittingComboBox.Location = new System.Drawing.Point(147, 359);
+      this.fittingComboBox.Location = new System.Drawing.Point(142, 359);
       this.fittingComboBox.Name = "fittingComboBox";
-      this.fittingComboBox.Size = new System.Drawing.Size(200, 21);
+      this.fittingComboBox.Size = new System.Drawing.Size(214, 21);
       this.fittingComboBox.TabIndex = 12;
       // 
       // addValuesButton
       // 
-      this.addValuesButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
-      this.addValuesButton.Location = new System.Drawing.Point(8, 359);
+      this.addValuesButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.addValuesButton.Location = new System.Drawing.Point(3, 357);
       this.addValuesButton.Name = "addValuesButton";
       this.addValuesButton.Size = new System.Drawing.Size(133, 23);
@@ -68,5 +68,5 @@
       // 
       this.addLineToChart.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
-      this.addLineToChart.Location = new System.Drawing.Point(353, 359);
+      this.addLineToChart.Location = new System.Drawing.Point(362, 357);
       this.addLineToChart.Name = "addLineToChart";
       this.addLineToChart.Size = new System.Drawing.Size(133, 23);
Index: branches/StatisticalTesting/HeuristicLab.Analysis.Statistics/3.3/CorrelationView.cs
===================================================================
--- branches/StatisticalTesting/HeuristicLab.Analysis.Statistics/3.3/CorrelationView.cs	(revision 9712)
+++ branches/StatisticalTesting/HeuristicLab.Analysis.Statistics/3.3/CorrelationView.cs	(revision 9713)
@@ -30,5 +30,5 @@
 
 namespace HeuristicLab.Analysis.Statistics {
-  [View("Correlation View")]
+  [View("RunCollection Correlations")]
   [Content(typeof(RunCollection), false)]
   public sealed partial class CorrelationView : ItemView {
Index: branches/StatisticalTesting/HeuristicLab.Analysis.Statistics/3.3/LinearLeastSquaresFitting.cs
===================================================================
--- branches/StatisticalTesting/HeuristicLab.Analysis.Statistics/3.3/LinearLeastSquaresFitting.cs	(revision 9712)
+++ branches/StatisticalTesting/HeuristicLab.Analysis.Statistics/3.3/LinearLeastSquaresFitting.cs	(revision 9713)
@@ -52,6 +52,5 @@
     }
 
-    //TODO: adapt or remove
-    public double CalculateError(double[] dataPoints, double a1, double a0) {
+    public double CalculateError(double[] dataPoints, double p0, double p1) {
       double r = 0.0;
       double avgy = dataPoints.Average();
@@ -60,5 +59,5 @@
 
       for (int i = 0; i < dataPoints.Count(); i++) {
-        double y = a1 * i + a0;
+        double y = p0 * i + p1;
         sstot += Math.Pow(dataPoints[i] - avgy, 2);
         sserr += Math.Pow(dataPoints[i] - y, 2);
Index: branches/StatisticalTesting/HeuristicLab.Analysis.Statistics/3.3/SampleSizeInfluenceView.cs
===================================================================
--- branches/StatisticalTesting/HeuristicLab.Analysis.Statistics/3.3/SampleSizeInfluenceView.cs	(revision 9712)
+++ branches/StatisticalTesting/HeuristicLab.Analysis.Statistics/3.3/SampleSizeInfluenceView.cs	(revision 9713)
@@ -34,5 +34,5 @@
 
 namespace HeuristicLab.Analysis.Statistics {
-  [View("Sample Size Influence View")]
+  [View("RunCollection Sample Size Influences")]
   [Content(typeof(RunCollection), false)]
   public partial class SampleSizeInfluenceView : AsynchronousContentView {
Index: branches/StatisticalTesting/HeuristicLab.Analysis.Statistics/3.3/StatisticalTestingView.cs
===================================================================
--- branches/StatisticalTesting/HeuristicLab.Analysis.Statistics/3.3/StatisticalTestingView.cs	(revision 9712)
+++ branches/StatisticalTesting/HeuristicLab.Analysis.Statistics/3.3/StatisticalTestingView.cs	(revision 9713)
@@ -32,5 +32,5 @@
 
 namespace HeuristicLab.Analysis.Statistics {
-  [View("Statistical Testing View")]
+  [View("RunCollection Statistical Testing")]
   [Content(typeof(RunCollection), false)]
   public sealed partial class StatisticalTestingView : ItemView {
