Index: trunk/sources/HeuristicLab.Optimization.Views/3.3/HeuristicLab.Optimization.Views-3.3.csproj
===================================================================
--- trunk/sources/HeuristicLab.Optimization.Views/3.3/HeuristicLab.Optimization.Views-3.3.csproj	(revision 7558)
+++ trunk/sources/HeuristicLab.Optimization.Views/3.3/HeuristicLab.Optimization.Views-3.3.csproj	(revision 7641)
@@ -264,10 +264,4 @@
       <DependentUpon>EngineAlgorithmView.cs</DependentUpon>
     </Compile>
-    <Compile Include="HeuristicOptimizationProblemView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="HeuristicOptimizationProblemView.Designer.cs">
-      <DependentUpon>HeuristicOptimizationProblemView.cs</DependentUpon>
-    </Compile>
     <Compile Include="Properties\AssemblyInfo.cs" />
     <Compile Include="ResultCollectionView.cs">
Index: trunk/sources/HeuristicLab.Optimization.Views/3.3/HeuristicOptimizationProblemView.Designer.cs
===================================================================
--- trunk/sources/HeuristicLab.Optimization.Views/3.3/HeuristicOptimizationProblemView.Designer.cs	(revision 7558)
+++ 	(revision )
@@ -1,157 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-namespace HeuristicLab.Optimization.Views {
-  partial class HeuristicOptimizationProblemView {
-    /// <summary> 
-    /// Required designer variable.
-    /// </summary>
-    private System.ComponentModel.IContainer components = null;
-
-    /// <summary> 
-    /// Clean up any resources being used.
-    /// </summary>
-    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
-    protected override void Dispose(bool disposing) {
-      if (disposing && (components != null)) {
-        components.Dispose();
-      }
-      base.Dispose(disposing);
-    }
-
-    #region Component Designer generated code
-
-    /// <summary> 
-    /// Required method for Designer support - do not modify 
-    /// the contents of this method with the code editor.
-    /// </summary>
-    private void InitializeComponent() {
-      this.libraryLabel = new System.Windows.Forms.Label();
-      this.problemInstanceProviderViewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
-      this.problemInstanceProviderComboBox = new System.Windows.Forms.ComboBox();
-      this.libraryInfoButton = new System.Windows.Forms.Button();
-      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
-      this.SuspendLayout();
-      // 
-      // parameterCollectionView
-      // 
-      this.parameterCollectionView.Location = new System.Drawing.Point(0, 58);
-      this.parameterCollectionView.Size = new System.Drawing.Size(650, 394);
-      // 
-      // nameTextBox
-      // 
-      this.errorProvider.SetIconAlignment(this.nameTextBox, System.Windows.Forms.ErrorIconAlignment.MiddleLeft);
-      this.errorProvider.SetIconPadding(this.nameTextBox, 2);
-      this.nameTextBox.Location = new System.Drawing.Point(50, 32);
-      this.nameTextBox.Size = new System.Drawing.Size(578, 20);
-      // 
-      // nameLabel
-      // 
-      this.nameLabel.Location = new System.Drawing.Point(3, 35);
-      // 
-      // toolTip
-      // 
-      this.toolTip.AutoPopDelay = 10000;
-      this.toolTip.InitialDelay = 100;
-      this.toolTip.ReshowDelay = 100;
-      // 
-      // infoLabel
-      // 
-      this.infoLabel.Location = new System.Drawing.Point(634, 35);
-      // 
-      // libraryLabel
-      // 
-      this.libraryLabel.AutoSize = true;
-      this.libraryLabel.Location = new System.Drawing.Point(3, 8);
-      this.libraryLabel.Name = "libraryLabel";
-      this.libraryLabel.Size = new System.Drawing.Size(41, 13);
-      this.libraryLabel.TabIndex = 4;
-      this.libraryLabel.Text = "Library:";
-      // 
-      // problemInstanceProviderViewHost
-      // 
-      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";
-      this.problemInstanceProviderViewHost.Content = null;
-      this.problemInstanceProviderViewHost.Enabled = false;
-      this.problemInstanceProviderViewHost.Location = new System.Drawing.Point(259, 5);
-      this.problemInstanceProviderViewHost.Name = "problemInstanceProviderViewHost";
-      this.problemInstanceProviderViewHost.ReadOnly = false;
-      this.problemInstanceProviderViewHost.Size = new System.Drawing.Size(391, 21);
-      this.problemInstanceProviderViewHost.TabIndex = 6;
-      this.problemInstanceProviderViewHost.ViewsLabelVisible = false;
-      this.problemInstanceProviderViewHost.ViewType = null;
-      // 
-      // problemInstanceProviderComboBox
-      // 
-      this.problemInstanceProviderComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
-      this.problemInstanceProviderComboBox.FormattingEnabled = true;
-      this.problemInstanceProviderComboBox.Location = new System.Drawing.Point(50, 5);
-      this.problemInstanceProviderComboBox.Name = "problemInstanceProviderComboBox";
-      this.problemInstanceProviderComboBox.Size = new System.Drawing.Size(171, 21);
-      this.problemInstanceProviderComboBox.TabIndex = 7;
-      this.problemInstanceProviderComboBox.SelectedIndexChanged += new System.EventHandler(this.problemInstanceProviderComboBox_SelectedIndexChanged);
-      this.problemInstanceProviderComboBox.DataSourceChanged += new System.EventHandler(this.comboBox_DataSourceChanged);
-      // 
-      // libraryInfoButton
-      // 
-      this.libraryInfoButton.Location = new System.Drawing.Point(227, 4);
-      this.libraryInfoButton.Name = "libraryInfoButton";
-      this.libraryInfoButton.Size = new System.Drawing.Size(26, 23);
-      this.libraryInfoButton.TabIndex = 8;
-      this.libraryInfoButton.Text = "Info";
-      this.libraryInfoButton.UseVisualStyleBackColor = true;
-      this.libraryInfoButton.Click += new System.EventHandler(this.libraryInfoButton_Click);
-      // 
-      // ProblemView
-      // 
-      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-      this.Controls.Add(this.problemInstanceProviderViewHost);
-      this.Controls.Add(this.problemInstanceProviderComboBox);
-      this.Controls.Add(this.libraryLabel);
-      this.Controls.Add(this.libraryInfoButton);
-      this.Name = "ProblemView";
-      this.Size = new System.Drawing.Size(653, 455);
-      this.Controls.SetChildIndex(this.libraryInfoButton, 0);
-      this.Controls.SetChildIndex(this.libraryLabel, 0);
-      this.Controls.SetChildIndex(this.problemInstanceProviderComboBox, 0);
-      this.Controls.SetChildIndex(this.problemInstanceProviderViewHost, 0);
-      this.Controls.SetChildIndex(this.infoLabel, 0);
-      this.Controls.SetChildIndex(this.nameTextBox, 0);
-      this.Controls.SetChildIndex(this.nameLabel, 0);
-      this.Controls.SetChildIndex(this.parameterCollectionView, 0);
-      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
-      this.ResumeLayout(false);
-      this.PerformLayout();
-
-    }
-
-    #endregion
-
-    protected System.Windows.Forms.Label libraryLabel;
-    protected System.Windows.Forms.ComboBox problemInstanceProviderComboBox;
-    protected MainForm.WindowsForms.ViewHost problemInstanceProviderViewHost;
-    protected System.Windows.Forms.Button libraryInfoButton;
-
-  }
-}
Index: trunk/sources/HeuristicLab.Optimization.Views/3.3/HeuristicOptimizationProblemView.cs
===================================================================
--- trunk/sources/HeuristicLab.Optimization.Views/3.3/HeuristicOptimizationProblemView.cs	(revision 7558)
+++ 	(revision )
@@ -1,137 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System;
-using System.Collections.Generic;
-using System.Diagnostics;
-using System.Linq;
-using System.Windows.Forms;
-using HeuristicLab.Common.Resources;
-using HeuristicLab.Core.Views;
-using HeuristicLab.MainForm;
-using HeuristicLab.MainForm.WindowsForms;
-using HeuristicLab.PluginInfrastructure;
-using HeuristicLab.Problems.Instances;
-
-namespace HeuristicLab.Optimization.Views {
-  [View("HeuristicOptimizationProblemView")]
-  [Content(typeof(IHeuristicOptimizationProblem), IsDefaultView = true)]
-  public partial class HeuristicOptimizationProblemView : ParameterizedNamedItemView {
-
-    public new IProblem Content {
-      get { return (IProblem)base.Content; }
-      set { base.Content = value; }
-    }
-
-    protected IProblemInstanceProvider SelectedProvider {
-      get { return (problemInstanceProviderComboBox.SelectedIndex >= 0 ? (IProblemInstanceProvider)problemInstanceProviderComboBox.SelectedItem : null); }
-    }
-
-    public HeuristicOptimizationProblemView() {
-      InitializeComponent();
-      libraryInfoButton.Text = String.Empty;
-      libraryInfoButton.Image = VSImageLibrary.Information;
-    }
-
-    protected override void OnContentChanged() {
-      base.OnContentChanged();
-      if (Content == null) {
-        problemInstanceProviderComboBox.DataSource = null;
-      } else {
-        problemInstanceProviderComboBox.DisplayMember = "Name";
-        problemInstanceProviderComboBox.DataSource = GetProblemInstanceProviders().ToList();
-      }
-      SetEnabledStateOfControls();
-    }
-
-    protected override void SetEnabledStateOfControls() {
-      base.SetEnabledStateOfControls();
-      problemInstanceProviderComboBox.Enabled = !ReadOnly && !Locked && Content != null && problemInstanceProviderComboBox.Items.Count > 0;
-      libraryInfoButton.Enabled = SelectedProvider != null && SelectedProvider.WebLink != null;
-    }
-
-    protected virtual void problemInstanceProviderComboBox_SelectedIndexChanged(object sender, System.EventArgs e) {
-      if (problemInstanceProviderComboBox.SelectedIndex >= 0) {
-        dynamic provider = SelectedProvider;
-        dynamic consumer = Content;
-        provider.Consumer = consumer;
-        problemInstanceProviderViewHost.Content = SelectedProvider;
-        SetTooltip();
-      }
-      SetEnabledStateOfControls();
-    }
-
-    private void comboBox_DataSourceChanged(object sender, EventArgs e) {
-      var comboBox = (ComboBox)sender;
-      if (comboBox.DataSource == null)
-        comboBox.Items.Clear();
-    }
-
-    protected virtual void libraryInfoButton_Click(object sender, EventArgs e) {
-      if (problemInstanceProviderComboBox.SelectedIndex >= 0) {
-        if (SelectedProvider != null && SelectedProvider.WebLink != null)
-          Process.Start(SelectedProvider.WebLink.ToString());
-      }
-    }
-
-    protected virtual IEnumerable<IProblemInstanceProvider> GetProblemInstanceProviders() {
-      var consumerTypes = Content.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;
-        }
-      }
-    }
-
-    protected virtual void SetTooltip() {
-      toolTip.SetToolTip(problemInstanceProviderComboBox, GetProviderToolTip());
-      if (SelectedProvider.WebLink != null)
-        toolTip.SetToolTip(libraryInfoButton, "Browse to " + SelectedProvider.WebLink.ToString());
-      else toolTip.SetToolTip(libraryInfoButton, "Library does not have a web reference.");
-    }
-
-    protected virtual string GetProviderToolTip() {
-      var provider = SelectedProvider;
-      string toolTip = provider.Name;
-
-      if (!String.IsNullOrEmpty(provider.ReferencePublication)) {
-        toolTip = toolTip
-            + Environment.NewLine + Environment.NewLine
-            + provider.ReferencePublication;
-      }
-      if (provider.WebLink != null) {
-        toolTip = toolTip
-            + Environment.NewLine
-            + provider.WebLink.ToString();
-      }
-
-      return toolTip;
-    }
-  }
-}
Index: trunk/sources/HeuristicLab.Optimization.Views/3.3/ProblemInstanceProviderView.cs
===================================================================
--- trunk/sources/HeuristicLab.Optimization.Views/3.3/ProblemInstanceProviderView.cs	(revision 7558)
+++ trunk/sources/HeuristicLab.Optimization.Views/3.3/ProblemInstanceProviderView.cs	(revision 7641)
@@ -45,5 +45,5 @@
       toolTip.SetToolTip(importButton, "Import a " + GetProblemType() + " instance from file.");
       loadButton.Text = String.Empty;
