Index: /branches/ParallelEngine/HeuristicLab.Algorithms.EvolutionStrategy/3.3/EvolutionStrategyMainLoop.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Algorithms.EvolutionStrategy/3.3/EvolutionStrategyMainLoop.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Algorithms.EvolutionStrategy/3.3/EvolutionStrategyMainLoop.cs	(revision 5177)
@@ -274,8 +274,8 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       if (MutatorParameter.ActualValue == null)
         return null;
-      return base.Apply();
+      return base.Apply(context);
     }
   }
Index: /branches/ParallelEngine/HeuristicLab.Algorithms.GeneticAlgorithm/3.3/GeneticAlgorithmMainLoop.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Algorithms.GeneticAlgorithm/3.3/GeneticAlgorithmMainLoop.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Algorithms.GeneticAlgorithm/3.3/GeneticAlgorithmMainLoop.cs	(revision 5177)
@@ -219,8 +219,8 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       if (CrossoverParameter.ActualValue == null)
         return null;
-      return base.Apply();
+      return base.Apply(context);
     }
   }
Index: /branches/ParallelEngine/HeuristicLab.Algorithms.GeneticAlgorithm/3.3/IslandGeneticAlgorithmMainLoop.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Algorithms.GeneticAlgorithm/3.3/IslandGeneticAlgorithmMainLoop.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Algorithms.GeneticAlgorithm/3.3/IslandGeneticAlgorithmMainLoop.cs	(revision 5177)
@@ -330,8 +330,8 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       if (CrossoverParameter.ActualValue == null)
         return null;
-      return base.Apply();
+      return base.Apply(context);
     }
   }
Index: /branches/ParallelEngine/HeuristicLab.Algorithms.LocalSearch/3.3/LocalSearchMainLoop.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Algorithms.LocalSearch/3.3/LocalSearchMainLoop.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Algorithms.LocalSearch/3.3/LocalSearchMainLoop.cs	(revision 5177)
@@ -246,8 +246,8 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       if (MoveGeneratorParameter.ActualValue == null || MoveEvaluatorParameter.ActualValue == null || MoveMakerParameter.ActualValue == null)
         return null;
-      return base.Apply();
+      return base.Apply(context);
     }
   }
Index: /branches/ParallelEngine/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm/3.3/IslandOffspringSelectionGeneticAlgorithmMainLoop.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm/3.3/IslandOffspringSelectionGeneticAlgorithmMainLoop.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm/3.3/IslandOffspringSelectionGeneticAlgorithmMainLoop.cs	(revision 5177)
@@ -437,8 +437,8 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       if (CrossoverParameter.ActualValue == null)
         return null;
-      return base.Apply();
+      return base.Apply(context);
     }
   }
Index: /branches/ParallelEngine/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm/3.3/OffspringSelectionGeneticAlgorithmMainOperator.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm/3.3/OffspringSelectionGeneticAlgorithmMainOperator.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm/3.3/OffspringSelectionGeneticAlgorithmMainOperator.cs	(revision 5177)
@@ -267,8 +267,8 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       if (CrossoverParameter.ActualValue == null)
         return null;
-      return base.Apply();
+      return base.Apply(context);
     }
   }
Index: /branches/ParallelEngine/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm/3.3/SASEGASAMainLoop.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm/3.3/SASEGASAMainLoop.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm/3.3/SASEGASAMainLoop.cs	(revision 5177)
@@ -447,8 +447,8 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       if (CrossoverParameter.ActualValue == null)
         return null;
-      return base.Apply();
+      return base.Apply(context);
     }
   }
Index: /branches/ParallelEngine/HeuristicLab.Algorithms.SimulatedAnnealing/3.3/SimulatedAnnealingMainLoop.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Algorithms.SimulatedAnnealing/3.3/SimulatedAnnealingMainLoop.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Algorithms.SimulatedAnnealing/3.3/SimulatedAnnealingMainLoop.cs	(revision 5177)
@@ -220,8 +220,8 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       if (MoveGeneratorParameter.ActualValue == null || MoveEvaluatorParameter.ActualValue == null || MoveMakerParameter.ActualValue == null)
         return null;
-      return base.Apply();
+      return base.Apply(context);
     }
   }
Index: /branches/ParallelEngine/HeuristicLab.Algorithms.TabuSearch/3.3/TabuListCreator.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Algorithms.TabuSearch/3.3/TabuListCreator.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Algorithms.TabuSearch/3.3/TabuListCreator.cs	(revision 5177)
@@ -55,5 +55,5 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       IVariable var;
       CurrentScope.Variables.TryGetValue(TabuListParameter.ActualName, out var);
@@ -62,5 +62,5 @@
       else
         CurrentScope.Variables.Add(new Variable(TabuListParameter.ActualName, (IItem)TabuListParameter.ActualValue.Clone()));
-      return base.Apply();
+      return base.Apply(context);
     }
   }
Index: /branches/ParallelEngine/HeuristicLab.Algorithms.TabuSearch/3.3/TabuNeighborhoodAnalyzer.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Algorithms.TabuSearch/3.3/TabuNeighborhoodAnalyzer.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Algorithms.TabuSearch/3.3/TabuNeighborhoodAnalyzer.cs	(revision 5177)
@@ -58,5 +58,5 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       ItemArray<BoolValue> tabu = IsTabuParameter.ActualValue;
       if (tabu.Length > 0) {
@@ -77,5 +77,5 @@
         }
       }
-      return base.Apply();
+      return base.Apply(context);
     }
   }
Index: /branches/ParallelEngine/HeuristicLab.Algorithms.TabuSearch/3.3/TabuSearchMainLoop.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Algorithms.TabuSearch/3.3/TabuSearchMainLoop.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Algorithms.TabuSearch/3.3/TabuSearchMainLoop.cs	(revision 5177)
@@ -295,9 +295,9 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       if (MoveGeneratorParameter.ActualValue == null || MoveEvaluatorParameter.ActualValue == null || MoveMakerParameter.ActualValue == null
         || TabuCheckerParameter.ActualValue == null || TabuMakerParameter.ActualValue == null)
         return null;
-      return base.Apply();
+      return base.Apply(context);
     }
   }
Index: /branches/ParallelEngine/HeuristicLab.Analysis/3.3/AlleleFrequencyAnalysis/AlleleFrequencyAnalyzer.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Analysis/3.3/AlleleFrequencyAnalysis/AlleleFrequencyAnalyzer.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Analysis/3.3/AlleleFrequencyAnalysis/AlleleFrequencyAnalyzer.cs	(revision 5177)
@@ -88,5 +88,5 @@
     #endregion
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       int updateInterval = UpdateIntervalParameter.Value.Value;
       IntValue updateCounter = UpdateCounterParameter.ActualValue;
@@ -238,5 +238,5 @@
           ((DoubleValue)results["Lost Alleles of Best Known Solution"].Value).Value = lostRelevantAllelesCount;
       }
-      return base.Apply();
+      return base.Apply(context);
     }
 
Index: /branches/ParallelEngine/HeuristicLab.Analysis/3.3/BestScopeSolutionAnalyzer.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Analysis/3.3/BestScopeSolutionAnalyzer.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Analysis/3.3/BestScopeSolutionAnalyzer.cs	(revision 5177)
@@ -74,5 +74,5 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       ItemArray<DoubleValue> qualities = QualityParameter.ActualValue;
       ResultCollection results = ResultsParameter.ActualValue;
@@ -85,5 +85,5 @@
       else i = qualities.Select((x, index) => new { index, x.Value }).OrderByDescending(x => x.Value).First().index;
       
-      IEnumerable<IScope> scopes = new IScope[] { ExecutionContext.Scope };
+      IEnumerable<IScope> scopes = new IScope[] { context.Scope };
       for (int j = 0; j < QualityParameter.Depth; j++)
         scopes = scopes.Select(x => (IEnumerable<IScope>)x.SubScopes).Aggregate((a, b) => a.Concat(b));
@@ -115,5 +115,5 @@
       }
 
-      return base.Apply();
+      return base.Apply(context);
     }
   }
Index: /branches/ParallelEngine/HeuristicLab.Analysis/3.3/DataVisualization/DataTableValuesCollector.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Analysis/3.3/DataVisualization/DataTableValuesCollector.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Analysis/3.3/DataVisualization/DataTableValuesCollector.cs	(revision 5177)
@@ -53,5 +53,5 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       DataTable table = DataTableParameter.ActualValue;
       if (table == null) {
@@ -96,5 +96,5 @@
         }
       }
-      return base.Apply();
+      return base.Apply(context);
     }
 
Index: /branches/ParallelEngine/HeuristicLab.Analysis/3.3/MultiAnalyzer.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Analysis/3.3/MultiAnalyzer.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Analysis/3.3/MultiAnalyzer.cs	(revision 5177)
@@ -66,5 +66,5 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       IntValue interval = UpdateIntervalParameter.ActualValue;
       if (interval == null) interval = new IntValue(1);
@@ -80,9 +80,9 @@
         OperationCollection next = new OperationCollection();
         foreach (IndexedItem<IAnalyzer> item in Operators.CheckedItems)
-          next.Add(ExecutionContext.CreateOperation(item.Value));
-        next.Add(base.Apply());
+          next.Add(context.CreateOperation(item.Value));
+        next.Add(base.Apply(context));
         return next;
       } else {
-        return base.Apply();
+        return base.Apply(context);
       }
     }
Index: /branches/ParallelEngine/HeuristicLab.Analysis/3.3/MultiObjective/ParetoFrontAnalyzer.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Analysis/3.3/MultiObjective/ParetoFrontAnalyzer.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Analysis/3.3/MultiObjective/ParetoFrontAnalyzer.cs	(revision 5177)
@@ -26,12 +26,12 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       ItemArray<DoubleArray> qualities = QualitiesParameter.ActualValue;
       ResultCollection results = ResultsParameter.ActualValue;
-      Analyze(qualities, results);
-      return base.Apply();
+      Analyze(context, qualities, results);
+      return base.Apply(context);
     }
 
-    protected abstract void Analyze(ItemArray<DoubleArray> qualities, ResultCollection results);
+    protected abstract void Analyze(IExecutionContext context, ItemArray<DoubleArray> qualities, ResultCollection results);
   }
 }
Index: /branches/ParallelEngine/HeuristicLab.Analysis/3.3/MultiObjective/RankBasedParetoFrontAnalyzer.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Analysis/3.3/MultiObjective/RankBasedParetoFrontAnalyzer.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Analysis/3.3/MultiObjective/RankBasedParetoFrontAnalyzer.cs	(revision 5177)
@@ -44,5 +44,5 @@
     }
 
-    protected override void Analyze(ItemArray<DoubleArray> qualities, ResultCollection results) {
+    protected override void Analyze(IExecutionContext context, ItemArray<DoubleArray> qualities, ResultCollection results) {
       ItemArray<IntValue> ranks = RankParameter.ActualValue;
 
@@ -61,5 +61,5 @@
             front[counter, k] = qualities[i][k];
           if (populationLevel) {
-            paretoArchive[counter] = (IScope)ExecutionContext.Scope.SubScopes[i].Clone();
+            paretoArchive[counter] = (IScope)context.Scope.SubScopes[i].Clone();
           }
           counter++;
Index: /branches/ParallelEngine/HeuristicLab.Analysis/3.3/PopulationDiversityAnalysis/PopulationDiversityAnalyzer.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Analysis/3.3/PopulationDiversityAnalysis/PopulationDiversityAnalyzer.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Analysis/3.3/PopulationDiversityAnalysis/PopulationDiversityAnalyzer.cs	(revision 5177)
@@ -73,5 +73,5 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       int updateInterval = UpdateIntervalParameter.Value.Value;
       IntValue updateCounter = UpdateCounterParameter.ActualValue;
@@ -230,5 +230,5 @@
         }
       }
-      return base.Apply();
+      return base.Apply(context);
     }
 
Index: /branches/ParallelEngine/HeuristicLab.Analysis/3.3/QualityAnalysis/BestAverageWorstQualityCalculator.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Analysis/3.3/QualityAnalysis/BestAverageWorstQualityCalculator.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Analysis/3.3/QualityAnalysis/BestAverageWorstQualityCalculator.cs	(revision 5177)
@@ -68,5 +68,5 @@
 
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       ItemArray<DoubleValue> qualities = QualityParameter.ActualValue;
       bool maximization = MaximizationParameter.ActualValue.Value;
@@ -95,5 +95,5 @@
         else worst.Value = min;
       }
-      return base.Apply();
+      return base.Apply(context);
     }
   }
Index: /branches/ParallelEngine/HeuristicLab.Analysis/3.3/QualityAnalysis/BestQualityMemorizer.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Analysis/3.3/QualityAnalysis/BestQualityMemorizer.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Analysis/3.3/QualityAnalysis/BestQualityMemorizer.cs	(revision 5177)
@@ -59,5 +59,5 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       ItemArray<DoubleValue> qualities = QualityParameter.ActualValue;
       bool maximization = MaximizationParameter.ActualValue.Value;
@@ -70,5 +70,5 @@
       if (best == null) BestQualityParameter.ActualValue = new DoubleValue(max);
       else best.Value = max;
-      return base.Apply();
+      return base.Apply(context);
     }
 
Index: /branches/ParallelEngine/HeuristicLab.Analysis/3.3/QualityAnalysis/QualityDifferenceCalculator.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Analysis/3.3/QualityAnalysis/QualityDifferenceCalculator.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Analysis/3.3/QualityAnalysis/QualityDifferenceCalculator.cs	(revision 5177)
@@ -63,5 +63,5 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       DoubleValue first = FirstQualityParameter.ActualValue;
       DoubleValue second = SecondQualityParameter.ActualValue;
@@ -76,5 +76,5 @@
         else RelativeDifferenceParameter.ActualValue.Value = relative;
       }
-      return base.Apply();
+      return base.Apply(context);
     }
   }
Index: /branches/ParallelEngine/HeuristicLab.Analysis/3.3/ValueAnalysis/MinAverageMaxValueCalculator.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Analysis/3.3/ValueAnalysis/MinAverageMaxValueCalculator.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Analysis/3.3/ValueAnalysis/MinAverageMaxValueCalculator.cs	(revision 5177)
@@ -63,5 +63,5 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       ItemArray<DoubleValue> values = ValueParameter.ActualValue;
 
@@ -84,5 +84,5 @@
         else maxValue.Value = max;
       }
-      return base.Apply();
+      return base.Apply(context);
     }
   }
Index: /branches/ParallelEngine/HeuristicLab.Core/3.3/Interfaces/IOperator.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Core/3.3/Interfaces/IOperator.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Core/3.3/Interfaces/IOperator.cs	(revision 5177)
@@ -23,32 +23,11 @@
 
 namespace HeuristicLab.Core {
-  /// <summary>
-  /// Interface to represent an operator (e.g. GreaterThanComparator,...), 
-  /// a basic instruction of an algorithm.
-  /// </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 Executed;
   }
Index: /branches/ParallelEngine/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/BinaryVectorCreator.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/BinaryVectorCreator.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/BinaryVectorCreator.cs	(revision 5177)
@@ -58,7 +58,7 @@
     }
 
-    public sealed override IOperation Apply() {
+    public sealed override IOperation Apply(IExecutionContext context) {
       BinaryVectorParameter.ActualValue = Create(RandomParameter.ActualValue, LengthParameter.ActualValue);
-      return base.Apply();
+      return base.Apply(context);
     }
 
Index: /branches/ParallelEngine/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/BinaryVectorCrossover.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/BinaryVectorCrossover.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/BinaryVectorCrossover.cs	(revision 5177)
@@ -59,7 +59,7 @@
     }
 
-    public sealed override IOperation Apply() {
+    public sealed override IOperation Apply(IExecutionContext context) {
       ChildParameter.ActualValue = Cross(RandomParameter.ActualValue, ParentsParameter.ActualValue);
-      return base.Apply();
+      return base.Apply(context);
     }
 
Index: /branches/ParallelEngine/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/BinaryVectorManipulator.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/BinaryVectorManipulator.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/BinaryVectorManipulator.cs	(revision 5177)
@@ -53,7 +53,7 @@
     }
 
-    public sealed override IOperation Apply() {
+    public sealed override IOperation Apply(IExecutionContext context) {
       Manipulate(RandomParameter.ActualValue, BinaryVectorParameter.ActualValue);
-      return base.Apply();
+      return base.Apply(context);
     }
 
Index: /branches/ParallelEngine/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/Crossovers/MultiBinaryVectorCrossover.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/Crossovers/MultiBinaryVectorCrossover.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/Crossovers/MultiBinaryVectorCrossover.cs	(revision 5177)
@@ -90,7 +90,7 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       if (Operators.Count == 0) throw new InvalidOperationException(Name + ": Please add at least one binary vector crossover to choose from.");
-      return base.Apply();
+      return base.Apply(context);
     }
   }
Index: /branches/ParallelEngine/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/Moves/OneBitflipMove/OneBitflipMoveGenerator.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/Moves/OneBitflipMove/OneBitflipMoveGenerator.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/Moves/OneBitflipMove/OneBitflipMoveGenerator.cs	(revision 5177)
@@ -54,5 +54,5 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       BinaryVector v = BinaryVectorParameter.ActualValue;
       OneBitflipMove[] moves = GenerateMoves(v);
@@ -63,5 +63,5 @@
       }
       CurrentScopeParameter.ActualValue.SubScopes.AddRange(moveScopes);
-      return base.Apply();
+      return base.Apply(context);
     }
 
