Index: branches/HeuristicLab.DataImporter/HeuristicLab.DataImporter.Command/HeuristicLab.DataImporter.Command.csproj
===================================================================
--- branches/HeuristicLab.DataImporter/HeuristicLab.DataImporter.Command/HeuristicLab.DataImporter.Command.csproj	(revision 7963)
+++ branches/HeuristicLab.DataImporter/HeuristicLab.DataImporter.Command/HeuristicLab.DataImporter.Command.csproj	(revision 7968)
@@ -151,4 +151,7 @@
     <Compile Include="ChangeDataset\MoveColumnGroupRightCommand.cs" />
     <Compile Include="ChangeDataset\MoveColumnGroupLeftCommand.cs" />
+    <Compile Include="MissingValues\DeleteColumnsWithMissingValuesThresholdCommand.cs" />
+    <Compile Include="MissingValues\DeleteRowsWithMissingValuesThresholdCommand.cs" />
+    <Compile Include="MissingValues\IThresholdCommand.cs" />
     <Compile Include="TimeSeries\ChangeDateTimeColumnToDoubleColumn.cs" />
     <Compile Include="TimeSeries\EquidistantTimeSeriesCommandBase.cs" />
@@ -190,4 +193,10 @@
       <DependentUpon>BoxCoxTransformationCommandView.cs</DependentUpon>
     </Compile>
+    <Compile Include="View\DeleteWithThreshold.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="View\DeleteWithThreshold.Designer.cs">
+      <DependentUpon>DeleteWithThreshold.cs</DependentUpon>
+    </Compile>
     <Compile Include="View\FilterSavitzkyGolayCommandView.cs">
       <SubType>UserControl</SubType>
Index: branches/HeuristicLab.DataImporter/HeuristicLab.DataImporter.Command/MissingValues/DeleteColumnsWithMissingValuesThresholdCommand.cs
===================================================================
--- branches/HeuristicLab.DataImporter/HeuristicLab.DataImporter.Command/MissingValues/DeleteColumnsWithMissingValuesThresholdCommand.cs	(revision 7968)
+++ branches/HeuristicLab.DataImporter/HeuristicLab.DataImporter.Command/MissingValues/DeleteColumnsWithMissingValuesThresholdCommand.cs	(revision 7968)
@@ -0,0 +1,79 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.DataImporter.Command.View;
+using HeuristicLab.DataImporter.Data;
+using HeuristicLab.DataImporter.Data.CommandBase;
+using HeuristicLab.DataImporter.Data.Model;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.DataImporter.Command {
+  [StorableClass]
+  [ViewableCommandInfoAttribute("Delete Columns beneath Threshold", 1, ColumnGroupState.AnySelectedColumnContainsNull,
+    "Handle Missing Values", Position = 6, OptionsView = typeof(DeleteWithThreshold))]
+  public class DeleteColumnsWithMissingValuesThresholdCommand : ColumnGroupCommandWithAffectedColumnsBase, IThresholdCommand {
+    private ColumnBase oldColumn;
+    private int oldColumnIndex;
+
+    [Storable]
+    private double threshold = 0.8;
+    public double Threshold { get { return threshold; } set { threshold = value; } }
+
+    private DeleteColumnsWithMissingValuesThresholdCommand()
+      : base(null, string.Empty, null) {
+    }
+
+    public DeleteColumnsWithMissingValuesThresholdCommand(DataSet dataSet, string columnGroupName, int[] affectedColumns)
+      : base(dataSet, columnGroupName, affectedColumns) {
+    }
+
+    public override void Execute() {
+      base.Execute();
+
+      oldColumnIndex = AffectedColumns[0];
+
+      oldColumn = ColumnGroup.GetColumn(oldColumnIndex);
+      if ((double)oldColumn.NullValuesCount / (double)oldColumn.TotalValuesCount < Threshold) {
+        ColumnGroup.RemoveColumn(oldColumn);
+      } else {
+        oldColumn = null;
+      }
+
+      ColumnGroup.FireChanged();
+      ColumnGroup = null;
+    }
+
+    public override void UndoExecute() {
+      base.UndoExecute();
+      if (oldColumn != null) {
+        ColumnGroup.InsertColumn(oldColumnIndex, oldColumn);
+      }
+      oldColumn = null;
+      oldColumnIndex = -1;
+      ColumnGroup.FireChanged();
+      ColumnGroup = null;
+    }
+
+    public override string Description {
+      get { return "Delete columns with a missing value percentage beneath a certain threshold"; }
+    }
+  }
+}
Index: branches/HeuristicLab.DataImporter/HeuristicLab.DataImporter.Command/MissingValues/DeleteRowsWithMissingValuesCommand.cs
===================================================================
--- branches/HeuristicLab.DataImporter/HeuristicLab.DataImporter.Command/MissingValues/DeleteRowsWithMissingValuesCommand.cs	(revision 7963)
+++ branches/HeuristicLab.DataImporter/HeuristicLab.DataImporter.Command/MissingValues/DeleteRowsWithMissingValuesCommand.cs	(revision 7968)
@@ -20,8 +20,6 @@
 #endregion
 
