Index: branches/ParallelEngine/HeuristicLab.Common/3.3/HeuristicLab.Common-3.3.csproj
===================================================================
--- branches/ParallelEngine/HeuristicLab.Common/3.3/HeuristicLab.Common-3.3.csproj	(revision 5182)
+++ branches/ParallelEngine/HeuristicLab.Common/3.3/HeuristicLab.Common-3.3.csproj	(revision 5183)
@@ -12,5 +12,6 @@
     <AssemblyName>HeuristicLab.Common-3.3</AssemblyName>
     <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
-    <TargetFrameworkProfile></TargetFrameworkProfile>
+    <TargetFrameworkProfile>
+    </TargetFrameworkProfile>
     <FileAlignment>512</FileAlignment>
     <SignAssembly>true</SignAssembly>
Index: branches/ParallelEngine/HeuristicLab.Core/3.3/Interfaces/IOperator.cs
===================================================================
--- branches/ParallelEngine/HeuristicLab.Core/3.3/Interfaces/IOperator.cs	(revision 5182)
+++ branches/ParallelEngine/HeuristicLab.Core/3.3/Interfaces/IOperator.cs	(revision 5183)
@@ -24,31 +24,13 @@
 namespace HeuristicLab.Core {
   /// <summary>
-  /// Interface to represent an operator (e.g. GreaterThanComparator,...), 
-  /// a basic instruction of an algorithm.
+  /// Interface to represent an operator.
   /// </summary>
   public interface IOperator : IParameterizedNamedItem {
-    /// <summary>
-    /// Gets or sets a boolean value whether the engine should stop here during the run.
-    /// </summary>
     bool Breakpoint { get; set; }
 
-    /// <summary>
-    /// Executes the current instance on the specified <paramref name="scope"/>.
-    /// </summary>
-    /// <param name="scope">The scope where to execute the current instance.</param>
-    /// <returns>The next operation.</returns>
     IOperation Execute(IExecutionContext context);
-    /// <summary>
-    /// Aborts the current operator.
-    /// </summary>
     void Abort();
 
-    /// <summary>
-    /// Occurs when the breakpoint flag of the current instance was changed.
-    /// </summary>
-    event EventHandler BreakpointChanged; 
-    /// <summary>
-    /// Occurs when the current instance is executed.
-    /// </summary>
+    event EventHandler BreakpointChanged;
     event EventHandler Executed;
   }
Index: branches/ParallelEngine/HeuristicLab.Operators/3.3/Operator.cs
===================================================================
--- branches/ParallelEngine/HeuristicLab.Operators/3.3/Operator.cs	(revision 5182)
+++ branches/ParallelEngine/HeuristicLab.Operators/3.3/Operator.cs	(revision 5183)
@@ -22,4 +22,5 @@
 using System;
 using System.Drawing;
+using System.Threading;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
@@ -28,5 +29,5 @@
 namespace HeuristicLab.Operators {
   /// <summary>
-  /// The base class for all operators.
+  /// Base class for operators.
   /// </summary>
   [Item("Operator", "Base class for operators.")]
@@ -43,21 +44,15 @@
     }
 
-    [Storable]
-    private IExecutionContext executionContext;
+    private Lazy<ThreadLocal<IExecutionContext>> executionContexts;
     protected IExecutionContext ExecutionContext {
-      get { return executionContext; }
+      get { return executionContexts.Value.Value; }
       private set {
-        if (value != executionContext) {
-          executionContext = value;
-          OnExecutionContextChanged();
+        if (value != executionContexts.Value.Value) {
+          executionContexts.Value.Value = value;
         }
       }
     }
 
-    /// <summary>
-    /// Flag whether the current instance has been canceled.
-    /// </summary>
     private bool canceled;
-    /// <inheritdoc/>
     protected bool Canceled {
       get { return canceled; }
@@ -72,6 +67,4 @@
     [Storable]
     private bool breakpoint;
-    /// <inheritdoc/>
-    /// <remarks>Calls <see cref="OnBreakpointChanged"/> in the setter.</remarks>
     public bool Breakpoint {
       get { return breakpoint; }
@@ -86,17 +79,18 @@
 
     [StorableConstructor]
-    protected Operator(bool deserializing) : base(deserializing) { }
+    protected Operator(bool deserializing)
+      : base(deserializing) {
+      executionContexts = new Lazy<ThreadLocal<IExecutionContext>>(() => { return new ThreadLocal<IExecutionContext>(); }, LazyThreadSafetyMode.ExecutionAndPublication);
+      canceled = false;
+    }
     protected Operator(Operator original, Cloner cloner)
       : base(original, cloner) {
+      executionContexts = new Lazy<ThreadLocal<IExecutionContext>>(() => { return new ThreadLocal<IExecutionContext>(); }, LazyThreadSafetyMode.ExecutionAndPublication);
       this.canceled = original.canceled;
       this.breakpoint = original.breakpoint;
-      this.executionContext = cloner.Clone<IExecutionContext>(original.executionContext);
     }
-    /// <summary>
-    /// Initializes a new instance of <see cref="OperatorBase"/> setting the breakpoint flag and 
-    /// the canceled flag to <c>false</c> and the name of the operator to the type name. 
-    /// </summary>
     protected Operator()
       : base() {
+      executionContexts = new Lazy<ThreadLocal<IExecutionContext>>(() => { return new ThreadLocal<IExecutionContext>(); }, LazyThreadSafetyMode.ExecutionAndPublication);
       canceled = false;
       breakpoint = false;
@@ -104,4 +98,5 @@
     protected Operator(string name)
       : base(name) {
+      executionContexts = new Lazy<ThreadLocal<IExecutionContext>>(() => { return new ThreadLocal<IExecutionContext>(); }, LazyThreadSafetyMode.ExecutionAndPublication);
       canceled = false;
       breakpoint = false;
@@ -109,4 +104,5 @@
     protected Operator(string name, ParameterCollection parameters)
       : base(name, parameters) {
+      executionContexts = new Lazy<ThreadLocal<IExecutionContext>>(() => { return new ThreadLocal<IExecutionContext>(); }, LazyThreadSafetyMode.ExecutionAndPublication);
       canceled = false;
       breakpoint = false;
@@ -114,4 +110,5 @@
     protected Operator(string name, string description)
       : base(name, description) {
+      executionContexts = new Lazy<ThreadLocal<IExecutionContext>>(() => { return new ThreadLocal<IExecutionContext>(); }, LazyThreadSafetyMode.ExecutionAndPublication);
       canceled = false;
       breakpoint = false;
@@ -119,9 +116,9 @@
     protected Operator(string name, string description, ParameterCollection parameters)
       : base(name, description, parameters) {
+      executionContexts = new Lazy<ThreadLocal<IExecutionContext>>(() => { return new ThreadLocal<IExecutionContext>(); }, LazyThreadSafetyMode.ExecutionAndPublication);
       canceled = false;
       breakpoint = false;
     }
 
-    /// <inheritdoc/>
     public virtual IOperation Execute(IExecutionContext context) {
       try {
@@ -140,23 +137,11 @@
       }
     }
-    /// <inheritdoc/>
-    /// <remarks>Sets property <see cref="Canceled"/> to <c>true</c>.</remarks>
     public void Abort() {
       Canceled = true;
     }
-    /// <summary>
-    /// Performs the current operator on the specified <paramref name="scope"/>.
-    /// </summary>
-    /// <param name="scope">The scope where to execute the operator</param>
-    /// <returns><c>null</c>.</returns>
     public abstract IOperation Apply();
 
-    protected virtual void OnExecutionContextChanged() { }
     protected virtual void OnCanceledChanged() { }
-    /// <inheritdoc/>
     public event EventHandler BreakpointChanged;
-    /// <summary>
-    /// Fires a new <c>BreakpointChanged</c> event.
-    /// </summary>
     protected virtual void OnBreakpointChanged() {
       if (BreakpointChanged != null) {
@@ -164,9 +149,5 @@
       }
     }
-    /// <inheritdoc/>
     public event EventHandler Executed;
-    /// <summary>
-    /// Fires a new <c>Executed</c> event.
-    /// </summary>
     protected virtual void OnExecuted() {
       if (Executed != null) {
Index: branches/ParallelEngine/HeuristicLab.Parameters/3.3/Parameter.cs
===================================================================
--- branches/ParallelEngine/HeuristicLab.Parameters/3.3/Parameter.cs	(revision 5182)
+++ branches/ParallelEngine/HeuristicLab.Parameters/3.3/Parameter.cs	(revision 5183)
@@ -22,9 +22,8 @@
 using System;
 using System.Drawing;
+using System.Threading;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using System.Collections.Generic;
-using System.Threading;
 
 namespace HeuristicLab.Parameters {
@@ -55,55 +54,23 @@
       get { return dataType; }
     }
-    protected Dictionary<int, IItem> cachedActualValues;
+
+    private Lazy<ThreadLocal<IItem>> cachedActualValues;
     public IItem ActualValue {
       get {
-        int id = Thread.CurrentThread.ManagedThreadId;
-        IItem value = null;
-        lock (cachedActualValues) {
-          cachedActualValues.TryGetValue(id, out value);
-        }
-        if (value == null) {
-          value = GetActualValue();
-          lock (cachedActualValues) {
-            if (cachedActualValues.ContainsKey(id)) cachedActualValues[id] = value;
-            else cachedActualValues.Add(id, value);
-          }
-        }
-        return value;
+        if (cachedActualValues.Value.Value == null) cachedActualValues.Value.Value = GetActualValue();
+        return cachedActualValues.Value.Value;
       }
       set {
-        int id = Thread.CurrentThread.ManagedThreadId;
-        lock (cachedActualValues) {
-          if (cachedActualValues.ContainsKey(id)) cachedActualValues[id] = value;
-          else cachedActualValues.Add(id, value);
-        }
+        cachedActualValues.Value.Value = value;
         SetActualValue(value);
       }
     }
-    private Dictionary<int, IExecutionContext> executionContexts;
+    private Lazy<ThreadLocal<IExecutionContext>> executionContexts;
     public IExecutionContext ExecutionContext {
-      get {
-        int id = Thread.CurrentThread.ManagedThreadId;
-        IExecutionContext context = null;
-        lock (executionContexts) {
-          executionContexts.TryGetValue(id, out context);
-        }
-        return context;
-      }
+      get { return executionContexts.Value.Value; }
       set {
-        IExecutionContext context = null;
-        int id = Thread.CurrentThread.ManagedThreadId;
-        lock (executionContexts) {
-          executionContexts.TryGetValue(id, out context);
-          if (value != context) {
-            if (context == null) executionContexts.Add(id, value);
-            else if (value == null) {
-              executionContexts.Remove(id);
-              lock (cachedActualValues) cachedActualValues.Remove(id);
-            } else {
-              executionContexts[id] = value;
-              lock (cachedActualValues) cachedActualValues.Remove(id);
-            }
-          }
+        if (value != executionContexts.Value.Value) {
+          executionContexts.Value.Value = value;
+          cachedActualValues.Value.Value = null;
         }
       }
@@ -111,22 +78,20 @@
 
     [StorableConstructor]
-    protected Parameter(bool deserializing) : base(deserializing) {
-      cachedActualValues = new Dictionary<int, IItem>();
-      executionContexts = new Dictionary<int, IExecutionContext>();
+    protected Parameter(bool deserializing)
+      : base(deserializing) {
+      cachedActualValues = new Lazy<ThreadLocal<IItem>>(() => { return new ThreadLocal<IItem>(); }, LazyThreadSafetyMode.ExecutionAndPublication);
+      executionContexts = new Lazy<ThreadLocal<IExecutionContext>>(() => { return new ThreadLocal<IExecutionContext>(); }, LazyThreadSafetyMode.ExecutionAndPublication);
     }
     protected Parameter(Parameter original, Cloner cloner)
       : base(original, cloner) {
       dataType = original.dataType;
-      cachedActualValues = new Dictionary<int, IItem>();
-      executionContexts = new Dictionary<int, IExecutionContext>();
-      foreach (var item in original.executionContexts) {
-        executionContexts.Add(item.Key, cloner.Clone(item.Value));
-      }
+      cachedActualValues = new Lazy<ThreadLocal<IItem>>(() => { return new ThreadLocal<IItem>(); }, LazyThreadSafetyMode.ExecutionAndPublication);
+      executionContexts = new Lazy<ThreadLocal<IExecutionContext>>(() => { return new ThreadLocal<IExecutionContext>(); }, LazyThreadSafetyMode.ExecutionAndPublication);
     }
     protected Parameter()
       : base("Anonymous") {
       dataType = typeof(IItem);
-      cachedActualValues = new Dictionary<int, IItem>();
-      executionContexts = new Dictionary<int, IExecutionContext>();
+      cachedActualValues = new Lazy<ThreadLocal<IItem>>(() => { return new ThreadLocal<IItem>(); }, LazyThreadSafetyMode.ExecutionAndPublication);
+      executionContexts = new Lazy<ThreadLocal<IExecutionContext>>(() => { return new ThreadLocal<IExecutionContext>(); }, LazyThreadSafetyMode.ExecutionAndPublication);
     }
     protected Parameter(string name, Type dataType)
@@ -134,6 +99,6 @@
       if (dataType == null) throw new ArgumentNullException();
       this.dataType = dataType;
-      cachedActualValues = new Dictionary<int, IItem>();
-      executionContexts = new Dictionary<int, IExecutionContext>();
+      cachedActualValues = new Lazy<ThreadLocal<IItem>>(() => { return new ThreadLocal<IItem>(); }, LazyThreadSafetyMode.ExecutionAndPublication);
+      executionContexts = new Lazy<ThreadLocal<IExecutionContext>>(() => { return new ThreadLocal<IExecutionContext>(); }, LazyThreadSafetyMode.ExecutionAndPublication);
     }
     protected Parameter(string name, string description, Type dataType)
@@ -141,6 +106,6 @@
       if (dataType == null) throw new ArgumentNullException();
       this.dataType = dataType;
-      cachedActualValues = new Dictionary<int, IItem>();
-      executionContexts = new Dictionary<int, IExecutionContext>();
+      cachedActualValues = new Lazy<ThreadLocal<IItem>>(() => { return new ThreadLocal<IItem>(); }, LazyThreadSafetyMode.ExecutionAndPublication);
+      executionContexts = new Lazy<ThreadLocal<IExecutionContext>>(() => { return new ThreadLocal<IExecutionContext>(); }, LazyThreadSafetyMode.ExecutionAndPublication);
     }
 
