Index: trunk/sources/HeuristicLab.Persistence/3.3/Default/Decomposers/EnumerableDecomposer.cs
===================================================================
--- trunk/sources/HeuristicLab.Persistence/3.3/Default/Decomposers/EnumerableDecomposer.cs	(revision 1682)
+++ trunk/sources/HeuristicLab.Persistence/3.3/Default/Decomposers/EnumerableDecomposer.cs	(revision 1683)
@@ -53,42 +53,3 @@
     }
   }
-
-
-  [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/StackDecomposer.cs
===================================================================
--- trunk/sources/HeuristicLab.Persistence/3.3/Default/Decomposers/StackDecomposer.cs	(revision 1683)
+++ trunk/sources/HeuristicLab.Persistence/3.3/Default/Decomposers/StackDecomposer.cs	(revision 1683)
@@ -0,0 +1,55 @@
+﻿using System;
+using System.Collections;
+using System.Reflection;
+using HeuristicLab.Persistence.Core;
+using HeuristicLab.Persistence.Interfaces;
+using System.Collections.Generic;
+using HeuristicLab.Persistence.Default.Decomposers.Storable;
+using System.IO;
+
+namespace HeuristicLab.Persistence.Default.Decomposers {
+
+  [EmptyStorableClass]
+  public class StackDecomposer : IDecomposer {
+
+    public int Priority {
+      get { return 100; }
+    }
+
+
+    public bool CanDecompose(Type type) {      
+      return type == typeof(Stack) ||
+        type.IsGenericType &&
+        type.GetGenericTypeDefinition() == typeof(Stack<>);
+    }
+
+    public IEnumerable<Tag> CreateMetaInfo(object o) {
+      return new Tag[] { };
+    }
+
+    public IEnumerable<Tag> Decompose(object obj) {
+      MethodInfo addMethod = obj.GetType().GetMethod("Push");
+      object reverseStack = Activator.CreateInstance(obj.GetType(), true);
+      foreach (object o in (IEnumerable)obj) {
+        addMethod.Invoke(reverseStack, new[] { o });
+      }
+      foreach (object o in (IEnumerable)reverseStack) {
+        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/Xml/Primitive/Guid2XmlFormatter.cs
===================================================================
--- trunk/sources/HeuristicLab.Persistence/3.3/Default/Xml/Primitive/Guid2XmlFormatter.cs	(revision 1683)
+++ trunk/sources/HeuristicLab.Persistence/3.3/Default/Xml/Primitive/Guid2XmlFormatter.cs	(revision 1683)
@@ -0,0 +1,29 @@
+﻿using System;
+using HeuristicLab.Persistence.Core;
+using HeuristicLab.Persistence.Interfaces;
+using System.Text;
+using System.Text.RegularExpressions;
+using HeuristicLab.Persistence.Default.Decomposers.Storable;
+using System.Globalization;
+
+
+namespace HeuristicLab.Persistence.Default.Xml.Primitive {
+  
+  [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);
+      }
+    }
+  }  
+}
Index: trunk/sources/HeuristicLab.Persistence/3.3/Default/Xml/Primitive/String2XmlFormatter.cs
===================================================================
--- trunk/sources/HeuristicLab.Persistence/3.3/Default/Xml/Primitive/String2XmlFormatter.cs	(revision 1682)
+++ trunk/sources/HeuristicLab.Persistence/3.3/Default/Xml/Primitive/String2XmlFormatter.cs	(revision 1683)
@@ -9,40 +9,4 @@
 
 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]
Index: trunk/sources/HeuristicLab.Persistence/3.3/Default/Xml/Primitive/TimeSpan2XmlFormatter.cs
===================================================================
--- trunk/sources/HeuristicLab.Persistence/3.3/Default/Xml/Primitive/TimeSpan2XmlFormatter.cs	(revision 1683)
+++ trunk/sources/HeuristicLab.Persistence/3.3/Default/Xml/Primitive/TimeSpan2XmlFormatter.cs	(revision 1683)
@@ -0,0 +1,29 @@
+﻿using System;
+using HeuristicLab.Persistence.Core;
+using HeuristicLab.Persistence.Interfaces;
+using System.Text;
+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);
+      }
+    }
+  }  
+}
Index: trunk/sources/HeuristicLab.Persistence/3.3/HeuristicLab.Persistence-3.3.csproj
===================================================================
--- trunk/sources/HeuristicLab.Persistence/3.3/HeuristicLab.Persistence-3.3.csproj	(revision 1682)
+++ trunk/sources/HeuristicLab.Persistence/3.3/HeuristicLab.Persistence-3.3.csproj	(revision 1683)
@@ -96,4 +96,5 @@
     <Compile Include="Core\PersistenceException.cs" />
     <Compile Include="Default\DebugString\Formatters\Char2DebugStringFormatter.cs" />
+    <Compile Include="Default\Decomposers\StackDecomposer.cs" />
     <Compile Include="Default\Decomposers\Number2StringConverter.cs" />
     <Compile Include="Default\Decomposers\Storable\EmptyStorableClassAttribute.cs" />
@@ -138,4 +139,6 @@
     <Compile Include="Default\Decomposers\Storable\DataMemberAccessor.cs" />
     <Compile Include="Default\Xml\Compact\IntList2XmlFormatter.cs" />
+    <Compile Include="Default\Xml\Primitive\Guid2XmlFormatter.cs" />
+    <Compile Include="Default\Xml\Primitive\TimeSpan2XmlFormatter.cs" />
     <Compile Include="Default\Xml\XmlFormatterBase.cs" />
     <Compile Include="Default\Xml\Primitive\PrimitiveXmlFormatterBase.cs" />
Index: trunk/sources/HeuristicLab.Persistence/UnitTests/UseCases.cs
===================================================================
--- trunk/sources/HeuristicLab.Persistence/UnitTests/UseCases.cs	(revision 1682)
+++ trunk/sources/HeuristicLab.Persistence/UnitTests/UseCases.cs	(revision 1683)
@@ -75,4 +75,6 @@
   public class Root : RootBase {
     [Storable]
+    public Stack<int> intStack = new Stack<int>();
+    [Storable]
     public int[] i = new[] { 3, 4, 5, 6 };
     [Storable(Name="Test String")]
@@ -150,4 +152,7 @@
     public void ComplexStorable() {
       Root r = new Root();
+      r.intStack.Push(1);
+      r.intStack.Push(2);
+      r.intStack.Push(3);
       r.selfReferences = new List<Root> { r, r };
       r.c = new Custom { r = r };
@@ -211,4 +216,7 @@
       Assert.AreEqual(newR.multiDimArray[1, 1], 4);
       Assert.AreEqual(newR.multiDimArray[1, 2], 6);
+      Assert.AreEqual(newR.intStack.Pop(), 3);
+      Assert.AreEqual(newR.intStack.Pop(), 2);
+      Assert.AreEqual(newR.intStack.Pop(), 1);
       Assert.IsFalse(newR.boolean);
       Assert.IsTrue((DateTime.Now - newR.dateTime).TotalSeconds < 10);
