Index: /trunk/sources/HeuristicLab.Collections/3.3/ObservableArray.cs
===================================================================
--- /trunk/sources/HeuristicLab.Collections/3.3/ObservableArray.cs	(revision 3285)
+++ /trunk/sources/HeuristicLab.Collections/3.3/ObservableArray.cs	(revision 3286)
@@ -32,5 +32,5 @@
   public class ObservableArray<T> : IObservableArray<T> {
     [Storable]
-    private T[] array;
+    protected T[] array;
 
     #region Properties
Index: /trunk/sources/HeuristicLab.Collections/3.3/ObservableCollection.cs
===================================================================
--- /trunk/sources/HeuristicLab.Collections/3.3/ObservableCollection.cs	(revision 3285)
+++ /trunk/sources/HeuristicLab.Collections/3.3/ObservableCollection.cs	(revision 3286)
@@ -31,5 +31,5 @@
   public class ObservableCollection<T> : IObservableCollection<T> {
     [Storable]
-    private List<T> list;
+    protected List<T> list;
 
     #region Properties
Index: /trunk/sources/HeuristicLab.Collections/3.3/ObservableKeyedCollection.cs
===================================================================
--- /trunk/sources/HeuristicLab.Collections/3.3/ObservableKeyedCollection.cs	(revision 3285)
+++ /trunk/sources/HeuristicLab.Collections/3.3/ObservableKeyedCollection.cs	(revision 3286)
@@ -32,5 +32,5 @@
   public abstract class ObservableKeyedCollection<TKey, TItem> : IObservableKeyedCollection<TKey, TItem> {
     [Storable]
-    private Dictionary<TKey, TItem> dict;
+    protected Dictionary<TKey, TItem> dict;
 
     #region Properties
Index: /trunk/sources/HeuristicLab.Collections/3.3/ObservableList.cs
===================================================================
--- /trunk/sources/HeuristicLab.Collections/3.3/ObservableList.cs	(revision 3285)
+++ /trunk/sources/HeuristicLab.Collections/3.3/ObservableList.cs	(revision 3286)
@@ -31,5 +31,5 @@
   public class ObservableList<T> : IObservableList<T> {
     [Storable]
-    private List<T> list;
+    protected List<T> list;
 
     #region Properties
Index: /trunk/sources/HeuristicLab.Collections/3.3/ObservableSet.cs
===================================================================
--- /trunk/sources/HeuristicLab.Collections/3.3/ObservableSet.cs	(revision 3285)
+++ /trunk/sources/HeuristicLab.Collections/3.3/ObservableSet.cs	(revision 3286)
@@ -32,5 +32,5 @@
   public class ObservableSet<T> : IObservableSet<T> {
     [Storable]
-    private HashSet<T> set;
+    protected HashSet<T> set;
 
     #region Properties
Index: /trunk/sources/HeuristicLab.Core/3.3/ItemArray.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.3/ItemArray.cs	(revision 3285)
+++ /trunk/sources/HeuristicLab.Core/3.3/ItemArray.cs	(revision 3286)
@@ -55,6 +55,7 @@
 
     public virtual IDeepCloneable Clone(Cloner cloner) {
-      ItemArray<T> clone = (ItemArray<T>)Activator.CreateInstance(this.GetType(), this.Select(x => (T)cloner.Clone(x)));
+      ItemArray<T> clone = (ItemArray<T>)Activator.CreateInstance(this.GetType());
       cloner.RegisterClonedObject(this, clone);
+      clone.array = this.Select(x => (T)cloner.Clone(x)).ToArray();
       return clone;
     }
Index: /trunk/sources/HeuristicLab.Core/3.3/ItemCollection.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.3/ItemCollection.cs	(revision 3285)
+++ /trunk/sources/HeuristicLab.Core/3.3/ItemCollection.cs	(revision 3286)
@@ -51,6 +51,7 @@
 
     public virtual IDeepCloneable Clone(Cloner cloner) {
-      ItemCollection<T> clone = (ItemCollection<T>)Activator.CreateInstance(this.GetType(), this.Select(x => (T)cloner.Clone(x)));
+      ItemCollection<T> clone = (ItemCollection<T>)Activator.CreateInstance(this.GetType());
       cloner.RegisterClonedObject(this, clone);
+      clone.list = new List<T>(this.Select(x => (T)cloner.Clone(x)));
       return clone;
     }
Index: /trunk/sources/HeuristicLab.Core/3.3/ItemList.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.3/ItemList.cs	(revision 3285)
+++ /trunk/sources/HeuristicLab.Core/3.3/ItemList.cs	(revision 3286)
@@ -55,6 +55,7 @@
 
     public virtual IDeepCloneable Clone(Cloner cloner) {
-      ItemList<T> clone = (ItemList<T>)Activator.CreateInstance(this.GetType(), this.Select(x => (T)cloner.Clone(x)));
+      ItemList<T> clone = (ItemList<T>)Activator.CreateInstance(this.GetType());
       cloner.RegisterClonedObject(this, clone);
+      clone.list = new List<T>(this.Select(x => (T)cloner.Clone(x)));
       return clone;
     }
Index: /trunk/sources/HeuristicLab.Core/3.3/ItemSet.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.3/ItemSet.cs	(revision 3285)
+++ /trunk/sources/HeuristicLab.Core/3.3/ItemSet.cs	(revision 3286)
@@ -54,6 +54,7 @@
 
     public virtual IDeepCloneable Clone(Cloner cloner) {
-      ItemSet<T> clone = (ItemSet<T>)Activator.CreateInstance(this.GetType(), this.Select(x => (T)cloner.Clone(x)));
+      ItemSet<T> clone = (ItemSet<T>)Activator.CreateInstance(this.GetType());
       cloner.RegisterClonedObject(this, clone);
+      clone.set = new HashSet<T>(this.Select(x => (T)cloner.Clone(x)));
       return clone;
     }
Index: /trunk/sources/HeuristicLab.Core/3.3/NamedItemCollection.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.3/NamedItemCollection.cs	(revision 3285)
+++ /trunk/sources/HeuristicLab.Core/3.3/NamedItemCollection.cs	(revision 3286)
@@ -58,6 +58,8 @@
     }
     public virtual IDeepCloneable Clone(Cloner cloner) {
-      NamedItemCollection<T> clone = (NamedItemCollection<T>)Activator.CreateInstance(this.GetType(), this.Select(x => (T)cloner.Clone(x)));
+      NamedItemCollection<T> clone = (NamedItemCollection<T>)Activator.CreateInstance(this.GetType());
       cloner.RegisterClonedObject(this, clone);
+      foreach (string key in dict.Keys)
+        clone.dict.Add(key, (T)cloner.Clone(dict[key]));
       return clone;
     }
Index: /trunk/sources/HeuristicLab.Optimization/3.3/Algorithm.cs
===================================================================
--- /trunk/sources/HeuristicLab.Optimization/3.3/Algorithm.cs	(revision 3285)
+++ /trunk/sources/HeuristicLab.Optimization/3.3/Algorithm.cs	(revision 3286)
@@ -126,13 +126,4 @@
       runs = new RunCollection();
     }
-    internal Algorithm(Algorithm algorithm, Cloner cloner)
-      : base(algorithm.Name, algorithm.Description, (ParameterCollection)cloner.Clone(algorithm.Parameters)) {
-      executionState = algorithm.executionState;
-      executionTime = algorithm.executionTime;
-      problem = (IProblem)cloner.Clone(algorithm.problem);
-      runsCounter = algorithm.runsCounter;
-      runs = (RunCollection)cloner.Clone(algorithm.runs);
-      Initialize();
-    }
     [StorableConstructor]
     protected Algorithm(bool deserializing) : base(deserializing) { }
@@ -154,4 +145,19 @@
       return clone;
     }
+    protected virtual void Clone(IDeepCloneable clone, Cloner cloner) {
+      Algorithm algorithm = clone as Algorithm;
+      if (algorithm != null) {
+        algorithm.name = name;
+        algorithm.description = description;
+        foreach (IParameter param in Parameters)
+          algorithm.Parameters.Add((IParameter)cloner.Clone(param));
+        algorithm.executionState = executionState;
+        algorithm.executionTime = executionTime;
+        algorithm.problem = (IProblem)cloner.Clone(problem);
+        algorithm.runsCounter = runsCounter;
+        algorithm.runs = (RunCollection)cloner.Clone(runs);
+        algorithm.Initialize();
+      }
+    }
 
     public virtual void Prepare() {
Index: /trunk/sources/HeuristicLab.Optimization/3.3/EngineAlgorithm.cs
===================================================================
--- /trunk/sources/HeuristicLab.Optimization/3.3/EngineAlgorithm.cs	(revision 3285)
+++ /trunk/sources/HeuristicLab.Optimization/3.3/EngineAlgorithm.cs	(revision 3286)
@@ -112,11 +112,4 @@
       Initialize();
     }
-    internal EngineAlgorithm(EngineAlgorithm algorithm, Cloner cloner)
-      : base(algorithm, cloner) {
-      globalScope = (IScope)cloner.Clone(algorithm.globalScope);
-      operatorGraph = (OperatorGraph)cloner.Clone(algorithm.operatorGraph);
-      engine = (IEngine)cloner.Clone(algorithm.engine);
-      Initialize();
-    }
     [StorableConstructor]
     protected EngineAlgorithm(bool deserializing) : base(deserializing) { }
@@ -142,7 +135,21 @@
       return clone;
     }
+    protected override void Clone(IDeepCloneable clone, Cloner cloner) {
+      base.Clone(clone, cloner);
+      EngineAlgorithm algorithm = clone as EngineAlgorithm;
+      if (algorithm != null) {
+        algorithm.globalScope = (IScope)cloner.Clone(globalScope);
+        algorithm.engine = (IEngine)cloner.Clone(engine);
+        algorithm.operatorGraph = (OperatorGraph)cloner.Clone(operatorGraph);
+        algorithm.Initialize();
+      }
+    }
 
     public UserDefinedAlgorithm CreateUserDefinedAlgorithm() {
-      return new UserDefinedAlgorithm(this, new Cloner());
+      UserDefinedAlgorithm algorithm = new UserDefinedAlgorithm();
+      Cloner cloner = new Cloner();
+      cloner.RegisterClonedObject(this, algorithm);
+      Clone(algorithm, cloner);
+      return algorithm;
     }
 
Index: /trunk/sources/HeuristicLab.Optimization/3.3/UserDefinedAlgorithm.cs
===================================================================
--- /trunk/sources/HeuristicLab.Optimization/3.3/UserDefinedAlgorithm.cs	(revision 3285)
+++ /trunk/sources/HeuristicLab.Optimization/3.3/UserDefinedAlgorithm.cs	(revision 3286)
@@ -52,5 +52,4 @@
     public UserDefinedAlgorithm(string name) : base(name) { }
     public UserDefinedAlgorithm(string name, string description) : base(name, description) { }
-    internal UserDefinedAlgorithm(EngineAlgorithm algorithm, Cloner cloner) : base(algorithm, cloner) { }
     [StorableConstructor]
     private UserDefinedAlgorithm(bool deserializing) : base(deserializing) { }
