Index: branches/2906_Transformations/HeuristicLab.Problems.DataAnalysis/3.4/HeuristicLab.Problems.DataAnalysis-3.4.csproj
===================================================================
--- branches/2906_Transformations/HeuristicLab.Problems.DataAnalysis/3.4/HeuristicLab.Problems.DataAnalysis-3.4.csproj	(revision 15865)
+++ branches/2906_Transformations/HeuristicLab.Problems.DataAnalysis/3.4/HeuristicLab.Problems.DataAnalysis-3.4.csproj	(revision 15870)
@@ -187,4 +187,5 @@
     <Compile Include="Implementation\Classification\ClassificationSolutionBase.cs" />
     <Compile Include="Implementation\Classification\ClassificationSolutionVariableImpactsCalculator.cs" />
+    <Compile Include="Implementation\Classification\ClassificationTransformationModel.cs" />
     <Compile Include="Implementation\Classification\ConstantClassificationSolution.cs" />
     <Compile Include="Implementation\Classification\DiscriminantFunctionClassificationSolutionBase.cs" />
@@ -193,4 +194,5 @@
     <Compile Include="Implementation\Clustering\ClusteringProblemData.cs" />
     <Compile Include="Implementation\Clustering\ClusteringSolution.cs" />
+    <Compile Include="Implementation\Clustering\ClusteringTransformationModel.cs" />
     <Compile Include="Implementation\ConstantModel.cs" />
     <Compile Include="Implementation\DataAnalysisModel.cs" />
@@ -206,8 +208,9 @@
     <Compile Include="Implementation\Regression\RegressionModel.cs" />
     <Compile Include="Implementation\Regression\RegressionSolutionVariableImpactsCalculator.cs" />
-    <Compile Include="Implementation\Regression\TransformedRegressionModel.cs" />
-    <Compile Include="Implementation\Regression\TransformedRegressionSolution.cs" />
+    <Compile Include="Implementation\DataAnalysisTransformationModel.cs" />
+    <Compile Include="Implementation\Regression\RegressionTransformationModel.cs" />
     <Compile Include="Implementation\TimeSeriesPrognosis\Models\ConstantTimeSeriesPrognosisModel.cs" />
     <Compile Include="Implementation\TimeSeriesPrognosis\Models\TimeSeriesPrognosisAutoRegressiveModel.cs" />
+    <Compile Include="Implementation\TimeSeriesPrognosis\Models\TimeSeriesPrognosisTransformationModel.cs" />
     <Compile Include="Implementation\TimeSeriesPrognosis\TimeSeriesPrognosisProblem.cs" />
     <Compile Include="Implementation\TimeSeriesPrognosis\TimeSeriesPrognosisProblemData.cs" />
@@ -236,12 +239,14 @@
       <SubType>Code</SubType>
     </Compile>
+    <Compile Include="Interfaces\Classification\IClassificationTransformationModel.cs" />
     <Compile Include="Interfaces\Classification\IDiscriminantFunctionThresholdCalculator.cs" />
+    <Compile Include="Interfaces\Clustering\IClusteringTransformationModel.cs" />
     <Compile Include="Interfaces\IDataAnalysisSolutionExporter.cs" />
     <Compile Include="Interfaces\IDataAnalysisTransformation.cs" />
+    <Compile Include="Interfaces\IDataAnalysisTransformationModel.cs" />
     <Compile Include="Interfaces\IDataset.cs" />
     <Compile Include="Interfaces\IDependencyCalculator.cs" />
     <Compile Include="Interfaces\ITransformation.cs" />
-    <Compile Include="Interfaces\Regression\ITransformedRegressionModel.cs" />
-    <Compile Include="Interfaces\Regression\ITransformedRegressionSolution.cs" />
+    <Compile Include="Interfaces\Regression\IRegressionTransformationModel.cs" />
     <Compile Include="Interfaces\Regression\IConfidenceRegressionModel.cs" />
     <Compile Include="Interfaces\Regression\IConfidenceRegressionSolution.cs" />
@@ -256,4 +261,5 @@
     <Compile Include="Interfaces\TimeSeriesPrognosis\ITimeSeriesPrognosisProblemData.cs" />
     <Compile Include="Interfaces\TimeSeriesPrognosis\ITimeSeriesPrognosisSolution.cs" />
+    <Compile Include="Interfaces\TimeSeriesPrognosis\ITimeSeriesPrognosisTransformationModel.cs" />
     <Compile Include="ModifiableDataset.cs" />
     <Compile Include="OnlineCalculators\AutoCorrelationCalculator.cs" />
