Index: /branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Analyzers/HypervolumeAnalyzer.cs
===================================================================
--- /branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Analyzers/HypervolumeAnalyzer.cs	(revision 14089)
+++ /branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Analyzers/HypervolumeAnalyzer.cs	(revision 14090)
@@ -20,4 +20,5 @@
 #endregion
 
+using System;
 using System.Collections.Generic;
 using System.Linq;
@@ -34,17 +35,4 @@
   public class HypervolumeAnalyzer : MOTFAnalyzer {
 
-    public ILookupParameter<DoubleArray> ReferencePointParameter {
-      get { return (ILookupParameter<DoubleArray>)Parameters["ReferencePoint"]; }
-    }
-
-    public IFixedValueParameter<DoubleValue> BestKnownHyperVolumeParameter {
-      get { return (IFixedValueParameter<DoubleValue>)Parameters["BestKnownHyperVolume"]; }
-    }
-
-    public double BestKnownHyperVolume {
-      get { return BestKnownHyperVolumeParameter.Value.Value; }
-      set { BestKnownHyperVolumeParameter.Value.Value = value; }
-    }
-
     [StorableConstructor]
     protected HypervolumeAnalyzer(bool deserializing) : base(deserializing) { }
@@ -57,8 +45,5 @@
     }
 
-    public HypervolumeAnalyzer() {
-      Parameters.Add(new LookupParameter<DoubleArray>("ReferencePoint", "The reference point for hypervolume calculation"));
-      Parameters.Add(new FixedValueParameter<DoubleValue>("BestKnownHyperVolume", "The currently best known hypervolume", new DoubleValue(0)));
-    }
+    public HypervolumeAnalyzer() { }
 
     public override IOperation Apply() {
@@ -66,25 +51,19 @@
       var qualities = QualitiesParameter.ActualValue;
       var testFunction = TestFunctionParameter.ActualValue;
-      var referencePoint = ReferencePointParameter.ActualValue;
       int objectives = qualities[0].Length;
-
-
+      var referencePoint = testFunction.ReferencePoint(objectives);
 
       if (!results.ContainsKey("Hypervolume")) results.Add(new Result("Hypervolume", typeof(DoubleValue)));
       if (!results.ContainsKey("Absolute Distance to BestKnownHypervolume")) results.Add(new Result("Absolute Distance to BestKnownHypervolume", typeof(DoubleValue)));
 
-      double best;
+      double best = testFunction.OptimalHypervolume(objectives);
       if (!results.ContainsKey("BestKnownHypervolume")) {
         results.Add(new Result("BestKnownHypervolume", typeof(DoubleValue)));
-        best = BestKnownHyperVolumeParameter.Value.Value;
-      } else {
-        best = ((DoubleValue)(results["BestKnownHypervolume"].Value)).Value;
       }
-
+      best = Math.Max(best, ((DoubleValue)(results["BestKnownHypervolume"].Value)).Value);
 
       IEnumerable<double[]> front = NonDominatedSelect.SelectNonDominatedVectors(qualities.Select(q => q.ToArray()), testFunction.Maximization(objectives), true);
 
-      double hv = front.Any() ? Hypervolume.Calculate(front, referencePoint.CloneAsArray(), testFunction.Maximization(objectives)) : 0;
-
+      double hv = Hypervolume.Calculate(front, (double[])referencePoint.Clone(), testFunction.Maximization(objectives));
 
       if (double.IsNaN(best) || best < hv) {
@@ -93,7 +72,7 @@
       }
 
-      results["Hypervolume"].Value = new DoubleValue(hv);
-      results["BestKnownHypervolume"].Value = new DoubleValue(best);
-      results["Absolute Distance to BestKnownHypervolume"].Value = new DoubleValue(best - hv);
+      ((DoubleValue)(results["Hypervolume"].Value)).Value = hv;
+      ((DoubleValue)(results["BestKnownHypervolume"].Value)).Value = best;
+      ((DoubleValue)(results["Absolute Distance to BestKnownHypervolume"].Value)).Value = best - hv;
 
       return base.Apply();
Index: /branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Calculators/HyperVolume.cs
===================================================================
--- /branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Calculators/HyperVolume.cs	(revision 14089)
+++ /branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Calculators/HyperVolume.cs	(revision 14090)
@@ -54,4 +54,5 @@
     public static double Calculate(IEnumerable<double[]> front, double[] referencePoint, bool[] maximization) {
       front = NonDominatedSelect.GetDominatingVectors(front, referencePoint, maximization, false);
+      if (!front.Any()) throw new ArgumentException("No point in the front dominates the referencePoint");
       if (maximization.Length == 2)
         return Calculate2D(front, referencePoint, maximization);
Index: /branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/MultiObjectiveTestFunctionProblem.cs
===================================================================
--- /branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/MultiObjectiveTestFunctionProblem.cs	(revision 14089)
+++ /branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/MultiObjectiveTestFunctionProblem.cs	(revision 14090)
@@ -244,8 +244,4 @@
 
         var hyperVolumeAnalyzer = analyzer as HypervolumeAnalyzer;
-        if (hyperVolumeAnalyzer != null) {
-          hyperVolumeAnalyzer.ReferencePointParameter.ActualName = ReferencePointParameter.Name;
-          hyperVolumeAnalyzer.BestKnownHyperVolume = TestFunction.OptimalHypervolume(Objectives);
-        }
 
         var normalizedHyperVolumeAnalyzer = analyzer as NormalizedHypervolumeAnalyzer;
Index: /branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/IHR/IHR.cs
===================================================================
--- /branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/IHR/IHR.cs	(revision 14089)
+++ /branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/IHR/IHR.cs	(revision 14090)
@@ -52,9 +52,8 @@
         throw new ArgumentException("The dimensionality of the problem(ProblemSize) must be larger than or equal to the number of objectives");
       }
-      RealVector y = Y(r);
-      return new double[] { F1(y), F2(r, y) };
+      return new double[] { F1(r), F2(r) };
     }
     protected abstract double F1(RealVector y);
