Index: /branches/DataAnalysis Refactoring/HeuristicLab.Problems.ArtificialAnt/3.4/AntInterpreter.cs
===================================================================
--- /branches/DataAnalysis Refactoring/HeuristicLab.Problems.ArtificialAnt/3.4/AntInterpreter.cs	(revision 5516)
+++ /branches/DataAnalysis Refactoring/HeuristicLab.Problems.ArtificialAnt/3.4/AntInterpreter.cs	(revision 5517)
@@ -25,5 +25,4 @@
 using HeuristicLab.Data;
 using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
-using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Symbols;
 using HeuristicLab.Problems.ArtificialAnt.Symbols;
 
@@ -65,5 +64,5 @@
     private int currentAntLocationColumn;
     private int nFoodItems;
-    private Stack<SymbolicExpressionTreeNode> nodeStack = new Stack<SymbolicExpressionTreeNode>();
+    private Stack<ISymbolicExpressionTreeNode> nodeStack = new Stack<ISymbolicExpressionTreeNode>();
 
     private void CountFoodItems() {
@@ -94,5 +93,5 @@
       // expression evaluated completly => start at root again
       if (nodeStack.Count == 0) {
-        nodeStack.Push(Expression.Root.SubTrees[0].SubTrees[0]);
+        nodeStack.Push(Expression.Root.GetSubTree(0).GetSubTree(0));
       }
 
@@ -115,16 +114,16 @@
         NextField(out nextAntLocationRow, out nextAntLocationColumn);
         if (World[nextAntLocationRow, nextAntLocationColumn]) {
-          nodeStack.Push(currentNode.SubTrees[0]);
+          nodeStack.Push(currentNode.GetSubTree(0));
         } else {
-          nodeStack.Push(currentNode.SubTrees[1]);
+          nodeStack.Push(currentNode.GetSubTree(1));
         }
       } else if (currentNode.Symbol is Prog2) {
-        nodeStack.Push(currentNode.SubTrees[1]);
-        nodeStack.Push(currentNode.SubTrees[0]);
+        nodeStack.Push(currentNode.GetSubTree(1));
+        nodeStack.Push(currentNode.GetSubTree(0));
         return;
       } else if (currentNode.Symbol is Prog3) {
-        nodeStack.Push(currentNode.SubTrees[2]);
-        nodeStack.Push(currentNode.SubTrees[1]);
-        nodeStack.Push(currentNode.SubTrees[0]);
+        nodeStack.Push(currentNode.GetSubTree(2));
+        nodeStack.Push(currentNode.GetSubTree(1));
+        nodeStack.Push(currentNode.GetSubTree(0));
         return;
       } else if (currentNode.Symbol is InvokeFunction) {
@@ -132,13 +131,13 @@
         var functionDefinition = (SymbolicExpressionTreeNode)FindMatchingFunction(invokeNode.Symbol.FunctionName).Clone();
         var argumentCutPoints = (from node in functionDefinition.IterateNodesPrefix()
-                                 where node.SubTrees.Count > 0
+                                 where node.SubTrees.Count() > 0
                                  from subtree in node.SubTrees
                                  where subtree is ArgumentTreeNode
-                                 select new { Parent = node, Argument = subtree.Symbol as Argument, ChildIndex = node.SubTrees.IndexOf(subtree) }).ToList();
+                                 select new { Parent = node, Argument = subtree.Symbol as Argument, ChildIndex = node.IndexOfSubTree(subtree) }).ToList();
         foreach (var cutPoint in argumentCutPoints) {
           cutPoint.Parent.RemoveSubTree(cutPoint.ChildIndex);
-          cutPoint.Parent.InsertSubTree(cutPoint.ChildIndex, (SymbolicExpressionTreeNode)invokeNode.SubTrees[cutPoint.Argument.ArgumentIndex].Clone());
+          cutPoint.Parent.InsertSubTree(cutPoint.ChildIndex, (SymbolicExpressionTreeNode)invokeNode.GetSubTree(cutPoint.Argument.ArgumentIndex).Clone());
         }
