Index: branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Auxiliary/TypeLoader.cs
===================================================================
--- branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Auxiliary/TypeLoader.cs	(revision 14926)
+++ branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Auxiliary/TypeLoader.cs	(revision 14927)
@@ -59,6 +59,5 @@
       try {
         typeName = TypeNameParser.Parse(typeNameString);
-      }
-      catch (Exception) {
+      } catch (Exception) {
         throw new PersistenceException(String.Format(
            "Could not parse type string \"{0}\"",
@@ -69,6 +68,5 @@
         // try to load type normally
         return LoadInternal(typeName);
-      }
-      catch (PersistenceException) {
+      } catch (PersistenceException) {
         #region Mono Compatibility
         // if that fails, try to convert to the corresponding Mono or .NET type
@@ -92,6 +90,5 @@
       try {
         type = Type.GetType(typeName.ToString(true, true), true);
-      }
-      catch (Exception) {
+      } catch (Exception) {
         Logger.Warn(String.Format(
           "Cannot load type \"{0}\", falling back to partial name", typeName.ToString(true, true)));
@@ -109,6 +106,5 @@
 #pragma warning restore 0618
         return a.GetType(typeName.ToString(false, false), true);
-      }
-      catch (Exception) {
+      } catch (Exception) {
         throw new PersistenceException(String.Format(
           "Could not load type \"{0}\"",
@@ -130,9 +126,7 @@
             typeName.ToString(true, true),
             type.AssemblyQualifiedName));
-      }
-      catch (PersistenceException) {
+      } catch (PersistenceException) {
         throw;
-      }
-      catch (Exception e) {
+      } catch (Exception e) {
         Logger.Warn(String.Format(
           "Could not perform version check requested type was {0} while loaded type is {1}:",
Index: branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Auxiliary/TypeName.cs
===================================================================
--- branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Auxiliary/TypeName.cs	(revision 14926)
+++ branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Auxiliary/TypeName.cs	(revision 14927)
@@ -24,5 +24,5 @@
 using System.Linq;
 using System.Text;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Persistence;
 
 namespace HeuristicLab.Persistence.Auxiliary {
@@ -33,5 +33,5 @@
   /// attributes.
   /// </summary>
-  [StorableClass]
+  [StorableType("a83d8580-07c2-4805-a31f-23b702689e0c")]
   public class TypeName {
 
@@ -57,5 +57,5 @@
     public List<int> GenericArgCounts { get; private set; }
 
-      /// <summary>
+    /// <summary>
     /// Gets or sets the generic args.
     /// </summary>
@@ -110,5 +110,5 @@
     /// <param name="nameSpace">The namespace.</param>
     /// <param name="className">Name of the class.</param>
-    internal TypeName(string nameSpace, string className, List<int> genericArgCounts=null) {
+    internal TypeName(string nameSpace, string className, List<int> genericArgCounts = null) {
       Namespace = nameSpace;
       ClassName = className;
@@ -187,9 +187,8 @@
     private IEnumerable<string> GetNestedClassesInCode(HashSet<string> omitNamespaces, bool includeAllNamespaces) {
       var i = 0;
-      foreach (var pair in ClassName.Split('+').Zip(GenericArgCounts, (n, c) => new {n, c})) {
+      foreach (var pair in ClassName.Split('+').Zip(GenericArgCounts, (n, c) => new { n, c })) {
         if (pair.c == 0) {
           yield return pair.n;
-        }
-        else {
+        } else {
           yield return string.Format("{0}<{1}>",
             pair.n,
@@ -208,5 +207,5 @@
             (omitNamespaces == null && includeNamespaces) ||
              omitNamespaces != null && !omitNamespaces.Contains(Namespace))
-          sb.Append(Namespace).Append('.');
+        sb.Append(Namespace).Append('.');
       if (GenericArgCounts != null) {
         sb.Append(string.Join(".", GetNestedClassesInCode(omitNamespaces, includeNamespaces)));
@@ -273,6 +272,5 @@
         }
         return false;
-      }
-      catch (KeyNotFoundException) {
+      } catch (KeyNotFoundException) {
         throw new Exception("Could not extract version information from type string");
       }
@@ -311,6 +309,5 @@
         }
         return true;
-      }
-      catch (KeyNotFoundException) {
+      } catch (KeyNotFoundException) {
         throw new Exception("Could not extract version infomration from type string");
       }
Index: branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Auxiliary/TypeNameParser.cs
===================================================================
--- branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Auxiliary/TypeNameParser.cs	(revision 14926)
+++ branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Auxiliary/TypeNameParser.cs	(revision 14927)
@@ -166,6 +166,5 @@
       try {
         return p.TransformTypeSpec();
-      }
-      catch (ParseError x) {
+      } catch (ParseError x) {
         if (p.Position > 0)
           throw new ParseError(String.Format(
Index: branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Core/Configuration.cs
===================================================================
--- branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Core/Configuration.cs	(revision 14926)
+++ branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Core/Configuration.cs	(revision 14927)
@@ -22,5 +22,5 @@
 using System;
 using System.Collections.Generic;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Persistence;
 using HeuristicLab.Persistence.Interfaces;
 
@@ -32,5 +32,5 @@
   /// <c>ConfigurationService</c>.
   /// </summary>
-  [StorableClass]
+  [StorableType("181b0384-ee37-4a51-93ab-624977ee6613")]
   public class Configuration {
 
Index: branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Core/DataMemberAccessor.cs
===================================================================
--- branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Core/DataMemberAccessor.cs	(revision 14926)
+++ 	(revision )
@@ -1,251 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2016 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System;
-using System.Reflection;
-using System.Reflection.Emit;
-
-namespace HeuristicLab.Persistence.Core {
-
-  /// <summary>
-  /// Encapsulation and abstraction for access a data member of an object
-  /// regardless of it being a property or field. Additionally a
-  /// default value and an alternate name can be specified.
-  /// </summary>
-  public sealed class DataMemberAccessor {
-
-    #region fields
-
-    /// <summary>
-    /// The function to get the value of the data member.
-    /// </summary>
-    public readonly Func<object, object> Get;
-
-    /// <summary>
-    /// The function to set the value of the data member.
-    /// </summary>
-    public readonly Action<object, object> Set;
-
-    /// <summary>
-    /// The name of the data member.
-    /// </summary>
-    public readonly string Name;
-
-    /// <summary>
-    /// The default value of the data member, can remain <c>null</c>
-    /// if no default value. If left null, this will also leave the
-    /// default value for value types (e.g. 0 for <c>int</c>).
-    /// </summary>
-    public readonly object DefaultValue;
-
-    #endregion
-
-    #region constructors
-
-    /// <summary>
-    /// Create a <see cref="DataMemberAccessor"/> from a FieldInfo or
-    /// PropertyInfo for the give object.
-    /// </summary>
-    /// <param name="memberInfo">The member info.</param>
-    /// <param name="name">The name.</param>
-    /// <param name="defaultvalue">The defaultvalue.</param>
-    public DataMemberAccessor(MemberInfo memberInfo, string name, object defaultvalue) {
-      Get = GenerateGetter(memberInfo);
-      Set = GenerateSetter(memberInfo);
-      Name = name;
-      DefaultValue = defaultvalue;
-    }
-
-    /// <summary>
-    /// Create an empty accessor that just encapsulates an object
-    /// without access.
-    /// </summary>    
-    public DataMemberAccessor() {
-      Name = null;
-      DefaultValue = null;
-      Get = Id;
-    }
-
-    /// <summary>
-    /// Create an empty accessor that just encapsulates an object
-    /// without access.
-    /// </summary>    
-    /// <param name="name">The object's name.</param>
-    public DataMemberAccessor(string name) {
-      Name = name;
-      DefaultValue = null;
-      Get = Id;
-    }
-
-    /// <summary>
-    /// Initializes a new instance of the <see cref="DataMemberAccessor"/> class using the
-    /// getter and setter from an exisiting instance but with a new name and default value.
-    /// </summary>
-    /// <param name="dma">The existing DataMemberAccessor.</param>
-    /// <param name="name">The new name.</param>
-    /// <param name="defaultValue">The new default value.</param>
-    public DataMemberAccessor(DataMemberAccessor dma, string name, object defaultValue) {
-      Get = dma.Get;
-      Set = dma.Set;
-      this.Name = name;
-      this.DefaultValue = defaultValue;
-    }
-
-    #endregion
-
-    #region auxiliary methods
-
-    /// <summary>
-    /// Returns a <see cref="System.String"/> that represents this instance.
-    /// </summary>
-    /// <returns>
-    /// A <see cref="System.String"/> that represents this instance.
-    /// </returns>
-    public override string ToString() {
-      return String.Format("DataMemberAccessor({0}, {1}, {2}, {3})",
-        Name,
-        DefaultValue ?? "<null>",
-        Get.Method, Set.Method);
-    }
-
-    /// <summary>
-    /// The identity function
-    /// </summary>
-    /// <param name="o">An object.</param>
-    /// <returns>its argument o unmodified.</returns>
-    public static object Id(object o) {
-      return o;
-    }
-
-    #endregion
-
-    #region static methods (code generators)
-
-    /// <summary>
-    /// Generate a getter for the given field or property
-    /// </summary>
-    /// <param name="memberInfo">The member info.</param>
-    /// <returns></returns>
-    public static Func<object, object> GenerateGetter(MemberInfo memberInfo) {
-      if (memberInfo.MemberType == MemberTypes.Field) {
-        FieldInfo fieldInfo = (FieldInfo)memberInfo;
-        return GenerateFieldGetter(fieldInfo);
-      } else if (memberInfo.MemberType == MemberTypes.Property) {
-        return GeneratePropertyGetter((PropertyInfo)memberInfo);
-      } else {
-        throw new PersistenceException(
-          "The Storable attribute can only be applied to fields and properties.");
-      }
-    }
-
-    /// <summary>
-    /// Generates a setter for the given field or property.
-    /// </summary>
-    /// <param name="memberInfo">The member info.</param>
-    /// <returns></returns>
-    public static Action<object, object> GenerateSetter(MemberInfo memberInfo) {
-      if (memberInfo.MemberType == MemberTypes.Field) {
-        FieldInfo fieldInfo = (FieldInfo)memberInfo;
-        return GenerateFieldSetter(fieldInfo);
-      } else if (memberInfo.MemberType == MemberTypes.Property) {
-        return GeneratePropertySetter((PropertyInfo)memberInfo);
-      } else {
-        throw new PersistenceException(
-          "The Storable attribute can only be applied to fields and properties.");
-      }
-    }
-
-    /// <summary>
-    /// Generates a dynamically compiled getter to access fields (even private ones).
-    /// </summary>
-    /// <param name="fieldInfo">The field info.</param>
-    /// <returns>A Func&lt;object, object&gt;</returns>
-    public static Func<object, object> GenerateFieldGetter(FieldInfo fieldInfo) {
-      DynamicMethod dm = new DynamicMethod("", typeof(object), new Type[] { typeof(object) }, fieldInfo.DeclaringType, true);
-      ILGenerator ilgen = dm.GetILGenerator();
-      ilgen.Emit(OpCodes.Ldarg_0);
-      ilgen.Emit(OpCodes.Castclass, fieldInfo.DeclaringType);
-      ilgen.Emit(OpCodes.Ldfld, fieldInfo);
-      ilgen.Emit(OpCodes.Box, fieldInfo.FieldType);
-      ilgen.Emit(OpCodes.Ret);
-      return (Func<object, object>)dm.CreateDelegate(typeof(Func<object, object>));
-    }
-
-    /// <summary>
-    /// Generates a dynamically compiled setter to access fields (even private ones).
-    /// </summary>
-    /// <param name="fieldInfo">The field info.</param>
-    /// <returns>An Action&lt;object, object%gt;</returns>
-    public static Action<object, object> GenerateFieldSetter(FieldInfo fieldInfo) {
-      DynamicMethod dm = new DynamicMethod("", null, new Type[] { typeof(object), typeof(object) }, fieldInfo.DeclaringType, true);
-      ILGenerator ilgen = dm.GetILGenerator();
-      ilgen.Emit(OpCodes.Ldarg_0);
-      ilgen.Emit(OpCodes.Castclass, fieldInfo.DeclaringType);
-      ilgen.Emit(OpCodes.Ldarg_1);
-      ilgen.Emit(OpCodes.Unbox_Any, fieldInfo.FieldType);
-      ilgen.Emit(OpCodes.Stfld, fieldInfo);
-      ilgen.Emit(OpCodes.Ret);
-      return (Action<object, object>)dm.CreateDelegate(typeof(Action<object, object>));
-    }
-
-    /// <summary>
-    /// Generates a dynamically compiled getter to access properties (even private ones).
-    /// </summary>
-    /// <param name="propertyInfo">The property info.</param>
-    /// <returns>A Func&lt;object, object&gt;</returns>
-    public static Func<object, object> GeneratePropertyGetter(PropertyInfo propertyInfo) {
-      MethodInfo getter = propertyInfo.GetGetMethod(true);
-      if (getter == null)
-        return null;
-      DynamicMethod dm = new DynamicMethod("", typeof(object), new Type[] { typeof(object) }, propertyInfo.DeclaringType, true);
-      ILGenerator ilgen = dm.GetILGenerator();
-      ilgen.Emit(OpCodes.Ldarg_0);
-      ilgen.Emit(OpCodes.Castclass, propertyInfo.DeclaringType);
-      ilgen.Emit(OpCodes.Callvirt, getter);
-      ilgen.Emit(OpCodes.Box, propertyInfo.PropertyType);
-      ilgen.Emit(OpCodes.Ret);
-      return (Func<object, object>)dm.CreateDelegate(typeof(Func<object, object>));
-    }
-
-    /// <summary>
-    /// Generates a dynamically compiled setter to access properties (even private ones).
-    /// </summary>
-    /// <param name="propertyInfo">The property info.</param>
-    /// <returns>An Action&lt;object, object%gt;</returns>
-    public static Action<object, object> GeneratePropertySetter(PropertyInfo propertyInfo) {
-      MethodInfo setter = propertyInfo.GetSetMethod(true);
-      if (setter == null)
-        return null;
-      DynamicMethod dm = new DynamicMethod("", null, new Type[] { typeof(object), typeof(object) }, propertyInfo.DeclaringType, true);
-      ILGenerator ilgen = dm.GetILGenerator();
-      ilgen.Emit(OpCodes.Ldarg_0);
-      ilgen.Emit(OpCodes.Castclass, propertyInfo.DeclaringType);
-      ilgen.Emit(OpCodes.Ldarg_1);
-      ilgen.Emit(OpCodes.Unbox_Any, propertyInfo.PropertyType);
-      ilgen.Emit(OpCodes.Callvirt, setter);
-      ilgen.Emit(OpCodes.Ret);
-      return (Action<object, object>)dm.CreateDelegate(typeof(Action<object, object>));
-    }
-
-    #endregion
-  }
-
-}
Index: branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Core/FormatBase.cs
===================================================================
--- branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Core/FormatBase.cs	(revision 14926)
+++ branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Core/FormatBase.cs	(revision 14927)
@@ -21,5 +21,5 @@
 
 using System;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Persistence;
 
 namespace HeuristicLab.Persistence.Interfaces {
@@ -29,5 +29,5 @@
   /// </summary>
   /// <typeparam name="SerialDataFormat">The type of the serial data format.</typeparam>
-  [StorableClass]
+  [StorableType("654b6142-b4c5-4b82-94e9-13b4ff8cbe53")]
   public abstract class FormatBase<SerialDataFormat> : IFormat<SerialDataFormat> where SerialDataFormat : ISerialData {
 
Index: branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Core/PersistenceException.cs
===================================================================
--- branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Core/PersistenceException.cs	(revision 14926)
+++ 	(revision )
@@ -1,90 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2016 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System;
-using System.Collections.Generic;
-using System.Runtime.Serialization;
-using System.Text;
-
-namespace HeuristicLab.Persistence.Core {
-
-  /// <summary>
-  /// Exception thrown by components inside the persistence framework.
-  /// </summary>
-  [Serializable]
-  public class PersistenceException : Exception {
-
-    /// <summary>
-    /// Initializes a new instance of the <see cref="PersistenceException"/> class.
-    /// </summary>
-    public PersistenceException() : base() { }
-
-    /// <summary>
-    /// Initializes a new instance of the <see cref="PersistenceException"/> class.
-    /// </summary>
-    /// <param name="message">The message.</param>
-    public PersistenceException(string message) : base(message) { }
-
-    /// <summary>
-    /// Initializes a new instance of the <see cref="PersistenceException"/> class.
-    /// </summary>
-    /// <param name="message">The message.</param>
-    /// <param name="innerException">The inner exception.</param>
-    public PersistenceException(string message, Exception innerException) :
-      base(message, innerException) { }
-
-    /// <summary>
-    /// Initializes a new instance of the <see cref="PersistenceException"/> class.
-    /// </summary>
-    /// <param name="message">The message.</param>
-    /// <param name="innerExceptions">The inner exceptions.</param>
-    public PersistenceException(string message, IEnumerable<Exception> innerExceptions)
-      : base(message) {
-      int i = 0;
-      foreach (var x in innerExceptions) {
-        i += 1;
-        this.Data.Add("Inner Exception " + i, x);
-      }
-    }
-
-    protected PersistenceException(SerializationInfo info, StreamingContext context) : base(info, context) { }
-
-    /// <summary>
-    /// Returns a <see cref="System.String"/> that represents this instance.
-    /// </summary>
-    /// <returns>
-    /// A <see cref="System.String"/> that represents this instance.
-    /// </returns>
-    /// <PermissionSet>
-    /// 	<IPermission class="System.Security.Permissions.FileIOPermission, mscorlib, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" PathDiscovery="*AllFiles*"/>
-    /// </PermissionSet>
-    public override string ToString() {
-      var sb = new StringBuilder()
-        .Append(base.ToString())
-        .Append('\n');
-      foreach (Exception x in Data.Values) {
-        sb.Append(x.ToString()).Append('\n');
-      }
-      return sb.ToString();
-    }
-  }
-
-}
Index: branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Core/PrimitiveSerializerBase.cs
===================================================================
--- branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Core/PrimitiveSerializerBase.cs	(revision 14926)
+++ branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Core/PrimitiveSerializerBase.cs	(revision 14927)
@@ -22,5 +22,5 @@
 using System;
 using System.Text;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Persistence;
 
 namespace HeuristicLab.Persistence.Interfaces {
@@ -32,5 +32,5 @@
   /// <typeparam name="Source">The source type.</typeparam>
   /// <typeparam name="SerialData">The serialized type.</typeparam>
-  [StorableClass]
+  [StorableType("0e1d11cc-9ff0-46b6-b661-c1a408ae0917")]
   public abstract class PrimitiveSerializerBase<Source, SerialData> :
       IPrimitiveSerializer<Source, SerialData>
Index: branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Core/Serializer.cs
===================================================================
--- branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Core/Serializer.cs	(revision 14926)
+++ branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Core/Serializer.cs	(revision 14927)
@@ -247,6 +247,5 @@
             emitTypeInfo);
         throw CreatePersistenceException(type, "Could not determine how to serialize a value.", true);
-      }
-      catch (Exception x) {
+      } catch (Exception x) {
         if (isTestRun) {
           exceptions.Add(x);
@@ -260,9 +259,8 @@
             false);
         }
-      }
-      finally {
+      } finally {
         objectGraphTrace.Pop();
       }
-    }    
+    }
 
     private PersistenceException CreatePersistenceException(Type type, string message, bool appendConfig) {
Index: branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/CompositeSerializers/ArraySerializer.cs
===================================================================
--- branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/CompositeSerializers/ArraySerializer.cs	(revision 14926)
+++ branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/CompositeSerializers/ArraySerializer.cs	(revision 14927)
@@ -23,10 +23,10 @@
 using System.Collections.Generic;
 using HeuristicLab.Persistence.Core;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Persistence;
 using HeuristicLab.Persistence.Interfaces;
 
 namespace HeuristicLab.Persistence.Default.CompositeSerializers {
 
-  [StorableClass]
+  [StorableType("17987df2-38f0-4158-b4c7-783ffa2737d1")]
   internal sealed class ArraySerializer : ICompositeSerializer {
 
@@ -99,9 +99,7 @@
         }
         return Array.CreateInstance(t.GetElementType(), lengths, lowerBounds);
-      }
-      catch (InvalidOperationException x) {
+      } catch (InvalidOperationException x) {
         throw new PersistenceException("Insufficient meta information to construct array instance.", x);
-      }
-      catch (InvalidCastException x) {
+      } catch (InvalidCastException x) {
         throw new PersistenceException("Invalid format of array metainfo.", x);
       }
@@ -134,12 +132,9 @@
           }
         }
-      }
-      catch (InvalidOperationException x) {
+      } catch (InvalidOperationException x) {
         throw new PersistenceException("Insufficient data to fill array instance", x);
-      }
-      catch (InvalidCastException x) {
+      } catch (InvalidCastException x) {
         throw new PersistenceException("Invalid element data. Cannot fill array", x);
-      }
-      catch (IndexOutOfRangeException x) {
+      } catch (IndexOutOfRangeException x) {
         throw new PersistenceException("Too many elements during array deserialization", x);
       }
Index: branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/CompositeSerializers/CompactNumberArray2StringSerializer.cs
===================================================================
--- branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/CompositeSerializers/CompactNumberArray2StringSerializer.cs	(revision 14926)
+++ branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/CompositeSerializers/CompactNumberArray2StringSerializer.cs	(revision 14927)
@@ -26,10 +26,10 @@
 using HeuristicLab.Persistence.Auxiliary;
 using HeuristicLab.Persistence.Core;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Persistence;
 using HeuristicLab.Persistence.Interfaces;
 
 namespace HeuristicLab.Persistence.Default.CompositeSerializers {
 
-  [StorableClass]
+  [StorableType("a5c269da-4122-4ea0-9eb7-c3441be404b8")]
   public sealed class CompactNumberArray2StringSerializer : ICompositeSerializer {
 
@@ -187,9 +187,7 @@
         }
         return a;
-      }
-      catch (InvalidOperationException e) {
+      } catch (InvalidOperationException e) {
         throw new PersistenceException("Insuffictient data to deserialize compact array", e);
-      }
-      catch (InvalidCastException e) {
+      } catch (InvalidCastException e) {
         throw new PersistenceException("Invalid element data during compact array deserialization", e);
       }
Index: branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/CompositeSerializers/ConcreteDictionarySerializer.cs
===================================================================
--- branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/CompositeSerializers/ConcreteDictionarySerializer.cs	(revision 14926)
+++ branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/CompositeSerializers/ConcreteDictionarySerializer.cs	(revision 14927)
@@ -25,10 +25,10 @@
 using System.Linq;
 using HeuristicLab.Persistence.Core;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Persistence;
 using HeuristicLab.Persistence.Interfaces;
 
 namespace HeuristicLab.Persistence.Default.CompositeSerializers {
 
-  [StorableClass]
+  [StorableType("0ce2011a-5666-40df-9874-f5eeccea5a72")]
   internal sealed class ConcreteDictionarySerializer : ICompositeSerializer {
 
Index: branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/CompositeSerializers/DictionarySerializer.cs
===================================================================
--- branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/CompositeSerializers/DictionarySerializer.cs	(revision 14926)
+++ branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/CompositeSerializers/DictionarySerializer.cs	(revision 14927)
@@ -25,10 +25,10 @@
 using HeuristicLab.Persistence.Auxiliary;
 using HeuristicLab.Persistence.Core;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Persistence;
 using HeuristicLab.Persistence.Interfaces;
 
 namespace HeuristicLab.Persistence.Default.CompositeSerializers {
 
-  [StorableClass]
+  [StorableType("813d9a0f-a611-478e-8149-e5d338c9a273")]
   internal sealed class DictionarySerializer : ICompositeSerializer {
 
@@ -79,15 +79,11 @@
           dict.Add(key.Value, value.Value);
         }
-      }
-      catch (InvalidOperationException e) {
+      } catch (InvalidOperationException e) {
         throw new PersistenceException("Dictionaries must contain an even number of elements (key+value).", e);
-      }
-      catch (NotSupportedException e) {
+      } catch (NotSupportedException e) {
         throw new PersistenceException("The serialized dictionary type was read-only or had a fixed size and cannot be deserialized.", e);
-      }
-      catch (ArgumentNullException e) {
+      } catch (ArgumentNullException e) {
         throw new PersistenceException("Dictionary key was null.", e);
-      }
-      catch (ArgumentException e) {
+      } catch (ArgumentException e) {
         throw new PersistenceException("Duplicate dictionary key.", e);
       }
Index: branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/CompositeSerializers/EnumSerializer.cs
===================================================================
--- branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/CompositeSerializers/EnumSerializer.cs	(revision 14926)
+++ branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/CompositeSerializers/EnumSerializer.cs	(revision 14927)
@@ -23,10 +23,10 @@
 using System.Collections.Generic;
 using HeuristicLab.Persistence.Core;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Persistence;
 using HeuristicLab.Persistence.Interfaces;
 
 namespace HeuristicLab.Persistence.Default.CompositeSerializers {
 
-  [StorableClass]
+  [StorableType("7ff55c07-1c83-4d0f-924a-37c28d936d74")]
   internal sealed class EnumSerializer : ICompositeSerializer {
 
@@ -60,9 +60,7 @@
         it.MoveNext();
         return Enum.Parse(t, (string)it.Current.Value);
-      }
-      catch (InvalidOperationException e) {
+      } catch (InvalidOperationException e) {
         throw new PersistenceException("not enough meta information to recstruct enum", e);
-      }
-      catch (InvalidCastException e) {
+      } catch (InvalidCastException e) {
         throw new PersistenceException("invalid meta information found while trying to reconstruct enum", e);
       }
Index: branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/CompositeSerializers/EnumerableSerializer.cs
===================================================================
--- branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/CompositeSerializers/EnumerableSerializer.cs	(revision 14926)
+++ branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/CompositeSerializers/EnumerableSerializer.cs	(revision 14927)
@@ -26,10 +26,10 @@
 using HeuristicLab.Persistence.Auxiliary;
 using HeuristicLab.Persistence.Core;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Persistence;
 using HeuristicLab.Persistence.Interfaces;
 
 namespace HeuristicLab.Persistence.Default.CompositeSerializers {
 
-  [StorableClass]
+  [StorableType("4421c2a4-9ee1-4cfc-b98e-755a81dc5241")]
   internal sealed class EnumerableSerializer : ICompositeSerializer {
 
@@ -80,6 +80,5 @@
         foreach (var tag in tags)
           addMethod.Invoke(instance, new[] { tag.Value });
-      }
-      catch (Exception e) {
+      } catch (Exception e) {
         throw new PersistenceException("Exception caught while trying to populate enumerable.", e);
       }
Index: branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/CompositeSerializers/HashSetSerializer.cs
===================================================================
--- branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/CompositeSerializers/HashSetSerializer.cs	(revision 14926)
+++ branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/CompositeSerializers/HashSetSerializer.cs	(revision 14927)
@@ -26,10 +26,10 @@
 using System.Reflection;
 using HeuristicLab.Persistence.Core;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Persistence;
 using HeuristicLab.Persistence.Interfaces;
 
 namespace HeuristicLab.Persistence.Default.CompositeSerializers {
 
-  [StorableClass]
+  [StorableType("51099049-20f2-4a71-8eae-b4ea9d677115")]
   internal sealed class HashSetSerializer : ICompositeSerializer {
 
Index: branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/CompositeSerializers/KeyValuePairSerializer.cs
===================================================================
--- branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/CompositeSerializers/KeyValuePairSerializer.cs	(revision 14926)
+++ branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/CompositeSerializers/KeyValuePairSerializer.cs	(revision 14927)
@@ -25,10 +25,10 @@
 using System.Reflection;
 using HeuristicLab.Persistence.Core;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Persistence;
 using HeuristicLab.Persistence.Interfaces;
 
 namespace HeuristicLab.Persistence.Default.CompositeSerializers {
 
-  [StorableClass]
+  [StorableType("97d00efc-4eb0-4dc7-a58c-977c45c2904c")]
   internal sealed class KeyValuePairSerializer : ICompositeSerializer {
 
@@ -64,6 +64,5 @@
       try {
         key = new Tag("key", t.GetProperty("Key").GetValue(o, null));
-      }
-      catch (Exception e) {
+      } catch (Exception e) {
         throw new PersistenceException("Exception caught during KeyValuePair decomposition", e);
       }
@@ -71,6 +70,5 @@
       try {
         value = new Tag("value", t.GetProperty("Value").GetValue(o, null));
-      }
-      catch (Exception e) {
+      } catch (Exception e) {
         throw new PersistenceException("Exception caught during KeyValuePair decomposition", e);
       }
@@ -91,9 +89,7 @@
         t.GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)
           .Single(fi => fi.Name == "value").SetValue(instance, iter.Current.Value);
-      }
-      catch (InvalidOperationException e) {
+      } catch (InvalidOperationException e) {
         throw new PersistenceException("Not enough components to populate KeyValuePair instance", e);
-      }
-      catch (Exception e) {
+      } catch (Exception e) {
         throw new PersistenceException("Exception caught during KeyValuePair reconstruction", e);
       }
Index: branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/CompositeSerializers/Number2StringSerializer.cs
===================================================================
--- branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/CompositeSerializers/Number2StringSerializer.cs	(revision 14926)
+++ branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/CompositeSerializers/Number2StringSerializer.cs	(revision 14927)
@@ -25,5 +25,5 @@
 using HeuristicLab.Persistence.Auxiliary;
 using HeuristicLab.Persistence.Core;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Persistence;
 using HeuristicLab.Persistence.Default.Xml;
 using HeuristicLab.Persistence.Default.Xml.Primitive;
@@ -40,5 +40,5 @@
   /// but can be useful in generating custom serializers.
   /// </summary>
-  [StorableClass]
+  [StorableType("23af67f5-2af6-4aca-b841-21345eacfb2f")]
   public sealed class Number2StringSerializer : ICompositeSerializer {
 
@@ -115,9 +115,7 @@
       try {
         return numberSerializerMap[Nullable.GetUnderlyingType(type) ?? type].Parse(new XmlString(stringValue));
-      }
-      catch (FormatException e) {
+      } catch (FormatException e) {
         throw new PersistenceException("Invalid element data during number parsing.", e);
-      }
-      catch (OverflowException e) {
+      } catch (OverflowException e) {
         throw new PersistenceException("Overflow during number parsing.", e);
       }
@@ -172,11 +170,9 @@
         it.MoveNext();
         return Parse((string)it.Current.Value, type);
-      }
-      catch (InvalidOperationException e) {
+      } catch (InvalidOperationException e) {
         throw new PersistenceException(
           String.Format("Insufficient meta information to reconstruct number of type {0}.",
           type.VersionInvariantName()), e);
-      }
-      catch (InvalidCastException e) {
+      } catch (InvalidCastException e) {
         throw new PersistenceException("Invalid meta information element type", e);
       }
Index: branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/CompositeSerializers/NumberEnumerable2StringSerializer.cs
===================================================================
--- branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/CompositeSerializers/NumberEnumerable2StringSerializer.cs	(revision 14926)
+++ branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/CompositeSerializers/NumberEnumerable2StringSerializer.cs	(revision 14927)
@@ -26,10 +26,10 @@
 using HeuristicLab.Persistence.Auxiliary;
 using HeuristicLab.Persistence.Core;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Persistence;
 using HeuristicLab.Persistence.Interfaces;
 
 namespace HeuristicLab.Persistence.Default.CompositeSerializers {
 
-  [StorableClass]
+  [StorableType("8bb7c8b8-89e5-41d4-a37e-c43e5beee451")]
   internal sealed class NumberEnumerable2StringSerializer : ICompositeSerializer {
 
@@ -136,9 +136,7 @@
           addMethod.Invoke(instance, new[] { numberConverter.Parse(value, elementType) });
         }
-      }
-      catch (InvalidOperationException e) {
+      } catch (InvalidOperationException e) {
         throw new PersistenceException("Insufficient element data to reconstruct number enumerable", e);
-      }
-      catch (InvalidCastException e) {
+      } catch (InvalidCastException e) {
         throw new PersistenceException("Invalid element data during reconstruction of number enumerable", e);
       }
Index: branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/CompositeSerializers/QueueSerializer.cs
===================================================================
--- branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/CompositeSerializers/QueueSerializer.cs	(revision 14926)
+++ branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/CompositeSerializers/QueueSerializer.cs	(revision 14927)
@@ -25,10 +25,10 @@
 using System.Reflection;
 using HeuristicLab.Persistence.Core;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Persistence;
 using HeuristicLab.Persistence.Interfaces;
 
 namespace HeuristicLab.Persistence.Default.CompositeSerializers {
 
-  [StorableClass]
+  [StorableType("7a0dee32-0800-4a78-a1c3-88cd97939ca0")]
   internal sealed class QueueSerializer : ICompositeSerializer {
 
Index: branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/CompositeSerializers/StackSerializer.cs
===================================================================
--- branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/CompositeSerializers/StackSerializer.cs	(revision 14926)
+++ branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/CompositeSerializers/StackSerializer.cs	(revision 14927)
@@ -25,10 +25,10 @@
 using System.Reflection;
 using HeuristicLab.Persistence.Core;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Persistence;
 using HeuristicLab.Persistence.Interfaces;
 
 namespace HeuristicLab.Persistence.Default.CompositeSerializers {
 
-  [StorableClass]
+  [StorableType("e395b076-6001-417e-925c-8820cc0354df")]
   internal sealed class StackSerializer : ICompositeSerializer {
 
@@ -76,6 +76,5 @@
         foreach (var tag in tags)
           addMethod.Invoke(instance, new[] { tag.Value });
-      }
-      catch (Exception e) {
+      } catch (Exception e) {
         throw new PersistenceException("Exception caught while trying to populate enumerable.", e);
       }
Index: branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/CompositeSerializers/Storable/StorableSerializer.cs
===================================================================
--- branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/CompositeSerializers/Storable/StorableSerializer.cs	(revision 14926)
+++ branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/CompositeSerializers/Storable/StorableSerializer.cs	(revision 14927)
@@ -28,4 +28,5 @@
 using HeuristicLab.Persistence.Core;
 using HeuristicLab.Persistence.Interfaces;
+using HeuristicLab.Persistence;
 
 namespace HeuristicLab.Persistence.Default.CompositeSerializers.Storable {
@@ -38,5 +39,5 @@
   /// or <c>AllFieldsAndAllProperties</c>.
   /// </summary>
-  [StorableClass]
+  [StorableType("ea2bd700-d2c9-4319-9883-b795bd8f078f")]
   public sealed class StorableSerializer : ICompositeSerializer {
 
Index: branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/CompositeSerializers/StructSerializer.cs
===================================================================
--- branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/CompositeSerializers/StructSerializer.cs	(revision 14926)
+++ branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/CompositeSerializers/StructSerializer.cs	(revision 14927)
@@ -24,10 +24,10 @@
 using System.Reflection;
 using HeuristicLab.Persistence.Core;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Persistence;
 using HeuristicLab.Persistence.Interfaces;
 
 namespace HeuristicLab.Persistence.Default.CompositeSerializers {
 
-  [StorableClass]
+  [StorableType("070243ae-13d3-490e-ad17-81a96941ea3c")]
   internal sealed class StructSerializer : ICompositeSerializer {
 
Index: branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/CompositeSerializers/TupleSerializer.cs
===================================================================
--- branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/CompositeSerializers/TupleSerializer.cs	(revision 14926)
+++ branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/CompositeSerializers/TupleSerializer.cs	(revision 14927)
@@ -25,10 +25,10 @@
 using System.Reflection;
 using HeuristicLab.Persistence.Core;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Persistence;
 using HeuristicLab.Persistence.Interfaces;
 
 namespace HeuristicLab.Persistence.Default.CompositeSerializers {
 
-  [StorableClass]
+  [StorableType("604ea532-4a4f-4cf6-af44-1e56cf357997")]
   internal sealed class TupleSerializer : ICompositeSerializer {
 
Index: branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/CompositeSerializers/TypeSerializer.cs
===================================================================
--- branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/CompositeSerializers/TypeSerializer.cs	(revision 14926)
+++ branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/CompositeSerializers/TypeSerializer.cs	(revision 14927)
@@ -24,10 +24,10 @@
 using HeuristicLab.Persistence.Auxiliary;
 using HeuristicLab.Persistence.Core;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Persistence;
 using HeuristicLab.Persistence.Interfaces;
 
 namespace HeuristicLab.Persistence.Default.CompositeSerializers {
 
-  [StorableClass]
+  [StorableType("dd23170e-0998-438a-b935-2061a7a4762e")]
   internal sealed class TypeSerializer : ICompositeSerializer {
 
@@ -66,15 +66,12 @@
       try {
         it.MoveNext();
-      }
-      catch (InvalidOperationException e) {
+      } catch (InvalidOperationException e) {
         throw new PersistenceException("Insufficient meta information to instantiate Type object", e);
       }
       try {
         return TypeLoader.Load((string)it.Current.Value);
-      }
-      catch (InvalidCastException e) {
+      } catch (InvalidCastException e) {
         throw new PersistenceException("Invalid meta information during reconstruction of Type object", e);
-      }
-      catch (TypeLoadException e) {
+      } catch (TypeLoadException e) {
         throw new PersistenceException(String.Format(
           "Cannot load Type {0}, make sure all required assemblies are available.",
Index: branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/DebugString/DebugString.cs
===================================================================
--- branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/DebugString/DebugString.cs	(revision 14926)
+++ branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/DebugString/DebugString.cs	(revision 14927)
@@ -20,5 +20,5 @@
 #endregion
 
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Persistence;
 using HeuristicLab.Persistence.Interfaces;
 
@@ -28,5 +28,5 @@
   /// Simple write-only format for debugging purposes.
   /// </summary>
-  [StorableClass]
+  [StorableType("05a1ee13-75c0-4ff1-b403-57573364d7e3")]
   public class DebugString : ISerialData {
 
Index: branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/DebugString/DebugStringFormat.cs
===================================================================
--- branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/DebugString/DebugStringFormat.cs	(revision 14926)
+++ branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/DebugString/DebugStringFormat.cs	(revision 14927)
@@ -20,5 +20,5 @@
 #endregion
 
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Persistence;
 using HeuristicLab.Persistence.Interfaces;
 
@@ -28,5 +28,5 @@
   /// Simple write-only format for debugging purposes.
   /// </summary>
-  [StorableClass]
+  [StorableType("90f9f859-5c96-4d91-8f17-826a401ecd8f")]
   public class DebugStringFormat : FormatBase<DebugString> {
     /// <summary>
Index: branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/DebugString/DebugStringGenerator.cs
===================================================================
--- branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/DebugString/DebugStringGenerator.cs	(revision 14926)
+++ branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/DebugString/DebugStringGenerator.cs	(revision 14927)
@@ -185,5 +185,5 @@
     /// <returns>A string representation of the complete object graph.</returns>
     public static string Serialize(object o, Configuration configuration) {
-      Serializer s = new Serializer(o, configuration);
+      var s = new HeuristicLab.Persistence.Core.Serializer(o, configuration);
       DebugStringGenerator generator = new DebugStringGenerator();
       StringBuilder sb = new StringBuilder();
Index: branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/Xml/Compact/ByteArray2XmlSerializer.cs
===================================================================
--- branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/Xml/Compact/ByteArray2XmlSerializer.cs	(revision 14926)
+++ branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/Xml/Compact/ByteArray2XmlSerializer.cs	(revision 14927)
@@ -36,4 +36,4 @@
   internal sealed class Bytet2DArray2XmlSerializer : ByteArray2XmlSerializer<byte[,]> { }
 
-  internal sealed class Byte3DArray2XmlSerializer : ByteArray2XmlSerializer<byte[, ,]> { }
+  internal sealed class Byte3DArray2XmlSerializer : ByteArray2XmlSerializer<byte[,,]> { }
 }
Index: branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/Xml/Compact/DoubleArray2XmlSerializer.cs
===================================================================
--- branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/Xml/Compact/DoubleArray2XmlSerializer.cs	(revision 14926)
+++ branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/Xml/Compact/DoubleArray2XmlSerializer.cs	(revision 14927)
@@ -39,5 +39,5 @@
   internal sealed class Double2DArray2XmlSerializer : DoubleArray2XmlSerializerBase<double[,]> { }
 
-  internal sealed class Double3DArray2XmlSerializer : DoubleArray2XmlSerializerBase<double[, ,]> { }
+  internal sealed class Double3DArray2XmlSerializer : DoubleArray2XmlSerializerBase<double[,,]> { }
 
 }
Index: branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/Xml/Compact/DoubleList2XmlSerializer.cs
===================================================================
--- branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/Xml/Compact/DoubleList2XmlSerializer.cs	(revision 14926)
+++ branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/Xml/Compact/DoubleList2XmlSerializer.cs	(revision 14927)
@@ -46,9 +46,7 @@
         }
         return list;
-      }
-      catch (InvalidCastException e) {
+      } catch (InvalidCastException e) {
         throw new PersistenceException("Invalid element data during reconstruction of List<double>.", e);
-      }
-      catch (OverflowException e) {
+      } catch (OverflowException e) {
         throw new PersistenceException("Overflow during element parsing while trying to reconstruct List<double>.", e);
       }
Index: branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/Xml/Compact/IntArray2XmlSerializer.cs
===================================================================
--- branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/Xml/Compact/IntArray2XmlSerializer.cs	(revision 14926)
+++ branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/Xml/Compact/IntArray2XmlSerializer.cs	(revision 14927)
@@ -38,5 +38,5 @@
   internal class Int2DArray2XmlSerializer : IntArray2XmlSerializerBase<int[,]> { }
 
-  internal class Int3DArray2XmlSerializer : IntArray2XmlSerializerBase<int[, ,]> { }
+  internal class Int3DArray2XmlSerializer : IntArray2XmlSerializerBase<int[,,]> { }
 
 }
Index: branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/Xml/Compact/NumberArray2XmlSerializerBase.cs
===================================================================
--- branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/Xml/Compact/NumberArray2XmlSerializerBase.cs	(revision 14926)
+++ branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/Xml/Compact/NumberArray2XmlSerializerBase.cs	(revision 14927)
@@ -27,9 +27,9 @@
 using HeuristicLab.Persistence.Auxiliary;
 using HeuristicLab.Persistence.Core;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Persistence;
 
 namespace HeuristicLab.Persistence.Default.Xml.Compact {
 
-  [StorableClass]
+  [StorableType("ed511bc6-4889-4be1-bb57-c819d3e9e7be")]
   internal abstract class NumberArray2XmlSerializerBase<T> : CompactXmlSerializerBase<T> where T : class {
 
@@ -108,12 +108,9 @@
           throw new PersistenceException("Insufficient number of elements while trying to fill number array.");
         return (T)(object)a;
-      }
-      catch (InvalidOperationException e) {
+      } catch (InvalidOperationException e) {
         throw new PersistenceException("Insufficient information to rebuild number array.", e);
-      }
-      catch (InvalidCastException e) {
+      } catch (InvalidCastException e) {
         throw new PersistenceException("Invalid element data or meta data to reconstruct number array.", e);
-      }
-      catch (OverflowException e) {
+      } catch (OverflowException e) {
         throw new PersistenceException("Overflow during element parsing while trying to reconstruct number array.", e);
       }
Index: branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/Xml/Compact/NumberEnumeration2XmlSerializerBase.cs
===================================================================
--- branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/Xml/Compact/NumberEnumeration2XmlSerializerBase.cs	(revision 14926)
+++ branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/Xml/Compact/NumberEnumeration2XmlSerializerBase.cs	(revision 14927)
@@ -25,9 +25,9 @@
 using HeuristicLab.Persistence.Auxiliary;
 using HeuristicLab.Persistence.Core;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Persistence;
 
 namespace HeuristicLab.Persistence.Default.Xml.Compact {
 
-  [StorableClass]
+  [StorableType("a0910e86-de41-4862-abf5-82bbed54de70")]
   internal abstract class NumberEnumeration2XmlSerializerBase<T> : CompactXmlSerializerBase<T> where T : IEnumerable {
 
@@ -54,9 +54,7 @@
         }
         return (T)enumeration;
-      }
-      catch (InvalidCastException e) {
+      } catch (InvalidCastException e) {
         throw new PersistenceException("Invalid element data during reconstruction of number enumerable.", e);
-      }
-      catch (OverflowException e) {
+      } catch (OverflowException e) {
         throw new PersistenceException("Overflow during element parsing while trying to reconstruct number enumerable.", e);
       }
Index: branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/Xml/EasyXmlGenerator.cs
===================================================================
--- branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/Xml/EasyXmlGenerator.cs	(revision 14926)
+++ branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/Xml/EasyXmlGenerator.cs	(revision 14927)
@@ -154,6 +154,5 @@
         File.Copy(tempfile, filename, true);
         File.Delete(tempfile);
-      }
-      catch (Exception) {
+      } catch (Exception) {
         Logger.Warn("Exception caught, no data has been written.");
         throw;
@@ -181,5 +180,5 @@
       try {
         using (StreamWriter writer = new StreamWriter(stream)) {
-          Serializer serializer = new Serializer(obj, config);
+          var serializer = new HeuristicLab.Persistence.Core.Serializer(obj, config);
           serializer.InterleaveTypeInformation = true;
           ReadableXmlGenerator generator = new ReadableXmlGenerator();
@@ -190,9 +189,7 @@
           writer.Flush();
         }
-      }
-      catch (PersistenceException) {
+      } catch (PersistenceException) {
         throw;
-      }
-      catch (Exception e) {
+      } catch (Exception e) {
         throw new PersistenceException("Unexpected exception during Serialization.", e);
       }
Index: branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/Xml/Primitive/Char2XmlFormatter.cs
===================================================================
--- branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/Xml/Primitive/Char2XmlFormatter.cs	(revision 14926)
+++ branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/Xml/Primitive/Char2XmlFormatter.cs	(revision 14927)
@@ -37,5 +37,5 @@
 
     private static string ToBase64String(char c) {
-      return string.Format("<Base64>{0}</Base64>", Convert.ToBase64String(Encoding.ASCII.GetBytes(new[] {c})));
+      return string.Format("<Base64>{0}</Base64>", Convert.ToBase64String(Encoding.ASCII.GetBytes(new[] { c })));
     }
 
Index: branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/Xml/Primitive/DateTime2XmlSerializer.cs
===================================================================
--- branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/Xml/Primitive/DateTime2XmlSerializer.cs	(revision 14926)
+++ branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/Xml/Primitive/DateTime2XmlSerializer.cs	(revision 14927)
@@ -34,6 +34,5 @@
       try {
         return new DateTime(long.Parse(x.Data));
-      }
-      catch (Exception e) {
+      } catch (Exception e) {
         throw new PersistenceException("Exception caugth while trying to reconstruct DateTime object.", e);
       }
Index: branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/Xml/Primitive/Guid2XmlSerializer.cs
===================================================================
--- branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/Xml/Primitive/Guid2XmlSerializer.cs	(revision 14926)
+++ branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/Xml/Primitive/Guid2XmlSerializer.cs	(revision 14927)
@@ -36,9 +36,7 @@
       try {
         return new Guid(t.Data);
-      }
-      catch (FormatException x) {
+      } catch (FormatException x) {
         throw new PersistenceException("Cannot parse Guid string representation.", x);
-      }
-      catch (OverflowException x) {
+      } catch (OverflowException x) {
         throw new PersistenceException("Overflow during Guid parsing.", x);
       }
Index: branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/Xml/Primitive/SimpleNumber2XmlSerializerBase.cs
===================================================================
--- branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/Xml/Primitive/SimpleNumber2XmlSerializerBase.cs	(revision 14926)
+++ branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/Xml/Primitive/SimpleNumber2XmlSerializerBase.cs	(revision 14927)
@@ -44,6 +44,5 @@
       try {
         return (T)ParseMethod.Invoke(null, new[] { x.Data });
-      }
-      catch (Exception e) {
+      } catch (Exception e) {
         throw new PersistenceException("Could not parse simple number.", e);
       }
Index: branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/Xml/Primitive/System.Drawing/Bitmap2XmlSerializer.cs
===================================================================
--- branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/Xml/Primitive/System.Drawing/Bitmap2XmlSerializer.cs	(revision 14926)
+++ branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/Xml/Primitive/System.Drawing/Bitmap2XmlSerializer.cs	(revision 14927)
@@ -28,5 +28,5 @@
   internal sealed class Bitmap2XmlSerializer : PrimitiveXmlSerializerBase<Bitmap> {
 
-    public override XmlString Format(Bitmap o) {      
+    public override XmlString Format(Bitmap o) {
       MemoryStream stream = new MemoryStream();
       lock (o)
Index: branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/Xml/Primitive/TimeSpan2XmlSerializer.cs
===================================================================
--- branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/Xml/Primitive/TimeSpan2XmlSerializer.cs	(revision 14926)
+++ branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/Xml/Primitive/TimeSpan2XmlSerializer.cs	(revision 14927)
@@ -35,9 +35,7 @@
       try {
         return TimeSpan.Parse(t.Data);
-      }
-      catch (FormatException x) {
+      } catch (FormatException x) {
         throw new PersistenceException("Cannot parse TimeSpan string representation.", x);
-      }
-      catch (OverflowException x) {
+      } catch (OverflowException x) {
         throw new PersistenceException("Overflow during TimeSpan parsing.", x);
       }
Index: branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/Xml/XmlFormat.cs
===================================================================
--- branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/Xml/XmlFormat.cs	(revision 14926)
+++ branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/Xml/XmlFormat.cs	(revision 14927)
@@ -20,5 +20,5 @@
 #endregion
 
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Persistence;
 using HeuristicLab.Persistence.Interfaces;
 
@@ -29,5 +29,5 @@
   /// or save to a file.
   /// </summary>
-  [StorableClass]
+  [StorableType("8c79e9a6-02d6-471c-8787-43d96d61c1db")]
   public class XmlFormat : FormatBase<XmlString> {
     /// <summary>
Index: branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/Xml/XmlGenerator.cs
===================================================================
--- branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/Xml/XmlGenerator.cs	(revision 14926)
+++ branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/Xml/XmlGenerator.cs	(revision 14927)
@@ -61,5 +61,5 @@
     }
 
-    protected enum NodeType { Start, End, Inline } ;
+    protected enum NodeType { Start, End, Inline };
 
     protected static void AddXmlTagContent(StringBuilder sb, string name, Dictionary<string, string> attributes) {
@@ -256,6 +256,5 @@
           {"typeName", lastTypeToken.TypeName },
           {"serializer", lastTypeToken.Serializer }});
-      }
-      finally {
+      } finally {
         lastTypeToken = null;
       }
@@ -313,9 +312,9 @@
     private static void Serialize(object obj, Stream stream, Configuration config, bool includeAssemblies
    , CompressionLevel compression) {
-      Serializer serializer = new Serializer(obj, config);
+      var serializer = new HeuristicLab.Persistence.Core.Serializer(obj, config);
       Serialize(stream, includeAssemblies, compression, serializer);
     }
 
-    private static void Serialize(Stream stream, bool includeAssemblies, CompressionLevel compression, Serializer serializer) {
+    private static void Serialize(Stream stream, bool includeAssemblies, CompressionLevel compression, HeuristicLab.Persistence.Core.Serializer serializer) {
       try {
         DateTime start = DateTime.Now;
@@ -360,6 +359,5 @@
         Logger.Info(String.Format("serialization took {0} seconds with compression level {1}",
           (DateTime.Now - start).TotalSeconds, compression));
-      }
-      catch (Exception) {
+      } catch (Exception) {
         Logger.Warn("Exception caught, no data has been serialized.");
         throw;
@@ -385,6 +383,5 @@
         File.Copy(tempfile, filename, true);
         File.Delete(tempfile);
-      }
-      catch (Exception) {
+      } catch (Exception) {
         Logger.Warn("Exception caught, no data has been written.");
         throw;
@@ -426,5 +423,5 @@
                                  CompressionType compressionType = CompressionType.GZip) {
       try {
-        Serializer serializer = new Serializer(obj, config);
+        var serializer = new HeuristicLab.Persistence.Core.Serializer(obj, config);
         if (compressionType == CompressionType.Zip) {
           Serialize(obj, stream, config, includeAssemblies, CompressionLevel.Optimal);
@@ -432,9 +429,7 @@
           Serialize(stream, serializer);
         }
-      }
-      catch (PersistenceException) {
+      } catch (PersistenceException) {
         throw;
-      }
-      catch (Exception e) {
+      } catch (Exception e) {
         throw new PersistenceException("Unexpected exception during Serialization.", e);
       }
@@ -453,5 +448,5 @@
                                  CompressionType compressionType = CompressionType.GZip) {
       try {
-        Serializer serializer = new Serializer(obj, config);
+        var serializer = new HeuristicLab.Persistence.Core.Serializer(obj, config);
         if (compressionType == CompressionType.Zip) {
           Serialize(stream, includeAssemblies, CompressionLevel.Optimal, serializer);
@@ -460,14 +455,12 @@
         }
         types = serializer.SerializedTypes;
-      }
-      catch (PersistenceException) {
+      } catch (PersistenceException) {
         throw;
-      }
-      catch (Exception e) {
+      } catch (Exception e) {
         throw new PersistenceException("Unexpected exception during Serialization.", e);
       }
     }
 
-    private static void Serialize(Stream stream, Serializer serializer) {
+    private static void Serialize(Stream stream, HeuristicLab.Persistence.Core.Serializer serializer) {
       using (StreamWriter writer = new StreamWriter(new GZipStream(stream, CompressionMode.Compress))) {
         serializer.InterleaveTypeInformation = true;
Index: branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/Xml/XmlParser.cs
===================================================================
--- branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/Xml/XmlParser.cs	(revision 14926)
+++ branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/Xml/XmlParser.cs	(revision 14927)
@@ -81,6 +81,5 @@
         try {
           iterator = handlers[reader.Name].Invoke();
-        }
-        catch (KeyNotFoundException) {
+        } catch (KeyNotFoundException) {
           throw new PersistenceException(String.Format(
             "Invalid XML tag \"{0}\" in persistence file.",
@@ -182,9 +181,7 @@
         }
         return typeCache;
-      }
-      catch (PersistenceException) {
+      } catch (PersistenceException) {
         throw;
-      }
-      catch (Exception e) {
+      } catch (Exception e) {
         throw new PersistenceException("Unexpected exception during type cache parsing.", e);
       }
@@ -204,6 +201,5 @@
           }
         }
-      }
-      finally {
+      } finally {
         TimeSpan end = System.Diagnostics.Process.GetCurrentProcess().TotalProcessorTime;
         Tracing.Logger.Info(string.Format(
@@ -251,9 +247,7 @@
             return deserializer.Deserialize(parser);
           }
-        }
-        catch (PersistenceException) {
+        } catch (PersistenceException) {
           throw;
-        }
-        catch (Exception x) {
+        } catch (Exception x) {
           throw new PersistenceException("Unexpected exception during deserialization", x);
         }
@@ -279,9 +273,7 @@
 
         return result;
-      }
-      catch (PersistenceException) {
+      } catch (PersistenceException) {
         throw;
-      }
-      catch (Exception e) {
+      } catch (Exception e) {
         throw new PersistenceException("Unexpected exception during deserialization", e);
       }
Index: branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/Xml/XmlString.cs
===================================================================
--- branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/Xml/XmlString.cs	(revision 14926)
+++ branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/Xml/XmlString.cs	(revision 14927)
@@ -21,5 +21,5 @@
 
 using System.Text;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Persistence;
 using HeuristicLab.Persistence.Interfaces;
 
@@ -29,5 +29,5 @@
   /// XML friendly encapsulation of string data.
   /// </summary>
-  [StorableClass]
+  [StorableType("a358bb95-a494-4512-b1fe-53c66c77423c")]
   public class XmlString : ISerialData {
 
Index: branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/HeuristicLab.Persistence-3.3.csproj
===================================================================
--- branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/HeuristicLab.Persistence-3.3.csproj	(revision 14926)
+++ branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/HeuristicLab.Persistence-3.3.csproj	(revision 14927)
@@ -134,5 +134,4 @@
     <None Include="Plugin.cs.frame" />
     <Compile Include="Core\Configuration.cs" />
-    <Compile Include="Core\PersistenceException.cs" />
     <Compile Include="Core\PrimitiveSerializerBase.cs" />
     <Compile Include="Core\FormatBase.cs" />
@@ -157,5 +156,4 @@
     <Compile Include="Default\CompositeSerializers\Storable\StorableReflection.cs" />
     <Compile Include="Default\CompositeSerializers\Storable\StorableMemberInfo.cs" />
-    <Compile Include="Core\DataMemberAccessor.cs" />
     <Compile Include="Default\CompositeSerializers\Storable\StorableSerializer.cs" />
     <Compile Include="Default\CompositeSerializers\StructSerializer.cs" />
Index: branches/PersistenceReintegration/HeuristicLab.Persistence/4.0/Core/ComponentInfo.cs
===================================================================
--- branches/PersistenceReintegration/HeuristicLab.Persistence/4.0/Core/ComponentInfo.cs	(revision 14926)
+++ branches/PersistenceReintegration/HeuristicLab.Persistence/4.0/Core/ComponentInfo.cs	(revision 14927)
@@ -21,5 +21,4 @@
 
 using System.Reflection;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 
 namespace HeuristicLab.Persistence {
Index: branches/PersistenceReintegration/HeuristicLab.Persistence/4.0/Core/DataMemberAccessor.cs
===================================================================
--- branches/PersistenceReintegration/HeuristicLab.Persistence/4.0/Core/DataMemberAccessor.cs	(revision 14927)
+++ branches/PersistenceReintegration/HeuristicLab.Persistence/4.0/Core/DataMemberAccessor.cs	(revision 14927)
@@ -0,0 +1,251 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Reflection;
+using System.Reflection.Emit;
+
+namespace HeuristicLab.Persistence {
+
+  /// <summary>
+  /// Encapsulation and abstraction for access a data member of an object
+  /// regardless of it being a property or field. Additionally a
+  /// default value and an alternate name can be specified.
+  /// </summary>
+  public sealed class DataMemberAccessor {
+
+    #region fields
+
+    /// <summary>
+    /// The function to get the value of the data member.
+    /// </summary>
+    public readonly Func<object, object> Get;
+
+    /// <summary>
+    /// The function to set the value of the data member.
+    /// </summary>
+    public readonly Action<object, object> Set;
+
+    /// <summary>
+    /// The name of the data member.
+    /// </summary>
+    public readonly string Name;
+
+    /// <summary>
+    /// The default value of the data member, can remain <c>null</c>
+    /// if no default value. If left null, this will also leave the
+    /// default value for value types (e.g. 0 for <c>int</c>).
+    /// </summary>
+    public readonly object DefaultValue;
+
+    #endregion
+
+    #region constructors
+
+    /// <summary>
+    /// Create a <see cref="DataMemberAccessor"/> from a FieldInfo or
+    /// PropertyInfo for the give object.
+    /// </summary>
+    /// <param name="memberInfo">The member info.</param>
+    /// <param name="name">The name.</param>
+    /// <param name="defaultvalue">The defaultvalue.</param>
+    public DataMemberAccessor(MemberInfo memberInfo, string name, object defaultvalue) {
+      Get = GenerateGetter(memberInfo);
+      Set = GenerateSetter(memberInfo);
+      Name = name;
+      DefaultValue = defaultvalue;
+    }
+
+    /// <summary>
+    /// Create an empty accessor that just encapsulates an object
+    /// without access.
+    /// </summary>    
+    public DataMemberAccessor() {
+      Name = null;
+      DefaultValue = null;
+      Get = Id;
+    }
+
+    /// <summary>
+    /// Create an empty accessor that just encapsulates an object
+    /// without access.
+    /// </summary>    
+    /// <param name="name">The object's name.</param>
+    public DataMemberAccessor(string name) {
+      Name = name;
+      DefaultValue = null;
+      Get = Id;
+    }
+
+    /// <summary>
+    /// Initializes a new instance of the <see cref="DataMemberAccessor"/> class using the
+    /// getter and setter from an exisiting instance but with a new name and default value.
+    /// </summary>
+    /// <param name="dma">The existing DataMemberAccessor.</param>
+    /// <param name="name">The new name.</param>
+    /// <param name="defaultValue">The new default value.</param>
+    public DataMemberAccessor(DataMemberAccessor dma, string name, object defaultValue) {
+      Get = dma.Get;
+      Set = dma.Set;
+      this.Name = name;
+      this.DefaultValue = defaultValue;
+    }
+
+    #endregion
+
+    #region auxiliary methods
+
+    /// <summary>
+    /// Returns a <see cref="System.String"/> that represents this instance.
+    /// </summary>
+    /// <returns>
+    /// A <see cref="System.String"/> that represents this instance.
+    /// </returns>
+    public override string ToString() {
+      return String.Format("DataMemberAccessor({0}, {1}, {2}, {3})",
+        Name,
+        DefaultValue ?? "<null>",
+        Get.Method, Set.Method);
+    }
+
+    /// <summary>
+    /// The identity function
+    /// </summary>
+    /// <param name="o">An object.</param>
+    /// <returns>its argument o unmodified.</returns>
+    public static object Id(object o) {
+      return o;
+    }
+
+    #endregion
+
+    #region static methods (code generators)
+
+    /// <summary>
+    /// Generate a getter for the given field or property
+    /// </summary>
+    /// <param name="memberInfo">The member info.</param>
+    /// <returns></returns>
+    public static Func<object, object> GenerateGetter(MemberInfo memberInfo) {
+      if (memberInfo.MemberType == MemberTypes.Field) {
+        FieldInfo fieldInfo = (FieldInfo)memberInfo;
+        return GenerateFieldGetter(fieldInfo);
+      } else if (memberInfo.MemberType == MemberTypes.Property) {
+        return GeneratePropertyGetter((PropertyInfo)memberInfo);
+      } else {
+        throw new PersistenceException(
+          "The Storable attribute can only be applied to fields and properties.");
+      }
+    }
+
+    /// <summary>
+    /// Generates a setter for the given field or property.
+    /// </summary>
+    /// <param name="memberInfo">The member info.</param>
+    /// <returns></returns>
+    public static Action<object, object> GenerateSetter(MemberInfo memberInfo) {
+      if (memberInfo.MemberType == MemberTypes.Field) {
+        FieldInfo fieldInfo = (FieldInfo)memberInfo;
+        return GenerateFieldSetter(fieldInfo);
+      } else if (memberInfo.MemberType == MemberTypes.Property) {
+        return GeneratePropertySetter((PropertyInfo)memberInfo);
+      } else {
+        throw new PersistenceException(
+          "The Storable attribute can only be applied to fields and properties.");
+      }
+    }
+
+    /// <summary>
+    /// Generates a dynamically compiled getter to access fields (even private ones).
+    /// </summary>
+    /// <param name="fieldInfo">The field info.</param>
+    /// <returns>A Func&lt;object, object&gt;</returns>
+    public static Func<object, object> GenerateFieldGetter(FieldInfo fieldInfo) {
+      DynamicMethod dm = new DynamicMethod("", typeof(object), new Type[] { typeof(object) }, fieldInfo.DeclaringType, true);
+      ILGenerator ilgen = dm.GetILGenerator();
+      ilgen.Emit(OpCodes.Ldarg_0);
+      ilgen.Emit(OpCodes.Castclass, fieldInfo.DeclaringType);
+      ilgen.Emit(OpCodes.Ldfld, fieldInfo);
+      ilgen.Emit(OpCodes.Box, fieldInfo.FieldType);
+      ilgen.Emit(OpCodes.Ret);
+      return (Func<object, object>)dm.CreateDelegate(typeof(Func<object, object>));
+    }
+
+    /// <summary>
+    /// Generates a dynamically compiled setter to access fields (even private ones).
+    /// </summary>
+    /// <param name="fieldInfo">The field info.</param>
+    /// <returns>An Action&lt;object, object%gt;</returns>
+    public static Action<object, object> GenerateFieldSetter(FieldInfo fieldInfo) {
+      DynamicMethod dm = new DynamicMethod("", null, new Type[] { typeof(object), typeof(object) }, fieldInfo.DeclaringType, true);
+      ILGenerator ilgen = dm.GetILGenerator();
+      ilgen.Emit(OpCodes.Ldarg_0);
+      ilgen.Emit(OpCodes.Castclass, fieldInfo.DeclaringType);
+      ilgen.Emit(OpCodes.Ldarg_1);
+      ilgen.Emit(OpCodes.Unbox_Any, fieldInfo.FieldType);
+      ilgen.Emit(OpCodes.Stfld, fieldInfo);
+      ilgen.Emit(OpCodes.Ret);
+      return (Action<object, object>)dm.CreateDelegate(typeof(Action<object, object>));
+    }
+
+    /// <summary>
+    /// Generates a dynamically compiled getter to access properties (even private ones).
+    /// </summary>
+    /// <param name="propertyInfo">The property info.</param>
+    /// <returns>A Func&lt;object, object&gt;</returns>
+    public static Func<object, object> GeneratePropertyGetter(PropertyInfo propertyInfo) {
+      MethodInfo getter = propertyInfo.GetGetMethod(true);
+      if (getter == null)
+        return null;
+      DynamicMethod dm = new DynamicMethod("", typeof(object), new Type[] { typeof(object) }, propertyInfo.DeclaringType, true);
+      ILGenerator ilgen = dm.GetILGenerator();
+      ilgen.Emit(OpCodes.Ldarg_0);
+      ilgen.Emit(OpCodes.Castclass, propertyInfo.DeclaringType);
+      ilgen.Emit(OpCodes.Callvirt, getter);
+      ilgen.Emit(OpCodes.Box, propertyInfo.PropertyType);
+      ilgen.Emit(OpCodes.Ret);
+      return (Func<object, object>)dm.CreateDelegate(typeof(Func<object, object>));
+    }
+
+    /// <summary>
+    /// Generates a dynamically compiled setter to access properties (even private ones).
+    /// </summary>
+    /// <param name="propertyInfo">The property info.</param>
+    /// <returns>An Action&lt;object, object%gt;</returns>
+    public static Action<object, object> GeneratePropertySetter(PropertyInfo propertyInfo) {
+      MethodInfo setter = propertyInfo.GetSetMethod(true);
+      if (setter == null)
+        return null;
+      DynamicMethod dm = new DynamicMethod("", null, new Type[] { typeof(object), typeof(object) }, propertyInfo.DeclaringType, true);
+      ILGenerator ilgen = dm.GetILGenerator();
+      ilgen.Emit(OpCodes.Ldarg_0);
+      ilgen.Emit(OpCodes.Castclass, propertyInfo.DeclaringType);
+      ilgen.Emit(OpCodes.Ldarg_1);
+      ilgen.Emit(OpCodes.Unbox_Any, propertyInfo.PropertyType);
+      ilgen.Emit(OpCodes.Callvirt, setter);
+      ilgen.Emit(OpCodes.Ret);
+      return (Action<object, object>)dm.CreateDelegate(typeof(Action<object, object>));
+    }
+
+    #endregion
+  }
+
+}
Index: branches/PersistenceReintegration/HeuristicLab.Persistence/4.0/Core/PersistenceException.cs
===================================================================
--- branches/PersistenceReintegration/HeuristicLab.Persistence/4.0/Core/PersistenceException.cs	(revision 14927)
+++ branches/PersistenceReintegration/HeuristicLab.Persistence/4.0/Core/PersistenceException.cs	(revision 14927)
@@ -0,0 +1,90 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using System.Text;
+
+namespace HeuristicLab.Persistence {
+
+  /// <summary>
+  /// Exception thrown by components inside the persistence framework.
+  /// </summary>
+  [Serializable]
+  public class PersistenceException : Exception {
+
+    /// <summary>
+    /// Initializes a new instance of the <see cref="PersistenceException"/> class.
+    /// </summary>
+    public PersistenceException() : base() { }
+
+    /// <summary>
+    /// Initializes a new instance of the <see cref="PersistenceException"/> class.
+    /// </summary>
+    /// <param name="message">The message.</param>
+    public PersistenceException(string message) : base(message) { }
+
+    /// <summary>
+    /// Initializes a new instance of the <see cref="PersistenceException"/> class.
+    /// </summary>
+    /// <param name="message">The message.</param>
+    /// <param name="innerException">The inner exception.</param>
+    public PersistenceException(string message, Exception innerException) :
+      base(message, innerException) { }
+
+    /// <summary>
+    /// Initializes a new instance of the <see cref="PersistenceException"/> class.
+    /// </summary>
+    /// <param name="message">The message.</param>
+    /// <param name="innerExceptions">The inner exceptions.</param>
+    public PersistenceException(string message, IEnumerable<Exception> innerExceptions)
+      : base(message) {
+      int i = 0;
+      foreach (var x in innerExceptions) {
+        i += 1;
+        this.Data.Add("Inner Exception " + i, x);
+      }
+    }
+
+    protected PersistenceException(SerializationInfo info, StreamingContext context) : base(info, context) { }
+
+    /// <summary>
+    /// Returns a <see cref="System.String"/> that represents this instance.
+    /// </summary>
+    /// <returns>
+    /// A <see cref="System.String"/> that represents this instance.
+    /// </returns>
+    /// <PermissionSet>
+    /// 	<IPermission class="System.Security.Permissions.FileIOPermission, mscorlib, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" PathDiscovery="*AllFiles*"/>
+    /// </PermissionSet>
+    public override string ToString() {
+      var sb = new StringBuilder()
+        .Append(base.ToString())
+        .Append('\n');
+      foreach (Exception x in Data.Values) {
+        sb.Append(x.ToString()).Append('\n');
+      }
+      return sb.ToString();
+    }
+  }
+
+}
Index: branches/PersistenceReintegration/HeuristicLab.Persistence/4.0/Core/StaticCache.cs
===================================================================
--- branches/PersistenceReintegration/HeuristicLab.Persistence/4.0/Core/StaticCache.cs	(revision 14926)
+++ branches/PersistenceReintegration/HeuristicLab.Persistence/4.0/Core/StaticCache.cs	(revision 14927)
@@ -26,5 +26,4 @@
 using System.Linq;
 using Google.ProtocolBuffers;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 using HeuristicLab.PluginInfrastructure;
 
@@ -50,19 +49,4 @@
       foreach (var transformer in ApplicationManager.Manager.GetInstances<ITransformer>())
         RegisterTransformer(transformer);
-
-
-      // 
-      //  
-      //  
-      //  
-      //  
-      //  
-      //  
-      //  
-      //  
-      //  
-      //  "0F24C888-AF34-4318-9472-187B9AA85F3C"
-
-
 
       RegisterType(new Guid("ECAEA154-6BFF-419F-8BE6-2565E9314825"), typeof(object));
Index: branches/PersistenceReintegration/HeuristicLab.Persistence/4.0/Core/StorableAttribute.cs
===================================================================
--- branches/PersistenceReintegration/HeuristicLab.Persistence/4.0/Core/StorableAttribute.cs	(revision 14926)
+++ branches/PersistenceReintegration/HeuristicLab.Persistence/4.0/Core/StorableAttribute.cs	(revision 14927)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2016 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
@@ -21,13 +21,14 @@
 
 using System;
+using System.Reflection;
 using System.Text;
 
-namespace HeuristicLab.Persistence.Default.CompositeSerializers.Storable {
+namespace HeuristicLab.Persistence {
 
 
   /// <summary>
   /// Mark the member of a class to be considered by the <c>StorableSerializer</c>.
-  /// The class must be marked as <c>[StorableClass]</c> and the
-  /// <c>StorableClassType</c> should be set to <c>MarkedOnly</c> for
+  /// The class must be marked as <c>[StorableClass("05FE6F11-87C6-435E-800A-166AFACCF5AC")]</c> and the
+  /// <c>StorableMemberSelection</c> should be set to <c>MarkedOnly</c> for
   /// this attribute to kick in.
   /// </summary>
@@ -37,4 +38,10 @@
     Inherited = false)]
   public class StorableAttribute : Attribute {
+    public static bool IsStorable(MemberInfo memberInfo) {
+      return Attribute.IsDefined(memberInfo, typeof(StorableAttribute), false);
+    }
+    public static StorableAttribute GetStorableAttribute(MemberInfo memberInfo) {
+      return (StorableAttribute)Attribute.GetCustomAttribute(memberInfo, typeof(StorableAttribute), false);
+    }
 
     /// <summary>
Index: branches/PersistenceReintegration/HeuristicLab.Persistence/4.0/Core/StorableConstructorAttribute.cs
===================================================================
--- branches/PersistenceReintegration/HeuristicLab.Persistence/4.0/Core/StorableConstructorAttribute.cs	(revision 14926)
+++ branches/PersistenceReintegration/HeuristicLab.Persistence/4.0/Core/StorableConstructorAttribute.cs	(revision 14927)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2016 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
@@ -21,6 +21,7 @@
 
 using System;
+using System.Reflection;
 
-namespace HeuristicLab.Persistence.Default.CompositeSerializers.Storable {
+namespace HeuristicLab.Persistence {
 
 
@@ -34,4 +35,8 @@
   /// </summary>
   [AttributeUsage(AttributeTargets.Constructor, Inherited = false, AllowMultiple = false)]
-  public sealed class StorableConstructorAttribute : Attribute { }
+  public sealed class StorableConstructorAttribute : Attribute {
+    public static bool IsStorableConstructor(ConstructorInfo constructorInfo) {
+      return Attribute.IsDefined(constructorInfo, typeof(StorableConstructorAttribute));
+    }
+  }
 }
Index: branches/PersistenceReintegration/HeuristicLab.Persistence/4.0/Core/StorableConversionAttribute.cs
===================================================================
--- branches/PersistenceReintegration/HeuristicLab.Persistence/4.0/Core/StorableConversionAttribute.cs	(revision 14926)
+++ branches/PersistenceReintegration/HeuristicLab.Persistence/4.0/Core/StorableConversionAttribute.cs	(revision 14927)
@@ -28,6 +28,5 @@
     public uint SrcVersion { get; set; }
 
-    public StorableConversionAttribute(uint srcVersion)
-    {
+    public StorableConversionAttribute(uint srcVersion) {
       this.SrcVersion = srcVersion;
     }
Index: branches/PersistenceReintegration/HeuristicLab.Persistence/4.0/Core/StorableHookAttribute.cs
===================================================================
--- branches/PersistenceReintegration/HeuristicLab.Persistence/4.0/Core/StorableHookAttribute.cs	(revision 14926)
+++ branches/PersistenceReintegration/HeuristicLab.Persistence/4.0/Core/StorableHookAttribute.cs	(revision 14927)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2016 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
@@ -21,6 +21,8 @@
 
 using System;
+using System.Linq;
+using System.Reflection;
 
-namespace HeuristicLab.Persistence.Default.CompositeSerializers.Storable {
+namespace HeuristicLab.Persistence {
 
 
@@ -49,5 +51,12 @@
   /// </summary>
   [AttributeUsage(AttributeTargets.Method, Inherited = false, AllowMultiple = true)]
+  [StorableType("983bf558-1458-4129-b018-7e121ac3840e")]
   public sealed class StorableHookAttribute : Attribute {
+    public static bool IsStorableHook(MethodInfo methodInfo) {
+      return Attribute.IsDefined(methodInfo, typeof(StorableHookAttribute), false);
+    }
+    public static StorableHookAttribute[] GetStorableHookAttributes(MethodInfo methodInfo) {
+      return Attribute.GetCustomAttributes(methodInfo, false).OfType<StorableHookAttribute>().ToArray();
+    }
 
     private readonly HookType hookType;
@@ -64,5 +73,5 @@
     /// at the <c>HookType</c> time.
     /// </summary>
-    /// <param name="hookType">Type of the hook.</param>
+    /// <param name="hookType">MemberSelection of the hook.</param>
     public StorableHookAttribute(HookType hookType) {
       this.hookType = hookType;
Index: branches/PersistenceReintegration/HeuristicLab.Persistence/4.0/Core/TypeInfo.cs
===================================================================
--- branches/PersistenceReintegration/HeuristicLab.Persistence/4.0/Core/TypeInfo.cs	(revision 14926)
+++ branches/PersistenceReintegration/HeuristicLab.Persistence/4.0/Core/TypeInfo.cs	(revision 14927)
@@ -25,5 +25,4 @@
 using System.Reflection;
 using System.Reflection.Emit;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 
 namespace HeuristicLab.Persistence {
Index: branches/PersistenceReintegration/HeuristicLab.Persistence/4.0/HeuristicLab.Persistence-4.0.csproj
===================================================================
--- branches/PersistenceReintegration/HeuristicLab.Persistence/4.0/HeuristicLab.Persistence-4.0.csproj	(revision 14926)
+++ branches/PersistenceReintegration/HeuristicLab.Persistence/4.0/HeuristicLab.Persistence-4.0.csproj	(revision 14927)
@@ -48,5 +48,7 @@
   <ItemGroup>
     <Compile Include="Core\ComponentInfo.cs" />
+    <Compile Include="Core\DataMemberAccessor.cs" />
     <Compile Include="Core\Index.cs" />
+    <Compile Include="Core\PersistenceException.cs" />
     <Compile Include="Core\StaticCache.cs" />
     <Compile Include="Core\Mapper.cs" />
Index: branches/PersistenceReintegration/HeuristicLab.Persistence/4.0/ISerializer.cs
===================================================================
--- branches/PersistenceReintegration/HeuristicLab.Persistence/4.0/ISerializer.cs	(revision 14926)
+++ branches/PersistenceReintegration/HeuristicLab.Persistence/4.0/ISerializer.cs	(revision 14927)
@@ -23,4 +23,5 @@
 
 namespace HeuristicLab.Persistence {
+  [StorableType("81ac6e7f-1a3e-4a60-a146-c407104c02ca")]
   public interface ISerializer {
     void Serialize(object o, Stream stream);
Index: branches/PersistenceReintegration/HeuristicLab.Persistence/4.0/ITransformer.cs
===================================================================
--- branches/PersistenceReintegration/HeuristicLab.Persistence/4.0/ITransformer.cs	(revision 14926)
+++ branches/PersistenceReintegration/HeuristicLab.Persistence/4.0/ITransformer.cs	(revision 14927)
@@ -23,4 +23,5 @@
 
 namespace HeuristicLab.Persistence {
+  [StorableType("51aec2b4-6e18-4e6d-b00b-ee656747be78")]
   public interface ITransformer {
     Guid Guid { get; }
Index: branches/PersistenceReintegration/HeuristicLab.Persistence/4.0/Transformers/StorableClassTransformer.cs
===================================================================
--- branches/PersistenceReintegration/HeuristicLab.Persistence/4.0/Transformers/StorableClassTransformer.cs	(revision 14926)
+++ branches/PersistenceReintegration/HeuristicLab.Persistence/4.0/Transformers/StorableClassTransformer.cs	(revision 14927)
@@ -24,8 +24,8 @@
 using System.Linq;
 using System.Reflection;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 
 namespace HeuristicLab.Persistence {
   [Transformer("78556C88-0FEE-4602-95C7-A469B2DDB468", 100)]
+  [StorableType("3a578289-43ca-40f8-9f1e-2bdd255cb8fb")]
   internal sealed class StorableClassBoxTransformer : BoxTransformer<object> {
     public override bool CanTransformType(Type type) {
@@ -89,5 +89,5 @@
         dict.Add(mapper.GetString(component.Key), mapper.GetObject(component.Value));
       }
-      
+
       // TODO: check that all entries in the dictionary can be mapped to a field or property
       foreach (var convMeth in conversionMethods) {
Index: branches/PersistenceReintegration/HeuristicLab.Persistence/4.0/Transformers/Transformers.cs
===================================================================
--- branches/PersistenceReintegration/HeuristicLab.Persistence/4.0/Transformers/Transformers.cs	(revision 14926)
+++ branches/PersistenceReintegration/HeuristicLab.Persistence/4.0/Transformers/Transformers.cs	(revision 14927)
@@ -31,8 +31,7 @@
 using System.Reflection;
 using Google.ProtocolBuffers;
-using HeuristicLab.Persistence.Core;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 
 namespace HeuristicLab.Persistence {
+  [StorableType("8c7e99f5-092f-4cef-8b72-8afec1d10236")]
   public abstract class BoxTransformer<T> : Transformer {
     public override bool CanTransformType(Type type) {
@@ -55,4 +54,5 @@
 
   #region Scalar Box Transformers
+  [StorableType("4b800c20-e93d-4186-9ccc-9e8081c028bb")]
   public abstract class BoolBoxTransformer<T> : BoxTransformer<T> {
     protected override void Populate(Box.Builder box, T value, Mapper mapper) {
@@ -67,4 +67,5 @@
     protected abstract T ToValueType(bool value, Type type, Mapper mapper);
   }
+  [StorableType("72b92810-3eee-4a35-b87a-0a9b06b58945")]
   public abstract class IntBoxTransformer<T> : BoxTransformer<T> {
     protected override void Populate(Box.Builder box, T value, Mapper mapper) {
@@ -79,4 +80,5 @@
     protected abstract T ToValueType(int value, Type type, Mapper mapper);
   }
+  [StorableType("e7344a71-276d-4fc7-9d80-1f0a8b10dde5")]
   public abstract class LongBoxTransformer<T> : BoxTransformer<T> {
     protected override void Populate(Box.Builder box, T value, Mapper mapper) {
@@ -91,4 +93,5 @@
     protected abstract T ToValueType(long value, Type type, Mapper mapper);
   }
+  [StorableType("76833301-5d1d-436d-86f6-6cfe1830405e")]
   public abstract class UnsignedIntBoxTransformer<T> : BoxTransformer<T> {
     protected override void Populate(Box.Builder box, T value, Mapper mapper) {
@@ -103,4 +106,5 @@
     protected abstract T ToValueType(uint value, Type type, Mapper mapper);
   }
+  [StorableType("4eb19b56-7ac7-497c-b25c-a860d3d72565")]
   public abstract class UnsignedLongBoxTransformer<T> : BoxTransformer<T> {
     protected override void Populate(Box.Builder box, T value, Mapper mapper) {
@@ -115,4 +119,5 @@
     protected abstract T ToValueType(ulong value, Type type, Mapper mapper);
   }
+  [StorableType("1a6613b2-772f-4334-b688-8b2a8483123b")]
   public abstract class FloatBoxTransformer<T> : BoxTransformer<T> {
     protected override void Populate(Box.Builder box, T value, Mapper mapper) {
@@ -127,4 +132,5 @@
     protected abstract T ToValueType(float value, Type type, Mapper mapper);
   }
+  [StorableType("c7fee156-6310-42a6-9f07-838cef8f405e")]
   public abstract class DoubleBoxTransformer<T> : BoxTransformer<T> {
     protected override void Populate(Box.Builder box, T value, Mapper mapper) {
@@ -139,4 +145,5 @@
     protected abstract T ToValueType(double value, Type type, Mapper mapper);
   }
+  [StorableType("f7ea684c-8784-4939-80d4-318558a8b4a4")]
   public abstract class StringBoxTransformer<T> : BoxTransformer<T> {
     protected override void Populate(Box.Builder box, T value, Mapper mapper) {
@@ -151,4 +158,5 @@
     protected abstract T ToValueType(string value, Type type, Mapper mapper);
   }
+  [StorableType("cb1680ec-3141-437d-b28d-f17595ca6815")]
   public abstract class BytesBoxTransformer<T> : BoxTransformer<T> {
     protected override void Populate(Box.Builder box, T value, Mapper mapper) {
@@ -166,4 +174,5 @@
 
   #region Array Box Transformers
+  [StorableType("a6840c61-cf07-4e0a-a13c-392565e7326e")]
   public abstract class ByteArrayBoxTransformer<T> : BoxTransformer<T> {
     protected override void Populate(Box.Builder box, T value, Mapper mapper) {
@@ -178,4 +187,5 @@
     protected abstract T FromByteString(ByteString byteString);
   }
+  [StorableType("543de8f9-bf32-431d-af52-8dd95cfd876f")]
   public abstract class BoolArrayBoxTransformer<T> : BoxTransformer<T> {
     protected override void Populate(Box.Builder box, T value, Mapper mapper) {
@@ -190,4 +200,5 @@
     protected abstract T ToValueType(IEnumerable<bool> value, Type type, Mapper mapper);
   }
+  [StorableType("fb338e93-09c1-4e6e-8731-c5fefbb7fa82")]
   public abstract class IntArrayBoxTransformer<T> : BoxTransformer<T> {
     protected override void Populate(Box.Builder box, T value, Mapper mapper) {
@@ -202,4 +213,5 @@
     protected abstract T ToValueType(IEnumerable<int> value, Type type, Mapper mapper);
   }
+  [StorableType("f751fbbd-ddd9-4f22-bf5e-9336d8913ab0")]
   public abstract class LongArrayBoxTransformer<T> : BoxTransformer<T> {
     protected override void Populate(Box.Builder box, T value, Mapper mapper) {
@@ -214,4 +226,5 @@
     protected abstract T ToValueType(IEnumerable<long> value, Type type, Mapper mapper);
   }
+  [StorableType("912793f8-0136-4621-880c-5d6da0bbefa5")]
   public abstract class UnsignedIntArrayBoxTransformer<T> : BoxTransformer<T> {
     protected override void Populate(Box.Builder box, T value, Mapper mapper) {
@@ -226,4 +239,5 @@
     protected abstract T ToValueType(IEnumerable<uint> value, Type type, Mapper mapper);
   }
+  [StorableType("e9b844a1-9f14-438f-abd8-8af0fdb73d77")]
   public abstract class UnsignedLongArrayBoxTransformer<T> : BoxTransformer<T> {
     protected override void Populate(Box.Builder box, T value, Mapper mapper) {
@@ -238,4 +252,5 @@
     protected abstract T ToValueType(IEnumerable<ulong> value, Type type, Mapper mapper);
   }
+  [StorableType("f08a787d-d695-44ee-a9ac-e8b966f98c34")]
   public abstract class FloatArrayBoxTransformer<T> : BoxTransformer<T> {
     protected override void Populate(Box.Builder box, T value, Mapper mapper) {
@@ -250,4 +265,5 @@
     protected abstract T ToValueType(IEnumerable<float> value, Type type, Mapper mapper);
   }
+  [StorableType("622efa85-484e-459e-b79d-4462ba225394")]
   public abstract class DoubleArrayBoxTransformer<T> : BoxTransformer<T> {
     protected override void Populate(Box.Builder box, T value, Mapper mapper) {
@@ -262,4 +278,5 @@
     protected abstract T ToValueType(IEnumerable<double> value, Type type, Mapper mapper);
   }
+  [StorableType("5dfba6f6-2762-4d08-9c34-f6d10cc20913")]
   public abstract class StringArrayBoxTransformer<T> : BoxTransformer<T> {
     protected override void Populate(Box.Builder box, T value, Mapper mapper) {
@@ -277,4 +294,5 @@
 
   [Transformer("11B822C9-46A0-4B65-AE4A-D12F63DDE9F6", 50)]
+  [StorableType("7d783c07-2e05-4d89-9c06-b243c546e667")]
   internal sealed class TypeTransformer : Transformer {
     public override bool CanTransformType(Type type) {
@@ -321,4 +339,5 @@
   #region Primitive Value Types
   [Transformer("268617FE-3F0F-4029-8248-EDA420901FB6", 10000)]
+  [StorableType("320cba58-1aaf-492b-be3b-f59eea085ebe")]
   internal sealed class ObjectTransformer : BoxTransformer<object> {
     protected override void Populate(Box.Builder box, object value, Mapper mapper) { }
@@ -327,4 +346,5 @@
 
   [Transformer("9FA1C6A8-517E-4623-AC1B-7E9AEF6ED13D", 200)]
+  [StorableType("be3c6d74-5c67-4a54-ab3c-f1040795d364")]
   internal sealed class BoolTransformer : BoolBoxTransformer<bool> {
     protected override bool ToBoxType(bool value, Mapper mapper) { return value; }
@@ -333,4 +353,5 @@
 
   [Transformer("059633E9-12CB-43EC-8544-57746536E281", 201)]
+  [StorableType("3f1e111d-3ea8-4318-884f-185ef96bdfe4")]
   internal sealed class ByteTransformer : UnsignedIntBoxTransformer<byte> {
     protected override uint ToBoxType(byte value, Mapper mapper) { return value; }
@@ -339,4 +360,5 @@
 
   [Transformer("5DC2F3AC-0852-4B57-A861-D29CC814A94C", 202)]
+  [StorableType("498da443-43d3-4bc4-9ee9-c41416bb5c6b")]
   internal sealed class SByteTransformer : IntBoxTransformer<sbyte> {
     protected override int ToBoxType(sbyte value, Mapper mapper) { return value; }
@@ -345,4 +367,5 @@
 
   [Transformer("B862E642-A94A-4870-8065-06126A35A9E1", 203)]
+  [StorableType("9f9ea850-1dd5-4dc0-abb5-8e75b22a0ffe")]
   internal sealed class ShortTransformer : IntBoxTransformer<short> {
     protected override int ToBoxType(short value, Mapper mapper) { return value; }
@@ -351,4 +374,5 @@
 
   [Transformer("D1D3062D-F1BB-4189-AE50-D6986E1DEB4E", 204)]
+  [StorableType("4b70fdb5-a2ed-4a08-ab17-10fb5db11ada")]
   internal sealed class UShortTransformer : UnsignedIntBoxTransformer<ushort> {
     protected override uint ToBoxType(ushort value, Mapper mapper) { return value; }
@@ -357,4 +381,5 @@
 
   [Transformer("6C444645-3062-4D15-AD01-E6E1B0692A2B", 205)]
+  [StorableType("fdf24c34-7c10-49bb-aad2-a668c1490381")]
   internal sealed class CharTransformer : UnsignedIntBoxTransformer<char> {
     protected override uint ToBoxType(char value, Mapper mapper) { return value; }
@@ -363,4 +388,5 @@
 
   [Transformer("649E73B2-EFA6-4E01-BCB4-4B29D652C9CB", 206)]
+  [StorableType("0b2bcdf7-5787-4027-acd4-46f5f7641bff")]
   internal sealed class IntTransformer : IntBoxTransformer<int> {
     protected override int ToBoxType(int value, Mapper mapper) { return value; }
@@ -369,4 +395,5 @@
 
   [Transformer("BCF25010-81A2-49BC-88CC-407D3F393D5B", 207)]
+  [StorableType("eec933ec-f705-435e-9b7e-e4fc4d90c21e")]
   internal sealed class UIntTransformer : UnsignedIntBoxTransformer<uint> {
     protected override uint ToBoxType(uint value, Mapper mapper) { return value; }
@@ -375,4 +402,5 @@
 
   [Transformer("B6F6ACAE-755C-47EE-B8BF-7CDECBE19C30", 208)]
+  [StorableType("b0edffdd-8a00-48e1-a7a1-808ddec3b933")]
   internal sealed class LongTransformer : LongBoxTransformer<long> {
     protected override long ToBoxType(long value, Mapper mapper) { return value; }
@@ -381,4 +409,5 @@
 
   [Transformer("82333ACA-F041-44E0-B365-27C399594BA7", 209)]
+  [StorableType("0ebd1d6b-aa2d-442b-b524-68558d77e22e")]
   internal sealed class ULongTransformer : UnsignedLongBoxTransformer<ulong> {
     protected override ulong ToBoxType(ulong value, Mapper mapper) { return value; }
@@ -387,4 +416,5 @@
 
   [Transformer("8FE91ECF-2261-4934-BECD-C38923B7A703", 210)]
+  [StorableType("d9f05b32-218f-4b8e-9ec7-ab5dcbbaf0fc")]
   internal sealed class FloatTransformer : FloatBoxTransformer<float> {
     protected override float ToBoxType(float value, Mapper mapper) { return value; }
@@ -393,4 +423,5 @@
 
   [Transformer("070D23EA-7F38-46B7-A667-219BEF914E49", 211)]
+  [StorableType("70b79b46-2713-42ac-ace6-a55ffb0624be")]
   internal sealed class DoubleTransformer : DoubleBoxTransformer<double> {
     protected override double ToBoxType(double value, Mapper mapper) { return value; }
@@ -399,4 +430,5 @@
 
   [Transformer("BA55C7A6-C91E-4351-A889-E4A7E647F16D", 212)]
+  [StorableType("4ed946fd-aac8-407b-bb9e-093048024d15")]
   internal sealed class DateTimeTransformer : LongBoxTransformer<DateTime> {
     protected override long ToBoxType(DateTime value, Mapper mapper) { return value.Ticks; }
@@ -405,4 +437,5 @@
 
   [Transformer("0C91441B-2D97-432B-B493-D6EC483FC5AD", 213)]
+  [StorableType("bbc20151-b695-43dc-a38a-a610c8410fd2")]
   internal sealed class TimeSpanTransformer : LongBoxTransformer<TimeSpan> {
     protected override long ToBoxType(TimeSpan value, Mapper mapper) { return value.Ticks; }
@@ -411,4 +444,5 @@
 
   [Transformer("0B540EAC-79AB-40CF-8277-D2C81135FEB6", 214)]
+  [StorableType("aac1fee2-ea34-46b4-9db7-3ae8da8927eb")]
   internal sealed class ColorTransformers : IntBoxTransformer<Color> {
     protected override int ToBoxType(Color value, Mapper mapper) { return value.ToArgb(); }
@@ -417,4 +451,5 @@
 
   [Transformer("2E6D4A40-B4BE-425F-8E35-2D7C00054639", 215)]
+  [StorableType("11a33d00-5edc-4c49-884a-9f2809c23b30")]
   internal sealed class PointTransformer : IntArrayBoxTransformer<Point> {
     protected override IEnumerable<int> ToBoxType(Point value, Mapper mapper) { return new int[] { value.X, value.Y }; }
@@ -423,4 +458,5 @@
 
   [Transformer("97B5CFC8-CDFA-4EB5-B4CD-5B3CFA5CD844", 216)]
+  [StorableType("993238c2-a2ed-4e0d-84ae-ad025f2f20f4")]
   internal sealed class KeyValuePairTransformer : BoxTransformer<object> {
     public override bool CanTransformType(Type type) {
@@ -452,4 +488,5 @@
 
   [Transformer("EBD8BF65-D97D-4FD4-BF4F-9D58A72B6249", 217)]
+  [StorableType("b7725dfa-94fb-4169-b375-6e46b7ca4810")]
   internal sealed class DecimalTransformer : UnsignedIntBoxTransformer<decimal> {
     protected override uint ToBoxType(decimal value, Mapper mapper) {
@@ -478,4 +515,5 @@
   #region String
   [Transformer("E75A594C-0034-4DAB-B28E-8F84F9F6DE8D", 218)]
+  [StorableType("ba52fce8-bf0c-47ad-95dd-df5d9281942d")]
   internal sealed class StringTransformer : UnsignedIntBoxTransformer<string> {
     protected override uint ToBoxType(string value, Mapper mapper) { return mapper.GetStringId(value); }
@@ -486,4 +524,5 @@
   #region Enum
   [Transformer("93FF076B-BC4B-4C39-8C40-15E004468C98", 219)]
+  [StorableType("f8a7dbb4-e1ce-4db8-905e-f3a05f5ca000")]
   internal sealed class EnumTransformer : Transformer {
     public override bool CanTransformType(Type type) {
@@ -512,4 +551,5 @@
   #region Struct
   [Transformer("89DAAFC5-726C-48D4-A4E0-2B0D27329642", 220)]
+  [StorableType("c3c4ad38-7110-439c-b73c-d33466db3db4")]
   internal sealed class StructTransformer : Transformer {
     public override bool CanTransformType(Type type) {
@@ -552,9 +592,9 @@
       foreach (var t in components) {
         string name = mapper.GetString(t.Key);
-        MemberInfo[] mis = type.GetMember(name, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);        
+        MemberInfo[] mis = type.GetMember(name, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
         if (mis.Length != 1)
           throw new Exception("ambiguous struct member name " + name);
         MemberInfo mi = mis[0];
-        if(StorableAttribute.IsStorable(mi))
+        if (StorableAttribute.IsStorable(mi))
           throw new PersistenceException("Don't use stroable attributes for structs as all fields are serialized automatically.");
         if (mi.MemberType == MemberTypes.Field)
@@ -571,4 +611,5 @@
   #region Tuple
   [Transformer("63A19D57-EEEF-4346-9F06-B35B15EBFFA3", 221)]
+  [StorableType("ab537f25-dc21-4585-b743-0350a5cf1e54")]
   internal sealed class TupleTransformer : Transformer {
     private static readonly HashSet<Type> supportedTypes = new HashSet<Type> {
@@ -616,4 +657,5 @@
   #region Bitmap
   [Transformer("D0ADB806-2DFD-459D-B5DA-14B5F1152534", 222)]
+  [StorableType("b13d6153-e71d-4b76-9893-81d3570403e8")]
   internal sealed class BitmapTransformer : ByteArrayBoxTransformer<Bitmap> {
     protected override ByteString ToByteString(Bitmap value) {
@@ -636,4 +678,5 @@
   #region Font
   [Transformer("AFF27987-3301-4D70-9601-EFCA31BDA0DB", 223)]
+  [StorableType("b9f9a371-4dcb-478b-b0d4-6f87a15c02b5")]
   internal sealed class FontTransformer : UnsignedIntArrayBoxTransformer<Font> {
 
@@ -680,4 +723,5 @@
   #region Array Types
   [Transformer("FF89F6D1-CDE3-498E-9166-F70AC6EB01F1", 301)]
+  [StorableType("59d8363a-7e6c-4d29-9432-8274acd2145f")]
   internal sealed class ByteArrayTransformer : ByteArrayBoxTransformer<byte[]> {
     protected override ByteString ToByteString(byte[] value) {
@@ -690,4 +734,5 @@
 
   [Transformer("B49B3F2D-2E97-4BAB-8705-8D29DA707C6A", 302)]
+  [StorableType("304c7463-4575-481b-8922-6a54957305c7")]
   internal sealed class SByteArrayTransformer : ByteArrayBoxTransformer<sbyte[]> {
     protected override ByteString ToByteString(sbyte[] value) {
@@ -700,4 +745,5 @@
 
   [Transformer("F25A73B2-6B67-4493-BD59-B836AF4455D1", 300)]
+  [StorableType("06fdb68c-ec5e-4cb5-9ad1-063fca0b9c2e")]
   internal sealed class BoolArrayTransformer : BoolArrayBoxTransformer<bool[]> {
     protected override IEnumerable<bool> ToBoxType(bool[] value, Mapper mapper) { return value; }
@@ -706,4 +752,5 @@
 
   [Transformer("2811FDD4-6800-4CBA-86D7-9071ED5775ED", 303)]
+  [StorableType("832d8971-51b1-4264-b7eb-07d6e836bf7b")]
   internal sealed class ShortArrayTransformer : ByteArrayBoxTransformer<short[]> {
     protected override ByteString ToByteString(short[] value) {
@@ -726,4 +773,5 @@
 
   [Transformer("1AAC2625-356C-40BC-8CB4-15CB3D047EB8", 304)]
+  [StorableType("c303b4cf-ffd0-47e2-9d94-07f2d558d17f")]
   internal sealed class UShortArrayTransformer : ByteArrayBoxTransformer<ushort[]> {
     protected override ByteString ToByteString(ushort[] value) {
@@ -746,4 +794,5 @@
 
   [Transformer("12F19098-5D49-4C23-8897-69087F1C146D", 305)]
+  [StorableType("55f7c8b0-f2aa-4830-857d-6ce2807da138")]
   internal sealed class CharArrayTransformer : ByteArrayBoxTransformer<char[]> {
     protected override ByteString ToByteString(char[] value) {
@@ -766,4 +815,5 @@
 
   [Transformer("5F6DC3BC-4433-4AE9-A636-4BD126F7DACD", 306)]
+  [StorableType("e7089621-5236-4d37-a592-c8a0816c59fa")]
   internal sealed class IntArrayTransformer : IntArrayBoxTransformer<int[]> {
     protected override IEnumerable<int> ToBoxType(int[] value, Mapper mapper) { return value; }
@@ -772,4 +822,5 @@
 
   [Transformer("3F10274F-D350-4C82-89EA-A5EB36D4EFCC", 307)]
+  [StorableType("0972d235-5e21-4abf-84f8-aad1bbfdff40")]
   internal sealed class UIntArrayTransformer : UnsignedIntArrayBoxTransformer<uint[]> {
     protected override IEnumerable<uint> ToBoxType(uint[] value, Mapper mapper) { return value; }
@@ -778,4 +829,5 @@
 
   [Transformer("E9D550E2-57F7-47F3-803D-37A619DA1A5C", 308)]
+  [StorableType("0c656d5d-11dc-4a75-895a-06701048cd70")]
   internal sealed class LongArrayTransformer : LongArrayBoxTransformer<long[]> {
     protected override IEnumerable<long> ToBoxType(long[] value, Mapper mapper) { return value; }
@@ -784,4 +836,5 @@
 
   [Transformer("C02A205B-2176-4282-AC2B-ADEF96DDBE24", 309)]
+  [StorableType("c5f87514-a6c1-400b-9a6c-8adcf980f701")]
   internal sealed class ULongArrayTransformer : UnsignedLongArrayBoxTransformer<ulong[]> {
     protected override IEnumerable<ulong> ToBoxType(ulong[] value, Mapper mapper) { return value; }
@@ -790,4 +843,5 @@
 
   [Transformer("3C4590D9-C76E-4AFB-98FD-E50D3D051648", 310)]
+  [StorableType("ecc63624-1b78-4bef-8326-74c1a43078ff")]
   internal sealed class FloatArrayTransformer : FloatArrayBoxTransformer<float[]> {
     protected override IEnumerable<float> ToBoxType(float[] value, Mapper mapper) { return value; }
@@ -796,4 +850,5 @@
 
   [Transformer("FB98C399-9323-4470-9A85-9186C2B2D5D4", 311)]
+  [StorableType("03025baa-f57a-48de-b0e2-8e6dc10740ee")]
   internal sealed class DoubleArrayTransformer : DoubleArrayBoxTransformer<double[]> {
     protected override IEnumerable<double> ToBoxType(double[] value, Mapper mapper) { return value; }
@@ -802,4 +857,5 @@
 
   [Transformer("68332513-9CF1-47FA-A093-6DDB663186EC", 312)]
+  [StorableType("791ea34d-e071-4ef2-812b-eb8e2faced45")]
   internal sealed class StringArrayTransformer : StringArrayBoxTransformer<string[]> {
     protected override IEnumerable<string> ToBoxType(string[] value, Mapper mapper) { return value; }
@@ -808,4 +864,5 @@
 
   [Transformer("B01ADF0A-ACAA-444E-9F82-0C7C2AF1F490", 400)]
+  [StorableType("56ae4f46-9fc1-4243-a07f-7b7c24e30545")]
   internal sealed class ArrayTransformer : Transformer {
     public override bool CanTransformType(Type type) {
@@ -897,4 +954,5 @@
 
   [Transformer("4FA5EAAF-ECC7-4A9C-84E7-6583DA96F3B9", 500)]
+  [StorableType("b19c0fe5-6bba-4492-af91-c111edce77dc")]
   internal sealed class EnumerableTransformer : Transformer {
     private static readonly HashSet<Type> supportedTypes = new HashSet<Type> {
@@ -922,5 +980,5 @@
         var comparer = propertyInfo.GetValue(value);
         var comparerType = comparer.GetType();
-        if (Default.CompositeSerializers.Storable.StorableTypeAttribute.IsStorableType(comparerType))
+        if (StorableTypeAttribute.IsStorableType(comparerType))
           uIntArrayBox.AddValues(mapper.GetBoxId(comparer));
         else if (comparerType.GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.FlattenHierarchy).Any())
@@ -970,4 +1028,5 @@
 
   [Transformer("C47A62F5-F113-4A43-A8EE-CF817EC799A2", 501)]
+  [StorableType("ba53df84-dc97-4d8d-a493-868972ed1002")]
   internal sealed class DictionaryTransformer : Transformer {
     public override bool CanTransformType(Type type) {
@@ -992,5 +1051,5 @@
 
       var comparerType = comparer.GetType();
-      if (Default.CompositeSerializers.Storable.StorableTypeAttribute.IsStorableType(comparerType))
+      if (StorableTypeAttribute.IsStorableType(comparerType))
         dictionaryBox.SetComparerId(mapper.GetBoxId(comparer));
       else if (comparerType.GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.FlattenHierarchy).Any())
