Index: trunk/sources/HeuristicLab.Optimization.Views/3.3/RunCollectionBoxPlotView.cs
===================================================================
--- trunk/sources/HeuristicLab.Optimization.Views/3.3/RunCollectionBoxPlotView.cs	(revision 4873)
+++ trunk/sources/HeuristicLab.Optimization.Views/3.3/RunCollectionBoxPlotView.cs	(revision 4883)
@@ -39,4 +39,5 @@
     private const string BoxPlotChartAreaName = "BoxPlotChartArea";
 
+    private bool suppressUpdates = false;
     private string xAxisValue;
     private string yAxisValue;
@@ -46,10 +47,10 @@
     public RunCollectionBoxPlotView() {
       InitializeComponent();
-      this.categoricalMapping = new Dictionary<int, Dictionary<object, double>>();
-      this.seriesCache = new SortedDictionary<double, Series>();
-      this.chart.ChartAreas[0].Visible = false;
-      this.chart.Series.Clear();
-      this.chart.ChartAreas.Add(BoxPlotChartAreaName);
-      this.chart.CustomizeAllChartAreas();
+      categoricalMapping = new Dictionary<int, Dictionary<object, double>>();
+      seriesCache = new SortedDictionary<double, Series>();
+      chart.ChartAreas[0].Visible = false;
+      chart.Series.Clear();
+      chart.ChartAreas.Add(BoxPlotChartAreaName);
+      chart.CustomizeAllChartAreas();
     }
 
@@ -70,4 +71,5 @@
       Content.ItemsRemoved += new HeuristicLab.Collections.CollectionItemsChangedEventHandler<IRun>(Content_ItemsRemoved);
       Content.CollectionReset += new HeuristicLab.Collections.CollectionItemsChangedEventHandler<IRun>(Content_CollectionReset);
+      Content.UpdateOfRunsInProgress += new EventHandler<EventArgs<bool>>(Content_UpdateOfRunsInProgress);
       RegisterRunEvents(Content);
     }
@@ -79,4 +81,5 @@
       Content.ItemsRemoved -= new HeuristicLab.Collections.CollectionItemsChangedEventHandler<IRun>(Content_ItemsRemoved);
       Content.CollectionReset -= new HeuristicLab.Collections.CollectionItemsChangedEventHandler<IRun>(Content_CollectionReset);
+      Content.UpdateOfRunsInProgress -= new EventHandler<EventArgs<bool>>(Content_UpdateOfRunsInProgress);
       DeregisterRunEvents(Content);
     }
@@ -100,4 +103,12 @@
     private void Content_ItemsAdded(object sender, HeuristicLab.Collections.CollectionItemsChangedEventArgs<IRun> e) {
       RegisterRunEvents(e.Items);
+    }
+    private void Content_UpdateOfRunsInProgress(object sender, EventArgs<bool> e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler<EventArgs<bool>>(Content_UpdateOfRunsInProgress), sender, e);
+      else {
+        suppressUpdates = e.Value;
+        if (!suppressUpdates) UpdateDataPoints();
+      }
     }
 
@@ -120,5 +131,5 @@
       if (InvokeRequired)
         this.Invoke(new EventHandler(run_Changed), sender, e);
