Index: branches/StatisticalTesting/HeuristicLab.Analysis.Statistics/3.3/ChartAnalysisView.cs
===================================================================
--- branches/StatisticalTesting/HeuristicLab.Analysis.Statistics/3.3/ChartAnalysisView.cs	(revision 11375)
+++ branches/StatisticalTesting/HeuristicLab.Analysis.Statistics/3.3/ChartAnalysisView.cs	(revision 11376)
@@ -25,9 +25,10 @@
 using System.Threading.Tasks;
 using System.Windows.Forms;
+using HeuristicLab.Collections;
 using HeuristicLab.Common;
+using HeuristicLab.Core;
 using HeuristicLab.Core.Views;
 using HeuristicLab.Data;
 using HeuristicLab.MainForm;
-using HeuristicLab.MainForm.WindowsForms;
 using HeuristicLab.Optimization;
 using HeuristicLab.PluginInfrastructure;
@@ -50,4 +51,5 @@
     private IProgress progress;
     private bool valuesAdded = false;
+    private bool suppressUpdates = false;
 
     public ChartAnalysisView() {
@@ -75,4 +77,13 @@
     protected override void OnContentChanged() {
       base.OnContentChanged();
+      UpdateComboboxes();
+      UpdateCaption();
+    }
+
+    private void UpdateCaption() {
+      Caption = Content != null ? Content.OptimizerName + " Chart Analysis" : ViewAttribute.GetViewName(GetType());
+    }
+
+    private void UpdateComboboxes() {
       dataTableComboBox.Items.Clear();
       dataRowComboBox.Items.Clear();
@@ -81,45 +92,103 @@
         UpdateDataTableComboBox();
       }
-      UpdateCaption();
-    }
-
-    private void UpdateCaption() {
-      Caption = Content != null ? Content.OptimizerName + " Chart Analysis" : ViewAttribute.GetViewName(GetType());
     }
 
     protected override void RegisterContentEvents() {
       base.RegisterContentEvents();
-      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.ItemsAdded += Content_ItemsAdded;
+      Content.ItemsRemoved += Content_ItemsRemoved;
+      Content.CollectionReset += Content_CollectionReset;
       Content.UpdateOfRunsInProgressChanged += Content_UpdateOfRunsInProgressChanged;
+      RegisterRunEvents(Content);
     }
 
     protected override void DeregisterContentEvents() {
       base.DeregisterContentEvents();
-      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.ItemsAdded -= Content_ItemsAdded;
+      Content.ItemsRemoved -= Content_ItemsRemoved;
+      Content.CollectionReset -= Content_CollectionReset;
       Content.UpdateOfRunsInProgressChanged -= Content_UpdateOfRunsInProgressChanged;
-    }
-
-    private void Content_CollectionReset(object sender, HeuristicLab.Collections.CollectionItemsChangedEventArgs<IRun> e) {
+      DeregisterRunEvents(Content);
+    }
+
+    private void RegisterRunEvents(IEnumerable<IRun> runs) {
+      foreach (IRun run in runs) {
+        RegisterRunParametersEvents(run);
+        RegisterRunResultsEvents(run);
+      }
+    }
+
+    private void DeregisterRunEvents(IEnumerable<IRun> runs) {
+      foreach (IRun run in runs) {
+        DeregisterRunParametersEvents(run);
+        DeregisterRunResultsEvents(run);
+      }
+    }
+
+    private void RegisterRunParametersEvents(IRun run) {
+      IObservableDictionary<string, IItem> dict = run.Parameters;
+      dict.ItemsAdded += run_Changed;
+      dict.ItemsRemoved += run_Changed;
+      dict.ItemsReplaced += run_Changed;
+      dict.CollectionReset += run_Changed;
+    }
+
+    private void RegisterRunResultsEvents(IRun run) {
+      IObservableDictionary<string, IItem> dict = run.Results;
+      dict.ItemsAdded += run_Changed;
+      dict.ItemsRemoved += run_Changed;
+      dict.ItemsReplaced += run_Changed;
+      dict.CollectionReset += run_Changed;
+    }
+
+    private void DeregisterRunParametersEvents(IRun run) {
+      IObservableDictionary<string, IItem> dict = run.Parameters;
+      dict.ItemsAdded -= run_Changed;
+      dict.ItemsRemoved -= run_Changed;
+      dict.ItemsReplaced -= run_Changed;
+      dict.CollectionReset -= run_Changed;
+    }
+
+    private void DeregisterRunResultsEvents(IRun run) {
+      IObservableDictionary<string, IItem> dict = run.Results;
+      dict.ItemsAdded -= run_Changed;
+      dict.ItemsRemoved -= run_Changed;
+      dict.ItemsReplaced -= run_Changed;
+      dict.CollectionReset -= run_Changed;
+    }
+
+    private void Content_CollectionReset(object sender, CollectionItemsChangedEventArgs<IRun> e) {
+      DeregisterRunEvents(e.OldItems);
+      RegisterRunEvents(e.Items);
+      UpdateComboboxes();
       RebuildDataTableAsync();
     }
 
