Index: branches/3105_PythonFormatter/HeuristicLab.Algorithms.DataAnalysis/3.4/GAM/GeneralizedAdditiveModelAlgorithm.cs
===================================================================
--- branches/3105_PythonFormatter/HeuristicLab.Algorithms.DataAnalysis/3.4/GAM/GeneralizedAdditiveModelAlgorithm.cs	(revision 17842)
+++ branches/3105_PythonFormatter/HeuristicLab.Algorithms.DataAnalysis/3.4/GAM/GeneralizedAdditiveModelAlgorithm.cs	(revision 17918)
@@ -39,4 +39,5 @@
   [Creatable(CreatableAttribute.Categories.DataAnalysisRegression, Priority = 600)]
   public sealed class GeneralizedAdditiveModelAlgorithm : FixedDataAnalysisAlgorithm<IRegressionProblem> {
+
     #region ParameterNames
 
@@ -46,4 +47,5 @@
     private const string SetSeedRandomlyParameterName = "SetSeedRandomly";
     private const string CreateSolutionParameterName = "CreateSolution";
+
     #endregion
 
@@ -141,6 +143,6 @@
       var problemData = Problem.ProblemData;
       var ds = problemData.Dataset;
-      var trainRows = problemData.TrainingIndices;
-      var testRows = problemData.TestIndices;
+      var trainRows = problemData.TrainingIndices.ToArray();
+      var testRows = problemData.TestIndices.ToArray();
       var avgY = problemData.TargetVariableTrainingValues.Average();
       var inputVars = problemData.AllowedInputVariables.ToArray();
@@ -178,8 +180,8 @@
       double[] resTest = problemData.TargetVariableTestValues.Select(yi => yi - avgY).ToArray();
 
-      curRMSE.Value = res.StandardDeviation();
-      curRMSETest.Value = resTest.StandardDeviation();
-      rmseRow.Values.Add(res.StandardDeviation()); 
-      rmseRowTest.Values.Add(resTest.StandardDeviation());
+      curRMSE.Value = RMSE(res);
+      curRMSETest.Value = RMSE(resTest);
+      rmseRow.Values.Add(curRMSE.Value);
+      rmseRowTest.Values.Add(curRMSETest.Value);
 
 
@@ -197,5 +199,5 @@
           AddInPlace(resTest, f[inputIdx].GetEstimatedValues(ds, testRows));
 
-          rssTable[inputIdx, 0] = res.Variance();
+          rssTable[inputIdx, 0] = MSE(res);
           f[inputIdx] = RegressSpline(problemData, inputVar, res, lambda);
 
@@ -204,6 +206,6 @@
         }
 
-        curRMSE.Value = res.StandardDeviation(); 
-        curRMSETest.Value = resTest.StandardDeviation();
+        curRMSE.Value = RMSE(res);
+        curRMSETest.Value = RMSE(resTest);
         rmseRow.Values.Add(curRMSE.Value);
         rmseRowTest.Values.Add(curRMSETest.Value);
@@ -215,7 +217,18 @@
         var model = new RegressionEnsembleModel(f.Concat(new[] { new ConstantModel(avgY, problemData.TargetVariable) }));
         model.AverageModelEstimates = false;
-        var solution = model.CreateRegressionSolution((IRegressionProblemData)problemData.Clone());
+        var solution = model.CreateRegressionSolution((IRegressionProblemData)problemData.Clone());        
         Results.Add(new Result("Ensemble solution", solution));
       }
+    }
+
+    public static double MSE(IEnumerable<double> residuals) {
+      var mse  = residuals.Select(r => r * r).Average();
+      return mse;
+    }
+
+    public static double RMSE(IEnumerable<double> residuals) {
+      var mse = MSE(residuals);
+      var rmse = Math.Sqrt(mse);
+      return rmse;
     }
 
Index: branches/3105_PythonFormatter/HeuristicLab.Algorithms.DataAnalysis/3.4/GAM/Spline1dModel.cs
===================================================================
--- branches/3105_PythonFormatter/HeuristicLab.Algorithms.DataAnalysis/3.4/GAM/Spline1dModel.cs	(revision 17842)
+++ branches/3105_PythonFormatter/HeuristicLab.Algorithms.DataAnalysis/3.4/GAM/Spline1dModel.cs	(revision 17918)
@@ -26,4 +26,5 @@
 using HeuristicLab.Core;
 using HeuristicLab.Problems.DataAnalysis;
