Index: branches/HeuristicLab.EvolutionaryTracking/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Analyzers/SymbolicExpressionTreeLengthAnalyzer.cs
===================================================================
--- branches/HeuristicLab.EvolutionaryTracking/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Analyzers/SymbolicExpressionTreeLengthAnalyzer.cs	(revision 9083)
+++ branches/HeuristicLab.EvolutionaryTracking/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Analyzers/SymbolicExpressionTreeLengthAnalyzer.cs	(revision 9237)
@@ -71,5 +71,4 @@
     }
     #endregion
-
     #region Properties
     public bool EnabledByDefault {
Index: branches/HeuristicLab.EvolutionaryTracking/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4.csproj
===================================================================
--- branches/HeuristicLab.EvolutionaryTracking/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4.csproj	(revision 9083)
+++ branches/HeuristicLab.EvolutionaryTracking/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4.csproj	(revision 9237)
@@ -171,4 +171,6 @@
     <Compile Include="Interfaces\IFragment.cs" />
     <Compile Include="Interfaces\Operators\ITracingSymbolicExpressionTreeOperator.cs" />
+    <Compile Include="Manipulators\RemoveBranchManipulation.cs" />
+    <Compile Include="SymbolicExpressionTreeTextRenderer.cs" />
     <Compile Include="TracingSymbolicExpressionTreeOperator.cs" />
     <Compile Include="Creators\TracingSymbolicExpressionTreeCreator.cs" />
Index: branches/HeuristicLab.EvolutionaryTracking/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Manipulators/ChangeNodeTypeManipulation.cs
===================================================================
--- branches/HeuristicLab.EvolutionaryTracking/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Manipulators/ChangeNodeTypeManipulation.cs	(revision 9083)
+++ branches/HeuristicLab.EvolutionaryTracking/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Manipulators/ChangeNodeTypeManipulation.cs	(revision 9237)
@@ -20,9 +20,9 @@
 #endregion
 
+using System.Collections.Generic;
 using System.Linq;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using System.Collections.Generic;
 
 namespace HeuristicLab.Encodings.SymbolicExpressionTreeEncoding {
Index: branches/HeuristicLab.EvolutionaryTracking/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Manipulators/RemoveBranchManipulation.cs
===================================================================
--- branches/HeuristicLab.EvolutionaryTracking/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Manipulators/RemoveBranchManipulation.cs	(revision 9083)
+++ branches/HeuristicLab.EvolutionaryTracking/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Manipulators/RemoveBranchManipulation.cs	(revision 9237)
@@ -31,5 +31,5 @@
   [StorableClass]
   [Item("RemoveBranchManipulation", "Removes a random sub-tree of the input tree and fixes the tree by generating random subtrees if necessary..")]
-  public sealed class RemoveBranchManipulation : SymbolicExpressionTreeManipulator, ISymbolicExpressionTreeSizeConstraintOperator {
+  public sealed class RemoveBranchManipulation : TracingSymbolicExpressionTreeManipulator, ISymbolicExpressionTreeSizeConstraintOperator {
     private const int MAX_TRIES = 100;
     private const string MaximumSymbolicExpressionTreeLengthParameterName = "MaximumSymbolicExpressionTreeLength";
Index: branches/HeuristicLab.EvolutionaryTracking/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Manipulators/ReplaceBranchManipulation.cs
===================================================================
--- branches/HeuristicLab.EvolutionaryTracking/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Manipulators/ReplaceBranchManipulation.cs	(revision 9083)
+++ branches/HeuristicLab.EvolutionaryTracking/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Manipulators/ReplaceBranchManipulation.cs	(revision 9237)
@@ -20,4 +20,5 @@
 #endregion
 
+using System.Collections.Generic;
 using System.Linq;
 using HeuristicLab.Common;
@@ -26,5 +27,4 @@
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using System.Collections.Generic;
 
 namespace HeuristicLab.Encodings.SymbolicExpressionTreeEncoding {
Index: branches/HeuristicLab.EvolutionaryTracking/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Manipulators/TracingSymbolicExpressionTreeManipulator.cs
===================================================================
--- branches/HeuristicLab.EvolutionaryTracking/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Manipulators/TracingSymbolicExpressionTreeManipulator.cs	(revision 9083)
+++ branches/HeuristicLab.EvolutionaryTracking/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Manipulators/TracingSymbolicExpressionTreeManipulator.cs	(revision 9237)
@@ -65,4 +65,5 @@
       manipulationTypes.Add(typeof(ChangeNodeTypeManipulation), ManipulationType.ChangeNodeTypeManipulation);
       manipulationTypes.Add(typeof(ReplaceBranchManipulation), ManipulationType.ReplaceBranchManipulation);
+      manipulationTypes.Add(typeof(RemoveBranchManipulation), ManipulationType.RemoveBranchManipulation);
     }
 
@@ -95,45 +96,63 @@
       }
 
-      var concreteType = this.GetType();
+      //      var concreteType = this.GetType();
 
-      if (!manipulationTypes.ContainsKey(concreteType))
-        throw new Exception(this.Name + ": Unknown manipulation type (key not found in the dictionary).");
+      //      if (!manipulationTypes.ContainsKey(concreteType))
+      //        throw new Exception(this.Name + ": Unknown manipulation type (key not found in the dictionary).");
 
-      var nodes0 = tree.IterateNodesBreadth().ToList(); // list of nodes before manipulation
+      //      var nodes0 = tree.IterateNodesBreadth().ToList(); // list of nodes before manipulation
+      //      Manipulate(RandomParameter.ActualValue, tree);
+      //      var nodes1 = tree.IterateNodesBreadth().ToList(); // list of nodes after manipulation
+
+      var comparer = SymbolicExpressionTreeNodeComparer;
+      var clonedTree = (ISymbolicExpressionTree)tree.Clone();
+      var nodes0 = clonedTree.IterateNodesBreadth().ToList();
       Manipulate(RandomParameter.ActualValue, tree);
-      var nodes1 = tree.IterateNodesBreadth().ToList(); // list of nodes after manipulation
+      var nodes1 = tree.IterateNodesBreadth().ToList();
+
       int min = Math.Min(nodes0.Count, nodes1.Count);
+      int i = 0; while (i != min && comparer.Equals(nodes0[i], nodes1[i])) ++i;
+      fragment = new Fragment(i == min ? null : nodes1[i], 1);
+      GlobalFragmentMap[tree] = fragment;
 
-      switch (manipulationTypes[concreteType]) {
-        case ManipulationType.FullTreeShaker: {
-            // the FullTreeShaker changes the local parameters of all the nodes in the tree
-            // therefore, the whole tree is considered to be the fragment
-            fragment = new Fragment(tree.Root.GetSubtree(0).GetSubtree(0));
-            break;
-          }
-        case ManipulationType.OnePointShaker: {
-            var original = (ISymbolicExpressionTree)GlobalCloneMap[tree];
-            var nodesOriginal = original.IterateNodesBreadth().ToList();
-            int i = 0;
-            var comparer = SymbolicExpressionTreeNodeComparer;
-            while (i != min && comparer.Equals(nodesOriginal[i], nodes1[i])) ++i;
-            fragment = new Fragment(i == min ? null : nodes1[i], 1);
-            break;
-          }
-        case ManipulationType.ChangeNodeTypeManipulation: {
-            int i = 0;
-            while (i != min && ReferenceEquals(nodes0[i], nodes1[i])) ++i;
-            fragment = new Fragment(i == min ? null : nodes1[i], 1);
-            break;
-          }
-        case ManipulationType.ReplaceBranchManipulation: {
-            int i = 0;
-            while (i != min && ReferenceEquals(nodes0[i], nodes1[i])) ++i;
-            fragment = new Fragment(i == min ? null : nodes1[i]);
-            break;
-          }
-        default:
-          throw new Exception(Name + ": Unknown manipulaton type.");
-      }
+
+
+      //      switch (manipulationTypes[concreteType]) {
+      //        case ManipulationType.FullTreeShaker: {
+      //            // the FullTreeShaker changes the local parameters of all the nodes in the tree
+      //            // therefore, the whole tree is considered to be the fragment
+      //            fragment = new Fragment(tree.Root.GetSubtree(0).GetSubtree(0));
+      //            break;
+      //          }
+      //        case ManipulationType.OnePointShaker: {
+      //            var original = (ISymbolicExpressionTree)GlobalCloneMap[tree];
+      //            var nodesOriginal = original.IterateNodesBreadth().ToList();
+      //            int i = 0;
+      //            var comparer = SymbolicExpressionTreeNodeComparer;
+      //            while (i != min && comparer.Equals(nodesOriginal[i], nodes1[i])) ++i;
+      //            fragment = new Fragment(i == min ? null : nodes1[i], 1);
+      //            break;
+      //          }
+      //        case ManipulationType.ChangeNodeTypeManipulation: {
+      //            int i = 0;
+      //            while (i != min && ReferenceEquals(nodes0[i], nodes1[i])) ++i;
+      //            fragment = new Fragment(i == min ? null : nodes1[i], 1);
+      //            break;
+      //          }
+      //        case ManipulationType.ReplaceBranchManipulation: {
+      //            int i = 0;
+      //            while (i != min && ReferenceEquals(nodes0[i], nodes1[i])) ++i;
+      //            fragment = new Fragment(i == min ? null : nodes1[i]);
+      //            break;
+      //          }
+      //        case ManipulationType.RemoveBranchManipulation: {
+      //            int i = 0;
+      //            while (i != min && ReferenceEquals(nodes0[i], nodes1[i])) ++i;
+      //            fragment = new Fragment(i == min ? null : nodes1[i]);
+      //            break;
+      //          }
+      //        default:
+      //          throw new Exception(Name + ": Unknown manipulaton type.");
+      //      }
 
       GlobalFragmentMap[tree] = fragment;
@@ -148,4 +167,5 @@
       public const byte ChangeNodeTypeManipulation = 3;
       public const byte ReplaceBranchManipulation = 4;
+      public const byte RemoveBranchManipulation = 5;
     }
   }
Index: branches/HeuristicLab.EvolutionaryTracking/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Plugin.cs
===================================================================
--- branches/HeuristicLab.EvolutionaryTracking/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Plugin.cs	(revision 9083)
+++ branches/HeuristicLab.EvolutionaryTracking/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Plugin.cs	(revision 9237)
@@ -23,5 +23,5 @@
 
 namespace HeuristicLab.Encodings.SymbolicExpressionTreeEncoding {
-  [Plugin("HeuristicLab.Encodings.SymbolicExpressionTreeEncoding","Provides operators and related classes for the symbolic expression tree encoding.", "3.4.3.8557")]
+  [Plugin("HeuristicLab.Encodings.SymbolicExpressionTreeEncoding","Provides operators and related classes for the symbolic expression tree encoding.", "3.4.3.9083")]
   [PluginFile("HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4.dll", PluginFileType.Assembly)]
   [PluginDependency("HeuristicLab.Analysis", "3.3")]
Index: branches/HeuristicLab.EvolutionaryTracking/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/TracingSymbolicExpressionTreeOperator.cs
===================================================================
--- branches/HeuristicLab.EvolutionaryTracking/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/TracingSymbolicExpressionTreeOperator.cs	(revision 9083)
+++ branches/HeuristicLab.EvolutionaryTracking/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/TracingSymbolicExpressionTreeOperator.cs	(revision 9237)
@@ -67,4 +67,6 @@
       if (!Parameters.ContainsKey(GlobalGeneticExchangeMapParameterName))
         Parameters.Add(new LookupParameter<GeneticExchangeMapType>(GlobalGeneticExchangeMapParameterName, "A global list of genetic exchange transactions."));
+      if (!Parameters.ContainsKey(SymbolicExpressionTreeNodeComparerParameterName))
+        Parameters.Add(new ValueParameter<ISymbolicExpressionTreeNodeComparer>(SymbolicExpressionTreeNodeComparerParameterName, SymbolicExpressionTreeNodeComparerParameterDescription));
     }
 