Index: /branches/ParallelEngine/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/Moves/OneBitflipMove/OneBitflipMoveMaker.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/Moves/OneBitflipMove/OneBitflipMoveMaker.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/Moves/OneBitflipMove/OneBitflipMoveMaker.cs	(revision 5177)
@@ -63,5 +63,5 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       OneBitflipMove move = OneBitflipMoveParameter.ActualValue;
       BinaryVector binaryVector = BinaryVectorParameter.ActualValue;
@@ -73,5 +73,5 @@
       quality.Value = moveQuality.Value;
 
-      return base.Apply();
+      return base.Apply(context);
     }
   }
Index: /branches/ParallelEngine/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/Moves/OneBitflipMove/OneBitflipMoveTabuChecker.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/Moves/OneBitflipMove/OneBitflipMoveTabuChecker.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/Moves/OneBitflipMove/OneBitflipMoveTabuChecker.cs	(revision 5177)
@@ -80,5 +80,5 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       ItemList<IItem> tabuList = TabuListParameter.ActualValue;
       OneBitflipMove move = OneBitflipMoveParameter.ActualValue;
@@ -101,5 +101,5 @@
       }
       MoveTabuParameter.ActualValue = new BoolValue(isTabu);
-      return base.Apply();
+      return base.Apply(context);
     }
   }
Index: /branches/ParallelEngine/HeuristicLab.Encodings.IntegerVectorEncoding/3.3/Crossovers/MultiIntegerVectorCrossover.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Encodings.IntegerVectorEncoding/3.3/Crossovers/MultiIntegerVectorCrossover.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Encodings.IntegerVectorEncoding/3.3/Crossovers/MultiIntegerVectorCrossover.cs	(revision 5177)
@@ -90,7 +90,7 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       if (Operators.Count == 0) throw new InvalidOperationException(Name + ": Please add at least one integer vector crossover to choose from.");
-      return base.Apply();
+      return base.Apply(context);
     }
   }
Index: /branches/ParallelEngine/HeuristicLab.Encodings.IntegerVectorEncoding/3.3/IntegerVectorCreator.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Encodings.IntegerVectorEncoding/3.3/IntegerVectorCreator.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Encodings.IntegerVectorEncoding/3.3/IntegerVectorCreator.cs	(revision 5177)
@@ -66,7 +66,7 @@
     }
 
-    public sealed override IOperation Apply() {
+    public sealed override IOperation Apply(IExecutionContext context) {
       IntegerVectorParameter.ActualValue = Create(RandomParameter.ActualValue, LengthParameter.ActualValue, MinimumParameter.ActualValue, MaximumParameter.ActualValue);
-      return base.Apply();
+      return base.Apply(context);
     }
 
Index: /branches/ParallelEngine/HeuristicLab.Encodings.IntegerVectorEncoding/3.3/IntegerVectorCrossover.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Encodings.IntegerVectorEncoding/3.3/IntegerVectorCrossover.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Encodings.IntegerVectorEncoding/3.3/IntegerVectorCrossover.cs	(revision 5177)
@@ -59,7 +59,7 @@
     }
 
-    public sealed override IOperation Apply() {
+    public sealed override IOperation Apply(IExecutionContext context) {
       ChildParameter.ActualValue = Cross(RandomParameter.ActualValue, ParentsParameter.ActualValue);
-      return base.Apply();
+      return base.Apply(context);
     }
 
Index: /branches/ParallelEngine/HeuristicLab.Encodings.IntegerVectorEncoding/3.3/IntegerVectorManipulator.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Encodings.IntegerVectorEncoding/3.3/IntegerVectorManipulator.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Encodings.IntegerVectorEncoding/3.3/IntegerVectorManipulator.cs	(revision 5177)
@@ -53,7 +53,7 @@
     }
 
-    public sealed override IOperation Apply() {
+    public sealed override IOperation Apply(IExecutionContext context) {
       Manipulate(RandomParameter.ActualValue, IntegerVectorParameter.ActualValue);
-      return base.Apply();
+      return base.Apply(context);
     }
 
Index: /branches/ParallelEngine/HeuristicLab.Encodings.PermutationEncoding/3.3/Creators/RandomPermutationCreator.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Encodings.PermutationEncoding/3.3/Creators/RandomPermutationCreator.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Encodings.PermutationEncoding/3.3/Creators/RandomPermutationCreator.cs	(revision 5177)
@@ -72,7 +72,7 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       PermutationParameter.ActualValue = new Permutation(PermutationType, LengthParameter.ActualValue.Value, RandomParameter.ActualValue);
-      return base.Apply();
+      return base.Apply(context);
     }
   }
Index: /branches/ParallelEngine/HeuristicLab.Encodings.PermutationEncoding/3.3/Crossovers/MultiPermutationCrossover.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Encodings.PermutationEncoding/3.3/Crossovers/MultiPermutationCrossover.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Encodings.PermutationEncoding/3.3/Crossovers/MultiPermutationCrossover.cs	(revision 5177)
@@ -90,7 +90,7 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       if (Operators.Count == 0) throw new InvalidOperationException(Name + ": Please add at least one permutation crossover to choose from.");
-      return base.Apply();
+      return base.Apply(context);
     }
   }
Index: /branches/ParallelEngine/HeuristicLab.Encodings.PermutationEncoding/3.3/Manipulators/MultiPermutationManipulator.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Encodings.PermutationEncoding/3.3/Manipulators/MultiPermutationManipulator.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Encodings.PermutationEncoding/3.3/Manipulators/MultiPermutationManipulator.cs	(revision 5177)
@@ -82,7 +82,7 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       if (Operators.Count == 0) throw new InvalidOperationException(Name + ": Please add at least one permutation manipulator to choose from.");
-      return base.Apply();
+      return base.Apply(context);
     }
   }
Index: /branches/ParallelEngine/HeuristicLab.Encodings.PermutationEncoding/3.3/Moves/ThreeOpt/TranslocationMoveGenerator.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Encodings.PermutationEncoding/3.3/Moves/ThreeOpt/TranslocationMoveGenerator.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Encodings.PermutationEncoding/3.3/Moves/ThreeOpt/TranslocationMoveGenerator.cs	(revision 5177)
@@ -54,5 +54,5 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       Permutation p = PermutationParameter.ActualValue;
       TranslocationMove[] moves = GenerateMoves(p);
@@ -63,5 +63,5 @@
       }
       CurrentScopeParameter.ActualValue.SubScopes.AddRange(moveScopes);
-      return base.Apply();
+      return base.Apply(context);
     }
 
Index: /branches/ParallelEngine/HeuristicLab.Encodings.PermutationEncoding/3.3/Moves/ThreeOpt/TranslocationMoveHardTabuCriterion.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Encodings.PermutationEncoding/3.3/Moves/ThreeOpt/TranslocationMoveHardTabuCriterion.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Encodings.PermutationEncoding/3.3/Moves/ThreeOpt/TranslocationMoveHardTabuCriterion.cs	(revision 5177)
@@ -83,5 +83,5 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       ItemList<IItem> tabuList = TabuListParameter.ActualValue;
       TranslocationMove move = TranslocationMoveParameter.ActualValue;
@@ -177,5 +177,5 @@
       }
       MoveTabuParameter.ActualValue = new BoolValue(isTabu);
-      return base.Apply();
+      return base.Apply(context);
     }
   }
Index: /branches/ParallelEngine/HeuristicLab.Encodings.PermutationEncoding/3.3/Moves/ThreeOpt/TranslocationMoveMaker.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Encodings.PermutationEncoding/3.3/Moves/ThreeOpt/TranslocationMoveMaker.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Encodings.PermutationEncoding/3.3/Moves/ThreeOpt/TranslocationMoveMaker.cs	(revision 5177)
@@ -63,5 +63,5 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       TranslocationMove move = TranslocationMoveParameter.ActualValue;
       Permutation permutation = PermutationParameter.ActualValue;
@@ -72,5 +72,5 @@
       quality.Value = moveQuality.Value;
 
-      return base.Apply();
+      return base.Apply(context);
     }
   }
Index: /branches/ParallelEngine/HeuristicLab.Encodings.PermutationEncoding/3.3/Moves/ThreeOpt/TranslocationMoveSoftTabuCriterion.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Encodings.PermutationEncoding/3.3/Moves/ThreeOpt/TranslocationMoveSoftTabuCriterion.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Encodings.PermutationEncoding/3.3/Moves/ThreeOpt/TranslocationMoveSoftTabuCriterion.cs	(revision 5177)
@@ -83,5 +83,5 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       ItemList<IItem> tabuList = TabuListParameter.ActualValue;
       TranslocationMove move = TranslocationMoveParameter.ActualValue;
@@ -170,5 +170,5 @@
       }
       MoveTabuParameter.ActualValue = new BoolValue(isTabu);
-      return base.Apply();
+      return base.Apply(context);
     }
   }
Index: /branches/ParallelEngine/HeuristicLab.Encodings.PermutationEncoding/3.3/Moves/TwoOpt/InversionMoveGenerator.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Encodings.PermutationEncoding/3.3/Moves/TwoOpt/InversionMoveGenerator.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Encodings.PermutationEncoding/3.3/Moves/TwoOpt/InversionMoveGenerator.cs	(revision 5177)
@@ -54,5 +54,5 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       Permutation p = PermutationParameter.ActualValue;
       InversionMove[] moves = GenerateMoves(p);
@@ -63,5 +63,5 @@
       }
       CurrentScopeParameter.ActualValue.SubScopes.AddRange(moveScopes);
-      return base.Apply();
+      return base.Apply(context);
     }
 
Index: /branches/ParallelEngine/HeuristicLab.Encodings.PermutationEncoding/3.3/Moves/TwoOpt/InversionMoveHardTabuCriterion.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Encodings.PermutationEncoding/3.3/Moves/TwoOpt/InversionMoveHardTabuCriterion.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Encodings.PermutationEncoding/3.3/Moves/TwoOpt/InversionMoveHardTabuCriterion.cs	(revision 5177)
@@ -84,5 +84,5 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       ItemList<IItem> tabuList = TabuListParameter.ActualValue;
       InversionMove move = InversionMoveParameter.ActualValue;
@@ -156,5 +156,5 @@
       }
       MoveTabuParameter.ActualValue = new BoolValue(isTabu);
-      return base.Apply();
+      return base.Apply(context);
     }
   }
Index: /branches/ParallelEngine/HeuristicLab.Encodings.PermutationEncoding/3.3/Moves/TwoOpt/InversionMoveMaker.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Encodings.PermutationEncoding/3.3/Moves/TwoOpt/InversionMoveMaker.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Encodings.PermutationEncoding/3.3/Moves/TwoOpt/InversionMoveMaker.cs	(revision 5177)
@@ -63,5 +63,5 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       InversionMove move = InversionMoveParameter.ActualValue;
       Permutation permutation = PermutationParameter.ActualValue;
@@ -72,5 +72,5 @@
       quality.Value = moveQuality.Value;
 
-      return base.Apply();
+      return base.Apply(context);
     }
   }
Index: /branches/ParallelEngine/HeuristicLab.Encodings.PermutationEncoding/3.3/Moves/TwoOpt/InversionMoveSoftTabuCriterion.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Encodings.PermutationEncoding/3.3/Moves/TwoOpt/InversionMoveSoftTabuCriterion.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Encodings.PermutationEncoding/3.3/Moves/TwoOpt/InversionMoveSoftTabuCriterion.cs	(revision 5177)
@@ -84,5 +84,5 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       ItemList<IItem> tabuList = TabuListParameter.ActualValue;
       InversionMove move = InversionMoveParameter.ActualValue;
@@ -157,5 +157,5 @@
       }
       MoveTabuParameter.ActualValue = new BoolValue(isTabu);
-      return base.Apply();
+      return base.Apply(context);
     }
   }
Index: /branches/ParallelEngine/HeuristicLab.Encodings.PermutationEncoding/3.3/PermutationCrossover.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Encodings.PermutationEncoding/3.3/PermutationCrossover.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Encodings.PermutationEncoding/3.3/PermutationCrossover.cs	(revision 5177)
@@ -60,7 +60,7 @@
     }
 
-    public sealed override IOperation Apply() {
+    public sealed override IOperation Apply(IExecutionContext context) {
       ChildParameter.ActualValue = Cross(RandomParameter.ActualValue, ParentsParameter.ActualValue);
-      return base.Apply();
+      return base.Apply(context);
     }
 
Index: /branches/ParallelEngine/HeuristicLab.Encodings.PermutationEncoding/3.3/PermutationManipulator.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Encodings.PermutationEncoding/3.3/PermutationManipulator.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Encodings.PermutationEncoding/3.3/PermutationManipulator.cs	(revision 5177)
@@ -54,7 +54,7 @@
     }
 
-    public sealed override IOperation Apply() {
+    public sealed override IOperation Apply(IExecutionContext context) {
       Manipulate(RandomParameter.ActualValue, PermutationParameter.ActualValue);
-      return base.Apply();
+      return base.Apply(context);
     }
 
Index: /branches/ParallelEngine/HeuristicLab.Encodings.RealVectorEncoding/3.3/BoundsChecker.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Encodings.RealVectorEncoding/3.3/BoundsChecker.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Encodings.RealVectorEncoding/3.3/BoundsChecker.cs	(revision 5177)
@@ -80,9 +80,9 @@
     /// <remarks>Calls <see cref="Apply(RealVector, DoubleMatrix)"/>.</remarks>
     /// <inheritdoc select="returns" />
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       if (RealVectorParameter.ActualValue == null) throw new InvalidOperationException("BoundsChecker: Parameter " + RealVectorParameter.ActualName + " could not be found.");
       if (BoundsParameter.ActualValue == null) throw new InvalidOperationException("BoundsChecker: Parameter " + BoundsParameter.ActualName + " could not be found.");
       Apply(RealVectorParameter.ActualValue, BoundsParameter.ActualValue);
-      return base.Apply();
+      return base.Apply(context);
     }
   }
Index: /branches/ParallelEngine/HeuristicLab.Encodings.RealVectorEncoding/3.3/Crossovers/MultiRealVectorCrossover.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Encodings.RealVectorEncoding/3.3/Crossovers/MultiRealVectorCrossover.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Encodings.RealVectorEncoding/3.3/Crossovers/MultiRealVectorCrossover.cs	(revision 5177)
@@ -97,7 +97,7 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       if (Operators.Count == 0) throw new InvalidOperationException(Name + ": Please add at least one real vector crossover to choose from.");
-      return base.Apply();
+      return base.Apply(context);
     }
   }
Index: /branches/ParallelEngine/HeuristicLab.Encodings.RealVectorEncoding/3.3/Manipulators/MultiRealVectorManipulator.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Encodings.RealVectorEncoding/3.3/Manipulators/MultiRealVectorManipulator.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Encodings.RealVectorEncoding/3.3/Manipulators/MultiRealVectorManipulator.cs	(revision 5177)
@@ -88,7 +88,7 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       if (Operators.Count == 0) throw new InvalidOperationException(Name + ": Please add at least one real vector manipulator to choose from.");
-      return base.Apply();
+      return base.Apply(context);
     }
   }
Index: /branches/ParallelEngine/HeuristicLab.Encodings.RealVectorEncoding/3.3/Moves/AdditiveMoveGenerator.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Encodings.RealVectorEncoding/3.3/Moves/AdditiveMoveGenerator.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Encodings.RealVectorEncoding/3.3/Moves/AdditiveMoveGenerator.cs	(revision 5177)
@@ -63,5 +63,5 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       RealVector vector = RealVectorParameter.ActualValue;
       AdditiveMove[] moves = GenerateMoves(RandomParameter.ActualValue, vector);
@@ -82,5 +82,5 @@
       }
       CurrentScopeParameter.ActualValue.SubScopes.AddRange(moveScopes);
-      return base.Apply();
+      return base.Apply(context);
     }
 
Index: /branches/ParallelEngine/HeuristicLab.Encodings.RealVectorEncoding/3.3/Moves/AdditiveMoveMaker.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Encodings.RealVectorEncoding/3.3/Moves/AdditiveMoveMaker.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Encodings.RealVectorEncoding/3.3/Moves/AdditiveMoveMaker.cs	(revision 5177)
@@ -63,5 +63,5 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       AdditiveMove move = AdditiveMoveParameter.ActualValue;
       RealVector realVector = RealVectorParameter.ActualValue;
@@ -72,5 +72,5 @@
       quality.Value = moveQuality.Value;
 
-      return base.Apply();
+      return base.Apply(context);
     }
   }
Index: /branches/ParallelEngine/HeuristicLab.Encodings.RealVectorEncoding/3.3/Moves/AdditiveMoveTabuChecker.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Encodings.RealVectorEncoding/3.3/Moves/AdditiveMoveTabuChecker.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Encodings.RealVectorEncoding/3.3/Moves/AdditiveMoveTabuChecker.cs	(revision 5177)
@@ -81,5 +81,5 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       ItemList<IItem> tabuList = TabuListParameter.ActualValue;
       AdditiveMove move = AdditiveMoveParameter.ActualValue;
@@ -106,5 +106,5 @@
       }
       MoveTabuParameter.ActualValue = new BoolValue(isTabu);
-      return base.Apply();
+      return base.Apply(context);
     }
   }
Index: /branches/ParallelEngine/HeuristicLab.Encodings.RealVectorEncoding/3.3/RealVectorCreator.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Encodings.RealVectorEncoding/3.3/RealVectorCreator.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Encodings.RealVectorEncoding/3.3/RealVectorCreator.cs	(revision 5177)
@@ -63,7 +63,7 @@
     }
 
