Index: /branches/3040_VectorBasedGP/HeuristicLab.Problems.Instances.DataAnalysis.Views/3.3/DataAnalysisImportDialog.cs
===================================================================
--- /branches/3040_VectorBasedGP/HeuristicLab.Problems.Instances.DataAnalysis.Views/3.3/DataAnalysisImportDialog.cs	(revision 17413)
+++ /branches/3040_VectorBasedGP/HeuristicLab.Problems.Instances.DataAnalysis.Views/3.3/DataAnalysisImportDialog.cs	(revision 17414)
@@ -83,5 +83,5 @@
           DateTimeFormatInfo = (DateTimeFormatInfo)DateTimeFormatComboBox.SelectedValue,
           VariableNamesAvailable = CheckboxColumnNames.Checked,
-          Encoding = (Encoding) EncodingComboBox.SelectedValue
+          Encoding = (Encoding)EncodingComboBox.SelectedValue
         };
       }
@@ -110,5 +110,5 @@
         SeparatorComboBox.SelectedItem = separator.First();
 
-      var decimalSeparator = POSSIBLE_DECIMAL_SEPARATORS.Where(n => n.Value.Substring(0,1) == CultureInfo.CurrentCulture.NumberFormat.CurrencyDecimalSeparator);
+      var decimalSeparator = POSSIBLE_DECIMAL_SEPARATORS.Where(n => n.Value.Substring(0, 1) == CultureInfo.CurrentCulture.NumberFormat.CurrencyDecimalSeparator);
       if (decimalSeparator.Any())
         DecimalSeparatorComboBox.SelectedItem = decimalSeparator.First();
@@ -129,8 +129,10 @@
       ProblemTextBox.Text = openFileDialog.FileName;
       TableFileParser csvParser = new TableFileParser();
-      CheckboxColumnNames.Checked = csvParser.AreColumnNamesInFirstLine(ProblemTextBox.Text,
-                                                                      (NumberFormatInfo)DecimalSeparatorComboBox.SelectedValue,
-                                                                      (DateTimeFormatInfo)DateTimeFormatComboBox.SelectedValue,
-                                                                      (char)SeparatorComboBox.SelectedValue);
+      var formatOptions = new TableFileFormatOptions {
+        NumberFormat = (NumberFormatInfo)DecimalSeparatorComboBox.SelectedValue,
+        DateTimeFormat = (DateTimeFormatInfo)DateTimeFormatComboBox.SelectedValue,
+        ColumnSeparator = (char)SeparatorComboBox.SelectedValue
+      };
+      CheckboxColumnNames.Checked = csvParser.AreColumnNamesInFirstLine(ProblemTextBox.Text, formatOptions);
       ParseCSVFile();
     }
@@ -153,9 +155,10 @@
         TableFileParser csvParser = new TableFileParser();
         csvParser.Encoding = (Encoding)EncodingComboBox.SelectedValue;
-        csvParser.Parse(ProblemTextBox.Text,
-                        (NumberFormatInfo)DecimalSeparatorComboBox.SelectedValue,
-                        (DateTimeFormatInfo)DateTimeFormatComboBox.SelectedValue,
-                        (char)SeparatorComboBox.SelectedValue,
-                        CheckboxColumnNames.Checked, lineLimit: 500);
+        var formatOptions = new TableFileFormatOptions {
+          NumberFormat = (NumberFormatInfo)DecimalSeparatorComboBox.SelectedValue,
+          DateTimeFormat = (DateTimeFormatInfo)DateTimeFormatComboBox.SelectedValue,
+          ColumnSeparator = (char)SeparatorComboBox.SelectedValue
+        };
+        csvParser.Parse(ProblemTextBox.Text, formatOptions, CheckboxColumnNames.Checked, lineLimit: 500);
         IEnumerable<string> variableNamesWithType = GetVariableNamesWithType(csvParser);
         PreviewDatasetMatrix.Content = new Dataset(variableNamesWithType, csvParser.Values);
