Index: /trunk/sources/HeuristicLab.Optimizer/3.3/CreateExperimentDialog.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Optimizer/3.3/CreateExperimentDialog.Designer.cs	(revision 7840)
+++ /trunk/sources/HeuristicLab.Optimizer/3.3/CreateExperimentDialog.Designer.cs	(revision 7841)
@@ -46,4 +46,10 @@
     private void InitializeComponent() {
       this.components = new System.ComponentModel.Container();
+      System.Windows.Forms.ListViewGroup listViewGroup1 = new System.Windows.Forms.ListViewGroup("QAPLIB", System.Windows.Forms.HorizontalAlignment.Left);
+      System.Windows.Forms.ListViewGroup listViewGroup2 = new System.Windows.Forms.ListViewGroup("TSPLIB", System.Windows.Forms.HorizontalAlignment.Left);
+      System.Windows.Forms.ListViewItem listViewItem1 = new System.Windows.Forms.ListViewItem("bur26a");
+      System.Windows.Forms.ListViewItem listViewItem2 = new System.Windows.Forms.ListViewItem("esc32a");
+      System.Windows.Forms.ListViewItem listViewItem3 = new System.Windows.Forms.ListViewItem("berlin52");
+      System.Windows.Forms.ListViewItem listViewItem4 = new System.Windows.Forms.ListViewItem("ch130");
       this.okButton = new System.Windows.Forms.Button();
       this.cancelButton = new System.Windows.Forms.Button();
@@ -53,4 +59,7 @@
       this.repetitionsNumericUpDown = new System.Windows.Forms.NumericUpDown();
       this.toolTip = new System.Windows.Forms.ToolTip(this.components);
+      this.instancesLabel = new System.Windows.Forms.Label();
+      this.instancesListView = new System.Windows.Forms.ListView();
+      this.columnHeader = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
       ((System.ComponentModel.ISupportInitialize)(this.repetitionsNumericUpDown)).BeginInit();
       this.SuspendLayout();
@@ -61,5 +70,5 @@
       this.okButton.DialogResult = System.Windows.Forms.DialogResult.OK;
       this.okButton.Enabled = false;
-      this.okButton.Location = new System.Drawing.Point(113, 58);
+      this.okButton.Location = new System.Drawing.Point(113, 259);
       this.okButton.Name = "okButton";
       this.okButton.Size = new System.Drawing.Size(75, 23);
@@ -73,5 +82,5 @@
       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(194, 58);
+      this.cancelButton.Location = new System.Drawing.Point(194, 259);
       this.cancelButton.Name = "cancelButton";
       this.cancelButton.Size = new System.Drawing.Size(75, 23);
@@ -105,5 +114,5 @@
       // 
       this.repetitionsLabel.AutoSize = true;
-      this.repetitionsLabel.Location = new System.Drawing.Point(12, 30);
+      this.repetitionsLabel.Location = new System.Drawing.Point(12, 31);
       this.repetitionsLabel.Name = "repetitionsLabel";
       this.repetitionsLabel.Size = new System.Drawing.Size(63, 13);
@@ -113,6 +122,6 @@
       // repetitionsNumericUpDown
       // 
-      this.repetitionsNumericUpDown.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
-                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.repetitionsNumericUpDown.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
       this.repetitionsNumericUpDown.Location = new System.Drawing.Point(113, 28);
       this.repetitionsNumericUpDown.Maximum = new decimal(new int[] {
@@ -138,4 +147,56 @@
       this.repetitionsNumericUpDown.Validated += new System.EventHandler(this.repetitionsNumericUpDown_Validated);
       // 
+      // instancesLabel
+      // 
+      this.instancesLabel.AutoSize = true;
+      this.instancesLabel.Location = new System.Drawing.Point(12, 54);
+      this.instancesLabel.Name = "instancesLabel";
+      this.instancesLabel.Size = new System.Drawing.Size(56, 13);
+      this.instancesLabel.TabIndex = 2;
+      this.instancesLabel.Text = "&Instances:";
+      // 
+      // instancesListView
+      // 
+      this.instancesListView.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.instancesListView.CheckBoxes = true;
+      this.instancesListView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
+            this.columnHeader});
+      listViewGroup1.Header = "QAPLIB";
+      listViewGroup1.Name = "QAPLIBHeader";
+      listViewGroup2.Header = "TSPLIB";
+      listViewGroup2.Name = "TSPLIBHeader";
+      listViewGroup2.Tag = "";
+      this.instancesListView.Groups.AddRange(new System.Windows.Forms.ListViewGroup[] {
+            listViewGroup1,
+            listViewGroup2});
+      this.instancesListView.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None;
+      listViewItem1.Checked = true;
+      listViewItem1.Group = listViewGroup1;
+      listViewItem1.StateImageIndex = 1;
+      listViewItem2.Checked = true;
+      listViewItem2.Group = listViewGroup1;
+      listViewItem2.StateImageIndex = 1;
+      listViewItem3.Group = listViewGroup2;
+      listViewItem3.StateImageIndex = 0;
+      listViewItem4.Group = listViewGroup2;
+      listViewItem4.StateImageIndex = 0;
+      this.instancesListView.Items.AddRange(new System.Windows.Forms.ListViewItem[] {
+            listViewItem1,
+            listViewItem2,
+            listViewItem3,
+            listViewItem4});
+      this.instancesListView.Location = new System.Drawing.Point(113, 54);
+      this.instancesListView.Name = "instancesListView";
+      this.instancesListView.Size = new System.Drawing.Size(156, 199);
+      this.instancesListView.TabIndex = 6;
+      this.instancesListView.UseCompatibleStateImageBehavior = false;
+      this.instancesListView.View = System.Windows.Forms.View.Details;
+      // 
+      // columnHeader
+      // 
+      this.columnHeader.Width = 150;
+      // 
       // CreateExperimentDialog
       // 
@@ -144,6 +205,8 @@
       this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
       this.CancelButton = this.cancelButton;
-      this.ClientSize = new System.Drawing.Size(281, 93);
+      this.ClientSize = new System.Drawing.Size(281, 294);
+      this.Controls.Add(this.instancesListView);
       this.Controls.Add(this.repetitionsNumericUpDown);
+      this.Controls.Add(this.instancesLabel);
       this.Controls.Add(this.repetitionsLabel);
       this.Controls.Add(this.createBatchRunLabel);
@@ -173,4 +236,7 @@
     private System.Windows.Forms.NumericUpDown repetitionsNumericUpDown;
     private System.Windows.Forms.ToolTip toolTip;
+    private System.Windows.Forms.Label instancesLabel;
+    private System.Windows.Forms.ListView instancesListView;
+    private System.Windows.Forms.ColumnHeader columnHeader;
 
   }
