Index: /branches/HeuristicLab.DebugEngine/DebugEngine.cs
===================================================================
--- /branches/HeuristicLab.DebugEngine/DebugEngine.cs	(revision 4992)
+++ /branches/HeuristicLab.DebugEngine/DebugEngine.cs	(revision 4993)
@@ -60,5 +60,5 @@
       Log = new Log();
       ExecutionStack = new ExecutionStack();
-      OperatorTrace = new ItemList<IOperator>();
+      OperatorTrace = new OperatorTrace();
       operatorParents = new Dictionary<IAtomicOperation, IAtomicOperation>();
       pausePending = stopPending = false;
@@ -85,4 +85,7 @@
     [Storable]
     public ExecutionStack ExecutionStack { get; protected set; }
+
+    [Storable]
+    public OperatorTrace OperatorTrace { get; private set; }
 
     private bool pausePending, stopPending;
@@ -113,6 +116,4 @@
     }
 
-    [Storable]
-    public ItemList<IOperator> OperatorTrace { get; private set; }
 
     [Storable]
@@ -293,6 +294,5 @@
         }
         trace.Reverse();
-        OperatorTrace.Clear();
-        OperatorTrace.AddRange(trace);
+        OperatorTrace.ReplaceAll(trace);
       }
     }
Index: /branches/HeuristicLab.DebugEngine/DebugEngineView.cs
===================================================================
--- /branches/HeuristicLab.DebugEngine/DebugEngineView.cs	(revision 4992)
+++ /branches/HeuristicLab.DebugEngine/DebugEngineView.cs	(revision 4993)
@@ -57,5 +57,4 @@
     /// <remarks>Calls <see cref="ViewBase.RemoveItemEvents"/> of base class <see cref="ViewBase"/>.</remarks>
     protected override void DeregisterContentEvents() {
-      Content.CurrentOperationChanged -= new EventHandler<OperationChangedEventArgs>(Content_CurrentOperationChanged);
       Content.ExecutionStateChanged -= new EventHandler(Content_ExecutionStateChanged);
       base.DeregisterContentEvents();
@@ -69,5 +68,4 @@
       base.RegisterContentEvents();
       Content.ExecutionStateChanged += new EventHandler(Content_ExecutionStateChanged);
-      Content.CurrentOperationChanged += new EventHandler<OperationChangedEventArgs>(Content_CurrentOperationChanged);
     }
 
@@ -106,29 +104,27 @@
         Invoke(new EventHandler(Content_ExecutionStateChanged), sender, e);
       } else {
+        SetEnabledStateOfControls();
         switch (Content.ExecutionState) {
           case ExecutionState.Started:
-            executionStackView.SuspendUpdate();
-            operatorTraceView.SuspendUpdate();
+            if (!stepping) {
+              executionStackView.Content = null;
+              operatorTraceView.Content = null;
+              operationContentView.Content = null;
+            }
             break;
           default:
-            executionStackView.ResumeUpdate();
+            executionStackView.Content = Content.ExecutionStack;
+            operatorTraceView.Content = Content.OperatorTrace;
             operationContentView.Content = new OperationContent(Content.CurrentOperation);
-            operatorTraceView.ResumeUpdate();
             break;
         }
-        SetEnabledStateOfControls();
       }
     }
 
-    void Content_CurrentOperationChanged(object sender, OperationChangedEventArgs e) {
-      if (InvokeRequired) {
-        Invoke(new EventHandler<OperationChangedEventArgs>(Content_CurrentOperationChanged), sender, e);
-      } else {
-
-      }
-    }
-
+    private bool stepping = false;
     private void stepButton_Click(object sender, EventArgs e) {
+      stepping = true;
       Content.Step(skipStackOpsCheckBox.Checked);
+      stepping = false;
     }
 
Index: /branches/HeuristicLab.DebugEngine/ExecutionStack.cs
===================================================================
--- /branches/HeuristicLab.DebugEngine/ExecutionStack.cs	(revision 4992)
+++ /branches/HeuristicLab.DebugEngine/ExecutionStack.cs	(revision 4993)
@@ -1,6 +1,4 @@
-﻿using System;
-using System.Collections.Generic;
+﻿using System.Collections.Generic;
 using System.Linq;
-using System.Text;
 using HeuristicLab.Collections;
 using HeuristicLab.Common;
