Index: /stable/HeuristicLab.Analysis.Statistics.Views/3.3/ChartAnalysisView.cs
===================================================================
--- /stable/HeuristicLab.Analysis.Statistics.Views/3.3/ChartAnalysisView.cs	(revision 12724)
+++ /stable/HeuristicLab.Analysis.Statistics.Views/3.3/ChartAnalysisView.cs	(revision 12725)
@@ -23,4 +23,5 @@
 using System.Collections.Generic;
 using System.Linq;
+using System.Threading;
 using System.Threading.Tasks;
 using System.Windows.Forms;
@@ -52,4 +53,5 @@
     private bool valuesAdded = false;
     private bool suppressUpdates = false;
+    private SemaphoreSlim sem = new SemaphoreSlim(1, 1);
 
     public ChartAnalysisView() {
@@ -108,24 +110,41 @@
 
     void Content_RowsChanged(object sender, EventArgs e) {
-      RebuildDataTableAsync();
+      if (suppressUpdates) return;
+      if (InvokeRequired) Invoke((Action<object, EventArgs>)Content_RowsChanged, sender, e);
+      else {
+        RebuildDataTableAsync();
+      }
     }
 
     void Content_ColumnsChanged(object sender, EventArgs e) {
-      RebuildDataTableAsync();
+      if (suppressUpdates) return;
+      if (InvokeRequired) Invoke((Action<object, EventArgs>)Content_ColumnsChanged, sender, e);
+      else {
+        UpdateDataTableComboBox();
+        RebuildDataTableAsync();
+      }
     }
 
     private void Content_CollectionReset(object sender, CollectionItemsChangedEventArgs<IRun> e) {
-      UpdateComboboxes();
-      RebuildDataTableAsync();
+      if (suppressUpdates) return;
+      if (InvokeRequired) Invoke((Action<object, CollectionItemsChangedEventArgs<IRun>>)Content_CollectionReset, sender, e);
+      else {
+        UpdateComboboxes();
+        RebuildDataTableAsync();
+      }
     }
 
     private void Content_UpdateOfRunsInProgressChanged(object sender, EventArgs e) {
-      suppressUpdates = Content.UpdateOfRunsInProgress;
-
-      if (!suppressUpdates && !valuesAdded) {
-        RebuildDataTableAsync();
-      }
-      if (valuesAdded) {
-        valuesAdded = false;
+      if (InvokeRequired) Invoke((Action<object, EventArgs>)Content_UpdateOfRunsInProgressChanged, sender, e);
+      else {
+        suppressUpdates = Content.UpdateOfRunsInProgress;
+
+        if (!suppressUpdates && !valuesAdded) {
+          UpdateDataTableComboBox();
+          RebuildDataTableAsync();
+        }
+        if (valuesAdded) {
+          valuesAdded = false;
+        }
       }
     }
@@ -149,4 +168,5 @@
 
     private void dataRowComboBox_SelectedIndexChanged(object sender, EventArgs e) {
+      if (suppressUpdates) return;
       RebuildDataTableAsync();
     }
@@ -246,18 +266,24 @@
 
     private void RebuildDataTableAsync() {
-      progress = MainFormManager.GetMainForm<MainForm.WindowsForms.MainForm>().AddOperationProgressToView(this, "Calculating values...");
-
       string resultName = (string)dataTableComboBox.SelectedItem;
+      if (string.IsNullOrEmpty(resultName)) return;
+
       string rowName = (string)dataRowComboBox.SelectedItem;
 
-      var task = Task.Factory.StartNew(() => RebuildDataTable(resultName, rowName));
+      var task = Task.Factory.StartNew(() => {
+        sem.Wait();
+        progress = MainFormManager.GetMainForm<MainForm.WindowsForms.MainForm>().AddOperationProgressToView(this, "Calculating values...");
+        RebuildDataTable(resultName, rowName);
+      });
 
       task.ContinueWith((t) => {
         MainFormManager.GetMainForm<MainForm.WindowsForms.MainForm>().RemoveOperationProgressFromView(this);
         ErrorHandling.ShowErrorDialog("An error occured while calculating values. ", t.Exception);
+        sem.Release();
       }, TaskContinuationOptions.OnlyOnFaulted);
 
       task.ContinueWith((t) => {
         MainFormManager.GetMainForm<MainForm.WindowsForms.MainForm>().RemoveOperationProgressFromView(this);
+        sem.Release();
       }, TaskContinuationOptions.OnlyOnRanToCompletion);
     }
@@ -289,8 +315,8 @@
         double percentile25 = values.Percentile(0.25);
         double percentile75 = values.Percentile(0.75);
-        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 lowerAvg = values.Count() > 4 ? values.OrderBy(x => x).Take((int)(values.Count() * 0.25)).Average() : double.NaN;
+        double upperAvg = values.Count() > 4 ? values.OrderByDescending(x => x).Take((int)(values.Count() * 0.25)).Average() : double.NaN;
+        double firstAvg = values.Count() > 4 ? values.Take((int)(values.Count() * 0.25)).Average() : double.NaN;
+        double lastAvg = values.Count() > 4 ? values.Skip((int)(values.Count() * 0.75)).Average() : double.NaN;
         double slope, intercept, r;
         llsFitting.Calculate(values, out slope, out intercept);
Index: /stable/HeuristicLab.Analysis.Statistics.Views/3.3/CorrelationView.cs
===================================================================
--- /stable/HeuristicLab.Analysis.Statistics.Views/3.3/CorrelationView.cs	(revision 12724)
+++ /stable/HeuristicLab.Analysis.Statistics.Views/3.3/CorrelationView.cs	(revision 12725)
@@ -23,4 +23,5 @@
 using System.Collections.Generic;
 using System.Linq;
+using HeuristicLab.Collections;
 using HeuristicLab.Core.Views;
 using HeuristicLab.Data;
@@ -81,5 +82,5 @@
       Content.ColumnsChanged += Content_ColumnsChanged;
       Content.RowsChanged += Content_RowsChanged;
-      Content.CollectionReset += new HeuristicLab.Collections.CollectionItemsChangedEventHandler<IRun>(Content_CollectionReset);
+      Content.CollectionReset += new CollectionItemsChangedEventHandler<IRun>(Content_CollectionReset);
       Content.UpdateOfRunsInProgressChanged += Content_UpdateOfRunsInProgressChanged;
     }
@@ -89,30 +90,43 @@
       Content.ColumnsChanged -= Content_ColumnsChanged;
       Content.RowsChanged -= Content_RowsChanged;
-      Content.CollectionReset -= new HeuristicLab.Collections.CollectionItemsChangedEventHandler<IRun>(Content_CollectionReset);
+      Content.CollectionReset -= new CollectionItemsChangedEventHandler<IRun>(Content_CollectionReset);
       Content.UpdateOfRunsInProgressChanged -= Content_UpdateOfRunsInProgressChanged;
     }
 
     void Content_RowsChanged(object sender, EventArgs e) {
-      UpdateUI();
+      if (suppressUpdates) return;
+      if (InvokeRequired) Invoke((Action<object, EventArgs>)Content_RowsChanged, sender, e);
+      else {
+        UpdateUI();
+      }
     }
 
     void Content_ColumnsChanged(object sender, EventArgs e) {
-      UpdateUI();
-    }
-
-    private void Content_CollectionReset(object sender, HeuristicLab.Collections.CollectionItemsChangedEventArgs<IRun> e) {
-      UpdateUI();
+      if (suppressUpdates) return;
+      if (InvokeRequired) Invoke((Action<object, EventArgs>)Content_ColumnsChanged, sender, e);
+      else {
+        UpdateUI();
+      }
+    }
+
+    private void Content_CollectionReset(object sender, CollectionItemsChangedEventArgs<IRun> e) {
+      if (suppressUpdates) return;
+      if (InvokeRequired) Invoke((Action<object, CollectionItemsChangedEventArgs<IRun>>)Content_CollectionReset, sender, e);
+      else {
+        UpdateUI();
+      }
     }
 
     private void Content_UpdateOfRunsInProgressChanged(object sender, EventArgs e) {
-      suppressUpdates = Content.UpdateOfRunsInProgress;
-      UpdateUI();
+      if (InvokeRequired) Invoke((Action<object, EventArgs>)Content_UpdateOfRunsInProgressChanged, sender, e);
+      else {
+        suppressUpdates = Content.UpdateOfRunsInProgress;
+        UpdateUI();
+      }
     }
     #endregion
 
     private void UpdateUI() {
-      if (!suppressUpdates) {
-        RebuildCorrelationTable();
-      }
+      RebuildCorrelationTable();
     }
 