-using System;
 using System.Collections.Generic;
 using System.Linq;
-using System.Text;
 using HeuristicLab.DataImporter.Data;
 using HeuristicLab.DataImporter.Data.CommandBase;
@@ -50,5 +48,5 @@
       base.Execute();
       ColumnGroup tempColumnGroup = new ColumnGroup();
-      Dictionary<int, object> positions = new Dictionary<int, object>();
+      HashSet<int> positions = new HashSet<int>();
       ColumnBase column;
 
@@ -56,6 +54,6 @@
         column = ColumnGroup.GetColumn(AffectedColumns[col]);
         for (int row = 0; row < ColumnGroup.RowCount; row++) {
-          if (column.GetValue(row) == null && !positions.ContainsKey(row))
-            positions[row] = null;
+          if (column.GetValue(row) == null && !positions.Contains(row))
+            positions.Add(row);
         }
       }
@@ -67,5 +65,5 @@
 
       for (int i = 0; i < ColumnGroup.RowCount; i++)
-        if (!positions.ContainsKey(i))
+        if (!positions.Contains(i))
           tempColumnGroup.AddRow(ColumnGroup.GetRow(i));
 
Index: branches/HeuristicLab.DataImporter/HeuristicLab.DataImporter.Command/MissingValues/DeleteRowsWithMissingValuesThresholdCommand.cs
===================================================================
--- branches/HeuristicLab.DataImporter/HeuristicLab.DataImporter.Command/MissingValues/DeleteRowsWithMissingValuesThresholdCommand.cs	(revision 7968)
+++ branches/HeuristicLab.DataImporter/HeuristicLab.DataImporter.Command/MissingValues/DeleteRowsWithMissingValuesThresholdCommand.cs	(revision 7968)
@@ -0,0 +1,87 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using HeuristicLab.DataImporter.Command.View;
+using HeuristicLab.DataImporter.Data;
+using HeuristicLab.DataImporter.Data.CommandBase;
+using HeuristicLab.DataImporter.Data.Model;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.DataImporter.Command {
+  [StorableClass]
+  [ViewableCommandInfoAttribute("Delete Rows beneath Threshold", 1, ColumnGroupState.Active,
+    "Handle Missing Values", Position = 5, OptionsView = typeof(DeleteWithThreshold))]
+  public class DeleteRowsWithMissingValuesThresholdCommand : ColumnGroupCommandBase, IThresholdCommand {
+    private Dictionary<int, IComparable[]> deletedRows;
+
+    [Storable]
+    private double threshold = 0.8;
+    public double Threshold { get { return threshold; } set { threshold = value; } }
+
+    private DeleteRowsWithMissingValuesThresholdCommand()
+      : base(null, string.Empty) {
+      deletedRows = new Dictionary<int, IComparable[]>();
+    }
+
+    public DeleteRowsWithMissingValuesThresholdCommand(DataSet dataSet, string columnGroupName)
+      : base(dataSet, columnGroupName) {
+      deletedRows = new Dictionary<int, IComparable[]>();
+    }
+
+    public override void Execute() {
+      base.Execute();
+      IComparable[] row;
+
+      double columnsCount = ColumnGroup.Columns.Count();
+      for (int rowInd = 0; rowInd < ColumnGroup.RowCount; rowInd++) {
+        row = ColumnGroup.GetRow(rowInd);
+        double missingValues = ColumnGroup.GetRow(rowInd).Where(x => x != null).Count();
+        if (missingValues / columnsCount < Threshold) {
+          deletedRows[rowInd] = row;
+        }
+      }
+
+      foreach (int rowInd in deletedRows.Select(x => x.Key).Reverse()) {
+        ColumnGroup.DeleteRow(rowInd);
+      }
+
+      ColumnGroup.FireChanged();
+      ColumnGroup = null;
+    }
+
+    public override void UndoExecute() {
+      base.UndoExecute();
+      foreach (KeyValuePair<int, IComparable[]> pair in deletedRows) {
+        ColumnGroup.InsertRow(pair.Key, pair.Value);
+      }
+      deletedRows.Clear();
+      ColumnGroup.FireChanged();
+      ColumnGroup = null;
+    }
+
+    public override string Description {
+      get { return "Delete rows with a missing value percentage beneath a certain threshold"; }
+    }
+  }
+}
Index: branches/HeuristicLab.DataImporter/HeuristicLab.DataImporter.Command/MissingValues/IThresholdCommand.cs
===================================================================
--- branches/HeuristicLab.DataImporter/HeuristicLab.DataImporter.Command/MissingValues/IThresholdCommand.cs	(revision 7968)
+++ branches/HeuristicLab.DataImporter/HeuristicLab.DataImporter.Command/MissingValues/IThresholdCommand.cs	(revision 7968)
@@ -0,0 +1,28 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.DataImporter.Data.CommandBase;
+
+namespace HeuristicLab.DataImporter.Command {
+  public interface IThresholdCommand : ICommand {
+    double Threshold { get; set; }
+  }
+}
Index: branches/HeuristicLab.DataImporter/HeuristicLab.DataImporter.Command/View/DeleteWithThreshold.Designer.cs
===================================================================
--- branches/HeuristicLab.DataImporter/HeuristicLab.DataImporter.Command/View/DeleteWithThreshold.Designer.cs	(revision 7968)
+++ branches/HeuristicLab.DataImporter/HeuristicLab.DataImporter.Command/View/DeleteWithThreshold.Designer.cs	(revision 7968)
@@ -0,0 +1,67 @@
+﻿namespace HeuristicLab.DataImporter.Command.View {
+  partial class DeleteWithThreshold {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.txtThreshold = new System.Windows.Forms.TextBox();
+      this.lblThreshold = new System.Windows.Forms.Label();
+      this.SuspendLayout();
+      // 
+      // txtThreshold
+      // 
+      this.txtThreshold.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.txtThreshold.Location = new System.Drawing.Point(66, 3);
+      this.txtThreshold.Name = "txtThreshold";
+      this.txtThreshold.Size = new System.Drawing.Size(100, 20);
+      this.txtThreshold.TabIndex = 0;
+      this.txtThreshold.Validating += new System.ComponentModel.CancelEventHandler(this.txtThreshold_Validating);
+      // 
+      // lblThreshold
+      // 
+      this.lblThreshold.AutoSize = true;
+      this.lblThreshold.Location = new System.Drawing.Point(3, 6);
+      this.lblThreshold.Name = "lblThreshold";
+      this.lblThreshold.Size = new System.Drawing.Size(57, 13);
+      this.lblThreshold.TabIndex = 1;
+      this.lblThreshold.Text = "Threshold:";
+      // 
+      // DeleteWithThreshold
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.lblThreshold);
+      this.Controls.Add(this.txtThreshold);
+      this.Name = "DeleteWithThreshold";
+      this.Size = new System.Drawing.Size(173, 28);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.TextBox txtThreshold;
+    private System.Windows.Forms.Label lblThreshold;
+  }
+}
Index: branches/HeuristicLab.DataImporter/HeuristicLab.DataImporter.Command/View/DeleteWithThreshold.cs
===================================================================
--- branches/HeuristicLab.DataImporter/HeuristicLab.DataImporter.Command/View/DeleteWithThreshold.cs	(revision 7968)
+++ branches/HeuristicLab.DataImporter/HeuristicLab.DataImporter.Command/View/DeleteWithThreshold.cs	(revision 7968)
@@ -0,0 +1,65 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Windows.Forms;
+using HeuristicLab.DataImporter.Data.CommandBase;
+namespace HeuristicLab.DataImporter.Command.View {
+  public partial class DeleteWithThreshold : HeuristicLab.DataImporter.Data.CommandBase.CommandViewBase {
+    public DeleteWithThreshold() {
+      InitializeComponent();
+    }
+
+    public DeleteWithThreshold(IThresholdCommand command)
+      : this() {
+      if (command != null) {
+        threshold = command.Threshold;
+        txtThreshold.Text = command.Threshold.ToString();
+      }
+      this.Command = command;
+    }
+
+    public new IThresholdCommand Command {
+      get { return (IThresholdCommand)base.Command; }
+      set { base.Command = value; this.UpdateCommand(); }
+    }
+
+    private double threshold;
+    public double Threshold { get { return Command.Threshold; } }
+
+    private void txtThreshold_Validating(object sender, System.ComponentModel.CancelEventArgs e) {
+      TextBox textBox = (TextBox)sender;
+      e.Cancel = !Double.TryParse(textBox.Text, out threshold);
+      e.Cancel = e.Cancel || threshold < 0.0 || threshold > 1.0;
+      if (e.Cancel) {
+        MessageBox.Show("Threshold has to be between 0.0 and 1.0");
+      } else {
+        UpdateCommand();
+      }
+    }
+
+    private void UpdateCommand() {
+      if (this.Command != null) {
+        Command.Threshold = this.threshold;
+      }
+    }
+  }
+}
Index: branches/HeuristicLab.DataImporter/HeuristicLab.DataImporter.Data/Model/ColumnGroup.cs
===================================================================
--- branches/HeuristicLab.DataImporter/HeuristicLab.DataImporter.Data/Model/ColumnGroup.cs	(revision 7963)
+++ branches/HeuristicLab.DataImporter/HeuristicLab.DataImporter.Data/Model/ColumnGroup.cs	(revision 7968)
@@ -22,10 +22,6 @@
 using System;
 using System.Collections.Generic;
