Index: /trunk/sources/HeuristicLab 3.3.sln
===================================================================
--- /trunk/sources/HeuristicLab 3.3.sln	(revision 5113)
+++ /trunk/sources/HeuristicLab 3.3.sln	(revision 5114)
@@ -85,4 +85,5 @@
 		{799B0B38-E384-4A17-A73C-F211EB854592} = {799B0B38-E384-4A17-A73C-F211EB854592}
 		{678E2145-8152-4E19-9646-07D439D00301} = {678E2145-8152-4E19-9646-07D439D00301}
+		{49F28045-7B5F-411B-8D59-16C846FA26E0} = {49F28045-7B5F-411B-8D59-16C846FA26E0}
 		{BB994448-2B21-4564-BB2E-38D8FFF8CF18} = {BB994448-2B21-4564-BB2E-38D8FFF8CF18}
 		{C49CB749-8B24-4628-8003-E86475749410} = {C49CB749-8B24-4628-8003-E86475749410}
@@ -326,4 +327,6 @@
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.ALGLIB-3.1.0", "HeuristicLab.ExtLibs\HeuristicLab.ALGLIB\3.1.0\HeuristicLab.ALGLIB-3.1.0\HeuristicLab.ALGLIB-3.1.0.csproj", "{DE69A359-A5B8-4D3D-BA8D-D5780D7F96D6}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.DebugEngine-3.3", "HeuristicLab.DebugEngine\3.3\HeuristicLab.DebugEngine-3.3.csproj", "{49F28045-7B5F-411B-8D59-16C846FA26E0}"
 EndProject
 Global
@@ -1468,4 +1471,16 @@
 		{DE69A359-A5B8-4D3D-BA8D-D5780D7F96D6}.Release|x86.ActiveCfg = Release|x86
 		{DE69A359-A5B8-4D3D-BA8D-D5780D7F96D6}.Release|x86.Build.0 = Release|x86
