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 18096)
+++ /branches/3040_VectorBasedGP/HeuristicLab.Problems.Instances.DataAnalysis/3.3/HeuristicLab.Problems.Instances.DataAnalysis-3.3.csproj	(revision 18097)
@@ -426,4 +426,5 @@
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </None>
+    <EmbeddedResource Include="SegmentOptimization\Data\SOPData.zip" />
   </ItemGroup>
   <ItemGroup>
Index: /branches/3040_VectorBasedGP/HeuristicLab.Problems.Instances.DataAnalysis/3.3/SegmentOptimization/SOPDataDescriptor.cs
===================================================================
--- /branches/3040_VectorBasedGP/HeuristicLab.Problems.Instances.DataAnalysis/3.3/SegmentOptimization/SOPDataDescriptor.cs	(revision 18096)
+++ /branches/3040_VectorBasedGP/HeuristicLab.Problems.Instances.DataAnalysis/3.3/SegmentOptimization/SOPDataDescriptor.cs	(revision 18097)
@@ -20,4 +20,6 @@
 #endregion
 
+using System.Collections.Specialized;
+using HeuristicLab.Data;
 using HeuristicLab.Problems.Instances.Types;
 
@@ -26,12 +28,6 @@
     public string Name { get; internal set; }
     public string Description { get; internal set; }
-    //internal string InstanceIdentifier { get; set; }
+
     internal SOPData Data { get; set; }
-
-    //internal SOPDataDescriptor(string name, string description, string instanceIdentifier) {
-    //  Name = name;
-    //  Description = description;
-    //  InstanceIdentifier = instanceIdentifier;
-    //}
     internal SOPDataDescriptor(string name, string description, SOPData data) {
       data.Name = name;
@@ -42,4 +38,20 @@
       Data = data;
     }
+
+    internal string VariableName { get; set; }
+    internal int Row { get; set; }
+    internal int  Lower { get; set; }
+    internal int Upper { get; set; }
+    internal string Aggregation { get; set; }
+    internal SOPDataDescriptor(string name, string description, string variableName, int row, int lower, int upper, string aggregation) {
+      Name = name;
+      Description = description;
+
+      VariableName = variableName;
+      Row = row;
+      Lower = lower;
+      Upper = upper;
+      Aggregation = aggregation;
+    }
   }
 }
Index: /branches/3040_VectorBasedGP/HeuristicLab.Problems.Instances.DataAnalysis/3.3/SegmentOptimization/SegmentOptimizationInstanceProvider.cs
===================================================================
--- /branches/3040_VectorBasedGP/HeuristicLab.Problems.Instances.DataAnalysis/3.3/SegmentOptimization/SegmentOptimizationInstanceProvider.cs	(revision 18096)
+++ /branches/3040_VectorBasedGP/HeuristicLab.Problems.Instances.DataAnalysis/3.3/SegmentOptimization/SegmentOptimizationInstanceProvider.cs	(revision 18097)
@@ -22,13 +22,19 @@
 using System;
 using System.Collections.Generic;
+using System.Data;
+using System.IO.Compression;
 using System.Linq;
