Index: branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab-3.3/Samples/EsGriewankSampleTest.cs
===================================================================
--- branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab-3.3/Samples/EsGriewankSampleTest.cs	(revision 13401)
+++ branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab-3.3/Samples/EsGriewankSampleTest.cs	(revision 13408)
@@ -62,10 +62,9 @@
       SingleObjectiveTestFunctionProblem problem = new SingleObjectiveTestFunctionProblem();
 
-      problem.ProblemSize.Value = 10;
-      problem.EvaluatorParameter.Value = new GriewankEvaluator();
+      problem.ProblemSize = 10;
+      problem.TestFunction = new Griewank();
       problem.SolutionCreatorParameter.Value = new UniformRandomRealVectorCreator();
-      problem.Maximization.Value = false;
       problem.Bounds = new DoubleMatrix(new double[,] { { -600, 600 } });
-      problem.BestKnownQuality.Value = 0;
+      problem.BestKnownQuality = 0;
       problem.BestKnownSolutionParameter.Value = new RealVector(10);
       problem.Name = "Single Objective Test Function";
Index: branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab-3.3/Samples/LocalSearchKnapsackSampleTest.cs
===================================================================
--- branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab-3.3/Samples/LocalSearchKnapsackSampleTest.cs	(revision 13401)
+++ branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab-3.3/Samples/LocalSearchKnapsackSampleTest.cs	(revision 13408)
@@ -59,12 +59,9 @@
       #region Problem Configuration
       KnapsackProblem problem = new KnapsackProblem();
-      problem.BestKnownQuality = new DoubleValue(362);
+      problem.BestKnownQuality = 362;
       problem.BestKnownSolution = new HeuristicLab.Encodings.BinaryVectorEncoding.BinaryVector(new bool[] { 
        true , false, false, true , true , true , true , true , false, true , true , true , true , true , true , false, true , false, true , true , false, true , true , false, true , false, true , true , true , false, true , true , false, true , true , false, true , false, true , true , true , true , true , true , true , true , true , true , true , true , true , false, true , false, false, true , true , false, true , true , true , true , true , true , true , true , false, true , false, true , true , true , true , false, true , true , true , true , true , true , true , true});
-      problem.EvaluatorParameter.Value = new KnapsackEvaluator();
       problem.SolutionCreatorParameter.Value = new RandomBinaryVectorCreator();
-      problem.KnapsackCapacity.Value = 297;
-      problem.Maximization.Value = true;
-      problem.Penalty.Value = 1;
+      problem.KnapsackCapacity = 297;
       problem.Values = new IntArray(new int[] { 
   6, 1, 1, 6, 7, 8, 7, 4, 2, 5, 2, 6, 7, 8, 7, 1, 7, 1, 9, 4, 2, 6, 5,  3, 5, 3, 3, 6, 5, 2, 4, 9, 4, 5, 7, 1, 4, 3, 5, 5, 8, 3, 6, 7, 3, 9, 7, 7, 5, 5, 7, 1, 4, 4, 3, 9, 5, 1, 6, 2, 2, 6, 1, 6, 5, 4, 4, 7, 1,  8, 9, 9, 7, 4, 3, 8, 7, 5, 7, 4, 4, 5});
Index: branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab-3.3/Samples/OSESGriewankSampleTest.cs
===================================================================
--- branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab-3.3/Samples/OSESGriewankSampleTest.cs	(revision 13401)
+++ branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab-3.3/Samples/OSESGriewankSampleTest.cs	(revision 13408)
@@ -21,5 +21,4 @@
 
 using System.IO;
-using HeuristicLab.Algorithms.EvolutionStrategy;
 using HeuristicLab.Algorithms.OffspringSelectionEvolutionStrategy;
 using HeuristicLab.Data;
@@ -63,10 +62,9 @@
       SingleObjectiveTestFunctionProblem problem = new SingleObjectiveTestFunctionProblem();
 
-      problem.ProblemSize.Value = 10;
-      problem.EvaluatorParameter.Value = new GriewankEvaluator();
+      problem.ProblemSize = 10;
+      problem.TestFunction = new Griewank();
       problem.SolutionCreatorParameter.Value = new UniformRandomRealVectorCreator();
-      problem.Maximization.Value = false;
       problem.Bounds = new DoubleMatrix(new double[,] { { -600, 600 } });
-      problem.BestKnownQuality.Value = 0;
+      problem.BestKnownQuality = 0;
       problem.BestKnownSolutionParameter.Value = new RealVector(10);
       problem.Name = "Single Objective Test Function";
