Index: /trunk/sources/HeuristicLab.Persistence.GUI/3.3/PersistenceConfigurationForm.cs
===================================================================
--- /trunk/sources/HeuristicLab.Persistence.GUI/3.3/PersistenceConfigurationForm.cs	(revision 1541)
+++ /trunk/sources/HeuristicLab.Persistence.GUI/3.3/PersistenceConfigurationForm.cs	(revision 1542)
@@ -366,5 +366,5 @@
 
   [EmptyStorableClass]
-  public class EmptyFormat : Format {
+  public class EmptyFormat : FormatBase {
     public override string Name { get { return "Empty"; } }
     public static EmptyFormat Instance = new EmptyFormat();
Index: /trunk/sources/HeuristicLab.Persistence.Test/HeuristicLab.Persistence.Test.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Persistence.Test/HeuristicLab.Persistence.Test.csproj	(revision 1541)
+++ /trunk/sources/HeuristicLab.Persistence.Test/HeuristicLab.Persistence.Test.csproj	(revision 1542)
@@ -9,6 +9,6 @@
     <OutputType>Exe</OutputType>
     <AppDesignerFolder>Properties</AppDesignerFolder>
-    <RootNamespace>Test</RootNamespace>
-    <AssemblyName>Test</AssemblyName>
+    <RootNamespace>HeuristicLab.Persistence.Test</RootNamespace>
+    <AssemblyName>HeuristicLab.Persistence.Test</AssemblyName>
     <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
     <FileAlignment>512</FileAlignment>
Index: /trunk/sources/HeuristicLab.Persistence.Test/NewSerializationTest.cs
===================================================================
--- /trunk/sources/HeuristicLab.Persistence.Test/NewSerializationTest.cs	(revision 1541)
+++ /trunk/sources/HeuristicLab.Persistence.Test/NewSerializationTest.cs	(revision 1542)
@@ -185,6 +185,5 @@
       r.myEnum = TestEnum.va1;
       XmlGenerator.Serialize(r, "test.zip");      
-      object o = XmlParser.DeSerialize("test.zip");
-      Console.Out.WriteLine(Util.AutoFormat(o, true));
+      object o = XmlParser.DeSerialize("test.zip");      
       Console.WriteLine(ViewOnlyGenerator.Serialize(r));
       Console.WriteLine(ViewOnlyGenerator.Serialize(o));
@@ -199,6 +198,5 @@
       c.kvpList = new KeyValuePair<List<C>, C>(new List<C> { c }, c);
       XmlGenerator.Serialize(cs, "test3.zip");
-      object o = XmlParser.DeSerialize("test3.zip");
-      Console.Out.WriteLine(Util.AutoFormat(o, true));
+      object o = XmlParser.DeSerialize("test3.zip");      
       Console.WriteLine(ViewOnlyGenerator.Serialize(cs));
       Console.WriteLine(ViewOnlyGenerator.Serialize(o));
@@ -220,6 +218,5 @@
       arrayListArray[2].Add(a);
       XmlGenerator.Serialize(arrayListArray, "test4.zip");
-      object o = XmlParser.DeSerialize("test4.zip");
-      Console.Out.WriteLine(Util.AutoFormat(o, true));
+      object o = XmlParser.DeSerialize("test4.zip");      
       Console.WriteLine(ViewOnlyGenerator.Serialize(arrayListArray));
       Console.WriteLine(ViewOnlyGenerator.Serialize(o));
@@ -230,5 +227,6 @@
       XmlGenerator.Serialize(m, "test2.zip");
       object o = XmlParser.DeSerialize("test2.zip");
-      Console.Out.WriteLine(Util.AutoFormat(o, true));      
+      Console.WriteLine(ViewOnlyGenerator.Serialize(m));
+      Console.WriteLine(ViewOnlyGenerator.Serialize(o));      
     }    
 
Index: /trunk/sources/HeuristicLab.Persistence/3.3/Core/Configuration.cs
===================================================================
--- /trunk/sources/HeuristicLab.Persistence/3.3/Core/Configuration.cs	(revision 1541)
+++ /trunk/sources/HeuristicLab.Persistence/3.3/Core/Configuration.cs	(revision 1542)
@@ -13,5 +13,5 @@
     private readonly Dictionary<Type, IDecomposer> decomposerCache;
     [Storable]
-    public readonly IFormat Format;
+    public IFormat Format { get; set; }
 
     private Configuration() {
Index: /trunk/sources/HeuristicLab.Persistence/3.3/Core/ConfigurationService.cs
===================================================================
--- /trunk/sources/HeuristicLab.Persistence/3.3/Core/ConfigurationService.cs	(revision 1541)
+++ /trunk/sources/HeuristicLab.Persistence/3.3/Core/ConfigurationService.cs	(revision 1542)
@@ -7,4 +7,5 @@
 using HeuristicLab.Persistence.Interfaces;
 using HeuristicLab.Tracing;
+using HeuristicLab.Persistence.Interfaces.Tokens;
 
 namespace HeuristicLab.Persistence.Core {
@@ -14,6 +15,6 @@
     private static ConfigurationService instance;
     private readonly Dictionary<IFormat, Configuration> customConfigurations;
-    public readonly Dictionary<IFormat, List<IFormatter>> Formatters;
-    public readonly List<IDecomposer> Decomposers;
+    public Dictionary<IFormat, List<IFormatter>> Formatters { get; private set; }
+    public List<IDecomposer> Decomposers { get; private set; }
     
     public static ConfigurationService Instance {
@@ -25,5 +26,5 @@
     }
 
-    public ConfigurationService() {
+    private ConfigurationService() {
       Formatters = new Dictionary<IFormat, List<IFormatter>>();
       Decomposers = new List<IDecomposer>();
@@ -35,16 +36,16 @@
     public void LoadSettings() {
       try {
-        if (String.IsNullOrEmpty(Properties.Settings.Default.customConfigurations) ||
-          String.IsNullOrEmpty(Properties.Settings.Default.customConfigurationsTypeCache))
+        if (String.IsNullOrEmpty(Properties.Settings.Default.CustomConfigurations) ||
+          String.IsNullOrEmpty(Properties.Settings.Default.CustomConfigurationsTypeCache))
           return;
-        DeSerializer deSerializer = new DeSerializer(
+        Deserializer deSerializer = new Deserializer(
           XmlParser.ParseTypeCache(
           new StringReader(
-            Properties.Settings.Default.customConfigurationsTypeCache)));
+            Properties.Settings.Default.CustomConfigurationsTypeCache)));
         XmlParser parser = new XmlParser(
           new StringReader(
-            Properties.Settings.Default.customConfigurations));
+            Properties.Settings.Default.CustomConfigurations));
         var newCustomConfigurations = (Dictionary<IFormat, Configuration>)
-          deSerializer.DeSerialize(parser);
+          deSerializer.Deserialize(parser);
         foreach (var config in newCustomConfigurations) {
           customConfigurations[config.Key] = config.Value;
@@ -68,7 +69,7 @@
       foreach (string s in generator.Format(serializer.TypeCache))
         configurationTypeCacheString.Append(s);
-      Properties.Settings.Default.customConfigurations =
+      Properties.Settings.Default.CustomConfigurations =
         configurationString.ToString();
-      Properties.Settings.Default.customConfigurationsTypeCache =
+      Properties.Settings.Default.CustomConfigurationsTypeCache =
         configurationTypeCacheString.ToString();
       Properties.Settings.Default.Save();
Index: /trunk/sources/HeuristicLab.Persistence/3.3/Core/DataMemberAccessor.cs
===================================================================
--- /trunk/sources/HeuristicLab.Persistence/3.3/Core/DataMemberAccessor.cs	(revision 1541)
+++ /trunk/sources/HeuristicLab.Persistence/3.3/Core/DataMemberAccessor.cs	(revision 1542)
@@ -16,5 +16,5 @@
     public DataMemberAccessor(
         MemberInfo memberInfo,
-        StorableAttribute autoStorableAttribute,
+        StorableAttribute storableAttribute,
         object obj) {
       if (memberInfo.MemberType == MemberTypes.Field) {
@@ -34,6 +34,6 @@
                 "The Storable attribute can only be applied to fields and properties.");
       }
-      Name = autoStorableAttribute.Name ?? memberInfo.Name;
-      DefaultValue = autoStorableAttribute.DefaultValue;
+      Name = storableAttribute.Name ?? memberInfo.Name;
+      DefaultValue = storableAttribute.DefaultValue;
     }
 
Index: /trunk/sources/HeuristicLab.Persistence/3.3/Core/DeSerializer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Persistence/3.3/Core/DeSerializer.cs	(revision 1541)
+++ /trunk/sources/HeuristicLab.Persistence/3.3/Core/DeSerializer.cs	(revision 1542)
@@ -2,8 +2,9 @@
 using System;
 using HeuristicLab.Persistence.Interfaces;
+using HeuristicLab.Persistence.Interfaces.Tokens;
 
 namespace HeuristicLab.Persistence.Core {  
 
-  public struct ParentReference {}  
+  public class ParentReference {}  
 
   class CompositeObject {
@@ -18,5 +19,5 @@
 
     public void AddValue(string name, object value, List<Thunk> finalFixes) {
-      Tag t = new Tag(name, value) {finalFixes = finalFixes};
+      Tag t = new Tag(name, value) {globalFinalFixes = finalFixes};
       customValues.Add(t);
     }
@@ -30,5 +31,5 @@
   public delegate void Thunk();
 
-  public class DeSerializer {
+  public class Deserializer {
     
     private readonly Dictionary<int, object> id2obj;
@@ -38,13 +39,13 @@
     private List<Thunk> finalFixes;
 
-    public DeSerializer(
+    public Deserializer(
       IEnumerable<TypeMapping> typeCache) {      
       id2obj = new Dictionary<int, object>();
       parentStack = new Stack<CompositeObject>();
       typeIds = new Dictionary<int, Type>();
-      serializerMapping = createSerializers(typeCache);
+      serializerMapping = CreateSerializers(typeCache);
     }
 
-    private Dictionary<Type, object> createSerializers(IEnumerable<TypeMapping> typeCache) {
+    private Dictionary<Type, object> CreateSerializers(IEnumerable<TypeMapping> typeCache) {
       var map = new Dictionary<Type, object>();
       foreach (var typeMapping in typeCache) {
@@ -59,5 +60,5 @@
     }
 
-    public object DeSerialize(IEnumerable<ISerializationToken> tokens) {
+    public object Deserialize(IEnumerable<ISerializationToken> tokens) {
       finalFixes = new List<Thunk>();      
       foreach (ISerializationToken token in tokens) {
Index: /trunk/sources/HeuristicLab.Persistence/3.3/Core/Serializer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Persistence/3.3/Core/Serializer.cs	(revision 1541)
+++ /trunk/sources/HeuristicLab.Persistence/3.3/Core/Serializer.cs	(revision 1542)
@@ -3,4 +3,5 @@
 using System;
 using HeuristicLab.Persistence.Interfaces;
+using HeuristicLab.Persistence.Interfaces.Tokens;
 
 namespace HeuristicLab.Persistence.Core {
@@ -49,9 +50,5 @@
 
     public IEnumerator<ISerializationToken> GetEnumerator() {
-      DataMemberAccessor rootAccessor = new DataMemberAccessor(
-        rootName, null, () => obj, null);
-      IEnumerator<ISerializationToken> iterator = Serialize(rootAccessor);
-      while (iterator.MoveNext())
-        yield return iterator.Current;      
+      return Serialize(new DataMemberAccessor(rootName, null, () => obj, null));
     }
     
@@ -75,5 +72,5 @@
       IDecomposer decomposer = configuration.GetDecomposer(value.GetType()); 
       if (decomposer != null)
-        return CompositeEnumerator(accessor.Name, decomposer.DeCompose(value), id, typeId);                  
+        return CompositeEnumerator(accessor.Name, decomposer.Decompose(value), id, typeId);                  
       throw new ApplicationException(
           String.Format(
@@ -92,5 +89,5 @@
     private IEnumerator<ISerializationToken> PrimitiveEnumerator(string name,
         int typeId, object serializedValue, int? id) {
-      yield return new PrimitiveToken(name, typeId, serializedValue, id);
+      yield return new PrimitiveToken(name, typeId, id, serializedValue);
     }
 
Index: /trunk/sources/HeuristicLab.Persistence/3.3/Core/Tag.cs
===================================================================
--- /trunk/sources/HeuristicLab.Persistence/3.3/Core/Tag.cs	(revision 1541)
+++ /trunk/sources/HeuristicLab.Persistence/3.3/Core/Tag.cs	(revision 1542)
@@ -4,7 +4,7 @@
 
   public class Tag {
-    public List<Thunk> finalFixes;
+    internal List<Thunk> globalFinalFixes; // reference to final fixes of Deserializer
     public string Name { get; private set; }
-    public object Value;      
+    public object Value { get; set; }     
 
     public Tag(string name, object value) {
@@ -17,6 +17,6 @@
     }
     public void SafeSet(Setter setter) {
-      if ( Value != null && Value.GetType() == typeof(ParentReference))
-        finalFixes.Add(() => setter(Value));
+      if ( Value as ParentReference != null)
+        globalFinalFixes.Add(() => setter(Value));
       else
         setter(Value);
Index: /trunk/sources/HeuristicLab.Persistence/3.3/Core/TypeMapping.cs
===================================================================
--- /trunk/sources/HeuristicLab.Persistence/3.3/Core/TypeMapping.cs	(revision 1541)
+++ /trunk/sources/HeuristicLab.Persistence/3.3/Core/TypeMapping.cs	(revision 1542)
@@ -3,5 +3,5 @@
 namespace HeuristicLab.Persistence.Core {
 
-  public struct TypeMapping {
+  public class TypeMapping {
     public readonly int Id;
     public readonly string TypeName;
Index: /trunk/sources/HeuristicLab.Persistence/3.3/Default/Decomposers/ArrayDecomposer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Persistence/3.3/Default/Decomposers/ArrayDecomposer.cs	(revision 1541)
+++ /trunk/sources/HeuristicLab.Persistence/3.3/Default/Decomposers/ArrayDecomposer.cs	(revision 1542)
@@ -16,5 +16,5 @@
     }
 
-    public IEnumerable<Tag> DeCompose(object array) {
+    public IEnumerable<Tag> Decompose(object array) {
       Array a = (Array)array;      
       yield return new Tag("rank", a.Rank);
Index: /trunk/sources/HeuristicLab.Persistence/3.3/Default/Decomposers/DictionaryDecomposer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Persistence/3.3/Default/Decomposers/DictionaryDecomposer.cs	(revision 1541)
+++ /trunk/sources/HeuristicLab.Persistence/3.3/Default/Decomposers/DictionaryDecomposer.cs	(revision 1542)
@@ -23,5 +23,5 @@
       key = v;
       keyIsSet = true;
-      check();
+      Check();
     }
 
@@ -29,8 +29,8 @@
       value = v;
       valueIsSet = true;
-      check();
+      Check();
     }
 
-    private void check() {
+    private void Check() {
       if ( keyIsSet && valueIsSet )
         dict.Add(key, value);
@@ -50,5 +50,5 @@
     }
 
-    public IEnumerable<Tag> DeCompose(object o) {
+    public IEnumerable<Tag> Decompose(object o) {
       IDictionary dict = (IDictionary)o;      
       foreach ( DictionaryEntry entry in dict) {
Index: /trunk/sources/HeuristicLab.Persistence/3.3/Default/Decomposers/EnumDecomposer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Persistence/3.3/Default/Decomposers/EnumDecomposer.cs	(revision 1541)
+++ /trunk/sources/HeuristicLab.Persistence/3.3/Default/Decomposers/EnumDecomposer.cs	(revision 1542)
@@ -13,8 +13,8 @@
 
     public bool CanDecompose(Type type) {
-      return type.IsEnum || type == typeof (Enum);
+      return type.IsEnum || type == typeof(Enum);
     }
 
-    public IEnumerable<Tag> DeCompose(object obj) {      
+    public IEnumerable<Tag> Decompose(object obj) {      
       yield return new Tag(Enum.GetName(obj.GetType(), obj));
     }
Index: /trunk/sources/HeuristicLab.Persistence/3.3/Default/Decomposers/EnumerableDecomposer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Persistence/3.3/Default/Decomposers/EnumerableDecomposer.cs	(revision 1541)
+++ /trunk/sources/HeuristicLab.Persistence/3.3/Default/Decomposers/EnumerableDecomposer.cs	(revision 1542)
@@ -68,5 +68,5 @@
     }
 
-    public IEnumerable<Tag> DeCompose(object obj) {
+    public IEnumerable<Tag> Decompose(object obj) {
       foreach (object o in (IEnumerable)obj) {
         yield return new Tag(null, o);
Index: /trunk/sources/HeuristicLab.Persistence/3.3/Default/Decomposers/KeyValuePairDecomposer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Persistence/3.3/Default/Decomposers/KeyValuePairDecomposer.cs	(revision 1541)
+++ /trunk/sources/HeuristicLab.Persistence/3.3/Default/Decomposers/KeyValuePairDecomposer.cs	(revision 1542)
@@ -21,5 +21,5 @@
     }
 
-    public IEnumerable<Tag> DeCompose(object o) {      
+    public IEnumerable<Tag> Decompose(object o) {      
       Type t = o.GetType();
       yield return new Tag("key", t.GetProperty("Key").GetValue(o, null));
Index: /trunk/sources/HeuristicLab.Persistence/3.3/Default/Decomposers/StorableDecomposer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Persistence/3.3/Default/Decomposers/StorableDecomposer.cs	(revision 1541)
+++ /trunk/sources/HeuristicLab.Persistence/3.3/Default/Decomposers/StorableDecomposer.cs	(revision 1542)
@@ -19,5 +19,5 @@
     }    
 
-    public IEnumerable<Tag> DeCompose(object obj) {
+    public IEnumerable<Tag> Decompose(object obj) {
       foreach (var mapping in StorableAttribute.GetAutostorableAccessors(obj)) {
         yield return new Tag(mapping.Key, mapping.Value.Get());
Index: /trunk/sources/HeuristicLab.Persistence/3.3/Default/Decomposers/TypeDecomposer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Persistence/3.3/Default/Decomposers/TypeDecomposer.cs	(revision 1541)
+++ /trunk/sources/HeuristicLab.Persistence/3.3/Default/Decomposers/TypeDecomposer.cs	(revision 1542)
@@ -17,5 +17,5 @@
     }
 
-    public IEnumerable<Tag> DeCompose(object obj) {
+    public IEnumerable<Tag> Decompose(object obj) {
       Type t = (Type) obj;
       yield return new Tag("VersionInvariantName", t.VersionInvariantName());
Index: /trunk/sources/HeuristicLab.Persistence/3.3/Default/Decomposers/X2StringDecomposer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Persistence/3.3/Default/Decomposers/X2StringDecomposer.cs	(revision 1541)
+++ /trunk/sources/HeuristicLab.Persistence/3.3/Default/Decomposers/X2StringDecomposer.cs	(revision 1542)
@@ -9,10 +9,5 @@
 namespace HeuristicLab.Persistence.Default.Decomposers {
 
-  public class Number2StringDecomposer : IDecomposer {
-
-    public int Priority {
-      get { return 100; }
-    }
-
+  public class Number2StringConverter {    
 
     private static readonly List<Type> numberTypes =
@@ -34,5 +29,5 @@
     private static readonly Dictionary<Type, MethodInfo> numberParsers;  
 
-    static Number2StringDecomposer() {
+    static Number2StringConverter() {
       numberParsers = new Dictionary<Type, MethodInfo>();
       foreach ( var type in numberTypes ) {
@@ -56,13 +51,5 @@
       return obj.ToString();
     }
-
-    public IEnumerable<Tag> DeCompose(object obj) {      
-      yield return new Tag(Format(obj));      
-    }
-
-    public object CreateInstance(Type type) {
-      return null;
-    }
-
+    
     public object Parse(string stringValue, Type type) {
       return numberParsers[type]
@@ -72,10 +59,4 @@
     }
 
-    public object Populate(object instance, IEnumerable<Tag> tags, Type type) {      
-      foreach (Tag tag in tags)
-        return Parse((string)tag.Value, type);
-      throw new ApplicationException("not enough tags to re-compose number.");
-    }
-
   }  
 
@@ -91,5 +72,5 @@
     }
 
-    public IEnumerable<Tag> DeCompose(object obj) {
+    public IEnumerable<Tag> Decompose(object obj) {
       yield return new Tag(((DateTime)obj).Ticks);
     }
@@ -114,14 +95,14 @@
     }
     
-    private static readonly Number2StringDecomposer numberDecomposer =
-      new Number2StringDecomposer();    
+    private static readonly Number2StringConverter numberConverter =
+      new Number2StringConverter();    
 
     public bool CanDecompose(Type type) {
       return
         (type.IsArray || type == typeof (Array)) &&
-        numberDecomposer.CanDecompose(type.GetElementType());
-    }
-
-    public IEnumerable<Tag> DeCompose(object obj) {
+        numberConverter.CanDecompose(type.GetElementType());
+    }
+
+    public IEnumerable<Tag> Decompose(object obj) {
       Array a = (Array) obj;
       int[] lengths = new int[a.Rank];
@@ -139,5 +120,5 @@
       int[] positions = (int[])lowerBounds.Clone();
       while (positions[a.Rank - 1] < lengths[a.Rank - 1] + lowerBounds[a.Rank - 1]) {
-        sb.Append(numberDecomposer.Format(a.GetValue(positions))).Append(';');
+        sb.Append(numberConverter.Format(a.GetValue(positions))).Append(';');
         positions[0] += 1;
         for (int i = 0; i < a.Rank - 1; i++) {
@@ -180,5 +161,5 @@
       while (valueIter.MoveNext()) {
         a.SetValue(
-          numberDecomposer.Parse((string)valueIter.Current, elementType),          
+          numberConverter.Parse((string)valueIter.Current, elementType),          
           positions);
         positions[0] += 1;
@@ -202,6 +183,6 @@
     }
 
-    private static readonly Number2StringDecomposer numberDecomposer =
-      new Number2StringDecomposer();
+    private static readonly Number2StringConverter numberConverter =
+      new Number2StringConverter();
     
     private static readonly Dictionary<Type, Type> interfaceCache = new Dictionary<Type, Type>();
@@ -213,5 +194,5 @@
         if (iface.IsGenericType &&
           iface.GetGenericTypeDefinition() == typeof(IEnumerable<>) &&
-          numberDecomposer.CanDecompose(iface.GetGenericArguments()[0])) {
+          numberConverter.CanDecompose(iface.GetGenericArguments()[0])) {
           interfaceCache.Add(type, iface);
           return iface;
@@ -243,5 +224,5 @@
     }
 
-    public IEnumerable<Tag> DeCompose(object obj) {
+    public IEnumerable<Tag> Decompose(object obj) {
       Type type = obj.GetType();
       Type enumerable = GetGenericEnumerableInterface(type);      
@@ -259,5 +240,5 @@
       while ( (bool)moveNextMethod.Invoke(genericEnumerator, empty) )
         sb.Append(
-          numberDecomposer.Format(
+          numberConverter.Format(
             currentProperty.GetValue(genericEnumerator, null))).Append(';');
       yield return new Tag("compact enumerable", sb.ToString());
@@ -277,5 +258,5 @@
         .Split(new[] {';'}, StringSplitOptions.RemoveEmptyEntries);
       foreach (var value in stringValues) {
-        addMethod.Invoke(instance, new[] {numberDecomposer.Parse(value, elementType)});
+        addMethod.Invoke(instance, new[] {numberConverter.Parse(value, elementType)});
       }      
       return instance;      
Index: /trunk/sources/HeuristicLab.Persistence/3.3/Default/ViewOnly/ViewOnlyFormat.cs
===================================================================
--- /trunk/sources/HeuristicLab.Persistence/3.3/Default/ViewOnly/ViewOnlyFormat.cs	(revision 1541)
+++ /trunk/sources/HeuristicLab.Persistence/3.3/Default/ViewOnly/ViewOnlyFormat.cs	(revision 1542)
@@ -5,8 +5,9 @@
 using HeuristicLab.Persistence.Default.Xml;
 using HeuristicLab.Persistence.Core;
+using HeuristicLab.Persistence.Interfaces.Tokens;
 
 namespace HeuristicLab.Persistence.Default.ViewOnly {
 
-  public class ViewOnlyFormat : Format {
+  public class ViewOnlyFormat : FormatBase {
     public override string Name { get { return "ViewOnly"; } }
     public static ViewOnlyFormat Instance = new ViewOnlyFormat();
Index: /trunk/sources/HeuristicLab.Persistence/3.3/Default/Xml/Compact/DoubleArray2XmlFormatters.cs
===================================================================
--- /trunk/sources/HeuristicLab.Persistence/3.3/Default/Xml/Compact/DoubleArray2XmlFormatters.cs	(revision 1541)
+++ /trunk/sources/HeuristicLab.Persistence/3.3/Default/Xml/Compact/DoubleArray2XmlFormatters.cs	(revision 1542)
@@ -6,5 +6,5 @@
 
   [EmptyStorableClass]
-  public class DoubleArray2XmlFormatter : NumberArray2XmlFormatter {
+  public class DoubleArray2XmlFormatter : NumberArray2XmlFormatterBase {
 
     public override Type Type {
@@ -14,9 +14,9 @@
     }
 
-    protected override string formatValue(object o) {
+    protected override string FormatValue(object o) {
       return ((double)o).ToString("r", CultureInfo.InvariantCulture);
     }
 
-    protected override object parseValue(string o) {
+    protected override object ParseValue(string o) {
       return double.Parse(o);
     }
Index: /trunk/sources/HeuristicLab.Persistence/3.3/Default/Xml/Compact/DoubleList2XmlFormatter.cs
===================================================================
--- /trunk/sources/HeuristicLab.Persistence/3.3/Default/Xml/Compact/DoubleList2XmlFormatter.cs	(revision 1541)
+++ /trunk/sources/HeuristicLab.Persistence/3.3/Default/Xml/Compact/DoubleList2XmlFormatter.cs	(revision 1542)
@@ -8,5 +8,5 @@
 
   [EmptyStorableClass]
-  public class DoubleList2XmlFormatter : NumberEnumeration2XmlFormatter {
+  public class DoubleList2XmlFormatter : NumberEnumeration2XmlFormatterBase {
 
     public override Type Type {
@@ -24,9 +24,9 @@
     }
 
-    protected override string formatValue(object o) {
+    protected override string FormatValue(object o) {
       return ((double)o).ToString("r", CultureInfo.InvariantCulture);
     }
 
-    protected override object parseValue(string o) {
+    protected override object ParseValue(string o) {
       return double.Parse(o);
     }
Index: /trunk/sources/HeuristicLab.Persistence/3.3/Default/Xml/Compact/IntArray2XmlFormatters.cs
===================================================================
--- /trunk/sources/HeuristicLab.Persistence/3.3/Default/Xml/Compact/IntArray2XmlFormatters.cs	(revision 1541)
+++ /trunk/sources/HeuristicLab.Persistence/3.3/Default/Xml/Compact/IntArray2XmlFormatters.cs	(revision 1542)
@@ -5,5 +5,5 @@
 
   [EmptyStorableClass]
-  public class IntArray2XmlFormatter : NumberArray2XmlFormatter {
+  public class IntArray2XmlFormatter : NumberArray2XmlFormatterBase {
 
     public override Type Type {
@@ -13,9 +13,9 @@
     }
 
-    protected override string formatValue(object o) {
+    protected override string FormatValue(object o) {
       return o.ToString();
     }
 
-    protected override object parseValue(string o) {
+    protected override object ParseValue(string o) {
       return int.Parse(o);
     }
Index: /trunk/sources/HeuristicLab.Persistence/3.3/Default/Xml/Compact/IntList2XmlFormatter.cs
===================================================================
--- /trunk/sources/HeuristicLab.Persistence/3.3/Default/Xml/Compact/IntList2XmlFormatter.cs	(revision 1541)
+++ /trunk/sources/HeuristicLab.Persistence/3.3/Default/Xml/Compact/IntList2XmlFormatter.cs	(revision 1542)
@@ -7,5 +7,5 @@
 
   [EmptyStorableClass]
-  public class IntList2XmlFormatter : NumberEnumeration2XmlFormatter {
+  public class IntList2XmlFormatter : NumberEnumeration2XmlFormatterBase {
 
     public override Type Type {
@@ -23,9 +23,9 @@
     }
 
-    protected override string formatValue(object o) {
+    protected override string FormatValue(object o) {
       return o.ToString();
     }
 
-    protected override object parseValue(string o) {
+    protected override object ParseValue(string o) {
       return int.Parse(o);
     }
Index: /trunk/sources/HeuristicLab.Persistence/3.3/Default/Xml/Compact/NumberArray2XmlFormatterBase.cs
===================================================================
--- /trunk/sources/HeuristicLab.Persistence/3.3/Default/Xml/Compact/NumberArray2XmlFormatterBase.cs	(revision 1542)
+++ /trunk/sources/HeuristicLab.Persistence/3.3/Default/Xml/Compact/NumberArray2XmlFormatterBase.cs	(revision 1542)
@@ -0,0 +1,84 @@
+﻿using System.Collections;
+using System.Text;
+using HeuristicLab.Persistence.Interfaces;
+using System;
+
+namespace HeuristicLab.Persistence.Default.Xml.Compact {
+                                                              
+  public abstract class NumberArray2XmlFormatterBase : IFormatter {
+
+    public abstract Type Type { get; }
+    public IFormat Format { get { return XmlFormat.Instance; } }
+    protected virtual string Separator { get { return ";"; } }
+    protected abstract string FormatValue(object o);
+    protected abstract object ParseValue(string o);
+
+    public object DoFormat(object obj) {
+      Array a = (Array)obj;
+      int[] lengths = new int[a.Rank];
+      int[] lowerBounds = new int[a.Rank];
+      StringBuilder sb = new StringBuilder();
+      sb.Append(a.Rank);
+      for (int i = 0; i < a.Rank; i++) {
+        sb.Append(Separator);
+        sb.Append(a.GetLength(i));
+        lengths[i] = a.GetLength(i);
+      }
+      for (int i = 0; i < a.Rank; i++) {
+        sb.Append(Separator);
+        sb.Append(a.GetLowerBound(i));
+        lowerBounds[i] = a.GetLowerBound(i);
+      }
+      int[] positions = (int[])lowerBounds.Clone();
+      while (positions[a.Rank - 1] < lengths[a.Rank - 1] + lowerBounds[a.Rank - 1]) {        
+        sb.Append(Separator);
+        sb.Append(FormatValue(a.GetValue(positions)));
+        positions[0] += 1;
+        for (int i = 0; i < a.Rank - 1; i++) {
+          if (positions[i] >= lengths[i] + lowerBounds[i]) {
+            positions[i] = lowerBounds[i];
+            positions[i + 1] += 1;
+          } else {
+            break;
+          }
+        }
+      }      
+      return sb.ToString();
+    }
+
+    public object Parse(object o) {
+      IEnumerator values =
+        ((string)o)
+        .Split(new[] { Separator },
+        StringSplitOptions.RemoveEmptyEntries).GetEnumerator();
+      values.MoveNext();
+      int rank = int.Parse((string)values.Current);
+      int[] lengths = new int[rank];
+      for (int i = 0; i < rank; i++) {
+        values.MoveNext();
+        lengths[i] = int.Parse((string)values.Current);
+      }
+      int[] lowerBounds = new int[rank];
+      for (int i = 0; i < rank; i++) {
+        values.MoveNext();
+        lowerBounds[i] = int.Parse((string)values.Current);
+      }
+      Array a = Array.CreateInstance(this.Type.GetElementType(), lengths, lowerBounds);
+      int[] positions = new int[rank];
+      while (values.MoveNext()) {
+        a.SetValue(ParseValue((string)values.Current), positions);
+        positions[0] += 1;
+        for (int i = 0; i < rank - 1; i++) {
+          if (positions[i] >= lengths[i]) {
+            positions[i] = 0;
+            positions[i + 1] += 1;
+          } else {
+            break;
+          }
+        }
+      }
+      return a;
+    }
+  }
+  
+}
Index: unk/sources/HeuristicLab.Persistence/3.3/Default/Xml/Compact/NumberArray2XmlFormatters.cs
===================================================================
--- /trunk/sources/HeuristicLab.Persistence/3.3/Default/Xml/Compact/NumberArray2XmlFormatters.cs	(revision 1541)
+++ 	(revision )
@@ -1,86 +1,0 @@
-﻿using System.Collections;
-using System.Text;
-using HeuristicLab.Persistence.Interfaces;
-using System;
-using HeuristicLab.Persistence.Default.ViewOnly;
-
-namespace HeuristicLab.Persistence.Default.Xml.Compact {
-                                                              
-  public abstract class NumberArray2XmlFormatter : IFormatter {
-
-    public abstract Type Type { get; }
-    public IFormat Format { get { return XmlFormat.Instance; } }
-    protected virtual string Separator { get { return ";"; } }
-    protected abstract string formatValue(object o);
-    protected abstract object parseValue(string o);
-
-    public object DoFormat(object obj) {
-      Array a = (Array)obj;
-      int[] lengths = new int[a.Rank];
-      int[] lowerBounds = new int[a.Rank];
-      StringBuilder sb = new StringBuilder();
-      sb.Append(a.Rank);
-      for (int i = 0; i < a.Rank; i++) {
-        sb.Append(Separator);
-        sb.Append(a.GetLength(i));
-        lengths[i] = a.GetLength(i);
-      }
-      for (int i = 0; i < a.Rank; i++) {
-        sb.Append(Separator);
-        sb.Append(a.GetLowerBound(i));
-        lowerBounds[i] = a.GetLowerBound(i);
-      }
-      int[] positions = (int[])lowerBounds.Clone();
-      while (positions[a.Rank - 1] < lengths[a.Rank - 1] + lowerBounds[a.Rank - 1]) {
-        Console.WriteLine(ViewOnlyGenerator.Serialize(positions));
-        sb.Append(Separator);
-        sb.Append(formatValue(a.GetValue(positions)));
-        positions[0] += 1;
-        for (int i = 0; i < a.Rank - 1; i++) {
-          if (positions[i] >= lengths[i] + lowerBounds[i]) {
-            positions[i] = lowerBounds[i];
-            positions[i + 1] += 1;
-          } else {
-            break;
-          }
-        }
-      }      
-      return sb.ToString();
-    }
-
-    public object Parse(object o) {
-      IEnumerator values =
-        ((string)o)
-        .Split(new[] { Separator },
-        StringSplitOptions.RemoveEmptyEntries).GetEnumerator();
-      values.MoveNext();
-      int rank = int.Parse((string)values.Current);
-      int[] lengths = new int[rank];
-      for (int i = 0; i < rank; i++) {
-        values.MoveNext();
-        lengths[i] = int.Parse((string)values.Current);
-      }
-      int[] lowerBounds = new int[rank];
-      for (int i = 0; i < rank; i++) {
-        values.MoveNext();
-        lowerBounds[i] = int.Parse((string)values.Current);
-      }
-      Array a = Array.CreateInstance(this.Type.GetElementType(), lengths, lowerBounds);
-      int[] positions = new int[rank];
-      while (values.MoveNext()) {
-        a.SetValue(parseValue((string)values.Current), positions);
-        positions[0] += 1;
-        for (int i = 0; i < rank - 1; i++) {
-          if (positions[i] >= lengths[i]) {
-            positions[i] = 0;
-            positions[i + 1] += 1;
-          } else {
-            break;
-          }
-        }
-      }
-      return a;
-    }
-  }
-  
-}
Index: unk/sources/HeuristicLab.Persistence/3.3/Default/Xml/Compact/NumberEnumeration2XmlFormatter.cs
===================================================================
--- /trunk/sources/HeuristicLab.Persistence/3.3/Default/Xml/Compact/NumberEnumeration2XmlFormatter.cs	(revision 1541)
+++ 	(revision )
@@ -1,37 +1,0 @@
-﻿using System.Collections;
-using System.Text;
-using HeuristicLab.Persistence.Interfaces;
-using System;
-
-namespace HeuristicLab.Persistence.Default.Xml.Compact {
-  
-  public abstract class NumberEnumeration2XmlFormatter : IFormatter {
-
-    public abstract Type Type { get; }
-    public IFormat Format { get { return XmlFormat.Instance; } }
-    protected virtual string Separator { get { return ";"; } }
-    protected abstract void Add(IEnumerable enumeration, object o);
-    protected abstract object Instantiate();
-    protected abstract string formatValue(object o);
-    protected abstract object parseValue(string o);
-
-    public object DoFormat(object o) {
-      StringBuilder sb = new StringBuilder();
-      foreach (var value in (IEnumerable)o) {
-        sb.Append(formatValue(value));
-        sb.Append(Separator);
-      }
-      return sb.ToString();
-    }
-
-    public object Parse(object o) {
-      IEnumerable enumeration = (IEnumerable)Instantiate();
-      string[] values = ((string)o).Split(new[] { Separator }, StringSplitOptions.RemoveEmptyEntries);
-      foreach (var value in values) {
-        Add(enumeration, parseValue(value));
-      }
-      return enumeration;
-    }
-  }
-  
-}
Index: /trunk/sources/HeuristicLab.Persistence/3.3/Default/Xml/Compact/NumberEnumeration2XmlFormatterBase.cs
===================================================================
--- /trunk/sources/HeuristicLab.Persistence/3.3/Default/Xml/Compact/NumberEnumeration2XmlFormatterBase.cs	(revision 1542)
+++ /trunk/sources/HeuristicLab.Persistence/3.3/Default/Xml/Compact/NumberEnumeration2XmlFormatterBase.cs	(revision 1542)
@@ -0,0 +1,37 @@
+﻿using System.Collections;
+using System.Text;
+using HeuristicLab.Persistence.Interfaces;
+using System;
+
+namespace HeuristicLab.Persistence.Default.Xml.Compact {
+  
+  public abstract class NumberEnumeration2XmlFormatterBase : IFormatter {
+
+    public abstract Type Type { get; }
+    public IFormat Format { get { return XmlFormat.Instance; } }
+    protected virtual string Separator { get { return ";"; } }
+    protected abstract void Add(IEnumerable enumeration, object o);
+    protected abstract object Instantiate();
+    protected abstract string FormatValue(object o);
+    protected abstract object ParseValue(string o);
+
+    public object DoFormat(object o) {
+      StringBuilder sb = new StringBuilder();
+      foreach (var value in (IEnumerable)o) {
+        sb.Append(FormatValue(value));
+        sb.Append(Separator);
+      }
+      return sb.ToString();
+    }
+
+    public object Parse(object o) {
+      IEnumerable enumeration = (IEnumerable)Instantiate();
+      string[] values = ((string)o).Split(new[] { Separator }, StringSplitOptions.RemoveEmptyEntries);
+      foreach (var value in values) {
+        Add(enumeration, ParseValue(value));
+      }
+      return enumeration;
+    }
+  }
+  
+}
Index: /trunk/sources/HeuristicLab.Persistence/3.3/Default/Xml/Primitive/String2XmlFormatter.cs
===================================================================
--- /trunk/sources/HeuristicLab.Persistence/3.3/Default/Xml/Primitive/String2XmlFormatter.cs	(revision 1541)
+++ /trunk/sources/HeuristicLab.Persistence/3.3/Default/Xml/Primitive/String2XmlFormatter.cs	(revision 1542)
@@ -3,4 +3,5 @@
 using HeuristicLab.Persistence.Core;
 using HeuristicLab.Persistence.Interfaces;
+using System.Xml;
 
 namespace HeuristicLab.Persistence.Default.Xml.Primitive {
Index: /trunk/sources/HeuristicLab.Persistence/3.3/Default/Xml/XmlFormat.cs
===================================================================
--- /trunk/sources/HeuristicLab.Persistence/3.3/Default/Xml/XmlFormat.cs	(revision 1541)
+++ /trunk/sources/HeuristicLab.Persistence/3.3/Default/Xml/XmlFormat.cs	(revision 1542)
@@ -5,7 +5,8 @@
 
   [EmptyStorableClass]
-  public class XmlFormat : Format {
+  public class XmlFormat : FormatBase {
     public override string Name { get { return "XML"; } }
     public static readonly XmlFormat Instance = new XmlFormat();
+    private XmlFormat() { }
   }
 
Index: /trunk/sources/HeuristicLab.Persistence/3.3/Default/Xml/XmlGenerator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Persistence/3.3/Default/Xml/XmlGenerator.cs	(revision 1541)
+++ /trunk/sources/HeuristicLab.Persistence/3.3/Default/Xml/XmlGenerator.cs	(revision 1542)
@@ -8,4 +8,5 @@
 using HeuristicLab.Tracing;
 using log4net;
+using HeuristicLab.Persistence.Interfaces.Tokens;
 
 namespace HeuristicLab.Persistence.Default.Xml {
@@ -16,5 +17,5 @@
     public const string REFERENCE = "REFERENCE";
     public const string NULL = "NULL";
-    public const string TYPECACHE = "TYPCACHE";
+    public const string TYPECACHE = "TYPECACHE";
     public const string TYPE = "TYPE";
   }
@@ -136,6 +137,6 @@
     }
 
-    public static void Serialize(object o, string basename) {      
-      Serialize(o, basename, ConfigurationService.Instance.GetDefaultConfig(XmlFormat.Instance));
+    public static void Serialize(object o, string filename) {      
+      Serialize(o, filename, ConfigurationService.Instance.GetDefaultConfig(XmlFormat.Instance));
     }
 
Index: /trunk/sources/HeuristicLab.Persistence/3.3/Default/Xml/XmlParser.cs
===================================================================
--- /trunk/sources/HeuristicLab.Persistence/3.3/Default/Xml/XmlParser.cs	(revision 1541)
+++ /trunk/sources/HeuristicLab.Persistence/3.3/Default/Xml/XmlParser.cs	(revision 1542)
@@ -7,4 +7,5 @@
 using HeuristicLab.Persistence.Interfaces;
 using ICSharpCode.SharpZipLib.Zip;
+using HeuristicLab.Persistence.Interfaces.Tokens;
 
 namespace HeuristicLab.Persistence.Default.Xml {
@@ -59,6 +60,6 @@
         reader.GetAttribute("name"),
         int.Parse(reader.GetAttribute("typeId")),
-        reader.ReadString(),
-        id);
+        id,
+        reader.ReadString());        
     }
 
@@ -108,5 +109,5 @@
     public static object DeSerialize(string filename) {
       ZipFile zipFile = new ZipFile(filename);      
-      DeSerializer deSerializer = new DeSerializer(
+      Deserializer deSerializer = new Deserializer(
         ParseTypeCache(
         new StreamReader(
@@ -114,5 +115,5 @@
       XmlParser parser = new XmlParser(
         new StreamReader(zipFile.GetInputStream(zipFile.GetEntry("data.xml"))));
-      return deSerializer.DeSerialize(parser);      
+      return deSerializer.Deserialize(parser);      
     }
   }  
Index: /trunk/sources/HeuristicLab.Persistence/3.3/HeuristicLab.Persistence-3.3.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Persistence/3.3/HeuristicLab.Persistence-3.3.csproj	(revision 1541)
+++ /trunk/sources/HeuristicLab.Persistence/3.3/HeuristicLab.Persistence-3.3.csproj	(revision 1542)
@@ -108,6 +108,6 @@
     <Compile Include="Default\Xml\Compact\DoubleArray2XmlFormatters.cs" />
     <Compile Include="Default\Xml\Compact\DoubleList2XmlFormatter.cs" />
-    <Compile Include="Default\Xml\Compact\NumberEnumeration2XmlFormatter.cs" />
-    <Compile Include="Default\Xml\Compact\NumberArray2XmlFormatters.cs" />
+    <Compile Include="Default\Xml\Compact\NumberEnumeration2XmlFormatterBase.cs" />
+    <Compile Include="Default\Xml\Compact\NumberArray2XmlFormatterBase.cs" />
     <Compile Include="Core\DataMemberAccessor.cs" />
     <Compile Include="Default\Xml\Compact\IntList2XmlFormatter.cs" />
@@ -121,10 +121,19 @@
     <Compile Include="Core\DeSerializer.cs" />
     <Compile Include="Core\Tag.cs" />
+    <Compile Include="Interfaces\IFormat.cs" />
+    <Compile Include="Interfaces\FormatBase.cs" />
     <Compile Include="Interfaces\IDecomposer.cs" />
     <Compile Include="Interfaces\IFormatter.cs" />
     <Compile Include="Core\ConfigurationService.cs" />
+    <Compile Include="Interfaces\Tokens\ISerializationToken.cs" />
+    <Compile Include="Interfaces\Tokens\SerializationTokenBase.cs" />
+    <Compile Include="Interfaces\Tokens\CompositeTokenBase.cs" />
+    <Compile Include="Interfaces\Tokens\BeginToken.cs" />
+    <Compile Include="Interfaces\Tokens\EndToken.cs" />
+    <Compile Include="Interfaces\Tokens\PrimitiveToken.cs" />
+    <Compile Include="Interfaces\Tokens\ReferenceToken.cs" />
+    <Compile Include="Interfaces\Tokens\NulLReferenceToken.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
     <Compile Include="Core\Serializer.cs" />
-    <Compile Include="Interfaces\Tokens.cs" />
     <Compile Include="Properties\Settings.Designer.cs">
       <AutoGen>True</AutoGen>
@@ -132,5 +141,4 @@
       <DependentUpon>Settings.settings</DependentUpon>
     </Compile>
-    <Compile Include="Util.cs" />
     <Compile Include="Core\StorableAttribute.cs" />
     <Compile Include="Default\Xml\XmlGenerator.cs" />
Index: /trunk/sources/HeuristicLab.Persistence/3.3/Interfaces/FormatBase.cs
===================================================================
--- /trunk/sources/HeuristicLab.Persistence/3.3/Interfaces/FormatBase.cs	(revision 1542)
+++ /trunk/sources/HeuristicLab.Persistence/3.3/Interfaces/FormatBase.cs	(revision 1542)
@@ -0,0 +1,19 @@
+﻿using System;
+
+namespace HeuristicLab.Persistence.Interfaces {
+
+  public abstract class FormatBase : IFormat {
+    public abstract string Name { get;  }
+    public override bool Equals(object obj) {
+      if (obj as IFormat == null)
+        return false;
+      return this.Equals((FormatBase)obj);      
+    }
+    public bool Equals(FormatBase f) {
+      return Name.Equals(f.Name);
+    }
+    public override int GetHashCode() {
+      return Name.GetHashCode();
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Persistence/3.3/Interfaces/IDecomposer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Persistence/3.3/Interfaces/IDecomposer.cs	(revision 1541)
+++ /trunk/sources/HeuristicLab.Persistence/3.3/Interfaces/IDecomposer.cs	(revision 1542)
@@ -26,5 +26,5 @@
     /// the same as they are supplied in the Compose method.
     /// </summary>    
-    IEnumerable<Tag> DeCompose(object obj);
+    IEnumerable<Tag> Decompose(object obj);
 
     /// <summary>
Index: /trunk/sources/HeuristicLab.Persistence/3.3/Interfaces/IFormat.cs
===================================================================
--- /trunk/sources/HeuristicLab.Persistence/3.3/Interfaces/IFormat.cs	(revision 1542)
+++ /trunk/sources/HeuristicLab.Persistence/3.3/Interfaces/IFormat.cs	(revision 1542)
@@ -0,0 +1,9 @@
+﻿using System;
+
+namespace HeuristicLab.Persistence.Interfaces {
+
+  public interface IFormat {
+    string Name { get; }
+  }
+
+}
Index: /trunk/sources/HeuristicLab.Persistence/3.3/Interfaces/IFormatter.cs
===================================================================
--- /trunk/sources/HeuristicLab.Persistence/3.3/Interfaces/IFormatter.cs	(revision 1541)
+++ /trunk/sources/HeuristicLab.Persistence/3.3/Interfaces/IFormatter.cs	(revision 1542)
@@ -2,18 +2,4 @@
 
 namespace HeuristicLab.Persistence.Interfaces {
-
-  public interface IFormat {
-    string Name { get; }
-  }
-
-  public abstract class Format : IFormat {
-    public abstract string Name { get;  }
-    public override bool Equals(object obj) {
-      return Name == ((Format) obj).Name;
-    }
-    public override int GetHashCode() {
-      return Name.GetHashCode();
-    }
-  }
 
   public interface IFormatter {
Index: unk/sources/HeuristicLab.Persistence/3.3/Interfaces/Tokens.cs
===================================================================
--- /trunk/sources/HeuristicLab.Persistence/3.3/Interfaces/Tokens.cs	(revision 1541)
+++ 	(revision )
@@ -1,57 +1,0 @@
-﻿
-namespace HeuristicLab.Persistence.Interfaces {
-
-  public interface ISerializationToken {}
-
-  public class BeginToken : ISerializationToken {    
-    public readonly string Name;
-    public readonly int? TypeId;
-    public readonly int? Id;
-    public BeginToken(string name, int? typeId, int? id) {
-      Name = name;
-      TypeId = typeId;
-      Id = id;
-    }
-  }
-
-  public class EndToken : ISerializationToken {
-    public readonly string Name;
-    public readonly int? TypeId;
-    public readonly int? Id;
-    public EndToken(string name, int? typeId, int? id) {
-      Name = name;
-      TypeId = typeId;
-      Id = id;
-    }
-  }
-
-  public class PrimitiveToken : ISerializationToken {
-    public readonly string Name;
-    public readonly int? TypeId;
-    public readonly int? Id;
-    public readonly object SerialData;
-    public PrimitiveToken(string name, int? typeId, object serialData, int? id) {
-      Name = name;
-      TypeId = typeId;
-      SerialData = serialData;      
-      Id = id;
-    }
-  }
-
-  public class ReferenceToken : ISerializationToken {
-    public readonly string Name;
-    public readonly int Id;
-    public ReferenceToken(string name, int id) {
-      Name = name;
-      Id = id;
-    }
-  }
-
-  public class NullReferenceToken : ISerializationToken {
-    public readonly string Name;
-    public NullReferenceToken(string name) {
-      Name = name;
-    }
-  }
-
-}
Index: /trunk/sources/HeuristicLab.Persistence/3.3/Interfaces/Tokens/BeginToken.cs
===================================================================
--- /trunk/sources/HeuristicLab.Persistence/3.3/Interfaces/Tokens/BeginToken.cs	(revision 1542)
+++ /trunk/sources/HeuristicLab.Persistence/3.3/Interfaces/Tokens/BeginToken.cs	(revision 1542)
@@ -0,0 +1,8 @@
+﻿
+namespace HeuristicLab.Persistence.Interfaces.Tokens {
+
+  public class BeginToken : CompositeTokenBase {
+    public BeginToken(string name, int? typeId, int? id) : base(name, typeId, id) { }
+  }
+
+}
Index: /trunk/sources/HeuristicLab.Persistence/3.3/Interfaces/Tokens/CompositeTokenBase.cs
===================================================================
--- /trunk/sources/HeuristicLab.Persistence/3.3/Interfaces/Tokens/CompositeTokenBase.cs	(revision 1542)
+++ /trunk/sources/HeuristicLab.Persistence/3.3/Interfaces/Tokens/CompositeTokenBase.cs	(revision 1542)
@@ -0,0 +1,14 @@
+﻿
+namespace HeuristicLab.Persistence.Interfaces.Tokens {
+
+  public abstract class CompositeTokenBase : SerializationTokenBase {
+    public readonly int? TypeId;
+    public readonly int? Id;
+    public CompositeTokenBase(string name, int? typeId, int? id)
+      : base(name) {
+      TypeId = typeId;
+      Id = id;
+    }
+  }
+
+}
Index: /trunk/sources/HeuristicLab.Persistence/3.3/Interfaces/Tokens/EndToken.cs
===================================================================
--- /trunk/sources/HeuristicLab.Persistence/3.3/Interfaces/Tokens/EndToken.cs	(revision 1542)
+++ /trunk/sources/HeuristicLab.Persistence/3.3/Interfaces/Tokens/EndToken.cs	(revision 1542)
@@ -0,0 +1,8 @@
+﻿
+namespace HeuristicLab.Persistence.Interfaces.Tokens {
+
+  public class EndToken : CompositeTokenBase {
+    public EndToken(string name, int? typeId, int? id) : base(name, typeId, id) { }
+  }
+
+}
Index: /trunk/sources/HeuristicLab.Persistence/3.3/Interfaces/Tokens/ISerializationToken.cs
===================================================================
--- /trunk/sources/HeuristicLab.Persistence/3.3/Interfaces/Tokens/ISerializationToken.cs	(revision 1542)
+++ /trunk/sources/HeuristicLab.Persistence/3.3/Interfaces/Tokens/ISerializationToken.cs	(revision 1542)
@@ -0,0 +1,6 @@
+﻿
+namespace HeuristicLab.Persistence.Interfaces.Tokens {
+
+  public interface ISerializationToken {}
+  
+}
Index: /trunk/sources/HeuristicLab.Persistence/3.3/Interfaces/Tokens/NulLReferenceToken.cs
===================================================================
--- /trunk/sources/HeuristicLab.Persistence/3.3/Interfaces/Tokens/NulLReferenceToken.cs	(revision 1542)
+++ /trunk/sources/HeuristicLab.Persistence/3.3/Interfaces/Tokens/NulLReferenceToken.cs	(revision 1542)
@@ -0,0 +1,8 @@
+﻿
+namespace HeuristicLab.Persistence.Interfaces.Tokens {
+  
+  public class NullReferenceToken : SerializationTokenBase {
+    public NullReferenceToken(string name) : base(name) { }
+  }
+
+}
Index: /trunk/sources/HeuristicLab.Persistence/3.3/Interfaces/Tokens/PrimitiveToken.cs
===================================================================
--- /trunk/sources/HeuristicLab.Persistence/3.3/Interfaces/Tokens/PrimitiveToken.cs	(revision 1542)
+++ /trunk/sources/HeuristicLab.Persistence/3.3/Interfaces/Tokens/PrimitiveToken.cs	(revision 1542)
@@ -0,0 +1,16 @@
+﻿
+namespace HeuristicLab.Persistence.Interfaces.Tokens {
+  
+  public class PrimitiveToken : SerializationTokenBase {    
+    public readonly int TypeId;
+    public readonly int? Id;
+    public readonly object SerialData;
+    public PrimitiveToken(string name, int typeId, int? id, object serialData)
+      : base(name) {
+      TypeId = typeId;
+      Id = id;
+      SerialData = serialData;
+    }
+  }
+
+}
Index: /trunk/sources/HeuristicLab.Persistence/3.3/Interfaces/Tokens/ReferenceToken.cs
===================================================================
--- /trunk/sources/HeuristicLab.Persistence/3.3/Interfaces/Tokens/ReferenceToken.cs	(revision 1542)
+++ /trunk/sources/HeuristicLab.Persistence/3.3/Interfaces/Tokens/ReferenceToken.cs	(revision 1542)
@@ -0,0 +1,12 @@
+﻿
+namespace HeuristicLab.Persistence.Interfaces.Tokens {
+  
+  public class ReferenceToken : SerializationTokenBase {    
+    public readonly int Id;
+    public ReferenceToken(string name, int id)
+      : base(name) {
+      Id = id;
+    }
+  }
+
+}
Index: /trunk/sources/HeuristicLab.Persistence/3.3/Interfaces/Tokens/SerializationTokenBase.cs
===================================================================
--- /trunk/sources/HeuristicLab.Persistence/3.3/Interfaces/Tokens/SerializationTokenBase.cs	(revision 1542)
+++ /trunk/sources/HeuristicLab.Persistence/3.3/Interfaces/Tokens/SerializationTokenBase.cs	(revision 1542)
@@ -0,0 +1,11 @@
+﻿
+namespace HeuristicLab.Persistence.Interfaces.Tokens {
+
+  public abstract class SerializationTokenBase : ISerializationToken {
+    public readonly string Name;
+    public SerializationTokenBase(string name) {
+      Name = name;
+    }
+  }
+
+}
Index: /trunk/sources/HeuristicLab.Persistence/3.3/Properties/Settings.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Persistence/3.3/Properties/Settings.Designer.cs	(revision 1541)
+++ /trunk/sources/HeuristicLab.Persistence/3.3/Properties/Settings.Designer.cs	(revision 1542)
@@ -2,5 +2,5 @@
 // <auto-generated>
 //     This code was generated by a tool.
-//     Runtime Version:2.0.50727.3053
+//     Runtime Version:2.0.50727.3074
 //
 //     Changes to this file may cause incorrect behavior and will be lost if
@@ -27,10 +27,10 @@
         [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
         [global::System.Configuration.DefaultSettingValueAttribute("")]
-        public string customConfigurations {
+        public string CustomConfigurations {
             get {
-                return ((string)(this["customConfigurations"]));
+                return ((string)(this["CustomConfigurations"]));
             }
             set {
-                this["customConfigurations"] = value;
+                this["CustomConfigurations"] = value;
             }
         }
@@ -39,10 +39,10 @@
         [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
         [global::System.Configuration.DefaultSettingValueAttribute("")]
-        public string customConfigurationsTypeCache {
+        public string CustomConfigurationsTypeCache {
             get {
-                return ((string)(this["customConfigurationsTypeCache"]));
+                return ((string)(this["CustomConfigurationsTypeCache"]));
             }
             set {
-                this["customConfigurationsTypeCache"] = value;
+                this["CustomConfigurationsTypeCache"] = value;
             }
         }
Index: /trunk/sources/HeuristicLab.Persistence/3.3/Properties/Settings.settings
===================================================================
--- /trunk/sources/HeuristicLab.Persistence/3.3/Properties/Settings.settings	(revision 1541)
+++ /trunk/sources/HeuristicLab.Persistence/3.3/Properties/Settings.settings	(revision 1542)
@@ -3,8 +3,8 @@
   <Profiles />
   <Settings>
-    <Setting Name="customConfigurations" Type="System.String" Scope="User">
+    <Setting Name="CustomConfigurations" Type="System.String" Scope="User">
       <Value Profile="(Default)" />
     </Setting>
-    <Setting Name="customConfigurationsTypeCache" Type="System.String" Scope="User">
+    <Setting Name="CustomConfigurationsTypeCache" Type="System.String" Scope="User">
       <Value Profile="(Default)" />
     </Setting>
Index: unk/sources/HeuristicLab.Persistence/3.3/Util.cs
===================================================================
--- /trunk/sources/HeuristicLab.Persistence/3.3/Util.cs	(revision 1541)
+++ 	(revision )
@@ -1,71 +1,0 @@
-﻿using System;
-using System.Collections.Generic;
-using System.Text;
-using System.Reflection;
-
-namespace HeuristicLab.Persistence {  
-
-  public class InterfaceInstantiatior {
-    public static List<T> InstantiateAll<T>() {
-      return InstantiateAll<T>(Assembly.GetExecutingAssembly());
-    }
-    public static List<T> InstantiateAll<T>(Assembly a) {
-      List<T> instances = new List<T>();
-      foreach (Type t in a.GetTypes()) {
-        if (t.GetInterface(typeof(T).FullName) != null) {
-          ConstructorInfo ci = t.GetConstructor(new Type[] { });
-          if (ci != null) {
-            instances.Add((T)ci.Invoke(new object[] { }));
-          }
-        }
-      }
-      return instances;
-    }
-  }
-  public class Util {
-    public static string AutoFormat(object o) {
-      return AutoFormat(o, false);
-    }
-    public static string AutoFormat(object o, bool recursive) {
-      Dictionary<object, int> visitedObjects = new Dictionary<object,int>();
-      return AutoFormat(o, recursive, visitedObjects);
-    }
-    private static string AutoFormat(object o, bool recursive, IDictionary<object, int> visitedObjects) {
-      string s = o as string;
-      if (s != null)
-        return s;
-      if (o == null) {
-        return "<null>";
-      }
-      if (visitedObjects.ContainsKey(o)) {
-        return o.ToString();
-      }
-      visitedObjects.Add(o, 0);
-      if (o.ToString() != o.GetType().ToString()) {
-        return o.ToString();
-      }
-      StringBuilder sb = new StringBuilder();
-      sb.Append(o.GetType().Name);
-      sb.Append("(");
-      foreach (MemberInfo mInfo in o.GetType().GetMembers(
-        BindingFlags.Public |
-        BindingFlags.NonPublic |
-        BindingFlags.Instance)) {
-        if (mInfo.MemberType == MemberTypes.Field) {
-          FieldInfo fInfo = (FieldInfo)mInfo;          
-          sb.Append(mInfo.Name);
-          sb.Append("=");          
-          if (recursive) {
-            sb.Append(AutoFormat(fInfo.GetValue(o), true, visitedObjects));
-          } else {
-            sb.Append(fInfo.GetValue(o));
-          }
-          sb.Append(", ");
-        }
-      }
-      sb.Remove(sb.Length - 2, 2);
-      sb.Append(")");
-      return sb.ToString();
-    }
-  }
-}
Index: /trunk/sources/HeuristicLab.Persistence/3.3/app.config
===================================================================
--- /trunk/sources/HeuristicLab.Persistence/3.3/app.config	(revision 1541)
+++ /trunk/sources/HeuristicLab.Persistence/3.3/app.config	(revision 1542)
@@ -8,8 +8,8 @@
     <userSettings>
         <HeuristicLab.Persistence.Properties.Settings>
-            <setting name="customConfigurations" serializeAs="String">
+            <setting name="CustomConfigurations" serializeAs="String">
                 <value />
             </setting>
-            <setting name="customConfigurationsTypeCache" serializeAs="String">
+            <setting name="CustomConfigurationsTypeCache" serializeAs="String">
                 <value />
             </setting>
