Index: /trunk/sources/HeuristicLab.Persistence/3.3/Core/Serializer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Persistence/3.3/Core/Serializer.cs	(revision 1651)
+++ /trunk/sources/HeuristicLab.Persistence/3.3/Core/Serializer.cs	(revision 1652)
@@ -2,7 +2,9 @@
 using System.Collections;
 using System;
+using System.Linq;
 using HeuristicLab.Persistence.Interfaces;
 using HeuristicLab.Persistence.Core.Tokens;
 using HeuristicLab.Persistence.Default.Decomposers.Storable;
+using System.Text;
 
 namespace HeuristicLab.Persistence.Core {
@@ -76,6 +78,12 @@
       throw new PersistenceException(
           String.Format(
-          "No suitable method for serializing values of type \"{0}\" found.",
-          value.GetType().VersionInvariantName()));
+          "No suitable method for serializing values of type \"{0}\" found\r\n" +
+          "Formatters:\r\n{1}\r\n" +
+          "Decomposers:\r\n{2}",
+          value.GetType().VersionInvariantName(),
+          string.Join("\r\n", configuration.Formatters.Select(f => f.GetType().VersionInvariantName()).ToArray()),
+          string.Join("\r\n", configuration.Decomposers.Select(d => d.GetType().VersionInvariantName()).ToArray())
+          ));
+
     }
 
Index: /trunk/sources/HeuristicLab.Persistence/3.3/Default/DebugString/Formatters/Char2DebugStringFormatter.cs
===================================================================
--- /trunk/sources/HeuristicLab.Persistence/3.3/Default/DebugString/Formatters/Char2DebugStringFormatter.cs	(revision 1652)
+++ /trunk/sources/HeuristicLab.Persistence/3.3/Default/DebugString/Formatters/Char2DebugStringFormatter.cs	(revision 1652)
@@ -0,0 +1,15 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Persistence.Interfaces;
+using HeuristicLab.Persistence.Default.Xml;
+using HeuristicLab.Persistence.Core;
+using HeuristicLab.Persistence.Core.Tokens;
+using HeuristicLab.Persistence.Default.Decomposers.Storable;
+
+namespace HeuristicLab.Persistence.Default.DebugString.Formatters {
+
+  [EmptyStorableClass]
+  public class Char2DebugStringFormatter : ValueType2DebugStringFormatterBase<char> { }
+
+}
Index: /trunk/sources/HeuristicLab.Persistence/3.3/Default/Decomposers/Storable/EmptyStorableClassAttribute.cs
===================================================================
--- /trunk/sources/HeuristicLab.Persistence/3.3/Default/Decomposers/Storable/EmptyStorableClassAttribute.cs	(revision 1651)
+++ /trunk/sources/HeuristicLab.Persistence/3.3/Default/Decomposers/Storable/EmptyStorableClassAttribute.cs	(revision 1652)
@@ -17,4 +17,7 @@
       if (emptyTypeInfo.ContainsKey(type))
         return emptyTypeInfo[type];
