Index: /branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/Interfaces/internal/ISingleObjectiveEvaluationOperator.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/Interfaces/internal/ISingleObjectiveEvaluationOperator.cs	(revision 17365)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/Interfaces/internal/ISingleObjectiveEvaluationOperator.cs	(revision 17366)
@@ -21,4 +21,5 @@
 
 using System;
+using System.Threading;
 using HEAL.Attic;
 using HeuristicLab.Core;
@@ -28,5 +29,5 @@
   internal interface ISingleObjectiveEvaluationOperator<TEncodedSolution> : ISingleObjectiveEvaluator, IEncodingOperator<TEncodedSolution>
   where TEncodedSolution : class, IEncodedSolution {
-    Action<ISingleObjectiveSolutionContext<TEncodedSolution>, IRandom> Evaluate { get; set; }
+    Action<ISingleObjectiveSolutionContext<TEncodedSolution>, IRandom, CancellationToken> Evaluate { get; set; }
   }
 }
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/Operators/SingleObjectiveEvaluator.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/Operators/SingleObjectiveEvaluator.cs	(revision 17365)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/Operators/SingleObjectiveEvaluator.cs	(revision 17366)
@@ -21,4 +21,5 @@
 
 using System;
+using System.Threading;
 using HEAL.Attic;
 using HeuristicLab.Common;
@@ -46,5 +47,5 @@
     }
 
-    public Action<ISingleObjectiveSolutionContext<TEncodedSolution>, IRandom> Evaluate { get; set; }
+    public Action<ISingleObjectiveSolutionContext<TEncodedSolution>, IRandom, CancellationToken> Evaluate { get; set; }
 
     [StorableConstructor]
@@ -65,5 +66,5 @@
       var solutionContext = new SingleObjectiveSolutionContextScope<TEncodedSolution>(ExecutionContext.Scope, solution);
 
-      Evaluate(solutionContext, random);
+      Evaluate(solutionContext, random, CancellationToken.None);
       var qualityValue = solutionContext.EvaluationResult.Quality;
 
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/Operators/SingleObjectiveImprover.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/Operators/SingleObjectiveImprover.cs	(revision 17365)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/Operators/SingleObjectiveImprover.cs	(revision 17366)
@@ -23,4 +23,5 @@
 using System.Collections.Generic;
 using System.Linq;
+using System.Threading;
 using HEAL.Attic;
 using HeuristicLab.Common;
@@ -63,5 +64,5 @@
     }
 
-    public Action<ISingleObjectiveSolutionContext<TEncodedSolution>, IRandom> Evaluate { get; set; }
+    public Action<ISingleObjectiveSolutionContext<TEncodedSolution>, IRandom, CancellationToken> Evaluate { get; set; }
     public Func<ISingleObjectiveSolutionContext<TEncodedSolution>, IRandom, IEnumerable<ISingleObjectiveSolutionContext<TEncodedSolution>>> GetNeighbors { get; set; }
 
@@ -94,5 +95,5 @@
       double quality;
       if (QualityParameter.ActualValue == null) {
-        if (!solutionContext.IsEvaluated) Evaluate(solutionContext, random);
+        if (!solutionContext.IsEvaluated) Evaluate(solutionContext, random, CancellationToken.None);
 
         quality = solutionContext.EvaluationResult.Quality;
@@ -104,5 +105,5 @@
         var bestQuality = quality;
         foreach (var neighbor in GetNeighbors(solutionContext, random).Take(sampleSize)) {
-          Evaluate(neighbor, random);
+          Evaluate(neighbor, random, CancellationToken);
           var q = neighbor.EvaluationResult.Quality;
           count++;
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/Operators/SingleObjectiveMoveEvaluator.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/Operators/SingleObjectiveMoveEvaluator.cs	(revision 17365)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/Operators/SingleObjectiveMoveEvaluator.cs	(revision 17366)
@@ -21,4 +21,5 @@
 
 using System;
+using System.Threading;
 using HEAL.Attic;
 using HeuristicLab.Common;
@@ -50,5 +51,5 @@
     }
 
-    public Action<ISingleObjectiveSolutionContext<TEncodedSolution>, IRandom> Evaluate { get; set; }
+    public Action<ISingleObjectiveSolutionContext<TEncodedSolution>, IRandom, CancellationToken> Evaluate { get; set; }
 
     [StorableConstructor]
@@ -72,5 +73,5 @@
       var solutionContext = new SingleObjectiveSolutionContextScope<TEncodedSolution>(ExecutionContext.Scope, solution);
 
-      Evaluate(solutionContext, random);
+      Evaluate(solutionContext, random, CancellationToken.None);
       var qualityValue = solutionContext.EvaluationResult.Quality;
 
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/SingleObjectiveProblem.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/SingleObjectiveProblem.cs	(revision 17365)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/SingleObjectiveProblem.cs	(revision 17366)
@@ -113,10 +113,10 @@
     }
 
