Index: branches/HeuristicLab.EvolutionTracking/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views/3.4/SymbolicExpressionTreeChart.cs
===================================================================
--- branches/HeuristicLab.EvolutionTracking/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views/3.4/SymbolicExpressionTreeChart.cs	(revision 10347)
+++ branches/HeuristicLab.EvolutionTracking/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views/3.4/SymbolicExpressionTreeChart.cs	(revision 10456)
@@ -51,5 +51,5 @@
       this.lineColor = Color.Black;
       this.backgroundColor = Color.White;
-      this.textFont = new Font("Times New Roman", 14);
+      this.textFont = new Font(FontFamily.GenericSerif, 14, GraphicsUnit.Pixel);
       layoutEngine = new ReingoldTilfordLayoutEngine<ISymbolicExpressionTreeNode>();
       layoutAdapter = new SymbolicExpressionTreeLayoutAdapter();
@@ -278,5 +278,4 @@
 
     #region methods for painting the symbolic expression tree
-
     private void DrawFunctionTree(ISymbolicExpressionTree symbolicExpressionTree, Graphics graphics, int preferredWidth, int preferredHeight, int minHDistance, int minVDistance) {
       var layoutNodes = layoutAdapter.Convert(symbolicExpressionTree).ToList();
Index: branches/HeuristicLab.EvolutionTracking/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/ArchitectureManipulators/MultiSymbolicExpressionTreeArchitectureManipulator.cs
===================================================================
--- branches/HeuristicLab.EvolutionTracking/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/ArchitectureManipulators/MultiSymbolicExpressionTreeArchitectureManipulator.cs	(revision 10347)
+++ branches/HeuristicLab.EvolutionTracking/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/ArchitectureManipulators/MultiSymbolicExpressionTreeArchitectureManipulator.cs	(revision 10456)
@@ -106,4 +106,6 @@
       Operators = checkedItemList.AsReadOnly();
       Operators_ItemsAdded(this, new CollectionItemsChangedEventArgs<IndexedItem<ISymbolicExpressionTreeManipulator>>(Operators.CheckedItems));
+
+      SelectedOperatorParameter.ActualName = "SelectedManipulationOperator";
     }
 
Index: branches/HeuristicLab.EvolutionTracking/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Formatters/SymbolicExpressionTreeLatexFormatter.cs
===================================================================
--- branches/HeuristicLab.EvolutionTracking/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Formatters/SymbolicExpressionTreeLatexFormatter.cs	(revision 10347)
+++ branches/HeuristicLab.EvolutionTracking/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Formatters/SymbolicExpressionTreeLatexFormatter.cs	(revision 10456)
@@ -1,3 +1,5 @@
-﻿using System.Collections.Generic;
+﻿using System;
+using System.Collections.Generic;
+using System.Globalization;
 using System.Linq;
 using System.Text;
@@ -8,15 +10,19 @@
   [Item("LaTeX/PDF Formatter", "Formatter for symbolic expression trees for use with latex.")]
   public class SymbolicExpressionTreeLatexFormatter : NamedItem, ISymbolicExpressionTreeStringFormatter {
-    private readonly static Dictionary<string, string> symbolNameMap = new Dictionary<string, string>
+    private readonly static Dictionary<string, string> SymbolNamesMap = new Dictionary<string, string>
     {
       {"ProgramRootSymbol", "Prog"},
-      {"StartSymbol","RPB"}
+      {"StartSymbol","RPB"},
+      {"Addition", "$+$"},
+      {"Subtraction", "$-$"},
+      {"Multiplication", "$\\times$"},
+      {"Division", "$\\div$"}
     };
     private readonly ReingoldTilfordLayoutEngine<ISymbolicExpressionTreeNode> layoutEngine;
     private readonly SymbolicExpressionTreeLayoutAdapter layoutAdapter;
 
-
     public SymbolicExpressionTreeLatexFormatter() {
       layoutEngine = new ReingoldTilfordLayoutEngine<ISymbolicExpressionTreeNode>();
+      layoutAdapter = new SymbolicExpressionTreeLayoutAdapter();
     }
 
@@ -37,22 +43,42 @@
       foreach (var ln in layoutNodes)
         layoutEngine.AddNode(ln.Content, ln);
+      layoutEngine.CalculateLayout();
       var nodeCoordinates = layoutEngine.GetNodeCoordinates();
       var sb = new StringBuilder();
-      sb.AppendLine("\\begin{figure}");
-      sb.AppendLine("\\begin{tikzpicture}");
+      var nl = Environment.NewLine;
+      sb.Append("\\documentclass[class=minimal,border=0pt]{standalone}" + nl +
+                "\\usepackage{tikz}" + nl +
+                "\\begin{document}" + nl +
+                "\\begin{tikzpicture}" + nl +
+                "\\def\\ws{1}" + nl +
+                "\\def\\hs{0.7}" + nl);
 
-      foreach (var node in symbolicExpressionTree.IterateNodesBreadth()) {
+      const double ws = 1.0, hs = 0.7; // some scaling factors useful for fine-tuning document appearance before latex compilation
+      var nodes = symbolicExpressionTree.IterateNodesBreadth().ToList();
+      var nodeIndices = new Dictionary<ISymbolicExpressionTreeNode, int>();
+      for (int i = 0; i < nodes.Count; ++i) {
+        var node = nodes[i];
+        nodeIndices.Add(node, i);
         var symbolName = node.Symbol.Name;
-        var nodeName = symbolNameMap.ContainsKey(symbolName) ? symbolNameMap[symbolName] : symbolName;
+        var nodeName = SymbolNamesMap.ContainsKey(symbolName) ? SymbolNamesMap[symbolName] : symbolName;
         var coord = nodeCoordinates[node];
 
-        sb.AppendLine(string.Format("\\draw node ({0},{1}) {{{2}}};", coord.X, coord.Y, nodeName));
+        sb.AppendLine(string.Format(CultureInfo.InvariantCulture, "\\node ({0}) at (\\ws*{1},\\hs*{2}) {{{3}}};", i, ws * coord.X, -hs * coord.Y, EscapeLatexString(nodeName)));
       }
 
-      sb.AppendLine("\\end{figure}");
-      sb.AppendLine("\\end{tikzpicture}");
+      for (int i = 0; i < nodes.Count; ++i) {
+        foreach (var s in nodes[i].Subtrees) {
+          sb.AppendLine(string.Format(CultureInfo.InvariantCulture, "\\draw ({0}) -- ({1});", i, nodeIndices[s]));
+        }
+      }
+
+      sb.AppendLine("\\end{tikzpicture}" + nl + "\\end{document}" + nl);
 
       return sb.ToString();
     }
+
+    private static string EscapeLatexString(string s) {
+      return s.Replace("\\", "\\\\").Replace("{", "\\{").Replace("}", "\\}").Replace("_", "\\_");
+    }
   }
 }
