Index: trunk/sources/HeuristicLab.Optimization.Operators/3.3/ChildrenCreator.cs
===================================================================
--- trunk/sources/HeuristicLab.Optimization.Operators/3.3/ChildrenCreator.cs	(revision 4497)
+++ trunk/sources/HeuristicLab.Optimization.Operators/3.3/ChildrenCreator.cs	(revision 4722)
@@ -21,4 +21,5 @@
 
 using System;
+using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Data;
@@ -53,8 +54,15 @@
     }
 
+    [StorableConstructor]
+    private ChildrenCreator(bool deserializing) : base(deserializing) { }
+    private ChildrenCreator(ChildrenCreator original, Cloner cloner) : base(original, cloner) { }
     public ChildrenCreator()
       : base() {
       Parameters.Add(new ScopeParameter("CurrentScope", "The current scope whose sub-scopes represent the parents."));
       Parameters.Add(new ValueLookupParameter<IntValue>("ParentsPerChild", "The number of parents that should be crossed per child. Note that some of the typical crossover operators require exactly two parents.", new IntValue(2)));
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new ChildrenCreator(this, cloner);
     }
 
Index: trunk/sources/HeuristicLab.Optimization.Operators/3.3/DiscreteDoubleValueModifier.cs
===================================================================
--- trunk/sources/HeuristicLab.Optimization.Operators/3.3/DiscreteDoubleValueModifier.cs	(revision 4497)
+++ trunk/sources/HeuristicLab.Optimization.Operators/3.3/DiscreteDoubleValueModifier.cs	(revision 4722)
@@ -20,4 +20,5 @@
 #endregion
 
+using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Data;
@@ -70,4 +71,7 @@
     }
 
+    [StorableConstructor]
+    protected DiscreteDoubleValueModifier(bool deserializing) : base(deserializing) { }
+    protected DiscreteDoubleValueModifier(DiscreteDoubleValueModifier original, Cloner cloner) : base(original, cloner) { }
     /// <summary>
     /// Initializes a new instance of <see cref="DiscreteDoubleValueModifier"/> with 6 parameters
Index: trunk/sources/HeuristicLab.Optimization.Operators/3.3/ExponentialDiscreteDoubleValueModifier.cs
===================================================================
--- trunk/sources/HeuristicLab.Optimization.Operators/3.3/ExponentialDiscreteDoubleValueModifier.cs	(revision 4497)
+++ trunk/sources/HeuristicLab.Optimization.Operators/3.3/ExponentialDiscreteDoubleValueModifier.cs	(revision 4722)
@@ -21,4 +21,5 @@
 
 using System;
+using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
@@ -31,4 +32,13 @@
   [StorableClass]
   public class ExponentialDiscreteDoubleValueModifier : DiscreteDoubleValueModifier {
+    [StorableConstructor]
+    protected ExponentialDiscreteDoubleValueModifier(bool deserializing) : base(deserializing) { }
+    protected ExponentialDiscreteDoubleValueModifier(ExponentialDiscreteDoubleValueModifier original, Cloner cloner) : base(original, cloner) { }
+    public ExponentialDiscreteDoubleValueModifier() : base() { }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new ExponentialDiscreteDoubleValueModifier(this, cloner);
+    }
+
     /// <summary>
     /// Calculates a new value based on exponential decay or growth.
Index: trunk/sources/HeuristicLab.Optimization.Operators/3.3/LinearDiscreteDoubleValueModifier.cs
===================================================================
--- trunk/sources/HeuristicLab.Optimization.Operators/3.3/LinearDiscreteDoubleValueModifier.cs	(revision 4497)
+++ trunk/sources/HeuristicLab.Optimization.Operators/3.3/LinearDiscreteDoubleValueModifier.cs	(revision 4722)
@@ -20,4 +20,5 @@
 #endregion
 