-        nodeStack.Push(functionDefinition.SubTrees[0]);
+        nodeStack.Push(functionDefinition.GetSubTree(0));
       } else {
         throw new InvalidOperationException(currentNode.Symbol.ToString());
Index: /branches/DataAnalysis Refactoring/HeuristicLab.Problems.ArtificialAnt/3.4/ArtificialAntExpressionGrammar.cs
===================================================================
--- /branches/DataAnalysis Refactoring/HeuristicLab.Problems.ArtificialAnt/3.4/ArtificialAntExpressionGrammar.cs	(revision 5516)
+++ /branches/DataAnalysis Refactoring/HeuristicLab.Problems.ArtificialAnt/3.4/ArtificialAntExpressionGrammar.cs	(revision 5517)
@@ -24,5 +24,4 @@
 using HeuristicLab.Common;
 using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
-using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Symbols;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 using HeuristicLab.Problems.ArtificialAnt.Symbols;
Index: /branches/DataAnalysis Refactoring/HeuristicLab.Problems.ArtificialAnt/3.4/ArtificialAntProblem.cs
===================================================================
--- /branches/DataAnalysis Refactoring/HeuristicLab.Problems.ArtificialAnt/3.4/ArtificialAntProblem.cs	(revision 5516)
+++ /branches/DataAnalysis Refactoring/HeuristicLab.Problems.ArtificialAnt/3.4/ArtificialAntProblem.cs	(revision 5517)
@@ -28,7 +28,4 @@
 using HeuristicLab.Data;
 using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
-using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Analyzers;
-using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Creators;
-using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Interfaces;
 using HeuristicLab.Optimization;
 using HeuristicLab.Parameters;
@@ -104,6 +101,6 @@
       get { return EvaluatorParameter; }
     }
