Index: stable/HeuristicLab.Data.Views/3.3/StringConvertibleMatrixView.cs
===================================================================
--- stable/HeuristicLab.Data.Views/3.3/StringConvertibleMatrixView.cs	(revision 12717)
+++ stable/HeuristicLab.Data.Views/3.3/StringConvertibleMatrixView.cs	(revision 12718)
@@ -109,6 +109,7 @@
         dataGridView.Columns.Clear();
         virtualRowIndices = new int[0];
-      } else
+      } else if (!dataGridView.IsCurrentCellInEditMode) {
         UpdateData();
+      }
     }
 
@@ -295,5 +296,5 @@
     }
 
-    private void dataGridView_KeyDown(object sender, KeyEventArgs e) {
+    protected virtual void dataGridView_KeyDown(object sender, KeyEventArgs e) {
       if (!ReadOnly && e.Control && e.KeyCode == Keys.V)
         PasteValuesToDataGridView();
@@ -398,28 +399,8 @@
     }
 
-    private void dataGridView_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e) {
+    protected virtual void dataGridView_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e) {
       if (Content != null) {
         if (e.Button == MouseButtons.Left && Content.SortableView) {
-          bool addToSortedIndices = (Control.ModifierKeys & Keys.Control) == Keys.Control;
-          SortOrder newSortOrder = SortOrder.Ascending;
-          if (sortedColumnIndices.Any(x => x.Key == e.ColumnIndex)) {
-            SortOrder oldSortOrder = sortedColumnIndices.Where(x => x.Key == e.ColumnIndex).First().Value;
-            int enumLength = Enum.GetValues(typeof(SortOrder)).Length;
-            newSortOrder = oldSortOrder = (SortOrder)Enum.Parse(typeof(SortOrder), ((((int)oldSortOrder) + 1) % enumLength).ToString());
-          }
-
-          if (!addToSortedIndices)
-            sortedColumnIndices.Clear();
-
-          if (sortedColumnIndices.Any(x => x.Key == e.ColumnIndex)) {
-            int sortedIndex = sortedColumnIndices.FindIndex(x => x.Key == e.ColumnIndex);
-            if (newSortOrder != SortOrder.None)
-              sortedColumnIndices[sortedIndex] = new KeyValuePair<int, SortOrder>(e.ColumnIndex, newSortOrder);
-            else
-              sortedColumnIndices.RemoveAt(sortedIndex);
-          } else
-            if (newSortOrder != SortOrder.None)
-              sortedColumnIndices.Add(new KeyValuePair<int, SortOrder>(e.ColumnIndex, newSortOrder));
-          Sort();
+          SortColumn(e.ColumnIndex);
         }
       }
@@ -438,4 +419,29 @@
       dataGridView.Invalidate();
     }
+
+    protected virtual void SortColumn(int columnIndex) {
+      bool addToSortedIndices = (Control.ModifierKeys & Keys.Control) == Keys.Control;
+      SortOrder newSortOrder = SortOrder.Ascending;
+      if (sortedColumnIndices.Any(x => x.Key == columnIndex)) {
+        SortOrder oldSortOrder = sortedColumnIndices.Where(x => x.Key == columnIndex).First().Value;
+        int enumLength = Enum.GetValues(typeof(SortOrder)).Length;
+        newSortOrder = oldSortOrder = (SortOrder)Enum.Parse(typeof(SortOrder), ((((int)oldSortOrder) + 1) % enumLength).ToString());
+      }
+
+      if (!addToSortedIndices)
+        sortedColumnIndices.Clear();
+
+      if (sortedColumnIndices.Any(x => x.Key == columnIndex)) {
+        int sortedIndex = sortedColumnIndices.FindIndex(x => x.Key == columnIndex);
+        if (newSortOrder != SortOrder.None)
+          sortedColumnIndices[sortedIndex] = new KeyValuePair<int, SortOrder>(columnIndex, newSortOrder);
+        else
+          sortedColumnIndices.RemoveAt(sortedIndex);
+      } else
+        if (newSortOrder != SortOrder.None)
+          sortedColumnIndices.Add(new KeyValuePair<int, SortOrder>(columnIndex, newSortOrder));
+      Sort();
+    }
+
     protected virtual int[] Sort(IEnumerable<KeyValuePair<int, SortOrder>> sortedColumns) {
       int[] newSortedIndex = Enumerable.Range(0, Content.Rows).ToArray();
@@ -510,5 +516,5 @@
     }
 
-    private void dataGridView_MouseClick(object sender, System.Windows.Forms.MouseEventArgs e) {
+    protected virtual void dataGridView_MouseClick(object sender, System.Windows.Forms.MouseEventArgs e) {
       if (Content == null) return;
       if (e.Button == MouseButtons.Right && Content.ColumnNames.Count() != 0)
@@ -543,5 +549,4 @@
 
     protected virtual void dataGridView_SelectionChanged(object sender, EventArgs e) {
-      string stringFormat = "{0,20:0.0000}";
       statisticsTextBox.Text = string.Empty;
       if (dataGridView.SelectedCells.Count > 1) {
@@ -553,15 +558,26 @@
         }
         if (selectedValues.Count > 1) {
-          StringBuilder labelText = new StringBuilder();
-          labelText.Append("Count: " + string.Format(stringFormat, selectedValues.Count) + "    ");
-          labelText.Append("Sum: " + string.Format(stringFormat, selectedValues.Sum()) + "    ");
-          labelText.Append("Min: " + string.Format(stringFormat, selectedValues.Min()) + "    ");
-          labelText.Append("Max: " + string.Format(stringFormat, selectedValues.Max()) + "    ");
-          labelText.Append("Average: " + string.Format(stringFormat, selectedValues.Average()) + "    ");
-          labelText.Append("Standard Deviation: " + string.Format(stringFormat, selectedValues.StandardDeviation()) + "    ");
-
-          statisticsTextBox.Text = labelText.ToString();
-        }
-      }
+          statisticsTextBox.Text = CreateStatisticsText(selectedValues);
+        }
+      }
+    }
+
+    protected virtual string CreateStatisticsText(ICollection<double> values) {
+      string stringFormat = "{0,20:0.0000}";
+      int overallCount = values.Count;
+      values = values.Where(x => !double.IsNaN(x)).ToList();
+      if (!values.Any()) {
+        return "";
+      }
+      StringBuilder statisticsText = new StringBuilder();
+      statisticsText.Append("Count: " + values.Count + "    ");
+      statisticsText.Append("Sum: " + string.Format(stringFormat, values.Sum()) + "    ");
+      statisticsText.Append("Min: " + string.Format(stringFormat, values.Min()) + "    ");
+      statisticsText.Append("Max: " + string.Format(stringFormat, values.Max()) + "    ");
+      statisticsText.Append("Average: " + string.Format(stringFormat, values.Average()) + "    ");
+      statisticsText.Append("Standard Deviation: " + string.Format(stringFormat, values.StandardDeviation()) + "    ");
+      if (overallCount > 0)
+        statisticsText.Append("Missing Values: " + string.Format(stringFormat, ((overallCount - values.Count) / (double)overallCount) * 100) + "%    ");
+      return statisticsText.ToString();
     }
   }
Index: stable/HeuristicLab.DataPreprocessing.Views/3.4/DataGridContentView.cs
===================================================================
--- stable/HeuristicLab.DataPreprocessing.Views/3.4/DataGridContentView.cs	(revision 12717)
+++ stable/HeuristicLab.DataPreprocessing.Views/3.4/DataGridContentView.cs	(revision 12718)
@@ -61,5 +61,4 @@
       dataGridView.KeyDown += dataGridView_KeyDown;
       dataGridView.MouseUp += dataGridView_MouseUp;
-      dataGridView.ColumnHeaderMouseClick += dataGridView_ColumnHeaderMouseClick;
       contextMenuCell.Items.Add(ShowHideColumns);
       _highlightedCellsBackground = new Dictionary<int, IList<int>>();
@@ -127,5 +126,5 @@
 
       string errorMessage;
