Index: trunk/sources/HeuristicLab.DataPreprocessing/3.4/Implementations/FilteredPreprocessingData.cs
===================================================================
--- trunk/sources/HeuristicLab.DataPreprocessing/3.4/Implementations/FilteredPreprocessingData.cs	(revision 13051)
+++ trunk/sources/HeuristicLab.DataPreprocessing/3.4/Implementations/FilteredPreprocessingData.cs	(revision 13252)
@@ -119,4 +119,16 @@
         throw new InvalidOperationException("DeleteColumn not possible while data is filtered");
       originalData.DeleteColumn(columnIndex);
+    }
+
+    public void RenameColumn(int columnIndex, string name) {
+      if (IsFiltered)
+        throw new InvalidOperationException("RenameColumn not possible while data is filtered");
+      originalData.RenameColumn(columnIndex, name);
+    }
+
+    public void RenameColumns(IList<string> names) {
+      if (IsFiltered)
+        throw new InvalidOperationException("RenameColumns not possible while data is filtered");
+      originalData.RenameColumns(names);
     }
 
Index: trunk/sources/HeuristicLab.DataPreprocessing/3.4/Implementations/PreprocessingData.cs
===================================================================
--- trunk/sources/HeuristicLab.DataPreprocessing/3.4/Implementations/PreprocessingData.cs	(revision 13051)
+++ trunk/sources/HeuristicLab.DataPreprocessing/3.4/Implementations/PreprocessingData.cs	(revision 13252)
@@ -196,4 +196,7 @@
     public abstract void DeleteColumn(int columnIndex);
 
+    public abstract void RenameColumn(int columnIndex, string name);
+    public abstract void RenameColumns(IList<string> list);
+
     public abstract Dataset ExportToDataset();
 
Index: trunk/sources/HeuristicLab.DataPreprocessing/3.4/Implementations/TransactionalPreprocessingData.cs
===================================================================
--- trunk/sources/HeuristicLab.DataPreprocessing/3.4/Implementations/TransactionalPreprocessingData.cs	(revision 13051)
+++ trunk/sources/HeuristicLab.DataPreprocessing/3.4/Implementations/TransactionalPreprocessingData.cs	(revision 13252)
@@ -265,4 +265,26 @@
     }
 
+    public override void RenameColumn(int columnIndex, string name) {
+      SaveSnapshot(DataPreprocessingChangedEventType.ChangeColumn, columnIndex, -1);
+      if (columnIndex < 0 || columnIndex > variableNames.Count)
+        throw new ArgumentOutOfRangeException("columnIndex");
+      variableNames[columnIndex] = name;
+
+      if (!IsInTransaction)
+        OnChanged(DataPreprocessingChangedEventType.ChangeColumn, -1, -1);
+    }
+
+    public override void RenameColumns(IList<string> names) {
+      if (names == null) throw new ArgumentNullException("names");
+      if (names.Count != variableNames.Count) throw new ArgumentException("number of names must match the number of columns.", "names");
+
+      SaveSnapshot(DataPreprocessingChangedEventType.ChangeColumn, -1, -1);
+      for (int i = 0; i < names.Count; i++)
+        variableNames[i] = names[i];
+
+      if (!IsInTransaction)
+        OnChanged(DataPreprocessingChangedEventType.ChangeColumn, -1, -1);
+    }
+
     public override Dataset ExportToDataset() {
       IList<IList> values = new List<IList>();
Index: trunk/sources/HeuristicLab.DataPreprocessing/3.4/Interfaces/IPreprocessingData.cs
===================================================================
--- trunk/sources/HeuristicLab.DataPreprocessing/3.4/Interfaces/IPreprocessingData.cs	(revision 13051)
+++ trunk/sources/HeuristicLab.DataPreprocessing/3.4/Interfaces/IPreprocessingData.cs	(revision 13252)
@@ -47,4 +47,7 @@
     void DeleteColumn(int columnIndex);
 
+    void RenameColumn(int columnIndex, string name);
+    void RenameColumns(IList<string> names);
+
     bool AreAllStringColumns(IEnumerable<int> columnIndices);
     bool Validate(string value, out string errorMessage, int columnIndex);
Index: trunk/sources/HeuristicLab.DataPreprocessing/3.4/ProblemDataCreator.cs
===================================================================
--- trunk/sources/HeuristicLab.DataPreprocessing/3.4/ProblemDataCreator.cs	(revision 13051)
+++ trunk/sources/HeuristicLab.DataPreprocessing/3.4/ProblemDataCreator.cs	(revision 13252)
@@ -63,5 +63,5 @@
       var inputVariables = oldProblemData.InputVariables.ToDictionary(x => x.Value, x => x);
       foreach (var variable in problemData.InputVariables) {
-        bool isChecked = oldProblemData.InputVariables.Contains(variable) && oldProblemData.InputVariables.ItemChecked(inputVariables[variable.Value]);
+        bool isChecked = inputVariables.ContainsKey(variable.Value) && oldProblemData.InputVariables.ItemChecked(inputVariables[variable.Value]);
         problemData.InputVariables.SetItemCheckedState(variable, isChecked);
       }
@@ -72,12 +72,17 @@
     private IDataAnalysisProblemData CreateRegressionData(RegressionProblemData oldProblemData) {
       var targetVariable = oldProblemData.TargetVariable;
-      // target variable must be double and must exist in the new dataset
-      return new RegressionProblemData(ExportedDataset, GetDoubleInputVariables(targetVariable), targetVariable, Transformations);
+      if (!context.Data.VariableNames.Contains(targetVariable))
+        targetVariable = context.Data.VariableNames.First();
+      var inputVariables = GetDoubleInputVariables(targetVariable);
+      var newProblemData = new RegressionProblemData(ExportedDataset, inputVariables, targetVariable, Transformations);
+      return newProblemData;
     }
 
     private IDataAnalysisProblemData CreateClassificationData(ClassificationProblemData oldProblemData) {
-      // target variable must be double and must exist in the new dataset
       var targetVariable = oldProblemData.TargetVariable;
-      var newProblemData = new ClassificationProblemData(ExportedDataset, GetDoubleInputVariables(targetVariable), targetVariable, Transformations);
+      if (!context.Data.VariableNames.Contains(targetVariable))
+        targetVariable = context.Data.VariableNames.First();
+      var inputVariables = GetDoubleInputVariables(targetVariable);
+      var newProblemData = new ClassificationProblemData(ExportedDataset, inputVariables, targetVariable, Transformations);
       newProblemData.PositiveClass = oldProblemData.PositiveClass;
       return newProblemData;