-      loadButton.Image = VSImageLibrary.Checkout;
+      loadButton.Image = VSImageLibrary.RefreshDocument;
       toolTip.SetToolTip(loadButton, "Load the selected instance.");
     }
Index: trunk/sources/HeuristicLab.Optimization.Views/3.3/ProblemView.Designer.cs
===================================================================
--- trunk/sources/HeuristicLab.Optimization.Views/3.3/ProblemView.Designer.cs	(revision 7558)
+++ trunk/sources/HeuristicLab.Optimization.Views/3.3/ProblemView.Designer.cs	(revision 7641)
@@ -45,6 +45,20 @@
     /// </summary>
     private void InitializeComponent() {
+      this.problemInstanceProviderComboBox = new System.Windows.Forms.ComboBox();
+      this.libraryLabel = new System.Windows.Forms.Label();
+      this.libraryInfoButton = new System.Windows.Forms.Button();
+      this.problemInstanceSplitContainer = new System.Windows.Forms.SplitContainer();
+      this.problemInstanceProviderViewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
       ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
+      ((System.ComponentModel.ISupportInitialize)(this.problemInstanceSplitContainer)).BeginInit();
+      this.problemInstanceSplitContainer.Panel1.SuspendLayout();
+      this.problemInstanceSplitContainer.Panel2.SuspendLayout();
+      this.problemInstanceSplitContainer.SuspendLayout();
       this.SuspendLayout();
+      // 
+      // parameterCollectionView
+      // 
+      this.parameterCollectionView.Location = new System.Drawing.Point(6, 27);
+      this.parameterCollectionView.Size = new System.Drawing.Size(501, 303);
       // 
       // nameTextBox
@@ -52,4 +66,88 @@
       this.errorProvider.SetIconAlignment(this.nameTextBox, System.Windows.Forms.ErrorIconAlignment.MiddleLeft);
       this.errorProvider.SetIconPadding(this.nameTextBox, 2);
+      this.nameTextBox.Location = new System.Drawing.Point(47, 1);
+      this.nameTextBox.Size = new System.Drawing.Size(438, 20);
+      // 
+      // nameLabel
+      // 
+      this.nameLabel.Location = new System.Drawing.Point(3, 6);
+      // 
+      // infoLabel
+      // 
+      this.infoLabel.Location = new System.Drawing.Point(491, 4);
+      // 
+      // problemInstanceProviderComboBox
+      // 
+      this.problemInstanceProviderComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+      this.problemInstanceProviderComboBox.FormattingEnabled = true;
+      this.problemInstanceProviderComboBox.Location = new System.Drawing.Point(47, 2);
+      this.problemInstanceProviderComboBox.Name = "problemInstanceProviderComboBox";
+      this.problemInstanceProviderComboBox.Size = new System.Drawing.Size(171, 21);
+      this.problemInstanceProviderComboBox.TabIndex = 13;
+      this.problemInstanceProviderComboBox.SelectedIndexChanged += new System.EventHandler(this.problemInstanceProviderComboBox_SelectedIndexChanged);
+      this.problemInstanceProviderComboBox.DataSourceChanged += new System.EventHandler(this.comboBox_DataSourceChanged);
+      // 
+      // libraryLabel
+      // 
+      this.libraryLabel.AutoSize = true;
+      this.libraryLabel.Location = new System.Drawing.Point(3, 6);
+      this.libraryLabel.Name = "libraryLabel";
+      this.libraryLabel.Size = new System.Drawing.Size(41, 13);
+      this.libraryLabel.TabIndex = 12;
+      this.libraryLabel.Text = "Library:";
+      // 
+      // libraryInfoButton
+      // 
+      this.libraryInfoButton.Location = new System.Drawing.Point(224, 1);
+      this.libraryInfoButton.Name = "libraryInfoButton";
+      this.libraryInfoButton.Size = new System.Drawing.Size(26, 23);
+      this.libraryInfoButton.TabIndex = 14;
+      this.libraryInfoButton.Text = "Info";
+      this.libraryInfoButton.UseVisualStyleBackColor = true;
+      this.libraryInfoButton.Click += new System.EventHandler(this.libraryInfoButton_Click);
+      // 
+      // problemInstanceSplitContainer
+      // 
+      this.problemInstanceSplitContainer.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.problemInstanceSplitContainer.FixedPanel = System.Windows.Forms.FixedPanel.Panel1;
+      this.problemInstanceSplitContainer.IsSplitterFixed = true;
+      this.problemInstanceSplitContainer.Location = new System.Drawing.Point(0, 0);
+      this.problemInstanceSplitContainer.Name = "problemInstanceSplitContainer";
+      this.problemInstanceSplitContainer.Orientation = System.Windows.Forms.Orientation.Horizontal;
+      // 
+      // problemInstanceSplitContainer.Panel1
+      // 
+      this.problemInstanceSplitContainer.Panel1.Controls.Add(this.problemInstanceProviderViewHost);
+      this.problemInstanceSplitContainer.Panel1.Controls.Add(this.problemInstanceProviderComboBox);
+      this.problemInstanceSplitContainer.Panel1.Controls.Add(this.libraryInfoButton);
+      this.problemInstanceSplitContainer.Panel1.Controls.Add(this.libraryLabel);
+      this.problemInstanceSplitContainer.Panel1MinSize = 10;
+      // 
+      // problemInstanceSplitContainer.Panel2
+      // 
+      this.problemInstanceSplitContainer.Panel2.Controls.Add(this.nameLabel);
+      this.problemInstanceSplitContainer.Panel2.Controls.Add(this.nameTextBox);
+      this.problemInstanceSplitContainer.Panel2.Controls.Add(this.parameterCollectionView);
+      this.problemInstanceSplitContainer.Panel2.Controls.Add(this.infoLabel);
+      this.problemInstanceSplitContainer.Size = new System.Drawing.Size(511, 363);
+      this.problemInstanceSplitContainer.SplitterDistance = 26;
+      this.problemInstanceSplitContainer.TabIndex = 13;
+      // 
+      // problemInstanceProviderViewHost
+      // 
+      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";
+      this.problemInstanceProviderViewHost.Content = null;
+      this.problemInstanceProviderViewHost.Enabled = false;
+      this.problemInstanceProviderViewHost.Location = new System.Drawing.Point(256, 3);
+      this.problemInstanceProviderViewHost.Name = "problemInstanceProviderViewHost";
+      this.problemInstanceProviderViewHost.ReadOnly = false;
+      this.problemInstanceProviderViewHost.Size = new System.Drawing.Size(251, 22);
+      this.problemInstanceProviderViewHost.TabIndex = 15;
+      this.problemInstanceProviderViewHost.ViewsLabelVisible = false;
+      this.problemInstanceProviderViewHost.ViewType = null;
       // 
       // ProblemView
@@ -57,8 +155,15 @@
       this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
       this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.problemInstanceSplitContainer);
       this.Name = "ProblemView";
