Index: trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.3/GlobalSymbolicExpressionGrammar.cs
===================================================================
--- trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.3/GlobalSymbolicExpressionGrammar.cs	(revision 3483)
+++ trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.3/GlobalSymbolicExpressionGrammar.cs	(revision 3484)
@@ -83,4 +83,9 @@
     }
 
+    [StorableHook(HookType.AfterDeserialization)]
+    private void AfterDeserializationHook() {
+      Reset();
+    }
+
     private new void Reset() {
       base.Reset();
Index: trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.3/SymbolicExpressionTreeNode.cs
===================================================================
--- trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.3/SymbolicExpressionTreeNode.cs	(revision 3483)
+++ trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.3/SymbolicExpressionTreeNode.cs	(revision 3484)
@@ -39,14 +39,20 @@
     [Storable]
     private Symbol symbol;
+    public Symbol Symbol {
+      get { return symbol; }
+      protected set { symbol = value; }
+    }
 
     // parent relation is not persisted or cloned (will be set on AddSubtree or RemoveSubtree)
     private SymbolicExpressionTreeNode parent;
-
-    public SymbolicExpressionTreeNode() {
-      subTrees = new List<SymbolicExpressionTreeNode>();
+    internal SymbolicExpressionTreeNode Parent {
+      get { return parent; }
+      set { parent = value; }
     }
 
-    public SymbolicExpressionTreeNode(Symbol symbol)
-      : this() {
+    public SymbolicExpressionTreeNode() { }
+
+    public SymbolicExpressionTreeNode(Symbol symbol) {
+      subTrees = new List<SymbolicExpressionTreeNode>();
       this.symbol = symbol;
     }
@@ -67,14 +73,4 @@
     public virtual IList<SymbolicExpressionTreeNode> SubTrees {
       get { return subTrees; }
-    }
-
-    public Symbol Symbol {
-      get { return symbol; }
-      protected set { symbol = value; }
-    }
-
-    internal SymbolicExpressionTreeNode Parent {
-      get { return parent; }
-      set { parent = value; }
     }
 
Index: trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.3/SymbolicExpressionTreeTerminalNode.cs
===================================================================
--- trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.3/SymbolicExpressionTreeTerminalNode.cs	(revision 3483)
+++ trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.3/SymbolicExpressionTreeTerminalNode.cs	(revision 3484)
@@ -31,10 +31,16 @@
 
 namespace HeuristicLab.Encodings.SymbolicExpressionTreeEncoding {
+  [StorableClass]
   public abstract class SymbolicExpressionTreeTerminalNode : SymbolicExpressionTreeNode {
     private static List<SymbolicExpressionTreeNode> emptyList = new List<SymbolicExpressionTreeNode>();
 
-    protected SymbolicExpressionTreeTerminalNode(Symbol symbol) : base(symbol) { }
-    protected SymbolicExpressionTreeTerminalNode(SymbolicExpressionTreeTerminalNode original)
-      : base(original) {
+    protected SymbolicExpressionTreeTerminalNode() : base() { }
+    // don't call  base constructors to prevent allocation of sub-trees list in base!
+    protected SymbolicExpressionTreeTerminalNode(Symbol symbol) {
+      this.Symbol = symbol;
+    }
+    // don't call  base constructors to prevent allocation of sub-trees list in base!
+    protected SymbolicExpressionTreeTerminalNode(SymbolicExpressionTreeTerminalNode original) {
+      this.Symbol = original.Symbol;
     }
 
Index: trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.3/Symbols/Argument.cs
===================================================================
--- trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.3/Symbols/Argument.cs	(revision 3483)
+++ trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.3/Symbols/Argument.cs	(revision 3484)
@@ -35,9 +35,11 @@
       }
     }
-
+    [Storable]
     private int argumentIndex;
     public int ArgumentIndex {
       get { return argumentIndex; }
     }
+
+    private Argument() : base() { }
 
     public Argument(int argumentIndex)
@@ -50,4 +52,11 @@
       return new ArgumentTreeNode(this);
     }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      Argument clone = (Argument)base.Clone(cloner);
+      clone.argumentIndex = argumentIndex;
+      clone.name = "ARG" + argumentIndex;
+      return clone;
+    }
   }
 }
Index: trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.3/Symbols/ArgumentTreeNode.cs
===================================================================
--- trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.3/Symbols/ArgumentTreeNode.cs	(revision 3483)
+++ trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.3/Symbols/ArgumentTreeNode.cs	(revision 3484)
@@ -29,9 +29,11 @@
       set {
         if (value == null) throw new ArgumentNullException();
-        if(!(value is Argument)) throw new ArgumentException();
-        base.Symbol = value; 
+        if (!(value is Argument)) throw new ArgumentException();
+        base.Symbol = value;
       }
     }
-    
+
+    private ArgumentTreeNode() : base() { }
+
     // copy constructor
     private ArgumentTreeNode(ArgumentTreeNode original)
Index: trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.3/Symbols/DefunTreeNode.cs
===================================================================
--- trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.3/Symbols/DefunTreeNode.cs	(revision 3483)
+++ trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.3/Symbols/DefunTreeNode.cs	(revision 3484)
@@ -40,4 +40,6 @@
     }
 
+    private DefunTreeNode() : base() { }
+
     // copy constructor
     private DefunTreeNode(DefunTreeNode original)
Index: trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.3/Symbols/InvokeFunction.cs
===================================================================
--- trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.3/Symbols/InvokeFunction.cs	(revision 3483)
+++ trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.3/Symbols/InvokeFunction.cs	(revision 3484)
@@ -23,4 +23,5 @@
 using HeuristicLab.Common;
 using HeuristicLab.Core;
+using System;
 namespace HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Symbols {
   /// <summary>
@@ -35,5 +36,15 @@
       }
     }
-    public string FunctionName { get; set; }
+    [Storable]
+    private string functionName;
+    public string FunctionName {
+      get { return functionName; }
+      set {
+        if (value == null) throw new ArgumentNullException();
+        functionName = value;
+      }
+    }
+
+    private InvokeFunction() : base() { }
 
     public InvokeFunction(string functionName)
@@ -46,4 +57,11 @@
       return new InvokeFunctionTreeNode(this);
     }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      InvokeFunction clone = (InvokeFunction)base.Clone(cloner);
+      clone.functionName = functionName;
+      clone.name = "Invoke: " + functionName;
+      return clone;
+    }
   }
 }
Index: trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.3/Symbols/InvokeFunctionTreeNode.cs
===================================================================
--- trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.3/Symbols/InvokeFunctionTreeNode.cs	(revision 3483)
+++ trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.3/Symbols/InvokeFunctionTreeNode.cs	(revision 3484)
@@ -34,4 +34,6 @@
     }
 
+    private InvokeFunctionTreeNode() : base() { }
+
     // copy constructor
     private InvokeFunctionTreeNode(InvokeFunctionTreeNode original)
Index: trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.3/Symbols/Symbol.cs
===================================================================
--- trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.3/Symbols/Symbol.cs	(revision 3483)
+++ trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.3/Symbols/Symbol.cs	(revision 3484)
@@ -35,4 +35,5 @@
   public abstract class Symbol : NamedItem {
     #region Properties
+    [Storable]
     private double initialFrequency;
     public double InitialFrequency {
@@ -55,4 +56,10 @@
       return new SymbolicExpressionTreeNode(this);
     }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      Symbol clone = (Symbol) base.Clone(cloner);
+      clone.initialFrequency = initialFrequency;
+      return clone;
+    }
   }
 }