+using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
@@ -30,4 +31,13 @@
   [StorableClass]
   public class LinearDiscreteDoubleValueModifier : DiscreteDoubleValueModifier {
+    [StorableConstructor]
+    protected LinearDiscreteDoubleValueModifier(bool deserializing) : base(deserializing) { }
+    protected LinearDiscreteDoubleValueModifier(LinearDiscreteDoubleValueModifier original, Cloner cloner) : base(original, cloner) { }
+    public LinearDiscreteDoubleValueModifier() : base() { }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new LinearDiscreteDoubleValueModifier(this, cloner);
+    }
+
     protected override double Modify(double value, double startValue, double endValue, int index, int startIndex, int endIndex) {
       double k = (endValue - startValue) / (endIndex - startIndex);
Index: trunk/sources/HeuristicLab.Optimization.Operators/3.3/ProbabilisticQualityComparator.cs
===================================================================
--- trunk/sources/HeuristicLab.Optimization.Operators/3.3/ProbabilisticQualityComparator.cs	(revision 4497)
+++ trunk/sources/HeuristicLab.Optimization.Operators/3.3/ProbabilisticQualityComparator.cs	(revision 4722)
@@ -21,4 +21,5 @@
 
 using System;
+using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Data;
@@ -45,8 +46,15 @@
     }
 
+    [StorableConstructor]
+    protected ProbabilisticQualityComparator(bool deserializing) : base(deserializing) { }
+    protected ProbabilisticQualityComparator(ProbabilisticQualityComparator original, Cloner cloner) : base(original, cloner) { }
     public ProbabilisticQualityComparator()
       : base() {
       Parameters.Add(new LookupParameter<DoubleValue>("Dampening", "The dampening factor that influences the probability."));
       Parameters.Add(new LookupParameter<IRandom>("Random", "The random number generator."));
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new ProbabilisticQualityComparator(this, cloner);
     }
 
Index: trunk/sources/HeuristicLab.Optimization.Operators/3.3/QuadraticDiscreteDoubleValueModifier.cs
===================================================================
--- trunk/sources/HeuristicLab.Optimization.Operators/3.3/QuadraticDiscreteDoubleValueModifier.cs	(revision 4497)
+++ trunk/sources/HeuristicLab.Optimization.Operators/3.3/QuadraticDiscreteDoubleValueModifier.cs	(revision 4722)
@@ -20,4 +20,5 @@
 #endregion
 
+using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
@@ -30,4 +31,13 @@
   [StorableClass]
   public class QuadraticDiscreteDoubleValueModifier : DiscreteDoubleValueModifier {
+    [StorableConstructor]
+    protected QuadraticDiscreteDoubleValueModifier(bool deserializing) : base(deserializing) { }
+    protected QuadraticDiscreteDoubleValueModifier(QuadraticDiscreteDoubleValueModifier original, Cloner cloner) : base(original, cloner) { }
+    public QuadraticDiscreteDoubleValueModifier() : base() { }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new QuadraticDiscreteDoubleValueModifier(this, cloner);
+    }
+
     protected override double Modify(double value, double startValue, double endValue, int index, int startIndex, int endIndex) {
       double a = (endValue - startValue) / ((endIndex - startIndex) * (endIndex - startIndex));
Index: trunk/sources/HeuristicLab.Optimization.Operators/3.3/QualityComparator.cs
===================================================================
--- trunk/sources/HeuristicLab.Optimization.Operators/3.3/QualityComparator.cs	(revision 4497)
+++ trunk/sources/HeuristicLab.Optimization.Operators/3.3/QualityComparator.cs	(revision 4722)
@@ -20,4 +20,5 @@
 #endregion
 
+using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Data;
@@ -43,4 +44,7 @@
     }
 
+    [StorableConstructor]
+    protected QualityComparator(bool deserializing) : base(deserializing) { }
+    protected QualityComparator(QualityComparator original, Cloner cloner) : base(original, cloner) { }
     public QualityComparator()
       : base() {
@@ -49,4 +53,8 @@
       Parameters.Add(new LookupParameter<BoolValue>("Result", "The result of the comparison."));
       Parameters.Add(new ValueLookupParameter<BoolValue>("Maximization", "True if the problem is a maximization problem, otherwise false."));
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new QualityComparator(this, cloner);
     }
 
Index: trunk/sources/HeuristicLab.Optimization.Operators/3.3/ResultsCollector.cs
===================================================================
--- trunk/sources/HeuristicLab.Optimization.Operators/3.3/ResultsCollector.cs	(revision 4497)
+++ trunk/sources/HeuristicLab.Optimization.Operators/3.3/ResultsCollector.cs	(revision 4722)
@@ -21,4 +21,5 @@
 
 using System.Collections;