-      else {
+      else if (!suppressUpdates) {
         IRun run = (IRun)sender;
         UpdateDataPoints();
@@ -326,8 +337,11 @@
     #region GUI events
     private void UpdateNoRunsVisibleLabel() {
-      if (this.chart.Series.Count > 0)
+      if (this.chart.Series.Count > 0) {
         noRunsLabel.Visible = false;
-      else
+        splitContainer.Panel2Collapsed = !showStatisticsCheckBox.Checked;
+      } else {
         noRunsLabel.Visible = true;
+        splitContainer.Panel2Collapsed = true;
+      }
     }
 
Index: trunk/sources/HeuristicLab.Optimization.Views/3.3/RunCollectionBubbleChartView.cs
===================================================================
--- trunk/sources/HeuristicLab.Optimization.Views/3.3/RunCollectionBubbleChartView.cs	(revision 4873)
+++ trunk/sources/HeuristicLab.Optimization.Views/3.3/RunCollectionBubbleChartView.cs	(revision 4883)
@@ -43,5 +43,5 @@
     private string sizeAxisValue;
 
-    private Dictionary<IRun, DataPoint> runToDataPointMapping;
+    private Dictionary<IRun, List<DataPoint>> runToDataPointMapping;
     private Dictionary<int, Dictionary<object, double>> categoricalMapping;
     private Dictionary<IRun, double> xJitter;
@@ -51,4 +51,5 @@
     private Random random;
     private bool isSelecting = false;
+    private bool suppressUpdates = false;
 
     public RunCollectionBubbleChartView() {
@@ -56,5 +57,5 @@
       chart.ContextMenuStrip.Items.Insert(0, openBoxPlotViewToolStripMenuItem);
 
-      runToDataPointMapping = new Dictionary<IRun, DataPoint>();
+      runToDataPointMapping = new Dictionary<IRun, List<DataPoint>>();
       categoricalMapping = new Dictionary<int, Dictionary<object, double>>();
       xJitter = new Dictionary<IRun, double>();
@@ -88,4 +89,5 @@
       Content.ItemsRemoved += new HeuristicLab.Collections.CollectionItemsChangedEventHandler<IRun>(Content_ItemsRemoved);
       Content.CollectionReset += new HeuristicLab.Collections.CollectionItemsChangedEventHandler<IRun>(Content_CollectionReset);
+      Content.UpdateOfRunsInProgress += new EventHandler<EventArgs<bool>>(Content_UpdateOfRunsInProgress);
       RegisterRunEvents(Content);
     }
@@ -97,4 +99,5 @@
       Content.ItemsRemoved -= new HeuristicLab.Collections.CollectionItemsChangedEventHandler<IRun>(Content_ItemsRemoved);
       Content.CollectionReset -= new HeuristicLab.Collections.CollectionItemsChangedEventHandler<IRun>(Content_CollectionReset);
+      Content.UpdateOfRunsInProgress -= new EventHandler<EventArgs<bool>>(Content_UpdateOfRunsInProgress);
       DeregisterRunEvents(Content);
     }
@@ -128,24 +131,26 @@
 
     private void UpdateRun(IRun run) {
-      DataPoint point = runToDataPointMapping[run];
-      if (point != null) {
-        point.Color = run.Color;
-        if (!run.Visible) {
-          this.chart.Series[0].Points.Remove(point);
-          runToDataPointMapping.Remove(run);
+      if (!suppressUpdates) {
+        if (runToDataPointMapping.ContainsKey(run)) {
+          foreach (DataPoint point in runToDataPointMapping[run]) {
+            point.Color = run.Color;
+            if (!run.Visible) {
+              this.chart.Series[0].Points.Remove(point);
+              UpdateCursorInterval();
+              chart.ChartAreas[0].RecalculateAxesScale();
+            }
+          }
+          if (!run.Visible) runToDataPointMapping.Remove(run);
+        } else {
+          AddDataPoint(run);
           UpdateCursorInterval();
           chart.ChartAreas[0].RecalculateAxesScale();
         }
-      } else {
-        AddDataPoint(run);
-        UpdateCursorInterval();
-        chart.ChartAreas[0].RecalculateAxesScale();
-      }
-
-
-      if (this.chart.Series[0].Points.Count == 0)
-        noRunsLabel.Visible = true;
-      else
-        noRunsLabel.Visible = false;
+
+        if (this.chart.Series[0].Points.Count == 0)
+          noRunsLabel.Visible = true;
+        else
+          noRunsLabel.Visible = false;
+      }
     }
 
@@ -199,4 +204,14 @@
     }
 
+
+    private void Content_UpdateOfRunsInProgress(object sender, EventArgs<bool> e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler<EventArgs<bool>>(Content_UpdateOfRunsInProgress), sender, e);
+      else {
+        suppressUpdates = e.Value;
+        if (!suppressUpdates) UpdateDataPoints();
+      }
+    }
+
     private void Content_Reset(object sender, EventArgs e) {
       if (InvokeRequired)
@@ -252,5 +267,7 @@
           point.Color = run.Color;
           series.Points.Add(point);
-          runToDataPointMapping[run] = point;
+
+          if (!runToDataPointMapping.ContainsKey(run)) runToDataPointMapping.Add(run, new List<DataPoint>());
+          runToDataPointMapping[run].Add(point);
         }
       }
