Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.GeneticProgramming/3.3/ArtificialAnt/Problem.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.GeneticProgramming/3.3/ArtificialAnt/Problem.cs	(revision 17748)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.GeneticProgramming/3.3/ArtificialAnt/Problem.cs	(revision 17778)
@@ -78,10 +78,6 @@
 
     #region Parameter Properties
-    public IValueParameter<BoolMatrix> WorldParameter {
-      get { return (IValueParameter<BoolMatrix>)Parameters["World"]; }
-    }
-    public IFixedValueParameter<IntValue> MaxTimeStepsParameter {
-      get { return (IFixedValueParameter<IntValue>)Parameters["MaximumTimeSteps"]; }
-    }
+    [Storable] public IValueParameter<BoolMatrix> WorldParameter { get; private set; }
+    [Storable] public IFixedValueParameter<IntValue> MaxTimeStepsParameter { get; private set; }
     #endregion
 
@@ -105,5 +101,8 @@
 
     // cloning 
-    private Problem(Problem original, Cloner cloner) : base(original, cloner) { }
+    private Problem(Problem original, Cloner cloner) : base(original, cloner) {
+      WorldParameter = cloner.Clone(original.WorldParameter);
+      MaxTimeStepsParameter = cloner.Clone(original.MaxTimeStepsParameter);
+    }
     public override IDeepCloneable Clone(Cloner cloner) {
       return new Problem(this, cloner);
@@ -114,6 +113,6 @@
       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));
-      Parameters.Add(new FixedValueParameter<IntValue>("MaximumTimeSteps", "The number of time steps the artificial ant has available to collect all food items.", new IntValue(600)));
+      Parameters.Add(WorldParameter = new ValueParameter<BoolMatrix>("World", "The world for the artificial ant with scattered food items.", world));
+      Parameters.Add(MaxTimeStepsParameter = new FixedValueParameter<IntValue>("MaximumTimeSteps", "The number of time steps the artificial ant has available to collect all food items.", new IntValue(600)));
 
       var g = new SimpleSymbolicExpressionGrammar();
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.GeneticProgramming/3.3/BasicSymbolicRegression/Problem.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.GeneticProgramming/3.3/BasicSymbolicRegression/Problem.cs	(revision 17748)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.GeneticProgramming/3.3/BasicSymbolicRegression/Problem.cs	(revision 17778)
@@ -39,13 +39,7 @@
   [StorableType("72011B73-28C6-4D5E-BEDF-27425BC87B9C")]
   public sealed class Problem : SymbolicExpressionTreeProblem, IRegressionProblem, IProblemInstanceConsumer<IRegressionProblemData>, IProblemInstanceExporter<IRegressionProblemData> {
-
-    #region parameter names
-    private const string ProblemDataParameterName = "ProblemData";
-    #endregion
-
+    
     #region Parameter Properties
-    public IValueParameter<IRegressionProblemData> ProblemDataParameter {
-      get { return (IValueParameter<IRegressionProblemData>)Parameters[ProblemDataParameterName]; }
-    }
+    [Storable] public IValueParameter<IRegressionProblemData> ProblemDataParameter { get; private set; }
     #endregion
 
@@ -72,4 +66,5 @@
     private Problem(Problem original, Cloner cloner)
       : base(original, cloner) {
+      ProblemDataParameter = cloner.Clone(original.ProblemDataParameter);
       RegisterEventHandlers();
     }
@@ -79,5 +74,5 @@
     public Problem() : base(new SymbolicExpressionTreeEncoding()) {
       Maximization = true;
-      Parameters.Add(new ValueParameter<IRegressionProblemData>(ProblemDataParameterName, "The data for the regression problem", new RegressionProblemData()));
+      Parameters.Add(ProblemDataParameter = new ValueParameter<IRegressionProblemData>("ProblemData", "The data for the regression problem", new RegressionProblemData()));
 
       Encoding.TreeLength = 100;
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.GeneticProgramming/3.3/Boolean/EvenParityProblem.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.GeneticProgramming/3.3/Boolean/EvenParityProblem.cs	(revision 17748)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.GeneticProgramming/3.3/Boolean/EvenParityProblem.cs	(revision 17778)
@@ -39,12 +39,6 @@
   public sealed class EvenParityProblem : SymbolicExpressionTreeProblem {
 
-    #region parameter names
-    private const string NumberOfBitsParameterName = "NumberOfBits";
-    #endregion
-
     #region Parameter Properties
-    public IFixedValueParameter<IntValue> NumberOfBitsParameter {
-      get { return (IFixedValueParameter<IntValue>)Parameters[NumberOfBitsParameterName]; }
-    }
+    [Storable] public IFixedValueParameter<IntValue> NumberOfBitsParameter { get; private set; }
     #endregion
 
@@ -68,4 +62,5 @@
     private EvenParityProblem(EvenParityProblem original, Cloner cloner)
       : base(original, cloner) {
+      NumberOfBitsParameter = cloner.Clone(original.NumberOfBitsParameter);
       RegisterEventHandlers();
     }
@@ -78,5 +73,5 @@
       : 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)));
