Index: trunk/sources/HeuristicLab.Functions/BakedFunctionTree.cs
===================================================================
--- trunk/sources/HeuristicLab.Functions/BakedFunctionTree.cs	(revision 318)
+++ trunk/sources/HeuristicLab.Functions/BakedFunctionTree.cs	(revision 319)
@@ -233,8 +233,4 @@
       FlattenTrees();
       XmlNode node = base.GetXmlNode(name, document, persistedObjects);
-      if(evaluator != null) {
-        XmlNode evaluatorNode = PersistenceManager.Persist("Evaluator", evaluator, document, persistedObjects);
-        node.AppendChild(evaluatorNode);
-      }
       throw new NotImplementedException();
       //XmlAttribute codeAttribute = document.CreateAttribute("LinearRepresentation");
Index: trunk/sources/HeuristicLab.Functions/BakedTreeEvaluator.cs
===================================================================
--- trunk/sources/HeuristicLab.Functions/BakedTreeEvaluator.cs	(revision 318)
+++ trunk/sources/HeuristicLab.Functions/BakedTreeEvaluator.cs	(revision 319)
@@ -58,5 +58,5 @@
       Instr instr = new Instr();
       instr.arity = f.arity;
-      instr.symbol = EvaluatorSymbolTable.SymbolTable.MapFunction(f.functionType);
+      instr.symbol = EvaluatorSymbolTable.MapFunction(f.functionType);
       switch(instr.symbol) {
         case EvaluatorSymbolTable.VARIABLE: {
@@ -234,15 +234,4 @@
       throw new NotImplementedException();
     }
-
-    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid, IStorable> persistedObjects) {
-      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
-      node.AppendChild(PersistenceManager.Persist("SymbolTable", EvaluatorSymbolTable.SymbolTable, document, persistedObjects));
-      return node;
-    }
-
-    public override void Populate(XmlNode node, IDictionary<Guid, IStorable> restoredObjects) {
-      base.Populate(node, restoredObjects);
-      PersistenceManager.Restore(node.SelectSingleNode("SymbolTable"), restoredObjects);
-    }
   }
 }
