Index: branches/DataPreprocessing/HeuristicLab.DataPreprocessing/3.3/HeuristicLab.DataPreprocessing-3.3.csproj
===================================================================
--- branches/DataPreprocessing/HeuristicLab.DataPreprocessing/3.3/HeuristicLab.DataPreprocessing-3.3.csproj	(revision 10192)
+++ branches/DataPreprocessing/HeuristicLab.DataPreprocessing/3.3/HeuristicLab.DataPreprocessing-3.3.csproj	(revision 10193)
@@ -85,4 +85,5 @@
     </Compile>
     <Compile Include="Implementations\PreprocessingData.cs" />
+    <Compile Include="Implementations\PreprocessingDataManipulation.cs" />
     <Compile Include="Implementations\StatisticInfo.cs" />
     <Compile Include="Interfaces\IStatisticInfo.cs" />
Index: branches/DataPreprocessing/HeuristicLab.DataPreprocessing/3.3/Implementations/PreprocessingData.cs
===================================================================
--- branches/DataPreprocessing/HeuristicLab.DataPreprocessing/3.3/Implementations/PreprocessingData.cs	(revision 10192)
+++ branches/DataPreprocessing/HeuristicLab.DataPreprocessing/3.3/Implementations/PreprocessingData.cs	(revision 10193)
@@ -39,6 +39,5 @@
 
     private double trainingToTestRatio;
-    private StatisticInfo statisticInfo;
-
+  
     private PreprocessingData(PreprocessingData original, Cloner cloner)
       : base(original, cloner) {
@@ -76,6 +75,4 @@
       Columns = problemData.Dataset.Columns;
       Rows = problemData.Dataset.Rows;
-
-      statisticInfo = new StatisticInfo(this);
     }
 
@@ -184,63 +181,4 @@
     }
 
-    public void ReplaceIndicesByValue<T>(string variableName, IEnumerable<int> indices, T value)
-    {
-        foreach (int index in indices)
-        {
-            SetCell<T>(variableName, index, value);
-        }
-    }
-
-    public void ReplaceIndicesByAverageValue(string variableName, IEnumerable<int> indices) {
-        double average = statisticInfo.GetAverage(variableName);
-        ReplaceIndicesByValue<double>(variableName, indices, average);
-    }
-
-    public void ReplaceIndicesByAverageValue(string variableName, IEnumerable<int> indices) {
-        double median = statisticInfo.GetMedian(variableName);
-        ReplaceIndicesByValue<double>(variableName, indices, median);
-    }
-
-    public void ReplaceIndicesByRandomValue(string variableName, IEnumerable<int> indices) {
-        Random r = new Random();
-
-        double max = statisticInfo.GetMax<double>(variableName);
-        double min = statisticInfo.GetMin<double>(variableName);
-        double randMultiplier = (max - min);
-        foreach (int index in indices)
-        {
-            double rand = r.NextDouble() * randMultiplier + min;
-            SetCell<double>(variableName, index, rand);
-        } 
-    }
-
-    public void ReplaceIndicesByLinearInterpolationOfNeighbours(string variableName, IEnumerable<int> indices) {
-        int countValues = GetValues<double>(variableName).Count();
-        foreach (int index in indices)
-        {
-            // dont replace first or last values
-            if (index > 0 && index < countValues) {
-               double prev = GetCell<double>(variableName, index - 1);
-               double next = GetCell<double>(variableName, index + 1);
-
-               double interpolated = (prev + next) / 2;
-
-               SetCell<double>(variableName, index, interpolated);
-            }
-        } 
-    }
-
-    public void ReplaceIndicesByMostCommonValue(string variableName, IEnumerable<int> indices) {   
-      if (IsType<double>(variableName)) {
-        ReplaceIndicesByValue<double>(variableName, indices,statisticInfo.GetMostCommonValue<double>(variableName));
-      } else if (IsType<string>(variableName)) {
-        ReplaceIndicesByValue<string>(variableName, indices, statisticInfo.GetMostCommonValue<string>(variableName));
-      } else if (IsType<DateTime>(variableName)) {
-        ReplaceIndicesByValue<DateTime>(variableName, indices, statisticInfo.GetMostCommonValue<DateTime>(variableName));
-      } else {
-        throw new ArgumentException("column with index: " + variableName + " contains a non supported type.");
-      }
-    }
-
     #endregion
   }
