Index: /branches/2521_ProblemRefactoring/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/GaussianProcessCovarianceOptimizationProblem.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/GaussianProcessCovarianceOptimizationProblem.cs	(revision 16946)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/GaussianProcessCovarianceOptimizationProblem.cs	(revision 16947)
@@ -60,6 +60,4 @@
     private static readonly CovarianceSquaredExponentialIso sqrExpIso;
 
-    private static readonly SymbolicExpressionTreeEncoding defaultEncoding;
-
     static GaussianProcessCovarianceOptimizationProblem() {
       // cumbersome initialization because of ConstrainedValueParameters
@@ -187,5 +185,7 @@
       Encoding.TreeLength = 10;
       Encoding.TreeDepth = 5;
+      Encoding.GrammarParameter.ReadOnly = false;
       Encoding.Grammar = g;
+      Encoding.GrammarParameter.ReadOnly = true;
     }
 
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/SymbolicExpressionTreeEncoding.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/SymbolicExpressionTreeEncoding.cs	(revision 16946)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/SymbolicExpressionTreeEncoding.cs	(revision 16947)
@@ -25,4 +25,5 @@
 using System.Collections.Generic;
 using System.Linq;
+using HEAL.Attic;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
@@ -30,5 +31,4 @@
 using HeuristicLab.Optimization;
 using HeuristicLab.Parameters;
-using HEAL.Attic;
 using HeuristicLab.PluginInfrastructure;
 
@@ -167,4 +167,5 @@
       treeDepthParameter = new FixedValueParameter<IntValue>(Name + ".Maximum Tree Depth", "Maximal depth of the symbolic expression. The minimum depth needed for the algorithm is 3 because two levels are reserved for the ProgramRoot and the Start symbol.", new IntValue(maximumDepth));
       grammarParameter = new ValueParameter<ISymbolicExpressionGrammar>(Name + ".Grammar", "The grammar that should be used for symbolic expression tree.", grammar);
+      grammarParameter.ReadOnly = true;
       functionDefinitionsParameter = new FixedValueParameter<IntValue>(Name + ".Function Definitions", "Maximal number of automatically defined functions", new IntValue(0));
       functionArgumentsParameter = new FixedValueParameter<IntValue>(Name + ".Function Arguments", "Maximal number of arguments of automatically defined functions.", new IntValue(0));
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Problems.GeneticProgramming/3.3/ArtificialAnt/Problem.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Problems.GeneticProgramming/3.3/ArtificialAnt/Problem.cs	(revision 16946)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Problems.GeneticProgramming/3.3/ArtificialAnt/Problem.cs	(revision 16947)
@@ -82,6 +82,6 @@
       get { return (IValueParameter<BoolMatrix>)Parameters["World"]; }
     }
-    public IValueParameter<IntValue> MaxTimeStepsParameter {
-      get { return (IValueParameter<IntValue>)Parameters["MaximumTimeSteps"]; }
+    public IFixedValueParameter<IntValue> MaxTimeStepsParameter {
+      get { return (IFixedValueParameter<IntValue>)Parameters["MaximumTimeSteps"]; }
     }
     #endregion
@@ -92,7 +92,7 @@
       set { WorldParameter.Value = value; }
     }
-    public IntValue MaxTimeSteps {
-      get { return MaxTimeStepsParameter.Value; }
-      set { MaxTimeStepsParameter.Value = value; }
+    public int MaxTimeSteps {
+      get { return MaxTimeStepsParameter.Value.Value; }
+      set { MaxTimeStepsParameter.Value.Value = value; }
     }
     #endregion
@@ -119,5 +119,5 @@
       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 ValueParameter<IntValue>("MaximumTimeSteps", "The number of time steps the artificial ant has available to collect all food items.", new IntValue(600)));