+using System.Reflection;
+using System.Text.RegularExpressions;
+using HeuristicLab.Problems.DataAnalysis;
 using HeuristicLab.Problems.Instances.Types;
 
 namespace HeuristicLab.Problems.Instances.DataAnalysis.SegmentOptimization {
-  public class SegmentOptimizationInstanceProvider  : ProblemInstanceProvider<SOPData> {
+  public class SegmentOptimizationInstanceProvider : ProblemInstanceProvider<SOPData> {
 
     public override string Name {
       get { return "Simple Generated"; }
     }
+
     public override string Description {
       get { return "Simple Generated"; }
@@ -37,5 +43,5 @@
     public override string ReferencePublication => "";
     public override Uri WebLink => null;
-    
+
     public override IEnumerable<IDataDescriptor> GetDataDescriptors() {
       return new[] {
@@ -58,4 +64,5 @@
       };
     }
+
     public override SOPData LoadData(IDataDescriptor id) {
       var descriptor = (SOPDataDescriptor)id;
@@ -63,3 +70,97 @@
     }
   }
+
+  public class SegmentOptimizationFileInstanceProvider : ProblemInstanceProvider<SOPData> {
+    public override string Name {
+      get { return "SOP File"; }
+    }
+
+    public override string Description {
+      get { return "SOP File"; }
+    }
+
+    public override string ReferencePublication => "";
+    public override Uri WebLink => null;
+
+    protected virtual string FileName => "SOPData";
+    protected virtual string ZipEntryName => "GeneratedVectors.csv";
+
+    public override IEnumerable<IDataDescriptor> GetDataDescriptors() {
+      return new[] {
+        new SOPDataDescriptor("v1", "", "v1", 0, 20, 60, "mean"),
+        new SOPDataDescriptor("v2", "", "v2", 0, 20, 60, "mean"),
+        new SOPDataDescriptor("v3", "", "v3", 0, 20, 60, "mean"),
+        new SOPDataDescriptor("v4", "", "v4", 0, 20, 40, "mean"),
+        new SOPDataDescriptor("v5", "", "v5", 0, 60, 80, "mean"),
+        new SOPDataDescriptor("v6", "", "v6", 0, 40, 60, "mean"),
+      };
+    }
+
+    public override SOPData LoadData(IDataDescriptor id) {
+      var descriptor = (SOPDataDescriptor)id;
+      var instanceArchiveName = GetResourceName(FileName + @"\.zip");
+
+      var parser = new TableFileParser();
+      var options = new TableFileFormatOptions {
+        ColumnSeparator = ';',
+        VectorSeparator = ','
+      };
+
+      using (var instancesZipFile = new ZipArchive(GetType().Assembly.GetManifestResourceStream(instanceArchiveName))) {
+        var entry = instancesZipFile.GetEntry(ZipEntryName);
+        using (var stream = entry.Open()) {
+          parser.Parse(stream, options, columnNamesInFirstLine: true);
+
+          var dataTable = new Dataset(parser.VariableNames, parser.Values);
+          var instance = LoadInstance(dataTable, descriptor);
+
+          instance.Name = id.Name;
+          instance.Description = id.Description;
+
+          return instance;
+        }
+      }
+    }
+
+    private SOPData LoadInstance(IDataset dataset, SOPDataDescriptor descriptor) {
+      var data = dataset.GetDoubleVectorValue(descriptor.VariableName, descriptor.Row);
+
+      return new SOPData {
+        Values = data.ToArray(),
+        Lower = descriptor.Lower,
+        Upper = descriptor.Upper,
+        Aggregation = descriptor.Aggregation
+      };
+    }
+
+    protected virtual string GetResourceName(string fileName) {
+      return Assembly.GetExecutingAssembly().GetManifestResourceNames()
+        .SingleOrDefault(x => Regex.Match(x, @".*\.Data\." + fileName).Success);
+    }
+
+    protected virtual string GetInstanceDescription() {
+      return "Embedded instance of plugin version " + Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyFileVersionAttribute), true).Cast<AssemblyFileVersionAttribute>().First().Version + ".";
+    }
+  }
+
+  public class SegmentOptimizationLargeFileInstanceProvider : SegmentOptimizationFileInstanceProvider {
+    public override string Name {
+      get { return "SOP Large File"; }
+    }
+
+    public override string Description {
+      get { return "SOP Large File"; }
+    }
+
+    protected override string ZipEntryName => "GeneratedVectorsLarge.csv";
+
+    public override IEnumerable<IDataDescriptor> GetDataDescriptors() {
+      return base.GetDataDescriptors().Select(id => {
+        var descriptor = (SOPDataDescriptor)id;
+        descriptor.Lower *= 10;
+        descriptor.Upper *= 10;
+        return descriptor;
+      });
+    }
+  }
 }