@@ -166,6 +169,5 @@
         ErrorTextBox.Visible = false;
         OkButton.Enabled = true;
-      }
-       catch (Exception ex) {
+      } catch (Exception ex) {
         if (ex is IOException || ex is InvalidOperationException || ex is ArgumentException) {
           OkButton.Enabled = false;
Index: /branches/3040_VectorBasedGP/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Classification/ResourceClassificationInstanceProvider.cs
===================================================================
--- /branches/3040_VectorBasedGP/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Classification/ResourceClassificationInstanceProvider.cs	(revision 17413)
+++ /branches/3040_VectorBasedGP/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Classification/ResourceClassificationInstanceProvider.cs	(revision 17414)
@@ -40,14 +40,10 @@
       using (var instancesZipFile = new ZipArchive(GetType().Assembly.GetManifestResourceStream(instanceArchiveName), ZipArchiveMode.Read)) {
         var entry = instancesZipFile.GetEntry(descriptor.ResourceName);
-        NumberFormatInfo numberFormat;
-        DateTimeFormatInfo dateFormat;
-        char separator;
-        using (Stream stream = entry.Open()) {
-          TableFileParser.DetermineFileFormat(stream, out numberFormat, out dateFormat, out separator);
-        }
+
+        var formatOptions = GetFormatOptions(entry);
 
         TableFileParser csvFileParser = new TableFileParser();
         using (Stream stream = entry.Open()) {
-          csvFileParser.Parse(stream, numberFormat, dateFormat, separator, true);
+          csvFileParser.Parse(stream, formatOptions, true);
         }
 
@@ -65,4 +61,10 @@
               .Where(x => Regex.Match(x, @".*\.Data\." + fileName).Success).SingleOrDefault();
     }
+
+    protected virtual TableFileFormatOptions GetFormatOptions(ZipArchiveEntry entry) {
+      using (Stream stream = entry.Open()) {
+        return TableFileParser.DetermineFileFormat(stream);
+      }
+    }
   }
 }
Index: /branches/3040_VectorBasedGP/HeuristicLab.Problems.Instances.DataAnalysis/3.3/DataAnalysisInstanceProvider.cs
===================================================================
--- /branches/3040_VectorBasedGP/HeuristicLab.Problems.Instances.DataAnalysis/3.3/DataAnalysisInstanceProvider.cs	(revision 17413)
+++ /branches/3040_VectorBasedGP/HeuristicLab.Problems.Instances.DataAnalysis/3.3/DataAnalysisInstanceProvider.cs	(revision 17414)
@@ -45,5 +45,8 @@
         OnProgressChanged(e / (double)fileSize);
       };
-      csvFileParser.Parse(path, csvFormat.NumberFormatInfo, csvFormat.DateTimeFormatInfo, csvFormat.Separator, csvFormat.VariableNamesAvailable);
+      var formatOptions = new TableFileFormatOptions {
+        NumberFormat = csvFormat.NumberFormatInfo, DateTimeFormat = csvFormat.DateTimeFormatInfo, ColumnSeparator = csvFormat.Separator
+      };
+      csvFileParser.Parse(path, formatOptions, csvFormat.VariableNamesAvailable);
       return ImportData(path, type, csvFileParser);
     }
Index: /branches/3040_VectorBasedGP/HeuristicLab.Problems.Instances.DataAnalysis/3.3/HeuristicLab.Problems.Instances.DataAnalysis-3.3.csproj
===================================================================
--- /branches/3040_VectorBasedGP/HeuristicLab.Problems.Instances.DataAnalysis/3.3/HeuristicLab.Problems.Instances.DataAnalysis-3.3.csproj	(revision 17413)
+++ /branches/3040_VectorBasedGP/HeuristicLab.Problems.Instances.DataAnalysis/3.3/HeuristicLab.Problems.Instances.DataAnalysis-3.3.csproj	(revision 17414)
@@ -178,4 +178,6 @@
     <Compile Include="Regression\Physics\PhysicsInstanceProvider.cs" />
     <Compile Include="Regression\Physics\RocketFuelFlow.cs" />