+		{49F28045-7B5F-411B-8D59-16C846FA26E0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{49F28045-7B5F-411B-8D59-16C846FA26E0}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{49F28045-7B5F-411B-8D59-16C846FA26E0}.Debug|x64.ActiveCfg = Debug|x64
+		{49F28045-7B5F-411B-8D59-16C846FA26E0}.Debug|x64.Build.0 = Debug|x64
+		{49F28045-7B5F-411B-8D59-16C846FA26E0}.Debug|x86.ActiveCfg = Debug|x86
+		{49F28045-7B5F-411B-8D59-16C846FA26E0}.Debug|x86.Build.0 = Debug|x86
+		{49F28045-7B5F-411B-8D59-16C846FA26E0}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{49F28045-7B5F-411B-8D59-16C846FA26E0}.Release|Any CPU.Build.0 = Release|Any CPU
+		{49F28045-7B5F-411B-8D59-16C846FA26E0}.Release|x64.ActiveCfg = Release|x64
+		{49F28045-7B5F-411B-8D59-16C846FA26E0}.Release|x64.Build.0 = Release|x64
+		{49F28045-7B5F-411B-8D59-16C846FA26E0}.Release|x86.ActiveCfg = Release|x86
+		{49F28045-7B5F-411B-8D59-16C846FA26E0}.Release|x86.Build.0 = Release|x86
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
Index: /trunk/sources/HeuristicLab.DebugEngine/3.3/DebugEngine.cs
===================================================================
--- /trunk/sources/HeuristicLab.DebugEngine/3.3/DebugEngine.cs	(revision 5114)
+++ /trunk/sources/HeuristicLab.DebugEngine/3.3/DebugEngine.cs	(revision 5114)
@@ -0,0 +1,296 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Linq;
+using System.Threading;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.DebugEngine {
+
+  [StorableClass]
+  [Item("Debug Engine", "Engine for debugging algorithms.")]
+  public class DebugEngine : Executable, IEngine {
+
+    #region Construction and Cloning
+
+    [StorableConstructor]
+    protected DebugEngine(bool deserializing)
+      : base(deserializing) {
+      pausePending = stopPending = false;
+      InitializeTimer();
+    }
+
+    protected DebugEngine(DebugEngine original, Cloner cloner)
+      : base(original, cloner) {
+      if (original.ExecutionState == ExecutionState.Started) throw new InvalidOperationException(string.Format("Clone not allowed in execution state \"{0}\".", ExecutionState));
+      Log = cloner.Clone(original.Log);
+      ExecutionStack = cloner.Clone(original.ExecutionStack);
+      OperatorTrace = cloner.Clone(original.OperatorTrace);
+      pausePending = original.pausePending;
+      stopPending = original.stopPending;
+      InitializeTimer();
+      currentOperation = cloner.Clone(original.currentOperation);
+      currentOperator = cloner.Clone(original.currentOperator);
+    }
+    public DebugEngine()
+      : base() {
+      Log = new Log();
+      ExecutionStack = new ExecutionStack();
+      OperatorTrace = new OperatorTrace();
+      pausePending = stopPending = false;
+      InitializeTimer();
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new DebugEngine(this, cloner);
+    }
+
+    private void InitializeTimer() {
+      timer = new System.Timers.Timer(100);
+      timer.AutoReset = true;
+      timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
+    }
+
+    #endregion
+
+    #region Fields and Properties
+
+    [Storable]
+    public ILog Log { get; private set; }
+
+    [Storable]
+    public ExecutionStack ExecutionStack { get; private set; }
+
+    [Storable]
+    public OperatorTrace OperatorTrace { get; private set; }
+
+    private bool pausePending, stopPending;
+    private DateTime lastUpdateTime;
+    private System.Timers.Timer timer;
+
+    [Storable]
+    private IOperator currentOperator;
+
+    [Storable]
+    private IOperation currentOperation;
+    public IOperation CurrentOperation {
+      get { return currentOperation; }
+      private set {
+        if (value != currentOperation) {
+          currentOperation = value;
+          OnOperationChanged(value);
+        }
+      }
+    }
+
+    public virtual IAtomicOperation CurrentAtomicOperation {
+      get { return CurrentOperation as IAtomicOperation; }
+    }
+
+    public virtual IExecutionContext CurrentExecutionContext {
+      get { return CurrentOperation as IExecutionContext; }
+    }
+
+    public virtual bool CanContinue {
+      get { return CurrentOperation != null || ExecutionStack.Count > 0; }
+    }
+
+    public virtual bool IsAtBreakpoint {
+      get { return CurrentAtomicOperation != null && CurrentAtomicOperation.Operator != null && CurrentAtomicOperation.Operator.Breakpoint; }
+    }
+
+    #endregion
+
+    #region Events
+
+    public event EventHandler<OperationChangedEventArgs> CurrentOperationChanged;
+    protected virtual void OnOperationChanged(IOperation newOperation) {
+      EventHandler<OperationChangedEventArgs> handler = CurrentOperationChanged;
+      if (handler != null) {
+        handler(this, new OperationChangedEventArgs(newOperation));
+      }
+    }
+
+    #endregion
+
+    #region Std Methods
+    public sealed override void Prepare() {
+      base.Prepare();
+      ExecutionStack.Clear();
+      CurrentOperation = null;
+      OperatorTrace.Reset();
+      OnPrepared();
+    }
+    public void Prepare(IOperation initialOperation) {
+      base.Prepare();
+      ExecutionStack.Clear();
+      if (initialOperation != null)
+        ExecutionStack.Add(initialOperation);
+      CurrentOperation = null;
+      OperatorTrace.Reset();
+      OnPrepared();
+    }
+    protected override void OnPrepared() {
+      Log.LogMessage("Engine prepared");
+      base.OnPrepared();
+    }
+
+    public virtual void Step(bool skipStackOperations) {
+      OnStarted();
+      lastUpdateTime = DateTime.Now;
+      timer.Start();
+      ProcessNextOperation();
+      while (skipStackOperations && !(CurrentOperation is IAtomicOperation) && CanContinue)
+        ProcessNextOperation();
+      timer.Stop();
+      ExecutionTime += DateTime.Now - lastUpdateTime;
+      OnPaused();
+    }
+
+    public override void Start() {
+      base.Start();
+      ThreadPool.QueueUserWorkItem(new WaitCallback(Run), null);
+    }
+
+    protected override void OnStarted() {
+      Log.LogMessage("Engine started");
+      base.OnStarted();
+    }
+
+    public override void Pause() {
+      base.Pause();
+      pausePending = true;
+      if (currentOperator != null) currentOperator.Abort();
+    }
+
+    protected override void OnPaused() {
+      Log.LogMessage("Engine paused");
+      base.OnPaused();
+    }
+
+    public override void Stop() {
+      CurrentOperation = null;
+      base.Stop();
+      stopPending = true;
+      if (currentOperator != null) currentOperator.Abort();
+      if (ExecutionState == ExecutionState.Paused) OnStopped();
+    }
+
+    protected override void OnStopped() {
+      Log.LogMessage("Engine stopped");
+      base.OnStopped();
+    }
+
+    protected override void OnExceptionOccurred(Exception exception) {
+      Log.LogException(exception);
+      base.OnExceptionOccurred(exception);
+    }
+
+    private void Run(object state) {
+      OnStarted();
+      pausePending = stopPending = false;
+
+      lastUpdateTime = DateTime.Now;
+      timer.Start();
+      if (!pausePending && !stopPending && CanContinue)
+        ProcessNextOperation();
+      while (!pausePending && !stopPending && CanContinue && !IsAtBreakpoint)
+        ProcessNextOperation();
+      timer.Stop();
+      ExecutionTime += DateTime.Now - lastUpdateTime;
+
+      if (IsAtBreakpoint)
+        Log.LogMessage(string.Format("Breaking before: {0}", CurrentAtomicOperation.Operator.Name));
+      if (pausePending || IsAtBreakpoint)
+        OnPaused();
+      else
+        OnStopped();
+    }
+
+    private void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) {
+      DateTime now = DateTime.Now;
+      ExecutionTime += now - lastUpdateTime;
+      lastUpdateTime = now;
+    }
+    #endregion
+
+    #region Methods
+
+
+
+    /// <summary>
+    /// Deals with the next operation, if it is an <see cref="AtomicOperation"/> it is executed,
+    /// if it is a <see cref="CompositeOperation"/> its single operations are pushed on the execution stack.
+    /// </summary>
+    /// <remarks>If an error occurs during the execution the operation is aborted and the operation
+    /// is pushed on the stack again.<br/>
+    /// If the execution was successful <see cref="EngineBase.OnOperationExecuted"/> is called.</remarks>
+    protected virtual void ProcessNextOperation() {
+      try {
+        IAtomicOperation atomicOperation = CurrentOperation as IAtomicOperation;
+        OperationCollection operations = CurrentOperation as OperationCollection;
+        if (atomicOperation != null && operations != null)
+          throw new InvalidOperationException("Current operation is both atomic and an operation collection");
+
+        if (atomicOperation != null) {
+          Log.LogMessage(string.Format("Performing atomic operation {0}", Utils.Name(atomicOperation)));
+          PerformAtomicOperation(atomicOperation);
+        } else if (operations != null) {
+          Log.LogMessage("Expanding operation collection");
+          ExecutionStack.AddRange(operations.Reverse());
+          CurrentOperation = null;
+        } else if (ExecutionStack.Count > 0) {
+          Log.LogMessage("Popping execution stack");
+          CurrentOperation = ExecutionStack.Last();
+          ExecutionStack.RemoveAt(ExecutionStack.Count - 1);
+        } else {
+          Log.LogMessage("Nothing to do");
+        }
+        OperatorTrace.Regenerate(CurrentAtomicOperation);
+      } catch (Exception x) {
+        OnExceptionOccurred(x);
+      }
+    }
+
+    protected virtual void PerformAtomicOperation(IAtomicOperation operation) {
+      if (operation != null) {
+        try {
+          currentOperator = operation.Operator;
+          IOperation successor = operation.Operator.Execute((IExecutionContext)operation);
+          if (successor != null) {
+            OperatorTrace.RegisterParenthood(operation, successor);
+            ExecutionStack.Add(successor);
+          }
+          currentOperator = null;
+          CurrentOperation = null;
+        } catch (Exception ex) {
+          OnExceptionOccurred(new OperatorExecutionException(operation.Operator, ex));
+          Pause();
+        }
+      }
+    }
+
+    #endregion
+  }
+}
Index: /trunk/sources/HeuristicLab.DebugEngine/3.3/DebugEngineView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.DebugEngine/3.3/DebugEngineView.Designer.cs	(revision 5114)
+++ /trunk/sources/HeuristicLab.DebugEngine/3.3/DebugEngineView.Designer.cs	(revision 5114)
@@ -0,0 +1,206 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.DebugEngine {
+  partial class DebugEngineView {
+    /// <summary>
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary>
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Windows Form Designer generated code
+
+    /// <summary>
+    /// Required method for Designer support - do not modify
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.components = new System.ComponentModel.Container();
+      System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(DebugEngineView));
+      this.operationContentView = new HeuristicLab.DebugEngine.OperationContentView();
+      this.executionStackView = new HeuristicLab.DebugEngine.ExecutionStackView();
+      this.splitContainer2 = new System.Windows.Forms.SplitContainer();
+      this.refreshButton = new System.Windows.Forms.Button();
+      this.skipStackOpsCheckBox = new System.Windows.Forms.CheckBox();
+      this.stepButton = new System.Windows.Forms.Button();
+      this.toolTip = new System.Windows.Forms.ToolTip(this.components);
+      this.splitContainer3 = new System.Windows.Forms.SplitContainer();
+      this.operatorTraceView = new HeuristicLab.DebugEngine.OperatorTraceView();
+      this.splitContainer2.Panel1.SuspendLayout();
+      this.splitContainer2.Panel2.SuspendLayout();
+      this.splitContainer2.SuspendLayout();
+      this.splitContainer3.Panel1.SuspendLayout();
+      this.splitContainer3.Panel2.SuspendLayout();
+      this.splitContainer3.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // operationContentView
+      // 
+      this.operationContentView.Caption = "Operation Content View";
+      this.operationContentView.Content = null;
+      this.operationContentView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.operationContentView.Location = new System.Drawing.Point(0, 0);
+      this.operationContentView.Name = "operationContentView";
+      this.operationContentView.ReadOnly = false;
+      this.operationContentView.Size = new System.Drawing.Size(484, 538);
+      this.operationContentView.TabIndex = 0;
+      // 
+      // executionStackView
+      // 
+      this.executionStackView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.executionStackView.Caption = "Execution Stack View";
+      this.executionStackView.Content = null;
+      this.executionStackView.Location = new System.Drawing.Point(0, 0);
+      this.executionStackView.Name = "executionStackView";
+      this.executionStackView.ReadOnly = false;
+      this.executionStackView.Size = new System.Drawing.Size(197, 505);
+      this.executionStackView.TabIndex = 0;
+      // 
+      // splitContainer2
+      // 
+      this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.splitContainer2.Location = new System.Drawing.Point(0, 0);
+      this.splitContainer2.Name = "splitContainer2";
+      // 
+      // splitContainer2.Panel1
+      // 
+      this.splitContainer2.Panel1.Controls.Add(this.executionStackView);
+      this.splitContainer2.Panel1.Controls.Add(this.refreshButton);
+      this.splitContainer2.Panel1.Controls.Add(this.skipStackOpsCheckBox);
+      this.splitContainer2.Panel1.Controls.Add(this.stepButton);
+      // 
+      // splitContainer2.Panel2
+      // 
+      this.splitContainer2.Panel2.Controls.Add(this.operationContentView);
+      this.splitContainer2.Size = new System.Drawing.Size(687, 538);
+      this.splitContainer2.SplitterDistance = 199;
+      this.splitContainer2.TabIndex = 0;
+      // 
+      // refreshButton
+      // 
+      this.refreshButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.refreshButton.Image = HeuristicLab.Common.Resources.VS2008ImageLibrary.Refresh;
+      this.refreshButton.Location = new System.Drawing.Point(3, 511);
+      this.refreshButton.Name = "refreshButton";
+      this.refreshButton.Size = new System.Drawing.Size(24, 24);
+      this.refreshButton.TabIndex = 5;
+      this.toolTip.SetToolTip(this.refreshButton, "Refresh View");
+      this.refreshButton.UseVisualStyleBackColor = true;
+      this.refreshButton.Click += new System.EventHandler(this.refreshButton_Click);
+      // 
+      // skipStackOpsCheckBox
+      // 
+      this.skipStackOpsCheckBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.skipStackOpsCheckBox.AutoSize = true;
+      this.skipStackOpsCheckBox.Location = new System.Drawing.Point(63, 516);
+      this.skipStackOpsCheckBox.Name = "skipStackOpsCheckBox";
+      this.skipStackOpsCheckBox.Size = new System.Drawing.Size(78, 17);
+      this.skipStackOpsCheckBox.TabIndex = 6;
+      this.skipStackOpsCheckBox.Text = "Skip Stack";
+      this.toolTip.SetToolTip(this.skipStackOpsCheckBox, "Automatically step over steps that manipulate only the execution stack");
+      this.skipStackOpsCheckBox.UseVisualStyleBackColor = true;
+      // 
+      // stepButton
+      // 
+      this.stepButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.stepButton.Image = HeuristicLab.Common.Resources.VS2008ImageLibrary.MoveNext;
+      this.stepButton.Location = new System.Drawing.Point(33, 511);
+      this.stepButton.Name = "stepButton";
+      this.stepButton.Size = new System.Drawing.Size(24, 24);
+      this.stepButton.TabIndex = 4;
+      this.toolTip.SetToolTip(this.stepButton, "Step");
+      this.stepButton.UseVisualStyleBackColor = true;
+      this.stepButton.Click += new System.EventHandler(this.stepButton_Click);
+      // 
+      // splitContainer3
+      // 
+      this.splitContainer3.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.splitContainer3.Location = new System.Drawing.Point(0, 0);
+      this.splitContainer3.Name = "splitContainer3";
+      // 
+      // splitContainer3.Panel1
+      // 
+      this.splitContainer3.Panel1.Controls.Add(this.splitContainer2);
+      // 
+      // splitContainer3.Panel2
+      // 
+      this.splitContainer3.Panel2.Controls.Add(this.operatorTraceView);
+      this.splitContainer3.Size = new System.Drawing.Size(872, 538);
+      this.splitContainer3.SplitterDistance = 687;
+      this.splitContainer3.TabIndex = 7;
+      // 
+      // operatorTraceView
+      // 
+      this.operatorTraceView.Caption = "Operator Trace View";
+      this.operatorTraceView.Content = null;
+      this.operatorTraceView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.operatorTraceView.Location = new System.Drawing.Point(0, 0);
+      this.operatorTraceView.Name = "operatorTraceView";
+      this.operatorTraceView.ReadOnly = false;
+      this.operatorTraceView.Size = new System.Drawing.Size(181, 538);
+      this.operatorTraceView.TabIndex = 0;
+      // 
+      // DebugEngineView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.Controls.Add(this.splitContainer3);
+      this.Name = "DebugEngineView";
+      this.Size = new System.Drawing.Size(872, 538);
+      this.splitContainer2.Panel1.ResumeLayout(false);
+      this.splitContainer2.Panel1.PerformLayout();
+      this.splitContainer2.Panel2.ResumeLayout(false);
+      this.splitContainer2.ResumeLayout(false);
+      this.splitContainer3.Panel1.ResumeLayout(false);
+      this.splitContainer3.Panel2.ResumeLayout(false);
+      this.splitContainer3.ResumeLayout(false);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.SplitContainer splitContainer2;
+    private System.Windows.Forms.Button stepButton;
+    private System.Windows.Forms.ToolTip toolTip;
+    private HeuristicLab.DebugEngine.ExecutionStackView executionStackView;
+    private HeuristicLab.DebugEngine.OperationContentView operationContentView;
+    private System.Windows.Forms.Button refreshButton;
+    private System.Windows.Forms.CheckBox skipStackOpsCheckBox;
+    private System.Windows.Forms.SplitContainer splitContainer3;
+    private OperatorTraceView operatorTraceView;
+
+  }
+}
Index: /trunk/sources/HeuristicLab.DebugEngine/3.3/DebugEngineView.cs
===================================================================
--- /trunk/sources/HeuristicLab.DebugEngine/3.3/DebugEngineView.cs	(revision 5114)
+++ /trunk/sources/HeuristicLab.DebugEngine/3.3/DebugEngineView.cs	(revision 5114)
@@ -0,0 +1,138 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Windows.Forms;
+using HeuristicLab.Core;
+using HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
+namespace HeuristicLab.DebugEngine {
+
+  /// <summary>
+  /// Engine espcially for debugging
+  /// </summary>
+  [View("DebugEngine View")]
+  [Content(typeof(DebugEngine), true)]
+  public partial class DebugEngineView : ItemView {
+
+    #region Basics
+
+    /// <summary>
+    /// Gets or sets the current engine.
+    /// </summary>
+    /// <remarks>Uses property <see cref="ViewBase.Item"/> of base class <see cref="EditorBase"/>.</remarks>
+    public new DebugEngine Content {
+      get { return (DebugEngine)base.Content; }
+      set { base.Content = value; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="DebugEngineView"/>.
+    /// </summary>
+    public DebugEngineView() {
+      InitializeComponent();
+    }
+
+    /// <summary>
+    /// Removes the event handlers from the underlying <see cref="IEngine"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="ViewBase.RemoveItemEvents"/> of base class <see cref="ViewBase"/>.</remarks>
+    protected override void DeregisterContentEvents() {
+      Content.ExecutionStateChanged -= new EventHandler(Content_ExecutionStateChanged);
+      base.DeregisterContentEvents();
+    }
+
+    /// <summary>
+    /// Adds event handlers to the underlying <see cref="IEngine"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="ViewBase.AddItemEvents"/> of base class <see cref="ViewBase"/>.</remarks>
+    protected override void RegisterContentEvents() {
+      base.RegisterContentEvents();
+      Content.ExecutionStateChanged += new EventHandler(Content_ExecutionStateChanged);
+    }
+
+    /// <summary>
+    /// Updates all controls with the latest data of the model.
+    /// </summary>
+    /// <remarks>Calls <see cref="EditorBase.UpdateControls"/> of base class <see cref="EditorBase"/>.</remarks>
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      if (Content == null) {
+        executionStackView.Content = null;
+        operatorTraceView.Content = null;
+        operationContentView.Content = null;
+      } else {
+        executionStackView.Content = Content.ExecutionStack;
+        operatorTraceView.Content = Content.OperatorTrace;
+        operationContentView.Content = new OperationContent(Content.CurrentOperation);
+      }
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      if (Content == null) {
+        stepButton.Enabled = false;
+        refreshButton.Enabled = false;
+      } else {
+        stepButton.Enabled = Content.CanContinue && Content.ExecutionState != ExecutionState.Started;
+        refreshButton.Enabled = Content.CurrentAtomicOperation != null && Content.ExecutionState != ExecutionState.Started;
+      }
+    }
+
+    #endregion
+
+    void Content_ExecutionStateChanged(object sender, EventArgs e) {
+      if (InvokeRequired) {
+        Invoke(new EventHandler(Content_ExecutionStateChanged), sender, e);
+      } else {
+        SetEnabledStateOfControls();
+        switch (Content.ExecutionState) {
+          case ExecutionState.Started:
+            if (!stepping) {
+              executionStackView.Content = null;
+              operatorTraceView.Content = null;
+              operationContentView.Content = null;
+            }
+            break;
+          default:
+            executionStackView.Content = Content.ExecutionStack;
+            operatorTraceView.Content = Content.OperatorTrace;
+            operationContentView.Content = new OperationContent(Content.CurrentOperation);
+            break;
+        }
+      }
+    }
+
+    private bool stepping = false;
+    private void stepButton_Click(object sender, EventArgs e) {
+      stepping = true;
+      Content.Step(skipStackOpsCheckBox.Checked);
+      stepping = false;
+    }
+
+    private void refreshButton_Click(object sender, EventArgs e) {
+      var content = Content;
+      Content = null;
+      Content = content;
+    }
+
+  }
+}
Index: /trunk/sources/HeuristicLab.DebugEngine/3.3/ExecutionStack.cs
===================================================================
--- /trunk/sources/HeuristicLab.DebugEngine/3.3/ExecutionStack.cs	(revision 5114)
+++ /trunk/sources/HeuristicLab.DebugEngine/3.3/ExecutionStack.cs	(revision 5114)
@@ -0,0 +1,51 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+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 ExecutionStack : ObservableList<IOperation>, IContent, IDeepCloneable {
+
+    public ExecutionStack() : base() { }
+    public ExecutionStack(int capacity) : base(capacity) { }
+    public ExecutionStack(IEnumerable<IOperation> collection) : base(collection) { }
+
+    [StorableConstructor]
+    protected ExecutionStack(bool deserializing) : base(deserializing) { }
+    protected ExecutionStack(ExecutionStack 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 ExecutionStack(this, cloner);
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.DebugEngine/3.3/ExecutionStackView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.DebugEngine/3.3/ExecutionStackView.Designer.cs	(revision 5114)
+++ /trunk/sources/HeuristicLab.DebugEngine/3.3/ExecutionStackView.Designer.cs	(revision 5114)
@@ -0,0 +1,103 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.DebugEngine {
+  partial class ExecutionStackView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.components = new System.ComponentModel.Container();
+      this.treeView = new System.Windows.Forms.TreeView();
+      this.groupBox = new System.Windows.Forms.GroupBox();
+      this.imageList = new System.Windows.Forms.ImageList(this.components);
+      this.groupBox.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // treeView
+      // 
+      this.treeView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.treeView.ImageIndex = 0;
+      this.treeView.ImageList = this.imageList;
+      this.treeView.Location = new System.Drawing.Point(3, 16);
+      this.treeView.Name = "treeView";
+      this.treeView.SelectedImageIndex = 0;
+      this.treeView.ShowNodeToolTips = true;
+      this.treeView.Size = new System.Drawing.Size(303, 261);
+      this.treeView.TabIndex = 0;
+      this.treeView.NodeMouseDoubleClick += new System.Windows.Forms.TreeNodeMouseClickEventHandler(this.treeView_NodeMouseDoubleClick);
+      // 
+      // groupBox
+      // 
+      this.groupBox.Controls.Add(this.treeView);
+      this.groupBox.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.groupBox.Location = new System.Drawing.Point(0, 0);
+      this.groupBox.Name = "groupBox";
+      this.groupBox.Size = new System.Drawing.Size(309, 280);
+      this.groupBox.TabIndex = 1;
+      this.groupBox.TabStop = false;
+      this.groupBox.Text = "Execution Stack";
+      // 
+      // imageList
+      // 
+      this.imageList.ColorDepth = System.Windows.Forms.ColorDepth.Depth8Bit;
+      this.imageList.ImageSize = new System.Drawing.Size(16, 16);
+      this.imageList.TransparentColor = System.Drawing.Color.Transparent;
+      // 
+      // ExecutionStackView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.groupBox);
+      this.Name = "ExecutionStackView";
+      this.Size = new System.Drawing.Size(309, 280);
+      this.groupBox.ResumeLayout(false);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.TreeView treeView;
+    private System.Windows.Forms.GroupBox groupBox;
+    private System.Windows.Forms.ImageList imageList;
+
+  }
+}
Index: /trunk/sources/HeuristicLab.DebugEngine/3.3/ExecutionStackView.cs
===================================================================
--- /trunk/sources/HeuristicLab.DebugEngine/3.3/ExecutionStackView.cs	(revision 5114)
+++ /trunk/sources/HeuristicLab.DebugEngine/3.3/ExecutionStackView.cs	(revision 5114)
@@ -0,0 +1,171 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Drawing;
+using System.Linq;
+using System.Windows.Forms;
+using HeuristicLab.Collections;
+using HeuristicLab.Common.Resources;
+using HeuristicLab.Core;
+using HeuristicLab.MainForm;
+using HeuristicLab.MainForm.WindowsForms;
+
+namespace HeuristicLab.DebugEngine {
+
+  [View("Execution Stack View")]
+  [Content(typeof(ExecutionStack), IsDefaultView = true)]
+  public partial class ExecutionStackView : AsynchronousContentView {
+    public new ExecutionStack Content {
+      get { return (ExecutionStack)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public ExecutionStackView() {
+      InitializeComponent();
+    }
+
+    protected override void DeregisterContentEvents() {
+      Content.CollectionReset -= Content_Changed;
+      Content.ItemsAdded -= Content_Changed;
+      Content.ItemsRemoved -= Content_Changed;
+      Content.ItemsMoved -= Content_Changed;
+      Content.ItemsReplaced -= Content_Changed;
+      base.DeregisterContentEvents();
+    }
+
+    protected override void RegisterContentEvents() {
+      base.RegisterContentEvents();
+      Content.CollectionReset += Content_Changed;
+      Content.ItemsAdded += Content_Changed;
+      Content.ItemsRemoved += Content_Changed;
+      Content.ItemsMoved += Content_Changed;
+      Content.ItemsReplaced += Content_Changed;
+    }
+
+    #region Event Handlers (Content)
+    void Content_Changed(object sender, CollectionItemsChangedEventArgs<IndexedItem<IOperation>> e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler<CollectionItemsChangedEventArgs<IndexedItem<IOperation>>>(Content_Changed), sender, e);
+      else
+        UpdateExecutionStack();
+    }
+
+
+    private void UpdateExecutionStack() {
+      if (suspended) {
+        groupBox.Text = string.Format("Execution Stack ({0})", CountOperations(Content));
+      } else {
+        treeView.BeginUpdate();
+        treeView.Nodes.Clear();
+        treeView.ImageList.Images.Clear();
+        treeView.ImageList.Images.Add(VS2008ImageLibrary.Method);
+        treeView.ImageList.Images.Add(VS2008ImageLibrary.Module);
+        int totalNodes = AddStackOperations(treeView.Nodes, ((IEnumerable<IOperation>)Content).Reverse());
+        if (treeView.Nodes.Count > 0)
+          treeView.TopNode = treeView.Nodes[0];
+        treeView.ExpandAll();
+        treeView.EndUpdate();
+        groupBox.Text = string.Format("Execution Stack ({0})", totalNodes);
+      }
+    }
+
+    private int CountOperations(IEnumerable<IOperation> operations) {
+      int count = 0;
+      foreach (IOperation op in operations) {
+        count++;
+        OperationCollection ops = op as OperationCollection;
+        if (ops != null)
+          count += CountOperations(ops);
+      }
+      return count;
+    }
+
+    private int AddStackOperations(TreeNodeCollection nodes, IEnumerable<IOperation> operations) {
+      int count = 0;
+      foreach (IOperation op in operations) {
+        if (op is IAtomicOperation) {
+          IAtomicOperation atom = op as IAtomicOperation;
+          TreeNode node = nodes.Add(atom.Operator.Name ?? atom.Operator.ItemName);
+          node.Tag = atom;
+          node.ToolTipText = string.Format("{0}{1}{1}{2}",
+            Utils.TypeName(atom.Operator), Environment.NewLine,
+            Utils.Wrap(atom.Operator.Description ?? atom.Operator.ItemDescription, 60));
+          node.ImageIndex = 0;
+          node.SelectedImageIndex = 0;
+          if (atom.Operator.Breakpoint)
+            node.ForeColor = Color.Red;
+          count++;
+        } else if (op is OperationCollection) {
+          OperationCollection ops = op as OperationCollection;
+          TreeNode node = treeView.Nodes.Add(
+            string.Format("{0} Operation{1}", ops.Count, ops.Count == 1 ? string.Empty : "s"));
+          node.Tag = op;
+          node.ToolTipText = Utils.TypeName(ops);
+          node.ImageIndex = 1;
+          node.SelectedImageIndex = 1;
+          count += AddStackOperations(node.Nodes, ops);
+        }
+      }
+      return count;
+    }
+    #endregion
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      if (Content == null) {
+        treeView.Nodes.Clear();
+      } else {
+        UpdateExecutionStack();
+      }
+    }
+
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+    }
+
+    #region Event Handlers (child controls)
+    private void treeView_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e) {
+      if (e.Node != null) {
+        IAtomicOperation op = e.Node.Tag as IAtomicOperation;
+        if (op != null)
+          MainFormManager.MainForm.ShowContent(op.Operator);
+      }
+    }
+    #endregion
+
+    #region Suspension
+    private bool suspended = false;
+    public virtual void SuspendUpdate() {
+      suspended = true;
+      treeView.Nodes.Clear();
+    }
+
+    public virtual void ResumeUpdate() {
+      suspended = false;
+      if (Content != null)
+        UpdateExecutionStack();
+    }
+    #endregion
+  }
+}
Index: /trunk/sources/HeuristicLab.DebugEngine/3.3/HeuristicLab.DebugEngine-3.3.csproj
===================================================================
--- /trunk/sources/HeuristicLab.DebugEngine/3.3/HeuristicLab.DebugEngine-3.3.csproj	(revision 5114)
+++ /trunk/sources/HeuristicLab.DebugEngine/3.3/HeuristicLab.DebugEngine-3.3.csproj	(revision 5114)
@@ -0,0 +1,182 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>8.0.30703</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{49F28045-7B5F-411B-8D59-16C846FA26E0}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.DebugEngine</RootNamespace>
+    <AssemblyName>HeuristicLab.DebugEngine-3.3</AssemblyName>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <TargetFrameworkProfile />
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <RunCodeAnalysis>false</RunCodeAnalysis>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup>
+    <SignAssembly>true</SignAssembly>
+  </PropertyGroup>
+  <PropertyGroup>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <CodeAnalysisLogFile>bin\Debug\HeuristicLab.DebugEngine.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
+    <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
+    <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
+    <CodeAnalysisIgnoreBuiltInRuleSets>true</CodeAnalysisIgnoreBuiltInRuleSets>
+    <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
+    <CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
+    <CodeAnalysisFailOnMissingRules>false</CodeAnalysisFailOnMissingRules>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <CodeAnalysisLogFile>bin\Release\HeuristicLab.DebugEngine.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
+    <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
+    <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
+    <CodeAnalysisIgnoreBuiltInRuleSets>false</CodeAnalysisIgnoreBuiltInRuleSets>
+    <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
+    <CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+    <PlatformTarget>x64</PlatformTarget>
+    <OutputPath>bin\x64\Debug\</OutputPath>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+    <PlatformTarget>x64</PlatformTarget>
+    <OutputPath>bin\x64\Release\</OutputPath>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="HeuristicLab.Collections-3.3">
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Collections-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Common-3.3">
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Common-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Common.Resources-3.3">
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Common.Resources-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Core-3.3">
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Core-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Core.Views-3.3">
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Core.Views-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.MainForm-3.3">
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.MainForm-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.MainForm.WindowsForms-3.3">
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.MainForm.WindowsForms-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Operators-3.3">
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Operators-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Persistence-3.3">
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Persistence-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.PluginInfrastructure-3.3">
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.PluginInfrastructure-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="OperatorTrace.cs" />
+    <Compile Include="DebugEngine.cs" />
+    <Compile Include="DebugEngineView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="DebugEngineView.Designer.cs">
+      <DependentUpon>DebugEngineView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="ExecutionStack.cs" />
+    <Compile Include="ExecutionStackView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="ExecutionStackView.Designer.cs">
+      <DependentUpon>ExecutionStackView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="OperationChangedEventArgs.cs" />
+    <Compile Include="OperationContent.cs" />
+    <Compile Include="OperationContentView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="OperationContentView.Designer.cs">
+      <DependentUpon>OperationContentView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="OperatorTraceView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="OperatorTraceView.Designer.cs">
+      <DependentUpon>OperatorTraceView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="Utils.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="HeuristicLabDebugEnginePlugin.cs" />
+    <None Include="HeuristicLab.snk" />
+    <None Include="HeuristicLabDebugEnginePlugin.cs.frame" />
+    <None Include="Properties\AssemblyInfo.frame" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd
+SubWCRev "%25ProjectDir%25\" "%25ProjectDir%25\HeuristicLabDebugEnginePlugin.cs.frame" "%25ProjectDir%25\HeuristicLabDebugEnginePlugin.cs"</PreBuildEvent>
+  </PropertyGroup>
+  <PropertyGroup>
+    <PostBuildEvent>
+    </PostBuildEvent>
+  </PropertyGroup>
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
Index: /trunk/sources/HeuristicLab.DebugEngine/3.3/HeuristicLabDebugEnginePlugin.cs.frame
===================================================================
--- /trunk/sources/HeuristicLab.DebugEngine/3.3/HeuristicLabDebugEnginePlugin.cs.frame	(revision 5114)
+++ /trunk/sources/HeuristicLab.DebugEngine/3.3/HeuristicLabDebugEnginePlugin.cs.frame	(revision 5114)
@@ -0,0 +1,38 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.DebugEngine {
+
+  [Plugin("HeuristicLab.DebugEngine", "3.3.2.$WCREV$")]
+  [PluginFile("HeuristicLab.DebugEngine-3.3.dll", PluginFileType.Assembly)]
+  [PluginDependency("HeuristicLab.Collections", "3.3")]
+  [PluginDependency("HeuristicLab.Common", "3.3")]
+  [PluginDependency("HeuristicLab.Common.Resources", "3.3")]
+  [PluginDependency("HeuristicLab.Core", "3.3")]
+  [PluginDependency("HeuristicLab.Core.Views", "3.3")]
+  [PluginDependency("HeuristicLab.MainForm", "3.3")]
+  [PluginDependency("HeuristicLab.MainForm.WindowsForms", "3.3")]
+  [PluginDependency("HeuristicLab.Operators", "3.3")]
+  [PluginDependency("HeuristicLab.Persistence", "3.3")]  
+  public class HeuristicLabDebugEnginePlugin : PluginBase { }
+}
Index: /trunk/sources/HeuristicLab.DebugEngine/3.3/OperationChangedEventArgs.cs
===================================================================
--- /trunk/sources/HeuristicLab.DebugEngine/3.3/OperationChangedEventArgs.cs	(revision 5114)
+++ /trunk/sources/HeuristicLab.DebugEngine/3.3/OperationChangedEventArgs.cs	(revision 5114)
@@ -0,0 +1,32 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.DebugEngine {
+  public class OperationChangedEventArgs : EventArgs {
+    public IOperation NewOperation { get; protected set; }
+    public OperationChangedEventArgs(IOperation newOperation) {
+      NewOperation = newOperation;
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.DebugEngine/3.3/OperationContent.cs
===================================================================
--- /trunk/sources/HeuristicLab.DebugEngine/3.3/OperationContent.cs	(revision 5114)
+++ /trunk/sources/HeuristicLab.DebugEngine/3.3/OperationContent.cs	(revision 5114)
@@ -0,0 +1,52 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.DebugEngine {
+  public class OperationContent : IContent {
+
+    public IOperation Operation { get; private set; }
+    public OperationCollection Collection { get; private set; }
+    public IAtomicOperation AtomicOperation { get; private set; }
+    public ExecutionContext ExecutionContext { get; private set; }
+    public string Name { get; private set; }
+
+    public OperationContent(IOperation operation) {
+      Operation = operation;
+      Collection = operation as OperationCollection;
+      AtomicOperation = operation as IAtomicOperation;
+      ExecutionContext = operation as ExecutionContext;
+      if (AtomicOperation != null) {
+        Name = Utils.Name(AtomicOperation);
+      } else if (Collection != null) {
+        Name = string.Format("{0} Operations", Collection.Count);
+      } else {
+        Name = "";
+      }
+    }
+
+    public bool IsCollection { get { return Collection != null; } }
+    public bool IsAtomic { get { return AtomicOperation != null; } }
+    public bool IsContext { get { return ExecutionContext != null; } }
+  }
+}
Index: /trunk/sources/HeuristicLab.DebugEngine/3.3/OperationContentView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.DebugEngine/3.3/OperationContentView.Designer.cs	(revision 5114)
+++ /trunk/sources/HeuristicLab.DebugEngine/3.3/OperationContentView.Designer.cs	(revision 5114)
@@ -0,0 +1,273 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.DebugEngine {
+  partial class OperationContentView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.components = new System.ComponentModel.Container();
+      this.groupBox = new System.Windows.Forms.GroupBox();
+      this.splitContainer1 = new System.Windows.Forms.SplitContainer();
+      this.executionContextGroupBox = new System.Windows.Forms.GroupBox();
+      this.executionContextTreeView = new System.Windows.Forms.TreeView();
+      this.executionContextImageList = 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.parametersImageList = new System.Windows.Forms.ImageList(this.components);
+      this.executionContextConextMenu = new System.Windows.Forms.ContextMenuStrip(this.components);
+      this.showValueToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.groupBox.SuspendLayout();
+      this.splitContainer1.Panel1.SuspendLayout();
+      this.splitContainer1.Panel2.SuspendLayout();
+      this.splitContainer1.SuspendLayout();
+      this.executionContextGroupBox.SuspendLayout();
+      this.scopeGroupBox.SuspendLayout();
+      this.executionContextConextMenu.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // groupBox
+      // 
+      this.groupBox.Controls.Add(this.splitContainer1);
+      this.groupBox.Controls.Add(this.nameTextBox);
+      this.groupBox.Controls.Add(this.contextLabel);
+      this.groupBox.Controls.Add(this.atomicLabel);
+      this.groupBox.Controls.Add(this.collectionLabel);
+      this.groupBox.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.groupBox.Location = new System.Drawing.Point(0, 0);
+      this.groupBox.Name = "groupBox";
+      this.groupBox.Size = new System.Drawing.Size(563, 412);
+      this.groupBox.TabIndex = 0;
+      this.groupBox.TabStop = false;
+      this.groupBox.Text = "Operation";
+      // 
+      // splitContainer1
+      // 
+      this.splitContainer1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
+            | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+      this.splitContainer1.Location = new System.Drawing.Point(6, 45);
+      this.splitContainer1.Name = "splitContainer1";
+      // 
+      // splitContainer1.Panel1
+      // 
+      this.splitContainer1.Panel1.Controls.Add(this.executionContextGroupBox);
+      // 
+      // splitContainer1.Panel2
+      // 
+      this.splitContainer1.Panel2.Controls.Add(this.scopeGroupBox);
+      this.splitContainer1.Size = new System.Drawing.Size(551, 361);
+      this.splitContainer1.SplitterDistance = 242;
+      this.splitContainer1.TabIndex = 4;
+      // 
+      // executionContextGroupBox
+      // 
+      this.executionContextGroupBox.Controls.Add(this.executionContextTreeView);
+      this.executionContextGroupBox.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.executionContextGroupBox.Location = new System.Drawing.Point(0, 0);
+      this.executionContextGroupBox.Name = "executionContextGroupBox";
+      this.executionContextGroupBox.Size = new System.Drawing.Size(242, 361);
+      this.executionContextGroupBox.TabIndex = 0;
+      this.executionContextGroupBox.TabStop = false;
+      this.executionContextGroupBox.Text = "Execution Context";
+      // 
+      // executionContextTreeView
+      // 
+      this.executionContextTreeView.ContextMenuStrip = this.executionContextConextMenu;
+      this.executionContextTreeView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.executionContextTreeView.ImageIndex = 0;
+      this.executionContextTreeView.ImageList = this.executionContextImageList;
+      this.executionContextTreeView.Location = new System.Drawing.Point(3, 16);
+      this.executionContextTreeView.Name = "executionContextTreeView";
+      this.executionContextTreeView.SelectedImageIndex = 0;
+      this.executionContextTreeView.ShowNodeToolTips = true;
+      this.executionContextTreeView.Size = new System.Drawing.Size(236, 342);
+      this.executionContextTreeView.TabIndex = 0;
+      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;
+      // 
+      // scopeGroupBox
+      // 
+      this.scopeGroupBox.Controls.Add(this.scopeTreeView);
+      this.scopeGroupBox.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.scopeGroupBox.Location = new System.Drawing.Point(0, 0);
+      this.scopeGroupBox.Name = "scopeGroupBox";
+      this.scopeGroupBox.Size = new System.Drawing.Size(305, 361);
+      this.scopeGroupBox.TabIndex = 1;
+      this.scopeGroupBox.TabStop = false;
+      this.scopeGroupBox.Text = "Scope";
+      // 
+      // scopeTreeView
+      // 
+      this.scopeTreeView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.scopeTreeView.ImageIndex = 0;
+      this.scopeTreeView.ImageList = this.scopeImageList;
+      this.scopeTreeView.Location = new System.Drawing.Point(3, 16);
+      this.scopeTreeView.Name = "scopeTreeView";
+      this.scopeTreeView.SelectedImageIndex = 0;
+      this.scopeTreeView.ShowNodeToolTips = true;
+      this.scopeTreeView.Size = new System.Drawing.Size(299, 342);
+      this.scopeTreeView.TabIndex = 0;
+      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
+      // 
+      this.nameTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+      this.nameTextBox.Cursor = System.Windows.Forms.Cursors.Default;
+      this.nameTextBox.Location = new System.Drawing.Point(6, 19);
+      this.nameTextBox.Name = "nameTextBox";
+      this.nameTextBox.ReadOnly = true;
+      this.nameTextBox.Size = new System.Drawing.Size(395, 20);
+      this.nameTextBox.TabIndex = 3;
+      this.nameTextBox.DoubleClick += new System.EventHandler(this.nameTextBox_DoubleClick);
+      // 
+      // contextLabel
+      // 
+      this.contextLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+      this.contextLabel.AutoSize = true;
+      this.contextLabel.ForeColor = System.Drawing.SystemColors.ControlDark;
+      this.contextLabel.Location = new System.Drawing.Point(407, 22);
+      this.contextLabel.Name = "contextLabel";
+      this.contextLabel.Size = new System.Drawing.Size(43, 13);
+      this.contextLabel.TabIndex = 2;
+      this.contextLabel.Text = "Context";
+      // 
+      // atomicLabel
+      // 
+      this.atomicLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+      this.atomicLabel.AutoSize = true;
+      this.atomicLabel.ForeColor = System.Drawing.SystemColors.ControlDark;
+      this.atomicLabel.Location = new System.Drawing.Point(456, 22);
+      this.atomicLabel.Name = "atomicLabel";
+      this.atomicLabel.Size = new System.Drawing.Size(39, 13);
+      this.atomicLabel.TabIndex = 1;
+      this.atomicLabel.Text = "Atomic";
+      // 
+      // collectionLabel
+      // 
+      this.collectionLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+      this.collectionLabel.AutoSize = true;
+      this.collectionLabel.ForeColor = System.Drawing.SystemColors.ControlDark;
+      this.collectionLabel.Location = new System.Drawing.Point(501, 22);
+      this.collectionLabel.Name = "collectionLabel";
+      this.collectionLabel.Size = new System.Drawing.Size(53, 13);
+      this.collectionLabel.TabIndex = 0;
+      this.collectionLabel.Text = "Collection";
+      // 
+      // 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;
+      // 
+      // executionContextConextMenu
+      // 
+      this.executionContextConextMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.showValueToolStripMenuItem});
+      this.executionContextConextMenu.Name = "executionContextConextMenu";
+      this.executionContextConextMenu.Size = new System.Drawing.Size(169, 48);
+      this.executionContextConextMenu.Opening += new System.ComponentModel.CancelEventHandler(this.executionContextConextMenu_Opening);
+      // 
+      // showValueToolStripMenuItem
+      // 
+      this.showValueToolStripMenuItem.Name = "showValueToolStripMenuItem";
+      this.showValueToolStripMenuItem.Size = new System.Drawing.Size(168, 22);
+      this.showValueToolStripMenuItem.Text = "show actual value";
+      this.showValueToolStripMenuItem.ToolTipText = "Try to obtain the parameter\'s actual value in the current execution context and o" +
+    "pen it in a new view.";
+      this.showValueToolStripMenuItem.Click += new System.EventHandler(this.ShowValue_Click);
+      // 
+      // OperationContentView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.groupBox);
+      this.Name = "OperationContentView";
+      this.Size = new System.Drawing.Size(563, 412);
+      this.groupBox.ResumeLayout(false);
+      this.groupBox.PerformLayout();
+      this.splitContainer1.Panel1.ResumeLayout(false);
+      this.splitContainer1.Panel2.ResumeLayout(false);
+      this.splitContainer1.ResumeLayout(false);
+      this.executionContextGroupBox.ResumeLayout(false);
+      this.scopeGroupBox.ResumeLayout(false);
+      this.executionContextConextMenu.ResumeLayout(false);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.GroupBox groupBox;
+    private System.Windows.Forms.TextBox nameTextBox;
+    private System.Windows.Forms.Label contextLabel;
+    private System.Windows.Forms.Label atomicLabel;
+    private System.Windows.Forms.Label collectionLabel;
+    private System.Windows.Forms.SplitContainer splitContainer1;
+    private System.Windows.Forms.TreeView scopeTreeView;
+    private System.Windows.Forms.GroupBox scopeGroupBox;
+    private System.Windows.Forms.ImageList executionContextImageList;
+    private System.Windows.Forms.ImageList parametersImageList;
+    private System.Windows.Forms.ImageList scopeImageList;
+    private System.Windows.Forms.GroupBox executionContextGroupBox;
+    private System.Windows.Forms.TreeView executionContextTreeView;
+    private System.Windows.Forms.ContextMenuStrip executionContextConextMenu;
+    private System.Windows.Forms.ToolStripMenuItem showValueToolStripMenuItem;
+  }
+}
Index: /trunk/sources/HeuristicLab.DebugEngine/3.3/OperationContentView.cs
===================================================================
--- /trunk/sources/HeuristicLab.DebugEngine/3.3/OperationContentView.cs	(revision 5114)
+++ /trunk/sources/HeuristicLab.DebugEngine/3.3/OperationContentView.cs	(revision 5114)
@@ -0,0 +1,253 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Drawing;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Common;
+using HeuristicLab.Common.Resources;
+using HeuristicLab.Core;
+using HeuristicLab.MainForm;
+using HeuristicLab.MainForm.WindowsForms;
+
+namespace HeuristicLab.DebugEngine {
+
+  [View("Operation Content View")]
+  [Content(typeof(OperationContent), IsDefaultView = true)]
+  public partial class OperationContentView : AsynchronousContentView {
+    public new OperationContent Content {
+      get { return (OperationContent)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public OperationContentView() {
+      InitializeComponent();
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      if (Content == null) {
+        nameTextBox.Text = "";
+        contextLabel.ForeColor = SystemColors.ControlDark;
+        atomicLabel.ForeColor = SystemColors.ControlDark;
+        collectionLabel.ForeColor = SystemColors.ControlDark;
+        scopeTreeView.Nodes.Clear();
+        executionContextTreeView.Nodes.Clear();
+      } else {
+        contextLabel.ForeColor = Content.IsContext ? Color.Black : SystemColors.ControlDark;
+        atomicLabel.ForeColor = Content.IsAtomic ? Color.Black : SystemColors.ControlDark;
+        collectionLabel.ForeColor = Content.IsCollection ? Color.Black : SystemColors.ControlDark;
+        nameTextBox.Text = Content.Name;
+        UpdateScopeTree();
+        UpdateExecutionContext();
+      }
+    }
+
+    private object GetParameterValue(IParameter param, IExecutionContext context) {
+      param = (IParameter)param.Clone();
+      param.ExecutionContext = context;
+      object value = null;
+      try {
+        value = param.ActualValue;
+      } catch (Exception x) {
+        value = x.Message;
+      }
+      return value;
+    }
+
+    private void UpdateScopeTree() {
+      scopeTreeView.BeginUpdate();
+      scopeTreeView.Nodes.Clear();
+      scopeTreeView.ImageList.Images.Clear();
+      scopeTreeView.ImageList.Images.Add(VS2008ImageLibrary.Namespace);
+      scopeTreeView.ImageList.Images.Add(VS2008ImageLibrary.Field);
+      if (Content.IsContext) {
+        var scope = Content.ExecutionContext.Scope;
+        while (scope != null && scope.Parent != null)
+          scope = scope.Parent;
+        if (scope != null)
+          AddScope(scopeTreeView.Nodes, scope);
+      }
+      scopeTreeView.EndUpdate();
+    }
+
+    private void AddScope(TreeNodeCollection nodes, IScope scope) {
+      TreeNode node = nodes.Add(string.Format("{0} ({1}+{2})",
+        scope.Name, scope.Variables.Count, scope.SubScopes.Count));
+      node.Tag = scope;
+      node.ImageIndex = 0;
+      node.SelectedImageIndex = 0;
+      foreach (var var in scope.Variables) {
+        TreeNode varNode = node.Nodes.Add(string.Format("{0}={1}", var.Name, var.Value));
+        varNode.Tag = var.Value;
+        varNode.ToolTipText = string.Format("{0}{1}{1}{2}",
+          Utils.TypeName(var.Value), Environment.NewLine,
+          Utils.Wrap(var.Description ?? var.ItemDescription, 60));
+        varNode.ImageIndex = 1;
+        varNode.SelectedImageIndex = 1;
+      }
+      foreach (var subScope in scope.SubScopes)
+        AddScope(node.Nodes, subScope);
+      if (Content.IsAtomic && Content.AtomicOperation.Scope == scope) {
+        node.NodeFont = new Font(DefaultFont, FontStyle.Bold);
+        node.ForeColor = Color.White;
+        node.BackColor = Color.Crimson;
+        node.Expand();
+        scopeTreeView.TopNode = node;
+        node.ToolTipText = "Current scope of active operation";
+      }
+    }
+
+
+    private void UpdateExecutionContext() {
+      executionContextTreeView.BeginUpdate();
+      executionContextTreeView.Nodes.Clear();
+      executionContextTreeView.ImageList.Images.Clear();
+      executionContextTreeView.ImageList.Images.Add(VS2008ImageLibrary.Namespace);
+      if (Content.IsContext) {
+        AddExecutionContext(Content.ExecutionContext, executionContextTreeView.Nodes);
+      }
+      executionContextTreeView.ExpandAll();
+      if (executionContextTreeView.Nodes.Count > 0)
+        executionContextTreeView.TopNode = executionContextTreeView.Nodes[0];
+      executionContextTreeView.EndUpdate();
+    }
+
+    private void AddExecutionContext(IExecutionContext executionContext, TreeNodeCollection nodes) {
+      ExecutionContext context = executionContext as ExecutionContext;
+      StringBuilder name = new StringBuilder();
+      if (context != null && context.Operator != null)
+        name.Append(context.Operator.Name);
+      else
+        name.Append("<Context>");
+      name.Append("@").Append(executionContext.Scope.Name);
+      TreeNode node = nodes.Add(name.ToString());
+      node.Tag = executionContext;
+      node.ImageIndex = 0;
+      node.SelectedImageIndex = 0;
+      foreach (var param in executionContext.Parameters) {
+        TreeNode paramNode = node.Nodes.Add(string.Format("{0}={1}",
+          param.Name, GetParameterValue(param, executionContext)));
+        paramNode.Tag = param;
+        executionContextTreeView.ImageList.Images.Add(param.ItemImage ?? VS2008ImageLibrary.Nothing);
+        paramNode.ImageIndex = executionContextTreeView.ImageList.Images.Count - 1;
+        paramNode.SelectedImageIndex = paramNode.ImageIndex;
+        paramNode.ToolTipText = string.Format("{0}{1}{1}{2}",
+          Utils.TypeName(param), Environment.NewLine,
+          Utils.Wrap(param.Description ?? param.ItemDescription, 60));
+      }
+      if (executionContext.Parent != null)
+        AddExecutionContext(executionContext.Parent, node.Nodes);
+    }
+
+    #region Event Handlers (child controls)
+
+    private void executionContextTreeView_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e) {
+      if (e.Node != null) {
+        IParameter param = e.Node.Tag as IParameter;
+        if (param != null)
+          MainFormManager.MainForm.ShowContent(param);
+      }
+    }
+
+    private void scopeTreeView_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e) {
+      if (e.Node != null) {
+        IItem item = e.Node.Tag as IItem;
+        if (item != null)
+          MainFormManager.MainForm.ShowContent(item);
+      }
+    }
+
+    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;
+        if (context != null && context.Scope != null) {
+          TreeNode scopeNode = FindScopeNode(context.Scope, scopeTreeView.Nodes);
+          if (scopeNode != null) {
+            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);
+            }
+            selectedScopeNode = scopeNode;
+            scopeTreeView.TopNode = scopeNode;
+          }
+        }
+      }
+    }
+
+    private TreeNode FindScopeNode(IScope scope, TreeNodeCollection nodes) {
+      foreach (TreeNode node in nodes) {
+        if (node.Tag == scope) {
+          return node;
+        } else {
+          TreeNode childNode = FindScopeNode(scope, node.Nodes);
+          if (childNode != null)
+            return childNode;
+        }
+      }
+      return null;
+    }
+
+    private void nameTextBox_DoubleClick(object sender, EventArgs e) {
+      if (Content != null && Content.IsAtomic && Content.AtomicOperation.Operator != null)
+        MainFormManager.MainForm.ShowContent(Content.AtomicOperation.Operator);
+    }
+
+    private void ShowValue_Click(object sender, EventArgs e) {
+      if (executionContextTreeView.SelectedNode == null)
+        return;
+      IParameter param = executionContextTreeView.SelectedNode.Tag as IParameter;
+      if (param != null)
+        MainFormManager.MainForm.ShowContent(GetParameterValue(param, Content.ExecutionContext) as IContent);
+    }
+
+    #endregion
+
+    private void executionContextConextMenu_Opening(object sender, System.ComponentModel.CancelEventArgs e) {
+      IParameter param = executionContextTreeView.SelectedNode.Tag as IParameter;
+      if (param != null)
+        showValueToolStripMenuItem.Enabled = GetParameterValue(param, Content.ExecutionContext) is IContent;
+      else
+        e.Cancel = true;
+    }
+
+
+
+  }
+}
Index: /trunk/sources/HeuristicLab.DebugEngine/3.3/OperatorTrace.cs
===================================================================
--- /trunk/sources/HeuristicLab.DebugEngine/3.3/OperatorTrace.cs	(revision 5114)
+++ /trunk/sources/HeuristicLab.DebugEngine/3.3/OperatorTrace.cs	(revision 5114)
@@ -0,0 +1,121 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+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 {
+
+    #region fields
+
+    [Storable]
+    protected Dictionary<IAtomicOperation, IAtomicOperation> parents;
+    #endregion
+
+    #region Constructors & Cloning
+
+    public OperatorTrace() {
+      parents = new Dictionary<IAtomicOperation, IAtomicOperation>();
+    }
+
+    public OperatorTrace(int capacity)
+      : base(capacity) {
+      parents = new Dictionary<IAtomicOperation, IAtomicOperation>();
+    }
+
+    public OperatorTrace(IEnumerable<IOperator> collection)
+      : base(collection) {
+      parents = new Dictionary<IAtomicOperation, IAtomicOperation>();
+    }
+
+    [StorableConstructor]
+    protected OperatorTrace(bool deserializing) : base(deserializing) { }
+
+    protected OperatorTrace(OperatorTrace original, Cloner cloner) {
+      cloner.RegisterClonedObject(original, this);
+      AddRange(original.Select(op => cloner.Clone(op)));
+      parents = original.parents.ToDictionary(kvp => cloner.Clone(kvp.Key), kvp => cloner.Clone(kvp.Value));
+    }
+
+    public object Clone() {
+      return Clone(new Cloner());
+    }
+
+    public virtual IDeepCloneable Clone(Cloner cloner) {
+      return new OperatorTrace(this, cloner);
+    }
+    #endregion
+
+    #region Additional List Modifiers
+
+    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)));
+    }
+
+    #endregion
+
+    #region Parent Tracing
+
+    public virtual void RegisterParenthood(IAtomicOperation parent, IOperation children) {
+      OperationCollection operations = children as OperationCollection;
+      if (operations != null)
+        foreach (var op in operations)
+          RegisterParenthood(parent, op);
+      IAtomicOperation atomicOperation = children as IAtomicOperation;
+      if (atomicOperation != null && atomicOperation.Operator != null && !parents.ContainsKey(atomicOperation))
+        parents[atomicOperation] = parent;
+    }
+
+    public virtual void Reset() {
+      Clear();
+      parents.Clear();
+    }
+
+    public virtual void Regenerate(IAtomicOperation operation) {
+      if (operation == null)
+        return;
+      Stack<IOperator> trace = new Stack<IOperator>();
+      while (operation != null) {
+        trace.Push(operation.Operator);
+        IAtomicOperation parent = null;
+        parents.TryGetValue(operation, out parent);
+        operation = parent;
+      }
+      ReplaceAll(trace);
+    }
+
+    #endregion
+  }
+}
Index: /trunk/sources/HeuristicLab.DebugEngine/3.3/OperatorTraceView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.DebugEngine/3.3/OperatorTraceView.Designer.cs	(revision 5114)
+++ /trunk/sources/HeuristicLab.DebugEngine/3.3/OperatorTraceView.Designer.cs	(revision 5114)
@@ -0,0 +1,108 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.DebugEngine {
+  partial class OperatorTraceView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.components = new System.ComponentModel.Container();
+      this.operatorTraceGroupBox = new System.Windows.Forms.GroupBox();
+      this.listView = new System.Windows.Forms.ListView();
+      this.listViewColumnHeader = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+      this.imageList = new System.Windows.Forms.ImageList(this.components);
+      this.operatorTraceGroupBox.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // operatorTraceGroupBox
+      // 
+      this.operatorTraceGroupBox.Controls.Add(this.listView);
+      this.operatorTraceGroupBox.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.operatorTraceGroupBox.Location = new System.Drawing.Point(0, 0);
+      this.operatorTraceGroupBox.Name = "operatorTraceGroupBox";
+      this.operatorTraceGroupBox.Size = new System.Drawing.Size(152, 489);
+      this.operatorTraceGroupBox.TabIndex = 0;
+      this.operatorTraceGroupBox.TabStop = false;
+      this.operatorTraceGroupBox.Text = "Operator Trace";
+      // 
+      // listView
+      // 
+      this.listView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
+            this.listViewColumnHeader});
+      this.listView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.listView.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None;
+      this.listView.HideSelection = false;
+      this.listView.Location = new System.Drawing.Point(3, 16);
+      this.listView.Name = "listView";
+      this.listView.ShowItemToolTips = true;
+      this.listView.Size = new System.Drawing.Size(146, 470);
+      this.listView.SmallImageList = this.imageList;
+      this.listView.TabIndex = 0;
+      this.listView.UseCompatibleStateImageBehavior = false;
+      this.listView.View = System.Windows.Forms.View.Details;
+      this.listView.ItemActivate += new System.EventHandler(this.listView_ItemActivate);
+      // 
+      // imageList
+      // 
+      this.imageList.ColorDepth = System.Windows.Forms.ColorDepth.Depth8Bit;
+      this.imageList.ImageSize = new System.Drawing.Size(16, 16);
+      this.imageList.TransparentColor = System.Drawing.Color.Transparent;
+      // 
+      // OperatorTraceView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.operatorTraceGroupBox);
+      this.Name = "OperatorTraceView";
+      this.Size = new System.Drawing.Size(152, 489);
+      this.operatorTraceGroupBox.ResumeLayout(false);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.GroupBox operatorTraceGroupBox;
+    private System.Windows.Forms.ListView listView;
+    private System.Windows.Forms.ImageList imageList;
+    private System.Windows.Forms.ColumnHeader listViewColumnHeader;
+  }
+}
Index: /trunk/sources/HeuristicLab.DebugEngine/3.3/OperatorTraceView.cs
===================================================================
--- /trunk/sources/HeuristicLab.DebugEngine/3.3/OperatorTraceView.cs	(revision 5114)
+++ /trunk/sources/HeuristicLab.DebugEngine/3.3/OperatorTraceView.cs	(revision 5114)
@@ -0,0 +1,115 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Windows.Forms;
+using HeuristicLab.Collections;
+using HeuristicLab.Common.Resources;
+using HeuristicLab.Core;
+using HeuristicLab.MainForm;
+using HeuristicLab.MainForm.WindowsForms;
+using HeuristicLab.Operators;
+
+namespace HeuristicLab.DebugEngine {
+
+  [View("Operator Trace View")]
+  [Content(typeof(OperatorTrace), IsDefaultView = true)]
+  public partial class OperatorTraceView : AsynchronousContentView {
+
+    public new OperatorTrace Content {
+      get { return (OperatorTrace)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public OperatorTraceView() {
+      InitializeComponent();
+    }
+
+    protected override void DeregisterContentEvents() {
+      Content.CollectionReset -= Content_CollectionChanged;
+      Content.ItemsAdded -= Content_CollectionChanged;
+      Content.ItemsMoved -= Content_CollectionChanged;
+      Content.ItemsRemoved -= Content_CollectionChanged;
+      Content.ItemsReplaced -= Content_CollectionChanged;
+      base.DeregisterContentEvents();
+    }
+
+    protected override void RegisterContentEvents() {
+      base.RegisterContentEvents();
+      Content.CollectionReset += Content_CollectionChanged;
+      Content.ItemsAdded += Content_CollectionChanged;
+      Content.ItemsMoved += Content_CollectionChanged;
+      Content.ItemsRemoved += Content_CollectionChanged;
+      Content.ItemsReplaced += Content_CollectionChanged;
+    }
+
+    #region Event Handlers (Content)
+    void Content_CollectionChanged(object sender, CollectionItemsChangedEventArgs<Collections.IndexedItem<IOperator>> e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler<CollectionItemsChangedEventArgs<IndexedItem<IOperator>>>(Content_CollectionChanged), sender, e);
+      else
+        UpdateOperatorTrace();
+    }
+    #endregion
+
+    private void UpdateOperatorTrace() {
+      listView.BeginUpdate();
+      listView.Items.Clear();
+      listView.SmallImageList.Images.Clear();
+      listView.SmallImageList.Images.Add(VS2008ImageLibrary.Method);
+      listView.SmallImageList.Images.Add(VS2008ImageLibrary.Module);
+      foreach (var item in Content) {
+        var viewItem = listView.Items.Add(item.Name ?? item.ItemName);
+        viewItem.ToolTipText = string.Format("{0}{1}{1}{2}",
+          Utils.TypeName(item), Environment.NewLine,
+          Utils.Wrap(item.Description, 60));
+        viewItem.Tag = item;
+        viewItem.ImageIndex = item is CombinedOperator ? 1 : 0;
+      }
+      if (listView.Items.Count > 0) {
+        for (int i = 0; i < listView.Columns.Count; i++)
+          listView.Columns[i].AutoResize(ColumnHeaderAutoResizeStyle.ColumnContent);
+      }
+      listView.EndUpdate();
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      if (Content == null) {
+        listView.Items.Clear();
+      } else {
+        UpdateOperatorTrace();
+      }
+    }
+
+    #region Event Handlers (child controls)
+    private void listView_ItemActivate(object sender, EventArgs e) {
+      if (listView.SelectedItems.Count > 0) {
+        IOperator op = listView.SelectedItems[0].Tag as IOperator;
+        if (op != null) {
+          MainFormManager.MainForm.ShowContent(op);
+        }
+      }
+    }
+    #endregion
+  }
+
+}
Index: /trunk/sources/HeuristicLab.DebugEngine/3.3/Properties/AssemblyInfo.frame
===================================================================
--- /trunk/sources/HeuristicLab.DebugEngine/3.3/Properties/AssemblyInfo.frame	(revision 5114)
+++ /trunk/sources/HeuristicLab.DebugEngine/3.3/Properties/AssemblyInfo.frame	(revision 5114)
@@ -0,0 +1,56 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.DebugEngine")]
+[assembly: AssemblyDescription("HeuristicLab engine for debugging")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2010 HEAL")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("34e1ec7e-0124-4f76-b8f8-42b9244d2b09")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers 
+// by using the '*' as shown below:
+[assembly: AssemblyVersion("3.3.0.0")]
+[assembly: AssemblyFileVersion("3.3.2.$WCREV$")]
Index: /trunk/sources/HeuristicLab.DebugEngine/3.3/Utils.cs
===================================================================
--- /trunk/sources/HeuristicLab.DebugEngine/3.3/Utils.cs	(revision 5114)
+++ /trunk/sources/HeuristicLab.DebugEngine/3.3/Utils.cs	(revision 5114)
@@ -0,0 +1,61 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Text;
+using System.Text.RegularExpressions;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Auxiliary;
+
+namespace HeuristicLab.DebugEngine {
+  public static class Utils {
+
+    public static string Name(IAtomicOperation operation) {
+      return string.IsNullOrEmpty(operation.Operator.Name) ? operation.Operator.ItemName : operation.Operator.Name;
+    }
+
+    public static string TypeName(object obj) {
+      if (obj == null)
+        return "null";
+      return TypeNameParser.Parse(obj.GetType().ToString()).GetTypeNameInCode(true);
+    }
+
+    public static string Wrap(string text, int columns) {
+      StringBuilder sb = new StringBuilder();
+      Regex whitespace = new Regex("\\s");
+      int lineLength = 0;
+      foreach (var word in whitespace.Split(text)) {
+        if (lineLength + word.Length < columns) {
+          if (lineLength > 0) {
+            sb.Append(' ');
+            lineLength++;
+          }
+          sb.Append(word);
+          lineLength += word.Length;
+        } else {
+          sb.Append(Environment.NewLine).Append(word);
+          lineLength = word.Length;
+        }
+      }
+      return sb.ToString();
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab/3.3/Files.txt
===================================================================
--- /trunk/sources/HeuristicLab/3.3/Files.txt	(revision 5113)
+++ /trunk/sources/HeuristicLab/3.3/Files.txt	(revision 5114)
@@ -23,4 +23,5 @@
 HeuristicLab.Data\3.3:HeuristicLab.Data-3.3.dll
 HeuristicLab.Data.Views\3.3:HeuristicLab.Data.Views-3.3.dll
+HeuristicLab.DebugEngine\3.3:HeuristicLab.DebugEngine-3.3.dll
 HeuristicLab.Encodings.BinaryVectorEncoding\3.3:HeuristicLab.Encodings.BinaryVectorEncoding-3.3.dll
 HeuristicLab.Encodings.IntegerVectorEncoding\3.3:HeuristicLab.Encodings.IntegerVectorEncoding-3.3.dll
Index: /trunk/sources/HeuristicLab/3.3/Tests/Builder.testsettings
===================================================================
--- /trunk/sources/HeuristicLab/3.3/Tests/Builder.testsettings	(revision 5113)
+++ /trunk/sources/HeuristicLab/3.3/Tests/Builder.testsettings	(revision 5114)
@@ -3,19 +3,21 @@
   <Description>Test settings to run unit tests on the HL build server.</Description>
   <Deployment>
+    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.SharpDevelop-3.1.1.5327.dll" />
     <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Optimization.Views-3.3.dll" />
+    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.WinFormsUI-2.3.1.dll" />
     <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Problems.Knapsack.Views-3.3.dll" />
     <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.CodeEditor-3.3.dll" />
     <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Selection-3.3.dll" />
     <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\ICSharpCode.NRefactory.dll" />
-    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Random-3.3.dll" />
+    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.DebugEngine-3.3.dll" />
     <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Algorithms.EvolutionStrategy-3.3.dll" />
-    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Clients.Common-3.3.dll" />
+    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Problems.VehicleRouting.Views-3.3.dll" />
     <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Persistence-3.3.dll" />
-    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Problems.ExternalEvaluation.GP-3.3.dll" />
+    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.SequentialEngine-3.3.dll" />
     <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Algorithms.DataAnalysis.Views-3.3.dll" />
     <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Problems.DataAnalysis.Classification.Views-3.3.dll" />
+    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\LibSVM-1.6.3.dll" />
     <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Operators.Views.GraphVisualization-3.3.dll" />
     <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.PluginInfrastructure-3.3.dll" />
-    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Analysis.Views-3.3.dll" />
     <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Core.Views-3.3.dll" />
     <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Optimizer-3.3.dll" />
@@ -23,12 +25,11 @@
     <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\WeifenLuo.WinFormsUI.Docking-2.3.1.dll" />
     <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views-3.3.dll" />
-    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Optimization.Operators-3.3.dll" />
     <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Tracing-3.3.dll" />
     <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Encodings.BinaryVectorEncoding-3.3.dll" />
-    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Netron-3.0.2672.12446.dll" />
+    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\Google.ProtocolBuffers-0.9.1.dll" />
+    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.ALGLIB-2.5.0.dll" />
     <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\ICSharpCode.SharpDevelop.Dom.dll" />
     <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Data.Views-3.3.dll" />
     <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\Netron.Diagramming.Core-3.0.2672.12446.dll" />
-    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Operators.Views-3.3.dll" />
     <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Encodings.RealVectorEncoding-3.3.dll" />
     <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Encodings.PermutationEncoding-3.3.dll" />
@@ -36,8 +37,7 @@
     <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.ALGLIB-3.1.0.dll" />
     <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Parameters-3.3.dll" />
-    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.log4net-1.2.10.0.dll" />
-    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\ICSharpCode.TextEditor.dll" />
     <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.ProtobufCS-0.9.1.dll" />
     <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Problems.ArtificialAnt.Views-3.3.dll" />
+    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.MainForm.WindowsForms-3.3.dll" />
     <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Persistence.GUI-3.3.dll" />
     <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Problems.VehicleRouting-3.3.dll" />
@@ -47,10 +47,10 @@
     <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Problems.TestFunctions.Views-3.3.dll" />
     <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Common-3.3.dll" />
-    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Problems.DataAnalysis-3.3.dll" />
-    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.SequentialEngine-3.3.dll" />
+    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Netron-3.0.2672.12446.dll" />
     <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\ICSharpCode.SharpZipLib.dll" />
     <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Problems.ArtificialAnt-3.3.dll" />
     <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm-3.3.dll" />
     <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Operators-3.3.dll" />
+    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\Mono.Cecil.dll" />
     <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Algorithms.SimulatedAnnealing-3.3.dll" />
     <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Algorithms.DataAnalysis-3.3.dll" />
@@ -58,6 +58,6 @@
     <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Problems.OneMax-3.3.dll" />
     <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Core-3.3.dll" />
-    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Problems.ExternalEvaluation-3.3.dll" />
-    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Problems.VehicleRouting.Views-3.3.dll" />
+    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Operators.Views-3.3.dll" />
+    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Problems.TravelingSalesman-3.3.dll" />
     <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Encodings.IntegerVectorEncoding-3.3.dll" />
     <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\log4net.dll" />
@@ -70,20 +70,21 @@
     <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Analysis-3.3.dll" />
     <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Problems.TravelingSalesman.Views-3.3.dll" />
-    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Problems.DataAnalysis.Regression-3.3.dll" />
     <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.MainForm.WindowsForms-3.3_Accessor.dll" />
     <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Parameters.Views-3.3.dll" />
+    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\ICSharpCode.TextEditor.dll" />
     <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.LibSVM-1.6.3.dll" />
-    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.ALGLIB-2.5.0.dll" />
-    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.SharpDevelop-3.1.1.5327.dll" />
-    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.MainForm.WindowsForms-3.3.dll" />
+    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Analysis.Views-3.3.dll" />
+    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Problems.ExternalEvaluation-3.3.dll" />
     <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Problems.ExternalEvaluation.Views-3.3.dll" />
+    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Problems.ExternalEvaluation.GP-3.3.dll" />
     <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Problems.DataAnalysis.Views-3.3.dll" />
-    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Problems.TravelingSalesman-3.3.dll" />
-    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\LibSVM-1.6.3.dll" />
-    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.WinFormsUI-2.3.1.dll" />
+    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.log4net-1.2.10.0.dll" />
+    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Problems.DataAnalysis-3.3.dll" />
+    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Problems.DataAnalysis.Regression-3.3.dll" />
     <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Problems.Knapsack-3.3.dll" />
     <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Optimization-3.3.dll" />
-    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\Mono.Cecil.dll" />
-    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\Google.ProtocolBuffers-0.9.1.dll" />
+    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Random-3.3.dll" />
+    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Clients.Common-3.3.dll" />
+    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Data-3.3.dll" />
     <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Problems.ExternalEvaluation.GP.Views-3.3.dll" />
     <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Algorithms.GeneticAlgorithm-3.3.dll" />
@@ -91,5 +92,5 @@
     <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Problems.OneMax.Views-3.3.dll" />
     <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab-3.3.Tests.dll" />
-    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Data-3.3.dll" />
+    <DeploymentItem filename="HeuristicLab\3.3\Tests\bin\Release\HeuristicLab.Optimization.Operators-3.3.dll" />
   </Deployment>
   <Execution>
Index: /trunk/sources/HeuristicLab/3.3/Tests/HeuristicLab-3.3.Tests.csproj
===================================================================
--- /trunk/sources/HeuristicLab/3.3/Tests/HeuristicLab-3.3.Tests.csproj	(revision 5113)
+++ /trunk/sources/HeuristicLab/3.3/Tests/HeuristicLab-3.3.Tests.csproj	(revision 5114)
@@ -207,4 +207,8 @@
       <Name>HeuristicLab.Data-3.3</Name>
     </ProjectReference>
+    <ProjectReference Include="..\..\..\HeuristicLab.DebugEngine\3.3\HeuristicLab.DebugEngine-3.3.csproj">
+      <Project>{49F28045-7B5F-411B-8D59-16C846FA26E0}</Project>
+      <Name>HeuristicLab.DebugEngine-3.3</Name>
+    </ProjectReference>
     <ProjectReference Include="..\..\..\HeuristicLab.Encodings.BinaryVectorEncoding\3.3\HeuristicLab.Encodings.BinaryVectorEncoding-3.3.csproj">
       <Project>{66D249C3-A01D-42A8-82A2-919BC8EC3D83}</Project>
