Index: /branches/CloningRefactoring/HeuristicLab.Problems.ArtificialAnt/3.3/Analyzers/BestAntTrailAnalyzer.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Problems.ArtificialAnt/3.3/Analyzers/BestAntTrailAnalyzer.cs	(revision 4675)
+++ /branches/CloningRefactoring/HeuristicLab.Problems.ArtificialAnt/3.3/Analyzers/BestAntTrailAnalyzer.cs	(revision 4676)
@@ -21,4 +21,5 @@
 
 using System.Linq;
+using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Data;
@@ -65,4 +66,13 @@
     }
 
+    [StorableConstructor]
+    private BestAntTrailAnalyzer(bool deserializing) : base(deserializing) { }
+    private BestAntTrailAnalyzer(BestAntTrailAnalyzer original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new BestAntTrailAnalyzer(this, cloner);
+    }
+
     public override IOperation Apply() {
       ItemArray<SymbolicExpressionTree> expressions = SymbolicExpressionTreeParameter.ActualValue;
Index: /branches/CloningRefactoring/HeuristicLab.Problems.ArtificialAnt/3.3/AntTrail.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Problems.ArtificialAnt/3.3/AntTrail.cs	(revision 4675)
+++ /branches/CloningRefactoring/HeuristicLab.Problems.ArtificialAnt/3.3/AntTrail.cs	(revision 4676)
@@ -89,8 +89,22 @@
       Initialize();
     }
+
     [StorableConstructor]
     private AntTrail(bool deserializing) : base(deserializing) { }
+    [StorableHook(HookType.AfterDeserialization)]
+    private void AfterDeserialization() {
+      Initialize();
+    }
+    private AntTrail(AntTrail original, Cloner cloner)
+      : base(original, cloner) {
+      expression = cloner.Clone(original.expression);
+      world = cloner.Clone(original.world);
+      maxTimeSteps = cloner.Clone(original.maxTimeSteps);
+      Initialize();
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new AntTrail(this, cloner);
+    }
 
-    [StorableHook(HookType.AfterDeserialization)]
     private void Initialize() {
       //if (expression != null) RegisterSymbolicExpressionTreeEvents();
@@ -99,32 +113,19 @@
     }
 
-    public override IDeepCloneable Clone(Cloner cloner) {
-      AntTrail clone = new AntTrail();
-      cloner.RegisterClonedObject(this, clone);
-      clone.expression = (SymbolicExpressionTree)cloner.Clone(expression);
-      clone.world = (BoolMatrix)cloner.Clone(world);
-      clone.maxTimeSteps = (IntValue)cloner.Clone(maxTimeSteps);
-      clone.Initialize();
-      return clone;
-    }
-
     #region Events
     public event EventHandler SymbolicExpressionTreeChanged;
     private void OnSymbolicExpressionTreeChanged() {
       var changed = SymbolicExpressionTreeChanged;
-      if (changed != null)
-        changed(this, EventArgs.Empty);
+      if (changed != null) changed(this, EventArgs.Empty);
     }
     public event EventHandler WorldChanged;
     private void OnWorldChanged() {
       var changed = WorldChanged;
-      if (changed != null)
-        changed(this, EventArgs.Empty);
+      if (changed != null) changed(this, EventArgs.Empty);
     }
     public event EventHandler MaxTimeStepsChanged;
     private void OnMaxTimeStepsChanged() {
       var changed = MaxTimeStepsChanged;
-      if (changed != null)
-        changed(this, EventArgs.Empty);
+      if (changed != null) changed(this, EventArgs.Empty);
     }
 
Index: /branches/CloningRefactoring/HeuristicLab.Problems.ArtificialAnt/3.3/ArtificialAntExpressionGrammar.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Problems.ArtificialAnt/3.3/ArtificialAntExpressionGrammar.cs	(revision 4675)
+++ /branches/CloningRefactoring/HeuristicLab.Problems.ArtificialAnt/3.3/ArtificialAntExpressionGrammar.cs	(revision 4676)
@@ -22,4 +22,5 @@
 
 using System.Collections.Generic;
+using HeuristicLab.Common;
 using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
 using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Symbols;
@@ -36,4 +37,8 @@
     [StorableConstructor]
     protected ArtificialAntExpressionGrammar(bool deserializing) : base(deserializing) { }