+    <Compile Include="Regression\UCITimeSeries\GasFlowModulation.cs" />
+    <Compile Include="Regression\UCITimeSeries\UCITimeSeriesProvider.cs" />
     <Compile Include="Regression\VariableNetworks\LinearVariableNetwork.cs" />
     <Compile Include="Regression\VariableNetworks\GaussianProcessVariableNetwork.cs" />
@@ -263,4 +265,5 @@
     <Compile Include="Regression\Vladislavleva\UnwrappedBallFunctionFiveDimensional.cs" />
     <Compile Include="Regression\Vladislavleva\VladislavlevaInstanceProvider.cs" />
+    <Compile Include="TableFileFormatOptions.cs" />
     <Compile Include="TableFileParser.cs" />
     <Compile Include="TimeSeries\CSV\TimeSeriesPrognosisCSVInstanceProvider.cs" />
@@ -278,4 +281,5 @@
     <EmbeddedResource Include="Regression\Data\MibaFriction.zip" />
     <EmbeddedResource Include="Regression\Data\PennML.zip" />
+    <EmbeddedResource Include="Regression\Data\UCITimeSeries.zip" />
   </ItemGroup>
   <ItemGroup>
Index: /branches/3040_VectorBasedGP/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/PennML/PennMLRegressionInstanceProvider.cs
===================================================================
--- /branches/3040_VectorBasedGP/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/PennML/PennMLRegressionInstanceProvider.cs	(revision 17413)
+++ /branches/3040_VectorBasedGP/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/PennML/PennMLRegressionInstanceProvider.cs	(revision 17414)
@@ -22,5 +22,4 @@
 using System;
 using System.Collections.Generic;
-using System.Globalization;
 using System.IO;
 using System.IO.Compression;