-      if (Content != null) {
+      if (!String.IsNullOrEmpty(e.FormattedValue.ToString())) {
         if (dataGridView.IsCurrentCellInEditMode && Content.FilterLogic.IsFiltered) {
           errorMessage = "A filter is active, you cannot modify data. Press ESC to exit edit mode.";
@@ -164,5 +163,19 @@
     }
 
-    private void dataGridView_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e) {
+    protected override void dataGridView_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e) {
+      if (Content != null) {
+        if (e.Button == System.Windows.Forms.MouseButtons.Left) {
+          dataGridView.Focus();
+          dataGridView.ClearSelection();
+          dataGridView.SelectionChanged -= dataGridView_SelectionChanged;
+          for (int i = 0; i < dataGridView.RowCount; i++) {
+            if (i + 1 == dataGridView.RowCount)
+              dataGridView.SelectionChanged += dataGridView_SelectionChanged;
+            dataGridView[e.ColumnIndex, i].Selected = true;
+          }
+        } else if (Content.SortableView) {
+          SortColumn(e.ColumnIndex);
+        }
+      }
       searchIterator = null;
     }
@@ -437,5 +450,5 @@
     private void dataGridView_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e) {
       if (Content == null) return;
-      if (e.Button == System.Windows.Forms.MouseButtons.Right) {
+      if (e.Button == System.Windows.Forms.MouseButtons.Right && !(e.ColumnIndex != -1 && e.RowIndex == -1)) {
         if (e.ColumnIndex == -1 || e.RowIndex == -1) {
           replaceValueOverColumnToolStripMenuItem.Visible = false;
@@ -474,16 +487,23 @@
     private void dataGridView_KeyDown(object sender, KeyEventArgs e) {
       var selectedRows = dataGridView.SelectedRows;
-      if (e.KeyCode == Keys.Delete && selectedRows.Count > 0) {
-        List<int> rows = new List<int>();
-        for (int i = 0; i < selectedRows.Count; ++i) {
-          rows.Add(selectedRows[i].Index);
-        }
-        Content.DeleteRow(rows);
-      } else if (e.Control && e.KeyCode == Keys.F) {
-        CreateFindAndReplaceDialog();
-        findAndReplaceDialog.ActivateSearch();
-      } else if (e.Control && e.KeyCode == Keys.R) {
-        CreateFindAndReplaceDialog();
-        findAndReplaceDialog.ActivateReplace();
+      var selectedCells = dataGridView.SelectedCells;
+      if (!Content.FilterLogic.IsFiltered) { //data is in read only mode....
+        if (e.KeyCode == Keys.Delete && selectedCells.Count == Content.Rows && selectedCells.Count > 0) {
+          Content.DeleteColumn(selectedCells[0].ColumnIndex);
+        } else if (e.KeyCode == Keys.Delete && selectedRows.Count > 0) {
+          List<int> rows = new List<int>();
+          for (int i = 0; i < selectedRows.Count; ++i) {
+            int index = (sortedColumnIndices.Count != 0) ? (Convert.ToInt32(selectedRows[i].HeaderCell.Value) - 1) :
+              selectedRows[i].Index;
+            rows.Add(index);
+          }
+          Content.DeleteRows(rows);
+        } else if (e.Control && e.KeyCode == Keys.F) {
+          CreateFindAndReplaceDialog();
+          findAndReplaceDialog.ActivateSearch();
+        } else if (e.Control && e.KeyCode == Keys.R) {
+          CreateFindAndReplaceDialog();
+          findAndReplaceDialog.ActivateReplace();
+        }
       }
     }
Index: stable/HeuristicLab.DataPreprocessing.Views/3.4/DataPreprocessingView.cs
===================================================================
--- stable/HeuristicLab.DataPreprocessing.Views/3.4/DataPreprocessingView.cs	(revision 12717)
+++ stable/HeuristicLab.DataPreprocessing.Views/3.4/DataPreprocessingView.cs	(revision 12718)
@@ -46,8 +46,8 @@
       if (Content != null) {
         var data = Content.Data;
-        var searchLogic = new SearchLogic(data);
+        var filterLogic = new FilterLogic(data);
+        var searchLogic = new SearchLogic(data, filterLogic);
         var statisticsLogic = new StatisticsLogic(data, searchLogic);
         var manipulationLogic = new ManipulationLogic(data, searchLogic, statisticsLogic);
-        var filterLogic = new FilterLogic(data);
 
         var viewShortcuts = new ItemList<IViewShortcut> {
Index: stable/HeuristicLab.DataPreprocessing.Views/3.4/DataPreprocessorStarter.cs
===================================================================
--- stable/HeuristicLab.DataPreprocessing.Views/3.4/DataPreprocessorStarter.cs	(revision 12717)
+++ stable/HeuristicLab.DataPreprocessing.Views/3.4/DataPreprocessorStarter.cs	(revision 12718)
@@ -44,6 +44,10 @@
         IContentView contentView = control as IContentView;
         if (contentView != null) {
-          algorithm = contentView.Content as IAlgorithm;
-          problem = contentView.Content as IDataAnalysisProblem;
+          var newAlgorithm = contentView.Content as IAlgorithm;
+          if (newAlgorithm != null)
+            algorithm = newAlgorithm;
+          var newProblem = contentView.Content as IDataAnalysisProblem;
+          if (newProblem != null)
+            problem = newProblem;
         }
         control = control.Parent;
Index: stable/HeuristicLab.DataPreprocessing.Views/3.4/HistogramView.Designer.cs
===================================================================
--- stable/HeuristicLab.DataPreprocessing.Views/3.4/HistogramView.Designer.cs	(revision 12717)
+++ stable/HeuristicLab.DataPreprocessing.Views/3.4/HistogramView.Designer.cs	(revision 12718)
@@ -25,4 +25,5 @@
     private void InitializeComponent() {
       this.optionsBox = new System.Windows.Forms.GroupBox();
+      this.displayDetailsCheckBox = new System.Windows.Forms.CheckBox();
       this.label1 = new System.Windows.Forms.Label();
       this.classifierComboBox = new System.Windows.Forms.ComboBox();
@@ -33,21 +34,37 @@
       // 
       this.optionsBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.optionsBox.Controls.Add(this.displayDetailsCheckBox);
       this.optionsBox.Controls.Add(this.label1);
       this.optionsBox.Controls.Add(this.classifierComboBox);
-      this.optionsBox.Location = new System.Drawing.Point(4, 263);
+      this.optionsBox.Location = new System.Drawing.Point(5, 324);
+      this.optionsBox.Margin = new System.Windows.Forms.Padding(4);
       this.optionsBox.Name = "optionsBox";
-      this.optionsBox.Size = new System.Drawing.Size(152, 134);
+      this.optionsBox.Padding = new System.Windows.Forms.Padding(4);
+      this.optionsBox.Size = new System.Drawing.Size(203, 165);
       this.optionsBox.TabIndex = 7;
       this.optionsBox.TabStop = false;
       this.optionsBox.Text = "Options";
       // 
+      // displayDetailsCheckBox
+      // 
+      this.displayDetailsCheckBox.AutoSize = true;
+      this.displayDetailsCheckBox.Location = new System.Drawing.Point(7, 71);
+      this.displayDetailsCheckBox.Name = "displayDetailsCheckBox";
+      this.displayDetailsCheckBox.RightToLeft = System.Windows.Forms.RightToLeft.Yes;
+      this.displayDetailsCheckBox.Size = new System.Drawing.Size(153, 21);
+      this.displayDetailsCheckBox.TabIndex = 3;
+      this.displayDetailsCheckBox.Text = "Display value count";
+      this.displayDetailsCheckBox.UseVisualStyleBackColor = true;
+      this.displayDetailsCheckBox.CheckedChanged += new System.EventHandler(this.displayDetailsCheckBox_CheckedChanged);
+      // 
       // label1
       // 
       this.label1.AutoSize = true;
-      this.label1.Location = new System.Drawing.Point(6, 26);
+      this.label1.Location = new System.Drawing.Point(4, 19);
+      this.label1.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
       this.label1.Name = "label1";
-      this.label1.Size = new System.Drawing.Size(91, 13);
+      this.label1.Size = new System.Drawing.Size(108, 17);
       this.label1.TabIndex = 2;
-      this.label1.Text = "Classifier variable:";
+      this.label1.Text = "Target variable:";
       // 
       // classifierComboBox
@@ -55,7 +72,8 @@
       this.classifierComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
       this.classifierComboBox.FormattingEnabled = true;
-      this.classifierComboBox.Location = new System.Drawing.Point(9, 52);
+      this.classifierComboBox.Location = new System.Drawing.Point(7, 40);
+      this.classifierComboBox.Margin = new System.Windows.Forms.Padding(4);
       this.classifierComboBox.Name = "classifierComboBox";
-      this.classifierComboBox.Size = new System.Drawing.Size(121, 21);
+      this.classifierComboBox.Size = new System.Drawing.Size(160, 24);
       this.classifierComboBox.TabIndex = 1;
       this.classifierComboBox.SelectedIndexChanged += new System.EventHandler(this.classifierComboBox_SelectedIndexChanged);
@@ -63,7 +81,8 @@
       // HistogramView
       // 
-      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F);
       this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
       this.Controls.Add(this.optionsBox);
+      this.Margin = new System.Windows.Forms.Padding(5);
       this.Name = "HistogramView";
       this.Controls.SetChildIndex(this.optionsBox, 0);
@@ -79,4 +98,5 @@
     private System.Windows.Forms.ComboBox classifierComboBox;
     private System.Windows.Forms.Label label1;
+    private System.Windows.Forms.CheckBox displayDetailsCheckBox;
 
   }
Index: stable/HeuristicLab.DataPreprocessing.Views/3.4/HistogramView.cs
===================================================================
--- stable/HeuristicLab.DataPreprocessing.Views/3.4/HistogramView.cs	(revision 12717)
+++ stable/HeuristicLab.DataPreprocessing.Views/3.4/HistogramView.cs	(revision 12718)
@@ -70,6 +70,17 @@
 
       Content.ClassifierVariableIndex = classifierComboBox.SelectedIndex;
-
-      GenerateChart();
+      if (Content.IsDetailedChartViewEnabled != IsDetailedChartViewEnabled) {
+        displayDetailsCheckBox.Checked = Content.IsDetailedChartViewEnabled;
+      } else {
+        GenerateChart();
+      }
+    }
+    private void displayDetailsCheckBox_CheckedChanged(object sender, EventArgs e) {
+      bool isChecked = displayDetailsCheckBox.Checked;
+      if (IsDetailedChartViewEnabled != isChecked) {
+        IsDetailedChartViewEnabled = isChecked;
+        Content.IsDetailedChartViewEnabled = isChecked;
+        GenerateChart();
+      }
     }
   }
Index: stable/HeuristicLab.DataPreprocessing.Views/3.4/ManipulationView.Designer.cs
===================================================================
--- stable/HeuristicLab.DataPreprocessing.Views/3.4/ManipulationView.Designer.cs	(revision 12717)
+++ stable/HeuristicLab.DataPreprocessing.Views/3.4/ManipulationView.Designer.cs	(revision 12718)
@@ -49,4 +49,5 @@
       this.label10 = new System.Windows.Forms.Label();
       this.tabDataShuffle = new System.Windows.Forms.TabPage();
+      this.shuffleSeparatelyCheckbox = new System.Windows.Forms.CheckBox();
       this.lblShuffleProperties = new System.Windows.Forms.Label();
       this.grpBoxPreview = new System.Windows.Forms.GroupBox();
@@ -66,5 +67,6 @@
       this.lblPreviewShuffle = new System.Windows.Forms.Label();
       this.label9 = new System.Windows.Forms.Label();
-      this.shuffleSeparatelyCheckbox = new System.Windows.Forms.CheckBox();
+      this.panel1 = new System.Windows.Forms.Panel();
+      this.panel2 = new System.Windows.Forms.Panel();
       this.grpBoxData.SuspendLayout();
       this.tabsData.SuspendLayout();
@@ -83,4 +85,6 @@
       this.tabPreviewReplaceMissingValues.SuspendLayout();
       this.tabPreviewShuffle.SuspendLayout();
+      this.panel1.SuspendLayout();
+      this.panel2.SuspendLayout();
       this.SuspendLayout();
       // 
@@ -90,4 +94,5 @@
             | System.Windows.Forms.AnchorStyles.Right)));
       this.lstMethods.FormattingEnabled = true;
+      this.lstMethods.ItemHeight = 16;
       this.lstMethods.Items.AddRange(new object[] {
             "Delete Columns with insufficient Information",
@@ -96,7 +101,8 @@
             "Replace Missing Values",
             "Shuffle Data"});
-      this.lstMethods.Location = new System.Drawing.Point(3, 3);
+      this.lstMethods.Location = new System.Drawing.Point(4, 4);
+      this.lstMethods.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
       this.lstMethods.Name = "lstMethods";
-      this.lstMethods.Size = new System.Drawing.Size(733, 95);
+      this.lstMethods.Size = new System.Drawing.Size(976, 116);
       this.lstMethods.Sorted = true;
       this.lstMethods.TabIndex = 0;
@@ -107,7 +113,8 @@
       this.btnApply.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
       this.btnApply.Enabled = false;
-      this.btnApply.Location = new System.Drawing.Point(603, 500);
+      this.btnApply.Location = new System.Drawing.Point(804, 615);
+      this.btnApply.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
       this.btnApply.Name = "btnApply";
-      this.btnApply.Size = new System.Drawing.Size(129, 23);
+      this.btnApply.Size = new System.Drawing.Size(172, 28);
       this.btnApply.TabIndex = 2;
       this.btnApply.Text = "Apply Manipulation";
@@ -120,7 +127,9 @@
             | System.Windows.Forms.AnchorStyles.Right)));
       this.grpBoxData.Controls.Add(this.tabsData);
