Index: branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/CompositeSerializers/Storable/StorableAttribute.cs
===================================================================
--- branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/CompositeSerializers/Storable/StorableAttribute.cs	(revision 14924)
+++ 	(revision )
@@ -1,88 +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.Text;
-
-namespace HeuristicLab.Persistence.Default.CompositeSerializers.Storable {
-
-
-  /// <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
-  /// this attribute to kick in.
-  /// </summary>
-  [AttributeUsage(
-    AttributeTargets.Field | AttributeTargets.Property,
-    AllowMultiple = false,
-    Inherited = false)]
-  public class StorableAttribute : Attribute {
-
-    /// <summary>
-    /// An optional name for this member that will be used during serialization.
-    /// This allows to rename a field/property in code but still be able to read
-    /// the old serialized format.
-    /// </summary>
-    /// <value>The name.</value>
-    public string Name { get; set; }
-
-
-    /// <summary>
-    /// A default value in case the field/property was not present or not serialized
-    /// in a previous version of the class and could therefore be absent during
-    /// deserialization.
-    /// </summary>
-    /// <value>The default value.</value>
-    public object DefaultValue { get; set; }
-
-    /// <summary>
-    /// Allow storable attribute on properties with only a getter or a setter. These
-    /// properties will then by either only serialized but not deserialized or only
-    /// deserialized (if stored) but not serialized again.
-    /// </summary>
-    public bool AllowOneWay { get; set; }
-
-    /// <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() {
-      StringBuilder sb = new StringBuilder();
-      sb.Append("[Storable");
-      if (Name != null || DefaultValue != null)
-        sb.Append('(');
-      if (Name != null) {
-        sb.Append("Name = \"").Append(Name).Append("\"");
-        if (DefaultValue != null)
-          sb.Append(", ");
-      }
-      if (DefaultValue != null)
-        sb.Append("DefaultValue = \"").Append(DefaultValue).Append("\"");
-      if (Name != null || DefaultValue != null)
-        sb.Append(')');
-      sb.Append(']');
-      return sb.ToString();
-    }
-  }
-}
Index: branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/CompositeSerializers/Storable/StorableClassAttribute.cs
===================================================================
--- branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/CompositeSerializers/Storable/StorableClassAttribute.cs	(revision 14924)
+++ 	(revision )
@@ -1,65 +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;
-
-namespace HeuristicLab.Persistence.Default.CompositeSerializers.Storable {
-
-  /// <summary>
-  /// Mark a class to be considered by the <c>StorableSerializer</c>.
-  /// </summary>
-  [AttributeUsage(AttributeTargets.Class, Inherited = false, AllowMultiple = false)]
-  public sealed class StorableClassAttribute : Attribute {
-
-
-    /// <summary>
-    /// Specify how members are selected for serialization.
-    /// </summary>
-    public StorableClassType Type { get; private set; }
-
-    /// <summary>
-    /// Mark a class to be serialize by the <c>StorableSerizlier</c>
-    /// </summary>
-    /// <param name="type">The storable class type.</param>
-    public StorableClassAttribute(StorableClassType type) {
-      Type = type;
-    }
-
-    /// <summary>
-    /// Initializes a new instance of the <see cref="StorableClassAttribute"/> class.
-    /// The default value for <see cref="StorableClassType"/> is
-    /// <see cref="StorableClassType.MarkedOnly"/>.
-    /// </summary>
-    public StorableClassAttribute() { }
-
-    /// <summary>
-    ///  Checks if the <see cref="StorableClassAttribute"/> is present on a type.
-    /// </summary>
-    /// <param name="type">The type which should be checked for the <see cref="StorableClassAttribute"/></param>
-    /// <returns></returns>
-    public static bool IsStorableClass(Type type) {
-      object[] attribs = type.GetCustomAttributes(typeof(StorableClassAttribute), false);
-      return attribs.Length > 0;
-    }
-
-  }
-}
-
Index: branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/CompositeSerializers/Storable/StorableClassType.cs
===================================================================
--- branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/CompositeSerializers/Storable/StorableClassType.cs	(revision 14924)
+++ 	(revision )
@@ -1,62 +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
-
-
-namespace HeuristicLab.Persistence.Default.CompositeSerializers.Storable {
-
-  /// <summary>
-  /// Specifies which memebrs are selected for serialization by the StorableSerializer
-  /// </summary>
-  public enum StorableClassType {
-
-    /// <summary>
-    /// Serialize only fields and properties that have been marked
-    /// with the [Storable] attribute. This is the default value.
-    /// </summary>
-    MarkedOnly,
-
-    /// <summary>
-    /// Serialize all fields but ignore the 
-    /// [Storable] attribute on properties.
-    /// 
-    /// This does not include generated backing fields
-    /// for automatic properties.
-    /// </summary>    
-    AllFields,
-
-    /// <summary>
-    /// Serialize all properties but ignore the
-    /// [Storable] attribute on fields.
-    /// </summary>    
-    AllProperties,
-
-    /// <summary>
-    /// Serialize all fields and all properties
-    /// regardless of the [Storable] attribute.
-    /// 
-    /// This does not include generated backing fields
-    /// for automatic properties, but uses the property
-    /// accessors instead.
-    /// </summary>    
-    AllFieldsAndAllProperties
-  };
-}
-
Index: branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/CompositeSerializers/Storable/StorableConstructorAttribute.cs
===================================================================
--- branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/CompositeSerializers/Storable/StorableConstructorAttribute.cs	(revision 14924)
+++ 	(revision )
@@ -1,37 +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;
-
-namespace HeuristicLab.Persistence.Default.CompositeSerializers.Storable {
-
-
-  /// <summary>
-  /// Indicate that this constructor should be used instead of the default constructor
-  /// when the <c>StorableSerializer</c> instantiates this class during
-  /// deserialization.
-  /// 
-  /// The constructor must take exactly one <c>bool</c> argument that will be
-  /// set to <c>true</c> during deserialization.
-  /// </summary>
-  [AttributeUsage(AttributeTargets.Constructor, Inherited = false, AllowMultiple = false)]
-  public sealed class StorableConstructorAttribute : Attribute { }
-}
Index: branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/CompositeSerializers/Storable/StorableHookAttribute.cs
===================================================================
--- branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Default/CompositeSerializers/Storable/StorableHookAttribute.cs	(revision 14924)
+++ 	(revision )
@@ -1,71 +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;
-
-namespace HeuristicLab.Persistence.Default.CompositeSerializers.Storable {
-
-
-  /// <summary>
-  /// Indicates the time at which the hook should be invoked.
-  /// </summary>
-  public enum HookType {
-
-    /// <summary>
-    /// States that this hook should be called before the storable
-    /// serializer starts decomposing the object.
-    /// </summary>
-    BeforeSerialization,
-
-    /// <summary>
-    /// States that this hook should be called after the storable
-    /// serializer hast complete re-assembled the object.
-    /// </summary>
-    AfterDeserialization
-  };
-
-
-  /// <summary>
-  /// Mark methods that should be called at certain times during
-  /// serialization/deserialization by the <c>StorableSerializer</c>.
-  /// </summary>
-  [AttributeUsage(AttributeTargets.Method, Inherited = false, AllowMultiple = true)]
-  public sealed class StorableHookAttribute : Attribute {
-
-    private readonly HookType hookType;
-    /// <summary>
-    /// Gets the type of the hook.
-    /// </summary>
-    /// <value>The type of the hook.</value>
-    public HookType HookType {
-      get { return hookType; }
-    }
-
-    /// <summary>
-    /// Mark method as <c>StorableSerializer</c> hook to be run
-    /// at the <c>HookType</c> time.
-    /// </summary>
-    /// <param name="hookType">Type of the hook.</param>
-    public StorableHookAttribute(HookType hookType) {
-      this.hookType = hookType;
-    }
-  }
-}
Index: branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Plugin.cs.frame
===================================================================
--- branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Plugin.cs.frame	(revision 14924)
+++ branches/PersistenceReintegration/HeuristicLab.Persistence/3.3/Plugin.cs.frame	(revision 14925)
@@ -30,4 +30,5 @@
   [PluginFile("HeuristicLab.Persistence-3.3.dll", PluginFileType.Assembly)]
   [PluginDependency("HeuristicLab.Tracing", "3.3")]
