Index: branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.AlgorithmBehavior/3.3/AlgorithmBehaviorHelpers.cs
===================================================================
--- branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.AlgorithmBehavior/3.3/AlgorithmBehaviorHelpers.cs	(revision 8234)
+++ branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.AlgorithmBehavior/3.3/AlgorithmBehaviorHelpers.cs	(revision 8237)
@@ -63,5 +63,7 @@
       if (filteredDescendants.Any()) {
         foreach (var descendant in filteredDescendants) {
-          generations.Add((int)descendant.Rank);
+          foreach (var rank in descendant.Rank) {
+            generations.Add((int)rank);
+          }
         }
       }
Index: branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.AlgorithmBehavior/3.3/Analyzers/BestIndividualQualityAnalyzer.cs
===================================================================
--- branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.AlgorithmBehavior/3.3/Analyzers/BestIndividualQualityAnalyzer.cs	(revision 8234)
+++ branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.AlgorithmBehavior/3.3/Analyzers/BestIndividualQualityAnalyzer.cs	(revision 8237)
@@ -129,11 +129,25 @@
       SchemaEqualityComparer comparer = new SchemaEqualityComparer();
 
-      var lastGen = graph.Values.Where(x => x.Rank == GenerationsParameter.ActualValue.Value);
+      var lastGen = graph.Values.Where(x => x.Rank.Contains(GenerationsParameter.ActualValue.Value));
       var parents = lastGen.Where(x => comparer.Equals((IntArray)x.Data, parent));
       var ancestors = parents.First().Ancestors().Where(x => AlgorithmBehaviorHelpers.IsSubtour(schema, (Permutation)x.Data));
 
       StringBuilder sb = new StringBuilder();
+      double curGen = GenerationsParameter.ActualValue.Value;
       foreach (var a in ancestors) {
-        sb.Append(a.Rank + ", ");
+        if (a.Rank.Contains(curGen))
+          sb.Append(curGen + ", ");
+        else {
+          for (int i = 0; i < GenerationsParameter.ActualValue.Value; i++) {
+            if (a.Rank.Contains(curGen - i)) {
+              curGen = curGen - i;
+              break;
+            } else if (a.Rank.Contains(curGen - i + 0.5)) {
+              curGen = curGen - i + 0.5;
+              break;
+            }
+          }
+          sb.Append(curGen + ", ");
+        }
       }
       return sb.ToString();
Index: branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.AlgorithmBehavior/3.3/Analyzers/BrokenInheritanceWildcardAnalyzer.cs
===================================================================
--- branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.AlgorithmBehavior/3.3/Analyzers/BrokenInheritanceWildcardAnalyzer.cs	(revision 8234)
+++ branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.AlgorithmBehavior/3.3/Analyzers/BrokenInheritanceWildcardAnalyzer.cs	(revision 8237)
@@ -77,5 +77,5 @@
       var graph = (GenealogyGraph<Permutation>)Results[PopulationGraphResultName].Value;
       var wildcards = (ItemArray<IntArray>)Results[WildcardsResultName].Value;
-      var generationZero = graph.Values.Where(x => x.Rank == 0);
+      var generationZero = graph.Values.Where(x => x.Rank.Contains(0));
 
       var buildingBlockMatrix = new StringMatrix(wildcards.Count(), generationZero.Count());
Index: branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.AlgorithmBehavior/3.3/Analyzers/BrokenInteritanceSchemaAnalyzer.cs
===================================================================
--- branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.AlgorithmBehavior/3.3/Analyzers/BrokenInteritanceSchemaAnalyzer.cs	(revision 8234)
+++ branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.AlgorithmBehavior/3.3/Analyzers/BrokenInteritanceSchemaAnalyzer.cs	(revision 8237)
@@ -77,5 +77,5 @@
       var graph = (GenealogyGraph<Permutation>)Results[PopulationGraphResultName].Value;
       var schemata = (ItemArray<IntArray>)Results[SchemataResultName].Value;
-      var generationZero = graph.Values.Where(x => x.Rank == 0);
+      var generationZero = graph.Values.Where(x => x.Rank.Contains(0));
 
       var brokenInteritanceSchemaOccurrenceMatrix = new StringMatrix(schemata.Count(), generationZero.Count());
