Index: branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Views-3.4.csproj
===================================================================
--- branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Views-3.4.csproj	(revision 11927)
+++ branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Views-3.4.csproj	(revision 12017)
@@ -367,4 +367,7 @@
       <SubType>Designer</SubType>
     </EmbeddedResource>
+    <EmbeddedResource Include="Tracking\SymbolicDataAnalysisGenealogyGraphView.resx">
+      <DependentUpon>SymbolicDataAnalysisGenealogyGraphView.cs</DependentUpon>
+    </EmbeddedResource>
   </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
Index: branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/Tracking/SymbolicDataAnalysisGenealogyGraphView.Designer.cs
===================================================================
--- branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/Tracking/SymbolicDataAnalysisGenealogyGraphView.Designer.cs	(revision 11927)
+++ branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/Tracking/SymbolicDataAnalysisGenealogyGraphView.Designer.cs	(revision 12017)
@@ -63,8 +63,14 @@
       // splitContainer
       // 
+      this.splitContainer.Size = new System.Drawing.Size(1241, 700);
+      this.splitContainer.SplitterDistance = 617;
+      // 
+      // viewHost
+      // 
+      this.viewHost.Size = new System.Drawing.Size(617, 697);
       // 
       // genealogyGraphChart
       // 
-      this.genealogyGraphChart.Size = new System.Drawing.Size(692, 697);
+      this.genealogyGraphChart.Size = new System.Drawing.Size(614, 697);
       // 
       // groupBox1
Index: branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/Tracking/SymbolicDataAnalysisGenealogyGraphView.cs
===================================================================
--- branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/Tracking/SymbolicDataAnalysisGenealogyGraphView.cs	(revision 11927)
+++ branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/Tracking/SymbolicDataAnalysisGenealogyGraphView.cs	(revision 12017)
@@ -39,4 +39,18 @@
     private readonly ISymbolicExpressionTreeNodeEqualityComparer comparer;
 
+    private ISymbolicExpressionTreeNode selectedSubtree;
+    private ISymbolicExpressionTreeNode SelectedSubtree {
+      get {
+        return selectedSubtree;
+      }
+      set {
+        if (selectedSubtree == value) return;
+        selectedSubtree = value;
+        ClonedSubtree = (ISymbolicExpressionTreeNode)selectedSubtree.Clone();
+      }
+    }
+
+    private ISymbolicExpressionTreeNode ClonedSubtree { get; set; }
+
     public SymbolicDataAnalysisGenealogyGraphView() {
       InitializeComponent();
@@ -100,5 +114,5 @@
           var nodes = graphNode.Data.IterateNodesPrefix().ToList();
           treeChart_HighlightSubtree(nodes[td.LastSubtreeIndex], Color.Orange);
-          treeChart_HighlightSubtree(nodes[td.LastFragmentIndex], Color.DodgerBlue);
+          treeChart_HighlightSubtree(nodes[td.LastFragmentIndex], null, Color.PowderBlue);
         }
       }
@@ -114,26 +128,45 @@
       bool trace = genealogyGraphChart.TraceFragments; // check whether we are in 'trace' or 'match' mode
 