+      this.Size = new System.Drawing.Size(511, 363);
       ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
+      this.problemInstanceSplitContainer.Panel1.ResumeLayout(false);
+      this.problemInstanceSplitContainer.Panel1.PerformLayout();
+      this.problemInstanceSplitContainer.Panel2.ResumeLayout(false);
+      this.problemInstanceSplitContainer.Panel2.PerformLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.problemInstanceSplitContainer)).EndInit();
+      this.problemInstanceSplitContainer.ResumeLayout(false);
       this.ResumeLayout(false);
-      this.PerformLayout();
 
     }
@@ -66,5 +171,9 @@
     #endregion
 
-
+    protected System.Windows.Forms.ComboBox problemInstanceProviderComboBox;
+    protected System.Windows.Forms.Label libraryLabel;
+    protected System.Windows.Forms.Button libraryInfoButton;
+    protected System.Windows.Forms.SplitContainer problemInstanceSplitContainer;
+    protected MainForm.WindowsForms.ViewHost problemInstanceProviderViewHost;
   }
 }
Index: trunk/sources/HeuristicLab.Optimization.Views/3.3/ProblemView.cs
===================================================================
--- trunk/sources/HeuristicLab.Optimization.Views/3.3/ProblemView.cs	(revision 7558)
+++ trunk/sources/HeuristicLab.Optimization.Views/3.3/ProblemView.cs	(revision 7641)
@@ -20,6 +20,14 @@
 #endregion
 
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Linq;
+using System.Windows.Forms;
+using HeuristicLab.Common.Resources;
 using HeuristicLab.Core.Views;
 using HeuristicLab.MainForm;