+    protected ArtificialAntExpressionGrammar(ArtificialAntExpressionGrammar original, Cloner cloner) : base(original, cloner) { }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new ArtificialAntExpressionGrammar(this, cloner);
+    }
 
     private void Initialize() {
Index: /branches/CloningRefactoring/HeuristicLab.Problems.ArtificialAnt/3.3/ArtificialAntProblem.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Problems.ArtificialAnt/3.3/ArtificialAntProblem.cs	(revision 4675)
+++ /branches/CloningRefactoring/HeuristicLab.Problems.ArtificialAnt/3.3/ArtificialAntProblem.cs	(revision 4676)
@@ -196,4 +196,21 @@
     [StorableConstructor]
     private ArtificialAntProblem(bool deserializing) : base(deserializing) { }
+    [StorableHook(HookType.AfterDeserialization)]
+    private void AfterDeserialization() {
+      // BackwardsCompatibility3.3
+      #region Backwards compatible code (remove with 3.4)
+      if (operators == null) InitializeOperators();
+      #endregion
+      AttachEventHandlers();
+    }
+
+    private ArtificialAntProblem(ArtificialAntProblem original, Cloner cloner)
+      : base(original, cloner) {
+      operators = original.operators.Select(x => cloner.Clone(x)).ToList();
+      AttachEventHandlers();
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new ArtificialAntProblem(this, cloner);
+    }
     public ArtificialAntProblem()
       : base() {
@@ -222,11 +239,4 @@
     }
 
-    public override IDeepCloneable Clone(Cloner cloner) {
-      ArtificialAntProblem clone = (ArtificialAntProblem)base.Clone(cloner);
-      clone.operators = operators.Select(x => (IOperator)cloner.Clone(x)).ToList();
-      clone.AttachEventHandlers();
-      return clone;
-    }
-
     #region Events
     public event EventHandler SolutionCreatorChanged;
@@ -278,13 +288,4 @@
 
     #region Helpers
-    [StorableHook(HookType.AfterDeserialization)]
-    private void AfterDeserializationHook() {
-      // BackwardsCompatibility3.3
-      #region Backwards compatible code (remove with 3.4)
-      if (operators == null) InitializeOperators();
-      #endregion
-      AttachEventHandlers();
-    }
-
     private void AttachEventHandlers() {
       SolutionCreatorParameter.ValueChanged += new EventHandler(SolutionCreatorParameter_ValueChanged);
Index: /branches/CloningRefactoring/HeuristicLab.Problems.ArtificialAnt/3.3/Evaluator.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Problems.ArtificialAnt/3.3/Evaluator.cs	(revision 4675)
+++ /branches/CloningRefactoring/HeuristicLab.Problems.ArtificialAnt/3.3/Evaluator.cs	(revision 4676)
@@ -20,4 +20,5 @@
 #endregion
 
+using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Data;
@@ -47,4 +48,8 @@
     }
 
+    [StorableConstructor]
+    protected Evaluator(bool deserializing) : base(deserializing) { }
+    protected Evaluator(Evaluator original, Cloner cloner) : base(original, cloner) { }
+    public override IDeepCloneable Clone(Cloner cloner) { return new Evaluator(this, cloner); }
     public Evaluator()
       : base() {
Index: /branches/CloningRefactoring/HeuristicLab.Problems.ArtificialAnt/3.3/Symbols/IfFoodAhead.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Problems.ArtificialAnt/3.3/Symbols/IfFoodAhead.cs	(revision 4675)
+++ /branches/CloningRefactoring/HeuristicLab.Problems.ArtificialAnt/3.3/Symbols/IfFoodAhead.cs	(revision 4676)
@@ -20,4 +20,5 @@
 #endregion
 
+using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Symbols;
@@ -27,4 +28,11 @@
   [Item("IfFoodAhead", "Represents the if-food-ahead symbol in a artificial ant expression.")]
   public sealed class IfFoodAhead : Symbol {
+    [StorableConstructor]
+    private IfFoodAhead(bool deserializing) : base(deserializing) { }
+    private IfFoodAhead(IfFoodAhead original, Cloner cloner) : base(original, cloner) { }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new IfFoodAhead(this, cloner);
+    }
+
     public IfFoodAhead() : base("IfFoodAhead", "Represents the if-food-ahead symbol in a artificial ant expression.") { }
   }
Index: /branches/CloningRefactoring/HeuristicLab.Problems.ArtificialAnt/3.3/Symbols/Left.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Problems.ArtificialAnt/3.3/Symbols/Left.cs	(revision 4675)
+++ /branches/CloningRefactoring/HeuristicLab.Problems.ArtificialAnt/3.3/Symbols/Left.cs	(revision 4676)
@@ -20,4 +20,5 @@
 #endregion
 
+using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Symbols;
@@ -27,4 +28,10 @@
   [Item("Left", "Represents the turn-left symbol in a artificial ant expression.")]
   public sealed class Left : Symbol {
+    [StorableConstructor]
+    private Left(bool deserializing) : base(deserializing) { }
+    private Left(Left original, Cloner cloner) : base(original, cloner) { }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new Left(this, cloner);
+    }
     public Left() : base("Left", "Represents the turn-left symbol in a artificial ant expression.") { }
   }