-    protected abstract double F2(RealVector r, RealVector y);
+    protected abstract double F2(RealVector y);
     protected abstract double G(RealVector y);
 
@@ -70,7 +69,4 @@
       return (x * x) / (Math.Abs(x) + 0.1);
     }
-    protected RealVector Y(RealVector x) {
-      return x;
-    }
   }
 }
Index: /branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/IHR/IHR1.cs
===================================================================
--- /branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/IHR/IHR1.cs	(revision 14089)
+++ /branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/IHR/IHR1.cs	(revision 14090)
@@ -58,5 +58,5 @@
     }
 
-    protected override double F2(RealVector r, RealVector y) {
+    protected override double F2(RealVector y) {
       var g = G(y);
       return g * HF(1 - Math.Sqrt(H(y[0], y) / g), y);
Index: /branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/IHR/IHR2.cs
===================================================================
--- /branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/IHR/IHR2.cs	(revision 14089)
+++ /branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/IHR/IHR2.cs	(revision 14090)
@@ -59,5 +59,5 @@
     }
 
-    protected override double F2(RealVector r, RealVector y) {
+    protected override double F2(RealVector y) {
       var g = G(y);
       var d = H(y[0], y) / g;
Index: /branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/IHR/IHR3.cs
===================================================================
--- /branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/IHR/IHR3.cs	(revision 14089)
+++ /branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/IHR/IHR3.cs	(revision 14090)
@@ -59,5 +59,5 @@
     }
 
-    protected override double F2(RealVector r, RealVector y) {
+    protected override double F2(RealVector y) {
       var g = G(y);
       var d = H(y[0], y) / g;
Index: /branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/IHR/IHR4.cs
===================================================================
--- /branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/IHR/IHR4.cs	(revision 14089)
+++ /branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/IHR/IHR4.cs	(revision 14090)
@@ -62,5 +62,5 @@
     }
 
-    protected override double F2(RealVector r, RealVector y) {
+    protected override double F2(RealVector y) {
       var g = G(y);
       var d = H(y[0], y) / g;
Index: /branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/IHR/IHR6.cs
===================================================================
--- /branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/IHR/IHR6.cs	(revision 14089)
+++ /branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/IHR/IHR6.cs	(revision 14090)
@@ -58,5 +58,5 @@
     }
 
-    protected override double F2(RealVector r, RealVector y) {
+    protected override double F2(RealVector y) {
       var g = G(y);
       var d = H(y[0], y) / g;
Index: /branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/Misc/ELLI1.cs
===================================================================
--- /branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/Misc/ELLI1.cs	(revision 14089)
+++ /branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/Misc/ELLI1.cs	(revision 14090)
@@ -68,5 +68,4 @@
     public override double[] Evaluate(RealVector r, int objectives) {
       if (objectives != 2) throw new ArgumentException("The ELLI problem must always have 2 objectives");
-      double x = r[0];
       double a = 1000;
       double sum = 0.0;
Index: /branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/Misc/SchafferN2.cs
===================================================================
--- /branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/Misc/SchafferN2.cs	(revision 14089)
+++ /branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/Misc/SchafferN2.cs	(revision 14090)
@@ -44,5 +44,5 @@
 
     protected override IEnumerable<double[]> GetOptimalParetoFront(int objectives) {
-      throw new NotImplementedException();
+      return null;
     }
 
Index: /branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/MultiObjectiveTestfunctionTests/CrowdingTest.cs
===================================================================
--- /branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/MultiObjectiveTestfunctionTests/CrowdingTest.cs	(revision 14089)
+++ /branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/MultiObjectiveTestfunctionTests/CrowdingTest.cs	(revision 14090)
@@ -103,6 +103,6 @@
       point3[1] = 2;
       double[][] front = { point, point1, point2, point3 };
-      double dist = Crowding.Calculate(front, new double[,] { { 0, 2 }, { 0, 1 } });
-      Assert.AreEqual(4.5, dist);
+      double dist = Crowding.Calculate(front, new double[,] { { 0, 4 }, { 0, 2 } });
+      Assert.AreEqual(1.5, dist);
     }
 