@@ -10,4 +8,5 @@
 namespace HeuristicLab.DebugEngine {
 
+  [StorableClass]
   public class ExecutionStack : ObservableList<IOperation>, IContent, IDeepCloneable {
 
Index: /branches/HeuristicLab.DebugEngine/HeuristicLab.DebugEngine.csproj
===================================================================
--- /branches/HeuristicLab.DebugEngine/HeuristicLab.DebugEngine.csproj	(revision 4992)
+++ /branches/HeuristicLab.DebugEngine/HeuristicLab.DebugEngine.csproj	(revision 4993)
@@ -121,4 +121,5 @@
   </ItemGroup>
   <ItemGroup>
+    <Compile Include="OperatorTrace.cs" />
     <Compile Include="DebugEngine.cs" />
     <Compile Include="DebugEngineView.cs">
Index: /branches/HeuristicLab.DebugEngine/OperationContentView.Designer.cs
===================================================================
--- /branches/HeuristicLab.DebugEngine/OperationContentView.Designer.cs	(revision 4992)
+++ /branches/HeuristicLab.DebugEngine/OperationContentView.Designer.cs	(revision 4993)
@@ -30,17 +30,16 @@
       this.executionContextGroupBox = new System.Windows.Forms.GroupBox();
       this.executionContextTreeView = new System.Windows.Forms.TreeView();
+      this.executionContextImageList = new System.Windows.Forms.ImageList(this.components);
       this.parametersGroupBox = new System.Windows.Forms.GroupBox();
       this.parameterListView = new System.Windows.Forms.ListView();
+      this.parameterColumn = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+      this.parametersImageList = new System.Windows.Forms.ImageList(this.components);
       this.scopeGroupBox = new System.Windows.Forms.GroupBox();
       this.scopeTreeView = new System.Windows.Forms.TreeView();
+      this.scopeImageList = new System.Windows.Forms.ImageList(this.components);
       this.nameTextBox = new System.Windows.Forms.TextBox();
       this.contextLabel = new System.Windows.Forms.Label();
       this.atomicLabel = new System.Windows.Forms.Label();
       this.collectionLabel = new System.Windows.Forms.Label();
-      this.timer = new System.Windows.Forms.Timer(this.components);
-      this.executionContextImageList = new System.Windows.Forms.ImageList(this.components);
-      this.parametersImageList = new System.Windows.Forms.ImageList(this.components);
-      this.scopeImageList = new System.Windows.Forms.ImageList(this.components);
-      this.parameterColumn = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
       this.groupBox.SuspendLayout();
       this.splitContainer1.Panel1.SuspendLayout();
@@ -131,4 +130,10 @@
       this.executionContextTreeView.NodeMouseClick += new System.Windows.Forms.TreeNodeMouseClickEventHandler(this.executionContextTreeView_NodeMouseClick);
       this.executionContextTreeView.NodeMouseDoubleClick += new System.Windows.Forms.TreeNodeMouseClickEventHandler(this.executionContextTreeView_NodeMouseDoubleClick);
+      // 
+      // executionContextImageList
+      // 
+      this.executionContextImageList.ColorDepth = System.Windows.Forms.ColorDepth.Depth8Bit;
+      this.executionContextImageList.ImageSize = new System.Drawing.Size(16, 16);
+      this.executionContextImageList.TransparentColor = System.Drawing.Color.Transparent;
       // 
       // parametersGroupBox
@@ -160,4 +165,10 @@
       this.parameterListView.ItemActivate += new System.EventHandler(this.parameterListView_ItemActivate);
       // 
+      // parametersImageList
+      // 
+      this.parametersImageList.ColorDepth = System.Windows.Forms.ColorDepth.Depth8Bit;
+      this.parametersImageList.ImageSize = new System.Drawing.Size(16, 16);
+      this.parametersImageList.TransparentColor = System.Drawing.Color.Transparent;
+      // 
       // scopeGroupBox
       // 
@@ -184,4 +195,10 @@
       this.scopeTreeView.NodeMouseDoubleClick += new System.Windows.Forms.TreeNodeMouseClickEventHandler(this.scopeTreeView_NodeMouseDoubleClick);
       // 
+      // scopeImageList
+      // 
+      this.scopeImageList.ColorDepth = System.Windows.Forms.ColorDepth.Depth8Bit;
+      this.scopeImageList.ImageSize = new System.Drawing.Size(16, 16);
+      this.scopeImageList.TransparentColor = System.Drawing.Color.Transparent;
+      // 
       // nameTextBox
       // 
@@ -228,27 +245,4 @@
       this.collectionLabel.TabIndex = 0;
       this.collectionLabel.Text = "Collection";
-      // 
-      // timer
-      // 
-      this.timer.Interval = 500;
-      this.timer.Tick += new System.EventHandler(this.timer_Tick);
-      // 
-      // executionContextImageList
-      // 
-      this.executionContextImageList.ColorDepth = System.Windows.Forms.ColorDepth.Depth8Bit;
-      this.executionContextImageList.ImageSize = new System.Drawing.Size(16, 16);
-      this.executionContextImageList.TransparentColor = System.Drawing.Color.Transparent;
-      // 
-      // parametersImageList
-      // 
-      this.parametersImageList.ColorDepth = System.Windows.Forms.ColorDepth.Depth8Bit;
-      this.parametersImageList.ImageSize = new System.Drawing.Size(16, 16);
-      this.parametersImageList.TransparentColor = System.Drawing.Color.Transparent;
-      // 
-      // scopeImageList
-      // 
-      this.scopeImageList.ColorDepth = System.Windows.Forms.ColorDepth.Depth8Bit;
-      this.scopeImageList.ImageSize = new System.Drawing.Size(16, 16);
-      this.scopeImageList.TransparentColor = System.Drawing.Color.Transparent;
       // 
       // OperationContentView
@@ -289,5 +283,4 @@
     private System.Windows.Forms.GroupBox parametersGroupBox;
     private System.Windows.Forms.GroupBox scopeGroupBox;
-    private System.Windows.Forms.Timer timer;
     private System.Windows.Forms.ImageList executionContextImageList;
     private System.Windows.Forms.ImageList parametersImageList;
Index: /branches/HeuristicLab.DebugEngine/OperationContentView.cs
===================================================================
--- /branches/HeuristicLab.DebugEngine/OperationContentView.cs	(revision 4992)
+++ /branches/HeuristicLab.DebugEngine/OperationContentView.cs	(revision 4993)
@@ -1,4 +1,3 @@
 ﻿using System;
-using System.Collections.Generic;
 using System.Drawing;
 using System.Text;
@@ -90,8 +89,6 @@
         while (scope != null && scope.Parent != null)
           scope = scope.Parent;
-        if (scope != null) {
+        if (scope != null)
           AddScope(scopeTreeView.Nodes, scope);
-
-        }
       }
       scopeTreeView.EndUpdate();
@@ -194,5 +191,17 @@
     }
 
