Index: stable/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/GaussianProcessBase.cs
===================================================================
--- stable/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/GaussianProcessBase.cs	(revision 13146)
+++ stable/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/GaussianProcessBase.cs	(revision 13147)
@@ -21,6 +21,4 @@
 #endregion
 
-using System;
-using System.Linq;
 using HeuristicLab.Algorithms.GradientDescent;
 using HeuristicLab.Common;
@@ -31,5 +29,4 @@
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.PluginInfrastructure;
 using HeuristicLab.Problems.DataAnalysis;
 
@@ -51,4 +48,5 @@
     protected const string HyperparameterGradientsParameterName = "HyperparameterGradients";
     protected const string SolutionCreatorParameterName = "GaussianProcessSolutionCreator";
+    protected const string ScaleInputValuesParameterName = "ScaleInputValues";
 
     public new IDataAnalysisProblem Problem {
@@ -72,4 +70,7 @@
     public IValueParameter<BoolValue> SetSeedRandomlyParameter {
       get { return (IValueParameter<BoolValue>)Parameters[SetSeedRandomlyParameterName]; }
+    }
+    public IFixedValueParameter<BoolValue> ScaleInputValuesParameter {
+      get { return (IFixedValueParameter<BoolValue>)Parameters[ScaleInputValuesParameterName]; }
     }
     #endregion
@@ -89,4 +90,9 @@
     public int Seed { get { return SeedParameter.Value.Value; } set { SeedParameter.Value.Value = value; } }
     public bool SetSeedRandomly { get { return SetSeedRandomlyParameter.Value.Value; } set { SetSeedRandomlyParameter.Value.Value = value; } }
+
+    public bool ScaleInputValues {
+      get { return ScaleInputValuesParameter.Value.Value; }
+      set { ScaleInputValuesParameter.Value.Value = value; }
+    }
     #endregion
 
@@ -107,4 +113,8 @@
       Parameters.Add(new ValueParameter<BoolValue>(ApproximateGradientsParameterName, "Indicates that gradients should not be approximated (necessary for LM-BFGS).", new BoolValue(false)));
       Parameters[ApproximateGradientsParameterName].Hidden = true; // should not be changed
+
+      Parameters.Add(new FixedValueParameter<BoolValue>(ScaleInputValuesParameterName,
+        "Determines if the input variable values are scaled to the range [0..1] for training.", new BoolValue(true)));
+      Parameters[ScaleInputValuesParameterName].Hidden = true;
 
       // necessary for BFGS
@@ -191,4 +201,10 @@
         Parameters["Maximization"].Hidden = true;
       }
+
+      if (!Parameters.ContainsKey(ScaleInputValuesParameterName)) {
+        Parameters.Add(new FixedValueParameter<BoolValue>(ScaleInputValuesParameterName,
+          "Determines if the input variable values are scaled to the range [0..1] for training.", new BoolValue(true)));
+        Parameters[ScaleInputValuesParameterName].Hidden = true;
+      }
       #endregion
     }
Index: stable/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/GaussianProcessClassificationModelCreator.cs
===================================================================
--- stable/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/GaussianProcessClassificationModelCreator.cs	(revision 13146)
+++ stable/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/GaussianProcessClassificationModelCreator.cs	(revision 13147)
@@ -62,12 +62,10 @@
     public override IOperation Apply() {
       try {
-        var model = Create(ProblemData, Hyperparameter.ToArray(), MeanFunction, CovarianceFunction);
+        var model = Create(ProblemData, Hyperparameter.ToArray(), MeanFunction, CovarianceFunction, ScaleInputValues);
         ModelParameter.ActualValue = model;
         NegativeLogLikelihoodParameter.ActualValue = new DoubleValue(model.NegativeLogLikelihood);
         HyperparameterGradientsParameter.ActualValue = new RealVector(model.HyperparameterGradients);
         return base.Apply();
-      }
-      catch (ArgumentException) { }
-      catch (alglib.alglibexception) { }
+      } catch (ArgumentException) { } catch (alglib.alglibexception) { }
       NegativeLogLikelihoodParameter.ActualValue = new DoubleValue(1E300);
       HyperparameterGradientsParameter.ActualValue = new RealVector(Hyperparameter.Count());
@@ -75,6 +73,6 @@
     }
 