+using System;
 
 namespace HeuristicLab.Algorithms.DataAnalysis {
@@ -35,11 +36,15 @@
     private alglib.spline1d.spline1dinterpolant interpolant;
 
-    [Storable]
-    private readonly string[] variablesUsedForPrediction;
-    public override IEnumerable<string> VariablesUsedForPrediction {
-      get {
-        return variablesUsedForPrediction;
+    [Storable(OldName = "variablesUsedForPrediction")]
+    private string[] StorableVariablesUsedForPrediction {
+      set {
+        if (value.Length > 1) throw new ArgumentException("A one-dimensional spline model supports only one input variable.");
+        inputVariable = value[0];
       }
     }
+
+    [Storable]
+    private string inputVariable;
+    public override IEnumerable<string> VariablesUsedForPrediction => new[] { inputVariable };
 
     [StorableConstructor]
@@ -49,31 +54,27 @@
 
     private Spline1dModel(Spline1dModel orig, Cloner cloner) : base(orig, cloner) {
-      this.variablesUsedForPrediction = orig.VariablesUsedForPrediction.ToArray();
+      this.inputVariable = orig.inputVariable;
       this.interpolant = (alglib.spline1d.spline1dinterpolant)orig.interpolant.make_copy();
     }
     public Spline1dModel(alglib.spline1d.spline1dinterpolant interpolant, string targetVar, string inputVar)
-      : base(targetVar, "Spline model (1d)") {
-      this.interpolant = (alglib.spline1d.spline1dinterpolant)interpolant.make_copy();      
-      this.variablesUsedForPrediction = new string[] { inputVar };
+      : base(targetVar, $"Spline model ({inputVar})") {
+      this.interpolant = (alglib.spline1d.spline1dinterpolant)interpolant.make_copy();
+      this.inputVariable = inputVar;      
     }
 
 
-    public override IDeepCloneable Clone(Cloner cloner) {
-      return new Spline1dModel(this, cloner);
+    public override IDeepCloneable Clone(Cloner cloner) => new Spline1dModel(this, cloner);
+
+    public override IRegressionSolution CreateRegressionSolution(IRegressionProblemData problemData) {
+      var solution =  new RegressionSolution(this, (IRegressionProblemData)problemData.Clone());
+      solution.Name = $"Regression Spline ({inputVariable})";
+
+      return solution;
     }
 
-    public override IRegressionSolution CreateRegressionSolution(IRegressionProblemData problemData) {
-      return new RegressionSolution(this, (IRegressionProblemData)problemData.Clone());
-    }
-
-    public double GetEstimatedValue(double x) {
-      return alglib.spline1d.spline1dcalc(interpolant, x);
-    }
+    public double GetEstimatedValue(double x) => alglib.spline1d.spline1dcalc(interpolant, x);
 
     public override IEnumerable<double> GetEstimatedValues(IDataset dataset, IEnumerable<int> rows) {
-      var x = dataset.GetDoubleValues(VariablesUsedForPrediction.First(), rows).ToArray();
-      foreach (var xi in x) {
-        yield return GetEstimatedValue(xi);
-      }
+      return dataset.GetDoubleValues(inputVariable, rows).Select(GetEstimatedValue);
     }
 
Index: branches/3105_PythonFormatter/HeuristicLab.Algorithms.DataAnalysis/3.4/GradientBoostedTrees/GradientBoostedTreesAlgorithm.cs
===================================================================
--- branches/3105_PythonFormatter/HeuristicLab.Algorithms.DataAnalysis/3.4/GradientBoostedTrees/GradientBoostedTreesAlgorithm.cs	(revision 17842)
+++ branches/3105_PythonFormatter/HeuristicLab.Algorithms.DataAnalysis/3.4/GradientBoostedTrees/GradientBoostedTreesAlgorithm.cs	(revision 17918)
@@ -281,5 +281,5 @@
             new AccuracyMaximizationThresholdCalculator());
           var classificationProblemData = new ClassificationProblemData(problemData.Dataset,
-            problemData.AllowedInputVariables, problemData.TargetVariable, problemData.Transformations);
+            problemData.AllowedInputVariables, problemData.TargetVariable, transformations: problemData.Transformations);
           classificationProblemData.TrainingPartition.Start = Problem.ProblemData.TrainingPartition.Start;
           classificationProblemData.TrainingPartition.End = Problem.ProblemData.TrainingPartition.End;
Index: branches/3105_PythonFormatter/HeuristicLab.Algorithms.DataAnalysis/3.4/RandomForest/RandomForestModelSurrogate.cs
===================================================================
--- branches/3105_PythonFormatter/HeuristicLab.Algorithms.DataAnalysis/3.4/RandomForest/RandomForestModelSurrogate.cs	(revision 17842)
+++ branches/3105_PythonFormatter/HeuristicLab.Algorithms.DataAnalysis/3.4/RandomForest/RandomForestModelSurrogate.cs	(revision 17918)
@@ -135,4 +135,8 @@
     }
 
+    public override bool IsProblemDataCompatible(IDataAnalysisProblemData problemData, out string errorMessage) {
+      return ActualModel.IsProblemDataCompatible(problemData, out errorMessage);
+    }
+
     //RegressionModel methods
     public bool IsProblemDataCompatible(IRegressionProblemData problemData, out string errorMessage) {