Index: /stable/HeuristicLab.Analysis.Statistics.Views/3.3/SampleSizeInfluenceView.cs
===================================================================
--- /stable/HeuristicLab.Analysis.Statistics.Views/3.3/SampleSizeInfluenceView.cs	(revision 12724)
+++ /stable/HeuristicLab.Analysis.Statistics.Views/3.3/SampleSizeInfluenceView.cs	(revision 12725)
@@ -22,4 +22,5 @@
 using System;
 using System.Collections.Generic;
+using System.Drawing;
 using System.Linq;
 using System.Windows.Forms;
@@ -33,4 +34,5 @@
 using HeuristicLab.Optimization;
 using HeuristicLab.PluginInfrastructure;
+using ViewEventArgs = System.Windows.Forms.DataVisualization.Charting.ViewEventArgs;
 
 namespace HeuristicLab.Analysis.Statistics.Views {
@@ -41,7 +43,7 @@
     private const string BoxPlotSeriesName = "BoxPlotSeries";
     private const string BoxPlotChartAreaName = "BoxPlotChartArea";
-    private const string delimitor = ";";
-
-    private bool suppressUpdates = false;
+    private const string delimiter = ";";
+
+    private bool suppressUpdates;
     private string yAxisValue;
     private Dictionary<int, Dictionary<object, double>> categoricalMapping;
@@ -66,5 +68,5 @@
     }
     public IStringConvertibleMatrix Matrix {
-      get { return this.Content; }
+      get { return Content; }
     }
 
@@ -72,22 +74,20 @@
     protected override void RegisterContentEvents() {
       base.RegisterContentEvents();
-      Content.Reset += new EventHandler(Content_Reset);
-      Content.ColumnNamesChanged += new EventHandler(Content_ColumnNamesChanged);
-      Content.ItemsAdded += new HeuristicLab.Collections.CollectionItemsChangedEventHandler<IRun>(Content_ItemsAdded);
-      Content.ItemsRemoved += new HeuristicLab.Collections.CollectionItemsChangedEventHandler<IRun>(Content_ItemsRemoved);
-      Content.CollectionReset += new HeuristicLab.Collections.CollectionItemsChangedEventHandler<IRun>(Content_CollectionReset);
-      Content.UpdateOfRunsInProgressChanged += new EventHandler(Content_UpdateOfRunsInProgressChanged);
-      Content.OptimizerNameChanged += new EventHandler(Content_AlgorithmNameChanged);
+      Content.ColumnNamesChanged += Content_ColumnNamesChanged;
+      Content.ItemsAdded += Content_ItemsAdded;
+      Content.ItemsRemoved += Content_ItemsRemoved;
+      Content.CollectionReset += Content_CollectionReset;
+      Content.UpdateOfRunsInProgressChanged += Content_UpdateOfRunsInProgressChanged;
+      Content.OptimizerNameChanged += Content_AlgorithmNameChanged;
       RegisterRunEvents(Content);
     }
     protected override void DeregisterContentEvents() {
       base.DeregisterContentEvents();
-      Content.Reset -= new EventHandler(Content_Reset);
-      Content.ColumnNamesChanged -= new EventHandler(Content_ColumnNamesChanged);
-      Content.ItemsAdded -= new HeuristicLab.Collections.CollectionItemsChangedEventHandler<IRun>(Content_ItemsAdded);
-      Content.ItemsRemoved -= new HeuristicLab.Collections.CollectionItemsChangedEventHandler<IRun>(Content_ItemsRemoved);
-      Content.CollectionReset -= new HeuristicLab.Collections.CollectionItemsChangedEventHandler<IRun>(Content_CollectionReset);
-      Content.UpdateOfRunsInProgressChanged -= new EventHandler(Content_UpdateOfRunsInProgressChanged);
-      Content.OptimizerNameChanged -= new EventHandler(Content_AlgorithmNameChanged);
+      Content.ColumnNamesChanged -= Content_ColumnNamesChanged;
+      Content.ItemsAdded -= Content_ItemsAdded;
+      Content.ItemsRemoved -= Content_ItemsRemoved;
+      Content.CollectionReset -= Content_CollectionReset;
+      Content.UpdateOfRunsInProgressChanged -= Content_UpdateOfRunsInProgressChanged;
+      Content.OptimizerNameChanged -= Content_AlgorithmNameChanged;
       DeregisterRunEvents(Content);
     }
@@ -142,13 +142,13 @@
       DeregisterRunEvents(e.OldItems);
       RegisterRunEvents(e.Items);
-      UpdateAll();
+      if (!suppressUpdates) UpdateAll();
     }
     private void Content_ItemsRemoved(object sender, CollectionItemsChangedEventArgs<IRun> e) {
       DeregisterRunEvents(e.Items);
-      UpdateComboBoxes();
+      if (!suppressUpdates) UpdateComboBoxes();
     }
     private void Content_ItemsAdded(object sender, CollectionItemsChangedEventArgs<IRun> e) {
       RegisterRunEvents(e.Items);
-      UpdateComboBoxes();
+      if (!suppressUpdates) UpdateComboBoxes();
     }
     private void Content_UpdateOfRunsInProgressChanged(object sender, EventArgs e) {
@@ -157,15 +157,5 @@
       else {
         suppressUpdates = Content.UpdateOfRunsInProgress;
-        if (!suppressUpdates) UpdateDataPoints();
-      }
-    }
-
-    private void Content_Reset(object sender, EventArgs e) {
-      if (InvokeRequired)
-        Invoke(new EventHandler(Content_Reset), sender, e);
-      else {
-        this.categoricalMapping.Clear();
-        UpdateDataPoints();
-        UpdateAxisLabels();
+        if (!suppressUpdates) UpdateAll();
       }
     }
@@ -174,13 +164,11 @@
         Invoke(new EventHandler(Content_ColumnNamesChanged), sender, e);
       else {
-        UpdateComboBoxes();
+        if (!suppressUpdates) UpdateComboBoxes();
       }
     }
     private void run_Changed(object sender, EventArgs e) {
       if (InvokeRequired)
-        this.Invoke(new EventHandler(run_Changed), sender, e);
-      else if (!suppressUpdates) {
-        UpdateDataPoints();
-      }
+        Invoke(new EventHandler(run_Changed), sender, e);
+      else if (!suppressUpdates) UpdateDataPoints();
     }
 
@@ -188,5 +176,5 @@
       if (InvokeRequired)
         Invoke(new EventHandler(Content_AlgorithmNameChanged), sender, e);
-      else UpdateCaption();
+      else if (!suppressUpdates) UpdateCaption();
     }
     #endregion
