Index: /branches/CloningRefactoring/HeuristicLab.Data/3.3/BoolArray.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Data/3.3/BoolArray.cs	(revision 4661)
+++ /branches/CloningRefactoring/HeuristicLab.Data/3.3/BoolArray.cs	(revision 4662)
@@ -29,4 +29,9 @@
   [StorableClass]
   public class BoolArray : ValueTypeArray<bool>, IStringConvertibleArray {
+    [StorableConstructor]
+    protected BoolArray(bool deserializing) : base(deserializing) { }
+    protected BoolArray(BoolArray original, Cloner cloner)
+      : base(original, cloner) {
+    }
     public BoolArray() : base() { }
     public BoolArray(int length) : base(length) { }
@@ -34,8 +39,5 @@
 
     public override IDeepCloneable Clone(Cloner cloner) {
-      BoolArray clone = new BoolArray(array);
-      cloner.RegisterClonedObject(this, clone);
-      clone.readOnly = readOnly;
-      return clone;
+      return new BoolArray(this, cloner);
     }
 
Index: /branches/CloningRefactoring/HeuristicLab.Data/3.3/BoolMatrix.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Data/3.3/BoolMatrix.cs	(revision 4661)
+++ /branches/CloningRefactoring/HeuristicLab.Data/3.3/BoolMatrix.cs	(revision 4662)
@@ -30,4 +30,9 @@
   [StorableClass]
   public class BoolMatrix : ValueTypeMatrix<bool>, IStringConvertibleMatrix {
+    [StorableConstructor]
+    protected BoolMatrix(bool deserializing) : base(deserializing) { }
+    protected BoolMatrix(BoolMatrix original, Cloner cloner)
+      : base(original, cloner) {
+    }
     public BoolMatrix() : base() { }
     public BoolMatrix(int rows, int columns) : base(rows, columns) { }
@@ -39,12 +44,5 @@
 
     public override IDeepCloneable Clone(Cloner cloner) {
-      BoolMatrix clone = new BoolMatrix();
-      cloner.RegisterClonedObject(this, clone);
-      clone.matrix = (bool[,])matrix.Clone();
-      clone.columnNames = new List<string>(columnNames);
-      clone.rowNames = new List<string>(rowNames);
-      clone.sortableView = sortableView;
-      clone.readOnly = readOnly;
-      return clone;
+      return new BoolMatrix(this, cloner);
     }
 
Index: /branches/CloningRefactoring/HeuristicLab.Data/3.3/BoolValue.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Data/3.3/BoolValue.cs	(revision 4661)
+++ /branches/CloningRefactoring/HeuristicLab.Data/3.3/BoolValue.cs	(revision 4662)
@@ -35,12 +35,14 @@
     }
 
+    [StorableConstructor]
+    protected BoolValue(bool deserializing) : base(deserializing) { }
+    protected BoolValue(BoolValue original, Cloner cloner)
+      : base(original, cloner) {
+    }
     public BoolValue() : base() { }
     public BoolValue(bool value) : base(value) { }
 
     public override IDeepCloneable Clone(Cloner cloner) {
-      BoolValue clone = new BoolValue(value);
-      cloner.RegisterClonedObject(this, clone);
-      clone.readOnly = readOnly;
-      return clone;
+      return new BoolValue(this, cloner);
     }
 
Index: /branches/CloningRefactoring/HeuristicLab.Data/3.3/Comparison.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Data/3.3/Comparison.cs	(revision 4661)
+++ /branches/CloningRefactoring/HeuristicLab.Data/3.3/Comparison.cs	(revision 4662)
@@ -34,12 +34,14 @@
     }
 
+    [StorableConstructor]
+    protected Comparison(bool deserializing) : base(deserializing) { }
+    protected Comparison(Comparison original, Cloner cloner)
+      : base(original, cloner) {
+    }
     public Comparison() : base() { }
     public Comparison(ComparisonType value) : base(value) { }
 
     public override IDeepCloneable Clone(Cloner cloner) {
-      Comparison clone = new Comparison(value);
-      cloner.RegisterClonedObject(this, clone);
-      clone.readOnly = readOnly;
-      return clone;
+      return new Comparison(this, cloner);
     }
 