-    public sealed override IOperation Apply() {
+    public sealed override IOperation Apply(IExecutionContext context) {
       RealVectorParameter.ActualValue = Create(RandomParameter.ActualValue, LengthParameter.ActualValue, BoundsParameter.ActualValue);
-      return base.Apply();
+      return base.Apply(context);
     }
 
Index: /branches/ParallelEngine/HeuristicLab.Encodings.RealVectorEncoding/3.3/RealVectorCrossover.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Encodings.RealVectorEncoding/3.3/RealVectorCrossover.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Encodings.RealVectorEncoding/3.3/RealVectorCrossover.cs	(revision 5177)
@@ -65,10 +65,10 @@
     }
 
-    public sealed override IOperation Apply() {
+    public sealed override IOperation Apply(IExecutionContext context) {
       RealVector result = Cross(RandomParameter.ActualValue, ParentsParameter.ActualValue);
       DoubleMatrix bounds = BoundsParameter.ActualValue;
       if (bounds != null) BoundsChecker.Apply(result, bounds);
       ChildParameter.ActualValue = result;
-      return base.Apply();
+      return base.Apply(context);
     }
 
Index: /branches/ParallelEngine/HeuristicLab.Encodings.RealVectorEncoding/3.3/RealVectorManipulator.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Encodings.RealVectorEncoding/3.3/RealVectorManipulator.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Encodings.RealVectorEncoding/3.3/RealVectorManipulator.cs	(revision 5177)
@@ -59,10 +59,10 @@
     }
 
-    public sealed override IOperation Apply() {
+    public sealed override IOperation Apply(IExecutionContext context) {
       RealVector vector = RealVectorParameter.ActualValue;
       Manipulate(RandomParameter.ActualValue, vector);
       DoubleMatrix bounds = BoundsParameter.ActualValue;
       if (bounds != null) BoundsChecker.Apply(vector, bounds);
-      return base.Apply();
+      return base.Apply(context);
     }
 
Index: /branches/ParallelEngine/HeuristicLab.Encodings.RealVectorEncoding/3.3/StrategyParameters/StdDevStrategyVectorCreator.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Encodings.RealVectorEncoding/3.3/StrategyParameters/StdDevStrategyVectorCreator.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Encodings.RealVectorEncoding/3.3/StrategyParameters/StdDevStrategyVectorCreator.cs	(revision 5177)
@@ -63,7 +63,7 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       StrategyParameterParameter.ActualValue = UniformRandomRealVectorCreator.Apply(RandomParameter.ActualValue, LengthParameter.ActualValue.Value, BoundsParameter.ActualValue);
-      return base.Apply();
+      return base.Apply(context);
     }
   }
Index: /branches/ParallelEngine/HeuristicLab.Encodings.RealVectorEncoding/3.3/StrategyParameters/StdDevStrategyVectorCrossover.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Encodings.RealVectorEncoding/3.3/StrategyParameters/StdDevStrategyVectorCrossover.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Encodings.RealVectorEncoding/3.3/StrategyParameters/StdDevStrategyVectorCrossover.cs	(revision 5177)
@@ -59,7 +59,7 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       StrategyParameterParameter.ActualValue = AverageCrossover.Apply(RandomParameter.ActualValue, ParentsParameter.ActualValue);
-      return base.Apply();
+      return base.Apply(context);
     }
   }
Index: /branches/ParallelEngine/HeuristicLab.Encodings.RealVectorEncoding/3.3/StrategyParameters/StdDevStrategyVectorManipulator.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Encodings.RealVectorEncoding/3.3/StrategyParameters/StdDevStrategyVectorManipulator.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Encodings.RealVectorEncoding/3.3/StrategyParameters/StdDevStrategyVectorManipulator.cs	(revision 5177)
@@ -102,5 +102,5 @@
     /// <remarks>Calls <see cref="OperatorBase.Apply"/> of base class <see cref="OperatorBase"/>.</remarks>
     /// <inheritdoc select="returns"/>
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       RealVector strategyParams = StrategyParameterParameter.ActualValue;
       if (strategyParams != null) { // only apply if there is a strategy vector
@@ -110,5 +110,5 @@
         Apply(random, strategyParams, tau0, tau, BoundsParameter.ActualValue);
       }
-      return base.Apply();
+      return base.Apply(context);
     }
   }
Index: /branches/ParallelEngine/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.3/Analyzers/SymbolicExpressionTreeSizeCalculator.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.3/Analyzers/SymbolicExpressionTreeSizeCalculator.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.3/Analyzers/SymbolicExpressionTreeSizeCalculator.cs	(revision 5177)
@@ -65,8 +65,8 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       SymbolicExpressionTree tree = SymbolicExpressionTree;
       SymbolicExpressionTreeSize = new DoubleValue(tree.Size);
-      return base.Apply();
+      return base.Apply(context);
     }
 
Index: /branches/ParallelEngine/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.3/Creators/SymbolicExpressionTreeCreator.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.3/Creators/SymbolicExpressionTreeCreator.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.3/Creators/SymbolicExpressionTreeCreator.cs	(revision 5177)
@@ -72,8 +72,8 @@
     }
 
-    public sealed override IOperation Apply() {
+    public sealed override IOperation Apply(IExecutionContext context) {
       SymbolicExpressionTree = Create(Random, SymbolicExpressionGrammar,
         MaxTreeSize, MaxTreeHeight, MaxFunctionDefinitions, MaxFunctionArguments);
-      return base.Apply();
+      return base.Apply(context);
     }
 
Index: /branches/ParallelEngine/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.3/Crossovers/SymbolicExpressionTreeCrossover.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.3/Crossovers/SymbolicExpressionTreeCrossover.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.3/Crossovers/SymbolicExpressionTreeCrossover.cs	(revision 5177)
@@ -61,5 +61,5 @@
     }
 
-    public sealed override IOperation Apply() {
+    public sealed override IOperation Apply(IExecutionContext context) {
       if (ParentsParameter.ActualValue.Length != 2)
         throw new ArgumentException("Number of parents must be exactly two for symbolic expression tree crossover operators.");
@@ -77,5 +77,5 @@
 
       ChildParameter.ActualValue = result;
-      return base.Apply();
+      return base.Apply(context);
     }
 
Index: /branches/ParallelEngine/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.3/Manipulators/SymbolicExpressionTreeManipulator.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.3/Manipulators/SymbolicExpressionTreeManipulator.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.3/Manipulators/SymbolicExpressionTreeManipulator.cs	(revision 5177)
@@ -64,5 +64,5 @@
     }
 
-    public sealed override IOperation Apply() {
+    public sealed override IOperation Apply(IExecutionContext context) {
       SymbolicExpressionTree tree = SymbolicExpressionTreeParameter.ActualValue;
       bool success;
@@ -71,5 +71,5 @@
 
       if (!success) FailedManipulationEvents.Value++;
-      return base.Apply();
+      return base.Apply(context);
     }
 
Index: /branches/ParallelEngine/HeuristicLab.Operators.Programmable/3.3/ProgrammableOperator.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Operators.Programmable/3.3/ProgrammableOperator.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Operators.Programmable/3.3/ProgrammableOperator.cs	(revision 5177)
@@ -452,5 +452,5 @@
     #region HeuristicLab interfaces
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       lock (syncRoot) {
         if (executeMethod == null) {
@@ -459,5 +459,5 @@
       }
 
-      var parameters = new List<object>() { this, ExecutionContext };
+      var parameters = new List<object>() { this, context };
       parameters.AddRange(Parameters.Select(p => (object)p));
       return (IOperation)executeMethod.Invoke(null, parameters.ToArray());
Index: /branches/ParallelEngine/HeuristicLab.Operators/3.3/AlgorithmOperator.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Operators/3.3/AlgorithmOperator.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Operators/3.3/AlgorithmOperator.cs	(revision 5177)
@@ -55,8 +55,8 @@
     }
 
-    public override IOperation Apply() {
-      OperationCollection next = new OperationCollection(base.Apply());
+    public override IOperation Apply(IExecutionContext context) {
+      OperationCollection next = new OperationCollection(base.Apply(context));
       if (operatorGraph.InitialOperator != null)
-        next.Insert(0, ExecutionContext.CreateChildOperation(operatorGraph.InitialOperator));
+        next.Insert(0, context.CreateChildOperation(operatorGraph.InitialOperator));
       return next;
     }
Index: /branches/ParallelEngine/HeuristicLab.Operators/3.3/Assigner.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Operators/3.3/Assigner.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Operators/3.3/Assigner.cs	(revision 5177)
@@ -54,7 +54,7 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       LeftSideParameter.ActualValue = (IItem)RightSideParameter.ActualValue.Clone();
-      return base.Apply();
+      return base.Apply(context);
     }
   }
Index: /branches/ParallelEngine/HeuristicLab.Operators/3.3/Comparator.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Operators/3.3/Comparator.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Operators/3.3/Comparator.cs	(revision 5177)
@@ -68,5 +68,5 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       IItem left = LeftSideParameter.ActualValue;
       IItem right = RightSideParameter.ActualValue;
@@ -91,5 +91,5 @@
       }
       ResultParameter.ActualValue = new BoolValue(b);
-      return base.Apply();
+      return base.Apply(context);
     }
   }
Index: /branches/ParallelEngine/HeuristicLab.Operators/3.3/ConditionalBranch.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Operators/3.3/ConditionalBranch.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Operators/3.3/ConditionalBranch.cs	(revision 5177)
@@ -67,10 +67,10 @@
     }
 
-    public override IOperation Apply() {
-      OperationCollection next = new OperationCollection(base.Apply());
+    public override IOperation Apply(IExecutionContext context) {
+      OperationCollection next = new OperationCollection(base.Apply(context));
       if (ConditionParameter.ActualValue != null && ConditionParameter.ActualValue.Value) {
-        if (TrueBranch != null) next.Insert(0, ExecutionContext.CreateOperation(TrueBranch));
+        if (TrueBranch != null) next.Insert(0, context.CreateOperation(TrueBranch));
       } else {
-        if (FalseBranch != null) next.Insert(0, ExecutionContext.CreateOperation(FalseBranch));
+        if (FalseBranch != null) next.Insert(0, context.CreateOperation(FalseBranch));
       }
       return next;
Index: /branches/ParallelEngine/HeuristicLab.Operators/3.3/DoubleCounter.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Operators/3.3/DoubleCounter.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Operators/3.3/DoubleCounter.cs	(revision 5177)
@@ -59,8 +59,8 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       if (ValueParameter.ActualValue == null) ValueParameter.ActualValue = new DoubleValue();
       ValueParameter.ActualValue.Value += IncrementParameter.ActualValue.Value;
-      return base.Apply();
+      return base.Apply(context);
     }
   }
Index: /branches/ParallelEngine/HeuristicLab.Operators/3.3/IntCounter.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Operators/3.3/IntCounter.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Operators/3.3/IntCounter.cs	(revision 5177)
@@ -59,8 +59,8 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       if (ValueParameter.ActualValue == null) ValueParameter.ActualValue = new IntValue();
       ValueParameter.ActualValue.Value += IncrementParameter.ActualValue.Value;
-      return base.Apply();
+      return base.Apply(context);
     }
   }
Index: /branches/ParallelEngine/HeuristicLab.Operators/3.3/Operator.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Operators/3.3/Operator.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Operators/3.3/Operator.cs	(revision 5177)
@@ -28,5 +28,5 @@
 namespace HeuristicLab.Operators {
   /// <summary>
-  /// The base class for all operators.
+  /// Base class for operators.
   /// </summary>
   [Item("Operator", "Base class for operators.")]
@@ -43,21 +43,5 @@
     }
 
-    [Storable]
-    private IExecutionContext executionContext;
-    protected IExecutionContext ExecutionContext {
-      get { return executionContext; }
-      private set {
-        if (value != executionContext) {
-          executionContext = value;
-          OnExecutionContextChanged();
-        }
-      }
-    }
-
-    /// <summary>
-    /// Flag whether the current instance has been canceled.
-    /// </summary>
     private bool canceled;
-    /// <inheritdoc/>
     protected bool Canceled {
       get { return canceled; }
@@ -72,6 +56,4 @@
     [Storable]
     private bool breakpoint;
-    /// <inheritdoc/>
-    /// <remarks>Calls <see cref="OnBreakpointChanged"/> in the setter.</remarks>
     public bool Breakpoint {
       get { return breakpoint; }
@@ -91,10 +73,5 @@
       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() {
@@ -123,12 +100,10 @@
     }
 
-    /// <inheritdoc/>
     public virtual IOperation Execute(IExecutionContext context) {
       try {
         Canceled = false;
-        ExecutionContext = context;
         foreach (IParameter param in Parameters)
           param.ExecutionContext = context;
-        IOperation next = Apply();
+        IOperation next = Apply(context);
         OnExecuted();
         return next;
@@ -137,26 +112,13 @@
         foreach (IParameter param in Parameters)
           param.ExecutionContext = null;
-        ExecutionContext = null;
       }
     }
-    /// <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();
+    public abstract IOperation Apply(IExecutionContext context);
 
-    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 +126,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.Operators/3.3/Placeholder.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Operators/3.3/Placeholder.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Operators/3.3/Placeholder.cs	(revision 5177)
@@ -50,9 +50,9 @@
     }
 
-    public override IOperation Apply() {
-      OperationCollection next = new OperationCollection(base.Apply());
+    public override IOperation Apply(IExecutionContext context) {
+      OperationCollection next = new OperationCollection(base.Apply(context));
       IOperator op = OperatorParameter.ActualValue;
       if (op != null)
-        next.Insert(0, ExecutionContext.CreateOperation(op));
+        next.Insert(0, context.CreateOperation(op));
       return next;
     }
Index: /branches/ParallelEngine/HeuristicLab.Operators/3.3/ScopeCleaner.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Operators/3.3/ScopeCleaner.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Operators/3.3/ScopeCleaner.cs	(revision 5177)
@@ -53,8 +53,8 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       CurrentScope.Variables.Clear();
       CurrentScope.SubScopes.Clear();
-      return base.Apply();
+      return base.Apply(context);
     }
   }
Index: /branches/ParallelEngine/HeuristicLab.Operators/3.3/SingleSuccessorOperator.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Operators/3.3/SingleSuccessorOperator.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Operators/3.3/SingleSuccessorOperator.cs	(revision 5177)
@@ -50,7 +50,7 @@
     }
     
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       if (Successor != null)
-        return ExecutionContext.CreateOperation(Successor);
+        return context.CreateOperation(Successor);
       else
         return null;
Index: /branches/ParallelEngine/HeuristicLab.Operators/3.3/StochasticBranch.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Operators/3.3/StochasticBranch.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Operators/3.3/StochasticBranch.cs	(revision 5177)
@@ -71,10 +71,10 @@
     }
 
-    public override IOperation Apply() {
-      OperationCollection next = new OperationCollection(base.Apply());
+    public override IOperation Apply(IExecutionContext context) {
+      OperationCollection next = new OperationCollection(base.Apply(context));
       if (RandomParameter.ActualValue.NextDouble() < ProbabilityParameter.ActualValue.Value) {
-        if (FirstBranch != null) next.Insert(0, ExecutionContext.CreateOperation(FirstBranch));
+        if (FirstBranch != null) next.Insert(0, context.CreateOperation(FirstBranch));
       } else {
-        if (SecondBranch != null) next.Insert(0, ExecutionContext.CreateOperation(SecondBranch));
+        if (SecondBranch != null) next.Insert(0, context.CreateOperation(SecondBranch));
       }
       return next;
Index: /branches/ParallelEngine/HeuristicLab.Operators/3.3/StochasticMultiBranch.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Operators/3.3/StochasticMultiBranch.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Operators/3.3/StochasticMultiBranch.cs	(revision 5177)
@@ -109,5 +109,5 @@
     /// or all selected operators have zero probabitlity.</exception>
     /// <returns>A new operation with the operator that was selected followed by the current operator's successor.</returns>
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       IRandom random = RandomParameter.ActualValue;
       DoubleArray probabilities = ProbabilitiesParameter.ActualValue;
@@ -131,9 +131,9 @@
         }
       }
-      OperationCollection next = new OperationCollection(base.Apply());
+      OperationCollection next = new OperationCollection(base.Apply(context));
       if (successor != null) {
         if (CreateChildOperation)
-          next.Insert(0, ExecutionContext.CreateChildOperation(successor));
-        else next.Insert(0, ExecutionContext.CreateOperation(successor));
+          next.Insert(0, context.CreateChildOperation(successor));
+        else next.Insert(0, context.CreateOperation(successor));
       }
       return next;
Index: /branches/ParallelEngine/HeuristicLab.Operators/3.3/SubScopesCreator.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Operators/3.3/SubScopesCreator.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Operators/3.3/SubScopesCreator.cs	(revision 5177)
@@ -58,9 +58,9 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       int n = NumberOfSubScopesParameter.ActualValue.Value;
       for (int i = 0; i < n; i++)
         CurrentScope.SubScopes.Add(new Scope(i.ToString()));
-      return base.Apply();
+      return base.Apply(context);
     }
   }