+      Parameters.Add(NumberOfBitsParameter = new FixedValueParameter<IntValue>("NumberOfBits", "The number of bits for the input parameter for the even parity function", new IntValue(4)));
 
       Encoding.TreeLength = 100;
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.GeneticProgramming/3.3/Boolean/MultiplexerProblem.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.GeneticProgramming/3.3/Boolean/MultiplexerProblem.cs	(revision 17748)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.GeneticProgramming/3.3/Boolean/MultiplexerProblem.cs	(revision 17778)
@@ -41,12 +41,6 @@
   public sealed class MultiplexerProblem : SymbolicExpressionTreeProblem {
 
-    #region parameter names
-    private const string NumberOfBitsParameterName = "NumberOfBits";
-    #endregion
-
     #region Parameter Properties
-    public IFixedValueParameter<IntValue> NumberOfBitsParameter {
-      get { return (IFixedValueParameter<IntValue>)Parameters[NumberOfBitsParameterName]; }
-    }
+    [Storable] public IFixedValueParameter<IntValue> NumberOfBitsParameter { get; private set; }
     #endregion
 
@@ -70,4 +64,5 @@
     private MultiplexerProblem(MultiplexerProblem original, Cloner cloner)
       : base(original, cloner) {
+      NumberOfBitsParameter = cloner.Clone(original.NumberOfBitsParameter);
       RegisterEventHandlers();
     }
@@ -81,5 +76,5 @@
       : base(new SymbolicExpressionTreeEncoding()) {
       Maximization = true;
-      Parameters.Add(new FixedValueParameter<IntValue>(NumberOfBitsParameterName,
+      Parameters.Add(NumberOfBitsParameter = new FixedValueParameter<IntValue>("NumberOfBits",
         "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",
         new IntValue(11)));
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.GeneticProgramming/3.3/LawnMower/Problem.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.GeneticProgramming/3.3/LawnMower/Problem.cs	(revision 17748)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.GeneticProgramming/3.3/LawnMower/Problem.cs	(revision 17778)
@@ -35,13 +35,6 @@
   [Item("Lawn Mower Problem", "The lawn mower demo problem for genetic programming.")]
   public class Problem : SymbolicExpressionTreeProblem {
-    private const string LawnWidthParameterName = "LawnWidth";
-    private const string LawnLengthParameterName = "LawnLength";
-
-    public IFixedValueParameter<IntValue> LawnWidthParameter {
-      get { return (IFixedValueParameter<IntValue>)Parameters[LawnWidthParameterName]; }
-    }
-    public IFixedValueParameter<IntValue> LawnLengthParameter {
-      get { return (IFixedValueParameter<IntValue>)Parameters[LawnLengthParameterName]; }
-    }
+    [Storable] public IFixedValueParameter<IntValue> LawnWidthParameter { get; private set; }
+    [Storable] public IFixedValueParameter<IntValue> LawnLengthParameter { get; private set; }
 
     #region item cloning and persistence
@@ -51,5 +44,8 @@
     private void AfterDeserialization() { }
 
-    protected Problem(Problem original, Cloner cloner) : base(original, cloner) { }
+    protected Problem(Problem original, Cloner cloner) : base(original, cloner) {
+      LawnWidthParameter = cloner.Clone(original.LawnWidthParameter);
+      LawnLengthParameter = cloner.Clone(original.LawnLengthParameter);
+    }
     public override IDeepCloneable Clone(Cloner cloner) {
       return new Problem(this, cloner);
@@ -59,6 +55,6 @@
     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)));
+      Parameters.Add(LawnWidthParameter = new FixedValueParameter<IntValue>("LawnWidth", "Width of the lawn.", new IntValue(8)));
+      Parameters.Add(LawnLengthParameter = new FixedValueParameter<IntValue>("LawnLength", "Length of the lawn.", new IntValue(8)));
 
       var g = new SimpleSymbolicExpressionGrammar();
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.GeneticProgramming/3.3/robocode/Problem.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.GeneticProgramming/3.3/robocode/Problem.cs	(revision 17748)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.GeneticProgramming/3.3/robocode/Problem.cs	(revision 17778)
@@ -34,20 +34,9 @@
   [Item("Robocode Problem", "Evolution of a robocode program in java using genetic programming.")]
   public class Problem : SymbolicExpressionTreeProblem {
-    #region Parameter Names
-    private const string RobocodePathParamaterName = "RobocodePath";
-    private const string NrOfRoundsParameterName = "NrOfRounds";
-    private const string EnemiesParameterName = "Enemies";
-    #endregion
-
+    
     #region Parameters
-    public IFixedValueParameter<DirectoryValue> RobocodePathParameter {
-      get { return (IFixedValueParameter<DirectoryValue>)Parameters[RobocodePathParamaterName]; }
-    }
-    public IFixedValueParameter<IntValue> NrOfRoundsParameter {
-      get { return (IFixedValueParameter<IntValue>)Parameters[NrOfRoundsParameterName]; }
-    }
-    public IValueParameter<EnemyCollection> EnemiesParameter {
-      get { return (IValueParameter<EnemyCollection>)Parameters[EnemiesParameterName]; }
-    }
+    [Storable] public IFixedValueParameter<DirectoryValue> RobocodePathParameter { get; private set; }
+    [Storable] public IFixedValueParameter<IntValue> NrOfRoundsParameter { get; private set; }
+    [Storable] public IValueParameter<EnemyCollection> EnemiesParameter { get; private set; }
 
     public string RobocodePath {
@@ -71,4 +60,8 @@
     protected Problem(Problem original, Cloner cloner)
       : base(original, cloner) {
+      RobocodePathParameter = cloner.Clone(original.RobocodePathParameter);
+      NrOfRoundsParameter = cloner.Clone(original.NrOfRoundsParameter);
+      EnemiesParameter = cloner.Clone(original.EnemiesParameter);
+
       RegisterEventHandlers();
     }
@@ -82,7 +75,7 @@
 
 
-      Parameters.Add(new FixedValueParameter<DirectoryValue>(RobocodePathParamaterName, "Path of the Robocode installation.", robocodeDir));
-      Parameters.Add(new FixedValueParameter<IntValue>(NrOfRoundsParameterName, "Number of rounds a robot has to fight against each opponent.", new IntValue(3)));
-      Parameters.Add(new ValueParameter<EnemyCollection>(EnemiesParameterName, "The enemies that should be battled.", robotList));
+      Parameters.Add(RobocodePathParameter = new FixedValueParameter<DirectoryValue>("RobocodePath", "Path of the Robocode installation.", robocodeDir));
+      Parameters.Add(NrOfRoundsParameter = new FixedValueParameter<IntValue>("NrOfRounds", "Number of rounds a robot has to fight against each opponent.", new IntValue(3)));
+      Parameters.Add(EnemiesParameter = new ValueParameter<EnemyCollection>("Enemies", "The enemies that should be battled.", robotList));
 
       Encoding.FunctionArguments = 0;
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.GraphColoring/3.3/GraphColoringProblem.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.GraphColoring/3.3/GraphColoringProblem.cs	(revision 17748)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.GraphColoring/3.3/GraphColoringProblem.cs	(revision 17778)
@@ -43,22 +43,13 @@
     IProblemInstanceConsumer<GCPData>, IProblemInstanceExporter<GCPData> {
 
-    [Storable]
-    private IValueParameter<IntMatrix> adjacencyListParameter;
-    public IValueParameter<IntMatrix> AdjacencyListParameter {
-      get { return adjacencyListParameter; }
-    }
-    [Storable]
-    private IValueParameter<EnumValue<FitnessFunction>> fitnessFunctionParameter;
-    public IValueParameter<EnumValue<FitnessFunction>> FitnessFunctionParameter {
-      get { return fitnessFunctionParameter; }
-    }
+    [Storable] public IValueParameter<IntMatrix> AdjacencyListParameter { get; private set; }
+    [Storable] public IValueParameter<EnumValue<FitnessFunction>> FitnessFunctionParameter { get; private set; }
+    [Storable] public IValueParameter<IntValue> BestKnownColorsParameter { get; private set; }
+    [Storable] public IResult<IntValue> BestSolutionColorsResult { get; private set; }
+    [Storable] public IResult<IntValue> BestSolutionConflicts { get; private set; }
+
     public FitnessFunction FitnessFunction {
-      get { return fitnessFunctionParameter.Value.Value; }
-      set { fitnessFunctionParameter.Value.Value = value; }
-    }
-    [Storable]
-    private IValueParameter<IntValue> bestKnownColorsParameter;
-    public IValueParameter<IntValue> BestKnownColorsParameter {
-      get { return bestKnownColorsParameter; }
+      get { return FitnessFunctionParameter.Value.Value; }
+      set { FitnessFunctionParameter.Value.Value = value; }
     }
 
@@ -67,14 +58,15 @@
     private GraphColoringProblem(GraphColoringProblem original, Cloner cloner)
       : base(original, cloner) {
-      adjacencyListParameter = cloner.Clone(original.adjacencyListParameter);
-      fitnessFunctionParameter = cloner.Clone(original.fitnessFunctionParameter);
-      bestKnownColorsParameter = cloner.Clone(original.bestKnownColorsParameter);
+      AdjacencyListParameter = cloner.Clone(original.AdjacencyListParameter);
+      FitnessFunctionParameter = cloner.Clone(original.FitnessFunctionParameter);
+      BestKnownColorsParameter = cloner.Clone(original.BestKnownColorsParameter);
       RegisterEventHandlers();
     }
     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.") { ReadOnly = true });
-      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)));
-      Parameters.Add(bestKnownColorsParameter = new OptionalValueParameter<IntValue>("BestKnownColors", "The least amount of colors in a valid coloring.") { ReadOnly = true });
+      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.") { ReadOnly = true });
+      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)));
+      Parameters.Add(BestKnownColorsParameter = new OptionalValueParameter<IntValue>("BestKnownColors", "The least amount of colors in a valid coloring.") { ReadOnly = true });
+      Results.Add(BestSolutionColorsResult = new Result<IntValue>("Best Solution Colors", "The number of best solution found so far."));
 
       var imat = new IntMatrix(defaultInstance.Length, 2);
