Index: branches/DataPreprocessing Enhancements/HeuristicLab.DataPreprocessing.Views/3.4/DataGridContentView.Designer.cs
===================================================================
--- branches/DataPreprocessing Enhancements/HeuristicLab.DataPreprocessing.Views/3.4/DataGridContentView.Designer.cs	(revision 14914)
+++ branches/DataPreprocessing Enhancements/HeuristicLab.DataPreprocessing.Views/3.4/DataGridContentView.Designer.cs	(revision 14915)
@@ -63,14 +63,14 @@
       this.btnReplace = new System.Windows.Forms.Button();
       this.toolTip = new System.Windows.Forms.ToolTip(this.components);
+      this.checkInputsTargetButton = new System.Windows.Forms.Button();
       this.uncheckAllButton = new System.Windows.Forms.Button();
       this.checkAllButton = new System.Windows.Forms.Button();
-      this.checkInputsTargetButton = new System.Windows.Forms.Button();
       this.addRowButton = new System.Windows.Forms.Button();
       this.addColumnButton = new System.Windows.Forms.Button();
       this.renameColumnsButton = new System.Windows.Forms.Button();
-      this.groupBox1 = new System.Windows.Forms.GroupBox();
+      this.showVariablesGroupBox = new System.Windows.Forms.GroupBox();
       ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
       this.contextMenuCell.SuspendLayout();
-      this.groupBox1.SuspendLayout();
+      this.showVariablesGroupBox.SuspendLayout();
       this.SuspendLayout();
       // 
@@ -86,4 +86,8 @@
       this.columnsTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)));
       this.columnsTextBox.Size = new System.Drawing.Size(71, 20);
+      // 
+      // statisticsTextBox
+      // 
+      this.statisticsTextBox.Size = new System.Drawing.Size(1133, 13);
       // 
       // btnApplySort
@@ -222,12 +226,23 @@
       this.btnReplace.Click += new System.EventHandler(this.btnReplace_Click);
       // 
+      // checkInputsTargetButton
+      // 
+      this.checkInputsTargetButton.Image = global::HeuristicLab.DataPreprocessing.Views.PreprocessingIcons.Inputs;
+      this.checkInputsTargetButton.Location = new System.Drawing.Point(36, 19);
+      this.checkInputsTargetButton.Name = "checkInputsTargetButton";
+      this.checkInputsTargetButton.Size = new System.Drawing.Size(24, 24);
+      this.checkInputsTargetButton.TabIndex = 14;
+      this.toolTip.SetToolTip(this.checkInputsTargetButton, "Inputs & Target");
+      this.checkInputsTargetButton.UseVisualStyleBackColor = true;
+      this.checkInputsTargetButton.Click += new System.EventHandler(this.checkInputsTargetButton_Click);
+      // 
       // uncheckAllButton
       // 
-      this.uncheckAllButton.Location = new System.Drawing.Point(105, 17);
+      this.uncheckAllButton.Image = global::HeuristicLab.DataPreprocessing.Views.PreprocessingIcons.None;
+      this.uncheckAllButton.Location = new System.Drawing.Point(66, 19);
       this.uncheckAllButton.Name = "uncheckAllButton";
-      this.uncheckAllButton.Size = new System.Drawing.Size(43, 24);
+      this.uncheckAllButton.Size = new System.Drawing.Size(24, 24);
       this.uncheckAllButton.TabIndex = 12;
-      this.uncheckAllButton.Text = "None";
-      this.toolTip.SetToolTip(this.uncheckAllButton, "Uncheck all variables");
+      this.toolTip.SetToolTip(this.uncheckAllButton, "None");
       this.uncheckAllButton.UseVisualStyleBackColor = true;
       this.uncheckAllButton.Click += new System.EventHandler(this.uncheckAllButton_Click);
@@ -235,23 +250,12 @@
       // checkAllButton
       // 
-      this.checkAllButton.Location = new System.Drawing.Point(68, 17);
+      this.checkAllButton.Image = global::HeuristicLab.DataPreprocessing.Views.PreprocessingIcons.All;
+      this.checkAllButton.Location = new System.Drawing.Point(6, 19);
       this.checkAllButton.Name = "checkAllButton";
-      this.checkAllButton.Size = new System.Drawing.Size(31, 24);
+      this.checkAllButton.Size = new System.Drawing.Size(24, 24);
       this.checkAllButton.TabIndex = 13;
-      this.checkAllButton.Text = "All";
-      this.toolTip.SetToolTip(this.checkAllButton, "Check all variables");
+      this.toolTip.SetToolTip(this.checkAllButton, "All");
       this.checkAllButton.UseVisualStyleBackColor = true;
       this.checkAllButton.Click += new System.EventHandler(this.checkAllButton_Click);
-      // 
-      // checkInputsTargetButton
-      // 
-      this.checkInputsTargetButton.Location = new System.Drawing.Point(6, 17);
-      this.checkInputsTargetButton.Name = "checkInputsTargetButton";
-      this.checkInputsTargetButton.Size = new System.Drawing.Size(56, 24);
-      this.checkInputsTargetButton.TabIndex = 14;
-      this.checkInputsTargetButton.Text = "Inputs";
-      this.toolTip.SetToolTip(this.checkInputsTargetButton, "Check only inputs and target variable");
-      this.checkInputsTargetButton.UseVisualStyleBackColor = true;
-      this.checkInputsTargetButton.Click += new System.EventHandler(this.checkInputsTargetButton_Click);
       // 
       // addRowButton
@@ -285,15 +289,15 @@
       this.renameColumnsButton.Click += new System.EventHandler(this.renameColumnsButton_Click);
       // 
-      // groupBox1
-      // 
-      this.groupBox1.Controls.Add(this.checkInputsTargetButton);
-      this.groupBox1.Controls.Add(this.uncheckAllButton);
-      this.groupBox1.Controls.Add(this.checkAllButton);
-      this.groupBox1.Location = new System.Drawing.Point(426, 0);
-      this.groupBox1.Name = "groupBox1";
-      this.groupBox1.Size = new System.Drawing.Size(160, 49);
-      this.groupBox1.TabIndex = 15;
-      this.groupBox1.TabStop = false;
-      this.groupBox1.Text = "Show Variables";
+      // showVariablesGroupBox
+      // 
+      this.showVariablesGroupBox.Controls.Add(this.checkInputsTargetButton);
+      this.showVariablesGroupBox.Controls.Add(this.uncheckAllButton);
+      this.showVariablesGroupBox.Controls.Add(this.checkAllButton);
+      this.showVariablesGroupBox.Location = new System.Drawing.Point(448, 0);
+      this.showVariablesGroupBox.Name = "showVariablesGroupBox";
+      this.showVariablesGroupBox.Size = new System.Drawing.Size(97, 49);
+      this.showVariablesGroupBox.TabIndex = 17;
+      this.showVariablesGroupBox.TabStop = false;
+      this.showVariablesGroupBox.Text = "Show Variables";
       // 
       // DataGridContentView