Index: /branches/ParallelEngine/HeuristicLab.Operators/3.3/SubScopesMixer.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Operators/3.3/SubScopesMixer.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Operators/3.3/SubScopesMixer.cs	(revision 5177)
@@ -77,7 +77,7 @@
     /// <param name="scope">The scope whose sub scopes should be mixed.</param>
     /// <returns><c>null</c>.</returns>
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       int partitions = Partitions.Value;
-      IScope scope = ExecutionContext.Scope;
+      IScope scope = context.Scope;
       int count = scope.SubScopes.Count;
       if ((count % partitions) != 0)
@@ -96,5 +96,5 @@
       scope.SubScopes.AddRange(reorderedSubScopes);
 
-      return base.Apply();
+      return base.Apply(context);
     }
   }
Index: /branches/ParallelEngine/HeuristicLab.Operators/3.3/SubScopesProcessor.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Operators/3.3/SubScopesProcessor.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Operators/3.3/SubScopesProcessor.cs	(revision 5177)
@@ -67,7 +67,7 @@
     }
 
-    public override IOperation Apply() {
-      List<IScope> scopes = GetScopesOnLevel(ExecutionContext.Scope, Depth.Value).ToList();
-      OperationCollection next = new OperationCollection(base.Apply());
+    public override IOperation Apply(IExecutionContext context) {
+      List<IScope> scopes = GetScopesOnLevel(context.Scope, Depth.Value).ToList();
+      OperationCollection next = new OperationCollection(base.Apply(context));
       if (scopes.Count != Operators.Count)
         throw new ArgumentException("The number of operators doesn't match the number of sub-scopes at depth " + Depth.Value);
@@ -75,5 +75,5 @@
       inner.Parallel = Parallel == null ? false : Parallel.Value;
       for (int i = 0; i < scopes.Count(); i++) {
-        inner.Add(ExecutionContext.CreateOperation(Operators[i], scopes[i]));
+        inner.Add(context.CreateOperation(Operators[i], scopes[i]));
       }
       next.Insert(0, inner);
Index: /branches/ParallelEngine/HeuristicLab.Operators/3.3/SubScopesRemover.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Operators/3.3/SubScopesRemover.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Operators/3.3/SubScopesRemover.cs	(revision 5177)
@@ -67,5 +67,5 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       if (RemoveAllSubScopes)
         CurrentScope.SubScopes.Clear();
@@ -73,5 +73,5 @@
         CurrentScope.SubScopes.RemoveAt(SubScopeIndexParameter.ActualValue.Value);
       }
-      return base.Apply();
+      return base.Apply(context);
     }
   }
Index: /branches/ParallelEngine/HeuristicLab.Operators/3.3/SubScopesSorter.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Operators/3.3/SubScopesSorter.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Operators/3.3/SubScopesSorter.cs	(revision 5177)
@@ -65,9 +65,9 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       descending = DescendingParameter.ActualValue.Value;
       actualName = ValueParameter.TranslatedName;
       CurrentScope.SubScopes.Sort(SortScopes);
-      return base.Apply();
+      return base.Apply(context);
     }
 
Index: /branches/ParallelEngine/HeuristicLab.Operators/3.3/UniformSubScopesProcessor.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Operators/3.3/UniformSubScopesProcessor.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Operators/3.3/UniformSubScopesProcessor.cs	(revision 5177)
@@ -74,12 +74,12 @@
     }
 
-    public override IOperation Apply() {
-      OperationCollection next = new OperationCollection(base.Apply());
+    public override IOperation Apply(IExecutionContext context) {
+      OperationCollection next = new OperationCollection(base.Apply(context));
       if (Operator != null) {
-        List<IScope> scopes = GetScopesOnLevel(ExecutionContext.Scope, Depth.Value).ToList();
+        List<IScope> scopes = GetScopesOnLevel(context.Scope, Depth.Value).ToList();
         OperationCollection inner = new OperationCollection();
         inner.Parallel = Parallel == null ? false : Parallel.Value;
         for (int i = 0; i < scopes.Count; i++) {
-          inner.Add(ExecutionContext.CreateOperation(Operator, scopes[i]));
+          inner.Add(context.CreateOperation(Operator, scopes[i]));
         }
         next.Insert(0, inner);
Index: /branches/ParallelEngine/HeuristicLab.Operators/3.3/VariableCreator.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Operators/3.3/VariableCreator.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Operators/3.3/VariableCreator.cs	(revision 5177)
@@ -53,5 +53,5 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       IVariable var;
       foreach (IParameter param in CollectedValues) {
@@ -66,5 +66,5 @@
           CurrentScope.Variables.Add(new Variable(name, param.Description, value == null ? null : (IItem)value.Clone()));
       }
-      return base.Apply();
+      return base.Apply(context);
     }
   }
Index: /branches/ParallelEngine/HeuristicLab.Optimization.Operators/3.3/ChildrenCreator.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Optimization.Operators/3.3/ChildrenCreator.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Optimization.Operators/3.3/ChildrenCreator.cs	(revision 5177)
@@ -67,5 +67,5 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       int parentsPerChild = ParentsPerChildParameter.ActualValue.Value;
       int parents = CurrentScope.SubScopes.Count;
@@ -82,5 +82,5 @@
         CurrentScope.SubScopes.Add(child);
       }
-      return base.Apply();
+      return base.Apply(context);
     }
   }
Index: /branches/ParallelEngine/HeuristicLab.Optimization.Operators/3.3/DiscreteDoubleValueModifier.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Optimization.Operators/3.3/DiscreteDoubleValueModifier.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Optimization.Operators/3.3/DiscreteDoubleValueModifier.cs	(revision 5177)
@@ -95,5 +95,5 @@
     /// </remarks>
     /// <returns>What the base class returns.</returns>
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       int index = IndexParameter.ActualValue.Value, startIndex = StartIndexParameter.ActualValue.Value;
       if (index >= startIndex) {
@@ -115,5 +115,5 @@
         value.Value = newValue;
       }
-      return base.Apply();
+      return base.Apply(context);
     }
 
Index: /branches/ParallelEngine/HeuristicLab.Optimization.Operators/3.3/MultiObjective/CrowdedComparisonSorter.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Optimization.Operators/3.3/MultiObjective/CrowdedComparisonSorter.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Optimization.Operators/3.3/MultiObjective/CrowdedComparisonSorter.cs	(revision 5177)
@@ -56,5 +56,5 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       ItemArray<IntValue> ranks = RankParameter.ActualValue;
       ItemArray<DoubleValue> distances = CrowdingDistanceParameter.ActualValue;
@@ -62,9 +62,9 @@
       int[] indices = Enumerable.Range(0, size).ToArray();
 
-      IScope[] scopes = ExecutionContext.Scope.SubScopes.ToArray();
+      IScope[] scopes = context.Scope.SubScopes.ToArray();
       Array.Sort(indices, scopes, new CustomComparer(ranks, distances));
-      ExecutionContext.Scope.SubScopes.Clear();
-      ExecutionContext.Scope.SubScopes.AddRange(scopes);
-      return base.Apply();
+      context.Scope.SubScopes.Clear();
+      context.Scope.SubScopes.AddRange(scopes);
+      return base.Apply(context);
     }
 
Index: /branches/ParallelEngine/HeuristicLab.Optimization.Operators/3.3/MultiObjective/CrowdingDistanceAssignment.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Optimization.Operators/3.3/MultiObjective/CrowdingDistanceAssignment.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Optimization.Operators/3.3/MultiObjective/CrowdingDistanceAssignment.cs	(revision 5177)
@@ -78,5 +78,5 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       DoubleArray[] qualities = QualitiesParameter.ActualValue.ToArray();
       int populationSize = qualities.Length;
@@ -89,5 +89,5 @@
       Apply(qualities, distances);
 
-      return base.Apply();
+      return base.Apply(context);
     }
 
Index: /branches/ParallelEngine/HeuristicLab.Optimization.Operators/3.3/MultiObjective/FastNonDominatedSort.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Optimization.Operators/3.3/MultiObjective/FastNonDominatedSort.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Optimization.Operators/3.3/MultiObjective/FastNonDominatedSort.cs	(revision 5177)
@@ -61,10 +61,10 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       BoolArray maximization = MaximizationParameter.ActualValue;
       ItemArray<DoubleArray> qualities = QualitiesParameter.ActualValue;
       if (qualities == null) throw new InvalidOperationException(Name + ": No qualities found.");
 
-      IScope scope = ExecutionContext.Scope;
+      IScope scope = context.Scope;
       int populationSize = scope.SubScopes.Count;
 
@@ -131,5 +131,5 @@
           scope.SubScopes.Add(frontScope);
       }
-      return base.Apply();
+      return base.Apply(context);
     }
 
Index: /branches/ParallelEngine/HeuristicLab.Optimization.Operators/3.3/ParentCopyCrossover.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Optimization.Operators/3.3/ParentCopyCrossover.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Optimization.Operators/3.3/ParentCopyCrossover.cs	(revision 5177)
@@ -43,6 +43,6 @@
     }
 
-    public override IOperation Apply() {
-      IScope scope = ExecutionContext.Scope;
+    public override IOperation Apply(IExecutionContext context) {
+      IScope scope = context.Scope;
       int index = RandomParameter.ActualValue.Next(scope.SubScopes.Count);
       IScope child = scope.SubScopes[index];
@@ -51,5 +51,5 @@
         scope.Variables.Add((IVariable)var.Clone());
 
-      return base.Apply();
+      return base.Apply(context);
     }
 
Index: /branches/ParallelEngine/HeuristicLab.Optimization.Operators/3.3/QualityComparator.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Optimization.Operators/3.3/QualityComparator.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Optimization.Operators/3.3/QualityComparator.cs	(revision 5177)
@@ -59,5 +59,5 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       DoubleValue left = LeftSideParameter.ActualValue;
       DoubleValue right = RightSideParameter.ActualValue;
@@ -67,5 +67,5 @@
         ResultParameter.ActualValue = new BoolValue(better);
       else ResultParameter.ActualValue.Value = better;
-      return base.Apply();
+      return base.Apply(context);
     }
 
Index: /branches/ParallelEngine/HeuristicLab.Optimization.Operators/3.3/ResultsCollector.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Optimization.Operators/3.3/ResultsCollector.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Optimization.Operators/3.3/ResultsCollector.cs	(revision 5177)
@@ -60,5 +60,5 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       bool copy = CopyValueParameter.Value.Value;
       ResultCollection results = ResultsParameter.ActualValue;
@@ -84,5 +84,5 @@
         }
       }
-      return base.Apply();
+      return base.Apply(context);
     }
   }
Index: /branches/ParallelEngine/HeuristicLab.Optimization.Operators/3.3/SASEGASAReunificator.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Optimization.Operators/3.3/SASEGASAReunificator.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Optimization.Operators/3.3/SASEGASAReunificator.cs	(revision 5177)
@@ -61,6 +61,6 @@
     /// <param name="scope">The current scope whose sub scopes to reduce.</param>
     /// <returns><c>null</c>.</returns>
-    public override IOperation Apply() {
-      IScope scope = ExecutionContext.Scope;
+    public override IOperation Apply(IExecutionContext context) {
+      IScope scope = context.Scope;
       if (VillageCountParameter.ActualValue == null) VillageCountParameter.ActualValue = new IntValue(scope.SubScopes.Count);
       int villageCount = VillageCountParameter.ActualValue.Value;
@@ -92,5 +92,5 @@
       VillageCountParameter.ActualValue.Value = villageCount;
 
-      return base.Apply();
+      return base.Apply(context);
     }
   }
Index: /branches/ParallelEngine/HeuristicLab.Optimization.Operators/3.3/SolutionsCreator.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Optimization.Operators/3.3/SolutionsCreator.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Optimization.Operators/3.3/SolutionsCreator.cs	(revision 5177)
@@ -69,5 +69,5 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       int count = NumberOfSolutionsParameter.ActualValue.Value;
       IOperator creator = SolutionCreatorParameter.ActualValue;
@@ -80,8 +80,8 @@
       OperationCollection next = new OperationCollection();
       for (int i = 0; i < count; i++) {
-        if (creator != null) next.Add(ExecutionContext.CreateOperation(creator, CurrentScope.SubScopes[current + i]));
-        if (evaluator != null) next.Add(ExecutionContext.CreateOperation(evaluator, CurrentScope.SubScopes[current + i]));
+        if (creator != null) next.Add(context.CreateOperation(creator, CurrentScope.SubScopes[current + i]));
+        if (evaluator != null) next.Add(context.CreateOperation(evaluator, CurrentScope.SubScopes[current + i]));
       }
-      next.Add(base.Apply());
+      next.Add(base.Apply(context));
       return next;
     }
Index: /branches/ParallelEngine/HeuristicLab.Optimization.Operators/3.3/TabuMaker.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Optimization.Operators/3.3/TabuMaker.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Optimization.Operators/3.3/TabuMaker.cs	(revision 5177)
@@ -62,5 +62,5 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       ItemList<IItem> tabuList = TabuListParameter.ActualValue;
       int tabuTenure = TabuTenureParameter.ActualValue.Value;
@@ -75,5 +75,5 @@
 
       tabuList.Add(GetTabuAttribute(MaximizationParameter.ActualValue.Value, QualityParameter.ActualValue.Value, MoveQualityParameter.ActualValue.Value));
-      return base.Apply();
+      return base.Apply(context);
     }
 
Index: /branches/ParallelEngine/HeuristicLab.Optimization.Operators/3.3/UnidirectionalRingMigrator.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Optimization.Operators/3.3/UnidirectionalRingMigrator.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Optimization.Operators/3.3/UnidirectionalRingMigrator.cs	(revision 5177)
@@ -55,6 +55,6 @@
     /// </summary>
     /// <returns>The next operation.</returns>
-    public override IOperation Apply() {
-      IScope scope = ExecutionContext.Scope;
+    public override IOperation Apply(IExecutionContext context) {
+      IScope scope = context.Scope;
       List<IScope> emigrantsList = new List<IScope>();
 
@@ -72,5 +72,5 @@
         scope.SubScopes[i].SubScopes.Add(emigrantsList[i]);
 
-      return base.Apply();
+      return base.Apply(context);
     }
   }
Index: /branches/ParallelEngine/HeuristicLab.Optimization.Operators/3.3/UserDefinedOperator.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Optimization.Operators/3.3/UserDefinedOperator.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Optimization.Operators/3.3/UserDefinedOperator.cs	(revision 5177)
@@ -35,10 +35,10 @@
     public UserDefinedOperator() : base() { }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       OperationCollection result = new OperationCollection();
       foreach (IOperator op in Operators.CheckedItems.OrderBy(x => x.Index).Select(x => x.Value)) {
-        result.Add(ExecutionContext.CreateOperation(op));
+        result.Add(context.CreateOperation(op));
       }
-      result.Add(base.Apply());
+      result.Add(base.Apply(context));
       return result;
     }
Index: /branches/ParallelEngine/HeuristicLab.Optimization.Operators/3.3/WeightedParentsQualityComparator.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Optimization.Operators/3.3/WeightedParentsQualityComparator.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Optimization.Operators/3.3/WeightedParentsQualityComparator.cs	(revision 5177)
@@ -66,5 +66,5 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       ItemArray<DoubleValue> rightQualities = RightSideParameter.ActualValue;
       if (rightQualities.Length < 1) throw new InvalidOperationException(Name + ": No subscopes found.");
@@ -122,5 +122,5 @@
       }
 
-      return base.Apply();
+      return base.Apply(context);
     }
   }
Index: /branches/ParallelEngine/HeuristicLab.Problems.ArtificialAnt/3.3/Analyzers/BestAntTrailAnalyzer.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Problems.ArtificialAnt/3.3/Analyzers/BestAntTrailAnalyzer.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Problems.ArtificialAnt/3.3/Analyzers/BestAntTrailAnalyzer.cs	(revision 5177)
@@ -75,5 +75,5 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       ItemArray<SymbolicExpressionTree> expressions = SymbolicExpressionTreeParameter.ActualValue;
       ItemArray<DoubleValue> qualities = QualityParameter.ActualValue;
@@ -95,5 +95,5 @@
         results["Best Artificial Ant Solution"].Value = antTrail;
       }
-      return base.Apply();
+      return base.Apply(context);
     }
   }
Index: /branches/ParallelEngine/HeuristicLab.Problems.ArtificialAnt/3.3/Evaluator.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Problems.ArtificialAnt/3.3/Evaluator.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Problems.ArtificialAnt/3.3/Evaluator.cs	(revision 5177)
@@ -60,5 +60,5 @@
     }
 
-    public sealed override IOperation Apply() {
+    public sealed override IOperation Apply(IExecutionContext context) {
       SymbolicExpressionTree expression = SymbolicExpressionTreeParameter.ActualValue;
       BoolMatrix world = WorldParameter.ActualValue;
Index: /branches/ParallelEngine/HeuristicLab.Problems.DataAnalysis.Classification/3.3/Symbolic/Analyzer/ValidationBestSymbolicClassificationSolutionAnalyzer.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Problems.DataAnalysis.Classification/3.3/Symbolic/Analyzer/ValidationBestSymbolicClassificationSolutionAnalyzer.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Problems.DataAnalysis.Classification/3.3/Symbolic/Analyzer/ValidationBestSymbolicClassificationSolutionAnalyzer.cs	(revision 5177)
@@ -214,5 +214,5 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       var trees = SymbolicExpressionTree;
       string targetVariable = ClassificationProblemData.TargetVariable.Value;
@@ -234,5 +234,5 @@
 
       foreach (var tree in trees) {
-        double quality = Evaluator.Evaluate(SymbolicExpressionTreeInterpreter, tree,
+        double quality = Evaluator.Evaluate(context, SymbolicExpressionTreeInterpreter, tree,
           lowerEstimationLimit, upperEstimationLimit, ClassificationProblemData.Dataset,
           targetVariable, rows);
@@ -274,5 +274,5 @@
         UpdateBestSolutionResults();
       }
-      return base.Apply();
+      return base.Apply(context);
     }
 
Index: /branches/ParallelEngine/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Analyzers/RegressionSolutionAnalyzer.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Analyzers/RegressionSolutionAnalyzer.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Analyzers/RegressionSolutionAnalyzer.cs	(revision 5177)
@@ -113,5 +113,5 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       DoubleValue prevBestSolutionQuality = BestSolutionQualityParameter.ActualValue;
       var bestSolution = UpdateBestSolution();
@@ -120,5 +120,5 @@
       }
 
-      return base.Apply();
+      return base.Apply(context);
     }
 