Index: /trunk/sources/HeuristicLab.Optimizer/3.3/CreateExperimentDialog.cs
===================================================================
--- /trunk/sources/HeuristicLab.Optimizer/3.3/CreateExperimentDialog.cs	(revision 7840)
+++ /trunk/sources/HeuristicLab.Optimizer/3.3/CreateExperimentDialog.cs	(revision 7841)
@@ -21,6 +21,10 @@
 
 using System;
+using System.Collections.Generic;
+using System.Linq;
 using System.Windows.Forms;
 using HeuristicLab.Optimization;
+using HeuristicLab.PluginInfrastructure;
+using HeuristicLab.Problems.Instances;
 
 namespace HeuristicLab.Optimizer {
@@ -41,12 +45,57 @@
     }
 
-    public CreateExperimentDialog() {
+    public CreateExperimentDialog() : this(null) { }
+    public CreateExperimentDialog(IOptimizer optimizer) {
+      InitializeComponent();
+      Optimizer = optimizer;
       experiment = null;
-      optimizer = null;
-      InitializeComponent();
+      instancesListView.Items.Clear();
+      instancesListView.Groups.Clear();
+      FillOrHideInstanceListView();
     }
-    public CreateExperimentDialog(IOptimizer optimizer)
-      : this() {
-      Optimizer = optimizer;
+
+    private void FillOrHideInstanceListView() {
+      if (Optimizer != null && optimizer is IAlgorithm) {
+        var algorithm = (IAlgorithm)Optimizer;
+        if (algorithm.Problem != null) {
+          var instanceProviders = GetProblemInstanceProviders(algorithm.Problem);
+          if (instanceProviders.Any()) {
+            foreach (var provider in instanceProviders) {
+              var group = new ListViewGroup(provider.Name, provider.Name);
+              group.Tag = provider;
+              instancesListView.Groups.Add(group);
+              IEnumerable<IDataDescriptor> descriptors = ((dynamic)provider).GetDataDescriptors();
+              foreach (var d in descriptors) {
+                var item = new ListViewItem(d.Name, group);
+                item.Checked = true;
+                item.Tag = d;
+                instancesListView.Items.Add(item);
+              }
+            }
+            instancesListView.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent);
+            if (instancesListView.Items.Count > 0) return;
+          }
+        }
+      }
+      instancesLabel.Visible = false;
+      instancesListView.Visible = false;
+      Height = 130;
+    }
+
+    private IEnumerable<IProblemInstanceProvider> GetProblemInstanceProviders(IProblem problem) {
+      var consumerTypes = problem.GetType().GetInterfaces()
+        .Where(x => x.IsGenericType
+          && x.GetGenericTypeDefinition() == typeof(IProblemInstanceConsumer<>));
+
+      if (consumerTypes.Any()) {
+        var instanceTypes = consumerTypes
+          .Select(x => x.GetGenericArguments().First())
+          .Select(x => typeof(IProblemInstanceProvider<>).MakeGenericType(x));
+
+        foreach (var type in instanceTypes) {
+          foreach (var provider in ApplicationManager.Manager.GetInstances(type))
+            yield return (IProblemInstanceProvider)provider;
+        }
+      }
     }
 
@@ -60,14 +109,28 @@
     private void okButton_Click(object sender, EventArgs e) {
       experiment = new Experiment();
-      if (createBatchRunCheckBox.Checked) {
-        BatchRun batchRun = new BatchRun();
-        batchRun.Repetitions = (int)repetitionsNumericUpDown.Value;
-        batchRun.Optimizer = (IOptimizer)Optimizer.Clone();
-        Experiment.Optimizers.Add(batchRun);
+      if (instancesListView.CheckedItems.Count == 0) {
+        AddOptimizer((IOptimizer)Optimizer.Clone());
       } else {
-        Experiment.Optimizers.Add((IOptimizer)Optimizer.Clone());
+        foreach (var item in instancesListView.CheckedItems.OfType<ListViewItem>()) {
+          var descriptor = (IDataDescriptor)item.Tag;
+          var provider = (IProblemInstanceProvider)item.Group.Tag;
+          var algorithm = (IAlgorithm)Optimizer.Clone();
+          ((dynamic)algorithm.Problem).Load(((dynamic)provider).LoadData(descriptor));
+          AddOptimizer(algorithm);
+        }
       }
       Experiment.Prepare(true);
     }
+
+    private void AddOptimizer(IOptimizer optimizer) {
+      if (createBatchRunCheckBox.Checked) {
+        var batchRun = new BatchRun();
+        batchRun.Repetitions = (int)repetitionsNumericUpDown.Value;
+        batchRun.Optimizer = optimizer;
+        experiment.Optimizers.Add(batchRun);
+      } else {
+        experiment.Optimizers.Add(optimizer);
+      }
+    }
   }
 }
