Index: /trunk/sources/HeuristicLab.Core.Views/3.3/ScopeView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/ScopeView.Designer.cs	(revision 3527)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/ScopeView.Designer.cs	(revision 3528)
@@ -34,5 +34,5 @@
       if (disposing) {
         if (scopesTreeView.Nodes.Count > 0) {
-          RemoveTreeNode(scopesTreeView.Nodes[0]);
+          ClearTreeNode(scopesTreeView.Nodes[0]);
         }
         if (components != null) components.Dispose();
@@ -71,4 +71,5 @@
       this.scopesTreeView.AfterCollapse += new System.Windows.Forms.TreeViewEventHandler(this.scopesTreeView_AfterCollapse);
       this.scopesTreeView.BeforeExpand += new System.Windows.Forms.TreeViewCancelEventHandler(this.scopesTreeView_BeforeExpand);
+      this.scopesTreeView.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.scopesTreeView_AfterSelect);
       this.scopesTreeView.MouseDown += new System.Windows.Forms.MouseEventHandler(this.scopesTreeView_MouseDown);
       this.scopesTreeView.ItemDrag += new System.Windows.Forms.ItemDragEventHandler(this.scopesTreeView_ItemDrag);
@@ -111,6 +112,8 @@
                   | System.Windows.Forms.AnchorStyles.Right)));
       this.variableCollectionView.Caption = "VariableCollection";
+      this.variableCollectionView.Content = null;
       this.variableCollectionView.Location = new System.Drawing.Point(3, 3);
       this.variableCollectionView.Name = "variableCollectionView";
+      this.variableCollectionView.ReadOnly = false;
       this.variableCollectionView.Size = new System.Drawing.Size(394, 190);
       this.variableCollectionView.TabIndex = 0;
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/ScopeView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/ScopeView.cs	(revision 3527)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/ScopeView.cs	(revision 3528)
@@ -74,12 +74,11 @@
     protected override void OnContentChanged() {
       base.OnContentChanged();
-      if (scopesTreeView.Nodes.Count > 0) {
-        RemoveTreeNode(scopesTreeView.Nodes[0]);
-        scopesTreeView.Nodes.Clear();
-      }
+      if (scopesTreeView.Nodes.Count > 0)
+        ClearTreeNode(scopesTreeView.Nodes[0]);
+      scopesTreeView.Nodes.Clear();
       variableCollectionView.Content = null;
       Caption = "Scope";
       if (Content != null) {
-        Caption = Content.Name + " (" + Content.GetType().Name + ")";
+        Caption = Content.Name + " (" + Content.ItemName + ")";
         scopesTreeView.Nodes.Add(CreateTreeNode(Content));
       }
@@ -97,4 +96,5 @@
     }
 
+    #region TreeNode Management
     private TreeNode CreateTreeNode(IScope scope) {
       TreeNode node = new TreeNode();
@@ -104,4 +104,5 @@
       scopeNodeTable.Add(scope, node);
       scope.NameChanged += new EventHandler(Scope_NameChanged);
+      subScopesScopeTable.Add(scope.SubScopes, scope);
       scope.SubScopes.ItemsAdded += new CollectionItemsChangedEventHandler<IndexedItem<IScope>>(SubScopes_ItemsAdded);
       scope.SubScopes.ItemsRemoved += new CollectionItemsChangedEventHandler<IndexedItem<IScope>>(SubScopes_ItemsRemoved);
@@ -109,5 +110,4 @@
       scope.SubScopes.ItemsMoved += new CollectionItemsChangedEventHandler<IndexedItem<IScope>>(SubScopes_ItemsMoved);
       scope.SubScopes.CollectionReset += new CollectionItemsChangedEventHandler<IndexedItem<IScope>>(SubScopes_CollectionReset);
-      subScopesScopeTable.Add(scope.SubScopes, scope);
       if (scope.SubScopes.Count > 0)
         node.Nodes.Add(new TreeNode());
@@ -115,12 +115,17 @@
     }
 
