Index: trunk/sources/HeuristicLab.Common/3.3/ObjectExtensions.cs
===================================================================
--- trunk/sources/HeuristicLab.Common/3.3/ObjectExtensions.cs	(revision 8309)
+++ trunk/sources/HeuristicLab.Common/3.3/ObjectExtensions.cs	(revision 8310)
@@ -48,6 +48,8 @@
 
         foreach (object o in GetChildObjects(current, excludedMembers, excludeStaticMembers)) {
-          if (o != null && !objects.Contains(o) && !ExcludeType(o.GetType()))
-            stack.Push(o);
+          if (o == null) continue;
+          if (ExcludeType(o.GetType())) continue;
+          if (objects.Contains(o)) continue;
+          stack.Push(o);
         }
       }
@@ -63,21 +65,19 @@
     ///   * string, decimal, DateTime
     ///   * Arrays of types not collected
-    ///   
-    /// Dictionaries and HashSets are treated specially, because it is cheaper to iterate over their keys and values
-    /// compared to traverse their internal data structures.
     /// </summary>
     private static bool ExcludeType(Type type) {
       return type.IsPrimitive ||
              type == typeof(string) ||
+             type == typeof(string[]) ||
              type == typeof(decimal) ||
+             type == typeof(decimal[]) ||
              type == typeof(DateTime) ||
+             type == typeof(DateTime[]) ||
              typeof(Delegate).IsAssignableFrom(type) ||
              typeof(Pointer).IsAssignableFrom(type) ||
-             type == typeof(string[]) ||
-             type == typeof(DateTime[]) ||
+             type == typeof(System.Reflection.Emit.SignatureHelper) ||
              (type.HasElementType && ExcludeType(type.GetElementType()));
     }
 
-    private static ReferenceEqualityComparer comparer = new ReferenceEqualityComparer();
     private static IEnumerable<object> GetChildObjects(object obj, HashSet<object> excludedMembers, bool excludeStaticMembers) {
       Type type = obj.GetType();
@@ -86,5 +86,5 @@
         PropertyInfo info = type.GetProperty("Value");
         object value = info.GetValue(obj, null);
-        if (value != null && !excludedMembers.Contains(value, comparer))
+        if (value != null && !excludedMembers.Contains(value))
           yield return value;
       } else if (type.IsSubclassOfRawGeneric(typeof(Dictionary<,>)) ||
@@ -97,9 +97,9 @@
         var dictionary = obj as IDictionary;
         foreach (object value in dictionary.Keys) {
-          if (excludedMembers.Contains(value, comparer)) continue;
+          if (excludedMembers.Contains(value)) continue;
           yield return value;
         }
         foreach (object value in dictionary.Values) {
-          if (excludedMembers.Contains(value, comparer)) continue;
+          if (excludedMembers.Contains(value)) continue;
           yield return value;
         }
@@ -107,5 +107,5 @@
         var enumerable = obj as IEnumerable;
         foreach (var value in enumerable) {
-          if (excludedMembers.Contains(value, comparer)) continue;
+          if (excludedMembers.Contains(value)) continue;
           yield return value;
         }
@@ -116,8 +116,9 @@
           try {
             fieldValue = f.GetValue(obj);
-          } catch (SecurityException) {
+          }
+          catch (SecurityException) {
             continue;
           }
-          if (excludedMembers.Contains(fieldValue, comparer)) continue;
+          if (excludedMembers.Contains(fieldValue)) continue;
           yield return fieldValue;
         }
Index: trunk/sources/HeuristicLab.Common/3.3/TypeExtensions.cs
===================================================================
--- trunk/sources/HeuristicLab.Common/3.3/TypeExtensions.cs	(revision 8309)
+++ trunk/sources/HeuristicLab.Common/3.3/TypeExtensions.cs	(revision 8310)
@@ -49,8 +49,8 @@
 
     public static IEnumerable<FieldInfo> GetAllFields(this Type type) {
-      foreach (var field in type.GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic))
+      foreach (var field in type.GetFields(BindingFlags.Instance | BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.NonPublic))
         yield return field;
 
-      foreach (var field in type.GetFields(BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic))
+      foreach (var field in type.GetFields(BindingFlags.Static | BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.NonPublic))
         yield return field;
 