+  [PluginDependency("HeuristicLab.Persistence", "4.0")]
   public class HeuristicLabPersistencePlugin : PluginBase { }
 
Index: branches/PersistenceReintegration/HeuristicLab.Persistence/4.0/Core/StorableAttribute.cs
===================================================================
--- branches/PersistenceReintegration/HeuristicLab.Persistence/4.0/Core/StorableAttribute.cs	(revision 14925)
+++ branches/PersistenceReintegration/HeuristicLab.Persistence/4.0/Core/StorableAttribute.cs	(revision 14925)
@@ -0,0 +1,88 @@
+﻿#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.Text;
+
+namespace HeuristicLab.Persistence.Default.CompositeSerializers.Storable {
+
+
+  /// <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
+  /// this attribute to kick in.
+  /// </summary>
+  [AttributeUsage(
+    AttributeTargets.Field | AttributeTargets.Property,
+    AllowMultiple = false,
+    Inherited = false)]
+  public class StorableAttribute : Attribute {
+
+    /// <summary>
+    /// An optional name for this member that will be used during serialization.
+    /// This allows to rename a field/property in code but still be able to read
+    /// the old serialized format.
+    /// </summary>
+    /// <value>The name.</value>
+    public string Name { get; set; }
+
+
+    /// <summary>
+    /// A default value in case the field/property was not present or not serialized
+    /// in a previous version of the class and could therefore be absent during
+    /// deserialization.
+    /// </summary>
+    /// <value>The default value.</value>
+    public object DefaultValue { get; set; }
+
+    /// <summary>
+    /// Allow storable attribute on properties with only a getter or a setter. These
+    /// properties will then by either only serialized but not deserialized or only
+    /// deserialized (if stored) but not serialized again.
+    /// </summary>
+    public bool AllowOneWay { get; set; }
+
+    /// <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() {
+      StringBuilder sb = new StringBuilder();
+      sb.Append("[Storable");
+      if (Name != null || DefaultValue != null)
+        sb.Append('(');
+      if (Name != null) {
+        sb.Append("Name = \"").Append(Name).Append("\"");
+        if (DefaultValue != null)
+          sb.Append(", ");
+      }
+      if (DefaultValue != null)
+        sb.Append("DefaultValue = \"").Append(DefaultValue).Append("\"");
+      if (Name != null || DefaultValue != null)
+        sb.Append(')');
+      sb.Append(']');
+      return sb.ToString();
+    }
+  }
+}
Index: branches/PersistenceReintegration/HeuristicLab.Persistence/4.0/Core/StorableClassAttribute.cs
===================================================================
--- branches/PersistenceReintegration/HeuristicLab.Persistence/4.0/Core/StorableClassAttribute.cs	(revision 14925)
+++ branches/PersistenceReintegration/HeuristicLab.Persistence/4.0/Core/StorableClassAttribute.cs	(revision 14925)
@@ -0,0 +1,66 @@
+﻿#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;
+
+namespace HeuristicLab.Persistence {
+
+  /// <summary>
+  /// Mark a class to be considered by the <c>StorableSerializer</c>.
+  /// </summary>
+  [AttributeUsage(AttributeTargets.Class, Inherited = false, AllowMultiple = false)]
+  [Obsolete("Use StorableTypeAttribute instead")]
+  public sealed class StorableClassAttribute : Attribute {
+
+
+    /// <summary>
+    /// Specify how members are selected for serialization.
+    /// </summary>
+    public StorableClassType Type { get; private set; }
+
+    /// <summary>
+    /// Mark a class to be serialize by the <c>StorableSerizlier</c>
+    /// </summary>
+    /// <param name="type">The storable class type.</param>
+    public StorableClassAttribute(StorableClassType type) {
+      Type = type;
+    }
+
+    /// <summary>
+    /// Initializes a new instance of the <see cref="StorableClassAttribute"/> class.
+    /// The default value for <see cref="StorableClassType"/> is
+    /// <see cref="StorableClassType.MarkedOnly"/>.
+    /// </summary>
+    public StorableClassAttribute() { }
+
+    /// <summary>
+    ///  Checks if the <see cref="StorableClassAttribute"/> is present on a type.
+    /// </summary>
+    /// <param name="type">The type which should be checked for the <see cref="StorableClassAttribute"/></param>
+    /// <returns></returns>
+    public static bool IsStorableClass(Type type) {
+      object[] attribs = type.GetCustomAttributes(typeof(StorableClassAttribute), false);
+      return attribs.Length > 0;
+    }
+
+  }
+}
+
Index: branches/PersistenceReintegration/HeuristicLab.Persistence/4.0/Core/StorableClassType.cs
===================================================================
--- branches/PersistenceReintegration/HeuristicLab.Persistence/4.0/Core/StorableClassType.cs	(revision 14925)
+++ branches/PersistenceReintegration/HeuristicLab.Persistence/4.0/Core/StorableClassType.cs	(revision 14925)
@@ -0,0 +1,62 @@
+﻿#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
+
+
+namespace HeuristicLab.Persistence {
+
+  /// <summary>
+  /// Specifies which memebrs are selected for serialization by the StorableSerializer
+  /// </summary>
+  public enum StorableClassType {
+
+    /// <summary>
+    /// Serialize only fields and properties that have been marked
+    /// with the [Storable] attribute. This is the default value.
+    /// </summary>
+    MarkedOnly,
+
+    /// <summary>
+    /// Serialize all fields but ignore the 
+    /// [Storable] attribute on properties.
+    /// 
+    /// This does not include generated backing fields
+    /// for automatic properties.
+    /// </summary>    
+    AllFields,
+
+    /// <summary>
+    /// Serialize all properties but ignore the
+    /// [Storable] attribute on fields.
+    /// </summary>    
+    AllProperties,
+
+    /// <summary>
+    /// Serialize all fields and all properties
+    /// regardless of the [Storable] attribute.
+    /// 
+    /// This does not include generated backing fields
+    /// for automatic properties, but uses the property
+    /// accessors instead.
+    /// </summary>    
+    AllFieldsAndAllProperties
+  };
+}
+
Index: branches/PersistenceReintegration/HeuristicLab.Persistence/4.0/Core/StorableConstructorAttribute.cs
===================================================================
--- branches/PersistenceReintegration/HeuristicLab.Persistence/4.0/Core/StorableConstructorAttribute.cs	(revision 14925)
+++ branches/PersistenceReintegration/HeuristicLab.Persistence/4.0/Core/StorableConstructorAttribute.cs	(revision 14925)
@@ -0,0 +1,37 @@
+﻿#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;
+
+namespace HeuristicLab.Persistence.Default.CompositeSerializers.Storable {
+
+
+  /// <summary>
+  /// Indicate that this constructor should be used instead of the default constructor
+  /// when the <c>StorableSerializer</c> instantiates this class during
+  /// deserialization.
+  /// 
+  /// The constructor must take exactly one <c>bool</c> argument that will be
+  /// set to <c>true</c> during deserialization.
+  /// </summary>
+  [AttributeUsage(AttributeTargets.Constructor, Inherited = false, AllowMultiple = false)]
+  public sealed class StorableConstructorAttribute : Attribute { }
+}
Index: branches/PersistenceReintegration/HeuristicLab.Persistence/4.0/Core/StorableHookAttribute.cs
===================================================================
--- branches/PersistenceReintegration/HeuristicLab.Persistence/4.0/Core/StorableHookAttribute.cs	(revision 14925)
+++ branches/PersistenceReintegration/HeuristicLab.Persistence/4.0/Core/StorableHookAttribute.cs	(revision 14925)
@@ -0,0 +1,71 @@
+﻿#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;
+
+namespace HeuristicLab.Persistence.Default.CompositeSerializers.Storable {
+
+
+  /// <summary>
+  /// Indicates the time at which the hook should be invoked.
+  /// </summary>
+  public enum HookType {
+
+    /// <summary>
+    /// States that this hook should be called before the storable
+    /// serializer starts decomposing the object.
+    /// </summary>
+    BeforeSerialization,
+
+    /// <summary>
+    /// States that this hook should be called after the storable
+    /// serializer hast complete re-assembled the object.
+    /// </summary>
+    AfterDeserialization
+  };
+
+
+  /// <summary>
+  /// Mark methods that should be called at certain times during
+  /// serialization/deserialization by the <c>StorableSerializer</c>.
+  /// </summary>
+  [AttributeUsage(AttributeTargets.Method, Inherited = false, AllowMultiple = true)]
+  public sealed class StorableHookAttribute : Attribute {
+
+    private readonly HookType hookType;
+    /// <summary>
+    /// Gets the type of the hook.
+    /// </summary>
+    /// <value>The type of the hook.</value>
+    public HookType HookType {
+      get { return hookType; }
+    }
+
+    /// <summary>
+    /// Mark method as <c>StorableSerializer</c> hook to be run
+    /// at the <c>HookType</c> time.
+    /// </summary>
+    /// <param name="hookType">Type of the hook.</param>
+    public StorableHookAttribute(HookType hookType) {
+      this.hookType = hookType;
+    }
+  }
+}
Index: branches/PersistenceReintegration/HeuristicLab.Persistence/4.0/Core/StorableMemberSelection.cs
===================================================================
--- branches/PersistenceReintegration/HeuristicLab.Persistence/4.0/Core/StorableMemberSelection.cs	(revision 14925)
+++ branches/PersistenceReintegration/HeuristicLab.Persistence/4.0/Core/StorableMemberSelection.cs	(revision 14925)
@@ -0,0 +1,62 @@
+﻿#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
+
+
+namespace HeuristicLab.Persistence {
+
+  /// <summary>
+  /// Specifies which memebrs are selected for serialization by the StorableSerializer
+  /// </summary>
+  public enum StorableMemberSelection {
+
+    /// <summary>
+    /// Serialize only fields and properties that have been marked
+    /// with the [Storable] attribute. This is the default value.
+    /// </summary>
+    MarkedOnly,
+
+    /// <summary>
+    /// Serialize all fields but ignore the 
+    /// [Storable] attribute on properties.
+    /// 
+    /// This does not include generated backing fields
+    /// for automatic properties.
+    /// </summary>    
+    AllFields,
+
+    /// <summary>
+    /// Serialize all properties but ignore the
+    /// [Storable] attribute on fields.
+    /// </summary>    
+    AllProperties,
+
+    /// <summary>
+    /// Serialize all fields and all properties
+    /// regardless of the [Storable] attribute.
+    /// 
+    /// This does not include generated backing fields
+    /// for automatic properties, but uses the property
+    /// accessors instead.
+    /// </summary>    
+    AllFieldsAndAllProperties
+  };
+}
+
Index: branches/PersistenceReintegration/HeuristicLab.Persistence/4.0/Core/StorableTypeAttribute.cs
===================================================================
--- branches/PersistenceReintegration/HeuristicLab.Persistence/4.0/Core/StorableTypeAttribute.cs	(revision 14925)
+++ branches/PersistenceReintegration/HeuristicLab.Persistence/4.0/Core/StorableTypeAttribute.cs	(revision 14925)
@@ -0,0 +1,79 @@
+﻿#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;
+
+namespace HeuristicLab.Persistence {
+
+  /// <summary>
+  /// Mark a class to be considered by the <c>StorableSerializer</c>.
+  /// </summary>
+  [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Interface | AttributeTargets.Enum | AttributeTargets.Delegate, Inherited = false, AllowMultiple = false)]
+  public sealed class StorableTypeAttribute : Attribute {
+
+
+    /// <summary>
+    /// Specify how members are selected for serialization.
+    /// </summary>
+    public StorableMemberSelection MemberSelection { get; private set; }
+
+    public Guid Guid { get; private set; }
+    public uint Version { get; set; }
+
+    /// <summary>
+    /// Mark a class to be serialize by the <c>StorableSerizlier</c>
+    /// </summary>
+    /// <param name="memberSelection">The storable class memberSelection.</param>
+    public StorableTypeAttribute(StorableMemberSelection memberSelection, string guid, uint version = 1) {
+      MemberSelection = memberSelection;
+      Guid = new Guid(guid);
+      Version = version;
+    }
+
+    public StorableTypeAttribute(string guid, uint version = 1) {
+      Guid = new Guid(guid);
+      Version = version;
+    }
+
+    /// <summary>
+    /// Initializes a new instance of the <see cref="StorableTypeAttribute"/> class.
+    /// The default value for <see cref="StorableMemberSelection"/> is
+    /// <see cref="StorableMemberSelection.MarkedOnly"/>.
+    /// </summary>
+    private StorableTypeAttribute() { }
+
+    /// <summary>
+    ///  Checks if the <see cref="StorableTypeAttribute"/> is present on a memberSelection.
+    /// </summary>
+    /// <param name="type">The memberSelection which should be checked for the <see cref="StorableTypeAttribute"/></param>
+    /// <returns></returns>
+    public static bool IsStorableType(Type type) {
+      object[] attribs = type.GetCustomAttributes(typeof(StorableTypeAttribute), false);
+      return attribs.Length > 0;
+    }
+
+    public static StorableTypeAttribute GetStorableTypeAttribute(Type type) {
+      return (StorableTypeAttribute)Attribute.GetCustomAttribute(type, typeof(StorableTypeAttribute), false);
+    }
+
+  }
+}
+
Index: branches/PersistenceReintegration/HeuristicLab.Persistence/4.0/Plugin.cs.frame
===================================================================
--- branches/PersistenceReintegration/HeuristicLab.Persistence/4.0/Plugin.cs.frame	(revision 14924)
+++ branches/PersistenceReintegration/HeuristicLab.Persistence/4.0/Plugin.cs.frame	(revision 14925)
@@ -29,5 +29,4 @@
   [PluginFile("HeuristicLab.Persistence-4.0.dll", PluginFileType.Assembly)]
   [PluginDependency("HeuristicLab.ProtobufCS", "2.4.1.473")]
-  [PluginDependency("HeuristicLab.Persistence", "3.3")]
   public class HeuristicLabPersistencePlugin : PluginBase { }
 }