@@ -301,5 +305,5 @@
       this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
       this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-      this.Controls.Add(this.groupBox1);
+      this.Controls.Add(this.showVariablesGroupBox);
       this.Controls.Add(this.renameColumnsButton);
       this.Controls.Add(this.addColumnButton);
@@ -320,8 +324,8 @@
       this.Controls.SetChildIndex(this.rowsTextBox, 0);
       this.Controls.SetChildIndex(this.columnsTextBox, 0);
-      this.Controls.SetChildIndex(this.groupBox1, 0);
+      this.Controls.SetChildIndex(this.showVariablesGroupBox, 0);
       ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
       this.contextMenuCell.ResumeLayout(false);
-      this.groupBox1.ResumeLayout(false);
+      this.showVariablesGroupBox.ResumeLayout(false);
       this.ResumeLayout(false);
       this.PerformLayout();
@@ -351,8 +355,8 @@
     private System.Windows.Forms.Button addColumnButton;
     private System.Windows.Forms.Button renameColumnsButton;
+    private System.Windows.Forms.GroupBox showVariablesGroupBox;
+    private System.Windows.Forms.Button checkInputsTargetButton;
     private System.Windows.Forms.Button uncheckAllButton;
     private System.Windows.Forms.Button checkAllButton;
-    private System.Windows.Forms.Button checkInputsTargetButton;
-    private System.Windows.Forms.GroupBox groupBox1;
   }
 }
Index: branches/DataPreprocessing Enhancements/HeuristicLab.DataPreprocessing.Views/3.4/HeuristicLab.DataPreprocessing.Views-3.4.csproj
===================================================================
--- branches/DataPreprocessing Enhancements/HeuristicLab.DataPreprocessing.Views/3.4/HeuristicLab.DataPreprocessing.Views-3.4.csproj	(revision 14914)
+++ branches/DataPreprocessing Enhancements/HeuristicLab.DataPreprocessing.Views/3.4/HeuristicLab.DataPreprocessing.Views-3.4.csproj	(revision 14915)
@@ -208,4 +208,9 @@
       <DependentUpon>ComparisonFilterView.cs</DependentUpon>
     </Compile>
+    <Compile Include="PreprocessingIcons.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DesignTime>True</DesignTime>
+      <DependentUpon>PreprocessingIcons.resx</DependentUpon>
+    </Compile>
     <Compile Include="RenameColumnsDialog.cs">
       <SubType>Form</SubType>
@@ -319,7 +324,16 @@
   </ItemGroup>
   <ItemGroup>
+    <EmbeddedResource Include="PreprocessingIcons.resx">
+      <Generator>ResXFileCodeGenerator</Generator>
+      <LastGenOutput>PreprocessingIcons.Designer.cs</LastGenOutput>
+    </EmbeddedResource>
     <EmbeddedResource Include="ScatterPlotSingleView.resx">
       <DependentUpon>ScatterPlotSingleView.cs</DependentUpon>
     </EmbeddedResource>
+  </ItemGroup>
+  <ItemGroup>
+    <Content Include="Icons\All.png" />
+    <Content Include="Icons\Inputs.png" />
+    <Content Include="Icons\None.png" />
   </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