Index: branches/2906_Transformations/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Classification/ClassificationTransformationModel.cs
===================================================================
--- branches/2906_Transformations/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Classification/ClassificationTransformationModel.cs	(revision 15870)
+++ branches/2906_Transformations/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Classification/ClassificationTransformationModel.cs	(revision 15870)
@@ -0,0 +1,66 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2018 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.Problems.DataAnalysis {
+  [Item("Classification Transformation Model", "A classification model that was transformed back to match the original variables after the training was performed on transformed variables.")]
+  [StorableClass]
+  public class ClassificationTransformationModel : DataAnalysisTransformationModel, IClassificationTransformationModel {
+    public new IClassificationModel OriginalModel {
+      get { return (IClassificationModel)base.OriginalModel; }
+    }
+
+
+    #region Constructor, Cloning & Persistence
+    public ClassificationTransformationModel(IClassificationModel originalModel, IEnumerable<IDataAnalysisTransformation> transformations)
+      : base(originalModel, transformations) {
+      if (CalculateTransitiveVariables(new[] { originalModel.TargetVariable }, transformations).Any())
+        throw new NotSupportedException("Classification with a transformed target variable is not allowed");
+    }
+
+    protected ClassificationTransformationModel(ClassificationTransformationModel original, Cloner cloner)
+      : base(original, cloner) {
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new ClassificationTransformationModel(this, cloner);
+    }
+
+    [StorableConstructor]
+    protected ClassificationTransformationModel(bool deserializing)
+      : base(deserializing) { }
+    #endregion
+
+    public virtual IEnumerable<double> GetEstimatedClassValues(IDataset dataset, IEnumerable<int> rows) {
+      return OriginalModel.GetEstimatedClassValues(Transform(dataset, InputTransformations), rows);
+    }
+
+    public virtual IClassificationSolution CreateClassificationSolution(IClassificationProblemData problemData) {
+      return new ClassificationSolution(this, problemData);
+    }
+  }
+}
Index: branches/2906_Transformations/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Clustering/ClusteringTransformationModel.cs
===================================================================
--- branches/2906_Transformations/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Clustering/ClusteringTransformationModel.cs	(revision 15870)
+++ branches/2906_Transformations/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Clustering/ClusteringTransformationModel.cs	(revision 15870)
@@ -0,0 +1,58 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2018 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.Collections.Generic;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Problems.DataAnalysis {
+  [Item("Clustering Transformation Model", "A clustering model that was transformed back to match the original variables after the training was performed on transformed variables.")]
+  [StorableClass]
+  public class ClusteringTransformationModel : DataAnalysisTransformationModel, IClusteringTransformationModel {
+
+    public new IClusteringModel OriginalModel {
+      get { return (IClusteringModel)base.OriginalModel; }
+    }
+
+    #region Constructor, Cloning & Persistence
+    public ClusteringTransformationModel(IClusteringModel originalModel, IEnumerable<IDataAnalysisTransformation> transformations)
+      : base(originalModel, transformations) {
+    }
+
+    protected ClusteringTransformationModel(ClusteringTransformationModel original, Cloner cloner)
+      : base(original, cloner) {
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new ClusteringTransformationModel(this, cloner);
+    }
+
+    [StorableConstructor]
+    protected ClusteringTransformationModel(bool deserializing)
+      : base(deserializing) { }
+    #endregion
+
+    public IEnumerable<int> GetClusterValues(IDataset dataset, IEnumerable<int> rows) {
+      return OriginalModel.GetClusterValues(Transform(dataset, InputTransformations), rows);
+    }
+  }
+}
Index: branches/2906_Transformations/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/DataAnalysisProblemData.cs
===================================================================
--- branches/2906_Transformations/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/DataAnalysisProblemData.cs	(revision 15865)
+++ branches/2906_Transformations/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/DataAnalysisProblemData.cs	(revision 15870)
@@ -243,5 +243,5 @@
 
     public virtual IDataAnalysisProblemData Transform() {
-      var newDataset = Transform(Dataset, Transformations);
+      var newDataset = DataAnalysisTransformationModel.Transform(Dataset, Transformations);
 
       var extendedInputs = ExtendInputVariables(AllowedInputVariables, Transformations);
@@ -253,5 +253,5 @@
       cloner.RegisterClonedObject(Dataset, newDataset);
       cloner.RegisterClonedObject(InputVariables, checkedInputs.AsReadOnly());
-      //cloner.RegisterClonedObject(TransformationsParameter.Value, new ItemList<IDataAnalysisTransformation>(transformations).AsReadOnly());
+      // TODO: valid values for target are not extended
 
       return cloner.Clone(this);
@@ -268,27 +268,7 @@
       cloner.RegisterClonedObject(Dataset, newDataset);
       cloner.RegisterClonedObject(InputVariables, checkedInputs.AsReadOnly());
-      //cloner.RegisterClonedObject(TransformationsParameter.Value, new ItemList<IDataAnalysisTransformation>().AsReadOnly());
+      // TODO: check valid target values 
 
       return cloner.Clone(this);
-    }
-
-    public static IDataset Transform(IDataset dataset, IEnumerable<IDataAnalysisTransformation> transformations) {
-      var modifiableDataset = ((Dataset)dataset).ToModifiable();
-
-      foreach (var transformation in transformations) {
-        var trans = (ITransformation<double>)transformation.Transformation;
-
-        var originalData = modifiableDataset.GetDoubleValues(transformation.OriginalVariable);
-        if (!trans.Check(originalData, out string errorMessage))
-          throw new InvalidOperationException($"Cannot estimate Values, Transformation is invalid: {errorMessage}");
-
-        var transformedData = trans.Apply(originalData).ToList();
-        if (modifiableDataset.VariableNames.Contains(transformation.TransformedVariable))
-          modifiableDataset.ReplaceVariable(transformation.TransformedVariable, transformedData);
-        else
-          modifiableDataset.AddVariable(transformation.TransformedVariable, transformedData);
-      }
-
-      return modifiableDataset;
     }
 
