Index: trunk/sources/HeuristicLab.Problems.ExternalEvaluation.GP/3.3/Grammar/FullFunctionalExpressionGrammar.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.ExternalEvaluation.GP/3.3/Grammar/FullFunctionalExpressionGrammar.cs	(revision 4633)
+++ trunk/sources/HeuristicLab.Problems.ExternalEvaluation.GP/3.3/Grammar/FullFunctionalExpressionGrammar.cs	(revision 4722)
@@ -21,5 +21,5 @@
 
 using System.Collections.Generic;
-using System.Linq;
+using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
@@ -33,4 +33,10 @@
     [Storable]
     private HeuristicLab.Problems.ExternalEvaluation.GP.Variable variableSymbol;
+    [StorableConstructor]
+    protected FullFunctionalExpressionGrammar(bool deserializing) : base(deserializing) { }
+    protected FullFunctionalExpressionGrammar(FullFunctionalExpressionGrammar original, Cloner cloner) : base(original, cloner) { }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new FullFunctionalExpressionGrammar(this, cloner);
+    }
 
     public FullFunctionalExpressionGrammar()
@@ -75,5 +81,5 @@
       var unaryFunctionSymbols = new List<Symbol>() { sin, cos, tan, log, exp, not };
       var binaryFunctionSymbols = new List<Symbol>() { gt, lt };
-      var functionSymbols = new List<Symbol>() { add, sub, mul, div, mean, and, or};
+      var functionSymbols = new List<Symbol>() { add, sub, mul, div, mean, and, or };
 
       foreach (var symb in allSymbols)
Index: trunk/sources/HeuristicLab.Problems.ExternalEvaluation.GP/3.3/Interpretation/TreeInterpreter.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.ExternalEvaluation.GP/3.3/Interpretation/TreeInterpreter.cs	(revision 4633)
+++ trunk/sources/HeuristicLab.Problems.ExternalEvaluation.GP/3.3/Interpretation/TreeInterpreter.cs	(revision 4722)
@@ -22,4 +22,5 @@
 using System;
 using System.Collections.Generic;
+using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
@@ -92,5 +93,5 @@
     private Instruction[] code;
     private int pc;
-    
+
     public override bool CanChangeName {
       get { return false; }
@@ -100,7 +101,12 @@
     }
 
