Index: trunk/sources/HeuristicLab.Persistence/3.3/Core/Configuration.cs
===================================================================
--- trunk/sources/HeuristicLab.Persistence/3.3/Core/Configuration.cs	(revision 3029)
+++ trunk/sources/HeuristicLab.Persistence/3.3/Core/Configuration.cs	(revision 3030)
@@ -1,3 +1,4 @@
 ﻿using System;
+using System.Linq;
 using System.Collections.Generic;
 using HeuristicLab.Persistence.Interfaces;
@@ -11,5 +12,5 @@
   /// <c>ConfigurationService</c>.
   /// </summary>
-  [StorableClass]    
+  [StorableClass]
   public class Configuration {
 
@@ -27,7 +28,12 @@
     [Storable]
     public IFormat Format { get; private set; }
-    
-    private Configuration() {
+
+    [StorableConstructor]
+    private Configuration(bool isDeserializing) {
       compositeSerializerCache = new Dictionary<Type, ICompositeSerializer>();
+      if (isDeserializing)
+        return;
+      primitiveSerializers = new Dictionary<Type, IPrimitiveSerializer>();
+      compositeSerializers = new List<ICompositeSerializer>();
     }
 
@@ -40,15 +46,17 @@
     public Configuration(IFormat format,
         IEnumerable<IPrimitiveSerializer> primitiveSerializers,
-        IEnumerable<ICompositeSerializer> compositeSerializers) {
+        IEnumerable<ICompositeSerializer> compositeSerializers)
+      : this(false) {
       this.Format = format;
-      this.primitiveSerializers = new Dictionary<Type, IPrimitiveSerializer>();
-      foreach (IPrimitiveSerializer primitiveSerializer in primitiveSerializers) {
-        if (primitiveSerializer.SerialDataType != format.SerialDataType) {
-          throw new ArgumentException("All primitive serializers must have the same IFormat.");
-        }
+      this.compositeSerializers.AddRange(compositeSerializers);
+      foreach (var primitiveSerializer in primitiveSerializers) {
+        if (primitiveSerializer.SerialDataType != format.SerialDataType)
+          throw new ArgumentException(string.Format(
+            "primitive serializer's ({0}) serialized data type ({1}) " + Environment.NewLine +
+            "is not compatible with selected format's ({2}) seriali data type ({3})",
+            primitiveSerializers.GetType().FullName, primitiveSerializer.SerialDataType.FullName,
+            format.Name, format.SerialDataType.FullName));            
         this.primitiveSerializers.Add(primitiveSerializer.SourceType, primitiveSerializer);
-      }
-      this.compositeSerializers = new List<ICompositeSerializer>(compositeSerializers);
-      compositeSerializerCache = new Dictionary<Type, ICompositeSerializer>();
+      }      
     }
 
@@ -97,4 +105,21 @@
       return null;
     }
+
+    /// <summary>
+    /// Copies this configuration and re-instantiates all serializers.
+    /// </summary>
+    /// <returns>A new <see cref="Configuration"/></returns>
+    public Configuration Copy() {
+      var config = new Configuration(false);
+      config.Format = Format;
+      foreach (var ps in primitiveSerializers)
+        config.primitiveSerializers.Add(
+          ps.Key,
+          (IPrimitiveSerializer)Activator.CreateInstance(ps.Value.GetType()));
+      foreach (var cs in compositeSerializers)
+        config.compositeSerializers.Add((ICompositeSerializer)Activator.CreateInstance(cs.GetType()));
+      return config;
+    }
+
   }
 
Index: trunk/sources/HeuristicLab.Persistence/3.3/Core/ConfigurationService.cs
===================================================================
--- trunk/sources/HeuristicLab.Persistence/3.3/Core/ConfigurationService.cs	(revision 3029)
+++ trunk/sources/HeuristicLab.Persistence/3.3/Core/ConfigurationService.cs	(revision 3030)
@@ -242,5 +242,5 @@
 
     /// <summary>
-    /// Get a configuration for a certain format. This returns a custom configuration
+    /// Get a configuration for a certain format. This returns a fresh copy of a custom configuration,
     /// if defined, otherwise returns the default (automatically discovered) configuration.
     /// </summary>
@@ -249,5 +249,5 @@
     public Configuration GetConfiguration(IFormat format) {
       if (customConfigurations.ContainsKey(format))
-        return customConfigurations[format];
+        return customConfigurations[format].Copy();
       return GetDefaultConfig(format);
     }
@@ -258,5 +258,5 @@
     /// <param name="configuration">The new configuration.</param>
     public void DefineConfiguration(Configuration configuration) {
-      customConfigurations[configuration.Format] = configuration;
+      customConfigurations[configuration.Format] = configuration.Copy();
       SaveSettings();
     }