Index: branches/DataPreprocessing/HeuristicLab.DataPreprocessing/3.3/Implementations/PreprocessingDataManipulation.cs
===================================================================
--- branches/DataPreprocessing/HeuristicLab.DataPreprocessing/3.3/Implementations/PreprocessingDataManipulation.cs	(revision 10193)
+++ branches/DataPreprocessing/HeuristicLab.DataPreprocessing/3.3/Implementations/PreprocessingDataManipulation.cs	(revision 10193)
@@ -0,0 +1,90 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace HeuristicLab.DataPreprocessing.Implementations
+{
+    class PreprocessingDataManipulation
+    {
+        private IPreprocessingData preprocessingData;
+        private StatisticInfo statisticInfo;
+
+        public PreprocessingDataManipulation(IPreprocessingData _prepocessingData) {
+            preprocessingData = _prepocessingData;
+            statisticInfo = new StatisticInfo(preprocessingData);
+        }
+
+        public void ReplaceIndicesByValue<T>(string variableName, IEnumerable<int> indices, T value)
+        {
+            foreach (int index in indices)
+            {
+                preprocessingData.SetCell<T>(variableName, index, value);
+            }
+        }
+
+        public void ReplaceIndicesByAverageValue(string variableName, IEnumerable<int> indices)
+        {
+            double average = statisticInfo.GetAverage(variableName);
+            ReplaceIndicesByValue<double>(variableName, indices, average);
+        }
+
+        public void ReplaceIndicesByMedianValue(string variableName, IEnumerable<int> indices)
+        {
+            double median = statisticInfo.GetMedian(variableName);
+            ReplaceIndicesByValue<double>(variableName, indices, median);
+        }
+
+        public void ReplaceIndicesByRandomValue(string variableName, IEnumerable<int> indices)
+        {
+            Random r = new Random();
+
+            double max = statisticInfo.GetMax<double>(variableName);
+            double min = statisticInfo.GetMin<double>(variableName);
+            double randMultiplier = (max - min);
+            foreach (int index in indices)
+            {
+                double rand = r.NextDouble() * randMultiplier + min;
+                preprocessingData.SetCell<double>(variableName, index, rand);
+            }
+        }
+
+        public void ReplaceIndicesByLinearInterpolationOfNeighbours(string variableName, IEnumerable<int> indices)
+        {
+            int countValues = preprocessingData.GetValues<double>(variableName).Count();
+            foreach (int index in indices)
+            {
+                // dont replace first or last values
+                if (index > 0 && index < countValues)
+                {
+                    double prev = preprocessingData.GetCell<double>(variableName, index - 1);
+                    double next = preprocessingData.GetCell<double>(variableName, index + 1);
+
+                    double interpolated = (prev + next) / 2;
+
+                    preprocessingData.SetCell<double>(variableName, index, interpolated);
+                }
+            }
+        }
+
+        public void ReplaceIndicesByMostCommonValue(string variableName, IEnumerable<int> indices)
+        {
+            if (preprocessingData.IsType<double>(variableName))
+            {
+                ReplaceIndicesByValue<double>(variableName, indices, statisticInfo.GetMostCommonValue<double>(variableName));
+            }
+            else if (preprocessingData.IsType<string>(variableName))
+            {
+                ReplaceIndicesByValue<string>(variableName, indices, statisticInfo.GetMostCommonValue<string>(variableName));
+            }
+            else if (preprocessingData.IsType<DateTime>(variableName))
+            {
+                ReplaceIndicesByValue<DateTime>(variableName, indices, statisticInfo.GetMostCommonValue<DateTime>(variableName));
+            }
+            else
+            {
+                throw new ArgumentException("column with index: " + variableName + " contains a non supported type.");
+            }
+        }
+    }
+}