-using System.Collections;
 using System.Linq;
-using System.Text;
 using System.Windows.Forms;
-using System.Xml;
-using HeuristicLab.DataImporter.Data.View;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 
@@ -59,5 +55,5 @@
           i++;
         }
-      }    
+      }
     }
 
@@ -125,5 +121,5 @@
             selectedIndexes.Add(i);
         return selectedIndexes.ToArray();
-      }   
+      }
     }
 
Index: branches/HeuristicLab.DataImporter/HeuristicLab.DataImporter.Data/View/ColumnGroupView.Designer.cs
===================================================================
--- branches/HeuristicLab.DataImporter/HeuristicLab.DataImporter.Data/View/ColumnGroupView.Designer.cs	(revision 7963)
+++ branches/HeuristicLab.DataImporter/HeuristicLab.DataImporter.Data/View/ColumnGroupView.Designer.cs	(revision 7968)
@@ -74,6 +74,4 @@
       this.lblMean = new System.Windows.Forms.Label();
       this.label5 = new System.Windows.Forms.Label();
-      this.lblMaximum = new System.Windows.Forms.Label();
-      this.label4 = new System.Windows.Forms.Label();
       this.lblMinimum = new System.Windows.Forms.Label();
       this.label3 = new System.Windows.Forms.Label();
