Index: /branches/PersistenceOverhaul/HeuristicLab.Algorithms.ALPS/3.3/AgingScheme.cs
===================================================================
--- /branches/PersistenceOverhaul/HeuristicLab.Algorithms.ALPS/3.3/AgingScheme.cs	(revision 14712)
+++ /branches/PersistenceOverhaul/HeuristicLab.Algorithms.ALPS/3.3/AgingScheme.cs	(revision 14713)
@@ -24,4 +24,5 @@
 using System.Linq;
 using HeuristicLab.Data;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 
 namespace HeuristicLab.Algorithms.ALPS {
@@ -29,4 +30,5 @@
   /// Defines the growth of age limits for the layers.
   /// </summary>
+  [StorableType("58FBD063-B765-439D-BEC8-C718E6877EBD")]  
   public enum AgingScheme {
     Linear,
Index: /branches/PersistenceOverhaul/HeuristicLab.Optimization.Operators/3.3/NoSimilarityCalculator.cs
===================================================================
--- /branches/PersistenceOverhaul/HeuristicLab.Optimization.Operators/3.3/NoSimilarityCalculator.cs	(revision 14712)
+++ /branches/PersistenceOverhaul/HeuristicLab.Optimization.Operators/3.3/NoSimilarityCalculator.cs	(revision 14713)
@@ -22,4 +22,5 @@
 using HeuristicLab.Common;
 using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 
 namespace HeuristicLab.Optimization.Operators {
@@ -30,4 +31,5 @@
   /// The item always considers two solutions to be distinct.
   /// </remarks>
+  [StorableType("88771671-7DEF-4E1D-89F1-851E05F1BCA3")]        
   [Item("NoSimilarityCalculator", "An item that performs similarity calculation between two solutions. The item always considers two solutions to be distinct.")]
   public sealed class NoSimilarityCalculator : SingleObjectiveSolutionSimilarityCalculator {
Index: /branches/PersistenceOverhaul/HeuristicLab.Optimization.Operators/3.3/QualitySimilarityCalculator.cs
===================================================================
--- /branches/PersistenceOverhaul/HeuristicLab.Optimization.Operators/3.3/QualitySimilarityCalculator.cs	(revision 14712)
+++ /branches/PersistenceOverhaul/HeuristicLab.Optimization.Operators/3.3/QualitySimilarityCalculator.cs	(revision 14713)
@@ -24,4 +24,5 @@
 using HeuristicLab.Core;
 using HeuristicLab.Data;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 
 namespace HeuristicLab.Optimization.Operators {
@@ -32,4 +33,5 @@
   /// The item always considers two solutions to be equal if they have the same quality.
   /// </remarks>
+  [StorableType("64D9B8A0-D350-4B31-B56B-2EE7DAA8E970")]
   [Item("QualitySimilarityCalculator", "An item that performs similarity calculation between two solutions. The item only considers the qualities of the two solutions.")]
   public sealed class QualitySimilarityCalculator : SingleObjectiveSolutionSimilarityCalculator {
Index: /branches/PersistenceOverhaul/HeuristicLab.Persistence/3.3/Default/CompositeSerializers/Storable/StorableSerializer.cs
===================================================================
--- /branches/PersistenceOverhaul/HeuristicLab.Persistence/3.3/Default/CompositeSerializers/Storable/StorableSerializer.cs	(revision 14712)
+++ /branches/PersistenceOverhaul/HeuristicLab.Persistence/3.3/Default/CompositeSerializers/Storable/StorableSerializer.cs	(revision 14713)
@@ -21,4 +21,5 @@
 
 using System;
+using System.CodeDom;
 using System.Collections.Generic;
 using System.Linq;
@@ -69,5 +70,5 @@
     /// </returns>
     public bool CanSerialize(Type type) {
-      var markedStorable = StorableReflection.HasStorableClassAttribute(type);
+      var markedStorable = StorableReflection.HasStorableClassAttribute(type) && !type.IsEnum && !type.IsValueType;
       if (GetConstructor(type) == null)
         if (markedStorable)
Index: /branches/PersistenceOverhaul/HeuristicLab.Persistence/4.0/Core/StaticCache.cs
===================================================================
--- /branches/PersistenceOverhaul/HeuristicLab.Persistence/4.0/Core/StaticCache.cs	(revision 14712)
+++ /branches/PersistenceOverhaul/HeuristicLab.Persistence/4.0/Core/StaticCache.cs	(revision 14713)
@@ -113,4 +113,6 @@
       // RegisterType(new Guid("3B3AA69E-1641-4202-AE1D-7EEFF60FA355"), typeof(double[]));
       // RegisterType(new Guid("7DF325A6-2553-4915-B7C6-D98191107CB7"), typeof(string[]));
+
+      RegisterType(new Guid("E451A99B-0CFD-48E6-9BEF-0AE9D1E73628"), typeof(IList));                                        
       RegisterType(new Guid("DB2A785C-5803-42C7-A01F-E1FD845A83A1"), typeof(List<>));
       RegisterType(new Guid("EB98A564-BEDC-458A-9E9B-4BF3CDAFB9BE"), typeof(Stack<>));
@@ -121,4 +123,5 @@
       RegisterType(new Guid("7E2F3277-7216-4295-A498-9ACA43527D5B"), typeof(HashSet<>));
       RegisterType(new Guid("E92C35AD-32B1-4F37-B8D2-BE2F5FEB465B"), typeof(Dictionary<,>));
+      RegisterType(new Guid("18504ADF-2332-4497-8CA0-B2F00CA2EBA2"), typeof(Type));
 
       var allTypes = new Dictionary<string, Type>(5000);
@@ -162,5 +165,4 @@
       RegisterType(new Guid("00C8C940-63D9-43FF-99BA-9C69301BF043"), allTypes["System.Collections.Generic.RandomizedObjectEqualityComparer"]);
       RegisterType(new Guid("DAF22757-7FCC-49AC-B148-F3DD7E9E0A3B"), allTypes["System.Collections.Generic.IEqualityComparer`1"]);
-
 
       //var registeredTypes = type2Guid.Keys.ToArray();
Index: /branches/PersistenceOverhaul/HeuristicLab.Persistence/4.0/Transformers/StorableClassTransformer.cs
===================================================================
--- /branches/PersistenceOverhaul/HeuristicLab.Persistence/4.0/Transformers/StorableClassTransformer.cs	(revision 14712)
+++ /branches/PersistenceOverhaul/HeuristicLab.Persistence/4.0/Transformers/StorableClassTransformer.cs	(revision 14713)
@@ -30,5 +30,5 @@
   internal sealed class StorableClassBoxTransformer : BoxTransformer<object> {
     public override bool CanTransformType(Type type) {
-      return StorableTypeAttribute.IsStorableType(type) && !type.IsValueType || // don't transform structs
+      return StorableTypeAttribute.IsStorableType(type) && !type.IsValueType && !type.IsEnum || // don't transform structs or enums
         type.BaseType != null && CanTransformType(type.BaseType);
     }
Index: /branches/PersistenceOverhaul/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/SingleObjective/SymbolicRegressionSolutionsAnalyzer.cs
===================================================================
--- /branches/PersistenceOverhaul/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/SingleObjective/SymbolicRegressionSolutionsAnalyzer.cs	(revision 14712)
+++ /branches/PersistenceOverhaul/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/SingleObjective/SymbolicRegressionSolutionsAnalyzer.cs	(revision 14713)
@@ -33,4 +33,5 @@
 
 namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Regression {
+  [StorableType("604417B8-FBAD-407C-8482-D39959159551")]
   public class SymbolicRegressionSolutionsAnalyzer : SingleSuccessorOperator, IAnalyzer {
     private const string ResultCollectionParameterName = "Results";
Index: /branches/PersistenceOverhaul/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Crossovers/SymbolicDataAnalysisExpressionContextAwareCrossover.cs
===================================================================
--- /branches/PersistenceOverhaul/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Crossovers/SymbolicDataAnalysisExpressionContextAwareCrossover.cs	(revision 14712)
+++ /branches/PersistenceOverhaul/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Crossovers/SymbolicDataAnalysisExpressionContextAwareCrossover.cs	(revision 14713)
@@ -34,4 +34,5 @@
                                  "- Randomly choose a node N from P1\n" +
                                  "- Test all crossover points from P0 to determine the best location for N to be inserted")]
+  [StorableType("510A36FF-584C-40F6-B3E0-5D7B0F85D761")]                
   public sealed class SymbolicDataAnalysisExpressionContextAwareCrossover<T> : SymbolicDataAnalysisExpressionCrossover<T> where T : class, IDataAnalysisProblemData {
     [StorableConstructor]
Index: /branches/PersistenceOverhaul/HeuristicLab.Problems.Knapsack/3.3/SimilarityCalculators/KnapsackSimilarityCalculator.cs
===================================================================
--- /branches/PersistenceOverhaul/HeuristicLab.Problems.Knapsack/3.3/SimilarityCalculators/KnapsackSimilarityCalculator.cs	(revision 14712)
+++ /branches/PersistenceOverhaul/HeuristicLab.Problems.Knapsack/3.3/SimilarityCalculators/KnapsackSimilarityCalculator.cs	(revision 14713)
@@ -25,4 +25,5 @@
 using HeuristicLab.Encodings.BinaryVectorEncoding;
 using HeuristicLab.Optimization.Operators;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 
 namespace HeuristicLab.Problems.Knapsack {
@@ -34,4 +35,5 @@
   /// </remarks>
   [Item("KnapsackSimilarityCalculator", "An operator that performs similarity calculation between two knapsack solutions. The operator calculates the similarity based on the number of elements the two solutions have in common.")]
+  [StorableType("E335A90A-13BB-48C6-9BD3-4D183E8EB370")]
   public sealed class KnapsackSimilarityCalculator : SingleObjectiveSolutionSimilarityCalculator {
     protected override bool IsCommutative { get { return true; } }
Index: /branches/PersistenceOverhaul/HeuristicLab.Problems.QuadraticAssignment/3.3/QAPSimilarityCalculator.cs
===================================================================
--- /branches/PersistenceOverhaul/HeuristicLab.Problems.QuadraticAssignment/3.3/QAPSimilarityCalculator.cs	(revision 14712)
+++ /branches/PersistenceOverhaul/HeuristicLab.Problems.QuadraticAssignment/3.3/QAPSimilarityCalculator.cs	(revision 14713)
@@ -25,4 +25,5 @@
 using HeuristicLab.Encodings.PermutationEncoding;
 using HeuristicLab.Optimization.Operators;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 
 namespace HeuristicLab.Problems.QuadraticAssignment {
@@ -34,4 +35,5 @@
   /// </remarks>
   [Item("QAPSimilarityCalculator", "An operator that performs similarity calculation between two quadratic assignment solutions. The operator calculates the similarity based on the number of edges the two solutions have in common.")]
+  [StorableType("EC8B94E6-EA4D-4EA4-86E5-9386F5CE54FE")]
   public sealed class QAPSimilarityCalculator : SingleObjectiveSolutionSimilarityCalculator {
     protected override bool IsCommutative { get { return true; } }
Index: /branches/PersistenceOverhaul/HeuristicLab.Problems.TravelingSalesman/3.3/SimilarityCalculators/TSPSimilarityCalculator.cs
===================================================================
--- /branches/PersistenceOverhaul/HeuristicLab.Problems.TravelingSalesman/3.3/SimilarityCalculators/TSPSimilarityCalculator.cs	(revision 14712)
+++ /branches/PersistenceOverhaul/HeuristicLab.Problems.TravelingSalesman/3.3/SimilarityCalculators/TSPSimilarityCalculator.cs	(revision 14713)
@@ -25,4 +25,5 @@
 using HeuristicLab.Encodings.PermutationEncoding;
 using HeuristicLab.Optimization.Operators;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 
 namespace HeuristicLab.Problems.TravelingSalesman {
@@ -33,4 +34,5 @@
   /// The operator calculates the similarity based on the number of edges the two solutions have in common.
   /// </remarks>
+  [StorableType("D5AD7A09-5738-4F14-AB3C-4943C32FACC6")]   
   [Item("TSPSimilarityCalculator", "An operator that performs similarity calculation between two traveling salesman solutions. The operator calculates the similarity based on the number of edges the two solutions have in common.")]
   public sealed class TSPSimilarityCalculator : SingleObjectiveSolutionSimilarityCalculator {
Index: /branches/PersistenceOverhaul/HeuristicLab.Tests/HeuristicLab.Persistence-3.3/UseCasesPersistenceNew.cs
===================================================================
--- /branches/PersistenceOverhaul/HeuristicLab.Tests/HeuristicLab.Persistence-3.3/UseCasesPersistenceNew.cs	(revision 14712)
+++ /branches/PersistenceOverhaul/HeuristicLab.Tests/HeuristicLab.Persistence-3.3/UseCasesPersistenceNew.cs	(revision 14713)
@@ -32,4 +32,5 @@
 using System.Threading.Tasks;
 using HeuristicLab.Algorithms.GeneticAlgorithm;
+using HeuristicLab.Common;
 using HeuristicLab.Data;
 using HeuristicLab.Persistence;
@@ -403,5 +404,5 @@
 
     public string Profile(Func<object> GenerateDataFunc) {
-      int nrOfRepetitions = 30;
+      int nrOfRepetitions = 1;
       StringBuilder report = new StringBuilder();
       List<PerformanceData> dataList = new List<PerformanceData>();
@@ -2134,8 +2135,30 @@
       foreach (var fileName in Directory.EnumerateFiles(path, "*.hl")) {
         var original = XmlParser.Deserialize(fileName);
-        serializer.Serialize(original, fileName + ".proto");
-        // var newVersion = serializer.Deserialize(fileName + ".proto");
-        var p = Profile(() => original);
-        Console.WriteLine(p);
+        var ok = true;
+        foreach (var t in original.GetObjectGraphObjects().Select(o => o.GetType())) {
+          if (
+            t.GetConstructors(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public)
+              .Any(ctor => StorableConstructorAttribute.IsStorableConstructor(ctor))) {
+            try {
+              if (t.IsGenericType)
+              {
+                var g = Mapper.StaticCache.GetGuid(t.GetGenericTypeDefinition());
+              }
+              else
+              {
+                var g = Mapper.StaticCache.GetGuid(t);
+              }
+            } catch (Exception e) {
+              Console.WriteLine(t.FullName);
+              ok = false;
+            }
+          }
+        }
+        if (ok) {
+          serializer.Serialize(original, fileName + ".proto");
+          // var newVersion = serializer.Deserialize(fileName + ".proto");
+          var p = Profile(() => original);
+          Console.WriteLine(p);
+        }
       }
     }
