Index: /trunk/sources/HeuristicLab.Analysis.Views/3.3/DataTableView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Analysis.Views/3.3/DataTableView.cs	(revision 3560)
+++ /trunk/sources/HeuristicLab.Analysis.Views/3.3/DataTableView.cs	(revision 3561)
@@ -222,13 +222,16 @@
         Invoke(new CollectionItemsChangedEventHandler<IndexedItem<double>>(Values_ItemsAdded), sender, e);
       else {
-        DataRow row = valuesRowsTable[(IObservableList<double>)sender];
-        foreach (IndexedItem<double> item in e.Items) {
-          var value = item.Value;
-          if (IsInvalidValue(item.Value)) {
-            DataPoint point = new DataPoint();
-            point.IsEmpty = true;
-            chart.Series[row.Name].Points.Insert(item.Index, point);
-          } else {
-            chart.Series[row.Name].Points.InsertY(item.Index, value);
+        DataRow row = null;
+        valuesRowsTable.TryGetValue((IObservableList<double>)sender, out row);
+        if (row != null) {
+          foreach (IndexedItem<double> item in e.Items) {
+            var value = item.Value;
+            if (IsInvalidValue(item.Value)) {
+              DataPoint point = new DataPoint();
+              point.IsEmpty = true;
+              chart.Series[row.Name].Points.Insert(item.Index, point);
+            } else {
+              chart.Series[row.Name].Points.InsertY(item.Index, value);
+            }
           }
         }
@@ -239,10 +242,13 @@
         Invoke(new CollectionItemsChangedEventHandler<IndexedItem<double>>(Values_ItemsRemoved), sender, e);
       else {
-        DataRow row = valuesRowsTable[(IObservableList<double>)sender];
-        List<DataPoint> points = new List<DataPoint>();
-        foreach (IndexedItem<double> item in e.Items)
-          points.Add(chart.Series[row.Name].Points[item.Index]);
-        foreach (DataPoint point in points)
-          chart.Series[row.Name].Points.Remove(point);
+        DataRow row = null;
+        valuesRowsTable.TryGetValue((IObservableList<double>)sender, out row);
+        if (row != null) {
+          List<DataPoint> points = new List<DataPoint>();
+          foreach (IndexedItem<double> item in e.Items)
+            points.Add(chart.Series[row.Name].Points[item.Index]);
+          foreach (DataPoint point in points)
+            chart.Series[row.Name].Points.Remove(point);
+        }
       }
     }
@@ -251,11 +257,14 @@
         Invoke(new CollectionItemsChangedEventHandler<IndexedItem<double>>(Values_ItemsReplaced), sender, e);
       else {
-        DataRow row = valuesRowsTable[(IObservableList<double>)sender];
-        foreach (IndexedItem<double> item in e.Items) {
-          if (IsInvalidValue(item.Value))
-            chart.Series[row.Name].Points[item.Index].IsEmpty = true;
-          else {
-            chart.Series[row.Name].Points[item.Index].YValues = new double[] { item.Value };
-            chart.Series[row.Name].Points[item.Index].IsEmpty = false;
+        DataRow row = null;
+        valuesRowsTable.TryGetValue((IObservableList<double>)sender, out row);
+        if (row != null) {
+          foreach (IndexedItem<double> item in e.Items) {
+            if (IsInvalidValue(item.Value))
+              chart.Series[row.Name].Points[item.Index].IsEmpty = true;
+            else {
+              chart.Series[row.Name].Points[item.Index].YValues = new double[] { item.Value };
+              chart.Series[row.Name].Points[item.Index].IsEmpty = false;
+            }
           }
         }
@@ -266,11 +275,14 @@
         Invoke(new CollectionItemsChangedEventHandler<IndexedItem<double>>(Values_ItemsMoved), sender, e);
       else {
-        DataRow row = valuesRowsTable[(IObservableList<double>)sender];
-        foreach (IndexedItem<double> item in e.Items) {
-          if (IsInvalidValue(item.Value))
-            chart.Series[row.Name].Points[item.Index].IsEmpty = true;
-          else {
-            chart.Series[row.Name].Points[item.Index].YValues = new double[] { item.Value };
-            chart.Series[row.Name].Points[item.Index].IsEmpty = false;
+        DataRow row = null;
+        valuesRowsTable.TryGetValue((IObservableList<double>)sender, out row);
+        if (row != null) {
+          foreach (IndexedItem<double> item in e.Items) {
+            if (IsInvalidValue(item.Value))
+              chart.Series[row.Name].Points[item.Index].IsEmpty = true;
+            else {
+              chart.Series[row.Name].Points[item.Index].YValues = new double[] { item.Value };
+              chart.Series[row.Name].Points[item.Index].IsEmpty = false;
+            }
           }
         }
@@ -282,12 +294,15 @@
         Invoke(new CollectionItemsChangedEventHandler<IndexedItem<double>>(Values_CollectionReset), sender, e);
       else {
-        DataRow row = valuesRowsTable[(IObservableList<double>)sender];
-        chart.Series[row.Name].Points.Clear();
-        foreach (IndexedItem<double> item in e.Items) {
-          if (IsInvalidValue(item.Value))
-            chart.Series[row.Name].Points[item.Index].IsEmpty = true;
-          else {
-            chart.Series[row.Name].Points[item.Index].YValues = new double[] { item.Value };
-            chart.Series[row.Name].Points[item.Index].IsEmpty = false;
+        DataRow row = null;
+        valuesRowsTable.TryGetValue((IObservableList<double>)sender, out row);
+        if (row != null) {
+          chart.Series[row.Name].Points.Clear();
+          foreach (IndexedItem<double> item in e.Items) {
+            if (IsInvalidValue(item.Value))
+              chart.Series[row.Name].Points[item.Index].IsEmpty = true;
+            else {
+              chart.Series[row.Name].Points[item.Index].YValues = new double[] { item.Value };
+              chart.Series[row.Name].Points[item.Index].IsEmpty = false;
+            }
           }
         }
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/NamedItemCollectionView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/NamedItemCollectionView.cs	(revision 3560)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/NamedItemCollectionView.cs	(revision 3561)
@@ -79,5 +79,8 @@
     }
     protected override IEnumerable<ListViewItem> GetListViewItemsForItem(T item) {
-      return new ListViewItem[] { listViewItemDictionary[item] };
+      ListViewItem listViewItem = null;
+      listViewItemDictionary.TryGetValue(item, out listViewItem);
+      if (listViewItem != null) return new ListViewItem[] { listViewItem };
+      else return new ListViewItem[0];
     }
 
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/ScopeView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/ScopeView.cs	(revision 3560)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/ScopeView.cs	(revision 3561)
@@ -186,5 +186,7 @@
       else {
         IScope scope = (IScope)sender;
-        scopeNodeTable[scope].Text = scope.Name;
+        TreeNode node = null;
+        scopeNodeTable.TryGetValue(scope, out node);
+        if (node != null) node.Text = scope.Name;
       }
     }
@@ -193,16 +195,22 @@
         Invoke(new CollectionItemsChangedEventHandler<IndexedItem<IScope>>(SubScopes_ItemsAdded), sender, e);
       else {
-        IScope parentScope = subScopesScopeTable[(ScopeList)sender];
-        TreeNode parentNode = scopeNodeTable[parentScope];
-        scopesTreeView.BeginUpdate();
-        if (parentNode.IsExpanded) {
-          foreach (IndexedItem<IScope> item in e.Items) {
-            TreeNode node = CreateTreeNode(item.Value);
-            parentNode.Nodes.Insert(item.Index, node);
-          }
-        } else if (parentNode.Nodes.Count == 0) {
-          parentNode.Nodes.Add(new TreeNode());
-        }
-        scopesTreeView.EndUpdate();
+        IScope parentScope = null;
+        subScopesScopeTable.TryGetValue((ScopeList)sender, out parentScope);
+        if (parentScope != null) {
+          TreeNode parentNode = null;
+          scopeNodeTable.TryGetValue(parentScope, out parentNode);
+          if (parentNode != null) {
+            scopesTreeView.BeginUpdate();
+            if (parentNode.IsExpanded) {
+              foreach (IndexedItem<IScope> item in e.Items) {
+                TreeNode node = CreateTreeNode(item.Value);
+                parentNode.Nodes.Insert(item.Index, node);
+              }
+            } else if (parentNode.Nodes.Count == 0) {
+              parentNode.Nodes.Add(new TreeNode());
+            }
+            scopesTreeView.EndUpdate();
+          }
+        }
       }
     }
@@ -211,17 +219,23 @@
         Invoke(new CollectionItemsChangedEventHandler<IndexedItem<IScope>>(SubScopes_ItemsRemoved), sender, e);
       else {
-        IScope parentScope = subScopesScopeTable[(ScopeList)sender];
-        TreeNode parentNode = scopeNodeTable[parentScope];
-        scopesTreeView.BeginUpdate();
-        if (parentNode.IsExpanded) {
-          foreach (IndexedItem<IScope> item in e.Items) {
-            TreeNode node = scopeNodeTable[item.Value];
-            ClearTreeNode(node);
-            node.Remove();
-          }
-        } else if (parentScope.SubScopes.Count == 0) {
-          parentNode.Nodes.Clear();
-        }
-        scopesTreeView.EndUpdate();
+        IScope parentScope = null;
+        subScopesScopeTable.TryGetValue((ScopeList)sender, out parentScope);
+        if (parentScope != null) {
+          TreeNode parentNode = null;
+          scopeNodeTable.TryGetValue(parentScope, out parentNode);
+          if (parentNode != null) {
+            scopesTreeView.BeginUpdate();
+            if (parentNode.IsExpanded) {
+              foreach (IndexedItem<IScope> item in e.Items) {
+                TreeNode node = scopeNodeTable[item.Value];
+                ClearTreeNode(node);
+                node.Remove();
+              }
+            } else if (parentScope.SubScopes.Count == 0) {
+              parentNode.Nodes.Clear();
+            }
+            scopesTreeView.EndUpdate();
+          }
+        }
       }
     }
@@ -230,16 +244,22 @@
         Invoke(new CollectionItemsChangedEventHandler<IndexedItem<IScope>>(SubScopes_ItemsReplaced), sender, e);
       else {
-        IScope parentScope = subScopesScopeTable[(ScopeList)sender];
-        TreeNode parentNode = scopeNodeTable[parentScope];
-        scopesTreeView.BeginUpdate();
-        if (parentNode.IsExpanded) {
-          foreach (IndexedItem<IScope> item in e.Items) {
-            TreeNode node = parentNode.Nodes[item.Index];
-            ClearTreeNode(node);
-            node.Remove();
-            node = CreateTreeNode(item.Value);
-            parentNode.Nodes.Insert(item.Index, node);
-          }
-          scopesTreeView.EndUpdate();
+        IScope parentScope = null;
+        subScopesScopeTable.TryGetValue((ScopeList)sender, out parentScope);
+        if (parentScope != null) {
+          TreeNode parentNode = null;
+          scopeNodeTable.TryGetValue(parentScope, out parentNode);
+          if (parentNode != null) {
+            scopesTreeView.BeginUpdate();
+            if (parentNode.IsExpanded) {
+              foreach (IndexedItem<IScope> item in e.Items) {
+                TreeNode node = parentNode.Nodes[item.Index];
+                ClearTreeNode(node);
+                node.Remove();
+                node = CreateTreeNode(item.Value);
+                parentNode.Nodes.Insert(item.Index, node);
+              }
+              scopesTreeView.EndUpdate();
+            }
+          }
         }
       }
@@ -249,13 +269,19 @@
         Invoke(new CollectionItemsChangedEventHandler<IndexedItem<IScope>>(SubScopes_ItemsMoved), sender, e);
       else {
-        IScope parentScope = subScopesScopeTable[(ScopeList)sender];
-        TreeNode parentNode = scopeNodeTable[parentScope];
-        scopesTreeView.BeginUpdate();
-        if (parentNode.IsExpanded) {
-          parentNode.Nodes.Clear();
-          foreach (IndexedItem<IScope> item in e.Items)
-            parentNode.Nodes.Insert(item.Index, scopeNodeTable[item.Value]);
-        }
-        scopesTreeView.EndUpdate();
+        IScope parentScope = null;
+        subScopesScopeTable.TryGetValue((ScopeList)sender, out parentScope);
+        if (parentScope != null) {
+          TreeNode parentNode = null;
+          scopeNodeTable.TryGetValue(parentScope, out parentNode);
+          if (parentNode != null) {
+            scopesTreeView.BeginUpdate();
+            if (parentNode.IsExpanded) {
+              parentNode.Nodes.Clear();
+              foreach (IndexedItem<IScope> item in e.Items)
+                parentNode.Nodes.Insert(item.Index, scopeNodeTable[item.Value]);
+            }
+            scopesTreeView.EndUpdate();
+          }
+        }
       }
     }
@@ -264,21 +290,27 @@
         Invoke(new CollectionItemsChangedEventHandler<IndexedItem<IScope>>(SubScopes_CollectionReset), sender, e);
       else {
-        IScope parentScope = subScopesScopeTable[(ScopeList)sender];
-        TreeNode parentNode = scopeNodeTable[parentScope];
-        scopesTreeView.BeginUpdate();
-        if (parentNode.IsExpanded) {
-          foreach (TreeNode node in parentNode.Nodes)
-            ClearTreeNode(node);
-          parentNode.Nodes.Clear();
-          foreach (IndexedItem<IScope> item in e.Items) {
-            TreeNode node = CreateTreeNode(item.Value);
-            parentNode.Nodes.Insert(item.Index, node);
-          }
-        } else {
-          parentNode.Nodes.Clear();
-          if (parentScope.SubScopes.Count > 0)
-            parentNode.Nodes.Add(new TreeNode());
-        }
-        scopesTreeView.EndUpdate();
+        IScope parentScope = null;
+        subScopesScopeTable.TryGetValue((ScopeList)sender, out parentScope);
+        if (parentScope != null) {
+          TreeNode parentNode = null;
+          scopeNodeTable.TryGetValue(parentScope, out parentNode);
+          if (parentNode != null) {
+            scopesTreeView.BeginUpdate();
+            if (parentNode.IsExpanded) {
+              foreach (TreeNode node in parentNode.Nodes)
+                ClearTreeNode(node);
+              parentNode.Nodes.Clear();
+              foreach (IndexedItem<IScope> item in e.Items) {
+                TreeNode node = CreateTreeNode(item.Value);
+                parentNode.Nodes.Insert(item.Index, node);
+              }
+            } else {
+              parentNode.Nodes.Clear();
+              if (parentScope.SubScopes.Count > 0)
+                parentNode.Nodes.Add(new TreeNode());
+            }
+            scopesTreeView.EndUpdate();
+          }
+        }
       }
     }
