Index: branches/ProblemInstancesRegressionAndClassification/HeuristicLab.Optimization.Views/3.3/ProblemView.cs
===================================================================
--- branches/ProblemInstancesRegressionAndClassification/HeuristicLab.Optimization.Views/3.3/ProblemView.cs	(revision 7794)
+++ branches/ProblemInstancesRegressionAndClassification/HeuristicLab.Optimization.Views/3.3/ProblemView.cs	(revision 7805)
@@ -20,4 +20,5 @@
 #endregion
 
+using System.Linq;
 using System.Windows.Forms;
 using HeuristicLab.Core.Views;
@@ -49,5 +50,5 @@
       if (consumer != null) {
         problemInstanceConsumerView.Content = consumer;
-        problemInstanceSplitContainer.Panel1Collapsed = !problemInstanceConsumerView.ContainsProviders();
+        problemInstanceSplitContainer.Panel1Collapsed = !problemInstanceConsumerView.ProblemInstanceProviders.Any();
       } else {
         problemInstanceSplitContainer.Panel1Collapsed = true;
Index: branches/ProblemInstancesRegressionAndClassification/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification/3.4/MultiObjective/SymbolicClassificationMultiObjectiveProblem.cs
===================================================================
--- branches/ProblemInstancesRegressionAndClassification/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification/3.4/MultiObjective/SymbolicClassificationMultiObjectiveProblem.cs	(revision 7794)
+++ branches/ProblemInstancesRegressionAndClassification/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification/3.4/MultiObjective/SymbolicClassificationMultiObjectiveProblem.cs	(revision 7805)
@@ -25,4 +25,5 @@
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Problems.Instances;
 
 namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Classification {
@@ -30,5 +31,6 @@
   [StorableClass]
   [Creatable("Problems")]
-  public class SymbolicClassificationMultiObjectiveProblem : SymbolicDataAnalysisMultiObjectiveProblem<IClassificationProblemData, ISymbolicClassificationMultiObjectiveEvaluator, ISymbolicDataAnalysisSolutionCreator>, IClassificationProblem {
+  public class SymbolicClassificationMultiObjectiveProblem : SymbolicDataAnalysisMultiObjectiveProblem<IClassificationProblemData, ISymbolicClassificationMultiObjectiveEvaluator, ISymbolicDataAnalysisSolutionCreator>, IClassificationProblem,
+    IProblemInstanceConsumer<IClassificationProblemData>, IProblemInstanceExporter<IClassificationProblemData> {
     private const double PunishmentFactor = 10;
     private const int InitialMaximumTreeDepth = 8;
@@ -107,4 +109,19 @@
       }
     }
+
+    #region Import & Export
+    public new void Load(IClassificationProblemData data) {
+      base.Load(data);
+    }
+
+    public IClassificationProblemData Export() {
+      if (ProblemData is IClassificationProblemData) {
+        return ProblemData;
+      } else {
+        ClassificationProblemData claData = new ClassificationProblemData(ProblemData.Dataset, ProblemData.AllowedInputVariables, ProblemData.TargetVariable);
+        return base.Export(claData);
+      }
+    }
+    #endregion
   }
 }
Index: branches/ProblemInstancesRegressionAndClassification/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification/3.4/SingleObjective/SymbolicClassificationSingleObjectiveProblem.cs
===================================================================
--- branches/ProblemInstancesRegressionAndClassification/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification/3.4/SingleObjective/SymbolicClassificationSingleObjectiveProblem.cs	(revision 7794)
+++ branches/ProblemInstancesRegressionAndClassification/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification/3.4/SingleObjective/SymbolicClassificationSingleObjectiveProblem.cs	(revision 7805)
@@ -31,5 +31,5 @@
   [Creatable("Problems")]
   public class SymbolicClassificationSingleObjectiveProblem : SymbolicDataAnalysisSingleObjectiveProblem<IClassificationProblemData, ISymbolicClassificationSingleObjectiveEvaluator, ISymbolicDataAnalysisSolutionCreator>, IClassificationProblem,
