Index: branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/BasicProblem.cs
===================================================================
--- branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/BasicProblem.cs	(revision 16075)
+++ branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/BasicProblem.cs	(revision 16956)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2019 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
@@ -23,11 +23,12 @@
 using System.Collections.Generic;
 using System.Linq;
+using HEAL.Attic;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
+using HeuristicLab.Data;
 using HeuristicLab.Parameters;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 
 namespace HeuristicLab.Optimization {
-  [StorableClass]
+  [StorableType("D877082E-9E77-4CB1-ABDB-35F63878E116")]
   public abstract class BasicProblem<TEncoding, TEvaluator> : HeuristicOptimizationProblem<TEvaluator, ISolutionCreator>, IProblemDefinition, IStorableContent
     where TEncoding : class, IEncoding
@@ -78,5 +79,5 @@
 
     [StorableConstructor]
-    protected BasicProblem(bool deserializing) : base(deserializing) { }
+    protected BasicProblem(StorableConstructorFlag _) : base(_) { }
     [StorableHook(HookType.AfterDeserialization)]
     private void AfterDeserialization() {
@@ -157,4 +158,19 @@
       OnOperatorsChanged();
     }
+
+    protected override IEnumerable<KeyValuePair<string, IItem>> GetCollectedValues(IValueParameter param) {
+      if (param.Value == null) yield break;
+      if (param.GetsCollected) {
+        if (param == EncodingParameter) // store only the name of the encoding
+          yield return new KeyValuePair<string, IItem>(String.Empty, new StringValue(EncodingParameter.Value.Name));
+        else yield return new KeyValuePair<string, IItem>(String.Empty, param.Value);
+      }
+      var parameterizedItem = param.Value as IParameterizedItem;
+      if (parameterizedItem != null) {
+        var children = new Dictionary<string, IItem>();
+        parameterizedItem.CollectParameterValues(children);
+        foreach (var child in children) yield return child;
+      }
+    }
   }
 }
Index: branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/Encoding.cs
===================================================================
--- branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/Encoding.cs	(revision 16075)
+++ branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/Encoding.cs	(revision 16956)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2019 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
@@ -23,12 +23,12 @@
 using System.Collections.Generic;
 using System.Linq;