Index: /trunk/sources/HeuristicLab.Optimizer/3.3/HeuristicLab.Optimizer-3.3.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Optimizer/3.3/HeuristicLab.Optimizer-3.3.csproj	(revision 7840)
+++ /trunk/sources/HeuristicLab.Optimizer/3.3/HeuristicLab.Optimizer-3.3.csproj	(revision 7841)
@@ -99,4 +99,5 @@
   </PropertyGroup>
   <ItemGroup>
+    <Reference Include="Microsoft.CSharp" />
     <Reference Include="System" />
     <Reference Include="System.Core">
@@ -259,4 +260,8 @@
       <Name>HeuristicLab.PluginInfrastructure-3.3</Name>
       <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Problems.Instances\3.3\HeuristicLab.Problems.Instances-3.3.csproj">
+      <Project>{3540E29E-4793-49E7-8EE2-FEA7F61C3994}</Project>
+      <Name>HeuristicLab.Problems.Instances-3.3</Name>
     </ProjectReference>
   </ItemGroup>
Index: /trunk/sources/HeuristicLab.Optimizer/3.3/Plugin.cs.frame
===================================================================
--- /trunk/sources/HeuristicLab.Optimizer/3.3/Plugin.cs.frame	(revision 7840)
+++ /trunk/sources/HeuristicLab.Optimizer/3.3/Plugin.cs.frame	(revision 7841)
@@ -37,4 +37,5 @@
   [PluginDependency("HeuristicLab.Optimization", "3.3")]
   [PluginDependency("HeuristicLab.Persistence", "3.3")]
+  [PluginDependency("HeuristicLab.Problems.Instances", "3.3")]
   public class HeuristicLabOptimizerPlugin : PluginBase {
   }