-    private void RemoveTreeNode(TreeNode node) {
+    private void ClearTreeNode(TreeNode node) {
+      if (scopesTreeView.SelectedNode == node) {
+        scopesTreeView.SelectedNode = null;
+        UpdateVariables();
+      }
+
       foreach (TreeNode child in node.Nodes)
-        RemoveTreeNode(child);
+        ClearTreeNode(child);
 
       IScope scope = node.Tag as IScope;
       if (scope != null) {
+        scope.NameChanged -= new EventHandler(Scope_NameChanged);
         scopeNodeTable.Remove(scope);
-        scope.NameChanged -= new EventHandler(Scope_NameChanged);
         scope.SubScopes.ItemsAdded -= new CollectionItemsChangedEventHandler<IndexedItem<IScope>>(SubScopes_ItemsAdded);
         scope.SubScopes.ItemsRemoved -= new CollectionItemsChangedEventHandler<IndexedItem<IScope>>(SubScopes_ItemsRemoved);
@@ -131,16 +136,14 @@
       }
     }
+    #endregion
 
     #region TreeView Events
+    private void scopesTreeView_AfterSelect(object sender, TreeViewEventArgs e) {
+      UpdateVariables();
+    }
     private void scopesTreeView_MouseDown(object sender, MouseEventArgs e) {
       TreeNode node = scopesTreeView.GetNodeAt(e.X, e.Y);
-      if ((node != null) && (node.Tag is IScope)) {
-        variableCollectionView.Content = ((IScope)node.Tag).Variables;
-        variableCollectionView.Enabled = true;
-      } else {
-        variableCollectionView.Content = null;
-        variableCollectionView.Enabled = false;
-        if (node == null) scopesTreeView.SelectedNode = null;
-      }
+      scopesTreeView.SelectedNode = node;
+      UpdateVariables();
     }
     private void scopesTreeView_BeforeExpand(object sender, TreeViewCancelEventArgs e) {
@@ -158,5 +161,5 @@
       if (node.Nodes.Count > 0) {
         for (int i = 0; i < node.Nodes.Count; i++)
-          RemoveTreeNode(node.Nodes[i]);
+          ClearTreeNode(node.Nodes[i]);
         node.Nodes.Clear();
         node.Nodes.Add(new TreeNode());
@@ -177,5 +180,5 @@
     #endregion
 
-    #region Scope Events
+    #region Content Events
     private void Scope_NameChanged(object sender, EventArgs e) {
       if (InvokeRequired)
@@ -186,7 +189,4 @@
       }
     }
-    #endregion
-
-    #region SubScopes Events
     private void SubScopes_ItemsAdded(object sender, CollectionItemsChangedEventArgs<IndexedItem<IScope>> e) {
       if (InvokeRequired)
@@ -195,4 +195,5 @@
         IScope parentScope = subScopesScopeTable[(ScopeList)sender];
         TreeNode parentNode = scopeNodeTable[parentScope];
+        scopesTreeView.BeginUpdate();
         if (parentNode.IsExpanded) {
           foreach (IndexedItem<IScope> item in e.Items) {
@@ -203,4 +204,5 @@
           parentNode.Nodes.Add(new TreeNode());
         }
+        scopesTreeView.EndUpdate();
       }
     }
@@ -211,8 +213,9 @@
         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];
-            RemoveTreeNode(node);
+            ClearTreeNode(node);
             node.Remove();
           }
@@ -220,4 +223,5 @@
           parentNode.Nodes.Clear();
         }
+        scopesTreeView.EndUpdate();
       }
     }
@@ -228,12 +232,14 @@
         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];
-            RemoveTreeNode(node);
+            ClearTreeNode(node);
             node.Remove();
             node = CreateTreeNode(item.Value);
             parentNode.Nodes.Insert(item.Index, node);
           }
+          scopesTreeView.EndUpdate();
         }
       }
@@ -245,4 +251,5 @@
         IScope parentScope = subScopesScopeTable[(ScopeList)sender];
         TreeNode parentNode = scopeNodeTable[parentScope];
+        scopesTreeView.BeginUpdate();
         if (parentNode.IsExpanded) {
           parentNode.Nodes.Clear();
@@ -250,4 +257,5 @@
             parentNode.Nodes.Insert(item.Index, scopeNodeTable[item.Value]);
         }
+        scopesTreeView.EndUpdate();
       }
     }
@@ -258,7 +266,8 @@
         IScope parentScope = subScopesScopeTable[(ScopeList)sender];
         TreeNode parentNode = scopeNodeTable[parentScope];
+        scopesTreeView.BeginUpdate();
         if (parentNode.IsExpanded) {
           foreach (TreeNode node in parentNode.Nodes)
-            RemoveTreeNode(node);
+            ClearTreeNode(node);
           parentNode.Nodes.Clear();
           foreach (IndexedItem<IScope> item in e.Items) {
@@ -271,4 +280,17 @@
             parentNode.Nodes.Add(new TreeNode());
         }
+        scopesTreeView.EndUpdate();
+      }
+    }
+    #endregion
+
+    #region Helpers
+    private void UpdateVariables() {
+      if (scopesTreeView.SelectedNode == null) {
+        variableCollectionView.Content = null;
+        variableCollectionView.Enabled = false;
+      } else {
+        variableCollectionView.Enabled = true;
+        variableCollectionView.Content = ((IScope)scopesTreeView.SelectedNode.Tag).Variables;
       }
     }
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/TypeSelector.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/TypeSelector.cs	(revision 3527)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/TypeSelector.cs	(revision 3528)
@@ -91,5 +91,4 @@
         imageList.Images.Add(HeuristicLab.Common.Resources.VS2008ImageLibrary.Namespace);  // plugins
         imageList.Images.Add(HeuristicLab.Common.Resources.VS2008ImageLibrary.Interface);  // interfaces
-        imageList.Images.Add(HeuristicLab.Common.Resources.VS2008ImageLibrary.OrgChart);   // abstract types
         imageList.Images.Add(HeuristicLab.Common.Resources.VS2008ImageLibrary.Template);   // generic types
 
@@ -119,6 +118,5 @@
               typeNode.ImageIndex = 0;
               if (type.IsInterface) typeNode.ImageIndex = 2;