Index: /branches/ParallelEngine/HeuristicLab.Problems.DataAnalysis.Regression/3.3/LinearRegression/LinearRegressionSolutionCreator.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Problems.DataAnalysis.Regression/3.3/LinearRegression/LinearRegressionSolutionCreator.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Problems.DataAnalysis.Regression/3.3/LinearRegression/LinearRegressionSolutionCreator.cs	(revision 5177)
@@ -95,8 +95,8 @@
 
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       double rmsError, cvRmsError;
       SymbolicExpressionTree = CreateSymbolicExpressionTree(DataAnalysisProblemData.Dataset, DataAnalysisProblemData.TargetVariable.Value, DataAnalysisProblemData.InputVariables.CheckedItems.Select(x => x.Value.Value), SamplesStart.Value, SamplesEnd.Value, out rmsError, out cvRmsError);
-      return base.Apply();
+      return base.Apply(context);
     }
 
Index: /branches/ParallelEngine/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/Analyzers/FixedValidationBestScaledSymbolicRegressionSolutionAnalyzer.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/Analyzers/FixedValidationBestScaledSymbolicRegressionSolutionAnalyzer.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/Analyzers/FixedValidationBestScaledSymbolicRegressionSolutionAnalyzer.cs	(revision 5177)
@@ -206,5 +206,5 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       var trees = SymbolicExpressionTree;
 
@@ -227,5 +227,5 @@
 
       foreach (var tree in trees) {
-        double quality = Evaluator.Evaluate(SymbolicExpressionTreeInterpreter, tree,
+        double quality = Evaluator.Evaluate(context, SymbolicExpressionTreeInterpreter, tree,
           lowerEstimationLimit, upperEstimationLimit,
           ProblemData.Dataset, targetVariable,
@@ -278,5 +278,5 @@
       AddValue(validationValues, BestSolutionQualityParameter.ActualValue.Value, BestSolutionQualityParameterName, BestSolutionQualityParameterName);
       AddValue(validationValues, bestQuality, CurrentBestValidationQualityParameterName, CurrentBestValidationQualityParameterName);
-      return base.Apply();
+      return base.Apply(context);
     }
 
Index: /branches/ParallelEngine/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/Analyzers/SymbolicRegressionModelQualityAnalyzer.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/Analyzers/SymbolicRegressionModelQualityAnalyzer.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/Analyzers/SymbolicRegressionModelQualityAnalyzer.cs	(revision 5177)
@@ -139,9 +139,9 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       Analyze(SymbolicExpressionTreeParameter.ActualValue, SymbolicExpressionTreeInterpreterParameter.ActualValue,
         UpperEstimationLimit.Value, LowerEstimationLimit.Value, ProblemDataParameter.ActualValue,
         ResultsParameter.ActualValue);
-      return base.Apply();
+      return base.Apply(context);
     }
 
Index: /branches/ParallelEngine/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/Analyzers/SymbolicRegressionSolutionLinearScaler.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/Analyzers/SymbolicRegressionSolutionLinearScaler.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/Analyzers/SymbolicRegressionSolutionLinearScaler.cs	(revision 5177)
@@ -69,5 +69,5 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       SymbolicExpressionTree tree = SymbolicExpressionTreeParameter.ActualValue;
       DoubleValue alpha = AlphaParameter.ActualValue;
@@ -80,5 +80,5 @@
       }
 
-      return base.Apply();
+      return base.Apply(context);
     }
 
Index: /branches/ParallelEngine/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/Analyzers/SymbolicRegressionVariableFrequencyAnalyzer.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/Analyzers/SymbolicRegressionVariableFrequencyAnalyzer.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/Analyzers/SymbolicRegressionVariableFrequencyAnalyzer.cs	(revision 5177)
@@ -76,5 +76,5 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       ItemArray<SymbolicExpressionTree> expressions = SymbolicExpressionTreeParameter.ActualValue;
       DataAnalysisProblemData problemData = ProblemDataParameter.ActualValue;
@@ -99,5 +99,5 @@
       }
 
-      return base.Apply();
+      return base.Apply(context);
     }
   }
Index: /branches/ParallelEngine/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/Evaluators/MultiObjectiveSymbolicRegressionEvaluator.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/Evaluators/MultiObjectiveSymbolicRegressionEvaluator.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/Evaluators/MultiObjectiveSymbolicRegressionEvaluator.cs	(revision 5177)
@@ -118,5 +118,5 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       int seed = Random.Next();
       IEnumerable<int> rows = SingleObjectiveSymbolicRegressionEvaluator.GenerateRowsToEvaluate(seed, RelativeNumberOfEvaluatedSamples.Value, SamplesStart.Value, SamplesEnd.Value)
@@ -125,5 +125,5 @@
         RegressionProblemData.TargetVariable, rows);
       QualitiesParameter.ActualValue = new DoubleArray(qualities);
-      return base.Apply();
+      return base.Apply(context);
     }
 
Index: /branches/ParallelEngine/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/Evaluators/SingleObjectiveSymbolicRegressionEvaluator.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/Evaluators/SingleObjectiveSymbolicRegressionEvaluator.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/Evaluators/SingleObjectiveSymbolicRegressionEvaluator.cs	(revision 5177)
@@ -144,13 +144,13 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       int seed = Random.Next();
       IEnumerable<int> rows = GenerateRowsToEvaluate(seed, RelativeNumberOfEvaluatedSamples.Value, SamplesStart.Value, SamplesEnd.Value)
           .Where(i => i < RegressionProblemData.TestSamplesStart.Value || RegressionProblemData.TestSamplesEnd.Value <= i);
-      double quality = Evaluate(SymbolicExpressionTreeInterpreter, SymbolicExpressionTree, LowerEstimationLimit.Value, UpperEstimationLimit.Value,
+      double quality = Evaluate(context, SymbolicExpressionTreeInterpreter, SymbolicExpressionTree, LowerEstimationLimit.Value, UpperEstimationLimit.Value,
         RegressionProblemData.Dataset,
         RegressionProblemData.TargetVariable.Value, rows);
       QualityParameter.ActualValue = new DoubleValue(quality);
-      return base.Apply();
+      return base.Apply(context);
     }
 
@@ -163,5 +163,6 @@
     }
 
-    public abstract double Evaluate(ISymbolicExpressionTreeInterpreter interpreter,
+    public abstract double Evaluate(IExecutionContext context,
+      ISymbolicExpressionTreeInterpreter interpreter,
       SymbolicExpressionTree solution, double lowerEstimationLimit, double upperEstimationLimit,
       Dataset dataset,
Index: /branches/ParallelEngine/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/Evaluators/SymbolicRegressionMeanSquaredErrorEvaluator.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/Evaluators/SymbolicRegressionMeanSquaredErrorEvaluator.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/Evaluators/SymbolicRegressionMeanSquaredErrorEvaluator.cs	(revision 5177)
@@ -45,5 +45,5 @@
     }
 
-    public override double Evaluate(ISymbolicExpressionTreeInterpreter interpreter, SymbolicExpressionTree solution, double lowerEstimationLimit, double upperEstimationLimit, Dataset dataset, string targetVariable, IEnumerable<int> rows) {
+    public override double Evaluate(IExecutionContext context, ISymbolicExpressionTreeInterpreter interpreter, SymbolicExpressionTree solution, double lowerEstimationLimit, double upperEstimationLimit, Dataset dataset, string targetVariable, IEnumerable<int> rows) {
       double mse = Calculate(interpreter, solution, lowerEstimationLimit, upperEstimationLimit, dataset, targetVariable, rows);
       return mse;
Index: /branches/ParallelEngine/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/Evaluators/SymbolicRegressionPearsonsRSquaredEvaluator.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/Evaluators/SymbolicRegressionPearsonsRSquaredEvaluator.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/Evaluators/SymbolicRegressionPearsonsRSquaredEvaluator.cs	(revision 5177)
@@ -43,5 +43,5 @@
       return new SymbolicRegressionPearsonsRSquaredEvaluator(this, cloner);
     }
-    public override double Evaluate(ISymbolicExpressionTreeInterpreter interpreter, SymbolicExpressionTree solution, double lowerEstimationLimit, double upperEstimationLimit, Dataset dataset, string targetVariable, IEnumerable<int> rows) {
+    public override double Evaluate(IExecutionContext context, ISymbolicExpressionTreeInterpreter interpreter, SymbolicExpressionTree solution, double lowerEstimationLimit, double upperEstimationLimit, Dataset dataset, string targetVariable, IEnumerable<int> rows) {
       double mse = Calculate(interpreter, solution, lowerEstimationLimit, upperEstimationLimit, dataset, targetVariable, rows);
       return mse;
Index: /branches/ParallelEngine/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/Evaluators/SymbolicRegressionScaledMeanAndVarianceSquaredErrorEvaluator.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/Evaluators/SymbolicRegressionScaledMeanAndVarianceSquaredErrorEvaluator.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/Evaluators/SymbolicRegressionScaledMeanAndVarianceSquaredErrorEvaluator.cs	(revision 5177)
@@ -109,5 +109,5 @@
     }
 
-    public override double Evaluate(ISymbolicExpressionTreeInterpreter interpreter, SymbolicExpressionTree solution, double lowerEstimationLimit, double upperEstimationLimit, Dataset dataset, string targetVariable, IEnumerable<int> rows) {
+    public override double Evaluate(IExecutionContext context, ISymbolicExpressionTreeInterpreter interpreter, SymbolicExpressionTree solution, double lowerEstimationLimit, double upperEstimationLimit, Dataset dataset, string targetVariable, IEnumerable<int> rows) {
       double alpha, beta;
       double meanSE, varianceSE;
@@ -115,5 +115,5 @@
       double bias, variance, covariance;
       double mse;
-      if (ExecutionContext != null) {
+      if (context != null) {
         if (ApplyScaling.Value) {
           mse = Calculate(interpreter, solution, lowerEstimationLimit, upperEstimationLimit, dataset, targetVariable, rows, out beta, out alpha, out meanSE, out varianceSE, out count, out bias, out variance, out covariance);
Index: /branches/ParallelEngine/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/Evaluators/SymbolicRegressionScaledMeanSquaredErrorEvaluator.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/Evaluators/SymbolicRegressionScaledMeanSquaredErrorEvaluator.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/Evaluators/SymbolicRegressionScaledMeanSquaredErrorEvaluator.cs	(revision 5177)
@@ -67,8 +67,8 @@
     }
 
-    public override double Evaluate(ISymbolicExpressionTreeInterpreter interpreter, SymbolicExpressionTree solution, double lowerEstimationLimit, double upperEstimationLimit, Dataset dataset, string targetVariable, IEnumerable<int> rows) {
+    public override double Evaluate(IExecutionContext context, ISymbolicExpressionTreeInterpreter interpreter, SymbolicExpressionTree solution, double lowerEstimationLimit, double upperEstimationLimit, Dataset dataset, string targetVariable, IEnumerable<int> rows) {
       double alpha, beta;
       double mse = Calculate(interpreter, solution, lowerEstimationLimit, upperEstimationLimit, dataset, targetVariable, rows, out beta, out alpha);
-      if (ExecutionContext != null) {
+      if (context != null) {
         AlphaParameter.ActualValue = new DoubleValue(alpha);
         BetaParameter.ActualValue = new DoubleValue(beta);
Index: /branches/ParallelEngine/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/Interfaces/ISymbolicRegressionEvaluator.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/Interfaces/ISymbolicRegressionEvaluator.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/Interfaces/ISymbolicRegressionEvaluator.cs	(revision 5177)
@@ -38,5 +38,5 @@
 
 
-    double Evaluate(ISymbolicExpressionTreeInterpreter interpreter, SymbolicExpressionTree tree,
+    double Evaluate(IExecutionContext context, ISymbolicExpressionTreeInterpreter interpreter, SymbolicExpressionTree tree,
           double lowerEstimationLimit, double upperEstimationLimit,
           Dataset dataset, string targetVariable, IEnumerable<int> rows);
Index: /branches/ParallelEngine/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/SimpleSymbolicRegressionEvaluator.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/SimpleSymbolicRegressionEvaluator.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/SimpleSymbolicRegressionEvaluator.cs	(revision 5177)
@@ -120,5 +120,5 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       Dataset dataset = RegressionProblemData.Dataset;
       string targetVariable = RegressionProblemData.TargetVariable.Value;
@@ -136,5 +136,5 @@
       // NB: indexes must match SimpleEvaluator.ORIGINAL_INDEX and SimpleEvaluator.ESTIMATED_INDEX
       ValuesParameter.ActualValue = new DoubleMatrix(MatrixExtensions<double>.Create(originalValues.ToArray(), estimatedValues.ToArray()));
-      return base.Apply();
+      return base.Apply(context);
     }
   }
Index: /branches/ParallelEngine/HeuristicLab.Problems.DataAnalysis/3.3/Evaluators/SimpleEvaluator.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Problems.DataAnalysis/3.3/Evaluators/SimpleEvaluator.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Problems.DataAnalysis/3.3/Evaluators/SimpleEvaluator.cs	(revision 5177)
@@ -45,8 +45,8 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       DoubleMatrix values = ValuesParameter.ActualValue;
       Apply(values);
-      return base.Apply();
+      return base.Apply(context);
     }
 
Index: /branches/ParallelEngine/HeuristicLab.Problems.DataAnalysis/3.3/SupportVectorMachine/SupportVectorMachineCrossValidationEvaluator.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Problems.DataAnalysis/3.3/SupportVectorMachine/SupportVectorMachineCrossValidationEvaluator.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Problems.DataAnalysis/3.3/SupportVectorMachine/SupportVectorMachineCrossValidationEvaluator.cs	(revision 5177)
@@ -154,5 +154,5 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       double reductionRatio = 1.0; // TODO: make parameter
       if (ActualSamplesParameter.ActualValue != null)
@@ -177,5 +177,5 @@
 
       QualityParameter.ActualValue = new DoubleValue(quality);
-      return base.Apply();
+      return base.Apply(context);
     }
 
Index: /branches/ParallelEngine/HeuristicLab.Problems.DataAnalysis/3.3/SupportVectorMachine/SupportVectorMachineModelCreator.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Problems.DataAnalysis/3.3/SupportVectorMachine/SupportVectorMachineModelCreator.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Problems.DataAnalysis/3.3/SupportVectorMachine/SupportVectorMachineModelCreator.cs	(revision 5177)
@@ -133,5 +133,5 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       int start = SamplesStart.Value;
       int end = SamplesEnd.Value;
@@ -146,5 +146,5 @@
       SupportVectorMachineModelParameter.ActualValue = model;
 
-      return base.Apply();
+      return base.Apply(context);
     }
 
Index: /branches/ParallelEngine/HeuristicLab.Problems.DataAnalysis/3.3/SupportVectorMachine/SupportVectorMachineModelEvaluator.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Problems.DataAnalysis/3.3/SupportVectorMachine/SupportVectorMachineModelEvaluator.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Problems.DataAnalysis/3.3/SupportVectorMachine/SupportVectorMachineModelEvaluator.cs	(revision 5177)
@@ -87,5 +87,5 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       int start = SamplesStart.Value;
       int end = SamplesEnd.Value;
@@ -95,5 +95,5 @@
 
       ValuesParameter.ActualValue = new DoubleMatrix(Evaluate(SupportVectorMachineModel, DataAnalysisProblemData, rows));
-      return base.Apply();
+      return base.Apply(context);
     }
 
Index: /branches/ParallelEngine/HeuristicLab.Problems.DataAnalysis/3.3/Symbolic/VariableFrequencyAnalyser.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Problems.DataAnalysis/3.3/Symbolic/VariableFrequencyAnalyser.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Problems.DataAnalysis/3.3/Symbolic/VariableFrequencyAnalyser.cs	(revision 5177)
@@ -74,5 +74,5 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       var inputVariables = DataAnalysisProblemData.InputVariables.CheckedItems.Select(x => x.Value.Value);
       if (VariableFrequencies == null) {
@@ -86,5 +86,5 @@
         VariableFrequencies[lastRowIndex, columnIndex] = pair.Value;
       }
-      return base.Apply();
+      return base.Apply(context);
     }
 
Index: /branches/ParallelEngine/HeuristicLab.Problems.ExternalEvaluation/3.3/ExternalEvaluator.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Problems.ExternalEvaluation/3.3/ExternalEvaluator.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Problems.ExternalEvaluation/3.3/ExternalEvaluator.cs	(revision 5177)
@@ -60,5 +60,5 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       IEvaluationServiceClient client = ClientParameter.ActualValue;
       SolutionMessage.Builder protobufBuilder = SolutionMessage.CreateBuilder();
@@ -82,5 +82,5 @@
       else QualityParameter.ActualValue.Value = answer.Quality;
 
-      return base.Apply();
+      return base.Apply(context);
     }
   }
Index: /branches/ParallelEngine/HeuristicLab.Problems.Knapsack/3.3/Analyzers/BestKnapsackSolutionAnalyzer.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Problems.Knapsack/3.3/Analyzers/BestKnapsackSolutionAnalyzer.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Problems.Knapsack/3.3/Analyzers/BestKnapsackSolutionAnalyzer.cs	(revision 5177)
@@ -90,5 +90,5 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       ItemArray<BinaryVector> binaryVectors = BinaryVectorParameter.ActualValue;
       ItemArray<DoubleValue> qualities = QualityParameter.ActualValue;
@@ -126,5 +126,5 @@
       }
 
-      return base.Apply();
+      return base.Apply(context);
     }
   }