@@ -199,5 +187,5 @@
 
     private void UpdateAll() {
-      this.categoricalMapping.Clear();
+      categoricalMapping.Clear();
       UpdateComboBoxes();
       UpdateDataPoints();
@@ -210,5 +198,5 @@
 
     private void UpdateSampleSizes(bool forceUpdate = false) {
-      string selectedYAxis = (string)this.yAxisComboBox.SelectedItem;
+      string selectedYAxis = (string)yAxisComboBox.SelectedItem;
 
       if (selectedYAxis != null && (xAxisTextBox.Text.Trim() == string.Empty || forceUpdate)) {
@@ -224,12 +212,12 @@
         if (values.Any()) {
           if (hypergeometricCheckBox.Checked) {
-            xAxisTextBox.Text += ((int)(values.Count() / 16)) + delimitor + " ";
-            xAxisTextBox.Text += ((int)(values.Count() / 8)) + delimitor + " ";
-            xAxisTextBox.Text += (int)(values.Count() / 4);
+            xAxisTextBox.Text += values.Count() / 16 + delimiter + " ";
+            xAxisTextBox.Text += values.Count() / 8 + delimiter + " ";
+            xAxisTextBox.Text += values.Count() / 4;
           } else {
-            xAxisTextBox.Text += ((int)(values.Count() / 4)) + delimitor + " ";
-            xAxisTextBox.Text += ((int)(values.Count() / 2)) + delimitor + " ";
-            xAxisTextBox.Text += ((int)(values.Count() / 4 * 3)) + delimitor + " ";
-            xAxisTextBox.Text += (int)(values.Count());
+            xAxisTextBox.Text += values.Count() / 4 + delimiter + " ";
+            xAxisTextBox.Text += values.Count() / 2 + delimiter + " ";
+            xAxisTextBox.Text += values.Count() / 4 * 3 + delimiter + " ";
+            xAxisTextBox.Text += values.Count();
           }
         }
@@ -238,16 +226,20 @@
 
     private void UpdateComboBoxes() {
-      string selectedYAxis = (string)this.yAxisComboBox.SelectedItem;
-      this.xAxisTextBox.Text = string.Empty;
-      this.yAxisComboBox.Items.Clear();
-      if (Content != null) {
-        string[] additionalAxisDimension = Enum.GetNames(typeof(AxisDimension));
-        UpdateSampleSizes();
-        this.yAxisComboBox.Items.AddRange(additionalAxisDimension);
-        this.yAxisComboBox.Items.AddRange(Matrix.ColumnNames.ToArray());
-
-        if (selectedYAxis != null && yAxisComboBox.Items.Contains(selectedYAxis)) {
-          yAxisComboBox.SelectedItem = selectedYAxis;
-          UpdateDataPoints();
+      if (InvokeRequired) {
+        Invoke((Action)UpdateComboBoxes);
+      } else {
+        string selectedYAxis = (string)yAxisComboBox.SelectedItem;
+        xAxisTextBox.Text = string.Empty;
+        yAxisComboBox.Items.Clear();
+        if (Content != null) {
+          string[] additionalAxisDimension = Enum.GetNames(typeof(AxisDimension));
+          UpdateSampleSizes();
+          yAxisComboBox.Items.AddRange(additionalAxisDimension);
+          yAxisComboBox.Items.AddRange(Matrix.ColumnNames.ToArray());
+
+          if (selectedYAxis != null && yAxisComboBox.Items.Contains(selectedYAxis)) {
+            yAxisComboBox.SelectedItem = selectedYAxis;
+            UpdateDataPoints();
+          }
         }
       }
@@ -255,6 +247,6 @@
 
     private void UpdateDataPoints() {
-      this.chart.Series.Clear();
-      this.seriesCache.Clear();
+      chart.Series.Clear();
+      seriesCache.Clear();
       if (Content != null) {
         var usableRuns = Content.Where(r => r.Visible).ToList();
@@ -267,11 +259,11 @@
         }
 
-        foreach (Series s in this.seriesCache.Values)
-          this.chart.Series.Add(s);
+        foreach (Series s in seriesCache.Values)
+          chart.Series.Add(s);
 
         UpdateStatistics();
         if (seriesCache.Count > 0) {
           Series boxPlotSeries = CreateBoxPlotSeries();
-          this.chart.Series.Add(boxPlotSeries);
+          chart.Series.Add(boxPlotSeries);
         }
 
@@ -328,7 +320,7 @@
 
       if (!yAxisComboBox.DroppedDown)
-        this.yAxisValue = (string)yAxisComboBox.SelectedItem;
-
-      List<double?> yValue = usableRuns.Select(x => GetValue(x, this.yAxisValue)).ToList();
+        yAxisValue = (string)yAxisComboBox.SelectedItem;
+
+      List<double?> yValue = usableRuns.Select(x => GetValue(x, yAxisValue)).ToList();
       if (yValue.Any(x => !x.HasValue)) return;
 
@@ -338,5 +330,5 @@
 
     private List<int> ParseGroupSizesFromText(string groupsText, bool verbose = true) {
-      string[] gs = groupsText.Split(delimitor.ToCharArray());
+      string[] gs = groupsText.Split(delimiter.ToCharArray());
       List<int> vals = new List<int>();
 
@@ -352,5 +344,5 @@
           catch (Exception ex) {
             if (verbose) {
-              ErrorHandling.ShowErrorDialog("Can't parse group sizes. Please only use numbers seperated by a " + delimitor + ". ", ex);
+              ErrorHandling.ShowErrorDialog("Can't parse group sizes. Please only use numbers seperated by a " + delimiter + ". ", ex);
             }
           }
@@ -384,5 +376,5 @@
       }
       matrix.ColumnNames = columnNames;
-      matrix.RowNames = new string[] { "Count", "Minimum", "Maximum", "Average", "Median", "Standard Deviation", "Variance", "25th Percentile", "75th Percentile", "Lower Confidence Int.", "Upper Confidence Int." };
+      matrix.RowNames = new[] { "Count", "Minimum", "Maximum", "Average", "Median", "Standard Deviation", "Variance", "25th Percentile", "75th Percentile", "Lower Confidence Int.", "Upper Confidence Int." };
 
       for (int i = 0; i < seriesCache.Count; i++) {
@@ -415,8 +407,8 @@
       boxPlotSeries["BoxPlotShowUnusualValues"] = "true";
       boxPlotSeries["PointWidth"] = "0.4";
-      boxPlotSeries.BackGradientStyle = System.Windows.Forms.DataVisualization.Charting.GradientStyle.VerticalCenter;
-      boxPlotSeries.BackSecondaryColor = System.Drawing.Color.FromArgb(130, 224, 64, 10);
-      boxPlotSeries.BorderColor = System.Drawing.Color.FromArgb(64, 64, 64);
-      boxPlotSeries.Color = System.Drawing.Color.FromArgb(224, 64, 10);
+      boxPlotSeries.BackGradientStyle = GradientStyle.VerticalCenter;
+      boxPlotSeries.BackSecondaryColor = Color.FromArgb(130, 224, 64, 10);
+      boxPlotSeries.BorderColor = Color.FromArgb(64, 64, 64);
+      boxPlotSeries.Color = Color.FromArgb(224, 64, 10);
 
       return boxPlotSeries;
@@ -429,11 +421,11 @@
 
       if (!yAxisComboBox.DroppedDown)
-        this.yAxisValue = (string)yAxisComboBox.SelectedItem;
+        yAxisValue = (string)yAxisComboBox.SelectedItem;
 
       xValue = idx;
-      yValue = GetValue(run, this.yAxisValue);
+      yValue = GetValue(run, yAxisValue);
 
       if (yValue.HasValue) {
-        if (!this.seriesCache.ContainsKey(xValue))
+        if (!seriesCache.ContainsKey(xValue))
           seriesCache[xValue] = new Series(xValue.ToString());
 
@@ -454,39 +446,38 @@
         AxisDimension axisDimension = (AxisDimension)Enum.Parse(typeof(AxisDimension), columnName);
         return GetValue(run, axisDimension);
-      } else {
-        int columnIndex = Matrix.ColumnNames.ToList().IndexOf(columnName);
-        IItem value = Content.GetValue(run, columnIndex);
-        if (value == null)
-          return null;
-
-        DoubleValue doubleValue = value as DoubleValue;
-        IntValue intValue = value as IntValue;
-        TimeSpanValue timeSpanValue = value as TimeSpanValue;
-        double? ret = null;
-        if (doubleValue != null) {
-          if (!double.IsNaN(doubleValue.Value) && !double.IsInfinity(doubleValue.Value))
-            ret = doubleValue.Value;
-        } else if (intValue != null)
-          ret = intValue.Value;
-        else if (timeSpanValue != null) {
-          ret = timeSpanValue.Value.TotalSeconds;
-        } else
-          ret = GetCategoricalValue(columnIndex, value.ToString());
-
-        return ret;
-      }
+      }
+      int columnIndex = Matrix.ColumnNames.ToList().IndexOf(columnName);
+      IItem value = Content.GetValue(run, columnIndex);
+      if (value == null)
+        return null;
+
+      DoubleValue doubleValue = value as DoubleValue;
+      IntValue intValue = value as IntValue;
+      TimeSpanValue timeSpanValue = value as TimeSpanValue;
+      double? ret = null;
+      if (doubleValue != null) {
+        if (!double.IsNaN(doubleValue.Value) && !double.IsInfinity(doubleValue.Value))
+          ret = doubleValue.Value;
+      } else if (intValue != null)
+        ret = intValue.Value;
+      else if (timeSpanValue != null) {
+        ret = timeSpanValue.Value.TotalSeconds;
+      } else
+        ret = GetCategoricalValue(columnIndex, value.ToString());
+
+      return ret;
     }
     private double GetCategoricalValue(int dimension, string value) {
-      if (!this.categoricalMapping.ContainsKey(dimension)) {
-        this.categoricalMapping[dimension] = new Dictionary<object, double>();
+      if (!categoricalMapping.ContainsKey(dimension)) {
+        categoricalMapping[dimension] = new Dictionary<object, double>();
         var orderedCategories = Content.Where(r => r.Visible && Content.GetValue(r, dimension) != null).Select(r => Content.GetValue(r, dimension).ToString())
                                           .Distinct().OrderBy(x => x, new NaturalStringComparer());
         int count = 1;
         foreach (var category in orderedCategories) {
-          this.categoricalMapping[dimension].Add(category, count);
+          categoricalMapping[dimension].Add(category, count);
           count++;
         }
       }
-      return this.categoricalMapping[dimension][value];
+      return categoricalMapping[dimension][value];
     }
     private double GetValue(IRun run, AxisDimension axisDimension) {
@@ -498,5 +489,5 @@
           }
         default: {
-            throw new ArgumentException("No handling strategy for " + axisDimension.ToString() + " is defined.");
+            throw new ArgumentException("No handling strategy for " + axisDimension + " is defined.");
           }
       }
@@ -507,5 +498,5 @@
     #region GUI events
     private void UpdateNoRunsVisibleLabel() {
-      if (this.chart.Series.Count > 0) {
+      if (chart.Series.Count > 0) {
         noRunsLabel.Visible = false;
         showStatisticsCheckBox.Enabled = true;
@@ -532,6 +523,6 @@
     }
     private void UpdateAxisLabels() {
-      Axis xAxis = this.chart.ChartAreas[BoxPlotChartAreaName].AxisX;
-      Axis yAxis = this.chart.ChartAreas[BoxPlotChartAreaName].AxisY;
+      Axis xAxis = chart.ChartAreas[BoxPlotChartAreaName].AxisX;
+      Axis yAxis = chart.ChartAreas[BoxPlotChartAreaName].AxisY;
       int axisDimensionCount = Enum.GetNames(typeof(AxisDimension)).Count();
 
@@ -544,6 +535,6 @@
     }
 
-    private void chart_AxisViewChanged(object sender, System.Windows.Forms.DataVisualization.Charting.ViewEventArgs e) {
-      this.UpdateAxisLabels();
+    private void chart_AxisViewChanged(object sender, ViewEventArgs e) {
+      UpdateAxisLabels();
     }
 
@@ -566,11 +557,11 @@
         }
       } else if (dimension > 0 && Content.GetValue(0, dimension) is TimeSpanValue) {
-        this.chart.ChartAreas[0].RecalculateAxesScale();
-        Axis correspondingAxis = this.chart.ChartAreas[0].Axes.Where(x => x.Name == axis.Name).SingleOrDefault();
+        chart.ChartAreas[0].RecalculateAxesScale();
+        Axis correspondingAxis = chart.ChartAreas[0].Axes.Where(x => x.Name == axis.Name).SingleOrDefault();
         if (correspondingAxis == null)
           correspondingAxis = axis;
         for (double i = correspondingAxis.Minimum; i <= correspondingAxis.Maximum; i += correspondingAxis.LabelStyle.Interval) {
           TimeSpan time = TimeSpan.FromSeconds(i);
-          string x = string.Format("{0:00}:{1:00}:{2:00}", (int)time.Hours, time.Minutes, time.Seconds);
+          string x = string.Format("{0:00}:{1:00}:{2:00}", time.Hours, time.Minutes, time.Seconds);
           axis.CustomLabels.Add(i - correspondingAxis.LabelStyle.Interval / 2, i + correspondingAxis.LabelStyle.Interval / 2, x);
         }
@@ -595,12 +586,12 @@
       string newTooltipText = string.Empty;
       string oldTooltipText;
-      HitTestResult h = this.chart.HitTest(e.X, e.Y);
+      HitTestResult h = chart.HitTest(e.X, e.Y);
       if (h.ChartElementType == ChartElementType.AxisLabels) {
         newTooltipText = ((CustomLabel)h.Object).ToolTip;
       }
 
-      oldTooltipText = this.tooltip.GetToolTip(chart);
+      oldTooltipText = tooltip.GetToolTip(chart);
       if (newTooltipText != oldTooltipText)
-        this.tooltip.SetToolTip(chart, newTooltipText);
+        tooltip.SetToolTip(chart, newTooltipText);
     }
     #endregion
@@ -623,5 +614,5 @@
           string newVals = "";
           foreach (int v in values) {
-            newVals += v + delimitor + " ";
+            newVals += v + delimiter + " ";
           }
           xAxisTextBox.Text = newVals;
Index: /stable/HeuristicLab.Analysis.Statistics.Views/3.3/StatisticalTestsView.cs
===================================================================
--- /stable/HeuristicLab.Analysis.Statistics.Views/3.3/StatisticalTestsView.cs	(revision 12724)
+++ /stable/HeuristicLab.Analysis.Statistics.Views/3.3/StatisticalTestsView.cs	(revision 12725)
@@ -27,4 +27,5 @@
 using HeuristicLab.Collections;
 using HeuristicLab.Common;
+using HeuristicLab.Common.Resources;
 using HeuristicLab.Core.Views;
 using HeuristicLab.Data;
@@ -40,4 +41,6 @@
     private const int requiredSampleSize = 5;
     private double[][] data;
+    private bool suppressUpdates;
+    private bool initializing;
 
     public double SignificanceLevel {
@@ -76,9 +79,20 @@
 
       if (Content != null) {
-        UpdateResultComboBox();
-        UpdateGroupsComboBox();
-        RebuildDataTable();
+        UpdateUI();
+      } else {
+        ResetUI();
       }
       UpdateCaption();
+    }
+
+    private void UpdateUI() {
+      initializing = true;
+      UpdateResultComboBox();
+      UpdateGroupsComboBox();
+      RebuildDataTable();
+      FillCompComboBox();
+      ResetUI();
+      CalculateValues();
+      initializing = false;
     }
 
@@ -92,5 +106,5 @@
       Content.ColumnsChanged += Content_ColumnsChanged;
       Content.RowsChanged += Content_RowsChanged;
-      Content.CollectionReset += new CollectionItemsChangedEventHandler<IRun>(Content_CollectionReset);
+      Content.CollectionReset += Content_CollectionReset;
       Content.UpdateOfRunsInProgressChanged += Content_UpdateOfRunsInProgressChanged;
     }
@@ -100,30 +114,75 @@
       Content.ColumnsChanged -= Content_ColumnsChanged;
       Content.RowsChanged -= Content_RowsChanged;
-      Content.CollectionReset -= new CollectionItemsChangedEventHandler<IRun>(Content_CollectionReset);
+      Content.CollectionReset -= Content_CollectionReset;
       Content.UpdateOfRunsInProgressChanged -= Content_UpdateOfRunsInProgressChanged;
     }
 
     void Content_RowsChanged(object sender, EventArgs e) {
+      if (suppressUpdates) return;
+      if (InvokeRequired) Invoke((Action<object, EventArgs>)Content_RowsChanged, sender, e);
+      else {
+        UpdateUI();
+      }
+    }
+
+    void Content_ColumnsChanged(object sender, EventArgs e) {
+      if (suppressUpdates) return;
+      if (InvokeRequired) Invoke((Action<object, EventArgs>)Content_ColumnsChanged, sender, e);
+      else {
+        UpdateUI();
+      }
+    }
+
+    private void Content_CollectionReset(object sender, CollectionItemsChangedEventArgs<IRun> e) {
+      if (suppressUpdates) return;
+      if (InvokeRequired) Invoke((Action<object, CollectionItemsChangedEventArgs<IRun>>)Content_CollectionReset, sender, e);
+      else {
+        UpdateUI();
+      }
+    }
+
+    void Content_UpdateOfRunsInProgressChanged(object sender, EventArgs e) {
+      if (InvokeRequired) Invoke((Action<object, EventArgs>)Content_UpdateOfRunsInProgressChanged, sender, e);
+      else {
+        suppressUpdates = Content.UpdateOfRunsInProgress;
+        if (!suppressUpdates) UpdateUI();
+      }
+    }
+
+    private void openBoxPlotToolStripMenuItem_Click(object sender, EventArgs e) {
+      RunCollectionBoxPlotView boxplotView = new RunCollectionBoxPlotView();
+      boxplotView.Content = Content;
+      boxplotView.SetXAxis(groupComboBox.SelectedItem.ToString());
+      boxplotView.SetYAxis(resultComboBox.SelectedItem.ToString());
+
+      boxplotView.Show();
+    }
+
+    private void groupCompComboBox_SelectedValueChanged(object sender, EventArgs e) {
+      if (initializing || suppressUpdates) return;
+      string curItem = (string)groupCompComboBox.SelectedItem;
+      CalculatePairwise(curItem);
+    }
+
+    private void resultComboBox_SelectedValueChanged(object sender, EventArgs e) {
+      if (initializing || suppressUpdates) return;
       RebuildDataTable();
-    }
-
-    void Content_ColumnsChanged(object sender, EventArgs e) {
+      ResetUI();
+      CalculateValues();
+    }
+
+    private void groupComboBox_SelectedValueChanged(object sender, EventArgs e) {
+      if (initializing || suppressUpdates) return;
       RebuildDataTable();
-    }
-
-    private void Content_CollectionReset(object sender, CollectionItemsChangedEventArgs<IRun> e) {
-      RebuildDataTable();
-    }
-
-    void Content_UpdateOfRunsInProgressChanged(object sender, EventArgs e) {
-      if (!Content.UpdateOfRunsInProgress) {
-        RebuildDataTable();
-      }
+      FillCompComboBox();
+      ResetUI();
+      CalculateValues();
     }
     #endregion
 
     private void UpdateGroupsComboBox() {
+      string selectedItem = (string)groupComboBox.SelectedItem;
+
       groupComboBox.Items.Clear();
-
       var parameters = (from run in Content
                         where run.Visible
@@ -154,8 +213,8 @@
         }
 
-        if (possibleIndizes.Count > 0) {
+        if (selectedItem != null && groupComboBox.Items.Contains(selectedItem)) {
+          groupComboBox.SelectedItem = selectedItem;
+        } else if (possibleIndizes.Count > 0) {
           groupComboBox.SelectedItem = groupComboBox.Items[possibleIndizes.First()];
-        } else {
-          groupComboBox.SelectedItem = groupComboBox.Items[0];
         }
       }
@@ -169,4 +228,6 @@
 
     private void UpdateResultComboBox() {
+      string selectedItem = (string)resultComboBox.SelectedItem;
+
       resultComboBox.Items.Clear();
       var results = (from run in Content
@@ -177,8 +238,14 @@
 
       resultComboBox.Items.AddRange(results);
-      if (resultComboBox.Items.Count > 0) resultComboBox.SelectedItem = resultComboBox.Items[0];
+
+      if (selectedItem != null && resultComboBox.Items.Contains(selectedItem)) {
+        resultComboBox.SelectedItem = selectedItem;
+      } else if (resultComboBox.Items.Count > 0) {
+        resultComboBox.SelectedItem = resultComboBox.Items[0];
+      }
     }
 
     private void FillCompComboBox() {
+      string selectedItem = (string)groupCompComboBox.SelectedItem;
       string parameterName = (string)groupComboBox.SelectedItem;
       if (parameterName != null) {
@@ -189,5 +256,9 @@
           groupCompComboBox.Items.Clear();
           columnNames.ForEach(x => groupCompComboBox.Items.Add(x));
-          if (groupCompComboBox.Items.Count > 0) groupCompComboBox.SelectedItem = groupCompComboBox.Items[0];
+          if (selectedItem != null && groupCompComboBox.Items.Contains(selectedItem)) {
+            groupCompComboBox.SelectedItem = selectedItem;
+          } else if (groupCompComboBox.Items.Count > 0) {
+            groupCompComboBox.SelectedItem = groupCompComboBox.Items[0];
+          }
         }
       }
@@ -259,17 +330,4 @@
     }
 
-    private void resultComboBox_SelectedValueChanged(object sender, EventArgs e) {
-      RebuildDataTable();
-      ResetUI();
-      CalculateValues();
-    }
-
-    private void groupComboBox_SelectedValueChanged(object sender, EventArgs e) {
-      RebuildDataTable();
-      FillCompComboBox();
-      ResetUI();
-      CalculateValues();
-    }
-
     private bool VerifyDataLength(bool showMessage) {
       if (data == null || data.Length == 0)
@@ -277,5 +335,5 @@
 
       //alglib needs at least 5 samples for computation
-      if (data.Any(x => x.Length <= requiredSampleSize)) {
+      if (data.Any(x => x.Length < requiredSampleSize)) {
         if (showMessage)
           MessageBox.Show(this, "You need at least " + requiredSampleSize
@@ -291,6 +349,6 @@
         return;
 
-      if (data != null) {
-        MainFormManager.GetMainForm<HeuristicLab.MainForm.WindowsForms.MainForm>()
+      if (data != null && data.All(x => x != null)) {
+        MainFormManager.GetMainForm<MainForm.WindowsForms.MainForm>()
           .AddOperationProgressToView(this, "Calculating...");
 
@@ -305,12 +363,13 @@
       CalculatePairwiseTest(groupName);
 
-      MainFormManager.GetMainForm<HeuristicLab.MainForm.WindowsForms.MainForm>().RemoveOperationProgressFromView(this);
+      MainFormManager.GetMainForm<MainForm.WindowsForms.MainForm>().RemoveOperationProgressFromView(this);
     }
 
     private void CalculatePairwise(string groupName) {
+      if (groupName == null) return;
       if (!VerifyDataLength(false))
         return;
 
-      MainFormManager.GetMainForm<HeuristicLab.MainForm.WindowsForms.MainForm>().AddOperationProgressToView(pairwiseTestGroupBox, "Calculating...");
+      MainFormManager.GetMainForm<MainForm.WindowsForms.MainForm>().AddOperationProgressToView(pairwiseTestGroupBox, "Calculating...");
       Task.Factory.StartNew(() => CalculatePairwiseAsync(groupName));
     }
@@ -319,20 +378,24 @@
       CalculatePairwiseTest(groupName);
 
-      MainFormManager.GetMainForm<HeuristicLab.MainForm.WindowsForms.MainForm>().RemoveOperationProgressFromView(pairwiseTestGroupBox);
+      MainFormManager.GetMainForm<MainForm.WindowsForms.MainForm>().RemoveOperationProgressFromView(pairwiseTestGroupBox);
     }
 
     private void CalculateAllGroupsTest() {
       double pval = KruskalWallisTest.Test(data);
-      pValTextBox.Text = pval.ToString();
-      if (pval < significanceLevel) {
-        this.Invoke(new Action(() => {
-          groupCompLabel.Image = HeuristicLab.Common.Resources.VSImageLibrary.Default;
+      DisplayAllGroupsTextResults(pval);
+    }
+
+    private void DisplayAllGroupsTextResults(double pval) {
+      if (InvokeRequired) {
+        Invoke((Action<double>)DisplayAllGroupsTextResults, pval);
+      } else {
+        pValTextBox.Text = pval.ToString();
+        if (pval < significanceLevel) {
+          groupCompLabel.Image = VSImageLibrary.Default;
           groupComTextLabel.Text = "There are groups with different distributions";
-        }));
-      } else {
-        this.Invoke(new Action(() => {
-          groupCompLabel.Image = HeuristicLab.Common.Resources.VSImageLibrary.Warning;
+        } else {
+          groupCompLabel.Image = VSImageLibrary.Warning;
           groupComTextLabel.Text = "Groups have an equal distribution";
-        }));
+        }
       }
     }
@@ -343,5 +406,5 @@
       DoubleMatrix pValsMatrix = new DoubleMatrix(1, stringConvertibleMatrixView.Content.Columns);
       pValsMatrix.ColumnNames = stringConvertibleMatrixView.Content.ColumnNames;
-      pValsMatrix.RowNames = new string[] { "p-Value" };
+      pValsMatrix.RowNames = new[] { "p-Value" };
 
       for (int i = 0; i < data.Length; i++) {
@@ -353,16 +416,16 @@
       // p-value is below significance level and thus the null hypothesis (data is normally distributed) is rejected
       if (res.Any(x => x < significanceLevel)) {
-        this.Invoke(new Action(() => {
-          normalityLabel.Image = HeuristicLab.Common.Resources.VSImageLibrary.Warning;
+        Invoke(new Action(() => {
+          normalityLabel.Image = VSImageLibrary.Warning;
           normalityTextLabel.Text = "Some groups may not be normally distributed";
         }));
       } else {
-        this.Invoke(new Action(() => {
-          normalityLabel.Image = HeuristicLab.Common.Resources.VSImageLibrary.Default;
+        Invoke(new Action(() => {
+          normalityLabel.Image = VSImageLibrary.Default;
           normalityTextLabel.Text = "All sample data is normally distributed";
         }));
       }
 
-      this.Invoke(new Action(() => {
+      Invoke(new Action(() => {
         normalityStringConvertibleMatrixView.Content = pValsMatrix;
         normalityStringConvertibleMatrixView.DataGridView.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells);
@@ -372,14 +435,14 @@
     private void ShowPairwiseResult(int nrOfEqualDistributions) {
       double ratio = ((double)nrOfEqualDistributions) / (data.Length - 1) * 100.0;
-      equalDistsTextBox.Text = ratio.ToString() + " %";
+      equalDistsTextBox.Text = ratio + " %";
 
       if (nrOfEqualDistributions == 0) {
-        this.Invoke(new Action(() => {
-          pairwiseLabel.Image = HeuristicLab.Common.Resources.VSImageLibrary.Default;
+        Invoke(new Action(() => {
+          pairwiseLabel.Image = VSImageLibrary.Default;
           pairwiseTextLabel.Text = "All groups have different distributions";
         }));
       } else {
-        this.Invoke(new Action(() => {
-          pairwiseLabel.Image = HeuristicLab.Common.Resources.VSImageLibrary.Warning;
+        Invoke(new Action(() => {
+          pairwiseLabel.Image = VSImageLibrary.Warning;
           pairwiseTextLabel.Text = "Some groups have equal distributions";
         }));
@@ -394,5 +457,5 @@
       double[][] newData = FilterDataForPairwiseTest(colIndex);
 
-      var rowNames = new string[] { "p-Value of Mann-Whitney U", "Adjusted p-Value of Mann-Whitney U", 
+      var rowNames = new[] { "p-Value of Mann-Whitney U", "Adjusted p-Value of Mann-Whitney U", 
             "p-Value of T-Test", "Adjusted p-Value of T-Test", "Cohen's d", "Hedges' g" };
 
@@ -433,5 +496,5 @@
       }
 
-      this.Invoke(new Action(() => {
+      Invoke(new Action(() => {
         pairwiseStringConvertibleMatrixView.Content = pValsMatrix;
         pairwiseStringConvertibleMatrixView.DataGridView.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells);
@@ -469,18 +532,4 @@
       return newData;
     }
-
-    private void openBoxPlotToolStripMenuItem_Click(object sender, EventArgs e) {
-      RunCollectionBoxPlotView boxplotView = new RunCollectionBoxPlotView();
-      boxplotView.Content = Content;
-      boxplotView.SetXAxis(groupComboBox.SelectedItem.ToString());
-      boxplotView.SetYAxis(resultComboBox.SelectedItem.ToString());
-
-      boxplotView.Show();
-    }
-
-    private void groupCompComboBox_SelectedValueChanged(object sender, EventArgs e) {
-      string curItem = (string)groupCompComboBox.SelectedItem;
-      CalculatePairwise(curItem);
-    }
   }
 }
Index: /stable/HeuristicLab.Analysis.Views/3.3/HistogramControl.Designer.cs
===================================================================
--- /stable/HeuristicLab.Analysis.Views/3.3/HistogramControl.Designer.cs	(revision 12724)
+++ /stable/HeuristicLab.Analysis.Views/3.3/HistogramControl.Designer.cs	(revision 12725)
@@ -48,7 +48,7 @@
     private void InitializeComponent() {
       this.components = new System.ComponentModel.Container();
-      System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea1 = new System.Windows.Forms.DataVisualization.Charting.ChartArea();
-      System.Windows.Forms.DataVisualization.Charting.Legend legend1 = new System.Windows.Forms.DataVisualization.Charting.Legend();
-      System.Windows.Forms.DataVisualization.Charting.Series series1 = new System.Windows.Forms.DataVisualization.Charting.Series();
+      System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea2 = new System.Windows.Forms.DataVisualization.Charting.ChartArea();
+      System.Windows.Forms.DataVisualization.Charting.Legend legend2 = new System.Windows.Forms.DataVisualization.Charting.Legend();
+      System.Windows.Forms.DataVisualization.Charting.Series series2 = new System.Windows.Forms.DataVisualization.Charting.Series();
       this.chart = new HeuristicLab.Visualization.ChartControlsExtensions.EnhancedChart();
       this.binsNumericUpDown = new System.Windows.Forms.NumericUpDown();
@@ -57,4 +57,5 @@
       this.label2 = new System.Windows.Forms.Label();
       this.bandwidthNumericUpDown = new System.Windows.Forms.NumericUpDown();
+      this.noDataLabel = new System.Windows.Forms.Label();
       ((System.ComponentModel.ISupportInitialize)(this.chart)).BeginInit();
       ((System.ComponentModel.ISupportInitialize)(this.binsNumericUpDown)).BeginInit();
@@ -67,16 +68,16 @@
             | System.Windows.Forms.AnchorStyles.Left) 
             | System.Windows.Forms.AnchorStyles.Right)));
-      chartArea1.Name = "ChartArea1";
-      this.chart.ChartAreas.Add(chartArea1);
-      legend1.Alignment = System.Drawing.StringAlignment.Center;
-      legend1.Docking = System.Windows.Forms.DataVisualization.Charting.Docking.Top;
-      legend1.Name = "Default";
-      this.chart.Legends.Add(legend1);
+      chartArea2.Name = "ChartArea1";
+      this.chart.ChartAreas.Add(chartArea2);
+      legend2.Alignment = System.Drawing.StringAlignment.Center;
+      legend2.Docking = System.Windows.Forms.DataVisualization.Charting.Docking.Top;
+      legend2.Name = "Default";
+      this.chart.Legends.Add(legend2);
       this.chart.Location = new System.Drawing.Point(0, 27);
       this.chart.Name = "chart";
-      series1.ChartArea = "ChartArea1";
-      series1.Legend = "Default";
-      series1.Name = "Series1";
-      this.chart.Series.Add(series1);
+      series2.ChartArea = "ChartArea1";
+      series2.Legend = "Default";
+      series2.Name = "Series1";
+      this.chart.Series.Add(series2);
       this.chart.Size = new System.Drawing.Size(465, 336);
       this.chart.TabIndex = 0;
@@ -159,7 +160,18 @@
       this.bandwidthNumericUpDown.ValueChanged += new System.EventHandler(this.bandwidthNumericUpDown_ValueChanged);
       // 
+      // noDataLabel
+      // 
+      this.noDataLabel.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.noDataLabel.AutoSize = true;
+      this.noDataLabel.Location = new System.Drawing.Point(163, 175);
+      this.noDataLabel.Name = "noDataLabel";
+      this.noDataLabel.Size = new System.Drawing.Size(139, 13);
+      this.noDataLabel.TabIndex = 22;
+      this.noDataLabel.Text = "No data could be displayed.";
+      // 
       // HistogramControl
       // 
       this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
+      this.Controls.Add(this.noDataLabel);
       this.Controls.Add(this.label2);
       this.Controls.Add(this.bandwidthNumericUpDown);
@@ -186,4 +198,5 @@
     private System.Windows.Forms.Label label2;
     private System.Windows.Forms.NumericUpDown bandwidthNumericUpDown;
+    private System.Windows.Forms.Label noDataLabel;
   }
 }
Index: /stable/HeuristicLab.Analysis.Views/3.3/HistogramControl.cs
===================================================================
--- /stable/HeuristicLab.Analysis.Views/3.3/HistogramControl.cs	(revision 12724)
+++ /stable/HeuristicLab.Analysis.Views/3.3/HistogramControl.cs	(revision 12725)
@@ -139,10 +139,11 @@
         if (!point.Value.Any()) continue;
 
-        Series histogramSeries = new Series(point.Key);
-        chart.Series.Add(histogramSeries);
         double minValue = point.Value.Min();
         double maxValue = point.Value.Max();
         double intervalWidth = (maxValue - minValue) / bins;
         if (intervalWidth <= 0) continue;
+
+        Series histogramSeries = new Series(point.Key);
+        chart.Series.Add(histogramSeries);
 
         if (!exactCheckBox.Checked) {
@@ -167,18 +168,14 @@
         overallMax = Math.Max(overallMax, maxValue);
         overallMin = Math.Min(overallMin, minValue);
-      }
-
-      chart.ApplyPaletteColors();
-
-      int i = 0;
-      foreach (var point in points) {
-        if (!point.Value.Any()) continue;
-
-        var histogramSeries = chart.Series[i];
+
+        chart.ApplyPaletteColors();
         CalculateDensity(histogramSeries, point.Value, bandwith);
-
-        i++;
-      }
-
+      }
+
+      if (chart.Series.Any()) {
+        noDataLabel.Visible = false;
+      } else {
+        noDataLabel.Visible = true;
+      }
 
       ChartArea chartArea = chart.ChartAreas[0];
Index: /stable/HeuristicLab.Data.Views/3.3/StringConvertibleMatrixView.cs
===================================================================
--- /stable/HeuristicLab.Data.Views/3.3/StringConvertibleMatrixView.cs	(revision 12724)
+++ /stable/HeuristicLab.Data.Views/3.3/StringConvertibleMatrixView.cs	(revision 12725)
@@ -124,5 +124,5 @@
     }
 
-    private void UpdateData() {
+    protected virtual void UpdateData() {
       rowsTextBox.Text = Content.Rows.ToString();
       rowsTextBox.Enabled = true;
Index: /stable/HeuristicLab.Optimization.Views/3.3/RunCollectionViews/RunCollectionBoxPlotView.cs
===================================================================
--- /stable/HeuristicLab.Optimization.Views/3.3/RunCollectionViews/RunCollectionBoxPlotView.cs	(revision 12724)
+++ /stable/HeuristicLab.Optimization.Views/3.3/RunCollectionViews/RunCollectionBoxPlotView.cs	(revision 12725)
@@ -122,5 +122,5 @@
       if (InvokeRequired)
         Invoke(new EventHandler(Content_Reset), sender, e);
-      else {
+      else if (!suppressUpdates) {
         UpdateDataPoints();
         UpdateAxisLabels();
@@ -376,5 +376,5 @@
       Axis yAxis = this.chart.ChartAreas[BoxPlotChartAreaName].AxisY;
       int axisDimensionCount = Enum.GetNames(typeof(AxisDimension)).Count();
-      //mkommend: combobox.SelectedIndex could not be used as this changes during hoovering over possible values
+      //mkommend: combobox.SelectedIndex could not be used as this changes during hovering over possible values
       var xSAxisSelectedIndex = xAxisValue == null ? 0 : xAxisComboBox.Items.IndexOf(xAxisValue);
       var ySAxisSelectedIndex = yAxisValue == null ? 0 : xAxisComboBox.Items.IndexOf(yAxisValue);
Index: /stable/HeuristicLab.Optimization.Views/3.3/RunCollectionViews/RunCollectionBubbleChartView.cs
===================================================================
--- /stable/HeuristicLab.Optimization.Views/3.3/RunCollectionViews/RunCollectionBubbleChartView.cs	(revision 12724)
+++ /stable/HeuristicLab.Optimization.Views/3.3/RunCollectionViews/RunCollectionBubbleChartView.cs	(revision 12725)
@@ -262,4 +262,5 @@
 
     private void Content_Reset(object sender, EventArgs e) {
+      if (suppressUpdates) return;
       if (InvokeRequired)
         Invoke(new EventHandler(Content_Reset), sender, e);
Index: /stable/HeuristicLab.Optimization.Views/3.3/RunCollectionViews/RunCollectionChartAggregationView.cs
===================================================================
--- /stable/HeuristicLab.Optimization.Views/3.3/RunCollectionViews/RunCollectionChartAggregationView.cs	(revision 12724)
+++ /stable/HeuristicLab.Optimization.Views/3.3/RunCollectionViews/RunCollectionChartAggregationView.cs	(revision 12725)
@@ -24,5 +24,4 @@
 using System.ComponentModel;
 using System.Linq;
-using System.Windows.Forms;
 using HeuristicLab.Analysis;
 using HeuristicLab.Collections;
@@ -41,5 +40,5 @@
     }
 
-    private int rowNumber = 0;
+    private int rowNumber;
     private bool suppressUpdates;
     private readonly Dictionary<IRun, IEnumerable<DataRow>> runMapping;
@@ -60,38 +59,47 @@
     protected override void RegisterContentEvents() {
       base.RegisterContentEvents();
-      Content.ItemsAdded += new CollectionItemsChangedEventHandler<IRun>(Content_ItemsAdded);
-      Content.ItemsRemoved += new CollectionItemsChangedEventHandler<IRun>(Content_ItemsRemoved);
-      Content.CollectionReset += new CollectionItemsChangedEventHandler<IRun>(Content_CollectionReset);
-      Content.UpdateOfRunsInProgressChanged += new EventHandler(Content_UpdateOfRunsInProgressChanged);
-      Content.OptimizerNameChanged += new EventHandler(Content_AlgorithmNameChanged);
+      Content.ItemsAdded += Content_ItemsAdded;
+      Content.ItemsRemoved += Content_ItemsRemoved;
+      Content.CollectionReset += Content_CollectionReset;
+      Content.UpdateOfRunsInProgressChanged += Content_UpdateOfRunsInProgressChanged;
+      Content.OptimizerNameChanged += Content_AlgorithmNameChanged;
     }
     protected override void DeregisterContentEvents() {
-      Content.ItemsAdded -= new CollectionItemsChangedEventHandler<IRun>(Content_ItemsAdded);
-      Content.ItemsRemoved -= new CollectionItemsChangedEventHandler<IRun>(Content_ItemsRemoved);
-      Content.CollectionReset -= new CollectionItemsChangedEventHandler<IRun>(Content_CollectionReset);
-      Content.UpdateOfRunsInProgressChanged -= new EventHandler(Content_UpdateOfRunsInProgressChanged);
-      Content.OptimizerNameChanged -= new EventHandler(Content_AlgorithmNameChanged);
+      Content.ItemsAdded -= Content_ItemsAdded;
+      Content.ItemsRemoved -= Content_ItemsRemoved;
+      Content.CollectionReset -= Content_CollectionReset;
+      Content.UpdateOfRunsInProgressChanged -= Content_UpdateOfRunsInProgressChanged;
+      Content.OptimizerNameChanged -= Content_AlgorithmNameChanged;
       base.DeregisterContentEvents();
     }
 
     private void Content_ItemsAdded(object sender, CollectionItemsChangedEventArgs<IRun> e) {
+      if (suppressUpdates) return;
       if (InvokeRequired) {
         Invoke(new CollectionItemsChangedEventHandler<IRun>(Content_ItemsAdded), sender, e);
         return;
       }
+      UpdateDataTableComboBox();
+      UpdateDataRowComboBox();
       AddRuns(e.Items);
     }
     private void Content_ItemsRemoved(object sender, CollectionItemsChangedEventArgs<IRun> e) {
+      if (suppressUpdates) return;
       if (InvokeRequired) {
         Invoke(new CollectionItemsChangedEventHandler<IRun>(Content_ItemsRemoved), sender, e);
         return;
       }
+      UpdateDataTableComboBox();
+      UpdateDataRowComboBox();
       RemoveRuns(e.Items);
     }
     private void Content_CollectionReset(object sender, CollectionItemsChangedEventArgs<IRun> e) {
+      if (suppressUpdates) return;
       if (InvokeRequired) {
         Invoke(new CollectionItemsChangedEventHandler<IRun>(Content_CollectionReset), sender, e);
         return;
       }
+      UpdateDataTableComboBox();
+      UpdateDataRowComboBox();
       RemoveRuns(e.OldItems);
       AddRuns(e.Items);
@@ -108,5 +116,9 @@
       }
       suppressUpdates = Content.UpdateOfRunsInProgress;
-      if (!suppressUpdates) UpdateRuns(Content);
+      if (!suppressUpdates) {
+        UpdateDataTableComboBox();
+        UpdateDataRowComboBox();
+        UpdateRuns(Content);
+      }
     }
 
@@ -124,5 +136,5 @@
         var run = (IRun)sender;
         if (e.PropertyName == "Color" || e.PropertyName == "Visible")
-          UpdateRuns(new IRun[] { run });
+          UpdateRuns(new[] { run });
       }
     }
@@ -168,18 +180,24 @@
 
     private void UpdateRuns(IEnumerable<IRun> runs) {
-      if (suppressUpdates) return;
       foreach (var run in runs) {
         //update color
-        foreach (var dataRow in runMapping[run]) {
-          dataRow.VisualProperties.Color = run.Color;
+        if (!runMapping.ContainsKey(run)) {
+          runMapping[run] = ExtractDataRowsFromRun(run).ToList();
+          RegisterRunEvents(run);
+        } else {
+          foreach (var dataRow in runMapping[run]) {
+            dataRow.VisualProperties.Color = run.Color;
+          }
         }
-        //update visibility - remove and add all rows to keep the same order as before
-        combinedDataTable.Rows.Clear();
-        combinedDataTable.Rows.AddRange(runMapping.Where(mapping => mapping.Key.Visible).SelectMany(mapping => mapping.Value));
-      }
+      }
+      //update visibility - remove and add all rows to keep the same order as before
+      combinedDataTable.Rows.Clear();
+      combinedDataTable.Rows.AddRange(runMapping.Where(mapping => mapping.Key.Visible).SelectMany(mapping => mapping.Value));
     }
 
     private IEnumerable<DataRow> ExtractDataRowsFromRun(IRun run) {
       var resultName = (string)dataTableComboBox.SelectedItem;
+      if (string.IsNullOrEmpty(resultName)) yield break;
+
       var rowName = (string)dataRowComboBox.SelectedItem;
       if (!run.Results.ContainsKey(resultName)) yield break;
@@ -199,4 +217,6 @@
 
     private void UpdateDataTableComboBox() {
+      string selectedItem = (string)dataTableComboBox.SelectedItem;
+
       dataTableComboBox.Items.Clear();
       var dataTables = (from run in Content
@@ -206,5 +226,9 @@
 
       dataTableComboBox.Items.AddRange(dataTables);
-      if (dataTableComboBox.Items.Count > 0) dataTableComboBox.SelectedItem = dataTableComboBox.Items[0];
+      if (selectedItem != null && dataTableComboBox.Items.Contains(selectedItem)) {
+        dataTableComboBox.SelectedItem = selectedItem;
+      } else if (dataTableComboBox.Items.Count > 0) {
+        dataTableComboBox.SelectedItem = dataTableComboBox.Items[0];
+      }
     }
 
@@ -214,6 +238,10 @@
 
     private void UpdateDataRowComboBox() {
+      string selectedItem = (string)dataRowComboBox.SelectedItem;
+
       dataRowComboBox.Items.Clear();
       var resultName = (string)dataTableComboBox.SelectedItem;
+      if (resultName == null) return;
+
       var dataTables = from run in Content
                        where run.Results.ContainsKey(resultName)
@@ -225,11 +253,16 @@
       dataRowComboBox.Items.AddRange(rowNames);
       dataRowComboBox.Items.Add(AllDataRows);
-      if (dataRowComboBox.Items.Count > 0) dataRowComboBox.SelectedItem = dataRowComboBox.Items[0];
-    }
-
-    private void dataTableComboBox_SelectedIndexChanged(object sender, System.EventArgs e) {
-      UpdateDataRowComboBox();
-    }
-    private void dataRowComboBox_SelectedIndexChanged(object sender, System.EventArgs e) {
+      if (selectedItem != null && dataRowComboBox.Items.Contains(selectedItem)) {
+        dataRowComboBox.SelectedItem = selectedItem;
+      } else if (dataRowComboBox.Items.Count > 0) {
+        dataRowComboBox.SelectedItem = dataRowComboBox.Items[0];
+      }
+    }
+
+    private void dataTableComboBox_SelectedIndexChanged(object sender, EventArgs e) {
+      UpdateDataRowComboBox();
+    }
+    private void dataRowComboBox_SelectedIndexChanged(object sender, EventArgs e) {
+      if (suppressUpdates) return;
       RebuildCombinedDataTable();
     }
Index: /stable/HeuristicLab.Optimization.Views/3.3/RunCollectionViews/RunCollectionTableView.cs
===================================================================
--- /stable/HeuristicLab.Optimization.Views/3.3/RunCollectionViews/RunCollectionTableView.cs	(revision 12724)
+++ /stable/HeuristicLab.Optimization.Views/3.3/RunCollectionViews/RunCollectionTableView.cs	(revision 12725)
@@ -53,5 +53,4 @@
       base.OnContentChanged();
       if (Content != null) {
-        runToRowMapping = Enumerable.Range(0, Content.Count).ToArray();
         UpdateRowAttributes();
       }
@@ -117,4 +116,9 @@
     }
 
+    protected override void UpdateData() {
+      if (suppressUpdates) return;
+      base.UpdateData();
+    }
+
     protected override void UpdateColumnHeaders() {
       HashSet<string> visibleColumnNames = new HashSet<string>(dataGridView.Columns.OfType<DataGridViewColumn>()
@@ -145,5 +149,8 @@
       else {
         suppressUpdates = Content.UpdateOfRunsInProgress;
-        if (!suppressUpdates) UpdateRowAttributes();
+        if (!suppressUpdates) {
+          UpdateData();
+          UpdateRowAttributes();
+        }
       }
     }
@@ -171,5 +178,4 @@
     protected override void ClearSorting() {
       base.ClearSorting();
-      runToRowMapping = Enumerable.Range(0, Content.Count).ToArray();
       UpdateRowAttributes();
     }
@@ -190,9 +196,10 @@
         i++;
       }
-      UpdateRowAttributes();
+      UpdateRowAttributes(rebuild: false);
       return newSortedIndex;
     }
 
-    private void UpdateRowAttributes() {
+    private void UpdateRowAttributes(bool rebuild = true) {
+      if (rebuild) runToRowMapping = Enumerable.Range(0, Content.Count).ToArray();
       int runIndex = 0;
       foreach (IRun run in Content) {
Index: /stable/HeuristicLab.Optimization.Views/3.3/RunCollectionViews/RunCollectionView.cs
===================================================================
--- /stable/HeuristicLab.Optimization.Views/3.3/RunCollectionViews/RunCollectionView.cs	(revision 12724)
+++ /stable/HeuristicLab.Optimization.Views/3.3/RunCollectionViews/RunCollectionView.cs	(revision 12725)
@@ -41,4 +41,5 @@
     private Dictionary<IRun, List<ListViewItem>> itemListViewItemMapping;
     private bool validDragOperation;
+    private bool suppressUpdates;
 
     public new IItemCollection<IRun> Content {
@@ -66,4 +67,6 @@
       Content.ItemsRemoved -= new CollectionItemsChangedEventHandler<IRun>(Content_ItemsRemoved);
       Content.CollectionReset -= new CollectionItemsChangedEventHandler<IRun>(Content_CollectionReset);
+      if (RunCollection != null)
+        RunCollection.UpdateOfRunsInProgressChanged -= new EventHandler(RunCollection_UpdateOfRunsInProgressChanged);
       foreach (IRun run in itemListViewItemMapping.Keys) {
         DeregisterItemEvents(run);
@@ -76,4 +79,6 @@
       Content.ItemsRemoved += new CollectionItemsChangedEventHandler<IRun>(Content_ItemsRemoved);
       Content.CollectionReset += new CollectionItemsChangedEventHandler<IRun>(Content_CollectionReset);
+      if (RunCollection != null)
+        RunCollection.UpdateOfRunsInProgressChanged += new EventHandler(RunCollection_UpdateOfRunsInProgressChanged);
     }
     private void DeregisterItemEvents(IRun item) {
@@ -394,4 +399,5 @@
     #region Content Events
     private void Content_ItemsAdded(object sender, CollectionItemsChangedEventArgs<IRun> e) {
+      if (suppressUpdates) return;
       if (InvokeRequired)
         Invoke(new CollectionItemsChangedEventHandler<IRun>(Content_ItemsAdded), sender, e);
@@ -407,4 +413,5 @@
     }
     private void Content_ItemsRemoved(object sender, CollectionItemsChangedEventArgs<IRun> e) {
+      if (suppressUpdates) return;
       if (InvokeRequired)
         Invoke(new CollectionItemsChangedEventHandler<IRun>(Content_ItemsRemoved), sender, e);
@@ -422,4 +429,5 @@
     }
     private void Content_CollectionReset(object sender, CollectionItemsChangedEventArgs<IRun> e) {
+      if (suppressUpdates) return;
       if (InvokeRequired)
         Invoke(new CollectionItemsChangedEventHandler<IRun>(Content_CollectionReset), sender, e);
@@ -440,8 +448,30 @@
       }
     }
+    private void RunCollection_UpdateOfRunsInProgressChanged(object sender, EventArgs e) {
+      if (InvokeRequired) Invoke((Action<object, EventArgs>)RunCollection_UpdateOfRunsInProgressChanged, sender, e);
+      else {
+        suppressUpdates = RunCollection.UpdateOfRunsInProgress;
+        if (!suppressUpdates) {
+          foreach (IRun item in Content) {
+            //remove only the first matching ListViewItem, because the IRun could be contained multiple times in the ItemCollection
+            ListViewItem listViewItem = GetListViewItemsForItem(item).FirstOrDefault();
+            if (listViewItem != null) RemoveListViewItem(listViewItem);
+          }
+          RebuildImageList();
+          foreach (IRun item in Content)
+            AddListViewItem(CreateListViewItem(item));
+
+          AdjustListViewColumnSizes();
+          analyzeRunsToolStripDropDownButton.Enabled = itemsListView.Items.Count > 0;
+          clearButton.Enabled = itemsListView.Items.Count > 0 && !Content.IsReadOnly && !ReadOnly;
+          runCollectionConstraintCollectionView.ReadOnly = itemsListView.Items.Count == 0;
+        }
+      }
+    }
     #endregion
 
     #region Item Events
     private void Item_ItemImageChanged(object sender, EventArgs e) {
+      if (suppressUpdates) return;
       if (InvokeRequired)
         Invoke(new EventHandler(Item_ItemImageChanged), sender, e);
@@ -453,4 +483,5 @@
     }
     private void Item_ToStringChanged(object sender, EventArgs e) {
+      if (suppressUpdates) return;
       if (InvokeRequired)
         Invoke(new EventHandler(Item_ToStringChanged), sender, e);
@@ -463,6 +494,7 @@
     }
     private void Item_PropertyChanged(object sender, PropertyChangedEventArgs e) {
+      if (suppressUpdates) return;
       if (InvokeRequired)
-        this.Invoke((Action<object, PropertyChangedEventArgs>)Item_PropertyChanged, sender, e);
+        Invoke((Action<object, PropertyChangedEventArgs>)Item_PropertyChanged, sender, e);
       else {
         IRun run = (IRun)sender;
Index: /stable/HeuristicLab.Optimization/3.3/RunCollection.cs
===================================================================
--- /stable/HeuristicLab.Optimization/3.3/RunCollection.cs	(revision 12724)
+++ /stable/HeuristicLab.Optimization/3.3/RunCollection.cs	(revision 12725)
@@ -445,5 +445,4 @@
       EventHandler<EventArgs<int, int>> handler = ItemChanged;
       if (handler != null) handler(this, new EventArgs<int, int>(rowIndex, columnIndex));
-      OnToStringChanged();
     }
     public event EventHandler Reset;
@@ -451,5 +450,4 @@
       EventHandler handler = Reset;
       if (handler != null) handler(this, EventArgs.Empty);
-      OnToStringChanged();
     }
     public event EventHandler ColumnsChanged;
@@ -485,4 +483,5 @@
     #region Filtering
     private void UpdateFiltering(bool reset) {
+      var oldUpateRuns = UpdateOfRunsInProgress;
       UpdateOfRunsInProgress = true;
       if (reset)
@@ -490,5 +489,5 @@
       foreach (IRunCollectionConstraint constraint in this.constraints)
         constraint.Check();
-      UpdateOfRunsInProgress = false;
+      UpdateOfRunsInProgress = oldUpateRuns;
     }
 
@@ -552,4 +551,5 @@
     #region Modification
     public void Modify() {
+      var oldUpateRuns = UpdateOfRunsInProgress;
       UpdateOfRunsInProgress = true;
       var runs = this.ToList();
@@ -566,5 +566,5 @@
         }
       }
-      UpdateOfRunsInProgress = false;
+      UpdateOfRunsInProgress = oldUpateRuns;
     }
 