-              else if (type.IsAbstract) typeNode.ImageIndex = 3;
-              else if (type.ContainsGenericParameters) typeNode.ImageIndex = 4;
+              else if (type.ContainsGenericParameters) typeNode.ImageIndex = 3;
               else if (imageList.Images.ContainsKey(type.FullName)) typeNode.ImageIndex = imageList.Images.IndexOfKey(type.FullName);
               else if (typeof(IItem).IsAssignableFrom(type)) {
Index: /trunk/sources/HeuristicLab.Core/3.3/Scope.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.3/Scope.cs	(revision 3527)
+++ /trunk/sources/HeuristicLab.Core/3.3/Scope.cs	(revision 3528)
@@ -20,4 +20,5 @@
 #endregion
 
+using System.Drawing;
 using HeuristicLab.Collections;
 using HeuristicLab.Common;
@@ -31,4 +32,8 @@
   [StorableClass]
   public sealed class Scope : NamedItem, IScope {
+    public override Image ItemImage {
+      get { return HeuristicLab.Common.Resources.VS2008ImageLibrary.OrgChart; }
+    }
+
     [Storable]
     private IScope parent;
Index: /trunk/sources/HeuristicLab.Optimization/3.3/UserDefinedAlgorithm.cs
===================================================================
--- /trunk/sources/HeuristicLab.Optimization/3.3/UserDefinedAlgorithm.cs	(revision 3527)
+++ /trunk/sources/HeuristicLab.Optimization/3.3/UserDefinedAlgorithm.cs	(revision 3528)
@@ -30,5 +30,5 @@
   /// An algorithm which can be defined by the user.
   /// </summary>
-  [Item("UserDefinedAlgorithm", "An algorithm which can be defined by the user.")]
+  [Item("User-Defined Algorithm", "An algorithm which can be defined by the user.")]
   [Creatable("Algorithms")]
   [StorableClass]
Index: /trunk/sources/HeuristicLab.Problems.ArtificialAnt/3.3/ArtificialAntProblem.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.ArtificialAnt/3.3/ArtificialAntProblem.cs	(revision 3527)
+++ /trunk/sources/HeuristicLab.Problems.ArtificialAnt/3.3/ArtificialAntProblem.cs	(revision 3528)
@@ -38,5 +38,5 @@
 
 namespace HeuristicLab.Problems.ArtificialAnt {
-  [Item("ArtificialAntProblem", "Represents the Artificial Ant problem.")]
+  [Item("Artificial Ant Problem", "Represents the Artificial Ant problem.")]
   [Creatable("Problems")]
   [StorableClass]
Index: /trunk/sources/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/SymbolicRegressionProblem.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/SymbolicRegressionProblem.cs	(revision 3527)
+++ /trunk/sources/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/SymbolicRegressionProblem.cs	(revision 3528)
@@ -40,5 +40,5 @@
 
 namespace HeuristicLab.Problems.DataAnalysis.Regression.Symbolic {
-  [Item("SymbolicRegressionProblem", "Represents a symbolic regression problem.")]
+  [Item("Symbolic Regression Problem", "Represents a symbolic regression problem.")]
   [Creatable("Problems")]
   [StorableClass]
Index: /trunk/sources/HeuristicLab.Problems.DataAnalysis/3.3/DataAnalysisProblem.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.DataAnalysis/3.3/DataAnalysisProblem.cs	(revision 3527)
+++ /trunk/sources/HeuristicLab.Problems.DataAnalysis/3.3/DataAnalysisProblem.cs	(revision 3528)
@@ -33,5 +33,5 @@
 
 namespace HeuristicLab.Problems.DataAnalysis {
-  [Item("DataAnalysisProblem", "Represents a data analysis problem.")]
+  [Item("Data Analysis Problem", "Represents a data analysis problem.")]
   [Creatable("Problems")]
   [StorableClass]
Index: /trunk/sources/HeuristicLab.Problems.Knapsack/3.3/KnapsackProblem.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.Knapsack/3.3/KnapsackProblem.cs	(revision 3527)
+++ /trunk/sources/HeuristicLab.Problems.Knapsack/3.3/KnapsackProblem.cs	(revision 3528)
@@ -35,5 +35,5 @@
 
 namespace HeuristicLab.Problems.Knapsack {
-  [Item("KnapsackProblem", "Represents a Knapsack Problem.")]
+  [Item("Knapsack Problem", "Represents a Knapsack Problem.")]
   [Creatable("Problems")]
   [StorableClass]
Index: /trunk/sources/HeuristicLab.Problems.OneMax/3.3/OnemaxProblem.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.OneMax/3.3/OnemaxProblem.cs	(revision 3527)
+++ /trunk/sources/HeuristicLab.Problems.OneMax/3.3/OnemaxProblem.cs	(revision 3528)
@@ -34,5 +34,5 @@
 
 namespace HeuristicLab.Problems.OneMax {
-  [Item("OneMaxProblem", "Represents a OneMax Problem.")]
+  [Item("OneMax Problem", "Represents a OneMax Problem.")]
   [Creatable("Problems")]
   [StorableClass]