-      this.grpBoxData.Location = new System.Drawing.Point(4, 105);
+      this.grpBoxData.Location = new System.Drawing.Point(5, 129);
+      this.grpBoxData.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
       this.grpBoxData.Name = "grpBoxData";
-      this.grpBoxData.Size = new System.Drawing.Size(732, 189);
+      this.grpBoxData.Padding = new System.Windows.Forms.Padding(4, 4, 4, 4);
+      this.grpBoxData.Size = new System.Drawing.Size(976, 233);
       this.grpBoxData.TabIndex = 3;
       this.grpBoxData.TabStop = false;
@@ -138,8 +147,9 @@
       this.tabsData.Controls.Add(this.tabDataShuffle);
       this.tabsData.ItemSize = new System.Drawing.Size(58, 18);
-      this.tabsData.Location = new System.Drawing.Point(6, 19);
+      this.tabsData.Location = new System.Drawing.Point(8, 23);
+      this.tabsData.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
       this.tabsData.Name = "tabsData";
       this.tabsData.SelectedIndex = 0;
-      this.tabsData.Size = new System.Drawing.Size(719, 164);
+      this.tabsData.Size = new System.Drawing.Size(959, 202);
       this.tabsData.TabIndex = 3;
       // 
@@ -148,7 +158,8 @@
       this.tabPage1.Controls.Add(this.label7);
       this.tabPage1.Location = new System.Drawing.Point(4, 22);
+      this.tabPage1.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
       this.tabPage1.Name = "tabPage1";
-      this.tabPage1.Padding = new System.Windows.Forms.Padding(3);
-      this.tabPage1.Size = new System.Drawing.Size(711, 138);
+      this.tabPage1.Padding = new System.Windows.Forms.Padding(4, 4, 4, 4);
+      this.tabPage1.Size = new System.Drawing.Size(951, 176);
       this.tabPage1.TabIndex = 5;
       this.tabPage1.Text = "tabDataInactive";
@@ -159,7 +170,8 @@
       this.label7.AutoSize = true;
       this.label7.Enabled = false;
-      this.label7.Location = new System.Drawing.Point(3, 3);
+      this.label7.Location = new System.Drawing.Point(4, 4);
+      this.label7.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
       this.label7.Name = "label7";
-      this.label7.Size = new System.Drawing.Size(259, 13);
+      this.label7.Size = new System.Drawing.Size(345, 17);
       this.label7.TabIndex = 1;
       this.label7.Text = "Please select one of the manipulation methods above";
@@ -171,7 +183,8 @@
       this.tabDataDeleteColumnsInformation.Controls.Add(this.label1);
       this.tabDataDeleteColumnsInformation.Location = new System.Drawing.Point(4, 22);
+      this.tabDataDeleteColumnsInformation.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
       this.tabDataDeleteColumnsInformation.Name = "tabDataDeleteColumnsInformation";
-      this.tabDataDeleteColumnsInformation.Padding = new System.Windows.Forms.Padding(3);
-      this.tabDataDeleteColumnsInformation.Size = new System.Drawing.Size(711, 138);
+      this.tabDataDeleteColumnsInformation.Padding = new System.Windows.Forms.Padding(4, 4, 4, 4);
+      this.tabDataDeleteColumnsInformation.Size = new System.Drawing.Size(951, 176);
       this.tabDataDeleteColumnsInformation.TabIndex = 0;
       this.tabDataDeleteColumnsInformation.Text = "del columns info";
@@ -181,7 +194,8 @@
       // 
       this.label2.AutoSize = true;
-      this.label2.Location = new System.Drawing.Point(204, 3);
+      this.label2.Location = new System.Drawing.Point(272, 4);
+      this.label2.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
       this.label2.Name = "label2";
-      this.label2.Size = new System.Drawing.Size(89, 13);
+      this.label2.Size = new System.Drawing.Size(120, 17);
       this.label2.TabIndex = 5;
       this.label2.Text = "% missing values.";
@@ -189,7 +203,8 @@
       // txtDeleteColumnsInfo
       // 
-      this.txtDeleteColumnsInfo.Location = new System.Drawing.Point(164, 0);
+      this.txtDeleteColumnsInfo.Location = new System.Drawing.Point(219, 0);
+      this.txtDeleteColumnsInfo.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
       this.txtDeleteColumnsInfo.Name = "txtDeleteColumnsInfo";
-      this.txtDeleteColumnsInfo.Size = new System.Drawing.Size(34, 20);
+      this.txtDeleteColumnsInfo.Size = new System.Drawing.Size(44, 22);
       this.txtDeleteColumnsInfo.TabIndex = 4;
       this.txtDeleteColumnsInfo.TextChanged += new System.EventHandler(this.txtDeleteColumnsInfo_TextChanged);
@@ -198,7 +213,8 @@
       // 
       this.label1.AutoSize = true;
-      this.label1.Location = new System.Drawing.Point(3, 3);
+      this.label1.Location = new System.Drawing.Point(4, 4);
+      this.label1.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
       this.label1.Name = "label1";
-      this.label1.Size = new System.Drawing.Size(155, 13);
+      this.label1.Size = new System.Drawing.Size(205, 17);
       this.label1.TabIndex = 3;
       this.label1.Text = "Delete columns with more than ";
@@ -209,7 +225,8 @@
       this.tabDataDeleteColumnsVariance.Controls.Add(this.label4);
       this.tabDataDeleteColumnsVariance.Location = new System.Drawing.Point(4, 22);
+      this.tabDataDeleteColumnsVariance.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
       this.tabDataDeleteColumnsVariance.Name = "tabDataDeleteColumnsVariance";
-      this.tabDataDeleteColumnsVariance.Padding = new System.Windows.Forms.Padding(3);
-      this.tabDataDeleteColumnsVariance.Size = new System.Drawing.Size(711, 138);
+      this.tabDataDeleteColumnsVariance.Padding = new System.Windows.Forms.Padding(4, 4, 4, 4);
+      this.tabDataDeleteColumnsVariance.Size = new System.Drawing.Size(951, 176);
       this.tabDataDeleteColumnsVariance.TabIndex = 1;
       this.tabDataDeleteColumnsVariance.Text = "del columns variance";
@@ -218,7 +235,8 @@
       // txtDeleteColumnsVariance
       // 
-      this.txtDeleteColumnsVariance.Location = new System.Drawing.Point(229, 0);
+      this.txtDeleteColumnsVariance.Location = new System.Drawing.Point(305, 0);
+      this.txtDeleteColumnsVariance.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
       this.txtDeleteColumnsVariance.Name = "txtDeleteColumnsVariance";
-      this.txtDeleteColumnsVariance.Size = new System.Drawing.Size(135, 20);
+      this.txtDeleteColumnsVariance.Size = new System.Drawing.Size(179, 22);
       this.txtDeleteColumnsVariance.TabIndex = 4;
       this.txtDeleteColumnsVariance.TextChanged += new System.EventHandler(this.txtDeleteColumnsVariance_TextChanged);
@@ -227,7 +245,8 @@
       // 
       this.label4.AutoSize = true;
-      this.label4.Location = new System.Drawing.Point(3, 3);
+      this.label4.Location = new System.Drawing.Point(4, 4);
+      this.label4.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
       this.label4.Name = "label4";
-      this.label4.Size = new System.Drawing.Size(220, 13);
+      this.label4.Size = new System.Drawing.Size(292, 17);
       this.label4.TabIndex = 3;
       this.label4.Text = "Delete columns with a variance smaller than  ";
@@ -239,7 +258,8 @@
       this.tabDataDeleteRowsInfo.Controls.Add(this.label5);
       this.tabDataDeleteRowsInfo.Location = new System.Drawing.Point(4, 22);
+      this.tabDataDeleteRowsInfo.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
       this.tabDataDeleteRowsInfo.Name = "tabDataDeleteRowsInfo";
-      this.tabDataDeleteRowsInfo.Padding = new System.Windows.Forms.Padding(3);
-      this.tabDataDeleteRowsInfo.Size = new System.Drawing.Size(711, 138);
+      this.tabDataDeleteRowsInfo.Padding = new System.Windows.Forms.Padding(4, 4, 4, 4);
+      this.tabDataDeleteRowsInfo.Size = new System.Drawing.Size(951, 176);
       this.tabDataDeleteRowsInfo.TabIndex = 2;
       this.tabDataDeleteRowsInfo.Text = "del rows info";
