Index: /branches/PersistenceSpeedUp/HeuristicLab.Algorithms.DataAnalysis/3.4/Linear/LinearDiscriminantAnalysis.cs
===================================================================
--- /branches/PersistenceSpeedUp/HeuristicLab.Algorithms.DataAnalysis/3.4/Linear/LinearDiscriminantAnalysis.cs	(revision 6227)
+++ /branches/PersistenceSpeedUp/HeuristicLab.Algorithms.DataAnalysis/3.4/Linear/LinearDiscriminantAnalysis.cs	(revision 6228)
@@ -51,6 +51,4 @@
       Problem = new ClassificationProblem();
     }
-    [StorableHook(HookType.AfterDeserialization)]
-    private void AfterDeserialization() { }
 
     public override IDeepCloneable Clone(Cloner cloner) {
Index: /branches/PersistenceSpeedUp/HeuristicLab.Algorithms.DataAnalysis/3.4/Linear/LinearRegression.cs
===================================================================
--- /branches/PersistenceSpeedUp/HeuristicLab.Algorithms.DataAnalysis/3.4/Linear/LinearRegression.cs	(revision 6227)
+++ /branches/PersistenceSpeedUp/HeuristicLab.Algorithms.DataAnalysis/3.4/Linear/LinearRegression.cs	(revision 6228)
@@ -52,6 +52,4 @@
       Problem = new RegressionProblem();
     }
-    [StorableHook(HookType.AfterDeserialization)]
-    private void AfterDeserialization() { }
 
     public override IDeepCloneable Clone(Cloner cloner) {
Index: /branches/PersistenceSpeedUp/HeuristicLab.Algorithms.DataAnalysis/3.4/SupportVectorMachine/SupportVectorClassification.cs
===================================================================
--- /branches/PersistenceSpeedUp/HeuristicLab.Algorithms.DataAnalysis/3.4/SupportVectorMachine/SupportVectorClassification.cs	(revision 6227)
+++ /branches/PersistenceSpeedUp/HeuristicLab.Algorithms.DataAnalysis/3.4/SupportVectorMachine/SupportVectorClassification.cs	(revision 6228)
@@ -102,6 +102,4 @@
       Parameters.Add(new ValueParameter<DoubleValue>(GammaParameterName, "The value of the gamma parameter in the kernel function.", new DoubleValue(1.0)));
     }
-    [StorableHook(HookType.AfterDeserialization)]
-    private void AfterDeserialization() { }
 
     public override IDeepCloneable Clone(Cloner cloner) {
Index: /branches/PersistenceSpeedUp/HeuristicLab.Algorithms.DataAnalysis/3.4/SupportVectorMachine/SupportVectorRegression.cs
===================================================================
--- /branches/PersistenceSpeedUp/HeuristicLab.Algorithms.DataAnalysis/3.4/SupportVectorMachine/SupportVectorRegression.cs	(revision 6227)
+++ /branches/PersistenceSpeedUp/HeuristicLab.Algorithms.DataAnalysis/3.4/SupportVectorMachine/SupportVectorRegression.cs	(revision 6228)
@@ -110,6 +110,4 @@
       Parameters.Add(new ValueParameter<DoubleValue>(EpsilonParameterName, "The value of the epsilon parameter for epsilon-SVR.", new DoubleValue(0.1)));
     }
-    [StorableHook(HookType.AfterDeserialization)]
-    private void AfterDeserialization() { }
 
     public override IDeepCloneable Clone(Cloner cloner) {
Index: /branches/PersistenceSpeedUp/HeuristicLab.Algorithms.DataAnalysis/3.4/kMeans/KMeansClustering.cs
===================================================================
--- /branches/PersistenceSpeedUp/HeuristicLab.Algorithms.DataAnalysis/3.4/kMeans/KMeansClustering.cs	(revision 6227)
+++ /branches/PersistenceSpeedUp/HeuristicLab.Algorithms.DataAnalysis/3.4/kMeans/KMeansClustering.cs	(revision 6228)
@@ -69,6 +69,4 @@
       Problem = new ClusteringProblem();
     }
