Index: /trunk/sources/HeuristicLab.Algorithms.DataAnalysis.Views/3.4/CovarianceProdView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Algorithms.DataAnalysis.Views/3.4/CovarianceProdView.cs	(revision 8619)
+++ /trunk/sources/HeuristicLab.Algorithms.DataAnalysis.Views/3.4/CovarianceProdView.cs	(revision 8620)
@@ -26,9 +26,9 @@
 namespace HeuristicLab.Algorithms.DataAnalysis.Views {
   [View("Covariance Prod View")]
-  [Content(typeof(CovarianceProd), true)]
+  [Content(typeof(CovarianceProduct), true)]
   public partial class CovarianceProdView : AsynchronousContentView {
 
-    public new CovarianceProd Content {
-      get { return (CovarianceProd)base.Content; }
+    public new CovarianceProduct Content {
+      get { return (CovarianceProduct)base.Content; }
       set { base.Content = value; }
     }
Index: /trunk/sources/HeuristicLab.Algorithms.DataAnalysis.Views/3.4/MeanProdView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Algorithms.DataAnalysis.Views/3.4/MeanProdView.cs	(revision 8619)
+++ /trunk/sources/HeuristicLab.Algorithms.DataAnalysis.Views/3.4/MeanProdView.cs	(revision 8620)
@@ -26,9 +26,9 @@
 namespace HeuristicLab.Algorithms.DataAnalysis.Views {
   [View("Mean Product View")]
-  [Content(typeof(MeanProd), true)]
+  [Content(typeof(MeanProduct), true)]
   public partial class MeanProdView : AsynchronousContentView {
 
-    public new MeanProd Content {
-      get { return (MeanProd)base.Content; }
+    public new MeanProduct Content {
+      get { return (MeanProduct)base.Content; }
       set { base.Content = value; }
     }
Index: unk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/CovarianceProd.cs
===================================================================
--- /trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/CovarianceProd.cs	(revision 8619)
+++ 	(revision )
@@ -1,98 +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 System;
-using System.Collections.Generic;
-using System.Linq;
-using HeuristicLab.Common;
-using HeuristicLab.Core;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-
-namespace HeuristicLab.Algorithms.DataAnalysis {
-  [StorableClass]
-  [Item(Name = "CovarianceProd",
-    Description = "Product covariance function for Gaussian processes.")]
-  public sealed class CovarianceProd : Item, ICovarianceFunction {
-    [Storable]
-    private ItemList<ICovarianceFunction> factors;
-
-    [Storable]
-    private int numberOfVariables;
-    public ItemList<ICovarianceFunction> Factors {
-      get { return factors; }
-    }
-
-    [StorableConstructor]
-    private CovarianceProd(bool deserializing)
-      : base(deserializing) {
-    }
-
-    private CovarianceProd(CovarianceProd original, Cloner cloner)
-      : base(original, cloner) {
-      this.factors = cloner.Clone(original.factors);
-      this.numberOfVariables = original.numberOfVariables;
-    }
-
-    public CovarianceProd()
-      : base() {
-      this.factors = new ItemList<ICovarianceFunction>();
-    }
-
-    public override IDeepCloneable Clone(Cloner cloner) {
-      return new CovarianceProd(this, cloner);
-    }
-
-    public int GetNumberOfParameters(int numberOfVariables) {
-      this.numberOfVariables = numberOfVariables;
-      return factors.Select(f => f.GetNumberOfParameters(numberOfVariables)).Sum();
-    }
-
-    public void SetParameter(double[] hyp) {
-      if (factors.Count == 0) throw new ArgumentException("at least one factor is necessary for the product covariance function.");
-      int offset = 0;
-      foreach (var t in factors) {
-        var numberOfParameters = t.GetNumberOfParameters(numberOfVariables);
-        t.SetParameter(hyp.Skip(offset).Take(numberOfParameters).ToArray());
-        offset += numberOfParameters;
-      }
-    }
-
-    public double GetCovariance(double[,] x, int i, int j) {
-      return factors.Select(f => f.GetCovariance(x, i, j)).Aggregate((a, b) => a * b);
-    }
-
-    public IEnumerable<double> GetGradient(double[,] x, int i, int j) {
-      var covariances = factors.Select(f => f.GetCovariance(x, i, j)).ToArray();
-      for (int ii = 0; ii < factors.Count; ii++) {
-        foreach (var g in factors[ii].GetGradient(x, i, j)) {
-          double res = g;
-          for (int jj = 0; jj < covariances.Length; jj++)
-            if (ii != jj) res *= covariances[jj];
-          yield return res;
-        }
-      }
-    }
-
-    public double GetCrossCovariance(double[,] x, double[,] xt, int i, int j) {
-      return factors.Select(f => f.GetCrossCovariance(x, xt, i, j)).Aggregate((a, b) => a * b);
-    }
-  }
-}
Index: /trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/CovarianceProduct.cs
===================================================================
--- /trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/CovarianceProduct.cs	(revision 8620)
+++ /trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/CovarianceProduct.cs	(revision 8620)
@@ -0,0 +1,98 @@
+﻿#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 System;
+using System.Collections.Generic;
+using System.Linq;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Algorithms.DataAnalysis {
+  [StorableClass]
+  [Item(Name = "CovarianceProduct",
+    Description = "Product covariance function for Gaussian processes.")]
+  public sealed class CovarianceProduct : Item, ICovarianceFunction {
+    [Storable]
+    private ItemList<ICovarianceFunction> factors;
+
+    [Storable]
+    private int numberOfVariables;
+    public ItemList<ICovarianceFunction> Factors {
+      get { return factors; }
+    }
+
+    [StorableConstructor]
+    private CovarianceProduct(bool deserializing)
+      : base(deserializing) {
+    }
+
+    private CovarianceProduct(CovarianceProduct original, Cloner cloner)
+      : base(original, cloner) {
+      this.factors = cloner.Clone(original.factors);
+      this.numberOfVariables = original.numberOfVariables;
+    }
+
+    public CovarianceProduct()
+      : base() {
+      this.factors = new ItemList<ICovarianceFunction>();
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new CovarianceProduct(this, cloner);
+    }
+
+    public int GetNumberOfParameters(int numberOfVariables) {
+      this.numberOfVariables = numberOfVariables;
+      return factors.Select(f => f.GetNumberOfParameters(numberOfVariables)).Sum();
+    }
+
+    public void SetParameter(double[] hyp) {
+      if (factors.Count == 0) throw new ArgumentException("at least one factor is necessary for the product covariance function.");
+      int offset = 0;
+      foreach (var t in factors) {
+        var numberOfParameters = t.GetNumberOfParameters(numberOfVariables);
+        t.SetParameter(hyp.Skip(offset).Take(numberOfParameters).ToArray());
+        offset += numberOfParameters;
+      }
+    }
+
+    public double GetCovariance(double[,] x, int i, int j) {
+      return factors.Select(f => f.GetCovariance(x, i, j)).Aggregate((a, b) => a * b);
+    }
+
+    public IEnumerable<double> GetGradient(double[,] x, int i, int j) {
+      var covariances = factors.Select(f => f.GetCovariance(x, i, j)).ToArray();
+      for (int ii = 0; ii < factors.Count; ii++) {
+        foreach (var g in factors[ii].GetGradient(x, i, j)) {
+          double res = g;
+          for (int jj = 0; jj < covariances.Length; jj++)
+            if (ii != jj) res *= covariances[jj];
+          yield return res;
+        }
+      }
+    }
+
+    public double GetCrossCovariance(double[,] x, double[,] xt, int i, int j) {
+      return factors.Select(f => f.GetCrossCovariance(x, xt, i, j)).Aggregate((a, b) => a * b);
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/CovarianceScale.cs
===================================================================
--- /trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/CovarianceScale.cs	(revision 8620)
+++ /trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/CovarianceScale.cs	(revision 8620)
@@ -0,0 +1,122 @@
+﻿#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 System;
+using System.Collections.Generic;
+using System.Linq;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Algorithms.DataAnalysis {
+  [StorableClass]
+  [Item(Name = "CovarianceScale",
+    Description = "Scale covariance function for Gaussian processes.")]
+  public sealed class CovarianceScale : ParameterizedNamedItem, ICovarianceFunction {
+    [Storable]
+    private double sf2;
+    [Storable]
+    private readonly HyperParameter<DoubleValue> scaleParameter;
+    public IValueParameter<DoubleValue> ScaleParameter {
+      get { return scaleParameter; }
+    }
+
+    [Storable]
+    private ICovarianceFunction cov;
+    [Storable]
+    private readonly ValueParameter<ICovarianceFunction> covParameter;
+    public IValueParameter<ICovarianceFunction> CovarianceFunctionParameter {
+      get { return covParameter; }
+    }
+
+    [StorableConstructor]
+    private CovarianceScale(bool deserializing)
+      : base(deserializing) {
+    }
+
+    private CovarianceScale(CovarianceScale original, Cloner cloner)
+      : base(original, cloner) {
+      this.scaleParameter = cloner.Clone(original.scaleParameter);
+      this.sf2 = original.sf2;
+
+      this.covParameter = cloner.Clone(original.covParameter);
+      this.cov = cloner.Clone(original.cov);
+      RegisterEvents();
+    }
+
+    public CovarianceScale()
+      : base() {
+      Name = ItemName;
+      Description = ItemDescription;
+
+      this.scaleParameter = new HyperParameter<DoubleValue>("Scale", "The scale parameter.");
+      this.covParameter = new ValueParameter<ICovarianceFunction>("CovarianceFunction", "The covariance function that should be scaled.", new CovarianceSquaredExponentialIso());
+
+      Parameters.Add(this.scaleParameter);
+      Parameters.Add(covParameter);
+
+      RegisterEvents();
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new CovarianceScale(this, cloner);
+    }
+
+    [StorableHook(HookType.AfterDeserialization)]
+    private void AfterDeserialization() {
+      RegisterEvents();
+    }
+
+    private void RegisterEvents() {
+      Util.AttachValueChangeHandler<DoubleValue, double>(scaleParameter, () => { sf2 = scaleParameter.Value.Value; });
+      covParameter.ValueChanged += (sender, args) => { cov = covParameter.Value; };
+    }
+
+    public int GetNumberOfParameters(int numberOfVariables) {
+      return (scaleParameter.Fixed ? 0 : 1) + cov.GetNumberOfParameters(numberOfVariables);
+    }
+
+    public void SetParameter(double[] hyp) {
+      int i = 0;
+      if (!scaleParameter.Fixed) {
+        scaleParameter.SetValue(new DoubleValue(Math.Exp(2 * hyp[i])));
+        i++;
+      }
+      cov.SetParameter(hyp.Skip(i).ToArray());
+    }
+
+    public double GetCovariance(double[,] x, int i, int j) {
+      return sf2 * cov.GetCovariance(x, i, j);
+    }
+
+    public IEnumerable<double> GetGradient(double[,] x, int i, int j) {
+      yield return 2 * sf2 * cov.GetCovariance(x, i, j);
+      foreach (var g in cov.GetGradient(x, i, j))
+        yield return sf2 * g;
+    }
+
+    public double GetCrossCovariance(double[,] x, double[,] xt, int i, int j) {
+      return sf2 * cov.GetCrossCovariance(x, xt, i, j);
+    }
+  }
+}
Index: unk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/MeanProd.cs
===================================================================
--- /trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/MeanProd.cs	(revision 8619)
+++ 	(revision )
@@ -1,104 +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 System.Linq;
-using HeuristicLab.Common;
-using HeuristicLab.Core;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-
-namespace HeuristicLab.Algorithms.DataAnalysis {
-  [StorableClass]
-  [Item(Name = "MeanProd", Description = "Product of mean functions for Gaussian processes.")]
-  public sealed class MeanProd : Item, IMeanFunction {
-    [Storable]
-    private ItemList<IMeanFunction> factors;
-
-    [Storable]
-    private int numberOfVariables;
-
-    public ItemList<IMeanFunction> Factors {
-      get { return factors; }
-    }
-
-    [StorableConstructor]
-    private MeanProd(bool deserializing)
-      : base(deserializing) {
-    }
-
-    private MeanProd(MeanProd original, Cloner cloner)
-      : base(original, cloner) {
-      this.factors = cloner.Clone(original.factors);
-      this.numberOfVariables = original.numberOfVariables;
-    }
-
-    public MeanProd() {
-      this.factors = new ItemList<IMeanFunction>();
-    }
-    public override IDeepCloneable Clone(Cloner cloner) {
-      return new MeanProd(this, cloner);
-    }
-
-    public int GetNumberOfParameters(int numberOfVariables) {
-      this.numberOfVariables = numberOfVariables;
-      return factors.Select(t => t.GetNumberOfParameters(numberOfVariables)).Sum();
-    }
-
-    public void SetParameter(double[] hyp) {
-      int offset = 0;
-      foreach (var t in factors) {
-        var numberOfParameters = t.GetNumberOfParameters(numberOfVariables);
-        t.SetParameter(hyp.Skip(offset).Take(numberOfParameters).ToArray());
-        offset += numberOfParameters;
-      }
-    }
-
-    public double[] GetMean(double[,] x) {
-      var res = factors.First().GetMean(x);
-      foreach (var t in factors.Skip(1)) {
-        var a = t.GetMean(x);
-        for (int i = 0; i < res.Length; i++) res[i] *= a[i];
-      }
-      return res;
-    }
-
-    public double[] GetGradients(int k, double[,] x) {
-      double[] res = Enumerable.Repeat(1.0, x.GetLength(0)).ToArray();
-      // find index of factor for the given k
-      int j = 0;
-      while (k >= factors[j].GetNumberOfParameters(numberOfVariables)) {
-        k -= factors[j].GetNumberOfParameters(numberOfVariables);
-        j++;
-      }
-      for (int i = 0; i < factors.Count; i++) {
-        var f = factors[i];
-        if (i == j) {
-          // multiply gradient
-          var g = f.GetGradients(k, x);
-          for (int ii = 0; ii < res.Length; ii++) res[ii] *= g[ii];
-        } else {
-          // multiply mean
-          var m = f.GetMean(x);
-          for (int ii = 0; ii < res.Length; ii++) res[ii] *= m[ii];
-        }
-      }
-      return res;
-    }
-  }
-}
Index: /trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/MeanProduct.cs
===================================================================
--- /trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/MeanProduct.cs	(revision 8620)
+++ /trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/MeanProduct.cs	(revision 8620)
@@ -0,0 +1,104 @@
+﻿#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 System.Linq;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Algorithms.DataAnalysis {
+  [StorableClass]
+  [Item(Name = "MeanProduct", Description = "Product of mean functions for Gaussian processes.")]
+  public sealed class MeanProduct : Item, IMeanFunction {
+    [Storable]
+    private ItemList<IMeanFunction> factors;
+
+    [Storable]
+    private int numberOfVariables;
+
+    public ItemList<IMeanFunction> Factors {
+      get { return factors; }
+    }
+
+    [StorableConstructor]
+    private MeanProduct(bool deserializing)
+      : base(deserializing) {
+    }
+
+    private MeanProduct(MeanProduct original, Cloner cloner)
+      : base(original, cloner) {
+      this.factors = cloner.Clone(original.factors);
+      this.numberOfVariables = original.numberOfVariables;
+    }
+
+    public MeanProduct() {
+      this.factors = new ItemList<IMeanFunction>();
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new MeanProduct(this, cloner);
+    }
+
+    public int GetNumberOfParameters(int numberOfVariables) {
+      this.numberOfVariables = numberOfVariables;
+      return factors.Select(t => t.GetNumberOfParameters(numberOfVariables)).Sum();
+    }
+
+    public void SetParameter(double[] hyp) {
+      int offset = 0;
+      foreach (var t in factors) {
+        var numberOfParameters = t.GetNumberOfParameters(numberOfVariables);
+        t.SetParameter(hyp.Skip(offset).Take(numberOfParameters).ToArray());
+        offset += numberOfParameters;
+      }
+    }
+
+    public double[] GetMean(double[,] x) {
+      var res = factors.First().GetMean(x);
+      foreach (var t in factors.Skip(1)) {
+        var a = t.GetMean(x);
+        for (int i = 0; i < res.Length; i++) res[i] *= a[i];
+      }
+      return res;
+    }
+
+    public double[] GetGradients(int k, double[,] x) {
+      double[] res = Enumerable.Repeat(1.0, x.GetLength(0)).ToArray();
+      // find index of factor for the given k
+      int j = 0;
+      while (k >= factors[j].GetNumberOfParameters(numberOfVariables)) {
+        k -= factors[j].GetNumberOfParameters(numberOfVariables);
+        j++;
+      }
+      for (int i = 0; i < factors.Count; i++) {
+        var f = factors[i];
+        if (i == j) {
+          // multiply gradient
+          var g = f.GetGradients(k, x);
+          for (int ii = 0; ii < res.Length; ii++) res[ii] *= g[ii];
+        } else {
+          // multiply mean
+          var m = f.GetMean(x);
+          for (int ii = 0; ii < res.Length; ii++) res[ii] *= m[ii];
+        }
+      }
+      return res;
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/HeuristicLab.Algorithms.DataAnalysis-3.4.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/HeuristicLab.Algorithms.DataAnalysis-3.4.csproj	(revision 8619)
+++ /trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/HeuristicLab.Algorithms.DataAnalysis-3.4.csproj	(revision 8620)
@@ -120,4 +120,6 @@
     </Compile>
     <Compile Include="FixedDataAnalysisAlgorithm.cs" />
+    <Compile Include="GaussianProcess\CovarianceProduct.cs" />
+    <Compile Include="GaussianProcess\CovarianceScale.cs" />
     <Compile Include="GaussianProcess\CovarianceRationalQuadraticArd.cs" />
     <Compile Include="GaussianProcess\CovarianceRationalQuadraticIso.cs" />
@@ -129,7 +131,6 @@
     <Compile Include="GaussianProcess\CovarianceNoise.cs" />
     <Compile Include="GaussianProcess\CovarianceConst.cs" />
-    <Compile Include="GaussianProcess\MeanProd.cs" />
+    <Compile Include="GaussianProcess\MeanProduct.cs" />
     <Compile Include="GaussianProcess\MeanSum.cs" />
-    <Compile Include="GaussianProcess\CovarianceProd.cs" />
     <Compile Include="GaussianProcess\CovarianceSum.cs" />
     <Compile Include="GaussianProcess\CovariancePeriodic.cs" />
Index: /trunk/sources/HeuristicLab.Tests/HeuristicLab.Algorithms.DataAnalysis-3.4/GaussianProcessFunctionsTest.cs
===================================================================
--- /trunk/sources/HeuristicLab.Tests/HeuristicLab.Algorithms.DataAnalysis-3.4/GaussianProcessFunctionsTest.cs	(revision 8619)
+++ /trunk/sources/HeuristicLab.Tests/HeuristicLab.Algorithms.DataAnalysis-3.4/GaussianProcessFunctionsTest.cs	(revision 8620)
@@ -77,5 +77,5 @@
     [TestMethod]
     public void MeanProdTest() {
-      var prod = new MeanProd();
+      var prod = new MeanProduct();
       prod.Factors.Add(new MeanConst());
       prod.Factors.Add(new MeanConst());
@@ -1379,7 +1379,128 @@
       );
     }
+
+    [TestMethod]
+    public void CovScaleTest() {
+      var cov = new CovarianceScale();
+      cov.CovarianceFunctionParameter.Value = new CovarianceSquaredExponentialIso();
+      TestCovarianceFunction(cov, 0,
+        new double[,]
+          {
+{    0.5770,    0.5404,    0.8569,    0.5612,    0.7545,    0.4981,    0.6649,    0.7483,    0.6564,    0.8184},
+{    0.6206,    0.7027,    0.7091,    0.6015,    0.7295,    0.5338,    0.6706,    0.8202,    0.7155,    0.8029},
+{    0.7743,    0.7513,    0.8468,    0.6864,    0.5644,    0.7861,    0.8404,    0.6625,    0.7555,    0.8335},
+{    0.7773,    0.5513,    0.7793,    0.7166,    0.4533,    0.5870,    0.8913,    0.8797,    0.8656,    0.8245},
+{    0.8839,    0.5934,    0.7689,    0.8982,    0.4126,    0.4742,    0.7883,    0.9202,    0.9077,    0.8649},
+{    0.8746,    0.7341,    0.7021,    0.8323,    0.4826,    0.5923,    0.8706,    0.9508,    0.9524,    0.8660},
+{    0.6133,    0.7560,    0.7280,    0.5749,    0.8722,    0.5651,    0.6530,    0.6259,    0.6633,    0.8194},
+{    0.6113,    0.6277,    0.8110,    0.5489,    0.7110,    0.6222,    0.6948,    0.5425,    0.6227,    0.7828},
+{    0.6394,    0.6950,    0.8669,    0.6107,    0.7933,    0.5985,    0.6824,    0.6858,    0.6703,    0.8492},
+{    0.5791,    0.7156,    0.6274,    0.5324,    0.6323,    0.6100,    0.6863,    0.8091,    0.6855,    0.7173},
+          },
+        new double[][,]
+          {      
+            new double[,]
+              {
+{    2.0000,    1.6472,    1.1513,    1.3142,    1.3662,    1.2437,    1.6267,    1.4148,    1.7372,    1.2786},
+{    1.6472,    2.0000,    1.0689,    1.1876,    1.4541,    1.5370,    1.5174,    1.0103,    1.5898,    1.8381},
+{    1.1513,    1.0689,    2.0000,    1.2199,    1.3398,    1.2402,    1.2244,    1.5320,    1.5293,    1.0276},
+{    1.3142,    1.1876,    1.2199,    2.0000,    1.5197,    1.7027,    1.1555,    1.2033,    1.0675,    1.1291},
+{    1.3662,    1.4541,    1.3398,    1.5197,    2.0000,    1.7299,    1.0916,    0.9989,    1.3706,    1.3407},
+{    1.2437,    1.5370,    1.2402,    1.7027,    1.7299,    2.0000,    1.2223,    0.9923,    1.1787,    1.5758},
+{    1.6267,    1.5174,    1.2244,    1.1555,    1.0916,    1.2223,    2.0000,    1.6461,    1.6369,    1.1928},
+{    1.4148,    1.0103,    1.5320,    1.2033,    0.9989,    0.9923,    1.6461,    2.0000,    1.5176,    0.7806},
+{    1.7372,    1.5898,    1.5293,    1.0675,    1.3706,    1.1787,    1.6369,    1.5176,    2.0000,    1.3009},
+{    1.2786,    1.8381,    1.0276,    1.1291,    1.3407,    1.5758,    1.1928,    0.7806,    1.3009,    2.0000},
+              },
+            new double[,]
+              {
+{         0,    0.3197,    0.6358,    0.5518,    0.5207,    0.5909,    0.3361,    0.4897,    0.2447,    0.5720},
+{    0.3197,         0,    0.6697,    0.6190,    0.4635,    0.4047,    0.4190,    0.6899,    0.3650,    0.1552},
+{    0.6358,    0.6697,         0,    0.6031,    0.5367,    0.5927,    0.6008,    0.4084,    0.4103,    0.6843},
+{    0.5518,    0.6190,    0.6031,         0,    0.4173,    0.2740,    0.6339,    0.6114,    0.6702,    0.6455},
+{    0.5207,    0.4635,    0.5367,    0.4173,         0,    0.2510,    0.6610,    0.6935,    0.5180,    0.5362},
+{    0.5909,    0.4047,    0.5927,    0.2740,    0.2510,         0,    0.6019,    0.6955,    0.6232,    0.3756},
+{    0.3361,    0.4190,    0.6008,    0.6339,    0.6610,    0.6019,         0,    0.3205,    0.3279,    0.6165},
+{    0.4897,    0.6899,    0.4084,    0.6114,    0.6935,    0.6955,    0.3205,         0,    0.4189,    0.7344},
+{    0.2447,    0.3650,    0.4103,    0.6702,    0.5180,    0.6232,    0.3279,    0.4189,         0,    0.5595},
+{    0.5720,    0.1552,    0.6843,    0.6455,    0.5362,    0.3756,    0.6165,    0.7344,    0.5595,         0},
+              },
+            new double[,]
+              {
+{    2.0000,    1.6472,    1.1513,    1.3142,    1.3662,    1.2437,    1.6267,    1.4148,    1.7372,    1.2786},
+{    1.6472,    2.0000,    1.0689,    1.1876,    1.4541,    1.5370,    1.5174,    1.0103,    1.5898,    1.8381},
+{    1.1513,    1.0689,    2.0000,    1.2199,    1.3398,    1.2402,    1.2244,    1.5320,    1.5293,    1.0276},
+{    1.3142,    1.1876,    1.2199,    2.0000,    1.5197,    1.7027,    1.1555,    1.2033,    1.0675,    1.1291},
+{    1.3662,    1.4541,    1.3398,    1.5197,    2.0000,    1.7299,    1.0916,    0.9989,    1.3706,    1.3407},
+{    1.2437,    1.5370,    1.2402,    1.7027,    1.7299,    2.0000,    1.2223,    0.9923,    1.1787,    1.5758},
+{    1.6267,    1.5174,    1.2244,    1.1555,    1.0916,    1.2223,    2.0000,    1.6461,    1.6369,    1.1928},
+{    1.4148,    1.0103,    1.5320,    1.2033,    0.9989,    0.9923,    1.6461,    2.0000,    1.5176,    0.7806},
+{    1.7372,    1.5898,    1.5293,    1.0675,    1.3706,    1.1787,    1.6369,    1.5176,    2.0000,    1.3009},
+{    1.2786,    1.8381,    1.0276,    1.1291,    1.3407,    1.5758,    1.1928,    0.7806,    1.3009,    2.0000},
+              },
+          }
+      );
+      TestCovarianceFunction(cov, 1,
+        new double[,]
+          {
+{   50.6828,   50.2342,   53.4685,   50.4920,   52.5559,   49.6832,   51.6641,   52.4976,   51.5740,   53.1373},
+{   51.1850,   52.0523,   52.1160,   50.9689,   52.3171,   50.1516,   51.7239,   53.1529,   52.1794,   52.9998},
+{   52.7403,   52.5260,   53.3832,   51.8877,   50.5317,   52.8481,   53.3281,   51.6395,   52.5652,   53.2686},
+{   52.7683,   50.3705,   52.7860,   52.1901,   49.0546,   50.8004,   53.7544,   53.6589,   53.5423,   53.1907},
+{   53.6941,   50.8746,   52.6909,   53.8103,   48.4337,   49.3535,   52.8689,   53.9867,   53.8874,   53.5365},
+{   53.6171,   52.3616,   52.0459,   53.2586,   49.4713,   50.8619,   53.5837,   54.2264,   54.2390,   53.5454},
+{   51.1026,   52.5698,   52.3019,   50.6571,   53.5972,   50.5394,   51.5383,   51.2437,   51.6476,   53.1463},
+{   51.0802,   51.2635,   53.0723,   50.3407,   52.1347,   51.2021,   51.9731,   50.2612,   51.2082,   52.8185},
+{   51.3920,   51.9750,   53.5529,   51.0735,   52.9133,   50.9343,   51.8460,   51.8810,   51.7204,   53.4037},
+{   50.7067,   52.1810,   51.2605,   50.1330,   51.3144,   51.0653,   51.8868,   53.0548,   51.8777,   52.1974},
+          },
+        new double[][,]
+          {            
+            new double[,]
+              {
+{  109.1963,  106.3653,  101.3323,  103.1642,  103.7069,  102.3962,  106.1856,  104.1987,  107.1342,  102.7815},
+{  106.3653,  109.1963,  100.3190,  101.7587,  104.5858,  105.3734,  105.1910,   99.5562,  105.8559,  107.9559},
+{  101.3323,  100.3190,  109.1963,  102.1292,  103.4337,  102.3572,  102.1802,  105.3271,  105.3022,   99.7852},
+{  103.1642,  101.7587,  102.1292,  109.1963,  105.2127,  106.8440,  101.3820,  101.9396,  100.3013,  101.0662},
+{  103.7069,  104.5858,  103.4337,  105.2127,  109.1963,  107.0730,  100.6050,   99.4038,  103.7518,  103.4431},
+{  102.3962,  105.3734,  102.3572,  106.8440,  107.0730,  109.1963,  102.1564,   99.3144,  101.6555,  105.7297},
+{  106.1856,  105.1910,  102.1802,  101.3820,  100.6050,  102.1564,  109.1963,  106.3564,  106.2756,  101.8199},
+{  104.1987,   99.5562,  105.3271,  101.9396,   99.4038,   99.3144,  106.3564,  109.1963,  105.1926,   96.1411},
+{  107.1342,  105.8559,  105.3022,  100.3013,  103.7518,  101.6555,  106.2756,  105.1926,  109.1963,  103.0217},
+{  102.7815,  107.9559,   99.7852,  101.0662,  103.4431,  105.7297,  101.8199,   96.1411,  103.0217,  109.1963},
+              },
+            new double[,]
+              {
+{         0,    2.7940,    7.5738,    5.8624,    5.3491,    6.5838,    2.9688,    4.8814,    2.0425,    6.2226},
+{    2.7940,         0,    8.5062,    7.1784,    4.5117,    3.7552,    3.9310,    9.2014,    3.2888,    1.2334},
+{    7.5738,    8.5062,         0,    6.8334,    5.6078,    6.6203,    6.7857,    3.7999,    3.8238,    8.9934},
+{    5.8624,    7.1784,    6.8334,         0,    3.9101,    2.3268,    7.5278,    7.0100,    8.5225,    7.8196},
+{    5.3491,    4.5117,    5.6078,    3.9101,         0,    2.1025,    8.2441,    9.3397,    5.3065,    5.5989},
+{    6.5838,    3.7552,    6.6203,    2.3268,    2.1025,         0,    6.8080,    9.4206,    7.2742,    3.4110},
+{    2.9688,    3.9310,    6.7857,    7.5278,    8.2441,    6.8080,         0,    2.8026,    2.8812,    7.1214},
+{    4.8814,    9.2014,    3.7999,    7.0100,    9.3397,    9.4206,    2.8026,         0,    3.9294,   12.2417},
+{    2.0425,    3.2888,    3.8238,    8.5225,    5.3065,    7.2742,    2.8812,    3.9294,         0,    5.9966},
+{    6.2226,    1.2334,    8.9934,    7.8196,    5.5989,    3.4110,    7.1214,   12.2417,    5.9966,         0},
+              },
+            new double[,]
+              {
+{  109.1963,  106.3653,  101.3323,  103.1642,  103.7069,  102.3962,  106.1856,  104.1987,  107.1342,  102.7815},
+{  106.3653,  109.1963,  100.3190,  101.7587,  104.5858,  105.3734,  105.1910,   99.5562,  105.8559,  107.9559},
+{  101.3323,  100.3190,  109.1963,  102.1292,  103.4337,  102.3572,  102.1802,  105.3271,  105.3022,   99.7852},
+{  103.1642,  101.7587,  102.1292,  109.1963,  105.2127,  106.8440,  101.3820,  101.9396,  100.3013,  101.0662},
+{  103.7069,  104.5858,  103.4337,  105.2127,  109.1963,  107.0730,  100.6050,   99.4038,  103.7518,  103.4431},
+{  102.3962,  105.3734,  102.3572,  106.8440,  107.0730,  109.1963,  102.1564,   99.3144,  101.6555,  105.7297},
+{  106.1856,  105.1910,  102.1802,  101.3820,  100.6050,  102.1564,  109.1963,  106.3564,  106.2756,  101.8199},
+{  104.1987,   99.5562,  105.3271,  101.9396,   99.4038,   99.3144,  106.3564,  109.1963,  105.1926,   96.1411},
+{  107.1342,  105.8559,  105.3022,  100.3013,  103.7518,  101.6555,  106.2756,  105.1926,  109.1963,  103.0217},
+{  102.7815,  107.9559,   99.7852,  101.0662,  103.4431,  105.7297,  101.8199,   96.1411,  103.0217,  109.1963},
+              },
+          }
+      );
+    }
+
     [TestMethod]
     public void CovProdTest() {
-      var cov = new CovarianceProd();
+      var cov = new CovarianceProduct();
       cov.Factors.Add(new CovarianceSquaredExponentialIso());
       cov.Factors.Add(new CovarianceLinear());
Index: /trunk/sources/HeuristicLab.Tests/HeuristicLab.Algorithms.DataAnalysis-3.4/GaussianProcessModelTest.cs
===================================================================
--- /trunk/sources/HeuristicLab.Tests/HeuristicLab.Algorithms.DataAnalysis-3.4/GaussianProcessModelTest.cs	(revision 8619)
+++ /trunk/sources/HeuristicLab.Tests/HeuristicLab.Algorithms.DataAnalysis-3.4/GaussianProcessModelTest.cs	(revision 8620)
@@ -43,5 +43,5 @@
       var covarianceFunction = new CovarianceSum();
       covarianceFunction.Terms.Add(new CovarianceSquaredExponentialIso());
-      var prod = new CovarianceProd();
+      var prod = new CovarianceProduct();
       prod.Factors.Add(new CovarianceSquaredExponentialIso());
       prod.Factors.Add(new CovariancePeriodic());
