Index: /branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.4/DataPreprocessingView.cs
===================================================================
--- /branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.4/DataPreprocessingView.cs	(revision 10989)
+++ /branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.4/DataPreprocessingView.cs	(revision 10990)
@@ -98,5 +98,5 @@
       viewShortcutListView.Enabled = Content != null;
       applyInNewTabButton.Enabled = Content != null;
-      exportProblemButton.Enabled = Content != null;
+      exportProblemButton.Enabled = Content != null && Content.Problem != null;
       undoButton.Enabled = Content != null;
     }
@@ -120,5 +120,5 @@
 
     private void applyInNewTabButton_Click(object sender, EventArgs e) {
-      var item = Content.ExportAlgorithmOrProblem();
+      var item = Content.Export();
 
       MainFormManager.MainForm.ShowContent(item);
Index: /branches/DataPreprocessing/HeuristicLab.DataPreprocessing/3.4/Implementations/PreprocessingContext.cs
===================================================================
--- /branches/DataPreprocessing/HeuristicLab.DataPreprocessing/3.4/Implementations/PreprocessingContext.cs	(revision 10989)
+++ /branches/DataPreprocessing/HeuristicLab.DataPreprocessing/3.4/Implementations/PreprocessingContext.cs	(revision 10990)
@@ -33,14 +33,22 @@
     : Item, IPreprocessingContext {
 
+
     public IFilteredPreprocessingData Data { get; private set; }
+
     public IAlgorithm Algorithm { get; private set; }
     public IDataAnalysisProblem Problem { get; private set; }
+    public IDataAnalysisProblemData ProblemData { get; private set; }
+
+    private readonly ProblemDataCreator creator;
 
     public PreprocessingContext(IDataAnalysisProblemData dataAnalysisProblemData, IAlgorithm algorithm, IDataAnalysisProblem problem) {
-      TransactionalPreprocessingData transactionalPreprocessingData = new TransactionalPreprocessingData(dataAnalysisProblemData);
+      var transactionalPreprocessingData = new TransactionalPreprocessingData(dataAnalysisProblemData);
+      Data = new FilteredPreprocessingData(transactionalPreprocessingData);
 
-      Data = new FilteredPreprocessingData(transactionalPreprocessingData);
+      ProblemData = dataAnalysisProblemData;
       Algorithm = algorithm;
       Problem = problem;
+
+      creator = new ProblemDataCreator(this);
     }
 
@@ -56,37 +64,33 @@
     }
 
-    public IItem ExportAlgorithmOrProblem() {
-      if (Algorithm != null) {
+    public IItem Export() {
+      if (Algorithm != null)
         return ExportAlgorithm();
-      }
-      return ExportProblem();
+      else if (Problem != null)
+        return ExportProblem();
+      return ExportProblemData();
+    }
+    public IAlgorithm ExportAlgorithm() {
+      var preprocessedAlgorithm = (IAlgorithm)Algorithm.Clone(new Cloner());
+      preprocessedAlgorithm.Name = preprocessedAlgorithm.Name + "(Preprocessed)";
+      Algorithm.Runs.Clear();
+      var problem = (IDataAnalysisProblem)preprocessedAlgorithm.Problem;
+      SetNewProblemData(problem);
+      return preprocessedAlgorithm;
+    }
+    public IDataAnalysisProblem ExportProblem() {
+      var preprocessedProblem = (IDataAnalysisProblem)Problem.Clone(new Cloner());
+      SetNewProblemData(preprocessedProblem);
+      return preprocessedProblem;
     }
 
-    public IProblem ExportProblem() {
-      return Export(Problem, SetupProblem);
-    }
-    public IAlgorithm ExportAlgorithm() {
-      return Export(Algorithm, SetupAlgorithm);
+    public IDataAnalysisProblemData ExportProblemData() {
+      return creator.CreateProblemData();
     }
 
-    private IDataAnalysisProblem SetupProblem(IProblem problem) {
-      return (IDataAnalysisProblem)problem;
-    }
-    private IDataAnalysisProblem SetupAlgorithm(IAlgorithm algorithm) {
-      algorithm.Name = algorithm.Name + "(Preprocessed)";
-      algorithm.Runs.Clear();
-      return (IDataAnalysisProblem)algorithm.Problem;
-    }
-    private T Export<T>(T original, Func<T, IDataAnalysisProblem> setup)
-        where T : IItem {
-      var creator = new ProblemDataCreator(this);
+    private void SetNewProblemData(IDataAnalysisProblem problem) {
       var data = creator.CreateProblemData();
-
-      var clone = (T)original.Clone(new Cloner());
-
-      var problem = setup(clone);
       problem.ProblemDataParameter.ActualValue = data;
       problem.Name = "Preprocessed " + problem.Name;
-      return clone;
     }
   }
Index: /branches/DataPreprocessing/HeuristicLab.DataPreprocessing/3.4/Interfaces/IPreprocessingContext.cs
===================================================================
--- /branches/DataPreprocessing/HeuristicLab.DataPreprocessing/3.4/Interfaces/IPreprocessingContext.cs	(revision 10989)
+++ /branches/DataPreprocessing/HeuristicLab.DataPreprocessing/3.4/Interfaces/IPreprocessingContext.cs	(revision 10990)
@@ -28,12 +28,14 @@
 namespace HeuristicLab.DataPreprocessing {
   public interface IPreprocessingContext : IItem {
+    IFilteredPreprocessingData Data { get; }
 
-    IFilteredPreprocessingData Data { get; }
     IAlgorithm Algorithm { get; }
     IDataAnalysisProblem Problem { get; }
+    IDataAnalysisProblemData ProblemData { get; }
 
-    IItem ExportAlgorithmOrProblem();
+    IItem Export();
     IAlgorithm ExportAlgorithm();
-    IProblem ExportProblem();
+    IDataAnalysisProblem ExportProblem();
+    IDataAnalysisProblemData ExportProblemData();
   }
 }
Index: /branches/DataPreprocessing/HeuristicLab.DataPreprocessing/3.4/ProblemDataCreator.cs
===================================================================
--- /branches/DataPreprocessing/HeuristicLab.DataPreprocessing/3.4/ProblemDataCreator.cs	(revision 10989)
+++ /branches/DataPreprocessing/HeuristicLab.DataPreprocessing/3.4/ProblemDataCreator.cs	(revision 10990)
@@ -43,7 +43,7 @@
 
     public IDataAnalysisProblemData CreateProblemData() {
-      var oldProblemData = context.Problem.ProblemData;
+      var oldProblemData = context.ProblemData;
 
-      IDataAnalysisProblemData problemData = null;
+      IDataAnalysisProblemData problemData;
 
       if (oldProblemData is RegressionProblemData) {