-    IProblemInstanceConsumer<ClassificationProblemData>, IProblemInstanceExporter<ClassificationProblemData> {
+    IProblemInstanceConsumer<IClassificationProblemData>, IProblemInstanceExporter<IClassificationProblemData> {
     private const double PunishmentFactor = 10;
     private const int InitialMaximumTreeDepth = 8;
@@ -112,14 +112,14 @@
 
     #region Import & Export
-    public void Load(ClassificationProblemData data) {
+    public new void Load(IClassificationProblemData data) {
       base.Load(data);
     }
 
-    public ClassificationProblemData Export() {
-      if (ProblemData is ClassificationProblemData) {
-        return (ClassificationProblemData)ProblemData;
+    public IClassificationProblemData Export() {
+      if (ProblemData is IClassificationProblemData) {
+        return ProblemData;
       } else {
         ClassificationProblemData claData = new ClassificationProblemData(ProblemData.Dataset, ProblemData.AllowedInputVariables, ProblemData.TargetVariable);
-        return (ClassificationProblemData)base.Export(claData);
+        return base.Export(claData);
       }
     }
Index: branches/ProblemInstancesRegressionAndClassification/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/MultiObjective/SymbolicRegressionMultiObjectiveProblem.cs
===================================================================
--- branches/ProblemInstancesRegressionAndClassification/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/MultiObjective/SymbolicRegressionMultiObjectiveProblem.cs	(revision 7794)
+++ branches/ProblemInstancesRegressionAndClassification/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/MultiObjective/SymbolicRegressionMultiObjectiveProblem.cs	(revision 7805)
@@ -26,4 +26,5 @@
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Problems.Instances;
 
 namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Regression {
@@ -31,5 +32,6 @@
   [StorableClass]
   [Creatable("Problems")]
-  public class SymbolicRegressionMultiObjectiveProblem : SymbolicDataAnalysisMultiObjectiveProblem<IRegressionProblemData, ISymbolicRegressionMultiObjectiveEvaluator, ISymbolicDataAnalysisSolutionCreator>, IRegressionProblem {
+  public class SymbolicRegressionMultiObjectiveProblem : SymbolicDataAnalysisMultiObjectiveProblem<IRegressionProblemData, ISymbolicRegressionMultiObjectiveEvaluator, ISymbolicDataAnalysisSolutionCreator>, IRegressionProblem,
+    IProblemInstanceConsumer<IRegressionProblemData>, IProblemInstanceExporter<IRegressionProblemData> {
     private const double PunishmentFactor = 10;
     private const int InitialMaximumTreeDepth = 8;
@@ -111,4 +113,19 @@
       }
     }
+
+    #region Import & Export
+    public new void Load(IRegressionProblemData data) {
+      base.Load(data);
+    }
+
+    public IRegressionProblemData Export() {
+      if (ProblemData is IRegressionProblemData)
+        return ProblemData;
+      else {
+        IRegressionProblemData regData = new RegressionProblemData(ProblemData.Dataset, ProblemData.AllowedInputVariables, ProblemData.TargetVariable);
+        return base.Export(regData);
+      }
+    }
+    #endregion
   }
 }
Index: branches/ProblemInstancesRegressionAndClassification/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/SingleObjective/SymbolicRegressionSingleObjectiveProblem.cs
===================================================================
--- branches/ProblemInstancesRegressionAndClassification/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/SingleObjective/SymbolicRegressionSingleObjectiveProblem.cs	(revision 7794)
+++ branches/ProblemInstancesRegressionAndClassification/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/SingleObjective/SymbolicRegressionSingleObjectiveProblem.cs	(revision 7805)
@@ -32,5 +32,5 @@
   [Creatable("Problems")]
   public class SymbolicRegressionSingleObjectiveProblem : SymbolicDataAnalysisSingleObjectiveProblem<IRegressionProblemData, ISymbolicRegressionSingleObjectiveEvaluator, ISymbolicDataAnalysisSolutionCreator>, IRegressionProblem,
-    IProblemInstanceConsumer<RegressionProblemData>, IProblemInstanceExporter<RegressionProblemData> {
+    IProblemInstanceConsumer<IRegressionProblemData>, IProblemInstanceExporter<IRegressionProblemData> {
     private const double PunishmentFactor = 10;
     private const int InitialMaximumTreeDepth = 8;
@@ -115,14 +115,14 @@
 
     #region Import & Export
-    public void Load(RegressionProblemData data) {
+    public new void Load(IRegressionProblemData data) {
       base.Load(data);
     }
 
-    public RegressionProblemData Export() {
-      if (ProblemData is RegressionProblemData)
-        return (RegressionProblemData)ProblemData;
+    public IRegressionProblemData Export() {
+      if (ProblemData is IRegressionProblemData)
+        return ProblemData;
       else {
-        RegressionProblemData regData = new RegressionProblemData(ProblemData.Dataset, ProblemData.AllowedInputVariables, ProblemData.TargetVariable);
-        return (RegressionProblemData)base.Export(regData);
+        IRegressionProblemData regData = new RegressionProblemData(ProblemData.Dataset, ProblemData.AllowedInputVariables, ProblemData.TargetVariable);
+        return base.Export(regData);
       }
     }
Index: branches/ProblemInstancesRegressionAndClassification/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Classification/ClassificationProblem.cs
===================================================================
--- branches/ProblemInstancesRegressionAndClassification/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Classification/ClassificationProblem.cs	(revision 7794)
+++ branches/ProblemInstancesRegressionAndClassification/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Classification/ClassificationProblem.cs	(revision 7805)
@@ -30,5 +30,5 @@
   [Creatable("Problems")]
   public class ClassificationProblem : DataAnalysisProblem<IClassificationProblemData>, IClassificationProblem, IStorableContent,
-    IProblemInstanceConsumer<ClassificationProblemData>, IProblemInstanceExporter<ClassificationProblemData> {
+    IProblemInstanceConsumer<IClassificationProblemData>, IProblemInstanceExporter<IClassificationProblemData> {
     public string Filename { get; set; }
 
@@ -44,14 +44,14 @@
 
     #region Import & Export
-    public void Load(ClassificationProblemData data) {
+    public new void Load(IClassificationProblemData data) {
       base.Load(data);
     }
 
-    public ClassificationProblemData Export() {
-      if (ProblemData is ClassificationProblemData) {
-        return (ClassificationProblemData)ProblemData;
+    public IClassificationProblemData Export() {
+      if (ProblemData is IClassificationProblemData) {
+        return ProblemData;
       } else {
         ClassificationProblemData claData = new ClassificationProblemData(ProblemData.Dataset, ProblemData.AllowedInputVariables, ProblemData.TargetVariable);
-        return (ClassificationProblemData)base.Export(claData);
+        return base.Export(claData);
       }
     }
Index: branches/ProblemInstancesRegressionAndClassification/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Regression/RegressionProblem.cs
===================================================================
--- branches/ProblemInstancesRegressionAndClassification/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Regression/RegressionProblem.cs	(revision 7794)
+++ branches/ProblemInstancesRegressionAndClassification/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Regression/RegressionProblem.cs	(revision 7805)
@@ -30,5 +30,5 @@
   [Creatable("Problems")]
   public class RegressionProblem : DataAnalysisProblem<IRegressionProblemData>, IRegressionProblem, IStorableContent,
-    IProblemInstanceConsumer<RegressionProblemData>, IProblemInstanceExporter<RegressionProblemData> {
+    IProblemInstanceConsumer<IRegressionProblemData>, IProblemInstanceExporter<IRegressionProblemData> {
     public string Filename { get; set; }
 
@@ -44,14 +44,14 @@
 
     #region Import & Export
-    public void Load(RegressionProblemData data) {
+    public new void Load(IRegressionProblemData data) {
       base.Load(data);
     }
 
-    public RegressionProblemData Export() {
-      if (ProblemData is RegressionProblemData) {
-        return (RegressionProblemData)ProblemData;
+    public IRegressionProblemData Export() {
+      if (ProblemData is IRegressionProblemData) {
+        return ProblemData;
       } else {
         RegressionProblemData regData = new RegressionProblemData(ProblemData.Dataset, ProblemData.AllowedInputVariables, ProblemData.TargetVariable);
-        return (RegressionProblemData)base.Export(regData);
+        return base.Export(regData);
       }
     }
Index: branches/ProblemInstancesRegressionAndClassification/HeuristicLab.Problems.Instances.Classification/3.4/ArtificialClassificationDataDescriptor.cs
===================================================================
--- branches/ProblemInstancesRegressionAndClassification/HeuristicLab.Problems.Instances.Classification/3.4/ArtificialClassificationDataDescriptor.cs	(revision 7794)
+++ branches/ProblemInstancesRegressionAndClassification/HeuristicLab.Problems.Instances.Classification/3.4/ArtificialClassificationDataDescriptor.cs	(revision 7805)
@@ -36,5 +36,5 @@
     protected abstract int TestPartitionEnd { get; }
 
-    public ClassificationProblemData GenerateClassificationData() {
+    public IClassificationProblemData GenerateClassificationData() {
       Dataset dataset = new Dataset(InputVariables, this.GenerateValues());
 
Index: branches/ProblemInstancesRegressionAndClassification/HeuristicLab.Problems.Instances.Classification/3.4/ArtificialClassificationInstanceProvider.cs
===================================================================
--- branches/ProblemInstancesRegressionAndClassification/HeuristicLab.Problems.Instances.Classification/3.4/ArtificialClassificationInstanceProvider.cs	(revision 7794)
+++ branches/ProblemInstancesRegressionAndClassification/HeuristicLab.Problems.Instances.Classification/3.4/ArtificialClassificationInstanceProvider.cs	(revision 7805)
@@ -24,5 +24,5 @@
 namespace HeuristicLab.Problems.Instances.Classification {
   public abstract class ArtificialClassificationInstanceProvider : ClassificationInstanceProvider {
-    public override ClassificationProblemData LoadData(IDataDescriptor descriptor) {
+    public override IClassificationProblemData LoadData(IDataDescriptor descriptor) {
       return ((ArtificialClassificationDataDescriptor)descriptor).GenerateClassificationData();
     }
Index: branches/ProblemInstancesRegressionAndClassification/HeuristicLab.Problems.Instances.Classification/3.4/ClassificationInstanceProvider.cs
===================================================================
--- branches/ProblemInstancesRegressionAndClassification/HeuristicLab.Problems.Instances.Classification/3.4/ClassificationInstanceProvider.cs	(revision 7794)
+++ branches/ProblemInstancesRegressionAndClassification/HeuristicLab.Problems.Instances.Classification/3.4/ClassificationInstanceProvider.cs	(revision 7805)
@@ -23,4 +23,5 @@
 using System.Collections;
 using System.Collections.Generic;
+using System.Globalization;
 using System.IO;
 using System.Linq;
@@ -29,14 +30,12 @@
 
 namespace HeuristicLab.Problems.Instances.Classification {
-  public abstract class ClassificationInstanceProvider : IProblemInstanceProvider<ClassificationProblemData> {
-    public ClassificationProblemData LoadData(string path) {
-      TableFileParser csvFileParser = new TableFileParser();
-      csvFileParser.Parse(path);
+  public abstract class ClassificationInstanceProvider : IProblemInstanceProvider<IClassificationProblemData> {
+    public IClassificationProblemData LoadData(string path) {
+      NumberFormatInfo numberFormat;
+      DateTimeFormatInfo dateFormat;
+      char separator;
+      TableFileParser.DetermineFileFormat(new FileStream(path, FileMode.Open), out numberFormat, out dateFormat, out separator);
 
-      Dataset dataset = new Dataset(csvFileParser.VariableNames, csvFileParser.Values);
-      string targetVar = csvFileParser.VariableNames.Last();
-      IEnumerable<string> allowedInputVars = csvFileParser.VariableNames.Where(x => !x.Equals(targetVar));
-
-      ClassificationProblemData claData = new ClassificationProblemData(dataset, allowedInputVars, targetVar);
+      IClassificationProblemData claData = LoadData(new FileStream(path, FileMode.Open), numberFormat, dateFormat, separator);
       int pos = path.LastIndexOf('\\');
       if (pos < 0)
@@ -46,4 +45,18 @@
         claData.Name = path.Substring(pos, path.Length - pos);
       }
+
+      return claData;
+    }
+
+    protected IClassificationProblemData LoadData(Stream stream, NumberFormatInfo numberFormat, DateTimeFormatInfo dateFormat, char separator) {
+      TableFileParser csvFileParser = new TableFileParser();
+
+      csvFileParser.Parse(stream, numberFormat, dateFormat, separator);
+
+      Dataset dataset = new Dataset(csvFileParser.VariableNames, csvFileParser.Values);
+      string targetVar = csvFileParser.VariableNames.Last();
+      IEnumerable<string> allowedInputVars = csvFileParser.VariableNames.Where(x => !x.Equals(targetVar));
+
+      ClassificationProblemData claData = new ClassificationProblemData(dataset, allowedInputVars, targetVar);
 
       int trainingPartEnd = csvFileParser.Rows * 2 / 3;
@@ -55,5 +68,5 @@
     }
 
-    public void SaveData(ClassificationProblemData instance, string path) {
+    public void SaveData(IClassificationProblemData instance, string path) {
       StringBuilder strBuilder = new StringBuilder();
 
@@ -80,5 +93,5 @@
 
     public abstract IEnumerable<IDataDescriptor> GetDataDescriptors();
-    public abstract ClassificationProblemData LoadData(IDataDescriptor descriptor);
+    public abstract IClassificationProblemData LoadData(IDataDescriptor descriptor);
 
     public abstract string Name { get; }
Index: branches/ProblemInstancesRegressionAndClassification/HeuristicLab.Problems.Instances.Classification/3.4/RealWorld/RealWorldInstanceProvider.cs
===================================================================
--- branches/ProblemInstancesRegressionAndClassification/HeuristicLab.Problems.Instances.Classification/3.4/RealWorld/RealWorldInstanceProvider.cs	(revision 7794)
+++ branches/ProblemInstancesRegressionAndClassification/HeuristicLab.Problems.Instances.Classification/3.4/RealWorld/RealWorldInstanceProvider.cs	(revision 7805)
@@ -52,5 +52,10 @@
       if (!String.IsNullOrEmpty(solutionsArchiveName)) {
         using (var solutionsZipFile = new ZipInputStream(GetType().Assembly.GetManifestResourceStream(solutionsArchiveName))) {
-          foreach (var entry in GetZipContents(solutionsZipFile).OrderBy(x => x)) {
+          IList<string> entries = new List<string>();
+          ZipEntry curEntry;
+          while ((curEntry = solutionsZipFile.GetNextEntry()) != null) {
+            entries.Add(curEntry.Name);
+          }
+          foreach (var entry in entries.OrderBy(x => x)) {
             string prettyName = Path.GetFileNameWithoutExtension(entry);
             IDataDescriptor desc = descriptorList.Where(x => x.Name.Equals(prettyName)).FirstOrDefault();
Index: branches/ProblemInstancesRegressionAndClassification/HeuristicLab.Problems.Instances.Classification/3.4/ResourceClassificationInstanceProvider.cs
===================================================================
--- branches/ProblemInstancesRegressionAndClassification/HeuristicLab.Problems.Instances.Classification/3.4/ResourceClassificationInstanceProvider.cs	(revision 7794)
+++ branches/ProblemInstancesRegressionAndClassification/HeuristicLab.Problems.Instances.Classification/3.4/ResourceClassificationInstanceProvider.cs	(revision 7805)
@@ -22,4 +22,5 @@
 using System;
 using System.Collections.Generic;
+using System.Globalization;
 using System.IO;
 using System.Linq;
@@ -38,18 +39,37 @@
       if (!String.IsNullOrEmpty(solutionsArchiveName)) {
         using (var solutionsZipFile = new ZipInputStream(GetType().Assembly.GetManifestResourceStream(solutionsArchiveName))) {
-          foreach (var entry in GetZipContents(solutionsZipFile).OrderBy(x => x))
+          IList<string> entries = new List<string>();
+          ZipEntry curEntry;
+          while ((curEntry = solutionsZipFile.GetNextEntry()) != null) {
+            entries.Add(curEntry.Name);
+          }
+          foreach (var entry in entries.OrderBy(x => x)) {
             yield return new ResourceClassificationDataDescriptor(Path.GetFileNameWithoutExtension(entry), Description, entry);
+          }
         }
       }
     }
 
-    public override ClassificationProblemData LoadData(IDataDescriptor id) {
+    public override IClassificationProblemData LoadData(IDataDescriptor id) {
       var descriptor = (ResourceClassificationDataDescriptor)id;
 
-      ClassificationProblemData claData = LoadData(GetTempFileForResource(descriptor.ResourceName));
-      claData.Name = descriptor.Name;
-      claData.Description = descriptor.Description;
+      var instanceArchiveName = GetResourceName(FileName + @"\.zip");
+      using (var instancesZipFile = new ZipFile(GetType().Assembly.GetManifestResourceStream(instanceArchiveName))) {
+        var entry = instancesZipFile.GetEntry(descriptor.ResourceName);
+        NumberFormatInfo numberFormat;
+        DateTimeFormatInfo dateFormat;
+        char separator;
+        using (Stream stream = instancesZipFile.GetInputStream(entry)) {
+          TableFileParser.DetermineFileFormat(stream, out numberFormat, out dateFormat, out separator);
+        }
 
-      return claData;
+        IClassificationProblemData claData;
+        using (Stream stream = instancesZipFile.GetInputStream(entry)) {
+          claData = LoadData(stream, numberFormat, dateFormat, separator);
+        }
+        claData.Name = descriptor.Name;
+        claData.Description = descriptor.Description;
+        return claData;
+      }
     }
 
@@ -58,32 +78,4 @@
               .Where(x => Regex.Match(x, @".*\.Data\." + fileName).Success).SingleOrDefault();
     }
-
-    protected IEnumerable<string> GetZipContents(ZipInputStream zipFile) {
-      ZipEntry entry;
-      while ((entry = zipFile.GetNextEntry()) != null) {
-        yield return entry.Name;
-      }
-    }
-
-    private string GetTempFileForResource(string resourceName) {
-      var instanceArchiveName = GetResourceName(FileName + @"\.zip");
-      using (var instancesZipFile = new ZipFile(GetType().Assembly.GetManifestResourceStream(instanceArchiveName))) {
-        var entry = instancesZipFile.GetEntry(resourceName);
-        string path = Path.GetTempFileName();
-        using (var stream = instancesZipFile.GetInputStream(entry)) {
-          WriteStreamToTempFile(stream, path);
-        }
-        return path;
-      }
-    }
-
-    private void WriteStreamToTempFile(Stream stream, string path) {
-      using (FileStream output = new FileStream(path, FileMode.Create, FileAccess.Write)) {
-        int cnt = 0;
-        byte[] buffer = new byte[32 * 1024];
-        while ((cnt = stream.Read(buffer, 0, buffer.Length)) != 0)
-          output.Write(buffer, 0, cnt);
-      }
-    }
   }
 }
Index: branches/ProblemInstancesRegressionAndClassification/HeuristicLab.Problems.Instances.Regression/3.4/ArtificialRegressionDataDescriptor.cs
===================================================================
--- branches/ProblemInstancesRegressionAndClassification/HeuristicLab.Problems.Instances.Regression/3.4/ArtificialRegressionDataDescriptor.cs	(revision 7794)
+++ branches/ProblemInstancesRegressionAndClassification/HeuristicLab.Problems.Instances.Regression/3.4/ArtificialRegressionDataDescriptor.cs	(revision 7805)
@@ -36,5 +36,5 @@
     protected abstract int TestPartitionEnd { get; }
 
-    public RegressionProblemData GenerateRegressionData() {
+    public IRegressionProblemData GenerateRegressionData() {
       Dataset dataset = new Dataset(InputVariables, this.GenerateValues());
 
Index: branches/ProblemInstancesRegressionAndClassification/HeuristicLab.Problems.Instances.Regression/3.4/ArtificialRegressionInstanceProvider.cs
===================================================================
--- branches/ProblemInstancesRegressionAndClassification/HeuristicLab.Problems.Instances.Regression/3.4/ArtificialRegressionInstanceProvider.cs	(revision 7794)
+++ branches/ProblemInstancesRegressionAndClassification/HeuristicLab.Problems.Instances.Regression/3.4/ArtificialRegressionInstanceProvider.cs	(revision 7805)
@@ -24,5 +24,5 @@
 namespace HeuristicLab.Problems.Instances.Regression {
   public abstract class ArtificialRegressionInstanceProvider : RegressionInstanceProvider {
-    public override RegressionProblemData LoadData(IDataDescriptor descriptor) {
+    public override IRegressionProblemData LoadData(IDataDescriptor descriptor) {
       return ((ArtificialRegressionDataDescriptor)descriptor).GenerateRegressionData();
     }
Index: branches/ProblemInstancesRegressionAndClassification/HeuristicLab.Problems.Instances.Regression/3.4/RealWorld/RealWorldInstanceProvider.cs
===================================================================
--- branches/ProblemInstancesRegressionAndClassification/HeuristicLab.Problems.Instances.Regression/3.4/RealWorld/RealWorldInstanceProvider.cs	(revision 7794)
+++ branches/ProblemInstancesRegressionAndClassification/HeuristicLab.Problems.Instances.Regression/3.4/RealWorld/RealWorldInstanceProvider.cs	(revision 7805)
@@ -39,5 +39,5 @@
     }
 
-    protected override string FileExtension { get { return "RealWorld"; } }
+    protected override string FileName { get { return "RealWorld"; } }
   }
 }
Index: branches/ProblemInstancesRegressionAndClassification/HeuristicLab.Problems.Instances.Regression/3.4/RegressionInstanceProvider.cs
===================================================================
--- branches/ProblemInstancesRegressionAndClassification/HeuristicLab.Problems.Instances.Regression/3.4/RegressionInstanceProvider.cs	(revision 7794)
+++ branches/ProblemInstancesRegressionAndClassification/HeuristicLab.Problems.Instances.Regression/3.4/RegressionInstanceProvider.cs	(revision 7805)
@@ -23,4 +23,5 @@
 using System.Collections;
 using System.Collections.Generic;
+using System.Globalization;
 using System.IO;
 using System.Linq;
@@ -29,14 +30,14 @@
 
 namespace HeuristicLab.Problems.Instances.Regression {
-  public abstract class RegressionInstanceProvider : IProblemInstanceProvider<RegressionProblemData> {
-    public RegressionProblemData LoadData(string path) {
-      TableFileParser csvFileParser = new TableFileParser();
-      csvFileParser.Parse(path);
+  public abstract class RegressionInstanceProvider : IProblemInstanceProvider<IRegressionProblemData> {
 
-      Dataset dataset = new Dataset(csvFileParser.VariableNames, csvFileParser.Values);
-      string targetVar = csvFileParser.VariableNames.Last();
-      IEnumerable<string> allowedInputVars = csvFileParser.VariableNames.Where(x => !x.Equals(targetVar));
+    public IRegressionProblemData LoadData(string path) {
+      NumberFormatInfo numberFormat;
+      DateTimeFormatInfo dateFormat;
+      char separator;
+      TableFileParser.DetermineFileFormat(path, out numberFormat, out dateFormat, out separator);
 
-      RegressionProblemData regData = new RegressionProblemData(dataset, allowedInputVars, targetVar);
+      IRegressionProblemData regData = LoadData(new FileStream(path, FileMode.Open), numberFormat, dateFormat, separator);
+
       int pos = path.LastIndexOf('\\');
       if (pos < 0)
@@ -46,4 +47,17 @@
         regData.Name = path.Substring(pos, path.Length - pos);
       }
+      return regData;
+    }
+
+    protected IRegressionProblemData LoadData(Stream stream, NumberFormatInfo numberFormat, DateTimeFormatInfo dateFormat, char separator) {
+      TableFileParser csvFileParser = new TableFileParser();
+
+      csvFileParser.Parse(stream, numberFormat, dateFormat, separator);
+
+      Dataset dataset = new Dataset(csvFileParser.VariableNames, csvFileParser.Values);
+      string targetVar = csvFileParser.VariableNames.Last();
+      IEnumerable<string> allowedInputVars = csvFileParser.VariableNames.Where(x => !x.Equals(targetVar));
+
+      RegressionProblemData regData = new RegressionProblemData(dataset, allowedInputVars, targetVar);
 
       int trainingPartEnd = csvFileParser.Rows * 2 / 3;
@@ -52,8 +66,9 @@
       regData.TestPartition.Start = trainingPartEnd;
       regData.TestPartition.End = csvFileParser.Rows;
+
       return regData;
     }
 
-    public void SaveData(RegressionProblemData instance, string path) {
+    public void SaveData(IRegressionProblemData instance, string path) {
       StringBuilder strBuilder = new StringBuilder();
 
@@ -80,5 +95,5 @@
 
     public abstract IEnumerable<IDataDescriptor> GetDataDescriptors();
-    public abstract RegressionProblemData LoadData(IDataDescriptor descriptor);
+    public abstract IRegressionProblemData LoadData(IDataDescriptor descriptor);
 
     public abstract string Name { get; }
Index: branches/ProblemInstancesRegressionAndClassification/HeuristicLab.Problems.Instances.Regression/3.4/ResourceRegressionInstanceProvider.cs
===================================================================
--- branches/ProblemInstancesRegressionAndClassification/HeuristicLab.Problems.Instances.Regression/3.4/ResourceRegressionInstanceProvider.cs	(revision 7794)
+++ branches/ProblemInstancesRegressionAndClassification/HeuristicLab.Problems.Instances.Regression/3.4/ResourceRegressionInstanceProvider.cs	(revision 7805)
@@ -22,4 +22,5 @@
 using System;
 using System.Collections.Generic;
+using System.Globalization;
 using System.IO;
 using System.Linq;
@@ -32,24 +33,44 @@
   public abstract class ResourceRegressionInstanceProvider : RegressionInstanceProvider {
 
-    protected abstract string FileExtension { get; }
+    protected abstract string FileName { get; }
 
     public override IEnumerable<IDataDescriptor> GetDataDescriptors() {
-      var solutionsArchiveName = GetResourceName(FileExtension + @"\.zip");
+      var solutionsArchiveName = GetResourceName(FileName + @"\.zip");
       if (!String.IsNullOrEmpty(solutionsArchiveName)) {
         using (var solutionsZipFile = new ZipInputStream(GetType().Assembly.GetManifestResourceStream(solutionsArchiveName))) {
-          foreach (var entry in GetZipContents(solutionsZipFile).OrderBy(x => x))
+          IList<string> entries = new List<string>();
+          ZipEntry curEntry;
+          while ((curEntry = solutionsZipFile.GetNextEntry()) != null) {
+            entries.Add(curEntry.Name);
+          }
+          foreach (var entry in entries.OrderBy(x => x)) {
             yield return new ResourceRegressionDataDescriptor(Path.GetFileNameWithoutExtension(entry), Description, entry);
+          }
         }
       }
     }
 
-    public override RegressionProblemData LoadData(IDataDescriptor id) {
+    public override IRegressionProblemData LoadData(IDataDescriptor id) {
       var descriptor = (ResourceRegressionDataDescriptor)id;
 
-      RegressionProblemData regData = LoadData(GetTempFileForResource(descriptor.ResourceName));
-      regData.Name = descriptor.Name;
-      regData.Description = descriptor.Description;
+      var instanceArchiveName = GetResourceName(FileName + @"\.zip");
+      using (var instancesZipFile = new ZipFile(GetType().Assembly.GetManifestResourceStream(instanceArchiveName))) {
+        var entry = instancesZipFile.GetEntry(descriptor.ResourceName);
+        NumberFormatInfo numberFormat;
+        DateTimeFormatInfo dateFormat;
+        char separator;
+        using (Stream stream = instancesZipFile.GetInputStream(entry)) {
+          TableFileParser.DetermineFileFormat(stream, out numberFormat, out dateFormat, out separator);
+        }
 
-      return regData;
+        IRegressionProblemData regData;
+        using (Stream stream = instancesZipFile.GetInputStream(entry)) {
+          regData = LoadData(stream, numberFormat, dateFormat, separator);
+        }
+
+        regData.Name = descriptor.Name;
+        regData.Description = descriptor.Description;
+        return regData;
+      }
     }
 
@@ -58,32 +79,4 @@
               .Where(x => Regex.Match(x, @".*\.Data\." + fileName).Success).SingleOrDefault();
     }
-
-    protected IEnumerable<string> GetZipContents(ZipInputStream zipFile) {
-      ZipEntry entry;
-      while ((entry = zipFile.GetNextEntry()) != null) {
-        yield return entry.Name;
-      }
-    }
-
-    private string GetTempFileForResource(string resourceName) {
-      var instanceArchiveName = GetResourceName(FileExtension + @"\.zip");
-      using (var instancesZipFile = new ZipFile(GetType().Assembly.GetManifestResourceStream(instanceArchiveName))) {
-        var entry = instancesZipFile.GetEntry(resourceName);
-        string path = Path.GetTempFileName();
-        using (var stream = instancesZipFile.GetInputStream(entry)) {
-          WriteStreamToTempFile(stream, path);
-        }
-        return path;
-      }
-    }
-
-    private void WriteStreamToTempFile(Stream stream, string path) {
-      using (FileStream output = new FileStream(path, FileMode.Create, FileAccess.Write)) {
-        int cnt = 0;
-        byte[] buffer = new byte[32 * 1024];
-        while ((cnt = stream.Read(buffer, 0, buffer.Length)) != 0)
-          output.Write(buffer, 0, cnt);
-      }
-    }
   }
 }
Index: branches/ProblemInstancesRegressionAndClassification/HeuristicLab.Problems.Instances.Regression/3.4/TrentMcConaghy/TrentMcConaghyInstanceProvider.cs
===================================================================
--- branches/ProblemInstancesRegressionAndClassification/HeuristicLab.Problems.Instances.Regression/3.4/TrentMcConaghy/TrentMcConaghyInstanceProvider.cs	(revision 7794)
+++ branches/ProblemInstancesRegressionAndClassification/HeuristicLab.Problems.Instances.Regression/3.4/TrentMcConaghy/TrentMcConaghyInstanceProvider.cs	(revision 7805)
@@ -45,8 +45,8 @@
     }
 
-    protected override string FileExtension { get { return "TrentMcConaghy"; } }
+    protected override string FileName { get { return "TrentMcConaghy"; } }
 
-    public override RegressionProblemData LoadData(IDataDescriptor id) {
-      RegressionProblemData regData = base.LoadData(id);
+    public override IRegressionProblemData LoadData(IDataDescriptor id) {
+      IRegressionProblemData regData = base.LoadData(id);
       string targetVar = regData.InputVariables.First().Value;
       IEnumerable<string> allowedInputVars = regData.InputVariables.Where(x => !x.Equals(regData.TargetVariable)).Select(x => x.Value);
Index: branches/ProblemInstancesRegressionAndClassification/HeuristicLab.Problems.Instances.Views/3.4/ProblemInstanceConsumerView.Designer.cs
===================================================================
--- branches/ProblemInstancesRegressionAndClassification/HeuristicLab.Problems.Instances.Views/3.4/ProblemInstanceConsumerView.Designer.cs	(revision 7794)
+++ branches/ProblemInstancesRegressionAndClassification/HeuristicLab.Problems.Instances.Views/3.4/ProblemInstanceConsumerView.Designer.cs	(revision 7805)
@@ -62,5 +62,4 @@
       this.problemInstanceProviderComboBox.TabIndex = 16;
       this.problemInstanceProviderComboBox.SelectedIndexChanged += new System.EventHandler(this.problemInstanceProviderComboBox_SelectedIndexChanged);
-      this.problemInstanceProviderComboBox.DataSourceChanged += new System.EventHandler(this.comboBox_DataSourceChanged);
       // 
       // libraryInfoButton
@@ -85,5 +84,5 @@
       // problemInstanceProviderViewHost
       // 
-      this.problemInstanceProviderViewHost.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+      this.problemInstanceProviderViewHost.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
             | System.Windows.Forms.AnchorStyles.Right)));
       this.problemInstanceProviderViewHost.Caption = "View";
Index: branches/ProblemInstancesRegressionAndClassification/HeuristicLab.Problems.Instances.Views/3.4/ProblemInstanceConsumerView.cs
===================================================================
--- branches/ProblemInstancesRegressionAndClassification/HeuristicLab.Problems.Instances.Views/3.4/ProblemInstanceConsumerView.cs	(revision 7794)
+++ branches/ProblemInstancesRegressionAndClassification/HeuristicLab.Problems.Instances.Views/3.4/ProblemInstanceConsumerView.cs	(revision 7805)
@@ -40,6 +40,12 @@
     }
 
-    private IProblemInstanceProvider SelectedProvider {
-      get { return (problemInstanceProviderComboBox.SelectedIndex >= 0 ? (IProblemInstanceProvider)problemInstanceProviderComboBox.SelectedItem : null); }
+    public IProblemInstanceProvider SelectedProvider {
+      get;
+      private set;
+    }
+
+    public IEnumerable<IProblemInstanceProvider> ProblemInstanceProviders {
+      get;
+      private set;
     }
 
@@ -53,8 +59,10 @@
       base.OnContentChanged();
       if (Content == null) {
+        ProblemInstanceProviders = null;
         problemInstanceProviderComboBox.DataSource = null;
       } else {
         problemInstanceProviderComboBox.DisplayMember = "Name";
-        problemInstanceProviderComboBox.DataSource = GetProblemInstanceProviders().OrderBy(x => x.Name).ToList();
+        ProblemInstanceProviders = GetProblemInstanceProviders();
+        problemInstanceProviderComboBox.DataSource = ProblemInstanceProviders.OrderBy(x => x.Name).ToList();
       }
       SetEnabledStateOfControls();
@@ -90,4 +98,5 @@
     private void problemInstanceProviderComboBox_SelectedIndexChanged(object sender, System.EventArgs e) {
       if (problemInstanceProviderComboBox.SelectedIndex >= 0) {
+        SelectedProvider = (IProblemInstanceProvider)problemInstanceProviderComboBox.SelectedItem;
         problemInstanceProviderViewHost.Content = SelectedProvider;
         ProblemInstanceProviderView view = (ProblemInstanceProviderView)problemInstanceProviderViewHost.ActiveView;
@@ -97,5 +106,8 @@
         }
         SetTooltip();
+      } else {
+        SelectedProvider = null;
       }
+
       SetEnabledStateOfControls();
     }
@@ -104,10 +116,4 @@
       return Content.GetType().GetInterfaces()
                     .Any(x => x.Equals(typeof(IProblemInstanceExporter)));
-    }
-
-    private void comboBox_DataSourceChanged(object sender, EventArgs e) {
-      var comboBox = (ComboBox)sender;
-      if (comboBox.DataSource == null)
-        comboBox.Items.Clear();
     }
 
Index: branches/ProblemInstancesRegressionAndClassification/HeuristicLab.Problems.Instances/3.3/TableFileParser.cs
===================================================================
--- branches/ProblemInstancesRegressionAndClassification/HeuristicLab.Problems.Instances/3.3/TableFileParser.cs	(revision 7794)
+++ branches/ProblemInstancesRegressionAndClassification/HeuristicLab.Problems.Instances/3.3/TableFileParser.cs	(revision 7805)
@@ -33,5 +33,5 @@
   public class TableFileParser {
     private const int BUFFER_SIZE = 1024;
-    private readonly char[] POSSIBLE_SEPARATORS = new char[] { ',', ';', '\t' };
+    private static readonly char[] POSSIBLE_SEPARATORS = new char[] { ',', ';', '\t' };
     private Tokenizer tokenizer;
     private List<List<object>> rowValues;
@@ -75,10 +75,10 @@
     }
 
-    public void Parse(string fileName) {
-      NumberFormatInfo numberFormat;
-      DateTimeFormatInfo dateTimeFormatInfo;
-      char separator;
-      DetermineFileFormat(fileName, out numberFormat, out dateTimeFormatInfo, out separator);
-      using (StreamReader reader = new StreamReader(fileName)) {
+    public void Parse(string fileName, NumberFormatInfo numberFormat, DateTimeFormatInfo dateTimeFormatInfo, char separator) {
+      Parse(new FileStream(fileName, FileMode.Open), numberFormat, dateTimeFormatInfo, separator);
+    }
+
+    public void Parse(Stream stream, NumberFormatInfo numberFormat, DateTimeFormatInfo dateTimeFormatInfo, char separator) {
+      using (StreamReader reader = new StreamReader(stream)) {
         tokenizer = new Tokenizer(reader, numberFormat, dateTimeFormatInfo, separator);
         // parse the file
@@ -125,6 +125,10 @@
     }
 
-    private void DetermineFileFormat(string fileName, out NumberFormatInfo numberFormat, out DateTimeFormatInfo dateTimeFormatInfo, out char separator) {
-      using (StreamReader reader = new StreamReader(fileName)) {
+    public static void DetermineFileFormat(string path, out NumberFormatInfo numberFormat, out DateTimeFormatInfo dateTimeFormatInfo, out char separator) {
+      DetermineFileFormat(new FileStream(path, FileMode.Open), out numberFormat, out dateTimeFormatInfo, out separator);
+    }
+
+    public static void DetermineFileFormat(Stream stream, out NumberFormatInfo numberFormat, out DateTimeFormatInfo dateTimeFormatInfo, out char separator) {
+      using (StreamReader reader = new StreamReader(stream)) {
         // skip first line
         reader.ReadLine();
@@ -197,5 +201,5 @@
     }
 
-    private int OccurrencesOf(Dictionary<char, int> charCounts, char c) {
+    private static int OccurrencesOf(Dictionary<char, int> charCounts, char c) {
       return charCounts.ContainsKey(c) ? charCounts[c] : 0;
     }
Index: branches/ProblemInstancesRegressionAndClassification/HeuristicLab.Problems.QuadraticAssignment.Views/3.3/HeuristicLab.Problems.QuadraticAssignment.Views-3.3.csproj
===================================================================
--- branches/ProblemInstancesRegressionAndClassification/HeuristicLab.Problems.QuadraticAssignment.Views/3.3/HeuristicLab.Problems.QuadraticAssignment.Views-3.3.csproj	(revision 7794)
+++ branches/ProblemInstancesRegressionAndClassification/HeuristicLab.Problems.QuadraticAssignment.Views/3.3/HeuristicLab.Problems.QuadraticAssignment.Views-3.3.csproj	(revision 7805)
@@ -165,8 +165,4 @@
       <Private>False</Private>
     </Reference>
-    <Reference Include="HeuristicLab.Problems.DataAnalysis.Symbolic.Classification-3.4, Version=3.4.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
-      <Private>False</Private>
-      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Problems.DataAnalysis.Symbolic.Classification-3.4.dll</HintPath>
-    </Reference>
     <Reference Include="HeuristicLab.Problems.DataAnalysis.Symbolic.Classification.Views-3.4">
       <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Problems.DataAnalysis.Symbolic.Classification.Views-3.4.dll</HintPath>
@@ -175,7 +171,4 @@
     <Reference Include="HeuristicLab.Problems.DataAnalysis.Symbolic.Views-3.4">
       <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Problems.DataAnalysis.Symbolic.Views-3.4.dll</HintPath>
-      <Private>False</Private>
-    </Reference>
-    <Reference Include="HeuristicLab.Problems.DataAnalysis.Views-3.4, Version=3.4.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
       <Private>False</Private>
     </Reference>
@@ -230,4 +223,12 @@
       <Private>False</Private>
     </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Problems.DataAnalysis.Symbolic.Classification\3.4\HeuristicLab.Problems.DataAnalysis.Symbolic.Classification-3.4.csproj">
+      <Project>{05BAE4E1-A9FA-4644-AA77-42558720159E}</Project>
+      <Name>HeuristicLab.Problems.DataAnalysis.Symbolic.Classification-3.4</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Problems.DataAnalysis.Views\3.4\HeuristicLab.Problems.DataAnalysis.Views-3.4.csproj">
+      <Project>{3E9E8944-44FF-40BB-A622-3A4A7DD0F198}</Project>
+      <Name>HeuristicLab.Problems.DataAnalysis.Views-3.4</Name>
+    </ProjectReference>
     <ProjectReference Include="..\..\HeuristicLab.Problems.Instances\3.3\HeuristicLab.Problems.Instances-3.3.csproj">
       <Project>{3540E29E-4793-49E7-8EE2-FEA7F61C3994}</Project>