@@ -249,7 +269,8 @@
       // 
       this.label3.AutoSize = true;
-      this.label3.Location = new System.Drawing.Point(189, 3);
+      this.label3.Location = new System.Drawing.Point(252, 4);
+      this.label3.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
       this.label3.Name = "label3";
-      this.label3.Size = new System.Drawing.Size(89, 13);
+      this.label3.Size = new System.Drawing.Size(120, 17);
       this.label3.TabIndex = 8;
       this.label3.Text = "% missing values.";
@@ -257,7 +278,8 @@
       // txtDeleteRowsInfo
       // 
-      this.txtDeleteRowsInfo.Location = new System.Drawing.Point(147, 0);
+      this.txtDeleteRowsInfo.Location = new System.Drawing.Point(196, 0);
+      this.txtDeleteRowsInfo.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
       this.txtDeleteRowsInfo.Name = "txtDeleteRowsInfo";
-      this.txtDeleteRowsInfo.Size = new System.Drawing.Size(34, 20);
+      this.txtDeleteRowsInfo.Size = new System.Drawing.Size(44, 22);
       this.txtDeleteRowsInfo.TabIndex = 7;
       this.txtDeleteRowsInfo.TextChanged += new System.EventHandler(this.txtDeleteRowsInfo_TextChanged);
@@ -266,7 +288,8 @@
       // 
       this.label5.AutoSize = true;
-      this.label5.Location = new System.Drawing.Point(3, 3);
+      this.label5.Location = new System.Drawing.Point(4, 4);
+      this.label5.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
       this.label5.Name = "label5";
-      this.label5.Size = new System.Drawing.Size(138, 13);
+      this.label5.Size = new System.Drawing.Size(182, 17);
       this.label5.TabIndex = 6;
       this.label5.Text = "Delete rows with more than ";
@@ -281,7 +304,8 @@
       this.tabReplaceMissingValues.Controls.Add(this.label10);
       this.tabReplaceMissingValues.Location = new System.Drawing.Point(4, 22);
+      this.tabReplaceMissingValues.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
       this.tabReplaceMissingValues.Name = "tabReplaceMissingValues";
-      this.tabReplaceMissingValues.Padding = new System.Windows.Forms.Padding(3);
-      this.tabReplaceMissingValues.Size = new System.Drawing.Size(711, 138);
+      this.tabReplaceMissingValues.Padding = new System.Windows.Forms.Padding(4, 4, 4, 4);
+      this.tabReplaceMissingValues.Size = new System.Drawing.Size(951, 176);
       this.tabReplaceMissingValues.TabIndex = 6;
       this.tabReplaceMissingValues.Text = "repl missing vals";
@@ -290,7 +314,8 @@
       // txtReplaceValue
       // 
-      this.txtReplaceValue.Location = new System.Drawing.Point(173, 27);
+      this.txtReplaceValue.Location = new System.Drawing.Point(231, 33);
+      this.txtReplaceValue.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
       this.txtReplaceValue.Name = "txtReplaceValue";
-      this.txtReplaceValue.Size = new System.Drawing.Size(100, 20);
+      this.txtReplaceValue.Size = new System.Drawing.Size(132, 22);
       this.txtReplaceValue.TabIndex = 2;
       this.txtReplaceValue.TextChanged += new System.EventHandler(this.txtReplaceValue_TextChanged);
@@ -300,7 +325,8 @@
       this.cmbVariableNames.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
       this.cmbVariableNames.FormattingEnabled = true;
-      this.cmbVariableNames.Location = new System.Drawing.Point(142, 0);
+      this.cmbVariableNames.Location = new System.Drawing.Point(189, 0);
+      this.cmbVariableNames.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
       this.cmbVariableNames.Name = "cmbVariableNames";
-      this.cmbVariableNames.Size = new System.Drawing.Size(121, 21);
+      this.cmbVariableNames.Size = new System.Drawing.Size(160, 24);
       this.cmbVariableNames.TabIndex = 1;
       this.cmbVariableNames.SelectedIndexChanged += new System.EventHandler(this.cmbReplaceWith_SelectedIndexChanged);
@@ -316,7 +342,8 @@
             "Most Common",
             "Random"});
-      this.cmbReplaceWith.Location = new System.Drawing.Point(35, 27);
+      this.cmbReplaceWith.Location = new System.Drawing.Point(47, 33);
+      this.cmbReplaceWith.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
       this.cmbReplaceWith.Name = "cmbReplaceWith";
-      this.cmbReplaceWith.Size = new System.Drawing.Size(121, 21);
+      this.cmbReplaceWith.Size = new System.Drawing.Size(160, 24);
       this.cmbReplaceWith.TabIndex = 1;
       this.cmbReplaceWith.SelectedIndexChanged += new System.EventHandler(this.cmbReplaceWith_SelectedIndexChanged);
@@ -325,7 +352,8 @@
       // 
       this.lblValueColon.AutoSize = true;
-      this.lblValueColon.Location = new System.Drawing.Point(157, 30);
+      this.lblValueColon.Location = new System.Drawing.Point(209, 37);
+      this.lblValueColon.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
       this.lblValueColon.Name = "lblValueColon";
-      this.lblValueColon.Size = new System.Drawing.Size(10, 13);
+      this.lblValueColon.Size = new System.Drawing.Size(12, 17);
       this.lblValueColon.TabIndex = 0;
       this.lblValueColon.Text = ":";
@@ -334,7 +362,8 @@
       // 
       this.label8.AutoSize = true;
-      this.label8.Location = new System.Drawing.Point(3, 30);
+      this.label8.Location = new System.Drawing.Point(4, 37);
+      this.label8.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
       this.label8.Name = "label8";
-      this.label8.Size = new System.Drawing.Size(26, 13);
+      this.label8.Size = new System.Drawing.Size(32, 17);
       this.label8.TabIndex = 0;
       this.label8.Text = "with";
@@ -343,7 +372,8 @@
       // 
       this.label10.AutoSize = true;
-      this.label10.Location = new System.Drawing.Point(3, 3);
+      this.label10.Location = new System.Drawing.Point(4, 4);
+      this.label10.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
       this.label10.Name = "label10";
-      this.label10.Size = new System.Drawing.Size(133, 13);
+      this.label10.Size = new System.Drawing.Size(177, 17);
       this.label10.TabIndex = 0;
       this.label10.Text = "Replace missing values for";
@@ -354,18 +384,31 @@
       this.tabDataShuffle.Controls.Add(this.lblShuffleProperties);
       this.tabDataShuffle.Location = new System.Drawing.Point(4, 22);
+      this.tabDataShuffle.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
       this.tabDataShuffle.Name = "tabDataShuffle";
-      this.tabDataShuffle.Padding = new System.Windows.Forms.Padding(3);
-      this.tabDataShuffle.Size = new System.Drawing.Size(711, 138);
+      this.tabDataShuffle.Padding = new System.Windows.Forms.Padding(4, 4, 4, 4);
+      this.tabDataShuffle.Size = new System.Drawing.Size(951, 176);
       this.tabDataShuffle.TabIndex = 4;
       this.tabDataShuffle.Text = "shuffle";
       this.tabDataShuffle.UseVisualStyleBackColor = true;
       // 
+      // shuffleSeparatelyCheckbox
+      // 
+      this.shuffleSeparatelyCheckbox.AutoSize = true;
+      this.shuffleSeparatelyCheckbox.Location = new System.Drawing.Point(8, 2);
+      this.shuffleSeparatelyCheckbox.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
+      this.shuffleSeparatelyCheckbox.Name = "shuffleSeparatelyCheckbox";
+      this.shuffleSeparatelyCheckbox.Size = new System.Drawing.Size(312, 21);
+      this.shuffleSeparatelyCheckbox.TabIndex = 1;
+      this.shuffleSeparatelyCheckbox.Text = "Shuffle training and test partitions separately";
+      this.shuffleSeparatelyCheckbox.UseVisualStyleBackColor = true;
+      // 
       // lblShuffleProperties
       // 
       this.lblShuffleProperties.AutoSize = true;
       this.lblShuffleProperties.Enabled = false;
-      this.lblShuffleProperties.Location = new System.Drawing.Point(3, 3);
+      this.lblShuffleProperties.Location = new System.Drawing.Point(4, 4);
+      this.lblShuffleProperties.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
       this.lblShuffleProperties.Name = "lblShuffleProperties";
-      this.lblShuffleProperties.Size = new System.Drawing.Size(115, 13);
+      this.lblShuffleProperties.Size = new System.Drawing.Size(154, 17);
       this.lblShuffleProperties.TabIndex = 0;
       this.lblShuffleProperties.Text = "No properties available";
@@ -377,7 +420,9 @@
             | System.Windows.Forms.AnchorStyles.Right)));
       this.grpBoxPreview.Controls.Add(this.tabsPreview);
-      this.grpBoxPreview.Location = new System.Drawing.Point(4, 301);
+      this.grpBoxPreview.Location = new System.Drawing.Point(5, 370);
+      this.grpBoxPreview.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
       this.grpBoxPreview.Name = "grpBoxPreview";
-      this.grpBoxPreview.Size = new System.Drawing.Size(732, 193);
+      this.grpBoxPreview.Padding = new System.Windows.Forms.Padding(4, 4, 4, 4);
+      this.grpBoxPreview.Size = new System.Drawing.Size(976, 238);
       this.grpBoxPreview.TabIndex = 4;
       this.grpBoxPreview.TabStop = false;
@@ -395,8 +440,9 @@
       this.tabsPreview.Controls.Add(this.tabPreviewShuffle);
       this.tabsPreview.ItemSize = new System.Drawing.Size(58, 18);
-      this.tabsPreview.Location = new System.Drawing.Point(6, 19);
+      this.tabsPreview.Location = new System.Drawing.Point(8, 23);
+      this.tabsPreview.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
       this.tabsPreview.Name = "tabsPreview";
       this.tabsPreview.SelectedIndex = 0;
