Index: stable/HeuristicLab.Persistence/3.3/Default/CompositeSerializers/Storable/StorableSerializer.cs
===================================================================
--- stable/HeuristicLab.Persistence/3.3/Default/CompositeSerializers/Storable/StorableSerializer.cs	(revision 11142)
+++ stable/HeuristicLab.Persistence/3.3/Default/CompositeSerializers/Storable/StorableSerializer.cs	(revision 11143)
@@ -47,4 +47,5 @@
       hookCache = new Dictionary<HookDesignator, List<StorableReflection.Hook>>();
     }
+
     [StorableConstructor]
     private StorableSerializer(bool deserializing) : this() { }
@@ -68,5 +69,5 @@
     /// </returns>
     public bool CanSerialize(Type type) {
-      bool markedStorable = StorableReflection.HasStorableClassAttribute(type);
+      var markedStorable = StorableReflection.HasStorableClassAttribute(type);
       if (GetConstructor(type) == null)
         if (markedStorable)
@@ -91,5 +92,5 @@
     /// </returns>
     public string JustifyRejection(Type type) {
-      StringBuilder sb = new StringBuilder();
+      var sb = new StringBuilder();
       if (GetConstructor(type) == null)
         sb.Append("class has no default constructor and no [StorableConstructor]");
@@ -117,8 +118,7 @@
     /// <returns>An enumerable of <see cref="Tag"/>s.</returns>
     public IEnumerable<Tag> Decompose(object obj) {
-      foreach (var accessor in GetStorableAccessors(obj.GetType())) {
-        if (accessor.Get != null)
-          yield return new Tag(accessor.Name, accessor.Get(obj));
-      }
+      return from accessor in GetStorableAccessors(obj.GetType())
+             where accessor.Get != null
+             select new Tag(accessor.Name, accessor.Get(obj));
     }
 
@@ -147,5 +147,5 @@
     public void Populate(object instance, IEnumerable<Tag> objects, Type type) {
       var memberDict = new Dictionary<string, Tag>();
-      IEnumerator<Tag> iter = objects.GetEnumerator();
+      var iter = objects.GetEnumerator();
       while (iter.MoveNext()) {
         memberDict.Add(iter.Current.Name, iter.Current);
@@ -170,15 +170,6 @@
       BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic;
 
-    private static readonly object[] emptyArgs = new object[] { };
-    private static readonly object[] trueArgs = new object[] { true };
-
-    private sealed class HookDesignator {
-      public Type Type { get; private set; }
-      public HookType HookType { get; private set; }
-      public HookDesignator() { }
-      public HookDesignator(Type type, HookType hookType) {
-        Type = type;
-        HookType = HookType;
-      }
+    private sealed class HookDesignator : Tuple<Type, HookType> {
+      public HookDesignator(Type type, HookType hookType) : base(type, hookType) { }
     }
 
@@ -191,8 +182,8 @@
     #region caches
 
-    private AccessorListCache accessorListCache;
-    private AccessorCache accessorCache;
-    private Dictionary<Type, Constructor> constructorCache;
-    private Dictionary<HookDesignator, List<StorableReflection.Hook>> hookCache;
+    private readonly AccessorListCache accessorListCache;
+    private readonly AccessorCache accessorCache;
+    private readonly Dictionary<Type, Constructor> constructorCache;
+    private readonly Dictionary<HookDesignator, List<StorableReflection.Hook>> hookCache;
 
     #endregion
@@ -206,5 +197,6 @@
         var storableMembers = StorableReflection
           .GenerateStorableMembers(type)
-          .Select(mi => GetMemberAccessor(mi));
+          .Select(GetMemberAccessor)
+          .ToList();
         accessorListCache[type] = storableMembers;
         return storableMembers;
@@ -216,5 +208,5 @@
         if (accessorCache.ContainsKey(mi.MemberInfo))
           return new DataMemberAccessor(accessorCache[mi.MemberInfo], mi.DisentangledName, mi.DefaultValue);
-        DataMemberAccessor dma = new DataMemberAccessor(mi.MemberInfo, mi.DisentangledName, mi.DefaultValue);
+        var dma = new DataMemberAccessor(mi.MemberInfo, mi.DisentangledName, mi.DefaultValue);
         accessorCache[mi.MemberInfo] = dma;
         return dma;
@@ -226,5 +218,5 @@
         if (constructorCache.ContainsKey(type))
           return constructorCache[type];
-        Constructor c = FindStorableConstructor(type) ?? GetDefaultConstructor(type);
+        var c = FindStorableConstructor(type) ?? GetDefaultConstructor(type);
         constructorCache.Add(type, c);
         return c;
@@ -233,9 +225,9 @@
 
     private Constructor GetDefaultConstructor(Type type) {
-      ConstructorInfo ci = type.GetConstructor(ALL_CONSTRUCTORS, null, Type.EmptyTypes, null);
+      var ci = type.GetConstructor(ALL_CONSTRUCTORS, null, Type.EmptyTypes, null);
       if (ci == null)
         return null;
-      DynamicMethod dm = new DynamicMethod("", typeof(object), null, type, true);
-      ILGenerator ilgen = dm.GetILGenerator();
+      var dm = new DynamicMethod("", typeof(object), null, type, true);
+      var ilgen = dm.GetILGenerator();
       ilgen.Emit(OpCodes.Newobj, ci);
       ilgen.Emit(OpCodes.Ret);
@@ -244,16 +236,16 @@
 
     private Constructor FindStorableConstructor(Type type) {
-      foreach (ConstructorInfo ci in type.GetConstructors(ALL_CONSTRUCTORS)) {
-        if (ci.GetCustomAttributes(typeof(StorableConstructorAttribute), false).Length > 0) {
-          if (ci.GetParameters().Length != 1 ||
-              ci.GetParameters()[0].ParameterType != typeof(bool))
-            throw new PersistenceException("StorableConstructor must have exactly one argument of type bool");
-          DynamicMethod dm = new DynamicMethod("", typeof(object), null, type, true);
-          ILGenerator ilgen = dm.GetILGenerator();
-          ilgen.Emit(OpCodes.Ldc_I4_1); // load true
-          ilgen.Emit(OpCodes.Newobj, ci);
-          ilgen.Emit(OpCodes.Ret);
-          return (Constructor)dm.CreateDelegate(typeof(Constructor));
-        }
+      foreach (var ci in type
+        .GetConstructors(ALL_CONSTRUCTORS)
+        .Where(ci => ci.GetCustomAttributes(typeof(StorableConstructorAttribute), false).Length > 0)) {
+        if (ci.GetParameters().Length != 1 ||
+            ci.GetParameters()[0].ParameterType != typeof(bool))
+          throw new PersistenceException("StorableConstructor must have exactly one argument of type bool");
+        var dm = new DynamicMethod("", typeof(object), null, type, true);
+        var ilgen = dm.GetILGenerator();
+        ilgen.Emit(OpCodes.Ldc_I4_1); // load true
+        ilgen.Emit(OpCodes.Newobj, ci);
+        ilgen.Emit(OpCodes.Ret);
+        return (Constructor)dm.CreateDelegate(typeof(Constructor));
       }
       return null;
@@ -262,6 +254,6 @@
     private void InvokeHook(HookType hookType, object obj) {
       if (obj == null)
-        throw new ArgumentNullException("Cannot invoke hooks on null");
-      foreach (StorableReflection.Hook hook in GetHooks(hookType, obj.GetType())) {
+        throw new ArgumentNullException("obj");
+      foreach (var hook in GetHooks(hookType, obj.GetType())) {
         hook(obj);
       }
