Index: /trunk/sources/HeuristicLab.Common/3.3/ObjectExtensions.cs
===================================================================
--- /trunk/sources/HeuristicLab.Common/3.3/ObjectExtensions.cs	(revision 8211)
+++ /trunk/sources/HeuristicLab.Common/3.3/ObjectExtensions.cs	(revision 8212)
@@ -35,7 +35,7 @@
     }
 
-    public static IEnumerable<object> GetObjectGraphObjects(this object obj, HashSet<string> excludedMembers = null, bool excludeStaticMembers = false) {
+    public static IEnumerable<object> GetObjectGraphObjects(this object obj, HashSet<object> excludedMembers = null, bool excludeStaticMembers = false) {
       if (obj == null) return Enumerable.Empty<object>();
-      if (excludedMembers == null) excludedMembers = new HashSet<string>();
+      if (excludedMembers == null) excludedMembers = new HashSet<object>();
 
       var objects = new HashSet<object>();
@@ -78,5 +78,7 @@
              (type.HasElementType && ExcludeType(type.GetElementType()));
     }
-    private static IEnumerable<object> GetChildObjects(object obj, HashSet<string> excludedMembers, bool excludeStaticMembers) {
+
+    private static ReferenceEqualityComparer comparer = new ReferenceEqualityComparer();
+    private static IEnumerable<object> GetChildObjects(object obj, HashSet<object> excludedMembers, bool excludeStaticMembers) {
       Type type = obj.GetType();
 
@@ -84,5 +86,6 @@
         PropertyInfo info = type.GetProperty("Value");
         object value = info.GetValue(obj, null);
-        if (value != null) yield return value;
+        if (value != null && excludedMembers.Contains(value, comparer))
+          yield return value;
       } else if (type.IsSubclassOfRawGeneric(typeof(Dictionary<,>)) ||
            type.IsSubclassOfRawGeneric(typeof(SortedDictionary<,>)) ||
@@ -93,15 +96,20 @@
            obj is Hashtable) {
         var dictionary = obj as IDictionary;
-        foreach (object value in dictionary.Keys)
+        foreach (object value in dictionary.Keys) {
+          if (excludedMembers.Contains(value, comparer)) continue;
           yield return value;
-        foreach (object value in dictionary.Values)
+        }
+        foreach (object value in dictionary.Values) {
+          if (excludedMembers.Contains(value, comparer)) continue;
           yield return value;
+        }
       } else if (type.IsArray || type.IsSubclassOfRawGeneric(typeof(HashSet<>))) {
         var enumerable = obj as IEnumerable;
-        foreach (var value in enumerable)
+        foreach (var value in enumerable) {
+          if (excludedMembers.Contains(value, comparer)) continue;
           yield return value;
+        }
       } else {
         foreach (FieldInfo f in type.GetAllFields()) {
-          if (excludedMembers.Contains(f.Name)) continue;
           if (excludeStaticMembers && f.IsStatic) continue;
           object fieldValue;
@@ -112,4 +120,5 @@
             continue;
           }
+          if (excludedMembers.Contains(fieldValue, comparer)) continue;
           yield return fieldValue;
         }
Index: /trunk/sources/HeuristicLab.Optimization/3.3/Algorithms/Algorithm.cs
===================================================================
--- /trunk/sources/HeuristicLab.Optimization/3.3/Algorithms/Algorithm.cs	(revision 8211)
+++ /trunk/sources/HeuristicLab.Optimization/3.3/Algorithms/Algorithm.cs	(revision 8212)
@@ -273,5 +273,5 @@
     protected virtual void OnPrepared() {
       ExecutionTime = TimeSpan.Zero;
-      foreach (IStatefulItem statefulObject in this.GetObjectGraphObjects(new HashSet<string>() { "runs" }).OfType<IStatefulItem>()) {
+      foreach (IStatefulItem statefulObject in this.GetObjectGraphObjects(new HashSet<object>() { Runs }).OfType<IStatefulItem>()) {
         statefulObject.InitializeState();
       }
@@ -294,5 +294,5 @@
     public event EventHandler Stopped;
     protected virtual void OnStopped() {
-      foreach (IStatefulItem statefulObject in this.GetObjectGraphObjects(new HashSet<string>() { "runs" }).OfType<IStatefulItem>()) {
+      foreach (IStatefulItem statefulObject in this.GetObjectGraphObjects(new HashSet<object>() { Runs }).OfType<IStatefulItem>()) {
         statefulObject.ClearState();
       }