Index: branches/2906_Transformations/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/DataAnalysisTransformation.cs
===================================================================
--- branches/2906_Transformations/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/DataAnalysisTransformation.cs	(revision 15865)
+++ branches/2906_Transformations/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/DataAnalysisTransformation.cs	(revision 15870)
@@ -20,5 +20,4 @@
 #endregion
 
-using System;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
@@ -40,6 +39,6 @@
     }
 
-    private IValueParameter<ITransformation> TransformationParameter {
-      get { return (IValueParameter<ITransformation>)Parameters["Transformation"]; }
+    private ValueParameter<ITransformation> TransformationParameter {
+      get { return (ValueParameter<ITransformation>)Parameters["Transformation"]; }
     }
     #endregion
@@ -48,34 +47,25 @@
     public string OriginalVariable {
       get { return OriginalVariableParameter.Value.Value; }
-      set { OriginalVariableParameter.Value.Value = value; }
     }
 
     public string TransformedVariable {
       get { return TransformedVariableParameter.Value.Value; }
-      set { TransformedVariableParameter.Value.Value = value; }
     }
 
     public ITransformation Transformation {
       get { return TransformationParameter.Value; }
-      set { TransformationParameter.Value = value; }
     }
     #endregion
 
     #region Constructor, Cloning & Persistence
-    public DataAnalysisTransformation()
-      : this("", "", new IdentityTransformation()) {
-    }
     public DataAnalysisTransformation(string originalVariable, string transformedVariable, ITransformation transformation)
       : base() {
-      Parameters.Add(new FixedValueParameter<StringValue>("Original Variable", new StringValue(originalVariable)));
-      Parameters.Add(new FixedValueParameter<StringValue>("Transformed Variable", new StringValue(transformedVariable)));
-      Parameters.Add(new ValueParameter<ITransformation>("Transformation", transformation));
-
-      RegisterEventHandlers();
+      Parameters.Add(new FixedValueParameter<StringValue>("Original Variable", new StringValue(originalVariable).AsReadOnly()));
+      Parameters.Add(new FixedValueParameter<StringValue>("Transformed Variable", new StringValue(transformedVariable).AsReadOnly()));
+      Parameters.Add(new ValueParameter<ITransformation>("Transformation", transformation)); // TODO: should be readonly/fixed
     }
 
     protected DataAnalysisTransformation(DataAnalysisTransformation original, Cloner cloner)
       : base(original, cloner) {
-      RegisterEventHandlers();
     }
 
@@ -89,25 +79,4 @@
 
     [StorableHook(HookType.AfterDeserialization)]
-    private void AfterDeserialization() {
-      RegisterEventHandlers();
-    }
-    #endregion
-
-    #region Event-Handling
-    private void RegisterEventHandlers() {
-      OriginalVariableParameter.Value.ValueChanged += OriginalVariableParameterValue_ValueChanged;
-      TransformedVariableParameter.Value.ValueChanged += TransformedVariableParameterValue_ValueChanged;
-      TransformationParameter.ValueChanged += TransformationParameter_ValueChanged;
-    }
-
-    private void OriginalVariableParameterValue_ValueChanged(object sender, EventArgs e) {
-      OnToStringChanged();
-    }
-    private void TransformedVariableParameterValue_ValueChanged(object sender, EventArgs e) {
-      OnToStringChanged();
-    }
-    private void TransformationParameter_ValueChanged(object sender, EventArgs e) {
-      OnToStringChanged();
-    }
     #endregion
 
Index: branches/2906_Transformations/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/DataAnalysisTransformationModel.cs
===================================================================
--- branches/2906_Transformations/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/DataAnalysisTransformationModel.cs	(revision 15870)
+++ branches/2906_Transformations/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/DataAnalysisTransformationModel.cs	(revision 15870)
@@ -0,0 +1,146 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2018 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.Problems.DataAnalysis {
+  [Item("Data Analysis Transformation Model", "A model that was transformed back to match the original variables after the training was performed on transformed variables.")]
+  [StorableClass]
+  public abstract class DataAnalysisTransformationModel : DataAnalysisModel, IDataAnalysisTransformationModel {
+
+    [Storable]
+    public IDataAnalysisModel OriginalModel { get; protected set; }
+
+    [Storable]
+    public ReadOnlyItemList<IDataAnalysisTransformation> InputTransformations { get; protected set; }
+
+    [Storable]
+    public ReadOnlyItemList<IDataAnalysisTransformation> TargetTransformations { get; protected set; }
+
+    // Usually, the TargetVariable is usually only implemented for Regression and Classification.
+    // However, we implement it in the base class for reducing code duplication and to avoid quasi-identical views.
+    [Storable]
+    private string targetVariable;
+    public string TargetVariable {
+      get { return targetVariable; }
+      set {
+        if (string.IsNullOrEmpty(value) || targetVariable == value) return;
+        targetVariable = value;
+        OnTargetVariableChanged(this, EventArgs.Empty);
+      }
+    }
+
+    public override IEnumerable<string> VariablesUsedForPrediction {
+      get { return OriginalModel.VariablesUsedForPrediction; /* TODO: reduce extend-inputs */}
+    }
+
+    #region Constructor, Cloning & Persistence
+    protected DataAnalysisTransformationModel(IDataAnalysisModel originalModel, IEnumerable<IDataAnalysisTransformation> transformations)
+      : base(originalModel.Name) {
+      OriginalModel = originalModel;
+      var transitiveInputs = CalculateTransitiveVariables(originalModel.VariablesUsedForPrediction, transformations);
+      InputTransformations = new ItemList<IDataAnalysisTransformation>(transformations.Where(t => transitiveInputs.Contains(t.OriginalVariable))).AsReadOnly();
+      TargetTransformations = new ReadOnlyItemList<IDataAnalysisTransformation>();
+    }
+
+    protected DataAnalysisTransformationModel(DataAnalysisTransformationModel original, Cloner cloner)
+      : base(original, cloner) {
+      OriginalModel = cloner.Clone(original.OriginalModel);
+      InputTransformations = cloner.Clone(original.InputTransformations);
+      TargetTransformations = cloner.Clone(original.TargetTransformations);
+      targetVariable = original.targetVariable;
+    }
+
+    [StorableConstructor]
+    protected DataAnalysisTransformationModel(bool deserializing)
+      : base(deserializing) { }
+    #endregion
+
+    public static ISet<string> CalculateTransitiveVariables(IEnumerable<string> inputVariables, IEnumerable<IDataAnalysisTransformation> transformations) {
+      var transitiveInputs = new HashSet<string>(inputVariables);
+
+      foreach (var transformation in transformations.Reverse()) {
+        if (transitiveInputs.Contains(transformation.TransformedVariable)) {
+          transitiveInputs.Add(transformation.OriginalVariable);
+        }
+      }
+
+      return transitiveInputs;
+    }
+
+    public static IDataset Transform(IDataset dataset, IEnumerable<IDataAnalysisTransformation> transformations) {
+      var modifiableDataset = ((Dataset)dataset).ToModifiable();
+
+      foreach (var transformation in transformations) {
+        var trans = (ITransformation<double>)transformation.Transformation;
+
+        var originalData = modifiableDataset.GetDoubleValues(transformation.OriginalVariable);
+        if (!trans.Check(originalData, out string errorMessage))
+          throw new InvalidOperationException($"Cannot estimate Values, Transformation is invalid: {errorMessage}");
+
+        var transformedData = trans.Apply(originalData).ToList();
+        if (modifiableDataset.VariableNames.Contains(transformation.TransformedVariable))
+          modifiableDataset.ReplaceVariable(transformation.TransformedVariable, transformedData);
+        else
+          modifiableDataset.AddVariable(transformation.TransformedVariable, transformedData);
+      }
+
+      return modifiableDataset;
+    }
+
+
+
+    #region Events
+    public event EventHandler TargetVariableChanged;
+    private void OnTargetVariableChanged(object sender, EventArgs args) {
+      var changed = TargetVariableChanged;
+      if (changed != null)
+        changed(sender, args);
+    }
+    #endregion
+
+
+
+
+
+
+    /*
+    // dataset in original data range
+    public override IEnumerable<double> GetEstimatedValues(IDataset dataset, IEnumerable<int> rows) {
+      var transformedDataset = Transform(dataset, Transformations);
+
+      var estimates = OriginalModel.GetEstimatedValues(transformedDataset, rows);
+
+      return InverseTransform(estimates, Transformations, OriginalModel.TargetVariable);
+    }
+
+    // problemData in original data range
+    public override IRegressionSolution CreateRegressionSolution(IRegressionProblemData problemData) {
+      // TODO: specialized views for the original solution type are lost (RandomForestSolutionView, ...)
+      return new RegressionSolution(this, new RegressionProblemData(problemData));
+    } */
+  }
+}
Index: branches/2906_Transformations/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Regression/RegressionProblemData.cs
===================================================================
--- branches/2906_Transformations/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Regression/RegressionProblemData.cs	(revision 15865)
+++ branches/2906_Transformations/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Regression/RegressionProblemData.cs	(revision 15870)
@@ -183,5 +183,5 @@
     public override IDataAnalysisProblemData Transform() {
       var transformedProblemData = (IRegressionProblemData)base.Transform();
-      var targetVariable = GetTransformedTragetVariable(TargetVariable, Transformations);
+      var targetVariable = RegressionTransformationModel.GetTransformedTragetVariable(TargetVariable, Transformations);
       transformedProblemData.TargetVariable = targetVariable;
       return transformedProblemData;
@@ -190,26 +190,8 @@
     public override IDataAnalysisProblemData InverseTransform() {
       var transformedProblemData = (IRegressionProblemData)base.InverseTransform();
-      var targetVariable = GetOriginalTragetVariable(TargetVariable, Transformations);
+      var targetVariable = RegressionTransformationModel.GetOriginalTragetVariable(TargetVariable, Transformations);
       transformedProblemData.TargetVariable = targetVariable;
       return transformedProblemData;
     }
-
-    public static string GetTransformedTragetVariable(string originalTarget, IEnumerable<IDataAnalysisTransformation> transformations) {
-      var transformedTarget = originalTarget;
-      foreach (var transformation in transformations) {
-        if (transformation.OriginalVariable == transformedTarget)
-          transformedTarget = transformation.TransformedVariable;
-      }
-      return transformedTarget;
-    }
-
-    public static string GetOriginalTragetVariable(string transformedTarget, IEnumerable<IDataAnalysisTransformation> transformations) {
-      var originalTarget = transformedTarget;
-      foreach (var transformation in transformations.Reverse()) {
-        if (transformation.TransformedVariable == originalTarget)
-          originalTarget = transformation.OriginalVariable;
-      }
-      return originalTarget;
-    }
   }
 }
