Index: /trunk/sources/HeuristicLab.Problems.LawnMower/3.3/Grammar.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.LawnMower/3.3/Grammar.cs	(revision 8162)
+++ /trunk/sources/HeuristicLab.Problems.LawnMower/3.3/Grammar.cs	(revision 8163)
@@ -64,10 +64,10 @@
       // define grammar rules
       foreach (var s in allSymbols) {
-        AddAllowedChildSymbol(sum, s, 0);
-        AddAllowedChildSymbol(sum, s, 1);
-        AddAllowedChildSymbol(prog, s, 0);
-        AddAllowedChildSymbol(prog, s, 1);
-        AddAllowedChildSymbol(frog, s, 0);
-        AddAllowedChildSymbol(StartSymbol, s, 0);
+        AddAllowedChildSymbol(sum, s);
+        AddAllowedChildSymbol(sum, s);
+        AddAllowedChildSymbol(prog, s);
+        AddAllowedChildSymbol(prog, s);
+        AddAllowedChildSymbol(frog, s);
+        AddAllowedChildSymbol(StartSymbol, s);
       }
     }
Index: /trunk/sources/HeuristicLab.Problems.LawnMower/3.3/Interpreter.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.LawnMower/3.3/Interpreter.cs	(revision 8162)
+++ /trunk/sources/HeuristicLab.Problems.LawnMower/3.3/Interpreter.cs	(revision 8163)
@@ -53,5 +53,5 @@
       mowerState.Energy = length * width * 2;
       lawn[mowerState.Position.Item1, mowerState.Position.Item2] = true;
-      EvaluateLawnMowerProgram(tree.Root, ref mowerState, lawn, tree.Root.Subtrees.Skip(1).ToArray());
+      EvaluateLawnMowerProgram(tree.Root, mowerState, lawn, tree.Root.Subtrees.Skip(1).ToArray());
 
       return lawn;
@@ -59,11 +59,11 @@
 
 
-    private static Tuple<int, int> EvaluateLawnMowerProgram(ISymbolicExpressionTreeNode node, ref MowerState mowerState, bool[,] lawn, IEnumerable<ISymbolicExpressionTreeNode> adfs) {
+    private static Tuple<int, int> EvaluateLawnMowerProgram(ISymbolicExpressionTreeNode node, MowerState mowerState, bool[,] lawn, IEnumerable<ISymbolicExpressionTreeNode> adfs) {
       if (mowerState.Energy <= 0) return new Tuple<int, int>(0, 0);
 
       if (node.Symbol is ProgramRootSymbol) {
-        return EvaluateLawnMowerProgram(node.GetSubtree(0), ref mowerState, lawn, adfs);
+        return EvaluateLawnMowerProgram(node.GetSubtree(0), mowerState, lawn, adfs);
       } else if (node.Symbol is StartSymbol) {
-        return EvaluateLawnMowerProgram(node.GetSubtree(0), ref mowerState, lawn, adfs);
+        return EvaluateLawnMowerProgram(node.GetSubtree(0), mowerState, lawn, adfs);
       } else if (node.Symbol is Left) {
         switch (mowerState.Heading) {
@@ -106,13 +106,13 @@
         return constNode.Value;
       } else if (node.Symbol is Sum) {
-        var p = EvaluateLawnMowerProgram(node.GetSubtree(0), ref mowerState, lawn, adfs);
-        var q = EvaluateLawnMowerProgram(node.GetSubtree(1), ref mowerState, lawn, adfs);
+        var p = EvaluateLawnMowerProgram(node.GetSubtree(0), mowerState, lawn, adfs);
+        var q = EvaluateLawnMowerProgram(node.GetSubtree(1), mowerState, lawn, adfs);
         return new Tuple<int, int>(p.Item1 + q.Item1,
           p.Item2 + q.Item2);
       } else if (node.Symbol is Prog) {
-        EvaluateLawnMowerProgram(node.GetSubtree(0), ref mowerState, lawn, adfs);
-        return EvaluateLawnMowerProgram(node.GetSubtree(1), ref mowerState, lawn, adfs);
+        EvaluateLawnMowerProgram(node.GetSubtree(0), mowerState, lawn, adfs);
+        return EvaluateLawnMowerProgram(node.GetSubtree(1), mowerState, lawn, adfs);
       } else if (node.Symbol is Frog) {
-        var p = EvaluateLawnMowerProgram(node.GetSubtree(0), ref mowerState, lawn, adfs);
+        var p = EvaluateLawnMowerProgram(node.GetSubtree(0), mowerState, lawn, adfs);
 
         uint newRow = (uint)((mowerState.Position.Item1 + lawn.GetLength(0) + p.Item1 % lawn.GetLength(0)) % lawn.GetLength(0));
@@ -143,5 +143,5 @@
           cutPoint.Parent.InsertSubtree(cutPoint.ChildIndex, (SymbolicExpressionTreeNode)invokeNode.GetSubtree(cutPoint.Argument.ArgumentIndex).Clone());
         }
-        return EvaluateLawnMowerProgram(functionDefinition.GetSubtree(0), ref mowerState, lawn, adfs);
+        return EvaluateLawnMowerProgram(functionDefinition.GetSubtree(0), mowerState, lawn, adfs);
       } else {
         throw new ArgumentException("Invalid symbol in the lawn mower program.");
Index: /trunk/sources/HeuristicLab.Problems.LawnMower/3.3/Problem.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.LawnMower/3.3/Problem.cs	(revision 8162)
+++ /trunk/sources/HeuristicLab.Problems.LawnMower/3.3/Problem.cs	(revision 8163)
@@ -120,5 +120,4 @@
 
     protected override void OnEvaluatorChanged() {
-      base.OnEvaluatorChanged();
       Evaluator.LawnMowerProgramParameter.ActualName = LawnMowerProgramParameterName;
       Evaluator.LawnLengthParameter.ActualName = LawnLengthParameterName;
@@ -127,12 +126,13 @@
       ParameterizeAnalyzers();
       ParameterizeOperators();
+      base.OnEvaluatorChanged();
     }
 
     protected override void OnSolutionCreatorChanged() {
-      base.OnSolutionCreatorChanged();
       SolutionCreator.SymbolicExpressionTreeParameter.ActualName = LawnMowerProgramParameterName;
       SolutionCreator.SymbolicExpressionTreeParameter.ActualNameChanged += SymbolicExpressionTreeParameterOnActualNameChanged;
       ParameterizeAnalyzers();
       ParameterizeOperators();
+      base.OnSolutionCreatorChanged();
     }
 
