Index: /trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/AckleyEvaluator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/AckleyEvaluator.cs	(revision 9344)
+++ /trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/AckleyEvaluator.cs	(revision 9345)
@@ -109,5 +109,5 @@
     /// <param name="point">N-dimensional point for which the test function should be evaluated.</param>
     /// <returns>The result value of the Ackley function at the given point.</returns>
-    protected override double EvaluateFunction(RealVector point) {
+    public override double EvaluateFunction(RealVector point) {
       return Apply(point);
     }
Index: /trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/BealeEvaluator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/BealeEvaluator.cs	(revision 9344)
+++ /trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/BealeEvaluator.cs	(revision 9345)
@@ -98,5 +98,5 @@
     /// <param name="point">N-dimensional point for which the test function should be evaluated.</param>
     /// <returns>The result value of the Beale function at the given point.</returns>
-    protected override double EvaluateFunction(RealVector point) {
+    public override double EvaluateFunction(RealVector point) {
       return Apply(point);
     }
Index: /trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/BoothEvaluator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/BoothEvaluator.cs	(revision 9344)
+++ /trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/BoothEvaluator.cs	(revision 9345)
@@ -94,5 +94,5 @@
     /// <param name="point">N-dimensional point for which the test function should be evaluated.</param>
     /// <returns>The result value of the Booth function at the given point.</returns>
-    protected override double EvaluateFunction(RealVector point) {
+    public override double EvaluateFunction(RealVector point) {
       return Apply(point);
     }
Index: /trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/GriewankEvaluator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/GriewankEvaluator.cs	(revision 9344)
+++ /trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/GriewankEvaluator.cs	(revision 9345)
@@ -133,5 +133,5 @@
     /// <param name="point">N-dimensional point for which the test function should be evaluated.</param>
     /// <returns>The result value of the Griewank function at the given point.</returns>
-    protected override double EvaluateFunction(RealVector point) {
+    public override double EvaluateFunction(RealVector point) {
       if (point.Length > 100)
         return Apply(point);
Index: /trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/LevyEvaluator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/LevyEvaluator.cs	(revision 9344)
+++ /trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/LevyEvaluator.cs	(revision 9345)
@@ -111,5 +111,5 @@
     /// <param name="point">N-dimensional point for which the test function should be evaluated.</param>
     /// <returns>The result value of the Levy function at the given point.</returns>
-    protected override double EvaluateFunction(RealVector point) {
+    public override double EvaluateFunction(RealVector point) {
       return Apply(point);
     }
Index: /trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/MatyasEvaluator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/MatyasEvaluator.cs	(revision 9344)
+++ /trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/MatyasEvaluator.cs	(revision 9345)
@@ -93,5 +93,5 @@
     /// <param name="point">N-dimensional point for which the test function should be evaluated.</param>
     /// <returns>The result value of the Matyas function at the given point.</returns>
-    protected override double EvaluateFunction(RealVector point) {
+    public override double EvaluateFunction(RealVector point) {
       return Apply(point);
     }
Index: /trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/MultinormalEvaluator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/MultinormalEvaluator.cs	(revision 9344)
+++ /trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/MultinormalEvaluator.cs	(revision 9345)
@@ -161,9 +161,5 @@
     }
 
-    public double Evaluate(RealVector point) {
-      return EvaluateFunction(point);
-    }
-
-    protected override double EvaluateFunction(RealVector point) {
+    public override double EvaluateFunction(RealVector point) {
       double value = 0;
       if (centers.Count == 0) {
Index: /trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/RandomEvaluator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/RandomEvaluator.cs	(revision 9344)
+++ /trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/RandomEvaluator.cs	(revision 9345)
@@ -86,11 +86,6 @@
     }
 
-    public override double Evaluate2D(double x, double y) {
-      var random = new System.Random();
-      return random.NextDouble();
-    }
-
-    protected override double EvaluateFunction(RealVector point) {
-      return RandomParameter.ActualValue.NextDouble();
+    public override double EvaluateFunction(RealVector point) {
+      return ExecutionContext == null ? new System.Random().NextDouble() : RandomParameter.ActualValue.NextDouble();
     }
   }
Index: /trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/RastriginEvaluator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/RastriginEvaluator.cs	(revision 9344)
+++ /trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/RastriginEvaluator.cs	(revision 9345)
@@ -119,5 +119,5 @@
     /// <param name="point">N-dimensional point for which the test function should be evaluated.</param>
     /// <returns>The result value of the Rastrigin function at the given point.</returns>
-    protected override double EvaluateFunction(RealVector point) {
+    public override double EvaluateFunction(RealVector point) {
       return Apply(point, A.Value);
     }
Index: /trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/RosenbrockEvaluator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/RosenbrockEvaluator.cs	(revision 9344)
+++ /trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/RosenbrockEvaluator.cs	(revision 9345)
@@ -105,5 +105,5 @@
     /// <param name="point">N-dimensional point for which the test function should be evaluated.</param>
     /// <returns>The result value of the Rosenbrock function at the given point.</returns>
-    protected override double EvaluateFunction(RealVector point) {
+    public override double EvaluateFunction(RealVector point) {
       return Apply(point);
     }
Index: /trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/SchwefelEvaluator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/SchwefelEvaluator.cs	(revision 9344)
+++ /trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/SchwefelEvaluator.cs	(revision 9345)
@@ -96,5 +96,5 @@
     /// <param name="point">N-dimensional point for which the test function should be evaluated.</param>
     /// <returns>The result value of the Schwefel function at the given point.</returns>
-    protected override double EvaluateFunction(RealVector point) {
+    public override double EvaluateFunction(RealVector point) {
       return Apply(point);
     }
Index: /trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/SingleObjectiveTestFunctionProblemEvaluator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/SingleObjectiveTestFunctionProblemEvaluator.cs	(revision 9344)
+++ /trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/SingleObjectiveTestFunctionProblemEvaluator.cs	(revision 9345)
@@ -92,8 +92,4 @@
       return EvaluateFunction(new RealVector(new double[] { x, y }));
     }
-    /// <summary>
-    /// Gets the best known solution for this function.
-    /// </summary>
-    public abstract RealVector GetBestKnownSolution(int dimension);
 
     /// <summary>
@@ -102,5 +98,10 @@
     /// <param name="point">N-dimensional point for which the test function should be evaluated.</param>
     /// <returns>The result value of the function at the given point.</returns>
-    protected abstract double EvaluateFunction(RealVector point);
+    public abstract double EvaluateFunction(RealVector point);
+
+    /// <summary>
+    /// Gets the best known solution for this function.
+    /// </summary>
+    public abstract RealVector GetBestKnownSolution(int dimension);
   }
 }
Index: /trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/SphereEvaluator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/SphereEvaluator.cs	(revision 9344)
+++ /trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/SphereEvaluator.cs	(revision 9345)
@@ -132,5 +132,5 @@
     /// <param name="point">N-dimensional point for which the test function should be evaluated.</param>
     /// <returns>The result value of the Sphere function at the given point.</returns>
-    protected override double EvaluateFunction(RealVector point) {
+    public override double EvaluateFunction(RealVector point) {
       return Apply(point, C.Value, Alpha.Value);
     }
Index: /trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/SumSquaresEvaluator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/SumSquaresEvaluator.cs	(revision 9344)
+++ /trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/SumSquaresEvaluator.cs	(revision 9345)
@@ -96,5 +96,5 @@
     /// <param name="point">N-dimensional point for which the test function should be evaluated.</param>
     /// <returns>The result value of the Sum Squares function at the given point.</returns>
-    protected override double EvaluateFunction(RealVector point) {
+    public override double EvaluateFunction(RealVector point) {
       return Apply(point);
     }
Index: /trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/ZakharovEvaluator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/ZakharovEvaluator.cs	(revision 9344)
+++ /trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/ZakharovEvaluator.cs	(revision 9345)
@@ -100,5 +100,5 @@
     /// <param name="point">N-dimensional point for which the test function should be evaluated.</param>
     /// <returns>The result value of the Zakharov function at the given point.</returns>
-    protected override double EvaluateFunction(RealVector point) {
+    public override double EvaluateFunction(RealVector point) {
       return Apply(point);
     }
Index: /trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Improvers/SingleObjectiveTestFunctionImprovementOperator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Improvers/SingleObjectiveTestFunctionImprovementOperator.cs	(revision 9344)
+++ /trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Improvers/SingleObjectiveTestFunctionImprovementOperator.cs	(revision 9345)
@@ -21,5 +21,4 @@
 
 using System;
-using System.Reflection;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
@@ -126,11 +125,5 @@
         throw new ArgumentException("Cannot improve solution because it has the wrong type.");
 
-      MethodInfo evaluationMethod = Evaluator.GetType().GetMethod("EvaluateFunction",
-                                                                  BindingFlags.Instance | BindingFlags.NonPublic,
-                                                                  null,
-                                                                  new[] { typeof(RealVector) },
-                                                                  null);
-      Func<RealVector, double> functionEvaluator = x => (double)evaluationMethod.Invoke(Evaluator, new object[] { x });
-      double bestSolQuality = functionEvaluator(bestSol);
+      double bestSolQuality = Evaluator.EvaluateFunction(bestSol);
 
       // create perturbed solutions
@@ -146,5 +139,5 @@
       for (int i = 0; i < ImprovementAttempts.Value; i++) {
         // order according to their objective function value
-        Array.Sort(simplex, (x, y) => functionEvaluator(x).CompareTo(functionEvaluator(y)));
+        Array.Sort(simplex, (x, y) => Evaluator.EvaluateFunction(x).CompareTo(Evaluator.EvaluateFunction(y)));
 
         // calculate centroid
@@ -160,30 +153,30 @@
         for (int j = 0; j < reflectionPoint.Length; j++)
           reflectionPoint[j] = centroid[j] + Alpha.Value * (centroid[j] - simplex[simplex.Length - 1][j]);
-        double reflectionPointQuality = functionEvaluator(reflectionPoint);
-        if (functionEvaluator(simplex[0]) <= reflectionPointQuality
-            && reflectionPointQuality < functionEvaluator(simplex[simplex.Length - 2]))
+        double reflectionPointQuality = Evaluator.EvaluateFunction(reflectionPoint);
+        if (Evaluator.EvaluateFunction(simplex[0]) <= reflectionPointQuality
+            && reflectionPointQuality < Evaluator.EvaluateFunction(simplex[simplex.Length - 2]))
           simplex[simplex.Length - 1] = reflectionPoint;
 
         // expansion
-        if (reflectionPointQuality < functionEvaluator(simplex[0])) {
+        if (reflectionPointQuality < Evaluator.EvaluateFunction(simplex[0])) {
           RealVector expansionPoint = new RealVector(bestSol.Length);
           for (int j = 0; j < expansionPoint.Length; j++)
             expansionPoint[j] = centroid[j] + Beta.Value * (reflectionPoint[j] - centroid[j]);
-          simplex[simplex.Length - 1] = functionEvaluator(expansionPoint) < reflectionPointQuality ? expansionPoint : reflectionPoint;
+          simplex[simplex.Length - 1] = Evaluator.EvaluateFunction(expansionPoint) < reflectionPointQuality ? expansionPoint : reflectionPoint;
         }
 
         // contraction
-        if (functionEvaluator(simplex[simplex.Length - 2]) <= reflectionPointQuality
-            && reflectionPointQuality < functionEvaluator(simplex[simplex.Length - 1])) {
+        if (Evaluator.EvaluateFunction(simplex[simplex.Length - 2]) <= reflectionPointQuality
+            && reflectionPointQuality < Evaluator.EvaluateFunction(simplex[simplex.Length - 1])) {
           RealVector outsideContractionPoint = new RealVector(bestSol.Length);
           for (int j = 0; j < outsideContractionPoint.Length; j++)
             outsideContractionPoint[j] = centroid[j] + Gamma.Value * (reflectionPoint[j] - centroid[j]);
-          if (functionEvaluator(outsideContractionPoint) <= reflectionPointQuality) {
+          if (Evaluator.EvaluateFunction(outsideContractionPoint) <= reflectionPointQuality) {
             simplex[simplex.Length - 1] = outsideContractionPoint;
-            if (functionEvaluator(reflectionPoint) >= functionEvaluator(simplex[simplex.Length - 1])) {
+            if (Evaluator.EvaluateFunction(reflectionPoint) >= Evaluator.EvaluateFunction(simplex[simplex.Length - 1])) {
               RealVector insideContractionPoint = new RealVector(bestSol.Length);
               for (int j = 0; j < insideContractionPoint.Length; j++)
                 insideContractionPoint[j] = centroid[j] - Gamma.Value * (reflectionPoint[j] - centroid[j]);
-              if (functionEvaluator(insideContractionPoint) < functionEvaluator(simplex[simplex.Length - 1])) simplex[simplex.Length - 1] = insideContractionPoint;
+              if (Evaluator.EvaluateFunction(insideContractionPoint) < Evaluator.EvaluateFunction(simplex[simplex.Length - 1])) simplex[simplex.Length - 1] = insideContractionPoint;
             }
           }
Index: /trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Interfaces/ISingleObjectiveTestFunctionProblemEvaluator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Interfaces/ISingleObjectiveTestFunctionProblemEvaluator.cs	(revision 9344)
+++ /trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Interfaces/ISingleObjectiveTestFunctionProblemEvaluator.cs	(revision 9345)
@@ -39,4 +39,5 @@
 
     double Evaluate2D(double x, double y);
+    double EvaluateFunction(RealVector point);
     RealVector GetBestKnownSolution(int dimension);
   }
Index: /trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/MoveEvaluators/MultinormalAdditiveMoveEvaluator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/MoveEvaluators/MultinormalAdditiveMoveEvaluator.cs	(revision 9344)
+++ /trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/MoveEvaluators/MultinormalAdditiveMoveEvaluator.cs	(revision 9345)
@@ -55,5 +55,5 @@
       var eval = EvaluatorParameter.ActualValue as MultinormalEvaluator;
       if (eval != null)
-        return eval.Evaluate(wrapper);
+        return eval.EvaluateFunction(wrapper);
       throw new InvalidOperationException("evaluator is not a multinormal evaluator");
     }
