Index: branches/2521_ProblemRefactoring/HeuristicLab.Algorithms.ParameterlessPopulationPyramid/3.3/EvaluationTracker.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Algorithms.ParameterlessPopulationPyramid/3.3/EvaluationTracker.cs	(revision 17363)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Algorithms.ParameterlessPopulationPyramid/3.3/EvaluationTracker.cs	(revision 17382)
@@ -95,12 +95,14 @@
     }
 
-    public double Evaluate(BinaryVector vector, IRandom random) {
+    public ISingleObjectiveEvaluationResult Evaluate(BinaryVector vector, IRandom random) {
       return Evaluate(vector, random, CancellationToken.None);
     }
 
-    public double Evaluate(BinaryVector vector, IRandom random, CancellationToken cancellationToken) {
+    public ISingleObjectiveEvaluationResult Evaluate(BinaryVector vector, IRandom random, CancellationToken cancellationToken) {
       if (Evaluations >= maxEvaluations) throw new OperationCanceledException("Maximum Evaluation Limit Reached");
       Evaluations++;
-      double fitness = problem.Evaluate(vector, random);
+
+      var evaluationResult = problem.Evaluate(vector, random);
+      double fitness = evaluationResult.Quality;
       if (double.IsNaN(BestQuality) || problem.IsBetter(fitness, BestQuality)) {
         BestQuality = fitness;
@@ -108,5 +110,5 @@
         BestFoundOnEvaluation = Evaluations;
       }
-      return fitness;
+      return evaluationResult;
     }
 
@@ -115,6 +117,6 @@
     }
     public void Evaluate(ISingleObjectiveSolutionContext<BinaryVector> 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;
     }
 
Index: branches/2521_ProblemRefactoring/HeuristicLab.Algorithms.ParameterlessPopulationPyramid/3.3/HillClimber.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Algorithms.ParameterlessPopulationPyramid/3.3/HillClimber.cs	(revision 17363)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Algorithms.ParameterlessPopulationPyramid/3.3/HillClimber.cs	(revision 17382)
@@ -25,4 +25,5 @@
 using System.Linq;
 using System.Threading;
+using HEAL.Attic;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
@@ -31,5 +32,4 @@
 using HeuristicLab.Optimization;
 using HeuristicLab.Parameters;
-using HEAL.Attic;
 using HeuristicLab.Random;
 
@@ -110,5 +110,6 @@
         }
 
-        var fitness = Problem.Evaluate(solution, random);
+        var evaluationResult = Problem.Evaluate(solution, random);
+        var fitness = evaluationResult.Quality;
 
         fitness = ImproveToLocalOptimum(Problem, solution, fitness, random);
@@ -128,5 +129,6 @@
           if (tried.Contains(option)) continue;
           solution[option] = !solution[option];
-          double newFitness = problem.Evaluate(solution, rand);
+          var newEvaluationResult = problem.Evaluate(solution, rand);
+          double newFitness = newEvaluationResult.Quality;
           if (problem.IsBetter(newFitness, fitness)) {
             fitness = newFitness;
Index: branches/2521_ProblemRefactoring/HeuristicLab.Algorithms.ParameterlessPopulationPyramid/3.3/LinkageCrossover.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Algorithms.ParameterlessPopulationPyramid/3.3/LinkageCrossover.cs	(revision 17363)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Algorithms.ParameterlessPopulationPyramid/3.3/LinkageCrossover.cs	(revision 17382)
@@ -59,5 +59,5 @@
       changed = flipped.Count > 0;
       if (changed) {
-        double newFitness = problem.Evaluate(solution, rand);
+        double newFitness = problem.Evaluate(solution, rand).Quality;
         // if the original is strictly better, revert the change
         if (problem.IsBetter(fitness, newFitness)) {
Index: branches/2521_ProblemRefactoring/HeuristicLab.Algorithms.ParameterlessPopulationPyramid/3.3/ParameterlessPopulationPyramid.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Algorithms.ParameterlessPopulationPyramid/3.3/ParameterlessPopulationPyramid.cs	(revision 17363)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Algorithms.ParameterlessPopulationPyramid/3.3/ParameterlessPopulationPyramid.cs	(revision 17382)
@@ -214,5 +214,5 @@
         solution[i] = random.Next(2) == 1;
       }
-      double fitness = tracker.Evaluate(solution, random);
+      double fitness = tracker.Evaluate(solution, random).Quality;
       fitness = HillClimber.ImproveToLocalOptimum(tracker, solution, fitness, random);
       AddIfUnique(solution, 0);
@@ -271,6 +271,5 @@
           ResultsIterations++;
           cancellationToken.ThrowIfCancellationRequested();
-        }
-        finally {
+        } finally {
           ResultsEvaluations = tracker.Evaluations;
           ResultsBestSolution = new BinaryVector(tracker.BestSolution);
