Index: /trunk/sources/HeuristicLab.Algorithms.GeneticAlgorithm/3.3/GeneticAlgorithm.cs
===================================================================
--- /trunk/sources/HeuristicLab.Algorithms.GeneticAlgorithm/3.3/GeneticAlgorithm.cs	(revision 3273)
+++ /trunk/sources/HeuristicLab.Algorithms.GeneticAlgorithm/3.3/GeneticAlgorithm.cs	(revision 3274)
@@ -179,6 +179,6 @@
     }
 
-    public override void Prepare() {
-      if (Problem != null) base.Prepare();
+    public override void Prepare(bool clearResults) {
+      if (Problem != null) base.Prepare(clearResults);
     }
 
Index: /trunk/sources/HeuristicLab.Algorithms.LocalSearch/3.3/LocalSearch.cs
===================================================================
--- /trunk/sources/HeuristicLab.Algorithms.LocalSearch/3.3/LocalSearch.cs	(revision 3273)
+++ /trunk/sources/HeuristicLab.Algorithms.LocalSearch/3.3/LocalSearch.cs	(revision 3274)
@@ -154,7 +154,7 @@
     }
 
-    public override void Prepare() {
+    public override void Prepare(bool clearResults) {
       if (Problem != null && MoveGenerator != null && MoveMaker != null && MoveEvaluator != null)
-        base.Prepare();
+        base.Prepare(clearResults);
     }
 
Index: /trunk/sources/HeuristicLab.Algorithms.SimulatedAnnealing/3.3/SimulatedAnnealing.cs
===================================================================
--- /trunk/sources/HeuristicLab.Algorithms.SimulatedAnnealing/3.3/SimulatedAnnealing.cs	(revision 3273)
+++ /trunk/sources/HeuristicLab.Algorithms.SimulatedAnnealing/3.3/SimulatedAnnealing.cs	(revision 3274)
@@ -182,7 +182,7 @@
     }
 
-    public override void Prepare() {
+    public override void Prepare(bool clearResults) {
       if (Problem != null && MoveGenerator != null && MoveMaker != null && MoveEvaluator != null)
-        base.Prepare();
+        base.Prepare(clearResults);
     }
 
Index: /trunk/sources/HeuristicLab.Algorithms.TabuSearch/3.3/TabuSearch.cs
===================================================================
--- /trunk/sources/HeuristicLab.Algorithms.TabuSearch/3.3/TabuSearch.cs	(revision 3273)
+++ /trunk/sources/HeuristicLab.Algorithms.TabuSearch/3.3/TabuSearch.cs	(revision 3274)
@@ -176,8 +176,8 @@
     }
 
-    public override void Prepare() {
+    public override void Prepare(bool clearResults) {
       if (Problem != null && MoveGenerator != null && MoveMaker != null && MoveEvaluator != null &&
           TabuMoveEvaluator != null && TabuMoveMaker != null)
-        base.Prepare();
+        base.Prepare(clearResults);
     }
 
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/OperatorListView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/OperatorListView.cs	(revision 3273)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/OperatorListView.cs	(revision 3274)
@@ -1,3 +1,24 @@
-﻿using System.Windows.Forms;
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 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.Windows.Forms;
 using HeuristicLab.Collections;
 using HeuristicLab.MainForm;
Index: /trunk/sources/HeuristicLab.Optimization.Views/3.3/AlgorithmView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Optimization.Views/3.3/AlgorithmView.cs	(revision 3273)
+++ /trunk/sources/HeuristicLab.Optimization.Views/3.3/AlgorithmView.cs	(revision 3274)
@@ -237,5 +237,12 @@
     }
     protected virtual void resetButton_Click(object sender, EventArgs e) {
-      Content.Prepare();
+      if (Content.Results.Count > 0) {
+        if (MessageBox.Show(this, "Clear all results of this run?", "Clear All Results?", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) == DialogResult.Yes)
+          Content.Prepare(true);
+        else
+          Content.Prepare(false);
+      } else {
+        Content.Prepare();
+      }
     }
     #endregion
