Index: trunk/sources/HeuristicLab.Persistence/3.3/Core/ConfigurationService.cs
===================================================================
--- trunk/sources/HeuristicLab.Persistence/3.3/Core/ConfigurationService.cs	(revision 1538)
+++ trunk/sources/HeuristicLab.Persistence/3.3/Core/ConfigurationService.cs	(revision 1539)
@@ -84,4 +84,15 @@
         if ( a != defaultAssembly )
           DiscoverFrom(a);
+      SortDecomposers();
+    }
+
+    class PriortiySorter : IComparer<IDecomposer> {
+      public int Compare(IDecomposer x, IDecomposer y) {
+        return y.Priority - x.Priority;
+      }
+    }
+
+    protected void SortDecomposers() {
+      Decomposers.Sort(new PriortiySorter());
     }
 
Index: trunk/sources/HeuristicLab.Persistence/3.3/Default/Decomposers/ArrayDecomposer.cs
===================================================================
--- trunk/sources/HeuristicLab.Persistence/3.3/Default/Decomposers/ArrayDecomposer.cs	(revision 1538)
+++ trunk/sources/HeuristicLab.Persistence/3.3/Default/Decomposers/ArrayDecomposer.cs	(revision 1539)
@@ -7,4 +7,8 @@
     
   public class ArrayDecomposer : IDecomposer {
+
+    public int Priority {
+      get { return 100; }
+    }
 
     public bool CanDecompose(Type type) {
Index: trunk/sources/HeuristicLab.Persistence/3.3/Default/Decomposers/DictionaryDecomposer.cs
===================================================================
--- trunk/sources/HeuristicLab.Persistence/3.3/Default/Decomposers/DictionaryDecomposer.cs	(revision 1538)
+++ trunk/sources/HeuristicLab.Persistence/3.3/Default/Decomposers/DictionaryDecomposer.cs	(revision 1539)
@@ -41,4 +41,9 @@
   public class DictionaryDecomposer : IDecomposer {
 
+    public int Priority {
+      get { return 100; }
+    }
+
+
     public bool CanDecompose(Type type) {
       return type.GetInterface(typeof(IDictionary).FullName) != null;        
Index: trunk/sources/HeuristicLab.Persistence/3.3/Default/Decomposers/EnumDecomposer.cs
===================================================================
--- trunk/sources/HeuristicLab.Persistence/3.3/Default/Decomposers/EnumDecomposer.cs	(revision 1538)
+++ trunk/sources/HeuristicLab.Persistence/3.3/Default/Decomposers/EnumDecomposer.cs	(revision 1539)
@@ -7,4 +7,8 @@
     
   public class EnumDecomposer : IDecomposer {
+
+    public int Priority {
+      get { return 100; }
+    }
 
     public bool CanDecompose(Type type) {
@@ -25,4 +29,5 @@
       return Enum.Parse(t, (string)it.Current.Value);
     }
+    
   }
   
Index: trunk/sources/HeuristicLab.Persistence/3.3/Default/Decomposers/EnumerableDecomposer.cs
===================================================================
--- trunk/sources/HeuristicLab.Persistence/3.3/Default/Decomposers/EnumerableDecomposer.cs	(revision 1538)
+++ trunk/sources/HeuristicLab.Persistence/3.3/Default/Decomposers/EnumerableDecomposer.cs	(revision 1539)
@@ -49,5 +49,10 @@
   }
 
-  public class EnumerableDecomposer : IDecomposer {    
+  public class EnumerableDecomposer : IDecomposer {
+
+    public int Priority {
+      get { return 100; }
+    }
+
 
     public bool CanDecompose(Type type) {
Index: trunk/sources/HeuristicLab.Persistence/3.3/Default/Decomposers/KeyValuePairDecomposer.cs
===================================================================
--- trunk/sources/HeuristicLab.Persistence/3.3/Default/Decomposers/KeyValuePairDecomposer.cs	(revision 1538)
+++ trunk/sources/HeuristicLab.Persistence/3.3/Default/Decomposers/KeyValuePairDecomposer.cs	(revision 1539)
@@ -8,5 +8,10 @@
 namespace HeuristicLab.Persistence.Default.Decomposers {
   
-  public class KeyValuePairDecomposer : IDecomposer {    
+  public class KeyValuePairDecomposer : IDecomposer {
+
+    public int Priority {
+      get { return 100; }
+    }
+
 
     public bool CanDecompose(Type type) {
Index: trunk/sources/HeuristicLab.Persistence/3.3/Default/Decomposers/StorableDecomposer.cs
===================================================================
--- trunk/sources/HeuristicLab.Persistence/3.3/Default/Decomposers/StorableDecomposer.cs	(revision 1538)
+++ trunk/sources/HeuristicLab.Persistence/3.3/Default/Decomposers/StorableDecomposer.cs	(revision 1539)
@@ -7,5 +7,9 @@
 namespace HeuristicLab.Persistence.Default.Decomposers {
 
-  public class StorableDecomposer : IDecomposer {    
+  public class StorableDecomposer : IDecomposer {
+
+    public int Priority {
+      get { return 200; }
+    }
 
     public bool CanDecompose(Type type) {
Index: trunk/sources/HeuristicLab.Persistence/3.3/Default/Decomposers/TypeDecomposer.cs
===================================================================
--- trunk/sources/HeuristicLab.Persistence/3.3/Default/Decomposers/TypeDecomposer.cs	(revision 1538)
+++ trunk/sources/HeuristicLab.Persistence/3.3/Default/Decomposers/TypeDecomposer.cs	(revision 1539)
@@ -6,5 +6,10 @@
 namespace HeuristicLab.Persistence.Default.Decomposers {
   
-  public class TypeDecomposer : IDecomposer {    
+  public class TypeDecomposer : IDecomposer {
+
+    public int Priority {
+      get { return 100; }
+    }
+
     public bool CanDecompose(Type type) {
       return type == typeof (Type) ||
Index: trunk/sources/HeuristicLab.Persistence/3.3/Default/Decomposers/X2StringDecomposer.cs
===================================================================
--- trunk/sources/HeuristicLab.Persistence/3.3/Default/Decomposers/X2StringDecomposer.cs	(revision 1538)
+++ trunk/sources/HeuristicLab.Persistence/3.3/Default/Decomposers/X2StringDecomposer.cs	(revision 1539)
@@ -10,4 +10,9 @@
 
   public class Number2StringDecomposer : IDecomposer {
+
+    public int Priority {
+      get { return 100; }
+    }
+
 
     private static readonly List<Type> numberTypes =
@@ -77,4 +82,9 @@
   public class DateTime2StringDecomposer : IDecomposer {
 
+    public int Priority {
+      get { return 100; }
+    }
+
+
     public bool CanDecompose(Type type) {
       return type == typeof(DateTime);
@@ -99,4 +109,8 @@
 
   public class CompactNumberArray2StringDecomposer : IDecomposer {
+
+    public int Priority {
+      get { return 200; }
+    }
     
     private static readonly Number2StringDecomposer numberDecomposer =
@@ -183,4 +197,8 @@
 
   public class NumberEnumerable2StringDecomposer : IDecomposer {
+
+    public int Priority {
+      get { return 200; }
+    }
 
     private static readonly Number2StringDecomposer numberDecomposer =
Index: trunk/sources/HeuristicLab.Persistence/3.3/Interfaces/IDecomposer.cs
===================================================================
--- trunk/sources/HeuristicLab.Persistence/3.3/Interfaces/IDecomposer.cs	(revision 1538)
+++ trunk/sources/HeuristicLab.Persistence/3.3/Interfaces/IDecomposer.cs	(revision 1539)
@@ -6,4 +6,13 @@
 
   public interface IDecomposer {
+
+    /// <summary>
+    /// Defines the Priorty of this Decomposer. Higher number means
+    /// higher prioriy. Negative numbers are fallback decomposers.
+    /// All default generic decomposers have priority 100. Specializations
+    /// have priority 200 so they will  be tried first. Priorities are
+    /// only considered for default configurations.
+    /// </summary>
+    int Priority { get; }
 
     /// <summary>