Index: branches/HeuristicLab.EvolutionTracking/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/LayoutEngines/SymbolicExpressionTreeLayoutAdapter.cs
===================================================================
--- branches/HeuristicLab.EvolutionTracking/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/LayoutEngines/SymbolicExpressionTreeLayoutAdapter.cs	(revision 10347)
+++ branches/HeuristicLab.EvolutionTracking/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/LayoutEngines/SymbolicExpressionTreeLayoutAdapter.cs	(revision 10456)
@@ -28,5 +28,5 @@
   public class SymbolicExpressionTreeLayoutAdapter : ILayoutAdapter<ISymbolicExpressionTreeNode> {
     // default conversion function between ISymbolicExpressionTreeNode and ILayoutNode<ISymbolicExpressionTree>
-    ILayoutNode<ISymbolicExpressionTreeNode> defaultConvert(ISymbolicExpressionTreeNode node) {
+    static ILayoutNode<ISymbolicExpressionTreeNode> DefaultConvert(ISymbolicExpressionTreeNode node) {
       var layoutNode = new LayoutNode<ISymbolicExpressionTreeNode> { Content = node };
       layoutNode.Ancestor = layoutNode;
@@ -40,5 +40,5 @@
     // return an enumerable containing all the layout nodes
     public IEnumerable<ILayoutNode<ISymbolicExpressionTreeNode>> Convert(ISymbolicExpressionTreeNode root, Func<ISymbolicExpressionTreeNode, ILayoutNode<ISymbolicExpressionTreeNode>> convertFunc = null) {
-      var rootLayoutNode = convertFunc == null ? defaultConvert(root) : convertFunc(root);
+      var rootLayoutNode = convertFunc == null ? DefaultConvert(root) : convertFunc(root);
       rootLayoutNode.Ancestor = rootLayoutNode;
 
@@ -63,5 +63,5 @@
       for (int i = 0; i < layoutNode.Content.SubtreeCount; ++i) {
         var subtree = layoutNode.Content.GetSubtree(i);
-        var childLayoutNode = convertFunc == null ? defaultConvert(subtree) : convertFunc(subtree);
+        var childLayoutNode = convertFunc == null ? DefaultConvert(subtree) : convertFunc(subtree);
         childLayoutNode.Parent = layoutNode;
         childLayoutNode.Number = i;
Index: branches/HeuristicLab.EvolutionTracking/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Manipulators/MultiSymbolicExpressionTreeManipulator.cs
===================================================================
--- branches/HeuristicLab.EvolutionTracking/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Manipulators/MultiSymbolicExpressionTreeManipulator.cs	(revision 10347)
+++ branches/HeuristicLab.EvolutionTracking/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Manipulators/MultiSymbolicExpressionTreeManipulator.cs	(revision 10456)
@@ -83,4 +83,6 @@
       Operators = checkedItemList.AsReadOnly();
       Operators_ItemsAdded(this, new CollectionItemsChangedEventArgs<IndexedItem<ISymbolicExpressionTreeManipulator>>(Operators.CheckedItems));
+
+      SelectedOperatorParameter.ActualName = "SelectedManipulationOperator";
     }
 
Index: branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking.Views/3.4/HeuristicLab.EvolutionTracking.Views-3.4.csproj
===================================================================
--- branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking.Views/3.4/HeuristicLab.EvolutionTracking.Views-3.4.csproj	(revision 10347)
+++ branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking.Views/3.4/HeuristicLab.EvolutionTracking.Views-3.4.csproj	(revision 10456)
@@ -116,7 +116,5 @@
       <DependentUpon>FrequentFragmentsDialog.cs</DependentUpon>
     </Compile>
-    <Compile Include="GenealogyGraphChart.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
+    <Compile Include="GenealogyGraphChart.cs" />
     <Compile Include="GenealogyGraphChart.Designer.cs">
       <DependentUpon>GenealogyGraphChart.cs</DependentUpon>
@@ -132,7 +130,5 @@
       <DependentUpon>Resources.resx</DependentUpon>
     </Compile>
-    <Compile Include="GenealogyGraphView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
+    <Compile Include="GenealogyGraphView.cs" />
     <Compile Include="GenealogyGraphView.Designer.cs">
       <DependentUpon>GenealogyGraphView.cs</DependentUpon>
Index: branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking.Views/3.4/Plugin.cs.frame
===================================================================
--- branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking.Views/3.4/Plugin.cs.frame	(revision 10456)
+++ branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking.Views/3.4/Plugin.cs.frame	(revision 10456)
@@ -0,0 +1,41 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.EvolutionaryTracking.Views {
+  [Plugin("HeuristicLab.EvolutionTracking.Views", "Provides controls and views for the evolution graph and related structures.", "3.4.2.$WCREV$")]
+  [PluginFile("HeuristicLab.EvolutionTracking.Views-3.4.dll", PluginFileType.Assembly)]
+  [PluginDependency("HeuristicLab.Core", "3.3")]
+  [PluginDependency("HeuristicLab.Core.Views", "3.3")]
+  [PluginDependency("HeuristicLab.Common", "3.3")]
+  [PluginDependency("HeuristicLab.Common.Resources", "3.3")]
+  [PluginDependency("HeuristicLab.Encodings.SymbolicExpressionTreeEncoding", "3.4")]
+  [PluginDependency("HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views", "3.4")]
+  [PluginDependency("HeuristicLab.MainForm", "3.3")]
+  [PluginDependency("HeuristicLab.MainForm.WindowsForms", "3.3")]
+  [PluginDependency("HeuristicLab.Visualization", "3.3")]
+  [PluginDependency("HeuristicLab.EvolutionTracking", "3.4")]
+  [PluginDependency("HeuristicLab.Problems.DataAnalysis.Symbolic", "3.4")]
+
+  public class HeuristicLabEvolutionaryTrackingPlugin : PluginBase {
+  }
+}
Index: branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/Plugin.cs
===================================================================
--- branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/Plugin.cs	(revision 10347)
+++ 	(revision )
@@ -1,46 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using HeuristicLab.PluginInfrastructure;
-
-namespace HeuristicLab.EvolutionTracking {
-  [Plugin("HeuristicLab.EvolutionTracking", "Provides operators and related classes for tracking the evolution within a GA.", "3.4.2.7439")]
-  [PluginFile("HeuristicLab.EvolutionTracking-3.4.dll", PluginFileType.Assembly)]
-  [PluginDependency("HeuristicLab.Analysis", "3.3")]
-  [PluginDependency("HeuristicLab.Collections", "3.3")]
-  [PluginDependency("HeuristicLab.Common", "3.3")]
-  [PluginDependency("HeuristicLab.Common.Resources", "3.3")]
-  [PluginDependency("HeuristicLab.Core", "3.3")]
-  [PluginDependency("HeuristicLab.Data", "3.3")]
-  [PluginDependency("HeuristicLab.Encodings.SymbolicExpressionTreeEncoding", "3.4")]
-  [PluginDependency("HeuristicLab.Operators", "3.3")]
-  [PluginDependency("HeuristicLab.Optimization", "3.3")]
-  [PluginDependency("HeuristicLab.Random", "3.3")]
-  [PluginDependency("HeuristicLab.Selection", "3.3")]
-  [PluginDependency("HeuristicLab.Parameters", "3.3")]
-  [PluginDependency("HeuristicLab.Persistence", "3.3")]
-  [PluginDependency("HeuristicLab.Problems.DataAnalysis.Symbolic.Regression", "3.4")]
-  [PluginDependency("HeuristicLab.Problems.DataAnalysis.Symbolic", "3.4")]
-  [PluginDependency("HeuristicLab.Problems.DataAnalysis", "3.4")]
-
-  public class HeuristicLabEvolutionTrackingPlugin : PluginBase {
-  }
-}
Index: branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/Plugin.cs.frame
===================================================================
--- branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/Plugin.cs.frame	(revision 10456)
+++ branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking/3.4/Plugin.cs.frame	(revision 10456)
@@ -0,0 +1,46 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.EvolutionTracking {
+  [Plugin("HeuristicLab.EvolutionTracking", "Provides operators and related classes for tracking the evolution within a GA.", "3.4.5.$WCREV$")]
+  [PluginFile("HeuristicLab.EvolutionTracking-3.4.dll", PluginFileType.Assembly)]
+  [PluginDependency("HeuristicLab.Analysis", "3.3")]
+  [PluginDependency("HeuristicLab.Collections", "3.3")]
+  [PluginDependency("HeuristicLab.Common", "3.3")]
+  [PluginDependency("HeuristicLab.Common.Resources", "3.3")]
+  [PluginDependency("HeuristicLab.Core", "3.3")]
+  [PluginDependency("HeuristicLab.Data", "3.3")]
+  [PluginDependency("HeuristicLab.Encodings.SymbolicExpressionTreeEncoding", "3.4")]
+  [PluginDependency("HeuristicLab.Operators", "3.3")]
+  [PluginDependency("HeuristicLab.Optimization", "3.3")]
+  [PluginDependency("HeuristicLab.Random", "3.3")]
+  [PluginDependency("HeuristicLab.Selection", "3.3")]
+  [PluginDependency("HeuristicLab.Parameters", "3.3")]
+  [PluginDependency("HeuristicLab.Persistence", "3.3")]
+  [PluginDependency("HeuristicLab.Problems.DataAnalysis.Symbolic.Regression", "3.4")]
+  [PluginDependency("HeuristicLab.Problems.DataAnalysis.Symbolic", "3.4")]
+  [PluginDependency("HeuristicLab.Problems.DataAnalysis", "3.4")]
+
+  public class HeuristicLabEvolutionTrackingPlugin : PluginBase {
+  }
+}
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 10347)
+++ branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Views-3.4.csproj	(revision 10456)
@@ -300,5 +300,5 @@
   </ItemGroup>
   <ItemGroup>
-    <ProjectReference Include="..\..\..\HeuristicLab.EvolutionaryTracking\HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views\3.4\HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views-3.4.csproj">
+    <ProjectReference Include="..\..\HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views\3.4\HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views-3.4.csproj">
       <Project>{423bd94f-963a-438e-ba45-3bb3d61cd03b}</Project>
       <Name>HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views-3.4</Name>
Index: branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Analyzers/SymbolicDataAnalysisSingleObjectivePruningAnalyzer.cs
===================================================================
--- branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Analyzers/SymbolicDataAnalysisSingleObjectivePruningAnalyzer.cs	(revision 10456)
+++ branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Analyzers/SymbolicDataAnalysisSingleObjectivePruningAnalyzer.cs	(revision 10456)
@@ -0,0 +1,206 @@
+﻿using System;
+using System.Linq;
+using HeuristicLab.Analysis;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
+using HeuristicLab.Optimization;
+using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Problems.DataAnalysis.Symbolic {
+  [StorableClass]
+  [Item("SymbolicDataAnalysisSingleObjectivePruningAnalyzer", "An analyzer that prunes introns from trees in single objective symbolic data analysis problems.")]
+  public abstract class SymbolicDataAnalysisSingleObjectivePruningAnalyzer : SymbolicDataAnalysisSingleObjectiveAnalyzer {
+    private const string ProblemDataParameterName = "ProblemData";
+    private const string InterpreterParameterName = "SymbolicExpressionTreeInterpreter";
+
+    private const string UpdateIntervalParameterName = "UpdateInverval";
+    private const string UpdateCounterParameterName = "UpdateCounter";
+
+    private const string PopulationSliceParameterName = "PopulationSlice";
+    private const string PruningProbabilityParameterName = "PruningProbability";
+
+    private const string NumberOfPrunedSubtreesParameterName = "PrunedSubtrees";
+    private const string NumberOfPrunedTreesParameterName = "PrunedTrees";
+
+    private const string RandomParameterName = "Random";
+    private const string EstimationLimitsParameterName = "EstimationLimits";
+
+    private const string PruneOnlyZeroImpactNodesParameterName = "PruneOnlyZeroImpactNodes";
+    private const string NodeImpactThresholdParameterName = "ImpactThreshold";
+
+    private const string FitnessCalculationPartitionParameterName = "FitnessCalculationPartition";
+
+    private bool reentry;
+    [Storable]
+    protected ISymbolicDataAnalysisSolutionImpactValuesCalculator impactValuesCalculator;
+
+    #region parameter properties
+    public IFixedValueParameter<BoolValue> PruneOnlyZeroImpactNodesParameter {
+      get { return (IFixedValueParameter<BoolValue>)Parameters[PruneOnlyZeroImpactNodesParameterName]; }
+    }
+    public IFixedValueParameter<DoubleValue> NodeImpactThresholdParameter {
+      get { return (IFixedValueParameter<DoubleValue>)Parameters[NodeImpactThresholdParameterName]; }
+    }
+    public ILookupParameter<DoubleLimit> EstimationLimitsParameter {
+      get { return (ILookupParameter<DoubleLimit>)Parameters[EstimationLimitsParameterName]; }
+    }
+    public ILookupParameter<IRandom> RandomParameter {
+      get { return (ILookupParameter<IRandom>)Parameters[RandomParameterName]; }
+    }
+    private ILookupParameter<IDataAnalysisProblemData> ProblemDataParameter {
+      get { return (ILookupParameter<IDataAnalysisProblemData>)Parameters[ProblemDataParameterName]; }
+    }
+    public ILookupParameter<IntRange> FitnessCalculationPartitionParameter {
+      get { return (ILookupParameter<IntRange>)Parameters[FitnessCalculationPartitionParameterName]; }
+    }
+    private ILookupParameter<ISymbolicDataAnalysisExpressionTreeInterpreter> InterpreterParameter {
+      get { return (ILookupParameter<ISymbolicDataAnalysisExpressionTreeInterpreter>)Parameters[InterpreterParameterName]; }
+    }
+    public IValueParameter<IntValue> UpdateIntervalParameter {
+      get { return (IValueParameter<IntValue>)Parameters[UpdateIntervalParameterName]; }
+    }
+    public IValueParameter<IntValue> UpdateCounterParameter {
+      get { return (IValueParameter<IntValue>)Parameters[UpdateCounterParameterName]; }
+    }
+    public IValueParameter<DoubleRange> PopulationSliceParameter {
+      get { return (IValueParameter<DoubleRange>)Parameters[PopulationSliceParameterName]; }
+    }
+    public IValueParameter<DoubleValue> PruningProbabilityParameter {
+      get { return (IValueParameter<DoubleValue>)Parameters[PruningProbabilityParameterName]; }
+    }
+    public IFixedValueParameter<DoubleValue> NumberOfPrunedSubtreesParameter {
+      get { return (IFixedValueParameter<DoubleValue>)Parameters[NumberOfPrunedSubtreesParameterName]; }
+    }
+    public IFixedValueParameter<DoubleValue> NumberOfPrunedTreesParameter {
+      get { return (IFixedValueParameter<DoubleValue>)Parameters[NumberOfPrunedTreesParameterName]; }
+    }
+    #endregion
+    #region properties
+    protected IDataAnalysisProblemData ProblemData { get { return ProblemDataParameter.ActualValue; } }
+    protected IntRange FitnessCalculationPartition { get { return FitnessCalculationPartitionParameter.ActualValue; } }
+    protected ISymbolicDataAnalysisExpressionTreeInterpreter Interpreter { get { return InterpreterParameter.ActualValue; } }
+    protected IntValue UpdateInterval { get { return UpdateIntervalParameter.Value; } }
+    protected IntValue UpdateCounter { get { return UpdateCounterParameter.Value; } }
+    protected DoubleRange PopulationSlice { get { return PopulationSliceParameter.Value; } }
+    protected DoubleValue PruningProbability { get { return PruningProbabilityParameter.Value; } }
+    protected DoubleValue PrunedSubtrees { get { return NumberOfPrunedSubtreesParameter.Value; } }
+    protected DoubleValue PrunedTrees { get { return NumberOfPrunedTreesParameter.Value; } }
+    protected DoubleLimit EstimationLimits { get { return EstimationLimitsParameter.ActualValue; } }
+    protected IRandom Random { get { return RandomParameter.ActualValue; } }
+    protected DoubleValue NodeImpactThreshold { get { return NodeImpactThresholdParameter.Value; } }
+    protected BoolValue PruneOnlyZeroImpactNodes { get { return PruneOnlyZeroImpactNodesParameter.Value; } }
+    #endregion
+
+    #region IStatefulItem members
+    public override void InitializeState() {
+      base.InitializeState();
+      UpdateCounter.Value = 0;
+      PrunedSubtrees.Value = 0;
+      PrunedTrees.Value = 0;
+    }
+    public override void ClearState() {
+      base.ClearState();
+      UpdateCounter.Value = 0;
+      PrunedSubtrees.Value = 0;
+      PrunedTrees.Value = 0;
+    }
+    #endregion
+
+    [StorableConstructor]
+    protected SymbolicDataAnalysisSingleObjectivePruningAnalyzer(bool deserializing) : base(deserializing) { }
+    [StorableHook(HookType.AfterDeserialization)]
+    private void AfterDeserialization() {
+      if (!Parameters.ContainsKey(FitnessCalculationPartitionParameterName))
+        Parameters.Add(new LookupParameter<IntRange>(FitnessCalculationPartitionParameterName, ""));
+    }
+    protected SymbolicDataAnalysisSingleObjectivePruningAnalyzer(SymbolicDataAnalysisSingleObjectivePruningAnalyzer original, Cloner cloner)
+      : base(original, cloner) {
+      impactValuesCalculator = original.impactValuesCalculator;
+    }
+    protected SymbolicDataAnalysisSingleObjectivePruningAnalyzer() {
+      Parameters.Add(new ValueParameter<DoubleRange>(PopulationSliceParameterName, new DoubleRange(0.75, 1)));
+      Parameters.Add(new ValueParameter<DoubleValue>(PruningProbabilityParameterName, new DoubleValue(0.5)));
+      // analyzer parameters
+      Parameters.Add(new ValueParameter<IntValue>(UpdateIntervalParameterName, "The interval in which the tree length analysis should be applied.", new IntValue(1)));
+      Parameters.Add(new ValueParameter<IntValue>(UpdateCounterParameterName, "The value which counts how many times the operator was called", new IntValue(0)));
+      Parameters.Add(new LookupParameter<IRandom>(RandomParameterName));
+      Parameters.Add(new LookupParameter<IDataAnalysisProblemData>(ProblemDataParameterName));
+      Parameters.Add(new LookupParameter<ISymbolicDataAnalysisExpressionTreeInterpreter>(InterpreterParameterName));
+
+      Parameters.Add(new FixedValueParameter<DoubleValue>(NumberOfPrunedSubtreesParameterName, new DoubleValue(0)));
+      Parameters.Add(new FixedValueParameter<DoubleValue>(NumberOfPrunedTreesParameterName, new DoubleValue(0)));
+      Parameters.Add(new LookupParameter<DoubleLimit>(EstimationLimitsParameterName));
+      Parameters.Add(new FixedValueParameter<DoubleValue>(NodeImpactThresholdParameterName, new DoubleValue(0.0)));
+      Parameters.Add(new FixedValueParameter<BoolValue>(PruneOnlyZeroImpactNodesParameterName, new BoolValue(false)));
+      Parameters.Add(new LookupParameter<IntRange>(FitnessCalculationPartitionParameterName, ""));
+    }
+
+    public override IOperation Apply() {
+      if (reentry) {
+        UpdateCounter.Value++;
+
+        if (UpdateCounter.Value != UpdateInterval.Value) return base.Apply();
+        UpdateCounter.Value = 0;
+
+        var trees = SymbolicExpressionTreeParameter.ActualValue.ToList();
+        var qualities = QualityParameter.ActualValue.ToList();
+
+        var population = trees.Zip(qualities, (tree, quality) => new { Tree = tree, Quality = quality }).ToList();
+        Func<double, double, int> compare = (a, b) => Maximization.Value ? a.CompareTo(b) : b.CompareTo(a);
+        population.Sort((a, b) => compare(a.Quality.Value, b.Quality.Value));
+
+        var start = (int)Math.Round(PopulationSlice.Start * trees.Count);
+        var end = (int)Math.Round(PopulationSlice.End * trees.Count);
+
+        if (end == population.Count) end--;
+
+        if (start >= end || end >= population.Count) throw new Exception("Invalid PopulationSlice bounds.");
+
+        PrunedSubtrees.Value = 0;
+        PrunedTrees.Value = 0;
+
+        reentry = false;
+
+        var operations = new OperationCollection { Parallel = true };
+        foreach (var p in population.Skip(start).Take(end)) {
+          if (Random.NextDouble() > PruningProbability.Value) continue;
+          var op = new SymbolicDataAnalysisExpressionPruningOperator {
+            Model = CreateModel(p.Tree, Interpreter, EstimationLimits.Lower, EstimationLimits.Upper),
+            ImpactsCalculator = impactValuesCalculator,
+            ProblemData = ProblemData,
+            Random = Random,
+            PruneOnlyZeroImpactNodes = PruneOnlyZeroImpactNodes.Value,
+            NodeImpactThreshold = NodeImpactThreshold.Value,
+            FitnessCalculationPartition = FitnessCalculationPartition
+          };
+          operations.Add(ExecutionContext.CreateChildOperation(op, ExecutionContext.Scope));
+        }
+        return new OperationCollection { operations, ExecutionContext.CreateOperation(this) };
+      }
+
+      DataTable table;
+
+      if (ResultCollection.ContainsKey("Population Pruning")) {
+        table = (DataTable)ResultCollection["Population Pruning"].Value;
+      } else {
+        table = new DataTable("Population Pruning");
+        table.Rows.Add(new DataRow("Pruned Trees") { VisualProperties = { StartIndexZero = true } });
+        table.Rows.Add(new DataRow("Pruned Subtrees") { VisualProperties = { StartIndexZero = true } });
+        ResultCollection.Add(new Result("Population Pruning", table));
+      }
+
+      table.Rows["Pruned Trees"].Values.Add(PrunedTrees.Value);
+      table.Rows["Pruned Subtrees"].Values.Add(PrunedSubtrees.Value);
+
+      reentry = true;
+
+      return base.Apply();
+    }
+
+    protected abstract ISymbolicDataAnalysisModel CreateModel(ISymbolicExpressionTree tree, ISymbolicDataAnalysisExpressionTreeInterpreter interpreter,
+      double lowerEstimationLimit = double.MinValue, double upperEstimationLimit = double.MaxValue);
+  }
+}
Index: branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic-3.4.csproj
===================================================================
--- branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic-3.4.csproj	(revision 10347)
+++ branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic-3.4.csproj	(revision 10456)
@@ -173,4 +173,5 @@
   </ItemGroup>
   <ItemGroup>
+    <Compile Include="Analyzers\SymbolicDataAnalysisSingleObjectivePruningAnalyzer.cs" 
     <Compile Include="Analyzers\SymbolicDataAnalysisGenealogyAnalyzer.cs" />
     <Compile Include="Analyzers\SymbolicDataAnalysisPopulationDiversityAnalyzer.cs" />
@@ -188,4 +189,5 @@
       <SubType>Code</SubType>
     </Compile>
+    <Compile Include="SymbolicDataAnalysisExpressionPruningOperator.cs" />
     <Compile Include="SlidingWindow\GenerationalSlidingWindowAnalyzer.cs" />
     <Compile Include="SlidingWindow\OffspringSelectionSlidingWindowAnalyzer.cs" />
Index: branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/SymbolicDataAnalysisExpressionPruningOperator.cs
===================================================================
--- branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/SymbolicDataAnalysisExpressionPruningOperator.cs	(revision 10456)
+++ branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/SymbolicDataAnalysisExpressionPruningOperator.cs	(revision 10456)
@@ -0,0 +1,115 @@
+﻿#region License Information
+
+/* HeuristicLab
+ * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#endregion
+
+using System.Linq;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
+using HeuristicLab.Operators;
+using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Problems.DataAnalysis.Symbolic {
+  [StorableClass]
+  [Item("SymbolicExpressionTreePruningOperator", "An operator that replaces introns with constant values in a symbolic expression tree.")]
+  public class SymbolicDataAnalysisExpressionPruningOperator : SingleSuccessorOperator {
+    private const string NumberOfPrunedSubtreesParameterName = "PrunedSubtrees";
+    private const string NumberOfPrunedTreesParameterName = "PrunedTrees";
+    #region parameter properties
+    public ILookupParameter<DoubleValue> NumberOfPrunedSubtreesParameter {
+      get { return (ILookupParameter<DoubleValue>)Parameters[NumberOfPrunedSubtreesParameterName]; }
+    }
+    public ILookupParameter<DoubleValue> NumberOfPrunedTreesParameter {
+      get { return (ILookupParameter<DoubleValue>)Parameters[NumberOfPrunedTreesParameterName]; }
+    }
+    #endregion
+    #region properties
+    private DoubleValue PrunedSubtrees { get { return NumberOfPrunedSubtreesParameter.ActualValue; } }
+    private DoubleValue PrunedTrees { get { return NumberOfPrunedTreesParameter.ActualValue; } }
+    #endregion
+
+    [StorableConstructor]
+    protected SymbolicDataAnalysisExpressionPruningOperator(bool deserializing) : base(deserializing) { }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new SymbolicDataAnalysisExpressionPruningOperator(this, cloner);
+    }
+    protected SymbolicDataAnalysisExpressionPruningOperator(SymbolicDataAnalysisExpressionPruningOperator original, Cloner cloner)
+      : base(original, cloner) {
+    }
+
+    public SymbolicDataAnalysisExpressionPruningOperator() {
+      Parameters.Add(new LookupParameter<DoubleValue>(NumberOfPrunedSubtreesParameterName));
+      Parameters.Add(new LookupParameter<DoubleValue>(NumberOfPrunedTreesParameterName));
+    }
+
+    public ISymbolicDataAnalysisModel Model { get; set; }
+    public IDataAnalysisProblemData ProblemData { get; set; }
+    public ISymbolicDataAnalysisSolutionImpactValuesCalculator ImpactsCalculator { get; set; }
+
+    public IntRange FitnessCalculationPartition { get; set; }
+    public IRandom Random { get; set; }
+
+    public bool PruneOnlyZeroImpactNodes { get; set; }
+    public double NodeImpactThreshold { get; set; }
+
+    public override IOperation Apply() {
+      int prunedSubtrees = 0;
+
+      var nodes = Model.SymbolicExpressionTree.Root.GetSubtree(0).GetSubtree(0).IterateNodesPrefix().ToList();
+      var rows = Enumerable.Range(FitnessCalculationPartition.Start, FitnessCalculationPartition.Size).ToList();
+
+      for (int j = 0; j < nodes.Count; ++j) {
+        var node = nodes[j];
+        if (node is ConstantTreeNode) continue;
+
+        var impact = ImpactsCalculator.CalculateImpactValue(Model, node, ProblemData, rows);
+
+        if (PruneOnlyZeroImpactNodes) {
+          if (!impact.IsAlmost(0.0)) continue;
+        } else {
+          if (NodeImpactThreshold < impact) continue;
+        }
+
+        var replacementValue = ImpactsCalculator.CalculateReplacementValue(Model, node, ProblemData, rows);
+        var constantNode = new ConstantTreeNode(new Constant()) { Value = replacementValue };
+        ReplaceWithConstant(node, constantNode);
+        j += node.GetLength() - 1; // skip subtrees under the node that was folded
+
+        prunedSubtrees++;
+      }
+
+      if (prunedSubtrees > 0) {
+        lock (PrunedSubtrees) { PrunedSubtrees.Value += prunedSubtrees; }
+        lock (PrunedTrees) { PrunedTrees.Value += 1; }
+      }
+      return base.Apply();
+    }
+    private static void ReplaceWithConstant(ISymbolicExpressionTreeNode original, ISymbolicExpressionTreeNode replacement) {
+      var parent = original.Parent;
+      var i = parent.IndexOfSubtree(original);
+      parent.RemoveSubtree(i);
+      parent.InsertSubtree(i, replacement);
+    }
+  }
+}
Index: branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/SymbolicDataAnalysisExpressionTreeSimilarityCalculator.cs
===================================================================
--- branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/SymbolicDataAnalysisExpressionTreeSimilarityCalculator.cs	(revision 10347)
+++ branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/SymbolicDataAnalysisExpressionTreeSimilarityCalculator.cs	(revision 10456)
@@ -40,7 +40,5 @@
 
     public IScopeTreeLookupParameter<ISymbolicExpressionTree> SymbolicExpressionTreeParameter {
-      get {
-        return (IScopeTreeLookupParameter<ISymbolicExpressionTree>)Parameters[SymbolicExpressionTreeParameterName];
-      }
+      get { return (IScopeTreeLookupParameter<ISymbolicExpressionTree>)Parameters[SymbolicExpressionTreeParameterName]; }
     }
 
@@ -90,13 +88,9 @@
     public SymbolicDataAnalysisExpressionTreeSimilarityCalculator()
       : base() {
-      Parameters.Add(new ScopeTreeLookupParameter<ISymbolicExpressionTree>(SymbolicExpressionTreeParameterName,
-        "The symbolic expression trees to analyze."));
+      Parameters.Add(new ScopeTreeLookupParameter<ISymbolicExpressionTree>(SymbolicExpressionTreeParameterName, "The symbolic expression trees to analyze."));
       Parameters.Add(new ValueParameter<ISymbolicExpressionTree>(CurrentSymbolicExpressionTreeParameterName, ""));
-      Parameters.Add(new LookupParameter<BoolValue>(MatchVariablesParameterName,
-        "Specify if the symbolic expression tree comparer should match variable names."));
-      Parameters.Add(new LookupParameter<BoolValue>(MatchVariableWeightsParameterName,
-        "Specify if the symbolic expression tree comparer should match variable weights."));
-      Parameters.Add(new LookupParameter<BoolValue>(MatchConstantValuesParameterName,
-        "Specify if the symbolic expression tree comparer should match constant values."));
+      Parameters.Add(new LookupParameter<BoolValue>(MatchVariablesParameterName, "Specify if the symbolic expression tree comparer should match variable names."));
+      Parameters.Add(new LookupParameter<BoolValue>(MatchVariableWeightsParameterName, "Specify if the symbolic expression tree comparer should match variable weights."));
+      Parameters.Add(new LookupParameter<BoolValue>(MatchConstantValuesParameterName, "Specify if the symbolic expression tree comparer should match constant values."));
       Parameters.Add(new LookupParameter<DoubleValue>(SimilarityValuesParmeterName, ""));
     }
Index: branches/HeuristicLab.EvolutionTracking/PreBuildEvent.cmd
===================================================================
--- branches/HeuristicLab.EvolutionTracking/PreBuildEvent.cmd	(revision 10347)
+++ branches/HeuristicLab.EvolutionTracking/PreBuildEvent.cmd	(revision 10456)
@@ -1,2 +1,12 @@
-SubWCRev "%ProjectDir%\" "%ProjectDir%\Properties\AssemblyInfo.frame" "%ProjectDir%\Properties\AssemblyInfo.cs"
-SubWCRev "%ProjectDir%\" "%ProjectDir%\Plugin.cs.frame" "%ProjectDir%\Plugin.cs"
+IF EXIST "%ProjectDir%\Properties\AssemblyInfo.cs.frame" SubWCRev "%ProjectDir%\" "%ProjectDir%\Properties\AssemblyInfo.cs.frame" "%ProjectDir%\Properties\AssemblyInfo.cs"
+IF %ERRORLEVEL% NEQ 0 GOTO Error_Handling
+IF EXIST "%ProjectDir%\Plugin.cs.frame" SubWCRev "%ProjectDir%\" "%ProjectDir%\Plugin.cs.frame" "%ProjectDir%\Plugin.cs"
+IF %ERRORLEVEL% NEQ 0 GOTO Error_Handling
+GOTO Done
+
+:Error_Handling
+ECHO There was an error while running subwcrev. Please verify that the *.cs.frame files have been correctly converted to *.cs files, otherwise HeuristicLab won't build. 
+exit 0
+
+:Done
+