Index: /branches/CloningRefactoring/HeuristicLab.Problems.ArtificialAnt/3.3/Symbols/Move.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Problems.ArtificialAnt/3.3/Symbols/Move.cs	(revision 4675)
+++ /branches/CloningRefactoring/HeuristicLab.Problems.ArtificialAnt/3.3/Symbols/Move.cs	(revision 4676)
@@ -20,4 +20,5 @@
 #endregion
 
+using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Symbols;
@@ -27,4 +28,10 @@
   [Item("Move", "Represents the move-forward symbol in a artificial ant expression.")]
   public sealed class Move : Symbol {
+    [StorableConstructor]
+    private Move(bool deserializing) : base(deserializing) { }
+    private Move(Move original, Cloner cloner) : base(original, cloner) { }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new Move(this, cloner);
+    }
     public Move() : base("Move", "Represents the move-forward symbol in a artificial ant expression.") { }
   }
Index: /branches/CloningRefactoring/HeuristicLab.Problems.ArtificialAnt/3.3/Symbols/Prog2.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Problems.ArtificialAnt/3.3/Symbols/Prog2.cs	(revision 4675)
+++ /branches/CloningRefactoring/HeuristicLab.Problems.ArtificialAnt/3.3/Symbols/Prog2.cs	(revision 4676)
@@ -21,4 +21,5 @@
 
 
+using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Symbols;
@@ -28,4 +29,10 @@
   [Item("Prog2", "Represents the sequence symbol with 2 sub-trees in a artificial ant expression.")]
   public sealed class Prog2 : Symbol {
+    [StorableConstructor]
+    private Prog2(bool deserializing) : base(deserializing) { }
+    private Prog2(Prog2 original, Cloner cloner) : base(original, cloner) { }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new Prog2(this, cloner);
+    }
     public Prog2() : base("Prog2", "Represents the sequence symbol with 2 sub-trees in a artificial ant expression.") { }
   }
Index: /branches/CloningRefactoring/HeuristicLab.Problems.ArtificialAnt/3.3/Symbols/Prog3.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Problems.ArtificialAnt/3.3/Symbols/Prog3.cs	(revision 4675)
+++ /branches/CloningRefactoring/HeuristicLab.Problems.ArtificialAnt/3.3/Symbols/Prog3.cs	(revision 4676)
@@ -20,4 +20,5 @@
 #endregion
 
+using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Symbols;
@@ -27,4 +28,10 @@
   [Item("Prog3", "Represents the sequence symbol with 3 sub-trees in a artificial ant expression.")]
   public sealed class Prog3 : Symbol {
+    [StorableConstructor]
+    private Prog3(bool deserializing) : base(deserializing) { }
+    private Prog3(Prog3 original, Cloner cloner) : base(original, cloner) { }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new Prog3(this, cloner);
+    }
     public Prog3() : base("Prog3", "Represents the sequence symbol with 3 sub-trees in a artificial ant expression.") { }
   }
Index: /branches/CloningRefactoring/HeuristicLab.Problems.ArtificialAnt/3.3/Symbols/Right.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Problems.ArtificialAnt/3.3/Symbols/Right.cs	(revision 4675)
+++ /branches/CloningRefactoring/HeuristicLab.Problems.ArtificialAnt/3.3/Symbols/Right.cs	(revision 4676)
@@ -20,4 +20,5 @@
 #endregion
 
+using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Symbols;
@@ -27,4 +28,10 @@
   [Item("Right", "Represents the turn-right symbol in a artificial ant expression.")]
   public sealed class Right : Symbol {
+    [StorableConstructor]
+    private Right(bool deserializing) : base(deserializing) { }
+    private Right(Right original, Cloner cloner) : base(original, cloner) { }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new Right(this, cloner);
+    }
     public Right() : base("Right", "Represents the turn-right symbol in a artificial ant expression.") { }
   }