@@ -57,11 +56,5 @@
       using (var instancesZipFile = new ZipArchive(GetType().Assembly.GetManifestResourceStream(instanceArchiveName), ZipArchiveMode.Read)) {
         foreach (var entry in instancesZipFile.Entries) {
-          NumberFormatInfo numberFormat;
-          DateTimeFormatInfo dateFormat;
-          char separator;
-          using (var stream = entry.Open()) {
-            // the method below disposes the stream 
-            TableFileParser.DetermineFileFormat(stream, out numberFormat, out dateFormat, out separator);
-          }
+          var formatOptions = GetFormatOptions(entry);
 
           using (var stream = entry.Open()) {
@@ -70,5 +63,5 @@
 
               // by convention each dataset from the PennML collection reserves the last column for the target
-              var variableNames = header.Split(separator);
+              var variableNames = header.Split(formatOptions.ColumnSeparator);
               var allowedInputVariables = variableNames.Take(variableNames.Length - 1);
               var target = variableNames.Last();
Index: /branches/3040_VectorBasedGP/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/ResourceRegressionInstanceProvider.cs
===================================================================
--- /branches/3040_VectorBasedGP/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/ResourceRegressionInstanceProvider.cs	(revision 17413)
+++ /branches/3040_VectorBasedGP/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/ResourceRegressionInstanceProvider.cs	(revision 17414)
@@ -39,14 +39,9 @@
       using (var instancesZipFile = new ZipArchive(GetType().Assembly.GetManifestResourceStream(instanceArchiveName), ZipArchiveMode.Read)) {
         var entry = instancesZipFile.GetEntry(descriptor.ResourceName);
-        NumberFormatInfo numberFormat;
-        DateTimeFormatInfo dateFormat;
-        char separator;
-        using (Stream stream = entry.Open()) {
-          TableFileParser.DetermineFileFormat(stream, out numberFormat, out dateFormat, out separator);
-        }
+        var formatOptions = GetFormatOptions(entry);
 
         TableFileParser csvFileParser = new TableFileParser();
         using (Stream stream = entry.Open()) {
-          csvFileParser.Parse(stream, numberFormat, dateFormat, separator, true);
+          csvFileParser.Parse(stream, formatOptions, true);
         }
 
@@ -64,4 +59,10 @@
               .Where(x => Regex.Match(x, @".*\.Data\." + fileName).Success).SingleOrDefault();
     }
+
+    protected virtual TableFileFormatOptions GetFormatOptions(ZipArchiveEntry entry) {
+      using (Stream stream = entry.Open()) {
+        return TableFileParser.DetermineFileFormat(stream);
+      }
+    }
   }
 }
Index: /branches/3040_VectorBasedGP/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/UCITimeSeries/GasFlowModulation.cs
===================================================================
--- /branches/3040_VectorBasedGP/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/UCITimeSeries/GasFlowModulation.cs	(revision 17414)
+++ /branches/3040_VectorBasedGP/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/UCITimeSeries/GasFlowModulation.cs	(revision 17414)
@@ -0,0 +1,45 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 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.Linq;
+
+namespace HeuristicLab.Problems.Instances.DataAnalysis {
+  public class GasFlowModulation : ResourceRegressionDataDescriptor {
+
+    public GasFlowModulation()
+    : base("GasFlowModulation.csv") { }
+
+    public override string Name { get { return "Gas Flow Modulation"; } }
+    public override string Description { get { return "The data set contains 58 time series acquired from 16 chemical sensors under gas flow modulation conditions. The sensors were exposed to different gaseous binary mixtures of acetone and ethanol."; } }
+    protected override string TargetVariable { get { return "ace_conc"; } }  // or  "eth_conc"
+    protected override string[] VariableNames {
+      get { return new[] { "exp", "batch", "ace_conc", "eth_conc", "gas", "lab", "col" }.Concat(AllowedInputVariables).ToArray(); }
+    }
+    protected override string[] AllowedInputVariables {
+      get { return Enumerable.Range(1, 16).Select(i => $"sensor_{i:D2}").ToArray(); }
+    }
+    protected override int TrainingPartitionStart { get { return 0; } }
+    protected override int TrainingPartitionEnd { get { return 40; } }
+    protected override int TestPartitionStart { get { return 40; } }
+    protected override int TestPartitionEnd { get { return 58; } }
+  }
+}
Index: /branches/3040_VectorBasedGP/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/UCITimeSeries/UCITimeSeriesProvider.cs
===================================================================
--- /branches/3040_VectorBasedGP/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/UCITimeSeries/UCITimeSeriesProvider.cs	(revision 17414)
+++ /branches/3040_VectorBasedGP/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/UCITimeSeries/UCITimeSeriesProvider.cs	(revision 17414)
@@ -0,0 +1,62 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 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.Globalization;
+using System.IO.Compression;
+
+namespace HeuristicLab.Problems.Instances.DataAnalysis {
+  public class UCITimeSeriesProvider : ResourceRegressionInstanceProvider {
+    public override string Name {
+      get { return "UCI Time Series"; }
+    }
+
+    public override string Description {
+      get { return "Some selected instances of the UCI Machine Learning Repository that contain time series or vectorial data."; }
+    }
+
+    public override Uri WebLink {
+      get { return new Uri("https://archive.ics.uci.edu/ml/datasets.php?format=&task=reg&att=&area=&numAtt=&numIns=&type=ts&sort=taskUp&view=table"); }
+    }
+
+    public override string ReferencePublication {
+      get { return "Dua, D. and Graff, C. (2019). UCI Machine Learning Repository [http://archive.ics.uci.edu/ml]. Irvine, CA: University of California, School of Information and Computer Science."; }
+    }
+
+    protected override string FileName {
+      get { return "UCITimeSeries"; }
+    }
+
+    public override IEnumerable<IDataDescriptor> GetDataDescriptors() {
+      yield return new GasFlowModulation();
+    }
+
+    protected override TableFileFormatOptions GetFormatOptions(ZipArchiveEntry entry) {
+      return new TableFileFormatOptions {
+        NumberFormat = NumberFormatInfo.InvariantInfo,
+        DateTimeFormat = DateTimeFormatInfo.InvariantInfo,
+        ColumnSeparator = ';',
+        VectorSeparator = ','
+      };
+    }
+  }
+}
Index: /branches/3040_VectorBasedGP/HeuristicLab.Problems.Instances.DataAnalysis/3.3/TableFileFormatOptions.cs
===================================================================
--- /branches/3040_VectorBasedGP/HeuristicLab.Problems.Instances.DataAnalysis/3.3/TableFileFormatOptions.cs	(revision 17414)
+++ /branches/3040_VectorBasedGP/HeuristicLab.Problems.Instances.DataAnalysis/3.3/TableFileFormatOptions.cs	(revision 17414)
@@ -0,0 +1,36 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 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.Globalization;
+
+namespace HeuristicLab.Problems.Instances.DataAnalysis {
+  public sealed class TableFileFormatOptions {
+    public string LineSeparator { get; set; } = Environment.NewLine;
+    public char ColumnSeparator { get; set; }
+    public char? VectorSeparator { get; set; }
+
+    public char QuoteCharacter { get; set; } = '"';
+
+    public NumberFormatInfo NumberFormat { get; set; } = NumberFormatInfo.InvariantInfo;
+    public DateTimeFormatInfo DateTimeFormat { get; set; } = DateTimeFormatInfo.InvariantInfo;
+  }
+}
Index: /branches/3040_VectorBasedGP/HeuristicLab.Problems.Instances.DataAnalysis/3.3/TableFileParser.cs
===================================================================
--- /branches/3040_VectorBasedGP/HeuristicLab.Problems.Instances.DataAnalysis/3.3/TableFileParser.cs	(revision 17413)
+++ /branches/3040_VectorBasedGP/HeuristicLab.Problems.Instances.DataAnalysis/3.3/TableFileParser.cs	(revision 17414)
@@ -20,5 +20,4 @@
 #endregion
 
-
 using System;
 using System.Collections;
@@ -29,4 +28,5 @@
 using System.Linq;
 using System.Text;
+using HeuristicLab.Problems.DataAnalysis;
 
 namespace HeuristicLab.Problems.Instances.DataAnalysis {
@@ -89,31 +89,28 @@
 
     public bool AreColumnNamesInFirstLine(string fileName) {
-      NumberFormatInfo numberFormat;
-      DateTimeFormatInfo dateTimeFormatInfo;
-      char separator;
-      DetermineFileFormat(fileName, out numberFormat, out dateTimeFormatInfo, out separator);
+      var formatOptions = DetermineFileFormat(fileName);
       using (var stream = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) {
-        return AreColumnNamesInFirstLine(stream, numberFormat, dateTimeFormatInfo, separator);
+        return AreColumnNamesInFirstLine(stream, formatOptions);
       }
     }
 
     public bool AreColumnNamesInFirstLine(Stream stream) {
-      NumberFormatInfo numberFormat = NumberFormatInfo.InvariantInfo;
-      DateTimeFormatInfo dateTimeFormatInfo = DateTimeFormatInfo.InvariantInfo;
-      char separator = ',';
-      return AreColumnNamesInFirstLine(stream, numberFormat, dateTimeFormatInfo, separator);
-    }
-
-    public bool AreColumnNamesInFirstLine(string fileName, NumberFormatInfo numberFormat,
-                                         DateTimeFormatInfo dateTimeFormatInfo, char separator) {
+      var formatOptions = new TableFileFormatOptions {
+        NumberFormat = NumberFormatInfo.InvariantInfo,
+        DateTimeFormat = DateTimeFormatInfo.InvariantInfo,
+        ColumnSeparator = ','
+      };
+      return AreColumnNamesInFirstLine(stream, formatOptions);
+    }
+
+    public bool AreColumnNamesInFirstLine(string fileName, TableFileFormatOptions formatOptions) {
       using (var stream = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) {
-        return AreColumnNamesInFirstLine(stream, numberFormat, dateTimeFormatInfo, separator);
-      }
-    }
-
-    public bool AreColumnNamesInFirstLine(Stream stream, NumberFormatInfo numberFormat,
-                                          DateTimeFormatInfo dateTimeFormatInfo, char separator) {
+        return AreColumnNamesInFirstLine(stream, formatOptions);
+      }
+    }
+
+    public bool AreColumnNamesInFirstLine(Stream stream, TableFileFormatOptions formatOptions) {
       using (StreamReader reader = new StreamReader(stream, Encoding)) {
-        tokenizer = new Tokenizer(reader, numberFormat, dateTimeFormatInfo, separator);
+        tokenizer = new Tokenizer(reader, formatOptions);
         return (tokenizer.PeekType() != TokenTypeEnum.Double);
       }
@@ -126,10 +123,7 @@
     /// <param name="columnNamesInFirstLine"></param>
     public void Parse(string fileName, bool columnNamesInFirstLine, int lineLimit = -1) {
-      NumberFormatInfo numberFormat;
-      DateTimeFormatInfo dateTimeFormatInfo;
-      char separator;
-      DetermineFileFormat(fileName, out numberFormat, out dateTimeFormatInfo, out separator);
+      var formatOptions = DetermineFileFormat(fileName);
       EstimateNumberOfLines(fileName);
-      Parse(new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite), numberFormat, dateTimeFormatInfo, separator, columnNamesInFirstLine, lineLimit);
+      Parse(new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite), formatOptions, columnNamesInFirstLine, lineLimit);
     }
 
