Index: branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/Interfaces/IEvaluationResult.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/Interfaces/IEvaluationResult.cs	(revision 17381)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/Interfaces/IEvaluationResult.cs	(revision 17382)
@@ -26,4 +26,6 @@
   [StorableType("406EB24F-A59C-440C-8B83-49FC05F48855")]
   public interface IEvaluationResult : IItem {
+
+    //TODO: make methods generic for get/set additional data
     void SetAdditionalData(string identifier, object o);
     object GetAdditionalData(string identifier);
Index: branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/Interfaces/ISingleObjectiveProblemDefinition.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/Interfaces/ISingleObjectiveProblemDefinition.cs	(revision 17381)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/Interfaces/ISingleObjectiveProblemDefinition.cs	(revision 17382)
@@ -37,6 +37,7 @@
     where TEncodedSolution : class, IEncodedSolution {
 
-    double Evaluate(TEncodedSolution solution, IRandom random);
-    double Evaluate(TEncodedSolution solution, IRandom random, CancellationToken cancellationToken);
+    ISingleObjectiveEvaluationResult Evaluate(TEncodedSolution solution, IRandom random);
+    ISingleObjectiveEvaluationResult Evaluate(TEncodedSolution solution, IRandom random, CancellationToken cancellationToken);
+
     void Evaluate(ISingleObjectiveSolutionContext<TEncodedSolution> solutionContext, IRandom random);
     void Evaluate(ISingleObjectiveSolutionContext<TEncodedSolution> solutionContext, IRandom random, CancellationToken cancellationToken);
Index: branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/Interfaces/ISolutionContext.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/Interfaces/ISolutionContext.cs	(revision 17381)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/Interfaces/ISolutionContext.cs	(revision 17382)
@@ -33,4 +33,6 @@
     IEvaluationResult EvaluationResult { get; }
 
+
+    //TODO: make methods generic for get/set additional data
     void SetAdditionalData(string identifier, object o);
     object GetAdditionalData(string identifier);
Index: branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/SingleObjectiveProblem.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/SingleObjectiveProblem.cs	(revision 17381)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/SingleObjectiveProblem.cs	(revision 17382)
@@ -113,8 +113,8 @@
     }
 
-    public double Evaluate(TEncodedSolution solution, IRandom random) {
+    public ISingleObjectiveEvaluationResult Evaluate(TEncodedSolution solution, IRandom random) {
       return Evaluate(solution, random, CancellationToken.None);
     }
-    public abstract double Evaluate(TEncodedSolution solution, IRandom random, CancellationToken cancellationToken);
+    public abstract ISingleObjectiveEvaluationResult Evaluate(TEncodedSolution solution, IRandom random, CancellationToken cancellationToken);
 
     public void Evaluate(ISingleObjectiveSolutionContext<TEncodedSolution> solutionContext, IRandom random) {
@@ -122,6 +122,6 @@
     }
     public virtual void Evaluate(ISingleObjectiveSolutionContext<TEncodedSolution> solutionContext, IRandom random, CancellationToken cancellationToken) {
-      double quality = Evaluate(solutionContext.EncodedSolution, random, cancellationToken);
-      solutionContext.EvaluationResult = new SingleObjectiveEvaluationResult(quality);
+      var evaluationResult = Evaluate(solutionContext.EncodedSolution, random, cancellationToken);
+      solutionContext.EvaluationResult = evaluationResult;
     }
 
@@ -139,6 +139,4 @@
       return GetNeighbors(solutionContext.EncodedSolution, random).Select(n => new SingleObjectiveSolutionContext<TEncodedSolution>(n));
     }
-
-
 
     public static bool IsBetter(bool maximization, double quality, double bestQuality) {