Index: unk/sources/HeuristicLab.Optimization.Views/3.3/BatchRunListView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Optimization.Views/3.3/BatchRunListView.Designer.cs	(revision 3273)
+++ 	(revision )
@@ -1,53 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2010 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 BatchRunListView {
-    /// <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) {
-        if (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() {
-      components = new System.ComponentModel.Container();
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-    }
-
-    #endregion
-  }
-}
Index: unk/sources/HeuristicLab.Optimization.Views/3.3/BatchRunListView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Optimization.Views/3.3/BatchRunListView.cs	(revision 3273)
+++ 	(revision )
@@ -1,52 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2010 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 HeuristicLab.Core.Views;
-using HeuristicLab.MainForm;
-
-namespace HeuristicLab.Optimization.Views {
-  [View("BatchRunList View")]
-  [Content(typeof(BatchRunList), true)]
-  public partial class BatchRunListView : ItemListView<BatchRun> {
-    /// <summary>
-    /// Initializes a new instance of <see cref="VariablesScopeView"/> with caption "Variables Scope View".
-    /// </summary>
-    public BatchRunListView() {
-      InitializeComponent();
-      Caption = "BatchRunList";
-      itemsGroupBox.Text = "Batch Runs";
-    }
-    /// <summary>
-    /// Initializes a new instance of <see cref="VariablesScopeView"/> with 
-    /// the given <paramref name="scope"/>.
-    /// </summary>
-    /// <remarks>Calls <see cref="VariablesScopeView()"/>.</remarks>
-    /// <param name="scope">The scope whose variables should be represented visually.</param>
-    public BatchRunListView(BatchRunList content)
-      : this() {
-      Content = content;
-    }
-
-    protected override BatchRun CreateItem() {
-      return new BatchRun();
-    }
-  }
-}
Index: /trunk/sources/HeuristicLab.Optimization.Views/3.3/BatchRunView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Optimization.Views/3.3/BatchRunView.cs	(revision 3273)
+++ /trunk/sources/HeuristicLab.Optimization.Views/3.3/BatchRunView.cs	(revision 3274)
@@ -227,5 +227,5 @@
     private void resetButton_Click(object sender, EventArgs e) {
       if (Content.Runs.Count > 0) {
-        if (MessageBox.Show(this, "Clear all runs executed so far?", "Clear All Runs?", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) == DialogResult.Yes)
+        if (MessageBox.Show(this, "Clear all runs executed so far?", "Clear All Runs?", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.Yes)
           Content.Prepare(true);
         else
Index: /trunk/sources/HeuristicLab.Optimization.Views/3.3/ExperimentView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Optimization.Views/3.3/ExperimentView.Designer.cs	(revision 3273)
+++ /trunk/sources/HeuristicLab.Optimization.Views/3.3/ExperimentView.Designer.cs	(revision 3274)
@@ -46,7 +46,5 @@
     private void InitializeComponent() {
       this.tabControl = new System.Windows.Forms.TabControl();
-      this.batchRunsTabPage = new System.Windows.Forms.TabPage();
-      this.resultsTabPage = new System.Windows.Forms.TabPage();
-      this.runsView = new HeuristicLab.Optimization.Views.RunCollectionView();
+      this.optimizersTabPage = new System.Windows.Forms.TabPage();
       this.startButton = new System.Windows.Forms.Button();
       this.stopButton = new System.Windows.Forms.Button();
@@ -55,9 +53,8 @@
       this.executionTimeTextBox = new System.Windows.Forms.TextBox();
       this.pauseButton = new System.Windows.Forms.Button();
-      this.batchRunListView = new HeuristicLab.Optimization.Views.BatchRunListView();
+      this.optimizerListView = new HeuristicLab.Optimization.Views.OptimizerListView();
       ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
       this.tabControl.SuspendLayout();
-      this.batchRunsTabPage.SuspendLayout();
-      this.resultsTabPage.SuspendLayout();
+      this.optimizersTabPage.SuspendLayout();
       this.SuspendLayout();
       // 
@@ -77,6 +74,5 @@
                   | System.Windows.Forms.AnchorStyles.Left)
                   | System.Windows.Forms.AnchorStyles.Right)));
-      this.tabControl.Controls.Add(this.batchRunsTabPage);
-      this.tabControl.Controls.Add(this.resultsTabPage);
+      this.tabControl.Controls.Add(this.optimizersTabPage);
       this.tabControl.Location = new System.Drawing.Point(0, 52);
       this.tabControl.Name = "tabControl";
@@ -85,37 +81,14 @@
       this.tabControl.TabIndex = 4;
       // 
-      // batchRunsTabPage
-      // 
-      this.batchRunsTabPage.Controls.Add(this.batchRunListView);
-      this.batchRunsTabPage.Location = new System.Drawing.Point(4, 22);
-      this.batchRunsTabPage.Name = "batchRunsTabPage";
-      this.batchRunsTabPage.Padding = new System.Windows.Forms.Padding(3);
-      this.batchRunsTabPage.Size = new System.Drawing.Size(671, 374);
-      this.batchRunsTabPage.TabIndex = 1;
-      this.batchRunsTabPage.Text = "Batch Runs";
-      this.batchRunsTabPage.UseVisualStyleBackColor = true;
-      // 
-      // resultsTabPage
-      // 
-      this.resultsTabPage.Controls.Add(this.runsView);
-      this.resultsTabPage.Location = new System.Drawing.Point(4, 22);
-      this.resultsTabPage.Name = "resultsTabPage";
-      this.resultsTabPage.Padding = new System.Windows.Forms.Padding(3);
-      this.resultsTabPage.Size = new System.Drawing.Size(671, 374);
-      this.resultsTabPage.TabIndex = 2;
-      this.resultsTabPage.Text = "Results";
-      this.resultsTabPage.UseVisualStyleBackColor = true;
-      // 
-      // runsView
-      // 
-      this.runsView.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.runsView.Caption = "RunCollection";
-      this.runsView.Content = null;
-      this.runsView.Location = new System.Drawing.Point(6, 6);
-      this.runsView.Name = "runsView";
-      this.runsView.Size = new System.Drawing.Size(659, 362);
-      this.runsView.TabIndex = 0;
+      // optimizersTabPage
+      // 
+      this.optimizersTabPage.Controls.Add(this.optimizerListView);
+      this.optimizersTabPage.Location = new System.Drawing.Point(4, 22);
+      this.optimizersTabPage.Name = "optimizersTabPage";
+      this.optimizersTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.optimizersTabPage.Size = new System.Drawing.Size(671, 374);
+      this.optimizersTabPage.TabIndex = 1;
+      this.optimizersTabPage.Text = "Optimizers";
+      this.optimizersTabPage.UseVisualStyleBackColor = true;
       // 
       // startButton
@@ -186,15 +159,15 @@
       this.pauseButton.Click += new System.EventHandler(this.pauseButton_Click);
       // 