+using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Data;
@@ -46,8 +47,15 @@
     }
 
+    [StorableConstructor]
+    protected ResultsCollector(bool deserializing) : base(deserializing) { }
+    protected ResultsCollector(ResultsCollector original, Cloner cloner) : base(original, cloner) { }
     public ResultsCollector()
       : base() {
       Parameters.Add(new ValueLookupParameter<ResultCollection>("Results", "The result collection where the collected values should be stored."));
       Parameters.Add(new ValueParameter<BoolValue>("CopyValue", "True if the collected result value should be copied, otherwise false.", new BoolValue(false)));
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new ResultsCollector(this, cloner);
     }
 
Index: trunk/sources/HeuristicLab.Optimization.Operators/3.3/SASEGASAReunificator.cs
===================================================================
--- trunk/sources/HeuristicLab.Optimization.Operators/3.3/SASEGASAReunificator.cs	(revision 4497)
+++ trunk/sources/HeuristicLab.Optimization.Operators/3.3/SASEGASAReunificator.cs	(revision 4722)
@@ -22,4 +22,5 @@
 using System;
 using System.Collections.Generic;
+using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Data;
@@ -41,8 +42,16 @@
     }
 
+    [StorableConstructor]
+    protected SASEGASAReunificator(bool deserializing) : base(deserializing) { }
+    protected SASEGASAReunificator(SASEGASAReunificator original, Cloner cloner) : base(original, cloner) { }
     public SASEGASAReunificator()
       : base() {
       Parameters.Add(new LookupParameter<IntValue>("VillageCount", "The number of villages left after the reunification."));
     }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new SASEGASAReunificator(this, cloner);
+    }
+
     /// <summary>
     /// Joins all sub sub scopes of the given <paramref name="scope"/>, reduces the number of sub 
Index: trunk/sources/HeuristicLab.Optimization.Operators/3.3/SolutionsCreator.cs
===================================================================
--- trunk/sources/HeuristicLab.Optimization.Operators/3.3/SolutionsCreator.cs	(revision 4497)
+++ trunk/sources/HeuristicLab.Optimization.Operators/3.3/SolutionsCreator.cs	(revision 4722)
@@ -20,4 +20,5 @@
 #endregion
 
+using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Data;
@@ -53,4 +54,7 @@
     }
 
+    [StorableConstructor]
+    private SolutionsCreator(bool deserializing) : base(deserializing) { }
+    private SolutionsCreator(SolutionsCreator original, Cloner cloner) : base(original, cloner) { }
     public SolutionsCreator()
       : base() {
@@ -59,4 +63,8 @@
       Parameters.Add(new ValueLookupParameter<IOperator>("Evaluator", "The operator which is used to evaluate new solutions."));
       Parameters.Add(new ScopeParameter("CurrentScope", "The current scope to which the new solutions are added as sub-scopes."));
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new SolutionsCreator(this, cloner);
     }
 
Index: trunk/sources/HeuristicLab.Optimization.Operators/3.3/SquareRootDiscreteDoubleValueModifier.cs
===================================================================
--- trunk/sources/HeuristicLab.Optimization.Operators/3.3/SquareRootDiscreteDoubleValueModifier.cs	(revision 4497)
+++ trunk/sources/HeuristicLab.Optimization.Operators/3.3/SquareRootDiscreteDoubleValueModifier.cs	(revision 4722)
@@ -21,4 +21,5 @@
 
 using System;