@@ -81,8 +79,12 @@
       this.label2 = new System.Windows.Forms.Label();
       this.lblValues = new System.Windows.Forms.Label();
+      this.lblMedian = new System.Windows.Forms.Label();
+      this.label8 = new System.Windows.Forms.Label();
+      this.label4 = new System.Windows.Forms.Label();
+      this.lblNullPercentage = new System.Windows.Forms.Label();
       this.label6 = new System.Windows.Forms.Label();
       this.label7 = new System.Windows.Forms.Label();
       this.lblStdDev = new System.Windows.Forms.Label();
-      this.lblMedian = new System.Windows.Forms.Label();
+      this.lblMaximum = new System.Windows.Forms.Label();
       this.toolTip = new System.Windows.Forms.ToolTip(this.components);
       ((System.ComponentModel.ISupportInitialize)(this.dataGridView)).BeginInit();
@@ -165,11 +167,9 @@
       this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 59F));
       this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 51.00671F));
-      this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 68F));
+      this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 95F));
       this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 48.99329F));
       this.tableLayoutPanel1.Controls.Add(this.label1, 0, 0);
       this.tableLayoutPanel1.Controls.Add(this.lblMean, 1, 2);
       this.tableLayoutPanel1.Controls.Add(this.label5, 0, 2);