@@ -595,4 +612,5 @@
 
     private void ColorRuns(string axisValue) {
+      Content.OnUpdateOfRunsInProgress(true);
       var runs = Content.Select(r => new { Run = r, Value = GetValue(r, axisValue) }).Where(r => r.Value.HasValue);
       double minValue = runs.Min(r => r.Value.Value);
@@ -605,4 +623,5 @@
         r.Run.Color = ColorGradient.Colors[colorIndex];
       }
+      Content.OnUpdateOfRunsInProgress(false);
     }
     #endregion
Index: trunk/sources/HeuristicLab.Optimization.Views/3.3/RunCollectionTabularView.cs
===================================================================
--- trunk/sources/HeuristicLab.Optimization.Views/3.3/RunCollectionTabularView.cs	(revision 4873)
+++ trunk/sources/HeuristicLab.Optimization.Views/3.3/RunCollectionTabularView.cs	(revision 4883)
@@ -24,7 +24,8 @@
 using System.Linq;
 using System.Windows.Forms;
-using HeuristicLab.Core;
+using HeuristicLab.Common;
 using HeuristicLab.Data.Views;
 using HeuristicLab.MainForm;
+using HeuristicLab.Core;
 
 namespace HeuristicLab.Optimization.Views {
@@ -33,4 +34,5 @@
   public sealed partial class RunCollectionTabularView : StringConvertibleMatrixView {
     private int[] runToRowMapping;
+    private bool suppressUpdates = false;
     public RunCollectionTabularView() {
       InitializeComponent();
@@ -62,4 +64,5 @@
       Content.ItemsRemoved += new HeuristicLab.Collections.CollectionItemsChangedEventHandler<IRun>(Content_ItemsRemoved);
       Content.CollectionReset += new HeuristicLab.Collections.CollectionItemsChangedEventHandler<IRun>(Content_CollectionReset);
+      Content.UpdateOfRunsInProgress += new EventHandler<EventArgs<bool>>(Content_UpdateOfRunsInProgress);
       RegisterRunEvents(Content);
     }
@@ -73,4 +76,5 @@
       Content.ItemsRemoved -= new HeuristicLab.Collections.CollectionItemsChangedEventHandler<IRun>(Content_ItemsRemoved);
       Content.CollectionReset -= new HeuristicLab.Collections.CollectionItemsChangedEventHandler<IRun>(Content_CollectionReset);
+      Content.UpdateOfRunsInProgress -= new EventHandler<EventArgs<bool>>(Content_UpdateOfRunsInProgress);
       DeregisterRunEvents(Content);
     }
@@ -113,19 +117,29 @@
 
     private void UpdateRun(IRun run) {
-      int runIndex = GetIndexOfRun(run);
-      int rowIndex = runToRowMapping[runIndex];
-      this.dataGridView.Rows[rowIndex].Visible = run.Visible;
-      this.dataGridView.Rows[rowIndex].DefaultCellStyle.ForeColor = run.Color;
+      foreach (int runIndex in GetIndexOfRun(run)) {
+        int rowIndex = runToRowMapping[runIndex];
+        this.dataGridView.Rows[rowIndex].Visible = run.Visible;
+        this.dataGridView.Rows[rowIndex].DefaultCellStyle.ForeColor = run.Color;
+      }
       this.UpdateRowHeaders();
     }
 
-    private int GetIndexOfRun(IRun run) {
+
+    private void Content_UpdateOfRunsInProgress(object sender, Common.EventArgs<bool> e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler<EventArgs<bool>>(Content_UpdateOfRunsInProgress), sender, e);
+      else {
+        suppressUpdates = e.Value;
+        if (!suppressUpdates) UpdateRowAttributes();
+      }
+    }
+
+    private IEnumerable<int> GetIndexOfRun(IRun run) {
       int i = 0;
       foreach (IRun actualRun in Content) {
         if (actualRun == run)
-          return i;
+          yield return i;
         i++;
       }
-      throw new ArgumentException("Run " + run.Name + "could not be found in the RunCollection.");
     }
 
@@ -143,7 +157,5 @@
     protected override void ClearSorting() {
       base.ClearSorting();
-      runToRowMapping = new int[Content.Count];
-      for (int i = 0; i < runToRowMapping.Length; i++)
-        runToRowMapping[i] = i;
+      runToRowMapping = Enumerable.Range(0, Content.Count).ToArray();
       UpdateRowAttributes();
     }
@@ -176,4 +188,5 @@
         runIndex++;
       }
