Index: stable/HeuristicLab.Optimization.Views/3.3/RunCollectionViews/RunCollectionBoxPlotView.cs
===================================================================
--- stable/HeuristicLab.Optimization.Views/3.3/RunCollectionViews/RunCollectionBoxPlotView.cs	(revision 12009)
+++ 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 12009)
+++ 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 12009)
+++ 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 12009)
+++ 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 12009)
+++ 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;