-      this.tabsPreview.Size = new System.Drawing.Size(719, 168);
+      this.tabsPreview.Size = new System.Drawing.Size(959, 207);
       this.tabsPreview.TabIndex = 3;
       // 
@@ -405,7 +451,8 @@
       this.tabPreviewInactive.Controls.Add(this.lblPreviewInActive);
       this.tabPreviewInactive.Location = new System.Drawing.Point(4, 22);
+      this.tabPreviewInactive.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
       this.tabPreviewInactive.Name = "tabPreviewInactive";
-      this.tabPreviewInactive.Padding = new System.Windows.Forms.Padding(3);
-      this.tabPreviewInactive.Size = new System.Drawing.Size(711, 142);
+      this.tabPreviewInactive.Padding = new System.Windows.Forms.Padding(4, 4, 4, 4);
+      this.tabPreviewInactive.Size = new System.Drawing.Size(951, 181);
       this.tabPreviewInactive.TabIndex = 5;
       this.tabPreviewInactive.Text = "inactive";
@@ -415,7 +462,8 @@
       // 
       this.lblPreviewInActive.AutoSize = true;
-      this.lblPreviewInActive.Location = new System.Drawing.Point(3, 3);
+      this.lblPreviewInActive.Location = new System.Drawing.Point(4, 4);
+      this.lblPreviewInActive.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
       this.lblPreviewInActive.Name = "lblPreviewInActive";
-      this.lblPreviewInActive.Size = new System.Drawing.Size(361, 39);
+      this.lblPreviewInActive.Size = new System.Drawing.Size(491, 51);
       this.lblPreviewInActive.TabIndex = 2;
       this.lblPreviewInActive.Text = "Filters are active and thus manipulations cannot be applied!\r\n\r\nPlease deactive t" +
@@ -425,9 +473,10 @@
       // tabPreviewDeleteColumnsInfo
       // 
-      this.tabPreviewDeleteColumnsInfo.Controls.Add(this.lblPreviewColumnsInfo);
+      this.tabPreviewDeleteColumnsInfo.Controls.Add(this.panel1);
       this.tabPreviewDeleteColumnsInfo.Location = new System.Drawing.Point(4, 22);
+      this.tabPreviewDeleteColumnsInfo.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
       this.tabPreviewDeleteColumnsInfo.Name = "tabPreviewDeleteColumnsInfo";
-      this.tabPreviewDeleteColumnsInfo.Padding = new System.Windows.Forms.Padding(3);
-      this.tabPreviewDeleteColumnsInfo.Size = new System.Drawing.Size(711, 142);
+      this.tabPreviewDeleteColumnsInfo.Padding = new System.Windows.Forms.Padding(4, 4, 4, 4);
+      this.tabPreviewDeleteColumnsInfo.Size = new System.Drawing.Size(951, 181);
       this.tabPreviewDeleteColumnsInfo.TabIndex = 0;
       this.tabPreviewDeleteColumnsInfo.Text = "del columns info";
@@ -437,7 +486,9 @@
       // 
       this.lblPreviewColumnsInfo.AutoSize = true;
-      this.lblPreviewColumnsInfo.Location = new System.Drawing.Point(3, 3);
+      this.lblPreviewColumnsInfo.Dock = System.Windows.Forms.DockStyle.Left;
+      this.lblPreviewColumnsInfo.Location = new System.Drawing.Point(0, 0);
+      this.lblPreviewColumnsInfo.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
       this.lblPreviewColumnsInfo.Name = "lblPreviewColumnsInfo";
-      this.lblPreviewColumnsInfo.Size = new System.Drawing.Size(318, 13);
+      this.lblPreviewColumnsInfo.Size = new System.Drawing.Size(423, 17);
       this.lblPreviewColumnsInfo.TabIndex = 1;
       this.lblPreviewColumnsInfo.Text = "{0} columns with more than {1} % missing values would be deleted";
@@ -445,10 +496,11 @@
       // tabPreviewDeleteColumnsVariance
       // 
+      this.tabPreviewDeleteColumnsVariance.Controls.Add(this.panel2);
       this.tabPreviewDeleteColumnsVariance.Controls.Add(this.label12);
-      this.tabPreviewDeleteColumnsVariance.Controls.Add(this.lblPreviewColumnsVariance);
       this.tabPreviewDeleteColumnsVariance.Location = new System.Drawing.Point(4, 22);
+      this.tabPreviewDeleteColumnsVariance.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
       this.tabPreviewDeleteColumnsVariance.Name = "tabPreviewDeleteColumnsVariance";
-      this.tabPreviewDeleteColumnsVariance.Padding = new System.Windows.Forms.Padding(3);
-      this.tabPreviewDeleteColumnsVariance.Size = new System.Drawing.Size(711, 142);
+      this.tabPreviewDeleteColumnsVariance.Padding = new System.Windows.Forms.Padding(4, 4, 4, 4);
+      this.tabPreviewDeleteColumnsVariance.Size = new System.Drawing.Size(951, 181);
       this.tabPreviewDeleteColumnsVariance.TabIndex = 1;
       this.tabPreviewDeleteColumnsVariance.Text = "del columns variance";
@@ -458,7 +510,8 @@
       // 
       this.label12.AutoSize = true;
-      this.label12.Location = new System.Drawing.Point(6, 22);
+      this.label12.Location = new System.Drawing.Point(8, 27);
+      this.label12.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
       this.label12.Name = "label12";
-      this.label12.Size = new System.Drawing.Size(0, 13);
+      this.label12.Size = new System.Drawing.Size(0, 17);
       this.label12.TabIndex = 2;
       // 
@@ -466,7 +519,9 @@
       // 
       this.lblPreviewColumnsVariance.AutoSize = true;
-      this.lblPreviewColumnsVariance.Location = new System.Drawing.Point(3, 3);
+      this.lblPreviewColumnsVariance.Dock = System.Windows.Forms.DockStyle.Left;
+      this.lblPreviewColumnsVariance.Location = new System.Drawing.Point(0, 0);
+      this.lblPreviewColumnsVariance.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
       this.lblPreviewColumnsVariance.Name = "lblPreviewColumnsVariance";
-      this.lblPreviewColumnsVariance.Size = new System.Drawing.Size(301, 13);
+      this.lblPreviewColumnsVariance.Size = new System.Drawing.Size(398, 17);
       this.lblPreviewColumnsVariance.TabIndex = 2;
       this.lblPreviewColumnsVariance.Text = "{0} columns with a variance smaller than {1} would be deleted.";
@@ -476,7 +531,8 @@
       this.tabPreviewDeleteRowsInfo.Controls.Add(this.lblPreviewRowsInfo);
       this.tabPreviewDeleteRowsInfo.Location = new System.Drawing.Point(4, 22);
+      this.tabPreviewDeleteRowsInfo.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
       this.tabPreviewDeleteRowsInfo.Name = "tabPreviewDeleteRowsInfo";
-      this.tabPreviewDeleteRowsInfo.Padding = new System.Windows.Forms.Padding(3);
-      this.tabPreviewDeleteRowsInfo.Size = new System.Drawing.Size(711, 142);
+      this.tabPreviewDeleteRowsInfo.Padding = new System.Windows.Forms.Padding(4, 4, 4, 4);
+      this.tabPreviewDeleteRowsInfo.Size = new System.Drawing.Size(951, 181);
       this.tabPreviewDeleteRowsInfo.TabIndex = 2;
       this.tabPreviewDeleteRowsInfo.Text = "del rows info";
@@ -486,7 +542,8 @@
       // 
       this.lblPreviewRowsInfo.AutoSize = true;
-      this.lblPreviewRowsInfo.Location = new System.Drawing.Point(3, 3);
+      this.lblPreviewRowsInfo.Location = new System.Drawing.Point(4, 4);
+      this.lblPreviewRowsInfo.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
       this.lblPreviewRowsInfo.Name = "lblPreviewRowsInfo";
-      this.lblPreviewRowsInfo.Size = new System.Drawing.Size(301, 13);
+      this.lblPreviewRowsInfo.Size = new System.Drawing.Size(400, 17);
       this.lblPreviewRowsInfo.TabIndex = 2;
       this.lblPreviewRowsInfo.Text = "{0} rows with more than {1} % missing values would be deleted";
@@ -496,7 +553,8 @@
       this.tabPreviewReplaceMissingValues.Controls.Add(this.lblPreviewReplaceMissingValues);
       this.tabPreviewReplaceMissingValues.Location = new System.Drawing.Point(4, 22);
+      this.tabPreviewReplaceMissingValues.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
       this.tabPreviewReplaceMissingValues.Name = "tabPreviewReplaceMissingValues";
-      this.tabPreviewReplaceMissingValues.Padding = new System.Windows.Forms.Padding(3);
-      this.tabPreviewReplaceMissingValues.Size = new System.Drawing.Size(711, 142);
+      this.tabPreviewReplaceMissingValues.Padding = new System.Windows.Forms.Padding(4, 4, 4, 4);
+      this.tabPreviewReplaceMissingValues.Size = new System.Drawing.Size(951, 181);
       this.tabPreviewReplaceMissingValues.TabIndex = 6;
       this.tabPreviewReplaceMissingValues.Text = "repl missing vals";
@@ -506,7 +564,8 @@
       // 
       this.lblPreviewReplaceMissingValues.AutoSize = true;
-      this.lblPreviewReplaceMissingValues.Location = new System.Drawing.Point(3, 3);
+      this.lblPreviewReplaceMissingValues.Location = new System.Drawing.Point(4, 4);
+      this.lblPreviewReplaceMissingValues.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
       this.lblPreviewReplaceMissingValues.Name = "lblPreviewReplaceMissingValues";
-      this.lblPreviewReplaceMissingValues.Size = new System.Drawing.Size(343, 13);
+      this.lblPreviewReplaceMissingValues.Size = new System.Drawing.Size(449, 17);
       this.lblPreviewReplaceMissingValues.TabIndex = 3;
       this.lblPreviewReplaceMissingValues.Text = "{0} cells detected with missing values which would be replaced with {1}";
