Index: trunk/sources/HeuristicLab.Persistence/3.3/Default/Decomposers/EnumerableDecomposer.cs
===================================================================
--- trunk/sources/HeuristicLab.Persistence/3.3/Default/Decomposers/EnumerableDecomposer.cs	(revision 1659)
+++ trunk/sources/HeuristicLab.Persistence/3.3/Default/Decomposers/EnumerableDecomposer.cs	(revision 1679)
@@ -53,3 +53,42 @@
     }
   }
+
+
+  [EmptyStorableClass]
+  public class StackDecomposer : IDecomposer {
+
+    public int Priority {
+      get { return 100; }
+    }
+
+
+    public bool CanDecompose(Type type) {
+      return type.IsGenericType &&
+        type.GetGenericTypeDefinition() == typeof(Stack<>);        
+    }
+
+    public IEnumerable<Tag> CreateMetaInfo(object o) {
+      return new Tag[] { };
+    }
+
+    public IEnumerable<Tag> Decompose(object obj) {
+      foreach (object o in (IEnumerable)obj) {
+        yield return new Tag(null, o);
+      }
+    }
+
+    public object CreateInstance(Type type, IEnumerable<Tag> metaInfo) {
+      return Activator.CreateInstance(type, true);
+    }
+
+    public void Populate(object instance, IEnumerable<Tag> tags, Type type) {      
+      MethodInfo addMethod = type.GetMethod("Push");      
+      try {
+        foreach (var tag in tags)
+          addMethod.Invoke(instance, new[] { tag.Value });
+      } catch (Exception e) {
+        throw new PersistenceException("Exception caught while trying to populate enumerable.", e);
+      }
+    }
+  }
 }
Index: trunk/sources/HeuristicLab.Persistence/3.3/Default/Decomposers/Storable/StorableDecomposer.cs
===================================================================
--- trunk/sources/HeuristicLab.Persistence/3.3/Default/Decomposers/Storable/StorableDecomposer.cs	(revision 1659)
+++ trunk/sources/HeuristicLab.Persistence/3.3/Default/Decomposers/Storable/StorableDecomposer.cs	(revision 1679)
@@ -26,5 +26,5 @@
     public IEnumerable<Tag> Decompose(object obj) {
       foreach (var mapping in StorableAttribute.GetStorableAccessors(obj)) {
-        yield return new Tag(mapping.Key, mapping.Value.Get());
+        yield return new Tag(mapping.Value.Name ?? mapping.Key, mapping.Value.Get());        
       }
     }
@@ -41,6 +41,7 @@
       }
       foreach (var mapping in StorableAttribute.GetStorableAccessors(instance)) {
-        if (memberDict.ContainsKey(mapping.Key)) {
-          mapping.Value.Set(memberDict[mapping.Key].Value);
+        string name = mapping.Value.Name ?? mapping.Key;
+        if (memberDict.ContainsKey(name)) {
+          mapping.Value.Set(memberDict[name].Value);
         } else if (mapping.Value.DefaultValue != null) {
           mapping.Value.Set(mapping.Value.DefaultValue);
Index: trunk/sources/HeuristicLab.Persistence/3.3/Default/Xml/Primitive/String2XmlFormatter.cs
===================================================================
--- trunk/sources/HeuristicLab.Persistence/3.3/Default/Xml/Primitive/String2XmlFormatter.cs	(revision 1659)
+++ trunk/sources/HeuristicLab.Persistence/3.3/Default/Xml/Primitive/String2XmlFormatter.cs	(revision 1679)
@@ -5,7 +5,44 @@
 using System.Text.RegularExpressions;
 using HeuristicLab.Persistence.Default.Decomposers.Storable;
+using System.Globalization;
 
 
 namespace HeuristicLab.Persistence.Default.Xml.Primitive {
+
+  [EmptyStorableClass]
+  public class TimeSpan2XmlFormatter : PrimitiveXmlFormatterBase<TimeSpan> {
+
+    public override XmlString Format(TimeSpan o) {
+      return new XmlString(o.ToString());
+    }
+
+    public override TimeSpan Parse(XmlString t) {
+      try {
+        return TimeSpan.Parse(t.Data);
+      } catch (FormatException x) {
+        throw new PersistenceException("Cannot parse TimeSpan string representation.", x);
+      } catch (OverflowException x) {
+        throw new PersistenceException("Overflow during TimeSpan parsing.", x);
+      }
+    }
+  }
+
+  [EmptyStorableClass]
+  public class Guid2XmlFormatter : PrimitiveXmlFormatterBase<Guid> {
+
+    public override XmlString Format(Guid o) {
+      return new XmlString(o.ToString("D", CultureInfo.InvariantCulture));
+    }
+
+    public override Guid Parse(XmlString t) {
+      try {
+        return new Guid(t.Data);
+      } catch (FormatException x) {
+        throw new PersistenceException("Cannot parse Guid string representation.", x);
+      } catch (OverflowException x) {
+        throw new PersistenceException("Overflow during Guid parsing.", x);
+      }
+    }
+  }
 
   [EmptyStorableClass]