-      // batchRunListView
-      // 
-      this.batchRunListView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+      // optimizerListView
+      // 
+      this.optimizerListView.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.batchRunListView.Caption = "BatchRunList";
-      this.batchRunListView.Content = null;
-      this.batchRunListView.Location = new System.Drawing.Point(6, 6);
-      this.batchRunListView.Name = "batchRunListView";
-      this.batchRunListView.Size = new System.Drawing.Size(659, 362);
-      this.batchRunListView.TabIndex = 0;
+      this.optimizerListView.Caption = "OptimizerList";
+      this.optimizerListView.Content = null;
+      this.optimizerListView.Location = new System.Drawing.Point(6, 6);
+      this.optimizerListView.Name = "optimizerListView";
+      this.optimizerListView.Size = new System.Drawing.Size(659, 362);
+      this.optimizerListView.TabIndex = 0;
       // 
       // ExperimentView
@@ -224,6 +197,5 @@
       ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
       this.tabControl.ResumeLayout(false);
-      this.batchRunsTabPage.ResumeLayout(false);
-      this.resultsTabPage.ResumeLayout(false);
+      this.optimizersTabPage.ResumeLayout(false);
       this.ResumeLayout(false);
       this.PerformLayout();
@@ -233,5 +205,5 @@
 
     private System.Windows.Forms.TabControl tabControl;
-    private System.Windows.Forms.TabPage batchRunsTabPage;
+    private System.Windows.Forms.TabPage optimizersTabPage;
     private System.Windows.Forms.Button startButton;
     private System.Windows.Forms.Button stopButton;
@@ -239,8 +211,6 @@
     private System.Windows.Forms.Label executionTimeLabel;
     private System.Windows.Forms.TextBox executionTimeTextBox;
-    private System.Windows.Forms.TabPage resultsTabPage;
-    private RunCollectionView runsView;
     private System.Windows.Forms.Button pauseButton;
-    private BatchRunListView batchRunListView;
+    private OptimizerListView optimizerListView;
 
   }
Index: /trunk/sources/HeuristicLab.Optimization.Views/3.3/ExperimentView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Optimization.Views/3.3/ExperimentView.cs	(revision 3273)
+++ /trunk/sources/HeuristicLab.Optimization.Views/3.3/ExperimentView.cs	(revision 3274)
@@ -70,6 +70,5 @@
       base.OnContentChanged();
       if (Content == null) {
-        batchRunListView.Content = null;
-        runsView.Content = null;
+        optimizerListView.Content = null;
         tabControl.Enabled = false;
         startButton.Enabled = pauseButton.Enabled = stopButton.Enabled = resetButton.Enabled = false;
@@ -77,6 +76,5 @@
         executionTimeTextBox.Enabled = false;
       } else {
-        batchRunListView.Content = Content.BatchRuns;
-        runsView.Content = Content.Runs;
+        optimizerListView.Content = Content.Optimizers;
         tabControl.Enabled = true;
         EnableDisableButtons();
@@ -127,12 +125,8 @@
     }
     private void resetButton_Click(object sender, EventArgs e) {
-      if (Content.Runs.Count > 0) {
-        if (MessageBox.Show(this, "Clear all runs executed so far?", "Clear All Runs?", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) == DialogResult.Yes)
-          Content.Prepare(true);
-        else
-          Content.Prepare(false);
-      } else {
-        Content.Prepare();
-      }
+      if (MessageBox.Show(this, "Clear all runs executed so far?", "Clear All Runs?", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.Yes)
+        Content.Prepare(true);
+      else
+        Content.Prepare(false);
     }
     #endregion
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 3273)
+++ /trunk/sources/HeuristicLab.Optimization.Views/3.3/HeuristicLab.Optimization.Views-3.3.csproj	(revision 3274)
@@ -98,9 +98,9 @@
       <DependentUpon>BatchRunView.cs</DependentUpon>
     </Compile>
-    <Compile Include="BatchRunListView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="BatchRunListView.Designer.cs">
-      <DependentUpon>BatchRunListView.cs</DependentUpon>
+    <Compile Include="OptimizerListView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="OptimizerListView.Designer.cs">
+      <DependentUpon>OptimizerListView.cs</DependentUpon>
     </Compile>
     <Compile Include="ExperimentView.cs">
