Index: /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking.Views/3.4/GenealogyGraphChart.cs
===================================================================
--- /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking.Views/3.4/GenealogyGraphChart.cs	(revision 10829)
+++ /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking.Views/3.4/GenealogyGraphChart.cs	(revision 10830)
@@ -53,11 +53,6 @@
 
     private void Clear() {
-      if (nodeMap == null)
-        nodeMap = new Dictionary<IGenealogyGraphNode, VisualGenealogyGraphNode>();
-      else nodeMap.Clear();
-
-      if (arcMap == null)
-        arcMap = new Dictionary<Tuple<VisualGenealogyGraphNode, VisualGenealogyGraphNode>, VisualGenealogyGraphArc>();
-      else arcMap.Clear();
+      nodeMap = new Dictionary<IGenealogyGraphNode, VisualGenealogyGraphNode>();
+      arcMap = new Dictionary<Tuple<VisualGenealogyGraphNode, VisualGenealogyGraphNode>, VisualGenealogyGraphArc>();
 
       Chart.Group.Clear();
@@ -118,5 +113,4 @@
         foreach (var node in nodes) {
           var brush = new SolidBrush(node.GetColor());
-
           var visualNode = new VisualGenealogyGraphNode(Chart, x, y, x + diameter, y + diameter, defaultPen, brush) {
             Data = node,
@@ -145,6 +139,7 @@
           var pen = Pens.Transparent;
           var visualArc = AddArc(Chart, visualParent, visualNode, pen);
-          if (!arcMap.ContainsKey(Tuple.Create(visualParent, visualNode)))
+          if (!arcMap.ContainsKey(Tuple.Create(visualParent, visualNode))) {
             arcMap.Add(Tuple.Create(visualParent, visualNode), visualArc);
+          }
         }
       }
@@ -233,4 +228,5 @@
       brush.Color = node.Data.GetColor();
       var arcs = arcSelector(node);
+      var pen = new Pen(Color.Transparent);
       foreach (var arc in arcs) {
         var source = arc.Source.Data;
@@ -238,5 +234,5 @@
         var start = new Point((int)arc.Start.X, (int)arc.Start.Y);
         var end = new Point((int)arc.End.X, (int)arc.End.Y);
-        arc.Pen = new Pen(Color.Transparent);
+        arc.Pen = pen;
         arc.Pen.Brush = new LinearGradientBrush(start, end, source.GetColor(), target.GetColor());
         DrawLineage(nodeSelector(arc), arcSelector, nodeSelector);
@@ -273,6 +269,6 @@
           primitive.Pen = Pens.Transparent;
         } else if (primitive is VisualGenealogyGraphNode) {
-          primitive.Brush = Brushes.Transparent;
-          primitive.Pen = Pens.DarkGray;
+          primitive.Brush = new SolidBrush(Color.Transparent);
+          primitive.Pen = new Pen(Color.DarkGray);
         }
       }