-    public ValueParameter<ISymbolicExpressionGrammar> ArtificialAntExpressionGrammarParameter {
-      get { return (ValueParameter<ISymbolicExpressionGrammar>)Parameters["ArtificialAntExpressionGrammar"]; }
+    public ValueParameter<ISymbolicExpressionTreeGrammar> ArtificialAntExpressionGrammarParameter {
+      get { return (ValueParameter<ISymbolicExpressionTreeGrammar>)Parameters["ArtificialAntExpressionGrammar"]; }
     }
     public ValueParameter<IntValue> MaxExpressionLengthParameter {
@@ -218,5 +215,5 @@
       Evaluator evaluator = new Evaluator();
       BoolMatrix world = new BoolMatrix(santaFeAntTrail);
-      ISymbolicExpressionGrammar grammar = new GlobalSymbolicExpressionGrammar(new ArtificialAntExpressionGrammar());
+      ISymbolicExpressionTreeGrammar grammar = new GlobalSymbolicExpressionGrammar(new ArtificialAntExpressionGrammar());
       Parameters.Add(new ValueParameter<BoolValue>("Maximization", "Set to true as the Artificial Ant Problem is a maximization problem.", new BoolValue(true)));
       Parameters.Add(new ValueParameter<SymbolicExpressionTreeCreator>("SolutionCreator", "The operator which should be used to create new artificial ant solutions.", creator));
@@ -227,5 +224,5 @@
       Parameters.Add(new ValueParameter<IntValue>("MaxFunctionDefinitions", "Maximal number of automatically defined functions in the expression to control the artificial ant.", new IntValue(3)));
       Parameters.Add(new ValueParameter<IntValue>("MaxFunctionArguments", "Maximal number of arguments of automatically defined functions in the expression to control the artificial ant.", new IntValue(3)));
-      Parameters.Add(new ValueParameter<ISymbolicExpressionGrammar>("ArtificialAntExpressionGrammar", "The grammar that should be used for artificial ant expressions.", grammar));
+      Parameters.Add(new ValueParameter<ISymbolicExpressionTreeGrammar>("ArtificialAntExpressionGrammar", "The grammar that should be used for artificial ant expressions.", grammar));
       Parameters.Add(new ValueParameter<BoolMatrix>("World", "The world for the artificial ant with scattered food items.", world));
       Parameters.Add(new ValueParameter<IntValue>("MaxTimeSteps", "The number of time steps the artificial ant has available to collect all food items.", new IntValue(600)));
@@ -233,6 +230,4 @@
       creator.SymbolicExpressionTreeParameter.ActualName = "AntTrailSolution";
       evaluator.QualityParameter.ActualName = "FoodEaten";
-      ParameterizeSolutionCreator();
-      ParameterizeEvaluator();
       InitializeOperators();
       AttachEventHandlers();
@@ -263,6 +258,4 @@
     private void SolutionCreatorParameter_ValueChanged(object sender, EventArgs e) {
       SolutionCreator.SymbolicExpressionTreeParameter.ActualNameChanged += new EventHandler(SolutionCreator_SymbolicExpressionTreeParameter_ActualNameChanged);
-      ParameterizeSolutionCreator();
-      ParameterizeEvaluator();
       ParameterizeAnalyzers();
       ParameterizeOperators();
@@ -270,5 +263,4 @@
     }
     private void SolutionCreator_SymbolicExpressionTreeParameter_ActualNameChanged(object sender, EventArgs e) {
-      ParameterizeEvaluator();
       ParameterizeAnalyzers();
       ParameterizeOperators();
@@ -276,6 +268,6 @@
     private void EvaluatorParameter_ValueChanged(object sender, EventArgs e) {
       Evaluator.QualityParameter.ActualNameChanged += new EventHandler(Evaluator_QualityParameter_ActualNameChanged);
-      ParameterizeEvaluator();
-      ParameterizeAnalyzers();
+      ParameterizeAnalyzers();
+      ParameterizeOperators();
       OnEvaluatorChanged();
     }
@@ -283,6 +275,6 @@
     private void Evaluator_QualityParameter_ActualNameChanged(object sender, EventArgs e) {
       ParameterizeAnalyzers();
-    }
-
+      ParameterizeOperators();
+    }
     #endregion
 
@@ -299,9 +291,8 @@
     }
 
-    void MaxFunctionDefinitionsParameter_ValueChanged(object sender, EventArgs e) {
+    private void MaxFunctionDefinitionsParameter_ValueChanged(object sender, EventArgs e) {
       ArtificialAntExpressionGrammar.MaxFunctionDefinitions = MaxFunctionDefinitions.Value;
     }
-
-    void MaxFunctionArgumentsParameter_ValueChanged(object sender, EventArgs e) {
+    private void MaxFunctionArgumentsParameter_ValueChanged(object sender, EventArgs e) {
       ArtificialAntExpressionGrammar.MaxFunctionArguments = MaxFunctionArguments.Value;
     }
@@ -317,14 +308,4 @@
     }
 
-    private void ParameterizeSolutionCreator() {
-      SolutionCreator.SymbolicExpressionGrammarParameter.ActualName = ArtificialAntExpressionGrammarParameter.Name;
-      SolutionCreator.MaxTreeHeightParameter.ActualName = MaxExpressionDepthParameter.Name;
-      SolutionCreator.MaxTreeSizeParameter.ActualName = MaxExpressionLengthParameter.Name;
-    }
-    private void ParameterizeEvaluator() {
-      Evaluator.SymbolicExpressionTreeParameter.ActualName = SolutionCreator.SymbolicExpressionTreeParameter.ActualName;
-      Evaluator.MaxTimeStepsParameter.ActualName = MaxTimeStepsParameter.Name;
-      Evaluator.WorldParameter.ActualName = WorldParameter.Name;
-    }
     private void ParameterizeAnalyzers() {
       foreach (IAntTrailAnalyzer analyzer in AntTrailAnalyzers) {
@@ -340,8 +321,11 @@
 
     private void ParameterizeOperators() {
-      foreach (ISymbolicExpressionTreeOperator op in Operators.OfType<ISymbolicExpressionTreeOperator>()) {
-        op.MaxTreeHeightParameter.ActualName = MaxExpressionDepthParameter.Name;
-        op.MaxTreeSizeParameter.ActualName = MaxExpressionLengthParameter.Name;
-        op.SymbolicExpressionGrammarParameter.ActualName = ArtificialAntExpressionGrammarParameter.Name;
+      foreach (ISymbolicExpressionTreeGrammarBasedOperator op in Operators.OfType<ISymbolicExpressionTreeGrammarBasedOperator>()) {
+        op.SymbolicExpressionTreeGrammarParameter.ActualName = ArtificialAntExpressionGrammarParameter.Name;
+      }
+      foreach (ISymbolicExpressionTreeSizeConstraintOperator op in Operators.OfType<ISymbolicExpressionTreeSizeConstraintOperator>()) {
+        op.MaximumSymbolicExpressionTreeDepthParameter.ActualName = MaxExpressionDepthParameter.Name;
+        op.MaximumSymbolicExpressionTreeLengthParameter.ActualName = MaxExpressionLengthParameter.Name;
+
       }
       foreach (Evaluator op in Operators.OfType<Evaluator>()) {
@@ -357,15 +341,12 @@
         op.SymbolicExpressionTreeParameter.ActualName = SolutionCreator.SymbolicExpressionTreeParameter.ActualName;
       }
-      foreach (ISymbolicExpressionTreeArchitectureManipulator op in Operators.OfType<ISymbolicExpressionTreeArchitectureManipulator>()) {
-        op.MaxFunctionDefinitionsParameter.ActualName = MaxFunctionDefinitionsParameter.Name;
-        op.MaxFunctionArgumentsParameter.ActualName = MaxFunctionArgumentsParameter.Name;
-      }
-      foreach (SymbolicExpressionTreeCreator op in Operators.OfType<SymbolicExpressionTreeCreator>()) {
-        op.MaxFunctionArgumentsParameter.ActualName = MaxFunctionArgumentsParameter.Name;
-        op.MaxFunctionDefinitionsParameter.ActualName = MaxFunctionDefinitionsParameter.Name;
-      }
-    }
-
-
+      foreach (ISymbolicExpressionTreeArchitectureAlteringOperator op in Operators.OfType<ISymbolicExpressionTreeArchitectureAlteringOperator>()) {
+        op.MaximumFunctionDefinitionsParameter.ActualName = MaxFunctionDefinitionsParameter.Name;
+        op.MaximumFunctionArgumentsParameter.ActualName = MaxFunctionArgumentsParameter.Name;
+      }
+      foreach (ISymbolicExpressionTreeCreator op in Operators.OfType<ISymbolicExpressionTreeCreator>()) {
+        op.SymbolicExpressionTreeParameter.ActualName = SolutionCreator.SymbolicExpressionTreeParameter.ActualName;
+      }
+    }
     #endregion
   }
Index: /branches/DataAnalysis Refactoring/HeuristicLab.Problems.ArtificialAnt/3.4/Symbols/IfFoodAhead.cs
===================================================================
--- /branches/DataAnalysis Refactoring/HeuristicLab.Problems.ArtificialAnt/3.4/Symbols/IfFoodAhead.cs	(revision 5516)
+++ /branches/DataAnalysis Refactoring/HeuristicLab.Problems.ArtificialAnt/3.4/Symbols/IfFoodAhead.cs	(revision 5517)
@@ -22,5 +22,5 @@
 using HeuristicLab.Common;
 using HeuristicLab.Core;
-using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Symbols;
+using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 namespace HeuristicLab.Problems.ArtificialAnt.Symbols {
Index: /branches/DataAnalysis Refactoring/HeuristicLab.Problems.ArtificialAnt/3.4/Symbols/Left.cs
===================================================================
--- /branches/DataAnalysis Refactoring/HeuristicLab.Problems.ArtificialAnt/3.4/Symbols/Left.cs	(revision 5516)
+++ /branches/DataAnalysis Refactoring/HeuristicLab.Problems.ArtificialAnt/3.4/Symbols/Left.cs	(revision 5517)
@@ -22,5 +22,5 @@
 using HeuristicLab.Common;
 using HeuristicLab.Core;
-using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Symbols;
+using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 namespace HeuristicLab.Problems.ArtificialAnt.Symbols {
Index: /branches/DataAnalysis Refactoring/HeuristicLab.Problems.ArtificialAnt/3.4/Symbols/Move.cs
===================================================================
--- /branches/DataAnalysis Refactoring/HeuristicLab.Problems.ArtificialAnt/3.4/Symbols/Move.cs	(revision 5516)
+++ /branches/DataAnalysis Refactoring/HeuristicLab.Problems.ArtificialAnt/3.4/Symbols/Move.cs	(revision 5517)
@@ -22,5 +22,5 @@
 using HeuristicLab.Common;
 using HeuristicLab.Core;
-using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Symbols;
+using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 namespace HeuristicLab.Problems.ArtificialAnt.Symbols {
Index: /branches/DataAnalysis Refactoring/HeuristicLab.Problems.ArtificialAnt/3.4/Symbols/Prog2.cs
===================================================================
--- /branches/DataAnalysis Refactoring/HeuristicLab.Problems.ArtificialAnt/3.4/Symbols/Prog2.cs	(revision 5516)
+++ /branches/DataAnalysis Refactoring/HeuristicLab.Problems.ArtificialAnt/3.4/Symbols/Prog2.cs	(revision 5517)
@@ -23,5 +23,5 @@
 using HeuristicLab.Common;
 using HeuristicLab.Core;
-using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Symbols;
+using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 namespace HeuristicLab.Problems.ArtificialAnt.Symbols {
Index: /branches/DataAnalysis Refactoring/HeuristicLab.Problems.ArtificialAnt/3.4/Symbols/Prog3.cs
===================================================================
--- /branches/DataAnalysis Refactoring/HeuristicLab.Problems.ArtificialAnt/3.4/Symbols/Prog3.cs	(revision 5516)
+++ /branches/DataAnalysis Refactoring/HeuristicLab.Problems.ArtificialAnt/3.4/Symbols/Prog3.cs	(revision 5517)
@@ -22,5 +22,5 @@
 using HeuristicLab.Common;
 using HeuristicLab.Core;
-using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Symbols;
+using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 namespace HeuristicLab.Problems.ArtificialAnt.Symbols {
Index: /branches/DataAnalysis Refactoring/HeuristicLab.Problems.ArtificialAnt/3.4/Symbols/Right.cs
===================================================================
--- /branches/DataAnalysis Refactoring/HeuristicLab.Problems.ArtificialAnt/3.4/Symbols/Right.cs	(revision 5516)
+++ /branches/DataAnalysis Refactoring/HeuristicLab.Problems.ArtificialAnt/3.4/Symbols/Right.cs	(revision 5517)
@@ -22,5 +22,5 @@
 using HeuristicLab.Common;
 using HeuristicLab.Core;
-using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Symbols;
+using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 namespace HeuristicLab.Problems.ArtificialAnt.Symbols {
