Index: trunk/sources/HeuristicLab.Persistence/3.3/Core/PersistenceException.cs
===================================================================
--- trunk/sources/HeuristicLab.Persistence/3.3/Core/PersistenceException.cs	(revision 2105)
+++ trunk/sources/HeuristicLab.Persistence/3.3/Core/PersistenceException.cs	(revision 2106)
@@ -4,4 +4,5 @@
 using HeuristicLab.Persistence.Core.Tokens;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using System.Text;
 
 namespace HeuristicLab.Persistence.Core {
@@ -12,4 +13,21 @@
     public PersistenceException(string message) : base(message) { }
     public PersistenceException(string message, Exception innerException) :  base(message, innerException) { }
+    public PersistenceException(string message, IEnumerable<Exception> innerExceptions)
+      : base(message) {
+      int i = 0;
+      foreach (var x in innerExceptions) {
+        i += 1;
+        this.Data.Add("Inner Exception " + i, x);
+      }
+    }
+    public override string ToString() {
+      var sb = new StringBuilder()
+        .Append(base.ToString())
+        .Append('\n');
+      foreach (Exception x in Data.Values) {
+        sb.Append(x.ToString()).Append('\n');
+      }
+      return sb.ToString();
+    }
   }
   
Index: trunk/sources/HeuristicLab.Persistence/3.3/Core/Serializer.cs
===================================================================
--- trunk/sources/HeuristicLab.Persistence/3.3/Core/Serializer.cs	(revision 2105)
+++ trunk/sources/HeuristicLab.Persistence/3.3/Core/Serializer.cs	(revision 2106)
@@ -34,4 +34,6 @@
     private readonly Dictionary<Type, int> typeCache;
     private readonly Configuration configuration;
+    private readonly bool isTestRun;
+    private readonly List<Exception> exceptions;
 
     public List<TypeMapping> TypeCache {
@@ -78,5 +80,9 @@
       this(obj, configuration, "ROOT") { }
 
-    public Serializer(object obj, Configuration configuration, string rootName) {
+    public Serializer(object obj, Configuration configuration, string rootName)
+      : this(obj, configuration, rootName, false) { }
+
+    public Serializer(object obj, Configuration configuration, string rootName, bool isTestRun) {
+    
       this.obj = obj;
       this.rootName = rootName;
@@ -84,4 +90,6 @@
       obj2id = new Dictionary<object, int>(new ReferenceEqualityComparer()) { { new object(), 0 } };
       typeCache = new Dictionary<Type, int>();
+      this.isTestRun = isTestRun;
+      this.exceptions = new List<Exception>();
     }
 
@@ -91,5 +99,19 @@
 
     public IEnumerator<ISerializationToken> GetEnumerator() {
-      return Serialize(new DataMemberAccessor(rootName, null, () => obj, null));
+      var enumerator = Serialize(new DataMemberAccessor(rootName, null, () => obj, null));
+      if (isTestRun) {
+        return AddExceptionCompiler(enumerator);
+      } else {
+        return enumerator;
+      }
+    }
+
+    public IEnumerator<ISerializationToken> AddExceptionCompiler(IEnumerator<ISerializationToken> enumerator) {
+      while (enumerator.MoveNext())
+        yield return enumerator.Current;
+      if (exceptions.Count == 1)
+        throw exceptions[0];
+      if (exceptions.Count > 1)
+        throw new PersistenceException("Multiple exceptions during serialization", exceptions);
     }
 
@@ -109,20 +131,28 @@
         obj2id.Add(value, (int)id);
       }
-      IPrimitiveSerializer primitiveSerializer = configuration.GetPrimitiveSerializer(type);
-      if (primitiveSerializer != null)
-        return PrimitiveEnumerator(accessor.Name, typeId, primitiveSerializer.Format(value), id);
-      ICompositeSerializer compositeSerializer = configuration.GetCompositeSerializer(type);
-      if (compositeSerializer != null)
-        return CompositeEnumerator(accessor.Name, compositeSerializer.Decompose(value), id, typeId, compositeSerializer.CreateMetaInfo(value));
-      throw new PersistenceException(
-          String.Format(
-          "No suitable method for serializing values of type \"{0}\" found\r\n" +
-          "primitive serializers:\r\n{1}\r\n" +
-          "composite serializers:\r\n{2}",
-          value.GetType().VersionInvariantName(),
-          string.Join("\r\n", configuration.PrimitiveSerializers.Select(f => f.GetType().VersionInvariantName()).ToArray()),
-          string.Join("\r\n", configuration.CompositeSerializers.Select(d => d.GetType().VersionInvariantName()).ToArray())
-          ));
-
+      try {
+        IPrimitiveSerializer primitiveSerializer = configuration.GetPrimitiveSerializer(type);
+        if (primitiveSerializer != null)
+          return PrimitiveEnumerator(accessor.Name, typeId, primitiveSerializer.Format(value), id);
+        ICompositeSerializer compositeSerializer = configuration.GetCompositeSerializer(type);
+        if (compositeSerializer != null)
+          return CompositeEnumerator(accessor.Name, compositeSerializer.Decompose(value), id, typeId, compositeSerializer.CreateMetaInfo(value));
+        throw new PersistenceException(
+            String.Format(
+            "No suitable method for serializing values of type \"{0}\" found\r\n" +
+            "primitive serializers:\r\n{1}\r\n" +
+            "composite serializers:\r\n{2}",
+            value.GetType().VersionInvariantName(),
+            string.Join("\r\n", configuration.PrimitiveSerializers.Select(f => f.GetType().VersionInvariantName()).ToArray()),
+            string.Join("\r\n", configuration.CompositeSerializers.Select(d => d.GetType().VersionInvariantName()).ToArray())
+            ));
+      } catch (Exception x) {
+        if (isTestRun) {
+          exceptions.Add(x);
+          return new List<ISerializationToken>().GetEnumerator();
+        } else {
+          throw x;
+        }
+      }
     }
 