+      if (type == typeof(object)) {
+        return true;
+      }
       foreach (var attribute in type.GetCustomAttributes(false)) {
         EmptyStorableClassAttribute empty = attribute as EmptyStorableClassAttribute;
Index: /trunk/sources/HeuristicLab.Persistence/3.3/Default/Xml/Primitive/Char2XmlFormatter.cs
===================================================================
--- /trunk/sources/HeuristicLab.Persistence/3.3/Default/Xml/Primitive/Char2XmlFormatter.cs	(revision 1652)
+++ /trunk/sources/HeuristicLab.Persistence/3.3/Default/Xml/Primitive/Char2XmlFormatter.cs	(revision 1652)
@@ -0,0 +1,23 @@
+﻿using System;
+using HeuristicLab.Persistence.Core;
+using HeuristicLab.Persistence.Interfaces;
+using System.Reflection;
+using System.Globalization;
+using HeuristicLab.Persistence.Default.Decomposers.Storable;
+
+namespace HeuristicLab.Persistence.Default.Xml.Primitive {
+
+  [EmptyStorableClass]
+  public class Char2XmlFormatter : FormatterBase<char, XmlString> {  
+    
+    public override XmlString Format(char c) {
+      return new XmlString(new string(c, 1));
+    }
+
+    public override char Parse(XmlString x) {
+      if (x.Data.Length != 1)
+        throw new PersistenceException("Invalid character format, XML string length != 1");
+      return x.Data[0];
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Persistence/3.3/HeuristicLab.Persistence-3.3.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Persistence/3.3/HeuristicLab.Persistence-3.3.csproj	(revision 1651)
+++ /trunk/sources/HeuristicLab.Persistence/3.3/HeuristicLab.Persistence-3.3.csproj	(revision 1652)
@@ -95,4 +95,5 @@
     <Compile Include="Core\Configuration.cs" />
     <Compile Include="Core\PersistenceException.cs" />
+    <Compile Include="Default\DebugString\Formatters\Char2DebugStringFormatter.cs" />
     <Compile Include="Default\Decomposers\Number2StringConverter.cs" />
     <Compile Include="Default\Decomposers\Storable\EmptyStorableClassAttribute.cs" />
@@ -137,4 +138,5 @@
     <Compile Include="Default\Decomposers\Storable\DataMemberAccessor.cs" />
     <Compile Include="Default\Xml\Compact\IntList2XmlFormatter.cs" />
+    <Compile Include="Default\Xml\Primitive\Char2XmlFormatter.cs" />
     <Compile Include="Default\Xml\XmlStringConstants.cs" />
     <Compile Include="Default\Xml\XmlString.cs" />
Index: /trunk/sources/HeuristicLab.Persistence/UnitTests/UseCases.cs
===================================================================
--- /trunk/sources/HeuristicLab.Persistence/UnitTests/UseCases.cs	(revision 1651)
+++ /trunk/sources/HeuristicLab.Persistence/UnitTests/UseCases.cs	(revision 1652)
@@ -17,5 +17,5 @@
 namespace HeuristicLab.Persistence.UnitTest {
 
-  public class PrimitivesTest {
+  public class NumberTest {
     [Storable]
     private bool _bool = true;
@@ -36,4 +36,9 @@
     [Storable]
     private ulong _ulong = 123456;
+  }
+
+  public class PrimitivesTest : NumberTest {
+    [Storable]
+    private char c = 'e';
     [Storable]
     private long[,] _long_array =
@@ -41,4 +46,6 @@
     [Storable]
     public List<int> list = new List<int> { 1, 2, 3, 4, 5 };
+    [Storable]
+    private object o = new object();
   }
 
@@ -132,4 +139,13 @@
       r.dict.Add("three", 3);
       r.myEnum = TestEnum.va1;
+      r.i = new[] { 7, 5, 6 };
+      r.s = "new value";
+      r.intArray = new ArrayList { 3, 2, 1 };
+      r.intList = new List<int> { 9, 8, 7 };
+      r.multiDimArray = new double[,] { { 5, 4, 3 }, { 1, 4, 6 } };
+      r.boolean = false;
+      r.dateTime = DateTime.Now;
+      r.kvp = new KeyValuePair<string, int>("string key", 321);
+      r.uninitialized = null;
       XmlGenerator.Serialize(r, tempFile);
       object o = XmlParser.DeSerialize(tempFile);
@@ -140,4 +156,26 @@
       Assert.AreSame(newR, newR.selfReferences[0]);
       Assert.AreNotSame(r, newR);
+      Assert.AreEqual(r.myEnum, TestEnum.va1);
+      Assert.AreEqual(r.i[0], 7);
+      Assert.AreEqual(r.i[1], 5);
+      Assert.AreEqual(r.i[2], 6);
+      Assert.AreSame(r.s, "new value");
+      Assert.AreEqual(r.intArray[0], 3);
+      Assert.AreEqual(r.intArray[1], 2);
+      Assert.AreEqual(r.intArray[2], 1);
+      Assert.AreEqual(r.intList[0], 9);
+      Assert.AreEqual(r.intList[1], 8);
+      Assert.AreEqual(r.intList[2], 7);      
+      Assert.AreEqual(r.multiDimArray[0, 0], 5);
+      Assert.AreEqual(r.multiDimArray[0, 1], 4);
+      Assert.AreEqual(r.multiDimArray[0, 2], 3);
+      Assert.AreEqual(r.multiDimArray[1, 0], 1);
+      Assert.AreEqual(r.multiDimArray[1, 1], 4);
+      Assert.AreEqual(r.multiDimArray[1, 2], 6);
+      Assert.IsFalse(r.boolean);
+      Assert.IsTrue((DateTime.Now - r.dateTime).TotalSeconds < 10);      
+      Assert.AreSame(r.kvp.Key, "string key");
+      Assert.AreEqual(r.kvp.Value, 321);
+      Assert.IsNull(r.uninitialized);
     }
 
@@ -274,5 +312,5 @@
     }
 
-    private string formatFullMemberName(MemberInfo mi) {     
+    private string formatFullMemberName(MemberInfo mi) {
       return new StringBuilder()
         .Append(mi.DeclaringType.Assembly.GetName().Name)
@@ -292,5 +330,5 @@
       foreach (Assembly a in AppDomain.CurrentDomain.GetAssemblies()) {
         if (!a.GetName().Name.StartsWith("HeuristicLab"))
-          continue;        
+          continue;
         foreach (Type t in a.GetTypes()) {
           foreach (MemberInfo mi in t.GetMembers(BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static)) {
@@ -304,5 +342,5 @@
                 !mi.Name.StartsWith("set_") &&
                 !mi.Name.StartsWith("add_") &&
-                !mi.Name.StartsWith("remove_") )
+                !mi.Name.StartsWith("remove_"))
                 lowerCaseMethodNames.Add(formatFullMemberName(mi));
             }
@@ -317,10 +355,13 @@
     [TestMethod]
     public void Number2StringDecomposer() {
-      PrimitivesTest sdt = new PrimitivesTest();
+      NumberTest sdt = new NumberTest();
       XmlGenerator.Serialize(sdt, tempFile,
         new Configuration(new XmlFormat(),
-          new Dictionary<Type, IFormatter> { { typeof(string), new String2XmlFormatter() } },
-          new List<IDecomposer> { new Number2StringDecomposer() }));
-      object o = XmlParser.DeSerialize(tempFile);      
+          new Dictionary<Type, IFormatter> {
+          { typeof(string), new String2XmlFormatter() } },
+          new List<IDecomposer> { 
+            new StorableDecomposer(),
+            new Number2StringDecomposer() }));
+      object o = XmlParser.DeSerialize(tempFile);
       Assert.AreEqual(
         DebugStringGenerator.Serialize(sdt),