-      this.tableLayoutPanel1.Controls.Add(this.lblMaximum, 3, 1);
-      this.tableLayoutPanel1.Controls.Add(this.label4, 2, 1);
       this.tableLayoutPanel1.Controls.Add(this.lblMinimum, 1, 1);
       this.tableLayoutPanel1.Controls.Add(this.label3, 0, 1);
@@ -177,8 +177,12 @@
       this.tableLayoutPanel1.Controls.Add(this.label2, 2, 0);
       this.tableLayoutPanel1.Controls.Add(this.lblValues, 1, 0);
+      this.tableLayoutPanel1.Controls.Add(this.lblMedian, 1, 3);
+      this.tableLayoutPanel1.Controls.Add(this.label8, 2, 1);
+      this.tableLayoutPanel1.Controls.Add(this.label4, 2, 2);
+      this.tableLayoutPanel1.Controls.Add(this.lblNullPercentage, 3, 1);
       this.tableLayoutPanel1.Controls.Add(this.label6, 0, 3);
-      this.tableLayoutPanel1.Controls.Add(this.label7, 2, 2);
-      this.tableLayoutPanel1.Controls.Add(this.lblStdDev, 3, 2);
-      this.tableLayoutPanel1.Controls.Add(this.lblMedian, 1, 3);
+      this.tableLayoutPanel1.Controls.Add(this.label7, 2, 3);
+      this.tableLayoutPanel1.Controls.Add(this.lblStdDev, 3, 3);
+      this.tableLayoutPanel1.Controls.Add(this.lblMaximum, 3, 2);
       this.tableLayoutPanel1.Location = new System.Drawing.Point(-1, 20);
       this.tableLayoutPanel1.Name = "tableLayoutPanel1";
@@ -217,21 +221,4 @@
       this.label5.Text = "Mean:";
       // 
-      // lblMaximum
-      // 
-      this.lblMaximum.AutoSize = true;
-      this.lblMaximum.Location = new System.Drawing.Point(269, 20);
-      this.lblMaximum.Name = "lblMaximum";
-      this.lblMaximum.Size = new System.Drawing.Size(0, 13);
-      this.lblMaximum.TabIndex = 21;
-      // 
-      // label4
-      // 
-      this.label4.AutoSize = true;
-      this.label4.Location = new System.Drawing.Point(201, 20);
-      this.label4.Name = "label4";
-      this.label4.Size = new System.Drawing.Size(54, 13);
-      this.label4.TabIndex = 20;
-      this.label4.Text = "Maximum:";
-      // 
       // lblMinimum
       // 
@@ -254,5 +241,5 @@
       // 
       this.lblNullValues.AutoSize = true;
-      this.lblNullValues.Location = new System.Drawing.Point(269, 0);
+      this.lblNullValues.Location = new System.Drawing.Point(282, 0);
       this.lblNullValues.Name = "lblNullValues";
       this.lblNullValues.Size = new System.Drawing.Size(0, 13);
@@ -262,5 +249,5 @@
       // 
       this.label2.AutoSize = true;
-      this.label2.Location = new System.Drawing.Point(201, 0);
+      this.label2.Location = new System.Drawing.Point(187, 0);
       this.label2.Name = "label2";
       this.label2.Size = new System.Drawing.Size(60, 13);
@@ -275,4 +262,38 @@
       this.lblValues.Size = new System.Drawing.Size(0, 13);
       this.lblValues.TabIndex = 15;