-    public TreeInterpreter()
-      : base() {
-    }
+
+    [StorableConstructor]
+    protected TreeInterpreter(bool deserializing) : base(deserializing) { }
+    protected TreeInterpreter(TreeInterpreter original, Cloner cloner) : base(original, cloner) { }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new TreeInterpreter(this, cloner);
+    }
+    public TreeInterpreter() : base() { }
 
     public void Prepare(SymbolicExpressionTree tree) {
Index: trunk/sources/HeuristicLab.Problems.ExternalEvaluation.GP/3.3/SymbolicExpressionTreeBinaryConverter.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.ExternalEvaluation.GP/3.3/SymbolicExpressionTreeBinaryConverter.cs	(revision 4633)
+++ trunk/sources/HeuristicLab.Problems.ExternalEvaluation.GP/3.3/SymbolicExpressionTreeBinaryConverter.cs	(revision 4722)
@@ -20,13 +20,10 @@
 #endregion
 
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using HeuristicLab.Core;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
 using System.IO;
 using Google.ProtocolBuffers;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 
 namespace HeuristicLab.Problems.ExternalEvaluation.GP {
@@ -34,4 +31,13 @@
   [StorableClass]
   public class SymbolicExpressionTreeBinaryConverter : SymbolicExpressionTreeConverter {
+    [StorableConstructor]
+    protected SymbolicExpressionTreeBinaryConverter(bool deserializing) : base(deserializing) { }
+    protected SymbolicExpressionTreeBinaryConverter(SymbolicExpressionTreeBinaryConverter original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new SymbolicExpressionTreeBinaryConverter(this, cloner);
+    }
+    public SymbolicExpressionTreeBinaryConverter() : base() { }
 
     protected override void ConvertSymbolicExpressionTree(SymbolicExpressionTree tree, string name, SolutionMessage.Builder builder) {
Index: trunk/sources/HeuristicLab.Problems.ExternalEvaluation.GP/3.3/SymbolicExpressionTreeConverter.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.ExternalEvaluation.GP/3.3/SymbolicExpressionTreeConverter.cs	(revision 4633)
+++ trunk/sources/HeuristicLab.Problems.ExternalEvaluation.GP/3.3/SymbolicExpressionTreeConverter.cs	(revision 4722)
@@ -21,7 +21,5 @@
 
 using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
+using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
@@ -33,4 +31,11 @@
   public abstract class SymbolicExpressionTreeConverter : Item, IItemToSolutionMessageConverter {
     private static readonly Type[] itemTypes = new Type[] { typeof(SymbolicExpressionTree) };
+
+    [StorableConstructor]
+    protected SymbolicExpressionTreeConverter(bool deserializing) : base(deserializing) { }
+    protected SymbolicExpressionTreeConverter(SymbolicExpressionTreeConverter original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public SymbolicExpressionTreeConverter() : base() { }
 
     #region IItemToSolutionMessageConverter Members
Index: trunk/sources/HeuristicLab.Problems.ExternalEvaluation.GP/3.3/SymbolicExpressionTreeStringConverter.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.ExternalEvaluation.GP/3.3/SymbolicExpressionTreeStringConverter.cs	(revision 4633)
+++ trunk/sources/HeuristicLab.Problems.ExternalEvaluation.GP/3.3/SymbolicExpressionTreeStringConverter.cs	(revision 4722)
@@ -21,4 +21,5 @@
 
 using System;
+using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
@@ -31,5 +32,15 @@
     SymbolicExpressionTreeStringFormatter formatter;
 
-    public SymbolicExpressionTreeStringConverter() {
+    [StorableConstructor]
+    protected SymbolicExpressionTreeStringConverter(bool deserializing) : base(deserializing) { }
+    protected SymbolicExpressionTreeStringConverter(SymbolicExpressionTreeStringConverter original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new SymbolicExpressionTreeStringConverter(this, cloner);
+    }
+
+    public SymbolicExpressionTreeStringConverter()
+      : base() {
       formatter = new SymbolicExpressionTreeStringFormatter();
       formatter.Indent = false;
Index: trunk/sources/HeuristicLab.Problems.ExternalEvaluation.GP/3.3/Symbols/Addition.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.ExternalEvaluation.GP/3.3/Symbols/Addition.cs	(revision 4633)
+++ trunk/sources/HeuristicLab.Problems.ExternalEvaluation.GP/3.3/Symbols/Addition.cs	(revision 4722)
@@ -20,4 +20,5 @@
 #endregion
 
+using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Symbols;
@@ -28,5 +29,12 @@
   [Item("Addition", "Symbol that represents the + operator.")]
   public sealed class Addition : Symbol {
-
+    [StorableConstructor]
+    private Addition(bool deserializing) : base(deserializing) { }
+    private Addition(Addition original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new Addition(this, cloner);
+    }
     public Addition()
       : base("+", "Symbol that represents the + operator.") {
Index: trunk/sources/HeuristicLab.Problems.ExternalEvaluation.GP/3.3/Symbols/And.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.ExternalEvaluation.GP/3.3/Symbols/And.cs	(revision 4633)
+++ trunk/sources/HeuristicLab.Problems.ExternalEvaluation.GP/3.3/Symbols/And.cs	(revision 4722)
@@ -20,4 +20,5 @@
 #endregion
 
+using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Symbols;
@@ -28,5 +29,12 @@
   [Item("And", "Symbol that represents the boolean AND operator.")]
   public sealed class And : Symbol {
-
+    [StorableConstructor]
+    private And(bool deserializing) : base(deserializing) { }
+    private And(And original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new And(this, cloner);
+    }
     public And()
       : base("&&", "Symbol that represents the boolean AND operator.") {
Index: trunk/sources/HeuristicLab.Problems.ExternalEvaluation.GP/3.3/Symbols/Average.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.ExternalEvaluation.GP/3.3/Symbols/Average.cs	(revision 4633)
+++ trunk/sources/HeuristicLab.Problems.ExternalEvaluation.GP/3.3/Symbols/Average.cs	(revision 4722)
@@ -20,4 +20,5 @@
 #endregion
 
+using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Symbols;
@@ -28,5 +29,12 @@
   [Item("Average", "Symbol that represents the average (arithmetic mean) function.")]
   public sealed class Average : Symbol {
-
+    [StorableConstructor]
+    private Average(bool deserializing) : base(deserializing) { }
+    private Average(Average original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new Average(this, cloner);
+    }
     public Average()
       : base("avg", "Symbol that represents the average (arithmetic mean) function.") {
Index: trunk/sources/HeuristicLab.Problems.ExternalEvaluation.GP/3.3/Symbols/Constant.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.ExternalEvaluation.GP/3.3/Symbols/Constant.cs	(revision 4633)
+++ trunk/sources/HeuristicLab.Problems.ExternalEvaluation.GP/3.3/Symbols/Constant.cs	(revision 4722)
@@ -78,4 +78,17 @@
     }
     #endregion
+
+    [StorableConstructor]
+    private Constant(bool deserializing) : base(deserializing) { }
+    private Constant(Constant original, Cloner cloner)
+      : base(original, cloner) {
+      minValue = original.minValue;
+      maxValue = original.maxValue;
+      manipulatorNu = original.manipulatorNu;
+      manipulatorSigma = original.manipulatorSigma;
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new Constant(this, cloner);
+    }
     public Constant()
       : base("Constant", "Represents a constant value.") {
@@ -89,13 +102,4 @@
       return new ConstantTreeNode(this);
     }
-
-    public override IDeepCloneable Clone(Cloner cloner) {
-      Constant clone = (Constant)base.Clone(cloner);
-      clone.minValue = minValue;
-      clone.maxValue = maxValue;
-      clone.manipulatorNu = manipulatorNu;
-      clone.manipulatorSigma = manipulatorSigma;
-      return clone;
-    }
   }
 }
Index: trunk/sources/HeuristicLab.Problems.ExternalEvaluation.GP/3.3/Symbols/ConstantTreeNode.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.ExternalEvaluation.GP/3.3/Symbols/ConstantTreeNode.cs	(revision 4633)
+++ trunk/sources/HeuristicLab.Problems.ExternalEvaluation.GP/3.3/Symbols/ConstantTreeNode.cs	(revision 4722)
@@ -20,4 +20,5 @@
 #endregion
 
+using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
@@ -39,10 +40,11 @@
     }
 
-    private ConstantTreeNode() : base() { }
-
-    // copy constructor
-    private ConstantTreeNode(ConstantTreeNode original)
-      : base(original) {
-      constantValue = original.constantValue;
+    [StorableConstructor]
+    private ConstantTreeNode(bool deserializing) : base(deserializing) { }
+    private ConstantTreeNode(ConstantTreeNode original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new ConstantTreeNode(this, cloner);
     }
 
@@ -67,8 +69,4 @@
     }
 
-    public override object Clone() {
-      return new ConstantTreeNode(this);
-    }
-
     public override string ToString() {
       return ";" + constantValue.ToString("E4");
Index: trunk/sources/HeuristicLab.Problems.ExternalEvaluation.GP/3.3/Symbols/Cosine.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.ExternalEvaluation.GP/3.3/Symbols/Cosine.cs	(revision 4633)
+++ trunk/sources/HeuristicLab.Problems.ExternalEvaluation.GP/3.3/Symbols/Cosine.cs	(revision 4722)
@@ -20,4 +20,5 @@
 #endregion
 
+using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Symbols;
@@ -28,5 +29,12 @@
   [Item("Cosine", "Symbol that represents the cosine function.")]
   public sealed class Cosine : Symbol {
-
+    [StorableConstructor]
+    private Cosine(bool deserializing) : base(deserializing) { }
+    private Cosine(Cosine original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new Cosine(this, cloner);
+    }
     public Cosine()
       : base("cos", "Symbol that represents the cosine function.") {
Index: trunk/sources/HeuristicLab.Problems.ExternalEvaluation.GP/3.3/Symbols/Division.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.ExternalEvaluation.GP/3.3/Symbols/Division.cs	(revision 4633)
+++ trunk/sources/HeuristicLab.Problems.ExternalEvaluation.GP/3.3/Symbols/Division.cs	(revision 4722)
@@ -20,4 +20,5 @@
 #endregion
 
+using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Symbols;
@@ -28,5 +29,12 @@
   [Item("Division", "Symbol that represents the / operator.")]
   public sealed class Division : Symbol {
-
+    [StorableConstructor]
+    private Division(bool deserializing) : base(deserializing) { }
+    private Division(Division original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new Division(this, cloner);
+    }
     public Division()
       : base("/", "Symbol that represents the / operator.") {
Index: trunk/sources/HeuristicLab.Problems.ExternalEvaluation.GP/3.3/Symbols/Exponential.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.ExternalEvaluation.GP/3.3/Symbols/Exponential.cs	(revision 4633)
+++ trunk/sources/HeuristicLab.Problems.ExternalEvaluation.GP/3.3/Symbols/Exponential.cs	(revision 4722)
@@ -20,4 +20,5 @@
 #endregion
 
+using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Symbols;
@@ -28,5 +29,12 @@
   [Item("Exponential", "Symbol that represents the exponential function.")]
   public sealed class Exponential : Symbol {
-
+    [StorableConstructor]
+    private Exponential(bool deserializing) : base(deserializing) { }
+    private Exponential(Exponential original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new Exponential(this, cloner);
+    }
     public Exponential()
       : base("exp", "Symbol that represents the exponential function.") {
Index: trunk/sources/HeuristicLab.Problems.ExternalEvaluation.GP/3.3/Symbols/GreaterThan.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.ExternalEvaluation.GP/3.3/Symbols/GreaterThan.cs	(revision 4633)
+++ trunk/sources/HeuristicLab.Problems.ExternalEvaluation.GP/3.3/Symbols/GreaterThan.cs	(revision 4722)
@@ -20,4 +20,5 @@
 #endregion
 
+using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Symbols;
@@ -28,5 +29,12 @@
   [Item("GreaterThan", "Symbol that represents a greater than relation.")]
   public sealed class GreaterThan : Symbol {
-
+    [StorableConstructor]
+    private GreaterThan(bool deserializing) : base(deserializing) { }
+    private GreaterThan(GreaterThan original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new GreaterThan(this, cloner);
+    }
     public GreaterThan()
       : base(">", "Symbol that represents a greater than relation.") {
Index: trunk/sources/HeuristicLab.Problems.ExternalEvaluation.GP/3.3/Symbols/IfThenElse.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.ExternalEvaluation.GP/3.3/Symbols/IfThenElse.cs	(revision 4633)
+++ trunk/sources/HeuristicLab.Problems.ExternalEvaluation.GP/3.3/Symbols/IfThenElse.cs	(revision 4722)
@@ -20,4 +20,5 @@
 #endregion
 
+using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Symbols;
@@ -28,5 +29,12 @@
   [Item("IfThenElse", "Symbol that represents a conditional operator.")]
   public sealed class IfThenElse : Symbol {
-
+    [StorableConstructor]
+    private IfThenElse(bool deserializing) : base(deserializing) { }
+    private IfThenElse(IfThenElse original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new IfThenElse(this, cloner);
+    }
     public IfThenElse()
       : base("if", "Symbol that represents a conditional operator.") {
Index: trunk/sources/HeuristicLab.Problems.ExternalEvaluation.GP/3.3/Symbols/LessThan.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.ExternalEvaluation.GP/3.3/Symbols/LessThan.cs	(revision 4633)
+++ trunk/sources/HeuristicLab.Problems.ExternalEvaluation.GP/3.3/Symbols/LessThan.cs	(revision 4722)
@@ -20,4 +20,5 @@
 #endregion
 
+using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Symbols;
@@ -28,5 +29,12 @@
   [Item("LessThan", "Symbol that represents a less than relation.")]
   public sealed class LessThan : Symbol {
-
+    [StorableConstructor]
+    private LessThan(bool deserializing) : base(deserializing) { }
+    private LessThan(LessThan original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new LessThan(this, cloner);
+    }
     public LessThan()
       : base("<", "Symbol that represents a less than relation.") {
Index: trunk/sources/HeuristicLab.Problems.ExternalEvaluation.GP/3.3/Symbols/Logarithm.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.ExternalEvaluation.GP/3.3/Symbols/Logarithm.cs	(revision 4633)
+++ trunk/sources/HeuristicLab.Problems.ExternalEvaluation.GP/3.3/Symbols/Logarithm.cs	(revision 4722)
@@ -20,4 +20,5 @@
 #endregion
 
+using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Symbols;
@@ -28,5 +29,12 @@
   [Item("Logarithm", "Symbol that represents the logarithm function.")]
   public sealed class Logarithm : Symbol {
-
+    [StorableConstructor]
+    private Logarithm(bool deserializing) : base(deserializing) { }
+    private Logarithm(Logarithm original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new Logarithm(this, cloner);
+    }
     public Logarithm()
       : base("ln", "Symbol that represents the logarithm function.") {
Index: trunk/sources/HeuristicLab.Problems.ExternalEvaluation.GP/3.3/Symbols/Multiplication.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.ExternalEvaluation.GP/3.3/Symbols/Multiplication.cs	(revision 4633)
+++ trunk/sources/HeuristicLab.Problems.ExternalEvaluation.GP/3.3/Symbols/Multiplication.cs	(revision 4722)
@@ -20,4 +20,5 @@
 #endregion
 
+using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Symbols;
@@ -28,5 +29,12 @@
   [Item("Multiplication", "Symbol that represents the * operator.")]
   public sealed class Multiplication : Symbol {
-
+    [StorableConstructor]
+    private Multiplication(bool deserializing) : base(deserializing) { }
+    private Multiplication(Multiplication original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new Multiplication(this, cloner);
+    }
     public Multiplication()
       : base("*", "Symbol that represents the * operator.") {
Index: trunk/sources/HeuristicLab.Problems.ExternalEvaluation.GP/3.3/Symbols/Not.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.ExternalEvaluation.GP/3.3/Symbols/Not.cs	(revision 4633)
+++ trunk/sources/HeuristicLab.Problems.ExternalEvaluation.GP/3.3/Symbols/Not.cs	(revision 4722)
@@ -20,4 +20,5 @@
 #endregion
 
+using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Symbols;
@@ -28,5 +29,12 @@
   [Item("Not", "Symbol that represents the boolean NOT operator.")]
   public sealed class Not : Symbol {
-
+    [StorableConstructor]
+    private Not(bool deserializing) : base(deserializing) { }
+    private Not(Not original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new Not(this, cloner);
+    }
     public Not()
       : base("!", "Symbol that represents the boolean NOT operator.") {
Index: trunk/sources/HeuristicLab.Problems.ExternalEvaluation.GP/3.3/Symbols/Or.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.ExternalEvaluation.GP/3.3/Symbols/Or.cs	(revision 4633)
+++ trunk/sources/HeuristicLab.Problems.ExternalEvaluation.GP/3.3/Symbols/Or.cs	(revision 4722)
@@ -20,4 +20,5 @@
 #endregion
 
+using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Symbols;
@@ -28,5 +29,12 @@
   [Item("Or", "Symbol that represents the boolean OR operator.")]
   public sealed class Or : Symbol {
-
+    [StorableConstructor]
+    private Or(bool deserializing) : base(deserializing) { }
+    private Or(Or original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new Or(this, cloner);
+    }
     public Or()
       : base("||", "Symbol that represents the boolean OR operator.") {
Index: trunk/sources/HeuristicLab.Problems.ExternalEvaluation.GP/3.3/Symbols/Sine.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.ExternalEvaluation.GP/3.3/Symbols/Sine.cs	(revision 4633)
+++ trunk/sources/HeuristicLab.Problems.ExternalEvaluation.GP/3.3/Symbols/Sine.cs	(revision 4722)
@@ -20,4 +20,5 @@
 #endregion
 
+using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Symbols;
@@ -28,5 +29,12 @@
   [Item("Sine", "Symbol that represents the sine function.")]
   public sealed class Sine : Symbol {
-
+      [StorableConstructor]
+    private Sine(bool deserializing) : base(deserializing) { }
+    private Sine(Sine original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new Sine(this, cloner);
+    }
     public Sine()
       : base("sin", "Symbol that represents the sine function.") {
Index: trunk/sources/HeuristicLab.Problems.ExternalEvaluation.GP/3.3/Symbols/Subtraction.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.ExternalEvaluation.GP/3.3/Symbols/Subtraction.cs	(revision 4633)
+++ trunk/sources/HeuristicLab.Problems.ExternalEvaluation.GP/3.3/Symbols/Subtraction.cs	(revision 4722)
@@ -20,4 +20,5 @@
 #endregion
 
+using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Symbols;
@@ -28,5 +29,12 @@
   [Item("Subtraction", "Symbol that represents the - operator.")]
   public sealed class Subtraction : Symbol {
-
+    [StorableConstructor]
+    private Subtraction(bool deserializing) : base(deserializing) { }
+    private Subtraction(Subtraction original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new Subtraction(this, cloner);
+    }
     public Subtraction()
       : base("-", "Symbol that represents the - operator.") {
Index: trunk/sources/HeuristicLab.Problems.ExternalEvaluation.GP/3.3/Symbols/Tangent.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.ExternalEvaluation.GP/3.3/Symbols/Tangent.cs	(revision 4633)
+++ trunk/sources/HeuristicLab.Problems.ExternalEvaluation.GP/3.3/Symbols/Tangent.cs	(revision 4722)
@@ -20,4 +20,5 @@
 #endregion
 
+using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Symbols;
@@ -28,5 +29,12 @@
   [Item("Tangent", "Symbol that represents the tangent trigonometric function.")]
   public sealed class Tangent : Symbol {
-
+    [StorableConstructor]
+    private Tangent(bool deserializing) : base(deserializing) { }
+    private Tangent(Tangent original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new Tangent(this, cloner);
+    }
     public Tangent()
       : base("tan", "Symbol that represents the tangent trigonometric function.") {
Index: trunk/sources/HeuristicLab.Problems.ExternalEvaluation.GP/3.3/Symbols/Variable.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.ExternalEvaluation.GP/3.3/Symbols/Variable.cs	(revision 4633)
+++ trunk/sources/HeuristicLab.Problems.ExternalEvaluation.GP/3.3/Symbols/Variable.cs	(revision 4722)
@@ -91,4 +91,19 @@
     }
     #endregion
+
+    [StorableConstructor]
+    private Variable(bool deserializing) : base(deserializing) { }
+    private Variable(Variable original, Cloner cloner)
+      : base(original, cloner) {
+      weightNu = original.weightNu;
+      weightSigma = original.weightSigma;
+      variableNames = new List<string>(original.variableNames);
+      weightManipulatorNu = original.weightManipulatorNu;
+      weightManipulatorSigma = original.weightManipulatorSigma;
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new Variable(this, cloner);
+    }
+
     public Variable()
       : base("Variable", "Represents a variable value.") {
@@ -103,14 +118,4 @@
       return new VariableTreeNode(this);
     }
-
-    public override IDeepCloneable Clone(Cloner cloner) {
-      Variable clone = (Variable)base.Clone(cloner);
-      clone.weightNu = weightNu;
-      clone.weightSigma = weightSigma;
-      clone.variableNames = new List<string>(variableNames);
-      clone.weightManipulatorNu = weightManipulatorNu;
-      clone.weightManipulatorSigma = weightManipulatorSigma;
-      return clone;
-    }
   }
 }
Index: trunk/sources/HeuristicLab.Problems.ExternalEvaluation.GP/3.3/Symbols/VariableTreeNode.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.ExternalEvaluation.GP/3.3/Symbols/VariableTreeNode.cs	(revision 4633)
+++ trunk/sources/HeuristicLab.Problems.ExternalEvaluation.GP/3.3/Symbols/VariableTreeNode.cs	(revision 4722)
@@ -20,4 +20,5 @@
 #endregion
 
+using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
@@ -47,9 +48,13 @@
     private VariableTreeNode() { }
 
-    // copy constructor
-    private VariableTreeNode(VariableTreeNode original)
-      : base(original) {
+    [StorableConstructor]
+    private VariableTreeNode(bool deserializing) : base(deserializing) { }
+    private VariableTreeNode(VariableTreeNode original, Cloner cloner)
+      : base(original, cloner) {
       weight = original.weight;
       variableName = original.variableName;
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new VariableTreeNode(this, cloner);
     }
 
@@ -57,7 +62,5 @@
 
     public override bool HasLocalParameters {
-      get {
-        return true;
-      }
+      get { return true; }
     }
 
@@ -77,9 +80,4 @@
     }
 
-
-    public override object Clone() {
-      return new VariableTreeNode(this);
-    }
-
     public override string ToString() {
       return ";" + variableName + ";" + weight.ToString("E4");