Index: branches/DataPreprocessing Enhancements/HeuristicLab.DataPreprocessing.Views/3.4/PreprocessingIcons.Designer.cs
===================================================================
--- branches/DataPreprocessing Enhancements/HeuristicLab.DataPreprocessing.Views/3.4/PreprocessingIcons.Designer.cs	(revision 14915)
+++ branches/DataPreprocessing Enhancements/HeuristicLab.DataPreprocessing.Views/3.4/PreprocessingIcons.Designer.cs	(revision 14915)
@@ -0,0 +1,93 @@
+﻿//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.42000
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HeuristicLab.DataPreprocessing.Views {
+    using System;
+    
+    
+    /// <summary>
+    ///   A strongly-typed resource class, for looking up localized strings, etc.
+    /// </summary>
+    // This class was auto-generated by the StronglyTypedResourceBuilder
+    // class via a tool like ResGen or Visual Studio.
+    // To add or remove a member, edit your .ResX file then rerun ResGen
+    // with the /str option, or rebuild your VS project.
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    internal class PreprocessingIcons {
+        
+        private static global::System.Resources.ResourceManager resourceMan;
+        
+        private static global::System.Globalization.CultureInfo resourceCulture;
+        
+        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+        internal PreprocessingIcons() {
+        }
+        
+        /// <summary>
+        ///   Returns the cached ResourceManager instance used by this class.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Resources.ResourceManager ResourceManager {
+            get {
+                if (object.ReferenceEquals(resourceMan, null)) {
+                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("HeuristicLab.DataPreprocessing.Views.PreprocessingIcons", typeof(PreprocessingIcons).Assembly);
+                    resourceMan = temp;
+                }
+                return resourceMan;
+            }
+        }
+        
+        /// <summary>
+        ///   Overrides the current thread's CurrentUICulture property for all
+        ///   resource lookups using this strongly typed resource class.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Globalization.CultureInfo Culture {
+            get {
+                return resourceCulture;
+            }
+            set {
+                resourceCulture = value;
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized resource of type System.Drawing.Bitmap.
+        /// </summary>
+        internal static System.Drawing.Bitmap All {
+            get {
+                object obj = ResourceManager.GetObject("All", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized resource of type System.Drawing.Bitmap.
+        /// </summary>
+        internal static System.Drawing.Bitmap Inputs {
+            get {
+                object obj = ResourceManager.GetObject("Inputs", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized resource of type System.Drawing.Bitmap.
+        /// </summary>
+        internal static System.Drawing.Bitmap None {
+            get {
+                object obj = ResourceManager.GetObject("None", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+    }
+}
Index: branches/DataPreprocessing Enhancements/HeuristicLab.DataPreprocessing.Views/3.4/PreprocessingIcons.resx
===================================================================
--- branches/DataPreprocessing Enhancements/HeuristicLab.DataPreprocessing.Views/3.4/PreprocessingIcons.resx	(revision 14915)
+++ branches/DataPreprocessing Enhancements/HeuristicLab.DataPreprocessing.Views/3.4/PreprocessingIcons.resx	(revision 14915)
@@ -0,0 +1,130 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="All" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>icons\all.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="Inputs" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>icons\inputs.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="None" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>icons\none.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+</root>
Index: branches/DataPreprocessing Enhancements/HeuristicLab.DataPreprocessing.Views/3.4/StatisticsView.Designer.cs
===================================================================
--- branches/DataPreprocessing Enhancements/HeuristicLab.DataPreprocessing.Views/3.4/StatisticsView.Designer.cs	(revision 14914)
+++ branches/DataPreprocessing Enhancements/HeuristicLab.DataPreprocessing.Views/3.4/StatisticsView.Designer.cs	(revision 14915)
@@ -45,20 +45,32 @@
     /// </summary>
     private void InitializeComponent() {
+      this.components = new System.ComponentModel.Container();
       this.lblRows = new System.Windows.Forms.Label();
-      this.txtRows = new System.Windows.Forms.Label();
       this.lblColumns = new System.Windows.Forms.Label();
       this.lblMissingValuesTotal = new System.Windows.Forms.Label();
-      this.txtColumns = new System.Windows.Forms.Label();
-      this.txtNumericColumns = new System.Windows.Forms.Label();
-      this.txtNominalColumns = new System.Windows.Forms.Label();
       this.lblNumericColumns = new System.Windows.Forms.Label();
       this.lblNominalColumns = new System.Windows.Forms.Label();
-      this.txtMissingValuesTotal = new System.Windows.Forms.Label();
       this.stringMatrixView = new HeuristicLab.Data.Views.StringConvertibleMatrixView();
-      this.groupBox1 = new System.Windows.Forms.GroupBox();
+      this.showVariablesGroupBox = new System.Windows.Forms.GroupBox();
       this.checkInputsTargetButton = new System.Windows.Forms.Button();
       this.uncheckAllButton = new System.Windows.Forms.Button();
       this.checkAllButton = new System.Windows.Forms.Button();
-      this.groupBox1.SuspendLayout();
+      this.toolTip = new System.Windows.Forms.ToolTip(this.components);
+      this.lblTNumValues = new System.Windows.Forms.Label();
+      this.orientationGroupBox = new System.Windows.Forms.GroupBox();
+      this.verticalRadioButton = new System.Windows.Forms.RadioButton();
+      this.horizontalRadioButton = new System.Windows.Forms.RadioButton();
+      this.rowsTextBox = new System.Windows.Forms.TextBox();
+      this.columnsTextBox = new System.Windows.Forms.TextBox();
+      this.totalValuesTextBox = new System.Windows.Forms.TextBox();
+      this.overviewTableLayoutPanel = new System.Windows.Forms.TableLayoutPanel();
+      this.numericColumnsTextBox = new System.Windows.Forms.TextBox();
+      this.nominalColumnsTextBox5 = new System.Windows.Forms.TextBox();
+      this.missingValuesTextBox = new System.Windows.Forms.TextBox();
+      this.overviewGroupBox = new System.Windows.Forms.GroupBox();
+      this.showVariablesGroupBox.SuspendLayout();
+      this.orientationGroupBox.SuspendLayout();
+      this.overviewTableLayoutPanel.SuspendLayout();
+      this.overviewGroupBox.SuspendLayout();
       this.SuspendLayout();
       // 
@@ -66,90 +78,55 @@
       // 
       this.lblRows.AutoSize = true;
-      this.lblRows.Location = new System.Drawing.Point(2, 6);
+      this.lblRows.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.lblRows.Location = new System.Drawing.Point(3, 0);
       this.lblRows.Name = "lblRows";
-      this.lblRows.Size = new System.Drawing.Size(34, 13);
+      this.lblRows.Size = new System.Drawing.Size(47, 26);
       this.lblRows.TabIndex = 0;
       this.lblRows.Text = "Rows";
-      // 
-      // txtRows
-      // 
-      this.txtRows.AutoSize = true;
-      this.txtRows.Location = new System.Drawing.Point(114, 6);
-      this.txtRows.Name = "txtRows";
-      this.txtRows.Size = new System.Drawing.Size(19, 13);
-      this.txtRows.TabIndex = 1;
-      this.txtRows.Text = "12";
+      this.lblRows.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
       // 
       // lblColumns
       // 
       this.lblColumns.AutoSize = true;
-      this.lblColumns.Location = new System.Drawing.Point(2, 26);
+      this.lblColumns.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.lblColumns.Location = new System.Drawing.Point(3, 26);
       this.lblColumns.Name = "lblColumns";
-      this.lblColumns.Size = new System.Drawing.Size(47, 13);
+      this.lblColumns.Size = new System.Drawing.Size(47, 26);
       this.lblColumns.TabIndex = 2;
       this.lblColumns.Text = "Columns";
+      this.lblColumns.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
       // 
       // lblMissingValuesTotal
       // 
       this.lblMissingValuesTotal.AutoSize = true;
-      this.lblMissingValuesTotal.Location = new System.Drawing.Point(2, 87);
+      this.lblMissingValuesTotal.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.lblMissingValuesTotal.Location = new System.Drawing.Point(233, 26);
       this.lblMissingValuesTotal.Name = "lblMissingValuesTotal";
-      this.lblMissingValuesTotal.Size = new System.Drawing.Size(100, 13);
+      this.lblMissingValuesTotal.Size = new System.Drawing.Size(77, 26);
       this.lblMissingValuesTotal.TabIndex = 3;
-      this.lblMissingValuesTotal.Text = "Missing Values total";
-      // 
-      // txtColumns
-      // 
-      this.txtColumns.AutoSize = true;
-      this.txtColumns.Location = new System.Drawing.Point(114, 26);
-      this.txtColumns.Name = "txtColumns";
-      this.txtColumns.Size = new System.Drawing.Size(25, 13);
-      this.txtColumns.TabIndex = 1;
-      this.txtColumns.Text = "123";
-      // 
-      // txtNumericColumns
-      // 
-      this.txtNumericColumns.AutoSize = true;
-      this.txtNumericColumns.Location = new System.Drawing.Point(114, 46);
-      this.txtNumericColumns.Name = "txtNumericColumns";
-      this.txtNumericColumns.Size = new System.Drawing.Size(25, 13);
-      this.txtNumericColumns.TabIndex = 1;
-      this.txtNumericColumns.Text = "456";
-      // 
-      // txtNominalColumns
-      // 
-      this.txtNominalColumns.AutoSize = true;
-      this.txtNominalColumns.Location = new System.Drawing.Point(114, 67);
-      this.txtNominalColumns.Name = "txtNominalColumns";
-      this.txtNominalColumns.Size = new System.Drawing.Size(25, 13);
-      this.txtNominalColumns.TabIndex = 1;
-      this.txtNominalColumns.Text = "789";
+      this.lblMissingValuesTotal.Text = "Missing Values";
+      this.lblMissingValuesTotal.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
       // 
       // lblNumericColumns
       // 
       this.lblNumericColumns.AutoSize = true;
-      this.lblNumericColumns.Location = new System.Drawing.Point(2, 46);
+      this.lblNumericColumns.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.lblNumericColumns.Location = new System.Drawing.Point(97, 0);
       this.lblNumericColumns.Name = "lblNumericColumns";
-      this.lblNumericColumns.Size = new System.Drawing.Size(89, 13);
+      this.lblNumericColumns.Size = new System.Drawing.Size(89, 26);
       this.lblNumericColumns.TabIndex = 3;
       this.lblNumericColumns.Text = "Numeric Columns";
+      this.lblNumericColumns.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
       // 
       // lblNominalColumns
       // 
       this.lblNominalColumns.AutoSize = true;
-      this.lblNominalColumns.Location = new System.Drawing.Point(2, 67);
+      this.lblNominalColumns.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.lblNominalColumns.Location = new System.Drawing.Point(97, 26);
       this.lblNominalColumns.Name = "lblNominalColumns";
-      this.lblNominalColumns.Size = new System.Drawing.Size(88, 13);
+      this.lblNominalColumns.Size = new System.Drawing.Size(89, 26);
       this.lblNominalColumns.TabIndex = 3;
       this.lblNominalColumns.Text = "Nominal Columns";
-      // 
-      // txtMissingValuesTotal
-      // 
-      this.txtMissingValuesTotal.AutoSize = true;
-      this.txtMissingValuesTotal.Location = new System.Drawing.Point(114, 87);
-      this.txtMissingValuesTotal.Name = "txtMissingValuesTotal";
-      this.txtMissingValuesTotal.Size = new System.Drawing.Size(25, 13);
-      this.txtMissingValuesTotal.TabIndex = 1;
-      this.txtMissingValuesTotal.Text = "102";
+      this.lblNominalColumns.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
       // 
       // stringMatrixView
@@ -160,31 +137,32 @@
       this.stringMatrixView.Caption = "StringConvertibleMatrix View";
       this.stringMatrixView.Content = null;
-      this.stringMatrixView.Location = new System.Drawing.Point(5, 112);
+      this.stringMatrixView.Location = new System.Drawing.Point(3, 74);
       this.stringMatrixView.Name = "stringMatrixView";
       this.stringMatrixView.ReadOnly = true;
       this.stringMatrixView.ShowRowsAndColumnsTextBox = false;
       this.stringMatrixView.ShowStatisticalInformation = true;
-      this.stringMatrixView.Size = new System.Drawing.Size(530, 283);
+      this.stringMatrixView.Size = new System.Drawing.Size(592, 331);
       this.stringMatrixView.TabIndex = 4;
       // 
-      // groupBox1
-      // 
-      this.groupBox1.Controls.Add(this.checkInputsTargetButton);
-      this.groupBox1.Controls.Add(this.uncheckAllButton);
-      this.groupBox1.Controls.Add(this.checkAllButton);
-      this.groupBox1.Location = new System.Drawing.Point(212, 3);
-      this.groupBox1.Name = "groupBox1";
-      this.groupBox1.Size = new System.Drawing.Size(160, 49);
-      this.groupBox1.TabIndex = 16;
-      this.groupBox1.TabStop = false;
-      this.groupBox1.Text = "Show Variables";
+      // showVariablesGroupBox
+      // 
+      this.showVariablesGroupBox.Controls.Add(this.checkInputsTargetButton);
+      this.showVariablesGroupBox.Controls.Add(this.uncheckAllButton);
+      this.showVariablesGroupBox.Controls.Add(this.checkAllButton);
+      this.showVariablesGroupBox.Location = new System.Drawing.Point(393, 0);
+      this.showVariablesGroupBox.Name = "showVariablesGroupBox";
+      this.showVariablesGroupBox.Size = new System.Drawing.Size(97, 55);
+      this.showVariablesGroupBox.TabIndex = 16;
+      this.showVariablesGroupBox.TabStop = false;
+      this.showVariablesGroupBox.Text = "Show Variables";
       // 
       // checkInputsTargetButton
       // 
-      this.checkInputsTargetButton.Location = new System.Drawing.Point(6, 17);
+      this.checkInputsTargetButton.Image = global::HeuristicLab.DataPreprocessing.Views.PreprocessingIcons.Inputs;
+      this.checkInputsTargetButton.Location = new System.Drawing.Point(36, 19);
       this.checkInputsTargetButton.Name = "checkInputsTargetButton";
-      this.checkInputsTargetButton.Size = new System.Drawing.Size(56, 24);
+      this.checkInputsTargetButton.Size = new System.Drawing.Size(24, 24);
       this.checkInputsTargetButton.TabIndex = 14;
-      this.checkInputsTargetButton.Text = "Inputs";
+      this.toolTip.SetToolTip(this.checkInputsTargetButton, "Inputs & Target");
       this.checkInputsTargetButton.UseVisualStyleBackColor = true;
       this.checkInputsTargetButton.Click += new System.EventHandler(this.checkInputsTargetButton_Click);
@@ -192,9 +170,10 @@
       // uncheckAllButton
       // 
-      this.uncheckAllButton.Location = new System.Drawing.Point(105, 17);
+      this.uncheckAllButton.Image = global::HeuristicLab.DataPreprocessing.Views.PreprocessingIcons.None;
+      this.uncheckAllButton.Location = new System.Drawing.Point(66, 19);
       this.uncheckAllButton.Name = "uncheckAllButton";
-      this.uncheckAllButton.Size = new System.Drawing.Size(43, 24);
+      this.uncheckAllButton.Size = new System.Drawing.Size(24, 24);
       this.uncheckAllButton.TabIndex = 12;
-      this.uncheckAllButton.Text = "None";
+      this.toolTip.SetToolTip(this.uncheckAllButton, "None");
       this.uncheckAllButton.UseVisualStyleBackColor = true;
       this.uncheckAllButton.Click += new System.EventHandler(this.uncheckAllButton_Click);
@@ -202,33 +181,173 @@
       // checkAllButton
       // 
-      this.checkAllButton.Location = new System.Drawing.Point(68, 17);
+      this.checkAllButton.Image = global::HeuristicLab.DataPreprocessing.Views.PreprocessingIcons.All;
+      this.checkAllButton.Location = new System.Drawing.Point(6, 19);
       this.checkAllButton.Name = "checkAllButton";
-      this.checkAllButton.Size = new System.Drawing.Size(31, 24);
+      this.checkAllButton.Size = new System.Drawing.Size(24, 24);
       this.checkAllButton.TabIndex = 13;
-      this.checkAllButton.Text = "All";
+      this.toolTip.SetToolTip(this.checkAllButton, "All");
       this.checkAllButton.UseVisualStyleBackColor = true;
       this.checkAllButton.Click += new System.EventHandler(this.checkAllButton_Click);
       // 
+      // lblTNumValues
+      // 
+      this.lblTNumValues.AutoSize = true;
+      this.lblTNumValues.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.lblTNumValues.Location = new System.Drawing.Point(233, 0);
+      this.lblTNumValues.Name = "lblTNumValues";
+      this.lblTNumValues.Size = new System.Drawing.Size(77, 26);
+      this.lblTNumValues.TabIndex = 2;
+      this.lblTNumValues.Text = "Total Values";
+      this.lblTNumValues.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+      this.toolTip.SetToolTip(this.lblTNumValues, "Valid Values (excl. missing Values)");
+      // 
+      // orientationGroupBox
+      // 
+      this.orientationGroupBox.Controls.Add(this.verticalRadioButton);
+      this.orientationGroupBox.Controls.Add(this.horizontalRadioButton);
+      this.orientationGroupBox.Location = new System.Drawing.Point(496, 0);
+      this.orientationGroupBox.Name = "orientationGroupBox";
+      this.orientationGroupBox.Size = new System.Drawing.Size(94, 55);
+      this.orientationGroupBox.TabIndex = 17;
+      this.orientationGroupBox.TabStop = false;
+      this.orientationGroupBox.Text = "Orientation";
+      // 
+      // verticalRadioButton
+      // 
+      this.verticalRadioButton.AutoSize = true;
+      this.verticalRadioButton.Location = new System.Drawing.Point(6, 32);
+      this.verticalRadioButton.Name = "verticalRadioButton";
+      this.verticalRadioButton.Size = new System.Drawing.Size(60, 17);
+      this.verticalRadioButton.TabIndex = 1;
+      this.verticalRadioButton.TabStop = true;
+      this.verticalRadioButton.Text = "Vertical";
+      this.verticalRadioButton.UseVisualStyleBackColor = true;
+      this.verticalRadioButton.CheckedChanged += new System.EventHandler(this.verticalRadioButton_CheckedChanged);
+      // 
+      // horizontalRadioButton
+      // 
+      this.horizontalRadioButton.AutoSize = true;
+      this.horizontalRadioButton.Checked = true;
+      this.horizontalRadioButton.Location = new System.Drawing.Point(6, 14);
+      this.horizontalRadioButton.Name = "horizontalRadioButton";
+      this.horizontalRadioButton.Size = new System.Drawing.Size(72, 17);
+      this.horizontalRadioButton.TabIndex = 0;
+      this.horizontalRadioButton.TabStop = true;
+      this.horizontalRadioButton.Text = "Horizontal";
+      this.horizontalRadioButton.UseVisualStyleBackColor = true;
+      this.horizontalRadioButton.CheckedChanged += new System.EventHandler(this.horizontalRadioButton_CheckedChanged);
+      // 
+      // rowsTextBox
+      // 
+      this.rowsTextBox.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.rowsTextBox.Location = new System.Drawing.Point(56, 3);
+      this.rowsTextBox.Name = "rowsTextBox";
+      this.rowsTextBox.ReadOnly = true;
+      this.rowsTextBox.Size = new System.Drawing.Size(35, 20);
+      this.rowsTextBox.TabIndex = 18;
+      // 
+      // columnsTextBox
+      // 
+      this.columnsTextBox.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.columnsTextBox.Location = new System.Drawing.Point(56, 29);
+      this.columnsTextBox.Name = "columnsTextBox";
+      this.columnsTextBox.ReadOnly = true;
+      this.columnsTextBox.Size = new System.Drawing.Size(35, 20);
+      this.columnsTextBox.TabIndex = 18;
+      // 
+      // totalValuesTextBox
+      // 
+      this.totalValuesTextBox.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.totalValuesTextBox.Location = new System.Drawing.Point(316, 3);
+      this.totalValuesTextBox.Name = "totalValuesTextBox";
+      this.totalValuesTextBox.ReadOnly = true;
+      this.totalValuesTextBox.Size = new System.Drawing.Size(59, 20);
+      this.totalValuesTextBox.TabIndex = 18;
+      // 
+      // overviewTableLayoutPanel
+      // 
+      this.overviewTableLayoutPanel.ColumnCount = 6;
+      this.overviewTableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
+      this.overviewTableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 28.57143F));
+      this.overviewTableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
+      this.overviewTableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 28.57143F));
+      this.overviewTableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
+      this.overviewTableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 42.85715F));
+      this.overviewTableLayoutPanel.Controls.Add(this.lblRows, 0, 0);
+      this.overviewTableLayoutPanel.Controls.Add(this.lblColumns, 0, 1);
+      this.overviewTableLayoutPanel.Controls.Add(this.columnsTextBox, 1, 1);
+      this.overviewTableLayoutPanel.Controls.Add(this.lblNominalColumns, 2, 1);
+      this.overviewTableLayoutPanel.Controls.Add(this.lblNumericColumns, 2, 0);
+      this.overviewTableLayoutPanel.Controls.Add(this.rowsTextBox, 1, 0);
+      this.overviewTableLayoutPanel.Controls.Add(this.numericColumnsTextBox, 3, 0);
+      this.overviewTableLayoutPanel.Controls.Add(this.nominalColumnsTextBox5, 3, 1);
+      this.overviewTableLayoutPanel.Controls.Add(this.missingValuesTextBox, 5, 1);
+      this.overviewTableLayoutPanel.Controls.Add(this.lblTNumValues, 4, 0);
+      this.overviewTableLayoutPanel.Controls.Add(this.totalValuesTextBox, 5, 0);
+      this.overviewTableLayoutPanel.Controls.Add(this.lblMissingValuesTotal, 4, 1);
+      this.overviewTableLayoutPanel.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.overviewTableLayoutPanel.Location = new System.Drawing.Point(3, 16);
+      this.overviewTableLayoutPanel.Name = "overviewTableLayoutPanel";
+      this.overviewTableLayoutPanel.RowCount = 3;
+      this.overviewTableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle());
+      this.overviewTableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle());
+      this.overviewTableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
+      this.overviewTableLayoutPanel.Size = new System.Drawing.Size(378, 52);
+      this.overviewTableLayoutPanel.TabIndex = 19;
+      // 
+      // numericColumnsTextBox
+      // 
+      this.numericColumnsTextBox.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.numericColumnsTextBox.Location = new System.Drawing.Point(192, 3);
+      this.numericColumnsTextBox.Name = "numericColumnsTextBox";
+      this.numericColumnsTextBox.ReadOnly = true;
+      this.numericColumnsTextBox.Size = new System.Drawing.Size(35, 20);
+      this.numericColumnsTextBox.TabIndex = 18;
+      // 
+      // nominalColumnsTextBox5
+      // 
+      this.nominalColumnsTextBox5.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.nominalColumnsTextBox5.Location = new System.Drawing.Point(192, 29);
+      this.nominalColumnsTextBox5.Name = "nominalColumnsTextBox5";
+      this.nominalColumnsTextBox5.ReadOnly = true;
+      this.nominalColumnsTextBox5.Size = new System.Drawing.Size(35, 20);
+      this.nominalColumnsTextBox5.TabIndex = 18;
+      // 
+      // missingValuesTextBox
+      // 
+      this.missingValuesTextBox.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.missingValuesTextBox.Location = new System.Drawing.Point(316, 29);
+      this.missingValuesTextBox.Name = "missingValuesTextBox";
+      this.missingValuesTextBox.ReadOnly = true;
+      this.missingValuesTextBox.Size = new System.Drawing.Size(59, 20);
+      this.missingValuesTextBox.TabIndex = 18;
+      // 
+      // overviewGroupBox
+      // 
+      this.overviewGroupBox.Controls.Add(this.overviewTableLayoutPanel);
+      this.overviewGroupBox.Location = new System.Drawing.Point(3, 0);
+      this.overviewGroupBox.Name = "overviewGroupBox";
+      this.overviewGroupBox.Size = new System.Drawing.Size(384, 71);
+      this.overviewGroupBox.TabIndex = 20;
+      this.overviewGroupBox.TabStop = false;
+      this.overviewGroupBox.Text = "Overview";
+      // 
       // StatisticsView
       // 
       this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
       this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-      this.Controls.Add(this.groupBox1);
+      this.Controls.Add(this.overviewGroupBox);
+      this.Controls.Add(this.orientationGroupBox);
+      this.Controls.Add(this.showVariablesGroupBox);
       this.Controls.Add(this.stringMatrixView);
-      this.Controls.Add(this.lblNominalColumns);
-      this.Controls.Add(this.lblNumericColumns);
-      this.Controls.Add(this.lblMissingValuesTotal);
-      this.Controls.Add(this.txtMissingValuesTotal);
-      this.Controls.Add(this.txtNominalColumns);
-      this.Controls.Add(this.lblColumns);
-      this.Controls.Add(this.txtNumericColumns);
-      this.Controls.Add(this.txtColumns);
-      this.Controls.Add(this.txtRows);
-      this.Controls.Add(this.lblRows);
       this.Name = "StatisticsView";
-      this.Size = new System.Drawing.Size(549, 408);
-      this.groupBox1.ResumeLayout(false);
+      this.Size = new System.Drawing.Size(598, 408);
+      this.showVariablesGroupBox.ResumeLayout(false);
+      this.orientationGroupBox.ResumeLayout(false);
+      this.orientationGroupBox.PerformLayout();
+      this.overviewTableLayoutPanel.ResumeLayout(false);
+      this.overviewTableLayoutPanel.PerformLayout();
+      this.overviewGroupBox.ResumeLayout(false);
       this.ResumeLayout(false);
-      this.PerformLayout();
 
     }
@@ -237,18 +356,26 @@
 
     private System.Windows.Forms.Label lblRows;
-    private System.Windows.Forms.Label txtRows;
     private System.Windows.Forms.Label lblColumns;
     private System.Windows.Forms.Label lblMissingValuesTotal;
-    private System.Windows.Forms.Label txtColumns;
-    private System.Windows.Forms.Label txtNumericColumns;
-    private System.Windows.Forms.Label txtNominalColumns;
     private System.Windows.Forms.Label lblNumericColumns;
     private System.Windows.Forms.Label lblNominalColumns;
-    private System.Windows.Forms.Label txtMissingValuesTotal;
     private HeuristicLab.Data.Views.StringConvertibleMatrixView stringMatrixView;
-    private System.Windows.Forms.GroupBox groupBox1;
+    private System.Windows.Forms.GroupBox showVariablesGroupBox;
     private System.Windows.Forms.Button checkInputsTargetButton;
     private System.Windows.Forms.Button uncheckAllButton;
     private System.Windows.Forms.Button checkAllButton;
+    private System.Windows.Forms.ToolTip toolTip;
+    private System.Windows.Forms.GroupBox orientationGroupBox;
+    private System.Windows.Forms.RadioButton verticalRadioButton;
+    private System.Windows.Forms.RadioButton horizontalRadioButton;
+    private System.Windows.Forms.Label lblTNumValues;
+    private System.Windows.Forms.TextBox rowsTextBox;
+    private System.Windows.Forms.TextBox columnsTextBox;
+    private System.Windows.Forms.TextBox totalValuesTextBox;
+    private System.Windows.Forms.TableLayoutPanel overviewTableLayoutPanel;
+    private System.Windows.Forms.TextBox numericColumnsTextBox;
+    private System.Windows.Forms.TextBox nominalColumnsTextBox5;
+    private System.Windows.Forms.TextBox missingValuesTextBox;
+    private System.Windows.Forms.GroupBox overviewGroupBox;
   }
 }