Index: branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.AlgorithmBehavior/3.3/Analyzers/GenealogyAnalyzer.cs
===================================================================
--- branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.AlgorithmBehavior/3.3/Analyzers/GenealogyAnalyzer.cs	(revision 8234)
+++ branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.AlgorithmBehavior/3.3/Analyzers/GenealogyAnalyzer.cs	(revision 8237)
@@ -32,4 +32,5 @@
 
 namespace HeuristicLab.Analysis.AlgorithmBehavior {
+  using System.Collections.Generic;
   using CloneMapType = HeuristicLab.Core.ItemDictionary<HeuristicLab.Core.IItem, HeuristicLab.Core.IItem>;
   using TraceMapType = HeuristicLab.Core.ItemDictionary<HeuristicLab.Core.IItem, HeuristicLab.Core.IItemList<HeuristicLab.Core.IItem>>;
@@ -182,5 +183,7 @@
           for (int i = 0; i < population.Count; i++) {
             var solutionEntry = population.ElementAt(i);
-            var node = new GenealogyGraphNode(solutionEntry.Key) { Quality = solutionEntry.Value, Label = label, Rank = generation, IsElite = i < Elites.Value };
+            var rank = new List<double>();
+            rank.Add(generation);
+            var node = new GenealogyGraphNode(solutionEntry.Key) { Quality = solutionEntry.Value, Label = label, Rank = rank, IsElite = i < Elites.Value };
             graph.AddNode(node);
           }
@@ -192,5 +195,7 @@
           var solutionEntry = population.ElementAt(i);
           if (!graph.HasNode(solutionEntry.Key)) {
-            var node = new GenealogyGraphNode(solutionEntry.Key) { Quality = solutionEntry.Value, Label = label, Rank = generation, IsElite = i < Elites.Value };
+            var rank = new List<double>();
+            rank.Add(generation);
+            var node = new GenealogyGraphNode(solutionEntry.Key) { Quality = solutionEntry.Value, Label = label, Rank = rank, IsElite = i < Elites.Value };
             graph.AddNode(node);
           }
@@ -204,5 +209,7 @@
               // handle mutation
               double quality = Evaluate(parent);
-              var node = new GenealogyGraphNode(parent) { Quality = quality, Label = label, Rank = generation - 0.5 };
+              var rank = new List<double>();
+              rank.Add(generation - 0.5);
+              var node = new GenealogyGraphNode(parent) { Quality = quality, Label = label, Rank = rank };
               graph.AddNode(node);
               var parentParents = GlobalTraceMap[parent].Cast<Permutation>().ToArray();
Index: branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.AlgorithmBehavior/3.3/Analyzers/SchemaOccurenceInGenerationsAnalyzer.cs
===================================================================
--- branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.AlgorithmBehavior/3.3/Analyzers/SchemaOccurenceInGenerationsAnalyzer.cs	(revision 8234)
+++ branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.AlgorithmBehavior/3.3/Analyzers/SchemaOccurenceInGenerationsAnalyzer.cs	(revision 8237)
@@ -126,5 +126,7 @@
       foreach (var individual in graph.Values) {
         if (AlgorithmBehaviorHelpers.IsSubtour(schema, (Permutation)individual.Data)) {
-          occurences[(int)individual.Rank]++;
+          foreach (var rank in individual.Rank) {
+            occurences[(int)rank]++;
+          }
         }
       }
Index: branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.AlgorithmBehavior/3.3/Analyzers/SchemaQualityAnalyzer.cs
===================================================================
--- branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.AlgorithmBehavior/3.3/Analyzers/SchemaQualityAnalyzer.cs	(revision 8234)
+++ branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.AlgorithmBehavior/3.3/Analyzers/SchemaQualityAnalyzer.cs	(revision 8237)
@@ -136,5 +136,7 @@
       foreach (var individual in graph.Values) {
         if (AlgorithmBehaviorHelpers.IsSubtour(schema, (Permutation)individual.Data)) {
-          occurences[(int)individual.Rank]++;
+          foreach (var rank in individual.Rank) {
+            occurences[(int)rank]++;
+          }
         }
       }
@@ -166,9 +168,10 @@
           double pQuality = TSPDistanceMatrixEvaluator.Apply(DistanceMatrix, p);
 
-          if (Qualities.Rows["CurrentAverageQuality"].Values[(int)individual.Rank] > pQuality) {
+          //TODO: fix that
+          /*if (Qualities.Rows["CurrentAverageQuality"].Values[(int)individual.Rank] > pQuality) {
             qualityPoint += 1;
           } else {
             worstQualityPoint += 1;
-          }
+          } */
         }
       }
Index: branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.AlgorithmBehavior/3.3/Creators/SchemataCreator.cs
===================================================================
--- branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.AlgorithmBehavior/3.3/Creators/SchemataCreator.cs	(revision 8234)
+++ branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.AlgorithmBehavior/3.3/Creators/SchemataCreator.cs	(revision 8237)
@@ -85,5 +85,5 @@
     public override IOperation Apply() {
       var graph = (GenealogyGraph<Permutation>)Results[PopulationGraphResultParameterName].Value;
-      var generationZero = graph.Values.Where(x => x.Rank == 0);
+      var generationZero = graph.Values.Where(x => x.Rank.Contains(0));
 
       // extract all subtours for each individual in generation zero
Index: branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.AlgorithmBehavior/3.3/GenealogyGraph.cs
===================================================================
--- branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.AlgorithmBehavior/3.3/GenealogyGraph.cs	(revision 8234)
+++ branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.AlgorithmBehavior/3.3/GenealogyGraph.cs	(revision 8237)
@@ -73,5 +73,5 @@
     public void AddNode(T t) {
       if (HasNode(t)) return;
-      _nodes[t] = new GenealogyGraphNode(t) { Quality = 0.0, Label = "", IsElite = false, Rank = 0.0 };
+      _nodes[t] = new GenealogyGraphNode(t) { Quality = 0.0, Label = "", IsElite = false, Rank = new List<double>() };
     }
 
@@ -166,5 +166,5 @@
     public bool IsElite { get; set; }
     public double Quality { get; set; }
-    public double Rank { get; set; }
+    public List<double> Rank { get; set; }
     public List<GenealogyGraphArc> InEdges { get; set; }
     public List<GenealogyGraphArc> OutEdges { get; set; }
@@ -193,5 +193,5 @@
     public GenealogyGraphNode(GenealogyGraphNode node) {
       Id = Guid.NewGuid().ToString();
-      Rank = node.Rank;
+      Rank = new List<double>(node.Rank);
       Quality = node.Quality;
       IsElite = node.IsElite;
