Index: trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Classification/ClassificationProblemData.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Classification/ClassificationProblemData.cs	(revision 8876)
+++ trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Classification/ClassificationProblemData.cs	(revision 8877)
@@ -304,5 +304,5 @@
     }
 
-    private static IEnumerable<string> CheckVariablesForPossibleTargetVariables(Dataset dataset) {
+    public static IEnumerable<string> CheckVariablesForPossibleTargetVariables(Dataset dataset) {
       int maxSamples = Math.Min(InspectedRowsToDetermineTargets, dataset.Rows);
       var validTargetVariables = (from v in dataset.DoubleVariables
Index: trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis.Views/3.3/ClassificationImportTypeDialog.Designer.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis.Views/3.3/ClassificationImportTypeDialog.Designer.cs	(revision 8877)
+++ trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis.Views/3.3/ClassificationImportTypeDialog.Designer.cs	(revision 8877)
@@ -0,0 +1,106 @@
+﻿namespace HeuristicLab.Problems.Instances.DataAnalysis.Views {
+  partial class ClassificationImportTypeDialog {
+    /// <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 Windows Form 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.TargetVariableComboBox = new System.Windows.Forms.ComboBox();
+      this.TargetVariableLabel = new System.Windows.Forms.Label();
+      this.TargetVariableInfoLabel = new System.Windows.Forms.Label();
+      ((System.ComponentModel.ISupportInitialize)(this.TrainingTestTrackBar)).BeginInit();
+      this.CSVSettingsGroupBox.SuspendLayout();
+      this.ProblemDataSettingsGroupBox.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // ProblemDataSettingsGroupBox
+      // 
+      this.ProblemDataSettingsGroupBox.Controls.Add(this.TargetVariableInfoLabel);
+      this.ProblemDataSettingsGroupBox.Controls.Add(this.TargetVariableLabel);
+      this.ProblemDataSettingsGroupBox.Controls.Add(this.TargetVariableComboBox);
+      this.ProblemDataSettingsGroupBox.Controls.SetChildIndex(this.PreviewLabel, 0);
+      this.ProblemDataSettingsGroupBox.Controls.SetChildIndex(this.ShuffelInfoLabel, 0);
+      this.ProblemDataSettingsGroupBox.Controls.SetChildIndex(this.TargetVariableComboBox, 0);
+      this.ProblemDataSettingsGroupBox.Controls.SetChildIndex(this.ShuffleDataCheckbox, 0);
+      this.ProblemDataSettingsGroupBox.Controls.SetChildIndex(this.TargetVariableLabel, 0);
+      this.ProblemDataSettingsGroupBox.Controls.SetChildIndex(this.TargetVariableInfoLabel, 0);
+      this.ProblemDataSettingsGroupBox.Controls.SetChildIndex(this.TrainingTestTrackBar, 0);
+      this.ProblemDataSettingsGroupBox.Controls.SetChildIndex(this.TrainingLabel, 0);
+      this.ProblemDataSettingsGroupBox.Controls.SetChildIndex(this.PreviewDatasetMatrix, 0);
+      this.ProblemDataSettingsGroupBox.Controls.SetChildIndex(this.TestLabel, 0);
+      this.ProblemDataSettingsGroupBox.Controls.SetChildIndex(this.ErrorTextBox, 0);
+      // 
+      // TargetVariableComboBox
+      // 
+      this.TargetVariableComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.TargetVariableComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+      this.TargetVariableComboBox.FormattingEnabled = true;
+      this.TargetVariableComboBox.Location = new System.Drawing.Point(230, 19);
+      this.TargetVariableComboBox.Name = "TargetVariableComboBox";
+      this.TargetVariableComboBox.Size = new System.Drawing.Size(181, 21);
+      this.TargetVariableComboBox.TabIndex = 10;
+      // 
+      // TargetVariableLabel
+      // 
+      this.TargetVariableLabel.AutoSize = true;
+      this.TargetVariableLabel.Location = new System.Drawing.Point(142, 22);
+      this.TargetVariableLabel.Name = "TargetVariableLabel";
+      this.TargetVariableLabel.Size = new System.Drawing.Size(82, 13);
+      this.TargetVariableLabel.TabIndex = 20;
+      this.TargetVariableLabel.Text = "Target Variable:";
+      // 
+      // TargetVariableinfoLabel
+      // 
+      this.TargetVariableInfoLabel.Location = new System.Drawing.Point(421, 21);
+      this.TargetVariableInfoLabel.Name = "Target Variable Info";
+      this.TargetVariableInfoLabel.Size = new System.Drawing.Size(16, 16);
+      this.TargetVariableInfoLabel.TabIndex = 21;
+      this.TargetVariableInfoLabel.Tag = "Select the target variable of the csv file.";
+      this.TargetVariableInfoLabel.Image = HeuristicLab.Common.Resources.VSImageLibrary.Information;
+      this.TargetVariableInfoLabel.DoubleClick += new System.EventHandler(this.ControlToolTip_DoubleClick);
+      // 
+      // ClassificationImportTypeDialog
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.ClientSize = new System.Drawing.Size(471, 442);
+      this.Name = "ClassificationImportTypeDialog";
+      this.Text = "Classification CSV Import";
+      ((System.ComponentModel.ISupportInitialize)(this.TrainingTestTrackBar)).EndInit();
+      this.CSVSettingsGroupBox.ResumeLayout(false);
+      this.CSVSettingsGroupBox.PerformLayout();
+      this.ProblemDataSettingsGroupBox.ResumeLayout(false);
+      this.ProblemDataSettingsGroupBox.PerformLayout();
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.ComboBox TargetVariableComboBox;
+    private System.Windows.Forms.Label TargetVariableLabel;
+    protected System.Windows.Forms.Label TargetVariableInfoLabel;
+
+
+  }
+}
Index: trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis.Views/3.3/ClassificationImportTypeDialog.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis.Views/3.3/ClassificationImportTypeDialog.cs	(revision 8877)
+++ trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis.Views/3.3/ClassificationImportTypeDialog.cs	(revision 8877)
@@ -0,0 +1,61 @@
+﻿#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.Problems.DataAnalysis;
+
+namespace HeuristicLab.Problems.Instances.DataAnalysis.Views {
+
+  public partial class ClassificationImportTypeDialog : DataAnalysisImportTypeDialog {
+    public new ClassificationImportType ImportType {
+      get {
+        return new ClassificationImportType() {
+          Shuffle = ShuffleDataCheckbox.Checked,
+          Training = TrainingTestTrackBar.Value,
+          TargetVariable = (String)TargetVariableComboBox.SelectedValue
+        };
+      }
+    }
+
+    public ClassificationImportTypeDialog() {
+      InitializeComponent();
+
+      ToolTip.SetToolTip(TargetVariableInfoLabel, (string)TargetVariableInfoLabel.Tag);
+    }
+
+    protected override void CheckAdditionalConstraints(TableFileParser csvParser) {
+      base.CheckAdditionalConstraints(csvParser);
+      SetPossibleTargetVariables();
+    }
+
+    protected void SetPossibleTargetVariables() {
+      var dataset = PreviewDatasetMatrix.Content as Dataset;
+      if (dataset != null) {
+        IEnumerable<string> possibleTargetVariables = ClassificationProblemData.CheckVariablesForPossibleTargetVariables(dataset);
+
+        // Remove " (Double)" at the end of the variable name (last 9 chars)
+        TargetVariableComboBox.DataSource = possibleTargetVariables.Select(x => x.Substring(0, x.Length - 9)).ToList();
+      }
+    }
+  }
+}
Index: trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis.Views/3.3/ClassificationInstanceConsumerView.Designer.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis.Views/3.3/ClassificationInstanceConsumerView.Designer.cs	(revision 8877)
+++ trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis.Views/3.3/ClassificationInstanceConsumerView.Designer.cs	(revision 8877)
@@ -0,0 +1,32 @@
+﻿namespace HeuristicLab.Problems.Instances.DataAnalysis.Views {
+  partial class ClassificationInstanceConsumerView {
+    /// <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() {
+      components = new System.ComponentModel.Container();
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
+    }
+
+    #endregion
+  }
+}
Index: trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis.Views/3.3/ClassificationInstanceConsumerView.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis.Views/3.3/ClassificationInstanceConsumerView.cs	(revision 8877)
+++ trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis.Views/3.3/ClassificationInstanceConsumerView.cs	(revision 8877)
@@ -0,0 +1,68 @@
+﻿#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.IO;
+using System.Windows.Forms;
+using HeuristicLab.MainForm;
+using HeuristicLab.Problems.DataAnalysis;
+
+namespace HeuristicLab.Problems.Instances.DataAnalysis.Views {
+  [View("Classification InstanceProvider View")]
+  [Content(typeof(IProblemInstanceConsumer<IClassificationProblemData>), IsDefaultView = true)]
+  public partial class ClassificationInstanceConsumerView : DataAnalysisInstanceConsumerView<IClassificationProblemData> {
+    public new IProblemInstanceConsumer<IClassificationProblemData> Content {
+      get { return (IProblemInstanceConsumer<IClassificationProblemData>)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public ClassificationInstanceConsumerView() {
+      InitializeComponent();
+    }
+
+    protected override void importButton_Click(object sender, EventArgs e) {
+      var provider = SelectedProvider as ClassificationInstanceProvider;
+      if (provider != null) {
+        ClassificationImportTypeDialog importTypeDialog = new ClassificationImportTypeDialog();
+        if (importTypeDialog.ShowDialog() == DialogResult.OK) {
+          IClassificationProblemData instance = null;
+          try {
+            instance = provider.ImportData(importTypeDialog.Path, importTypeDialog.ImportType, importTypeDialog.CSVFormat);
+          }
+          catch (Exception ex) {
+            MessageBox.Show(String.Format("There was an error parsing the file: {0}", Environment.NewLine + ex.Message), "Error while parsing", MessageBoxButtons.OK, MessageBoxIcon.Error);
+            return;
+          }
+          try {
+            GenericConsumer.Load(instance);
+          }
+          catch (Exception ex) {
+            MessageBox.Show(String.Format("This problem does not support loading the instance {0}: {1}", Path.GetFileName(importTypeDialog.Path), Environment.NewLine + ex.Message), "Cannot load instance");
+          }
+        } else {
+          return;
+        }
+      } else {
+        base.importButton_Click(sender, e);
+      }
+    }
+  }
+}
Index: trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis.Views/3.3/DataAnalysisImportTypeDialog.Designer.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis.Views/3.3/DataAnalysisImportTypeDialog.Designer.cs	(revision 8876)
+++ trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis.Views/3.3/DataAnalysisImportTypeDialog.Designer.cs	(revision 8877)
@@ -1,3 +1,4 @@
-﻿namespace HeuristicLab.Problems.Instances.DataAnalysis.Views {
+﻿
+namespace HeuristicLab.Problems.Instances.DataAnalysis.Views {
   partial class DataAnalysisImportTypeDialog {
     /// <summary>
@@ -24,17 +25,35 @@
     /// </summary>
     private void InitializeComponent() {
+      this.components = new System.ComponentModel.Container();
+      System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(DataAnalysisImportTypeDialog));
       this.ShuffleDataCheckbox = new System.Windows.Forms.CheckBox();
       this.OkButton = new System.Windows.Forms.Button();
       this.TrainingTestTrackBar = new System.Windows.Forms.TrackBar();
-      this.TrainingTestGroupBox = new System.Windows.Forms.GroupBox();
       this.TestLabel = new System.Windows.Forms.Label();
       this.TrainingLabel = new System.Windows.Forms.Label();
       this.CancelButton = new System.Windows.Forms.Button();
-      this.openFileButton = new System.Windows.Forms.Button();
+      this.OpenFileButton = new System.Windows.Forms.Button();
       this.ProblemFileLabel = new System.Windows.Forms.Label();
       this.ProblemTextBox = new System.Windows.Forms.TextBox();
       this.openFileDialog = new System.Windows.Forms.OpenFileDialog();
+      this.DateTimeFormatComboBox = new System.Windows.Forms.ComboBox();
+      this.DecimalSeparatorComboBox = new System.Windows.Forms.ComboBox();
+      this.DateTimeFormatLabel = new System.Windows.Forms.Label();
+      this.DecimalSeperatorLabel = new System.Windows.Forms.Label();
+      this.SeparatorLabel = new System.Windows.Forms.Label();
+      this.SeparatorComboBox = new System.Windows.Forms.ComboBox();
+      this.CSVSettingsGroupBox = new System.Windows.Forms.GroupBox();
+      this.DateTimeFormatInfoLabel = new System.Windows.Forms.Label();
+      this.DecimalSeparatorInfoLabel = new System.Windows.Forms.Label();
+      this.SeparatorInfoLabel = new System.Windows.Forms.Label();
+      this.ProblemDataSettingsGroupBox = new System.Windows.Forms.GroupBox();
+      this.ErrorTextBox = new System.Windows.Forms.TextBox();
+      this.ShuffelInfoLabel = new System.Windows.Forms.Label();
+      this.PreviewLabel = new System.Windows.Forms.Label();
+      this.PreviewDatasetMatrix = new HeuristicLab.Data.Views.StringConvertibleMatrixView();
+      this.ToolTip = new System.Windows.Forms.ToolTip(this.components);
       ((System.ComponentModel.ISupportInitialize)(this.TrainingTestTrackBar)).BeginInit();
-      this.TrainingTestGroupBox.SuspendLayout();
+      this.CSVSettingsGroupBox.SuspendLayout();
+      this.ProblemDataSettingsGroupBox.SuspendLayout();
       this.SuspendLayout();
       // 
@@ -42,5 +61,6 @@
       // 
       this.ShuffleDataCheckbox.AutoSize = true;
-      this.ShuffleDataCheckbox.Location = new System.Drawing.Point(12, 38);
+      this.ShuffleDataCheckbox.CheckAlign = System.Drawing.ContentAlignment.MiddleRight;
+      this.ShuffleDataCheckbox.Location = new System.Drawing.Point(9, 20);
       this.ShuffleDataCheckbox.Name = "ShuffleDataCheckbox";
       this.ShuffleDataCheckbox.Size = new System.Drawing.Size(91, 17);
@@ -51,7 +71,8 @@
       // OkButton
       // 
+      this.OkButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
       this.OkButton.DialogResult = System.Windows.Forms.DialogResult.OK;
       this.OkButton.Enabled = false;
-      this.OkButton.Location = new System.Drawing.Point(61, 147);
+      this.OkButton.Location = new System.Drawing.Point(87, 407);
       this.OkButton.Name = "OkButton";
       this.OkButton.Size = new System.Drawing.Size(75, 23);
@@ -64,9 +85,9 @@
       this.TrainingTestTrackBar.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
                   | System.Windows.Forms.AnchorStyles.Right)));
-      this.TrainingTestTrackBar.Location = new System.Drawing.Point(6, 19);
+      this.TrainingTestTrackBar.Location = new System.Drawing.Point(6, 43);
       this.TrainingTestTrackBar.Maximum = 100;
       this.TrainingTestTrackBar.Minimum = 1;
       this.TrainingTestTrackBar.Name = "TrainingTestTrackBar";
-      this.TrainingTestTrackBar.Size = new System.Drawing.Size(303, 45);
+      this.TrainingTestTrackBar.Size = new System.Drawing.Size(435, 45);
       this.TrainingTestTrackBar.TabIndex = 4;
       this.TrainingTestTrackBar.TickStyle = System.Windows.Forms.TickStyle.None;
@@ -74,20 +95,9 @@
       this.TrainingTestTrackBar.ValueChanged += new System.EventHandler(this.TrainingTestTrackBar_ValueChanged);
       // 
-      // TrainingTestGroupBox
-      // 
-      this.TrainingTestGroupBox.Controls.Add(this.TestLabel);
-      this.TrainingTestGroupBox.Controls.Add(this.TrainingLabel);
-      this.TrainingTestGroupBox.Controls.Add(this.TrainingTestTrackBar);
-      this.TrainingTestGroupBox.Location = new System.Drawing.Point(12, 61);
-      this.TrainingTestGroupBox.Name = "TrainingTestGroupBox";
-      this.TrainingTestGroupBox.Size = new System.Drawing.Size(315, 80);
-      this.TrainingTestGroupBox.TabIndex = 5;
-      this.TrainingTestGroupBox.TabStop = false;
-      this.TrainingTestGroupBox.Text = "Training/Test";
-      // 
       // TestLabel
       // 
+      this.TestLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
       this.TestLabel.AutoSize = true;
-      this.TestLabel.Location = new System.Drawing.Point(188, 51);
+      this.TestLabel.Location = new System.Drawing.Point(303, 68);
       this.TestLabel.Name = "TestLabel";
       this.TestLabel.Size = new System.Drawing.Size(57, 13);
@@ -98,5 +108,5 @@
       // 
       this.TrainingLabel.AutoSize = true;
-      this.TrainingLabel.Location = new System.Drawing.Point(50, 51);
+      this.TrainingLabel.Location = new System.Drawing.Point(76, 68);
       this.TrainingLabel.Name = "TrainingLabel";
       this.TrainingLabel.Size = new System.Drawing.Size(74, 13);
@@ -106,6 +116,7 @@
       // CancelButton
       // 
+      this.CancelButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
       this.CancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel;
-      this.CancelButton.Location = new System.Drawing.Point(182, 147);
+      this.CancelButton.Location = new System.Drawing.Point(318, 407);
       this.CancelButton.Name = "CancelButton";
       this.CancelButton.Size = new System.Drawing.Size(75, 23);
@@ -114,17 +125,19 @@
       this.CancelButton.UseVisualStyleBackColor = true;
       // 
-      // openFileButton
-      // 
-      this.openFileButton.Location = new System.Drawing.Point(303, 12);
-      this.openFileButton.Name = "openFileButton";
-      this.openFileButton.Size = new System.Drawing.Size(24, 24);
-      this.openFileButton.TabIndex = 8;
-      this.openFileButton.UseVisualStyleBackColor = true;
-      this.openFileButton.Click += new System.EventHandler(this.openFileButton_Click);
+      // OpenFileButton
+      // 
+      this.OpenFileButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+      this.OpenFileButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.Open;
+      this.OpenFileButton.Location = new System.Drawing.Point(429, 3);
+      this.OpenFileButton.Name = "OpenFileButton";
+      this.OpenFileButton.Size = new System.Drawing.Size(24, 24);
+      this.OpenFileButton.TabIndex = 8;
+      this.OpenFileButton.UseVisualStyleBackColor = true;
+      this.OpenFileButton.Click += new System.EventHandler(this.OpenFileButtonClick);
       // 
       // ProblemFileLabel
       // 
       this.ProblemFileLabel.AutoSize = true;
-      this.ProblemFileLabel.Location = new System.Drawing.Point(12, 15);
+      this.ProblemFileLabel.Location = new System.Drawing.Point(18, 9);
       this.ProblemFileLabel.Name = "ProblemFileLabel";
       this.ProblemFileLabel.Size = new System.Drawing.Size(67, 13);
@@ -134,8 +147,10 @@
       // ProblemTextBox
       // 
-      this.ProblemTextBox.Location = new System.Drawing.Point(85, 12);
+      this.ProblemTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.ProblemTextBox.Location = new System.Drawing.Point(91, 6);
       this.ProblemTextBox.Name = "ProblemTextBox";
       this.ProblemTextBox.ReadOnly = true;
-      this.ProblemTextBox.Size = new System.Drawing.Size(212, 20);
+      this.ProblemTextBox.Size = new System.Drawing.Size(332, 20);
       this.ProblemTextBox.TabIndex = 9;
       // 
@@ -143,4 +158,183 @@
       // 
       this.openFileDialog.Filter = "CSV files (*.csv)|*.csv|Text files (*.txt)|*.txt|All files (*.*)|*.*";
+      // 
+      // DateTimeFormatComboBox
+      // 
+      this.DateTimeFormatComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.DateTimeFormatComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+      this.DateTimeFormatComboBox.FormattingEnabled = true;
+      this.DateTimeFormatComboBox.Location = new System.Drawing.Point(111, 73);
+      this.DateTimeFormatComboBox.Name = "DateTimeFormatComboBox";
+      this.DateTimeFormatComboBox.Size = new System.Drawing.Size(300, 21);
+      this.DateTimeFormatComboBox.TabIndex = 15;
+      this.DateTimeFormatComboBox.SelectionChangeCommitted += new System.EventHandler(this.CSVFormatComboBoxSelectionChangeCommitted);
+      // 
+      // DecimalSeparatorComboBox
+      // 
+      this.DecimalSeparatorComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.DecimalSeparatorComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+      this.DecimalSeparatorComboBox.FormattingEnabled = true;
+      this.DecimalSeparatorComboBox.Location = new System.Drawing.Point(111, 46);
+      this.DecimalSeparatorComboBox.Name = "DecimalSeparatorComboBox";
+      this.DecimalSeparatorComboBox.Size = new System.Drawing.Size(300, 21);
+      this.DecimalSeparatorComboBox.TabIndex = 14;
+      this.DecimalSeparatorComboBox.SelectionChangeCommitted += new System.EventHandler(this.CSVFormatComboBoxSelectionChangeCommitted);
+      // 
+      // DateTimeFormatLabel
+      // 
+      this.DateTimeFormatLabel.AutoSize = true;
+      this.DateTimeFormatLabel.Location = new System.Drawing.Point(6, 76);
+      this.DateTimeFormatLabel.Name = "DateTimeFormatLabel";
+      this.DateTimeFormatLabel.Size = new System.Drawing.Size(91, 13);
+      this.DateTimeFormatLabel.TabIndex = 13;
+      this.DateTimeFormatLabel.Text = "DateTime Format:";
+      // 
+      // DecimalSeperatorLabel
+      // 
+      this.DecimalSeperatorLabel.AutoSize = true;
+      this.DecimalSeperatorLabel.Location = new System.Drawing.Point(6, 49);
+      this.DecimalSeperatorLabel.Name = "DecimalSeperatorLabel";
+      this.DecimalSeperatorLabel.Size = new System.Drawing.Size(97, 13);
+      this.DecimalSeperatorLabel.TabIndex = 12;
+      this.DecimalSeperatorLabel.Text = "Decimal Separator:";
+      // 
+      // SeparatorLabel
+      // 
+      this.SeparatorLabel.AutoSize = true;
+      this.SeparatorLabel.Location = new System.Drawing.Point(6, 22);
+      this.SeparatorLabel.Name = "SeparatorLabel";
+      this.SeparatorLabel.Size = new System.Drawing.Size(56, 13);
+      this.SeparatorLabel.TabIndex = 11;
+      this.SeparatorLabel.Text = "Separator:";
+      // 
+      // SeparatorComboBox
+      // 
+      this.SeparatorComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.SeparatorComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+      this.SeparatorComboBox.FormattingEnabled = true;
+      this.SeparatorComboBox.Location = new System.Drawing.Point(111, 19);
+      this.SeparatorComboBox.Name = "SeparatorComboBox";
+      this.SeparatorComboBox.Size = new System.Drawing.Size(300, 21);
+      this.SeparatorComboBox.TabIndex = 10;
+      this.SeparatorComboBox.SelectionChangeCommitted += new System.EventHandler(this.CSVFormatComboBoxSelectionChangeCommitted);
+      // 
+      // CSVSettingsGroupBox
+      // 
+      this.CSVSettingsGroupBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.CSVSettingsGroupBox.Controls.Add(this.DateTimeFormatInfoLabel);
+      this.CSVSettingsGroupBox.Controls.Add(this.DecimalSeparatorInfoLabel);
+      this.CSVSettingsGroupBox.Controls.Add(this.SeparatorInfoLabel);
+      this.CSVSettingsGroupBox.Controls.Add(this.SeparatorComboBox);
+      this.CSVSettingsGroupBox.Controls.Add(this.DateTimeFormatComboBox);
+      this.CSVSettingsGroupBox.Controls.Add(this.SeparatorLabel);
+      this.CSVSettingsGroupBox.Controls.Add(this.DecimalSeparatorComboBox);
+      this.CSVSettingsGroupBox.Controls.Add(this.DecimalSeperatorLabel);
+      this.CSVSettingsGroupBox.Controls.Add(this.DateTimeFormatLabel);
+      this.CSVSettingsGroupBox.Location = new System.Drawing.Point(12, 32);
+      this.CSVSettingsGroupBox.Name = "CSVSettingsGroupBox";
+      this.CSVSettingsGroupBox.Size = new System.Drawing.Size(447, 105);
+      this.CSVSettingsGroupBox.TabIndex = 16;
+      this.CSVSettingsGroupBox.TabStop = false;
+      this.CSVSettingsGroupBox.Text = "CSV Settings";
+      // 
+      // DateTimeFormatInfoLabel
+      // 
+      this.DateTimeFormatInfoLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+      this.DateTimeFormatInfoLabel.Location = new System.Drawing.Point(421, 76);
+      this.DateTimeFormatInfoLabel.Name = "DateTime Format Info";
+      this.DateTimeFormatInfoLabel.Size = new System.Drawing.Size(16, 16);
+      this.DateTimeFormatInfoLabel.TabIndex = 23;
+      this.DateTimeFormatInfoLabel.Tag = "Select the date time format used in the csv file";
+      this.DateTimeFormatInfoLabel.Image = HeuristicLab.Common.Resources.VSImageLibrary.Information;
+      this.DateTimeFormatInfoLabel.DoubleClick += new System.EventHandler(this.ControlToolTip_DoubleClick);
+      // 
+      // DecimalSeparatorInfoLabel
+      // 
+      this.DecimalSeparatorInfoLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+      this.DecimalSeparatorInfoLabel.Location = new System.Drawing.Point(421, 49);
+      this.DecimalSeparatorInfoLabel.Name = "Decimal Separator Info";
+      this.DecimalSeparatorInfoLabel.Size = new System.Drawing.Size(16, 16);
+      this.DecimalSeparatorInfoLabel.TabIndex = 22;
+      this.DecimalSeparatorInfoLabel.Tag = "Select the decimal separator used to for double values";
+      this.DecimalSeparatorInfoLabel.Image = HeuristicLab.Common.Resources.VSImageLibrary.Information;
+      this.DecimalSeparatorInfoLabel.DoubleClick += new System.EventHandler(this.ControlToolTip_DoubleClick);
+      // 
+      // SeparatorInfoLabel
+      // 
+      this.SeparatorInfoLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+      this.SeparatorInfoLabel.Location = new System.Drawing.Point(421, 22);
+      this.SeparatorInfoLabel.Name = "Separator Info";
+      this.SeparatorInfoLabel.Size = new System.Drawing.Size(16, 16);
+      this.SeparatorInfoLabel.TabIndex = 21;
+      this.SeparatorInfoLabel.Tag = "Select the separator used to separate columns in the csv file.";
+      this.SeparatorInfoLabel.Image = HeuristicLab.Common.Resources.VSImageLibrary.Information;
+      this.SeparatorInfoLabel.DoubleClick += new System.EventHandler(this.ControlToolTip_DoubleClick);
+      // 
+      // ProblemDataSettingsGroupBox
+      // 
+      this.ProblemDataSettingsGroupBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.ProblemDataSettingsGroupBox.Controls.Add(this.ErrorTextBox);
+      this.ProblemDataSettingsGroupBox.Controls.Add(this.ShuffelInfoLabel);
+      this.ProblemDataSettingsGroupBox.Controls.Add(this.PreviewLabel);
+      this.ProblemDataSettingsGroupBox.Controls.Add(this.TestLabel);
+      this.ProblemDataSettingsGroupBox.Controls.Add(this.PreviewDatasetMatrix);
+      this.ProblemDataSettingsGroupBox.Controls.Add(this.TrainingLabel);
+      this.ProblemDataSettingsGroupBox.Controls.Add(this.TrainingTestTrackBar);
+      this.ProblemDataSettingsGroupBox.Controls.Add(this.ShuffleDataCheckbox);
+      this.ProblemDataSettingsGroupBox.Location = new System.Drawing.Point(12, 143);
+      this.ProblemDataSettingsGroupBox.Name = "ProblemDataSettingsGroupBox";
+      this.ProblemDataSettingsGroupBox.Size = new System.Drawing.Size(447, 258);
+      this.ProblemDataSettingsGroupBox.TabIndex = 17;
+      this.ProblemDataSettingsGroupBox.TabStop = false;
+      this.ProblemDataSettingsGroupBox.Text = "ProblemData Settings";
+      // 
+      // ErrorTextBox
+      // 
+      this.ErrorTextBox.Location = new System.Drawing.Point(6, 15);
+      this.ErrorTextBox.Multiline = true;
+      this.ErrorTextBox.Name = "ErrorTextBox";
+      this.ErrorTextBox.Size = new System.Drawing.Size(435, 73);
+      this.ErrorTextBox.TabIndex = 0;
+      this.ErrorTextBox.Visible = false;
+      // 
+      // ShuffelInfoLabel
+      // 
+      this.ShuffelInfoLabel.Location = new System.Drawing.Point(111, 20);
+      this.ShuffelInfoLabel.Name = "Shuffle Info";
+      this.ShuffelInfoLabel.Size = new System.Drawing.Size(16, 16);
+      this.ShuffelInfoLabel.TabIndex = 8;
+      this.ShuffelInfoLabel.Tag = "Check, if the importat data should be shuffled";
+      this.ShuffelInfoLabel.Image = HeuristicLab.Common.Resources.VSImageLibrary.Information;
+      this.ShuffelInfoLabel.DoubleClick += new System.EventHandler(this.ControlToolTip_DoubleClick);
+      // 
+      // PreviewLabel
+      // 
+      this.PreviewLabel.AutoSize = true;
+      this.PreviewLabel.Location = new System.Drawing.Point(9, 89);
+      this.PreviewLabel.Name = "PreviewLabel";
+      this.PreviewLabel.Size = new System.Drawing.Size(45, 13);
+      this.PreviewLabel.TabIndex = 7;
+      this.PreviewLabel.Text = "Preview";
+      // 
+      // PreviewDatasetMatrix
+      // 
+      this.PreviewDatasetMatrix.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.PreviewDatasetMatrix.Caption = "Dataset Preview";
+      this.PreviewDatasetMatrix.Content = null;
+      this.PreviewDatasetMatrix.Location = new System.Drawing.Point(6, 108);
+      this.PreviewDatasetMatrix.Name = "PreviewDatasetMatrix";
+      this.PreviewDatasetMatrix.ReadOnly = true;
+      this.PreviewDatasetMatrix.ShowRowsAndColumnsTextBox = false;
+      this.PreviewDatasetMatrix.ShowStatisticalInformation = false;
+      this.PreviewDatasetMatrix.Size = new System.Drawing.Size(435, 144);
+      this.PreviewDatasetMatrix.TabIndex = 0;
       // 
       // DataAnalysisImportTypeDialog
@@ -149,14 +343,13 @@
       this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
       this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-      this.ClientSize = new System.Drawing.Size(339, 179);
+      this.ClientSize = new System.Drawing.Size(471, 442);
       this.ControlBox = false;
+      this.Controls.Add(this.ProblemDataSettingsGroupBox);
+      this.Controls.Add(this.CSVSettingsGroupBox);
       this.Controls.Add(this.ProblemTextBox);
-      this.Controls.Add(this.openFileButton);
+      this.Controls.Add(this.OpenFileButton);
       this.Controls.Add(this.ProblemFileLabel);
       this.Controls.Add(this.CancelButton);
       this.Controls.Add(this.OkButton);
-      this.Controls.Add(this.ShuffleDataCheckbox);
-      this.Controls.Add(this.TrainingTestGroupBox);
-      this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
       this.MaximizeBox = false;
       this.MinimizeBox = false;
@@ -166,6 +359,8 @@
       this.Text = "CSV Import";
       ((System.ComponentModel.ISupportInitialize)(this.TrainingTestTrackBar)).EndInit();
-      this.TrainingTestGroupBox.ResumeLayout(false);
-      this.TrainingTestGroupBox.PerformLayout();
+      this.CSVSettingsGroupBox.ResumeLayout(false);
+      this.CSVSettingsGroupBox.PerformLayout();
+      this.ProblemDataSettingsGroupBox.ResumeLayout(false);
+      this.ProblemDataSettingsGroupBox.PerformLayout();
       this.ResumeLayout(false);
       this.PerformLayout();
@@ -178,5 +373,4 @@
     protected System.Windows.Forms.Button OkButton;
     protected System.Windows.Forms.TrackBar TrainingTestTrackBar;
-    protected System.Windows.Forms.GroupBox TrainingTestGroupBox;
     protected System.Windows.Forms.Label TestLabel;
     protected System.Windows.Forms.Label TrainingLabel;
@@ -184,7 +378,22 @@
     protected System.Windows.Forms.OpenFileDialog openFileDialog;
     protected System.Windows.Forms.Label ProblemFileLabel;
-    protected System.Windows.Forms.Button openFileButton;
+    protected System.Windows.Forms.Button OpenFileButton;
     protected System.Windows.Forms.TextBox ProblemTextBox;
-
+    protected System.Windows.Forms.ComboBox DateTimeFormatComboBox;
+    protected System.Windows.Forms.ComboBox DecimalSeparatorComboBox;
+    protected System.Windows.Forms.Label DateTimeFormatLabel;
+    protected System.Windows.Forms.Label DecimalSeperatorLabel;
+    protected System.Windows.Forms.Label SeparatorLabel;
+    protected System.Windows.Forms.ComboBox SeparatorComboBox;
+    protected System.Windows.Forms.GroupBox CSVSettingsGroupBox;
+    protected System.Windows.Forms.GroupBox ProblemDataSettingsGroupBox;
+    protected System.Windows.Forms.TextBox ErrorTextBox;
+    protected HeuristicLab.Data.Views.StringConvertibleMatrixView PreviewDatasetMatrix;
+    protected System.Windows.Forms.Label PreviewLabel;
+    protected System.Windows.Forms.Label SeparatorInfoLabel;
+    protected System.Windows.Forms.Label DateTimeFormatInfoLabel;
+    protected System.Windows.Forms.Label DecimalSeparatorInfoLabel;
+    protected System.Windows.Forms.Label ShuffelInfoLabel;
+    protected System.Windows.Forms.ToolTip ToolTip;
   }
 }
Index: trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis.Views/3.3/DataAnalysisImportTypeDialog.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis.Views/3.3/DataAnalysisImportTypeDialog.cs	(revision 8876)
+++ trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis.Views/3.3/DataAnalysisImportTypeDialog.cs	(revision 8877)
@@ -20,8 +20,33 @@
 #endregion
 
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Globalization;
+using System.Linq;
 using System.Windows.Forms;
+using HeuristicLab.Core.Views;
+using HeuristicLab.Problems.DataAnalysis;
 
 namespace HeuristicLab.Problems.Instances.DataAnalysis.Views {
   public partial class DataAnalysisImportTypeDialog : Form {
+
+    public static readonly BindingList<KeyValuePair<DateTimeFormatInfo, string>> dateTimeFormats = new BindingList<KeyValuePair<DateTimeFormatInfo, string>>{
+      new KeyValuePair<DateTimeFormatInfo, string>(DateTimeFormatInfo.GetInstance(new CultureInfo("de-DE")), "dd/mm/yyyy hh:MM:ss" ),
+      new KeyValuePair<DateTimeFormatInfo, string>(DateTimeFormatInfo.InvariantInfo, "mm/dd/yyyy hh:MM:ss" ),
+      new KeyValuePair<DateTimeFormatInfo, string>(DateTimeFormatInfo.InvariantInfo, "yyyy/mm/dd hh:MM:ss" ),
+      new KeyValuePair<DateTimeFormatInfo, string>(DateTimeFormatInfo.InvariantInfo, "mm/yyyy/dd hh:MM:ss" )
+    };
+
+    public static readonly BindingList<KeyValuePair<char, string>> POSSIBLE_SEPARATORS = new BindingList<KeyValuePair<char, string>>{
+      new KeyValuePair<char, string>(',', ", (Comma)" ),
+      new KeyValuePair<char, string>(';', "; (Semicolon)" ),
+      new KeyValuePair<char, string>('\t', "\\t (Tab)")
+    };
+
+    public static readonly BindingList<KeyValuePair<NumberFormatInfo, string>> POSSIBLE_DECIMAL_SEPARATORS = new BindingList<KeyValuePair<NumberFormatInfo, string>>{
+      new KeyValuePair<NumberFormatInfo, string>(NumberFormatInfo.InvariantInfo, ". (Period)" ),
+      new KeyValuePair<NumberFormatInfo, string>(NumberFormatInfo.GetInstance(new CultureInfo("de-DE")), ", (Comma)" )      
+    };
 
     public string Path {
@@ -38,6 +63,30 @@
     }
 
+    public DataAnalysisCSVFormat CSVFormat {
+      get {
+        return new DataAnalysisCSVFormat() {
+          Separator = (char)SeparatorComboBox.SelectedValue,
+          NumberFormatInfo = (NumberFormatInfo)DecimalSeparatorComboBox.SelectedValue,
+          DateTimeFormatInfo = (DateTimeFormatInfo)DateTimeFormatComboBox.SelectedValue
+        };
+      }
+    }
+
     public DataAnalysisImportTypeDialog() {
       InitializeComponent();
+      ToolTip.SetToolTip(SeparatorInfoLabel, (string)SeparatorInfoLabel.Tag);
+      ToolTip.SetToolTip(DecimalSeparatorInfoLabel, (string)DecimalSeparatorInfoLabel.Tag);
+      ToolTip.SetToolTip(DateTimeFormatInfoLabel, (string)DateTimeFormatInfoLabel.Tag);
+      ToolTip.SetToolTip(ShuffelInfoLabel, (string)ShuffelInfoLabel.Tag);
+
+      SeparatorComboBox.DataSource = POSSIBLE_SEPARATORS;
+      SeparatorComboBox.ValueMember = "Key";
+      SeparatorComboBox.DisplayMember = "Value";
+      DecimalSeparatorComboBox.DataSource = POSSIBLE_DECIMAL_SEPARATORS;
+      DecimalSeparatorComboBox.ValueMember = "Key";
+      DecimalSeparatorComboBox.DisplayMember = "Value";
+      DateTimeFormatComboBox.DataSource = dateTimeFormats;
+      DateTimeFormatComboBox.ValueMember = "Key";
+      DateTimeFormatComboBox.DisplayMember = "Value";
     }
 
@@ -47,8 +96,69 @@
     }
 
-    private void openFileButton_Click(object sender, System.EventArgs e) {
-      if (openFileDialog.ShowDialog(this) == DialogResult.OK) {
-        ProblemTextBox.Text = openFileDialog.FileName;
+    protected virtual void OpenFileButtonClick(object sender, System.EventArgs e) {
+      if (openFileDialog.ShowDialog(this) != DialogResult.OK) return;
+
+      ProblemTextBox.Text = openFileDialog.FileName;
+      ParseCSVFile();
+    }
+
+    protected virtual void CSVFormatComboBoxSelectionChangeCommitted(object sender, EventArgs e) {
+      if (string.IsNullOrEmpty(ProblemTextBox.Text)) return;
+
+      ParseCSVFile();
+    }
+
+    protected void ParseCSVFile() {
+      PreviewDatasetMatrix.Content = null;
+      try {
+        TableFileParser csvParser = new TableFileParser();
+        csvParser.Parse(ProblemTextBox.Text,
+                        (NumberFormatInfo)DecimalSeparatorComboBox.SelectedValue,
+                        (DateTimeFormatInfo)DateTimeFormatComboBox.SelectedValue,
+                        (char)SeparatorComboBox.SelectedValue);
+        IEnumerable<string> variableNamesWithType = GetVariableNamesWithType(csvParser);
+        PreviewDatasetMatrix.Content = new Dataset(variableNamesWithType, csvParser.Values);
+
+        CheckAdditionalConstraints(csvParser);
+
+        ErrorTextBox.Text = String.Empty;
+        ErrorTextBox.Visible = false;
         OkButton.Enabled = true;
+      }
+      catch (Exception ex) {
+        OkButton.Enabled = false;
+        ErrorTextBox.Text = ex.Message;
+        ErrorTextBox.Visible = true;
+      }
+    }
+
+    protected virtual void CheckAdditionalConstraints(TableFileParser csvParser) {
+      if (!csvParser.Values.Any(x => x is List<double>)) {
+        throw new ArgumentException("No double column could be found!");
+      }
+    }
+
+    private IEnumerable<string> GetVariableNamesWithType(TableFileParser csvParser) {
+      IList<string> variableNamesWithType = csvParser.VariableNames.ToList();
+      for (int i = 0; i < csvParser.Values.Count; i++) {
+        if (csvParser.Values[i] is List<double>) {
+          variableNamesWithType[i] += " (Double)";
+        } else if (csvParser.Values[i] is List<string>) {
+          variableNamesWithType[i] += " (String)";
+        } else if (csvParser.Values[i] is List<DateTime>) {
+          variableNamesWithType[i] += " (DateTime)";
+        } else {
+          throw new ArgumentException("The variable values must be of type List<double>, List<string> or List<DateTime>");
+        }
+      }
+      return variableNamesWithType;
+    }
+
+    protected void ControlToolTip_DoubleClick(object sender, EventArgs e) {
+      Control control = sender as Control;
+      if (control != null) {
+        using (TextDialog dialog = new TextDialog(control.Name, (string)control.Tag, true)) {
+          dialog.ShowDialog(this);
+        }
       }
     }
Index: trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis.Views/3.3/DataAnalysisInstanceConsumerView.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis.Views/3.3/DataAnalysisInstanceConsumerView.cs	(revision 8876)
+++ trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis.Views/3.3/DataAnalysisInstanceConsumerView.cs	(revision 8877)
@@ -30,6 +30,4 @@
   [View("DataAnalysis InstanceProvider View")]
   [Content(typeof(IProblemInstanceConsumer<IDataAnalysisProblemData>), IsDefaultView = true)]
-  [Content(typeof(IProblemInstanceConsumer<IClassificationProblemData>), IsDefaultView = true)]
-  [Content(typeof(IProblemInstanceConsumer<IRegressionProblemData>), IsDefaultView = true)]
   [Content(typeof(IProblemInstanceConsumer<IClusteringProblemData>), IsDefaultView = true)]
   public partial class DataAnalysisInstanceConsumerView<T> : ProblemInstanceConsumerViewGeneric<T>
@@ -42,8 +40,9 @@
     public DataAnalysisInstanceConsumerView() {
       InitializeComponent();
+
     }
 
     protected override void importButton_Click(object sender, EventArgs e) {
-      var provider = SelectedProvider as DataAnalysisInstanceProvider<T>;
+      var provider = SelectedProvider as DataAnalysisInstanceProvider<T, DataAnalysisImportType>;
       if (provider != null) {
         DataAnalysisImportTypeDialog importTypeDialog = new DataAnalysisImportTypeDialog();
@@ -51,5 +50,5 @@
           T instance = default(T);
           try {
-            instance = provider.ImportData(importTypeDialog.Path, importTypeDialog.ImportType);
+            instance = provider.ImportData(importTypeDialog.Path, importTypeDialog.ImportType, importTypeDialog.CSVFormat);
 
           }
Index: trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis.Views/3.3/HeuristicLab.Problems.Instances.DataAnalysis.Views-3.3.csproj
===================================================================
--- trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis.Views/3.3/HeuristicLab.Problems.Instances.DataAnalysis.Views-3.3.csproj	(revision 8876)
+++ trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis.Views/3.3/HeuristicLab.Problems.Instances.DataAnalysis.Views-3.3.csproj	(revision 8877)
@@ -81,4 +81,16 @@
   </ItemGroup>
   <ItemGroup>
+    <Compile Include="ClassificationImportTypeDialog.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="ClassificationImportTypeDialog.Designer.cs">
+      <DependentUpon>ClassificationImportTypeDialog.cs</DependentUpon>
+    </Compile>
+    <Compile Include="ClassificationInstanceConsumerView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="ClassificationInstanceConsumerView.Designer.cs">
+      <DependentUpon>ClassificationInstanceConsumerView.cs</DependentUpon>
+    </Compile>
     <Compile Include="DataAnalysisImportTypeDialog.cs">
       <SubType>Form</SubType>
@@ -94,4 +106,16 @@
     </Compile>
     <Compile Include="Plugin.cs" />
+    <Compile Include="RegressionImportTypeDialog.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="RegressionImportTypeDialog.Designer.cs">
+      <DependentUpon>RegressionImportTypeDialog.cs</DependentUpon>
+    </Compile>
+    <Compile Include="RegressionInstanceConsumerView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="RegressionInstanceConsumerView.Designer.cs">
+      <DependentUpon>RegressionInstanceConsumerView.cs</DependentUpon>
+    </Compile>
     <None Include="HeuristicLab.snk" />
     <None Include="Plugin.cs.frame" />
@@ -100,11 +124,23 @@
   </ItemGroup>
   <ItemGroup>
+    <ProjectReference Include="..\..\HeuristicLab.Common.Resources\3.3\HeuristicLab.Common.Resources-3.3.csproj">
+      <Project>{0e27a536-1c4a-4624-a65e-dc4f4f23e3e1}</Project>
+      <Name>HeuristicLab.Common.Resources-3.3</Name>
+    </ProjectReference>
     <ProjectReference Include="..\..\HeuristicLab.Common\3.3\HeuristicLab.Common-3.3.csproj">
       <Project>{A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C}</Project>
       <Name>HeuristicLab.Common-3.3</Name>
     </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Core.Views\3.3\HeuristicLab.Core.Views-3.3.csproj">
+      <Project>{e226881d-315f-423d-b419-a766fe0d8685}</Project>
+      <Name>HeuristicLab.Core.Views-3.3</Name>
+    </ProjectReference>
     <ProjectReference Include="..\..\HeuristicLab.Core\3.3\HeuristicLab.Core-3.3.csproj">
       <Project>{C36BD924-A541-4A00-AFA8-41701378DDC5}</Project>
       <Name>HeuristicLab.Core-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Data.Views\3.3\HeuristicLab.Data.Views-3.3.csproj">
+      <Project>{72104a0b-90e7-42f3-9abe-9bbbadd4b943}</Project>
+      <Name>HeuristicLab.Data.Views-3.3</Name>
     </ProjectReference>
     <ProjectReference Include="..\..\HeuristicLab.Data\3.3\HeuristicLab.Data-3.3.csproj">
Index: trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis.Views/3.3/Plugin.cs.frame
===================================================================
--- trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis.Views/3.3/Plugin.cs.frame	(revision 8876)
+++ trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis.Views/3.3/Plugin.cs.frame	(revision 8877)
@@ -25,5 +25,10 @@
   [Plugin("HeuristicLab.Problems.Instances.DataAnalysis.Views", "3.3.7.$WCREV$")]
   [PluginFile("HeuristicLab.Problems.Instances.DataAnalysis.Views-3.3.dll", PluginFileType.Assembly)]
+  [PluginDependency("HeuristicLab.Common.Resources", "3.3")]
+  [PluginDependency("HeuristicLab.Core.Views", "3.3")]
+  [PluginDependency("HeuristicLab.Data", "3.3")]
+  [PluginDependency("HeuristicLab.Data.Views", "3.3")]
   [PluginDependency("HeuristicLab.MainForm", "3.3")]
+  [PluginDependency("HeuristicLab.MainForm.WindowsForms", "3.3")]
   [PluginDependency("HeuristicLab.Problems.DataAnalysis", "3.4")]
   [PluginDependency("HeuristicLab.Problems.Instances", "3.3")]
Index: trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis.Views/3.3/RegressionImportTypeDialog.Designer.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis.Views/3.3/RegressionImportTypeDialog.Designer.cs	(revision 8877)
+++ trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis.Views/3.3/RegressionImportTypeDialog.Designer.cs	(revision 8877)
@@ -0,0 +1,107 @@
+﻿namespace HeuristicLab.Problems.Instances.DataAnalysis.Views {
+  partial class RegressionImportTypeDialog {
+    /// <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 Windows Form 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.TargetVariableComboBox = new System.Windows.Forms.ComboBox();
+      this.TargetVariableLabel = new System.Windows.Forms.Label();
+      this.TargetVariableInfoLabel = new System.Windows.Forms.Label();
+      ((System.ComponentModel.ISupportInitialize)(this.TrainingTestTrackBar)).BeginInit();
+      this.CSVSettingsGroupBox.SuspendLayout();
+      this.ProblemDataSettingsGroupBox.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // ProblemDataSettingsGroupBox
+      // 
+      this.ProblemDataSettingsGroupBox.Controls.Add(this.TargetVariableInfoLabel);
+      this.ProblemDataSettingsGroupBox.Controls.Add(this.TargetVariableLabel);
+      this.ProblemDataSettingsGroupBox.Controls.Add(this.TargetVariableComboBox);
+      this.ProblemDataSettingsGroupBox.Controls.SetChildIndex(this.PreviewLabel, 0);
+      this.ProblemDataSettingsGroupBox.Controls.SetChildIndex(this.ShuffelInfoLabel, 0);
+      this.ProblemDataSettingsGroupBox.Controls.SetChildIndex(this.TargetVariableComboBox, 0);
+      this.ProblemDataSettingsGroupBox.Controls.SetChildIndex(this.ShuffleDataCheckbox, 0);
+      this.ProblemDataSettingsGroupBox.Controls.SetChildIndex(this.TargetVariableLabel, 0);
+      this.ProblemDataSettingsGroupBox.Controls.SetChildIndex(this.TargetVariableInfoLabel, 0);
+      this.ProblemDataSettingsGroupBox.Controls.SetChildIndex(this.TrainingTestTrackBar, 0);
+      this.ProblemDataSettingsGroupBox.Controls.SetChildIndex(this.TrainingLabel, 0);
+      this.ProblemDataSettingsGroupBox.Controls.SetChildIndex(this.PreviewDatasetMatrix, 0);
+      this.ProblemDataSettingsGroupBox.Controls.SetChildIndex(this.TestLabel, 0);
+      this.ProblemDataSettingsGroupBox.Controls.SetChildIndex(this.ErrorTextBox, 0);
+      // 
+      // TargetVariableComboBox
+      // 
+      this.TargetVariableComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.TargetVariableComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+      this.TargetVariableComboBox.FormattingEnabled = true;
+      this.TargetVariableComboBox.Location = new System.Drawing.Point(230, 19);
+      this.TargetVariableComboBox.Name = "TargetVariableComboBox";
+      this.TargetVariableComboBox.Size = new System.Drawing.Size(181, 21);
+      this.TargetVariableComboBox.TabIndex = 10;
+      // 
+      // TargetVariableLabel
+      // 
+      this.TargetVariableLabel.AutoSize = true;
+      this.TargetVariableLabel.Location = new System.Drawing.Point(142, 22);
+      this.TargetVariableLabel.Name = "TargetVariableLabel";
+      this.TargetVariableLabel.Size = new System.Drawing.Size(82, 13);
+      this.TargetVariableLabel.TabIndex = 20;
+      this.TargetVariableLabel.Text = "Target Variable:";
+      // 
+      // TargetVariableinfoLabel
+      // 
+      this.TargetVariableInfoLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+      this.TargetVariableInfoLabel.Location = new System.Drawing.Point(421, 22);
+      this.TargetVariableInfoLabel.Name = "Target Variable Info";
+      this.TargetVariableInfoLabel.Size = new System.Drawing.Size(16, 16);
+      this.TargetVariableInfoLabel.TabIndex = 21;
+      this.TargetVariableInfoLabel.Tag = "Select the target variable of the csv file.";
+      this.TargetVariableInfoLabel.Image = HeuristicLab.Common.Resources.VSImageLibrary.Information;
+      this.TargetVariableInfoLabel.DoubleClick += new System.EventHandler(this.ControlToolTip_DoubleClick);
+      // 
+      // RegressionImportTypeDialog
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.ClientSize = new System.Drawing.Size(471, 442);
+      this.Name = "RegressionImportTypeDialog";
+      this.Text = "Classification CSV Import";
+      ((System.ComponentModel.ISupportInitialize)(this.TrainingTestTrackBar)).EndInit();
+      this.CSVSettingsGroupBox.ResumeLayout(false);
+      this.CSVSettingsGroupBox.PerformLayout();
+      this.ProblemDataSettingsGroupBox.ResumeLayout(false);
+      this.ProblemDataSettingsGroupBox.PerformLayout();
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.ComboBox TargetVariableComboBox;
+    private System.Windows.Forms.Label TargetVariableLabel;
+    protected System.Windows.Forms.Label TargetVariableInfoLabel;
+
+
+  }
+}
Index: trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis.Views/3.3/RegressionImportTypeDialog.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis.Views/3.3/RegressionImportTypeDialog.cs	(revision 8877)
+++ trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis.Views/3.3/RegressionImportTypeDialog.cs	(revision 8877)
@@ -0,0 +1,58 @@
+﻿#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.Linq;
+using HeuristicLab.Problems.DataAnalysis;
+
+namespace HeuristicLab.Problems.Instances.DataAnalysis.Views {
+
+  public partial class RegressionImportTypeDialog : DataAnalysisImportTypeDialog {
+    public new RegressionImportType ImportType {
+      get {
+        return new RegressionImportType() {
+          Shuffle = ShuffleDataCheckbox.Checked,
+          Training = TrainingTestTrackBar.Value,
+          TargetVariable = (String)TargetVariableComboBox.SelectedValue
+        };
+      }
+    }
+
+    public RegressionImportTypeDialog() {
+      InitializeComponent();
+
+      ToolTip.SetToolTip(TargetVariableInfoLabel, (string)TargetVariableInfoLabel.Tag);
+    }
+
+    protected override void CheckAdditionalConstraints(TableFileParser csvParser) {
+      base.CheckAdditionalConstraints(csvParser);
+      SetPossibleTargetVariables();
+    }
+
+    protected void SetPossibleTargetVariables() {
+      var dataset = PreviewDatasetMatrix.Content as Dataset;
+      if (dataset != null) {
+        // Remove " (Double)" at the end of the variable name (last 9 chars)
+        TargetVariableComboBox.DataSource = dataset.DoubleVariables.Select(x => x.Substring(0, x.Length - 9)).ToList();
+      }
+    }
+  }
+}
Index: trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis.Views/3.3/RegressionInstanceConsumerView.Designer.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis.Views/3.3/RegressionInstanceConsumerView.Designer.cs	(revision 8877)
+++ trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis.Views/3.3/RegressionInstanceConsumerView.Designer.cs	(revision 8877)
@@ -0,0 +1,32 @@
+﻿namespace HeuristicLab.Problems.Instances.DataAnalysis.Views {
+  partial class RegressionInstanceConsumerView {
+    /// <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() {
+      components = new System.ComponentModel.Container();
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
+    }
+
+    #endregion
+  }
+}
Index: trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis.Views/3.3/RegressionInstanceConsumerView.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis.Views/3.3/RegressionInstanceConsumerView.cs	(revision 8877)
+++ trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis.Views/3.3/RegressionInstanceConsumerView.cs	(revision 8877)
@@ -0,0 +1,68 @@
+﻿#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.IO;
+using System.Windows.Forms;
+using HeuristicLab.MainForm;
+using HeuristicLab.Problems.DataAnalysis;
+
+namespace HeuristicLab.Problems.Instances.DataAnalysis.Views {
+  [View("Regression InstanceProvider View")]
+  [Content(typeof(IProblemInstanceConsumer<IRegressionProblemData>), IsDefaultView = true)]
+  public partial class RegressionInstanceConsumerView : DataAnalysisInstanceConsumerView<IRegressionProblemData> {
+    public new IProblemInstanceConsumer<IRegressionProblemData> Content {
+      get { return (IProblemInstanceConsumer<IRegressionProblemData>)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public RegressionInstanceConsumerView() {
+      InitializeComponent();
+    }
+
+    protected override void importButton_Click(object sender, EventArgs e) {
+      var provider = SelectedProvider as RegressionInstanceProvider;
+      if (provider != null) {
+        RegressionImportTypeDialog importTypeDialog = new RegressionImportTypeDialog();
+        if (importTypeDialog.ShowDialog() == DialogResult.OK) {
+          IRegressionProblemData instance = null;
+          try {
+            instance = provider.ImportData(importTypeDialog.Path, importTypeDialog.ImportType, importTypeDialog.CSVFormat);
+          }
+          catch (Exception ex) {
+            MessageBox.Show(String.Format("There was an error parsing the file: {0}", Environment.NewLine + ex.Message), "Error while parsing", MessageBoxButtons.OK, MessageBoxIcon.Error);
+            return;
+          }
+          try {
+            GenericConsumer.Load(instance);
+          }
+          catch (Exception ex) {
+            MessageBox.Show(String.Format("This problem does not support loading the instance {0}: {1}", Path.GetFileName(importTypeDialog.Path), Environment.NewLine + ex.Message), "Cannot load instance");
+          }
+        } else {
+          return;
+        }
+      } else {
+        base.importButton_Click(sender, e);
+      }
+    }
+  }
+}
Index: trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Classification/CSV/ClassifiactionCSVInstanceProvider.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Classification/CSV/ClassifiactionCSVInstanceProvider.cs	(revision 8876)
+++ trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Classification/CSV/ClassifiactionCSVInstanceProvider.cs	(revision 8877)
@@ -23,8 +23,6 @@
 using System.Collections;
 using System.Collections.Generic;
-using System.Globalization;
 using System.IO;
 using System.Linq;
-using System.Text;
 using HeuristicLab.Common;
 using HeuristicLab.Problems.DataAnalysis;
@@ -76,5 +74,5 @@
         }
       } else {
-        allowedInputVars.AddRange(dataset.DoubleVariables.Where(x => x.Equals(targetVar)));
+        allowedInputVars.AddRange(dataset.DoubleVariables.Where(x => !x.Equals(targetVar)));
       }
 
@@ -92,27 +90,28 @@
     }
 
-    public override IClassificationProblemData ImportData(string path, DataAnalysisImportType type) {
-      TableFileParser csvFileParser = new TableFileParser();
-      csvFileParser.Parse(path);
-
+    protected override IClassificationProblemData ImportData(string path, ClassificationImportType type, TableFileParser csvFileParser) {
       int trainingPartEnd = (csvFileParser.Rows * type.Training) / 100;
       List<IList> values = csvFileParser.Values;
       if (type.Shuffle) {
-        values = Shuffle(values);
+        values = Shuffle(values, csvFileParser.VariableNames.ToList().FindIndex(x => x.Equals(type.TargetVariable)),
+                         type.Training, out trainingPartEnd);
       }
 
       Dataset dataset = new Dataset(csvFileParser.VariableNames, values);
-      string targetVar = dataset.DoubleVariables.Last();
 
       // turn of input variables that are constant in the training partition
       var allowedInputVars = new List<string>();
       var trainingIndizes = Enumerable.Range(0, trainingPartEnd);
-      foreach (var variableName in dataset.DoubleVariables) {
-        if (trainingIndizes.Count() >= 2 && dataset.GetDoubleValues(variableName, trainingIndizes).Range() > 0 &&
-          variableName != targetVar)
-          allowedInputVars.Add(variableName);
+      if (trainingIndizes.Count() >= 2) {
+        foreach (var variableName in dataset.DoubleVariables) {
+          if (dataset.GetDoubleValues(variableName, trainingIndizes).Range() > 0 &&
+            variableName != type.TargetVariable)
+            allowedInputVars.Add(variableName);
+        }
+      } else {
+        allowedInputVars.AddRange(dataset.DoubleVariables.Where(x => !x.Equals(type.TargetVariable)));
       }
 
-      ClassificationProblemData classificationData = new ClassificationProblemData(dataset, allowedInputVars, targetVar);
+      ClassificationProblemData classificationData = new ClassificationProblemData(dataset, allowedInputVars, type.TargetVariable);
 
       classificationData.TrainingPartition.Start = 0;
@@ -126,29 +125,56 @@
     }
 
-    public override bool CanExportData {
-      get { return true; }
-    }
-    public override void ExportData(IClassificationProblemData instance, string path) {
-      var strBuilder = new StringBuilder();
-      var colSep = CultureInfo.CurrentCulture.TextInfo.ListSeparator;
-      foreach (var variable in instance.Dataset.VariableNames) {
-        strBuilder.Append(variable.Replace(colSep, String.Empty) + colSep);
-      }
-      strBuilder.Remove(strBuilder.Length - colSep.Length, colSep.Length);
-      strBuilder.AppendLine();
-
-      var dataset = instance.Dataset;
-
-      for (int i = 0; i < dataset.Rows; i++) {
-        for (int j = 0; j < dataset.Columns; j++) {
-          if (j > 0) strBuilder.Append(colSep);
-          strBuilder.Append(dataset.GetValue(i, j));
-        }
-        strBuilder.AppendLine();
+    protected List<IList> Shuffle(List<IList> values, int target, int trainingPercentage, out int trainingPartEnd) {
+      IList targetValues = values[target];
+      var group = targetValues.Cast<double>().GroupBy(x => x).Select(g => new { Key = g.Key, Count = g.Count() }).ToList();
+      Dictionary<double, double> taken = new Dictionary<double, double>();
+      foreach (var classCount in group) {
+        taken[classCount.Key] = (classCount.Count * trainingPercentage) / 100.0;
       }
 
-      using (var writer = new StreamWriter(path)) {
-        writer.Write(strBuilder);
+      List<IList> training = GetListOfIListCopy(values);
+      List<IList> test = GetListOfIListCopy(values);
+
+      for (int i = 0; i < targetValues.Count; i++) {
+        if (taken[(double)targetValues[i]] > 0) {
+          AddRow(training, values, i);
+          taken[(double)targetValues[i]]--;
+        } else {
+          AddRow(test, values, i);
+        }
       }
+
+      trainingPartEnd = training.First().Count;
+
+      training = Shuffle(training);
+      test = Shuffle(test);
+      for (int i = 0; i < training.Count; i++) {
+        for (int j = 0; j < test[i].Count; j++) {
+          training[i].Add(test[i][j]);
+        }
+      }
+
+      return training;
+    }
+
+    private void AddRow(List<IList> destination, List<IList> source, int index) {
+      for (int i = 0; i < source.Count; i++) {
+        destination[i].Add(source[i][index]);
+      }
+    }
+
+    private List<IList> GetListOfIListCopy(List<IList> values) {
+      List<IList> newList = new List<IList>(values.Count);
+      foreach (IList t in values) {
+        if (t is List<double>)
+          newList.Add(new List<double>());
+        else if (t is List<DateTime>)
+          newList.Add(new List<DateTime>());
+        else if (t is List<string>)
+          newList.Add(new List<string>());
+        else
+          throw new InvalidOperationException();
+      }
+      return newList;
     }
   }
Index: trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Classification/ClassificationImportType.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Classification/ClassificationImportType.cs	(revision 8877)
+++ trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Classification/ClassificationImportType.cs	(revision 8877)
@@ -0,0 +1,26 @@
+﻿#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;
+
+namespace HeuristicLab.Problems.Instances.DataAnalysis {
+  public class ClassificationImportType : DataAnalysisImportType {
+    public string TargetVariable { get; set; }
+  }
+}
Index: trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Classification/ClassificationInstanceProvider.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Classification/ClassificationInstanceProvider.cs	(revision 8876)
+++ trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Classification/ClassificationInstanceProvider.cs	(revision 8877)
@@ -23,5 +23,5 @@
 
 namespace HeuristicLab.Problems.Instances.DataAnalysis {
-  public abstract class ClassificationInstanceProvider : DataAnalysisInstanceProvider<IClassificationProblemData> {
+  public abstract class ClassificationInstanceProvider : DataAnalysisInstanceProvider<IClassificationProblemData, ClassificationImportType> {
   }
 }
Index: trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Clustering/CSV/ClusteringCSVInstanceProvider.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Clustering/CSV/ClusteringCSVInstanceProvider.cs	(revision 8876)
+++ trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Clustering/CSV/ClusteringCSVInstanceProvider.cs	(revision 8877)
@@ -23,8 +23,6 @@
 using System.Collections;
 using System.Collections.Generic;
-using System.Globalization;
 using System.IO;
 using System.Linq;
-using System.Text;
 using HeuristicLab.Common;
 using HeuristicLab.Problems.DataAnalysis;
@@ -75,5 +73,5 @@
         }
       } else {
-        allowedInputVars.AddRange(dataset.DoubleVariables.Where(x => x.Equals(targetVar)));
+        allowedInputVars.AddRange(dataset.DoubleVariables.Where(x => !x.Equals(targetVar)));
       }
 
@@ -91,8 +89,5 @@
     }
 
-    public override IClusteringProblemData ImportData(string path, DataAnalysisImportType type) {
-      TableFileParser csvFileParser = new TableFileParser();
-      csvFileParser.Parse(path);
-
+    protected override IClusteringProblemData ImportData(string path, DataAnalysisImportType type, TableFileParser csvFileParser) {
       List<IList> values = csvFileParser.Values;
       if (type.Shuffle) {
@@ -107,8 +102,12 @@
       int trainingPartEnd = (csvFileParser.Rows * type.Training) / 100;
       var trainingIndizes = Enumerable.Range(0, trainingPartEnd);
-      foreach (var variableName in dataset.DoubleVariables) {
-        if (trainingIndizes.Count() >= 2 && dataset.GetDoubleValues(variableName, trainingIndizes).Range() > 0 &&
-          variableName != targetVar)
-          allowedInputVars.Add(variableName);
+      if (trainingIndizes.Count() >= 2) {
+        foreach (var variableName in dataset.DoubleVariables) {
+          if (dataset.GetDoubleValues(variableName, trainingIndizes).Range() > 0 &&
+            variableName != targetVar)
+            allowedInputVars.Add(variableName);
+        }
+      } else {
+        allowedInputVars.AddRange(dataset.DoubleVariables.Where(x => !x.Equals(targetVar)));
       }
 
@@ -124,31 +123,4 @@
       return clusteringData;
     }
-
-    public override bool CanExportData {
-      get { return true; }
-    }
-    public override void ExportData(IClusteringProblemData instance, string path) {
-      var strBuilder = new StringBuilder();
-      var colSep = CultureInfo.CurrentCulture.TextInfo.ListSeparator;
-      foreach (var variable in instance.Dataset.VariableNames) {
-        strBuilder.Append(variable.Replace(colSep, String.Empty) + colSep);
-      }
-      strBuilder.Remove(strBuilder.Length - colSep.Length, colSep.Length);
-      strBuilder.AppendLine();
-
-      var dataset = instance.Dataset;
-
-      for (int i = 0; i < dataset.Rows; i++) {
-        for (int j = 0; j < dataset.Columns; j++) {
-          if (j > 0) strBuilder.Append(colSep);
-          strBuilder.Append(dataset.GetValue(i, j));
-        }
-        strBuilder.AppendLine();
-      }
-
-      using (var writer = new StreamWriter(path)) {
-        writer.Write(strBuilder);
-      }
-    }
   }
 }
Index: trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Clustering/ClusteringInstanceProvider.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Clustering/ClusteringInstanceProvider.cs	(revision 8876)
+++ trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Clustering/ClusteringInstanceProvider.cs	(revision 8877)
@@ -23,5 +23,5 @@
 
 namespace HeuristicLab.Problems.Instances.DataAnalysis {
-  public abstract class ClusteringInstanceProvider : DataAnalysisInstanceProvider<IClusteringProblemData> {
+  public abstract class ClusteringInstanceProvider : DataAnalysisInstanceProvider<IClusteringProblemData, DataAnalysisImportType> {
   }
 }
Index: trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis/3.3/DataAnalysisCSVFormat.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis/3.3/DataAnalysisCSVFormat.cs	(revision 8877)
+++ trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis/3.3/DataAnalysisCSVFormat.cs	(revision 8877)
@@ -0,0 +1,30 @@
+﻿#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.Globalization;
+
+namespace HeuristicLab.Problems.Instances.DataAnalysis {
+  public class DataAnalysisCSVFormat {
+    public char Separator { get; set; }
+    public NumberFormatInfo NumberFormatInfo { get; set; }
+    public DateTimeFormatInfo DateTimeFormatInfo { get; set; }
+  }
+}
Index: trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis/3.3/DataAnalysisInstanceProvider.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis/3.3/DataAnalysisInstanceProvider.cs	(revision 8876)
+++ trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis/3.3/DataAnalysisInstanceProvider.cs	(revision 8877)
@@ -23,19 +23,33 @@
 using System.Collections;
 using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
 using System.Linq;
+using System.Text;
 using HeuristicLab.Problems.DataAnalysis;
+using HeuristicLab.Random;
 
 namespace HeuristicLab.Problems.Instances.DataAnalysis {
-  public abstract class DataAnalysisInstanceProvider<TData> : ProblemInstanceProvider<TData>
-    where TData : class, IDataAnalysisProblemData {
+  public abstract class DataAnalysisInstanceProvider<TData, ImportType> : ProblemInstanceProvider<TData>
+    where TData : class, IDataAnalysisProblemData
+    where ImportType : DataAnalysisImportType {
 
     // has to be implemented, if CanImportData is true
-    public virtual TData ImportData(string path, DataAnalysisImportType type) {
-      throw new NotSupportedException();
+    public TData ImportData(string path, ImportType type) {
+      TableFileParser csvFileParser = new TableFileParser();
+      csvFileParser.Parse(path);
+      return ImportData(path, type, csvFileParser);
     }
+    public TData ImportData(string path, ImportType type, DataAnalysisCSVFormat csvFormat) {
+      TableFileParser csvFileParser = new TableFileParser();
+      csvFileParser.Parse(path, csvFormat.NumberFormatInfo, csvFormat.DateTimeFormatInfo, csvFormat.Separator);
+      return ImportData(path, type, csvFileParser);
+    }
+
+    protected abstract TData ImportData(string path, ImportType type, TableFileParser csvFileParser);
 
     protected List<IList> Shuffle(List<IList> values) {
       int count = values.First().Count;
-      int[] indices = GetRandomIndices(count);
+      int[] indices = Enumerable.Range(0, count).Shuffle(new FastRandom()).ToArray();
       List<IList> shuffeledValues = new List<IList>(values.Count);
       for (int col = 0; col < values.Count; col++) {
@@ -57,17 +71,29 @@
     }
 
-    //Fisher–Yates shuffle
-    private int[] GetRandomIndices(int amount) {
-      int[] randomIndices = Enumerable.Range(0, amount).ToArray();
-      System.Random rand = new System.Random();
-      int n = amount;
-      while (n > 1) {
-        n--;
-        int k = rand.Next(n + 1);
-        int value = randomIndices[k];
-        randomIndices[k] = randomIndices[n];
-        randomIndices[n] = value;
+    public override bool CanExportData {
+      get { return true; }
+    }
+    public override void ExportData(TData instance, string path) {
+      var strBuilder = new StringBuilder();
+      var colSep = CultureInfo.CurrentCulture.TextInfo.ListSeparator;
+      foreach (var variable in instance.Dataset.VariableNames) {
+        strBuilder.Append(variable.Replace(colSep, String.Empty) + colSep);
       }
-      return randomIndices;
+      strBuilder.Remove(strBuilder.Length - colSep.Length, colSep.Length);
+      strBuilder.AppendLine();
+
+      var dataset = instance.Dataset;
+
+      for (int i = 0; i < dataset.Rows; i++) {
+        for (int j = 0; j < dataset.Columns; j++) {
+          if (j > 0) strBuilder.Append(colSep);
+          strBuilder.Append(dataset.GetValue(i, j));
+        }
+        strBuilder.AppendLine();
+      }
+
+      using (var writer = new StreamWriter(path)) {
+        writer.Write(strBuilder);
+      }
     }
   }
Index: trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis/3.3/HeuristicLab.Problems.Instances.DataAnalysis-3.3.csproj
===================================================================
--- trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis/3.3/HeuristicLab.Problems.Instances.DataAnalysis-3.3.csproj	(revision 8876)
+++ trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis/3.3/HeuristicLab.Problems.Instances.DataAnalysis-3.3.csproj	(revision 8877)
@@ -115,4 +115,5 @@
     <Compile Include="Classification\ArtificialClassificationDataDescriptor.cs" />
     <Compile Include="Classification\ArtificialClassificationInstanceProvider.cs" />
+    <Compile Include="Classification\ClassificationImportType.cs" />
     <Compile Include="Classification\ClassificationInstanceProvider.cs" />
     <Compile Include="Classification\CSV\ClassifiactionCSVInstanceProvider.cs" />
@@ -126,4 +127,5 @@
     <Compile Include="Clustering\ClusteringInstanceProvider.cs" />
     <Compile Include="Clustering\CSV\ClusteringCSVInstanceProvider.cs" />
+    <Compile Include="DataAnalysisCSVFormat.cs" />
     <Compile Include="DataAnalysisImportType.cs" />
     <Compile Include="DataAnalysisInstanceProvider.cs" />
@@ -179,4 +181,5 @@
     <Compile Include="Regression\Nguyen\NguyenInstanceProvider.cs" />
     <Compile Include="Regression\RealWorld\RegressionRealWorldInstanceProvider.cs" />
+    <Compile Include="Regression\RegressionImportType.cs" />
     <Compile Include="Regression\RegressionInstanceProvider.cs" />
     <Compile Include="Regression\ResourceRegressionDataDescriptor.cs" />
Index: trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/CSV/RegressionCSVInstanceProvider.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/CSV/RegressionCSVInstanceProvider.cs	(revision 8876)
+++ trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/CSV/RegressionCSVInstanceProvider.cs	(revision 8877)
@@ -23,8 +23,6 @@
 using System.Collections;
 using System.Collections.Generic;
-using System.Globalization;
 using System.IO;
 using System.Linq;
-using System.Text;
 using HeuristicLab.Common;
 using HeuristicLab.Problems.DataAnalysis;
@@ -67,8 +65,12 @@
       var allowedInputVars = new List<string>();
       var trainingIndizes = Enumerable.Range(0, (csvFileParser.Rows * 2) / 3);
-      foreach (var variableName in dataset.DoubleVariables) {
-        if (trainingIndizes.Count() >= 2 && dataset.GetDoubleValues(variableName, trainingIndizes).Range() > 0 &&
-          variableName != targetVar)
-          allowedInputVars.Add(variableName);
+      if (trainingIndizes.Count() >= 2) {
+        foreach (var variableName in dataset.DoubleVariables) {
+          if (dataset.GetDoubleValues(variableName, trainingIndizes).Range() > 0 &&
+            variableName != targetVar)
+            allowedInputVars.Add(variableName);
+        }
+      } else {
+        allowedInputVars.AddRange(dataset.DoubleVariables.Where(x => !x.Equals(targetVar)));
       }
 
@@ -86,8 +88,5 @@
     }
 
-    public override IRegressionProblemData ImportData(string path, DataAnalysisImportType type) {
-      TableFileParser csvFileParser = new TableFileParser();
-      csvFileParser.Parse(path);
-
+    protected override IRegressionProblemData ImportData(string path, RegressionImportType type, TableFileParser csvFileParser) {
       List<IList> values = csvFileParser.Values;
       if (type.Shuffle) {
@@ -95,5 +94,4 @@
       }
       Dataset dataset = new Dataset(csvFileParser.VariableNames, values);
-      string targetVar = dataset.DoubleVariables.Last();
 
       // turn of input variables that are constant in the training partition
@@ -105,12 +103,12 @@
         foreach (var variableName in dataset.DoubleVariables) {
           if (dataset.GetDoubleValues(variableName, trainingIndizes).Range() > 0 &&
-            variableName != targetVar)
+            variableName != type.TargetVariable)
             allowedInputVars.Add(variableName);
         }
       } else {
-        allowedInputVars.AddRange(dataset.DoubleVariables.Where(x => x.Equals(targetVar)));
+        allowedInputVars.AddRange(dataset.DoubleVariables.Where(x => !x.Equals(type.TargetVariable)));
       }
 
-      RegressionProblemData regressionData = new RegressionProblemData(dataset, allowedInputVars, targetVar);
+      RegressionProblemData regressionData = new RegressionProblemData(dataset, allowedInputVars, type.TargetVariable);
 
       regressionData.TrainingPartition.Start = 0;
@@ -123,31 +121,4 @@
       return regressionData;
     }
-
-    public override bool CanExportData {
-      get { return true; }
-    }
-    public override void ExportData(IRegressionProblemData instance, string path) {
-      var strBuilder = new StringBuilder();
-      var colSep = CultureInfo.CurrentCulture.TextInfo.ListSeparator;
-      foreach (var variable in instance.Dataset.VariableNames) {
-        strBuilder.Append(variable.Replace(colSep, String.Empty) + colSep);
-      }
-      strBuilder.Remove(strBuilder.Length - colSep.Length, colSep.Length);
-      strBuilder.AppendLine();
-
-      var dataset = instance.Dataset;
-
-      for (int i = 0; i < dataset.Rows; i++) {
-        for (int j = 0; j < dataset.Columns; j++) {
-          if (j > 0) strBuilder.Append(colSep);
-          strBuilder.Append(dataset.GetValue(i, j));
-        }
-        strBuilder.AppendLine();
-      }
-
-      using (var writer = new StreamWriter(path)) {
-        writer.Write(strBuilder);
-      }
-    }
   }
 }
Index: trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/RegressionImportType.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/RegressionImportType.cs	(revision 8877)
+++ trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/RegressionImportType.cs	(revision 8877)
@@ -0,0 +1,26 @@
+﻿#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;
+
+namespace HeuristicLab.Problems.Instances.DataAnalysis {
+  public class RegressionImportType : DataAnalysisImportType {
+    public string TargetVariable { get; set; }
+  }
+}
Index: trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/RegressionInstanceProvider.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/RegressionInstanceProvider.cs	(revision 8876)
+++ trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/RegressionInstanceProvider.cs	(revision 8877)
@@ -23,5 +23,5 @@
 
 namespace HeuristicLab.Problems.Instances.DataAnalysis {
-  public abstract class RegressionInstanceProvider : DataAnalysisInstanceProvider<IRegressionProblemData> {
+  public abstract class RegressionInstanceProvider : DataAnalysisInstanceProvider<IRegressionProblemData, RegressionImportType> {
   }
 }