@@ -142,8 +136,8 @@
     /// <param name="separator">defines the separator</param>
     /// <param name="columnNamesInFirstLine"></param>
-    public void Parse(string fileName, NumberFormatInfo numberFormat, DateTimeFormatInfo dateTimeFormatInfo, char separator, bool columnNamesInFirstLine, int lineLimit = -1) {
+    public void Parse(string fileName, TableFileFormatOptions formatOptions, bool columnNamesInFirstLine, int lineLimit = -1) {
       EstimateNumberOfLines(fileName);
       using (var stream = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) {
-        Parse(stream, numberFormat, dateTimeFormatInfo, separator, columnNamesInFirstLine, lineLimit);
+        Parse(stream, formatOptions, columnNamesInFirstLine, lineLimit);
       }
     }
@@ -182,8 +176,10 @@
     /// <param name="columnNamesInFirstLine"></param>
     public void Parse(Stream stream, bool columnNamesInFirstLine, int lineLimit = -1) {
-      NumberFormatInfo numberFormat = NumberFormatInfo.InvariantInfo;
-      DateTimeFormatInfo dateTimeFormatInfo = DateTimeFormatInfo.InvariantInfo;
-      char separator = ',';
-      Parse(stream, numberFormat, dateTimeFormatInfo, separator, columnNamesInFirstLine, lineLimit);
+      var formatOptions = new TableFileFormatOptions {
+        NumberFormat = NumberFormatInfo.InvariantInfo,
+        DateTimeFormat = DateTimeFormatInfo.InvariantInfo,
+        ColumnSeparator = ','
+      };
+      Parse(stream, formatOptions, columnNamesInFirstLine, lineLimit);
     }
 
@@ -196,9 +192,9 @@
     /// <param name="separator">defines the separator</param>
     /// <param name="columnNamesInFirstLine"></param>
-    public void Parse(Stream stream, NumberFormatInfo numberFormat, DateTimeFormatInfo dateTimeFormatInfo, char separator, bool columnNamesInFirstLine, int lineLimit = -1) {
+    public void Parse(Stream stream, TableFileFormatOptions formatOptions, bool columnNamesInFirstLine, int lineLimit = -1) {
       if (lineLimit > 0) estimatedNumberOfLines = lineLimit;
 
       using (var reader = new StreamReader(stream)) {
-        tokenizer = new Tokenizer(reader, numberFormat, dateTimeFormatInfo, separator);
+        tokenizer = new Tokenizer(reader, formatOptions);
         var strValues = new List<List<string>>();
         values = new List<IList>();
@@ -257,4 +253,31 @@
       this.columns = values.Count;
 
+      // see if any string column can be converted to vectors
+      if (formatOptions.VectorSeparator != null) {
+        for (int i = 0; i < values.Count; i++) {
+          if (!(values[i] is List<string> stringList)) continue;
+
+          var strings = new string[stringList.Count][];
+          var doubles = new double[strings.Length][];
+          bool allDoubles = true;
+          for (int j = 0; j < strings.Length && allDoubles; j++) {
+            strings[j] = stringList[j].Split(formatOptions.VectorSeparator.Value);
+            doubles[j] = new double[strings[j].Length];
+            for (int k = 0; k < doubles[j].Length && allDoubles; k++) {
+              allDoubles = double.TryParse(strings[j][k], NumberStyles.Float, formatOptions.NumberFormat, out doubles[j][k]);
+            }
+          }
+
+          if (allDoubles) {
+            var vectorList = new List<DoubleVector>(stringList.Count);
+            for (int j = 0; j < doubles.Length; j++) {
+              vectorList.Add(new DoubleVector(doubles[j]));
+            }
+
+            values[i] = vectorList;
+          }
+        }
+      }
+
       // replace lists with undefined type (object) with double-lists
       for (int i = 0; i < values.Count; i++) {
@@ -271,4 +294,5 @@
         var stringList = l as List<string>;
         var objList = l as List<object>;
+        var vecList = l as List<DoubleVector>;
         if (dblList != null) dblList.TrimExcess();
         if (byteList != null) byteList.TrimExcess();
@@ -276,4 +300,5 @@
         if (stringList != null) stringList.TrimExcess();
         if (objList != null) objList.TrimExcess();
+        if (vecList != null) vecList.TrimExcess();
       }
 
@@ -422,9 +447,9 @@
     #endregion
 
-    public static void DetermineFileFormat(string path, out NumberFormatInfo numberFormat, out DateTimeFormatInfo dateTimeFormatInfo, out char separator) {
-      DetermineFileFormat(new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite), out numberFormat, out dateTimeFormatInfo, out separator);
-    }
-
-    public static void DetermineFileFormat(Stream stream, out NumberFormatInfo numberFormat, out DateTimeFormatInfo dateTimeFormatInfo, out char separator) {
+    public static TableFileFormatOptions DetermineFileFormat(string path) {
+      return DetermineFileFormat(new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite));
+    }
+
+    public static TableFileFormatOptions DetermineFileFormat(Stream stream) {
       using (StreamReader reader = new StreamReader(stream)) {
         // skip first line
@@ -449,11 +474,13 @@
         // in all cases only treat ' ' as separator if no other separator is possible (spaces can also occur additionally to separators)
         if (OccurrencesOf(charCounts, '.') > 10) {
-          numberFormat = NumberFormatInfo.InvariantInfo;
-          dateTimeFormatInfo = DateTimeFormatInfo.InvariantInfo;
-          separator = POSSIBLE_SEPARATORS
-            .Where(c => OccurrencesOf(charCounts, c) > 10)
-            .OrderBy(c => -OccurrencesOf(charCounts, c))
-            .DefaultIfEmpty(' ')
-            .First();
+          return new TableFileFormatOptions {
+            NumberFormat = NumberFormatInfo.InvariantInfo,
+            DateTimeFormat = DateTimeFormatInfo.InvariantInfo,
+            ColumnSeparator = POSSIBLE_SEPARATORS
+              .Where(c => OccurrencesOf(charCounts, c) > 10)
+              .OrderBy(c => -OccurrencesOf(charCounts, c))
+                .DefaultIfEmpty(' ')
+              .First()
+          };
         } else if (OccurrencesOf(charCounts, ',') > 10) {
           // no points and many commas
@@ -470,28 +497,34 @@
           if (tokensWithMultipleCommas > 1) {
             // English format (only integer values) with ',' as separator
-            numberFormat = NumberFormatInfo.InvariantInfo;
-            dateTimeFormatInfo = DateTimeFormatInfo.InvariantInfo;
-            separator = ',';
+            return new TableFileFormatOptions {
+              NumberFormat = NumberFormatInfo.InvariantInfo,
+              DateTimeFormat = DateTimeFormatInfo.InvariantInfo,
+              ColumnSeparator = ','
+            };
           } else {
             char[] disallowedSeparators = new char[] { ',' }; // n. def. contains a space so ' ' should be disallowed to, however existing unit tests would fail
             // German format (real values)
-            numberFormat = NumberFormatInfo.GetInstance(new CultureInfo("de-DE"));
-            dateTimeFormatInfo = DateTimeFormatInfo.GetInstance(new CultureInfo("de-DE"));
-            separator = POSSIBLE_SEPARATORS
-              .Except(disallowedSeparators)
+            return new TableFileFormatOptions {
+              NumberFormat = NumberFormatInfo.GetInstance(new CultureInfo("de-DE")),
+              DateTimeFormat = DateTimeFormatInfo.GetInstance(new CultureInfo("de-DE")),
+              ColumnSeparator = POSSIBLE_SEPARATORS
+                .Except(disallowedSeparators)
+                .Where(c => OccurrencesOf(charCounts, c) > 10)
+                .OrderBy(c => -OccurrencesOf(charCounts, c))
+                .DefaultIfEmpty(' ')
+                .First()
+            };
+          }
+        } else {
+          // no points and no commas => English format
+          return new TableFileFormatOptions {
+            NumberFormat = NumberFormatInfo.InvariantInfo,
+            DateTimeFormat = DateTimeFormatInfo.InvariantInfo,
+            ColumnSeparator = POSSIBLE_SEPARATORS
               .Where(c => OccurrencesOf(charCounts, c) > 10)
               .OrderBy(c => -OccurrencesOf(charCounts, c))
               .DefaultIfEmpty(' ')
-              .First();
-          }
-        } else {
-          // no points and no commas => English format
-          numberFormat = NumberFormatInfo.InvariantInfo;
-          dateTimeFormatInfo = DateTimeFormatInfo.InvariantInfo;
-          separator = POSSIBLE_SEPARATORS
-            .Where(c => OccurrencesOf(charCounts, c) > 10)
-            .OrderBy(c => -OccurrencesOf(charCounts, c))
-            .DefaultIfEmpty(' ')
-            .First();
+              .First()
+          };
         }
       }
@@ -540,9 +573,9 @@
       }
 
-      public Tokenizer(StreamReader reader, NumberFormatInfo numberFormatInfo, DateTimeFormatInfo dateTimeFormatInfo, char separator) {
+      public Tokenizer(StreamReader reader, TableFileFormatOptions formatOptions) {
         this.reader = reader;
-        this.numberFormatInfo = numberFormatInfo;
-        this.dateTimeFormatInfo = dateTimeFormatInfo;
-        this.separator = separator;
+        this.numberFormatInfo = formatOptions.NumberFormat;
+        this.dateTimeFormatInfo = formatOptions.DateTimeFormat;
+        this.separator = formatOptions.ColumnSeparator;
         this.separators = new char[] { separator };
         ReadNextTokens();
