Index: branches/gp-crossover/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Crossovers/MultiSymbolicDataAnalysisExpressionCrossover.cs
===================================================================
--- branches/gp-crossover/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Crossovers/MultiSymbolicDataAnalysisExpressionCrossover.cs	(revision 7302)
+++ branches/gp-crossover/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Crossovers/MultiSymbolicDataAnalysisExpressionCrossover.cs	(revision 7303)
@@ -37,6 +37,6 @@
   public class MultiSymbolicDataAnalysisExpressionCrossover<T> : StochasticMultiBranch<ISymbolicDataAnalysisExpressionCrossover<T>>,
     ISymbolicDataAnalysisExpressionCrossover<T>,
-    ISymbolicExpressionTreeSizeConstraintOperator, 
-    ISymbolicExpressionTreeGrammarBasedOperator where T: class, IDataAnalysisProblemData {
+    ISymbolicExpressionTreeSizeConstraintOperator,
+    ISymbolicExpressionTreeGrammarBasedOperator where T : class, IDataAnalysisProblemData {
     private const string MaximumSymbolicExpressionTreeLengthParameterName = "MaximumSymbolicExpressionTreeLength";
     private const string MaximumSymbolicExpressionTreeDepthParameterName = "MaximumSymbolicExpressionTreeDepth";
@@ -49,5 +49,5 @@
 
     public override bool CanChangeName {
-      get { return false; }
+      get { return true; }
     }
     protected override bool CreateChildOperation {
@@ -97,16 +97,14 @@
       Parameters.Add(new LookupParameter<ISymbolicExpressionTree>(ChildParameterName, "The child symbolic expression tree resulting from the crossover."));
 
-      var list = new List<ISymbolicDataAnalysisExpressionCrossover<T>>();
-      foreach (Type type in ApplicationManager.Manager.GetTypes(typeof(ISymbolicDataAnalysisExpressionCrossover<T>))) {
-        if (this.GetType().Assembly != type.Assembly) continue;
-        if (typeof(IMultiOperator<ISymbolicDataAnalysisExpressionCrossover<T>>).IsAssignableFrom(type))  
-          continue;
-        list.Add((ISymbolicDataAnalysisExpressionCrossover<T>)Activator.CreateInstance(type));
-      }
+      var list = (from type in ApplicationManager.Manager.GetTypes(typeof(ISymbolicDataAnalysisExpressionCrossover<T>))
+                  where this.GetType().Assembly == type.Assembly
+                  where !typeof(IMultiOperator<ISymbolicDataAnalysisExpressionCrossover<T>>).IsAssignableFrom(type)
+                  select (ISymbolicDataAnalysisExpressionCrossover<T>)Activator.CreateInstance(type)).ToList();
+
       var checkedItemList = new CheckedItemList<ISymbolicDataAnalysisExpressionCrossover<T>>();
       checkedItemList.AddRange(list.OrderBy(op => op.Name));
       Operators = checkedItemList.AsReadOnly();
       Operators_ItemsAdded(this, new CollectionItemsChangedEventArgs<IndexedItem<ISymbolicDataAnalysisExpressionCrossover<T>>>(Operators.CheckedItems));
-
+      Name = "MultiCrossover";
     }
 
Index: branches/gp-crossover/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Crossovers/SymbolicDataAnalysisExpressionContextAwareCrossover.cs
===================================================================
--- branches/gp-crossover/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Crossovers/SymbolicDataAnalysisExpressionContextAwareCrossover.cs	(revision 7302)
+++ branches/gp-crossover/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Crossovers/SymbolicDataAnalysisExpressionContextAwareCrossover.cs	(revision 7303)
@@ -39,4 +39,5 @@
     public SymbolicDataAnalysisExpressionContextAwareCrossover()
       : base() {
+      Name = "ContextAwareCrossover";
     }
     public override IDeepCloneable Clone(Cloner cloner) {
Index: branches/gp-crossover/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Crossovers/SymbolicDataAnalysisExpressionCrossover.cs
===================================================================
--- branches/gp-crossover/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Crossovers/SymbolicDataAnalysisExpressionCrossover.cs	(revision 7302)
+++ branches/gp-crossover/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Crossovers/SymbolicDataAnalysisExpressionCrossover.cs	(revision 7303)
@@ -43,5 +43,5 @@
     private const string MaximumSymbolicExpressionTreeDepthParameterName = "MaximumSymbolicExpressionTreeDepth";
 
-    public override bool CanChangeName { get { return false; } }
+    public override bool CanChangeName { get { return true; } }
 
     #region Parameter properties
Index: branches/gp-crossover/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Crossovers/SymbolicDataAnalysisExpressionDepthConstrainedCrossover.cs
===================================================================
--- branches/gp-crossover/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Crossovers/SymbolicDataAnalysisExpressionDepthConstrainedCrossover.cs	(revision 7302)
+++ branches/gp-crossover/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Crossovers/SymbolicDataAnalysisExpressionDepthConstrainedCrossover.cs	(revision 7303)
@@ -60,4 +60,5 @@
       DepthRangeParameter.ValidValues.Add(new StringValue(Enum.GetName(typeof(Ranges), Ranges.Standard)));
       DepthRangeParameter.ValidValues.Add(new StringValue(Enum.GetName(typeof(Ranges), Ranges.Lowlevel)));
+      Name = "DepthConstrainedCrossover";
     }
     public override IDeepCloneable Clone(Cloner cloner) { return new SymbolicDataAnalysisExpressionDepthConstrainedCrossover<T>(this, cloner); }
@@ -88,16 +89,17 @@
       int depth = parent0.Root.GetDepth();
       var depthRange = new DoubleRange();
+      const int depthOffset = 2; // skip the first 2 levels (root + startNode)
       switch ((int)Enum.Parse(typeof(Ranges), mode)) {
         case (int)Ranges.HighLevel:
-          depthRange.Start = 0;
-          depthRange.End = Math.Round(depth * 0.25);
+          depthRange.Start = depthOffset; // skip the first 2 levels (root + startNode)
+          depthRange.End = depthRange.Start + Math.Round(depth * 0.25);
           break;
         case (int)Ranges.Standard:
-          depthRange.Start = Math.Round(depth * 0.25);
-          depthRange.End = Math.Round(depth * 0.75);
+          depthRange.Start = depthOffset + Math.Round(depth * 0.25);
+          depthRange.End = depthRange.Start + Math.Round(depth * 0.5);
           break;
         case (int)Ranges.Lowlevel:
-          depthRange.Start = Math.Round(depth * 0.75);
-          depthRange.End = depth;
+          depthRange.Start = depthOffset + Math.Round(depth * 0.75);
+          depthRange.End = Math.Max(depthRange.Start, depth);
           break;
       }
@@ -110,4 +112,8 @@
                                     select new CutPoint(n, s));
       });
