Index: /branches/CloningRefactoring/HeuristicLab.Problems.OneMax/3.3/Analyzers/BestOneMaxSolutionAnalyzer.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Problems.OneMax/3.3/Analyzers/BestOneMaxSolutionAnalyzer.cs	(revision 4680)
+++ /branches/CloningRefactoring/HeuristicLab.Problems.OneMax/3.3/Analyzers/BestOneMaxSolutionAnalyzer.cs	(revision 4681)
@@ -28,4 +28,5 @@
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.OneMax {
@@ -35,5 +36,5 @@
   [Item("BestOneMaxSolutionAnalyzer", "An operator for analyzing the best solution for a OneMax problem.")]
   [StorableClass]
-  class BestOneMaxSolutionAnalyzer : SingleSuccessorOperator, IAnalyzer {
+  public class BestOneMaxSolutionAnalyzer : SingleSuccessorOperator, IAnalyzer {
     public LookupParameter<BoolValue> MaximizationParameter {
       get { return (LookupParameter<BoolValue>)Parameters["Maximization"]; }
@@ -55,4 +56,7 @@
     }
 
+    [StorableConstructor]
+    protected BestOneMaxSolutionAnalyzer(bool deserializing) : base(deserializing) { }
+    protected BestOneMaxSolutionAnalyzer(BestOneMaxSolutionAnalyzer original, Cloner cloner) : base(original, cloner) { }
     public BestOneMaxSolutionAnalyzer()
       : base() {
@@ -63,4 +67,8 @@
       Parameters.Add(new ValueLookupParameter<ResultCollection>("Results", "The result collection where the Onemax solution should be stored."));
       Parameters.Add(new LookupParameter<DoubleValue>("BestKnownQuality", "The quality of the best known solution."));
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new BestOneMaxSolutionAnalyzer(this, cloner);
     }
 
Index: /branches/CloningRefactoring/HeuristicLab.Problems.OneMax/3.3/Evaluators/OneMaxEvaluator.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Problems.OneMax/3.3/Evaluators/OneMaxEvaluator.cs	(revision 4680)
+++ /branches/CloningRefactoring/HeuristicLab.Problems.OneMax/3.3/Evaluators/OneMaxEvaluator.cs	(revision 4681)
@@ -26,4 +26,5 @@
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.OneMax {
@@ -42,8 +43,15 @@
     }
 
+    [StorableConstructor]
+    protected OneMaxEvaluator(bool deserializing) : base(deserializing) { }
+    protected OneMaxEvaluator(OneMaxEvaluator original, Cloner cloner) : base(original, cloner) { }
     public OneMaxEvaluator()
       : base() {
       Parameters.Add(new LookupParameter<DoubleValue>("Quality", "The evaluated quality of the OneMax solution."));
       Parameters.Add(new LookupParameter<BinaryVector>("BinaryVector", "The OneMax solution given in path representation which should be evaluated."));
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new OneMaxEvaluator(this, cloner);
     }
 
Index: /branches/CloningRefactoring/HeuristicLab.Problems.OneMax/3.3/MoveEvaluators/OneMaxMoveEvaluator.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Problems.OneMax/3.3/MoveEvaluators/OneMaxMoveEvaluator.cs	(revision 4680)
+++ /branches/CloningRefactoring/HeuristicLab.Problems.OneMax/3.3/MoveEvaluators/OneMaxMoveEvaluator.cs	(revision 4681)
@@ -27,4 +27,5 @@
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.OneMax {
@@ -45,4 +46,7 @@
     }
 
+    [StorableConstructor]
+    protected OneMaxMoveEvaluator(bool deserializing) : base(deserializing) { }
+    protected OneMaxMoveEvaluator(OneMaxMoveEvaluator original, Cloner cloner) : base(original, cloner) { }
     protected OneMaxMoveEvaluator()
       : base() {
Index: /branches/CloningRefactoring/HeuristicLab.Problems.OneMax/3.3/MoveEvaluators/OneMaxOneBitflipMoveEvaluator.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Problems.OneMax/3.3/MoveEvaluators/OneMaxOneBitflipMoveEvaluator.cs	(revision 4680)
+++ /branches/CloningRefactoring/HeuristicLab.Problems.OneMax/3.3/MoveEvaluators/OneMaxOneBitflipMoveEvaluator.cs	(revision 4681)
@@ -25,4 +25,5 @@
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.OneMax {
@@ -37,7 +38,14 @@
     }
 
+    [StorableConstructor]
+    protected OneMaxOneBitflipMoveEvaluator(bool deserializing) : base(deserializing) { }
+    protected OneMaxOneBitflipMoveEvaluator(OneMaxOneBitflipMoveEvaluator original, Cloner cloner) : base(original, cloner) { }
     public OneMaxOneBitflipMoveEvaluator()
       : base() {
       Parameters.Add(new LookupParameter<OneBitflipMove>("OneBitflipMove", "The move to evaluate."));
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new OneMaxOneBitflipMoveEvaluator(this, cloner);
     }
 
Index: /branches/CloningRefactoring/HeuristicLab.Problems.OneMax/3.3/OneMaxSolution.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Problems.OneMax/3.3/OneMaxSolution.cs	(revision 4680)
+++ /branches/CloningRefactoring/HeuristicLab.Problems.OneMax/3.3/OneMaxSolution.cs	(revision 4681)
@@ -34,5 +34,5 @@
   [Item("OneMaxSolution", "Represents a OneMax solution.")]
   [StorableClass]
-  public class OneMaxSolution : Item {
+  public sealed class OneMaxSolution : Item {
     public override Image ItemImage {
       get { return HeuristicLab.Common.Resources.VS2008ImageLibrary.Image; }
@@ -67,4 +67,12 @@
     }
 
+    [StorableConstructor]
+    private OneMaxSolution(bool deserializing) : base(deserializing) { }
+    private OneMaxSolution(OneMaxSolution original, Cloner cloner)
+      : base(original, cloner) {
+      binaryVector = cloner.Clone(original.binaryVector);
+      quality = cloner.Clone(original.quality);
+      Initialize();
+    }
     public OneMaxSolution() : base() { }
     public OneMaxSolution(BinaryVector binaryVector, DoubleValue quality)
@@ -74,20 +82,13 @@
       Initialize();
     }
-    [StorableConstructor]
-    private OneMaxSolution(bool deserializing) : base(deserializing) { }
 
     [StorableHook(HookType.AfterDeserialization)]
+    private void AfterDeserialization() {
+      Initialize();
+    }
+
     private void Initialize() {
       if (binaryVector != null) RegisterBinaryVectorEvents();
       if (quality != null) RegisterQualityEvents();
-    }
-
-    public override IDeepCloneable Clone(Cloner cloner) {
-      OneMaxSolution clone = new OneMaxSolution();
-      cloner.RegisterClonedObject(this, clone);
-      clone.binaryVector = (BinaryVector)cloner.Clone(binaryVector);
-      clone.quality = (DoubleValue)cloner.Clone(quality);
-      clone.Initialize();
-      return clone;
     }
 
Index: /branches/CloningRefactoring/HeuristicLab.Problems.OneMax/3.3/OnemaxProblem.cs
===================================================================
--- /branches/CloningRefactoring/HeuristicLab.Problems.OneMax/3.3/OnemaxProblem.cs	(revision 4680)
+++ /branches/CloningRefactoring/HeuristicLab.Problems.OneMax/3.3/OnemaxProblem.cs	(revision 4681)
@@ -112,4 +112,9 @@
     [StorableConstructor]
     private OneMaxProblem(bool deserializing) : base(deserializing) { }
+    private OneMaxProblem(OneMaxProblem original, Cloner cloner)
+      : base(original, cloner) {
+      operators = original.operators.Select(x => (IOperator)cloner.Clone(x)).ToList();
+      AttachEventHandlers();
+    }
     public OneMaxProblem()
       : base() {
@@ -133,8 +138,5 @@
 
     public override IDeepCloneable Clone(Cloner cloner) {
-      OneMaxProblem clone = (OneMaxProblem)base.Clone(cloner);
-      clone.operators = operators.Select(x => (IOperator)cloner.Clone(x)).ToList();
-      clone.AttachEventHandlers();
-      return clone;
+      return new OneMaxProblem(this, cloner);
     }
 
@@ -200,5 +202,5 @@
     #region Helpers
     [StorableHook(HookType.AfterDeserialization)]
-    private void AfterDeserializationHook() {
+    private void AfterDeserialization() {
       // BackwardsCompatibility3.3
       #region Backwards compatible code (remove with 3.4)