Index: /branches/CloningRefactoring/HeuristicLab.Data/3.3/DateTimeValue.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Data/3.3/DateTimeValue.cs	(revision 4661)
+++ /branches/CloningRefactoring/HeuristicLab.Data/3.3/DateTimeValue.cs	(revision 4662)
@@ -29,12 +29,14 @@
   [StorableClass]
   public class DateTimeValue : ValueTypeValue<DateTime>, IComparable, IStringConvertibleValue {
+    [StorableConstructor]
+    protected DateTimeValue(bool deserializing) : base(deserializing) { }
+    protected DateTimeValue(DateTimeValue original, Cloner cloner)
+      : base(original, cloner) {
+    }
     public DateTimeValue() : base() { }
     public DateTimeValue(DateTime value) : base(value) { }
 
     public override IDeepCloneable Clone(Cloner cloner) {
-      DateTimeValue clone = new DateTimeValue(value);
-      cloner.RegisterClonedObject(this, clone);
-      clone.readOnly = readOnly;
-      return clone;
+      return new DateTimeValue(this, cloner);
     }
 
Index: /branches/CloningRefactoring/HeuristicLab.Data/3.3/DoubleArray.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Data/3.3/DoubleArray.cs	(revision 4661)
+++ /branches/CloningRefactoring/HeuristicLab.Data/3.3/DoubleArray.cs	(revision 4662)
@@ -29,4 +29,9 @@
   [StorableClass]
   public class DoubleArray : ValueTypeArray<double>, IStringConvertibleArray {
+    [StorableConstructor]
+    protected DoubleArray(bool deserializing) : base(deserializing) { }
+    protected DoubleArray(DoubleArray original, Cloner cloner)
+      : base(original, cloner) {
+    }
     public DoubleArray() : base() { }
     public DoubleArray(int length) : base(length) { }
@@ -34,8 +39,5 @@
 
     public override IDeepCloneable Clone(Cloner cloner) {
-      DoubleArray clone = new DoubleArray(array);
-      cloner.RegisterClonedObject(this, clone);
-      clone.readOnly = readOnly;
-      return clone;
+      return new DoubleArray(this, cloner);
     }
 
Index: /branches/CloningRefactoring/HeuristicLab.Data/3.3/DoubleMatrix.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Data/3.3/DoubleMatrix.cs	(revision 4661)
+++ /branches/CloningRefactoring/HeuristicLab.Data/3.3/DoubleMatrix.cs	(revision 4662)
@@ -30,4 +30,9 @@
   [StorableClass]
   public class DoubleMatrix : ValueTypeMatrix<double>, IStringConvertibleMatrix {
+    [StorableConstructor]
+    protected DoubleMatrix(bool deserializing) : base(deserializing) { }
+    protected DoubleMatrix(DoubleMatrix original, Cloner cloner)
+      : base(original, cloner) {
+    }
     public DoubleMatrix() : base() { }
     public DoubleMatrix(int rows, int columns) : base(rows, columns) { }
@@ -39,12 +44,5 @@
 
     public override IDeepCloneable Clone(Cloner cloner) {
-      DoubleMatrix clone = new DoubleMatrix();
-      cloner.RegisterClonedObject(this, clone);
-      clone.matrix = (double[,])matrix.Clone();
-      clone.columnNames = new List<string>(columnNames);
-      clone.rowNames = new List<string>(rowNames);
-      clone.sortableView = sortableView;
-      clone.readOnly = readOnly;
-      return clone;
+      return new DoubleMatrix(this, cloner);
     }
 
Index: /branches/CloningRefactoring/HeuristicLab.Data/3.3/DoubleValue.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Data/3.3/DoubleValue.cs	(revision 4661)
+++ /branches/CloningRefactoring/HeuristicLab.Data/3.3/DoubleValue.cs	(revision 4662)
@@ -35,12 +35,14 @@
     }
 
+    [StorableConstructor]
+    protected DoubleValue(bool deserializing) : base(deserializing) { }
+    protected DoubleValue(DoubleValue original, Cloner cloner)
+      : base(original, cloner) {
+    }
     public DoubleValue() : base() { }
     public DoubleValue(double value) : base(value) { }
 
     public override IDeepCloneable Clone(Cloner cloner) {
-      DoubleValue clone = new DoubleValue(value);
-      cloner.RegisterClonedObject(this, clone);
-      clone.readOnly = readOnly;
-      return clone;
+      return new DoubleValue(this, cloner);
     }
 
Index: /branches/CloningRefactoring/HeuristicLab.Data/3.3/IntArray.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Data/3.3/IntArray.cs	(revision 4661)
+++ /branches/CloningRefactoring/HeuristicLab.Data/3.3/IntArray.cs	(revision 4662)
@@ -29,4 +29,9 @@
   [StorableClass]
   public class IntArray : ValueTypeArray<int>, IStringConvertibleArray {
+    [StorableConstructor]
+    protected IntArray(bool deserializing) : base(deserializing) { }
+    protected IntArray(IntArray original, Cloner cloner)
+      : base(original, cloner) {
+    }
     public IntArray() : base() { }
     public IntArray(int length) : base(length) { }
@@ -34,8 +39,5 @@
 
     public override IDeepCloneable Clone(Cloner cloner) {
-      IntArray clone = new IntArray(array);
-      cloner.RegisterClonedObject(this, clone);
-      clone.readOnly = readOnly;
-      return clone;
+      return new IntArray(this, cloner);
     }
 
Index: /branches/CloningRefactoring/HeuristicLab.Data/3.3/IntMatrix.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Data/3.3/IntMatrix.cs	(revision 4661)
+++ /branches/CloningRefactoring/HeuristicLab.Data/3.3/IntMatrix.cs	(revision 4662)
@@ -30,4 +30,9 @@
   [StorableClass]
   public class IntMatrix : ValueTypeMatrix<int>, IStringConvertibleMatrix {
+    [StorableConstructor]
+    protected IntMatrix(bool deserializing) : base(deserializing) { }
+    protected IntMatrix(IntMatrix original, Cloner cloner)
+      : base(original, cloner) {
+    }
     public IntMatrix() : base() { }
     public IntMatrix(int rows, int columns) : base(rows, columns) { }
@@ -39,12 +44,5 @@
 
     public override IDeepCloneable Clone(Cloner cloner) {
-      IntMatrix clone = new IntMatrix();
-      cloner.RegisterClonedObject(this, clone);
-      clone.matrix = (int[,])matrix.Clone();
-      clone.columnNames = new List<string>(columnNames);
-      clone.rowNames = new List<string>(rowNames);
-      clone.sortableView = sortableView;
-      clone.readOnly = readOnly;
-      return clone;
+      return new IntMatrix(this, cloner);
     }
 
Index: /branches/CloningRefactoring/HeuristicLab.Data/3.3/IntValue.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Data/3.3/IntValue.cs	(revision 4661)
+++ /branches/CloningRefactoring/HeuristicLab.Data/3.3/IntValue.cs	(revision 4662)
@@ -35,12 +35,14 @@
     }
 
+    [StorableConstructor]
+    protected IntValue(bool deserializing) : base(deserializing) { }
+    protected IntValue(IntValue original, Cloner cloner)
+      : base(original, cloner) {
+    }
     public IntValue() : base() { }
     public IntValue(int value) : base(value) { }
 
     public override IDeepCloneable Clone(Cloner cloner) {
-      IntValue clone = new IntValue(value);
-      cloner.RegisterClonedObject(this, clone);
-      clone.readOnly = readOnly;
-      return clone;
+      return new IntValue(this, cloner);
     }
 
Index: /branches/CloningRefactoring/HeuristicLab.Data/3.3/PercentValue.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Data/3.3/PercentValue.cs	(revision 4661)
+++ /branches/CloningRefactoring/HeuristicLab.Data/3.3/PercentValue.cs	(revision 4662)
@@ -28,12 +28,14 @@
   [StorableClass]
   public class PercentValue : DoubleValue {
+    [StorableConstructor]
+    protected PercentValue(bool deserializing) : base(deserializing) { }
+    protected PercentValue(PercentValue original, Cloner cloner)
+      : base(original, cloner) {
+    }
     public PercentValue() : base() { }
     public PercentValue(double value) : base(value) { }
 
     public override IDeepCloneable Clone(Cloner cloner) {
-      PercentValue clone = new PercentValue(value);
-      cloner.RegisterClonedObject(this, clone);
-      clone.readOnly = readOnly;
-      return clone;
+      return new PercentValue(this, cloner);
     }
 
Index: /branches/CloningRefactoring/HeuristicLab.Data/3.3/StringArray.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Data/3.3/StringArray.cs	(revision 4661)
+++ /branches/CloningRefactoring/HeuristicLab.Data/3.3/StringArray.cs	(revision 4662)
@@ -70,4 +70,11 @@
     }
 
+    [StorableConstructor]
+    protected StringArray(bool deserializing) : base(deserializing) { }
+    protected StringArray(StringArray original, Cloner cloner)
+      : base(original, cloner) {
+      this.array = (string[])original.array.Clone();
+      this.readOnly = original.readOnly;
+    }
     public StringArray() {
       array = new string[0];
@@ -89,9 +96,5 @@
 
     public override IDeepCloneable Clone(Cloner cloner) {
-      StringArray clone = new StringArray();
-      cloner.RegisterClonedObject(this, clone);
-      clone.array = (string[])array.Clone();
-      clone.readOnly = readOnly;
-      return clone;
+      return new StringArray(this, cloner);
     }
 
Index: /branches/CloningRefactoring/HeuristicLab.Data/3.3/StringMatrix.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Data/3.3/StringMatrix.cs	(revision 4661)
+++ /branches/CloningRefactoring/HeuristicLab.Data/3.3/StringMatrix.cs	(revision 4662)
@@ -134,4 +134,14 @@
     }
 
+    [StorableConstructor]
+    protected StringMatrix(bool deserializing) : base(deserializing) { }
+    protected StringMatrix(StringMatrix original, Cloner cloner)
+      : base(original, cloner) {
+      this.matrix = (string[,])original.matrix.Clone();
+      this.columnNames = new List<string>(original.columnNames);
+      this.rowNames = new List<string>(original.rowNames);
+      this.sortableView = original.sortableView;
+      this.readOnly = original.readOnly;
+    }
     public StringMatrix() {
       matrix = new string[0, 0];
@@ -182,12 +192,5 @@
 
     public override IDeepCloneable Clone(Cloner cloner) {
-      StringMatrix clone = new StringMatrix();
-      cloner.RegisterClonedObject(this, clone);
-      clone.matrix = (string[,])matrix.Clone();
-      clone.columnNames = new List<string>(columnNames);
-      clone.rowNames = new List<string>(rowNames);
-      clone.sortableView = sortableView;
-      clone.readOnly = readOnly;
-      return clone;
+      return new StringMatrix(this, cloner);
     }
 
Index: /branches/CloningRefactoring/HeuristicLab.Data/3.3/StringValue.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Data/3.3/StringValue.cs	(revision 4661)
+++ /branches/CloningRefactoring/HeuristicLab.Data/3.3/StringValue.cs	(revision 4662)
@@ -55,4 +55,11 @@
     }
 
+    [StorableConstructor]
+    protected StringValue(bool deserializing) : base(deserializing) { }
+    protected StringValue(StringValue original, Cloner cloner)
+      : base(original, cloner) {
+      this.value = original.value != null ? original.value : string.Empty;
+      this.readOnly = original.readOnly;
+    }
     public StringValue() {
       this.value = string.Empty;
@@ -65,8 +72,5 @@
 
     public override IDeepCloneable Clone(Cloner cloner) {
-      StringValue clone = new StringValue(value);
-      cloner.RegisterClonedObject(this, clone);
-      clone.readOnly = readOnly;
-      return clone;
+      return new StringValue(this, cloner);
     }
 
Index: /branches/CloningRefactoring/HeuristicLab.Data/3.3/TimeSpanValue.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Data/3.3/TimeSpanValue.cs	(revision 4661)
+++ /branches/CloningRefactoring/HeuristicLab.Data/3.3/TimeSpanValue.cs	(revision 4662)
@@ -30,12 +30,14 @@
   [StorableClass]
   public class TimeSpanValue : ValueTypeValue<TimeSpan>, IComparable, IStringConvertibleValue {
+    [StorableConstructor]
+    protected TimeSpanValue(bool deserializing) : base(deserializing) { }
+    protected TimeSpanValue(TimeSpanValue original, Cloner cloner)
+      : base(original, cloner) {
+    }
     public TimeSpanValue() : base() { }
     public TimeSpanValue(TimeSpan value) : base(value) { }
 
     public override IDeepCloneable Clone(Cloner cloner) {
-      TimeSpanValue clone = new TimeSpanValue(value);
-      cloner.RegisterClonedObject(this, clone);
-      clone.readOnly = readOnly;
-      return clone;
+      return new TimeSpanValue(this, cloner);
     }
 
Index: /branches/CloningRefactoring/HeuristicLab.Data/3.3/ValueTypeArray.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Data/3.3/ValueTypeArray.cs	(revision 4661)
+++ /branches/CloningRefactoring/HeuristicLab.Data/3.3/ValueTypeArray.cs	(revision 4662)
@@ -68,4 +68,11 @@
     }
 
+    [StorableConstructor]
+    protected ValueTypeArray(bool deserializing) : base(deserializing) { }
+    protected ValueTypeArray(ValueTypeArray<T> original, Cloner cloner)
+      : base(original, cloner) {
+      this.array = (T[])original.array.Clone();
+      this.readOnly = original.readOnly;
+    }
     protected ValueTypeArray() {
       array = new T[0];
@@ -80,11 +87,4 @@
       array = (T[])elements.Clone();
       readOnly = false;
-    }
-
-    public override IDeepCloneable Clone(Cloner cloner) {
-      ValueTypeArray<T> clone = (ValueTypeArray<T>)base.Clone(cloner);
-      clone.array = (T[])array.Clone();
-      clone.readOnly = readOnly;
-      return clone;
     }
 
Index: /branches/CloningRefactoring/HeuristicLab.Data/3.3/ValueTypeMatrix.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Data/3.3/ValueTypeMatrix.cs	(revision 4661)
+++ /branches/CloningRefactoring/HeuristicLab.Data/3.3/ValueTypeMatrix.cs	(revision 4662)
@@ -132,4 +132,14 @@
     }
 
+    [StorableConstructor]
+    protected ValueTypeMatrix(bool deserializing) : base(deserializing) { }
+    protected ValueTypeMatrix(ValueTypeMatrix<T> original, Cloner cloner)
+      : base(original, cloner) {
+      this.matrix = (T[,])original.matrix.Clone();
+      this.columnNames = new List<string>(original.columnNames);
+      this.rowNames = new List<string>(original.rowNames);
+      this.sortableView = original.sortableView;
+      this.readOnly = original.readOnly;
+    }
     protected ValueTypeMatrix() {
       matrix = new T[0, 0];
@@ -169,14 +179,4 @@
       : this(elements,columnNames) {
       RowNames = rowNames;
-    }
-
-    public override IDeepCloneable Clone(Cloner cloner) {
-      ValueTypeMatrix<T> clone = (ValueTypeMatrix<T>)base.Clone(cloner);
-      clone.matrix = (T[,])matrix.Clone();
-      clone.columnNames = new List<string>(columnNames);
-      clone.rowNames = new List<string>(rowNames);
-      clone.sortableView = sortableView;
-      clone.readOnly = readOnly;
-      return clone;
     }
 
Index: /branches/CloningRefactoring/HeuristicLab.Data/3.3/ValueTypeValue.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Data/3.3/ValueTypeValue.cs	(revision 4661)
+++ /branches/CloningRefactoring/HeuristicLab.Data/3.3/ValueTypeValue.cs	(revision 4662)
@@ -53,4 +53,11 @@
     }
 
+    [StorableConstructor]
+    protected ValueTypeValue(bool deserializing) : base(deserializing) { }
+    protected ValueTypeValue(ValueTypeValue<T> original, Cloner cloner)
+      : base(original, cloner) {
+      this.value = original.value;
+      this.readOnly = original.readOnly;
+    }
     protected ValueTypeValue() {
       this.value = default(T);
@@ -60,11 +67,4 @@
       this.value = value;
       this.readOnly = false;
-    }
-
-    public override IDeepCloneable Clone(Cloner cloner) {
-      ValueTypeValue<T> clone = (ValueTypeValue<T>)base.Clone(cloner);
-      clone.value = value;
-      clone.readOnly = readOnly;
-      return clone;
     }
 
Index: /branches/CloningRefactoring/HeuristicLab.Operators/3.3/AlgorithmOperator.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Operators/3.3/AlgorithmOperator.cs	(revision 4661)
+++ /branches/CloningRefactoring/HeuristicLab.Operators/3.3/AlgorithmOperator.cs	(revision 4662)
@@ -44,13 +44,13 @@
     }
 
+    [StorableConstructor]
+    protected AlgorithmOperator(bool deserializing) : base(deserializing) { }
+    protected AlgorithmOperator(AlgorithmOperator original, Cloner cloner)
+      : base(original, cloner) {
+      this.operatorGraph = cloner.Clone<OperatorGraph>(original.operatorGraph);
+    }
     protected AlgorithmOperator()
       : base() {
       operatorGraph = new OperatorGraph();
-    }
-
-    public override IDeepCloneable Clone(Cloner cloner) {
-      AlgorithmOperator clone = (AlgorithmOperator)base.Clone(cloner);
-      clone.operatorGraph = (OperatorGraph)cloner.Clone(operatorGraph);
-      return clone;
     }
 
Index: /branches/CloningRefactoring/HeuristicLab.Operators/3.3/Assigner.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Operators/3.3/Assigner.cs	(revision 4661)
+++ /branches/CloningRefactoring/HeuristicLab.Operators/3.3/Assigner.cs	(revision 4662)
@@ -23,4 +23,5 @@
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Operators {
@@ -38,8 +39,17 @@
     }
 
+    [StorableConstructor]
+    private Assigner(bool deserializing) : base(deserializing) { }
+    private Assigner(Assigner original, Cloner cloner)
+      : base(original, cloner) {
+    }
     public Assigner()
       : base() {
       Parameters.Add(new LookupParameter<IItem>("LeftSide", "The parameter whose value gets assigned with a clone of the other parameter's value."));
       Parameters.Add(new ValueLookupParameter<IItem>("RightSide", "The parameter whose value is cloned and assigned to the value of the other parameter."));
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new Assigner(this, cloner);
     }
 
Index: /branches/CloningRefactoring/HeuristicLab.Operators/3.3/CheckedMultiOperator.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Operators/3.3/CheckedMultiOperator.cs	(revision 4661)
+++ /branches/CloningRefactoring/HeuristicLab.Operators/3.3/CheckedMultiOperator.cs	(revision 4662)
@@ -22,4 +22,5 @@
 using HeuristicLab.Core;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Operators {
@@ -37,4 +38,10 @@
       protected set { base.Operators = value; }
     }
+
+    [StorableConstructor]
+    protected CheckedMultiOperator(bool deserializing) : base(deserializing) { }
+    protected CheckedMultiOperator(CheckedMultiOperator<T> original, Cloner cloner)
+      : base(original, cloner) {
+    }
     /// <summary>
     /// Creates a new instance of CheckedMultiOperator
@@ -44,6 +51,4 @@
       Operators = new CheckedItemList<T>();
     }
-    [StorableConstructor]
-    protected CheckedMultiOperator(bool deserializing) : base(deserializing) { }
   }
 }