+      // 
+      // lblMedian
+      // 
+      this.lblMedian.AutoSize = true;
+      this.lblMedian.Location = new System.Drawing.Point(62, 60);
+      this.lblMedian.Name = "lblMedian";
+      this.lblMedian.Size = new System.Drawing.Size(0, 13);
+      this.lblMedian.TabIndex = 25;
+      // 
+      // label8
+      // 
+      this.label8.AutoSize = true;
+      this.label8.Location = new System.Drawing.Point(187, 20);
+      this.label8.Name = "label8";
+      this.label8.Size = new System.Drawing.Size(83, 13);
+      this.label8.TabIndex = 28;
+      this.label8.Text = "NullPercentage:";
+      // 
+      // label4
+      // 
+      this.label4.AutoSize = true;
+      this.label4.Location = new System.Drawing.Point(187, 40);
+      this.label4.Name = "label4";
+      this.label4.Size = new System.Drawing.Size(54, 13);
+      this.label4.TabIndex = 20;
+      this.label4.Text = "Maximum:";
+      // 
+      // lblNullPercentage
+      // 
+      this.lblNullPercentage.AutoSize = true;
+      this.lblNullPercentage.Location = new System.Drawing.Point(282, 20);
+      this.lblNullPercentage.Name = "lblNullPercentage";
+      this.lblNullPercentage.Size = new System.Drawing.Size(0, 13);
+      this.lblNullPercentage.TabIndex = 29;
       // 
       // label6
@@ -288,5 +309,5 @@
       // 
       this.label7.AutoSize = true;
-      this.label7.Location = new System.Drawing.Point(201, 40);
+      this.label7.Location = new System.Drawing.Point(187, 60);
       this.label7.Name = "label7";
       this.label7.Size = new System.Drawing.Size(43, 13);
@@ -297,16 +318,16 @@
       // 
       this.lblStdDev.AutoSize = true;
-      this.lblStdDev.Location = new System.Drawing.Point(269, 40);
+      this.lblStdDev.Location = new System.Drawing.Point(282, 60);
       this.lblStdDev.Name = "lblStdDev";
       this.lblStdDev.Size = new System.Drawing.Size(0, 13);
       this.lblStdDev.TabIndex = 27;
       // 
-      // lblMedian
-      // 
-      this.lblMedian.AutoSize = true;
-      this.lblMedian.Location = new System.Drawing.Point(62, 60);
-      this.lblMedian.Name = "lblMedian";
-      this.lblMedian.Size = new System.Drawing.Size(0, 13);
-      this.lblMedian.TabIndex = 25;
+      // lblMaximum
+      // 
+      this.lblMaximum.AutoSize = true;
+      this.lblMaximum.Location = new System.Drawing.Point(282, 40);
+      this.lblMaximum.Name = "lblMaximum";
+      this.lblMaximum.Size = new System.Drawing.Size(0, 13);
+      this.lblMaximum.TabIndex = 21;
       // 
       // ColumnGroupView
@@ -352,4 +373,6 @@
     private System.Windows.Forms.Label lblStdDev;
     private System.Windows.Forms.ToolTip toolTip;
+    private System.Windows.Forms.Label label8;
+    private System.Windows.Forms.Label lblNullPercentage;
   }
 }
Index: branches/HeuristicLab.DataImporter/HeuristicLab.DataImporter.Data/View/ColumnGroupView.cs
===================================================================
--- branches/HeuristicLab.DataImporter/HeuristicLab.DataImporter.Data/View/ColumnGroupView.cs	(revision 7963)
+++ branches/HeuristicLab.DataImporter/HeuristicLab.DataImporter.Data/View/ColumnGroupView.cs	(revision 7968)
@@ -392,4 +392,6 @@
       }
       lblNullValues.Text = nullValuesCount.ToString();
+      double nullPercentage = (double)nullValuesCount / (double)totalValuesCount;
+      lblNullPercentage.Text = Double.IsNaN(nullPercentage) ? "" : nullPercentage.ToString();
       lblValues.Text = totalValuesCount.ToString();
       lblMinimum.Text = minimum == null ? "" : minimum.ToString();