-    public virtual double Evaluate(TEncodedSolution solution, IRandom random) {
+    public double Evaluate(TEncodedSolution solution, IRandom random) {
       return Evaluate(solution, random, CancellationToken.None);
     }
     public abstract double Evaluate(TEncodedSolution solution, IRandom random, CancellationToken cancellationToken);
 
-    public virtual void Evaluate(ISingleObjectiveSolutionContext<TEncodedSolution> solutionContext, IRandom random) {
+    public void Evaluate(ISingleObjectiveSolutionContext<TEncodedSolution> solutionContext, IRandom random) {
       Evaluate(solutionContext, random, CancellationToken.None);
     }
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/SolutionContext.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/SolutionContext.cs	(revision 17365)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/SolutionContext.cs	(revision 17366)
@@ -63,8 +63,8 @@
     }
 
-    public void SetAdditionalData(string identifier, object o) {
+    public virtual void SetAdditionalData(string identifier, object o) {
       data[identifier] = o;
     }
-    public object GetAdditionalData(string identifier) {
+    public virtual object GetAdditionalData(string identifier) {
       return data[identifier];
     }
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Problems.Programmable/3.3/SingleObjectiveProblemDefinitionScript.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Problems.Programmable/3.3/SingleObjectiveProblemDefinitionScript.cs	(revision 17365)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Problems.Programmable/3.3/SingleObjectiveProblemDefinitionScript.cs	(revision 17366)
@@ -63,6 +63,5 @@
     }
     void ISingleObjectiveProblemDefinition<TEncoding, TEncodedSolution>.Evaluate(ISingleObjectiveSolutionContext<TEncodedSolution> solutionContext, IRandom random, CancellationToken cancellationToken) {
-      double quality = CompiledProblemDefinition.Evaluate(solutionContext.EncodedSolution, random, cancellationToken);
-      solutionContext.EvaluationResult = new SingleObjectiveEvaluationResult(quality);
+      CompiledProblemDefinition.Evaluate(solutionContext, random, cancellationToken);
     }
 
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Problems.Programmable/3.3/Templates/SingleObjectiveCombinedEncodingProblem_Template.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Problems.Programmable/3.3/Templates/SingleObjectiveCombinedEncodingProblem_Template.cs	(revision 17365)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Problems.Programmable/3.3/Templates/SingleObjectiveCombinedEncodingProblem_Template.cs	(revision 17366)
@@ -2,4 +2,5 @@
 using System.Linq;
 using System.Collections.Generic;
+using System.Threading;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
@@ -28,5 +29,5 @@
     }
 
-    public override double Evaluate(CombinedSolution solution, IRandom random) {
+    public override double Evaluate(CombinedSolution solution, IRandom random, CancellationToken cancellationToken) {
       // Use vars.yourVariable to access variables in the variable store i.e. yourVariable
       var quality = 0.0;
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Problems.Programmable/3.3/Templates/SingleObjectiveProblem_Template.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Problems.Programmable/3.3/Templates/SingleObjectiveProblem_Template.cs	(revision 17365)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Problems.Programmable/3.3/Templates/SingleObjectiveProblem_Template.cs	(revision 17366)
@@ -2,4 +2,5 @@
 using System.Linq;
 using System.Collections.Generic;
+using System.Threading;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
@@ -20,5 +21,5 @@
     }
 
-    public override double Evaluate(SOLUTION_CLASS solution, IRandom random) {
+    public override double Evaluate(SOLUTION_CLASS solution, IRandom random, CancellationToken cancellationToken) {
       // Use vars.yourVariable to access variables in the variable store i.e. yourVariable
       var quality = 0.0;