Index: /branches/ParallelEngine/HeuristicLab.Problems.Knapsack/3.3/Evaluators/KnapsackEvaluator.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Problems.Knapsack/3.3/Evaluators/KnapsackEvaluator.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Problems.Knapsack/3.3/Evaluators/KnapsackEvaluator.cs	(revision 5177)
@@ -129,5 +129,5 @@
     }
 
-    public sealed override IOperation Apply() {
+    public sealed override IOperation Apply(IExecutionContext context) {
       BinaryVector v = BinaryVectorParameter.ActualValue;
 
@@ -143,5 +143,5 @@
       AppliedPenaltyParameter.ActualValue = evaluation.AppliedPenalty;
 
-      return base.Apply();
+      return base.Apply(context);
     }
   }
Index: /branches/ParallelEngine/HeuristicLab.Problems.Knapsack/3.3/MoveEvaluators/KnapsackOneBitflipMoveEvaluator.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Problems.Knapsack/3.3/MoveEvaluators/KnapsackOneBitflipMoveEvaluator.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Problems.Knapsack/3.3/MoveEvaluators/KnapsackOneBitflipMoveEvaluator.cs	(revision 5177)
@@ -50,5 +50,5 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       BinaryVector binaryVector = BinaryVectorParameter.ActualValue;
       OneBitflipMove move = OneBitflipMoveParameter.ActualValue;
@@ -67,5 +67,5 @@
       if (MoveQualityParameter.ActualValue == null) MoveQualityParameter.ActualValue = new DoubleValue(moveQuality);
       else MoveQualityParameter.ActualValue.Value = moveQuality;
-      return base.Apply();
+      return base.Apply(context);
     }
   }
Index: /branches/ParallelEngine/HeuristicLab.Problems.OneMax/3.3/Analyzers/BestOneMaxSolutionAnalyzer.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Problems.OneMax/3.3/Analyzers/BestOneMaxSolutionAnalyzer.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Problems.OneMax/3.3/Analyzers/BestOneMaxSolutionAnalyzer.cs	(revision 5177)
@@ -73,5 +73,5 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       ItemArray<BinaryVector> binaryVectors = BinaryVectorParameter.ActualValue;
       ItemArray<DoubleValue> qualities = QualityParameter.ActualValue;
@@ -104,5 +104,5 @@
       }
 
-      return base.Apply();
+      return base.Apply(context);
     }
   }
Index: /branches/ParallelEngine/HeuristicLab.Problems.OneMax/3.3/Evaluators/OneMaxEvaluator.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Problems.OneMax/3.3/Evaluators/OneMaxEvaluator.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Problems.OneMax/3.3/Evaluators/OneMaxEvaluator.cs	(revision 5177)
@@ -56,5 +56,5 @@
     }
 
-    public sealed override IOperation Apply() {
+    public sealed override IOperation Apply(IExecutionContext context) {
       BinaryVector v = BinaryVectorParameter.ActualValue;
 
@@ -67,5 +67,5 @@
       QualityParameter.ActualValue = new DoubleValue(quality);
 
-      return base.Apply();
+      return base.Apply(context);
     }
   }
Index: /branches/ParallelEngine/HeuristicLab.Problems.OneMax/3.3/MoveEvaluators/OneMaxOneBitflipMoveEvaluator.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Problems.OneMax/3.3/MoveEvaluators/OneMaxOneBitflipMoveEvaluator.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Problems.OneMax/3.3/MoveEvaluators/OneMaxOneBitflipMoveEvaluator.cs	(revision 5177)
@@ -50,5 +50,5 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       BinaryVector binaryVector = BinaryVectorParameter.ActualValue;
       OneBitflipMove move = OneBitflipMoveParameter.ActualValue;
@@ -62,5 +62,5 @@
       if (MoveQualityParameter.ActualValue == null) MoveQualityParameter.ActualValue = new DoubleValue(moveQuality);
       else MoveQualityParameter.ActualValue.Value = moveQuality;
-      return base.Apply();
+      return base.Apply(context);
     }
   }
Index: /branches/ParallelEngine/HeuristicLab.Problems.TestFunctions/3.3/Analyzers/BestSingleObjectiveTestFunctionSolutionAnalyzer.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Problems.TestFunctions/3.3/Analyzers/BestSingleObjectiveTestFunctionSolutionAnalyzer.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Problems.TestFunctions/3.3/Analyzers/BestSingleObjectiveTestFunctionSolutionAnalyzer.cs	(revision 5177)
@@ -102,5 +102,5 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       ItemArray<RealVector> realVectors = RealVectorParameter.ActualValue;
       ItemArray<DoubleValue> qualities = QualityParameter.ActualValue;
@@ -137,5 +137,5 @@
       }
 
-      return base.Apply();
+      return base.Apply(context);
     }
   }
Index: /branches/ParallelEngine/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/SingleObjectiveTestFunctionProblemEvaluator.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/SingleObjectiveTestFunctionProblemEvaluator.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/SingleObjectiveTestFunctionProblemEvaluator.cs	(revision 5177)
@@ -82,9 +82,9 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       RealVector point = PointParameter.ActualValue;
       double quality = EvaluateFunction(point);
       QualityParameter.ActualValue = new DoubleValue(quality);
-      return base.Apply();
+      return base.Apply(context);
     }
 
Index: /branches/ParallelEngine/HeuristicLab.Problems.TestFunctions/3.3/MoveEvaluators/AdditiveMoveEvaluator.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Problems.TestFunctions/3.3/MoveEvaluators/AdditiveMoveEvaluator.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Problems.TestFunctions/3.3/MoveEvaluators/AdditiveMoveEvaluator.cs	(revision 5177)
@@ -63,5 +63,5 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       double mq = Evaluate(QualityParameter.ActualValue.Value, RealVectorParameter.ActualValue, AdditiveMoveParameter.ActualValue);
       DoubleValue moveQuality = MoveQualityParameter.ActualValue;
@@ -69,5 +69,5 @@
         MoveQualityParameter.ActualValue = new DoubleValue(mq);
       } else moveQuality.Value = mq;
-      return base.Apply();
+      return base.Apply(context);
     }
 
Index: /branches/ParallelEngine/HeuristicLab.Problems.TestFunctions/3.3/RealVectorToRealVectorEncoder.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Problems.TestFunctions/3.3/RealVectorToRealVectorEncoder.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Problems.TestFunctions/3.3/RealVectorToRealVectorEncoder.cs	(revision 5177)
@@ -73,9 +73,9 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       RealVectorParameter.ActualValue = OriginalRealVectorParameter.ActualValue;
       IItem value = (IItem)BoundsParameter.ActualValue.Clone();
       CurrentScope.Variables.Add(new Variable("ParticleBounds", BoundsParameter.Description, value == null ? null : (IItem)value.Clone()));
-      return base.Apply();
+      return base.Apply(context);
     }
 
Index: /branches/ParallelEngine/HeuristicLab.Problems.TravelingSalesman/3.3/Analyzers/BestTSPSolutionAnalyzer.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Problems.TravelingSalesman/3.3/Analyzers/BestTSPSolutionAnalyzer.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Problems.TravelingSalesman/3.3/Analyzers/BestTSPSolutionAnalyzer.cs	(revision 5177)
@@ -80,5 +80,5 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       DoubleMatrix coordinates = CoordinatesParameter.ActualValue;
       ItemArray<Permutation> permutations = PermutationParameter.ActualValue;
@@ -114,5 +114,5 @@
       }
 
-      return base.Apply();
+      return base.Apply(context);
     }
   }
Index: /branches/ParallelEngine/HeuristicLab.Problems.TravelingSalesman/3.3/Evaluators/TSPCoordinatesPathEvaluator.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Problems.TravelingSalesman/3.3/Evaluators/TSPCoordinatesPathEvaluator.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Problems.TravelingSalesman/3.3/Evaluators/TSPCoordinatesPathEvaluator.cs	(revision 5177)
@@ -71,5 +71,5 @@
     }
 
-    public sealed override IOperation Apply() {
+    public sealed override IOperation Apply(IExecutionContext context) {
       if (UseDistanceMatrixParameter.ActualValue.Value) {
         Permutation p = PermutationParameter.ActualValue;
@@ -102,5 +102,5 @@
         QualityParameter.ActualValue = new DoubleValue(length);
       }
-      return base.Apply();
+      return base.Apply(context);
     }
 
Index: /branches/ParallelEngine/HeuristicLab.Problems.TravelingSalesman/3.3/MoveEvaluators/TSPPathMoveEvaluator.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Problems.TravelingSalesman/3.3/MoveEvaluators/TSPPathMoveEvaluator.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Problems.TravelingSalesman/3.3/MoveEvaluators/TSPPathMoveEvaluator.cs	(revision 5177)
@@ -71,5 +71,5 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       Permutation permutation = PermutationParameter.ActualValue;
       DoubleMatrix coordinates = CoordinatesParameter.ActualValue;
@@ -86,5 +86,5 @@
       if (moveQuality == null) MoveQualityParameter.ActualValue = new DoubleValue(QualityParameter.ActualValue.Value + relativeQualityDifference);
       else moveQuality.Value = QualityParameter.ActualValue.Value + relativeQualityDifference;
-      return base.Apply();
+      return base.Apply(context);
     }
 
Index: /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Analyzers/BestAverageWorstVRPToursCalculator.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Analyzers/BestAverageWorstVRPToursCalculator.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Analyzers/BestAverageWorstVRPToursCalculator.cs	(revision 5177)
@@ -243,5 +243,5 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       UpdateOverloads();
       UpdateTardiness();
@@ -250,5 +250,5 @@
       UpdateVehiclesUtilized();
 
-      return base.Apply();
+      return base.Apply(context);
     }
   }
Index: /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Analyzers/BestVRPSolutionAnalyzer.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Analyzers/BestVRPSolutionAnalyzer.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Analyzers/BestVRPSolutionAnalyzer.cs	(revision 5177)
@@ -132,5 +132,5 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       DoubleMatrix coordinates = CoordinatesParameter.ActualValue;
       ItemArray<IVRPEncoding> solutions = VRPToursParameter.ActualValue;
@@ -188,5 +188,5 @@
       }
 
-      return base.Apply();
+      return base.Apply(context);
     }
   }
Index: /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Analyzers/BestVRPToursMemorizer.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Analyzers/BestVRPToursMemorizer.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Analyzers/BestVRPToursMemorizer.cs	(revision 5177)
@@ -89,5 +89,5 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       int i = OverloadParameter.ActualValue.Select((x, index) => new { index, x.Value }).OrderBy(x => x.Value).First().index;
       if (BestOverloadParameter.ActualValue == null)
@@ -120,5 +120,5 @@
         BestVehiclesUtilizedParameter.ActualValue.Value = VehiclesUtilizedParameter.ActualValue[i].Value;
 
-      return base.Apply();
+      return base.Apply(context);
     }
   }
Index: /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Alba/Crossovers/AlbaCrossover.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Alba/Crossovers/AlbaCrossover.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Alba/Crossovers/AlbaCrossover.cs	(revision 5177)
@@ -44,7 +44,7 @@
     }
 
-    protected abstract AlbaEncoding Crossover(IRandom random, AlbaEncoding parent1, AlbaEncoding parent2);
+    protected abstract AlbaEncoding Crossover(IExecutionContext context, IRandom random, AlbaEncoding parent1, AlbaEncoding parent2);
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       ItemArray<IVRPEncoding> parents = new ItemArray<IVRPEncoding>(ParentsParameter.ActualValue.Length);
       for (int i = 0; i < ParentsParameter.ActualValue.Length; i++) {
@@ -61,7 +61,7 @@
 
       ChildParameter.ActualValue =
-        Crossover(RandomParameter.ActualValue, parents[0] as AlbaEncoding, parents[1] as AlbaEncoding);
+        Crossover(context, RandomParameter.ActualValue, parents[0] as AlbaEncoding, parents[1] as AlbaEncoding);
 
-      return base.Apply();
+      return base.Apply(context);
     }
   }
Index: /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Alba/Crossovers/AlbaPermutationCrossover.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Alba/Crossovers/AlbaPermutationCrossover.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Alba/Crossovers/AlbaPermutationCrossover.cs	(revision 5177)
@@ -47,17 +47,17 @@
     }
 
