Index: /trunk/sources/HeuristicLab.Persistence/3.3/Default/Decomposers/DictionaryDecomposer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Persistence/3.3/Default/Decomposers/DictionaryDecomposer.cs	(revision 1704)
+++ /trunk/sources/HeuristicLab.Persistence/3.3/Default/Decomposers/DictionaryDecomposer.cs	(revision 1705)
@@ -5,4 +5,5 @@
 using System.Collections.Generic;
 using HeuristicLab.Persistence.Default.Decomposers.Storable;
+using HeuristicLab.Persistence.Auxiliary;
 
 namespace HeuristicLab.Persistence.Default.Decomposers {
@@ -17,5 +18,6 @@
 
     public bool CanDecompose(Type type) {
-      return type.GetInterface(typeof(IDictionary).FullName) != null;
+      return ReflectionTools.HasDefaultConstructor(type) &&
+        type.GetInterface(typeof(IDictionary).FullName) != null;
     }
 
@@ -54,5 +56,5 @@
       } catch (ArgumentException e) {
         throw new PersistenceException("Duplicate dictionary key.", e);
-      }      
+      }
     }
   }
Index: /trunk/sources/HeuristicLab.Persistence/3.3/Default/Decomposers/EnumerableDecomposer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Persistence/3.3/Default/Decomposers/EnumerableDecomposer.cs	(revision 1704)
+++ /trunk/sources/HeuristicLab.Persistence/3.3/Default/Decomposers/EnumerableDecomposer.cs	(revision 1705)
@@ -6,4 +6,5 @@
 using System.Collections.Generic;
 using HeuristicLab.Persistence.Default.Decomposers.Storable;
+using HeuristicLab.Persistence.Auxiliary;
 
 namespace HeuristicLab.Persistence.Default.Decomposers {
@@ -19,4 +20,5 @@
     public bool CanDecompose(Type type) {
       return
+        ReflectionTools.HasDefaultConstructor(type) &&
         type.GetInterface(typeof(IEnumerable).FullName) != null &&
         type.GetMethod("Add") != null &&
Index: /trunk/sources/HeuristicLab.Persistence/3.3/Default/Decomposers/NumberEnumerable2StringDecomposer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Persistence/3.3/Default/Decomposers/NumberEnumerable2StringDecomposer.cs	(revision 1704)
+++ /trunk/sources/HeuristicLab.Persistence/3.3/Default/Decomposers/NumberEnumerable2StringDecomposer.cs	(revision 1705)
@@ -7,4 +7,5 @@
 using System.Text;
 using HeuristicLab.Persistence.Default.Decomposers.Storable;
+using HeuristicLab.Persistence.Auxiliary;
 
 namespace HeuristicLab.Persistence.Default.Decomposers {
@@ -54,4 +55,5 @@
     public bool CanDecompose(Type type) {
       return
+        ReflectionTools.HasDefaultConstructor(type) &&
         ImplementsGenericEnumerable(type) &&
         HasAddMethod(type);
Index: /trunk/sources/HeuristicLab.Persistence/3.3/Default/Decomposers/Storable/StorableDecomposer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Persistence/3.3/Default/Decomposers/Storable/StorableDecomposer.cs	(revision 1704)
+++ /trunk/sources/HeuristicLab.Persistence/3.3/Default/Decomposers/Storable/StorableDecomposer.cs	(revision 1705)
@@ -4,4 +4,6 @@
 using HeuristicLab.Persistence.Interfaces;
 using HeuristicLab.Persistence.Core;
+using System.Reflection;
+using HeuristicLab.Persistence.Auxiliary;
 
 namespace HeuristicLab.Persistence.Default.Decomposers.Storable {
@@ -15,6 +17,7 @@
 
     public bool CanDecompose(Type type) {
-      return StorableAttribute.GetStorableMembers(type, false).Count() > 0 ||
-        EmptyStorableClassAttribute.IsEmptyStorable(type);
+      return ReflectionTools.HasDefaultConstructor(type) &&
+        (StorableAttribute.GetStorableMembers(type, false).Count() > 0 ||
+          EmptyStorableClassAttribute.IsEmptyStorable(type));
 
     }
@@ -26,5 +29,5 @@
     public IEnumerable<Tag> Decompose(object obj) {
       foreach (var mapping in StorableAttribute.GetStorableAccessors(obj)) {
-        yield return new Tag(mapping.Value.Name ?? mapping.Key, mapping.Value.Get());        
+        yield return new Tag(mapping.Value.Name ?? mapping.Key, mapping.Value.Get());
       }
     }
Index: /trunk/sources/HeuristicLab.Persistence/UnitTests/UseCases.cs
===================================================================
--- /trunk/sources/HeuristicLab.Persistence/UnitTests/UseCases.cs	(revision 1704)
+++ /trunk/sources/HeuristicLab.Persistence/UnitTests/UseCases.cs	(revision 1705)
@@ -38,4 +38,12 @@
   }
 
+  public class NonDefaultConstructorClass {
+    [Storable]
+    int value;
+    public NonDefaultConstructorClass(int value) {
+      this.value = value;
+    }
+  }
+
   public class IntWrapper {
 
@@ -100,5 +108,5 @@
     [Storable]
     public int[] i = new[] { 3, 4, 5, 6 };
-    [Storable(Name="Test String")]
+    [Storable(Name = "Test String")]
     public string s;
     [Storable]
@@ -178,5 +186,5 @@
 
     [TestCleanup()]
-    public void ClearTempFile() {      
+    public void ClearTempFile() {
       StreamReader reader = new StreamReader(tempFile);
       string s = reader.ReadToEnd();
@@ -210,5 +218,5 @@
       Assert.AreEqual(
         DebugStringGenerator.Serialize(r),
-        DebugStringGenerator.Serialize(newR));      
+        DebugStringGenerator.Serialize(newR));
       Assert.AreSame(newR, newR.selfReferences[0]);
       Assert.AreNotSame(r, newR);
@@ -223,5 +231,5 @@
       Assert.AreEqual(r.intList[0], 9);
       Assert.AreEqual(r.intList[1], 8);
-      Assert.AreEqual(r.intList[2], 7);      
+      Assert.AreEqual(r.intList[2], 7);
       Assert.AreEqual(r.multiDimArray[0, 0], 5);
       Assert.AreEqual(r.multiDimArray[0, 1], 4);
@@ -231,5 +239,5 @@
       Assert.AreEqual(r.multiDimArray[1, 2], 6);
       Assert.IsFalse(r.boolean);
-      Assert.IsTrue((DateTime.Now - r.dateTime).TotalSeconds < 10);      
+      Assert.IsTrue((DateTime.Now - r.dateTime).TotalSeconds < 10);
       Assert.AreEqual(r.kvp.Key, "string key");
       Assert.AreEqual(r.kvp.Value, 321);
@@ -486,4 +494,14 @@
     }
 
+    [TestMethod]
+    public void NonDefaultConstructorTest() {
+      NonDefaultConstructorClass c = new NonDefaultConstructorClass(1);
+      try {
+        XmlGenerator.Serialize(c, tempFile);
+        Assert.Fail("Exception not thrown");
+      } catch (PersistenceException) {
+      }
+    }
+
     [ClassInitialize]
     public static void Initialize(TestContext testContext) {