@@ -104,10 +96,10 @@
 
     private void RegisterEventHandlers() {
-      fitnessFunctionParameter.ValueChanged += FitnessFunctionParameterOnValueChanged;
-      fitnessFunctionParameter.Value.ValueChanged += FitnessFunctionOnValueChanged;
+      FitnessFunctionParameter.ValueChanged += FitnessFunctionParameterOnValueChanged;
+      FitnessFunctionParameter.Value.ValueChanged += FitnessFunctionOnValueChanged;
     }
 
     private void FitnessFunctionParameterOnValueChanged(object sender, EventArgs eventArgs) {
-      fitnessFunctionParameter.Value.ValueChanged += FitnessFunctionOnValueChanged;
+      FitnessFunctionParameter.Value.ValueChanged += FitnessFunctionOnValueChanged;
       FitnessFunctionOnValueChanged(sender, eventArgs);
     }
@@ -126,5 +118,5 @@
 
     public override ISingleObjectiveEvaluationResult Evaluate(LinearLinkage lle, IRandom random, CancellationToken cancellationToken) {
-      var adjList = adjacencyListParameter.Value;
+      var adjList = AdjacencyListParameter.Value;
       var llee = lle.ToEndLinks(); // LLE-e encoding uses the highest indexed member as group number
 