+using HEAL.Attic;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Parameters;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 
 namespace HeuristicLab.Optimization {
   [Item("Encoding", "Base class for describing different encodings.")]
-  [StorableClass]
+  [StorableType("395B1372-FA54-4649-9EBE-5402A0AA9494")]
   public abstract class Encoding<T> : ParameterizedNamedItem, IEncoding
     where T : class,ISolutionCreator {
@@ -84,5 +84,5 @@
 
     [StorableConstructor]
-    protected Encoding(bool deserializing) : base(deserializing) { }
+    protected Encoding(StorableConstructorFlag _) : base(_) { }
     protected Encoding(Encoding<T> original, Cloner cloner)
       : base(original, cloner) {
@@ -92,5 +92,7 @@
     protected Encoding(string name)
       : base(name) {
-      Parameters.Add(new FixedValueParameter<ReadOnlyItemSet<IOperator>>(name + ".Operators", "The operators that the encoding specifies.", encodingOperators.AsReadOnly()));
+      Parameters.Add(new FixedValueParameter<ReadOnlyItemSet<IOperator>>(name + ".Operators", "The operators that the encoding specifies.", encodingOperators.AsReadOnly()) {
+        GetsCollected = false
+      });
     }
 
Index: branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/Individuals/Individual.cs
===================================================================
--- branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/Individuals/Individual.cs	(revision 16075)
+++ branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/Individuals/Individual.cs	(revision 16956)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2019 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
@@ -24,10 +24,19 @@
 using System.Linq;
 using HeuristicLab.Core;
+using HEAL.Attic;
 
 namespace HeuristicLab.Optimization {
+  [StorableType("b1388a9d-c85c-49f6-9916-ef4c93dffee0")]
   public abstract class Individual {
+    [Storable]
     protected IEncoding Encoding { get; private set; }
+    [Storable]
     protected IScope Scope { get; private set; }
     public string Name { get { return Encoding.Name; } }
+
+
+    [StorableConstructor]
+    protected Individual(StorableConstructorFlag _) {
+    }
 
     protected Individual(IEncoding encoding, IScope scope) {
Index: branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/Individuals/MultiEncodingIndividual.cs
===================================================================
--- branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/Individuals/MultiEncodingIndividual.cs	(revision 16075)
+++ branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/Individuals/MultiEncodingIndividual.cs	(revision 16956)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2019 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
@@ -21,13 +21,18 @@
 
 using System;
-using System.Collections.Generic;
 using System.Linq;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
+using HEAL.Attic;
 
 namespace HeuristicLab.Optimization {
+  [StorableType("ec7201c7-3c9f-4a93-966b-d848d9538202")]
   public sealed class MultiEncodingIndividual : Individual {
     private new MultiEncoding Encoding {
       get { return (MultiEncoding)base.Encoding; }
+    }
+
+    [StorableConstructor]
+    private MultiEncodingIndividual(StorableConstructorFlag _) : base(_) {
     }
 
Index: branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/Individuals/SingleEncodingIndividual.cs
===================================================================
--- branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/Individuals/SingleEncodingIndividual.cs	(revision 16075)
+++ branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/Individuals/SingleEncodingIndividual.cs	(revision 16956)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2019 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
@@ -23,7 +23,13 @@
 using HeuristicLab.Common;
 using HeuristicLab.Core;
+using HEAL.Attic;
 
 namespace HeuristicLab.Optimization {
+  [StorableType("13a86161-9e5c-442b-ab1c-18018b1d9708")]
   public sealed class SingleEncodingIndividual : Individual {
+    [StorableConstructor]
+    private SingleEncodingIndividual(StorableConstructorFlag _) : base(_) {
+    }
+
     public SingleEncodingIndividual(IEncoding encoding, IScope scope)
       : base(encoding, scope) {
Index: branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/Interfaces/IEncoding.cs
===================================================================
--- branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/Interfaces/IEncoding.cs	(revision 16075)
+++ branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/Interfaces/IEncoding.cs	(revision 16956)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2019 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
@@ -23,6 +23,8 @@
 using System.Collections.Generic;
 using HeuristicLab.Core;
+using HEAL.Attic;
 
 namespace HeuristicLab.Optimization {
+  [StorableType("d70b2675-246c-489c-a91b-b2e19a1616a3")]
   public interface IEncoding : IParameterizedNamedItem {
     ISolutionCreator SolutionCreator { get; set; }
Index: branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/Interfaces/IEncodingOperator.cs
===================================================================
--- branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/Interfaces/IEncodingOperator.cs	(revision 16075)
+++ branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/Interfaces/IEncodingOperator.cs	(revision 16956)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2019 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
@@ -21,6 +21,8 @@
 
 using HeuristicLab.Core;
+using HEAL.Attic;
 
 namespace HeuristicLab.Optimization {
+  [StorableType("20faaf8b-dd4f-4f0e-a772-4c4dec7fcccb")]
   public interface IEncodingOperator : IOperator {
     ILookupParameter<IEncoding> EncodingParameter { get; }
Index: branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/Interfaces/IMultiEncodingOperator.cs
===================================================================
--- branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/Interfaces/IMultiEncodingOperator.cs	(revision 16075)
+++ branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/Interfaces/IMultiEncodingOperator.cs	(revision 16956)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2019 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
@@ -21,6 +21,8 @@
 
 using HeuristicLab.Core;
+using HEAL.Attic;
 
 namespace HeuristicLab.Optimization {
+  [StorableType("e8b66565-263c-49f9-9c08-29b820bf3e5a")]
   public interface IMultiEncodingOperator : IOperator {
     void AddEncoding(IEncoding encoding);
Index: branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/Interfaces/IMultiObjectiveProblemDefinition.cs
===================================================================
--- branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/Interfaces/IMultiObjectiveProblemDefinition.cs	(revision 16075)
+++ branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/Interfaces/IMultiObjectiveProblemDefinition.cs	(revision 16956)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2019 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
@@ -21,6 +21,8 @@
 
 using HeuristicLab.Core;
+using HEAL.Attic;
 
 namespace HeuristicLab.Optimization {
+  [StorableType("39eacdb5-80a0-425d-902a-00eb3e1d6610")]
   public interface IMultiObjectiveProblemDefinition : IProblemDefinition {
     bool[] Maximization { get; }
Index: branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/Interfaces/IProblemDefinition.cs
===================================================================
--- branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/Interfaces/IProblemDefinition.cs	(revision 16075)
+++ branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/Interfaces/IProblemDefinition.cs	(revision 16956)
@@ -1,5 +1,6 @@
-﻿#region License Information
+﻿using HEAL.Attic;
+#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2019 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
@@ -21,4 +22,5 @@
 
 namespace HeuristicLab.Optimization {
+  [StorableType("747a3cea-b9ba-4322-a5c2-050cd7e16e2a")]
   public interface IProblemDefinition {
     IEncoding Encoding { get; }
Index: branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/Interfaces/ISingleObjectiveMoveOperator.cs
===================================================================
--- branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/Interfaces/ISingleObjectiveMoveOperator.cs	(revision 16075)
+++ branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/Interfaces/ISingleObjectiveMoveOperator.cs	(revision 16956)
@@ -1,5 +1,6 @@
-﻿#region License Information
+﻿using HEAL.Attic;
+#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2019 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
@@ -21,4 +22,5 @@
 
 namespace HeuristicLab.Optimization {
+  [StorableType("82423b2f-1343-4a21-847c-e69bdcde4861")]
   public interface ISingleObjectiveMoveOperator : IMoveOperator, ISingleObjectiveOperator {
   }
Index: branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/Interfaces/ISingleObjectiveProblemDefinition.cs
===================================================================
--- branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/Interfaces/ISingleObjectiveProblemDefinition.cs	(revision 16075)
+++ branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/Interfaces/ISingleObjectiveProblemDefinition.cs	(revision 16956)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2019 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
@@ -22,6 +22,8 @@
 using System.Collections.Generic;
 using HeuristicLab.Core;
+using HEAL.Attic;
 
 namespace HeuristicLab.Optimization {
+  [StorableType("7ec7bf7e-aaa7-4681-828b-3401cf67e2b3")]
   public interface ISingleObjectiveProblemDefinition : IProblemDefinition {
     bool Maximization { get; }
Index: branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/Interfaces/internal/IMultiObjectiveAnalysisOperator.cs
===================================================================
--- branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/Interfaces/internal/IMultiObjectiveAnalysisOperator.cs	(revision 16075)
+++ branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/Interfaces/internal/IMultiObjectiveAnalysisOperator.cs	(revision 16956)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2019 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
@@ -22,6 +22,8 @@
 using System;
 using HeuristicLab.Core;
+using HEAL.Attic;
 
 namespace HeuristicLab.Optimization {
+  [StorableType("c9325602-3262-48a4-8985-03657fb0b34f")]
   internal interface IMultiObjectiveAnalysisOperator : IEncodingOperator, IAnalyzer, IMultiObjectiveOperator {
     Action<Individual[], double[][], ResultCollection, IRandom> AnalyzeAction { get; set; }
Index: branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/Interfaces/internal/IMultiObjectiveEvaluationOperator.cs
===================================================================
--- branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/Interfaces/internal/IMultiObjectiveEvaluationOperator.cs	(revision 16075)
+++ branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/Interfaces/internal/IMultiObjectiveEvaluationOperator.cs	(revision 16956)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2019 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
@@ -22,6 +22,8 @@
 using System;
 using HeuristicLab.Core;
+using HEAL.Attic;
 
 namespace HeuristicLab.Optimization {
+  [StorableType("89da568c-70a2-48fb-8e6b-ea078bb6fc3f")]
   internal interface IMultiObjectiveEvaluationOperator : IMultiObjectiveEvaluator, IEncodingOperator {
     Func<Individual, IRandom, double[]> EvaluateFunc { get; set; }
Index: branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/Interfaces/internal/INeighborBasedOperator.cs
===================================================================
--- branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/Interfaces/internal/INeighborBasedOperator.cs	(revision 16075)
+++ branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/Interfaces/internal/INeighborBasedOperator.cs	(revision 16956)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2019 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
@@ -23,6 +23,8 @@
 using System.Collections.Generic;
 using HeuristicLab.Core;
+using HEAL.Attic;
 
 namespace HeuristicLab.Optimization {
+  [StorableType("fda56e0b-9392-4711-9af1-55211bfa24ac")]
   internal interface INeighborBasedOperator : IEncodingOperator {
     Func<Individual, IRandom, IEnumerable<Individual>> GetNeighborsFunc { get; set; }
Index: branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/Interfaces/internal/ISingleObjectiveAnalysisOperator.cs
===================================================================
--- branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/Interfaces/internal/ISingleObjectiveAnalysisOperator.cs	(revision 16075)
+++ branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/Interfaces/internal/ISingleObjectiveAnalysisOperator.cs	(revision 16956)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2019 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
@@ -22,6 +22,8 @@
 using System;
 using HeuristicLab.Core;
+using HEAL.Attic;
 
 namespace HeuristicLab.Optimization {
+  [StorableType("9731981c-10c6-4850-9308-a4720ac07da7")]
   internal interface ISingleObjectiveAnalysisOperator : IEncodingOperator, ISingleObjectiveOperator {
     Action<Individual[], double[], ResultCollection, IRandom> AnalyzeAction { get; set; }
Index: branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/Interfaces/internal/ISingleObjectiveEvaluationOperator.cs
===================================================================
--- branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/Interfaces/internal/ISingleObjectiveEvaluationOperator.cs	(revision 16075)
+++ branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/Interfaces/internal/ISingleObjectiveEvaluationOperator.cs	(revision 16956)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2019 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
@@ -22,6 +22,8 @@
 using System;
 using HeuristicLab.Core;
+using HEAL.Attic;
 
 namespace HeuristicLab.Optimization {
+  [StorableType("5a9cf334-4815-4f0e-a2f8-f3d4edfcc829")]
   internal interface ISingleObjectiveEvaluationOperator : ISingleObjectiveEvaluator, IEncodingOperator {
     Func<Individual, IRandom, double> EvaluateFunc { get; set; }
Index: branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/MultiEncoding.cs
===================================================================
--- branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/MultiEncoding.cs	(revision 16075)
+++ branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/MultiEncoding.cs	(revision 16956)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2019 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
@@ -25,10 +25,10 @@
 using HeuristicLab.Common;
 using HeuristicLab.Core;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HEAL.Attic;
 using HeuristicLab.PluginInfrastructure;
 
 namespace HeuristicLab.Optimization {
   [Item("MultiEncoding", "Describes a combined encoding consisting of multiple simpler encodings.")]
-  [StorableClass]
+  [StorableType("359E2173-4D0C-40E5-A2F3-E42E59840345")]
   public sealed class MultiEncoding : Encoding<MultiEncodingCreator> {
 
@@ -41,6 +41,5 @@
 
     [StorableConstructor]
-    private MultiEncoding(bool deserializing)
-      : base(deserializing) {
+    private MultiEncoding(StorableConstructorFlag _) : base(_) {
       encodings = new List<IEncoding>();
     }
Index: branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/MultiObjectiveBasicProblem.cs
===================================================================
--- branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/MultiObjectiveBasicProblem.cs	(revision 16075)
+++ branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/MultiObjectiveBasicProblem.cs	(revision 16956)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2019 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
@@ -20,19 +20,17 @@
 #endregion
 
-using System;
-using System.Collections.Generic;
 using System.Linq;
+using HEAL.Attic;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Data;
 using HeuristicLab.Parameters;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 
 namespace HeuristicLab.Optimization {
-  [StorableClass]
+  [StorableType("6F2EC371-0309-4848-B7B1-C9B9C7E3436F")]
   public abstract class MultiObjectiveBasicProblem<TEncoding> : BasicProblem<TEncoding, MultiObjectiveEvaluator>, IMultiObjectiveHeuristicOptimizationProblem, IMultiObjectiveProblemDefinition
   where TEncoding : class, IEncoding {
     [StorableConstructor]
-    protected MultiObjectiveBasicProblem(bool deserializing) : base(deserializing) { }
+    protected MultiObjectiveBasicProblem(StorableConstructorFlag _) : base(_) { }
 
     protected MultiObjectiveBasicProblem(MultiObjectiveBasicProblem<TEncoding> original, Cloner cloner)
@@ -61,5 +59,4 @@
     
     protected override void OnOperatorsChanged() {
-      base.OnOperatorsChanged();
       if (Encoding != null) {
         PruneSingleObjectiveOperators(Encoding);
@@ -71,4 +68,5 @@
         }
       }
+      base.OnOperatorsChanged();
     }
 
Index: branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/Operators/MultiEncodingCreator.cs
===================================================================
--- branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/Operators/MultiEncodingCreator.cs	(revision 16075)
+++ branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/Operators/MultiEncodingCreator.cs	(revision 16956)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2019 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
@@ -22,20 +22,36 @@
 using System;
 using System.Linq;
+using HEAL.Attic;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Parameters;
 
 namespace HeuristicLab.Optimization {
   [Item("MultiEncodingCreator", "Contains solution creators that together create a multi-encoding.")]
-  [StorableClass]
-  public sealed class MultiEncodingCreator : MultiEncodingOperator<ISolutionCreator>, ISolutionCreator {
+  [StorableType("E261B506-6F74-4BC4-8164-5ACE20FBC319")]
+  public sealed class MultiEncodingCreator : MultiEncodingOperator<ISolutionCreator>, ISolutionCreator, IStochasticOperator {
+    public ILookupParameter<IRandom> RandomParameter {
+      get { return (ILookupParameter<IRandom>)Parameters["Random"]; }
+    }
+
+    public override string OperatorPrefix => "Creator";
+
     [StorableConstructor]
-    private MultiEncodingCreator(bool deserializing) : base(deserializing) { }
+    private MultiEncodingCreator(StorableConstructorFlag _) : base(_) { }
 
     private MultiEncodingCreator(MultiEncodingCreator original, Cloner cloner) : base(original, cloner) { }
-    public MultiEncodingCreator() { }
+    public MultiEncodingCreator() {
+      Parameters.Add(new LookupParameter<IRandom>("Random", "The random number generator used by the individual operators."));
+    }
 
     public override IDeepCloneable Clone(Cloner cloner) {
       return new MultiEncodingCreator(this, cloner);
+    }
+
+    [StorableHook(HookType.AfterDeserialization)]
+    private void AfterDeserialization() {
+      if (!Parameters.ContainsKey("Random")) {
+        Parameters.Add(new LookupParameter<IRandom>("Random", "The random number generator used by the individual operators."));
+      }
     }
 
Index: branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/Operators/MultiEncodingCrossover.cs
===================================================================
--- branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/Operators/MultiEncodingCrossover.cs	(revision 16075)
+++ branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/Operators/MultiEncodingCrossover.cs	(revision 16956)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2019 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
@@ -20,18 +20,34 @@
 #endregion
 
+using HEAL.Attic;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Parameters;
 
 namespace HeuristicLab.Optimization {
   [Item("MultiEncoding Crossover", "Applies different crossovers to cross a multi-encoding.")]
-  [StorableClass]
-  public sealed class MultiEncodingCrossover : MultiEncodingOperator<ICrossover>, ICrossover {
+  [StorableType("BB0A04E2-899D-460C-82A2-5E4CEEDE8996")]
+  public sealed class MultiEncodingCrossover : MultiEncodingOperator<ICrossover>, ICrossover, IStochasticOperator {
+    public ILookupParameter<IRandom> RandomParameter {
+      get { return (ILookupParameter<IRandom>)Parameters["Random"]; }
+    }
+
+    public override string OperatorPrefix => "Crossover";
+
     [StorableConstructor]
-    private MultiEncodingCrossover(bool deserializing) : base(deserializing) { }
+    private MultiEncodingCrossover(StorableConstructorFlag _) : base(_) { }
     private MultiEncodingCrossover(MultiEncodingCrossover original, Cloner cloner) : base(original, cloner) { }
-    public MultiEncodingCrossover() { }
+    public MultiEncodingCrossover() {
+      Parameters.Add(new LookupParameter<IRandom>("Random", "The random number generator used by the individual operators."));
+    }
 
     public override IDeepCloneable Clone(Cloner cloner) { return new MultiEncodingCrossover(this, cloner); }
+
+    [StorableHook(HookType.AfterDeserialization)]
+    private void AfterDeserialization() {
+      if (!Parameters.ContainsKey("Random")) {
+        Parameters.Add(new LookupParameter<IRandom>("Random", "The random number generator used by the individual operators."));
+      }
+    }
   }
 }
Index: branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/Operators/MultiEncodingManipulator.cs
===================================================================
--- branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/Operators/MultiEncodingManipulator.cs	(revision 16075)
+++ branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/Operators/MultiEncodingManipulator.cs	(revision 16956)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2019 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
@@ -20,20 +20,36 @@
 #endregion
 
+using HEAL.Attic;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Parameters;
 
 namespace HeuristicLab.Optimization {
   [Item("MultiEncoding Manipulator", "Applies different manipulators to change a multi-encoding.")]
-  [StorableClass]
-  public sealed class MultiEncodingManipulator : MultiEncodingOperator<IManipulator>, IManipulator {
+  [StorableType("574D0530-47E8-4FD9-8AC8-B8EA2DE3C203")]
+  public sealed class MultiEncodingManipulator : MultiEncodingOperator<IManipulator>, IManipulator, IStochasticOperator {
+    public ILookupParameter<IRandom> RandomParameter {
+      get { return (ILookupParameter<IRandom>)Parameters["Random"]; }
+    }
+
+    public override string OperatorPrefix => "Manipulator";
+
     [StorableConstructor]
-    private MultiEncodingManipulator(bool deserializing) : base(deserializing) { }
+    private MultiEncodingManipulator(StorableConstructorFlag _) : base(_) { }
     private MultiEncodingManipulator(MultiEncodingManipulator original, Cloner cloner)
       : base(original, cloner) { }
-    public MultiEncodingManipulator() { }
+    public MultiEncodingManipulator() {
+      Parameters.Add(new LookupParameter<IRandom>("Random", "The random number generator used by the individual operators."));
+    }
 
     public override IDeepCloneable Clone(Cloner cloner) { return new MultiEncodingManipulator(this, cloner); }
 
+    [StorableHook(HookType.AfterDeserialization)]
+    private void AfterDeserialization() {
+      if (!Parameters.ContainsKey("Random")) {
+        Parameters.Add(new LookupParameter<IRandom>("Random", "The random number generator used by the individual operators."));
+      }
+    }
+
   }
 }
Index: branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/Operators/MultiEncodingOperator.cs
===================================================================
--- branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/Operators/MultiEncodingOperator.cs	(revision 16075)
+++ branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/Operators/MultiEncodingOperator.cs	(revision 16956)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2019 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
@@ -23,12 +23,12 @@
 using System.Collections.Generic;
 using System.Linq;
+using HEAL.Attic;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Operators;
 using HeuristicLab.Parameters;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 
 namespace HeuristicLab.Optimization {
-  [StorableClass]
+  [StorableType("43619638-9D00-4951-8138-8CCD0786E784")]
   public abstract class MultiEncodingOperator<T> : Operator, IMultiEncodingOperator where T : class,IOperator {
     private List<IEncoding> encodings = new List<IEncoding>();
@@ -39,9 +39,8 @@
     }
 
+    public abstract string OperatorPrefix { get; }
+
     [StorableConstructor]
-    protected MultiEncodingOperator(bool deserializing)
-      : base(deserializing) {
-    }
-
+    protected MultiEncodingOperator(StorableConstructorFlag _) : base(_) { }
     protected MultiEncodingOperator(MultiEncodingOperator<T> original, Cloner cloner)
       : base(original, cloner) {
@@ -50,26 +49,37 @@
         encoding.OperatorsChanged += Encoding_OperatorsChanged;
     }
-
     protected MultiEncodingOperator() : base() { }
 
     [StorableHook(HookType.AfterDeserialization)]
     private void AfterDeserialization() {
-      foreach (var encoding in encodings)
+      foreach (var encoding in encodings) {
+        // BackwardsCompatibility3.3
+        #region Backwards compatible code, remove with 3.4
+        if (Parameters.ContainsKey(encoding.Name) && !Parameters.ContainsKey(OperatorPrefix + "." + encoding.Name)) {
+          var oldParam = (IConstrainedValueParameter<T>)Parameters[encoding.Name];
+          var selected = oldParam.Value;
+          Parameters.Remove(oldParam);
+          var newParam = new ConstrainedValueParameter<T>(OperatorPrefix + "." + encoding.Name, new ItemSet<T>(oldParam.ValidValues));
+          newParam.Value = selected;
+          Parameters.Add(newParam);
+          oldParam.ValidValues.Clear();
+        }
+        #endregion
         encoding.OperatorsChanged += Encoding_OperatorsChanged;
+      }
     }
 
-
     public override IOperation Apply() {
-      var operations = Parameters.Select(p => p.ActualValue).OfType<IOperator>().Select(op => ExecutionContext.CreateOperation(op));
+      var operations = Parameters.Select(p => p.ActualValue).OfType<IOperator>().Select(op => ExecutionContext.CreateChildOperation(op));
       return new OperationCollection(operations);
     }
 
     public virtual void AddEncoding(IEncoding encoding) {
-      if (Parameters.ContainsKey(encoding.Name)) throw new ArgumentException(string.Format("Encoding {0} was already added.", encoding.Name));
+      if (Parameters.ContainsKey(OperatorPrefix + "." + encoding.Name)) throw new ArgumentException(string.Format("Encoding {0} was already added.", encoding.Name));
 
       encodings.Add(encoding);
       encoding.OperatorsChanged += Encoding_OperatorsChanged;
 
-      var param = new ConstrainedValueParameter<T>(encoding.Name, new ItemSet<T>(encoding.Operators.OfType<T>()));
+      var param = new ConstrainedValueParameter<T>(OperatorPrefix + "." + encoding.Name, new ItemSet<T>(encoding.Operators.OfType<T>()));
       param.Value = param.ValidValues.First();
       Parameters.Add(param);
@@ -79,11 +89,11 @@
       if (!encodings.Remove(encoding)) throw new ArgumentException(string.Format("Encoding {0} was not added to the MultiEncoding.", encoding.Name));
       encoding.OperatorsChanged -= Encoding_OperatorsChanged;
-      return Parameters.Remove(encoding.Name);
+      return Parameters.Remove(OperatorPrefix + "." + encoding.Name);
     }
 
     protected IConstrainedValueParameter<T> GetParameter(IEncoding encoding) {
-      if (!Parameters.ContainsKey(encoding.Name)) throw new ArgumentException(string.Format("Encoding {0} was not added to the MultiEncoding.", encoding.Name));
+      if (!Parameters.ContainsKey(OperatorPrefix + "." + encoding.Name)) throw new ArgumentException(string.Format("Encoding {0} was not added to the MultiEncoding.", encoding.Name));
 
-      return (IConstrainedValueParameter<T>)Parameters[encoding.Name];
+      return (IConstrainedValueParameter<T>)Parameters[OperatorPrefix + "." + encoding.Name];
     }
 
Index: branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/Operators/MultiObjectiveAnalyzer.cs
===================================================================
--- branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/Operators/MultiObjectiveAnalyzer.cs	(revision 16075)
+++ branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/Operators/MultiObjectiveAnalyzer.cs	(revision 16956)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2019 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
@@ -28,9 +28,9 @@
 using HeuristicLab.Operators;
 using HeuristicLab.Parameters;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HEAL.Attic;
 
 namespace HeuristicLab.Optimization {
   [Item("Multi-objective Analyzer", "Calls the Analyze method of the problem definition.")]
-  [StorableClass]
+  [StorableType("903FE3D1-3179-4EA5-A7E1-63DE26239F9B")]
   public class MultiObjectiveAnalyzer : SingleSuccessorOperator, IMultiObjectiveAnalysisOperator, IStochasticOperator {
     public bool EnabledByDefault { get { return true; } }
@@ -55,5 +55,5 @@
 
     [StorableConstructor]
-    protected MultiObjectiveAnalyzer(bool deserializing) : base(deserializing) { }
+    protected MultiObjectiveAnalyzer(StorableConstructorFlag _) : base(_) { }
     protected MultiObjectiveAnalyzer(MultiObjectiveAnalyzer original, Cloner cloner) : base(original, cloner) { }
     public MultiObjectiveAnalyzer() {
Index: branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/Operators/MultiObjectiveEvaluator.cs
===================================================================
--- branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/Operators/MultiObjectiveEvaluator.cs	(revision 16075)
+++ branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/Operators/MultiObjectiveEvaluator.cs	(revision 16956)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2019 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
@@ -26,9 +26,9 @@
 using HeuristicLab.Operators;
 using HeuristicLab.Parameters;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HEAL.Attic;
 
 namespace HeuristicLab.Optimization {
   [Item("Multi-objective Evaluator", "Calls the Evaluate method of the problem definition and writes the return value into the scope.")]
-  [StorableClass]
+  [StorableType("C5605ED8-0ED2-4C7B-97A1-E7EB68A4FDBF")]
   public class MultiObjectiveEvaluator : InstrumentedOperator, IMultiObjectiveEvaluationOperator, IStochasticOperator {
 
@@ -48,5 +48,5 @@
 
     [StorableConstructor]
-    protected MultiObjectiveEvaluator(bool deserializing) : base(deserializing) { }
+    protected MultiObjectiveEvaluator(StorableConstructorFlag _) : base(_) { }
     protected MultiObjectiveEvaluator(MultiObjectiveEvaluator original, Cloner cloner) : base(original, cloner) { }
     public MultiObjectiveEvaluator() {
Index: branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/Operators/SingleObjectiveAnalyzer.cs
===================================================================
--- branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/Operators/SingleObjectiveAnalyzer.cs	(revision 16075)
+++ branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/Operators/SingleObjectiveAnalyzer.cs	(revision 16956)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2019 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
@@ -28,9 +28,9 @@
 using HeuristicLab.Operators;
 using HeuristicLab.Parameters;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HEAL.Attic;
 
 namespace HeuristicLab.Optimization {
   [Item("Single-objective Analyzer", "Calls the script's Analyze method to be able to write into the results collection.")]
-  [StorableClass]
+  [StorableType("3D20F8E2-CE11-4021-A05B-CFCB02C0FD6F")]
   public sealed class SingleObjectiveAnalyzer : SingleSuccessorOperator, ISingleObjectiveAnalysisOperator, IAnalyzer, IStochasticOperator {
     public bool EnabledByDefault { get { return true; } }
@@ -55,5 +55,5 @@
 
     [StorableConstructor]
-    private SingleObjectiveAnalyzer(bool deserializing) : base(deserializing) { }
+    private SingleObjectiveAnalyzer(StorableConstructorFlag _) : base(_) { }
     private SingleObjectiveAnalyzer(SingleObjectiveAnalyzer original, Cloner cloner) : base(original, cloner) { }
     public SingleObjectiveAnalyzer() {
Index: branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/Operators/SingleObjectiveEvaluator.cs
===================================================================
--- branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/Operators/SingleObjectiveEvaluator.cs	(revision 16075)
+++ branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/Operators/SingleObjectiveEvaluator.cs	(revision 16956)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2019 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
@@ -26,9 +26,9 @@
 using HeuristicLab.Operators;
 using HeuristicLab.Parameters;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HEAL.Attic;
 
 namespace HeuristicLab.Optimization {
   [Item("Single-objective Evaluator", "Calls the script's Evaluate method to get the quality value of the parameter vector.")]
-  [StorableClass]
+  [StorableType("E8914B68-D0D7-407F-8D58-002FDF2F45CF")]
   public sealed class SingleObjectiveEvaluator : InstrumentedOperator, ISingleObjectiveEvaluationOperator, IStochasticOperator {
 
@@ -48,5 +48,5 @@
 
     [StorableConstructor]
-    private SingleObjectiveEvaluator(bool deserializing) : base(deserializing) { }
+    private SingleObjectiveEvaluator(StorableConstructorFlag _) : base(_) { }
     private SingleObjectiveEvaluator(SingleObjectiveEvaluator original, Cloner cloner) : base(original, cloner) { }
     public SingleObjectiveEvaluator() {
Index: branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/Operators/SingleObjectiveImprover.cs
===================================================================
--- branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/Operators/SingleObjectiveImprover.cs	(revision 16075)
+++ branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/Operators/SingleObjectiveImprover.cs	(revision 16956)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2019 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
@@ -28,9 +28,9 @@
 using HeuristicLab.Operators;
 using HeuristicLab.Parameters;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HEAL.Attic;
 
 namespace HeuristicLab.Optimization {
   [Item("Single-objective Improver", "Improves a solution by calling GetNeighbors and Evaluate of the corresponding problem definition.")]
-  [StorableClass]
+  [StorableType("7A917E09-920C-4B47-9599-67371101B35F")]
   public sealed class SingleObjectiveImprover : SingleSuccessorOperator, INeighborBasedOperator, IImprovementOperator, ISingleObjectiveEvaluationOperator, IStochasticOperator {
     public ILookupParameter<IRandom> RandomParameter {
@@ -66,5 +66,5 @@
 
     [StorableConstructor]
-    private SingleObjectiveImprover(bool deserializing) : base(deserializing) { }
+    private SingleObjectiveImprover(StorableConstructorFlag _) : base(_) { }
     private SingleObjectiveImprover(SingleObjectiveImprover original, Cloner cloner) : base(original, cloner) { }
     public SingleObjectiveImprover() {
Index: branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/Operators/SingleObjectiveMoveEvaluator.cs
===================================================================
--- branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/Operators/SingleObjectiveMoveEvaluator.cs	(revision 16075)
+++ branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/Operators/SingleObjectiveMoveEvaluator.cs	(revision 16956)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2019 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
@@ -26,9 +26,9 @@
 using HeuristicLab.Operators;
 using HeuristicLab.Parameters;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HEAL.Attic;
 
 namespace HeuristicLab.Optimization {
   [Item("Single-objective MoveEvaluator", "Evaluates a parameter vector that results from a move.")]
-  [StorableClass]
+  [StorableType("EE4B1EBA-50BF-40C7-B338-F4A9D9CC554E")]
   public class SingleObjectiveMoveEvaluator : SingleSuccessorOperator, ISingleObjectiveEvaluationOperator, ISingleObjectiveMoveEvaluator, IStochasticOperator, ISingleObjectiveMoveOperator {
 
@@ -52,5 +52,5 @@
 
     [StorableConstructor]
-    protected SingleObjectiveMoveEvaluator(bool deserializing) : base(deserializing) { }
+    protected SingleObjectiveMoveEvaluator(StorableConstructorFlag _) : base(_) { }
     protected SingleObjectiveMoveEvaluator(SingleObjectiveMoveEvaluator original, Cloner cloner) : base(original, cloner) { }
     public SingleObjectiveMoveEvaluator() {
Index: branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/Operators/SingleObjectiveMoveGenerator.cs
===================================================================
--- branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/Operators/SingleObjectiveMoveGenerator.cs	(revision 16075)
+++ branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/Operators/SingleObjectiveMoveGenerator.cs	(revision 16956)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2019 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
@@ -29,9 +29,9 @@
 using HeuristicLab.Operators;
 using HeuristicLab.Parameters;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HEAL.Attic;
 
 namespace HeuristicLab.Optimization {
   [Item("Single-objective MoveGenerator", "Calls the GetNeighbors method of the problem definition to obtain the moves.")]
-  [StorableClass]
+  [StorableType("CB37E7D8-EAC3-4061-9D39-20538CD1064D")]
   public class SingleObjectiveMoveGenerator : SingleSuccessorOperator, INeighborBasedOperator, IMultiMoveGenerator, IStochasticOperator, ISingleObjectiveMoveOperator {
     public ILookupParameter<IRandom> RandomParameter {
@@ -50,5 +50,5 @@
 
     [StorableConstructor]
-    protected SingleObjectiveMoveGenerator(bool deserializing) : base(deserializing) { }
+    protected SingleObjectiveMoveGenerator(StorableConstructorFlag _) : base(_) { }
     protected SingleObjectiveMoveGenerator(SingleObjectiveMoveGenerator original, Cloner cloner)
       : base(original, cloner) { }
Index: branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/Operators/SingleObjectiveMoveMaker.cs
===================================================================
--- branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/Operators/SingleObjectiveMoveMaker.cs	(revision 16075)
+++ branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/Operators/SingleObjectiveMoveMaker.cs	(revision 16956)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2019 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
@@ -26,9 +26,9 @@
 using HeuristicLab.Operators;
 using HeuristicLab.Parameters;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HEAL.Attic;
 
 namespace HeuristicLab.Optimization {
   [Item("Single-objective MoveMaker", "Applies a move.")]
-  [StorableClass]
+  [StorableType("C0ABF392-C825-4B98-8FB9-5749A9091FD6")]
   public class SingleObjectiveMoveMaker : InstrumentedOperator, IMoveMaker, ISingleObjectiveMoveOperator {
     public ILookupParameter<IEncoding> EncodingParameter {
@@ -45,5 +45,5 @@
 
     [StorableConstructor]
-    protected SingleObjectiveMoveMaker(bool deserializing) : base(deserializing) { }
+    protected SingleObjectiveMoveMaker(StorableConstructorFlag _) : base(_) { }
     protected SingleObjectiveMoveMaker(SingleObjectiveMoveMaker original, Cloner cloner) : base(original, cloner) { }
     public SingleObjectiveMoveMaker() {
Index: branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/SingleObjectiveBasicProblem.cs
===================================================================
--- branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/SingleObjectiveBasicProblem.cs	(revision 16075)
+++ branches/2457_ExpertSystem/HeuristicLab.Optimization/3.3/BasicProblems/SingleObjectiveBasicProblem.cs	(revision 16956)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2019 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
@@ -23,12 +23,12 @@
 using System.Collections.Generic;
 using System.Linq;
+using HEAL.Attic;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Data;
 using HeuristicLab.Parameters;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 
 namespace HeuristicLab.Optimization {
-  [StorableClass]
+  [StorableType("2697320D-0259-44BB-BD71-7EE1B10F664C")]
   public abstract class SingleObjectiveBasicProblem<TEncoding> : BasicProblem<TEncoding, SingleObjectiveEvaluator>,
     ISingleObjectiveProblemDefinition, ISingleObjectiveHeuristicOptimizationProblem
@@ -51,5 +51,5 @@
 
     [StorableConstructor]
-    protected SingleObjectiveBasicProblem(bool deserializing) : base(deserializing) { }
+    protected SingleObjectiveBasicProblem(StorableConstructorFlag _) : base(_) { }
 
     protected SingleObjectiveBasicProblem(SingleObjectiveBasicProblem<TEncoding> original, Cloner cloner)
@@ -95,5 +95,4 @@
 
     protected override void OnOperatorsChanged() {
-      base.OnOperatorsChanged();
       if (Encoding != null) {
         PruneMultiObjectiveOperators(Encoding);
@@ -105,4 +104,5 @@
         }
       }
+      base.OnOperatorsChanged();
     }
 