-      if (trace) {
-        // perform fragment tracing
-        var graphNode = (IGenealogyGraphNode<ISymbolicExpressionTree>)genealogyGraphChart.SelectedGraphNode;
-        var subtreeIndex = graphNode.Data.IterateNodesPrefix().ToList().IndexOf(subtree);
-        var traceGraph = TraceCalculator.TraceSubtree(graphNode, subtreeIndex);
-        if (traceGraph.Vertices.Any()) {
-          genealogyGraphChart.UpdateEnabled = false;
-          genealogyGraphChart.ClearArcs();
-          var genealogyNodes = traceGraph.Vertices.Select(v => Content.GetByContent(v.Data));
-          genealogyGraphChart.HighlightNodes(genealogyNodes, Color.Black, false);
-          genealogyGraphChart.UpdateEnabled = true;
-          genealogyGraphChart.EnforceUpdate();
-          MainFormManager.MainForm.ShowContent(traceGraph); // display the fragment graph on the screen
-        }
-      } else {
-        // perform matching like it was done before
-        // currently there is no possibility to specify the subtree matching criteria
-        var trees = Content.Vertices.Select(x => x.Data);
-        var matchingTrees = trees.Where(x => x.Root.ContainsSubtree(subtree, comparer));
-
-        var matchingVertices = matchingTrees.Select(x => Content.GetByContent(x));
-        graphChart_HighlightMatchingVertices(matchingVertices);
+      switch (args.Button) {
+        case MouseButtons.Left:
+          SelectedSubtree = subtree;
+          if (trace) {
+            // perform fragment tracing
+            var graphNode = (IGenealogyGraphNode<ISymbolicExpressionTree>)genealogyGraphChart.SelectedGraphNode;
+            var subtreeIndex = graphNode.Data.IterateNodesPrefix().ToList().IndexOf(subtree);
+            var traceGraph = TraceCalculator.TraceSubtree(graphNode, subtreeIndex);
+            if (traceGraph.Vertices.Any()) {
+              genealogyGraphChart.UpdateEnabled = false;
+              genealogyGraphChart.ClearArcs();
+              var genealogyNodes = traceGraph.Vertices.Select(v => Content.GetByContent(v.Data));
+              genealogyGraphChart.HighlightNodes(genealogyNodes, Color.Black, false);
+              genealogyGraphChart.UpdateEnabled = true;
+              genealogyGraphChart.EnforceUpdate();
+              MainFormManager.MainForm.ShowContent(traceGraph); // display the fragment graph on the screen
+            }
+          } else {
+            // perform matching like it was done before
+            // currently there is no possibility to specify the subtree matching criteria
+            var trees = Content.Vertices.Select(x => x.Data);
+            var matchingTrees = trees.Where(x => x.Root.ContainsSubtree(subtree, comparer));
+
+            var matchingVertices = matchingTrees.Select(x => Content.GetByContent(x));
+            graphChart_HighlightMatchingVertices(matchingVertices);
+          }
+          break;
+        case MouseButtons.Middle:
+          var index = SelectedSubtree.IterateNodesPrefix().ToList().IndexOf(subtree);
+          if (index > 0) {
+            var s = ClonedSubtree.NodeAt(index);
+            s.Parent.RemoveSubtree(s.Parent.IndexOfSubtree(s));
+
+            var trees = Content.Vertices.Select(x => x.Data);
+            var matchingTrees = trees.Where(x => x.Root.ContainsSubtree(ClonedSubtree, comparer));
+
+            var matchingVertices = matchingTrees.Select(x => Content.GetByContent(x));
+            treeChart_HighlightSubtree(subtree, Color.Black, Color.White);
+            graphChart_HighlightMatchingVertices(matchingVertices);
+          }
+          break;
       }
     }
@@ -158,13 +191,15 @@
     }
 
-    private void treeChart_HighlightSubtree(ISymbolicExpressionTreeNode subtree, Color? color = null) {
-      Color myColor = color ?? Color.RoyalBlue;
+    private void treeChart_HighlightSubtree(ISymbolicExpressionTreeNode subtree, Color? lineColor = null, Color? fillColor = null) {
+      var lc = lineColor ?? Color.RoyalBlue;
+      var fc = fillColor ?? Color.White;
       foreach (var s in subtree.IterateNodesPrefix()) {
         var visualNode = SymbolicExpressionTreeChart.GetVisualSymbolicExpressionTreeNode(s);
-        visualNode.LineColor = myColor;
+        visualNode.LineColor = lc;
+        visualNode.FillColor = fc;
 
         foreach (var c in s.Subtrees) {
           var visualArc = SymbolicExpressionTreeChart.GetVisualSymbolicExpressionTreeNodeConnection(s, c);
-          visualArc.LineColor = myColor;
+          visualArc.LineColor = lc;
         }
       }