-    protected override AlbaEncoding Crossover(IRandom random, AlbaEncoding parent1, AlbaEncoding parent2) {
+    protected override AlbaEncoding Crossover(IExecutionContext context, IRandom random, AlbaEncoding parent1, AlbaEncoding parent2) {
       //note - the inner crossover is called here and the result is converted to an alba representation
       //some refactoring should be done here in the future - the crossover operation should be called directly
 
       InnerCrossoverParameter.ActualValue.ParentsParameter.ActualName = ParentsParameter.ActualName;
-      IAtomicOperation op = this.ExecutionContext.CreateOperation(
-        InnerCrossoverParameter.ActualValue, this.ExecutionContext.Scope);
+      IAtomicOperation op = context.CreateOperation(
+        InnerCrossoverParameter.ActualValue, context.Scope);
       op.Operator.Execute((IExecutionContext)op);
 
       string childName = InnerCrossoverParameter.ActualValue.ChildParameter.ActualName;
-      if (ExecutionContext.Scope.Variables.ContainsKey(childName)) {
-        Permutation permutation = ExecutionContext.Scope.Variables[childName].Value as Permutation;
-        ExecutionContext.Scope.Variables.Remove(childName);
+      if (context.Scope.Variables.ContainsKey(childName)) {
+        Permutation permutation = context.Scope.Variables[childName].Value as Permutation;
+        context.Scope.Variables.Remove(childName);
 
         return new AlbaEncoding(permutation, Cities);
Index: /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Alba/Manipulators/AlbaCustomerInsertionManipulator.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Alba/Manipulators/AlbaCustomerInsertionManipulator.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Alba/Manipulators/AlbaCustomerInsertionManipulator.cs	(revision 5177)
@@ -41,5 +41,5 @@
     }
 
-    protected override void Manipulate(IRandom random, AlbaEncoding individual) {
+    protected override void Manipulate(IExecutionContext context, IRandom random, AlbaEncoding individual) {
       AlbaEncoding original = (AlbaEncoding)individual.Clone();
       int cutIndex, insertIndex, number;
Index: /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Alba/Manipulators/AlbaCustomerInversionManipulator.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Alba/Manipulators/AlbaCustomerInversionManipulator.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Alba/Manipulators/AlbaCustomerInversionManipulator.cs	(revision 5177)
@@ -41,5 +41,5 @@
       return new AlbaCustomerInversionManipulator(this, cloner);
     }
-    protected override void Manipulate(IRandom random, AlbaEncoding individual) {
+    protected override void Manipulate(IExecutionContext context, IRandom random, AlbaEncoding individual) {
       int breakPoint1, breakPoint2;
 
Index: /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Alba/Manipulators/AlbaCustomerSwapManipulator.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Alba/Manipulators/AlbaCustomerSwapManipulator.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Alba/Manipulators/AlbaCustomerSwapManipulator.cs	(revision 5177)
@@ -38,5 +38,5 @@
     }
 
-    protected override void Manipulate(IRandom random, AlbaEncoding individual) {
+    protected override void Manipulate(IExecutionContext context, IRandom random, AlbaEncoding individual) {
       int index1, index2, temp;
 
Index: /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Alba/Manipulators/AlbaIntraRouteInversionManipulator.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Alba/Manipulators/AlbaIntraRouteInversionManipulator.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Alba/Manipulators/AlbaIntraRouteInversionManipulator.cs	(revision 5177)
@@ -52,5 +52,5 @@
     }
 
-    protected override void Manipulate(IRandom rand, AlbaEncoding individual) {
+    protected override void Manipulate(IExecutionContext context, IRandom rand, AlbaEncoding individual) {
       int index1 = -1;
       int index2 = -1;
Index: /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Alba/Manipulators/AlbaLambdaInterchangeManipulator.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Alba/Manipulators/AlbaLambdaInterchangeManipulator.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Alba/Manipulators/AlbaLambdaInterchangeManipulator.cs	(revision 5177)
@@ -102,5 +102,5 @@
     }
 
-    protected override void Manipulate(IRandom rand, AlbaEncoding individual) {
+    protected override void Manipulate(IExecutionContext context, IRandom rand, AlbaEncoding individual) {
       List<Tour> tours = individual.GetTours();
       int lambda = LambdaParameter.Value.Value;
Index: /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Alba/Manipulators/AlbaManipulator.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Alba/Manipulators/AlbaManipulator.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Alba/Manipulators/AlbaManipulator.cs	(revision 5177)
@@ -44,5 +44,5 @@
     }
 
-    protected abstract void Manipulate(IRandom random, AlbaEncoding individual);
+    protected abstract void Manipulate(IExecutionContext context, IRandom random, AlbaEncoding individual);
 
     protected int FindCustomerLocation(int customer, AlbaEncoding individual) {
@@ -58,5 +58,5 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       IVRPEncoding solution = VRPToursParameter.ActualValue;
       if (!(solution is AlbaEncoding)) {
@@ -64,7 +64,7 @@
       }
 
-      Manipulate(RandomParameter.ActualValue, VRPToursParameter.ActualValue as AlbaEncoding);
+      Manipulate(context, RandomParameter.ActualValue, VRPToursParameter.ActualValue as AlbaEncoding);
 
-      return base.Apply();
+      return base.Apply(context);
     }
   }
Index: /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Alba/Manipulators/AlbaPermutationManipulator.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Alba/Manipulators/AlbaPermutationManipulator.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Alba/Manipulators/AlbaPermutationManipulator.cs	(revision 5177)
@@ -46,9 +46,9 @@
     }
 
-    protected override void Manipulate(IRandom random, AlbaEncoding individual) {
+    protected override void Manipulate(IExecutionContext context, IRandom random, AlbaEncoding individual) {
       InnerManipulatorParameter.ActualValue.PermutationParameter.ActualName = VRPToursParameter.ActualName;
 
-      IAtomicOperation op = this.ExecutionContext.CreateOperation(
-        InnerManipulatorParameter.ActualValue, this.ExecutionContext.Scope);
+      IAtomicOperation op = context.CreateOperation(
+        InnerManipulatorParameter.ActualValue, context.Scope);
       op.Operator.Execute((IExecutionContext)op);
     }
Index: /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Alba/Moves/AlbaMoveMaker.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Alba/Moves/AlbaMoveMaker.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Alba/Moves/AlbaMoveMaker.cs	(revision 5177)
@@ -80,6 +80,6 @@
     }
 
-    public override IOperation Apply() {
-      IOperation successor = base.Apply();
+    public override IOperation Apply(IExecutionContext context) {
+      IOperation successor = base.Apply(context);
 
       VehcilesUtilizedParameter.ActualValue = MoveVehcilesUtilizedParameter.ActualValue;
Index: /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Alba/Moves/AlbaMoveOperator.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Alba/Moves/AlbaMoveOperator.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Alba/Moves/AlbaMoveOperator.cs	(revision 5177)
@@ -36,5 +36,5 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       IVRPEncoding solution = VRPToursParameter.ActualValue;
       if (!(solution is AlbaEncoding)) {
@@ -43,5 +43,5 @@
       }
 
-      return base.Apply();
+      return base.Apply(context);
     }
   }
Index: /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Alba/Moves/AlbaPermutationMoveOperator.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Alba/Moves/AlbaPermutationMoveOperator.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Alba/Moves/AlbaPermutationMoveOperator.cs	(revision 5177)
@@ -39,11 +39,11 @@
     }
 
-    public override IOperation Apply() {
-      IOperation next = base.Apply();
+    public override IOperation Apply(IExecutionContext context) {
+      IOperation next = base.Apply(context);
 
       IVRPEncoding solution = VRPToursParameter.ActualValue;
 
       PermutationMoveOperatorParameter.PermutationParameter.ActualName = VRPToursParameter.ActualName;
-      IAtomicOperation op = this.ExecutionContext.CreateChildOperation(PermutationMoveOperatorParameter);
+      IAtomicOperation op = context.CreateChildOperation(PermutationMoveOperatorParameter);
       op.Operator.Execute((IExecutionContext)op);
 
Index: /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Alba/Moves/IntraRouteInversion/AlbaIntraRouteInversionMoveGenerator.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Alba/Moves/IntraRouteInversion/AlbaIntraRouteInversionMoveGenerator.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Alba/Moves/IntraRouteInversion/AlbaIntraRouteInversionMoveGenerator.cs	(revision 5177)
@@ -49,6 +49,6 @@
     protected abstract AlbaIntraRouteInversionMove[] GenerateMoves(AlbaEncoding individual);
 
-    public override IOperation Apply() {
-      IOperation next = base.Apply();
+    public override IOperation Apply(IExecutionContext context) {
+      IOperation next = base.Apply(context);
 
       AlbaEncoding individual = VRPToursParameter.ActualValue as AlbaEncoding;
Index: /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Alba/Moves/IntraRouteInversion/AlbaIntraRouteInversionMoveMaker.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Alba/Moves/IntraRouteInversion/AlbaIntraRouteInversionMoveMaker.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Alba/Moves/IntraRouteInversion/AlbaIntraRouteInversionMoveMaker.cs	(revision 5177)
@@ -62,6 +62,6 @@
     }
 
-    public override IOperation Apply() {
-      IOperation next = base.Apply();
+    public override IOperation Apply(IExecutionContext context) {
+      IOperation next = base.Apply(context);
       
       AlbaIntraRouteInversionMove move = IntraRouteInversionMoveParameter.ActualValue;
Index: /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Alba/Moves/LambdaInterchange/AlbaLambdaInterchangeMoveGenerator.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Alba/Moves/LambdaInterchange/AlbaLambdaInterchangeMoveGenerator.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Alba/Moves/LambdaInterchange/AlbaLambdaInterchangeMoveGenerator.cs	(revision 5177)
@@ -61,6 +61,6 @@
     protected abstract AlbaLambdaInterchangeMove[] GenerateMoves(AlbaEncoding individual, int lambda);
 
-    public override IOperation Apply() {
-      IOperation next = base.Apply();
+    public override IOperation Apply(IExecutionContext context) {
+      IOperation next = base.Apply(context);
 
       AlbaEncoding individual = VRPToursParameter.ActualValue as AlbaEncoding;
Index: /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Alba/Moves/LambdaInterchange/AlbaLambdaInterchangeMoveMaker.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Alba/Moves/LambdaInterchange/AlbaLambdaInterchangeMoveMaker.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Alba/Moves/LambdaInterchange/AlbaLambdaInterchangeMoveMaker.cs	(revision 5177)
@@ -67,6 +67,6 @@
     }
 
-    public override IOperation Apply() {
-      IOperation next = base.Apply();
+    public override IOperation Apply(IExecutionContext context) {
+      IOperation next = base.Apply(context);
 
       AlbaLambdaInterchangeMove move = LambdaInterchangeMoveParameter.ActualValue;
Index: /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Alba/Moves/ThreeOpt/AlbaTranslocationMoveGenerator.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Alba/Moves/ThreeOpt/AlbaTranslocationMoveGenerator.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Alba/Moves/ThreeOpt/AlbaTranslocationMoveGenerator.cs	(revision 5177)
@@ -84,6 +84,6 @@
     }
 
-    public override IOperation Apply() {
-      IOperation successor = base.Apply();
+    public override IOperation Apply(IExecutionContext context) {
+      IOperation successor = base.Apply(context);
 
       Permutation permutation = VRPToursParameter.ActualValue as Permutation;
Index: /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Alba/Moves/ThreeOpt/AlbaTranslocationMoveMaker.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Alba/Moves/ThreeOpt/AlbaTranslocationMoveMaker.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Alba/Moves/ThreeOpt/AlbaTranslocationMoveMaker.cs	(revision 5177)
@@ -61,11 +61,11 @@
       return new AlbaTranslocationMoveMaker(this, cloner);
     }
-    public override IOperation Apply() {
-      IOperation next = base.Apply();
+    public override IOperation Apply(IExecutionContext context) {
+      IOperation next = base.Apply(context);
 
       IVRPEncoding solution = VRPToursParameter.ActualValue;
 
       moveMaker.PermutationParameter.ActualName = VRPToursParameter.ActualName;
-      IAtomicOperation op = this.ExecutionContext.CreateChildOperation(moveMaker);
+      IAtomicOperation op = context.CreateChildOperation(moveMaker);
       op.Operator.Execute((IExecutionContext)op);
 
Index: /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/GVR/Crossovers/GVRCrossover.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/GVR/Crossovers/GVRCrossover.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/GVR/Crossovers/GVRCrossover.cs	(revision 5177)
@@ -101,5 +101,5 @@
     }
    
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       ItemArray<IVRPEncoding> parents = new ItemArray<IVRPEncoding>(ParentsParameter.ActualValue.Length);
       for (int i = 0; i < ParentsParameter.ActualValue.Length; i++) {
@@ -116,5 +116,5 @@
       ChildParameter.ActualValue = Crossover(RandomParameter.ActualValue, parents[0] as GVREncoding, parents[1] as GVREncoding);
 
-      return base.Apply();
+      return base.Apply(context);
     }
   }
Index: /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/GVR/Manipulators/GVRManipulator.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/GVR/Manipulators/GVRManipulator.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/GVR/Manipulators/GVRManipulator.cs	(revision 5177)
@@ -50,5 +50,5 @@
     protected abstract void Manipulate(IRandom random, GVREncoding individual);
    
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       IVRPEncoding solution = VRPToursParameter.ActualValue;
       if (!(solution is GVREncoding)) {
@@ -59,5 +59,5 @@
       Manipulate(RandomParameter.ActualValue, VRPToursParameter.ActualValue as GVREncoding);
 
-      return base.Apply();
+      return base.Apply(context);
     }
   }
Index: /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/General/Creators/DefaultRepresentationCreator.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/General/Creators/DefaultRepresentationCreator.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/General/Creators/DefaultRepresentationCreator.cs	(revision 5177)
@@ -38,9 +38,9 @@
     public DefaultRepresentationCreator() : base() { }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       //choose default encoding here
       VRPToursParameter.ActualValue = PotvinEncoding.ConvertFrom(CreateSolution());
 
-      return base.Apply();
+      return base.Apply(context);
     }
   }
Index: /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/General/Creators/MultiVRPSolutionCreator.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/General/Creators/MultiVRPSolutionCreator.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/General/Creators/MultiVRPSolutionCreator.cs	(revision 5177)
@@ -135,7 +135,7 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       if (Operators.Count == 0) throw new InvalidOperationException(Name + ": Please add at least one VRP creator to choose from.");
-      return base.Apply();
+      return base.Apply(context);
     }
   }
Index: /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/General/Crossovers/MultiVRPSolutionCrossover.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/General/Crossovers/MultiVRPSolutionCrossover.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/General/Crossovers/MultiVRPSolutionCrossover.cs	(revision 5177)
@@ -142,7 +142,7 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       if (Operators.Count == 0) throw new InvalidOperationException(Name + ": Please add at least one permutation crossover to choose from.");
-      return base.Apply();
+      return base.Apply(context);
     }
   }
Index: /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/General/Crossovers/RandomParentCloneCrossover.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/General/Crossovers/RandomParentCloneCrossover.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/General/Crossovers/RandomParentCloneCrossover.cs	(revision 5177)
@@ -57,5 +57,5 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       if (RandomParameter.ActualValue.Next() < 0.5)
         ChildParameter.ActualValue = ParentsParameter.ActualValue[0].Clone() as IVRPEncoding;
@@ -63,5 +63,5 @@
         ChildParameter.ActualValue = ParentsParameter.ActualValue[1].Clone() as IVRPEncoding;
 
-      return base.Apply();
+      return base.Apply(context);
     }
   }
Index: /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/General/Manipulators/MultiVRPSolutionManipulator.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/General/Manipulators/MultiVRPSolutionManipulator.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/General/Manipulators/MultiVRPSolutionManipulator.cs	(revision 5177)
@@ -140,7 +140,7 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       if (Operators.Count == 0) throw new InvalidOperationException(Name + ": Please add at least one permutation manipulator to choose from.");
-      return base.Apply();
+      return base.Apply(context);
     }
   }
Index: /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/General/Moves/MultiVRPMoveOperator/MultiVRPMoveGenerator.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/General/Moves/MultiVRPMoveOperator/MultiVRPMoveGenerator.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/General/Moves/MultiVRPMoveOperator/MultiVRPMoveGenerator.cs	(revision 5177)
@@ -187,7 +187,7 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       if (Operators.Count == 0) throw new InvalidOperationException(Name + ": Please add at least one VRP move generator choose from.");
-      OperationCollection next = new OperationCollection(base.Apply());
+      OperationCollection next = new OperationCollection(base.Apply(context));
 
       for (int i = 0; i < SampleSizeParameter.ActualValue.Value; i++) {
@@ -215,5 +215,5 @@
 
         if (successor != null) {
-          next.Insert(0, ExecutionContext.CreateChildOperation(successor));
+          next.Insert(0, context.CreateChildOperation(successor));
         }
       }
Index: /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/General/Moves/MultiVRPMoveOperator/MultiVRPMoveMaker.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/General/Moves/MultiVRPMoveOperator/MultiVRPMoveMaker.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/General/Moves/MultiVRPMoveOperator/MultiVRPMoveMaker.cs	(revision 5177)
@@ -107,6 +107,6 @@
     }
 
-    public override IOperation Apply() {
-      IOperation next = base.Apply();
+    public override IOperation Apply(IExecutionContext context) {
+      IOperation next = base.Apply(context);
 
       IVRPEncoding solution = VRPToursParameter.ActualValue as IVRPEncoding;
Index: /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Potvin/Crossovers/PotvinCrossover.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Potvin/Crossovers/PotvinCrossover.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Potvin/Crossovers/PotvinCrossover.cs	(revision 5177)
@@ -125,5 +125,5 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       ItemArray<IVRPEncoding> parents = new ItemArray<IVRPEncoding>(ParentsParameter.ActualValue.Length);
       for (int i = 0; i < ParentsParameter.ActualValue.Length; i++) {
@@ -140,5 +140,5 @@
       ChildParameter.ActualValue = Crossover(RandomParameter.ActualValue, parents[0] as PotvinEncoding, parents[1] as PotvinEncoding);
 
-      return base.Apply();
+      return base.Apply(context);
     }
   }
Index: /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Potvin/Manipulators/PotvinManipulator.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Potvin/Manipulators/PotvinManipulator.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Potvin/Manipulators/PotvinManipulator.cs	(revision 5177)
@@ -80,5 +80,5 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       IVRPEncoding solution = VRPToursParameter.ActualValue;
       if (!(solution is PotvinEncoding)) {
@@ -88,5 +88,5 @@
       Manipulate(RandomParameter.ActualValue, VRPToursParameter.ActualValue as PotvinEncoding);
 
-      return base.Apply();
+      return base.Apply(context);
     }
   }
Index: /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Prins/Crossovers/PrinsCrossover.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Prins/Crossovers/PrinsCrossover.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Prins/Crossovers/PrinsCrossover.cs	(revision 5177)
@@ -65,7 +65,7 @@
     }
 
-    protected abstract PrinsEncoding Crossover(IRandom random, PrinsEncoding parent1, PrinsEncoding parent2);
+    protected abstract PrinsEncoding Crossover(IExecutionContext context, IRandom random, PrinsEncoding parent1, PrinsEncoding parent2);
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       ItemArray<IVRPEncoding> parents = new ItemArray<IVRPEncoding>(ParentsParameter.ActualValue.Length);
       for (int i = 0; i < ParentsParameter.ActualValue.Length; i++) {
@@ -95,7 +95,7 @@
 
       ChildParameter.ActualValue =
-        Crossover(RandomParameter.ActualValue, parents[0] as PrinsEncoding, parents[1] as PrinsEncoding);
+        Crossover(context, RandomParameter.ActualValue, parents[0] as PrinsEncoding, parents[1] as PrinsEncoding);
 
-      return base.Apply();
+      return base.Apply(context);
     }
   }
Index: /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Prins/Crossovers/PrinsPermutationCrossover.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Prins/Crossovers/PrinsPermutationCrossover.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Prins/Crossovers/PrinsPermutationCrossover.cs	(revision 5177)
@@ -45,17 +45,17 @@
     }
 
