Index: branches/Persistence Test/HeuristicLab.Persistence/3.3/Auxiliary/TypeName.cs
===================================================================
--- branches/Persistence Test/HeuristicLab.Persistence/3.3/Auxiliary/TypeName.cs	(revision 2816)
+++ branches/Persistence Test/HeuristicLab.Persistence/3.3/Auxiliary/TypeName.cs	(revision 2858)
@@ -31,5 +31,7 @@
     public string ToString(bool full, bool includeAssembly) {
       StringBuilder sb = new StringBuilder();
-      sb.Append(Namespace).Append('.').Append(ClassName);
+      if (!string.IsNullOrEmpty(Namespace))
+        sb.Append(Namespace).Append('.');
+      sb.Append(ClassName);
       if (IsGeneric) {
         sb.Append('`').Append(GenericArgs.Count).Append('[');
Index: branches/Persistence Test/HeuristicLab.Persistence/3.3/Auxiliary/TypeNameParser.cs
===================================================================
--- branches/Persistence Test/HeuristicLab.Persistence/3.3/Auxiliary/TypeNameParser.cs	(revision 2816)
+++ branches/Persistence Test/HeuristicLab.Persistence/3.3/Auxiliary/TypeNameParser.cs	(revision 2858)
@@ -29,5 +29,5 @@
                  |  'Culture=[a-zA-F0-9]+'
 
-      Version := '\d+\.\d+\.\d+\.\d+)'
+      Version := \d+\.\d+\.\d+\.\d+
 
       IDENTIFIER = [_a-zA-Z][_a-ZA-Z0-9]*
@@ -50,7 +50,9 @@
           {"`", "BACKTICK"} };
       private static Regex NumberRegex = new Regex("^\\d+$");
-      private static Regex TokenRegex = new Regex("[-&.+,\\[\\]* =`]|\\d+|[_a-zA-Z][_a-zA-Z0-9]*");
+      private static Regex IdentifierRegex = new Regex("^[_a-zA-Z][_a-zA-Z0-9]*$");
+      private static Regex TokenRegex = new Regex("[-&.+,\\[\\]* =`]|[a-f0-9]+|\\d+|[_a-zA-Z][_a-zA-Z0-9]*");
       public string Name { get; private set; }
       public string Value { get; private set; }
+      public bool IsIdentifier { get; private set; }
       public int? Number { get; private set; }
       public int Position { get; private set; }
@@ -63,4 +65,5 @@
         } else {
           Value = value;
+          IsIdentifier = IdentifierRegex.IsMatch(value);
         }
       }
@@ -239,5 +242,5 @@
     private KeyValuePair<string, string> ConsumeAssignment(string name) {
       ConsumeToken("EQUALS", true);
-      return new KeyValuePair<string, string>(name, ConsumeIdentifier());
+      return new KeyValuePair<string, string>(name, ConsumeToken());
     }
 
@@ -273,5 +276,5 @@
       if (tokens.Count == 0)
         return false;
-      if (tokens.Peek().Value == value) {
+      if (tokens.Peek().Value == value && tokens.Peek().IsIdentifier) {
         tokens.Dequeue();
         return true;
@@ -288,8 +291,18 @@
       if (tokens.Count == 0)
         throw new ParseError("End of input while expecting identifier");
+      if (tokens.Peek().Value != null && tokens.Peek().IsIdentifier)
+        return tokens.Dequeue().Value;
+      throw new ParseError(String.Format(
+        "Identifier expected, found \"{0}\" instead",
+        tokens.Peek().ToString()));
+    }
+
+    private string ConsumeToken() {
+      if (tokens.Count == 0)
+        throw new ParseError("End of input while expecting token");
       if (tokens.Peek().Value != null)
         return tokens.Dequeue().Value;
       throw new ParseError(String.Format(
-        "Identifier expected, found \"{0}\" instead",
+        "Token expected, found \"{0}\" instead",
         tokens.Peek().ToString()));
     }
Index: branches/Persistence Test/HeuristicLab.Persistence/UnitTests/UseCases.cs
===================================================================
--- branches/Persistence Test/HeuristicLab.Persistence/UnitTests/UseCases.cs	(revision 2816)
+++ branches/Persistence Test/HeuristicLab.Persistence/UnitTests/UseCases.cs	(revision 2858)
@@ -408,4 +408,6 @@
         foreach (Type t in a.GetTypes()) {
           foreach (MemberInfo mi in t.GetMembers(BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static)) {
+            if (mi.DeclaringType.Name.StartsWith("<>"))
+              continue;
             if (char.IsLower(mi.Name[0])) {
               if (mi.MemberType == MemberTypes.Field)
@@ -506,4 +508,12 @@
 
     [TestMethod]
+    public void TestHexadecimalPublicKeyToken() {
+      string name = "TestClass, TestAssembly, Version=1.2.3.4, PublicKey=1234abc";
+      string shortName = "TestClass, TestAssembly";
+      Assert.AreEqual(name, TypeNameParser.Parse(name).ToString());
+      Assert.AreEqual(shortName, TypeNameParser.Parse(name).ToString(false));
+    }
+
+    [TestMethod]
     public void TestMultipleFailure() {
       List<NonSerializable> l = new List<NonSerializable>();
