Index: branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/CIGTAB.cs
===================================================================
--- branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/CIGTAB.cs	(revision 13989)
+++ branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/CIGTAB.cs	(revision 14067)
@@ -37,19 +37,4 @@
     public override bool[] Maximization(int objecitves) {
       return new bool[2];
-    }
-
-    public override int MinimumSolutionLength {
-      get { return 1; }
-    }
-    public override int MaximumSolutionLength {
-      get { return int.MaxValue; }
-    }
-
-    public override int MinimumObjectives {
-      get { return 2; }
-    }
-
-    public override int MaximumObjectives {
-      get { return 2; }
     }
 
Index: branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/DTLZ/DTLZ.cs
===================================================================
--- branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/DTLZ/DTLZ.cs	(revision 13989)
+++ branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/DTLZ/DTLZ.cs	(revision 14067)
@@ -41,19 +41,4 @@
     }
 
-    public override int MinimumSolutionLength {
-      get { return 2; }
-    }
-    public override int MaximumSolutionLength {
-      get { return int.MaxValue; }
-    }
-
-
-    public override int MinimumObjectives {
-      get { return 2; }
-    }
-    public override int MaximumObjectives {
-      get { return int.MaxValue; }
-    }
-
     public override double[] ReferencePoint(int objectives) {
       double[] rp = new double[objectives];
@@ -67,5 +52,5 @@
     protected DTLZ(bool deserializing) : base(deserializing) { }
     protected DTLZ(DTLZ original, Cloner cloner) : base(original, cloner) { }
-    public DTLZ() : base(minimumObjectives: 2, minimumSolutionLength: 2, maximumSolutionLength: int.MaxValue) { }
+    public DTLZ() : base(minimumObjectives: 2, maximumObjectives: int.MaxValue, minimumSolutionLength: 2, maximumSolutionLength: int.MaxValue) { }
 
     public abstract override double[] Evaluate(RealVector r, int objecitves);
Index: branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/DTLZ/DTLZ8.cs
===================================================================
--- branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/DTLZ/DTLZ8.cs	(revision 13989)
+++ branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/DTLZ/DTLZ8.cs	(revision 14067)
@@ -29,4 +29,11 @@
   [StorableClass]
   public class DTLZ8 : DTLZ, IConstrainedTestFunction {
+    public static double[] IllegalValue(int size, bool[] maximization) {
+      double[] res = new double[size];
+      for (int i = 0; i < size; i++) {
+        res[i] = maximization[i] ? Double.MinValue : Double.MaxValue;
+      }
+      return res;
+    }
 
     [StorableConstructor]
@@ -53,5 +60,5 @@
       }
       for (int j = 0; j < M - 1; j++) {
-        if (res[objectives - 1] + 4 * res[j] - 1 < 0) return MultiObjectiveTestFunction.IllegalValue(objectives, Maximization(objectives));
+        if (res[objectives - 1] + 4 * res[j] - 1 < 0) return IllegalValue(objectives, Maximization(objectives));
       }
       double min = Double.PositiveInfinity;
@@ -63,5 +70,5 @@
       }
 
-      if (2 * res[objectives - 1] + min - 1 < 0) return MultiObjectiveTestFunction.IllegalValue(objectives, Maximization(objectives));
+      if (2 * res[objectives - 1] + min - 1 < 0) return IllegalValue(objectives, Maximization(objectives));
       return res;
     }
Index: branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/ELLI1.cs
===================================================================
--- branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/ELLI1.cs	(revision 13989)
+++ branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/ELLI1.cs	(revision 14067)
@@ -37,19 +37,4 @@
     public override bool[] Maximization(int objecitves) {
       return new bool[2];
-    }
-
-    public override int MinimumSolutionLength {
-      get { return 1; }
-    }
-    public override int MaximumSolutionLength {
-      get { return int.MaxValue; }
-    }
-
-    public override int MinimumObjectives {
-      get { return 2; }
-    }
-
-    public override int MaximumObjectives {
-      get { return 2; }
     }
 
Index: branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/Fonseca.cs
===================================================================
--- branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/Fonseca.cs	(revision 13989)
+++ branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/Fonseca.cs	(revision 14067)
@@ -40,21 +40,4 @@
     }
 
