Index: branches/HeuristicLab.Hive.Azure/HeuristicLab.Common/3.3/HeuristicLab.Common-3.3.csproj
===================================================================
--- branches/HeuristicLab.Hive.Azure/HeuristicLab.Common/3.3/HeuristicLab.Common-3.3.csproj	(revision 7270)
+++ branches/HeuristicLab.Hive.Azure/HeuristicLab.Common/3.3/HeuristicLab.Common-3.3.csproj	(revision 7669)
@@ -132,4 +132,5 @@
     <Compile Include="Plugin.cs" />
     <Compile Include="ReferenceEqualityComparer.cs" />
+    <Compile Include="TypeEqualityComparer.cs" />
     <Compile Include="TypeExtensions.cs" />
     <Compile Include="DoubleExtensions.cs">
Index: branches/HeuristicLab.Hive.Azure/HeuristicLab.Common/3.3/ObjectExtensions.cs
===================================================================
--- branches/HeuristicLab.Hive.Azure/HeuristicLab.Common/3.3/ObjectExtensions.cs	(revision 7270)
+++ branches/HeuristicLab.Hive.Azure/HeuristicLab.Common/3.3/ObjectExtensions.cs	(revision 7669)
@@ -31,6 +31,7 @@
 namespace HeuristicLab.Common {
   public static class ObjectExtensions {
-    public static IEnumerable<object> GetObjectGraphObjects(this object obj, bool excludeStaticMembers = false) {
+    public static IEnumerable<object> GetObjectGraphObjects(this object obj, HashSet<string> excludedMembers = null, bool excludeStaticMembers = false) {
       if (obj == null) return Enumerable.Empty<object>();
+      if (excludedMembers == null) excludedMembers = new HashSet<string>();
 
       var objects = new HashSet<object>();
@@ -42,5 +43,5 @@
         objects.Add(current);
 
-        foreach (object o in GetChildObjects(current, excludeStaticMembers)) {
+        foreach (object o in GetChildObjects(current, excludedMembers, excludeStaticMembers)) {
           if (o != null && !objects.Contains(o) && !ExcludeType(o.GetType()))
             stack.Push(o);
@@ -70,5 +71,5 @@
              (type.HasElementType && ExcludeType(type.GetElementType()));
     }
-    private static IEnumerable<object> GetChildObjects(object obj, bool excludeStaticMembers) {
+    private static IEnumerable<object> GetChildObjects(object obj, HashSet<string> excludedMembers, bool excludeStaticMembers) {
       Type type = obj.GetType();
 
@@ -95,9 +96,11 @@
       } else {
         foreach (FieldInfo f in type.GetAllFields()) {
+          if (excludedMembers.Contains(f.Name)) continue;
           if (excludeStaticMembers && f.IsStatic) continue;
           object fieldValue;
           try {
             fieldValue = f.GetValue(obj);
-          } catch (SecurityException) {
+          }
+          catch (SecurityException) {
             continue;
           }
Index: branches/HeuristicLab.Hive.Azure/HeuristicLab.Common/3.3/TypeEqualityComparer.cs
===================================================================
--- branches/HeuristicLab.Hive.Azure/HeuristicLab.Common/3.3/TypeEqualityComparer.cs	(revision 7669)
+++ branches/HeuristicLab.Hive.Azure/HeuristicLab.Common/3.3/TypeEqualityComparer.cs	(revision 7669)
@@ -0,0 +1,36 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Collections.Generic;
+
+namespace HeuristicLab.Common {
+  public class TypeEqualityComparer<T> : IEqualityComparer<T> {
+
+    bool IEqualityComparer<T>.Equals(T x, T y) {
+      return x.GetType().Equals(y.GetType());
+    }
+
+    int IEqualityComparer<T>.GetHashCode(T obj) {
+      if (obj == null) return 0;
+      return obj.GetType().GetHashCode();
+    }
+  }
+}