-    private void Content_ItemsRemoved(object sender, HeuristicLab.Collections.CollectionItemsChangedEventArgs<IRun> e) {
+    private void Content_ItemsRemoved(object sender, CollectionItemsChangedEventArgs<IRun> e) {
+      DeregisterRunEvents(e.Items);
       RebuildDataTableAsync();
     }
 
-    private void Content_ItemsAdded(object sender, HeuristicLab.Collections.CollectionItemsChangedEventArgs<IRun> e) {
+    private void Content_ItemsAdded(object sender, CollectionItemsChangedEventArgs<IRun> e) {
+      RegisterRunEvents(e.Items);
       RebuildDataTableAsync();
     }
 
     void Content_UpdateOfRunsInProgressChanged(object sender, EventArgs e) {
-      if (!Content.UpdateOfRunsInProgress && !valuesAdded) {
+      suppressUpdates = Content.UpdateOfRunsInProgress;
+
+      if (!suppressUpdates && !valuesAdded) {
         RebuildDataTableAsync();
       }
       if (valuesAdded) {
         valuesAdded = false;
+      }
+    }
+
+    private void run_Changed(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(run_Changed), sender, e);
+      else if (!suppressUpdates) {
+        UpdateComboboxes();
       }
     }
@@ -147,15 +216,15 @@
 
     private void addLineToChart_Click(object sender, EventArgs e) {
-      MainFormManager.GetMainForm<HeuristicLab.MainForm.WindowsForms.MainForm>().AddOperationProgressToView(this, "Adding fitted lines to charts...");
-
-      var task = System.Threading.Tasks.Task.Factory.StartNew(AddLineToChart);
+      MainFormManager.GetMainForm<MainForm.WindowsForms.MainForm>().AddOperationProgressToView(this, "Adding fitted lines to charts...");
+
+      var task = Task.Factory.StartNew(AddLineToChart);
 
       task.ContinueWith((t) => {
-        MainFormManager.GetMainForm<HeuristicLab.MainForm.WindowsForms.MainForm>().RemoveOperationProgressFromView(this);
+        MainFormManager.GetMainForm<MainForm.WindowsForms.MainForm>().RemoveOperationProgressFromView(this);
         ErrorHandling.ShowErrorDialog("An error occured while adding lines to charts. ", t.Exception);
       }, TaskContinuationOptions.OnlyOnFaulted);
 
       task.ContinueWith((t) => {
-        MainFormManager.GetMainForm<HeuristicLab.MainForm.WindowsForms.MainForm>().RemoveOperationProgressFromView(this);
+        MainFormManager.GetMainForm<MainForm.WindowsForms.MainForm>().RemoveOperationProgressFromView(this);
       }, TaskContinuationOptions.OnlyOnRanToCompletion);
     }
@@ -227,15 +296,15 @@
 
     private void RebuildDataTableAsync() {
-      progress = MainFormManager.GetMainForm<HeuristicLab.MainForm.WindowsForms.MainForm>().AddOperationProgressToView(this, "Calculating values...");
+      progress = MainFormManager.GetMainForm<MainForm.WindowsForms.MainForm>().AddOperationProgressToView(this, "Calculating values...");
 
       var task = Task.Factory.StartNew(RebuildDataTable);
 
       task.ContinueWith((t) => {
-        MainFormManager.GetMainForm<HeuristicLab.MainForm.WindowsForms.MainForm>().RemoveOperationProgressFromView(this);
+        MainFormManager.GetMainForm<MainForm.WindowsForms.MainForm>().RemoveOperationProgressFromView(this);
         ErrorHandling.ShowErrorDialog("An error occured while calculating values. ", t.Exception);
       }, TaskContinuationOptions.OnlyOnFaulted);
 
       task.ContinueWith((t) => {
-        MainFormManager.GetMainForm<HeuristicLab.MainForm.WindowsForms.MainForm>().RemoveOperationProgressFromView(this);
+        MainFormManager.GetMainForm<MainForm.WindowsForms.MainForm>().RemoveOperationProgressFromView(this);
       }, TaskContinuationOptions.OnlyOnRanToCompletion);
     }
@@ -298,5 +367,5 @@
 
         i++;
-        progress.ProgressValue = runs.Count / i;
+        progress.ProgressValue = ((double)runs.Count) / i;
       }
       stringConvertibleMatrixView.Content = dt;
Index: branches/StatisticalTesting/HeuristicLab.Analysis.Statistics/3.3/SampleSizeInfluenceView.cs
===================================================================
--- branches/StatisticalTesting/HeuristicLab.Analysis.Statistics/3.3/SampleSizeInfluenceView.cs	(revision 11375)
+++ branches/StatisticalTesting/HeuristicLab.Analysis.Statistics/3.3/SampleSizeInfluenceView.cs	(revision 11376)
@@ -43,5 +43,4 @@
 
     private bool suppressUpdates = false;
-    private string xAxisValue;
     private string yAxisValue;
     private Dictionary<int, Dictionary<object, double>> categoricalMapping;
@@ -139,12 +138,12 @@
     }
 
-    private void Content_CollectionReset(object sender, HeuristicLab.Collections.CollectionItemsChangedEventArgs<IRun> e) {
+    private void Content_CollectionReset(object sender, CollectionItemsChangedEventArgs<IRun> e) {
       DeregisterRunEvents(e.OldItems);
       RegisterRunEvents(e.Items);
     }
-    private void Content_ItemsRemoved(object sender, HeuristicLab.Collections.CollectionItemsChangedEventArgs<IRun> e) {
+    private void Content_ItemsRemoved(object sender, CollectionItemsChangedEventArgs<IRun> e) {
       DeregisterRunEvents(e.Items);
     }
-    private void Content_ItemsAdded(object sender, HeuristicLab.Collections.CollectionItemsChangedEventArgs<IRun> e) {
+    private void Content_ItemsAdded(object sender, CollectionItemsChangedEventArgs<IRun> e) {
       RegisterRunEvents(e.Items);
     }
@@ -397,5 +396,4 @@
 
 
-      this.xAxisValue = xAxisComboBox.Text;
       if (!yAxisComboBox.DroppedDown)
         this.yAxisValue = (string)yAxisComboBox.SelectedItem;