Index: branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab-3.3/Samples/PsoSchwefelSampleTest.cs
===================================================================
--- branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab-3.3/Samples/PsoSchwefelSampleTest.cs	(revision 13401)
+++ branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab-3.3/Samples/PsoSchwefelSampleTest.cs	(revision 13408)
@@ -68,10 +68,9 @@
       #region Problem Configuration
       var problem = new SingleObjectiveTestFunctionProblem();
-      problem.BestKnownQuality.Value = 0.0;
+      problem.BestKnownQuality = 0.0;
       problem.BestKnownSolutionParameter.Value = new RealVector(new double[] { 420.968746, 420.968746 });
       problem.Bounds = new DoubleMatrix(new double[,] { { -500, 500 } });
-      problem.EvaluatorParameter.Value = new SchwefelEvaluator();
-      problem.Maximization.Value = false;
-      problem.ProblemSize.Value = 2;
+      problem.TestFunction = new Schwefel();
+      problem.ProblemSize = 2;
       problem.SolutionCreatorParameter.Value = new UniformRandomRealVectorCreator();
       #endregion
Index: branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab-3.3/Samples/SimulatedAnnealingRastriginSampleTest.cs
===================================================================
--- branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab-3.3/Samples/SimulatedAnnealingRastriginSampleTest.cs	(revision 13401)
+++ branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab-3.3/Samples/SimulatedAnnealingRastriginSampleTest.cs	(revision 13408)
@@ -57,10 +57,9 @@
       #region Problem Configuration
       var problem = new SingleObjectiveTestFunctionProblem();
-      problem.BestKnownQuality.Value = 0.0;
+      problem.BestKnownQuality = 0.0;
       problem.BestKnownSolutionParameter.Value = new RealVector(new double[] { 0, 0 });
       problem.Bounds = new DoubleMatrix(new double[,] { { -5.12, 5.12 } });
-      problem.EvaluatorParameter.Value = new RastriginEvaluator();
-      problem.Maximization.Value = false;
-      problem.ProblemSize.Value = 2;
+      problem.TestFunction= new Rastrigin();
+      problem.ProblemSize = 2;
       problem.SolutionCreatorParameter.Value = new UniformRandomRealVectorCreator();
       #endregion
@@ -79,7 +78,6 @@
       sa.MaximumIterations.Value = 100;
       var moveEvaluator = sa.MoveEvaluatorParameter.ValidValues
-        .OfType<RastriginAdditiveMoveEvaluator>()
+        .OfType<AdditiveMoveEvaluator>()
         .Single();
-      moveEvaluator.A.Value = 10;
       sa.MoveEvaluator = moveEvaluator;
 
Index: branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab.Problems.QuadraticAssignment-3.3/QAPLIBInstancesTest.cs
===================================================================
--- branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab.Problems.QuadraticAssignment-3.3/QAPLIBInstancesTest.cs	(revision 13401)
+++ branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab.Problems.QuadraticAssignment-3.3/QAPLIBInstancesTest.cs	(revision 13408)
@@ -223,6 +223,6 @@
         qap.Load(provider.LoadData(instance));
         if (qaplibInstances.ContainsKey(instance.Name)
-          && qap.BestKnownQuality != null && qap.BestKnownQuality.Value != qaplibInstances[instance.Name])
-          failedInstances.AppendLine(instance.Name + ": " + qap.BestKnownQuality.Value.ToString() + " vs " + qaplibInstances[instance.Name]);
+          && qap.BestKnownQuality != null && qap.BestKnownQuality != qaplibInstances[instance.Name])
+          failedInstances.AppendLine(instance.Name + ": " + qap.BestKnownQuality.ToString() + " vs " + qaplibInstances[instance.Name]);
       }
       Assert.IsTrue(failedInstances.Length == 0, "Following instances/solutions have suspicious best quality: " + Environment.NewLine + failedInstances.ToString());
Index: branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab.Problems.QuadraticAssignment-3.3/QAPMoveEvaluatorTest.cs
===================================================================
--- branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab.Problems.QuadraticAssignment-3.3/QAPMoveEvaluatorTest.cs	(revision 13401)
+++ branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab.Problems.QuadraticAssignment-3.3/QAPMoveEvaluatorTest.cs	(revision 13408)
@@ -35,4 +35,6 @@
     private const int ProblemSize = 10;
     private static DoubleMatrix symmetricDistances, symmetricWeights, asymmetricDistances, asymmetricWeights, nonZeroDiagonalWeights, nonZeroDiagonalDistances;
+
+    private static QuadraticAssignmentProblem symmetricProblem, asymmetricProblem, nonZeroDiagonalProblem;
     private static Permutation assignment;
     private static MersenneTwister random;
