Index: branches/DataPreprocessing/HeuristicLab.DataPreprocessing/3.3/Implementations/DataGridLogic.cs
===================================================================
--- branches/DataPreprocessing/HeuristicLab.DataPreprocessing/3.3/Implementations/DataGridLogic.cs	(revision 10620)
+++ branches/DataPreprocessing/HeuristicLab.DataPreprocessing/3.3/Implementations/DataGridLogic.cs	(revision 10621)
@@ -124,4 +124,8 @@
       remove { preprocessingData.Changed -= value; }
     }
+
+    public bool AreAllStringColumns(IEnumerable<int> columnIndices) {
+      return columnIndices.All(x => preprocessingData.IsType<string>(x));
+    }
   }
 }
Index: branches/DataPreprocessing/HeuristicLab.DataPreprocessing/3.3/Implementations/ManipulationLogic.cs
===================================================================
--- branches/DataPreprocessing/HeuristicLab.DataPreprocessing/3.3/Implementations/ManipulationLogic.cs	(revision 10620)
+++ branches/DataPreprocessing/HeuristicLab.DataPreprocessing/3.3/Implementations/ManipulationLogic.cs	(revision 10621)
@@ -100,21 +100,27 @@
       preprocessingData.InTransaction(() => {
         foreach (var column in cells) {
-          if (preprocessingData.IsType<double>(column.Key)) {
-            int countValues = preprocessingData.GetValues<double>(column.Key).Count();
-            foreach (int index in column.Value) {
-              // dont replace first or last values
-              if (index > 0 && index < countValues) {
-                int prevIndex = indexOfPrevPresentValue(column.Key, index);
-                int nextIndex = indexOfNextPresentValue(column.Key, index);
-
-                // no neighbours found
-                if (prevIndex < 0 && nextIndex >= countValues) {
-                  continue;
-                }
+          int countValues = 0;
+          if (preprocessingData.IsType<double>(column.Key)) {
+            countValues = preprocessingData.GetValues<double>(column.Key).Count();
+          } else if (preprocessingData.IsType<DateTime>(column.Key)) {
+            countValues = preprocessingData.GetValues<DateTime>(column.Key).Count();
+          }
+
+          foreach (int index in column.Value) {
+            // dont replace first or last values
+            if (index > 0 && index < countValues) {
+              int prevIndex = indexOfPrevPresentValue(column.Key, index);
+              int nextIndex = indexOfNextPresentValue(column.Key, index);
+
+              // no neighbours found
+              if (prevIndex < 0 && nextIndex >= countValues) {
+                continue;
+              }
+
+              int valuesToInterpolate = nextIndex - prevIndex;
+
+              if (preprocessingData.IsType<double>(column.Key)) {
                 double prev = preprocessingData.GetCell<double>(column.Key, prevIndex);
                 double next = preprocessingData.GetCell<double>(column.Key, nextIndex);
-
-                int valuesToInterpolate = nextIndex - prevIndex;
-
                 double interpolationStep = (next - prev) / valuesToInterpolate;
 
@@ -123,23 +129,7 @@
                   preprocessingData.SetCell<double>(column.Key, i, interpolated);
                 }
-              }
-            }
-          } else if (preprocessingData.IsType<DateTime>(column.Key)) {
-            int countValues = preprocessingData.GetValues<DateTime>(column.Key).Count();
-            foreach (int index in column.Value) {
-              // dont replace first or last values
-              if (index > 0 && index < countValues) {
-                int prevIndex = indexOfPrevPresentValue(column.Key, index);
-                int nextIndex = indexOfNextPresentValue(column.Key, index);
-
-                // no neighbours found
-                if (prevIndex < 0 && nextIndex >= countValues) {
-                  continue;
-                }
+              } else if (preprocessingData.IsType<DateTime>(column.Key)) {
                 DateTime prev = preprocessingData.GetCell<DateTime>(column.Key, prevIndex);
                 DateTime next = preprocessingData.GetCell<DateTime>(column.Key, nextIndex);
-
-                int valuesToInterpolate = nextIndex - prevIndex;
-
                 double interpolationStep = (next - prev).TotalSeconds / valuesToInterpolate;
 
