Index: /branches/2521_ProblemRefactoring/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/GaussianProcessCovarianceOptimizationProblem.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/GaussianProcessCovarianceOptimizationProblem.cs	(revision 17269)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/GaussianProcessCovarianceOptimizationProblem.cs	(revision 17270)
@@ -135,8 +135,4 @@
     #endregion
 
-    public override bool Maximization {
-      get { return true; } // return log likelihood (instead of negative log likelihood as in GPR
-    }
-
     // problem stores a few variables for information exchange from Evaluate() to Analyze()
     private readonly object problemStateLocker = new object();
@@ -151,4 +147,5 @@
 
     public GaussianProcessCovarianceOptimizationProblem() : base(new SymbolicExpressionTreeEncoding()) {
+      Maximization = true; // return log likelihood (instead of negative log likelihood as in GPR)
       Parameters.Add(new ValueParameter<IRegressionProblemData>(ProblemDataParameterName, "The data for the regression problem", new RegressionProblemData()));
       Parameters.Add(new FixedValueParameter<IntValue>(ConstantOptIterationsParameterName, "Number of optimization steps for hyperparameter values", new IntValue(50)));
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/SingleObjectiveProblem.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/SingleObjectiveProblem.cs	(revision 17269)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/SingleObjectiveProblem.cs	(revision 17270)
@@ -38,11 +38,6 @@
     where TEncodedSolution : class, IEncodedSolution {
 
-    protected IValueParameter<DoubleValue> BestKnownQualityParameter {
-      get { return (IValueParameter<DoubleValue>)Parameters["BestKnownQuality"]; }
-    }
-
-    protected IFixedValueParameter<BoolValue> MaximizationParameter {
-      get { return (IFixedValueParameter<BoolValue>)Parameters["Maximization"]; }
-    }
+    [Storable] protected IValueParameter<DoubleValue> BestKnownQualityParameter { get; set; }
+    [Storable] protected IValueParameter<BoolValue> MaximizationParameter { get; set; }
 
     public double BestKnownQuality {
@@ -61,4 +56,12 @@
     }
 
+    public bool Maximization {
+      get { return MaximizationParameter.Value.Value; }
+      protected set {
+        if (MaximizationParameter.Value.Value == value) return;
+        MaximizationParameter.Value = new BoolValue(value).AsReadOnly();
+      }
+    }
+
     [StorableConstructor]
     protected SingleObjectiveProblem(StorableConstructorFlag _) : base(_) { }
@@ -66,10 +69,12 @@
     protected SingleObjectiveProblem(SingleObjectiveProblem<TEncoding, TEncodedSolution> original, Cloner cloner)
       : base(original, cloner) {
+      BestKnownQualityParameter = cloner.Clone(original.BestKnownQualityParameter);
+      MaximizationParameter = cloner.Clone(original.MaximizationParameter);
       ParameterizeOperators();
     }
   
     protected SingleObjectiveProblem() : base() {
-      Parameters.Add(new FixedValueParameter<BoolValue>("Maximization", "Set to false if the problem should be minimized.", (BoolValue)new BoolValue(Maximization).AsReadOnly()) { Hidden = true });
-      Parameters.Add(new OptionalValueParameter<DoubleValue>("BestKnownQuality", "The quality of the best known solution of this problem."));
+      Parameters.Add(MaximizationParameter = new ValueParameter<BoolValue>("Maximization", "Whether the problem should be maximized (True) or minimized (False).", new BoolValue(false).AsReadOnly()) { Hidden = true, ReadOnly = true });
+      Parameters.Add(BestKnownQualityParameter = new OptionalValueParameter<DoubleValue>("BestKnownQuality", "The quality of the best known solution of this problem."));
 
       Operators.Add(Evaluator);
@@ -84,6 +89,6 @@
 
     protected SingleObjectiveProblem(TEncoding encoding) : base(encoding) {
-      Parameters.Add(new FixedValueParameter<BoolValue>("Maximization", "Set to false if the problem should be minimized.", (BoolValue)new BoolValue(Maximization).AsReadOnly()) { Hidden = true });
-      Parameters.Add(new OptionalValueParameter<DoubleValue>("BestKnownQuality", "The quality of the best known solution of this problem."));
+      Parameters.Add(MaximizationParameter = new ValueParameter<BoolValue>("Maximization", "Set to false if the problem should be minimized.", new BoolValue(false).AsReadOnly()) { Hidden = true, ReadOnly = true });
+      Parameters.Add(BestKnownQualityParameter = new OptionalValueParameter<DoubleValue>("BestKnownQuality", "The quality of the best known solution of this problem."));
 
       Operators.Add(Evaluator);
@@ -102,5 +107,4 @@
     }
 
-    public abstract bool Maximization { get; }
     public abstract double Evaluate(TEncodedSolution solution, IRandom random);
     public virtual void Analyze(TEncodedSolution[] solutions, double[] qualities, ResultCollection results, IRandom random) { }
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Problems.Binary/3.3/DeceptiveTrapProblem.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Problems.Binary/3.3/DeceptiveTrapProblem.cs	(revision 17269)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Problems.Binary/3.3/DeceptiveTrapProblem.cs	(revision 17270)
@@ -44,8 +44,4 @@
     }
 
-    public override bool Maximization {
-      get { return true; }
-    }
-
     private const string TrapSizeParameterName = "Trap Size";
 
@@ -64,4 +60,5 @@
 
     public DeceptiveTrapProblem() : base() {
+      Maximization = true;
       Parameters.Add(new FixedValueParameter<IntValue>(TrapSizeParameterName, "", new IntValue(7)));
       Encoding.Length = 49;
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Problems.Binary/3.3/HIFFProblem.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Problems.Binary/3.3/HIFFProblem.cs	(revision 17269)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Problems.Binary/3.3/HIFFProblem.cs	(revision 17270)
@@ -42,9 +42,6 @@
     }
 
-    public override bool Maximization {
-      get { return true; }
-    }
-
     public HIFFProblem() : base() {
+      Maximization = true;
       Encoding.Length = 64;
     }
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Problems.Binary/3.3/OneMaxProblem.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Problems.Binary/3.3/OneMaxProblem.cs	(revision 17269)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Problems.Binary/3.3/OneMaxProblem.cs	(revision 17270)
@@ -32,9 +32,7 @@
   [StorableType("A290ADDE-33F5-4607-ABC0-19349CD0FBF1")]
   public class OneMaxProblem : BinaryVectorProblem {
-    public override bool Maximization {
-      get { return true; }
-    }
 
     public OneMaxProblem() : base() {
+      Maximization = true;
       Encoding.Length = 10;
       BestKnownQuality = Encoding.Length;
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Problems.ExternalEvaluation/3.4/SingleObjectiveExternalEvaluationProblem.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Problems.ExternalEvaluation/3.4/SingleObjectiveExternalEvaluationProblem.cs	(revision 17269)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Problems.ExternalEvaluation/3.4/SingleObjectiveExternalEvaluationProblem.cs	(revision 17270)
@@ -93,6 +93,6 @@
     public ExternalEvaluationProblem(TEncoding encoding)
       : base(encoding) {
-      Parameters.Remove("Maximization"); // readonly in base class
-      Parameters.Add(new FixedValueParameter<BoolValue>("Maximization", "Set to false if the problem should be minimized.", new BoolValue()));
+      MaximizationParameter.ReadOnly = false;
+      MaximizationParameter.Value = new BoolValue(); // is a read-only boolvalue in base class
       Parameters.Add(new OptionalValueParameter<EvaluationCache>("Cache", "Cache of previously evaluated solutions."));
       Parameters.Add(new ValueParameter<CheckedItemCollection<IEvaluationServiceClient>>("Clients", "The clients that are used to communicate with the external application.", new CheckedItemCollection<IEvaluationServiceClient>() { new EvaluationServiceClient() }));
@@ -104,12 +104,4 @@
 
     #region Single Objective Problem Overrides
-    public override bool Maximization {
-      get { return Parameters.ContainsKey("Maximization") && ((IValueParameter<BoolValue>)Parameters["Maximization"]).Value.Value; }
-    }
-
-    public virtual void SetMaximization(bool maximization) {
-      MaximizationParameter.Value.Value = maximization;
-    }
-
     public override double Evaluate(TEncodedSolution solution, IRandom random) {
       var qualityMessage = Evaluate(BuildSolutionMessage(solution));
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Problems.GeneticProgramming/3.3/ArtificialAnt/Problem.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Problems.GeneticProgramming/3.3/ArtificialAnt/Problem.cs	(revision 17269)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Problems.GeneticProgramming/3.3/ArtificialAnt/Problem.cs	(revision 17270)
@@ -98,8 +98,4 @@
     #endregion
 
-    public override bool Maximization {
-      get { return true; }
-    }
-
     #region item cloning and persistence
     // persistence
@@ -117,4 +113,5 @@
 
     public Problem() : base(new SymbolicExpressionTreeEncoding()) {
+      Maximization = true;
       BoolMatrix world = new BoolMatrix(ToBoolMatrix(santaFeAntTrail));
       Parameters.Add(new ValueParameter<BoolMatrix>("World", "The world for the artificial ant with scattered food items.", world));
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Problems.GeneticProgramming/3.3/BasicSymbolicRegression/Problem.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Problems.GeneticProgramming/3.3/BasicSymbolicRegression/Problem.cs	(revision 17269)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Problems.GeneticProgramming/3.3/BasicSymbolicRegression/Problem.cs	(revision 17270)
@@ -60,8 +60,4 @@
     public event EventHandler ProblemDataChanged;
 
-    public override bool Maximization {
-      get { return true; }
-    }
-
     #region item cloning and persistence
     // persistence
@@ -82,4 +78,5 @@
 
     public Problem() : base(new SymbolicExpressionTreeEncoding()) {
+      Maximization = true;
       Parameters.Add(new ValueParameter<IRegressionProblemData>(ProblemDataParameterName, "The data for the regression problem", new RegressionProblemData()));
 
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Problems.GeneticProgramming/3.3/Boolean/EvenParityProblem.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Problems.GeneticProgramming/3.3/Boolean/EvenParityProblem.cs	(revision 17269)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Problems.GeneticProgramming/3.3/Boolean/EvenParityProblem.cs	(revision 17270)
@@ -54,8 +54,4 @@
     #endregion
 
-    public override bool Maximization {
-      get { return true; }
-    }
-
     #region item cloning and persistence
     // persistence
@@ -79,4 +75,5 @@
     public EvenParityProblem()
       : base(new SymbolicExpressionTreeEncoding()) {
+      Maximization = true;
       Parameters.Add(new FixedValueParameter<IntValue>(NumberOfBitsParameterName, "The number of bits for the input parameter for the even parity function", new IntValue(4)));
 
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Problems.GeneticProgramming/3.3/Boolean/MultiplexerProblem.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Problems.GeneticProgramming/3.3/Boolean/MultiplexerProblem.cs	(revision 17269)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Problems.GeneticProgramming/3.3/Boolean/MultiplexerProblem.cs	(revision 17270)
@@ -56,8 +56,4 @@
     #endregion
 
-    public override bool Maximization {
-      get { return true; }
-    }
-
     #region item cloning and persistence
     // persistence
@@ -82,4 +78,5 @@
     public MultiplexerProblem()
       : base(new SymbolicExpressionTreeEncoding()) {
+      Maximization = true;
       Parameters.Add(new FixedValueParameter<IntValue>(NumberOfBitsParameterName,
         "The number of bits for the input parameter for the multiplexer function. This is the sum of the number of address bits and the number of input lines. E.g. the 11-MUX has 3 address bits and 8 input lines",
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Problems.GeneticProgramming/3.3/LawnMower/Problem.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Problems.GeneticProgramming/3.3/LawnMower/Problem.cs	(revision 17269)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Problems.GeneticProgramming/3.3/LawnMower/Problem.cs	(revision 17270)
@@ -46,8 +46,4 @@
     }
 
-    public override bool Maximization {
-      get { return true; }
-    }
-
     #region item cloning and persistence
     [StorableConstructor]
@@ -63,4 +59,5 @@
 
     public Problem() : base(new SymbolicExpressionTreeEncoding()) {
+      Maximization = true;
       Parameters.Add(new FixedValueParameter<IntValue>(LawnWidthParameterName, "Width of the lawn.", new IntValue(8)));
       Parameters.Add(new FixedValueParameter<IntValue>(LawnLengthParameterName, "Length of the lawn.", new IntValue(8)));
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Problems.GeneticProgramming/3.3/robocode/Problem.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Problems.GeneticProgramming/3.3/robocode/Problem.cs	(revision 17269)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Problems.GeneticProgramming/3.3/robocode/Problem.cs	(revision 17270)
@@ -74,4 +74,5 @@
 
     public Problem() : base(new SymbolicExpressionTreeEncoding(new Grammar(), maximumLength: 1000, maximumDepth: 10)) {
+      Maximization = true;
       DirectoryValue robocodeDir = new DirectoryValue { Value = @"robocode" };
 
@@ -124,8 +125,4 @@
     }
 
-    public override bool Maximization {
-      get { return true; }
-    }
-
     private void RegisterEventHandlers() {
       RobocodePathParameter.Value.StringValue.ValueChanged += RobocodePathParameter_ValueChanged;
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Problems.GrammaticalEvolution/3.4/ArtificialAnt/GEArtificialAntProblem.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Problems.GrammaticalEvolution/3.4/ArtificialAnt/GEArtificialAntProblem.cs	(revision 17269)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Problems.GrammaticalEvolution/3.4/ArtificialAnt/GEArtificialAntProblem.cs	(revision 17270)
@@ -68,8 +68,4 @@
     private void AfterDeserialization() { }
 
-    public override bool Maximization {
-      get { return true; }
-    }
-
     [Storable]
     // parameters of the wrapped problem cannot be changed therefore it is not strictly necessary to clone and store it
@@ -86,4 +82,5 @@
 
     public GEArtificialAntProblem() : base(new IntegerVectorEncoding()) {
+      Maximization = true;
       wrappedAntProblem = new HeuristicLab.Problems.GeneticProgramming.ArtificialAnt.Problem();
       Parameters.Add(new ValueParameter<BoolMatrix>("World", "The world for the artificial ant with scattered food items.", wrappedAntProblem.World));
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Problems.GraphColoring/3.3/GraphColoringProblem.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Problems.GraphColoring/3.3/GraphColoringProblem.cs	(revision 17269)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Problems.GraphColoring/3.3/GraphColoringProblem.cs	(revision 17270)
@@ -42,8 +42,4 @@
     IProblemInstanceConsumer<GCPData>, IProblemInstanceExporter<GCPData> {
 
-    public override bool Maximization {
-      get { return false; }
-    }
-
     [Storable]
     private IValueParameter<IntMatrix> adjacencyListParameter;
@@ -76,4 +72,5 @@
     }
     public GraphColoringProblem() {
+      Maximization = false;
       Parameters.Add(adjacencyListParameter = new ValueParameter<IntMatrix>("Adjacency List", "The adjacency list that describes the (symmetric) edges in the graph with nodes from 0 to N-1."));
       Parameters.Add(fitnessFunctionParameter = new ValueParameter<EnumValue<FitnessFunction>>("Fitness Function", "The function to use for evaluating the quality of a solution.", new EnumValue<FitnessFunction>(FitnessFunction.Penalized)));
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Problems.Knapsack/3.3/KnapsackProblem.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Problems.Knapsack/3.3/KnapsackProblem.cs	(revision 17269)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Problems.Knapsack/3.3/KnapsackProblem.cs	(revision 17270)
@@ -38,5 +38,4 @@
   [StorableType("8CEDAFA2-6E0A-4D4B-B6C6-F85CC58B824E")]
   public sealed class KnapsackProblem : BinaryVectorProblem {
-    public override bool Maximization { get { return true; } }
 
     #region Parameter Properties
@@ -85,4 +84,5 @@
     public KnapsackProblem()
       : base(new BinaryVectorEncoding("Selection")) {
+      Maximization = true;
       Parameters.Add(new ValueParameter<IntValue>("KnapsackCapacity", "Capacity of the Knapsack.", new IntValue(1)));
       Parameters.Add(new ValueParameter<IntArray>("Weights", "The weights of the items.", new IntArray(5)));
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Problems.NK/3.3/NKLandscape.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Problems.NK/3.3/NKLandscape.cs	(revision 17269)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Problems.NK/3.3/NKLandscape.cs	(revision 17270)
@@ -23,4 +23,5 @@
 using System.Linq;
 using System.Security.Cryptography;
+using HEAL.Attic;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
@@ -28,7 +29,5 @@
 using HeuristicLab.Encodings.BinaryVectorEncoding;
 using HeuristicLab.Parameters;
-using HEAL.Attic;
 using HeuristicLab.PluginInfrastructure;
-using HeuristicLab.Problems.Binary;
 using HeuristicLab.Random;
 
@@ -38,7 +37,4 @@
   [StorableType("04294537-87F2-4A9F-BC14-7D4CA700F326")]
   public sealed class NKLandscape : BinaryVectorProblem {
-    public override bool Maximization {
-      get { return false; }
-    }
 
     #region Parameters
@@ -144,4 +140,5 @@
     public NKLandscape()
       : base() {
+      Maximization = false;
       random = new MersenneTwister();
 
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Problems.PTSP/3.3/ProbabilisticTSP.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Problems.PTSP/3.3/ProbabilisticTSP.cs	(revision 17269)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Problems.PTSP/3.3/ProbabilisticTSP.cs	(revision 17270)
@@ -58,8 +58,4 @@
     #endregion
 
-    public override bool Maximization {
-      get { return false; }
-    }
-
     [StorableConstructor]
     protected ProbabilisticTSP(StorableConstructorFlag _) : base(_) { }
@@ -70,4 +66,5 @@
     }
     protected ProbabilisticTSP() : base(new PermutationEncoding("Tour")) {
+      Maximization = false;
       Parameters.Add(PTSPDataParameter = new ValueParameter<IProbabilisticTSPData>("PTSP Data", "The main parameters for the pTSP."));
       Parameters.Add(BestKnownSolutionParameter = new OptionalValueParameter<IProbabilisticTSPSolution>("BestKnownSolution", "The best known solution of this pTSP instance."));
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Problems.Programmable/3.3/SingleObjectiveProgrammableProblem.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Problems.Programmable/3.3/SingleObjectiveProgrammableProblem.cs	(revision 17269)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Problems.Programmable/3.3/SingleObjectiveProgrammableProblem.cs	(revision 17270)
@@ -27,5 +27,4 @@
 using HeuristicLab.Common.Resources;
 using HeuristicLab.Core;
-using HeuristicLab.Data;
 using HeuristicLab.Optimization;
 using HeuristicLab.Parameters;
@@ -94,6 +93,5 @@
 
     private void OnProblemDefinitionChanged() {
-      Parameters.Remove("Maximization");
-      Parameters.Add(new FixedValueParameter<BoolValue>("Maximization", "Set to false if the problem should be minimized.", (BoolValue)new BoolValue(Maximization).AsReadOnly()) { Hidden = true });
+      Maximization = ProblemDefinition.Maximization;
       Encoding = (TEncoding)ProblemScript.Encoding.Clone();
 
@@ -107,8 +105,4 @@
     private void OnProblemScriptNameChanged() {
       Name = ProblemScript.Name;
-    }
-
-    public override bool Maximization {
-      get { return Parameters.ContainsKey("ProblemScript") && ProblemDefinition.Maximization; }
     }
 
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Problems.QuadraticAssignment/3.3/QuadraticAssignmentProblem.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Problems.QuadraticAssignment/3.3/QuadraticAssignmentProblem.cs	(revision 17269)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Problems.QuadraticAssignment/3.3/QuadraticAssignmentProblem.cs	(revision 17270)
@@ -47,6 +47,4 @@
     }
 
-    public override bool Maximization { get { return false; } }
-
     #region Parameter Properties
     [Storable] public IValueParameter<ItemSet<Permutation>> BestKnownSolutionsParameter { get; private set; }
@@ -107,4 +105,5 @@
     public QuadraticAssignmentProblem()
       : base(new PermutationEncoding("Assignment") { Length = 5 }) {
+      Maximization = false;
       Parameters.Add(BestKnownSolutionsParameter = new OptionalValueParameter<ItemSet<Permutation>>("BestKnownSolutions", "The list of best known solutions which is updated whenever a new better solution is found or may be the optimal solution if it is known beforehand.", null));
       Parameters.Add(BestKnownSolutionParameter = new OptionalValueParameter<Permutation>("BestKnownSolution", "The best known solution which is updated whenever a new better solution is found or may be the optimal solution if it is known beforehand.", null));
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Problems.TestFunctions/3.3/SingleObjectiveTestFunctionProblem.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Problems.TestFunctions/3.3/SingleObjectiveTestFunctionProblem.cs	(revision 17269)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Problems.TestFunctions/3.3/SingleObjectiveTestFunctionProblem.cs	(revision 17270)
@@ -40,8 +40,4 @@
     IProblemInstanceConsumer<SOTFData> {
 
-    public override bool Maximization {
-      get { return Parameters.ContainsKey("TestFunction") && TestFunction.Maximization; }
-    }
-
     #region Parameter Properties
     private IFixedValueParameter<IntValue> ProblemSizeParameter {
@@ -86,4 +82,5 @@
       Parameters.Add(new OptionalValueParameter<RealVector>("BestKnownSolution", "The best known solution for this test function instance."));
       Parameters.Add(new ValueParameter<ISingleObjectiveTestFunction>("TestFunction", "The function that is to be optimized.", new Ackley()));
+      Maximization = TestFunction.Maximization;
 
       Encoding.LengthParameter = ProblemSizeParameter;
@@ -170,4 +167,5 @@
       var bestSolution = TestFunction.GetBestKnownSolution(ProblemSize);
       BestKnownSolutionParameter.Value = bestSolution;
+      Maximization = TestFunction.Maximization;
 
       OnReset();
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Problems.TravelingSalesman/3.3/TSP.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Problems.TravelingSalesman/3.3/TSP.cs	(revision 17269)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Problems.TravelingSalesman/3.3/TSP.cs	(revision 17270)
@@ -44,6 +44,4 @@
     public static int DistanceMatrixSizeLimit { get; set; } = 1000;
 
-    public override bool Maximization => false;
-
     [Storable] public IValueParameter<ITSPData> TSPDataParameter { get; private set; }
     [Storable] public IValueParameter<ITSPSolution> BestKnownSolutionParameter { get; private set; }
@@ -68,4 +66,5 @@
 
     public TSP() : base(new PermutationEncoding("Tour", 16, PermutationTypes.RelativeUndirected)) {
+      Maximization = false;
       Parameters.Add(TSPDataParameter = new ValueParameter<ITSPData>("TSPData", "The main parameters of the TSP."));
       Parameters.Add(BestKnownSolutionParameter = new OptionalValueParameter<ITSPSolution>("BestKnownSolution", "The best known solution."));