+using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
@@ -31,4 +32,13 @@
   [StorableClass]
   public class SquareRootDiscreteDoubleValueModifier : DiscreteDoubleValueModifier {
+    [StorableConstructor]
+    protected SquareRootDiscreteDoubleValueModifier(bool deserializing) : base(deserializing) { }
+    protected SquareRootDiscreteDoubleValueModifier(SquareRootDiscreteDoubleValueModifier original, Cloner cloner) : base(original, cloner) { }
+    public SquareRootDiscreteDoubleValueModifier() : base() { }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new SquareRootDiscreteDoubleValueModifier(this, cloner);
+    }
+
     protected override double Modify(double value, double startValue, double endValue, int index, int startIndex, int endIndex) {
       double a = (endValue - startValue) / Math.Sqrt(endIndex - startIndex);
Index: trunk/sources/HeuristicLab.Optimization.Operators/3.3/TabuMaker.cs
===================================================================
--- trunk/sources/HeuristicLab.Optimization.Operators/3.3/TabuMaker.cs	(revision 4497)
+++ trunk/sources/HeuristicLab.Optimization.Operators/3.3/TabuMaker.cs	(revision 4722)
@@ -20,4 +20,5 @@
 #endregion
 
+using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Data;
@@ -49,4 +50,7 @@
     }
 
+    [StorableConstructor]
+    protected TabuMaker(bool deserializing) : base(deserializing) { }
+    protected TabuMaker(TabuMaker original, Cloner cloner) : base(original, cloner) { }
     protected TabuMaker()
       : base() {
Index: trunk/sources/HeuristicLab.Optimization.Operators/3.3/UnidirectionalRingMigrator.cs
===================================================================
--- trunk/sources/HeuristicLab.Optimization.Operators/3.3/UnidirectionalRingMigrator.cs	(revision 4497)
+++ trunk/sources/HeuristicLab.Optimization.Operators/3.3/UnidirectionalRingMigrator.cs	(revision 4722)
@@ -21,4 +21,5 @@
 
 using System.Collections.Generic;
+using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Operators;
@@ -32,4 +33,13 @@
   [StorableClass]
   public class UnidirectionalRingMigrator : SingleSuccessorOperator, IMigrator {
+    [StorableConstructor]
+    protected UnidirectionalRingMigrator(bool deserializing) : base(deserializing) { }
+    protected UnidirectionalRingMigrator(UnidirectionalRingMigrator original, Cloner cloner) : base(original, cloner) { }
+    public UnidirectionalRingMigrator() : base() { }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new UnidirectionalRingMigrator(this, cloner);
+    }
+
     /// <summary>
     /// Migrates every first sub scope of each child to its left neighbour (like a ring).
Index: trunk/sources/HeuristicLab.Optimization.Operators/3.3/UserDefinedCrossover.cs
===================================================================
--- trunk/sources/HeuristicLab.Optimization.Operators/3.3/UserDefinedCrossover.cs	(revision 4497)
+++ trunk/sources/HeuristicLab.Optimization.Operators/3.3/UserDefinedCrossover.cs	(revision 4722)
@@ -20,4 +20,5 @@
 #endregion
 
+using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
@@ -27,4 +28,12 @@
   [StorableClass]
   public class UserDefinedCrossover : UserDefinedOperator, ICrossover {
+    [StorableConstructor]
+    protected UserDefinedCrossover(bool deserializing) : base(deserializing) { }
+    protected UserDefinedCrossover(UserDefinedCrossover original, Cloner cloner) : base(original, cloner) { }
+    public UserDefinedCrossover() : base() { }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new UserDefinedCrossover(this, cloner);
+    }
   }
 }
Index: trunk/sources/HeuristicLab.Optimization.Operators/3.3/UserDefinedEvaluator.cs
===================================================================
--- trunk/sources/HeuristicLab.Optimization.Operators/3.3/UserDefinedEvaluator.cs	(revision 4497)
+++ trunk/sources/HeuristicLab.Optimization.Operators/3.3/UserDefinedEvaluator.cs	(revision 4722)
@@ -20,4 +20,5 @@
 #endregion
 
+using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Data;
@@ -33,8 +34,15 @@
     }
 
+    [StorableConstructor]
+    protected UserDefinedEvaluator(bool deserializing) : base(deserializing) { }
+    protected UserDefinedEvaluator(UserDefinedEvaluator original, Cloner cloner) : base(original, cloner) { }
     public UserDefinedEvaluator()
       : base() {
       Parameters.Add(new LookupParameter<DoubleValue>("Quality", "The quality value of the solution."));
     }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new UserDefinedEvaluator(this, cloner);
+    }
   }
 }
