Index: branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/GenealogyGraph/GenealogyGraphNode.cs
===================================================================
--- branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/GenealogyGraph/GenealogyGraphNode.cs	(revision 15756)
+++ branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/GenealogyGraph/GenealogyGraphNode.cs	(revision 15757)
@@ -77,11 +77,10 @@
         // for performance, we use a hashset for lookup and a list for iteration
         var nodes = new HashSet<IGenealogyGraphNode>(Parents);
-        var list = new List<IGenealogyGraphNode>(Parents);
+        var list = new List<IGenealogyGraphNode>(nodes);
         int i = 0;
         while (i != list.Count) {
-          foreach (var e in list[i].InArcs) {
-            if (nodes.Contains(e.Source)) continue;
-            nodes.Add(e.Source);
-            list.Add(e.Source);
+          foreach (var arc in list[i].InArcs) {
+            if (nodes.Add(arc.Source))
+              list.Add(arc.Source);
           }
           ++i;
@@ -94,11 +93,10 @@
       get {
         var nodes = new HashSet<IGenealogyGraphNode>(Children);
-        var list = new List<IGenealogyGraphNode>(Children);
+        var list = new List<IGenealogyGraphNode>(nodes);
         int i = 0;
         while (i != list.Count) {
           foreach (var e in list[i].OutArcs) {
-            if (nodes.Contains(e.Target)) continue;
-            nodes.Add(e.Target);
-            list.Add(e.Target);
+            if (nodes.Add(e.Target))
+              list.Add(e.Target);
           }
           ++i;
Index: branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/HeuristicLab.EvolutionTracking-3.4.csproj
===================================================================
--- branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/HeuristicLab.EvolutionTracking-3.4.csproj	(revision 15756)
+++ branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/HeuristicLab.EvolutionTracking-3.4.csproj	(revision 15757)
@@ -130,4 +130,5 @@
     <Compile Include="Operators\Interfaces\IManipulatorOperator.cs" />
     <Compile Include="Operators\Interfaces\ICrossoverOperator.cs" />
+    <Compile Include="Operators\RemovePopulationGraphFromResults.cs" />
     <Compile Include="Plugin.cs">
       <SubType>Code</SubType>
Index: branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/Operators/RemovePopulationGraphFromResults.cs
===================================================================
--- branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/Operators/RemovePopulationGraphFromResults.cs	(revision 15757)
+++ branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/Operators/RemovePopulationGraphFromResults.cs	(revision 15757)
@@ -0,0 +1,53 @@
+﻿using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Operators;
+using HeuristicLab.Optimization;
+using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HeuristicLab.EvolutionTracking.Operators {
+  [StorableClass]
+  [Item("RemovePopulationGraphFromResultsOperator", "In some cases the genealogy graph is necessary during the run but to save memory it should be removed from the results at the end of the run.")]
+  public class RemovePopulationGraphFromResultsOperator : SingleSuccessorOperator {
+
+    public const string ResultCollectionParameterName = "Results";
+
+    public ILookupParameter<ResultCollection> ResultCollectionParameter {
+      get { return (ILookupParameter<ResultCollection>)Parameters[ResultCollectionParameterName]; }
+    }
+
+    [StorableConstructor]
+    protected RemovePopulationGraphFromResultsOperator(bool deserializing) : base(deserializing) { }
+
+    [StorableHook(HookType.AfterDeserialization)]
+    private void AfterDeserialization() {
+      if (!Parameters.ContainsKey(ResultCollectionParameterName))
+        Parameters.Add(new LookupParameter<ResultCollection>(ResultCollectionParameterName));
+    }
+
+    public RemovePopulationGraphFromResultsOperator() {
+      Parameters.Add(new LookupParameter<ResultCollection>(ResultCollectionParameterName));
+    }
+
+    public RemovePopulationGraphFromResultsOperator(RemovePopulationGraphFromResultsOperator original, Cloner cloner) : base(original, cloner) {
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new RemovePopulationGraphFromResultsOperator(this, cloner);
+    }
+
+    public override IOperation Apply() {
+      var results = ResultCollectionParameter.ActualValue;
+
+      if (results.ContainsKey("PopulationGraph"))
+        results.Remove("PopulationGraph");
+
+      return base.Apply();
+    }
+  }
+}