-    public static IGaussianProcessModel Create(IClassificationProblemData problemData, double[] hyperparameter, IMeanFunction meanFunction, ICovarianceFunction covarianceFunction) {
-      return new GaussianProcessModel(problemData.Dataset, problemData.TargetVariable, problemData.AllowedInputVariables, problemData.TrainingIndices, hyperparameter, meanFunction, covarianceFunction);
+    public static IGaussianProcessModel Create(IClassificationProblemData problemData, double[] hyperparameter, IMeanFunction meanFunction, ICovarianceFunction covarianceFunction, bool scaleInputs = true) {
+      return new GaussianProcessModel(problemData.Dataset, problemData.TargetVariable, problemData.AllowedInputVariables, problemData.TrainingIndices, hyperparameter, meanFunction, covarianceFunction, scaleInputs);
     }
   }
Index: stable/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/GaussianProcessModel.cs
===================================================================
--- stable/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/GaussianProcessModel.cs	(revision 13146)
+++ stable/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/GaussianProcessModel.cs	(revision 13147)
@@ -124,5 +124,6 @@
       this.meanFunction = cloner.Clone(original.meanFunction);
       this.covarianceFunction = cloner.Clone(original.covarianceFunction);
-      this.inputScaling = cloner.Clone(original.inputScaling);
+      if (original.inputScaling != null)
+        this.inputScaling = cloner.Clone(original.inputScaling);
       this.trainingDataset = cloner.Clone(original.trainingDataset);
       this.negativeLogLikelihood = original.negativeLogLikelihood;
@@ -144,5 +145,6 @@
     }
     public GaussianProcessModel(IDataset ds, string targetVariable, IEnumerable<string> allowedInputVariables, IEnumerable<int> rows,
-      IEnumerable<double> hyp, IMeanFunction meanFunction, ICovarianceFunction covarianceFunction)
+      IEnumerable<double> hyp, IMeanFunction meanFunction, ICovarianceFunction covarianceFunction,
+      bool scaleInputs = true)
       : base() {
       this.name = ItemName;
@@ -163,13 +165,16 @@
                                              .ToArray();
       sqrSigmaNoise = Math.Exp(2.0 * hyp.Last());
-      CalculateModel(ds, rows);
-    }
-
-    private void CalculateModel(IDataset ds, IEnumerable<int> rows) {
+      CalculateModel(ds, rows, scaleInputs);
+    }
+
+    private void CalculateModel(IDataset ds, IEnumerable<int> rows, bool scaleInputs = true) {
       this.trainingDataset = (IDataset)ds.Clone();
       this.trainingRows = rows.ToArray();
-      this.inputScaling = new Scaling(trainingDataset, allowedInputVariables, rows);
-      this.x = CalculateX(trainingDataset, allowedInputVariables, rows, inputScaling);
-      var y = ds.GetDoubleValues(targetVariable, rows);
+      this.inputScaling = scaleInputs ? new Scaling(ds, allowedInputVariables, rows) : null;
+
+      x = GetData(ds, this.allowedInputVariables, this.trainingRows, this.inputScaling);
+
+      IEnumerable<double> y;
+      y = ds.GetDoubleValues(targetVariable, rows);
 
       int n = x.GetLength(0);
@@ -184,6 +189,4 @@
         .Select(r => mean.Mean(x, r))
         .ToArray();
-
-
 
       // calculate sum of diagonal elements for likelihood
@@ -249,6 +252,10 @@
     }
 