-    [StorableHook(HookType.AfterDeserialization)]
-    private void AfterDeserialization() { }
 
     public override IDeepCloneable Clone(Cloner cloner) {
Index: /branches/PersistenceSpeedUp/HeuristicLab.Algorithms.NSGA2/3.3/NSGA2.cs
===================================================================
--- /branches/PersistenceSpeedUp/HeuristicLab.Algorithms.NSGA2/3.3/NSGA2.cs	(revision 6227)
+++ /branches/PersistenceSpeedUp/HeuristicLab.Algorithms.NSGA2/3.3/NSGA2.cs	(revision 6228)
@@ -306,4 +306,8 @@
     #region Helpers
     [StorableHook(HookType.AfterDeserialization)]
+    private void AfterDeserialization() {
+      AttachEventHandlers();
+    }
+
     private void AttachEventHandlers() {
       PopulationSizeParameter.ValueChanged += new EventHandler(PopulationSizeParameter_ValueChanged);
Index: /branches/PersistenceSpeedUp/HeuristicLab.Analysis/3.3/ValueAnalysis/MinAverageMaxValueAnalyzer.cs
===================================================================
--- /branches/PersistenceSpeedUp/HeuristicLab.Analysis/3.3/ValueAnalysis/MinAverageMaxValueAnalyzer.cs	(revision 6227)
+++ /branches/PersistenceSpeedUp/HeuristicLab.Analysis/3.3/ValueAnalysis/MinAverageMaxValueAnalyzer.cs	(revision 6228)
@@ -147,4 +147,8 @@
 
     [StorableHook(HookType.AfterDeserialization)]
+    private void AfterDeserialization() {
+      Initialize();
+    }
+
     private void Initialize() {
       ValueParameter.DepthChanged += new EventHandler(ValueParameter_DepthChanged);
@@ -193,5 +197,5 @@
       else if (!CollectMaxValueInResults.Value && maxValueParameter != null)
         resultsCollector.CollectedValues.Remove(maxValueParameter);
-      }
+    }
 
     private void CollectMinValueInResultsParameter_ValueChanged(object sender, EventArgs e) {
Index: /branches/PersistenceSpeedUp/HeuristicLab.Encodings.RealVectorEncoding/3.3/ParticleOperators/RealVectorSwarmUpdater.cs
===================================================================
--- /branches/PersistenceSpeedUp/HeuristicLab.Encodings.RealVectorEncoding/3.3/ParticleOperators/RealVectorSwarmUpdater.cs	(revision 6227)
+++ /branches/PersistenceSpeedUp/HeuristicLab.Encodings.RealVectorEncoding/3.3/ParticleOperators/RealVectorSwarmUpdater.cs	(revision 6228)
@@ -217,4 +217,8 @@
 
     [StorableHook(HookType.AfterDeserialization)]
+    private void AfterDeserialization() {
+      RegisterEvents();
+    }
+
     private void RegisterEvents() {
       VelocityBoundsStartValueParameter.ValueChanged += new EventHandler(VelocityBoundsStartValueParameter_ValueChanged);
@@ -223,5 +227,5 @@
 
     void VelocityBoundsStartValueParameter_Value_ValueChanged(object sender, EventArgs e) {
-      UpdateVelocityBoundsParamater(); 
+      UpdateVelocityBoundsParamater();
     }
 
@@ -245,5 +249,5 @@
         VelocityBoundsStartValueParameter.Value.ValueChanged += new EventHandler(VelocityBoundsStartValueParameter_Value_ValueChanged);
       }
-      UpdateVelocityBoundsParamater(); 
+      UpdateVelocityBoundsParamater();
     }
 
Index: /branches/PersistenceSpeedUp/HeuristicLab.Optimization.Operators/3.3/MultiObjective/CrowdingDistanceAssignment.cs
===================================================================
--- /branches/PersistenceSpeedUp/HeuristicLab.Optimization.Operators/3.3/MultiObjective/CrowdingDistanceAssignment.cs	(revision 6227)
+++ /branches/PersistenceSpeedUp/HeuristicLab.Optimization.Operators/3.3/MultiObjective/CrowdingDistanceAssignment.cs	(revision 6228)
@@ -57,4 +57,8 @@
 
     [StorableHook(HookType.AfterDeserialization)]
+    private void AfterDeserialization() {
+      AttachEventHandlers();
+    }
+
     private void AttachEventHandlers() {
       QualitiesParameter.DepthChanged += new EventHandler(QualitiesParameter_DepthChanged);
Index: /branches/PersistenceSpeedUp/HeuristicLab.Persistence/3.3/Default/CompositeSerializers/Storable/Descriptors/HookDescriptor.cs
===================================================================
--- /branches/PersistenceSpeedUp/HeuristicLab.Persistence/3.3/Default/CompositeSerializers/Storable/Descriptors/HookDescriptor.cs	(revision 6227)
+++ /branches/PersistenceSpeedUp/HeuristicLab.Persistence/3.3/Default/CompositeSerializers/Storable/Descriptors/HookDescriptor.cs	(revision 6228)
Index: /branches/PersistenceSpeedUp/HeuristicLab.Persistence/3.3/Default/CompositeSerializers/Storable/StorableClassAnalyzer.cs
===================================================================
--- /branches/PersistenceSpeedUp/HeuristicLab.Persistence/3.3/Default/CompositeSerializers/Storable/StorableClassAnalyzer.cs	(revision 6227)
+++ /branches/PersistenceSpeedUp/HeuristicLab.Persistence/3.3/Default/CompositeSerializers/Storable/StorableClassAnalyzer.cs	(revision 6228)
@@ -139,7 +139,13 @@
       if (methodInfo.ReturnType != typeof(void) || methodInfo.GetParameters().Length > 0)
         return;
-      var attribute = (StorableHookAttribute)methodInfo.GetCustomAttributes(typeof(StorableHookAttribute), false).SingleOrDefault();
-      if (attribute != null)
-        typeDescriptor.Hooks.Add(new HookDescriptor(typeDescriptor, methodInfo, attribute.HookType));
+      switch (methodInfo.Name) {
+        case "AfterDeserialization":
+          typeDescriptor.Hooks.Add(new HookDescriptor(typeDescriptor, methodInfo, HookType.AfterDeserialization));
+          break;
+        case "BeforeSerialization":
+          typeDescriptor.Hooks.Add(new HookDescriptor(typeDescriptor, methodInfo, HookType.BeforeSerialization));
+          break;
+        default: break;
+      }
     }
   }
