Index: branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem.Views/3.3/ExpertSystemOptimizerView.Designer.cs
===================================================================
--- branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem.Views/3.3/ExpertSystemOptimizerView.Designer.cs	(revision 12859)
+++ 	(revision )
@@ -1,347 +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.OptimizationExpertSystem.Views {
-  partial class ExpertSystemOptimizerView {
-    /// <summary> 
-    /// Required designer variable.
-    /// </summary>
-    private System.ComponentModel.IContainer components = null;
-
-    #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.evaluationsLimitabel = new System.Windows.Forms.Label();
-      this.maxEvaluationsTextBox = new System.Windows.Forms.TextBox();
-      this.tabControl = new HeuristicLab.MainForm.WindowsForms.DragOverTabControl();
-      this.problemTabPage = new System.Windows.Forms.TabPage();
-      this.problemViewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
-      this.openProblemButton = new System.Windows.Forms.Button();
-      this.newProblemButton = new System.Windows.Forms.Button();
-      this.algorithmTabPage = new System.Windows.Forms.TabPage();
-      this.algorithmViewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
-      this.algorithmSuggestionLabel = new System.Windows.Forms.Label();
-      this.suggestedInstancesComboBox = new System.Windows.Forms.ComboBox();
-      this.runsTabPage = new System.Windows.Forms.TabPage();
-      this.runsView = new HeuristicLab.Optimization.Views.RunCollectionView();
-      this.okbTabPage = new System.Windows.Forms.TabPage();
-      this.okbRunCollectionView = new HeuristicLab.Optimization.Views.RunCollectionView();
-      this.openFileDialog = new System.Windows.Forms.OpenFileDialog();
-      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
-      this.tabControl.SuspendLayout();
-      this.problemTabPage.SuspendLayout();
-      this.algorithmTabPage.SuspendLayout();
-      this.runsTabPage.SuspendLayout();
-      this.okbTabPage.SuspendLayout();
-      this.SuspendLayout();
-      // 
-      // startButton
-      // 
-      this.startButton.Location = new System.Drawing.Point(0, 440);
-      this.startButton.TabIndex = 18;
-      this.toolTip.SetToolTip(this.startButton, "Start/Resume Optimizer");
-      // 
-      // executionTimeTextBox
-      // 
-      this.executionTimeTextBox.Location = new System.Drawing.Point(412, 444);
-      this.executionTimeTextBox.TabIndex = 23;
-      // 
-      // executionTimeLabel
-      // 
-      this.executionTimeLabel.Location = new System.Drawing.Point(323, 447);
-      this.executionTimeLabel.TabIndex = 22;
-      // 
-      // pauseButton
-      // 
-      this.pauseButton.Location = new System.Drawing.Point(30, 440);
-      this.pauseButton.TabIndex = 19;
-      this.toolTip.SetToolTip(this.pauseButton, "Pause Optimizer");
-      // 
-      // stopButton
-      // 
-      this.stopButton.Location = new System.Drawing.Point(60, 440);
-      this.stopButton.TabIndex = 20;
-      this.toolTip.SetToolTip(this.stopButton, "Stop Optimizer");
-      // 
-      // resetButton
-      // 
-      this.resetButton.Location = new System.Drawing.Point(90, 440);
-      this.resetButton.TabIndex = 21;
-      this.toolTip.SetToolTip(this.resetButton, "Reset Optimizer");
-      // 
-      // nameTextBox
-      // 
-      this.errorProvider.SetIconAlignment(this.nameTextBox, System.Windows.Forms.ErrorIconAlignment.MiddleLeft);
-      this.errorProvider.SetIconPadding(this.nameTextBox, 2);
-      this.nameTextBox.Location = new System.Drawing.Point(75, 0);
-      this.nameTextBox.Size = new System.Drawing.Size(449, 20);
-      // 
-      // infoLabel
-      // 
-      this.infoLabel.Location = new System.Drawing.Point(530, 3);
-      // 
-      // evaluationsLimitabel
-      // 
-      this.evaluationsLimitabel.AutoSize = true;
-      this.evaluationsLimitabel.Location = new System.Drawing.Point(3, 29);
-      this.evaluationsLimitabel.Name = "evaluationsLimitabel";
-      this.evaluationsLimitabel.Size = new System.Drawing.Size(66, 13);
-      this.evaluationsLimitabel.TabIndex = 5;
-      this.evaluationsLimitabel.Text = "Budget (FE):";
-      // 
-      // maxEvaluationsTextBox
-      // 
-      this.maxEvaluationsTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
-            | System.Windows.Forms.AnchorStyles.Right)));
-      this.maxEvaluationsTextBox.Location = new System.Drawing.Point(75, 26);
-      this.maxEvaluationsTextBox.Name = "maxEvaluationsTextBox";
-      this.maxEvaluationsTextBox.Size = new System.Drawing.Size(449, 20);
-      this.maxEvaluationsTextBox.TabIndex = 6;
-      this.maxEvaluationsTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.maxEvaluationsTextBox_Validating);
-      // 
-      // tabControl
-      // 
-      this.tabControl.AllowDrop = true;
-      this.tabControl.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.tabControl.Controls.Add(this.problemTabPage);
-      this.tabControl.Controls.Add(this.algorithmTabPage);
-      this.tabControl.Controls.Add(this.runsTabPage);
-      this.tabControl.Controls.Add(this.okbTabPage);
-      this.tabControl.Location = new System.Drawing.Point(0, 52);
-      this.tabControl.Name = "tabControl";
-      this.tabControl.SelectedIndex = 0;
-      this.tabControl.Size = new System.Drawing.Size(546, 382);
-      this.tabControl.TabIndex = 17;
-      // 
-      // problemTabPage
-      // 
-      this.problemTabPage.AllowDrop = true;
-      this.problemTabPage.Controls.Add(this.problemViewHost);
-      this.problemTabPage.Controls.Add(this.openProblemButton);
-      this.problemTabPage.Controls.Add(this.newProblemButton);
-      this.problemTabPage.Location = new System.Drawing.Point(4, 22);
-      this.problemTabPage.Name = "problemTabPage";
-      this.problemTabPage.Padding = new System.Windows.Forms.Padding(3);
-      this.problemTabPage.Size = new System.Drawing.Size(538, 356);
-      this.problemTabPage.TabIndex = 1;
-      this.problemTabPage.Text = "Problem";
-      this.problemTabPage.UseVisualStyleBackColor = true;
-      this.problemTabPage.DragDrop += new System.Windows.Forms.DragEventHandler(this.problemTabPage_DragDrop);
-      this.problemTabPage.DragEnter += new System.Windows.Forms.DragEventHandler(this.problemTabPage_DragEnterOver);
-      this.problemTabPage.DragOver += new System.Windows.Forms.DragEventHandler(this.problemTabPage_DragEnterOver);
-      // 
-      // problemViewHost
-      // 
-      this.problemViewHost.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.problemViewHost.Caption = "View";
-      this.problemViewHost.Content = null;
-      this.problemViewHost.Enabled = false;
-      this.problemViewHost.Location = new System.Drawing.Point(6, 36);
-      this.problemViewHost.Name = "problemViewHost";
-      this.problemViewHost.ReadOnly = false;
-      this.problemViewHost.Size = new System.Drawing.Size(526, 314);
-      this.problemViewHost.TabIndex = 2;
-      this.problemViewHost.ViewsLabelVisible = true;
-      this.problemViewHost.ViewType = null;
-      // 
-      // openProblemButton
-      // 
-      this.openProblemButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.Open;
-      this.openProblemButton.Location = new System.Drawing.Point(36, 6);
-      this.openProblemButton.Name = "openProblemButton";
-      this.openProblemButton.Size = new System.Drawing.Size(24, 24);
-      this.openProblemButton.TabIndex = 1;
-      this.toolTip.SetToolTip(this.openProblemButton, "Open Problem");
-      this.openProblemButton.UseVisualStyleBackColor = true;
-      this.openProblemButton.Click += new System.EventHandler(this.openProblemButton_Click);
-      // 
-      // newProblemButton
-      // 
-      this.newProblemButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.NewDocument;
-      this.newProblemButton.Location = new System.Drawing.Point(6, 6);
-      this.newProblemButton.Name = "newProblemButton";
-      this.newProblemButton.Size = new System.Drawing.Size(24, 24);
-      this.newProblemButton.TabIndex = 0;
-      this.toolTip.SetToolTip(this.newProblemButton, "New Problem");
-      this.newProblemButton.UseVisualStyleBackColor = true;
-      this.newProblemButton.Click += new System.EventHandler(this.newProblemButton_Click);
-      // 
-      // algorithmTabPage
-      // 
-      this.algorithmTabPage.Controls.Add(this.algorithmViewHost);
-      this.algorithmTabPage.Controls.Add(this.algorithmSuggestionLabel);
-      this.algorithmTabPage.Controls.Add(this.suggestedInstancesComboBox);
-      this.algorithmTabPage.Location = new System.Drawing.Point(4, 22);
-      this.algorithmTabPage.Name = "algorithmTabPage";
-      this.algorithmTabPage.Padding = new System.Windows.Forms.Padding(3);
-      this.algorithmTabPage.Size = new System.Drawing.Size(538, 356);
-      this.algorithmTabPage.TabIndex = 4;
-      this.algorithmTabPage.Text = "Algorithm";
-      this.algorithmTabPage.UseVisualStyleBackColor = true;
-      // 
-      // algorithmViewHost
-      // 
-      this.algorithmViewHost.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.algorithmViewHost.Caption = "View";
-      this.algorithmViewHost.Content = null;
-      this.algorithmViewHost.Enabled = false;
-      this.algorithmViewHost.Location = new System.Drawing.Point(6, 36);
-      this.algorithmViewHost.Name = "algorithmViewHost";
-      this.algorithmViewHost.ReadOnly = false;
-      this.algorithmViewHost.Size = new System.Drawing.Size(526, 314);
-      this.algorithmViewHost.TabIndex = 2;
-      this.algorithmViewHost.ViewsLabelVisible = true;
-      this.algorithmViewHost.ViewType = null;
-      // 
-      // algorithmSuggestionLabel
-      // 
-      this.algorithmSuggestionLabel.AutoSize = true;
-      this.algorithmSuggestionLabel.Location = new System.Drawing.Point(6, 9);
-      this.algorithmSuggestionLabel.Name = "algorithmSuggestionLabel";
-      this.algorithmSuggestionLabel.Size = new System.Drawing.Size(156, 13);
-      this.algorithmSuggestionLabel.TabIndex = 1;
-      this.algorithmSuggestionLabel.Text = "Suggested Algorithm Instances:";
-      // 
-      // suggestedInstancesComboBox
-      // 
-      this.suggestedInstancesComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
-            | System.Windows.Forms.AnchorStyles.Right)));
-      this.suggestedInstancesComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
-      this.suggestedInstancesComboBox.FormattingEnabled = true;
-      this.suggestedInstancesComboBox.Location = new System.Drawing.Point(178, 6);
-      this.suggestedInstancesComboBox.Name = "suggestedInstancesComboBox";
-      this.suggestedInstancesComboBox.Size = new System.Drawing.Size(354, 21);
-      this.suggestedInstancesComboBox.TabIndex = 0;
-      this.suggestedInstancesComboBox.SelectedIndexChanged += new System.EventHandler(this.suggestedInstancesComboBox_SelectedIndexChanged);
-      // 
-      // runsTabPage
-      // 
-      this.runsTabPage.Controls.Add(this.runsView);
-      this.runsTabPage.Location = new System.Drawing.Point(4, 22);
-      this.runsTabPage.Name = "runsTabPage";
-      this.runsTabPage.Padding = new System.Windows.Forms.Padding(3);
-      this.runsTabPage.Size = new System.Drawing.Size(538, 356);
-      this.runsTabPage.TabIndex = 3;
-      this.runsTabPage.Text = "Runs";
-      this.runsTabPage.UseVisualStyleBackColor = true;
-      // 
-      // runsView
-      // 
-      this.runsView.Caption = "RunCollection View";
-      this.runsView.Content = null;
-      this.runsView.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.runsView.Location = new System.Drawing.Point(3, 3);
-      this.runsView.Name = "runsView";
-      this.runsView.ReadOnly = false;
-      this.runsView.Size = new System.Drawing.Size(532, 350);
-      this.runsView.TabIndex = 1;
-      // 
-      // okbTabPage
-      // 
-      this.okbTabPage.Controls.Add(this.okbRunCollectionView);
-      this.okbTabPage.Location = new System.Drawing.Point(4, 22);
-      this.okbTabPage.Name = "okbTabPage";
-      this.okbTabPage.Padding = new System.Windows.Forms.Padding(3);
-      this.okbTabPage.Size = new System.Drawing.Size(538, 356);
-      this.okbTabPage.TabIndex = 5;
-      this.okbTabPage.Text = "Knowledge Base";
-      this.okbTabPage.UseVisualStyleBackColor = true;
-      // 
-      // okbRunCollectionView
-      // 
-      this.okbRunCollectionView.Caption = "RunCollection View";
-      this.okbRunCollectionView.Content = null;
-      this.okbRunCollectionView.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.okbRunCollectionView.Location = new System.Drawing.Point(3, 3);
-      this.okbRunCollectionView.Name = "okbRunCollectionView";
-      this.okbRunCollectionView.ReadOnly = false;
-      this.okbRunCollectionView.Size = new System.Drawing.Size(532, 350);
-      this.okbRunCollectionView.TabIndex = 0;
-      // 
-      // openFileDialog
-      // 
-      this.openFileDialog.DefaultExt = "hl";
-      this.openFileDialog.FileName = "Optimizer";
-      this.openFileDialog.Filter = "HeuristicLab Files|*.hl|All Files|*.*";
-      this.openFileDialog.Title = "Open Optimizer";
-      // 
-      // ExpertSystemOptimizerView
-      // 
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
-      this.Controls.Add(this.tabControl);
-      this.Controls.Add(this.evaluationsLimitabel);
-      this.Controls.Add(this.maxEvaluationsTextBox);
-      this.Name = "ExpertSystemOptimizerView";
-      this.Size = new System.Drawing.Size(549, 464);
-      this.Controls.SetChildIndex(this.maxEvaluationsTextBox, 0);
-      this.Controls.SetChildIndex(this.evaluationsLimitabel, 0);
-      this.Controls.SetChildIndex(this.tabControl, 0);
-      this.Controls.SetChildIndex(this.nameLabel, 0);
-      this.Controls.SetChildIndex(this.nameTextBox, 0);
-      this.Controls.SetChildIndex(this.infoLabel, 0);
-      this.Controls.SetChildIndex(this.resetButton, 0);
-      this.Controls.SetChildIndex(this.stopButton, 0);
-      this.Controls.SetChildIndex(this.pauseButton, 0);
-      this.Controls.SetChildIndex(this.executionTimeLabel, 0);
-      this.Controls.SetChildIndex(this.executionTimeTextBox, 0);
-      this.Controls.SetChildIndex(this.startButton, 0);
-      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
-      this.tabControl.ResumeLayout(false);
-      this.problemTabPage.ResumeLayout(false);
-      this.algorithmTabPage.ResumeLayout(false);
-      this.algorithmTabPage.PerformLayout();
-      this.runsTabPage.ResumeLayout(false);
-      this.okbTabPage.ResumeLayout(false);
-      this.ResumeLayout(false);
-      this.PerformLayout();
-
-    }
-
-    #endregion
-
-    private System.Windows.Forms.Label evaluationsLimitabel;
-    private System.Windows.Forms.TextBox maxEvaluationsTextBox;
-    private MainForm.WindowsForms.DragOverTabControl tabControl;
-    private System.Windows.Forms.TabPage runsTabPage;
-    private HeuristicLab.Optimization.Views.RunCollectionView runsView;
-    private System.Windows.Forms.OpenFileDialog openFileDialog;
-    private System.Windows.Forms.TabPage problemTabPage;
-    private MainForm.WindowsForms.ViewHost problemViewHost;
-    private System.Windows.Forms.Button openProblemButton;
-    private System.Windows.Forms.Button newProblemButton;
-    private System.Windows.Forms.TabPage algorithmTabPage;
-    private MainForm.WindowsForms.ViewHost algorithmViewHost;
-    private System.Windows.Forms.Label algorithmSuggestionLabel;
-    private System.Windows.Forms.ComboBox suggestedInstancesComboBox;
-    private System.Windows.Forms.TabPage okbTabPage;
-    private Optimization.Views.RunCollectionView okbRunCollectionView;
-  }
-}
Index: branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem.Views/3.3/ExpertSystemOptimizerView.cs
===================================================================
--- branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem.Views/3.3/ExpertSystemOptimizerView.cs	(revision 12859)
+++ 	(revision )
@@ -1,262 +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.ComponentModel;
-using System.Globalization;
-using System.Linq;
-using System.Windows.Forms;
-using HeuristicLab.Analysis;
-using HeuristicLab.Common;
-using HeuristicLab.Core;
-using HeuristicLab.Core.Views;
-using HeuristicLab.MainForm;
-using HeuristicLab.Optimization;
-using HeuristicLab.Optimization.Views;
-using HeuristicLab.PluginInfrastructure;
-
-namespace HeuristicLab.OptimizationExpertSystem.Views {
-  [View("Expert-system Optimizer View")]
-  [Content(typeof(ExpertSystemOptimizer), IsDefaultView = true)]
-  public partial class ExpertSystemOptimizerView : IOptimizerView {
-    protected TypeSelectorDialog problemTypeSelectorDialog;
-    protected virtual bool SuppressEvents { get; set; }
-
-    public new ExpertSystemOptimizer Content {
-      get { return (ExpertSystemOptimizer)base.Content; }
-      set { base.Content = value; }
-    }
-
-    public ExpertSystemOptimizerView() {
-      InitializeComponent();
-    }
-
-    protected override void Dispose(bool disposing) {
-      if (disposing) {
-        if (problemTypeSelectorDialog != null) problemTypeSelectorDialog.Dispose();
-        if (components != null) components.Dispose();
-      }
-      base.Dispose(disposing);
-    }
-
-    protected override void DeregisterContentEvents() {
-      Content.PropertyChanged -= Content_PropertyChanged;
-      Content.SuggestedInstances.CollectionReset -= SuggestedInstancesOnChanged;
-      Content.SuggestedInstances.ItemsAdded -= SuggestedInstancesOnChanged;
-      Content.SuggestedInstances.ItemsMoved -= SuggestedInstancesOnChanged;
-      Content.SuggestedInstances.ItemsRemoved -= SuggestedInstancesOnChanged;
-      Content.SuggestedInstances.ItemsReplaced -= SuggestedInstancesOnChanged;
-      base.DeregisterContentEvents();
-    }
-    protected override void RegisterContentEvents() {
-      base.RegisterContentEvents();
-      Content.PropertyChanged += Content_PropertyChanged;
-      Content.SuggestedInstances.CollectionReset += SuggestedInstancesOnChanged;
-      Content.SuggestedInstances.ItemsAdded += SuggestedInstancesOnChanged;
-      Content.SuggestedInstances.ItemsMoved += SuggestedInstancesOnChanged;
-      Content.SuggestedInstances.ItemsRemoved += SuggestedInstancesOnChanged;
-      Content.SuggestedInstances.ItemsReplaced += SuggestedInstancesOnChanged;
-    }
-
-    protected override void OnContentChanged() {
-      base.OnContentChanged();
-      SuppressEvents = true;
-      try {
-        if (Content == null) {
-          maxEvaluationsTextBox.Text = String.Empty;
-
-          problemViewHost.Content = null;
-          algorithmViewHost.Content = null;
-          runsView.Content = null;
-          okbRunCollectionView.Content = null;
-        } else {
-          maxEvaluationsTextBox.Text = Content.MaximumEvaluations.ToString();
-          problemViewHost.Content = Content.Problem;
-          runsView.Content = Content.Runs;
-          okbRunCollectionView.Content = Content.KnowledgeBase;
-        }
-        UpdateSuggestedInstancesCombobox();
-      } finally { SuppressEvents = false; }
-    }
-
-    protected override void SetEnabledStateOfControls() {
-      base.SetEnabledStateOfControls();
-      maxEvaluationsTextBox.Enabled = Content != null && !ReadOnly && !Locked;
-      newProblemButton.Enabled = Content != null && !ReadOnly && !Locked;
-      openProblemButton.Enabled = Content != null && !ReadOnly && !Locked;
-      problemViewHost.Enabled = Content != null && !ReadOnly && !Locked;
-      suggestedInstancesComboBox.Enabled = Content != null && !ReadOnly && !Locked;
-      algorithmViewHost.Enabled = Content != null && !ReadOnly && !Locked;
-      runsView.Enabled = Content != null;
-      okbRunCollectionView.Enabled = Content != null;
-    }
-
-    protected override void OnClosed(FormClosedEventArgs e) {
-      if ((Content != null) && (Content.ExecutionState == ExecutionState.Started)) {
-        //The content must be stopped if no other view showing the content is available
-        var optimizers = MainFormManager.MainForm.Views.OfType<IContentView>().Where(v => v != this).Select(v => v.Content).OfType<IOptimizer>();
-        if (!optimizers.Contains(Content)) {
-          var nestedOptimizers = optimizers.SelectMany(opt => opt.NestedOptimizers);
-          if (!nestedOptimizers.Contains(Content)) Content.Stop();
-        }
-      }
-      base.OnClosed(e);
-    }
-
-    private void UpdateSuggestedInstancesCombobox() {
-      SuspendRepaint();
-      try {
-        var prevSelection = (IAlgorithm)suggestedInstancesComboBox.SelectedItem;
-        var prevNewIndex = -1;
-        suggestedInstancesComboBox.Items.Clear();
-        if (Content == null) return;
-
-        for (var i = 0; i < Content.SuggestedInstances.Count; i++) {
-          suggestedInstancesComboBox.Items.Add(Content.SuggestedInstances[i]);
-          if (prevSelection == null || Content.SuggestedInstances[i].Name == prevSelection.Name)
-            prevNewIndex = prevSelection == null ? 0 : i;
-        }
-        if (prevNewIndex >= 0) {
-          suggestedInstancesComboBox.SelectedIndex = prevNewIndex;
-        }
-      } finally { ResumeRepaint(true); }
-    }
-
-    #region Event Handlers
-    #region Content events
-    private void Content_PropertyChanged(object sender, PropertyChangedEventArgs e) {
-      if (InvokeRequired) {
-        Invoke((Action<object, PropertyChangedEventArgs>)Content_PropertyChanged, sender, e);
-        return;
-      }
-      SuppressEvents = true;
-      try {
-        switch (e.PropertyName) {
-          case "MaximumEvaluations": maxEvaluationsTextBox.Text = Content.MaximumEvaluations.ToString(); break;
-          case "Runs": runsView.Content = Content.Runs; break;
-          case "KnowledgeBase": okbRunCollectionView.Content = Content.KnowledgeBase; break;
-          case "Problem": problemViewHost.Content = Content.Problem; break;
-        }
-      } finally { SuppressEvents = false; }
-    }
-
-    private void SuggestedInstancesOnChanged(object sender, EventArgs e) {
-      SuppressEvents = true;
-      try {
-        UpdateSuggestedInstancesCombobox();
-      } finally { SuppressEvents = false; }
-    }
-    #endregion
-
-    #region Control events
-    private void maxEvaluationsTextBox_Validating(object sender, CancelEventArgs e) {
-      if (SuppressEvents) return;
-      if (InvokeRequired) {
-        Invoke((Action<object, CancelEventArgs>)maxEvaluationsTextBox_Validating, sender, e);
-        return;
-      }
-      int value;
-      if (!int.TryParse(maxEvaluationsTextBox.Text, out value)) {
-        e.Cancel = !maxEvaluationsTextBox.ReadOnly && maxEvaluationsTextBox.Enabled;
-        errorProvider.SetError(maxEvaluationsTextBox, "Please enter a valid integer number.");
-      } else {
-        Content.MaximumEvaluations = value;
-        e.Cancel = false;
-        errorProvider.SetError(maxEvaluationsTextBox, null);
-      }
-    }
-
-    private void newProblemButton_Click(object sender, EventArgs e) {
-      if (problemTypeSelectorDialog == null) {
-        problemTypeSelectorDialog = new TypeSelectorDialog { Caption = "Select Problem" };
-        problemTypeSelectorDialog.TypeSelector.Caption = "Available Problems";
-        problemTypeSelectorDialog.TypeSelector.Configure(typeof(IProblem)
-          , showNotInstantiableTypes: false, showGenericTypes: false);
-      }
-      if (problemTypeSelectorDialog.ShowDialog(this) == DialogResult.OK) {
-        try {
-          Content.Problem = (IProblem)problemTypeSelectorDialog.TypeSelector.CreateInstanceOfSelectedType();
-        } catch (Exception ex) {
-          ErrorHandling.ShowErrorDialog(this, ex);
-        }
-      }
-    }
-
-    private void openProblemButton_Click(object sender, EventArgs e) {
-      openFileDialog.Title = "Open Problem";
-      if (openFileDialog.ShowDialog(this) == DialogResult.OK) {
-        newProblemButton.Enabled = openProblemButton.Enabled = false;
-        problemViewHost.Enabled = false;
-
-        ContentManager.LoadAsync(openFileDialog.FileName, delegate(IStorableContent content, Exception error) {
-          try {
-            if (error != null) throw error;
-            var problem = content as IProblem;
-            if (problem == null) {
-              var algorithm = content as IAlgorithm;
-              if (algorithm == null || algorithm.Problem == null)
-                MessageBox.Show(this, "The selected file is not a problem, nor an algorithm with a problem.", "Invalid File", MessageBoxButtons.OK, MessageBoxIcon.Error);
-              else Content.Problem = algorithm.Problem;
-            } else
-              Content.Problem = problem;
-          } catch (Exception ex) {
-            ErrorHandling.ShowErrorDialog(this, ex);
-          } finally {
-            Invoke(new Action(delegate() {
-              problemViewHost.Enabled = true;
-              newProblemButton.Enabled = openProblemButton.Enabled = true;
-            }));
-          }
-        });
-      }
-    }
-
-    private void problemTabPage_DragEnterOver(object sender, DragEventArgs e) {
-      e.Effect = DragDropEffects.None;
-      var prob = e.Data.GetData(Constants.DragDropDataFormat) as IProblem;
-      if (!ReadOnly && prob != null) {
-        if ((e.KeyState & 32) == 32) e.Effect = DragDropEffects.Link;  // ALT key
-        else if ((e.KeyState & 4) == 4) e.Effect = DragDropEffects.Move;  // SHIFT key
-        else if (e.AllowedEffect.HasFlag(DragDropEffects.Copy)) e.Effect = DragDropEffects.Copy;
-        else if (e.AllowedEffect.HasFlag(DragDropEffects.Move)) e.Effect = DragDropEffects.Move;
-        else if (e.AllowedEffect.HasFlag(DragDropEffects.Link)) e.Effect = DragDropEffects.Link;
-      }
-    }
-
-    private void problemTabPage_DragDrop(object sender, DragEventArgs e) {
-      if (e.Effect != DragDropEffects.None) {
-        var prob = e.Data.GetData(Constants.DragDropDataFormat) as IProblem;
-        if (e.Effect.HasFlag(DragDropEffects.Copy)) prob = (IProblem)prob.Clone();
-        Content.Problem = prob;
-      }
-    }
-
-    private void suggestedInstancesComboBox_SelectedIndexChanged(object sender, EventArgs e) {
-      if (SuppressEvents) return;
-      if (InvokeRequired) { Invoke((Action<object, EventArgs>)suggestedInstancesComboBox_SelectedIndexChanged, sender, e); return; }
-      if (suggestedInstancesComboBox.SelectedIndex >= 0)
-        algorithmViewHost.Content = (IAlgorithm)suggestedInstancesComboBox.SelectedItem;
-      else algorithmViewHost.Content = null;
-    }
-    #endregion
-    #endregion
-  }
-}
Index: branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem.Views/3.3/ExpertSystemView.Designer.cs
===================================================================
--- branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem.Views/3.3/ExpertSystemView.Designer.cs	(revision 12860)
+++ branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem.Views/3.3/ExpertSystemView.Designer.cs	(revision 12860)
@@ -0,0 +1,310 @@
+﻿#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.OptimizationExpertSystem.Views {
+  partial class ExpertSystemView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    #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.evaluationsLimitabel = new System.Windows.Forms.Label();
+      this.maxEvaluationsTextBox = new System.Windows.Forms.TextBox();
+      this.tabControl = new HeuristicLab.MainForm.WindowsForms.DragOverTabControl();
+      this.problemTabPage = new System.Windows.Forms.TabPage();
+      this.problemViewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
+      this.openProblemButton = new System.Windows.Forms.Button();
+      this.newProblemButton = new System.Windows.Forms.Button();
+      this.algorithmTabPage = new System.Windows.Forms.TabPage();
+      this.algorithmViewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
+      this.algorithmSuggestionLabel = new System.Windows.Forms.Label();
+      this.suggestedInstancesComboBox = new System.Windows.Forms.ComboBox();
+      this.runsTabPage = new System.Windows.Forms.TabPage();
+      this.runsView = new HeuristicLab.Optimization.Views.RunCollectionView();
+      this.okbTabPage = new System.Windows.Forms.TabPage();
+      this.openFileDialog = new System.Windows.Forms.OpenFileDialog();
+      this.algorithmInstancesViewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
+      this.tabControl.SuspendLayout();
+      this.problemTabPage.SuspendLayout();
+      this.algorithmTabPage.SuspendLayout();
+      this.runsTabPage.SuspendLayout();
+      this.okbTabPage.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // nameTextBox
+      // 
+      this.errorProvider.SetIconAlignment(this.nameTextBox, System.Windows.Forms.ErrorIconAlignment.MiddleLeft);
+      this.errorProvider.SetIconPadding(this.nameTextBox, 2);
+      this.nameTextBox.Location = new System.Drawing.Point(75, 0);
+      this.nameTextBox.Size = new System.Drawing.Size(449, 20);
+      // 
+      // infoLabel
+      // 
+      this.infoLabel.Location = new System.Drawing.Point(530, 3);
+      // 
+      // evaluationsLimitabel
+      // 
+      this.evaluationsLimitabel.AutoSize = true;
+      this.evaluationsLimitabel.Location = new System.Drawing.Point(3, 29);
+      this.evaluationsLimitabel.Name = "evaluationsLimitabel";
+      this.evaluationsLimitabel.Size = new System.Drawing.Size(66, 13);
+      this.evaluationsLimitabel.TabIndex = 5;
+      this.evaluationsLimitabel.Text = "Budget (FE):";
+      // 
+      // maxEvaluationsTextBox
+      // 
+      this.maxEvaluationsTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+            | System.Windows.Forms.AnchorStyles.Right)));
+      this.maxEvaluationsTextBox.Location = new System.Drawing.Point(75, 26);
+      this.maxEvaluationsTextBox.Name = "maxEvaluationsTextBox";
+      this.maxEvaluationsTextBox.Size = new System.Drawing.Size(449, 20);
+      this.maxEvaluationsTextBox.TabIndex = 6;
+      this.maxEvaluationsTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.maxEvaluationsTextBox_Validating);
+      // 
+      // tabControl
+      // 
+      this.tabControl.AllowDrop = true;
+      this.tabControl.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.tabControl.Controls.Add(this.problemTabPage);
+      this.tabControl.Controls.Add(this.algorithmTabPage);
+      this.tabControl.Controls.Add(this.runsTabPage);
+      this.tabControl.Controls.Add(this.okbTabPage);
+      this.tabControl.Location = new System.Drawing.Point(0, 52);
+      this.tabControl.Name = "tabControl";
+      this.tabControl.SelectedIndex = 0;
+      this.tabControl.Size = new System.Drawing.Size(546, 361);
+      this.tabControl.TabIndex = 17;
+      // 
+      // problemTabPage
+      // 
+      this.problemTabPage.AllowDrop = true;
+      this.problemTabPage.Controls.Add(this.problemViewHost);
+      this.problemTabPage.Controls.Add(this.openProblemButton);
+      this.problemTabPage.Controls.Add(this.newProblemButton);
+      this.problemTabPage.Location = new System.Drawing.Point(4, 22);
+      this.problemTabPage.Name = "problemTabPage";
+      this.problemTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.problemTabPage.Size = new System.Drawing.Size(538, 335);
+      this.problemTabPage.TabIndex = 1;
+      this.problemTabPage.Text = "Problem";
+      this.problemTabPage.UseVisualStyleBackColor = true;
+      this.problemTabPage.DragDrop += new System.Windows.Forms.DragEventHandler(this.problemTabPage_DragDrop);
+      this.problemTabPage.DragEnter += new System.Windows.Forms.DragEventHandler(this.problemTabPage_DragEnterOver);
+      this.problemTabPage.DragOver += new System.Windows.Forms.DragEventHandler(this.problemTabPage_DragEnterOver);
+      // 
+      // problemViewHost
+      // 
+      this.problemViewHost.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.problemViewHost.Caption = "View";
+      this.problemViewHost.Content = null;
+      this.problemViewHost.Enabled = false;
+      this.problemViewHost.Location = new System.Drawing.Point(6, 36);
+      this.problemViewHost.Name = "problemViewHost";
+      this.problemViewHost.ReadOnly = false;
+      this.problemViewHost.Size = new System.Drawing.Size(526, 293);
+      this.problemViewHost.TabIndex = 2;
+      this.problemViewHost.ViewsLabelVisible = true;
+      this.problemViewHost.ViewType = null;
+      // 
+      // openProblemButton
+      // 
+      this.openProblemButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.Open;
+      this.openProblemButton.Location = new System.Drawing.Point(36, 6);
+      this.openProblemButton.Name = "openProblemButton";
+      this.openProblemButton.Size = new System.Drawing.Size(24, 24);
+      this.openProblemButton.TabIndex = 1;
+      this.toolTip.SetToolTip(this.openProblemButton, "Open Problem");
+      this.openProblemButton.UseVisualStyleBackColor = true;
+      this.openProblemButton.Click += new System.EventHandler(this.openProblemButton_Click);
+      // 
+      // newProblemButton
+      // 
+      this.newProblemButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.NewDocument;
+      this.newProblemButton.Location = new System.Drawing.Point(6, 6);
+      this.newProblemButton.Name = "newProblemButton";
+      this.newProblemButton.Size = new System.Drawing.Size(24, 24);
+      this.newProblemButton.TabIndex = 0;
+      this.toolTip.SetToolTip(this.newProblemButton, "New Problem");
+      this.newProblemButton.UseVisualStyleBackColor = true;
+      this.newProblemButton.Click += new System.EventHandler(this.newProblemButton_Click);
+      // 
+      // algorithmTabPage
+      // 
+      this.algorithmTabPage.Controls.Add(this.algorithmViewHost);
+      this.algorithmTabPage.Controls.Add(this.algorithmSuggestionLabel);
+      this.algorithmTabPage.Controls.Add(this.suggestedInstancesComboBox);
+      this.algorithmTabPage.Location = new System.Drawing.Point(4, 22);
+      this.algorithmTabPage.Name = "algorithmTabPage";
+      this.algorithmTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.algorithmTabPage.Size = new System.Drawing.Size(538, 335);
+      this.algorithmTabPage.TabIndex = 4;
+      this.algorithmTabPage.Text = "Algorithm";
+      this.algorithmTabPage.UseVisualStyleBackColor = true;
+      // 
+      // algorithmViewHost
+      // 
+      this.algorithmViewHost.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.algorithmViewHost.Caption = "View";
+      this.algorithmViewHost.Content = null;
+      this.algorithmViewHost.Enabled = false;
+      this.algorithmViewHost.Location = new System.Drawing.Point(6, 36);
+      this.algorithmViewHost.Name = "algorithmViewHost";
+      this.algorithmViewHost.ReadOnly = false;
+      this.algorithmViewHost.Size = new System.Drawing.Size(526, 293);
+      this.algorithmViewHost.TabIndex = 2;
+      this.algorithmViewHost.ViewsLabelVisible = true;
+      this.algorithmViewHost.ViewType = null;
+      // 
+      // algorithmSuggestionLabel
+      // 
+      this.algorithmSuggestionLabel.AutoSize = true;
+      this.algorithmSuggestionLabel.Location = new System.Drawing.Point(6, 9);
+      this.algorithmSuggestionLabel.Name = "algorithmSuggestionLabel";
+      this.algorithmSuggestionLabel.Size = new System.Drawing.Size(156, 13);
+      this.algorithmSuggestionLabel.TabIndex = 1;
+      this.algorithmSuggestionLabel.Text = "Suggested Algorithm Instances:";
+      // 
+      // suggestedInstancesComboBox
+      // 
+      this.suggestedInstancesComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+            | System.Windows.Forms.AnchorStyles.Right)));
+      this.suggestedInstancesComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+      this.suggestedInstancesComboBox.FormattingEnabled = true;
+      this.suggestedInstancesComboBox.Location = new System.Drawing.Point(178, 6);
+      this.suggestedInstancesComboBox.Name = "suggestedInstancesComboBox";
+      this.suggestedInstancesComboBox.Size = new System.Drawing.Size(354, 21);
+      this.suggestedInstancesComboBox.TabIndex = 0;
+      this.suggestedInstancesComboBox.SelectedIndexChanged += new System.EventHandler(this.suggestedInstancesComboBox_SelectedIndexChanged);
+      // 
+      // runsTabPage
+      // 
+      this.runsTabPage.Controls.Add(this.runsView);
+      this.runsTabPage.Location = new System.Drawing.Point(4, 22);
+      this.runsTabPage.Name = "runsTabPage";
+      this.runsTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.runsTabPage.Size = new System.Drawing.Size(538, 335);
+      this.runsTabPage.TabIndex = 3;
+      this.runsTabPage.Text = "Runs";
+      this.runsTabPage.UseVisualStyleBackColor = true;
+      // 
+      // runsView
+      // 
+      this.runsView.Caption = "RunCollection View";
+      this.runsView.Content = null;
+      this.runsView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.runsView.Location = new System.Drawing.Point(3, 3);
+      this.runsView.Name = "runsView";
+      this.runsView.ReadOnly = false;
+      this.runsView.Size = new System.Drawing.Size(532, 329);
+      this.runsView.TabIndex = 1;
+      // 
+      // okbTabPage
+      // 
+      this.okbTabPage.Controls.Add(this.algorithmInstancesViewHost);
+      this.okbTabPage.Location = new System.Drawing.Point(4, 22);
+      this.okbTabPage.Name = "okbTabPage";
+      this.okbTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.okbTabPage.Size = new System.Drawing.Size(538, 335);
+      this.okbTabPage.TabIndex = 5;
+      this.okbTabPage.Text = "Knowledge Base";
+      this.okbTabPage.UseVisualStyleBackColor = true;
+      // 
+      // openFileDialog
+      // 
+      this.openFileDialog.DefaultExt = "hl";
+      this.openFileDialog.FileName = "Optimizer";
+      this.openFileDialog.Filter = "HeuristicLab Files|*.hl|All Files|*.*";
+      this.openFileDialog.Title = "Open Optimizer";
+      // 
+      // algorithmInstancesViewHost
+      // 
+      this.algorithmInstancesViewHost.Caption = "View";
+      this.algorithmInstancesViewHost.Content = null;
+      this.algorithmInstancesViewHost.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.algorithmInstancesViewHost.Enabled = false;
+      this.algorithmInstancesViewHost.Location = new System.Drawing.Point(3, 3);
+      this.algorithmInstancesViewHost.Name = "algorithmInstancesViewHost";
+      this.algorithmInstancesViewHost.ReadOnly = false;
+      this.algorithmInstancesViewHost.Size = new System.Drawing.Size(532, 329);
+      this.algorithmInstancesViewHost.TabIndex = 0;
+      this.algorithmInstancesViewHost.ViewsLabelVisible = true;
+      this.algorithmInstancesViewHost.ViewType = null;
+      // 
+      // ExpertSystemOptimizerView
+      // 
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
+      this.Controls.Add(this.tabControl);
+      this.Controls.Add(this.evaluationsLimitabel);
+      this.Controls.Add(this.maxEvaluationsTextBox);
+      this.Name = "ExpertSystemOptimizerView";
+      this.Size = new System.Drawing.Size(549, 413);
+      this.Controls.SetChildIndex(this.maxEvaluationsTextBox, 0);
+      this.Controls.SetChildIndex(this.evaluationsLimitabel, 0);
+      this.Controls.SetChildIndex(this.tabControl, 0);
+      this.Controls.SetChildIndex(this.nameLabel, 0);
+      this.Controls.SetChildIndex(this.nameTextBox, 0);
+      this.Controls.SetChildIndex(this.infoLabel, 0);
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
+      this.tabControl.ResumeLayout(false);
+      this.problemTabPage.ResumeLayout(false);
+      this.algorithmTabPage.ResumeLayout(false);
+      this.algorithmTabPage.PerformLayout();
+      this.runsTabPage.ResumeLayout(false);
+      this.okbTabPage.ResumeLayout(false);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Label evaluationsLimitabel;
+    private System.Windows.Forms.TextBox maxEvaluationsTextBox;
+    private MainForm.WindowsForms.DragOverTabControl tabControl;
+    private System.Windows.Forms.TabPage runsTabPage;
+    private HeuristicLab.Optimization.Views.RunCollectionView runsView;
+    private System.Windows.Forms.OpenFileDialog openFileDialog;
+    private System.Windows.Forms.TabPage problemTabPage;
+    private MainForm.WindowsForms.ViewHost problemViewHost;
+    private System.Windows.Forms.Button openProblemButton;
+    private System.Windows.Forms.Button newProblemButton;
+    private System.Windows.Forms.TabPage algorithmTabPage;
+    private MainForm.WindowsForms.ViewHost algorithmViewHost;
+    private System.Windows.Forms.Label algorithmSuggestionLabel;
+    private System.Windows.Forms.ComboBox suggestedInstancesComboBox;
+    private System.Windows.Forms.TabPage okbTabPage;
+    private MainForm.WindowsForms.ViewHost algorithmInstancesViewHost;
+  }
+}
Index: branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem.Views/3.3/ExpertSystemView.cs
===================================================================
--- branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem.Views/3.3/ExpertSystemView.cs	(revision 12860)
+++ branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem.Views/3.3/ExpertSystemView.cs	(revision 12860)
@@ -0,0 +1,237 @@
+﻿#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.ComponentModel;
+using System.Windows.Forms;
+using HeuristicLab.Common;
+using HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
+using HeuristicLab.Optimization;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.OptimizationExpertSystem.Views {
+  [View("Expert-system Optimizer View")]
+  [Content(typeof(ExpertSystem), IsDefaultView = true)]
+  public partial class ExpertSystemView : NamedItemView {
+    protected TypeSelectorDialog problemTypeSelectorDialog;
+    protected virtual bool SuppressEvents { get; set; }
+
+    public new ExpertSystem Content {
+      get { return (ExpertSystem)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public ExpertSystemView() {
+      InitializeComponent();
+    }
+
+    protected override void Dispose(bool disposing) {
+      if (disposing) {
+        if (problemTypeSelectorDialog != null) problemTypeSelectorDialog.Dispose();
+        if (components != null) components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    protected override void DeregisterContentEvents() {
+      Content.PropertyChanged -= Content_PropertyChanged;
+      Content.SuggestedInstances.CollectionReset -= SuggestedInstancesOnChanged;
+      Content.SuggestedInstances.ItemsAdded -= SuggestedInstancesOnChanged;
+      Content.SuggestedInstances.ItemsMoved -= SuggestedInstancesOnChanged;
+      Content.SuggestedInstances.ItemsRemoved -= SuggestedInstancesOnChanged;
+      Content.SuggestedInstances.ItemsReplaced -= SuggestedInstancesOnChanged;
+      base.DeregisterContentEvents();
+    }
+    protected override void RegisterContentEvents() {
+      base.RegisterContentEvents();
+      Content.PropertyChanged += Content_PropertyChanged;
+      Content.SuggestedInstances.CollectionReset += SuggestedInstancesOnChanged;
+      Content.SuggestedInstances.ItemsAdded += SuggestedInstancesOnChanged;
+      Content.SuggestedInstances.ItemsMoved += SuggestedInstancesOnChanged;
+      Content.SuggestedInstances.ItemsRemoved += SuggestedInstancesOnChanged;
+      Content.SuggestedInstances.ItemsReplaced += SuggestedInstancesOnChanged;
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      SuppressEvents = true;
+      try {
+        if (Content == null) {
+          maxEvaluationsTextBox.Text = String.Empty;
+
+          problemViewHost.Content = null;
+          algorithmViewHost.Content = null;
+          runsView.Content = null;
+          algorithmInstancesViewHost.Content = null;
+        } else {
+          maxEvaluationsTextBox.Text = Content.MaximumEvaluations.ToString();
+          problemViewHost.Content = Content.Problem;
+          runsView.Content = Content.Runs;
+          algorithmInstancesViewHost.Content = Content.AlgorithmInstances;
+        }
+      } finally { SuppressEvents = false; }
+      UpdateSuggestedInstancesCombobox();
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      maxEvaluationsTextBox.Enabled = Content != null && !ReadOnly && !Locked;
+      newProblemButton.Enabled = Content != null && !ReadOnly && !Locked;
+      openProblemButton.Enabled = Content != null && !ReadOnly && !Locked;
+      problemViewHost.Enabled = Content != null && !ReadOnly && !Locked;
+      suggestedInstancesComboBox.Enabled = Content != null && !ReadOnly && !Locked;
+      algorithmViewHost.Enabled = Content != null && !ReadOnly && !Locked;
+      runsView.Enabled = Content != null;
+      algorithmInstancesViewHost.Enabled = Content != null;
+    }
+
+    private void UpdateSuggestedInstancesCombobox() {
+      var prevSelection = (IAlgorithm)suggestedInstancesComboBox.SelectedItem;
+      var prevNewIndex = -1;
+      suggestedInstancesComboBox.Items.Clear();
+      if (Content == null) return;
+
+      for (var i = 0; i < Content.SuggestedInstances.Count; i++) {
+        suggestedInstancesComboBox.Items.Add(Content.SuggestedInstances[i]);
+        if (prevSelection == null || Content.SuggestedInstances[i].Name == prevSelection.Name)
+          prevNewIndex = prevSelection == null ? 0 : i;
+      }
+      if (prevNewIndex >= 0) {
+        suggestedInstancesComboBox.SelectedIndex = prevNewIndex;
+      }
+    }
+
+    #region Event Handlers
+    #region Content events
+    private void Content_PropertyChanged(object sender, PropertyChangedEventArgs e) {
+      if (InvokeRequired) {
+        Invoke((Action<object, PropertyChangedEventArgs>)Content_PropertyChanged, sender, e);
+        return;
+      }
+      SuppressEvents = true;
+      try {
+        switch (e.PropertyName) {
+          case "MaximumEvaluations": maxEvaluationsTextBox.Text = Content.MaximumEvaluations.ToString(); break;
+          case "Problem": problemViewHost.Content = Content.Problem; break;
+        }
+      } finally { SuppressEvents = false; }
+    }
+
+    private void SuggestedInstancesOnChanged(object sender, EventArgs e) {
+      UpdateSuggestedInstancesCombobox();
+    }
+    #endregion
+
+    #region Control events
+    private void maxEvaluationsTextBox_Validating(object sender, CancelEventArgs e) {
+      if (SuppressEvents) return;
+      if (InvokeRequired) {
+        Invoke((Action<object, CancelEventArgs>)maxEvaluationsTextBox_Validating, sender, e);
+        return;
+      }
+      int value;
+      if (!int.TryParse(maxEvaluationsTextBox.Text, out value)) {
+        e.Cancel = !maxEvaluationsTextBox.ReadOnly && maxEvaluationsTextBox.Enabled;
+        errorProvider.SetError(maxEvaluationsTextBox, "Please enter a valid integer number.");
+      } else {
+        Content.MaximumEvaluations = value;
+        e.Cancel = false;
+        errorProvider.SetError(maxEvaluationsTextBox, null);
+      }
+    }
+
+    private void newProblemButton_Click(object sender, EventArgs e) {
+      if (problemTypeSelectorDialog == null) {
+        problemTypeSelectorDialog = new TypeSelectorDialog { Caption = "Select Problem" };
+        problemTypeSelectorDialog.TypeSelector.Caption = "Available Problems";
+        problemTypeSelectorDialog.TypeSelector.Configure(typeof(ISingleObjectiveHeuristicOptimizationProblem)
+          , showNotInstantiableTypes: false, showGenericTypes: false);
+      }
+      if (problemTypeSelectorDialog.ShowDialog(this) == DialogResult.OK) {
+        try {
+          Content.Problem = (ISingleObjectiveHeuristicOptimizationProblem)problemTypeSelectorDialog.TypeSelector.CreateInstanceOfSelectedType();
+        } catch (Exception ex) {
+          ErrorHandling.ShowErrorDialog(this, ex);
+        }
+      }
+    }
+
+    private void openProblemButton_Click(object sender, EventArgs e) {
+      openFileDialog.Title = "Open Problem";
+      if (openFileDialog.ShowDialog(this) == DialogResult.OK) {
+        newProblemButton.Enabled = openProblemButton.Enabled = false;
+        problemViewHost.Enabled = false;
+
+        ContentManager.LoadAsync(openFileDialog.FileName, delegate(IStorableContent content, Exception error) {
+          try {
+            if (error != null) throw error;
+            var problem = content as ISingleObjectiveHeuristicOptimizationProblem;
+            if (problem == null) {
+              var algorithm = content as IAlgorithm;
+              if (algorithm == null || !(algorithm.Problem is ISingleObjectiveHeuristicOptimizationProblem))
+                MessageBox.Show(this, "The selected file is not a problem, nor an algorithm with a problem.", "Invalid File", MessageBoxButtons.OK, MessageBoxIcon.Error);
+              else Content.Problem = (ISingleObjectiveHeuristicOptimizationProblem)algorithm.Problem;
+            } else
+              Content.Problem = problem;
+          } catch (Exception ex) {
+            ErrorHandling.ShowErrorDialog(this, ex);
+          } finally {
+            Invoke(new Action(delegate() {
+              problemViewHost.Enabled = true;
+              newProblemButton.Enabled = openProblemButton.Enabled = true;
+            }));
+          }
+        });
+      }
+    }
+
+    private void problemTabPage_DragEnterOver(object sender, DragEventArgs e) {
+      e.Effect = DragDropEffects.None;
+      var prob = e.Data.GetData(Constants.DragDropDataFormat) as ISingleObjectiveHeuristicOptimizationProblem;
+      if (!ReadOnly && prob != null) {
+        if ((e.KeyState & 32) == 32) e.Effect = DragDropEffects.Link;  // ALT key
+        else if ((e.KeyState & 4) == 4) e.Effect = DragDropEffects.Move;  // SHIFT key
+        else if (e.AllowedEffect.HasFlag(DragDropEffects.Copy)) e.Effect = DragDropEffects.Copy;
+        else if (e.AllowedEffect.HasFlag(DragDropEffects.Move)) e.Effect = DragDropEffects.Move;
+        else if (e.AllowedEffect.HasFlag(DragDropEffects.Link)) e.Effect = DragDropEffects.Link;
+      }
+    }
+
+    private void problemTabPage_DragDrop(object sender, DragEventArgs e) {
+      if (e.Effect != DragDropEffects.None) {
+        var prob = e.Data.GetData(Constants.DragDropDataFormat) as ISingleObjectiveHeuristicOptimizationProblem;
+        if (e.Effect.HasFlag(DragDropEffects.Copy)) prob = (ISingleObjectiveHeuristicOptimizationProblem)prob.Clone();
+        Content.Problem = prob;
+      }
+    }
+
+    private void suggestedInstancesComboBox_SelectedIndexChanged(object sender, EventArgs e) {
+      if (SuppressEvents) return;
+      if (InvokeRequired) { Invoke((Action<object, EventArgs>)suggestedInstancesComboBox_SelectedIndexChanged, sender, e); return; }
+      if (suggestedInstancesComboBox.SelectedIndex >= 0)
+        algorithmViewHost.Content = (IAlgorithm)suggestedInstancesComboBox.SelectedItem;
+      else algorithmViewHost.Content = null;
+    }
+    #endregion
+    #endregion
+  }
+}
Index: branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem.Views/3.3/HeuristicLab.OptimizationExpertSystem.Views-3.3.csproj
===================================================================
--- branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem.Views/3.3/HeuristicLab.OptimizationExpertSystem.Views-3.3.csproj	(revision 12859)
+++ branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem.Views/3.3/HeuristicLab.OptimizationExpertSystem.Views-3.3.csproj	(revision 12860)
@@ -134,9 +134,9 @@
   </ItemGroup>
   <ItemGroup>
-    <Compile Include="ExpertSystemOptimizerView.cs">
+    <Compile Include="ExpertSystemView.cs">
       <SubType>UserControl</SubType>
     </Compile>
-    <Compile Include="ExpertSystemOptimizerView.Designer.cs">
-      <DependentUpon>ExpertSystemOptimizerView.cs</DependentUpon>
+    <Compile Include="ExpertSystemView.Designer.cs">
+      <DependentUpon>ExpertSystemView.cs</DependentUpon>
     </Compile>
     <Compile Include="Plugin.cs" />
Index: branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/ExpertSystem.cs
===================================================================
--- branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/ExpertSystem.cs	(revision 12860)
+++ branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/ExpertSystem.cs	(revision 12860)
@@ -0,0 +1,171 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 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.ComponentModel;
+using System.Collections.Generic;
+using System.Drawing;
+using System.Linq;
+using HeuristicLab.Analysis;
+using HeuristicLab.Core;
+using HeuristicLab.Optimization;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
+using HeuristicLab.Common.Resources;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.OptimizationExpertSystem {
+  [Item("Expert-System", "Currently in experimental phase, an expert system that makes algorithm suggestions based on fitness landscape analysis features and an optimization knowledge base.")]
+  [StorableClass]
+  [Creatable(CreatableAttribute.Categories.TestingAndAnalysis, Priority = 119)]
+  public sealed class ExpertSystem : NamedItem, IStorableContent, INotifyPropertyChanged {
+
+    public string Filename { get; set; }
+
+    public static new Image StaticItemImage {
+      get { return VSImageLibrary.Library; }
+    }
+
+    [Storable]
+    private int maximumEvaluations;
+    public int MaximumEvaluations {
+      get { return maximumEvaluations; }
+      set {
+        if (maximumEvaluations == value) return;
+        maximumEvaluations = value;
+        OnPropertyChanged("MaximumEvaluations");
+        UpdateSuggestions();
+      }
+    }
+
+    [Storable]
+    private RunCollection runs;
+    public RunCollection Runs {
+      get { return runs; }
+    }
+
+    [Storable]
+    private ItemList<IAlgorithm> algorithmInstances;
+    public ItemList<IAlgorithm> AlgorithmInstances {
+      get { return algorithmInstances; }
+    }
+
+    [Storable]
+    private ISingleObjectiveHeuristicOptimizationProblem problem;
+    public ISingleObjectiveHeuristicOptimizationProblem Problem {
+      get { return problem; }
+      set {
+        if (problem == value) return;
+        problem = value;
+        OnPropertyChanged("Problem");
+        UpdateSuggestions();
+      }
+    }
+
+    [Storable]
+    private ItemList<IAlgorithm> suggestedInstances;
+    private ReadOnlyItemList<IAlgorithm> readOnlySuggestedInstances;
+    public ReadOnlyItemList<IAlgorithm> SuggestedInstances {
+      get { return readOnlySuggestedInstances; }
+    }
+
+    private bool Maximization {
+      get { return Problem != null && ((IValueParameter<BoolValue>)Problem.MaximizationParameter).Value.Value; }
+    }
+
+    [StorableConstructor]
+    private ExpertSystem(bool deserializing) : base(deserializing) { }
+    private ExpertSystem(ExpertSystem original, Cloner cloner)
+      : base(original, cloner) {
+      runs = cloner.Clone(original.runs);
+      algorithmInstances = cloner.Clone(original.algorithmInstances);
+      problem = cloner.Clone(original.problem);
+      suggestedInstances = cloner.Clone(original.suggestedInstances);
+      readOnlySuggestedInstances = suggestedInstances.AsReadOnly();
+      RegisterEventHandlers();
+    }
+    public ExpertSystem() {
+      Name = ItemName;
+      Description = ItemDescription;
+      runs = new RunCollection();
+      algorithmInstances = new ItemList<IAlgorithm>();
+      suggestedInstances = new ItemList<IAlgorithm>();
+      readOnlySuggestedInstances = suggestedInstances.AsReadOnly();
+      RegisterEventHandlers();
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new ExpertSystem(this, cloner);
+    }
+
+    [StorableHook(HookType.AfterDeserialization)]
+    private void AfterDeserialization() {
+      readOnlySuggestedInstances = suggestedInstances.AsReadOnly();
+      RegisterEventHandlers();
+    }
+
+    private void RegisterEventHandlers() {
+      runs.CollectionReset += InformationChanged;
+      runs.ItemsAdded += InformationChanged;
+      runs.ItemsRemoved += InformationChanged;
+      runs.Reset += InformationChanged;
+      runs.UpdateOfRunsInProgressChanged += InformationChanged;
+      algorithmInstances.CollectionReset += InformationChanged;
+      algorithmInstances.ItemsAdded += InformationChanged;
+      algorithmInstances.ItemsRemoved += InformationChanged;
+    }
+
+    private void InformationChanged(object sender, EventArgs e) {
+      var runCollection = sender as RunCollection;
+      if (runCollection != null && runCollection.UpdateOfRunsInProgress) return;
+      UpdateSuggestions();
+    }
+
+    private void UpdateSuggestions() {
+      if (Problem == null) return;
+      var instances = new SortedList<double, IAlgorithm>();
+      foreach (var instance in algorithmInstances) {
+        var relevantRuns = instance.Runs.Where(x => ((StringValue)x.Parameters["Problem Type"]).Value == Problem.GetType().Name);
+        var avgQuality = 0.0;
+        var counter = 0;
+        foreach (var run in relevantRuns) {
+          var performanceGraph = ((IndexedDataTable<double>)run.Results["QualityPerEvaluations"]);
+          try {
+            avgQuality += performanceGraph.Rows.First().Values.TakeWhile(x => x.Item1 < MaximumEvaluations).Last().Item2;
+            counter++;
+          } catch { continue; }
+        }
+        avgQuality /= counter;
+        instances.Add(avgQuality, instance);
+      }
+
+      suggestedInstances.Clear();
+      var instanceLadder = instances.Select(x => x.Value);
+      suggestedInstances.AddRange(Maximization ? instanceLadder.Reverse() : instanceLadder);
+    }
+
+    public event PropertyChangedEventHandler PropertyChanged;
+    private void OnPropertyChanged(string propertyName) {
+      var handler = PropertyChanged;
+      if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
+    }
+  }
+}
Index: branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/ExpertSystemOptimizer.cs
===================================================================
--- branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/ExpertSystemOptimizer.cs	(revision 12859)
+++ 	(revision )
@@ -1,241 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2015 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.ComponentModel;
-using System.Collections.Generic;
-using System.Drawing;
-
-using HeuristicLab.Core;
-using HeuristicLab.Optimization;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Common;
-using HeuristicLab.Common.Resources;
-
-namespace HeuristicLab.OptimizationExpertSystem {
-  [Item("Expert-System Optimizer", "Currently in experimental phase, an expert system that makes algorithm suggestions based on fitness landscape analysis features and an optimization knowledge base.")]
-  [StorableClass]
-  [Creatable(CreatableAttribute.Categories.TestingAndAnalysis, Priority = 118)]
-  public sealed class ExpertSystemOptimizer : ParameterizedNamedItem, IOptimizer, IStorableContent, INotifyPropertyChanged {
-
-    public string Filename { get; set; }
-
-    public static new Image StaticItemImage {
-      get { return VSImageLibrary.Library; }
-    }
-
-    [Storable]
-    private int maximumEvaluations;
-    public int MaximumEvaluations {
-      get { return maximumEvaluations; }
-      set {
-        if (maximumEvaluations == value) return;
-        maximumEvaluations = value;
-        OnPropertyChanged("MaximumEvaluations");
-      }
-    }
-
-    [Storable]
-    private RunCollection runs;
-    public RunCollection Runs {
-      get { return runs; }
-      private set {
-        if (value == null) throw new ArgumentNullException("value");
-        if (runs == value) return;
-        runs = value;
-        OnPropertyChanged("Runs");
-      }
-    }
-
-    [Storable]
-    private ExecutionState executionState;
-    public ExecutionState ExecutionState {
-      get { return executionState; }
-      private set {
-        if (executionState != value) {
-          executionState = value;
-          OnPropertyChanged("ExecutionState");
-          OnExecutionStateChanged();
-          OnItemImageChanged();
-        }
-      }
-    }
-
-    [Storable]
-    private TimeSpan executionTime;
-    public TimeSpan ExecutionTime {
-      get { return executionTime; }
-      private set {
-        if (executionTime == value) return;
-        executionTime = value;
-        OnPropertyChanged("ExecutionTime");
-        OnExecutionTimeChanged();
-      }
-    }
-
-    [Storable]
-    private RunCollection knowledgeBase;
-    public RunCollection KnowledgeBase {
-      get { return knowledgeBase; }
-      private set {
-        if (value == null) throw new ArgumentNullException("value");
-        if (knowledgeBase == value) return;
-        knowledgeBase = value;
-        OnPropertyChanged("KnowledgeBase");
-      }
-    }
-
-    [Storable]
-    private IProblem problem;
-    public IProblem Problem {
-      get { return problem; }
-      set {
-        if (problem == value) return;
-        problem = value;
-        OnPropertyChanged("Problem");
-      }
-    }
-
-    [Storable]
-    private ItemList<IAlgorithm> suggestedInstances;
-    private ReadOnlyItemList<IAlgorithm> readOnlySuggestedInstances;
-    public ReadOnlyItemList<IAlgorithm> SuggestedInstances {
-      get { return readOnlySuggestedInstances; }
-    }
-
-    public IEnumerable<IOptimizer> NestedOptimizers {
-      get { return SuggestedInstances; }
-    }
-
-    [StorableConstructor]
-    private ExpertSystemOptimizer(bool deserializing) : base(deserializing) { }
-    private ExpertSystemOptimizer(ExpertSystemOptimizer original, Cloner cloner)
-      : base(original, cloner) {
-      runs = cloner.Clone(original.runs);
-      executionState = original.executionState;
-      executionTime = original.executionTime;
-      knowledgeBase = cloner.Clone(original.knowledgeBase);
-      problem = cloner.Clone(original.problem);
-      suggestedInstances = cloner.Clone(original.suggestedInstances);
-      readOnlySuggestedInstances = suggestedInstances.AsReadOnly();
-    }
-    public ExpertSystemOptimizer() {
-      Runs = new RunCollection();
-      KnowledgeBase = new RunCollection();
-      suggestedInstances = new ItemList<IAlgorithm>();
-      readOnlySuggestedInstances = suggestedInstances.AsReadOnly();
-      ExecutionState = ExecutionState.Stopped;
-      ExecutionTime = TimeSpan.Zero;
-    }
-
-    public override IDeepCloneable Clone(Cloner cloner) {
-      return new ExpertSystemOptimizer(this, cloner);
-    }
-
-    [StorableHook(HookType.AfterDeserialization)]
-    private void AfterDeserialization() {
-      readOnlySuggestedInstances = suggestedInstances.AsReadOnly();
-    }
-
-    public void Prepare() {
-      Prepare(false);
-    }
-
-    public void Prepare(bool clearRuns) {
-      if ((ExecutionState != ExecutionState.Prepared) && (ExecutionState != ExecutionState.Paused) && (ExecutionState != ExecutionState.Stopped))
-        throw new InvalidOperationException(string.Format("Prepare not allowed in execution state \"{0}\".", ExecutionState));
-      if (clearRuns) Runs.Clear();
-      ExecutionTime = TimeSpan.Zero;
-      ExecutionState = ExecutionState.Prepared;
-      OnPrepared();
-    }
-
-    public void Start() {
-      if ((ExecutionState != ExecutionState.Prepared) && (ExecutionState != ExecutionState.Paused))
-        throw new InvalidOperationException(string.Format("Start not allowed in execution state \"{0}\".", ExecutionState));
-      ExecutionState = ExecutionState.Started;
-      OnStarted();
-    }
-
-    public void Pause() {
-      if (ExecutionState != ExecutionState.Started)
-        throw new InvalidOperationException(string.Format("Pause not allowed in execution state \"{0}\".", ExecutionState));
-      ExecutionState = ExecutionState.Paused;
-      OnPaused();
-    }
-
-
-    public void Stop() {
-      if ((ExecutionState != ExecutionState.Started) && (ExecutionState != ExecutionState.Paused))
-        throw new InvalidOperationException(string.Format("Stop not allowed in execution state \"{0}\".", ExecutionState));
-      ExecutionState = ExecutionState.Stopped;
-      OnStopped();
-    }
-
-    public event EventHandler Prepared;
-    private void OnPrepared() {
-      var handler = Prepared;
-      if (handler != null) handler(this, EventArgs.Empty);
-    }
-
-    public event EventHandler Started;
-    private void OnStarted() {
-      var handler = Started;
-      if (handler != null) handler(this, EventArgs.Empty);
-    }
-
-    public event EventHandler Paused;
-    private void OnPaused() {
-      var handler = Paused;
-      if (handler != null) handler(this, EventArgs.Empty);
-    }
-
-    public event EventHandler Stopped;
-    private void OnStopped() {
-      var handler = Stopped;
-      if (handler != null) handler(this, EventArgs.Empty);
-    }
-
-    public event EventHandler<EventArgs<Exception>> ExceptionOccurred;
-    private void OnExceptionOccurred(Exception e) {
-      var handler = ExceptionOccurred;
-      if (handler != null) handler(this, new EventArgs<Exception>(e));
-    }
-
-    public event EventHandler ExecutionStateChanged;
-    private void OnExecutionStateChanged() {
-      var handler = ExecutionStateChanged;
-      if (handler != null) handler(this, EventArgs.Empty);
-    }
-
-    public event EventHandler ExecutionTimeChanged;
-    private void OnExecutionTimeChanged() {
-      var handler = ExecutionTimeChanged;
-      if (handler != null) handler(this, EventArgs.Empty);
-    }
-
-    public event PropertyChangedEventHandler PropertyChanged;
-    private void OnPropertyChanged(string propertyName) {
-      var handler = PropertyChanged;
-      if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
-    }
-  }
-}
Index: branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/HeuristicLab.OptimizationExpertSystem-3.3.csproj
===================================================================
--- branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/HeuristicLab.OptimizationExpertSystem-3.3.csproj	(revision 12859)
+++ branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem/3.3/HeuristicLab.OptimizationExpertSystem-3.3.csproj	(revision 12860)
@@ -112,5 +112,5 @@
   </ItemGroup>
   <ItemGroup>
-    <Compile Include="ExpertSystemOptimizer.cs" />
+    <Compile Include="ExpertSystem.cs" />
     <Compile Include="Plugin.cs" />
     <None Include="Properties\AssemblyInfo.cs.frame" />