+      Parameters.Add(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();
@@ -128,12 +128,15 @@
       Encoding.TreeLength = 20;
       Encoding.TreeDepth = 10;
+      Encoding.GrammarParameter.ReadOnly = false;
       Encoding.Grammar = g;
-      base.BestKnownQuality = 89;
-      base.Encoding.GrammarParameter.ReadOnly = true;
+      Encoding.GrammarParameter.ReadOnly = true;
+
+      BestKnownQuality = 89;
+      BestKnownQualityParameter.ReadOnly = true;
     }
 
 
     public override double Evaluate(ISymbolicExpressionTree tree, IRandom random) {
-      var interpreter = new Interpreter(tree, World, MaxTimeSteps.Value);
+      var interpreter = new Interpreter(tree, World, MaxTimeSteps);
       interpreter.Run();
       return interpreter.FoodEaten;
@@ -146,7 +149,7 @@
 
       if (!results.ContainsKey(bestSolutionResultName)) {
-        results.Add(new Result(bestSolutionResultName, new Solution(World, trees[bestIdx], MaxTimeSteps.Value, qualities[bestIdx])));
+        results.Add(new Result(bestSolutionResultName, new Solution(World, trees[bestIdx], MaxTimeSteps, qualities[bestIdx])));
       } else if (((Solution)(results[bestSolutionResultName].Value)).Quality < qualities[bestIdx]) {
-        results[bestSolutionResultName].Value = new Solution(World, trees[bestIdx], MaxTimeSteps.Value, qualities[bestIdx]);
+        results[bestSolutionResultName].Value = new Solution(World, trees[bestIdx], MaxTimeSteps, qualities[bestIdx]);
       }
     }
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Problems.GeneticProgramming/3.3/BasicSymbolicRegression/Problem.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Problems.GeneticProgramming/3.3/BasicSymbolicRegression/Problem.cs	(revision 16946)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Problems.GeneticProgramming/3.3/BasicSymbolicRegression/Problem.cs	(revision 16947)
@@ -86,5 +86,4 @@
       Encoding.TreeLength = 100;
       Encoding.TreeDepth = 17;
-      Encoding.GrammarParameter.ReadOnly = true;
 
       UpdateGrammar();
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Problems.GeneticProgramming/3.3/Boolean/EvenParityProblem.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Problems.GeneticProgramming/3.3/Boolean/EvenParityProblem.cs	(revision 16946)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Problems.GeneticProgramming/3.3/Boolean/EvenParityProblem.cs	(revision 16947)
@@ -96,7 +96,11 @@
         g.AddTerminalSymbol(string.Format("{0}", i));
 
+      Encoding.GrammarParameter.ReadOnly = false;
       Encoding.Grammar = g;
+      Encoding.GrammarParameter.ReadOnly = true;
 
+      BestKnownQualityParameter.ReadOnly = false;
       BestKnownQuality = Math.Pow(2, NumberOfBits); // this is a benchmark problem (the best achievable quality is known for a given number of bits)
+      BestKnownQualityParameter.ReadOnly = true;
     }
 
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Problems.GeneticProgramming/3.3/Boolean/MultiplexerProblem.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Problems.GeneticProgramming/3.3/Boolean/MultiplexerProblem.cs	(revision 16946)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Problems.GeneticProgramming/3.3/Boolean/MultiplexerProblem.cs	(revision 16947)
@@ -86,7 +86,6 @@
         new IntValue(11)));
 
-      var g = new SimpleSymbolicExpressionGrammar(); // will be replaced in update grammar
-      Encoding = new SymbolicExpressionTreeEncoding(g, 100, 17);
-      Encoding.GrammarParameter.ReadOnly = true;
+      Encoding.TreeLength = 100;
+      Encoding.TreeDepth = 17;
 
       UpdateGrammar();
@@ -115,5 +114,7 @@
       Encoding.GrammarParameter.ReadOnly = true;
 
+      BestKnownQualityParameter.ReadOnly = false;
       BestKnownQuality = Math.Pow(2, NumberOfBits); // this is a benchmark problem (the best achievable quality is known for a given number of bits)
+      BestKnownQualityParameter.ReadOnly = true;
     }
 
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Problems.GeneticProgramming/3.3/LawnMower/Problem.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Problems.GeneticProgramming/3.3/LawnMower/Problem.cs	(revision 16946)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Problems.GeneticProgramming/3.3/LawnMower/Problem.cs	(revision 16947)
@@ -78,5 +78,7 @@
       Encoding.TreeLength = 1000;
       Encoding.TreeDepth = 17;
+      Encoding.GrammarParameter.ReadOnly = false;
       Encoding.Grammar = g;
+      Encoding.GrammarParameter.ReadOnly = true;
     }
 
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Problems.GeneticProgramming/3.3/robocode/Problem.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Problems.GeneticProgramming/3.3/robocode/Problem.cs	(revision 16946)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Problems.GeneticProgramming/3.3/robocode/Problem.cs	(revision 16947)
@@ -73,5 +73,5 @@
     }
 
-    public Problem() : base(new SymbolicExpressionTreeEncoding()) {
+    public Problem() : base(new SymbolicExpressionTreeEncoding(new Grammar(), maximumLength: 1000, maximumDepth: 10)) {
       DirectoryValue robocodeDir = new DirectoryValue { Value = @"robocode" };
 
@@ -84,8 +84,4 @@
       Parameters.Add(new ValueParameter<EnemyCollection>(EnemiesParameterName, "The enemies that should be battled.", robotList));
 
-      Encoding.TreeLength = 1000;
-      Encoding.TreeDepth = 10;
-      Encoding.Grammar = new Grammar();
-      Encoding.GrammarParameter.ReadOnly = true;
       Encoding.FunctionArguments = 0;
       Encoding.FunctionDefinitions = 0;