Index: /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/Analyzers/GenealogyAnalyzer.cs
===================================================================
--- /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/Analyzers/GenealogyAnalyzer.cs	(revision 10829)
+++ /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/Analyzers/GenealogyAnalyzer.cs	(revision 10830)
@@ -13,4 +13,23 @@
   public class GenealogyAnalyzer<T> : SingleSuccessorOperator, IAnalyzer
   where T : class,IItem {
+    private const string GenerationsParameterName = "Generations";
+    private const string ResultsParameterName = "Results";
+    private const string PopulationGraphParameterName = "PopulationGraph";
+    public const string QualityParameterName = "Quality";
+    public const string PopulationParameterName = "SymbolicExpressionTree";
+
+    private const string CrossoverParameterName = "Crossover";
+    private const string ManipulatorParameterName = "Mutator";
+    private const string SolutionCreatorParameterName = "SolutionCreator";
+
+    private const string BeforeCrossoverOperatorParameterName = "BeforeCrossoverOperator";
+    private const string AfterCrossoverOperatorParameterName = "AfterCrossoverOperator";
+
+    private const string BeforeManipulatorOperatorParameterName = "BeforeManipulatorOperator";
+    private const string AfterManipulatorOperatorParameterName = "AfterManipulatorOperator";
+
+    private const string EnableCrossoverTrackingParameterName = "EnableCrossoverTracking";
+    private const string EnableManipulatorTrackingParameterName = "EnableManipulatorTracking";
+    private const string EnableSolutionCreatorTrackingParameterName = "EnableSolutionCreatorTracking"; // should always be enabled. maybe superfluous
 
     public string CrossoverParentsParameterName { get; set; }
@@ -18,26 +37,24 @@
     public string ManipulatorChildParameterName { get; set; }
 
-    public IScopeTreeLookupParameter<DoubleValue> QualityParameter;
-    public IScopeTreeLookupParameter<T> PopulationParameter;
-
-    public ICrossoverOperator<T> BeforeCrossoverOperator { get; set; }
-    public ICrossoverOperator<T> AfterCrossoverOperator { get; set; }
-    public IManipulatorOperator<T> BeforeManipulatorOperator { get; set; }
-    public IManipulatorOperator<T> AfterManipulatorOperator { get; set; }
-
-    private const string PopulationParameterName = "Population";
-    private const string QualityParameterName = "Quality";
-
-    private const string GenerationsParameterName = "Generations";
-    private const string ResultsParameterName = "Results";
-    private const string PopulationGraphParameterName = "PopulationGraph";
-
-    private const string CrossoverParameterName = "Crossover";
-    private const string ManipulatorParameterName = "Mutator";
-    private const string SolutionCreatorParameterName = "SolutionCreator";
-
-    private const string EnableCrossoverTrackingParameterName = "EnableCrossoverTracking";
-    private const string EnableManipulatorTrackingParameterName = "EnableManipulatorTracking";
-    private const string EnableSolutionCreatorTrackingParameterName = "EnableSolutionCreatorTracking"; // should always be enabled. maybe superfluous
+    public IScopeTreeLookupParameter<DoubleValue> QualityParameter {
+      get { return (IScopeTreeLookupParameter<DoubleValue>)Parameters[QualityParameterName]; }
+    }
+
+    public IScopeTreeLookupParameter<T> PopulationParameter {
+      get { return (IScopeTreeLookupParameter<T>)Parameters[PopulationParameterName]; }
+    }
+
+    public IValueParameter<ICrossoverOperator<T>> BeforeCrossoverOperatorParameter {
+      get { return (IValueParameter<ICrossoverOperator<T>>)Parameters[BeforeCrossoverOperatorParameterName]; }
+    }
+    public IValueParameter<ICrossoverOperator<T>> AfterCrossoverOperatorParameter {
+      get { return (IValueParameter<ICrossoverOperator<T>>)Parameters[AfterCrossoverOperatorParameterName]; }
+    }
+    public IValueParameter<IManipulatorOperator<T>> BeforeManipulatorOperatorParameter {
+      get { return (IValueParameter<IManipulatorOperator<T>>)Parameters[BeforeManipulatorOperatorParameterName]; }
+    }
+    public IValueParameter<IManipulatorOperator<T>> AfterManipulatorOperatorParameter {
+      get { return (IValueParameter<IManipulatorOperator<T>>)Parameters[AfterManipulatorOperatorParameterName]; }
+    }
 
     #region parameter properties
@@ -63,4 +80,5 @@
       get { return (ILookupParameter<IManipulator>)Parameters[ManipulatorParameterName]; }
     }