Index: trunk/sources/HeuristicLab.Optimization.Operators/3.3/UserDefinedManipulator.cs
===================================================================
--- trunk/sources/HeuristicLab.Optimization.Operators/3.3/UserDefinedManipulator.cs	(revision 4497)
+++ trunk/sources/HeuristicLab.Optimization.Operators/3.3/UserDefinedManipulator.cs	(revision 4722)
@@ -20,4 +20,5 @@
 #endregion
 
+using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
@@ -27,4 +28,12 @@
   [StorableClass]
   public class UserDefinedManipulator : UserDefinedOperator, IManipulator {
+    [StorableConstructor]
+    protected UserDefinedManipulator(bool deserializing) : base(deserializing) { }
+    protected UserDefinedManipulator(UserDefinedManipulator original, Cloner cloner) : base(original, cloner) { }
+    public UserDefinedManipulator() : base() { }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new UserDefinedManipulator(this, cloner);
+    }
   }
 }
Index: trunk/sources/HeuristicLab.Optimization.Operators/3.3/UserDefinedOperator.cs
===================================================================
--- trunk/sources/HeuristicLab.Optimization.Operators/3.3/UserDefinedOperator.cs	(revision 4497)
+++ trunk/sources/HeuristicLab.Optimization.Operators/3.3/UserDefinedOperator.cs	(revision 4722)
@@ -21,4 +21,5 @@
 
 using System.Linq;
+using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Operators;
@@ -29,4 +30,9 @@
   [StorableClass]
   public abstract class UserDefinedOperator : CheckedMultiOperator<IOperator> {
+    [StorableConstructor]
+    protected UserDefinedOperator(bool deserializing) : base(deserializing) { }
+    protected UserDefinedOperator(UserDefinedOperator original, Cloner cloner) : base(original, cloner) { }
+    public UserDefinedOperator() : base() { }
+
     public override IOperation Apply() {
       OperationCollection result = new OperationCollection();
Index: trunk/sources/HeuristicLab.Optimization.Operators/3.3/UserDefinedSolutionCreator.cs
===================================================================
--- trunk/sources/HeuristicLab.Optimization.Operators/3.3/UserDefinedSolutionCreator.cs	(revision 4497)
+++ trunk/sources/HeuristicLab.Optimization.Operators/3.3/UserDefinedSolutionCreator.cs	(revision 4722)
@@ -20,4 +20,5 @@
 #endregion
 
+using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
@@ -27,4 +28,12 @@
   [StorableClass]
   public class UserDefinedSolutionCreator : UserDefinedOperator, ISolutionCreator {
+    [StorableConstructor]
+    protected UserDefinedSolutionCreator(bool deserializing) : base(deserializing) { }
+    protected UserDefinedSolutionCreator(UserDefinedSolutionCreator original, Cloner cloner) : base(original, cloner) { }
+    public UserDefinedSolutionCreator() : base() { }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new UserDefinedSolutionCreator(this, cloner);
+    }
   }
 }
Index: trunk/sources/HeuristicLab.Optimization.Operators/3.3/WeightedParentsQualityComparator.cs
===================================================================
--- trunk/sources/HeuristicLab.Optimization.Operators/3.3/WeightedParentsQualityComparator.cs	(revision 4497)
+++ trunk/sources/HeuristicLab.Optimization.Operators/3.3/WeightedParentsQualityComparator.cs	(revision 4722)
@@ -23,4 +23,5 @@
 using System.Collections.Generic;
 using System.Linq;
+using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Data;
@@ -49,4 +50,7 @@
     }
 
+    [StorableConstructor]
+    protected WeightedParentsQualityComparator(bool deserializing) : base(deserializing) { }
+    protected WeightedParentsQualityComparator(WeightedParentsQualityComparator original, Cloner cloner) : base(original, cloner) { }
     public WeightedParentsQualityComparator()
       : base() {
@@ -56,4 +60,8 @@
       Parameters.Add(new LookupParameter<BoolValue>("Result", "The result of the comparison: True means Quality is better, False means it is worse than parents."));
       Parameters.Add(new ValueLookupParameter<DoubleValue>("ComparisonFactor", "Determines if the quality should be compared to the better parent (1.0), to the worse (0.0) or to any linearly interpolated value between them."));
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new WeightedParentsQualityComparator(this, cloner);
     }
 