-    protected override PrinsEncoding Crossover(IRandom random, PrinsEncoding parent1, PrinsEncoding parent2) {
+    protected override PrinsEncoding Crossover(IExecutionContext context, IRandom random, PrinsEncoding parent1, PrinsEncoding parent2) {
       //note - the inner crossover is called here and the result is converted to a prins representation
       //some refactoring should be done here in the future - the crossover operation should be called directly
 
       InnerCrossoverParameter.ActualValue.ParentsParameter.ActualName = ParentsParameter.ActualName;
-      IAtomicOperation op = this.ExecutionContext.CreateOperation(
-        InnerCrossoverParameter.ActualValue, this.ExecutionContext.Scope);
+      IAtomicOperation op = context.CreateOperation(
+        InnerCrossoverParameter.ActualValue, context.Scope);
       op.Operator.Execute((IExecutionContext)op);
 
       string childName = InnerCrossoverParameter.ActualValue.ChildParameter.ActualName;
-      if (ExecutionContext.Scope.Variables.ContainsKey(childName)) {
-        Permutation permutation = ExecutionContext.Scope.Variables[childName].Value as Permutation;
-        ExecutionContext.Scope.Variables.Remove(childName);
+      if (context.Scope.Variables.ContainsKey(childName)) {
+        Permutation permutation = context.Scope.Variables[childName].Value as Permutation;
+        context.Scope.Variables.Remove(childName);
 
         return new PrinsEncoding(permutation, Cities,
Index: /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Prins/Manipulators/PrinsExhaustiveLSManipulator.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Prins/Manipulators/PrinsExhaustiveLSManipulator.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Prins/Manipulators/PrinsExhaustiveLSManipulator.cs	(revision 5177)
@@ -39,5 +39,5 @@
     }
 
-    protected override void Manipulate(IRandom random, PrinsEncoding individual) {
+    protected override void Manipulate(IExecutionContext context, IRandom random, PrinsEncoding individual) {
       List<Tour> tours = individual.GetTours(DistanceMatrixParameter);
       bool improvement = false;
Index: /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Prins/Manipulators/PrinsManipulator.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Prins/Manipulators/PrinsManipulator.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Prins/Manipulators/PrinsManipulator.cs	(revision 5177)
@@ -64,7 +64,7 @@
     }
 
-    protected abstract void Manipulate(IRandom random, PrinsEncoding individual);
+    protected abstract void Manipulate(IExecutionContext context, IRandom random, PrinsEncoding individual);
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       IVRPEncoding solution = VRPToursParameter.ActualValue;
       if (!(solution is PrinsEncoding)) {
@@ -86,7 +86,7 @@
       }
 
-      Manipulate(RandomParameter.ActualValue, VRPToursParameter.ActualValue as PrinsEncoding);
+      Manipulate(context, RandomParameter.ActualValue, VRPToursParameter.ActualValue as PrinsEncoding);
 
-      return base.Apply();
+      return base.Apply(context);
     }
   }
Index: /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Prins/Manipulators/PrinsPermutationManipulator.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Prins/Manipulators/PrinsPermutationManipulator.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Prins/Manipulators/PrinsPermutationManipulator.cs	(revision 5177)
@@ -45,9 +45,9 @@
     }
 
-    protected override void Manipulate(IRandom random, PrinsEncoding individual) {
+    protected override void Manipulate(IExecutionContext context, IRandom random, PrinsEncoding individual) {
       InnerManipulatorParameter.ActualValue.PermutationParameter.ActualName = VRPToursParameter.ActualName;
 
-      IAtomicOperation op = this.ExecutionContext.CreateOperation(
-        InnerManipulatorParameter.ActualValue, this.ExecutionContext.Scope);
+      IAtomicOperation op = context.CreateOperation(
+        InnerManipulatorParameter.ActualValue, context.Scope);
       op.Operator.Execute((IExecutionContext)op);
     }
Index: /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Prins/Manipulators/PrinsStochasticLSManipulator.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Prins/Manipulators/PrinsStochasticLSManipulator.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Prins/Manipulators/PrinsStochasticLSManipulator.cs	(revision 5177)
@@ -46,5 +46,5 @@
     }
 
-    protected override void Manipulate(IRandom random, PrinsEncoding individual) {
+    protected override void Manipulate(IExecutionContext context, IRandom random, PrinsEncoding individual) {
       List<Tour> tours = individual.GetTours(DistanceMatrixParameter);
       bool improvement = false;
Index: /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Zhu/Crossovers/ZhuCrossover.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Zhu/Crossovers/ZhuCrossover.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Zhu/Crossovers/ZhuCrossover.cs	(revision 5177)
@@ -45,7 +45,7 @@
     }
 
-    protected abstract ZhuEncoding Crossover(IRandom random, ZhuEncoding parent1, ZhuEncoding parent2);
+    protected abstract ZhuEncoding Crossover(IExecutionContext context, IRandom random, ZhuEncoding parent1, ZhuEncoding parent2);
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       ItemArray<IVRPEncoding> parents = new ItemArray<IVRPEncoding>(ParentsParameter.ActualValue.Length);
       for (int i = 0; i < ParentsParameter.ActualValue.Length; i++) {
@@ -70,7 +70,7 @@
 
       ChildParameter.ActualValue =
-        Crossover(RandomParameter.ActualValue, parents[0] as ZhuEncoding, parents[1] as ZhuEncoding);
+        Crossover(context, RandomParameter.ActualValue, parents[0] as ZhuEncoding, parents[1] as ZhuEncoding);
 
-      return base.Apply();
+      return base.Apply(context);
     }
   }
Index: /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Zhu/Crossovers/ZhuHeuristicCrossover1.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Zhu/Crossovers/ZhuHeuristicCrossover1.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Zhu/Crossovers/ZhuHeuristicCrossover1.cs	(revision 5177)
@@ -49,5 +49,5 @@
     }
 
-    protected override ZhuEncoding Crossover(IRandom random, ZhuEncoding parent1, ZhuEncoding parent2) {
+    protected override ZhuEncoding Crossover(IExecutionContext context, IRandom random, ZhuEncoding parent1, ZhuEncoding parent2) {
       parent1 = parent1.Clone() as ZhuEncoding;
       parent2 = parent2.Clone() as ZhuEncoding;
Index: /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Zhu/Crossovers/ZhuHeuristicCrossover2.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Zhu/Crossovers/ZhuHeuristicCrossover2.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Zhu/Crossovers/ZhuHeuristicCrossover2.cs	(revision 5177)
@@ -41,5 +41,5 @@
     }
 
-    protected override ZhuEncoding Crossover(IRandom random, ZhuEncoding parent1, ZhuEncoding parent2) {
+    protected override ZhuEncoding Crossover(IExecutionContext context, IRandom random, ZhuEncoding parent1, ZhuEncoding parent2) {
       List<int> p1 = new List<int>(parent1);
       List<int> p2 = new List<int>(parent2);
Index: /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Zhu/Crossovers/ZhuMergeCrossover1.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Zhu/Crossovers/ZhuMergeCrossover1.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Zhu/Crossovers/ZhuMergeCrossover1.cs	(revision 5177)
@@ -49,5 +49,5 @@
     }
 
-    protected override ZhuEncoding Crossover(IRandom random, ZhuEncoding parent1, ZhuEncoding parent2) {
+    protected override ZhuEncoding Crossover(IExecutionContext context, IRandom random, ZhuEncoding parent1, ZhuEncoding parent2) {
       parent1 = parent1.Clone() as ZhuEncoding;
       parent2 = parent2.Clone() as ZhuEncoding;
Index: /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Zhu/Crossovers/ZhuMergeCrossover2.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Zhu/Crossovers/ZhuMergeCrossover2.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Zhu/Crossovers/ZhuMergeCrossover2.cs	(revision 5177)
@@ -41,5 +41,5 @@
     }
 
-    protected override ZhuEncoding Crossover(IRandom random, ZhuEncoding parent1, ZhuEncoding parent2) {
+    protected override ZhuEncoding Crossover(IExecutionContext context, IRandom random, ZhuEncoding parent1, ZhuEncoding parent2) {
       List<int> p1 = new List<int>(parent1);
       List<int> p2 = new List<int>(parent2);
Index: /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Zhu/Crossovers/ZhuPermutationCrossover.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Zhu/Crossovers/ZhuPermutationCrossover.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Zhu/Crossovers/ZhuPermutationCrossover.cs	(revision 5177)
@@ -47,17 +47,17 @@
     }
 
-    protected override ZhuEncoding Crossover(IRandom random, ZhuEncoding parent1, ZhuEncoding parent2) {
+    protected override ZhuEncoding Crossover(IExecutionContext context, IRandom random, ZhuEncoding parent1, ZhuEncoding parent2) {
       //note - the inner crossover is called here and the result is converted to a prins representation
       //some refactoring should be done here in the future - the crossover operation should be called directly
 
       InnerCrossoverParameter.ActualValue.ParentsParameter.ActualName = ParentsParameter.ActualName;
-      IAtomicOperation op = this.ExecutionContext.CreateOperation(
-        InnerCrossoverParameter.ActualValue, this.ExecutionContext.Scope);
+      IAtomicOperation op = context.CreateOperation(
+        InnerCrossoverParameter.ActualValue, context.Scope);
       op.Operator.Execute((IExecutionContext)op);
 
       string childName = InnerCrossoverParameter.ActualValue.ChildParameter.ActualName;
-      if (ExecutionContext.Scope.Variables.ContainsKey(childName)) {
-        Permutation permutation = ExecutionContext.Scope.Variables[childName].Value as Permutation;
-        ExecutionContext.Scope.Variables.Remove(childName);
+      if (context.Scope.Variables.ContainsKey(childName)) {
+        Permutation permutation = context.Scope.Variables[childName].Value as Permutation;
+        context.Scope.Variables.Remove(childName);
 
         return new ZhuEncoding(permutation, Cities,
Index: /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Zhu/Manipulators/ZhuManipulator.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Zhu/Manipulators/ZhuManipulator.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Zhu/Manipulators/ZhuManipulator.cs	(revision 5177)
@@ -45,7 +45,7 @@
     }
 
-    protected abstract void Manipulate(IRandom random, ZhuEncoding individual);
+    protected abstract void Manipulate(IExecutionContext context, IRandom random, ZhuEncoding individual);
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       IVRPEncoding solution = VRPToursParameter.ActualValue;
       if (!(solution is ZhuEncoding)) {
@@ -62,7 +62,7 @@
       }
 
-      Manipulate(RandomParameter.ActualValue, VRPToursParameter.ActualValue as ZhuEncoding);
+      Manipulate(context, RandomParameter.ActualValue, VRPToursParameter.ActualValue as ZhuEncoding);
 
-      return base.Apply();
+      return base.Apply(context);
     }
   }
Index: /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Zhu/Manipulators/ZhuPermutationManipulator.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Zhu/Manipulators/ZhuPermutationManipulator.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Zhu/Manipulators/ZhuPermutationManipulator.cs	(revision 5177)
@@ -47,9 +47,9 @@
     }
 
-    protected override void Manipulate(IRandom random, ZhuEncoding individual) {
+    protected override void Manipulate(IExecutionContext context, IRandom random, ZhuEncoding individual) {
       InnerManipulatorParameter.ActualValue.PermutationParameter.ActualName = VRPToursParameter.ActualName;
 
-      IAtomicOperation op = this.ExecutionContext.CreateOperation(
-        InnerManipulatorParameter.ActualValue, this.ExecutionContext.Scope);
+      IAtomicOperation op = context.CreateOperation(
+        InnerManipulatorParameter.ActualValue, context.Scope);
       op.Operator.Execute((IExecutionContext)op);
     }
Index: /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Evaluators/VRPEvaluator.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Evaluators/VRPEvaluator.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/Evaluators/VRPEvaluator.cs	(revision 5177)
@@ -214,5 +214,5 @@
     }
 
-    public sealed override IOperation Apply() {
+    public sealed override IOperation Apply(IExecutionContext context) {
       IVRPEncoding solution = VRPToursParameter.ActualValue;
 
@@ -229,5 +229,5 @@
       TardinessParameter.ActualValue = new DoubleValue(sumEval.Tardiness);
 
-      return base.Apply();
+      return base.Apply(context);
     }
   }
Index: /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/MoveEvaluators/VRPMoveEvaluator.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/MoveEvaluators/VRPMoveEvaluator.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Problems.VehicleRouting/3.3/MoveEvaluators/VRPMoveEvaluator.cs	(revision 5177)
@@ -99,5 +99,5 @@
     protected abstract TourEvaluation GetMoveQuality();
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       TourEvaluation tourEval = GetMoveQuality();
 
@@ -109,5 +109,5 @@
       MoveTravelTimeParameter.ActualValue = new DoubleValue(tourEval.TravelTime);
 
-      return base.Apply();
+      return base.Apply(context);
     }
   }
Index: /branches/ParallelEngine/HeuristicLab.Random/3.3/NormalRandomizer.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Random/3.3/NormalRandomizer.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Random/3.3/NormalRandomizer.cs	(revision 5177)
@@ -81,5 +81,5 @@
     /// Generates a new normally distributed random variable and assigns it to the specified variable.
     /// </summary>
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       IRandom random = RandomParameter.ActualValue;
       double mu = MuParameter.ActualValue.Value;
Index: /branches/ParallelEngine/HeuristicLab.Random/3.3/RandomCreator.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Random/3.3/RandomCreator.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Random/3.3/RandomCreator.cs	(revision 5177)
@@ -88,5 +88,5 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       if (SetSeedRandomlyParameter.ActualValue == null) SetSeedRandomlyParameter.ActualValue = new BoolValue(true);
       bool setSeedRandomly = SetSeedRandomlyParameter.ActualValue.Value;
@@ -99,5 +99,5 @@
       RandomParameter.ActualValue = random;
 
-      return base.Apply();
+      return base.Apply(context);
     }
   }
Index: /branches/ParallelEngine/HeuristicLab.Random/3.3/UniformRandomizer.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Random/3.3/UniformRandomizer.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Random/3.3/UniformRandomizer.cs	(revision 5177)
@@ -83,5 +83,5 @@
     /// Generates a new uniformly distributed random variable.
     /// </summary>
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       IRandom random = RandomParameter.ActualValue;
       double min = MinParameter.ActualValue.Value;
Index: /branches/ParallelEngine/HeuristicLab.Selection/3.3/GenderSpecificSelector.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Selection/3.3/GenderSpecificSelector.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Selection/3.3/GenderSpecificSelector.cs	(revision 5177)
@@ -140,10 +140,10 @@
     /// <exception cref="InvalidOperationException">Thrown when <see cref="NumberOfSelectedSubScopesParameter"/> returns an odd number.</exception>
     /// <returns>Returns Apply of <see cref="AlgorithmOperator"/>.</returns>
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       int count = NumberOfSelectedSubScopesParameter.ActualValue.Value;
       if (count % 2 > 0) throw new InvalidOperationException(Name + ": There must be an equal number of sub-scopes to be selected.");
       FemaleSelector.NumberOfSelectedSubScopesParameter.Value = new IntValue(count / 2);
       MaleSelector.NumberOfSelectedSubScopesParameter.Value = new IntValue(count / 2);
-      return base.Apply();
+      return base.Apply(context);
     }
 
Index: /branches/ParallelEngine/HeuristicLab.Selection/3.3/OffspringSelector.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Selection/3.3/OffspringSelector.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Selection/3.3/OffspringSelector.cs	(revision 5177)
@@ -80,8 +80,8 @@
     }
 
-    public override IOperation Apply() {
+    public override IOperation Apply(IExecutionContext context) {
       double maxSelPress = MaximumSelectionPressureParameter.ActualValue.Value;
       double successRatio = SuccessRatioParameter.ActualValue.Value;
-      IScope scope = ExecutionContext.Scope;
+      IScope scope = context.Scope;
       IScope parents = scope.SubScopes[0];
       IScope offspring = scope.SubScopes[1];
@@ -162,5 +162,5 @@
         IOperator moreOffspring = OffspringCreatorParameter.ActualValue as IOperator;
         if (moreOffspring == null) throw new InvalidOperationException(Name + ": More offspring are required, but no operator specified for creating them.");
-        return ExecutionContext.CreateOperation(moreOffspring);
+        return context.CreateOperation(moreOffspring);
       } else {
         // enough children generated
@@ -170,5 +170,5 @@
         scope.Variables.Remove(OffspringPopulationParameter.TranslatedName);
         scope.Variables.Remove(OffspringPopulationWinnersParameter.TranslatedName);
-        return base.Apply();
+        return base.Apply(context);
       }
     }
Index: /branches/ParallelEngine/HeuristicLab.Selection/3.3/Reducer.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Selection/3.3/Reducer.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Selection/3.3/Reducer.cs	(revision 5177)
@@ -52,5 +52,5 @@
     }
 
-    public sealed override IOperation Apply() {
+    public sealed override IOperation Apply(IExecutionContext context) {
       List<IScope> scopes = new List<IScope>(CurrentScope.SubScopes);
       List<IScope> reduced = Reduce(scopes);
@@ -59,5 +59,5 @@
       CurrentScope.SubScopes.AddRange(reduced);
 
-      return base.Apply();
+      return base.Apply(context);
     }
 
Index: /branches/ParallelEngine/HeuristicLab.Selection/3.3/Replacer.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Selection/3.3/Replacer.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Selection/3.3/Replacer.cs	(revision 5177)
@@ -75,8 +75,8 @@
     }
 
-    public override IOperation Apply() {
-      if (ExecutionContext.Scope.SubScopes.Count != 2) throw new InvalidOperationException(Name + ": There must be two sub-scopes which should be replaced/merged.");
-      int remaining = ExecutionContext.Scope.SubScopes[0].SubScopes.Count;
-      int selected = ExecutionContext.Scope.SubScopes[1].SubScopes.Count;
+    public override IOperation Apply(IExecutionContext context) {
+      if (context.Scope.SubScopes.Count != 2) throw new InvalidOperationException(Name + ": There must be two sub-scopes which should be replaced/merged.");
+      int remaining = context.Scope.SubScopes[0].SubScopes.Count;
+      int selected = context.Scope.SubScopes[1].SubScopes.Count;
 
       ISelector replacedSelector = ReplacedSelectorParameter.ActualValue;
@@ -92,5 +92,5 @@
       }
 
-      return base.Apply();
+      return base.Apply(context);
     }
   }
Index: /branches/ParallelEngine/HeuristicLab.Selection/3.3/Selector.cs
===================================================================
--- /branches/ParallelEngine/HeuristicLab.Selection/3.3/Selector.cs	(revision 5176)
+++ /branches/ParallelEngine/HeuristicLab.Selection/3.3/Selector.cs	(revision 5177)
@@ -54,5 +54,5 @@
     }
 
-    public sealed override IOperation Apply() {
+    public sealed override IOperation Apply(IExecutionContext context) {
       List<IScope> scopes = new List<IScope>(CurrentScope.SubScopes);
       IScope[] selected = Select(scopes);
@@ -66,5 +66,5 @@
       CurrentScope.SubScopes.Add(selectedScope);
 
-      return base.Apply();
+      return base.Apply(context);
     }
 