+
     public ILookupParameter<ISolutionCreator> SolutionCreatorParameter {
       get { return (ILookupParameter<ISolutionCreator>)Parameters[SolutionCreatorParameterName]; }
@@ -74,4 +92,16 @@
     public IManipulator Manipulator {
       get { return ManipulatorParameter.ActualValue; }
+    }
+    public ICrossoverOperator<T> BeforeCrossoverOperator {
+      get { return BeforeCrossoverOperatorParameter.Value; }
+    }
+    public ICrossoverOperator<T> AfterCrossoverOperator {
+      get { return AfterCrossoverOperatorParameter.Value; }
+    }
+    public IManipulatorOperator<T> BeforeManipulatorOperator {
+      get { return BeforeManipulatorOperatorParameter.Value; }
+    }
+    public IManipulatorOperator<T> AfterManipulatorOperator {
+      get { return AfterManipulatorOperatorParameter.Value; }
     }
     public ISolutionCreator SolutionCreator {
@@ -120,8 +150,10 @@
       Parameters.Add(new LookupParameter<IntValue>(GenerationsParameterName, "The number of generations so far."));
       Parameters.Add(new LookupParameter<ResultCollection>(ResultsParameterName));
-      PopulationParameter = new ScopeTreeLookupParameter<T>(PopulationParameterName);
-      QualityParameter = new ScopeTreeLookupParameter<DoubleValue>(QualityParameterName);
-      Parameters.Add(PopulationParameter);
-      Parameters.Add(QualityParameter);
+      Parameters.Add(new ScopeTreeLookupParameter<T>(PopulationParameterName, "The population of individuals."));
+      Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>(QualityParameterName, "The individual qualities."));
+      Parameters.Add(new ValueParameter<ICrossoverOperator<T>>(BeforeCrossoverOperatorParameterName));
+      Parameters.Add(new ValueParameter<ICrossoverOperator<T>>(AfterCrossoverOperatorParameterName));
+      Parameters.Add(new ValueParameter<IManipulatorOperator<T>>(BeforeManipulatorOperatorParameterName));
+      Parameters.Add(new ValueParameter<IManipulatorOperator<T>>(AfterManipulatorOperatorParameterName));
     }
     public override IDeepCloneable Clone(Cloner cloner) {
@@ -153,10 +185,8 @@
         Parameters.Add(new LookupParameter<ResultCollection>(ResultsParameterName));
       if (!Parameters.ContainsKey(PopulationParameterName)) {
-        PopulationParameter = new ScopeTreeLookupParameter<T>(PopulationParameterName);
-        Parameters.Add(PopulationParameter);
+        Parameters.Add(new ScopeTreeLookupParameter<T>(PopulationParameterName, "The population of individuals."));
       }
       if (!Parameters.ContainsKey(QualityParameterName)) {
-        QualityParameter = new ScopeTreeLookupParameter<DoubleValue>(QualityParameterName);
-        Parameters.Add(QualityParameter);
+        Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>(QualityParameterName, "The individual qualities."));
       }
     }