Index: branches/DataPreprocessing Enhancements/HeuristicLab.DataPreprocessing.Views/3.4/StatisticsView.cs
===================================================================
--- branches/DataPreprocessing Enhancements/HeuristicLab.DataPreprocessing.Views/3.4/StatisticsView.cs	(revision 14914)
+++ branches/DataPreprocessing Enhancements/HeuristicLab.DataPreprocessing.Views/3.4/StatisticsView.cs	(revision 14915)
@@ -21,9 +21,12 @@
 
 using System;
+using System.Collections;
 using System.Collections.Generic;
+using System.Linq;
 using System.Windows.Forms;
 using HeuristicLab.Core.Views;
 using HeuristicLab.Data;
 using HeuristicLab.MainForm;
+using HeuristicLab.MainForm.WindowsForms;
 
 namespace HeuristicLab.DataPreprocessing.Views {
@@ -33,7 +36,9 @@
   public partial class StatisticsView : ItemView {
 
+    private bool horizontal = true;
+
     private StringMatrix statisticsMatrix;
 
-    private static readonly string[] RowNames = new[] {
+    private static readonly string[] StatisticsNames = new[] {
       "Type",
       "Missing Values",
@@ -42,5 +47,5 @@
       "Median",
       "Average",
-      "std. Deviation",
+      "Std. Deviation",
       "Variance",
       "25th Percentile",
@@ -62,9 +67,10 @@
       base.OnContentChanged();
       if (Content == null) {
-        txtRows.Text = "";
-        txtColumns.Text = "";
-        txtNumericColumns.Text = "";
-        txtNominalColumns.Text = "";
-        txtMissingValuesTotal.Text = "";
+        rowsTextBox.Text = string.Empty;
+        columnsTextBox.Text = string.Empty;
+        numericColumnsTextBox.Text = string.Empty;
+        nominalColumnsTextBox5.Text = string.Empty;
+        missingValuesTextBox.Text = string.Empty;
+        totalValuesTextBox.Text = string.Empty;
         stringMatrixView.Content = null;
         statisticsMatrix = null;
@@ -84,56 +90,68 @@
     }
 
-    private void UpdateData() {
-      var logic = Content.StatisticsLogic;
-      var rowCount = logic.GetRowCount();
-      txtRows.Text = logic.GetColumnCount().ToString();
-      txtColumns.Text = rowCount.ToString();
-      txtNumericColumns.Text = logic.GetNumericColumnCount().ToString();
-      txtNominalColumns.Text = logic.GetNominalColumnCount().ToString();
-      txtMissingValuesTotal.Text = logic.GetMissingValueCount().ToString();
-
-      statisticsMatrix = new StringMatrix(RowNames.Length, Content.PreprocessingData.Columns) {
-        RowNames = StatisticsView.RowNames,
-        ColumnNames = Content.PreprocessingData.VariableNames
-      };
-
-      if (rowCount > 0) {
-        for (int i = 0; i < logic.GetColumnCount(); ++i) {
-          var data = GetList(i);
-          for (int j = 0; j < data.Count; j++) {
+    private void UpdateData(Dictionary<string, bool> oldVisibility = null) {
+      var logic = Content.StatisticsLogic;
+      rowsTextBox.Text = logic.GetColumnCount().ToString();
+      columnsTextBox.Text = logic.GetRowCount().ToString();
+      numericColumnsTextBox.Text = logic.GetNumericColumnCount().ToString();
+      nominalColumnsTextBox5.Text = logic.GetNominalColumnCount().ToString();
+      missingValuesTextBox.Text = logic.GetMissingValueCount().ToString();
+      totalValuesTextBox.Text = (logic.GetColumnCount() * logic.GetRowCount() - logic.GetMissingValueCount()).ToString();
+
+      var variableNames = Content.PreprocessingData.VariableNames.ToList();
+      if (horizontal)
+        statisticsMatrix = new StringMatrix(StatisticsNames.Length, Content.PreprocessingData.Columns) {
+          RowNames = StatisticsView.StatisticsNames,
+          ColumnNames = variableNames
+        };
+      else
+        statisticsMatrix = new StringMatrix(Content.PreprocessingData.Columns, StatisticsNames.Length) {
+          RowNames = variableNames,
+          ColumnNames = StatisticsView.StatisticsNames
+        };
+
+      for (int i = 0; i < logic.GetColumnCount(); i++) {
+        var data = GetStatistics(i);
+        for (int j = 0; j < data.Count; j++) {
+          if (horizontal)
             statisticsMatrix[j, i] = data[j];
-          }
-        }
-      }
+          else
+            statisticsMatrix[i, j] = data[j];
+        }
+      }
+
+      stringMatrixView.Parent.SuspendRepaint();
       stringMatrixView.Content = statisticsMatrix;
 
-      foreach (DataGridViewColumn column in stringMatrixView.DataGridView.Columns) {
-        var variable = column.HeaderText;
-        bool isInputTarget = Content.PreprocessingData.InputVariables.Contains(variable)
-                             || Content.PreprocessingData.TargetVariable == variable;
-        column.Visible = isInputTarget;
-      }
+      var grid = stringMatrixView.DataGridView;
+      int idx = 0;
+      var list = horizontal ? grid.Columns : grid.Rows as IList;
+      foreach (DataGridViewBand band in list) {
+        var variable = variableNames[idx++];
+        if (oldVisibility != null) {
+          band.Visible = !oldVisibility.ContainsKey(variable) || oldVisibility[variable];
+        }
+      }
+      if (horizontal)
+        stringMatrixView.UpdateColumnHeaders();
+      else
+        stringMatrixView.UpdateRowHeaders();
+
       stringMatrixView.DataGridView.AutoResizeColumns();
-
-      //foreach (DataGridViewRow row in stringMatrixView.DataGridView.Rows) {
-      //  var variable = (string)row.HeaderCell.Value;
-      //  bool isInputTarget = Content.PreprocessingData.InputVariables.Contains(variable)
-      //                       || Content.PreprocessingData.TargetVariable == variable;
-      //  row.Visible = isInputTarget;
-      //}
-    }
-
-    private List<string> GetList(int i) {
+      stringMatrixView.Parent.ResumeRepaint(true);
+    }
+
+    private List<string> GetStatistics(int varIdx) {
       List<string> list;
       var logic = Content.StatisticsLogic;
-      if (logic.VariableHasType<double>(i)) {
-        list = GetDoubleColumns(i);
-      } else if (logic.VariableHasType<string>(i)) {
-        list = GetStringColumns(i);
-      } else if (logic.VariableHasType<DateTime>(i)) {
-        list = GetDateTimeColumns(i);
+      if (logic.VariableHasType<double>(varIdx)) {
+        list = GetDoubleColumns(varIdx);
+      } else if (logic.VariableHasType<string>(varIdx)) {
+        list = GetStringColumns(varIdx);
+      } else if (logic.VariableHasType<DateTime>(varIdx)) {
+        list = GetDateTimeColumns(varIdx);
       } else {
         list = new List<string>();
-        for (int j = 0; j < RowNames.Length; ++j) {
+        for (int j = 0; j < StatisticsNames.Length; ++j) {
           list.Add("unknown column type");
         }
@@ -142,27 +160,27 @@
     }
 
-    private List<string> GetDoubleColumns(int columnIndex) {
+    private List<string> GetDoubleColumns(int statIdx) {
       var logic = Content.StatisticsLogic;
       return new List<string> {
-        logic.GetColumnTypeAsString(columnIndex),
-        logic.GetMissingValueCount(columnIndex).ToString(),
-        logic.GetMin<double>(columnIndex,double.NaN).ToString(),
-        logic.GetMax<double>(columnIndex,double.NaN).ToString(),
-        logic.GetMedian(columnIndex).ToString(),
-        logic.GetAverage(columnIndex).ToString(),
-        logic.GetStandardDeviation(columnIndex).ToString(),
-        logic.GetVariance(columnIndex).ToString(),
-        logic.GetOneQuarterPercentile(columnIndex).ToString(),
-        logic.GetThreeQuarterPercentile(columnIndex).ToString(),
-        logic.GetMostCommonValue<double>(columnIndex,double.NaN).ToString(),
-        logic.GetDifferentValuesCount<double>(columnIndex).ToString()
+        logic.GetColumnTypeAsString(statIdx),
+        logic.GetMissingValueCount(statIdx).ToString(),
+        logic.GetMin<double>(statIdx, double.NaN).ToString(),
+        logic.GetMax<double>(statIdx, double.NaN).ToString(),
+        logic.GetMedian(statIdx).ToString(),
+        logic.GetAverage(statIdx).ToString(),
+        logic.GetStandardDeviation(statIdx).ToString(),
+        logic.GetVariance(statIdx).ToString(),
+        logic.GetOneQuarterPercentile(statIdx).ToString(),
+        logic.GetThreeQuarterPercentile(statIdx).ToString(),
+        logic.GetMostCommonValue<double>(statIdx, double.NaN).ToString(),
+        logic.GetDifferentValuesCount<double>(statIdx).ToString()
       };
     }
 
-    private List<string> GetStringColumns(int columnIndex) {
+    private List<string> GetStringColumns(int statIdx) {
       var logic = Content.StatisticsLogic;
       return new List<string> {
-        logic.GetColumnTypeAsString(columnIndex),
-        logic.GetMissingValueCount(columnIndex).ToString(),
+        logic.GetColumnTypeAsString(statIdx),
+        logic.GetMissingValueCount(statIdx).ToString(),
         "", //min
         "", //max
@@ -173,24 +191,24 @@
         "", //quarter percentile
         "", //three quarter percentile
-        logic.GetMostCommonValue<string>(columnIndex,string.Empty) ?? "",
-        logic.GetDifferentValuesCount<string>(columnIndex).ToString()
+        logic.GetMostCommonValue<string>(statIdx,string.Empty) ?? "",
+        logic.GetDifferentValuesCount<string>(statIdx).ToString()
       };
     }
 
-    private List<string> GetDateTimeColumns(int columnIndex) {
+    private List<string> GetDateTimeColumns(int statIdx) {
       var logic = Content.StatisticsLogic;
       return new List<string> {
-        logic.GetColumnTypeAsString(columnIndex),
-        logic.GetMissingValueCount(columnIndex).ToString(),
-        logic.GetMin<DateTime>(columnIndex,DateTime.MinValue).ToString(),
-        logic.GetMax<DateTime>(columnIndex,DateTime.MinValue).ToString(),
-        logic.GetMedianDateTime(columnIndex).ToString(),
-        logic.GetAverageDateTime(columnIndex).ToString(),
-        logic.GetStandardDeviation(columnIndex).ToString(),
-        logic.GetVariance(columnIndex).ToString(), //variance
-        logic.GetOneQuarterPercentile(columnIndex).ToString(),
-        logic.GetThreeQuarterPercentile(columnIndex).ToString(),
-        logic.GetMostCommonValue<DateTime>(columnIndex,DateTime.MinValue).ToString(),
-        logic.GetDifferentValuesCount<DateTime>(columnIndex).ToString()
+        logic.GetColumnTypeAsString(statIdx),
+        logic.GetMissingValueCount(statIdx).ToString(),
+        logic.GetMin<DateTime>(statIdx, DateTime.MinValue).ToString(),
+        logic.GetMax<DateTime>(statIdx, DateTime.MinValue).ToString(),
+        logic.GetMedianDateTime(statIdx).ToString(),
+        logic.GetAverageDateTime(statIdx).ToString(),
+        logic.GetStandardDeviation(statIdx).ToString(),
+        logic.GetVariance(statIdx).ToString(),
+        logic.GetOneQuarterPercentile(statIdx).ToString(),
+        logic.GetThreeQuarterPercentile(statIdx).ToString(),
+        logic.GetMostCommonValue<DateTime>(statIdx, DateTime.MinValue).ToString(),
+        logic.GetDifferentValuesCount<DateTime>(statIdx).ToString()
       };
     }
@@ -200,24 +218,62 @@
     }
 
+    #region Show/Hide Variables
     private void checkInputsTargetButton_Click(object sender, EventArgs e) {
-      foreach (DataGridViewColumn column in stringMatrixView.DataGridView.Columns) {
-        var variable = column.HeaderText;
+      var grid = stringMatrixView.DataGridView;
+      var list = horizontal ? grid.Columns : grid.Rows as IList;
+      var variableNames = Content.PreprocessingData.VariableNames.ToList();
+      int idx = 0;
+      foreach (DataGridViewBand band in list) {
+        var variable = variableNames[idx++];
         bool isInputTarget = Content.PreprocessingData.InputVariables.Contains(variable)
                              || Content.PreprocessingData.TargetVariable == variable;
-        column.Visible = isInputTarget;
-      }
-    }
-
+        band.Visible = isInputTarget;
+        if (horizontal)
+          stringMatrixView.UpdateColumnHeaders();
+        else
+          stringMatrixView.UpdateRowHeaders();
+      }
+
+    }
     private void checkAllButton_Click(object sender, EventArgs e) {
-      foreach (DataGridViewColumn column in stringMatrixView.DataGridView.Columns) {
-        column.Visible = true;
-      }
-    }
-
+      var grid = stringMatrixView.DataGridView;
+      var list = horizontal ? grid.Columns : grid.Rows as IList;
+      foreach (DataGridViewBand band in list) {
+        band.Visible = true;
+      }
+      if (horizontal)
+        stringMatrixView.UpdateColumnHeaders();
+      else
+        stringMatrixView.UpdateRowHeaders();
+    }
     private void uncheckAllButton_Click(object sender, EventArgs e) {
-      foreach (DataGridViewColumn column in stringMatrixView.DataGridView.Columns) {
-        column.Visible = false;
-      }
-    }
+      var grid = stringMatrixView.DataGridView;
+      var list = horizontal ? grid.Columns : grid.Rows as IList;
+      foreach (DataGridViewBand band in list) {
+        band.Visible = false;
+      }
+    }
+    #endregion
+
+    #region Orientation
+    private void horizontalRadioButton_CheckedChanged(object sender, EventArgs e) {
+      var grid = stringMatrixView.DataGridView;
+      var oldVisibility = new Dictionary<string, bool>();
+      var variableNames = Content.PreprocessingData.VariableNames.ToList();
+      if (stringMatrixView.Content != null) {
+        var list = horizontal ? grid.Columns : grid.Rows as IList;
+        int idx = 0;
+        foreach (DataGridViewBand band in list) {
+          var variable = variableNames[idx++];
+          oldVisibility.Add(variable, band.Visible);
+        }
+      }
+      horizontal = horizontalRadioButton.Checked;
+      UpdateData(oldVisibility);
+    }
+    private void verticalRadioButton_CheckedChanged(object sender, EventArgs e) {
+      // everything is handled in horizontalRadioButton_CheckedChanged 
+    }
+    #endregion
   }
 }
