Index: /branches/2906_Transformations/HeuristicLab.DataPreprocessing.Views/3.4/TransformationListView.cs
===================================================================
--- /branches/2906_Transformations/HeuristicLab.DataPreprocessing.Views/3.4/TransformationListView.cs	(revision 15878)
+++ /branches/2906_Transformations/HeuristicLab.DataPreprocessing.Views/3.4/TransformationListView.cs	(revision 15879)
@@ -105,5 +105,5 @@
 
       // TODO: do not move/remove already applied transformations
-      // TODO: general disalow of movement?
+      // TODO: general disallow of movement?
       if (Content[selectedIndex].IsApplied) {
         moveUpButton.Enabled = selectedIndex > 0 && Content[selectedIndex - 1].IsApplied;
Index: /branches/2906_Transformations/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/DataAnalysisProblemData.cs
===================================================================
--- /branches/2906_Transformations/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/DataAnalysisProblemData.cs	(revision 15878)
+++ /branches/2906_Transformations/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/DataAnalysisProblemData.cs	(revision 15879)
@@ -245,5 +245,5 @@
       var newDataset = DataAnalysisTransformationModel.Transform(Dataset, Transformations);
 
-      var extendedInputs = ExtendInputVariables(AllowedInputVariables, Transformations);
+      var extendedInputs = DataAnalysisTransformationModel.ExtendInputVariables(AllowedInputVariables, Transformations);
       var checkedInputs = new CheckedItemList<StringValue>(newDataset.VariableNames.Select(x => new StringValue(x)));
       foreach (var input in checkedInputs) checkedInputs.SetItemCheckedState(input, extendedInputs.Contains(input.Value));
@@ -297,32 +297,4 @@
       return modifiableDataset;
     }
-
-    public static IEnumerable<string> ExtendInputVariables(IEnumerable<string> oldInputVariables, IEnumerable<IDataAnalysisTransformation> transformations) {
-      var inputs = new HashSet<string>(oldInputVariables);
-
-      foreach (var transformation in transformations) {
-        if (inputs.Contains(transformation.OriginalVariable))
-          inputs.Add(transformation.TransformedVariable);
-      }
-
-      return inputs;
-    }
-
-    public static IEnumerable<string> RemoveVirtualVariables(IEnumerable<string> variables, IEnumerable<IDataAnalysisTransformation> transformations) {
-      var remainingVariables = new HashSet<string>(variables);
-
-      var transformationsStack = new Stack<IDataAnalysisTransformation>(transformations);
-
-      while (transformationsStack.Any()) {
-        var transformation = transformationsStack.Pop();
-
-
-        bool transformedVariablePending = transformationsStack.Any(x => x.OriginalVariable == transformation.TransformedVariable);
-        if (!transformedVariablePending)
-          remainingVariables.Remove(transformation.TransformedVariable);
-      }
-
-      return remainingVariables;
-    }
   }
 }
Index: /branches/2906_Transformations/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/DataAnalysisTransformation.cs
===================================================================
--- /branches/2906_Transformations/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/DataAnalysisTransformation.cs	(revision 15878)
+++ /branches/2906_Transformations/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/DataAnalysisTransformation.cs	(revision 15879)
@@ -29,5 +29,5 @@
   [Item("Transformation", "A transformation applied to a DataAnalysisProblemData")]
   [StorableClass]
-  public class DataAnalysisTransformation : ParameterizedNamedItem, IDataAnalysisTransformation {
+  public sealed class DataAnalysisTransformation : ParameterizedNamedItem, IDataAnalysisTransformation {
     #region Parameter Properties
     private IFixedValueParameter<StringValue> OriginalVariableParameter {
@@ -66,5 +66,5 @@
     }
 
-    protected DataAnalysisTransformation(DataAnalysisTransformation original, Cloner cloner)
+    private DataAnalysisTransformation(DataAnalysisTransformation original, Cloner cloner)
       : base(original, cloner) {
     }
@@ -75,5 +75,5 @@
 
     [StorableConstructor]
-    protected DataAnalysisTransformation(bool deserializing)
+    private DataAnalysisTransformation(bool deserializing)
       : base(deserializing) { }
 
Index: /branches/2906_Transformations/HeuristicLab.Problems.DataAnalysis/3.4/Interfaces/ITransformation.cs
===================================================================
--- /branches/2906_Transformations/HeuristicLab.Problems.DataAnalysis/3.4/Interfaces/ITransformation.cs	(revision 15878)
+++ /branches/2906_Transformations/HeuristicLab.Problems.DataAnalysis/3.4/Interfaces/ITransformation.cs	(revision 15879)
@@ -28,9 +28,32 @@
 
   public interface ITransformation<T> : ITransformation {
+    /// <summary>
+    /// Checks if the data is valid for the transformation.
+    /// Calling <code>Apply</code> or <code>Configure</code> on invalid data will throw an exception.
+    /// </summary>
+    /// <param name="data"></param>
+    /// <param name="errorMessage"></param>
+    /// <returns></returns>
     bool Check(IEnumerable<T> data, out string errorMessage);
 
+    /// <summary>
+    /// Configure the internal parameter of the transformation for the given data.
+    /// </summary>
+    /// <param name="data"></param>
     void Configure(IEnumerable<T> data);
 
+    /// <summary>
+    /// Transforms the given data based on the transformation's external and internal parameters.
+    /// </summary>
+    /// <param name="data"></param>
+    /// <returns></returns>
     IEnumerable<T> Apply(IEnumerable<T> data);
+    /// <summary>
+    /// Inverse-transforms the given data based on the transformation's external and internal parameters.
+    /// </summary>
+    /// <param name="data"></param>
+    /// <returns></returns>
+    /// <remarks>If the data cannot be inverse transformed, i.e. if the original data was not in the domain of the transformation, 
+    /// the returned values can contain invalid values or <code>InverseApply</code> might throw an exception.</remarks>
     IEnumerable<T> InverseApply(IEnumerable<T> data);
   }