Index: /branches/CloningRefactoring/HeuristicLab.Operators/3.3/CombinedOperator.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Operators/3.3/CombinedOperator.cs	(revision 4661)
+++ /branches/CloningRefactoring/HeuristicLab.Operators/3.3/CombinedOperator.cs	(revision 4662)
@@ -43,5 +43,14 @@
     }
 
+    [StorableConstructor]
+    private CombinedOperator(bool deserializing) : base(deserializing) { }
+    private CombinedOperator(CombinedOperator original, Cloner cloner)
+      : base(original, cloner) {
+    }
     public CombinedOperator() : base() { }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new CombinedOperator(this, cloner);
+    }
   }
 }
Index: /branches/CloningRefactoring/HeuristicLab.Operators/3.3/Comparator.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Operators/3.3/Comparator.cs	(revision 4661)
+++ /branches/CloningRefactoring/HeuristicLab.Operators/3.3/Comparator.cs	(revision 4662)
@@ -25,4 +25,5 @@
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Operators {
@@ -50,4 +51,9 @@
     }
 
+    [StorableConstructor]
+    private Comparator(bool deserializing) : base(deserializing) { }
+    private Comparator(Comparator original, Cloner cloner)
+      : base(original, cloner) {
+    }
     public Comparator()
       : base() {
@@ -56,4 +62,8 @@
       Parameters.Add(new ValueParameter<Comparison>("Comparison", "The type of comparison.", new Comparison(Data.ComparisonType.Equal)));
       Parameters.Add(new LookupParameter<BoolValue>("Result", "The result of the comparison."));
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new Comparator(this, cloner);
     }
 