Index: trunk/sources/HeuristicLab.Functions/SymbolTable.cs
===================================================================
--- trunk/sources/HeuristicLab.Functions/SymbolTable.cs	(revision 318)
+++ trunk/sources/HeuristicLab.Functions/SymbolTable.cs	(revision 319)
@@ -29,42 +29,33 @@
 namespace HeuristicLab.Functions {
   class EvaluatorSymbolTable : StorableBase{
-    public const int ADDITION = 10010;
-    public const int AND = 10020;
-    public const int AVERAGE = 10030;
-    public const int CONSTANT = 10040;
-    public const int COSINUS = 10050;
-    public const int DIVISION = 10060;
-    public const int EQU = 10070;
-    public const int EXP = 10080;
-    public const int GT = 10090;
-    public const int IFTE = 10100;
-    public const int LT = 10110;
-    public const int LOG = 10120;
-    public const int MULTIPLICATION = 10130;
-    public const int NOT = 10140;
-    public const int OR = 10150;
-    public const int POWER = 10160;
-    public const int SIGNUM = 10170;
-    public const int SINUS = 10180;
-    public const int SQRT = 10190;
-    public const int SUBTRACTION = 10200;
-    public const int TANGENS = 10210;
-    public const int VARIABLE = 10220;
-    public const int XOR = 10230;
+    public const int ADDITION = 1;
+    public const int AND = 2;
+    public const int AVERAGE = 3;
+    public const int CONSTANT = 4;
+    public const int COSINUS = 5;
+    public const int DIVISION = 6;
+    public const int EQU = 7;
+    public const int EXP = 8;
+    public const int GT = 9;
+    public const int IFTE = 10;
+    public const int LT = 11;
+    public const int LOG = 12;
+    public const int MULTIPLICATION = 13;
+    public const int NOT = 14;
+    public const int OR = 15;
+    public const int POWER = 16;
+    public const int SIGNUM = 17;
+    public const int SINUS = 18;
+    public const int SQRT = 19;
+    public const int SUBTRACTION = 20;
+    public const int TANGENS = 21;
+    public const int VARIABLE = 22;
+    public const int XOR = 23;
+    public const int UNKNOWN = 24;
 
-    private int nextFunctionSymbol = 10240;
-    private Dictionary<int, IFunction> table;
-    private Dictionary<IFunction, int> reverseTable;
-    private Dictionary<Type, int> staticTypes;
-
-    private static EvaluatorSymbolTable symbolTable = new EvaluatorSymbolTable();
-    public static EvaluatorSymbolTable SymbolTable {
-      get { return EvaluatorSymbolTable.symbolTable; }
-    }
+    private static Dictionary<Type, int> staticTypes = new Dictionary<Type,int>();
 
     // needs to be public for persistence mechanism (Activator.CreateInstance needs empty constructor)
-    public EvaluatorSymbolTable () {
-      table = new Dictionary<int, IFunction>();
-      reverseTable = new Dictionary<IFunction, int>();
+    static EvaluatorSymbolTable () {
       staticTypes = new Dictionary<Type, int>();
       staticTypes[typeof(Addition)] = ADDITION;
@@ -93,55 +84,6 @@
     }
 
-    internal int MapFunction(IFunction function) {
-      if(!reverseTable.ContainsKey(function)) {
-        int curFunctionSymbol;
-        if(staticTypes.ContainsKey(function.GetType())) curFunctionSymbol = staticTypes[function.GetType()];
-        else {
-          curFunctionSymbol = nextFunctionSymbol;
-          nextFunctionSymbol++;
-        }
-        reverseTable[function] = curFunctionSymbol;
-        table[curFunctionSymbol] = function;
-      }
-      return reverseTable[function];
-    }
-
-    internal IFunction MapSymbol(int symbol) {
-      return table[symbol];
-    }
-
-    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid, IStorable> persistedObjects) {
-      XmlNode node =  base.GetXmlNode(name, document, persistedObjects);
-      XmlAttribute nextFunctionSymbolAttribute = document.CreateAttribute("NextFunctionSymbol");
-      nextFunctionSymbolAttribute.Value = nextFunctionSymbol.ToString();
-      node.Attributes.Append(nextFunctionSymbolAttribute);
-      XmlNode symbolTableNode = document.CreateNode(XmlNodeType.Element, "Table", null);
-      foreach(KeyValuePair<int, IFunction> entry in table) {
-        XmlNode entryNode = PersistenceManager.Persist("Entry", entry.Value, document, persistedObjects);
-        XmlAttribute symbolAttr = document.CreateAttribute("Symbol");
-        symbolAttr.Value = entry.Key.ToString();
-        entryNode.Attributes.Append(symbolAttr);
-        symbolTableNode.AppendChild(entryNode);
-      }
-      node.AppendChild(symbolTableNode);
-      return node;
-    }
-
-    public override void Populate(XmlNode node, IDictionary<Guid, IStorable> restoredObjects) {
-      if(this == symbolTable) {
-        base.Populate(node, restoredObjects);
-        table.Clear();
-        reverseTable.Clear();
-        nextFunctionSymbol = int.Parse(node.Attributes["NextFunctionSymbol"].Value);
-        XmlNode symbolTableNode = node.SelectSingleNode("Table");
-        foreach(XmlNode entry in symbolTableNode.ChildNodes) {
-          IFunction function = (IFunction)PersistenceManager.Restore(entry, restoredObjects);
-          int symbol = int.Parse(entry.Attributes["Symbol"].Value);
-          table[symbol] = function;
-          reverseTable[function] = symbol;
-        }
-      } else {
-        symbolTable.Populate(node, restoredObjects);
-      }
+    internal static int MapFunction(IFunction function) {
+      return staticTypes[function.GetType()];
     }
   }