-    public override int MaximumSolutionLength {
-      get { return int.MaxValue; }
-    }
-
-    public override int MinimumSolutionLength {
-      get { return 1; }
-    }
-
-    public override int MinimumObjectives {
-      get { return 2; }
-    }
-
-    public override int MaximumObjectives {
-      get { return 2; }
-    }
-
-
     public override IEnumerable<double[]> OptimalParetoFront(int objectives) {
       return PFStore.get(this.ItemName);
@@ -74,5 +57,5 @@
       return new Fonseca(this, cloner);
     }
-    public Fonseca() : base(minimumObjectives: 2, maximumObjectives: 2, minimumSolutionLength: 1) { }
+    public Fonseca() : base(minimumObjectives: 2, maximumObjectives: 2, minimumSolutionLength: 1, maximumSolutionLength: int.MaxValue) { }
 
 
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 13989)
+++ branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/IHR/IHR.cs	(revision 14067)
@@ -42,18 +42,4 @@
     }
 
-    public override int MinimumSolutionLength {
-      get { return 2; }
-    }
-    public override int MaximumSolutionLength {
-      get { return int.MaxValue; }
-    }
-
-    public override int MinimumObjectives {
-      get { return 2; }
-    }
-    public override int MaximumObjectives {
-      get { return 2; }
-    }
-
     public override double[] ReferencePoint(int objectives) {
       double[] rp = new double[objectives];
@@ -67,5 +53,5 @@
     protected IHR(bool deserializing) : base(deserializing) { }
     protected IHR(IHR original, Cloner cloner) : base(original, cloner) { }
-    public IHR() : base(minimumObjectives: 2, minimumSolutionLength: 2, maximumSolutionLength: int.MaxValue) { }
+    public IHR() : base(minimumObjectives: 2, maximumObjectives: 2, minimumSolutionLength: 2, maximumSolutionLength: int.MaxValue) { }
 
     public override double[] Evaluate(RealVector r, int objectives) {
Index: branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/Kursawe.cs
===================================================================
--- branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/Kursawe.cs	(revision 13989)
+++ branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/Kursawe.cs	(revision 14067)
@@ -39,18 +39,4 @@
     }
 
-    public override int MinimumObjectives {
-      get { return 2; }
-    }
-    public override int MaximumObjectives {
-      get { return 2; }
-    }
-
-    public override int MinimumSolutionLength {
-      get { return 3; }
-    }
-    public override int MaximumSolutionLength {
-      get { return int.MaxValue; }
-    }
-
     public override IEnumerable<double[]> OptimalParetoFront(int objecitves) {
       return PFStore.get(this.ItemName);
@@ -69,5 +55,5 @@
       return new Kursawe(this, cloner);
     }
-    public Kursawe() : base(minimumObjectives: 2, maximumObjectives: 2, minimumSolutionLength: 3) { }
+    public Kursawe() : base(minimumObjectives: 2, maximumObjectives: 2, minimumSolutionLength: 3, maximumSolutionLength: int.MaxValue) { }
 
 
Index: branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/MultiObjectiveTestFunction.cs
===================================================================
--- branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/MultiObjectiveTestFunction.cs	(revision 13989)
+++ branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/MultiObjectiveTestFunction.cs	(revision 14067)
@@ -35,12 +35,4 @@
   [StorableClass]
   public abstract class MultiObjectiveTestFunction : ParameterizedNamedItem, IMultiObjectiveTestFunction {
-    public static double[] IllegalValue(int size, bool[] maximization) {
-      double[] res = new double[size];
-      for (int i = 0; i < size; i++) {
-        res[i] = maximization[i] ? double.MinValue : double.MaxValue;
-      }
-      return res;
-    }
-
     /// <summary>
     /// These operators should not change their name through the GUI
@@ -49,4 +41,29 @@
       get { return false; }
     }
+
+    /// <summary>
+    /// Gets the minimum problem size.
+    /// </summary>
+    [Storable]
+    public int MinimumSolutionLength { get; private set; }
+    /// <summary>
+    /// Gets the maximum problem size.
+    /// </summary>
+    [Storable]
+    public int MaximumSolutionLength { get; private set; }
+
+
+    /// <summary>
+    /// Gets the minimum solution size.
+    /// </summary>
+    [Storable]
+    public int MinimumObjectives { get; private set; }
+    /// <summary>
+    /// Gets the maximum solution size.
+    /// </summary>
+    [Storable]
+    public int MaximumObjectives { get; private set; }
+
+
     /// <summary>
     /// Returns whether the actual function constitutes a maximization or minimization problem.
@@ -57,28 +74,5 @@
     /// </summary>
     public abstract double[,] Bounds(int objectives);
-    /// <summary>
-    /// Gets the minimum problem size.
-    /// </summary>
-    public abstract int MinimumSolutionLength { get; }
-    /// <summary>
-    /// Gets the maximum problem size.
-    /// </summary>
-    public abstract int MaximumSolutionLength { get; }
 
-
-    /// <summary>
-    /// Gets and sets the actual solution size.
-    /// </summary>
-    ///
-    [Storable]
-    private int objectives;
-    /// <summary>
-    /// Gets the minimum solution size.
-    /// </summary>
-    public abstract int MinimumObjectives { get; }
-    /// <summary>
-    /// Gets the maximum solution size.
-    /// </summary>
-    public abstract int MaximumObjectives { get; }
 
     /// <summary>
@@ -87,7 +81,6 @@
     public abstract IEnumerable<double[]> OptimalParetoFront(int objectives);
 
-
     /// <summary>
-    /// returns a Reference Point for Hypervolume calculation (currently default=(11|11))
+    /// returns a Reference Point for Hypervolume calculation (default=(11|11))
     /// </summary>
     public abstract double[] ReferencePoint(int objectives);
@@ -95,5 +88,5 @@
 
     /// <summary>
-    /// returns the best known Hypervolume for this Problem   (currently default=-1) 
+    /// returns the best known Hypervolume for this test function   (default=-1) 
     /// </summary>
     public virtual double BestKnownHypervolume(int objectives) {
@@ -103,12 +96,26 @@
     [StorableConstructor]
     protected MultiObjectiveTestFunction(bool deserializing) : base(deserializing) { }
-    protected MultiObjectiveTestFunction(MultiObjectiveTestFunction original, Cloner cloner) : base(original, cloner) {
-      this.objectives = original.objectives;
+
+    protected MultiObjectiveTestFunction(MultiObjectiveTestFunction original, Cloner cloner)
+      : base(original, cloner) {
+      MinimumObjectives = original.MinimumObjectives;
+      MaximumObjectives = original.MaximumObjectives;
+      MinimumSolutionLength = original.MinimumSolutionLength;
+      MaximumSolutionLength = original.MaximumSolutionLength;
     }
-    protected MultiObjectiveTestFunction(int minimumObjectives = 1, int maximumObjectives = int.MaxValue, int minimumSolutionLength = 1, int maximumSolutionLength = int.MaxValue) : base() {
-      Parameters.Add(new FixedValueParameter<IntValue>("MinimumObjectives", "The dimensionality of the problem instance (number of variables in the function).", new IntValue(minimumObjectives)));
-      Parameters.Add(new FixedValueParameter<IntValue>("MaximumObjectives", "The dimensionality of the problem instance (number of variables in the function).", new IntValue(maximumObjectives)));
-      Parameters.Add(new FixedValueParameter<IntValue>("MinimumSolutionLength", "The dimensionality of the problem instance (number of variables in the function).", new IntValue(minimumSolutionLength)));
-      Parameters.Add(new FixedValueParameter<IntValue>("MaximumSolutionLength", "The dimensionality of the problem instance (number of variables in the function).", new IntValue(maximumSolutionLength)));
+
+    protected MultiObjectiveTestFunction(int minimumObjectives, int maximumObjectives, int minimumSolutionLength, int maximumSolutionLength)
+      : base() {
+      Parameters.Add(new FixedValueParameter<IntValue>("Minimum Objectives",
+        "The dimensionality of the problem instance (number of variables in the function).",
+        (IntValue)new IntValue(minimumObjectives).AsReadOnly()) { GetsCollected = false });
+      Parameters.Add(new FixedValueParameter<IntValue>("Maximum Objectives", "The dimensionality of the problem instance (number of variables in the function).", (IntValue)new IntValue(maximumObjectives).AsReadOnly()) { GetsCollected = false });
+      Parameters.Add(new FixedValueParameter<IntValue>("Minimum SolutionLength", "The dimensionality of the problem instance (number of variables in the function).", (IntValue)new IntValue(minimumSolutionLength).AsReadOnly()) { GetsCollected = false });
+      Parameters.Add(new FixedValueParameter<IntValue>("Maximum SolutionLength", "The dimensionality of the problem instance (number of variables in the function).", (IntValue)new IntValue(maximumSolutionLength).AsReadOnly()) { GetsCollected = false });
+
+      MinimumObjectives = minimumObjectives;
+      MaximumObjectives = maximumObjectives;
+      MinimumSolutionLength = minimumSolutionLength;
+      MaximumSolutionLength = maximumSolutionLength;
     }
 
@@ -119,5 +126,4 @@
     /// <returns>The result values of the function at the given point.</returns>
     public abstract double[] Evaluate(RealVector point, int objectives);
-
   }
 }
Index: branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/SchafferN1.cs
===================================================================
--- branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/SchafferN1.cs	(revision 13989)
+++ branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/SchafferN1.cs	(revision 14067)
@@ -39,21 +39,4 @@
     }
 
-    public override int MinimumSolutionLength {
-      get { return 1; }
-    }
-    public override int MaximumSolutionLength {
-      get { return 1; }
-    }
-
-
-    public override int MinimumObjectives {
-      get { return 2; }
-    }
-
-    public override int MaximumObjectives {
-      get { return 2; }
-    }
-
-
     public override double[] ReferencePoint(int objecitves) {
       return new double[] { 1e5, 1e5 };
Index: branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/SchafferN2.cs
===================================================================
--- branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/SchafferN2.cs	(revision 13989)
+++ branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/SchafferN2.cs	(revision 14067)
@@ -39,20 +39,4 @@
     }
 
-    public override int MinimumSolutionLength {
-      get { return 1; }
-    }
-
-    public override int MaximumSolutionLength {
-      get { return 1; }
-    }
-
-    public override int MinimumObjectives {
-      get { return 2; }
-    }
-
-    public override int MaximumObjectives {
-      get { return 2; }
-    }
-
     public override double[] ReferencePoint(int objecitves) {
       return new double[] { 100, 100 };
@@ -72,7 +56,4 @@
 
     public SchafferN2() : base(minimumObjectives: 2, maximumObjectives: 2, minimumSolutionLength: 1, maximumSolutionLength: 1) { }
-
-
-
 
 
Index: branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/ZDT/ZDT.cs
===================================================================
--- branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/ZDT/ZDT.cs	(revision 13989)
+++ branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/ZDT/ZDT.cs	(revision 14067)
@@ -41,20 +41,4 @@
     }
 
-    public override int MinimumSolutionLength {
-      get { return 1; }
-    }
-
-    public override int MaximumSolutionLength {
-      get { return int.MaxValue; }
-    }
-
-    public override int MinimumObjectives {
-      get { return 2; }
-    }
-
-    public override int MaximumObjectives {
-      get { return 2; }
-    }
-
     public override double[] ReferencePoint(int objecitives) {
       return new double[] { 11.0, 11.0 };
@@ -67,7 +51,8 @@
     [StorableConstructor]
     protected ZDT(bool deserializing) : base(deserializing) { }
-    protected ZDT(MultiObjectiveTestFunction original, Cloner cloner) : base(original, cloner) {
+    protected ZDT(MultiObjectiveTestFunction original, Cloner cloner)
+      : base(original, cloner) {
     }
-    protected ZDT() : base(minimumObjectives: 2, maximumObjectives: 2, minimumSolutionLength: 1) { }
+    protected ZDT() : base(minimumObjectives: 2, maximumObjectives: 2, minimumSolutionLength: 1, maximumSolutionLength: int.MaxValue) { }
 
     public override double[] Evaluate(RealVector r, int objectives) {
