Index: trunk/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/TreeMatching/SymbolicExpressionTreeBottomUpSimilarityCalculator.cs
===================================================================
--- trunk/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/TreeMatching/SymbolicExpressionTreeBottomUpSimilarityCalculator.cs	(revision 17180)
+++ trunk/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/TreeMatching/SymbolicExpressionTreeBottomUpSimilarityCalculator.cs	(revision 18132)
@@ -41,5 +41,5 @@
     protected override bool IsCommutative { get { return true; } }
 
-    public bool MatchConstantValues { get; set; }
+    public bool MatchParameterValues { get; set; }
     public bool MatchVariableWeights { get; set; }
 
@@ -66,14 +66,13 @@
 
     public static double CalculateSimilarity(ISymbolicExpressionTreeNode n1, ISymbolicExpressionTreeNode n2, bool strict = false) {
-      var calculator = new SymbolicExpressionTreeBottomUpSimilarityCalculator { MatchConstantValues = strict, MatchVariableWeights = strict };
       return CalculateSimilarity(n1, n2, strict);
     }
 
-    public static Dictionary<ISymbolicExpressionTreeNode, ISymbolicExpressionTreeNode> ComputeBottomUpMapping(ISymbolicExpressionTree t1, ISymbolicExpressionTree t2, bool strict = false) {
+    public static NodeMap ComputeBottomUpMapping(ISymbolicExpressionTree t1, ISymbolicExpressionTree t2, bool strict = false) {
       return ComputeBottomUpMapping(ActualRoot(t1), ActualRoot(t2), strict);
     }
 
-    public static Dictionary<ISymbolicExpressionTreeNode, ISymbolicExpressionTreeNode> ComputeBottomUpMapping(ISymbolicExpressionTreeNode n1, ISymbolicExpressionTreeNode n2, bool strict = false) {
-      var calculator = new SymbolicExpressionTreeBottomUpSimilarityCalculator { MatchConstantValues = strict, MatchVariableWeights = strict };
+    public static NodeMap ComputeBottomUpMapping(ISymbolicExpressionTreeNode n1, ISymbolicExpressionTreeNode n2, bool strict = false) {
+      var calculator = new SymbolicExpressionTreeBottomUpSimilarityCalculator { MatchParameterValues = strict, MatchVariableWeights = strict };
       return calculator.ComputeBottomUpMapping(n1, n2);
     }
@@ -81,5 +80,5 @@
 
     public double CalculateSimilarity(ISymbolicExpressionTree t1, ISymbolicExpressionTree t2) {
-      return CalculateSimilarity(t1, t2, out Dictionary<ISymbolicExpressionTreeNode, ISymbolicExpressionTreeNode> map);
+      return CalculateSimilarity(t1, t2, out _);
     }
 
@@ -110,9 +109,9 @@
     }
 
-    public Dictionary<ISymbolicExpressionTreeNode, ISymbolicExpressionTreeNode> ComputeBottomUpMapping(ISymbolicExpressionTree t1, ISymbolicExpressionTree t2) {
+    public NodeMap ComputeBottomUpMapping(ISymbolicExpressionTree t1, ISymbolicExpressionTree t2) {
       return ComputeBottomUpMapping(ActualRoot(t1), ActualRoot(t2));
     }
 
-    public Dictionary<ISymbolicExpressionTreeNode, ISymbolicExpressionTreeNode> ComputeBottomUpMapping(ISymbolicExpressionTreeNode n1, ISymbolicExpressionTreeNode n2) {
+    public NodeMap ComputeBottomUpMapping(ISymbolicExpressionTreeNode n1, ISymbolicExpressionTreeNode n2) {
       var compactedGraph = Compact(n1, n2);
 
@@ -211,6 +210,6 @@
         return node.Symbol.Name;
 
-      if (node is ConstantTreeNode constant)
-        return MatchConstantValues ? constant.Value.ToString(CultureInfo.InvariantCulture) : constant.Symbol.Name;
+      if (node is INumericTreeNode numNode)
+        return MatchParameterValues ? numNode.Value.ToString(CultureInfo.InvariantCulture) : "Numeric";
 
       if (node is VariableTreeNode variable)
Index: trunk/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/TreeMatching/SymbolicExpressionTreeMaxCommonSubtreeSimilarityCalculator.cs
===================================================================
--- trunk/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/TreeMatching/SymbolicExpressionTreeMaxCommonSubtreeSimilarityCalculator.cs	(revision 17180)
+++ trunk/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/TreeMatching/SymbolicExpressionTreeMaxCommonSubtreeSimilarityCalculator.cs	(revision 18132)
@@ -38,7 +38,7 @@
     }
 
-    public bool MatchConstantValues {
-      get { return comparer.MatchConstantValues; }
-      set { comparer.MatchConstantValues = value; }
+    public bool MatchParameterValues {
+      get { return comparer.MatchParameterValues; }
+      set { comparer.MatchParameterValues = value; }
     }
 
@@ -59,5 +59,5 @@
     public SymbolicExpressionTreeMaxCommonSubtreeSimilarityCalculator() {
       comparer = new SymbolicExpressionTreeNodeEqualityComparer {
-        MatchConstantValues = true,
+        MatchParameterValues = true,
         MatchVariableNames = true,
         MatchVariableWeights = true
@@ -65,7 +65,7 @@
     }
 
-    public SymbolicExpressionTreeMaxCommonSubtreeSimilarityCalculator(bool matchVariableWeights, bool matchConstantValues) {
+    public SymbolicExpressionTreeMaxCommonSubtreeSimilarityCalculator(bool matchVariableWeights, bool matchParameterValues) {
       comparer = new SymbolicExpressionTreeNodeEqualityComparer {
-        MatchConstantValues = matchConstantValues,
+        MatchParameterValues = matchParameterValues,
         MatchVariableNames = true,
         MatchVariableWeights = matchVariableWeights
Index: trunk/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/TreeMatching/SymbolicExpressionTreeNodeComparer.cs
===================================================================
--- trunk/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/TreeMatching/SymbolicExpressionTreeNodeComparer.cs	(revision 17180)
+++ trunk/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/TreeMatching/SymbolicExpressionTreeNodeComparer.cs	(revision 18132)
@@ -28,5 +28,5 @@
   // this comparer considers that a < b if the type of a is "greater" than the type of b, for example:
   // - A function node is "greater" than a terminal node
-  // - A variable terminal is "greater" than a constant terminal
+  // - A variable terminal is "greater" than a numeric terminal
   // - used for bringing subtrees to a "canonical" form when the operation allows reordering of arguments
   public class SymbolicExpressionTreeNodeComparer : ISymbolicExpressionTreeNodeComparer {
@@ -52,6 +52,6 @@
 
       // at this point we know a and b are not variables
-      var ca = a as ConstantTreeNode;
-      var cb = b as ConstantTreeNode;
+      var ca = a as INumericTreeNode;
+      var cb = b as INumericTreeNode;
 
       if (ca != null && cb != null)
Index: trunk/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/TreeMatching/SymbolicExpressionTreeNodeEqualityComparer.cs
===================================================================
--- trunk/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/TreeMatching/SymbolicExpressionTreeNodeEqualityComparer.cs	(revision 17180)
+++ trunk/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/TreeMatching/SymbolicExpressionTreeNodeEqualityComparer.cs	(revision 18132)
@@ -33,5 +33,5 @@
     protected SymbolicExpressionTreeNodeEqualityComparer(SymbolicExpressionTreeNodeEqualityComparer original, Cloner cloner)
       : base(original, cloner) {
-      matchConstantValues = original.matchConstantValues;
+      matchParameterValues = original.matchParameterValues;
       matchVariableNames = original.matchVariableNames;
       matchVariableWeights = original.matchVariableWeights;
@@ -41,8 +41,8 @@
     // more flexible matching criteria 
     [Storable]
-    private bool matchConstantValues;
-    public bool MatchConstantValues {
-      get { return matchConstantValues; }
-      set { matchConstantValues = value; }
+    private bool matchParameterValues;
+    public bool MatchParameterValues {
+      get { return matchParameterValues; }
+      set { matchParameterValues = value; }
     }
 
@@ -66,5 +66,5 @@
 
     public SymbolicExpressionTreeNodeEqualityComparer() {
-      matchConstantValues = true;
+      matchParameterValues = true;
       matchVariableNames = true;
       matchVariableWeights = true;
@@ -86,9 +86,9 @@
         return (!MatchVariableNames || va.VariableName.Equals(vb.VariableName)) && (!MatchVariableWeights || va.Weight.Equals(vb.Weight));
       }
-      var ca = a as ConstantTreeNode;
-      if (ca != null) {
-        var cb = b as ConstantTreeNode;
+
+      if (a is INumericTreeNode ca) {
+        var cb = b as INumericTreeNode;
         if (cb == null) return false;
-        return (!MatchConstantValues || ca.Value.Equals(cb.Value));
+        return (!MatchParameterValues || ca.Value.Equals(cb.Value));
       }
       return false;