+    private TreeNode selectedScopeNode = null;
     private void executionContextTreeView_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) {
+      if (selectedScopeNode != null) {
+        if (Content.IsAtomic && Content.AtomicOperation.Scope == selectedScopeNode.Tag) {
+          selectedScopeNode.BackColor = Color.Crimson;
+          selectedScopeNode.ForeColor = Color.White;
+          selectedScopeNode.NodeFont = new Font(DefaultFont, FontStyle.Bold);
+        } else {
+          selectedScopeNode.BackColor = Color.White;
+          selectedScopeNode.ForeColor = Color.Black;
+          selectedScopeNode.NodeFont = DefaultFont;
+        }
+      }
       if (e.Node != null) {
         IExecutionContext context = e.Node.Tag as IExecutionContext;
@@ -200,29 +209,17 @@
           TreeNode scopeNode = FindScopeNode(context.Scope, scopeTreeView.Nodes);
           if (scopeNode != null) {
-            if (timer.Enabled) {
-              timer_Tick(this, EventArgs.Empty);
+            if (Content.IsAtomic && Content.AtomicOperation.Scope == scopeNode.Tag) {
+              scopeNode.BackColor = Color.DarkViolet;
+              scopeNode.ForeColor = Color.White;
+              scopeNode.NodeFont = new Font(DefaultFont, FontStyle.Bold);
+            } else {
+              scopeNode.BackColor = Color.Blue;
+              scopeNode.ForeColor = Color.White;
+              scopeNode.NodeFont = new Font(DefaultFont, FontStyle.Bold);
             }
-            timer.Tag = new KeyValuePair<TreeNode, TreeNode>(scopeNode, new TreeNode() {
-              BackColor = scopeNode.BackColor,
-              ForeColor = scopeNode.ForeColor,
-              NodeFont = scopeNode.NodeFont,
-            });
-            scopeNode.BackColor = Color.Blue;
-            scopeNode.ForeColor = Color.White;
-            scopeNode.NodeFont = new Font(DefaultFont, FontStyle.Bold);
+            selectedScopeNode = scopeNode;
             scopeTreeView.TopNode = scopeNode;
-            timer.Start();
           }
         }
-      }
-    }
-
-    private void ResetNode(TreeNode node, TreeNode template) {
-      if (InvokeRequired)
-        Invoke(new Action<TreeNode, TreeNode>(ResetNode), node, template);
-      else {
-        node.ForeColor = template.ForeColor;
-        node.BackColor = template.BackColor;
-        node.NodeFont = template.NodeFont;
       }
     }