@@ -516,7 +575,8 @@
       this.tabPreviewShuffle.Controls.Add(this.lblPreviewShuffle);
       this.tabPreviewShuffle.Location = new System.Drawing.Point(4, 22);
+      this.tabPreviewShuffle.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
       this.tabPreviewShuffle.Name = "tabPreviewShuffle";
-      this.tabPreviewShuffle.Padding = new System.Windows.Forms.Padding(3);
-      this.tabPreviewShuffle.Size = new System.Drawing.Size(711, 142);
+      this.tabPreviewShuffle.Padding = new System.Windows.Forms.Padding(4, 4, 4, 4);
+      this.tabPreviewShuffle.Size = new System.Drawing.Size(951, 181);
       this.tabPreviewShuffle.TabIndex = 4;
       this.tabPreviewShuffle.Text = "shuffle";
@@ -526,7 +586,8 @@
       // 
       this.lblPreviewShuffle.AutoSize = true;
-      this.lblPreviewShuffle.Location = new System.Drawing.Point(3, 3);
+      this.lblPreviewShuffle.Location = new System.Drawing.Point(4, 4);
+      this.lblPreviewShuffle.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
       this.lblPreviewShuffle.Name = "lblPreviewShuffle";
-      this.lblPreviewShuffle.Size = new System.Drawing.Size(252, 13);
+      this.lblPreviewShuffle.Size = new System.Drawing.Size(337, 17);
       this.lblPreviewShuffle.TabIndex = 0;
       this.lblPreviewShuffle.Text = "Data will be shuffled randomly - preview not possible";
@@ -539,17 +600,27 @@
       this.label9.TabIndex = 0;
       // 
-      // shuffleSeparatelyCheckbox
-      // 
-      this.shuffleSeparatelyCheckbox.AutoSize = true;
-      this.shuffleSeparatelyCheckbox.Location = new System.Drawing.Point(6, 2);
-      this.shuffleSeparatelyCheckbox.Name = "shuffleSeparatelyCheckbox";
-      this.shuffleSeparatelyCheckbox.Size = new System.Drawing.Size(233, 17);
-      this.shuffleSeparatelyCheckbox.TabIndex = 1;
-      this.shuffleSeparatelyCheckbox.Text = "Shuffle training and test partitions separately";
-      this.shuffleSeparatelyCheckbox.UseVisualStyleBackColor = true;
+      // panel1
+      // 
+      this.panel1.AutoScroll = true;
+      this.panel1.Controls.Add(this.lblPreviewColumnsInfo);
+      this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.panel1.Location = new System.Drawing.Point(4, 4);
+      this.panel1.Name = "panel1";
+      this.panel1.Size = new System.Drawing.Size(943, 173);
+      this.panel1.TabIndex = 2;
+      // 
+      // panel2
+      // 
+      this.panel2.AutoScroll = true;
+      this.panel2.Controls.Add(this.lblPreviewColumnsVariance);
+      this.panel2.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.panel2.Location = new System.Drawing.Point(4, 4);
+      this.panel2.Name = "panel2";
+      this.panel2.Size = new System.Drawing.Size(943, 173);
+      this.panel2.TabIndex = 3;
       // 
       // ManipulationView
       // 
-      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F);
       this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
       this.Controls.Add(this.btnApply);
@@ -557,6 +628,7 @@
       this.Controls.Add(this.grpBoxData);
       this.Controls.Add(this.lstMethods);
+      this.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
       this.Name = "ManipulationView";
-      this.Size = new System.Drawing.Size(739, 529);
+      this.Size = new System.Drawing.Size(985, 651);
       this.grpBoxData.ResumeLayout(false);
       this.tabsData.ResumeLayout(false);
@@ -578,5 +650,4 @@
       this.tabPreviewInactive.PerformLayout();
       this.tabPreviewDeleteColumnsInfo.ResumeLayout(false);
-      this.tabPreviewDeleteColumnsInfo.PerformLayout();
       this.tabPreviewDeleteColumnsVariance.ResumeLayout(false);
       this.tabPreviewDeleteColumnsVariance.PerformLayout();
@@ -587,4 +658,8 @@
       this.tabPreviewShuffle.ResumeLayout(false);
       this.tabPreviewShuffle.PerformLayout();
+      this.panel1.ResumeLayout(false);
+      this.panel1.PerformLayout();
+      this.panel2.ResumeLayout(false);
+      this.panel2.PerformLayout();
       this.ResumeLayout(false);
 
@@ -636,4 +711,6 @@
     private System.Windows.Forms.Label lblPreviewInActive;
     private System.Windows.Forms.CheckBox shuffleSeparatelyCheckbox;
+    private System.Windows.Forms.Panel panel1;
+    private System.Windows.Forms.Panel panel2;
   }
 }
Index: stable/HeuristicLab.DataPreprocessing.Views/3.4/ManipulationView.cs
===================================================================
--- stable/HeuristicLab.DataPreprocessing.Views/3.4/ManipulationView.cs	(revision 12717)
+++ stable/HeuristicLab.DataPreprocessing.Views/3.4/ManipulationView.cs	(revision 12718)
@@ -23,4 +23,7 @@
 using System.Collections.Generic;
 using System.Drawing;
+using System.Globalization;
+using System.Linq;
+using System.Text;
 using System.Windows.Forms;
 using HeuristicLab.Core.Views;