Index: branches/2906_Transformations/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Regression/RegressionTransformationModel.cs
===================================================================
--- branches/2906_Transformations/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Regression/RegressionTransformationModel.cs	(revision 15870)
+++ branches/2906_Transformations/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Regression/RegressionTransformationModel.cs	(revision 15870)
@@ -0,0 +1,104 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2018 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.Problems.DataAnalysis {
+  [Item("Regression Transformation Model", "A regression model that was transformed back to match the original variables after the training was performed on transformed variables.")]
+  [StorableClass]
+  public class RegressionTransformationModel : DataAnalysisTransformationModel, IRegressionTransformationModel {
+
+    public new IRegressionModel OriginalModel {
+      get { return (IRegressionModel)base.OriginalModel; }
+    }
+
+    #region Constructor, Cloning & Persistence
+    public RegressionTransformationModel(IRegressionModel originalModel, IEnumerable<IDataAnalysisTransformation> transformations)
+      : base(originalModel, transformations) {
+      var transitiveTargets = CalculateTransitiveVariables(new[] { originalModel.TargetVariable }, transformations);
+      TargetTransformations = new ItemList<IDataAnalysisTransformation>(transformations.Where(t => transitiveTargets.Contains(t.OriginalVariable))).AsReadOnly();
+      TargetVariable = GetOriginalTragetVariable(originalModel.TargetVariable, TargetTransformations);
+    }
+
+    protected RegressionTransformationModel(RegressionTransformationModel original, Cloner cloner)
+      : base(original, cloner) {
+      
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new RegressionTransformationModel(this, cloner);
+    }
+
+    [StorableConstructor]
+    protected RegressionTransformationModel(bool deserializing)
+      : base(deserializing) { }
+    #endregion
+
+    public virtual IEnumerable<double> GetEstimatedValues(IDataset dataset, IEnumerable<int> rows) {
+      var estimates = OriginalModel.GetEstimatedValues(Transform(dataset, InputTransformations), rows);
+      return InverseTransform(estimates, TargetTransformations, OriginalModel.TargetVariable);
+    }
+
+    public virtual IRegressionSolution CreateRegressionSolution(IRegressionProblemData problemData) {
+      return new RegressionSolution(this, new RegressionProblemData(problemData));
+    }
+
+    public static IEnumerable<double> InverseTransform(IEnumerable<double> data, IEnumerable<IDataAnalysisTransformation> transformations, string targetVariable) {
+      var estimates = data.ToList();
+
+      foreach (var transformation in transformations.Reverse()) {
+        if (transformation.TransformedVariable == targetVariable) {
+          var trans = (ITransformation<double>)transformation.Transformation;
+
+          estimates = trans.InverseApply(estimates).ToList();
+
+          // setup next iteration
+          targetVariable = transformation.OriginalVariable;
+        }
+      }
+
+      return estimates;
+    }
+
+    public static string GetTransformedTragetVariable(string originalTarget, IEnumerable<IDataAnalysisTransformation> transformations) {
+      var transformedTarget = originalTarget;
+      foreach (var transformation in transformations) {
+        if (transformation.OriginalVariable == transformedTarget)
+          transformedTarget = transformation.TransformedVariable;
+      }
+      return transformedTarget;
+    }
+
+    public static string GetOriginalTragetVariable(string transformedTarget, IEnumerable<IDataAnalysisTransformation> transformations) {
+      var originalTarget = transformedTarget;
+      foreach (var transformation in transformations.Reverse()) {
+        if (transformation.TransformedVariable == originalTarget)
+          originalTarget = transformation.OriginalVariable;
+      }
+      return originalTarget;
+    }
+  }
+}
Index: branches/2906_Transformations/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Regression/TransformedRegressionModel.cs
===================================================================
--- branches/2906_Transformations/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Regression/TransformedRegressionModel.cs	(revision 15865)
+++ 	(revision )
@@ -1,102 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2018 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.Collections.Generic;
-using System.Linq;
-using HeuristicLab.Common;
-using HeuristicLab.Core;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-
-namespace HeuristicLab.Problems.DataAnalysis {
-  [Item("Transformed Regression Model", "A model that was transformed back to match the original variables after the training was performed on transformed variables.")]
-  [StorableClass]
-  public class TransformedRegressionModel : RegressionModel, ITransformedRegressionModel {
-
-    [Storable]
-    public IRegressionModel OriginalModel { get; private set; }
-
-    [Storable]
-    public ItemList<IDataAnalysisTransformation> Transformations { get; private set; }
-
-    public override IEnumerable<string> VariablesUsedForPrediction {
-      get { return OriginalModel.VariablesUsedForPrediction; }
-    }
-
-    #region Constructor, Cloning & Persistence
-    public TransformedRegressionModel(IRegressionModel originalModel, IEnumerable<IDataAnalysisTransformation> transformations)
-      : base(RegressionProblemData.GetOriginalTragetVariable(originalModel.TargetVariable, transformations)) {
-      Name = "Transformed " + originalModel.Name;
-      OriginalModel = originalModel;
-      Transformations = new ItemList<IDataAnalysisTransformation>(transformations);
-    }
-
-    protected TransformedRegressionModel(TransformedRegressionModel original, Cloner cloner)
-      : base(original, cloner) {
-      OriginalModel = cloner.Clone(original.OriginalModel);
-      Transformations = cloner.Clone(original.Transformations);
-    }
-
-    public override IDeepCloneable Clone(Cloner cloner) {
-      return new TransformedRegressionModel(this, cloner);
-    }
-
-    [StorableConstructor]
-    protected TransformedRegressionModel(bool deserializing)
-      : base(deserializing) { }
-    #endregion
-
-    // dataset in original data range
-    public override IEnumerable<double> GetEstimatedValues(IDataset dataset, IEnumerable<int> rows) {
-      var transformedDataset = TransformInputs(dataset, Transformations);
-
-      var estimates = OriginalModel.GetEstimatedValues(transformedDataset, rows);
-
-      return InverseTransformEstimates(estimates, Transformations, OriginalModel.TargetVariable);
-    }
-
-    // problemData in original data range
-    public override IRegressionSolution CreateRegressionSolution(IRegressionProblemData problemData) {
-      // TODO: specialized views for the original solution type are lost (RandomForestSolutionView, ...)
-      return new TransformedRegressionSolution(this, new RegressionProblemData(problemData));
-    }
-
-    private static IDataset TransformInputs(IDataset dataset, IEnumerable<IDataAnalysisTransformation> transformations) {
-      return DataAnalysisProblemData.Transform(dataset, transformations);
-    }
-
-    private static IEnumerable<double> InverseTransformEstimates(IEnumerable<double> data, IEnumerable<IDataAnalysisTransformation> transformations, string targetVariable) {
-      var estimates = data.ToList();
-
-      foreach (var transformation in transformations.Reverse()) {
-        if (transformation.TransformedVariable == targetVariable) {
-          var trans = (ITransformation<double>)transformation.Transformation;
-
-          estimates = trans.InverseApply(estimates).ToList();
-
-          // setup next iteration
-          targetVariable = transformation.OriginalVariable;
-        }
-      }
-
-      return estimates;
-    }
-  }
-}
Index: branches/2906_Transformations/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Regression/TransformedRegressionSolution.cs
===================================================================
--- branches/2906_Transformations/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Regression/TransformedRegressionSolution.cs	(revision 15865)
+++ 	(revision )
@@ -1,52 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2018 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 HeuristicLab.Common;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-
-namespace HeuristicLab.Problems.DataAnalysis {
-  public class TransformedRegressionSolution : RegressionSolution, ITransformedRegressionSolution {
-
-    public new ITransformedRegressionModel Model {
-      get { return (ITransformedRegressionModel)base.Model; }
-      set { base.Model = value; }
-    }
-
-    #region Constructor, Cloning & Persistence
-    public TransformedRegressionSolution(ITransformedRegressionModel transformedModel, IRegressionProblemData problemData)
-      : base(transformedModel, problemData) {
-    }
-
-    protected TransformedRegressionSolution(TransformedRegressionSolution original, Cloner cloner)
-      : base(original, cloner) {
-
-    }
-
-    public override IDeepCloneable Clone(Cloner cloner) {
-      return new TransformedRegressionSolution(this, cloner);
-    }
-
-    [StorableConstructor]
-    protected TransformedRegressionSolution(bool deserializing)
-      : base(deserializing) { }
-    #endregion
-  }
-}
Index: branches/2906_Transformations/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/TimeSeriesPrognosis/Models/TimeSeriesPrognosisTransformationModel.cs
===================================================================
--- branches/2906_Transformations/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/TimeSeriesPrognosis/Models/TimeSeriesPrognosisTransformationModel.cs	(revision 15870)
+++ branches/2906_Transformations/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/TimeSeriesPrognosis/Models/TimeSeriesPrognosisTransformationModel.cs	(revision 15870)
@@ -0,0 +1,64 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2018 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.Collections.Generic;
+using System.Linq;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Problems.DataAnalysis {
+  [Item("Time Series Prognosis Transformation Model", "A time series prognosis model that was transformed back to match the original variables after the training was performed on transformed variables.")]
+  [StorableClass]
+  public class TimeSeriesPrognosisTransformationModel : RegressionTransformationModel, ITimeSeriesPrognosisTransformationModel {
+
+    public new ITimeSeriesPrognosisModel OriginalModel {
+      get { return (ITimeSeriesPrognosisModel)base.OriginalModel; }
+    }
+
+    #region Constructor, Cloning & Persistence
+    public TimeSeriesPrognosisTransformationModel(ITimeSeriesPrognosisModel originalModel, IEnumerable<IDataAnalysisTransformation> transformations)
+      : base(originalModel, transformations) {
+    }
+
+    protected TimeSeriesPrognosisTransformationModel(TimeSeriesPrognosisTransformationModel original, Cloner cloner)
+      : base(original, cloner) {
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new TimeSeriesPrognosisTransformationModel(this, cloner);
+    }
+
+    [StorableConstructor]
+    protected TimeSeriesPrognosisTransformationModel(bool deserializing)
+      : base(deserializing) { }
+    #endregion
+
+    public IEnumerable<IEnumerable<double>> GetPrognosedValues(IDataset dataset, IEnumerable<int> rows, IEnumerable<int> horizons) {
+      var estimates = OriginalModel.GetPrognosedValues(Transform(dataset, InputTransformations), rows, horizons);
+      return estimates.Select(x => InverseTransform(x, TargetTransformations, TargetVariable)); // TODO: transform the whole horizon?
+    }
+
+    public ITimeSeriesPrognosisSolution CreateTimeSeriesPrognosisSolution(ITimeSeriesPrognosisProblemData problemData) {
+      return new TimeSeriesPrognosisSolution(this, problemData);
+    }
+  }
+}
Index: branches/2906_Transformations/HeuristicLab.Problems.DataAnalysis/3.4/Interfaces/Classification/IClassificationTransformationModel.cs
===================================================================
--- branches/2906_Transformations/HeuristicLab.Problems.DataAnalysis/3.4/Interfaces/Classification/IClassificationTransformationModel.cs	(revision 15870)
+++ branches/2906_Transformations/HeuristicLab.Problems.DataAnalysis/3.4/Interfaces/Classification/IClassificationTransformationModel.cs	(revision 15870)
@@ -0,0 +1,27 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2018 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
+
+
+namespace HeuristicLab.Problems.DataAnalysis {
+  public interface IClassificationTransformationModel : IDataAnalysisTransformationModel, IClassificationModel {
+    new IClassificationModel OriginalModel { get; }
+  }
+}
Index: branches/2906_Transformations/HeuristicLab.Problems.DataAnalysis/3.4/Interfaces/Clustering/IClusteringTransformationModel.cs
===================================================================
--- branches/2906_Transformations/HeuristicLab.Problems.DataAnalysis/3.4/Interfaces/Clustering/IClusteringTransformationModel.cs	(revision 15870)
+++ branches/2906_Transformations/HeuristicLab.Problems.DataAnalysis/3.4/Interfaces/Clustering/IClusteringTransformationModel.cs	(revision 15870)
@@ -0,0 +1,26 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2018 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
+
+namespace HeuristicLab.Problems.DataAnalysis {
+  public interface IClusteringTransformationModel : IDataAnalysisTransformationModel, IClusteringModel {
+    new IClusteringModel OriginalModel { get; }
+  }
+}
Index: branches/2906_Transformations/HeuristicLab.Problems.DataAnalysis/3.4/Interfaces/IDataAnalysisTransformation.cs
===================================================================
--- branches/2906_Transformations/HeuristicLab.Problems.DataAnalysis/3.4/Interfaces/IDataAnalysisTransformation.cs	(revision 15865)
+++ branches/2906_Transformations/HeuristicLab.Problems.DataAnalysis/3.4/Interfaces/IDataAnalysisTransformation.cs	(revision 15870)
@@ -25,8 +25,8 @@
   public interface IDataAnalysisTransformation : INamedItem {
 
-    string OriginalVariable { get; set; }
-    string TransformedVariable { get; set; }
+    string OriginalVariable { get; }
+    string TransformedVariable { get; }
 
-    ITransformation Transformation { get; set; }
+    ITransformation Transformation { get; }
   }
 }