+
+      if (crossoverPoints0.Count == 0)
+        throw new Exception("No crossover points available in the first parent");
+
       CutPoint crossoverPoint0 = crossoverPoints0.SelectRandom(random);
       int level = parent0.Root.GetBranchLevel(crossoverPoint0.Child);
Index: branches/gp-crossover/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Crossovers/SymbolicDataAnalysisExpressionDeterministicBestCrossover.cs
===================================================================
--- branches/gp-crossover/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Crossovers/SymbolicDataAnalysisExpressionDeterministicBestCrossover.cs	(revision 7302)
+++ branches/gp-crossover/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Crossovers/SymbolicDataAnalysisExpressionDeterministicBestCrossover.cs	(revision 7303)
@@ -39,4 +39,5 @@
     public SymbolicDataAnalysisExpressionDeterministicBestCrossover()
       : base() {
+      Name = "DeterministicBestCrossover";
     }
     public override IDeepCloneable Clone(Cloner cloner) {
Index: branches/gp-crossover/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Crossovers/SymbolicDataAnalysisExpressionProbabilisticFunctionalCrossover.cs
===================================================================
--- branches/gp-crossover/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Crossovers/SymbolicDataAnalysisExpressionProbabilisticFunctionalCrossover.cs	(revision 7302)
+++ branches/gp-crossover/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Crossovers/SymbolicDataAnalysisExpressionProbabilisticFunctionalCrossover.cs	(revision 7303)
@@ -36,5 +36,8 @@
     private SymbolicDataAnalysisExpressionProbabilisticFunctionalCrossover(SymbolicDataAnalysisExpressionCrossover<T> original, Cloner cloner)
       : base(original, cloner) { }
-    public SymbolicDataAnalysisExpressionProbabilisticFunctionalCrossover() : base() { }
+    public SymbolicDataAnalysisExpressionProbabilisticFunctionalCrossover()
+      : base() {
+      Name = "ProbabilisticFunctionalCrossover";
+    }
     public override IDeepCloneable Clone(Cloner cloner) { return new SymbolicDataAnalysisExpressionProbabilisticFunctionalCrossover<T>(this, cloner); }
 
Index: branches/gp-crossover/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Crossovers/SymbolicDataAnalysisExpressionSemanticSimilarityCrossover.cs
===================================================================
--- branches/gp-crossover/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Crossovers/SymbolicDataAnalysisExpressionSemanticSimilarityCrossover.cs	(revision 7302)
+++ branches/gp-crossover/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Crossovers/SymbolicDataAnalysisExpressionSemanticSimilarityCrossover.cs	(revision 7303)
@@ -53,4 +53,5 @@
       : base() {
       Parameters.Add(new ValueLookupParameter<DoubleRange>(SemanticSimilarityRangeParameterName, "Semantic similarity interval.", new DoubleRange(0.0001, 10)));
+      Name = "SemanticSimilarityCrossover";
     }
     public override IDeepCloneable Clone(Cloner cloner) { return new SymbolicDataAnalysisExpressionSemanticSimilarityCrossover<T>(this, cloner); }
Index: branches/gp-crossover/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Crossovers/SymbolicDataAnalysisExpressionSizefairCrossover.cs
===================================================================
--- branches/gp-crossover/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Crossovers/SymbolicDataAnalysisExpressionSizefairCrossover.cs	(revision 7302)
+++ branches/gp-crossover/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Crossovers/SymbolicDataAnalysisExpressionSizefairCrossover.cs	(revision 7303)
@@ -12,7 +12,12 @@
     public override IDeepCloneable Clone(Cloner cloner) { return new SymbolicDataAnalysisExpressionSizefairCrossover<T>(this, cloner); }
 
+    public override bool CanChangeName {
+      get { return true; }
+    }
+
     public SymbolicDataAnalysisExpressionSizefairCrossover()
       : base() {
       SymbolicDataAnalysisEvaluationPartitionParameter.Hidden = true;
+      Name = "SizeFairCrossover";
     }
   }