Index: /branches/CloningRefactoring/HeuristicLab.Operators/3.3/ConditionalBranch.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Operators/3.3/ConditionalBranch.cs	(revision 4661)
+++ /branches/CloningRefactoring/HeuristicLab.Operators/3.3/ConditionalBranch.cs	(revision 4662)
@@ -24,4 +24,5 @@
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Operators {
@@ -50,4 +51,9 @@
     }
 
+    [StorableConstructor]
+    protected ConditionalBranch(bool deserializing) : base(deserializing) { }
+    protected ConditionalBranch(ConditionalBranch original, Cloner cloner)
+      : base(original, cloner) {
+    }
     public ConditionalBranch()
       : base() {
@@ -55,4 +61,8 @@
       Parameters.Add(new OperatorParameter("TrueBranch", "The operator which is executed if the condition is true."));
       Parameters.Add(new OperatorParameter("FalseBranch", "The operator which is executed if the condition is false."));
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new ConditionalBranch(this, cloner);
     }
 
Index: /branches/CloningRefactoring/HeuristicLab.Operators/3.3/DoubleCounter.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Operators/3.3/DoubleCounter.cs	(revision 4661)
+++ /branches/CloningRefactoring/HeuristicLab.Operators/3.3/DoubleCounter.cs	(revision 4662)
@@ -24,4 +24,5 @@
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Operators {
@@ -43,8 +44,17 @@
     }
 