-    private static double[,] CalculateX(IDataset ds, IEnumerable<string> allowedInputVariables, IEnumerable<int> rows, Scaling inputScaling) {
-      return AlglibUtil.PrepareAndScaleInputMatrix(ds, allowedInputVariables, rows, inputScaling);
+    private static double[,] GetData(IDataset ds, IEnumerable<string> allowedInputs, IEnumerable<int> rows, Scaling scaling) {
+      if (scaling != null) {
+        return AlglibUtil.PrepareAndScaleInputMatrix(ds, allowedInputs, rows, scaling);
+      } else {
+        return AlglibUtil.PrepareInputMatrix(ds, allowedInputs, rows);
+      }
     }
 
@@ -300,9 +307,9 @@
     private IEnumerable<double> GetEstimatedValuesHelper(IDataset dataset, IEnumerable<int> rows) {
       if (x == null) {
-        this.x = CalculateX(trainingDataset, allowedInputVariables, trainingRows, inputScaling);
+        x = GetData(trainingDataset, allowedInputVariables, trainingRows, inputScaling);
       }
       int n = x.GetLength(0);
 
-      var newX = AlglibUtil.PrepareAndScaleInputMatrix(dataset, allowedInputVariables, rows, inputScaling);
+      double[,] newX = GetData(dataset, allowedInputVariables, rows, inputScaling);
       int newN = newX.GetLength(0);
 
@@ -325,9 +332,9 @@
     public IEnumerable<double> GetEstimatedVariance(IDataset dataset, IEnumerable<int> rows) {
       if (x == null) {
-        this.x = CalculateX(trainingDataset, allowedInputVariables, trainingRows, inputScaling);
+        x = GetData(trainingDataset, allowedInputVariables, trainingRows, inputScaling);
       }
       int n = x.GetLength(0);
 
-      var newX = AlglibUtil.PrepareAndScaleInputMatrix(dataset, allowedInputVariables, rows, inputScaling);
+      var newX = GetData(dataset, allowedInputVariables, rows, inputScaling);
       int newN = newX.GetLength(0);
 
Index: stable/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/GaussianProcessModelCreator.cs
===================================================================
--- stable/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/GaussianProcessModelCreator.cs	(revision 13146)
+++ stable/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/GaussianProcessModelCreator.cs	(revision 13147)
@@ -38,4 +38,5 @@
     private const string NegativeLogLikelihoodParameterName = "NegativeLogLikelihood";
     private const string HyperparameterGradientsParameterName = "HyperparameterGradients";
+    protected const string ScaleInputValuesParameterName = "ScaleInputValues";
 
     #region Parameter Properties
@@ -60,5 +61,7 @@
       get { return (ILookupParameter<DoubleValue>)Parameters[NegativeLogLikelihoodParameterName]; }
     }
-
+    public ILookupParameter<BoolValue> ScaleInputValuesParameter {
+      get { return (ILookupParameter<BoolValue>)Parameters[ScaleInputValuesParameterName]; }
+    }
     #endregion
 
@@ -67,4 +70,5 @@
     protected IMeanFunction MeanFunction { get { return MeanFunctionParameter.ActualValue; } }
     protected ICovarianceFunction CovarianceFunction { get { return CovarianceFunctionParameter.ActualValue; } }
+    public bool ScaleInputValues { get { return ScaleInputValuesParameter.ActualValue.Value; } }
     #endregion
 
@@ -82,4 +86,18 @@
       Parameters.Add(new LookupParameter<RealVector>(HyperparameterGradientsParameterName, "The gradients of the hyperparameters for the produced Gaussian process model (necessary for hyperparameter optimization)"));
       Parameters.Add(new LookupParameter<DoubleValue>(NegativeLogLikelihoodParameterName, "The negative log-likelihood of the produced Gaussian process model given the data."));
+
+
+      Parameters.Add(new LookupParameter<BoolValue>(ScaleInputValuesParameterName,
+        "Determines if the input variable values are scaled to the range [0..1] for training."));
+      Parameters[ScaleInputValuesParameterName].Hidden = true;
+    }
+
+    [StorableHook(HookType.AfterDeserialization)]
+    private void AfterDeserialization() {
+      if (!Parameters.ContainsKey(ScaleInputValuesParameterName)) {
+        Parameters.Add(new LookupParameter<BoolValue>(ScaleInputValuesParameterName,
+          "Determines if the input variable values are scaled to the range [0..1] for training."));
+        Parameters[ScaleInputValuesParameterName].Hidden = true;
+      }
     }
   }
Index: stable/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/GaussianProcessRegressionModelCreator.cs
===================================================================
--- stable/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/GaussianProcessRegressionModelCreator.cs	(revision 13146)
+++ stable/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/GaussianProcessRegressionModelCreator.cs	(revision 13147)
@@ -62,5 +62,5 @@
     public override IOperation Apply() {
       try {
-        var model = Create(ProblemData, Hyperparameter.ToArray(), MeanFunction, CovarianceFunction);
+        var model = Create(ProblemData, Hyperparameter.ToArray(), MeanFunction, CovarianceFunction, ScaleInputValues);
         ModelParameter.ActualValue = model;
         NegativeLogLikelihoodParameter.ActualValue = new DoubleValue(model.NegativeLogLikelihood);
@@ -75,6 +75,6 @@
     }
 
-    public static IGaussianProcessModel Create(IRegressionProblemData problemData, double[] hyperparameter, IMeanFunction meanFunction, ICovarianceFunction covarianceFunction) {
-      return new GaussianProcessModel(problemData.Dataset, problemData.TargetVariable, problemData.AllowedInputVariables, problemData.TrainingIndices, hyperparameter, meanFunction, covarianceFunction);
+    public static IGaussianProcessModel Create(IRegressionProblemData problemData, double[] hyperparameter, IMeanFunction meanFunction, ICovarianceFunction covarianceFunction, bool scaleInputs = true) {
+      return new GaussianProcessModel(problemData.Dataset, problemData.TargetVariable, problemData.AllowedInputVariables, problemData.TrainingIndices, hyperparameter, meanFunction, covarianceFunction, scaleInputs);
     }
   }