+using HeuristicLab.PluginInfrastructure;
+using HeuristicLab.Problems.Instances;
 
 namespace HeuristicLab.Optimization.Views {
@@ -35,4 +43,8 @@
     }
 
+    protected IProblemInstanceProvider SelectedProvider {
+      get { return (problemInstanceProviderComboBox.SelectedIndex >= 0 ? (IProblemInstanceProvider)problemInstanceProviderComboBox.SelectedItem : null); }
+    }
+
     /// <summary>
     /// Initializes a new instance of <see cref="ItemBaseView"/>.
@@ -40,8 +52,91 @@
     public ProblemView() {
       InitializeComponent();
+      libraryInfoButton.Text = String.Empty;
+      libraryInfoButton.Image = VSImageLibrary.Internet;
     }
 
     protected override void OnContentChanged() {
       base.OnContentChanged();
+      if (Content == null) {
+        problemInstanceProviderComboBox.DataSource = null;
+      } else {
+        problemInstanceProviderComboBox.DisplayMember = "Name";
+        problemInstanceProviderComboBox.DataSource = GetProblemInstanceProviders().ToList();
+        problemInstanceSplitContainer.Panel1Collapsed = problemInstanceProviderComboBox.Items.Count <= 0;
+
+      }
+      SetEnabledStateOfControls();
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      problemInstanceProviderComboBox.Enabled = !ReadOnly && !Locked && Content != null && problemInstanceProviderComboBox.Items.Count > 0;
+      libraryInfoButton.Enabled = SelectedProvider != null && SelectedProvider.WebLink != null;
+    }
+
+    protected virtual void problemInstanceProviderComboBox_SelectedIndexChanged(object sender, System.EventArgs e) {
+      if (problemInstanceProviderComboBox.SelectedIndex >= 0) {
+        dynamic provider = SelectedProvider;
+        dynamic consumer = Content;
+        provider.Consumer = consumer;
+        problemInstanceProviderViewHost.Content = SelectedProvider;
+        SetTooltip();
+      }
+      SetEnabledStateOfControls();
+    }
+
+    private void comboBox_DataSourceChanged(object sender, EventArgs e) {
+      var comboBox = (ComboBox)sender;
+      if (comboBox.DataSource == null)
+        comboBox.Items.Clear();
+    }
+
+    protected virtual void libraryInfoButton_Click(object sender, EventArgs e) {
+      if (problemInstanceProviderComboBox.SelectedIndex >= 0) {
+        if (SelectedProvider != null && SelectedProvider.WebLink != null)
+          Process.Start(SelectedProvider.WebLink.ToString());
+      }
+    }
+
+    protected virtual IEnumerable<IProblemInstanceProvider> GetProblemInstanceProviders() {
+      var consumerTypes = Content.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;
+        }
+      }
+    }
+
+    protected virtual void SetTooltip() {
+      toolTip.SetToolTip(problemInstanceProviderComboBox, GetProviderToolTip());
+      if (SelectedProvider.WebLink != null)
+        toolTip.SetToolTip(libraryInfoButton, "Browse to " + SelectedProvider.WebLink.ToString());
+      else toolTip.SetToolTip(libraryInfoButton, "Library does not have a web reference.");
+    }
+
+    protected virtual string GetProviderToolTip() {
+      var provider = SelectedProvider;
+      string toolTip = provider.Name;
+
+      if (!String.IsNullOrEmpty(provider.ReferencePublication)) {
+        toolTip = toolTip
+            + Environment.NewLine + Environment.NewLine
+            + provider.ReferencePublication;
+      }
+      if (provider.WebLink != null) {
+        toolTip = toolTip
+            + Environment.NewLine
+            + provider.WebLink.ToString();
+      }
+
+      return toolTip;
     }
   }