@@ -175,11 +205,11 @@
         if (EnableCrossoverTracking.Value) {
           if (BeforeCrossoverOperator != null) {
-            BeforeCrossoverOperator.ParentsParameter.ActualName = CrossoverParentsParameterName;
-            BeforeCrossoverOperator.ChildParameter.ActualName = CrossoverChildParameterName;
+            //            BeforeCrossoverOperator.ParentsParameter.ActualName = CrossoverParentsParameterName;
+            //            BeforeCrossoverOperator.ChildParameter.ActualName = CrossoverChildParameterName;
             instrumentedCrossover.BeforeExecutionOperators.Add(BeforeCrossoverOperator);
           }
           if (AfterCrossoverOperator != null) {
-            AfterCrossoverOperator.ParentsParameter.ActualName = CrossoverParentsParameterName;
-            AfterCrossoverOperator.ChildParameter.ActualName = CrossoverChildParameterName;
+            //            AfterCrossoverOperator.ParentsParameter.ActualName = CrossoverParentsParameterName;
+            //            AfterCrossoverOperator.ChildParameter.ActualName = CrossoverChildParameterName;
             instrumentedCrossover.AfterExecutionOperators.Add(AfterCrossoverOperator);
           }
@@ -194,9 +224,9 @@
         if (EnableManipulatorTracking.Value) {
           if (BeforeManipulatorOperator != null) {
-            BeforeManipulatorOperator.ChildParameter.ActualName = ManipulatorChildParameterName;
+            //            BeforeManipulatorOperator.ChildParameter.ActualName = ManipulatorChildParameterName;
             instrumentedManipulator.BeforeExecutionOperators.Add(BeforeManipulatorOperator);
           }
           if (AfterManipulatorOperator != null) {
-            AfterManipulatorOperator.ChildParameter.ActualName = ManipulatorChildParameterName;
+            //            AfterManipulatorOperator.ChildParameter.ActualName = ManipulatorChildParameterName;
             instrumentedManipulator.AfterExecutionOperators.Add(AfterManipulatorOperator);
           }
Index: /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/Fragment.cs
===================================================================
--- /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/Fragment.cs	(revision 10829)
+++ /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/Fragment.cs	(revision 10830)
@@ -5,5 +5,5 @@
 namespace HeuristicLab.EvolutionTracking {
   [StorableClass]
-  [Item("Fragment", "A fragment is an object that represents a piece of genetic information that was transferred from parent to child.")]
+  [Item("Fragment", "A fragment is an object that represents a piece of inherited genetic information.")]
   public class Fragment : Item, IFragment {
     [Storable]
@@ -20,4 +20,7 @@
     }
 
+    [StorableConstructor]
+    protected Fragment(bool deserializable) : base(deserializable) { }
+
     protected Fragment(Fragment original, Cloner cloner)
       : base(original, cloner) {
@@ -32,4 +35,6 @@
   }
 
+  [StorableClass]
+  [Item("Fragment", "A fragment is an object that represents a piece of inherited genetic information.")]
   public class Fragment<T> : Fragment, IFragment<T> where T : class {
     public new T Root {
@@ -37,4 +42,13 @@
       set { base.Root = value; }
     }
+
+    protected Fragment(Fragment original, Cloner cloner)
+      : base(original, cloner) {
+    }
+
+    [StorableConstructor]
+    private Fragment(bool deserializable) : base(deserializable) { }
+
+    public Fragment() { }
   }
 }
Index: /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/GenealogyGraph/GenealogyGraph.cs
===================================================================
--- /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/GenealogyGraph/GenealogyGraph.cs	(revision 10829)
+++ /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/GenealogyGraph/GenealogyGraph.cs	(revision 10830)
@@ -32,6 +32,6 @@
   public class GenealogyGraph : DirectedGraph, IGenealogyGraph {
     [Storable]
-    private Dictionary<double, LinkedList<IGenealogyGraphNode>> ranks; // use a linked list for fast insertion/removal
-    public Dictionary<double, LinkedList<IGenealogyGraphNode>> Ranks {
+    private Dictionary<double, List<IGenealogyGraphNode>> ranks; // use a linked list for fast insertion/removal
+    public Dictionary<double, List<IGenealogyGraphNode>> Ranks {
       get { return ranks; }
       set { ranks = value; }
@@ -49,11 +49,11 @@
     protected GenealogyGraph(bool deserializing) : base(deserializing) { }
     public GenealogyGraph() {
-      Ranks = new Dictionary<double, LinkedList<IGenealogyGraphNode>>();
+      Ranks = new Dictionary<double, List<IGenealogyGraphNode>>();
     }
     public override void AddVertex(IVertex vertex) {
       var node = (IGenealogyGraphNode)vertex;
       if (!Ranks.ContainsKey(node.Rank))
-        Ranks[node.Rank] = new LinkedList<IGenealogyGraphNode>();
-      Ranks[node.Rank].AddLast(node);
+        Ranks[node.Rank] = new List<IGenealogyGraphNode>();
+      Ranks[node.Rank].Add(node);
       base.AddVertex(vertex);
     }
@@ -89,6 +89,6 @@
     // members and properties
     [Storable]
-    private Dictionary<double, LinkedList<IGenealogyGraphNode>> ranks;
-    public Dictionary<double, LinkedList<IGenealogyGraphNode>> Ranks {
+    private Dictionary<double, List<IGenealogyGraphNode>> ranks;
+    public Dictionary<double, List<IGenealogyGraphNode>> Ranks {
       get { return ranks; }
       set { ranks = value; }
@@ -107,5 +107,5 @@
     protected GenealogyGraph(bool deserializing) : base(deserializing) { }
     public GenealogyGraph() {
-      Ranks = new Dictionary<double, LinkedList<IGenealogyGraphNode>>();
+      Ranks = new Dictionary<double, List<IGenealogyGraphNode>>();
     }
     // methods
@@ -113,7 +113,7 @@
       var node = (IGenealogyGraphNode<T>)vertex;
       if (!Ranks.ContainsKey(node.Rank)) {
-        Ranks[node.Rank] = new LinkedList<IGenealogyGraphNode>();
+        Ranks[node.Rank] = new List<IGenealogyGraphNode>();
       }
-      Ranks[node.Rank].AddLast(node);
+      Ranks[node.Rank].Add(node);
       base.AddVertex(vertex);
     }
Index: /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/GenealogyGraph/Interfaces/IGenealogyGraph.cs
===================================================================
--- /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/GenealogyGraph/Interfaces/IGenealogyGraph.cs	(revision 10829)
+++ /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/GenealogyGraph/Interfaces/IGenealogyGraph.cs	(revision 10830)
@@ -25,5 +25,5 @@
 namespace HeuristicLab.EvolutionTracking {
   public interface IGenealogyGraph : IDirectedGraph {
-    Dictionary<double, LinkedList<IGenealogyGraphNode>> Ranks { get; }
+    Dictionary<double, List<IGenealogyGraphNode>> Ranks { get; }
     new IEnumerable<IGenealogyGraphNode> Nodes { get; }
   }
Index: /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/Operators/AfterCrossoverOperator.cs
===================================================================
--- /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/Operators/AfterCrossoverOperator.cs	(revision 10829)
+++ /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/Operators/AfterCrossoverOperator.cs	(revision 10830)
@@ -29,8 +29,13 @@
   [Item("AfterCrossoverOperator", "A generic operator that can record genealogical relationships between crossover parents and children.")]
   public class AfterCrossoverOperator<T> : EvolutionTrackingOperator<T>, ICrossoverOperator<T> where T : class,IItem {
-    private const string DefaultParentsParameterName = "Parents";
-    private const string DefaultChildParameterName = "Child";
-    public IScopeTreeLookupParameter<T> ParentsParameter { get; set; }
-    public ILookupParameter<T> ChildParameter { get; set; }
+    private const string ParentsParameterName = "Parents";
+    private const string ChildParameterName = "Child";
+
+    public IScopeTreeLookupParameter<T> ParentsParameter {
+      get { return (IScopeTreeLookupParameter<T>)Parameters[ParentsParameterName]; }
+    }
+    public ILookupParameter<T> ChildParameter {
+      get { return (ILookupParameter<T>)Parameters[ChildParameterName]; }
+    }
 
     protected AfterCrossoverOperator(AfterCrossoverOperator<T> original, Cloner cloner)
@@ -42,8 +47,6 @@
 
     public AfterCrossoverOperator() {
-      ParentsParameter = new ScopeTreeLookupParameter<T>(DefaultParentsParameterName);
-      ChildParameter = new LookupParameter<T>(DefaultChildParameterName);
-      Parameters.Add(ParentsParameter);
-      Parameters.Add(ChildParameter);
+      Parameters.Add(new ScopeTreeLookupParameter<T>(ParentsParameterName));
+      Parameters.Add(new LookupParameter<T>(ChildParameterName));
     }
 
Index: /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/Operators/AfterManipulatorOperator.cs
===================================================================
--- /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/Operators/AfterManipulatorOperator.cs	(revision 10829)
+++ /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/Operators/AfterManipulatorOperator.cs	(revision 10830)
@@ -29,7 +29,9 @@
   [Item("AfterCrossoverOperator", "Performs an action after the crossover operator is applied.")]
   public class AfterManipulatorOperator<T> : EvolutionTrackingOperator<T>, IManipulatorOperator<T> where T : class,IItem {
+    private const string ChildParameterName = "Child";
 
-    private const string ChildParameterName = "Child";
-    public ILookupParameter<T> ChildParameter { get; set; }
+    public ILookupParameter<T> ChildParameter {
+      get { return (ILookupParameter<T>)Parameters[ChildParameterName]; }
+    }
 
     protected AfterManipulatorOperator(AfterManipulatorOperator<T> original, Cloner cloner)
@@ -41,6 +43,5 @@
 
     public AfterManipulatorOperator() {
-      ChildParameter = new LookupParameter<T>(ChildParameterName);
-      Parameters.Add(ChildParameter);
+      Parameters.Add(new LookupParameter<T>(ChildParameterName));
     }
 
Index: /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/Operators/BeforeCrossoverOperator.cs
===================================================================
--- /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/Operators/BeforeCrossoverOperator.cs	(revision 10829)
+++ /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/Operators/BeforeCrossoverOperator.cs	(revision 10830)
@@ -33,9 +33,13 @@
   [Item("AfterCrossoverOperator", "A generic operator that can record genealogical relationships between crossover parents and children.")]
   public class BeforeCrossoverOperator<T> : EvolutionTrackingOperator<T>, ICrossoverOperator<T> where T : class,IItem {
-    private const string defaultParentsParameterName = "Parents";
-    private const string defaultChildParameterName = "Child";
+    private const string ParentsParameterName = "Parents";
+    private const string ChildParameterName = "Child";
 
-    public IScopeTreeLookupParameter<T> ParentsParameter { get; set; }
-    public ILookupParameter<T> ChildParameter { get; set; }
+    public IScopeTreeLookupParameter<T> ParentsParameter {
+      get { return (IScopeTreeLookupParameter<T>)Parameters[ParentsParameterName]; }
+    }
+    public ILookupParameter<T> ChildParameter {
+      get { return (ILookupParameter<T>)Parameters[ChildParameterName]; }
+    }
 
     protected BeforeCrossoverOperator(BeforeCrossoverOperator<T> original, Cloner cloner)
@@ -47,8 +51,6 @@
 
     public BeforeCrossoverOperator() {
-      ParentsParameter = new ScopeTreeLookupParameter<T>(defaultParentsParameterName);
-      ChildParameter = new LookupParameter<T>(defaultChildParameterName);
-      Parameters.Add(ParentsParameter);
-      Parameters.Add(ChildParameter);
+      Parameters.Add(new ScopeTreeLookupParameter<T>(ParentsParameterName));
+      Parameters.Add(new LookupParameter<T>(ChildParameterName));
     }
 
Index: /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/Operators/BeforeManipulatorOperator.cs
===================================================================
--- /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/Operators/BeforeManipulatorOperator.cs	(revision 10829)
+++ /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/Operators/BeforeManipulatorOperator.cs	(revision 10830)
@@ -33,5 +33,8 @@
 
     private const string ChildParameterName = "Child";
-    public ILookupParameter<T> ChildParameter { get; set; }
+
+    public ILookupParameter<T> ChildParameter {
+      get { return (ILookupParameter<T>)Parameters[ChildParameterName]; }
+    }
 
     protected BeforeManipulatorOperator(BeforeManipulatorOperator<T> original, Cloner cloner)
@@ -43,6 +46,5 @@
 
     public BeforeManipulatorOperator() {
-      ChildParameter = new LookupParameter<T>(ChildParameterName);
-      Parameters.Add(ChildParameter);
+      Parameters.Add(new LookupParameter<T>(ChildParameterName));
     }
 
Index: /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/Operators/Interfaces/ICrossoverOperator.cs
===================================================================
--- /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/Operators/Interfaces/ICrossoverOperator.cs	(revision 10829)
+++ /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/Operators/Interfaces/ICrossoverOperator.cs	(revision 10830)
@@ -3,6 +3,6 @@
 namespace HeuristicLab.EvolutionTracking {
   public interface ICrossoverOperator<T> : IOperator where T : class,IItem {
-    IScopeTreeLookupParameter<T> ParentsParameter { get; set; }
-    ILookupParameter<T> ChildParameter { get; set; }
+    IScopeTreeLookupParameter<T> ParentsParameter { get; }
+    ILookupParameter<T> ChildParameter { get; }
   }
 }
Index: /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/Operators/Interfaces/IManipulatorOperator.cs
===================================================================
--- /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/Operators/Interfaces/IManipulatorOperator.cs	(revision 10829)
+++ /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/Operators/Interfaces/IManipulatorOperator.cs	(revision 10830)
@@ -3,5 +3,5 @@
 namespace HeuristicLab.EvolutionTracking {
   public interface IManipulatorOperator<T> : IOperator where T : class,IItem {
-    ILookupParameter<T> ChildParameter { get; set; }
+    ILookupParameter<T> ChildParameter { get; }
   }
 }
Index: /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/SymbolicDataAnalysisProblem.cs
===================================================================
--- /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/SymbolicDataAnalysisProblem.cs	(revision 10829)
+++ /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/SymbolicDataAnalysisProblem.cs	(revision 10830)
@@ -355,18 +355,20 @@
       // add tracking analyzer
       foreach (var op in operators.OfType<SymbolicDataAnalysisGenealogyAnalyzer>()) {
-        op.BeforeCrossoverOperator = new SymbolicDataAnalysisExpressionBeforeCrossoverOperator();
-        op.AfterCrossoverOperator = new SymbolicDataAnalysisExpressionAfterCrossoverOperator();
-        op.BeforeManipulatorOperator = new SymbolicDataAnalysisExpressionBeforeManipulatorOperator();
-        op.AfterManipulatorOperator = new SymbolicDataAnalysisExpressionAfterManipulatorOperator();
+        op.BeforeCrossoverOperatorParameter.ActualValue = new SymbolicDataAnalysisExpressionBeforeCrossoverOperator();
+        op.AfterCrossoverOperatorParameter.ActualValue = new SymbolicDataAnalysisExpressionAfterCrossoverOperator();
+        op.BeforeManipulatorOperatorParameter.ActualValue = new SymbolicDataAnalysisExpressionBeforeManipulatorOperator();
+        op.AfterManipulatorOperatorParameter.ActualValue = new SymbolicDataAnalysisExpressionAfterManipulatorOperator();
         // get crossover parameter names
         var crossover = operators.OfType<ISymbolicExpressionTreeCrossover>().FirstOrDefault();
         if (crossover != null) {
-          op.CrossoverParentsParameterName = crossover.ParentsParameter.Name;
-          op.CrossoverChildParameterName = crossover.ChildParameter.Name;
-        }
-        // get munipulator parameter names
+          op.BeforeCrossoverOperator.ParentsParameter.ActualName = crossover.ParentsParameter.Name;
+          op.AfterCrossoverOperator.ParentsParameter.ActualName = crossover.ParentsParameter.Name;
+          op.BeforeCrossoverOperator.ChildParameter.ActualName = crossover.ChildParameter.Name;
+          op.AfterCrossoverOperator.ChildParameter.ActualName = crossover.ChildParameter.Name;
+        }
+        // get manipulator parameter names
         var manipulator = operators.OfType<ISymbolicExpressionTreeManipulator>().FirstOrDefault();
         if (manipulator != null) {
-          op.ManipulatorChildParameterName = manipulator.SymbolicExpressionTreeParameter.Name;
+          op.BeforeManipulatorOperator.ChildParameter.ActualName = manipulator.SymbolicExpressionTreeParameter.Name;
         }
         var creator = operators.OfType<ISymbolicExpressionTreeCreator>().FirstOrDefault();
Index: /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.TravelingSalesman/3.3/TravelingSalesmanProblem.cs
===================================================================
--- /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.TravelingSalesman/3.3/TravelingSalesmanProblem.cs	(revision 10829)
+++ /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.TravelingSalesman/3.3/TravelingSalesmanProblem.cs	(revision 10830)
@@ -387,12 +387,12 @@
       if (TSPGenealogyAnalyzer != null) {
         if (TSPCrossover != null) {
-          TSPGenealogyAnalyzer.BeforeCrossoverOperator = new BeforeCrossoverOperator<Permutation>();
-          TSPGenealogyAnalyzer.AfterCrossoverOperator = new AfterCrossoverOperator<Permutation>();
+          TSPGenealogyAnalyzer.BeforeCrossoverOperatorParameter.ActualValue = new BeforeCrossoverOperator<Permutation>();
+          TSPGenealogyAnalyzer.AfterCrossoverOperatorParameter.ActualValue = new AfterCrossoverOperator<Permutation>();
           TSPGenealogyAnalyzer.CrossoverParentsParameterName = TSPCrossover.ParentsParameter.Name;
           TSPGenealogyAnalyzer.CrossoverChildParameterName = TSPCrossover.ChildParameter.Name;
         }
         if (TSPManipulator != null) {
-          TSPGenealogyAnalyzer.BeforeManipulatorOperator = new BeforeManipulatorOperator<Permutation>();
-          TSPGenealogyAnalyzer.AfterManipulatorOperator = new AfterManipulatorOperator<Permutation>();
+          TSPGenealogyAnalyzer.BeforeManipulatorOperatorParameter.ActualValue = new BeforeManipulatorOperator<Permutation>();
+          TSPGenealogyAnalyzer.AfterManipulatorOperatorParameter.ActualValue = new AfterManipulatorOperator<Permutation>();
           TSPGenealogyAnalyzer.ManipulatorChildParameterName = TSPManipulator.PermutationParameter.Name;
         }