@@ -149,9 +152,22 @@
       validateDoubleTextBox(txtDeleteColumnsInfo.Text);
       if (btnApply.Enabled) {
-        int count = Content.ManipulationLogic.ColumnsWithMissingValuesGreater(getDeleteColumnsInfo()).Count;
-        int rowCount = Content.FilterLogic.PreprocessingData.Rows;
-        lblPreviewColumnsInfo.Text = count + " column" + (count > 1 || count == 0 ? "s" : "") + " of " + rowCount + " (" + string.Format("{0:F2}%", 100d / rowCount * count) + ") were detected with more than " + txtDeleteColumnsInfo.Text + "% missing values.";
+        var filteredColumns = Content.ManipulationLogic.ColumnsWithMissingValuesGreater(getDeleteColumnsInfo());
+        int count = filteredColumns.Count;
+        int columnCount = Content.FilterLogic.PreprocessingData.Columns;
+        lblPreviewColumnsInfo.Text = count + " column" + (count > 1 || count == 0 ? "s" : "") + " of " + columnCount + " (" + string.Format("{0:F2}%", 100d / columnCount * count) + ") were detected with more than " + txtDeleteColumnsInfo.Text + "% missing values.";
         if (count > 0) {
-          lblPreviewColumnsInfo.Text += Environment.NewLine + Environment.NewLine + "Please press the button \"Apply Manipulation\" if you wish to delete those columns.";
+          StringBuilder sb = new StringBuilder();
+          sb.Append(Environment.NewLine);
+          sb.Append("Columns: ");
+          sb.Append(Content.SearchLogic.VariableNames.ElementAt(filteredColumns.ElementAt(0)));
+          for (int i = 1; i < filteredColumns.Count; i++) {
+            string columnName = Content.SearchLogic.VariableNames.ElementAt(filteredColumns.ElementAt(i));
+            sb.Append(", ");
+            sb.Append(columnName);
+          }
+          sb.Append(Environment.NewLine);
+          sb.Append("Please press the button \"Apply Manipulation\" if you wish to delete those columns.");
+
+          lblPreviewColumnsInfo.Text += sb.ToString();
         } else {
           btnApply.Enabled = false;
@@ -165,9 +181,22 @@
       validateDoubleTextBox(txtDeleteColumnsVariance.Text);
       if (btnApply.Enabled) {
-        int count = Content.ManipulationLogic.ColumnsWithVarianceSmaller(getDeleteColumnsVariance()).Count;
-        int rowCount = Content.FilterLogic.PreprocessingData.Rows;
-        lblPreviewColumnsVariance.Text = count + " column" + (count > 1 || count == 0 ? "s" : "") + " of " + rowCount + " (" + string.Format("{0:F2}%", 100d / rowCount * count) + ") were detected with a variance smaller than " + txtDeleteColumnsVariance.Text + ".";
+        var filteredColumns = Content.ManipulationLogic.ColumnsWithVarianceSmaller(getDeleteColumnsVariance());
+        int count = filteredColumns.Count;
+        int columnCount = Content.FilterLogic.PreprocessingData.Columns;
+        lblPreviewColumnsVariance.Text = count + " column" + (count > 1 || count == 0 ? "s" : "") + " of " + columnCount + " (" + string.Format("{0:F2}%", 100d / columnCount * count) + ") were detected with a variance smaller than " + txtDeleteColumnsVariance.Text + ".";
         if (count > 0) {
-          lblPreviewColumnsVariance.Text += Environment.NewLine + Environment.NewLine + "Please press the button \"Apply Manipulation\" if you wish to delete those columns.";
+          StringBuilder sb = new StringBuilder();
+          sb.Append(Environment.NewLine);
+          sb.Append("Columns: ");
+          sb.Append(Content.SearchLogic.VariableNames.ElementAt(filteredColumns.ElementAt(0)));
+          for (int i = 1; i < filteredColumns.Count; i++) {
+            string columnName = Content.SearchLogic.VariableNames.ElementAt(filteredColumns.ElementAt(i));
+            sb.Append(", ");
+            sb.Append(columnName);
+          }
+          sb.Append(Environment.NewLine);
+          sb.Append("Please press the button \"Apply Manipulation\" if you wish to delete those columns.");
+
+          lblPreviewColumnsVariance.Text += sb.ToString();
         } else {
           btnApply.Enabled = false;
@@ -279,5 +308,5 @@
       if (!string.IsNullOrEmpty(text)) {
         double percent;
-        if (Double.TryParse(text, out percent)) {
+        if (Double.TryParse(text, NumberStyles.Number ^ NumberStyles.AllowThousands, CultureInfo.CurrentCulture, out percent)) {
           btnApply.Enabled = true;
         }
Index: stable/HeuristicLab.DataPreprocessing.Views/3.4/PreprocessingChartView.cs
===================================================================
--- stable/HeuristicLab.DataPreprocessing.Views/3.4/PreprocessingChartView.cs	(revision 12717)
+++ stable/HeuristicLab.DataPreprocessing.Views/3.4/PreprocessingChartView.cs	(revision 12718)
@@ -22,4 +22,5 @@
 using System;
 using System.Collections.Generic;
+using System.Linq;
 using System.Windows.Forms;
 using HeuristicLab.Analysis;
@@ -49,4 +50,5 @@
 
     public IEnumerable<double> Classification { get; set; }
+    public bool IsDetailedChartViewEnabled { get; set; }
 
     public PreprocessingChartView() {
@@ -59,4 +61,5 @@
     //Add or remove data row
     private void CheckedItemsChanged(object sender, CollectionItemsChangedEventArgs<IndexedItem<StringValue>> checkedItems) {
+
       foreach (IndexedItem<StringValue> item in checkedItems.Items) {
         string variableName = item.Value.Value;
@@ -121,4 +124,7 @@
       if (Content.VariableItemList == null) {
         Content.VariableItemList = Content.CreateVariableItemList();
+      } else {
+        var checkedNames = Content.VariableItemList.CheckedItems.Select(x => x.Value.Value);
+        Content.VariableItemList = Content.CreateVariableItemList(checkedNames);
       }
       checkedItemList.Content = Content.VariableItemList;
@@ -135,10 +141,12 @@
         DataRow row = GetDataRow(variableName);
 
-        //add row to data table 
-        dataTable.Rows.Add(row);
-
-        //add row to data table per variable
-        d.Rows.Add(row);
-        dataTablePerVariable.Add(d);
+        if (row != null) {
+          //add row to data table
+          dataTable.Rows.Add(row);
+
+          //add row to data table per variable
+          d.Rows.Add(row);
+          dataTablePerVariable.Add(d);
+        }
       }
 
@@ -152,5 +160,5 @@
       dataTable.SelectedRows.Clear();
       foreach (var selectedRow in selectedDataRows) {
-        if(VariableIsDisplayed(selectedRow.Name))
+        if (VariableIsDisplayed(selectedRow.Name))
           dataTable.SelectedRows.Add(selectedRow);
       }
@@ -354,4 +362,5 @@
       PreprocessingDataTableView dataView = new PreprocessingDataTableView();
       dataView.Classification = Classification;
+      dataView.IsDetailedChartViewEnabled = IsDetailedChartViewEnabled;
 
       if (dataTable == null) {
Index: stable/HeuristicLab.DataPreprocessing.Views/3.4/PreprocessingDataTableView.cs
===================================================================
--- stable/HeuristicLab.DataPreprocessing.Views/3.4/PreprocessingDataTableView.cs	(revision 12717)
+++ stable/HeuristicLab.DataPreprocessing.Views/3.4/PreprocessingDataTableView.cs	(revision 12718)
@@ -47,4 +47,5 @@
 
     public IEnumerable<double> Classification { get; set; }
+    public bool IsDetailedChartViewEnabled { get; set; }
 
     public PreprocessingDataTableView() {
@@ -145,9 +146,14 @@
         RegisterDataRowEvents(row);
         var series = new Series(row.Name);
-        if (row.VisualProperties.DisplayName.Trim() != String.Empty) series.LegendText = row.VisualProperties.DisplayName;
+        if (row.VisualProperties.DisplayName.Trim() != String.Empty)
+          series.LegendText = row.VisualProperties.DisplayName;
         else series.LegendText = row.Name;
+
         ConfigureSeries(series, row);
         FillSeriesWithRowValues(series, row);
 
+        if (IsDetailedChartViewEnabled) {
+          series.LegendText += " Values: " + row.Values.Count;
+        }
         if (Classification == null)
           chart.Series.Add(series);
@@ -661,5 +667,7 @@
 
         chart.Titles.Add(row.Name);
-
+        int featureOverallValueCount = 0;
+        if (IsDetailedChartViewEnabled)
+          featureOverallValueCount = row.Values.Count(x => !IsInvalidValue(x));
         foreach (KeyValuePair<double, List<double>> entry in valuesPerClass) {
           var s = new Series(row.Name + entry.Key);
@@ -669,5 +677,11 @@
 
           s.LegendText = entry.Key.ToString();
-
+          if (IsDetailedChartViewEnabled) {
+            int featureValueCount = entry.Value.Count(x => !IsInvalidValue(x));
+            s.LegendText += " Values: ";
+            s.LegendText += (featureOverallValueCount > 0) ?
+              string.Format("{0} ({1:F2}%)", featureValueCount, (featureValueCount / (double)featureOverallValueCount) * 100)
+            : "0";
+          }
           chart.Series.Add(s);
         }
@@ -752,9 +766,12 @@
                               ? "Y"
                               : Content.VisualProperties.YAxisTitle;
-        series.Points.Add(new DataPoint(d - intervalCenter, sum) {
-          ToolTip =
-            xAxisTitle + ": [" + (d - intervalWidth) + "-" + d + ")" + Environment.NewLine +
-            yAxisTitle + ": " + sum
-        });
+        DataPoint newDataPoint = new DataPoint(d - intervalCenter, sum);
+        newDataPoint.ToolTip =
+          xAxisTitle + ": [" + (d - intervalWidth) + "-" + d + ")" + Environment.NewLine +
+          yAxisTitle + ": " + sum;
+        int overallValueCount = row.Values.Count();
+        if (overallValueCount > 0)
+          newDataPoint.ToolTip += string.Format(" ({0:F2}%)", (sum / overallValueCount) * 100);
+        series.Points.Add(newDataPoint);
       }
     }
Index: stable/HeuristicLab.DataPreprocessing.Views/3.4/StatisticsView.cs
===================================================================
--- stable/HeuristicLab.DataPreprocessing.Views/3.4/StatisticsView.cs	(revision 12717)
+++ stable/HeuristicLab.DataPreprocessing.Views/3.4/StatisticsView.cs	(revision 12718)
@@ -166,5 +166,5 @@
         "", //standard deviation
         "", //variance
-        logic.GetMostCommonValue<string>(columnIndex).ToString(),
+        logic.GetMostCommonValue<string>(columnIndex) ?? "",
         logic.GetDifferentValuesCount<string>(columnIndex).ToString()
       };
Index: stable/HeuristicLab.DataPreprocessing/3.4/Implementations/DataGridContent.cs
===================================================================
--- stable/HeuristicLab.DataPreprocessing/3.4/Implementations/DataGridContent.cs	(revision 12717)
+++ stable/HeuristicLab.DataPreprocessing/3.4/Implementations/DataGridContent.cs	(revision 12718)
@@ -114,7 +114,11 @@
     }
 
-    public void DeleteRow(IEnumerable<int> rows) {
+    public void DeleteRows(IEnumerable<int> rows) {
       PreProcessingData.DeleteRowsWithIndices(rows);
       createRowNames();
+    }
+
+    public void DeleteColumn(int column) {
+      PreProcessingData.DeleteColumn(column);
     }
 
Index: stable/HeuristicLab.DataPreprocessing/3.4/Implementations/HistogramContent.cs
===================================================================
--- stable/HeuristicLab.DataPreprocessing/3.4/Implementations/HistogramContent.cs	(revision 12717)
+++ stable/HeuristicLab.DataPreprocessing/3.4/Implementations/HistogramContent.cs	(revision 12718)
@@ -42,4 +42,5 @@
       set { this.classifierVariableIndex = value; }
     }
+    public bool IsDetailedChartViewEnabled { get; set; }
 
 
Index: stable/HeuristicLab.DataPreprocessing/3.4/Implementations/PreprocessingChartContent.cs
===================================================================
--- stable/HeuristicLab.DataPreprocessing/3.4/Implementations/PreprocessingChartContent.cs	(revision 12717)
+++ stable/HeuristicLab.DataPreprocessing/3.4/Implementations/PreprocessingChartContent.cs	(revision 12718)
@@ -23,4 +23,5 @@
 using System.Collections.Generic;
 using System.Drawing;
+using System.Linq;
 using HeuristicLab.Analysis;
 using HeuristicLab.Common;
@@ -126,8 +127,9 @@
 
 
-    public ICheckedItemList<StringValue> CreateVariableItemList() {
+    public ICheckedItemList<StringValue> CreateVariableItemList(IEnumerable<string> checkedItems = null) {
       ICheckedItemList<StringValue> itemList = new CheckedItemList<StringValue>();
       foreach (string name in PreprocessingData.GetDoubleVariableNames()) {
-        itemList.Add(new StringValue(name), true);
+        var n = new StringValue(name);
+        itemList.Add(n, (checkedItems == null) ? true : checkedItems.Contains(name));
       }
       return new ReadOnlyCheckedItemList<StringValue>(itemList);
Index: stable/HeuristicLab.DataPreprocessing/3.4/Implementations/SearchLogic.cs
===================================================================
--- stable/HeuristicLab.DataPreprocessing/3.4/Implementations/SearchLogic.cs	(revision 12717)
+++ stable/HeuristicLab.DataPreprocessing/3.4/Implementations/SearchLogic.cs	(revision 12718)
@@ -23,9 +23,9 @@
 using System.Collections;
 using System.Collections.Generic;
-using System.Linq;
 
 namespace HeuristicLab.DataPreprocessing {
   public class SearchLogic : ISearchLogic {
     private readonly ITransactionalPreprocessingData preprocessingData;
+    private readonly IFilterLogic filterLogic;
 
     private Dictionary<int, IList<int>> MissingValueIndicies { get; set; }
@@ -44,15 +44,24 @@
     }
 
-    public SearchLogic(ITransactionalPreprocessingData thePreprocessingData) {
+    public SearchLogic(ITransactionalPreprocessingData thePreprocessingData, IFilterLogic theFilterLogic) {
       preprocessingData = thePreprocessingData;
+      filterLogic = theFilterLogic;
 
       MissingValueIndicies = new Dictionary<int, IList<int>>();
       ValuesWithoutNaN = new Dictionary<int, IList>();
 
-      preprocessingData.Changed += preprocessingData_Changed;
+      preprocessingData.Changed += PreprocessingData_Changed;
+      filterLogic.FilterChanged += FilterLogic_FilterChanged;
     }
 
-    void preprocessingData_Changed(object sender, DataPreprocessingChangedEventArgs e)
-    {
+    void FilterLogic_FilterChanged(object sender, EventArgs e) {
+      //recalculate
+      for (int i = 0; i < Columns; i++) {
+        MissingValueIndicies.Remove(i);
+        ValuesWithoutNaN.Remove(i);
+      }
+    }
+
+    void PreprocessingData_Changed(object sender, DataPreprocessingChangedEventArgs e) {
       switch (e.Type) {
         case DataPreprocessingChangedEventType.DeleteColumn:
@@ -73,5 +82,5 @@
           ValuesWithoutNaN = new Dictionary<int, IList>();
           break;
-      } 
+      }
     }
 
@@ -97,22 +106,22 @@
 
     public IList<int> GetMissingValueIndices(int columnIndex) {
-      if (!MissingValueIndicies.ContainsKey(columnIndex)){        
-          if (preprocessingData.VariableHasType<double>(columnIndex)) {
-            MissingValueIndicies[columnIndex] = GetMissingValueIndices<double>(columnIndex);
-          } else if (preprocessingData.VariableHasType<string>(columnIndex)) {
-            MissingValueIndicies[columnIndex] = GetMissingValueIndices<string>(columnIndex);
-          } else if (preprocessingData.VariableHasType<DateTime>(columnIndex)) {
-            MissingValueIndicies[columnIndex] = GetMissingValueIndices<DateTime>(columnIndex);
-          } else {
-            throw new ArgumentException("column " + columnIndex + " contains a non supported type.");
-          }
-      } 
+      if (!MissingValueIndicies.ContainsKey(columnIndex)) {
+        if (preprocessingData.VariableHasType<double>(columnIndex)) {
+          MissingValueIndicies[columnIndex] = GetMissingValueIndices<double>(columnIndex);
+        } else if (preprocessingData.VariableHasType<string>(columnIndex)) {
+          MissingValueIndicies[columnIndex] = GetMissingValueIndices<string>(columnIndex);
+        } else if (preprocessingData.VariableHasType<DateTime>(columnIndex)) {
+          MissingValueIndicies[columnIndex] = GetMissingValueIndices<DateTime>(columnIndex);
+        } else {
+          throw new ArgumentException("column " + columnIndex + " contains a non supported type.");
+        }
+      }
+      return MissingValueIndicies[columnIndex];
+    }
 
-      return MissingValueIndicies[columnIndex];
-   }
     private IList<int> GetMissingValueIndices<T>(int columnIndex) {
       List<int> missingIndices = new List<int>();
-     
-      for(int row = 0; row < preprocessingData.Rows; ++row) {
+
+      for (int row = 0; row < preprocessingData.Rows; ++row) {
         if (IsMissingValue(columnIndex, row)) {
           missingIndices.Add(row);
@@ -123,9 +132,8 @@
     }
 
-    public IEnumerable<T> GetValuesWithoutNaN<T>(int columnIndex, bool considerSelection)
-    {
-      if (considerSelection) {     
-        var selectedRows =  preprocessingData.Selection[columnIndex];
-        
+    public IEnumerable<T> GetValuesWithoutNaN<T>(int columnIndex, bool considerSelection) {
+      if (considerSelection) {
+        var selectedRows = preprocessingData.Selection[columnIndex];
+
         List<T> values = new List<T>();
         foreach (var rowIdx in selectedRows) {
Index: stable/HeuristicLab.DataPreprocessing/3.4/Implementations/StatisticsLogic.cs
===================================================================
--- stable/HeuristicLab.DataPreprocessing/3.4/Implementations/StatisticsLogic.cs	(revision 12717)
+++ stable/HeuristicLab.DataPreprocessing/3.4/Implementations/StatisticsLogic.cs	(revision 12718)
@@ -38,9 +38,9 @@
 
     public int GetColumnCount() {
-      return preprocessingData.Columns;
+      return searchLogic.Columns;
     }
 
     public int GetRowCount() {
-      return preprocessingData.Rows;
+      return searchLogic.Rows;
     }
 
@@ -48,5 +48,5 @@
       int count = 0;
 
-      for (int i = 0; i < preprocessingData.Columns; ++i) {
+      for (int i = 0; i < searchLogic.Columns; ++i) {
         if (preprocessingData.VariableHasType<double>(i)) {
           ++count;
@@ -57,10 +57,10 @@
 
     public int GetNominalColumnCount() {
-      return preprocessingData.Columns - GetNumericColumnCount();
+      return searchLogic.Columns - GetNumericColumnCount();
     }
 
     public int GetMissingValueCount() {
       int count = 0;
-      for (int i = 0; i < preprocessingData.Columns; ++i) {
+      for (int i = 0; i < searchLogic.Columns; ++i) {
         count += GetMissingValueCount(i);
       }
@@ -73,9 +73,23 @@
 
     public T GetMin<T>(int columnIndex, bool considerSelection) where T : IComparable<T> {
-      return preprocessingData.GetValues<T>(columnIndex, considerSelection).Min();
+      var min = default(T);
+      if (preprocessingData.VariableHasType<T>(columnIndex)) {
+        var values = GetValuesWithoutNaN<T>(columnIndex, considerSelection);
+        if (values.Any()) {
+          min = values.Min();
+        }
+      }
+      return min;
     }
 
     public T GetMax<T>(int columnIndex, bool considerSelection) where T : IComparable<T> {
-      return preprocessingData.GetValues<T>(columnIndex, considerSelection).Max();
+      var max = default(T);
+      if (preprocessingData.VariableHasType<T>(columnIndex)) {
+        var values = GetValuesWithoutNaN<T>(columnIndex, considerSelection);
+        if (values.Any()) {
+          max = values.Max();
+        }
+      }
+      return max;
     }
 
@@ -83,5 +97,8 @@
       double median = double.NaN;
       if (preprocessingData.VariableHasType<double>(columnIndex)) {
-        median = GetValuesWithoutNaN<double>(columnIndex, considerSelection).Median();
+        var values = GetValuesWithoutNaN<double>(columnIndex, considerSelection);
+        if (values.Any()) {
+          median = values.Median();
+        }
       }
       return median;
@@ -91,5 +108,8 @@
       double avg = double.NaN;
       if (preprocessingData.VariableHasType<double>(columnIndex)) {
-        avg = GetValuesWithoutNaN<double>(columnIndex, considerSelection).Average();
+        var values = GetValuesWithoutNaN<double>(columnIndex, considerSelection);
+        if (values.Any()) {
+          avg = values.Average();
+        }
       }
       return avg;
@@ -113,10 +133,8 @@
 
     public T GetMostCommonValue<T>(int columnIndex, bool considerSelection) {
-      var t = preprocessingData.GetValues<T>(columnIndex, considerSelection);
-      var t2 = t.GroupBy(x => x);
-      var t3 = t2.Select(g => g.Key);
-
-      return preprocessingData.GetValues<T>(columnIndex, considerSelection)
-                              .GroupBy(x => x)
+      var values = GetValuesWithoutNaN<T>(columnIndex, considerSelection);
+      if (!values.Any())
+        return default(T);
+      return values.GroupBy(x => x)
                               .OrderByDescending(g => g.Count())
                               .Select(g => g.Key)
Index: stable/HeuristicLab.DataPreprocessing/3.4/Interfaces/IDataGridContent.cs
===================================================================
--- stable/HeuristicLab.DataPreprocessing/3.4/Interfaces/IDataGridContent.cs	(revision 12717)
+++ stable/HeuristicLab.DataPreprocessing/3.4/Interfaces/IDataGridContent.cs	(revision 12718)
@@ -31,5 +31,6 @@
     IDictionary<int, IList<int>> Selection { get; set; }
 
-    void DeleteRow(IEnumerable<int> rows);
+    void DeleteRows(IEnumerable<int> rows);
+    void DeleteColumn(int column);
     bool Validate(string value, out string errorMessage, int columnIndex);
 
Index: stable/HeuristicLab.DataPreprocessing/3.4/ProblemDataCreator.cs
===================================================================
--- stable/HeuristicLab.DataPreprocessing/3.4/ProblemDataCreator.cs	(revision 12717)
+++ stable/HeuristicLab.DataPreprocessing/3.4/ProblemDataCreator.cs	(revision 12718)
@@ -61,8 +61,8 @@
       SetTrainingAndTestPartition(problemData);
       // set the input variables to the correct checked state
-      var inputVariables = problemData.InputVariables.ToDictionary(x => x.Value, x => x);
-      foreach (var variable in oldProblemData.InputVariables) {
-        bool @checked = oldProblemData.InputVariables.ItemChecked(variable);
-        problemData.InputVariables.SetItemCheckedState(inputVariables[variable.Value], @checked);
+      var inputVariables = oldProblemData.InputVariables.ToDictionary(x => x.Value, x => x);
+      foreach (var variable in problemData.InputVariables) {
+        bool isChecked = oldProblemData.InputVariables.ItemChecked(inputVariables[variable.Value]);
+        problemData.InputVariables.SetItemCheckedState(variable, isChecked);
       }
 
@@ -77,7 +77,9 @@
 
     private IDataAnalysisProblemData CreateClassificationData(ClassificationProblemData oldProblemData) {
+      // target variable must be double and must exist in the new dataset
       var targetVariable = oldProblemData.TargetVariable;
-      // target variable must be double and must exist in the new dataset
-      return new ClassificationProblemData(ExportedDataset, GetDoubleInputVariables(targetVariable), targetVariable, Transformations);
+      var newProblemData = new ClassificationProblemData(ExportedDataset, GetDoubleInputVariables(targetVariable), targetVariable, Transformations);
+      newProblemData.PositiveClass = oldProblemData.PositiveClass;
+      return newProblemData;
     }
 