+    [StorableConstructor]
+    private DoubleCounter(bool deserializing) : base(deserializing) { }
+    private DoubleCounter(DoubleCounter original, Cloner cloner)
+      : base(original, cloner) {
+    }
     public DoubleCounter()
       : base() {
       Parameters.Add(new LookupParameter<DoubleValue>("Value", "The value which should be incremented."));
       Parameters.Add(new ValueLookupParameter<DoubleValue>("Increment", "The increment which is added to the value.", new DoubleValue(1)));
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new DoubleCounter(this, cloner);
     }
 
Index: /branches/CloningRefactoring/HeuristicLab.Operators/3.3/EmptyOperator.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Operators/3.3/EmptyOperator.cs	(revision 4661)
+++ /branches/CloningRefactoring/HeuristicLab.Operators/3.3/EmptyOperator.cs	(revision 4662)
@@ -22,4 +22,5 @@
 using HeuristicLab.Core;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Operators {
@@ -30,7 +31,16 @@
   [StorableClass]
   public sealed class EmptyOperator : SingleSuccessorOperator {
+    [StorableConstructor]
+    private EmptyOperator(bool deserializing) : base(deserializing) { }
+    private EmptyOperator(EmptyOperator original, Cloner cloner)
+      : base(original, cloner) {
+    }
     public EmptyOperator()
       : base() {
     }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new EmptyOperator(this, cloner);
+    }
   }
 }
Index: /branches/CloningRefactoring/HeuristicLab.Operators/3.3/IntCounter.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Operators/3.3/IntCounter.cs	(revision 4661)
+++ /branches/CloningRefactoring/HeuristicLab.Operators/3.3/IntCounter.cs	(revision 4662)
@@ -24,4 +24,5 @@
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Operators {
@@ -43,8 +44,17 @@
     }
 