Index: /branches/PersistenceSpeedUp/HeuristicLab.Persistence/3.3/Tests/UseCases.cs
===================================================================
--- /branches/PersistenceSpeedUp/HeuristicLab.Persistence/3.3/Tests/UseCases.cs	(revision 6227)
+++ /branches/PersistenceSpeedUp/HeuristicLab.Persistence/3.3/Tests/UseCases.cs	(revision 6228)
@@ -798,9 +798,9 @@
       public bool WasSerialized { get; private set; }
       [StorableHook(HookType.BeforeSerialization)]
-      void PreSerializationHook() {
+      void BeforeSerialization() {
         WasSerialized = true;
       }
       [StorableHook(HookType.AfterDeserialization)]
-      void PostDeserializationHook() {
+      void AfterDeserialization() {
         sum = a + b;
       }
@@ -896,5 +896,5 @@
       public object link;
       [StorableHook(HookType.AfterDeserialization)]
-      private void relink() {
+      private void AfterDeserialization() {
         link = a;
       }
@@ -906,5 +906,5 @@
       public object b;
       [StorableHook(HookType.AfterDeserialization)]
-      private void relink() {
+      private void AfterDeserialization() {
         Assert.AreSame(a, link);
         link = b;
Index: /branches/PersistenceSpeedUp/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/Analyzers/SymbolicRegressionOverfittingAnalyzer.cs
===================================================================
--- /branches/PersistenceSpeedUp/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/Analyzers/SymbolicRegressionOverfittingAnalyzer.cs	(revision 6227)
+++ /branches/PersistenceSpeedUp/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/Analyzers/SymbolicRegressionOverfittingAnalyzer.cs	(revision 6228)
@@ -90,9 +90,5 @@
       Parameters.Add(new LookupParameter<BoolValue>(OverfittingParameterName, "Boolean indicator for overfitting."));
       Parameters.Add(new LookupParameter<ResultCollection>(ResultsParameterName, "The results collection."));
-    }
-
-    [StorableHook(HookType.AfterDeserialization)]
-    private void AfterDeserialization() {
-    }
+    }    
 
     public override IDeepCloneable Clone(Cloner cloner) {
Index: /branches/PersistenceSpeedUp/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/Analyzers/SymbolicRegressionValidationAnalyzer.cs
===================================================================
--- /branches/PersistenceSpeedUp/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/Analyzers/SymbolicRegressionValidationAnalyzer.cs	(revision 6227)
+++ /branches/PersistenceSpeedUp/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/Analyzers/SymbolicRegressionValidationAnalyzer.cs	(revision 6228)
@@ -134,8 +134,5 @@
       Parameters.Add(new ValueLookupParameter<DoubleValue>(LowerEstimationLimitParameterName, "The lower estimation limit that was set for the evaluation of the symbolic expression trees."));
     }
-
-    [StorableHook(HookType.AfterDeserialization)]
-    private void AfterDeserialization() { }
-
+    
     public override IOperation Apply() {
       var trees = SymbolicExpressionTree.ToArray();
Index: /branches/PersistenceSpeedUp/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/SymbolicRegressionProblem.cs
===================================================================
--- /branches/PersistenceSpeedUp/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/SymbolicRegressionProblem.cs	(revision 6227)
+++ /branches/PersistenceSpeedUp/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/SymbolicRegressionProblem.cs	(revision 6228)
@@ -28,6 +28,6 @@
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.PluginInfrastructure;
 using HeuristicLab.Problems.DataAnalysis.Regression.Symbolic.Analyzers;
-using HeuristicLab.PluginInfrastructure;
 
 namespace HeuristicLab.Problems.DataAnalysis.Regression.Symbolic {
@@ -138,5 +138,5 @@
     #region Helpers
     [StorableHook(HookType.AfterDeserialization)]
-    private void AfterDeserializationHook() {
+    private void AfterDeserialization() {
       // BackwardsCompatibility3.3
       #region Backwards compatible code (remove with 3.4)
Index: /branches/PersistenceSpeedUp/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/SymbolicRegressionProblemBase.cs
===================================================================
--- /branches/PersistenceSpeedUp/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/SymbolicRegressionProblemBase.cs	(revision 6227)
+++ /branches/PersistenceSpeedUp/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/SymbolicRegressionProblemBase.cs	(revision 6228)
@@ -265,5 +265,5 @@
     #region Helpers
     [StorableHook(HookType.AfterDeserialization)]
-    private void AfterDeserializationHook() {
+    private void AfterDeserialization() {
       // BackwardsCompatibility3.3
       #region Backwards compatible code (remove with 3.4)
Index: /branches/PersistenceSpeedUp/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Clustering/ClusteringProblemData.cs
===================================================================
--- /branches/PersistenceSpeedUp/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Clustering/ClusteringProblemData.cs	(revision 6227)
+++ /branches/PersistenceSpeedUp/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Clustering/ClusteringProblemData.cs	(revision 6228)
@@ -20,12 +20,8 @@
 #endregion
 
-using System;
 using System.Collections.Generic;
 using System.IO;
-using System.Linq;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
-using HeuristicLab.Data;
-using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 
@@ -76,8 +72,4 @@
     [StorableConstructor]
     private ClusteringProblemData(bool deserializing) : base(deserializing) { }
-    [StorableHook(HookType.AfterDeserialization)]
-    private void AfterDeserialization() {
-    }
-
 
     private ClusteringProblemData(ClusteringProblemData original, Cloner cloner)
Index: /branches/PersistenceSpeedUp/HeuristicLab.Problems.ExternalEvaluation/3.3/ExternalEvaluationProblem.cs
===================================================================
--- /branches/PersistenceSpeedUp/HeuristicLab.Problems.ExternalEvaluation/3.3/ExternalEvaluationProblem.cs	(revision 6227)
+++ /branches/PersistenceSpeedUp/HeuristicLab.Problems.ExternalEvaluation/3.3/ExternalEvaluationProblem.cs	(revision 6228)
@@ -127,8 +127,4 @@
     [StorableConstructor]
     private ExternalEvaluationProblem(bool deserializing) : base(deserializing) { }
-    [StorableHook(HookType.AfterDeserialization)]
-    private void AfterDeserializationHook() {
-      AttachEventHandlers();
-    }
 
     private ExternalEvaluationProblem(ExternalEvaluationProblem original, Cloner cloner)
@@ -158,4 +154,5 @@
     [StorableHook(HookType.AfterDeserialization)]
     private void AfterDeserialization() {
+      AttachEventHandlers();
       // BackwardsCompatibility3.3
       #region Backwards compatible code, remove with 3.4
Index: /branches/PersistenceSpeedUp/HeuristicLab.Problems.VehicleRouting/3.3/Analyzers/BestVRPSolutionAnalyzer.cs
===================================================================
--- /branches/PersistenceSpeedUp/HeuristicLab.Problems.VehicleRouting/3.3/Analyzers/BestVRPSolutionAnalyzer.cs	(revision 6227)
+++ /branches/PersistenceSpeedUp/HeuristicLab.Problems.VehicleRouting/3.3/Analyzers/BestVRPSolutionAnalyzer.cs	(revision 6228)
@@ -95,5 +95,5 @@
     public BestVRPSolutionAnalyzer()
       : base() {
-        Parameters.Add(new ScopeTreeLookupParameter<IVRPEncoding>("VRPTours", "The VRP tours which should be evaluated."));
+      Parameters.Add(new ScopeTreeLookupParameter<IVRPEncoding>("VRPTours", "The VRP tours which should be evaluated."));
       Parameters.Add(new LookupParameter<DoubleMatrix>("Coordinates", "The x- and y-Coordinates of the cities."));
       Parameters.Add(new LookupParameter<DoubleMatrix>("DistanceMatrix", "The matrix which contains the distances between the cities."));
@@ -121,5 +121,5 @@
 
     [StorableHook(HookType.AfterDeserialization)]
-    private void AfterDeserializationHook() {
+    private void AfterDeserialization() {
       #region Backwards Compatibility
       if (!Parameters.ContainsKey("BestKnownQuality")) {
Index: /branches/PersistenceSpeedUp/HeuristicLab.Problems.VehicleRouting/3.3/VehicleRoutingProblem.cs
===================================================================
--- /branches/PersistenceSpeedUp/HeuristicLab.Problems.VehicleRouting/3.3/VehicleRoutingProblem.cs	(revision 6227)
+++ /branches/PersistenceSpeedUp/HeuristicLab.Problems.VehicleRouting/3.3/VehicleRoutingProblem.cs	(revision 6228)
@@ -436,5 +436,5 @@
     #region Helpers
     [StorableHook(HookType.AfterDeserialization)]
-    private void AfterDeserializationHook() {
+    private void AfterDeserialization() {
       #region Backwards Compatibility
       if (!Parameters.ContainsKey("BestKnownSolution")) {
