Index: /trunk/sources/HeuristicLab 3.3.sln
===================================================================
--- /trunk/sources/HeuristicLab 3.3.sln	(revision 3218)
+++ /trunk/sources/HeuristicLab 3.3.sln	(revision 3219)
@@ -223,4 +223,6 @@
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Services.Deployment-3.3.Tests", "HeuristicLab.Services.Deployment\3.3\Tests\HeuristicLab.Services.Deployment-3.3.Tests.csproj", "{421D9CCA-5A48-4813-AB9C-ED7025F9CC35}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Encodings.SymbolicExpressionTree-3.3", "HeuristicLab.Encodings.SymbolicExpressionTree\3.3\HeuristicLab.Encodings.SymbolicExpressionTree-3.3.csproj", "{125D3006-67F5-48CB-913E-73C0548F17FA}"
 EndProject
 Global
@@ -1245,4 +1247,19 @@
 		{421D9CCA-5A48-4813-AB9C-ED7025F9CC35}.Services|x86.ActiveCfg = Release|x86
 		{421D9CCA-5A48-4813-AB9C-ED7025F9CC35}.Services|x86.Build.0 = Release|x86
+		{125D3006-67F5-48CB-913E-73C0548F17FA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{125D3006-67F5-48CB-913E-73C0548F17FA}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{125D3006-67F5-48CB-913E-73C0548F17FA}.Debug|x64.ActiveCfg = Debug|x64
+		{125D3006-67F5-48CB-913E-73C0548F17FA}.Debug|x64.Build.0 = Debug|x64
+		{125D3006-67F5-48CB-913E-73C0548F17FA}.Debug|x86.ActiveCfg = Debug|x86
+		{125D3006-67F5-48CB-913E-73C0548F17FA}.Debug|x86.Build.0 = Debug|x86
+		{125D3006-67F5-48CB-913E-73C0548F17FA}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{125D3006-67F5-48CB-913E-73C0548F17FA}.Release|Any CPU.Build.0 = Release|Any CPU
+		{125D3006-67F5-48CB-913E-73C0548F17FA}.Release|x64.ActiveCfg = Release|x64
+		{125D3006-67F5-48CB-913E-73C0548F17FA}.Release|x64.Build.0 = Release|x64
+		{125D3006-67F5-48CB-913E-73C0548F17FA}.Release|x86.ActiveCfg = Release|x86
+		{125D3006-67F5-48CB-913E-73C0548F17FA}.Release|x86.Build.0 = Release|x86
+		{125D3006-67F5-48CB-913E-73C0548F17FA}.Services|Any CPU.ActiveCfg = Release|Any CPU
+		{125D3006-67F5-48CB-913E-73C0548F17FA}.Services|x64.ActiveCfg = Release|x64
+		{125D3006-67F5-48CB-913E-73C0548F17FA}.Services|x86.ActiveCfg = Release|x86
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
Index: /trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTree/3.3/Creators/ProbabilisticTreeCreator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTree/3.3/Creators/ProbabilisticTreeCreator.cs	(revision 3218)
+++ /trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTree/3.3/Creators/ProbabilisticTreeCreator.cs	(revision 3219)
@@ -23,8 +23,7 @@
 using HeuristicLab.Data;
 using HeuristicLab.Random;
-using HeuristicLab.GP.Interfaces;
 using System;
 
-namespace HeuristicLab.GP.Operators {
+namespace HeuristicLab.Encodings.SymbolicExpressionTree {
   public class ProbabilisticTreeCreator : OperatorBase {
     private static int MAX_TRIES { get { return 100; } }
Index: /trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTree/3.3/Creators/RampedTreeCreator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTree/3.3/Creators/RampedTreeCreator.cs	(revision 3218)
+++ /trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTree/3.3/Creators/RampedTreeCreator.cs	(revision 3219)
@@ -25,7 +25,6 @@
 using HeuristicLab.Random;
 using System.Diagnostics;
-using HeuristicLab.GP.Interfaces;
 
-namespace HeuristicLab.GP.Operators {
+namespace HeuristicLab.Encodings.SymbolicExpressionTree {
   public class RampedTreeCreator : OperatorBase {
     public override string Description {
Index: /trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTree/3.3/Crossovers/GPCrossoverBase.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTree/3.3/Crossovers/GPCrossoverBase.cs	(revision 3218)
+++ /trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTree/3.3/Crossovers/GPCrossoverBase.cs	(revision 3219)
@@ -23,8 +23,6 @@
 using HeuristicLab.Core;
 using System.Diagnostics;
-using HeuristicLab.Evolutionary;
-using HeuristicLab.GP.Interfaces;
 
-namespace HeuristicLab.GP.Operators {
+namespace HeuristicLab.Encodings.SymbolicExpressionTree {
   public abstract class GPCrossoverBase : CrossoverBase {
     public GPCrossoverBase()
Index: /trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTree/3.3/Crossovers/LangdonHomologousCrossOver.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTree/3.3/Crossovers/LangdonHomologousCrossOver.cs	(revision 3218)
+++ /trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTree/3.3/Crossovers/LangdonHomologousCrossOver.cs	(revision 3219)
@@ -25,5 +25,5 @@
 using HeuristicLab.GP.Interfaces;
 
-namespace HeuristicLab.GP.Operators {
+namespace HeuristicLab.Encodings.SymbolicExpressionTree {
   /// <summary>
   /// Implementation of a homologous crossover operator as described in: 
Index: /trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTree/3.3/Crossovers/OnePointCrossOver.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTree/3.3/Crossovers/OnePointCrossOver.cs	(revision 3218)
+++ /trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTree/3.3/Crossovers/OnePointCrossOver.cs	(revision 3219)
@@ -24,5 +24,5 @@
 using HeuristicLab.GP.Interfaces;
 
-namespace HeuristicLab.GP.Operators {
+namespace HeuristicLab.Encodings.SymbolicExpressionTree {
   /// <summary>
   /// Implementation of a homologous one point crossover operator as described in: 
Index: /trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTree/3.3/Crossovers/SizeConstrictedGPCrossoverBase.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTree/3.3/Crossovers/SizeConstrictedGPCrossoverBase.cs	(revision 3218)
+++ /trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTree/3.3/Crossovers/SizeConstrictedGPCrossoverBase.cs	(revision 3219)
@@ -24,5 +24,5 @@
 using HeuristicLab.GP.Interfaces;
 
-namespace HeuristicLab.GP.Operators {
+namespace HeuristicLab.Encodings.SymbolicExpressionTree {
   public abstract class SizeConstrictedGPCrossoverBase : GPCrossoverBase {
 
Index: /trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTree/3.3/Crossovers/SizeFairCrossOver.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTree/3.3/Crossovers/SizeFairCrossOver.cs	(revision 3218)
+++ /trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTree/3.3/Crossovers/SizeFairCrossOver.cs	(revision 3219)
@@ -26,5 +26,5 @@
 using HeuristicLab.Random;
 
-namespace HeuristicLab.GP.Operators {
+namespace HeuristicLab.Encodings.SymbolicExpressionTree {
   /// <summary>
   /// Implementation of a size fair crossover operator as described in: 
Index: /trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTree/3.3/Crossovers/StandardCrossOver.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTree/3.3/Crossovers/StandardCrossOver.cs	(revision 3218)
+++ /trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTree/3.3/Crossovers/StandardCrossOver.cs	(revision 3219)
@@ -24,5 +24,5 @@
 using HeuristicLab.GP.Interfaces;
 
-namespace HeuristicLab.GP.Operators {
+namespace HeuristicLab.Encodings.SymbolicExpressionTree {
   public class StandardCrossOver : SizeConstrictedGPCrossoverBase {
     private int MaxRecombinationTries { get { return 20; } }
Index: /trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTree/3.3/Crossovers/UniformCrossover.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTree/3.3/Crossovers/UniformCrossover.cs	(revision 3218)
+++ /trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTree/3.3/Crossovers/UniformCrossover.cs	(revision 3219)
@@ -22,7 +22,6 @@
 using System.Collections.Generic;
 using HeuristicLab.Core;
-using HeuristicLab.GP.Interfaces;
 
-namespace HeuristicLab.GP.Operators {
+namespace HeuristicLab.Encodings.SymbolicExpressionTree {
   /// <summary>
   /// Implementation of a homologous uniform crossover operator as described in: 
Index: unk/sources/HeuristicLab.Encodings.SymbolicExpressionTree/3.3/Function.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTree/3.3/Function.cs	(revision 3218)
+++ 	(revision )
@@ -1,292 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System;
-using System.Collections.Generic;
-using System.Text;
-using HeuristicLab.Core;
-using System.Xml;
-using System.Diagnostics;
-using HeuristicLab.GP.Interfaces;
-using System.Linq;
-
-namespace HeuristicLab.GP {
-  public abstract class Function : ItemBase, IFunction {
-    private List<List<IFunction>> allowedSubFunctions = new List<List<IFunction>>();
-    private int minArity = -1;
-    private int maxArity = -1;
-    private double tickets = 1.0;
-    private IOperator initializer;
-    private IOperator manipulator;
-    private int minTreeHeight = -1;
-    private int minTreeSize = -1;
-
-    private string name;
-    public virtual string Name {
-      get { return name; }
-      set {
-        if (string.IsNullOrEmpty(value)) throw new ArgumentException();
-        if (value != name) {
-          name = value;
-          FireChanged();
-        }
-      }
-    }
-
-    protected Function() {
-      name = this.GetType().Name;
-    }
-
-    public virtual string Description {
-      get { return "Description for this function is missing (TODO)"; }
-    }
-
-    public int MinSubTrees {
-      get {
-        return minArity;
-      }
-      protected internal set {
-        if (value < 0) throw new ArgumentException();
-        if (minArity != value) {
-          minArity = value;
-          while (minArity > allowedSubFunctions.Count) allowedSubFunctions.Add(new List<IFunction>());
-          ResetCachedValues();
-          FireChanged();
-        }
-      }
-    }
-
-    public int MaxSubTrees {
-      get {
-        return maxArity;
-      }
-      protected internal set {
-        if (value < 0) throw new ArgumentException();
-        if (value < minArity) throw new ArgumentException();
-        if (value != maxArity) {
-          maxArity = value;
-          while (allowedSubFunctions.Count > maxArity) allowedSubFunctions.RemoveAt(allowedSubFunctions.Count - 1);
-          while (maxArity > allowedSubFunctions.Count) {
-            if (allowedSubFunctions.Count > 0) {
-              // copy the list of allowed sub-functions from the previous slot
-              allowedSubFunctions.Add(new List<IFunction>(allowedSubFunctions[allowedSubFunctions.Count - 1]));
-            } else {
-              // add empty list
-              allowedSubFunctions.Add(new List<IFunction>());
-            }
-          }
-          ResetCachedValues();
-          FireChanged();
-        }
-      }
-    }
-
-
-    public int MinTreeSize {
-      get {
-        if (minTreeSize <= 0) {
-          RecalculateMinimalTreeSize();
-          FireChanged();
-        }
-        Debug.Assert(minTreeSize > 0);
-        return minTreeSize;
-      }
-    }
-
-    public int MinTreeHeight {
-      get {
-        if (minTreeHeight <= 0) {
-          RecalculateMinimalTreeHeight();
-          FireChanged();
-        }
-        Debug.Assert(minTreeHeight > 0);
-        return minTreeHeight;
-      }
-    }
-
-    public double Tickets {
-      get { return tickets; }
-      set {
-        if (value < 0.0) throw new ArgumentException("Number of tickets must be positive");
-        if (value != tickets) {
-          tickets = value;
-          FireChanged();
-        }
-      }
-    }
-
-    public IOperator Initializer {
-      get { return initializer; }
-      set {
-        if (initializer != value) {
-          initializer = value;
-          FireChanged();
-        }
-      }
-    }
-
-    public IOperator Manipulator {
-      get { return manipulator; }
-      set {
-        if (manipulator != value) {
-          manipulator = value;
-          FireChanged();
-        }
-      }
-    }
-
-    public virtual IFunctionTree GetTreeNode() {
-      return new FunctionTree(this);
-    }
-
-    public ICollection<IFunction> GetAllowedSubFunctions(int index) {
-      if (index < 0 || index > MaxSubTrees) throw new ArgumentException("Index outside of allowed range. index = " + index);
-      return allowedSubFunctions[index];
-    }
-
-    public void AddAllowedSubFunction(IFunction function, int index) {
-      if (index < 0 || index > MaxSubTrees) throw new ArgumentException("Index outside of allowed range. index = " + index);
-      if (allowedSubFunctions[index] == null) {
-        allowedSubFunctions[index] = new List<IFunction>();
-      }
-      if (!allowedSubFunctions[index].Contains(function)) {
-        allowedSubFunctions[index].Add(function);
-      }
-      ResetCachedValues();
-      FireChanged();
-    }
-    public void RemoveAllowedSubFunction(IFunction function, int index) {
-      if (index < 0 || index > MaxSubTrees) throw new ArgumentException("Index outside of allowed range. index = " + index);
-      if (allowedSubFunctions[index].Contains(function)) {
-        allowedSubFunctions[index].Remove(function);
-        ResetCachedValues();
-        FireChanged();
-      }
-    }
-
-    private void ResetCachedValues() {
-      minTreeHeight = -1;
-      minTreeSize = -1;
-    }
-
-    public bool IsAllowedSubFunction(IFunction function, int index) {
-      return GetAllowedSubFunctions(index).Contains(function);
-    }
-
-    private void RecalculateMinimalTreeSize() {
-      if (MinSubTrees == 0) minTreeSize = 1;
-      else {
-        minTreeSize = int.MaxValue; // prevent infinite recursion        
-        minTreeSize = 1 + (from slot in Enumerable.Range(0, MinSubTrees)
-                           let minForSlot = (from function in GetAllowedSubFunctions(slot)
-                                             where function != this
-                                             select function.MinTreeSize).DefaultIfEmpty(0).Min()
-                           select minForSlot).Sum();
-      }
-    }
-
-    private void RecalculateMinimalTreeHeight() {
-      if (MinSubTrees == 0) minTreeHeight = 1;
-      else {
-        minTreeHeight = int.MaxValue;
-        minTreeHeight = 1 + (from slot in Enumerable.Range(0, MinSubTrees)
-                             let minForSlot = (from function in GetAllowedSubFunctions(slot)
-                                               where function != this
-                                               select function.MinTreeHeight).DefaultIfEmpty(0).Min()
-                             select minForSlot).Max();
-      }
-    }
-
-    public override IView CreateView() {
-      return new FunctionView(this);
-    }
-
-    public override string ToString() {
-      return name;
-    }
-
-    #region persistence
-    public override object Clone(IDictionary<Guid, object> clonedObjects) {
-      Function clone = (Function)base.Clone(clonedObjects);
-      if (initializer != null) clone.initializer = (IOperator)Auxiliary.Clone(initializer, clonedObjects);
-      else clone.initializer = null;
-      if (manipulator != null) clone.manipulator = (IOperator)Auxiliary.Clone(manipulator, clonedObjects);
-      else clone.manipulator = null;
-      clone.MaxSubTrees = maxArity;
-      clone.MinSubTrees = minArity;
-      clone.Tickets = tickets;
-      clone.allowedSubFunctions.Clear();
-      for (int i = 0; i < MaxSubTrees; i++) {
-        var allowedSubFunctionsForSlot = new List<IFunction>();
-        foreach (IFunction f in GetAllowedSubFunctions(i)) {
-          allowedSubFunctionsForSlot.Add((IFunction)Auxiliary.Clone(f, clonedObjects));
-        }
-        clone.allowedSubFunctions.Add(allowedSubFunctionsForSlot);
-      }
-      return clone;
-    }
-
-    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid, IStorable> persistedObjects) {
-      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
-      XmlAttribute minSubTreesAttr = document.CreateAttribute("MinSubTrees");
-      minSubTreesAttr.Value = XmlConvert.ToString(MinSubTrees);
-      XmlAttribute maxSubTreesAttr = document.CreateAttribute("MaxSubTrees");
-      maxSubTreesAttr.Value = XmlConvert.ToString(MaxSubTrees);
-      node.Attributes.Append(minSubTreesAttr);
-      node.Attributes.Append(maxSubTreesAttr);
-      if (initializer != null)
-        node.AppendChild(PersistenceManager.Persist("Initializer", initializer, document, persistedObjects));
-      if (manipulator != null)
-        node.AppendChild(PersistenceManager.Persist("Manipulator", manipulator, document, persistedObjects));
-      for (int i = 0; i < MaxSubTrees; i++) {
-        XmlNode slotNode = document.CreateElement("AllowedSubFunctions");
-        XmlAttribute slotAttr = document.CreateAttribute("Slot");
-        slotAttr.Value = XmlConvert.ToString(i);
-        slotNode.Attributes.Append(slotAttr);
-        node.AppendChild(slotNode);
-        foreach (IFunction f in GetAllowedSubFunctions(i)) {
-          slotNode.AppendChild(PersistenceManager.Persist(f, document, persistedObjects));
-        }
-      }
-      return node;
-    }
-
-    public override void Populate(XmlNode node, IDictionary<Guid, IStorable> restoredObjects) {
-      base.Populate(node, restoredObjects);
-      MinSubTrees = XmlConvert.ToInt32(node.Attributes["MinSubTrees"].Value);
-      MaxSubTrees = XmlConvert.ToInt32(node.Attributes["MaxSubTrees"].Value);
-      if (node.SelectSingleNode("Initializer") != null) {
-        initializer = (IOperator)PersistenceManager.Restore(node.SelectSingleNode("Initializer"), restoredObjects);
-      }
-      if (node.SelectSingleNode("Manipulator") != null) {
-        manipulator = (IOperator)PersistenceManager.Restore(node.SelectSingleNode("Manipulator"), restoredObjects);
-      }
-      foreach (var subFunctionsList in allowedSubFunctions) subFunctionsList.Clear();
-      foreach (XmlNode allowedSubFunctionsNode in node.SelectNodes("AllowedSubFunctions")) {
-        int slot = XmlConvert.ToInt32(allowedSubFunctionsNode.Attributes["Slot"].Value);
-        foreach (XmlNode fNode in allowedSubFunctionsNode.ChildNodes) {
-          AddAllowedSubFunction((IFunction)PersistenceManager.Restore(fNode, restoredObjects), slot);
-        }
-      }
-    }
-    #endregion
-  }
-}
Index: unk/sources/HeuristicLab.Encodings.SymbolicExpressionTree/3.3/FunctionTree.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTree/3.3/FunctionTree.cs	(revision 3218)
+++ 	(revision )
@@ -1,125 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System;
-using System.Collections.Generic;
-using System.Text;
-using HeuristicLab.Core;
-using HeuristicLab.GP.Interfaces;
-using System.Xml;
-
-namespace HeuristicLab.GP {
-  public class FunctionTree : IFunctionTree {
-    private List<IFunctionTree> subTrees;
-    private IFunction function;
-
-    public FunctionTree() {
-    }
-
-    public FunctionTree(IFunction function) {
-      subTrees = new List<IFunctionTree>();
-      this.function = function;
-    }
-
-    protected FunctionTree(FunctionTree original) {
-      this.function = original.Function;
-      this.subTrees = new List<IFunctionTree>(original.SubTrees.Count);
-      foreach (IFunctionTree originalSubTree in original.SubTrees) {
-        this.SubTrees.Add((IFunctionTree)originalSubTree.Clone());
-      }
-    }
-
-    #region IFunctionTree Members
-    public virtual bool HasLocalParameters {
-      get { return false; }
-    }
-
-    public virtual IList<IFunctionTree> SubTrees {
-      get { return subTrees; }
-    }
-
-    public IFunction Function {
-      get { return function; }
-      protected set { function = value; }
-    }
-
-    public int GetSize() {
-      int size = 1;
-      foreach (IFunctionTree tree in SubTrees) size += tree.GetSize();
-      return size;
-    }
-
-    public int GetHeight() {
-      int maxHeight = 0;
-      foreach (IFunctionTree tree in SubTrees) maxHeight = Math.Max(maxHeight, tree.GetHeight());
-      return maxHeight + 1;
-    }
-
-    public virtual IOperation CreateShakingOperation(IScope scope) {
-      return null;
-    }
-
-    public virtual IOperation CreateInitOperation(IScope scope) {
-      return null;
-    }
-
-    public void AddSubTree(IFunctionTree tree) {
-      SubTrees.Add(tree);
-    }
-
-    public virtual void InsertSubTree(int index, IFunctionTree tree) {
-      SubTrees.Insert(index, tree);
-    }
-
-    public virtual void RemoveSubTree(int index) {
-      SubTrees.RemoveAt(index);
-    }
-
-    public override string ToString() {
-      return Function.Name;
-    }
-
-    #endregion
-
-    #region IStorable Members
-
-    public Guid Guid {
-      get { throw new NotSupportedException(); }
-    }
-
-    public virtual object Clone() {
-      return new FunctionTree(this);
-    }
-
-    public object Clone(IDictionary<Guid, object> clonedObjects) {
-      throw new NotImplementedException();
-    }
-
-    public virtual XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid, IStorable> persistedObjects) {
-      return null;
-    }
-
-    public virtual void Populate(XmlNode node, IDictionary<Guid, IStorable> restoredObjects) {
-    }
-
-    #endregion
-  }
-}
Index: /trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTree/3.3/HeuristicLab.Encodings.SymbolicExpressionTree-3.3.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTree/3.3/HeuristicLab.Encodings.SymbolicExpressionTree-3.3.csproj	(revision 3219)
+++ /trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTree/3.3/HeuristicLab.Encodings.SymbolicExpressionTree-3.3.csproj	(revision 3219)
@@ -0,0 +1,144 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{125D3006-67F5-48CB-913E-73C0548F17FA}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Encodings.SymbolicExpressionTree</RootNamespace>
+    <AssemblyName>HeuristicLab.Encodings.SymbolicExpressionTree-3.3</AssemblyName>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Xml.Linq">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data.DataSetExtensions">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="Symbol.cs" />
+    <Compile Include="SymbolicExpressionTree.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+    <None Include="HeuristicLabEncodingsSymbolicExpressionTreePlugin.cs.frame" />
+    <None Include="Properties\AssemblyInfo.frame" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\HeuristicLab.Core\3.3\HeuristicLab.Core-3.3.csproj">
+      <Project>{C36BD924-A541-4A00-AFA8-41701378DDC5}</Project>
+      <Name>HeuristicLab.Core-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Data\3.3\HeuristicLab.Data-3.3.csproj">
+      <Project>{BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937}</Project>
+      <Name>HeuristicLab.Data-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Optimization\3.3\HeuristicLab.Optimization-3.3.csproj">
+      <Project>{14AB8D24-25BC-400C-A846-4627AA945192}</Project>
+      <Name>HeuristicLab.Optimization-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Parameters\3.3\HeuristicLab.Parameters-3.3.csproj">
+      <Project>{56F9106A-079F-4C61-92F6-86A84C2D84B7}</Project>
+      <Name>HeuristicLab.Parameters-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Persistence\3.3\HeuristicLab.Persistence-3.3.csproj">
+      <Project>{102BC7D3-0EF9-439C-8F6D-96FF0FDB8E1B}</Project>
+      <Name>HeuristicLab.Persistence-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.PluginInfrastructure\HeuristicLab.PluginInfrastructure.csproj">
+      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
+      <Name>HeuristicLab.PluginInfrastructure</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Random\3.3\HeuristicLab.Random-3.3.csproj">
+      <Project>{F4539FB6-4708-40C9-BE64-0A1390AEA197}</Project>
+      <Name>HeuristicLab.Random-3.3</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <Folder Include="Creators\" />
+    <Folder Include="Crossovers\" />
+    <Folder Include="Interfaces\" />
+    <Folder Include="Manipulators\" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd
+SubWCRev "%25ProjectDir%25\" "%25ProjectDir%25\HeuristicLabEncodingsSymbolicExpressionTreePlugin.cs.frame" "%25ProjectDir%25\HeuristicLabEncodingsSymbolicExpressionTreePlugin.cs"</PreBuildEvent>
+  </PropertyGroup>
+</Project>
Index: unk/sources/HeuristicLab.Encodings.SymbolicExpressionTree/3.3/HeuristicLabEncodingsSymbolicExpressionTree.cs.frame
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTree/3.3/HeuristicLabEncodingsSymbolicExpressionTree.cs.frame	(revision 3218)
+++ 	(revision )
@@ -1,40 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System;
-using System.Collections.Generic;
-using System.Text;
-using HeuristicLab.PluginInfrastructure;
-
-namespace HeuristicLab.GP.Operators {
-  [Plugin("HeuristicLab.GP.Operators", "3.3.0.$WCREV$")]
-  [PluginFile("HeuristicLab.GP.Operators-3.3.dll", PluginFileType.Assembly)]
-  [PluginDependency("HeuristicLab.Core-3.2")]
-  [PluginDependency("HeuristicLab.Data-3.2")]
-  [PluginDependency("HeuristicLab.Evolutionary-3.2")]
-  [PluginDependency("HeuristicLab.GP", "3.3")]
-  [PluginDependency("HeuristicLab.GP.Interfaces", "3.3")]
-  [PluginDependency("HeuristicLab.Operators-3.2")]
-  [PluginDependency("HeuristicLab.Random-3.2")]
-  [PluginDependency("HeuristicLab.Selection-3.2")]
-  public class HeuristicLabGPOperatorsPlugin : PluginBase {
-  }
-}
Index: /trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTree/3.3/HeuristicLabEncodingsSymbolicExpressionTreePlugin.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTree/3.3/HeuristicLabEncodingsSymbolicExpressionTreePlugin.cs	(revision 3219)
+++ /trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTree/3.3/HeuristicLabEncodingsSymbolicExpressionTreePlugin.cs	(revision 3219)
@@ -0,0 +1,38 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Encodings.SymbolicExpressionTree {
+  [Plugin("HeuristicLab.Encodings.SymbolicExpressionTree", "3.3.0.3218")]
+  [PluginFile("HeuristicLab.Encodings.SymbolicExpressionTree-3.3.dll", PluginFileType.Assembly)]
+  [PluginDependency("HeuristicLab.Core", "3.3.0.0")]
+  [PluginDependency("HeuristicLab.Data", "3.3.0.0")]
+  [PluginDependency("HeuristicLab.Optimization", "3.3.0.0")]
+  [PluginDependency("HeuristicLab.Parameters", "3.3.0.0")]
+  [PluginDependency("HeuristicLab.Persistence", "3.3.0.0")]
+  [PluginDependency("HeuristicLab.Random", "3.3.0.0")]
+  public class HeuristicLabEncodingsSymbolicExpressionTreePlugin : PluginBase {
+  }
+}
Index: /trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTree/3.3/HeuristicLabEncodingsSymbolicExpressionTreePlugin.cs.frame
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTree/3.3/HeuristicLabEncodingsSymbolicExpressionTreePlugin.cs.frame	(revision 3219)
+++ /trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTree/3.3/HeuristicLabEncodingsSymbolicExpressionTreePlugin.cs.frame	(revision 3219)
@@ -0,0 +1,38 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Encodings.SymbolicExpressionTree {
+  [Plugin("HeuristicLab.Encodings.SymbolicExpressionTree", "3.3.0.$WCREV$")]
+  [PluginFile("HeuristicLab.Encodings.SymbolicExpressionTree-3.3.dll", PluginFileType.Assembly)]
+  [PluginDependency("HeuristicLab.Core", "3.3.0.0")]
+  [PluginDependency("HeuristicLab.Data", "3.3.0.0")]
+  [PluginDependency("HeuristicLab.Optimization", "3.3.0.0")]
+  [PluginDependency("HeuristicLab.Parameters", "3.3.0.0")]
+  [PluginDependency("HeuristicLab.Persistence", "3.3.0.0")]
+  [PluginDependency("HeuristicLab.Random", "3.3.0.0")]
+  public class HeuristicLabEncodingsSymbolicExpressionTreePlugin : PluginBase {
+  }
+}
Index: /trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTree/3.3/Interfaces/IFunction.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTree/3.3/Interfaces/IFunction.cs	(revision 3218)
+++ /trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTree/3.3/Interfaces/IFunction.cs	(revision 3219)
@@ -25,5 +25,5 @@
 using HeuristicLab.Core;
 
-namespace HeuristicLab.GP.Interfaces {
+namespace HeuristicLab.Encodings.SymbolicExpressionTree {
   public interface IFunction : IItem {
     string Name { get; }
Index: /trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTree/3.3/Interfaces/IFunctionTree.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTree/3.3/Interfaces/IFunctionTree.cs	(revision 3218)
+++ /trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTree/3.3/Interfaces/IFunctionTree.cs	(revision 3219)
@@ -25,6 +25,6 @@
 using HeuristicLab.Core;
 
-namespace HeuristicLab.GP.Interfaces {
-  public interface IFunctionTree : IStorable {
+namespace HeuristicLab.Encodings.SymbolicExpressionTree {
+  public interface IFunctionTree {
     bool HasLocalParameters { get; }
     IList<IFunctionTree> SubTrees { get; }
Index: /trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTree/3.3/Manipulators/ChangeNodeTypeManipulation.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTree/3.3/Manipulators/ChangeNodeTypeManipulation.cs	(revision 3218)
+++ /trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTree/3.3/Manipulators/ChangeNodeTypeManipulation.cs	(revision 3219)
@@ -27,5 +27,5 @@
 using HeuristicLab.GP.Interfaces;
 
-namespace HeuristicLab.GP.Operators {
+namespace HeuristicLab.Encodings.SymbolicExpressionTree {
   public class ChangeNodeTypeManipulation : GPManipulatorBase {
 
Index: /trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTree/3.3/Manipulators/CutOutNodeManipulation.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTree/3.3/Manipulators/CutOutNodeManipulation.cs	(revision 3218)
+++ /trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTree/3.3/Manipulators/CutOutNodeManipulation.cs	(revision 3219)
@@ -27,5 +27,5 @@
 using HeuristicLab.GP.Interfaces;
 
-namespace HeuristicLab.GP.Operators {
+namespace HeuristicLab.Encodings.SymbolicExpressionTree {
   public class CutOutNodeManipulation : GPManipulatorBase {
     public override string Description {
Index: /trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTree/3.3/Manipulators/DeleteSubTreeManipulation.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTree/3.3/Manipulators/DeleteSubTreeManipulation.cs	(revision 3218)
+++ /trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTree/3.3/Manipulators/DeleteSubTreeManipulation.cs	(revision 3219)
@@ -26,5 +26,5 @@
 using HeuristicLab.GP.Interfaces;
 
-namespace HeuristicLab.GP.Operators {
+namespace HeuristicLab.Encodings.SymbolicExpressionTree {
   public class DeleteSubTreeManipulation : GPManipulatorBase {
     public override string Description {
Index: /trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTree/3.3/Manipulators/FullTreeShaker.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTree/3.3/Manipulators/FullTreeShaker.cs	(revision 3218)
+++ /trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTree/3.3/Manipulators/FullTreeShaker.cs	(revision 3219)
@@ -25,8 +25,6 @@
 using HeuristicLab.Random;
 using HeuristicLab.Data;
-using HeuristicLab.GP.Interfaces;
-using HeuristicLab.Selection;
 
-namespace HeuristicLab.GP.Operators {
+namespace HeuristicLab.Encodings.SymbolicExpressionTree {
   public class FullTreeShaker : DelegatingOperator {
     public override string Description {
Index: /trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTree/3.3/Manipulators/GPManipulatorBase.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTree/3.3/Manipulators/GPManipulatorBase.cs	(revision 3218)
+++ /trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTree/3.3/Manipulators/GPManipulatorBase.cs	(revision 3219)
@@ -23,7 +23,6 @@
 using HeuristicLab.Random;
 using HeuristicLab.Data;
-using HeuristicLab.GP.Interfaces;
 
-namespace HeuristicLab.GP.Operators {
+namespace HeuristicLab.Encodings.SymbolicExpressionTree {
   public abstract class GPManipulatorBase : OperatorBase {
     public GPManipulatorBase()
Index: /trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTree/3.3/Manipulators/OnePointShaker.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTree/3.3/Manipulators/OnePointShaker.cs	(revision 3218)
+++ /trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTree/3.3/Manipulators/OnePointShaker.cs	(revision 3219)
@@ -25,8 +25,6 @@
 using HeuristicLab.Random;
 using HeuristicLab.Data;
-using HeuristicLab.Selection;
-using HeuristicLab.GP.Interfaces;
 
-namespace HeuristicLab.GP.Operators {
+namespace HeuristicLab.Encodings.SymbolicExpressionTree {
   public class OnePointShaker : DelegatingOperator {
     public override string Description {
Index: /trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTree/3.3/Manipulators/SubstituteSubTreeManipulation.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTree/3.3/Manipulators/SubstituteSubTreeManipulation.cs	(revision 3218)
+++ /trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTree/3.3/Manipulators/SubstituteSubTreeManipulation.cs	(revision 3219)
@@ -27,5 +27,5 @@
 using HeuristicLab.GP.Interfaces;
 
-namespace HeuristicLab.GP.Operators {
+namespace HeuristicLab.Encodings.SymbolicExpressionTree {
   public class SubstituteSubTreeManipulation : GPManipulatorBase {
 
Index: /trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTree/3.3/Properties/AssemblyInfo.frame
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTree/3.3/Properties/AssemblyInfo.frame	(revision 3219)
+++ /trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTree/3.3/Properties/AssemblyInfo.frame	(revision 3219)
@@ -0,0 +1,47 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.Encodings.SymbolicExpressionTree")]
+[assembly: AssemblyDescription("HeuristicLab symbolic expression tree encoding and related operators")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2010 HEAL")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("6f0b963e-ff24-4396-b7bd-f8997b6eda55")]
+
+[assembly: AssemblyVersion("3.3.0.0")]
+[assembly: AssemblyFileVersion("3.3.0.$WCREV$")]
Index: /trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTree/3.3/Symbol.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTree/3.3/Symbol.cs	(revision 3219)
+++ /trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTree/3.3/Symbol.cs	(revision 3219)
@@ -0,0 +1,289 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using System.Linq;
+
+namespace HeuristicLab.Encodings.SymbolicExpressionTree {
+  public abstract class Symbol {
+    private List<List<Symbol>> allowedSubFunctions = new List<List<Symbol>>();
+    private int minArity = -1;
+    private int maxArity = -1;
+    private double tickets = 1.0;
+    private IOperator initializer;
+    private IOperator manipulator;
+    private int minTreeHeight = -1;
+    private int minTreeSize = -1;
+
+    private string name;
+    public virtual string Name {
+      get { return name; }
+      set {
+        if (string.IsNullOrEmpty(value)) throw new ArgumentException();
+        if (value != name) {
+          name = value;
+          FireChanged();
+        }
+      }
+    }
+
+    protected Function() {
+      name = this.GetType().Name;
+    }
+
+    public virtual string Description {
+      get { return "Description for this function is missing (TODO)"; }
+    }
+
+    public int MinSubTrees {
+      get {
+        return minArity;
+      }
+      protected internal set {
+        if (value < 0) throw new ArgumentException();
+        if (minArity != value) {
+          minArity = value;
+          while (minArity > allowedSubFunctions.Count) allowedSubFunctions.Add(new List<IFunction>());
+          ResetCachedValues();
+          FireChanged();
+        }
+      }
+    }
+
+    public int MaxSubTrees {
+      get {
+        return maxArity;
+      }
+      protected internal set {
+        if (value < 0) throw new ArgumentException();
+        if (value < minArity) throw new ArgumentException();
+        if (value != maxArity) {
+          maxArity = value;
+          while (allowedSubFunctions.Count > maxArity) allowedSubFunctions.RemoveAt(allowedSubFunctions.Count - 1);
+          while (maxArity > allowedSubFunctions.Count) {
+            if (allowedSubFunctions.Count > 0) {
+              // copy the list of allowed sub-functions from the previous slot
+              allowedSubFunctions.Add(new List<Symbol>(allowedSubFunctions[allowedSubFunctions.Count - 1]));
+            } else {
+              // add empty list
+              allowedSubFunctions.Add(new List<Symbol>());
+            }
+          }
+          ResetCachedValues();
+          FireChanged();
+        }
+      }
+    }
+
+
+    public int MinTreeSize {
+      get {
+        if (minTreeSize <= 0) {
+          RecalculateMinimalTreeSize();
+          FireChanged();
+        }
+        // Debug.Assert(minTreeSize > 0);
+        return minTreeSize;
+      }
+    }
+
+    public int MinTreeHeight {
+      get {
+        if (minTreeHeight <= 0) {
+          RecalculateMinimalTreeHeight();
+          FireChanged();
+        }
+        // Debug.Assert(minTreeHeight > 0);
+        return minTreeHeight;
+      }
+    }
+
+    public double Tickets {
+      get { return tickets; }
+      set {
+        if (value < 0.0) throw new ArgumentException("Number of tickets must be positive");
+        if (value != tickets) {
+          tickets = value;
+          FireChanged();
+        }
+      }
+    }
+
+    public IOperator Initializer {
+      get { return initializer; }
+      set {
+        if (initializer != value) {
+          initializer = value;
+          FireChanged();
+        }
+      }
+    }
+
+    public IOperator Manipulator {
+      get { return manipulator; }
+      set {
+        if (manipulator != value) {
+          manipulator = value;
+          FireChanged();
+        }
+      }
+    }
+
+    public virtual IFunctionTree GetTreeNode() {
+      return new FunctionTree(this);
+    }
+
+    public ICollection<IFunction> GetAllowedSubFunctions(int index) {
+      if (index < 0 || index > MaxSubTrees) throw new ArgumentException("Index outside of allowed range. index = " + index);
+      return allowedSubFunctions[index];
+    }
+
+    public void AddAllowedSubFunction(IFunction function, int index) {
+      if (index < 0 || index > MaxSubTrees) throw new ArgumentException("Index outside of allowed range. index = " + index);
+      if (allowedSubFunctions[index] == null) {
+        allowedSubFunctions[index] = new List<IFunction>();
+      }
+      if (!allowedSubFunctions[index].Contains(function)) {
+        allowedSubFunctions[index].Add(function);
+      }
+      ResetCachedValues();
+      FireChanged();
+    }
+    public void RemoveAllowedSubFunction(IFunction function, int index) {
+      if (index < 0 || index > MaxSubTrees) throw new ArgumentException("Index outside of allowed range. index = " + index);
+      if (allowedSubFunctions[index].Contains(function)) {
+        allowedSubFunctions[index].Remove(function);
+        ResetCachedValues();
+        FireChanged();
+      }
+    }
+
+    private void ResetCachedValues() {
+      minTreeHeight = -1;
+      minTreeSize = -1;
+    }
+
+    public bool IsAllowedSubFunction(IFunction function, int index) {
+      return GetAllowedSubFunctions(index).Contains(function);
+    }
+
+    private void RecalculateMinimalTreeSize() {
+      if (MinSubTrees == 0) minTreeSize = 1;
+      else {
+        minTreeSize = int.MaxValue; // prevent infinite recursion        
+        minTreeSize = 1 + (from slot in Enumerable.Range(0, MinSubTrees)
+                           let minForSlot = (from function in GetAllowedSubFunctions(slot)
+                                             where function != this
+                                             select function.MinTreeSize).DefaultIfEmpty(0).Min()
+                           select minForSlot).Sum();
+      }
+    }
+
+    private void RecalculateMinimalTreeHeight() {
+      if (MinSubTrees == 0) minTreeHeight = 1;
+      else {
+        minTreeHeight = int.MaxValue;
+        minTreeHeight = 1 + (from slot in Enumerable.Range(0, MinSubTrees)
+                             let minForSlot = (from function in GetAllowedSubFunctions(slot)
+                                               where function != this
+                                               select function.MinTreeHeight).DefaultIfEmpty(0).Min()
+                             select minForSlot).Max();
+      }
+    }
+
+    public override IView CreateView() {
+      return new FunctionView(this);
+    }
+
+    public override string ToString() {
+      return name;
+    }
+
+    #region persistence
+    public override object Clone(IDictionary<Guid, object> clonedObjects) {
+      Function clone = (Function)base.Clone(clonedObjects);
+      if (initializer != null) clone.initializer = (IOperator)Auxiliary.Clone(initializer, clonedObjects);
+      else clone.initializer = null;
+      if (manipulator != null) clone.manipulator = (IOperator)Auxiliary.Clone(manipulator, clonedObjects);
+      else clone.manipulator = null;
+      clone.MaxSubTrees = maxArity;
+      clone.MinSubTrees = minArity;
+      clone.Tickets = tickets;
+      clone.allowedSubFunctions.Clear();
+      for (int i = 0; i < MaxSubTrees; i++) {
+        var allowedSubFunctionsForSlot = new List<IFunction>();
+        foreach (IFunction f in GetAllowedSubFunctions(i)) {
+          allowedSubFunctionsForSlot.Add((IFunction)Auxiliary.Clone(f, clonedObjects));
+        }
+        clone.allowedSubFunctions.Add(allowedSubFunctionsForSlot);
+      }
+      return clone;
+    }
+
+    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid, IStorable> persistedObjects) {
+      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
+      XmlAttribute minSubTreesAttr = document.CreateAttribute("MinSubTrees");
+      minSubTreesAttr.Value = XmlConvert.ToString(MinSubTrees);
+      XmlAttribute maxSubTreesAttr = document.CreateAttribute("MaxSubTrees");
+      maxSubTreesAttr.Value = XmlConvert.ToString(MaxSubTrees);
+      node.Attributes.Append(minSubTreesAttr);
+      node.Attributes.Append(maxSubTreesAttr);
+      if (initializer != null)
+        node.AppendChild(PersistenceManager.Persist("Initializer", initializer, document, persistedObjects));
+      if (manipulator != null)
+        node.AppendChild(PersistenceManager.Persist("Manipulator", manipulator, document, persistedObjects));
+      for (int i = 0; i < MaxSubTrees; i++) {
+        XmlNode slotNode = document.CreateElement("AllowedSubFunctions");
+        XmlAttribute slotAttr = document.CreateAttribute("Slot");
+        slotAttr.Value = XmlConvert.ToString(i);
+        slotNode.Attributes.Append(slotAttr);
+        node.AppendChild(slotNode);
+        foreach (IFunction f in GetAllowedSubFunctions(i)) {
+          slotNode.AppendChild(PersistenceManager.Persist(f, document, persistedObjects));
+        }
+      }
+      return node;
+    }
+
+    public override void Populate(XmlNode node, IDictionary<Guid, IStorable> restoredObjects) {
+      base.Populate(node, restoredObjects);
+      MinSubTrees = XmlConvert.ToInt32(node.Attributes["MinSubTrees"].Value);
+      MaxSubTrees = XmlConvert.ToInt32(node.Attributes["MaxSubTrees"].Value);
+      if (node.SelectSingleNode("Initializer") != null) {
+        initializer = (IOperator)PersistenceManager.Restore(node.SelectSingleNode("Initializer"), restoredObjects);
+      }
+      if (node.SelectSingleNode("Manipulator") != null) {
+        manipulator = (IOperator)PersistenceManager.Restore(node.SelectSingleNode("Manipulator"), restoredObjects);
+      }
+      foreach (var subFunctionsList in allowedSubFunctions) subFunctionsList.Clear();
+      foreach (XmlNode allowedSubFunctionsNode in node.SelectNodes("AllowedSubFunctions")) {
+        int slot = XmlConvert.ToInt32(allowedSubFunctionsNode.Attributes["Slot"].Value);
+        foreach (XmlNode fNode in allowedSubFunctionsNode.ChildNodes) {
+          AddAllowedSubFunction((IFunction)PersistenceManager.Restore(fNode, restoredObjects), slot);
+        }
+      }
+    }
+    #endregion
+  }
+}
Index: /trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTree/3.3/SymbolicExpressionTree.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTree/3.3/SymbolicExpressionTree.cs	(revision 3219)
+++ /trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTree/3.3/SymbolicExpressionTree.cs	(revision 3219)
@@ -0,0 +1,122 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using System.Xml;
+
+namespace HeuristicLab.Encodings.SymbolicExpressionTree {
+  public class SymbolicExpressionTree  {
+    private List<SymbolicExpressionTree> subTrees;
+    private IFunction function;
+
+    public SymbolicExpressionTree() {
+    }
+
+    public SymbolicExpressionTree(Symbol symbol) {
+      subTrees = new List<SymbolicExpressionTree>();
+      this.function = function;
+    }
+
+    protected SymbolicExpressionTree(SymbolicExpressionTree original) {
+      this.function = original.Function;
+      this.subTrees = new List<SymbolicExpressionTree>(original.SubTrees.Count);
+      foreach (SymbolicExpressionTree originalSubTree in original.SubTrees) {
+        this.SubTrees.Add((SymbolicExpressionTree)originalSubTree.Clone());
+      }
+    }
+
+    public virtual bool HasLocalParameters {
+      get { return false; }
+    }
+
+    public virtual IList<SymbolicExpressionTree> SubTrees {
+      get { return subTrees; }
+    }
+
+    public Symbol Function {
+      get { return function; }
+      protected set { function = value; }
+    }
+
+    public int GetSize() {
+      int size = 1;
+      foreach (SymbolicExpressionTree tree in SubTrees) size += tree.GetSize();
+      return size;
+    }
+
+    public int GetHeight() {
+      int maxHeight = 0;
+      foreach (SymbolicExpressionTree tree in SubTrees) maxHeight = Math.Max(maxHeight, tree.GetHeight());
+      return maxHeight + 1;
+    }
+
+    public virtual IOperation CreateShakingOperation(IScope scope) {
+      return null;
+    }
+
+    public virtual IOperation CreateInitOperation(IScope scope) {
+      return null;
+    }
+
+    public void AddSubTree(SymbolicExpressionTree tree) {
+      SubTrees.Add(tree);
+    }
+
+    public virtual void InsertSubTree(int index, SymbolicExpressionTree tree) {
+      SubTrees.Insert(index, tree);
+    }
+
+    public virtual void RemoveSubTree(int index) {
+      SubTrees.RemoveAt(index);
+    }
+
+    public override string ToString() {
+      return Function.Name;
+    }
+
+
+    #region IStorable Members
+
+    public Guid Guid {
+      get { throw new NotSupportedException(); }
+    }
+
+    public virtual object Clone() {
+      return new SymbolicExpressionTree(this);
+    }
+
+    public object Clone(IDictionary<Guid, object> clonedObjects) {
+      throw new NotImplementedException();
+    }
+
+    public virtual XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid, IStorable> persistedObjects) {
+      return null;
+    }
+
+    public virtual void Populate(XmlNode node, IDictionary<Guid, IStorable> restoredObjects) {
+    }
+
+    #endregion
+  }
+}
