Index: trunk/sources/HeuristicLab.Persistence/3.3/Default/Xml/Compact/DoubleArray2XmlFormatters.cs
===================================================================
--- trunk/sources/HeuristicLab.Persistence/3.3/Default/Xml/Compact/DoubleArray2XmlFormatters.cs	(revision 1542)
+++ trunk/sources/HeuristicLab.Persistence/3.3/Default/Xml/Compact/DoubleArray2XmlFormatters.cs	(revision 1564)
@@ -4,14 +4,7 @@
 
 namespace HeuristicLab.Persistence.Default.Xml.Compact {
-
-  [EmptyStorableClass]
-  public class DoubleArray2XmlFormatter : NumberArray2XmlFormatterBase {
-
-    public override Type Type {
-      get {
-        return typeof(double[]);
-      }
-    }
-
+  
+  public abstract class DoubleArray2XmlFormatterBase<T> : NumberArray2XmlFormatterBase<T> {
+    
     protected override string FormatValue(object o) {
       return ((double)o).ToString("r", CultureInfo.InvariantCulture);
@@ -24,20 +17,12 @@
 
   [EmptyStorableClass]
-  public class Double2DArray2XmlFormatter : DoubleArray2XmlFormatter {
-    public override Type Type {
-      get {
-        return typeof(double[,]);
-      }
-    }
-  }
+  public class Double1DArray2XmlFormatter : DoubleArray2XmlFormatterBase<double[]> { }
+
 
   [EmptyStorableClass]
-  public class Double3DArray2XmlFormatter : DoubleArray2XmlFormatter {
-    public override Type Type {
-      get {
-        return typeof(double[, ,]);
-      }
-    }
-  }
+  public class Double2DArray2XmlFormatter : DoubleArray2XmlFormatterBase<double[,]> { }
+
+  [EmptyStorableClass]
+  public class Double3DArray2XmlFormatter : DoubleArray2XmlFormatterBase<double[,,]> { }
   
 }
Index: trunk/sources/HeuristicLab.Persistence/3.3/Default/Xml/Compact/DoubleList2XmlFormatter.cs
===================================================================
--- trunk/sources/HeuristicLab.Persistence/3.3/Default/Xml/Compact/DoubleList2XmlFormatter.cs	(revision 1542)
+++ trunk/sources/HeuristicLab.Persistence/3.3/Default/Xml/Compact/DoubleList2XmlFormatter.cs	(revision 1564)
@@ -8,11 +8,5 @@
 
   [EmptyStorableClass]
-  public class DoubleList2XmlFormatter : NumberEnumeration2XmlFormatterBase {
-
-    public override Type Type {
-      get {
-        return typeof(List<double>);
-      }
-    }
+  public class DoubleList2XmlFormatter : NumberEnumeration2XmlFormatterBase<List<double>> {    
 
     protected override void Add(IEnumerable enumeration, object o) {
@@ -20,5 +14,5 @@
     }
 
-    protected override object Instantiate() {
+    protected override IEnumerable Instantiate() {
       return new List<double>();
     }
Index: trunk/sources/HeuristicLab.Persistence/3.3/Default/Xml/Compact/IntArray2XmlFormatters.cs
===================================================================
--- trunk/sources/HeuristicLab.Persistence/3.3/Default/Xml/Compact/IntArray2XmlFormatters.cs	(revision 1542)
+++ trunk/sources/HeuristicLab.Persistence/3.3/Default/Xml/Compact/IntArray2XmlFormatters.cs	(revision 1564)
@@ -3,13 +3,6 @@
 
 namespace HeuristicLab.Persistence.Default.Xml.Compact {
-
-  [EmptyStorableClass]
-  public class IntArray2XmlFormatter : NumberArray2XmlFormatterBase {
-
-    public override Type Type {
-      get {
-        return typeof(int[]);
-      }
-    }
+  
+  public abstract class IntArray2XmlFormatterBase<T> : NumberArray2XmlFormatterBase<T> {    
 
     protected override string FormatValue(object o) {
@@ -22,23 +15,12 @@
   }
 
+  [EmptyStorableClass]
+  public class Int1DArray2XmlFormatter : IntArray2XmlFormatterBase<int[]> { }
 
   [EmptyStorableClass]
-  public class Int2DArray2XmlFormatter : IntArray2XmlFormatter {
-    public override Type Type {
-      get {
-        return typeof(int[,]);
-      }
-    }
-  }
-
+  public class Int2DArray2XmlFormatter : IntArray2XmlFormatterBase<int[,]> { }
 
   [EmptyStorableClass]
-  public class Int3DArray2XmlFormatter : IntArray2XmlFormatter {
-    public override Type Type {
-      get {
-        return typeof(int[, ,]);
-      }
-    }
-  }
+  public class Int3DArray2XmlFormatter : IntArray2XmlFormatterBase<int[,,]> { }
   
 }
Index: trunk/sources/HeuristicLab.Persistence/3.3/Default/Xml/Compact/IntList2XmlFormatter.cs
===================================================================
--- trunk/sources/HeuristicLab.Persistence/3.3/Default/Xml/Compact/IntList2XmlFormatter.cs	(revision 1542)
+++ trunk/sources/HeuristicLab.Persistence/3.3/Default/Xml/Compact/IntList2XmlFormatter.cs	(revision 1564)
@@ -7,17 +7,11 @@
 
   [EmptyStorableClass]
-  public class IntList2XmlFormatter : NumberEnumeration2XmlFormatterBase {
-
-    public override Type Type {
-      get {
-        return typeof(List<int>);
-      }
-    }
-
+  public class IntList2XmlFormatter : NumberEnumeration2XmlFormatterBase<List<int>> {
+    
     protected override void Add(IEnumerable enumeration, object o) {
       ((List<int>)enumeration).Add((int)o);
     }
 
-    protected override object Instantiate() {
+    protected override IEnumerable Instantiate() {
       return new List<int>();
     }
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 1564)
@@ -6,14 +6,13 @@
 namespace HeuristicLab.Persistence.Default.Xml.Compact {
                                                               
-  public abstract class NumberArray2XmlFormatterBase : IFormatter {
+  public abstract class NumberArray2XmlFormatterBase<T> : FormatterBase<T, XmlString> {
 
-    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;
+    public override XmlString Format(T t) {
+      object o = (object)t;
+      Array a = (Array)o;
       int[] lengths = new int[a.Rank];
       int[] lowerBounds = new int[a.Rank];
@@ -44,11 +43,10 @@
         }
       }      
-      return sb.ToString();
+      return new XmlString(sb.ToString());
     }
 
-    public object Parse(object o) {
+    public override T Parse(XmlString x) {
       IEnumerator values =
-        ((string)o)
-        .Split(new[] { Separator },
+        x.Data.Split(new[] { Separator },
         StringSplitOptions.RemoveEmptyEntries).GetEnumerator();
       values.MoveNext();
@@ -64,5 +62,5 @@
         lowerBounds[i] = int.Parse((string)values.Current);
       }
-      Array a = Array.CreateInstance(this.Type.GetElementType(), lengths, lowerBounds);
+      Array a = Array.CreateInstance(this.SourceType.GetElementType(), lengths, lowerBounds);
       int[] positions = new int[rank];
       while (values.MoveNext()) {
@@ -78,5 +76,6 @@
         }
       }
-      return a;
+      object o = a;
+      return (T)o;
     }
   }
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 1564)
@@ -6,30 +6,28 @@
 namespace HeuristicLab.Persistence.Default.Xml.Compact {
   
-  public abstract class NumberEnumeration2XmlFormatterBase : IFormatter {
+  public abstract class NumberEnumeration2XmlFormatterBase<T> : FormatterBase<T, XmlString> where T : IEnumerable {
 
-    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 IEnumerable Instantiate();
     protected abstract string FormatValue(object o);
     protected abstract object ParseValue(string o);
 
-    public object DoFormat(object o) {
+    public override XmlString Format(T t) {
       StringBuilder sb = new StringBuilder();
-      foreach (var value in (IEnumerable)o) {
+      foreach (var value in (IEnumerable)t) {
         sb.Append(FormatValue(value));
         sb.Append(Separator);
       }
-      return sb.ToString();
+      return new XmlString(sb.ToString());
     }
 
-    public object Parse(object o) {
-      IEnumerable enumeration = (IEnumerable)Instantiate();
-      string[] values = ((string)o).Split(new[] { Separator }, StringSplitOptions.RemoveEmptyEntries);
+    public override T Parse(XmlString x) {
+      IEnumerable enumeration = Instantiate();
+      string[] values = x.Data.Split(new[] { Separator }, StringSplitOptions.RemoveEmptyEntries);
       foreach (var value in values) {
         Add(enumeration, ParseValue(value));
       }
-      return enumeration;
+      return (T)enumeration;
     }
   }
