Index: branches/DataAnalysis/HeuristicLab.Problems.DataAnalysis.MultiVariate.TimeSeriesPrognosis/3.3/Symbolic/Symbols/DerivativeVariable.cs
===================================================================
--- branches/DataAnalysis/HeuristicLab.Problems.DataAnalysis.MultiVariate.TimeSeriesPrognosis/3.3/Symbolic/Symbols/DerivativeVariable.cs	(revision 4235)
+++ branches/DataAnalysis/HeuristicLab.Problems.DataAnalysis.MultiVariate.TimeSeriesPrognosis/3.3/Symbolic/Symbols/DerivativeVariable.cs	(revision 5275)
@@ -47,4 +47,11 @@
       set { maxLag = value; }
     }
+    [StorableConstructor]
+    protected DerivativeVariable(bool deserializing) : base(deserializing) { }
+    protected DerivativeVariable(DerivativeVariable original, Cloner cloner)
+      : base(original, cloner) {
+        minLag = original.minLag;
+        maxLag = original.maxLag;
+    }
     public DerivativeVariable()
       : base("DerivativeVariable", "Represents an differentiated variable value with a time offset.") {
@@ -57,8 +64,5 @@
 
     public override IDeepCloneable Clone(Cloner cloner) {
-      DerivativeVariable clone = (DerivativeVariable)base.Clone(cloner);
-      clone.minLag = minLag;
-      clone.maxLag = maxLag;
-      return clone;
+      return new DerivativeVariable(this, cloner);
     }
   }
Index: branches/DataAnalysis/HeuristicLab.Problems.DataAnalysis.MultiVariate.TimeSeriesPrognosis/3.3/Symbolic/Symbols/DerivativeVariableTreeNode.cs
===================================================================
--- branches/DataAnalysis/HeuristicLab.Problems.DataAnalysis.MultiVariate.TimeSeriesPrognosis/3.3/Symbolic/Symbols/DerivativeVariableTreeNode.cs	(revision 4235)
+++ branches/DataAnalysis/HeuristicLab.Problems.DataAnalysis.MultiVariate.TimeSeriesPrognosis/3.3/Symbolic/Symbols/DerivativeVariableTreeNode.cs	(revision 5275)
@@ -44,8 +44,9 @@
     private DerivativeVariableTreeNode() { }
 
-    // copy constructor
-    private DerivativeVariableTreeNode(DerivativeVariableTreeNode original)
-      : base(original) {
-      lag = original.lag;
+    [StorableConstructor]
+    protected DerivativeVariableTreeNode(bool deserializing) : base(deserializing) { }
+    protected DerivativeVariableTreeNode(DerivativeVariableTreeNode original, Cloner cloner)
+      : base(original, cloner) {
+        lag = original.lag;
     }
 
@@ -69,6 +70,6 @@
 
 
-    public override object Clone() {
-      return new DerivativeVariableTreeNode(this);
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new DerivativeVariableTreeNode(this, cloner);
     }
 
Index: branches/DataAnalysis/HeuristicLab.Problems.DataAnalysis.MultiVariate.TimeSeriesPrognosis/3.3/Symbolic/Symbols/IntegratedVariable.cs
===================================================================
--- branches/DataAnalysis/HeuristicLab.Problems.DataAnalysis.MultiVariate.TimeSeriesPrognosis/3.3/Symbolic/Symbols/IntegratedVariable.cs	(revision 4235)
+++ branches/DataAnalysis/HeuristicLab.Problems.DataAnalysis.MultiVariate.TimeSeriesPrognosis/3.3/Symbolic/Symbols/IntegratedVariable.cs	(revision 5275)
@@ -47,4 +47,11 @@
       set { maxLag = value; }
     }
+    [StorableConstructor]
+    protected IntegratedVariable(bool deserializing) : base(deserializing) { }
+    protected IntegratedVariable(IntegratedVariable original, Cloner cloner)
+      : base(original, cloner) {
+        minLag = original.minLag;
+        maxLag = original.maxLag;
+    }
     public IntegratedVariable()
       : base("IntegratedVariable", "Represents an integrated variable value with a time offset.") {
@@ -57,8 +64,5 @@
 
     public override IDeepCloneable Clone(Cloner cloner) {
-      IntegratedVariable clone = (IntegratedVariable)base.Clone(cloner);
-      clone.minLag = minLag;
-      clone.maxLag = maxLag;
-      return clone;
+      return new IntegratedVariable(this, cloner);
     }
   }