@@ -82,4 +84,16 @@
         nonZeroDiagonalWeights[index, index] = random.Next(1, ProblemSize * 100);
       assignment = new Permutation(PermutationTypes.Absolute, ProblemSize, random);
+
+      symmetricProblem = new QuadraticAssignmentProblem();
+      symmetricProblem.Distances = symmetricDistances;
+      symmetricProblem.Weights = symmetricWeights;
+
+      asymmetricProblem = new QuadraticAssignmentProblem();
+      asymmetricProblem.Distances = asymmetricDistances;
+      asymmetricProblem.Weights = asymmetricWeights;
+
+      nonZeroDiagonalProblem = new QuadraticAssignmentProblem();
+      nonZeroDiagonalProblem.Distances = nonZeroDiagonalDistances;
+      nonZeroDiagonalProblem.Weights = nonZeroDiagonalWeights;
     }
 
@@ -88,5 +102,4 @@
     [TestProperty("Time", "short")]
     public void Swap2MoveEvaluatorFastEvaluationTest() {
-
       for (int i = 0; i < 500; i++) {
         Swap2Move lastMove = new Swap2Move(random.Next(ProblemSize), random.Next(ProblemSize));
@@ -100,6 +113,6 @@
         double moveAfter = QAPSwap2MoveEvaluator.Apply(assignment, currentMove,
                 moveBefore, symmetricWeights, symmetricDistances, lastMove);
-        double before = QAPEvaluator.Apply(assignment, symmetricWeights, symmetricDistances);
-        double after = QAPEvaluator.Apply(nextAssignment, symmetricWeights, symmetricDistances);
+        double before = symmetricProblem.Evaluate(assignment);
+        double after = symmetricProblem.Evaluate(nextAssignment);
 
         Assert.IsTrue(moveAfter.IsAlmost(after - before), "Failed on symmetric matrices: " + Environment.NewLine
@@ -109,6 +122,6 @@
         moveAfter = QAPSwap2MoveEvaluator.Apply(assignment, currentMove,
                 moveBefore, asymmetricWeights, asymmetricDistances, lastMove);
-        before = QAPEvaluator.Apply(assignment, asymmetricWeights, asymmetricDistances);
-        after = QAPEvaluator.Apply(nextAssignment, asymmetricWeights, asymmetricDistances);
+        before = asymmetricProblem.Evaluate(assignment);
+        after = asymmetricProblem.Evaluate(nextAssignment);
 
         Assert.IsTrue(moveAfter.IsAlmost(after - before), "Failed on asymmetric matrices: " + Environment.NewLine
@@ -118,6 +131,6 @@
         moveAfter = QAPSwap2MoveEvaluator.Apply(assignment, currentMove,
                 moveBefore, nonZeroDiagonalWeights, nonZeroDiagonalDistances, lastMove);
-        before = QAPEvaluator.Apply(assignment, nonZeroDiagonalWeights, nonZeroDiagonalDistances);
-        after = QAPEvaluator.Apply(nextAssignment, nonZeroDiagonalWeights, nonZeroDiagonalDistances);
+        before = nonZeroDiagonalProblem.Evaluate(assignment);
+        after = nonZeroDiagonalProblem.Evaluate(nextAssignment);
 
         Assert.IsTrue(moveAfter.IsAlmost(after - before), "Failed on non-zero diagonal matrices: " + Environment.NewLine
@@ -130,4 +143,5 @@
     [TestProperty("Time", "short")]
     public void Swap2MoveEvaluatorTest() {
+
       for (int i = 0; i < 500; i++) {
         int index1 = random.Next(ProblemSize);
@@ -135,23 +149,23 @@
 
         // SYMMETRIC MATRICES
-        double before = QAPEvaluator.Apply(assignment, symmetricWeights, symmetricDistances);
+        double before = symmetricProblem.Evaluate(assignment);
         Swap2Manipulator.Apply(assignment, index1, index2);
-        double after = QAPEvaluator.Apply(assignment, symmetricWeights, symmetricDistances);
+        double after = symmetricProblem.Evaluate(assignment);
         double move = QAPSwap2MoveEvaluator.Apply(assignment, new Swap2Move(index1, index2, assignment), symmetricWeights, symmetricDistances);
         Assert.IsTrue(move.IsAlmost(before - after), "Failed on symmetric matrices");
 
         // ASYMMETRIC MATRICES
-        before = QAPEvaluator.Apply(assignment, asymmetricWeights, asymmetricDistances);
+        before = asymmetricProblem.Evaluate(assignment);
         Permutation clone = (Permutation)assignment.Clone();
         Swap2Manipulator.Apply(assignment, index1, index2);
-        after = QAPEvaluator.Apply(assignment, asymmetricWeights, asymmetricDistances);
+        after = asymmetricProblem.Evaluate(assignment);
         move = QAPSwap2MoveEvaluator.Apply(clone, new Swap2Move(index1, index2), asymmetricWeights, asymmetricDistances);
         Assert.IsTrue(move.IsAlmost(after - before), "Failed on asymmetric matrices");
 
         // NON-ZERO DIAGONAL ASSYMETRIC MATRICES
-        before = QAPEvaluator.Apply(assignment, nonZeroDiagonalWeights, nonZeroDiagonalDistances);
+        before = nonZeroDiagonalProblem.Evaluate(assignment);
         clone = (Permutation)assignment.Clone();
         Swap2Manipulator.Apply(assignment, index1, index2);
-        after = QAPEvaluator.Apply(assignment, nonZeroDiagonalWeights, nonZeroDiagonalDistances);
+        after = nonZeroDiagonalProblem.Evaluate(assignment);
         move = QAPSwap2MoveEvaluator.Apply(clone, new Swap2Move(index1, index2), nonZeroDiagonalWeights, nonZeroDiagonalDistances);
         Assert.IsTrue(move.IsAlmost(after - before), "Failed on non-zero diagonal matrices");
@@ -169,23 +183,23 @@
 
         // SYMMETRIC MATRICES
-        double before = QAPEvaluator.Apply(assignment, symmetricWeights, symmetricDistances);
+        double before = symmetricProblem.Evaluate(assignment);
         InversionManipulator.Apply(assignment, Math.Min(index1, index2), Math.Max(index1, index2));
-        double after = QAPEvaluator.Apply(assignment, symmetricWeights, symmetricDistances);
+        double after = symmetricProblem.Evaluate(assignment);
         double move = QAPInversionMoveEvaluator.Apply(assignment, new InversionMove(index1, index2, assignment), symmetricWeights, symmetricDistances);
         Assert.IsTrue(move.IsAlmost(before - after), "Failed on symmetric matrices");
 
         // ASYMMETRIC MATRICES
-        before = QAPEvaluator.Apply(assignment, asymmetricWeights, asymmetricDistances);
+        before = asymmetricProblem.Evaluate(assignment);
         Permutation clone = (Permutation)assignment.Clone();
         InversionManipulator.Apply(assignment, index1, index2);
-        after = QAPEvaluator.Apply(assignment, asymmetricWeights, asymmetricDistances);
+        after = asymmetricProblem.Evaluate(assignment);
         move = QAPInversionMoveEvaluator.Apply(clone, new InversionMove(index1, index2), asymmetricWeights, asymmetricDistances);
         Assert.IsTrue(move.IsAlmost(after - before), "Failed on asymmetric matrices");
 
         // NON-ZERO DIAGONAL ASYMMETRIC MATRICES
-        before = QAPEvaluator.Apply(assignment, nonZeroDiagonalWeights, nonZeroDiagonalDistances);
+        before = nonZeroDiagonalProblem.Evaluate(assignment);
         clone = (Permutation)assignment.Clone();
         InversionManipulator.Apply(assignment, index1, index2);
-        after = QAPEvaluator.Apply(assignment, nonZeroDiagonalWeights, nonZeroDiagonalDistances);
+        after = nonZeroDiagonalProblem.Evaluate(assignment);
         move = QAPInversionMoveEvaluator.Apply(clone, new InversionMove(index1, index2), nonZeroDiagonalWeights, nonZeroDiagonalDistances);
         Assert.IsTrue(move.IsAlmost(after - before), "Failed on non-zero diagonal matrices");
@@ -208,24 +222,24 @@
 
         // SYMMETRIC MATRICES
-        double before = QAPEvaluator.Apply(assignment, symmetricWeights, symmetricDistances);
+        double before = symmetricProblem.Evaluate(assignment);
         Permutation clone = new Cloner().Clone(assignment);
         TranslocationManipulator.Apply(assignment, index1, index2, insertPoint);
-        double after = QAPEvaluator.Apply(assignment, symmetricWeights, symmetricDistances);
+        double after = symmetricProblem.Evaluate(assignment);
         double move = QAPTranslocationMoveEvaluator.Apply(clone, new TranslocationMove(index1, index2, insertPoint, assignment), symmetricWeights, symmetricDistances);
         Assert.IsTrue(move.IsAlmost(after - before), "Failed on symmetric matrices");
 
         // ASYMMETRIC MATRICES
-        before = QAPEvaluator.Apply(assignment, asymmetricWeights, asymmetricDistances);
+        before = asymmetricProblem.Evaluate(assignment);
         clone = new Cloner().Clone(assignment);
         TranslocationManipulator.Apply(assignment, index1, index2, insertPoint);
-        after = QAPEvaluator.Apply(assignment, asymmetricWeights, asymmetricDistances);
+        after = asymmetricProblem.Evaluate(assignment);
         move = QAPTranslocationMoveEvaluator.Apply(clone, new TranslocationMove(index1, index2, insertPoint, assignment), asymmetricWeights, asymmetricDistances);
         Assert.IsTrue(move.IsAlmost(after - before), "Failed on asymmetric matrices");
 
         // NON-ZERO DIAGONAL ASYMMETRIC MATRICES
-        before = QAPEvaluator.Apply(assignment, nonZeroDiagonalWeights, nonZeroDiagonalDistances);
+        before = nonZeroDiagonalProblem.Evaluate(assignment);
         clone = new Cloner().Clone(assignment);
         TranslocationManipulator.Apply(assignment, index1, index2, insertPoint);
-        after = QAPEvaluator.Apply(assignment, nonZeroDiagonalWeights, nonZeroDiagonalDistances);
+        after = nonZeroDiagonalProblem.Evaluate(assignment);
         move = QAPTranslocationMoveEvaluator.Apply(clone, new TranslocationMove(index1, index2, insertPoint, assignment), nonZeroDiagonalWeights, nonZeroDiagonalDistances);
         Assert.IsTrue(move.IsAlmost(after - before), "Failed on non-zero diagonal matrices");
@@ -241,22 +255,22 @@
 
         // SYMMETRIC MATRICES
-        double before = QAPEvaluator.Apply(assignment, symmetricWeights, symmetricDistances);
+        double before = symmetricProblem.Evaluate(assignment);
         double move = QAPScrambleMoveEvaluator.Apply(assignment, scramble, symmetricWeights, symmetricDistances);
         ScrambleManipulator.Apply(assignment, scramble.StartIndex, scramble.ScrambledIndices);
-        double after = QAPEvaluator.Apply(assignment, symmetricWeights, symmetricDistances);
+        double after = symmetricProblem.Evaluate(assignment);
         Assert.IsTrue(move.IsAlmost(after - before), "Failed on symmetric matrices");
 
         // ASYMMETRIC MATRICES
-        before = QAPEvaluator.Apply(assignment, asymmetricWeights, asymmetricDistances);
+        before = asymmetricProblem.Evaluate(assignment);
         move = QAPScrambleMoveEvaluator.Apply(assignment, scramble, asymmetricWeights, asymmetricDistances);
         ScrambleManipulator.Apply(assignment, scramble.StartIndex, scramble.ScrambledIndices);
-        after = QAPEvaluator.Apply(assignment, asymmetricWeights, asymmetricDistances);
+        after = asymmetricProblem.Evaluate(assignment);
         Assert.IsTrue(move.IsAlmost(after - before), "Failed on asymmetric matrices");
 
         // NON-ZERO DIAGONAL ASYMMETRIC MATRICES
-        before = QAPEvaluator.Apply(assignment, nonZeroDiagonalWeights, nonZeroDiagonalDistances);
+        before = nonZeroDiagonalProblem.Evaluate(assignment);
         move = QAPScrambleMoveEvaluator.Apply(assignment, scramble, nonZeroDiagonalWeights, nonZeroDiagonalDistances);
         ScrambleManipulator.Apply(assignment, scramble.StartIndex, scramble.ScrambledIndices);
-        after = QAPEvaluator.Apply(assignment, nonZeroDiagonalWeights, nonZeroDiagonalDistances);
+        after = nonZeroDiagonalProblem.Evaluate(assignment);
         Assert.IsTrue(move.IsAlmost(after - before), "Failed on non-zero diagonal matrices");
       }
Index: branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab.Problems.TestFunctions-3.3/AckleyEvaluatorTest.cs
===================================================================
--- branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab.Problems.TestFunctions-3.3/AckleyEvaluatorTest.cs	(revision 13401)
+++ branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab.Problems.TestFunctions-3.3/AckleyEvaluatorTest.cs	(revision 13408)
@@ -37,5 +37,5 @@
     [TestProperty("Time", "short")]
     public void AckleyEvaluateFunctionTest() {
-      AckleyEvaluator target = new AckleyEvaluator();
+      var target = new Ackley();
       RealVector point = null;
       double expected = target.BestKnownQuality;
Index: branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab.Problems.TestFunctions-3.3/BealeEvaluatorTest.cs
===================================================================
--- branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab.Problems.TestFunctions-3.3/BealeEvaluatorTest.cs	(revision 13401)
+++ branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab.Problems.TestFunctions-3.3/BealeEvaluatorTest.cs	(revision 13408)
@@ -37,5 +37,5 @@
     [TestProperty("Time", "short")]
     public void BealeEvaluateFunctionTest() {
-      BealeEvaluator target = new BealeEvaluator();
+      var target = new Beale();
       RealVector point = null;
       double expected = target.BestKnownQuality;
Index: branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab.Problems.TestFunctions-3.3/BoothEvaluatorTest.cs
===================================================================
--- branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab.Problems.TestFunctions-3.3/BoothEvaluatorTest.cs	(revision 13401)
+++ branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab.Problems.TestFunctions-3.3/BoothEvaluatorTest.cs	(revision 13408)
@@ -37,5 +37,5 @@
     [TestProperty("Time", "short")]
     public void BoothEvaluateFunctionTest() {
-      BoothEvaluator target = new BoothEvaluator();
+      var target = new Booth();
       RealVector point = null;
       double expected = target.BestKnownQuality;
Index: branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab.Problems.TestFunctions-3.3/GriewankEvaluatorTest.cs
===================================================================
--- branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab.Problems.TestFunctions-3.3/GriewankEvaluatorTest.cs	(revision 13401)
+++ branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab.Problems.TestFunctions-3.3/GriewankEvaluatorTest.cs	(revision 13408)
@@ -37,5 +37,5 @@
     [TestProperty("Time", "short")]
     public void GriewankEvaluateFunctionTest() {
-      GriewankEvaluator target = new GriewankEvaluator();
+      var target = new Griewank();
       RealVector point = null;
       double expected = target.BestKnownQuality;
Index: branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab.Problems.TestFunctions-3.3/LevyEvaluatorTest.cs
===================================================================
--- branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab.Problems.TestFunctions-3.3/LevyEvaluatorTest.cs	(revision 13401)
+++ branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab.Problems.TestFunctions-3.3/LevyEvaluatorTest.cs	(revision 13408)
@@ -37,5 +37,5 @@
     [TestProperty("Time", "short")]
     public void LevyEvaluateFunctionTest() {
-      LevyEvaluator target = new LevyEvaluator();
+      var target = new Levy();
       RealVector point = null;
       double expected = target.BestKnownQuality;
Index: branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab.Problems.TestFunctions-3.3/MatyasEvaluatorTest.cs
===================================================================
--- branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab.Problems.TestFunctions-3.3/MatyasEvaluatorTest.cs	(revision 13401)
+++ branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab.Problems.TestFunctions-3.3/MatyasEvaluatorTest.cs	(revision 13408)
@@ -37,5 +37,5 @@
     [TestProperty("Time", "short")]
     public void MatyasEvaluateFunctionTest() {
-      MatyasEvaluator target = new MatyasEvaluator();
+      var target = new Matyas();
       RealVector point = null;
       double expected = target.BestKnownQuality;
Index: branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab.Problems.TestFunctions-3.3/RastriginEvaluatorTest.cs
===================================================================
--- branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab.Problems.TestFunctions-3.3/RastriginEvaluatorTest.cs	(revision 13401)
+++ branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab.Problems.TestFunctions-3.3/RastriginEvaluatorTest.cs	(revision 13408)
@@ -37,5 +37,5 @@
     [TestProperty("Time", "short")]
     public void RastriginEvaluateFunctionTest() {
-      RastriginEvaluator target = new RastriginEvaluator();
+      var target = new Rastrigin();
       RealVector point = null;
       double expected = target.BestKnownQuality;
Index: branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab.Problems.TestFunctions-3.3/RosenbrockEvaluatorTest.cs
===================================================================
--- branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab.Problems.TestFunctions-3.3/RosenbrockEvaluatorTest.cs	(revision 13401)
+++ branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab.Problems.TestFunctions-3.3/RosenbrockEvaluatorTest.cs	(revision 13408)
@@ -37,5 +37,5 @@
     [TestProperty("Time", "short")]
     public void RosenbrockEvaluateFunctionTest() {
-      RosenbrockEvaluator target = new RosenbrockEvaluator();
+      var target = new Rosenbrock();
       RealVector point = null;
       double expected = target.BestKnownQuality;
Index: branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab.Problems.TestFunctions-3.3/SphereEvaluatorTest.cs
===================================================================
--- branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab.Problems.TestFunctions-3.3/SphereEvaluatorTest.cs	(revision 13401)
+++ branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab.Problems.TestFunctions-3.3/SphereEvaluatorTest.cs	(revision 13408)
@@ -37,5 +37,5 @@
     [TestProperty("Time", "short")]
     public void SphereEvaluateFunctionTest() {
-      SphereEvaluator target = new SphereEvaluator();
+      var target = new Sphere();
       RealVector point = null;
       double expected = target.BestKnownQuality;
Index: branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab.Problems.TestFunctions-3.3/SumSquaresEvaluatorTest.cs
===================================================================
--- branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab.Problems.TestFunctions-3.3/SumSquaresEvaluatorTest.cs	(revision 13401)
+++ branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab.Problems.TestFunctions-3.3/SumSquaresEvaluatorTest.cs	(revision 13408)
@@ -37,5 +37,5 @@
     [TestProperty("Time", "short")]
     public void SumSquaresEvaluateFunctionTest() {
-      SumSquaresEvaluator target = new SumSquaresEvaluator();
+      var target = new SumSquares();
       RealVector point = null;
       double expected = target.BestKnownQuality;
Index: branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab.Problems.TestFunctions-3.3/ZakharovEvaluatorTest.cs
===================================================================
--- branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab.Problems.TestFunctions-3.3/ZakharovEvaluatorTest.cs	(revision 13401)
+++ branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab.Problems.TestFunctions-3.3/ZakharovEvaluatorTest.cs	(revision 13408)
@@ -37,5 +37,5 @@
     [TestProperty("Time", "short")]
     public void ZakharovEvaluateFunctionTest() {
-      ZakharovEvaluator target = new ZakharovEvaluator();
+      var target = new Zakharov();
       RealVector point = null;
       double expected = target.BestKnownQuality;
Index: branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab.Scripting-3.3/Script Sources/GAQAPScriptSource.cs
===================================================================
--- branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab.Scripting-3.3/Script Sources/GAQAPScriptSource.cs	(revision 13401)
+++ branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab.Scripting-3.3/Script Sources/GAQAPScriptSource.cs	(revision 13408)
@@ -42,5 +42,5 @@
     for (int i = 0; i < popSize; i++) {
       population[i] = new Permutation(PermutationTypes.Absolute, qap.Weights.Rows, random);
-      qualities[i] = QAPEvaluator.Apply(population[i], qap.Weights, qap.Distances);
+      qualities[i] = qap.Evaluate(population[i]);
     }
     var bestQuality = qualities.Min();
@@ -52,5 +52,5 @@
         nextGen[i] = PartiallyMatchedCrossover.Apply(random, parents[i * 2], parents[i * 2 + 1]);
         if (random.NextDouble() < mutationRate) Swap2Manipulator.Apply(random, nextGen[i]);
-        nextQual[i] = QAPEvaluator.Apply(nextGen[i], qap.Weights, qap.Distances);
+        nextQual[i] = qap.Evaluate(nextGen[i]);
         if (nextQual[i] < bestQuality) {
           bestQuality = nextQual[i];
Index: branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab.Tests.csproj
===================================================================
--- branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab.Tests.csproj	(revision 13401)
+++ branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab.Tests.csproj	(revision 13408)
@@ -440,9 +440,22 @@
     <Compile Include="HeuristicLab-3.3\PluginLoader.cs" />
     <Compile Include="HeuristicLab-3.3\Samples\AlpsSampleTest.cs" />
+    <Compile Include="HeuristicLab-3.3\Samples\EsGriewankSampleTest.cs">
+      <SubType>Code</SubType>
+    </Compile>
     <Compile Include="HeuristicLab-3.3\Samples\GPRobocodeSampleTest.cs" />
-    <Compile Include="HeuristicLab-3.3\Samples\OSESGriewankSampleTest.cs" />
     <Compile Include="HeuristicLab-3.3\Samples\GAGroupingProblemSampleTest.cs" />
+    <Compile Include="HeuristicLab-3.3\Samples\LocalSearchKnapsackSampleTest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="HeuristicLab-3.3\Samples\OSESGriewankSampleTest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="HeuristicLab-3.3\Samples\PsoSchwefelSampleTest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="HeuristicLab-3.3\Samples\SimulatedAnnealingRastriginSampleTest.cs">
+      <SubType>Code</SubType>
+    </Compile>
     <Compile Include="HeuristicLab-3.3\Samples\VnsOpSampleTest.cs" />
-    <Compile Include="HeuristicLab-3.3\Samples\EsGriewankSampleTest.cs" />
     <Compile Include="HeuristicLab-3.3\Samples\GaussianProcessRegressionSampleTest.cs" />
     <Compile Include="HeuristicLab-3.3\Samples\GAVrpSampleTest.cs" />
@@ -454,6 +467,4 @@
     <Compile Include="HeuristicLab-3.3\Samples\GPTimeSeriesSampleTest.cs" />
     <Compile Include="HeuristicLab-3.3\Samples\GPMultiplexerSampleTest.cs" />
-    <Compile Include="HeuristicLab-3.3\Samples\LocalSearchKnapsackSampleTest.cs" />
-    <Compile Include="HeuristicLab-3.3\Samples\PsoSchwefelSampleTest.cs" />
     <Compile Include="HeuristicLab-3.3\Samples\RAPGASchedulingSampleTest.cs" />
     <Compile Include="HeuristicLab-3.3\Samples\SamplesUtils.cs" />
@@ -461,5 +472,4 @@
     <Compile Include="HeuristicLab-3.3\Samples\IslandGaTspSampleTest.cs" />
     <Compile Include="HeuristicLab-3.3\Samples\ScatterSearchVRPSampleTest.cs" />
-    <Compile Include="HeuristicLab-3.3\Samples\SimulatedAnnealingRastriginSampleTest.cs" />
     <Compile Include="HeuristicLab-3.3\Samples\TabuSearchTspSampleTest.cs" />
     <Compile Include="HeuristicLab-3.3\Samples\TabuSearchVRPSampleTest.cs" />
@@ -572,17 +582,43 @@
     <Compile Include="HeuristicLab.Problems.Instances-3.3\TSPLIBInstanceProviderTest.cs" />
     <Compile Include="HeuristicLab.Problems.Instances.DataAnalysis-3.3\ClassificationInstanceProviderTest.cs" />
-    <Compile Include="HeuristicLab.Problems.QuadraticAssignment-3.3\QAPLIBInstancesTest.cs" />
-    <Compile Include="HeuristicLab.Problems.QuadraticAssignment-3.3\QAPMoveEvaluatorTest.cs" />
-    <Compile Include="HeuristicLab.Problems.TestFunctions-3.3\AckleyEvaluatorTest.cs" />
-    <Compile Include="HeuristicLab.Problems.TestFunctions-3.3\BealeEvaluatorTest.cs" />
-    <Compile Include="HeuristicLab.Problems.TestFunctions-3.3\BoothEvaluatorTest.cs" />
-    <Compile Include="HeuristicLab.Problems.TestFunctions-3.3\GriewankEvaluatorTest.cs" />
-    <Compile Include="HeuristicLab.Problems.TestFunctions-3.3\LevyEvaluatorTest.cs" />
-    <Compile Include="HeuristicLab.Problems.TestFunctions-3.3\MatyasEvaluatorTest.cs" />
-    <Compile Include="HeuristicLab.Problems.TestFunctions-3.3\RastriginEvaluatorTest.cs" />
-    <Compile Include="HeuristicLab.Problems.TestFunctions-3.3\RosenbrockEvaluatorTest.cs" />
-    <Compile Include="HeuristicLab.Problems.TestFunctions-3.3\SphereEvaluatorTest.cs" />
-    <Compile Include="HeuristicLab.Problems.TestFunctions-3.3\SumSquaresEvaluatorTest.cs" />
-    <Compile Include="HeuristicLab.Problems.TestFunctions-3.3\ZakharovEvaluatorTest.cs" />
+    <Compile Include="HeuristicLab.Problems.QuadraticAssignment-3.3\QAPLIBInstancesTest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="HeuristicLab.Problems.QuadraticAssignment-3.3\QAPMoveEvaluatorTest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="HeuristicLab.Problems.TestFunctions-3.3\AckleyEvaluatorTest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="HeuristicLab.Problems.TestFunctions-3.3\BealeEvaluatorTest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="HeuristicLab.Problems.TestFunctions-3.3\BoothEvaluatorTest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="HeuristicLab.Problems.TestFunctions-3.3\GriewankEvaluatorTest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="HeuristicLab.Problems.TestFunctions-3.3\LevyEvaluatorTest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="HeuristicLab.Problems.TestFunctions-3.3\MatyasEvaluatorTest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="HeuristicLab.Problems.TestFunctions-3.3\RastriginEvaluatorTest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="HeuristicLab.Problems.TestFunctions-3.3\RosenbrockEvaluatorTest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="HeuristicLab.Problems.TestFunctions-3.3\SphereEvaluatorTest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="HeuristicLab.Problems.TestFunctions-3.3\SumSquaresEvaluatorTest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="HeuristicLab.Problems.TestFunctions-3.3\ZakharovEvaluatorTest.cs">
+      <SubType>Code</SubType>
+    </Compile>
     <Compile Include="HeuristicLab.Problems.TravelingSalesman-3.3\TSPMoveEvaluatorTest.cs" />
     <Compile Include="HeuristicLab.Problems.LinearAssignment-3.3\LinearAssignmentProblemSolverTest.cs" />
@@ -660,4 +696,5 @@
     </EmbeddedResource>
   </ItemGroup>
+  <ItemGroup />
   <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
   <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