+    [StorableConstructor]
+    private IntCounter(bool deserializing) : base(deserializing) { }
+    private IntCounter(IntCounter original, Cloner cloner)
+      : base(original, cloner) {
+    }
     public IntCounter()
       : base() {
       Parameters.Add(new LookupParameter<IntValue>("Value", "The value which should be incremented."));
       Parameters.Add(new ValueLookupParameter<IntValue>("Increment", "The increment which is added to the value.", new IntValue(1)));
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new IntCounter(this, cloner);
     }
 
Index: /branches/CloningRefactoring/HeuristicLab.Operators/3.3/MultiOperator.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Operators/3.3/MultiOperator.cs	(revision 4661)
+++ /branches/CloningRefactoring/HeuristicLab.Operators/3.3/MultiOperator.cs	(revision 4662)
@@ -51,4 +51,11 @@
     }
 
+    [StorableConstructor]
+    protected MultiOperator(bool deserializing) : base(deserializing) { }
+    protected MultiOperator(MultiOperator<T> original, Cloner cloner)
+      : base(original, cloner) {
+      this.operators = cloner.Clone<IItemList<T>>(original.operators);
+      Initialize();
+    }
     public MultiOperator()
       : base() {
@@ -57,8 +64,9 @@
     }
 
-    [StorableConstructor]
-    protected MultiOperator(bool deserializing) : base(deserializing) { }
-
     [StorableHook(HookType.AfterDeserialization)]
+    private void AfterDeserialization() {
+      Initialize();
+    }
+    
     private void Initialize() {
       if (operators != null) RegisterOperatorsEvents();
@@ -69,11 +77,4 @@
         opParam.ValueChanged += new EventHandler(opParam_ValueChanged);
       }
-    }
-
-    public override IDeepCloneable Clone(Cloner cloner) {
-      MultiOperator<T> clone = (MultiOperator<T>)base.Clone(cloner);
-      clone.operators = (IItemList<T>)cloner.Clone(operators);
-      clone.Initialize();
-      return clone;
     }
 
Index: /branches/CloningRefactoring/HeuristicLab.Operators/3.3/Operator.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Operators/3.3/Operator.cs	(revision 4661)
+++ /branches/CloningRefactoring/HeuristicLab.Operators/3.3/Operator.cs	(revision 4662)
@@ -85,4 +85,12 @@
     }
 
+    [StorableConstructor]
+    protected Operator(bool deserializing) : base(deserializing) { }
+    protected Operator(Operator original, Cloner cloner)
+      : base(original, cloner) {
+      this.canceled = original.canceled;
+      this.breakpoint = original.breakpoint;
+      this.executionContext = cloner.Clone<IExecutionContext>(original.executionContext);
+    }
     /// <summary>
     /// Initializes a new instance of <see cref="OperatorBase"/> setting the breakpoint flag and 
@@ -113,20 +121,4 @@
       canceled = false;
       breakpoint = false;
-    }
-    [StorableConstructor]
-    protected Operator(bool deserializing) : base(deserializing) { }
-
-    /// <summary>
-    /// Clones the current instance (deep clone).
-    /// </summary>
-    /// <remarks>Clones also sub operators, variables and variable infos.</remarks>
-    /// <param name="clonedObjects">Dictionary of all already cloned objects. (Needed to avoid cycles.)</param>
-    /// <returns>The cloned object as <see cref="OperatorBase"/>.</returns>
-    public override IDeepCloneable Clone(Cloner cloner) {
-      Operator clone = (Operator)base.Clone(cloner);
-      clone.canceled = canceled;
-      clone.breakpoint = breakpoint;
-      clone.executionContext = (IExecutionContext)cloner.Clone(executionContext);
-      return clone;
     }
 
Index: /branches/CloningRefactoring/HeuristicLab.Operators/3.3/Placeholder.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Operators/3.3/Placeholder.cs	(revision 4661)
+++ /branches/CloningRefactoring/HeuristicLab.Operators/3.3/Placeholder.cs	(revision 4662)
@@ -23,4 +23,5 @@
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Operators {
@@ -35,7 +36,16 @@
     }
 
+    [StorableConstructor]
+    private Placeholder(bool deserializing) : base(deserializing) { }
+    private Placeholder(Placeholder original, Cloner cloner)
+      : base(original, cloner) {
+    }
     public Placeholder()
       : base() {
       Parameters.Add(new LookupParameter<IOperator>("Operator", "The operator which is retrieved from the scope or a parent execution context and applied on the current scope."));
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new Placeholder(this, cloner);
     }
 
Index: /branches/CloningRefactoring/HeuristicLab.Operators/3.3/ScopeCleaner.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Operators/3.3/ScopeCleaner.cs	(revision 4661)
+++ /branches/CloningRefactoring/HeuristicLab.Operators/3.3/ScopeCleaner.cs	(revision 4662)
@@ -23,4 +23,5 @@
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Operators {
@@ -38,7 +39,16 @@
     }
 
+    [StorableConstructor]
+    private ScopeCleaner(bool deserializing) : base(deserializing) { }
+    private ScopeCleaner(ScopeCleaner original, Cloner cloner)
+      : base(original, cloner) {
+    }
     public ScopeCleaner()
       : base() {
       Parameters.Add(new ScopeParameter("CurrentScope", "The current scope whose variables and sub-scopes should be removed."));
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new ScopeCleaner(this, cloner);
     }
 
Index: /branches/CloningRefactoring/HeuristicLab.Operators/3.3/SingleSuccessorOperator.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Operators/3.3/SingleSuccessorOperator.cs	(revision 4661)
+++ /branches/CloningRefactoring/HeuristicLab.Operators/3.3/SingleSuccessorOperator.cs	(revision 4662)
@@ -23,4 +23,5 @@
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Operators {
@@ -39,11 +40,14 @@
     }
 