Index: branches/DataAnalysis/HeuristicLab.Problems.DataAnalysis.MultiVariate.TimeSeriesPrognosis/3.3/Symbolic/Symbols/IntegratedVariableTreeNode.cs
===================================================================
--- branches/DataAnalysis/HeuristicLab.Problems.DataAnalysis.MultiVariate.TimeSeriesPrognosis/3.3/Symbolic/Symbols/IntegratedVariableTreeNode.cs	(revision 4235)
+++ branches/DataAnalysis/HeuristicLab.Problems.DataAnalysis.MultiVariate.TimeSeriesPrognosis/3.3/Symbolic/Symbols/IntegratedVariableTreeNode.cs	(revision 5275)
@@ -50,8 +50,8 @@
 
     private IntegratedVariableTreeNode() { }
-
-    // copy constructor
-    private IntegratedVariableTreeNode(IntegratedVariableTreeNode original)
-      : base(original) {
+    [StorableConstructor]
+    protected IntegratedVariableTreeNode(bool deserializing) : base(deserializing) { }
+    protected IntegratedVariableTreeNode(IntegratedVariableTreeNode original, Cloner cloner)
+      : base(original, cloner) {
       minTimeOffset = original.minTimeOffset;
       maxTimeOffset = original.maxTimeOffset;
@@ -77,10 +77,7 @@
       maxTimeOffset = Math.Min(Symbol.MaxLag, Math.Max(minTimeOffset, maxTimeOffset + random.Next(-1, 2)));
     }
-
-
-    public override object Clone() {
-      return new IntegratedVariableTreeNode(this);
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new IntegratedVariableTreeNode(this, cloner);
     }
-
     public override string ToString() {
       return Weight.ToString("E4") + " I(" + VariableName +
Index: branches/DataAnalysis/HeuristicLab.Problems.DataAnalysis.MultiVariate.TimeSeriesPrognosis/3.3/Symbolic/Symbols/MovingAverage.cs
===================================================================
--- branches/DataAnalysis/HeuristicLab.Problems.DataAnalysis.MultiVariate.TimeSeriesPrognosis/3.3/Symbolic/Symbols/MovingAverage.cs	(revision 4235)
+++ branches/DataAnalysis/HeuristicLab.Problems.DataAnalysis.MultiVariate.TimeSeriesPrognosis/3.3/Symbolic/Symbols/MovingAverage.cs	(revision 5275)
@@ -47,4 +47,11 @@
       set { maxLag = value; }
     }
+    [StorableConstructor]
+    protected MovingAverage(bool deserializing) : base(deserializing) { }
+    protected MovingAverage(MovingAverage original, Cloner cloner)
+      : base(original, cloner) {
+      minLag = original.minLag;
+      maxLag = original.maxLag;
+    }
     public MovingAverage()
       : base("MovingAverage", "Represents a moving average of a variable value with a time offset.") {
@@ -57,8 +64,5 @@
 
     public override IDeepCloneable Clone(Cloner cloner) {
-      MovingAverage clone = (MovingAverage)base.Clone(cloner);
-      clone.minLag = minLag;
-      clone.maxLag = maxLag;
-      return clone;
+      return new MovingAverage(this, cloner);
     }
   }
Index: branches/DataAnalysis/HeuristicLab.Problems.DataAnalysis.MultiVariate.TimeSeriesPrognosis/3.3/Symbolic/Symbols/MovingAverageTreeNode.cs
===================================================================
--- branches/DataAnalysis/HeuristicLab.Problems.DataAnalysis.MultiVariate.TimeSeriesPrognosis/3.3/Symbolic/Symbols/MovingAverageTreeNode.cs	(revision 4235)
+++ branches/DataAnalysis/HeuristicLab.Problems.DataAnalysis.MultiVariate.TimeSeriesPrognosis/3.3/Symbolic/Symbols/MovingAverageTreeNode.cs	(revision 5275)
@@ -50,8 +50,8 @@
 
     private MovingAverageTreeNode() { }
-
-    // copy constructor
-    private MovingAverageTreeNode(MovingAverageTreeNode original)
-      : base(original) {
+    [StorableConstructor]
+    protected MovingAverageTreeNode(bool deserializing) : base(deserializing) { }
+    protected MovingAverageTreeNode(MovingAverageTreeNode original, Cloner cloner)
+      : base(original, cloner) {
       minTimeOffset = original.minTimeOffset;
       maxTimeOffset = original.maxTimeOffset;
@@ -79,8 +79,7 @@
 
 
-    public override object Clone() {
-      return new MovingAverageTreeNode(this);
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new MovingAverageTreeNode(this, cloner);
     }
-
     public override string ToString() {
       return Weight.ToString("E4") + " MA(" + VariableName +