@@ -241,10 +238,4 @@
     }
 
-    private void timer_Tick(object sender, EventArgs e) {
-      KeyValuePair<TreeNode, TreeNode> kvp = (KeyValuePair<TreeNode, TreeNode>)timer.Tag;
-      ResetNode(kvp.Key, kvp.Value);
-      timer.Stop();
-    }
-
     private void nameTextBox_DoubleClick(object sender, EventArgs e) {
       if (Content != null && Content.IsAtomic && Content.AtomicOperation.Operator != null)
Index: /branches/HeuristicLab.DebugEngine/OperationContentView.resx
===================================================================
--- /branches/HeuristicLab.DebugEngine/OperationContentView.resx	(revision 4992)
+++ /branches/HeuristicLab.DebugEngine/OperationContentView.resx	(revision 4993)
@@ -127,6 +127,3 @@
     <value>461, 17</value>
   </metadata>
-  <metadata name="timer.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>17, 17</value>
-  </metadata>
 </root>
Index: /branches/HeuristicLab.DebugEngine/OperatorTrace.cs
===================================================================
--- /branches/HeuristicLab.DebugEngine/OperatorTrace.cs	(revision 4993)
+++ /branches/HeuristicLab.DebugEngine/OperatorTrace.cs	(revision 4993)
@@ -0,0 +1,47 @@
+﻿using System.Collections.Generic;
+using System.Linq;
+using HeuristicLab.Collections;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.DebugEngine {
+
+  [StorableClass]
+  public class OperatorTrace : ObservableList<IOperator>, IContent, IDeepCloneable {
+
+    public OperatorTrace()
+      : base() {
+    }
+    public OperatorTrace(int capacity)
+      : base(capacity) {
+    }
+    public OperatorTrace(IEnumerable<IOperator> collection)
+      : base(collection) {
+    }
+
+    [StorableConstructor]
+    protected OperatorTrace(bool deserializing) : base(deserializing) { }
+    protected OperatorTrace(OperatorTrace original, Cloner cloner) {
+      cloner.RegisterClonedObject(original, this);
+      AddRange(original.Select(op => cloner.Clone(op)));
+    }
+    public object Clone() {
+      return Clone(new Cloner());
+    }
+    public virtual IDeepCloneable Clone(Cloner cloner) {
+      return new OperatorTrace(this, cloner);
+    }
+    public virtual void ReplaceAll(IEnumerable<IOperator> operators) {
+      var oldList = list;
+      list = new List<IOperator>(operators);
+      if (oldList.Count != list.Count)
+        OnPropertyChanged("Count");
+      OnPropertyChanged("Item[]");
+      OnCollectionReset(
+        list.Select((op, i) => new IndexedItem<IOperator>(i, op)),
+        oldList.Select((op, i) => new IndexedItem<IOperator>(i, op)));
+    }
+
+  }
+}
Index: /branches/HeuristicLab.DebugEngine/OperatorTraceView.cs
===================================================================
--- /branches/HeuristicLab.DebugEngine/OperatorTraceView.cs	(revision 4992)
+++ /branches/HeuristicLab.DebugEngine/OperatorTraceView.cs	(revision 4993)
@@ -4,6 +4,6 @@
 using HeuristicLab.Common.Resources;
 using HeuristicLab.Core;
-using HeuristicLab.Core.Views;
 using HeuristicLab.MainForm;
+using HeuristicLab.MainForm.WindowsForms;
 using HeuristicLab.Operators;
 
@@ -11,9 +11,9 @@
 
   [View("Operator Trace View")]
-  [Content(typeof(ItemList<IOperator>), IsDefaultView = true)]
-  public sealed partial class OperatorTraceView : ItemView {
+  [Content(typeof(OperatorTrace), IsDefaultView = true)]
+  public sealed partial class OperatorTraceView : AsynchronousContentView {
 
-    public new ItemList<IOperator> Content {
-      get { return (ItemList<IOperator>)base.Content; }
+    public new OperatorTrace Content {
+      get { return (OperatorTrace)base.Content; }
       set { base.Content = value; }
     }
