Index: /trunk/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/InteractiveSymbolicExpressionTreeChart.cs
===================================================================
--- /trunk/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/InteractiveSymbolicExpressionTreeChart.cs	(revision 18142)
+++ /trunk/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/InteractiveSymbolicExpressionTreeChart.cs	(revision 18143)
@@ -104,5 +104,5 @@
         var symbol = dialog.SelectedSymbol;
         var node = symbol.CreateTreeNode();
-        if (node is INumericTreeNode numTreeNode) {
+        if (node is NumberTreeNode numTreeNode) {
           numTreeNode.Value = double.Parse(dialog.numberValueTextBox.Text);
         } else if (node is VariableTreeNode) {
@@ -132,5 +132,5 @@
       ISymbolicExpressionTreeNode newNode = null;
       var result = DialogResult.Cancel;
-      if (node is INumericTreeNode) {
+      if (node is NumberTreeNode) {
         using (var dialog = new NumberNodeEditDialog(node)) {
           dialog.ShowDialog(this);
Index: /trunk/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/TreeEditDialogs/SymbolicExpressionTreeConstantNodeEditDialog.cs
===================================================================
--- /trunk/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/TreeEditDialogs/SymbolicExpressionTreeConstantNodeEditDialog.cs	(revision 18142)
+++ /trunk/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/TreeEditDialogs/SymbolicExpressionTreeConstantNodeEditDialog.cs	(revision 18143)
@@ -29,10 +29,10 @@
 namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Views {
   public partial class NumberNodeEditDialog : Form {
-    private INumericTreeNode numberTreeNode;
-    public INumericTreeNode NewNode {
+    private NumberTreeNode numberTreeNode;
+    public NumberTreeNode NewNode {
       get { return numberTreeNode; }
       set {
         if (InvokeRequired)
-          Invoke(new Action<SymbolicExpressionTreeNode>(x => numberTreeNode = (INumericTreeNode)x), value);
+          Invoke(new Action<SymbolicExpressionTreeNode>(x => numberTreeNode = (NumberTreeNode)x), value);
         else
           numberTreeNode = value;
@@ -43,5 +43,5 @@
       InitializeComponent();
       oldValueTextBox.TabStop = false; // cannot receive focus using tab key
-      NewNode = (INumericTreeNode)node;
+      NewNode = (NumberTreeNode)node;
       InitializeFields();
     }
@@ -103,5 +103,4 @@
       // we impose an extra validation condition: that the new value is different from the original value
       if (numberTreeNode.Value.Equals(value)) return;
-
       numberTreeNode.Value = value;
       DialogResult = DialogResult.OK;
Index: /trunk/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Converters/DerivativeCalculator.cs
===================================================================
--- /trunk/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Converters/DerivativeCalculator.cs	(revision 18142)
+++ /trunk/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Converters/DerivativeCalculator.cs	(revision 18143)
@@ -156,6 +156,6 @@
           var newPower = (ISymbolicExpressionTreeNode)branch.Clone();
           var f = (ISymbolicExpressionTreeNode)newPower.GetSubtree(0).Clone();
-          var newExponent = (INumericTreeNode)numberSy.CreateTreeNode();
-          newExponent.Value = ((INumericTreeNode)newPower.GetSubtree(1)).Value - 1;
+          var newExponent = (NumberTreeNode)numberSy.CreateTreeNode();
+          newExponent.Value = ((NumberTreeNode)newPower.GetSubtree(1)).Value - 1;
           return Product(Product(CreateNumber(exponent.Value), newPower), Derive(f, variableName));
         } else throw new NotSupportedException("Cannot derive non-integer powers");
Index: /trunk/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Hashing/SymbolicExpressionTreeHash.cs
===================================================================
--- /trunk/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Hashing/SymbolicExpressionTreeHash.cs	(revision 18142)
+++ /trunk/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Hashing/SymbolicExpressionTreeHash.cs	(revision 18143)
@@ -215,5 +215,5 @@
             variableTreeNode.Weight = variable.Weight;
           } else if (node.Data is INumericTreeNode existingNumNode) {
-            var newNumNode = (INumericTreeNode)treeNodes[i];
+            var newNumNode = (NumberTreeNode)treeNodes[i];
             newNumNode.Value = existingNumNode.Value;
           }
@@ -277,5 +277,5 @@
 
         var symbol = child.Data.Symbol;
-        if (child.Data is INumericTreeNode firstNum) {
+        if (child.Data is NumberTreeNode firstNum) {
           // fold sibling number nodes into the first number
           for (int k = j + 1; k < children.Length; ++k) {
Index: /trunk/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Importer/SymbolicExpressionImporter.cs
===================================================================
--- /trunk/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Importer/SymbolicExpressionImporter.cs	(revision 18142)
+++ /trunk/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Importer/SymbolicExpressionImporter.cs	(revision 18143)
@@ -162,11 +162,11 @@
         return tree;
       } else if (tokens.Peek().Symbol == TokenSymbol.CONSTANT) {
-        var t = (INumericTreeNode)number.CreateTreeNode();
-        t.Value = tokens.Dequeue().DoubleValue;
-        return t;
+        var value = tokens.Dequeue().DoubleValue;
+        var constant = new Constant() { Value = value };
+        return constant.CreateTreeNode();
       } else if (tokens.Peek().Symbol == TokenSymbol.LBRACKET) {
         Expect(Token.LBRACKET, tokens);
         Expect(Token.NUM, tokens);
-        var t = (INumericTreeNode)number.CreateTreeNode();
+        var t = (NumberTreeNode)number.CreateTreeNode();
         if (tokens.Peek().Symbol == TokenSymbol.EQ) {
           Expect(Token.EQ, tokens);
Index: /trunk/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Interfaces/INumericTreeNode.cs
===================================================================
--- /trunk/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Interfaces/INumericTreeNode.cs	(revision 18142)
+++ /trunk/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Interfaces/INumericTreeNode.cs	(revision 18143)
@@ -26,5 +26,5 @@
   [StorableType("194AFEE6-96E2-4F53-A5AD-D3CCFE928AE5")]
   public interface INumericTreeNode : ISymbolicExpressionTreeNode {
-    double Value { get; set; }
+    double Value { get; }
   }
 }
Index: /trunk/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Symbols/ConstantTreeNode.cs
===================================================================
--- /trunk/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Symbols/ConstantTreeNode.cs	(revision 18142)
+++ /trunk/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Symbols/ConstantTreeNode.cs	(revision 18143)
@@ -30,8 +30,5 @@
     public new Constant Symbol => (Constant) base.Symbol;
 
-    public double Value { 
-      get => Symbol.Value;
-      set => throw new System.NotSupportedException("Cannot change the value of a constant.");
-    }
+    public double Value => Symbol.Value;
 
     [StorableConstructor]
Index: /trunk/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/DataAnalysisProblemData.cs
===================================================================
--- /trunk/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/DataAnalysisProblemData.cs	(revision 18142)
+++ /trunk/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/DataAnalysisProblemData.cs	(revision 18143)
@@ -187,12 +187,12 @@
       Parameters.Add(new FixedValueParameter<ReadOnlyItemList<ITransformation>>(TransformationsParameterName, "", transformationsList.AsReadOnly()));
 
+      IntervalCollection varRanges = null;
       if (variableRanges == null) {
-        variableRanges = Dataset.GetVariableRanges();
+        varRanges = Dataset.GetVariableRanges();
       }else {
-        foreach (var entry in variableRanges.GetVariableIntervals())
-          VariableRanges.SetInterval(entry.Item1, entry.Item2);
-      }
-
-      Parameters.Add(new FixedValueParameter<IntervalCollection>(VariableRangesParameterName, variableRanges));
+        varRanges = (IntervalCollection) variableRanges.Clone();
+      }
+
+      Parameters.Add(new FixedValueParameter<IntervalCollection>(VariableRangesParameterName, varRanges));
 
       TransformationsParameter.Hidden = true;