Index: /trunk/sources/HeuristicLab.Optimization.Views/3.3/OptimizerListView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Optimization.Views/3.3/OptimizerListView.Designer.cs	(revision 3274)
+++ /trunk/sources/HeuristicLab.Optimization.Views/3.3/OptimizerListView.Designer.cs	(revision 3274)
@@ -0,0 +1,54 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 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 OptimizerListView {
+    /// <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) {
+        if (typeSelectorDialog != null) typeSelectorDialog.Dispose();
+        if (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() {
+      components = new System.ComponentModel.Container();
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+    }
+
+    #endregion
+  }
+}
Index: /trunk/sources/HeuristicLab.Optimization.Views/3.3/OptimizerListView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Optimization.Views/3.3/OptimizerListView.cs	(revision 3274)
+++ /trunk/sources/HeuristicLab.Optimization.Views/3.3/OptimizerListView.cs	(revision 3274)
@@ -0,0 +1,66 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 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.Windows.Forms;
+using HeuristicLab.Collections;
+using HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
+
+namespace HeuristicLab.Optimization.Views {
+  [View("OptimizerList View")]
+  [Content(typeof(OptimizerList), true)]
+  [Content(typeof(IObservableList<IOptimizer>), false)]
+  public partial class OptimizerListView : ItemListView<IOptimizer> {
+    protected TypeSelectorDialog typeSelectorDialog;
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="VariablesScopeView"/> with caption "Variables Scope View".
+    /// </summary>
+    public OptimizerListView() {
+      InitializeComponent();
+      Caption = "OptimizerList";
+      itemsGroupBox.Text = "Optimizers";
+    }
+    /// <summary>
+    /// Initializes a new instance of <see cref="VariablesScopeView"/> with 
+    /// the given <paramref name="scope"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="VariablesScopeView()"/>.</remarks>
+    /// <param name="scope">The scope whose variables should be represented visually.</param>
+    public OptimizerListView(IObservableList<IOptimizer> content)
+      : this() {
+      Content = content;
+    }
+
+    protected override IOptimizer CreateItem() {
+      if (typeSelectorDialog == null) {
+        typeSelectorDialog = new TypeSelectorDialog();
+        typeSelectorDialog.TypeSelector.Caption = "Available Optimizers";
+        typeSelectorDialog.TypeSelector.Configure(typeof(IOptimizer), false, false);
+      }
+
+      if (typeSelectorDialog.ShowDialog(this) == DialogResult.OK)
+        return typeSelectorDialog.TypeSelector.CreateInstanceOfSelectedType() as IOptimizer;
+      else
+        return null;
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Optimization.Views/3.3/ResultCollectionView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Optimization.Views/3.3/ResultCollectionView.cs	(revision 3273)
+++ /trunk/sources/HeuristicLab.Optimization.Views/3.3/ResultCollectionView.cs	(revision 3274)
@@ -21,4 +21,5 @@
 
 using HeuristicLab.Collections;
+using HeuristicLab.Core;
 using HeuristicLab.Core.Views;
 using HeuristicLab.MainForm;
@@ -50,5 +51,6 @@
     protected override IResult CreateItem() {
       IResult item = new Result();
-      item.Name = GetUniqueName(item.Name);
+      if (Content.ContainsKey(item.Name))
+        item = new Result(GetUniqueName(item.Name), typeof(IItem));
       return item;
     }
Index: /trunk/sources/HeuristicLab.Optimization.Views/3.3/RunCollectionView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Optimization.Views/3.3/RunCollectionView.cs	(revision 3273)
+++ /trunk/sources/HeuristicLab.Optimization.Views/3.3/RunCollectionView.cs	(revision 3274)
@@ -20,4 +20,5 @@
 #endregion
 
+using HeuristicLab.Collections;
 using HeuristicLab.Core.Views;
 using HeuristicLab.MainForm;
@@ -26,4 +27,5 @@
   [View("RunCollection View")]
   [Content(typeof(RunCollection), true)]
+  [Content(typeof(IObservableCollection<Run>), false)]
   public partial class RunCollectionView : ItemCollectionView<Run> {
     /// <summary>
@@ -41,5 +43,5 @@
     /// <remarks>Calls <see cref="VariablesScopeView()"/>.</remarks>
     /// <param name="scope">The scope whose variables should be represented visually.</param>
-    public RunCollectionView(RunCollection content)
+    public RunCollectionView(IObservableCollection<Run> content)
       : this() {
       Content = content;
@@ -47,5 +49,5 @@
 
     protected override Run CreateItem() {
-      return null;
+      return new Run();
     }
   }
Index: /trunk/sources/HeuristicLab.Optimization/3.3/Algorithm.cs
===================================================================
--- /trunk/sources/HeuristicLab.Optimization/3.3/Algorithm.cs	(revision 3273)
+++ /trunk/sources/HeuristicLab.Optimization/3.3/Algorithm.cs	(revision 3274)
@@ -124,5 +124,8 @@
     }
 
-    public virtual void Prepare() {
+    public void Prepare() {
+      Prepare(true);
+    }
+    public virtual void Prepare(bool clearResults) {
       if ((ExecutionState != ExecutionState.Prepared) && (ExecutionState != ExecutionState.Paused) && (ExecutionState != ExecutionState.Stopped))
         throw new InvalidOperationException(string.Format("Prepare not allowed in execution state \"{0}\".", ExecutionState));
Index: /trunk/sources/HeuristicLab.Optimization/3.3/BatchRun.cs
===================================================================
--- /trunk/sources/HeuristicLab.Optimization/3.3/BatchRun.cs	(revision 3273)
+++ /trunk/sources/HeuristicLab.Optimization/3.3/BatchRun.cs	(revision 3274)
@@ -33,5 +33,5 @@
   [Creatable("Testing & Analysis")]
   [StorableClass]
-  public sealed class BatchRun : NamedItem, IExecutable {
+  public sealed class BatchRun : NamedItem, IOptimizer {
     public override Image ItemImage {
       get { return HeuristicLab.Common.Resources.VS2008ImageLibrary.Event; }
@@ -147,9 +147,9 @@
       Prepare(true);
     }
-    public void Prepare(bool clearRuns) {
+    public void Prepare(bool clearResults) {
       if ((ExecutionState != ExecutionState.Prepared) && (ExecutionState != ExecutionState.Paused) && (ExecutionState != ExecutionState.Stopped))
         throw new InvalidOperationException(string.Format("Prepare not allowed in execution state \"{0}\".", ExecutionState));
       if (Algorithm != null) {
-        if (clearRuns) {
+        if (clearResults) {
           ExecutionTime = TimeSpan.Zero;
           runs.Clear();
Index: unk/sources/HeuristicLab.Optimization/3.3/BatchRunList.cs
===================================================================
--- /trunk/sources/HeuristicLab.Optimization/3.3/BatchRunList.cs	(revision 3273)
+++ 	(revision )
@@ -1,41 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2010 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.Collections.Generic;
-using System.Linq;
-using HeuristicLab.Core;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-
-namespace HeuristicLab.Optimization {
-  [StorableClass]
-  [Item("BatchRunList", "Represents a list of batch runs.")]
-  public sealed class BatchRunList : ItemList<BatchRun> {
-    public BatchRunList() : base() { }
-    public BatchRunList(int capacity) : base(capacity) { }
-    public BatchRunList(IEnumerable<BatchRun> collection) : base(collection) { }
-
-    public override IDeepCloneable Clone(Cloner cloner) {
-      BatchRunList clone = new BatchRunList(this.Select(x => (BatchRun)cloner.Clone(x)));
-      cloner.RegisterClonedObject(this, clone);
-      return clone;
-    }
-  }
-}
Index: /trunk/sources/HeuristicLab.Optimization/3.3/EngineAlgorithm.cs
===================================================================
--- /trunk/sources/HeuristicLab.Optimization/3.3/EngineAlgorithm.cs	(revision 3273)
+++ /trunk/sources/HeuristicLab.Optimization/3.3/EngineAlgorithm.cs	(revision 3274)
@@ -22,5 +22,4 @@
 using System;
 using System.Linq;
-using HeuristicLab.Collections;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
@@ -158,8 +157,13 @@
     }
 
-    public override void Prepare() {
-      base.Prepare();
+    public override void Prepare(bool clearResults) {
+      base.Prepare(clearResults);
+
+      ResultCollection results = Results;
       globalScope.Clear();
-      globalScope.Variables.Add(new Variable("Results", new ResultCollection()));
+      if (clearResults)
+        globalScope.Variables.Add(new Variable("Results", new ResultCollection()));
+      else
+        globalScope.Variables.Add(new Variable("Results", results));
 
       if (engine != null) {
Index: /trunk/sources/HeuristicLab.Optimization/3.3/Experiment.cs
===================================================================
--- /trunk/sources/HeuristicLab.Optimization/3.3/Experiment.cs	(revision 3273)
+++ /trunk/sources/HeuristicLab.Optimization/3.3/Experiment.cs	(revision 3274)
@@ -35,5 +35,5 @@
   [Creatable("Testing & Analysis")]
   [StorableClass]
-  public sealed class Experiment : NamedItem, IExecutable {
+  public sealed class Experiment : NamedItem, IOptimizer {
     public override Image ItemImage {
       get { return HeuristicLab.Common.Resources.VS2008ImageLibrary.Event; }
@@ -62,23 +62,17 @@
     }
 
-    private BatchRunList batchRuns;
+    private OptimizerList optimizers;
     [Storable]
-    public BatchRunList BatchRuns {
-      get { return batchRuns; }
+    public OptimizerList Optimizers {
+      get { return optimizers; }
       private set {
-        if (batchRuns != value) {
-          if (batchRuns != null) DeregisterBatchRunsEvents();
-          batchRuns = value;
-          if (batchRuns != null) RegisterBatchRunsEvents();
-          foreach (BatchRun batchRun in batchRuns)
-            RegisterBatchRunEvents(batchRun);
+        if (optimizers != value) {
+          if (optimizers != null) DeregisterOptimizersEvents();
+          optimizers = value;
+          if (optimizers != null) RegisterOptimizersEvents();
+          foreach (IOptimizer optimizer in optimizers)
+            RegisterOptimizerEvents(optimizer);
         }
       }
-    }
-
-    [Storable]
-    private RunCollection runs;
-    public RunCollection Runs {
-      get { return runs; }
     }
 
@@ -89,6 +83,5 @@
       executionState = ExecutionState.Stopped;
       executionTime = TimeSpan.Zero;
-      BatchRuns = new BatchRunList();
-      runs = new RunCollection();
+      Optimizers = new OptimizerList();
       stopPending = false;
     }
@@ -96,6 +89,5 @@
       executionState = ExecutionState.Stopped;
       executionTime = TimeSpan.Zero;
-      BatchRuns = new BatchRunList();
-      runs = new RunCollection();
+      Optimizers = new OptimizerList();
       stopPending = false;
     }
@@ -103,6 +95,5 @@
       executionState = ExecutionState.Stopped;
       executionTime = TimeSpan.Zero;
-      BatchRuns = new BatchRunList();
-      runs = new RunCollection();
+      Optimizers = new OptimizerList();
       stopPending = false;
     }
@@ -112,6 +103,5 @@
       clone.executionState = executionState;
       clone.executionTime = executionTime;
-      clone.BatchRuns = (BatchRunList)cloner.Clone(batchRuns);
-      clone.runs = (RunCollection)cloner.Clone(runs);
+      clone.Optimizers = (OptimizerList)cloner.Clone(optimizers);
       clone.stopPending = stopPending;
       return clone;
@@ -121,14 +111,10 @@
       Prepare(true);
     }
-    public void Prepare(bool clearRuns) {
+    public void Prepare(bool clearResults) {
       if ((ExecutionState != ExecutionState.Prepared) && (ExecutionState != ExecutionState.Paused) && (ExecutionState != ExecutionState.Stopped))
         throw new InvalidOperationException(string.Format("Prepare not allowed in execution state \"{0}\".", ExecutionState));
-      if (BatchRuns.Count > 0) {
-        if (clearRuns) {
-          ExecutionTime = TimeSpan.Zero;
-          runs.Clear();
-        }
-        foreach (BatchRun batchRun in BatchRuns.Where(x => x.ExecutionState != ExecutionState.Started))
-          batchRun.Prepare(clearRuns);
+      if (Optimizers.Count > 0) {
+        foreach (IOptimizer optimizer in Optimizers.Where(x => x.ExecutionState != ExecutionState.Started))
+          optimizer.Prepare(clearResults);
       }
     }
@@ -137,7 +123,7 @@
         throw new InvalidOperationException(string.Format("Start not allowed in execution state \"{0}\".", ExecutionState));
       stopPending = false;
-      if (BatchRuns.Count > 0) {
-        BatchRun batchRun = BatchRuns.FirstOrDefault(x => (x.ExecutionState == ExecutionState.Prepared) || (x.ExecutionState == ExecutionState.Paused));
-        if (batchRun != null) batchRun.Start();
+      if (Optimizers.Count > 0) {
+        IOptimizer optimizer = Optimizers.FirstOrDefault(x => (x.ExecutionState == ExecutionState.Prepared) || (x.ExecutionState == ExecutionState.Paused));
+        if (optimizer != null) optimizer.Start();
       }
     }
@@ -145,7 +131,7 @@
       if (ExecutionState != ExecutionState.Started)
         throw new InvalidOperationException(string.Format("Pause not allowed in execution state \"{0}\".", ExecutionState));
-      if (BatchRuns.Count > 0) {
-        foreach (BatchRun batchRun in BatchRuns.Where(x => x.ExecutionState == ExecutionState.Started))
-          batchRun.Pause();
+      if (Optimizers.Count > 0) {
+        foreach (IOptimizer optimizer in Optimizers.Where(x => x.ExecutionState == ExecutionState.Started))
+          optimizer.Pause();
       }
     }
@@ -154,7 +140,7 @@
         throw new InvalidOperationException(string.Format("Stop not allowed in execution state \"{0}\".", ExecutionState));
       stopPending = true;
-      if (BatchRuns.Count > 0) {
-        foreach (BatchRun batchRun in BatchRuns.Where(x => (x.ExecutionState == ExecutionState.Started) || (x.ExecutionState == ExecutionState.Paused)))
-          batchRun.Stop();
+      if (Optimizers.Count > 0) {
+        foreach (IOptimizer optimizer in Optimizers.Where(x => (x.ExecutionState == ExecutionState.Started) || (x.ExecutionState == ExecutionState.Paused)))
+          optimizer.Stop();
       }
     }
@@ -201,79 +187,82 @@
     }
 
-    private void RegisterBatchRunsEvents() {
-      BatchRuns.CollectionReset += new CollectionItemsChangedEventHandler<IndexedItem<BatchRun>>(BatchRuns_CollectionReset);
-      BatchRuns.ItemsAdded += new CollectionItemsChangedEventHandler<IndexedItem<BatchRun>>(BatchRuns_ItemsAdded);
-      BatchRuns.ItemsRemoved += new CollectionItemsChangedEventHandler<IndexedItem<BatchRun>>(BatchRuns_ItemsRemoved);
-      BatchRuns.ItemsReplaced += new CollectionItemsChangedEventHandler<IndexedItem<BatchRun>>(BatchRuns_ItemsReplaced);
-    }
-    private void DeregisterBatchRunsEvents() {
-      BatchRuns.CollectionReset -= new CollectionItemsChangedEventHandler<IndexedItem<BatchRun>>(BatchRuns_CollectionReset);
-      BatchRuns.ItemsAdded -= new CollectionItemsChangedEventHandler<IndexedItem<BatchRun>>(BatchRuns_ItemsAdded);
-      BatchRuns.ItemsRemoved -= new CollectionItemsChangedEventHandler<IndexedItem<BatchRun>>(BatchRuns_ItemsRemoved);
-      BatchRuns.ItemsReplaced -= new CollectionItemsChangedEventHandler<IndexedItem<BatchRun>>(BatchRuns_ItemsReplaced);
-    }
-    private void BatchRuns_CollectionReset(object sender, CollectionItemsChangedEventArgs<IndexedItem<BatchRun>> e) {
-      foreach (IndexedItem<BatchRun> item in e.OldItems) {
-        DeregisterBatchRunEvents(item.Value);
-      }
-      foreach (IndexedItem<BatchRun> item in e.Items) {
-        RegisterBatchRunEvents(item.Value);
-      }
-    }
-    private void BatchRuns_ItemsAdded(object sender, CollectionItemsChangedEventArgs<IndexedItem<BatchRun>> e) {
-      foreach (IndexedItem<BatchRun> item in e.Items) {
-        RegisterBatchRunEvents(item.Value);
-      }
-    }
-    private void BatchRuns_ItemsRemoved(object sender, CollectionItemsChangedEventArgs<IndexedItem<BatchRun>> e) {
-      foreach (IndexedItem<BatchRun> item in e.Items) {
-        DeregisterBatchRunEvents(item.Value);
-      }
-    }
-    private void BatchRuns_ItemsReplaced(object sender, CollectionItemsChangedEventArgs<IndexedItem<BatchRun>> e) {
-      foreach (IndexedItem<BatchRun> item in e.OldItems) {
-        DeregisterBatchRunEvents(item.Value);
-      }
-      foreach (IndexedItem<BatchRun> item in e.Items) {
-        RegisterBatchRunEvents(item.Value);
-      }
-    }
-
-    private void RegisterBatchRunEvents(BatchRun batchRun) {
-      batchRun.ExceptionOccurred += new EventHandler<EventArgs<Exception>>(batchRun_ExceptionOccurred);
-      batchRun.Paused += new EventHandler(batchRun_Paused);
-      batchRun.Prepared += new EventHandler(batchRun_Prepared);
-      batchRun.Started += new EventHandler(batchRun_Started);
-      batchRun.Stopped += new EventHandler(batchRun_Stopped);
-    }
-    private void DeregisterBatchRunEvents(BatchRun batchRun) {
-      batchRun.ExceptionOccurred -= new EventHandler<EventArgs<Exception>>(batchRun_ExceptionOccurred);
-      batchRun.Paused -= new EventHandler(batchRun_Paused);
-      batchRun.Prepared -= new EventHandler(batchRun_Prepared);
-      batchRun.Started -= new EventHandler(batchRun_Started);
-      batchRun.Stopped -= new EventHandler(batchRun_Stopped);
-    }
-    private void batchRun_ExceptionOccurred(object sender, EventArgs<Exception> e) {
+    private void RegisterOptimizersEvents() {
+      Optimizers.CollectionReset += new CollectionItemsChangedEventHandler<IndexedItem<IOptimizer>>(Optimizers_CollectionReset);
+      Optimizers.ItemsAdded += new CollectionItemsChangedEventHandler<IndexedItem<IOptimizer>>(Optimizers_ItemsAdded);
+      Optimizers.ItemsRemoved += new CollectionItemsChangedEventHandler<IndexedItem<IOptimizer>>(Optimizers_ItemsRemoved);
+      Optimizers.ItemsReplaced += new CollectionItemsChangedEventHandler<IndexedItem<IOptimizer>>(Optimizers_ItemsReplaced);
+    }
+    private void DeregisterOptimizersEvents() {
+      Optimizers.CollectionReset -= new CollectionItemsChangedEventHandler<IndexedItem<IOptimizer>>(Optimizers_CollectionReset);
+      Optimizers.ItemsAdded -= new CollectionItemsChangedEventHandler<IndexedItem<IOptimizer>>(Optimizers_ItemsAdded);
+      Optimizers.ItemsRemoved -= new CollectionItemsChangedEventHandler<IndexedItem<IOptimizer>>(Optimizers_ItemsRemoved);
+      Optimizers.ItemsReplaced -= new CollectionItemsChangedEventHandler<IndexedItem<IOptimizer>>(Optimizers_ItemsReplaced);
+    }
+    private void Optimizers_CollectionReset(object sender, CollectionItemsChangedEventArgs<IndexedItem<IOptimizer>> e) {
+      foreach (IndexedItem<IOptimizer> item in e.OldItems) {
+        DeregisterOptimizerEvents(item.Value);
+      }
+      foreach (IndexedItem<IOptimizer> item in e.Items) {
+        RegisterOptimizerEvents(item.Value);
+      }
+    }
+    private void Optimizers_ItemsAdded(object sender, CollectionItemsChangedEventArgs<IndexedItem<IOptimizer>> e) {
+      foreach (IndexedItem<IOptimizer> item in e.Items) {
+        RegisterOptimizerEvents(item.Value);
+      }
+    }
+    private void Optimizers_ItemsRemoved(object sender, CollectionItemsChangedEventArgs<IndexedItem<IOptimizer>> e) {
+      foreach (IndexedItem<IOptimizer> item in e.Items) {
+        DeregisterOptimizerEvents(item.Value);
+      }
+    }
+    private void Optimizers_ItemsReplaced(object sender, CollectionItemsChangedEventArgs<IndexedItem<IOptimizer>> e) {
+      foreach (IndexedItem<IOptimizer> item in e.OldItems) {
+        DeregisterOptimizerEvents(item.Value);
+      }
+      foreach (IndexedItem<IOptimizer> item in e.Items) {
+        RegisterOptimizerEvents(item.Value);
+      }
+    }
+
+    private void RegisterOptimizerEvents(IOptimizer optimizer) {
+      optimizer.ExceptionOccurred += new EventHandler<EventArgs<Exception>>(optimizer_ExceptionOccurred);
+      optimizer.ExecutionTimeChanged += new EventHandler(optimizer_ExecutionTimeChanged);
+      optimizer.Paused += new EventHandler(optimizer_Paused);
+      optimizer.Prepared += new EventHandler(optimizer_Prepared);
+      optimizer.Started += new EventHandler(optimizer_Started);
+      optimizer.Stopped += new EventHandler(optimizer_Stopped);
+    }
+
+    private void DeregisterOptimizerEvents(IOptimizer optimizer) {
+      optimizer.ExceptionOccurred -= new EventHandler<EventArgs<Exception>>(optimizer_ExceptionOccurred);
+      optimizer.ExecutionTimeChanged -= new EventHandler(optimizer_ExecutionTimeChanged);
+      optimizer.Paused -= new EventHandler(optimizer_Paused);
+      optimizer.Prepared -= new EventHandler(optimizer_Prepared);
+      optimizer.Started -= new EventHandler(optimizer_Started);
+      optimizer.Stopped -= new EventHandler(optimizer_Stopped);
+    }
+    private void optimizer_ExceptionOccurred(object sender, EventArgs<Exception> e) {
       OnExceptionOccurred(e.Value);
     }
-    private void batchRun_Paused(object sender, EventArgs e) {
-      if (BatchRuns.All(x => x.ExecutionState != ExecutionState.Started))
+    private void optimizer_ExecutionTimeChanged(object sender, EventArgs e) {
+      ExecutionTime = Optimizers.Aggregate(TimeSpan.Zero, (t, o) => t + o.ExecutionTime);
+    }
+    private void optimizer_Paused(object sender, EventArgs e) {
+      if (Optimizers.All(x => x.ExecutionState != ExecutionState.Started))
         OnPaused();
     }
-    void batchRun_Prepared(object sender, EventArgs e) {
+    private void optimizer_Prepared(object sender, EventArgs e) {
       if (ExecutionState == ExecutionState.Stopped)
         OnPrepared();
     }
-    private void batchRun_Started(object sender, EventArgs e) {
+    private void optimizer_Started(object sender, EventArgs e) {
       if (ExecutionState != ExecutionState.Started)
         OnStarted();
     }
-    private void batchRun_Stopped(object sender, EventArgs e) {
+    private void optimizer_Stopped(object sender, EventArgs e) {
       bool stop = stopPending;
-      BatchRun batchRun = (BatchRun)sender;
-      ExecutionTime += batchRun.ExecutionTime;
-      runs.AddRange(batchRun.Runs);
-
-      if (BatchRuns.All(x => (x.ExecutionState != ExecutionState.Started) && (x.ExecutionState != ExecutionState.Paused))) {
+
+      if (Optimizers.All(x => (x.ExecutionState != ExecutionState.Started) && (x.ExecutionState != ExecutionState.Paused))) {
         stopPending = false;
         OnStopped();
@@ -281,5 +270,5 @@
 
       if (!stop) {
-        BatchRun next = BatchRuns.FirstOrDefault(x => (x.ExecutionState == ExecutionState.Prepared) || (x.ExecutionState == ExecutionState.Paused));
+        IOptimizer next = Optimizers.FirstOrDefault(x => (x.ExecutionState == ExecutionState.Prepared) || (x.ExecutionState == ExecutionState.Paused));
         if (next != null)
           next.Start();
Index: /trunk/sources/HeuristicLab.Optimization/3.3/HeuristicLab.Optimization-3.3.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Optimization/3.3/HeuristicLab.Optimization-3.3.csproj	(revision 3273)
+++ /trunk/sources/HeuristicLab.Optimization/3.3/HeuristicLab.Optimization-3.3.csproj	(revision 3274)
@@ -87,6 +87,7 @@
     <Compile Include="Algorithm.cs" />
     <Compile Include="BatchRun.cs" />
-    <Compile Include="BatchRunList.cs" />
+    <Compile Include="OptimizerList.cs" />
     <Compile Include="Experiment.cs" />
+    <Compile Include="Interfaces\IOptimizer.cs" />
     <Compile Include="RunCollection.cs" />
     <Compile Include="Run.cs" />
Index: /trunk/sources/HeuristicLab.Optimization/3.3/Interfaces/IAlgorithm.cs
===================================================================
--- /trunk/sources/HeuristicLab.Optimization/3.3/Interfaces/IAlgorithm.cs	(revision 3273)
+++ /trunk/sources/HeuristicLab.Optimization/3.3/Interfaces/IAlgorithm.cs	(revision 3274)
@@ -22,5 +22,4 @@
 using System;
 using System.Collections.Generic;
-using HeuristicLab.Common;
 using HeuristicLab.Core;
 
@@ -29,5 +28,5 @@
   /// Interface to represent an algorithm.
   /// </summary>
-  public interface IAlgorithm : IParameterizedNamedItem, IExecutable {
+  public interface IAlgorithm : IParameterizedNamedItem, IOptimizer {
     Type ProblemType { get; }
     IProblem Problem { get; set; }
Index: /trunk/sources/HeuristicLab.Optimization/3.3/Interfaces/IOptimizer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Optimization/3.3/Interfaces/IOptimizer.cs	(revision 3274)
+++ /trunk/sources/HeuristicLab.Optimization/3.3/Interfaces/IOptimizer.cs	(revision 3274)
@@ -0,0 +1,31 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 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 HeuristicLab.Core;
+
+namespace HeuristicLab.Optimization {
+  /// <summary>
+  /// Interface to represent optimizers such as algorithms, batch runs, or experiments.
+  /// </summary>
+  public interface IOptimizer : IExecutable {
+    void Prepare(bool clearResults);
+  }
+}
Index: /trunk/sources/HeuristicLab.Optimization/3.3/OptimizerList.cs
===================================================================
--- /trunk/sources/HeuristicLab.Optimization/3.3/OptimizerList.cs	(revision 3274)
+++ /trunk/sources/HeuristicLab.Optimization/3.3/OptimizerList.cs	(revision 3274)
@@ -0,0 +1,42 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 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.Collections.Generic;
+using System.Linq;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Optimization {
+  [Item("Optimizer List", "Represents a list of optimizers.")]
+  [Creatable("Testing & Analysis")]
+  [StorableClass]
+  public class OptimizerList : ItemList<IOptimizer> {
+    public OptimizerList() : base() { }
+    public OptimizerList(int capacity) : base(capacity) { }
+    public OptimizerList(IEnumerable<IOptimizer> collection) : base(collection) { }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      OptimizerList clone = new OptimizerList(this.Select(x => (IOptimizer)cloner.Clone(x)));
+      cloner.RegisterClonedObject(this, clone);
+      return clone;
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Optimization/3.3/ResultCollection.cs
===================================================================
--- /trunk/sources/HeuristicLab.Optimization/3.3/ResultCollection.cs	(revision 3273)
+++ /trunk/sources/HeuristicLab.Optimization/3.3/ResultCollection.cs	(revision 3274)
@@ -28,5 +28,5 @@
   [StorableClass]
   [Item("ResultCollection", "Represents a collection of results.")]
-  public sealed class ResultCollection : NamedItemCollection<IResult> {
+  public class ResultCollection : NamedItemCollection<IResult> {
     public ResultCollection() : base() { }
     public ResultCollection(int capacity) : base(capacity) { }
Index: /trunk/sources/HeuristicLab.Optimization/3.3/RunCollection.cs
===================================================================
--- /trunk/sources/HeuristicLab.Optimization/3.3/RunCollection.cs	(revision 3273)
+++ /trunk/sources/HeuristicLab.Optimization/3.3/RunCollection.cs	(revision 3274)
@@ -28,5 +28,5 @@
   [StorableClass]
   [Item("RunCollection", "Represents a collection of runs.")]
-  public sealed class RunCollection : ItemCollection<Run> {
+  public class RunCollection : ItemCollection<Run> {
     public RunCollection() : base() { }
     public RunCollection(int capacity) : base(capacity) { }