Index: branches/2906_Transformations/HeuristicLab.Problems.DataAnalysis/3.4/Interfaces/IDataAnalysisTransformationModel.cs
===================================================================
--- branches/2906_Transformations/HeuristicLab.Problems.DataAnalysis/3.4/Interfaces/IDataAnalysisTransformationModel.cs	(revision 15870)
+++ branches/2906_Transformations/HeuristicLab.Problems.DataAnalysis/3.4/Interfaces/IDataAnalysisTransformationModel.cs	(revision 15870)
@@ -0,0 +1,35 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2018 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 HeuristicLab.Core;
+
+namespace HeuristicLab.Problems.DataAnalysis {
+  public interface IDataAnalysisTransformationModel : IDataAnalysisModel {
+    IDataAnalysisModel OriginalModel { get; }
+
+    /// <summary>
+    /// Transformations that are used on the model's inputs.
+    /// </summary>                                                                      
+    ReadOnlyItemList<IDataAnalysisTransformation> InputTransformations { get; }  // TODO: IReadonlyList<>?
+
+    ReadOnlyItemList<IDataAnalysisTransformation> TargetTransformations { get; } // TODO: to Regression/Classification interface?
+  }
+}
Index: branches/2906_Transformations/HeuristicLab.Problems.DataAnalysis/3.4/Interfaces/Regression/IRegressionTransformationModel.cs
===================================================================
--- branches/2906_Transformations/HeuristicLab.Problems.DataAnalysis/3.4/Interfaces/Regression/IRegressionTransformationModel.cs	(revision 15870)
+++ branches/2906_Transformations/HeuristicLab.Problems.DataAnalysis/3.4/Interfaces/Regression/IRegressionTransformationModel.cs	(revision 15870)
@@ -0,0 +1,28 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2018 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 HeuristicLab.Core;
+
+namespace HeuristicLab.Problems.DataAnalysis {
+  public interface IRegressionTransformationModel : IDataAnalysisTransformationModel, IRegressionModel {
+    new IRegressionModel OriginalModel { get; }
+  }
+}
Index: branches/2906_Transformations/HeuristicLab.Problems.DataAnalysis/3.4/Interfaces/Regression/ITransformedRegressionModel.cs
===================================================================
--- branches/2906_Transformations/HeuristicLab.Problems.DataAnalysis/3.4/Interfaces/Regression/ITransformedRegressionModel.cs	(revision 15865)
+++ 	(revision )
@@ -1,31 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2018 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 HeuristicLab.Core;
-
-namespace HeuristicLab.Problems.DataAnalysis {
-  public interface ITransformedRegressionModel : IRegressionModel {
-
-    IRegressionModel OriginalModel { get; }
-
-    ItemList<IDataAnalysisTransformation> Transformations { get; }
-  }
-}
Index: branches/2906_Transformations/HeuristicLab.Problems.DataAnalysis/3.4/Interfaces/Regression/ITransformedRegressionSolution.cs
===================================================================
--- branches/2906_Transformations/HeuristicLab.Problems.DataAnalysis/3.4/Interfaces/Regression/ITransformedRegressionSolution.cs	(revision 15865)
+++ 	(revision )
@@ -1,26 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2018 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
-
-namespace HeuristicLab.Problems.DataAnalysis {
-  public interface ITransformedRegressionSolution : IRegressionSolution {
-    new ITransformedRegressionModel Model { get; }
-  }
-}
Index: branches/2906_Transformations/HeuristicLab.Problems.DataAnalysis/3.4/Interfaces/TimeSeriesPrognosis/ITimeSeriesPrognosisTransformationModel.cs
===================================================================
--- branches/2906_Transformations/HeuristicLab.Problems.DataAnalysis/3.4/Interfaces/TimeSeriesPrognosis/ITimeSeriesPrognosisTransformationModel.cs	(revision 15870)
+++ branches/2906_Transformations/HeuristicLab.Problems.DataAnalysis/3.4/Interfaces/TimeSeriesPrognosis/ITimeSeriesPrognosisTransformationModel.cs	(revision 15870)
@@ -0,0 +1,26 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2018 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
+
+namespace HeuristicLab.Problems.DataAnalysis {
+  public interface ITimeSeriesPrognosisTransformationModel : IRegressionTransformationModel, ITimeSeriesPrognosisModel {
+    new ITimeSeriesPrognosisModel OriginalModel { get; }
+  }
+}