+    [StorableConstructor]
+    protected SingleSuccessorOperator(bool deserializing) : base(deserializing) { }
+    protected SingleSuccessorOperator(SingleSuccessorOperator original, Cloner cloner)
+      : base(original, cloner) {
+    }
     public SingleSuccessorOperator()
       : base() {
       Parameters.Add(new OperatorParameter("Successor", "Operator which is executed next."));
     }
-    [StorableConstructor]
-    protected SingleSuccessorOperator(bool deserializing) : base(deserializing) { }
-
+    
     public override IOperation Apply() {
       if (Successor != null)
Index: /branches/CloningRefactoring/HeuristicLab.Operators/3.3/StochasticBranch.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Operators/3.3/StochasticBranch.cs	(revision 4661)
+++ /branches/CloningRefactoring/HeuristicLab.Operators/3.3/StochasticBranch.cs	(revision 4662)
@@ -24,4 +24,5 @@
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Operators {
@@ -53,4 +54,9 @@
     }
 
+    [StorableConstructor]
+    protected StochasticBranch(bool deserializing) : base(deserializing) { }
+    protected StochasticBranch(StochasticBranch original, Cloner cloner)
+      : base(original, cloner) {
+    }
     public StochasticBranch()
       : base() {
@@ -59,4 +65,8 @@
       Parameters.Add(new OperatorParameter("FirstBranch", "The operator which is executed with the given probability."));
       Parameters.Add(new OperatorParameter("SecondBranch", "The operator which is executed if the first branch is not executed."));
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new StochasticBranch(this, cloner);
     }
 
Index: /branches/CloningRefactoring/HeuristicLab.Operators/3.3/StochasticMultiBranch.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Operators/3.3/StochasticMultiBranch.cs	(revision 4661)
+++ /branches/CloningRefactoring/HeuristicLab.Operators/3.3/StochasticMultiBranch.cs	(revision 4662)
@@ -28,4 +28,5 @@
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Operators {
@@ -56,4 +57,7 @@
     [StorableConstructor]
     protected StochasticMultiBranch(bool deserializing) : base(deserializing) { }
+    protected StochasticMultiBranch(StochasticMultiBranch<T> original, Cloner cloner)
+      : base(original, cloner) {
+    }
     /// <summary>
     /// Initializes a new instance of <see cref="StochasticMultiOperator"/> with two parameters
@@ -143,4 +147,15 @@
   [StorableClass]
   public class StochasticMultiBranch : StochasticMultiBranch<IOperator> {
+    [StorableConstructor]
+    protected StochasticMultiBranch(bool deserializing) : base(deserializing) { }
+    protected StochasticMultiBranch(StochasticMultiBranch original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public StochasticMultiBranch() { }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new StochasticMultiBranch(this, cloner);
+    }
+
     protected override bool CreateChildOperation {
       get { return false; }
Index: /branches/CloningRefactoring/HeuristicLab.Operators/3.3/SubScopesCreator.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Operators/3.3/SubScopesCreator.cs	(revision 4661)
+++ /branches/CloningRefactoring/HeuristicLab.Operators/3.3/SubScopesCreator.cs	(revision 4662)
@@ -24,4 +24,5 @@
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Operators {
@@ -42,8 +43,17 @@
     }
 
+    [StorableConstructor]
+    protected SubScopesCreator(bool deserializing) : base(deserializing) { }
+    protected SubScopesCreator(SubScopesCreator original, Cloner cloner)
+      : base(original, cloner) {
+    }
     public SubScopesCreator()
       : base() {
       Parameters.Add(new ValueLookupParameter<IntValue>("NumberOfSubScopes", "The number of new and empty sub-scopes which should be added to the current scope."));
       Parameters.Add(new ScopeParameter("CurrentScope", "The current scope to which the new and empty sub-scopes are added."));
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new SubScopesCreator(this, cloner);
     }
 
Index: /branches/CloningRefactoring/HeuristicLab.Operators/3.3/SubScopesMixer.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Operators/3.3/SubScopesMixer.cs	(revision 4661)
+++ /branches/CloningRefactoring/HeuristicLab.Operators/3.3/SubScopesMixer.cs	(revision 4662)
@@ -25,4 +25,5 @@
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Operators {
@@ -42,4 +43,9 @@
     }
 
+    [StorableConstructor]
+    protected SubScopesMixer(bool deserializing) : base(deserializing) { }
+    protected SubScopesMixer(SubScopesMixer original, Cloner cloner)
+      : base(original, cloner) {
+    }
     /// <summary>
     /// Initializes a new instance of <see cref="SubScopesMixer"/> with one variable infos 
@@ -49,4 +55,8 @@
       : base() {
       Parameters.Add(new ValueParameter<IntValue>("Partitions", "The number of equal-sized partitions.", new IntValue(2)));
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new SubScopesMixer(this, cloner);
     }
 
Index: /branches/CloningRefactoring/HeuristicLab.Operators/3.3/SubScopesProcessor.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Operators/3.3/SubScopesProcessor.cs	(revision 4661)
+++ /branches/CloningRefactoring/HeuristicLab.Operators/3.3/SubScopesProcessor.cs	(revision 4662)
@@ -27,4 +27,5 @@
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Operators {
@@ -51,8 +52,17 @@
     }
 
+    [StorableConstructor]
+    private SubScopesProcessor(bool deserializing) : base(deserializing) { }
+    private SubScopesProcessor(SubScopesProcessor original, Cloner cloner)
+      : base(original, cloner) {
+    }
     public SubScopesProcessor()
       : base() {
       Parameters.Add(new ValueLookupParameter<BoolValue>("Parallel", "True if the operators should be applied in parallel on the sub-scopes, otherwise false.", new BoolValue(false)));
       Parameters.Add(new ValueParameter<IntValue>("Depth", "The number of steps to descend in the scope tree before applying operator.", new IntValue(1)));
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new SubScopesProcessor(this, cloner);
     }
 
Index: /branches/CloningRefactoring/HeuristicLab.Operators/3.3/SubScopesRemover.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Operators/3.3/SubScopesRemover.cs	(revision 4661)
+++ /branches/CloningRefactoring/HeuristicLab.Operators/3.3/SubScopesRemover.cs	(revision 4662)
@@ -24,4 +24,5 @@
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Operators {
@@ -50,4 +51,9 @@
     }
 
+    [StorableConstructor]
+    private SubScopesRemover(bool deserializing) : base(deserializing) { }
+    private SubScopesRemover(SubScopesRemover original, Cloner cloner)
+      : base(original, cloner) {
+    }
     public SubScopesRemover()
       : base() {
@@ -55,4 +61,8 @@
       Parameters.Add(new ValueLookupParameter<IntValue>("SubScopeIndex", "The index of the sub-scope which should be removed. This parameter is ignored, if RemoveAllSubScopes is true."));
       Parameters.Add(new ScopeParameter("CurrentScope", "The current scope from which one or all sub-scopes should be removed."));
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new SubScopesRemover(this, cloner);
     }
 
Index: /branches/CloningRefactoring/HeuristicLab.Operators/3.3/SubScopesSorter.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Operators/3.3/SubScopesSorter.cs	(revision 4661)
+++ /branches/CloningRefactoring/HeuristicLab.Operators/3.3/SubScopesSorter.cs	(revision 4662)
@@ -24,4 +24,5 @@
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Operators {
@@ -48,4 +49,9 @@
     }
 
+    [StorableConstructor]
+    private SubScopesSorter(bool deserializing) : base(deserializing) { }
+    private SubScopesSorter(SubScopesSorter original, Cloner cloner)
+      : base(original, cloner) {
+    }
     public SubScopesSorter()
       : base() {
@@ -53,4 +59,8 @@
       Parameters.Add(new ValueLookupParameter<BoolValue>("Descending", "True if the sub-scopes should be sorted in descending order, otherwise false."));
       Parameters.Add(new ScopeParameter("CurrentScope", "The current scope whose sub-scopes are sorted."));
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new SubScopesSorter(this, cloner);
     }
 
Index: /branches/CloningRefactoring/HeuristicLab.Operators/3.3/UniformSubScopesProcessor.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Operators/3.3/UniformSubScopesProcessor.cs	(revision 4661)
+++ /branches/CloningRefactoring/HeuristicLab.Operators/3.3/UniformSubScopesProcessor.cs	(revision 4662)
@@ -26,4 +26,5 @@
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Operators {
@@ -57,4 +58,9 @@
     }
 
+    [StorableConstructor]
+    private UniformSubScopesProcessor(bool deserializing) : base(deserializing) { }
+    private UniformSubScopesProcessor(UniformSubScopesProcessor original, Cloner cloner)
+      : base(original, cloner) {
+    }
     public UniformSubScopesProcessor()
       : base() {
@@ -62,4 +68,8 @@
       Parameters.Add(new ValueLookupParameter<BoolValue>("Parallel", "True if the operator should be applied in parallel on all sub-scopes, otherwise false.", new BoolValue(false)));
       Parameters.Add(new ValueParameter<IntValue>("Depth", "The number of steps to descend in the scope tree before applying operator.", new IntValue(1)));
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new UniformSubScopesProcessor(this, cloner);
     }
 
Index: /branches/CloningRefactoring/HeuristicLab.Operators/3.3/ValuesCollector.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Operators/3.3/ValuesCollector.cs	(revision 4661)
+++ /branches/CloningRefactoring/HeuristicLab.Operators/3.3/ValuesCollector.cs	(revision 4662)
@@ -38,4 +38,11 @@
     }
 
+    [StorableConstructor]
+    protected ValuesCollector(bool deserializing) : base(deserializing) { }
+    protected ValuesCollector(ValuesCollector original, Cloner cloner)
+      : base(original, cloner) {
+      this.collectedValues = cloner.Clone<ParameterCollection>(original.collectedValues);
+      Initialize();
+    }
     public ValuesCollector()
       : base() {
@@ -43,19 +50,14 @@
       Initialize();
     }
-    [StorableConstructor]
-    protected ValuesCollector(bool deserializing) : base(deserializing) { }
 
     [StorableHook(HookType.AfterDeserialization)]
+    private void AfterDeserialization() {
+      Initialize();
+    }
+
     private void Initialize() {
       collectedValues.ItemsAdded += new CollectionItemsChangedEventHandler<IParameter>(collectedValues_ItemsAdded);
       collectedValues.ItemsRemoved += new CollectionItemsChangedEventHandler<IParameter>(collectedValues_ItemsRemoved);
       collectedValues.CollectionReset += new CollectionItemsChangedEventHandler<IParameter>(collectedValues_CollectionReset);
-    }
-
-    public override IDeepCloneable Clone(Cloner cloner) {
-      ValuesCollector clone = (ValuesCollector)base.Clone(cloner);
-      clone.collectedValues = (ParameterCollection)cloner.Clone(collectedValues);
-      clone.Initialize();
-      return clone;
     }
 
Index: /branches/CloningRefactoring/HeuristicLab.Operators/3.3/VariableCreator.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Operators/3.3/VariableCreator.cs	(revision 4661)
+++ /branches/CloningRefactoring/HeuristicLab.Operators/3.3/VariableCreator.cs	(revision 4662)
@@ -23,4 +23,5 @@
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Operators {
@@ -38,7 +39,16 @@
     }
 
+    [StorableConstructor]
+    protected VariableCreator(bool deserializing) : base(deserializing) { }
+    protected VariableCreator(VariableCreator original, Cloner cloner)
+      : base(original, cloner) {
+    }
     public VariableCreator()
       : base() {
       Parameters.Add(new ScopeParameter("CurrentScope", "The current scope into which the parameter values are cloned."));
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new VariableCreator(this, cloner);
     }
 