Index: trunk/sources/HeuristicLab.Persistence/UnitTests/UseCases.cs
===================================================================
--- trunk/sources/HeuristicLab.Persistence/UnitTests/UseCases.cs	(revision 2105)
+++ trunk/sources/HeuristicLab.Persistence/UnitTests/UseCases.cs	(revision 2106)
@@ -506,4 +506,24 @@
 
     [TestMethod]
+    public void TestMultipleFailure() {
+      List<NonSerializable> l = new List<NonSerializable>();
+      l.Add(new NonSerializable());
+      l.Add(new NonSerializable());
+      l.Add(new NonSerializable());
+      try {
+        Serializer s = new Serializer(l,
+          ConfigurationService.Instance.GetConfiguration(new XmlFormat()),
+          "ROOT", true);
+        StringBuilder tokens = new StringBuilder();
+        foreach (var token in s) {
+          tokens.Append(token.ToString());
+        }
+        Assert.Fail("Exception expected");
+      } catch (PersistenceException px) {
+        Assert.AreEqual(3, px.Data.Count);
+      }
+    }
+
+    [TestMethod]
     public void TestAssemblyVersionCheck() {
       IntWrapper i = new IntWrapper(1);
Index: trunk/sources/HeuristicLab.sln
===================================================================
--- trunk/sources/HeuristicLab.sln	(revision 2105)
+++ trunk/sources/HeuristicLab.sln	(revision 2106)
@@ -235,5 +235,5 @@
 Global
 	GlobalSection(TestCaseManagementSettings) = postSolution
-		CategoryFile = HeuristicLab1.vsmdi
+		CategoryFile = HeuristicLab.vsmdi
 	EndGlobalSection
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
Index: trunk/sources/HeuristicLab.vsmdi
===================================================================
--- trunk/sources/HeuristicLab.vsmdi	(revision 2105)
+++ 	(revision )
@@ -1,6 +1,0 @@
-﻿<?xml version="1.0" encoding="UTF-8"?>
-<TestLists xmlns="http://microsoft.com/schemas/VisualStudio/TeamTest/2006">
-  <TestList name="Lists of Tests" id="8c43106b-9dc1-4907-a29f-aa66a61bf5b6">
-    <RunConfiguration id="f9392825-866f-4434-be36-358db28f0c59" name="Local Test Run" storage="localtestrun.testrunconfig" type="Microsoft.VisualStudio.TestTools.Common.TestRunConfiguration, Microsoft.VisualStudio.QualityTools.Common,   PublicKeyToken=b03f5f7f11d50a3a" />
-  </TestList>
-</TestLists>