+      UpdateRowHeaders();
     }
 
Index: trunk/sources/HeuristicLab.Optimization.Views/3.3/RunCollectionView.Designer.cs
===================================================================
--- trunk/sources/HeuristicLab.Optimization.Views/3.3/RunCollectionView.Designer.cs	(revision 4873)
+++ trunk/sources/HeuristicLab.Optimization.Views/3.3/RunCollectionView.Designer.cs	(revision 4883)
@@ -302,21 +302,21 @@
     #endregion
 
-    protected System.Windows.Forms.SplitContainer splitContainer;
-    protected System.Windows.Forms.ColumnHeader columnHeader1;
-    protected GroupBox itemsGroupBox;
-    protected ListView itemsListView;
-    protected GroupBox detailsGroupBox;
-    protected Button removeButton;
-    protected ToolTip toolTip;
-    protected ImageList imageList;
-    protected HeuristicLab.MainForm.WindowsForms.ViewHost viewHost;
-    protected ToolStrip toolStrip;
-    protected ToolStripDropDownButton analyzeRunsToolStripDropDownButton;
-    protected TabControl tabControl;
-    protected TabPage runPage;
-    protected TabPage constraintPage;
-    protected RunCollectionConstraintCollectionView runCollectionConstraintCollectionView;
-    protected Button clearButton;
-    protected CheckBox showDetailsCheckBox;
+    private System.Windows.Forms.SplitContainer splitContainer;
+    private System.Windows.Forms.ColumnHeader columnHeader1;
+    private GroupBox itemsGroupBox;
+    private ListView itemsListView;
+    private GroupBox detailsGroupBox;
+    private Button removeButton;
+    private ToolTip toolTip;
+    private ImageList imageList;
+    private HeuristicLab.MainForm.WindowsForms.ViewHost viewHost;
+    private ToolStrip toolStrip;
+    private ToolStripDropDownButton analyzeRunsToolStripDropDownButton;
+    private TabControl tabControl;
+    private TabPage runPage;
+    private TabPage constraintPage;
+    private RunCollectionConstraintCollectionView runCollectionConstraintCollectionView;
+    private Button clearButton;
+    private CheckBox showDetailsCheckBox;
   }
 }
Index: trunk/sources/HeuristicLab.Optimization.Views/3.3/RunCollectionView.cs
===================================================================
--- trunk/sources/HeuristicLab.Optimization.Views/3.3/RunCollectionView.cs	(revision 4873)
+++ trunk/sources/HeuristicLab.Optimization.Views/3.3/RunCollectionView.cs	(revision 4883)
@@ -35,5 +35,7 @@
   [Content(typeof(RunCollection), true)]
   [Content(typeof(IItemCollection<IRun>), false)]
-  public partial class RunCollectionView : ItemView {
+  public sealed partial class RunCollectionView : ItemView {
+    private Dictionary<IRun, List<ListViewItem>> runListViewItemMapping;
+
     public new IItemCollection<IRun> Content {
       get { return (IItemCollection<IRun>)base.Content; }
@@ -52,4 +54,5 @@
       InitializeComponent();
       itemsGroupBox.Text = "Runs";
+      runListViewItemMapping = new Dictionary<IRun, List<ListViewItem>>();
     }
 
@@ -68,9 +71,9 @@
       RegisterRunEvents(Content);
     }
-    protected virtual void RegisterRunEvents(IEnumerable<IRun> runs) {
+    private void RegisterRunEvents(IEnumerable<IRun> runs) {
       foreach (IRun run in runs)
         run.Changed += new EventHandler(Run_Changed);
     }
-    protected virtual void DeregisterRunEvents(IEnumerable<IRun> runs) {
+    private void DeregisterRunEvents(IEnumerable<IRun> runs) {
       foreach (IRun run in runs)
         run.Changed -= new EventHandler(Run_Changed);
@@ -143,5 +146,5 @@
     }
 
-    protected virtual ListViewItem CreateListViewItem(IRun item) {
+    private ListViewItem CreateListViewItem(IRun item) {
       ListViewItem listViewItem = new ListViewItem();
       listViewItem.Text = item.ToString();
@@ -160,12 +163,25 @@
       return listViewItem;
     }
-    protected virtual void AddListViewItem(ListViewItem listViewItem) {
+    private void AddListViewItem(ListViewItem listViewItem) {
       itemsListView.Items.Add(listViewItem);
-      ((IRun)listViewItem.Tag).ItemImageChanged += new EventHandler(Item_ItemImageChanged);
-      ((IRun)listViewItem.Tag).ToStringChanged += new EventHandler(Item_ToStringChanged);
-    }
-    protected virtual void RemoveListViewItem(ListViewItem listViewItem) {
-      ((IRun)listViewItem.Tag).ItemImageChanged -= new EventHandler(Item_ItemImageChanged);
-      ((IRun)listViewItem.Tag).ToStringChanged -= new EventHandler(Item_ToStringChanged);
+      IRun run = listViewItem.Tag as IRun;
+      if (run != null) {
+        if (!runListViewItemMapping.ContainsKey(run))
+          runListViewItemMapping.Add(run, new List<ListViewItem>());
+        runListViewItemMapping[run].Add(listViewItem);
+        run.ItemImageChanged += new EventHandler(Item_ItemImageChanged);
+        run.ToStringChanged += new EventHandler(Item_ToStringChanged);
+      }
+    }
+    private void RemoveListViewItem(ListViewItem listViewItem) {
+      IRun run = listViewItem.Tag as IRun;
+      if (run != null) {
+        runListViewItemMapping[run].Remove(listViewItem);
+        if (runListViewItemMapping[run].Count == 0) {
+          runListViewItemMapping.Remove(run);
+          run.ItemImageChanged -= new EventHandler(Item_ItemImageChanged);
+          run.ToStringChanged -= new EventHandler(Item_ToStringChanged);
+        }
+      }
       listViewItem.Remove();
       foreach (ListViewItem other in itemsListView.Items)
@@ -173,5 +189,5 @@
       itemsListView.SmallImageList.Images.RemoveAt(listViewItem.ImageIndex);
     }
-    protected virtual void UpdateListViewItemImage(ListViewItem listViewItem) {
+    private void UpdateListViewItemImage(ListViewItem listViewItem) {
       int i = listViewItem.ImageIndex;
       listViewItem.ImageList.Images[i] = ((IRun)listViewItem.Tag).ItemImage;
@@ -179,17 +195,14 @@
       listViewItem.ImageIndex = i;
     }
-    protected virtual void UpdateListViewItemText(ListViewItem listViewItem) {
+    private void UpdateListViewItemText(ListViewItem listViewItem) {
       if (!listViewItem.Text.Equals(listViewItem.Tag.ToString()))
         listViewItem.Text = listViewItem.Tag.ToString();
     }
-    protected virtual IEnumerable<ListViewItem> GetListViewItemsForItem(IRun item) {
-      foreach (ListViewItem listViewItem in itemsListView.Items) {
-        if (((IRun)listViewItem.Tag) == item)
-          yield return listViewItem;
-      }
+    private IEnumerable<ListViewItem> GetListViewItemsForItem(IRun run) {
+      return runListViewItemMapping[run];
     }
 
     #region ListView Events
-    protected virtual void itemsListView_SelectedIndexChanged(object sender, EventArgs e) {
+    private void itemsListView_SelectedIndexChanged(object sender, EventArgs e) {
       removeButton.Enabled = itemsListView.SelectedItems.Count > 0 && (Content != null) && !Content.IsReadOnly && !ReadOnly;
       AdjustListViewColumnSizes();
@@ -205,5 +218,5 @@
       }
     }
-    protected virtual void itemsListView_KeyDown(object sender, KeyEventArgs e) {
+    private void itemsListView_KeyDown(object sender, KeyEventArgs e) {
       if (e.KeyCode == Keys.Delete) {
         if ((itemsListView.SelectedItems.Count > 0) && !Content.IsReadOnly && !ReadOnly) {
@@ -213,5 +226,5 @@
       }
     }
-    protected virtual void itemsListView_DoubleClick(object sender, EventArgs e) {
+    private void itemsListView_DoubleClick(object sender, EventArgs e) {
       if (itemsListView.SelectedItems.Count == 1) {
         IRun item = (IRun)itemsListView.SelectedItems[0].Tag;
@@ -223,5 +236,5 @@
       }
     }
-    protected virtual void itemsListView_ItemDrag(object sender, ItemDragEventArgs e) {
+    private void itemsListView_ItemDrag(object sender, ItemDragEventArgs e) {
       if (!Locked) {
         ListViewItem listViewItem = (ListViewItem)e.Item;
@@ -239,5 +252,5 @@
       }
     }
-    protected virtual void itemsListView_DragEnterOver(object sender, DragEventArgs e) {
+    private void itemsListView_DragEnterOver(object sender, DragEventArgs e) {
       e.Effect = DragDropEffects.None;
       Type type = e.Data.GetData("Type") as Type;
@@ -250,5 +263,5 @@
       }
     }
-    protected virtual void itemsListView_DragDrop(object sender, DragEventArgs e) {
+    private void itemsListView_DragDrop(object sender, DragEventArgs e) {
       if (e.Effect != DragDropEffects.None) {
         IRun item = e.Data.GetData("Value") as IRun;
@@ -260,5 +273,5 @@
 
     #region Button Events
-    protected virtual void menuItem_Click(object sender, EventArgs e) {
+    private void menuItem_Click(object sender, EventArgs e) {
       ToolStripMenuItem menuItem = (ToolStripMenuItem)sender;
       Type viewType = (Type)menuItem.Tag;
@@ -269,5 +282,5 @@
       }
     }
-    protected virtual void removeButton_Click(object sender, EventArgs e) {
+    private void removeButton_Click(object sender, EventArgs e) {
       if (itemsListView.SelectedItems.Count > 0) {
         foreach (ListViewItem item in itemsListView.SelectedItems)
@@ -276,5 +289,5 @@
       }
     }
-    protected virtual void clearButton_Click(object sender, EventArgs e) {
+    private void clearButton_Click(object sender, EventArgs e) {
       Content.Clear();
     }
@@ -282,5 +295,5 @@
 
     #region CheckBox Events
-    protected virtual void showDetailsCheckBox_CheckedChanged(object sender, EventArgs e) {
+    private void showDetailsCheckBox_CheckedChanged(object sender, EventArgs e) {
       if (showDetailsCheckBox.Checked) {
         splitContainer.Panel2Collapsed = false;
@@ -295,5 +308,5 @@
 
     #region Content Events
-    protected virtual void Content_ItemsAdded(object sender, CollectionItemsChangedEventArgs<IRun> e) {
+    private void Content_ItemsAdded(object sender, CollectionItemsChangedEventArgs<IRun> e) {
       if (InvokeRequired)
         Invoke(new CollectionItemsChangedEventHandler<IRun>(Content_ItemsAdded), sender, e);
@@ -309,5 +322,5 @@
       }
     }
-    protected virtual void Content_ItemsRemoved(object sender, CollectionItemsChangedEventArgs<IRun> e) {
+    private void Content_ItemsRemoved(object sender, CollectionItemsChangedEventArgs<IRun> e) {
       if (InvokeRequired)
         Invoke(new CollectionItemsChangedEventHandler<IRun>(Content_ItemsRemoved), sender, e);
@@ -316,7 +329,6 @@
         foreach (IRun item in e.Items) {
           //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);
+          ListViewItem listViewItem = GetListViewItemsForItem(item).FirstOrDefault();
+          if (listViewItem != null) RemoveListViewItem(listViewItem);
         }
         analyzeRunsToolStripDropDownButton.Enabled = itemsListView.Items.Count > 0;
@@ -325,5 +337,5 @@
       }
     }
-    protected virtual void Content_CollectionReset(object sender, CollectionItemsChangedEventArgs<IRun> e) {
+    private void Content_CollectionReset(object sender, CollectionItemsChangedEventArgs<IRun> e) {
       if (InvokeRequired)
         Invoke(new CollectionItemsChangedEventHandler<IRun>(Content_CollectionReset), sender, e);
@@ -331,8 +343,6 @@
         DeregisterRunEvents(e.OldItems);
         foreach (IRun item in e.OldItems) {
-          //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);
+          ListViewItem listViewItem = GetListViewItemsForItem(item).FirstOrDefault();
+          if (listViewItem != null) RemoveListViewItem(listViewItem);
         }
         RegisterRunEvents(e.Items);
@@ -349,5 +359,5 @@
 
     #region Item Events
-    protected virtual void Item_ItemImageChanged(object sender, EventArgs e) {
+    private void Item_ItemImageChanged(object sender, EventArgs e) {
       if (InvokeRequired)
         Invoke(new EventHandler(Item_ItemImageChanged), sender, e);
@@ -358,5 +368,5 @@
       }
     }
-    protected virtual void Item_ToStringChanged(object sender, EventArgs e) {
+    private void Item_ToStringChanged(object sender, EventArgs e) {
       if (InvokeRequired)
         Invoke(new EventHandler(Item_ToStringChanged), sender, e);
@@ -368,5 +378,5 @@
       }
     }
-    protected virtual void Run_Changed(object sender, EventArgs e) {
+    private void Run_Changed(object sender, EventArgs e) {
       if (InvokeRequired)
         this.Invoke(new EventHandler(Run_Changed), sender, e);
@@ -377,5 +387,5 @@
     }
 
-    protected virtual void UpdateRun(IRun run) {
+    private void UpdateRun(IRun run) {
       foreach (ListViewItem listViewItem in GetListViewItemsForItem(run)) {
         if (run.Visible) {
@@ -391,5 +401,5 @@
 
     #region Helpers
-    protected virtual void AdjustListViewColumnSizes() {
+    private void AdjustListViewColumnSizes() {
       if (itemsListView.Items.Count > 0) {
         for (int i = 0; i < itemsListView.Columns.Count; i++) {
Index: trunk/sources/HeuristicLab.Optimization/3.3/RunCollection.cs
===================================================================
--- trunk/sources/HeuristicLab.Optimization/3.3/RunCollection.cs	(revision 4873)
+++ trunk/sources/HeuristicLab.Optimization/3.3/RunCollection.cs	(revision 4883)
@@ -285,10 +285,20 @@
     #endregion
 
+    #region
+    public event EventHandler<EventArgs<bool>> UpdateOfRunsInProgress;
+    public void OnUpdateOfRunsInProgress(bool inProgress) {
+      var handler = UpdateOfRunsInProgress;
+      if (handler != null) handler(this, new EventArgs<bool>(inProgress));
+    }
+    #endregion
+
     #region filtering
     private void UpdateFiltering(bool reset) {
+      OnUpdateOfRunsInProgress(true);
       if (reset)
         list.ForEach(r => r.Visible = true);
       foreach (IRunCollectionConstraint constraint in this.constraints)
         constraint.Check();
+      OnUpdateOfRunsInProgress(false);
     }
 
