Index: trunk/sources/HeuristicLab.Optimization.Views/3.3/BatchRunView.Designer.cs
===================================================================
--- trunk/sources/HeuristicLab.Optimization.Views/3.3/BatchRunView.Designer.cs	(revision 5292)
+++ trunk/sources/HeuristicLab.Optimization.Views/3.3/BatchRunView.Designer.cs	(revision 5300)
@@ -35,8 +35,8 @@
     private void InitializeComponent() {
       this.tabControl = new System.Windows.Forms.TabControl();
-      this.algorithmTabPage = new System.Windows.Forms.TabPage();
-      this.algorithmViewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
-      this.openAlgorithmButton = new System.Windows.Forms.Button();
-      this.newAlgorithmButton = new System.Windows.Forms.Button();
+      this.optimizerTabPage = new System.Windows.Forms.TabPage();
+      this.optimizerViewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
+      this.openOptimizerButton = new System.Windows.Forms.Button();
+      this.newOptimizerButton = new System.Windows.Forms.Button();
       this.runsTabPage = new System.Windows.Forms.TabPage();
       this.runsView = new HeuristicLab.Optimization.Views.RunCollectionView();
@@ -52,5 +52,5 @@
       ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
       this.tabControl.SuspendLayout();
-      this.algorithmTabPage.SuspendLayout();
+      this.optimizerTabPage.SuspendLayout();
       this.runsTabPage.SuspendLayout();
       ((System.ComponentModel.ISupportInitialize)(this.repetitionsNumericUpDown)).BeginInit();
@@ -72,5 +72,5 @@
                   | System.Windows.Forms.AnchorStyles.Left)
                   | System.Windows.Forms.AnchorStyles.Right)));
-      this.tabControl.Controls.Add(this.algorithmTabPage);
+      this.tabControl.Controls.Add(this.optimizerTabPage);
       this.tabControl.Controls.Add(this.runsTabPage);
       this.tabControl.Location = new System.Drawing.Point(0, 78);
@@ -80,54 +80,54 @@
       this.tabControl.TabIndex = 6;
       // 
-      // algorithmTabPage
-      // 
-      this.algorithmTabPage.AllowDrop = true;
-      this.algorithmTabPage.Controls.Add(this.algorithmViewHost);
-      this.algorithmTabPage.Controls.Add(this.openAlgorithmButton);
-      this.algorithmTabPage.Controls.Add(this.newAlgorithmButton);
-      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(671, 348);
-      this.algorithmTabPage.TabIndex = 1;
-      this.algorithmTabPage.Text = "Algorithm";
-      this.algorithmTabPage.UseVisualStyleBackColor = true;
-      this.algorithmTabPage.DragOver += new System.Windows.Forms.DragEventHandler(this.algorithmTabPage_DragEnterOver);
-      this.algorithmTabPage.DragDrop += new System.Windows.Forms.DragEventHandler(this.algorithmTabPage_DragDrop);
-      this.algorithmTabPage.DragEnter += new System.Windows.Forms.DragEventHandler(this.algorithmTabPage_DragEnterOver);
-      // 
-      // algorithmViewHost
-      // 
-      this.algorithmViewHost.Content = null;
-      this.algorithmViewHost.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+      // optimizerTabPage
+      // 
+      this.optimizerTabPage.AllowDrop = true;
+      this.optimizerTabPage.Controls.Add(this.optimizerViewHost);
+      this.optimizerTabPage.Controls.Add(this.openOptimizerButton);
+      this.optimizerTabPage.Controls.Add(this.newOptimizerButton);
+      this.optimizerTabPage.Location = new System.Drawing.Point(4, 22);
+      this.optimizerTabPage.Name = "optimizerTabPage";
+      this.optimizerTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.optimizerTabPage.Size = new System.Drawing.Size(671, 348);
+      this.optimizerTabPage.TabIndex = 1;
+      this.optimizerTabPage.Text = "Optimizer";
+      this.optimizerTabPage.UseVisualStyleBackColor = true;
+      this.optimizerTabPage.DragOver += new System.Windows.Forms.DragEventHandler(this.optimizerTabPage_DragEnterOver);
+      this.optimizerTabPage.DragDrop += new System.Windows.Forms.DragEventHandler(this.optimizerTabPage_DragDrop);
+      this.optimizerTabPage.DragEnter += new System.Windows.Forms.DragEventHandler(this.optimizerTabPage_DragEnterOver);
+      // 
+      // optimizerViewHost
+      // 
+      this.optimizerViewHost.Content = null;
+      this.optimizerViewHost.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.Location = new System.Drawing.Point(6, 36);
-      this.algorithmViewHost.Name = "algorithmViewHost";
-      this.algorithmViewHost.Size = new System.Drawing.Size(659, 306);
-      this.algorithmViewHost.TabIndex = 3;
-      this.algorithmViewHost.ViewType = null;
-      // 
-      // openAlgorithmButton
-      // 
-      this.openAlgorithmButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.Open;
-      this.openAlgorithmButton.Location = new System.Drawing.Point(36, 6);
-      this.openAlgorithmButton.Name = "openAlgorithmButton";
-      this.openAlgorithmButton.Size = new System.Drawing.Size(24, 24);
-      this.openAlgorithmButton.TabIndex = 1;
-      this.toolTip.SetToolTip(this.openAlgorithmButton, "Open Algorithm");
-      this.openAlgorithmButton.UseVisualStyleBackColor = true;
-      this.openAlgorithmButton.Click += new System.EventHandler(this.openAlgorithmButton_Click);
-      // 
-      // newAlgorithmButton
-      // 
-      this.newAlgorithmButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.NewDocument;
-      this.newAlgorithmButton.Location = new System.Drawing.Point(6, 6);
-      this.newAlgorithmButton.Name = "newAlgorithmButton";
-      this.newAlgorithmButton.Size = new System.Drawing.Size(24, 24);
-      this.newAlgorithmButton.TabIndex = 0;
-      this.toolTip.SetToolTip(this.newAlgorithmButton, "New Algorithm");
-      this.newAlgorithmButton.UseVisualStyleBackColor = true;
-      this.newAlgorithmButton.Click += new System.EventHandler(this.newAlgorithmButton_Click);
+      this.optimizerViewHost.Location = new System.Drawing.Point(6, 36);
+      this.optimizerViewHost.Name = "optimizerViewHost";
+      this.optimizerViewHost.Size = new System.Drawing.Size(659, 306);
+      this.optimizerViewHost.TabIndex = 3;
+      this.optimizerViewHost.ViewType = null;
+      // 
+      // openOptimizerButton
+      // 
+      this.openOptimizerButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.Open;
+      this.openOptimizerButton.Location = new System.Drawing.Point(36, 6);
+      this.openOptimizerButton.Name = "openOptimizerButton";
+      this.openOptimizerButton.Size = new System.Drawing.Size(24, 24);
+      this.openOptimizerButton.TabIndex = 1;
+      this.toolTip.SetToolTip(this.openOptimizerButton, "Open Optimizer");
+      this.openOptimizerButton.UseVisualStyleBackColor = true;
+      this.openOptimizerButton.Click += new System.EventHandler(this.openOptimizerButton_Click);
+      // 
+      // newOptimizerButton
+      // 
+      this.newOptimizerButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.NewDocument;
+      this.newOptimizerButton.Location = new System.Drawing.Point(6, 6);
+      this.newOptimizerButton.Name = "newOptimizerButton";
+      this.newOptimizerButton.Size = new System.Drawing.Size(24, 24);
+      this.newOptimizerButton.TabIndex = 0;
+      this.toolTip.SetToolTip(this.newOptimizerButton, "New Optimizer");
+      this.newOptimizerButton.UseVisualStyleBackColor = true;
+      this.newOptimizerButton.Click += new System.EventHandler(this.newOptimizerButton_Click);
       // 
       // runsTabPage
@@ -211,7 +211,7 @@
       // 
       this.openFileDialog.DefaultExt = "hl";
-      this.openFileDialog.FileName = "Algorithm";
+      this.openFileDialog.FileName = "Optimizer";
       this.openFileDialog.Filter = "HeuristicLab Files|*.hl|All Files|*.*";
-      this.openFileDialog.Title = "Open Algorithm";
+      this.openFileDialog.Title = "Open Optimizer";
       // 
       // repetitionsLabel
@@ -293,5 +293,5 @@
       ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
       this.tabControl.ResumeLayout(false);
-      this.algorithmTabPage.ResumeLayout(false);
+      this.optimizerTabPage.ResumeLayout(false);
       this.runsTabPage.ResumeLayout(false);
       ((System.ComponentModel.ISupportInitialize)(this.repetitionsNumericUpDown)).EndInit();
@@ -303,8 +303,8 @@
 
     private System.Windows.Forms.TabControl tabControl;
-    private System.Windows.Forms.TabPage algorithmTabPage;
-    private HeuristicLab.MainForm.WindowsForms.ViewHost algorithmViewHost;
-    private System.Windows.Forms.Button newAlgorithmButton;
-    private System.Windows.Forms.Button openAlgorithmButton;
+    private System.Windows.Forms.TabPage optimizerTabPage;
+    private HeuristicLab.MainForm.WindowsForms.ViewHost optimizerViewHost;
+    private System.Windows.Forms.Button newOptimizerButton;
+    private System.Windows.Forms.Button openOptimizerButton;
     private System.Windows.Forms.Button startButton;
     private System.Windows.Forms.Button stopButton;
Index: trunk/sources/HeuristicLab.Optimization.Views/3.3/BatchRunView.cs
===================================================================
--- trunk/sources/HeuristicLab.Optimization.Views/3.3/BatchRunView.cs	(revision 5292)
+++ trunk/sources/HeuristicLab.Optimization.Views/3.3/BatchRunView.cs	(revision 5300)
@@ -35,5 +35,5 @@
   [Content(typeof(BatchRun), true)]
   public sealed partial class BatchRunView : NamedItemView {
-    private TypeSelectorDialog algorithmTypeSelectorDialog;
+    private TypeSelectorDialog optimizerTypeSelectorDialog;
 
     public new BatchRun Content {
@@ -51,5 +51,5 @@
     protected override void Dispose(bool disposing) {
       if (disposing) {
-        if (algorithmTypeSelectorDialog != null) algorithmTypeSelectorDialog.Dispose();
+        if (optimizerTypeSelectorDialog != null) optimizerTypeSelectorDialog.Dispose();
         if (components != null) components.Dispose();
       }
@@ -58,5 +58,5 @@
 
     protected override void DeregisterContentEvents() {
-      Content.AlgorithmChanged -= new EventHandler(Content_AlgorithmChanged);
+      Content.OptimizerChanged -= new EventHandler(Content_OptimizerChanged);
       Content.ExceptionOccurred -= new EventHandler<EventArgs<Exception>>(Content_ExceptionOccurred);
       Content.ExecutionStateChanged -= new EventHandler(Content_ExecutionStateChanged);
@@ -71,5 +71,5 @@
     protected override void RegisterContentEvents() {
       base.RegisterContentEvents();
-      Content.AlgorithmChanged += new EventHandler(Content_AlgorithmChanged);
+      Content.OptimizerChanged += new EventHandler(Content_OptimizerChanged);
       Content.ExceptionOccurred += new EventHandler<EventArgs<Exception>>(Content_ExceptionOccurred);
       Content.ExecutionStateChanged += new EventHandler(Content_ExecutionStateChanged);
@@ -86,5 +86,5 @@
       if (Content == null) {
         repetitionsNumericUpDown.Value = 1;
-        algorithmViewHost.Content = null;
+        optimizerViewHost.Content = null;
         runsView.Content = null;
         executionTimeTextBox.Text = "-";
@@ -92,5 +92,5 @@
         Locked = ReadOnly = Content.ExecutionState == ExecutionState.Started;
         repetitionsNumericUpDown.Value = Content.Repetitions;
-        algorithmViewHost.Content = Content.Algorithm;
+        optimizerViewHost.Content = Content.Optimizer;
         runsView.Content = Content.Runs;
         executionTimeTextBox.Text = Content.ExecutionTime.ToString();
@@ -100,7 +100,7 @@
       base.SetEnabledStateOfControls();
       repetitionsNumericUpDown.Enabled = Content != null && !ReadOnly;
-      newAlgorithmButton.Enabled = Content != null && !ReadOnly;
-      openAlgorithmButton.Enabled = Content != null && !ReadOnly;
-      algorithmViewHost.Enabled = Content != null;
+      newOptimizerButton.Enabled = Content != null && !ReadOnly;
+      openOptimizerButton.Enabled = Content != null && !ReadOnly;
+      optimizerViewHost.Enabled = Content != null;
       runsView.Enabled = Content != null;
       executionTimeTextBox.Enabled = Content != null;
@@ -164,9 +164,9 @@
         ErrorHandling.ShowErrorDialog(this, e.Value);
     }
-    private void Content_AlgorithmChanged(object sender, EventArgs e) {
-      if (InvokeRequired)
-        Invoke(new EventHandler(Content_AlgorithmChanged), sender, e);
-      else {
-        algorithmViewHost.Content = Content.Algorithm;
+    private void Content_OptimizerChanged(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(Content_OptimizerChanged), sender, e);
+      else {
+        optimizerViewHost.Content = Content.Optimizer;
       }
     }
@@ -188,14 +188,14 @@
         Content.Repetitions = (int)repetitionsNumericUpDown.Value;
     }
-    private void newAlgorithmButton_Click(object sender, EventArgs e) {
-      if (algorithmTypeSelectorDialog == null) {
-        algorithmTypeSelectorDialog = new TypeSelectorDialog();
-        algorithmTypeSelectorDialog.Caption = "Select Algorithm";
-        algorithmTypeSelectorDialog.TypeSelector.Caption = "Available Algorithms";
-        algorithmTypeSelectorDialog.TypeSelector.Configure(typeof(IAlgorithm), false, true);
-      }
-      if (algorithmTypeSelectorDialog.ShowDialog(this) == DialogResult.OK) {
+    private void newOptimizerButton_Click(object sender, EventArgs e) {
+      if (optimizerTypeSelectorDialog == null) {
+        optimizerTypeSelectorDialog = new TypeSelectorDialog();
+        optimizerTypeSelectorDialog.Caption = "Select Optimizer";
+        optimizerTypeSelectorDialog.TypeSelector.Caption = "Available Optimizers";
+        optimizerTypeSelectorDialog.TypeSelector.Configure(typeof(IOptimizer), false, true);
+      }
+      if (optimizerTypeSelectorDialog.ShowDialog(this) == DialogResult.OK) {
         try {
-          Content.Algorithm = (IAlgorithm)algorithmTypeSelectorDialog.TypeSelector.CreateInstanceOfSelectedType();
+          Content.Optimizer = (IOptimizer)optimizerTypeSelectorDialog.TypeSelector.CreateInstanceOfSelectedType();
         }
         catch (Exception ex) {
@@ -204,18 +204,18 @@
       }
     }
-    private void openAlgorithmButton_Click(object sender, EventArgs e) {
-      openFileDialog.Title = "Open Algorithm";
+    private void openOptimizerButton_Click(object sender, EventArgs e) {
+      openFileDialog.Title = "Open Optimizer";
       if (openFileDialog.ShowDialog(this) == DialogResult.OK) {
-        newAlgorithmButton.Enabled = openAlgorithmButton.Enabled = false;
-        algorithmViewHost.Enabled = false;
+        newOptimizerButton.Enabled = openOptimizerButton.Enabled = false;
+        optimizerViewHost.Enabled = false;
 
         ContentManager.LoadAsync(openFileDialog.FileName, delegate(IStorableContent content, Exception error) {
           try {
             if (error != null) throw error;
-            IAlgorithm algorithm = content as IAlgorithm;
-            if (algorithm == null)
-              MessageBox.Show(this, "The selected file does not contain an algorithm.", "Invalid File", MessageBoxButtons.OK, MessageBoxIcon.Error);
+            IOptimizer optimizer = content as IOptimizer;
+            if (optimizer == null)
+              MessageBox.Show(this, "The selected file does not contain an optimizer.", "Invalid File", MessageBoxButtons.OK, MessageBoxIcon.Error);
             else
-              Content.Algorithm = algorithm;
+              Content.Optimizer = optimizer;
           }
           catch (Exception ex) {
@@ -224,6 +224,6 @@
           finally {
             Invoke(new Action(delegate() {
-              algorithmViewHost.Enabled = true;
-              newAlgorithmButton.Enabled = openAlgorithmButton.Enabled = true;
+              optimizerViewHost.Enabled = true;
+              newOptimizerButton.Enabled = openOptimizerButton.Enabled = true;
             }));
           }
@@ -243,10 +243,10 @@
       Content.Prepare(false);
     }
-    private void algorithmTabPage_DragEnterOver(object sender, DragEventArgs e) {
+    private void optimizerTabPage_DragEnterOver(object sender, DragEventArgs e) {
       e.Effect = DragDropEffects.None;
       if (ReadOnly)
         return;
       Type type = e.Data.GetData("Type") as Type;
-      if ((type != null) && (typeof(IAlgorithm).IsAssignableFrom(type))) {
+      if ((type != null) && (typeof(IOptimizer).IsAssignableFrom(type))) {
         if ((e.KeyState & 32) == 32) e.Effect = DragDropEffects.Link;  // ALT key
         else if ((e.KeyState & 4) == 4) e.Effect = DragDropEffects.Move;  // SHIFT key
@@ -256,9 +256,9 @@
       }
     }
-    private void algorithmTabPage_DragDrop(object sender, DragEventArgs e) {
+    private void optimizerTabPage_DragDrop(object sender, DragEventArgs e) {
       if (e.Effect != DragDropEffects.None) {
-        IAlgorithm algorithm = e.Data.GetData("Value") as IAlgorithm;
-        if ((e.Effect & DragDropEffects.Copy) == DragDropEffects.Copy) algorithm = (IAlgorithm)algorithm.Clone();
-        Content.Algorithm = algorithm;
+        IOptimizer optimizer = e.Data.GetData("Value") as IOptimizer;
+        if ((e.Effect & DragDropEffects.Copy) == DragDropEffects.Copy) optimizer = (IOptimizer)optimizer.Clone();
+        Content.Optimizer = optimizer;
       }
     }
Index: trunk/sources/HeuristicLab.Optimization/3.3/BatchRun.cs
===================================================================
--- trunk/sources/HeuristicLab.Optimization/3.3/BatchRun.cs	(revision 5292)
+++ trunk/sources/HeuristicLab.Optimization/3.3/BatchRun.cs	(revision 5300)
@@ -31,7 +31,7 @@
 namespace HeuristicLab.Optimization {
   /// <summary>
-  /// A run in which an algorithm is executed a given number of times.
+  /// A run in which an optimizer is executed a given number of times.
   /// </summary>
-  [Item("Batch Run", "A run in which an algorithm is executed a given number of times.")]
+  [Item("Batch Run", "A run in which an optimizer is executed a given number of times.")]
   [Creatable("Testing & Analysis")]
   [StorableClass]
@@ -66,6 +66,6 @@
     public TimeSpan ExecutionTime {
       get {
-        if ((Algorithm != null) && (Algorithm.ExecutionState != ExecutionState.Stopped))
-          return executionTime + Algorithm.ExecutionTime;
+        if ((Optimizer != null) && (Optimizer.ExecutionState != ExecutionState.Stopped))
+          return executionTime + Optimizer.ExecutionTime;
         else
           return executionTime;
@@ -78,25 +78,33 @@
 
     [Storable]
-    private IAlgorithm algorithm;
-    public IAlgorithm Algorithm {
-      get { return algorithm; }
+    private IOptimizer optimizer;
+    public IOptimizer Optimizer {
+      get { return optimizer; }
       set {
-        if (algorithm != value) {
-          if (algorithm != null) {
-            DeregisterAlgorithmEvents();
-            IEnumerable<IRun> runs = algorithm.Runs;
-            algorithm = null; //necessary to avoid removing the runs from the old algorithm
+        if (optimizer != value) {
+          if (optimizer != null) {
+            DeregisterOptimizerEvents();
+            IEnumerable<IRun> runs = optimizer.Runs;
+            optimizer = null; //necessary to avoid removing the runs from the old optimizer
             Runs.RemoveRange(runs);
           }
-          algorithm = value;
-          if (algorithm != null) {
-            RegisterAlgorithmEvents();
-            Runs.AddRange(algorithm.Runs);
+          optimizer = value;
+          if (optimizer != null) {
+            RegisterOptimizerEvents();
+            Runs.AddRange(optimizer.Runs);
           }
-          OnAlgorithmChanged();
+          OnOptimizerChanged();
           Prepare();
         }
       }
     }
+    // BackwardsCompatibility3.3
+    #region Backwards compatible code (remove with 3.4)
+    [Storable]
+    private IAlgorithm algorithm {
+      get { return null; }
+      set { optimizer = value; }
+    }
+    #endregion
 
     [Storable]
@@ -108,5 +116,5 @@
           repetitions = value;
           OnRepetitionsChanged();
-          if ((Algorithm != null) && (Algorithm.ExecutionState == ExecutionState.Stopped))
+          if ((Optimizer != null) && (Optimizer.ExecutionState == ExecutionState.Stopped))
             Prepare();
         }
@@ -176,5 +184,5 @@
       executionState = original.executionState;
       executionTime = original.executionTime;
-      algorithm = cloner.Clone(original.algorithm);
+      optimizer = cloner.Clone(original.optimizer);
       repetitions = original.repetitions;
       repetitionsCounter = original.repetitionsCounter;
@@ -189,5 +197,5 @@
 
     private void Initialize() {
-      if (algorithm != null) RegisterAlgorithmEvents();
+      if (optimizer != null) RegisterOptimizerEvents();
       if (runs != null) RegisterRunsEvents();
     }
@@ -199,8 +207,8 @@
       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 (Optimizer != null) {
         repetitionsCounter = 0;
         if (clearRuns) runs.Clear();
-        Algorithm.Prepare(clearRuns);
+        Optimizer.Prepare(clearRuns);
       }
     }
@@ -208,11 +216,11 @@
       if ((ExecutionState != ExecutionState.Prepared) && (ExecutionState != ExecutionState.Paused))
         throw new InvalidOperationException(string.Format("Start not allowed in execution state \"{0}\".", ExecutionState));
-      if (Algorithm != null) Algorithm.Start();
+      if (Optimizer != null) Optimizer.Start();
     }
     public void Pause() {
       if (ExecutionState != ExecutionState.Started)
         throw new InvalidOperationException(string.Format("Pause not allowed in execution state \"{0}\".", ExecutionState));
-      if ((Algorithm != null) && (Algorithm.ExecutionState == ExecutionState.Started))
-        Algorithm.Pause();
+      if ((Optimizer != null) && (Optimizer.ExecutionState == ExecutionState.Started))
+        Optimizer.Pause();
     }
     public void Stop() {
@@ -220,7 +228,7 @@
         throw new InvalidOperationException(string.Format("Stop not allowed in execution state \"{0}\".", ExecutionState));
       stopPending = true;
-      if ((Algorithm != null) &&
-          ((Algorithm.ExecutionState == ExecutionState.Started) || (Algorithm.ExecutionState == ExecutionState.Paused)))
-        Algorithm.Stop();
+      if ((Optimizer != null) &&
+          ((Optimizer.ExecutionState == ExecutionState.Started) || (Optimizer.ExecutionState == ExecutionState.Paused)))
+        Optimizer.Stop();
     }
 
@@ -236,7 +244,7 @@
       if (handler != null) handler(this, EventArgs.Empty);
     }
-    public event EventHandler AlgorithmChanged;
-    private void OnAlgorithmChanged() {
-      EventHandler handler = AlgorithmChanged;
+    public event EventHandler OptimizerChanged;
+    private void OnOptimizerChanged() {
+      EventHandler handler = OptimizerChanged;
       if (handler != null) handler(this, EventArgs.Empty);
     }
@@ -276,62 +284,62 @@
     }
 
-    private void RegisterAlgorithmEvents() {
-      algorithm.ExceptionOccurred += new EventHandler<EventArgs<Exception>>(Algorithm_ExceptionOccurred);
-      algorithm.ExecutionTimeChanged += new EventHandler(Algorithm_ExecutionTimeChanged);
-      algorithm.Paused += new EventHandler(Algorithm_Paused);
-      algorithm.Prepared += new EventHandler(Algorithm_Prepared);
-      algorithm.Started += new EventHandler(Algorithm_Started);
-      algorithm.Stopped += new EventHandler(Algorithm_Stopped);
-      algorithm.Runs.CollectionReset += new CollectionItemsChangedEventHandler<IRun>(Algorithm_Runs_CollectionReset);
-      algorithm.Runs.ItemsAdded += new CollectionItemsChangedEventHandler<IRun>(Algorithm_Runs_ItemsAdded);
-      algorithm.Runs.ItemsRemoved += new CollectionItemsChangedEventHandler<IRun>(Algorithm_Runs_ItemsRemoved);
-    }
-    private void DeregisterAlgorithmEvents() {
-      algorithm.ExceptionOccurred -= new EventHandler<EventArgs<Exception>>(Algorithm_ExceptionOccurred);
-      algorithm.ExecutionTimeChanged -= new EventHandler(Algorithm_ExecutionTimeChanged);
-      algorithm.Paused -= new EventHandler(Algorithm_Paused);
-      algorithm.Prepared -= new EventHandler(Algorithm_Prepared);
-      algorithm.Started -= new EventHandler(Algorithm_Started);
-      algorithm.Stopped -= new EventHandler(Algorithm_Stopped);
-      algorithm.Runs.CollectionReset -= new CollectionItemsChangedEventHandler<IRun>(Algorithm_Runs_CollectionReset);
-      algorithm.Runs.ItemsAdded -= new CollectionItemsChangedEventHandler<IRun>(Algorithm_Runs_ItemsAdded);
-      algorithm.Runs.ItemsRemoved -= new CollectionItemsChangedEventHandler<IRun>(Algorithm_Runs_ItemsRemoved);
-    }
-    private void Algorithm_ExceptionOccurred(object sender, EventArgs<Exception> e) {
+    private void RegisterOptimizerEvents() {
+      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);
+      optimizer.Runs.CollectionReset += new CollectionItemsChangedEventHandler<IRun>(Optimizer_Runs_CollectionReset);
+      optimizer.Runs.ItemsAdded += new CollectionItemsChangedEventHandler<IRun>(Optimizer_Runs_ItemsAdded);
+      optimizer.Runs.ItemsRemoved += new CollectionItemsChangedEventHandler<IRun>(Optimizer_Runs_ItemsRemoved);
+    }
+    private void DeregisterOptimizerEvents() {
+      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);
+      optimizer.Runs.CollectionReset -= new CollectionItemsChangedEventHandler<IRun>(Optimizer_Runs_CollectionReset);
+      optimizer.Runs.ItemsAdded -= new CollectionItemsChangedEventHandler<IRun>(Optimizer_Runs_ItemsAdded);
+      optimizer.Runs.ItemsRemoved -= new CollectionItemsChangedEventHandler<IRun>(Optimizer_Runs_ItemsRemoved);
+    }
+    private void Optimizer_ExceptionOccurred(object sender, EventArgs<Exception> e) {
       OnExceptionOccurred(e.Value);
     }
-    private void Algorithm_ExecutionTimeChanged(object sender, EventArgs e) {
+    private void Optimizer_ExecutionTimeChanged(object sender, EventArgs e) {
       OnExecutionTimeChanged();
     }
-    private void Algorithm_Paused(object sender, EventArgs e) {
+    private void Optimizer_Paused(object sender, EventArgs e) {
       OnPaused();
     }
-    private void Algorithm_Prepared(object sender, EventArgs e) {
+    private void Optimizer_Prepared(object sender, EventArgs e) {
       if ((ExecutionState == ExecutionState.Paused) || (ExecutionState == ExecutionState.Stopped))
         OnPrepared();
     }
-    private void Algorithm_Started(object sender, EventArgs e) {
+    private void Optimizer_Started(object sender, EventArgs e) {
       stopPending = false;
       if (ExecutionState != ExecutionState.Started)
         OnStarted();
     }
-    private void Algorithm_Stopped(object sender, EventArgs e) {
+    private void Optimizer_Stopped(object sender, EventArgs e) {
       repetitionsCounter++;
 
       if (!stopPending && (repetitionsCounter < repetitions)) {
-        Algorithm.Prepare();
-        Algorithm.Start();
+        Optimizer.Prepare();
+        Optimizer.Start();
       } else {
         OnStopped();
       }
     }
-    private void Algorithm_Runs_CollectionReset(object sender, CollectionItemsChangedEventArgs<IRun> e) {
+    private void Optimizer_Runs_CollectionReset(object sender, CollectionItemsChangedEventArgs<IRun> e) {
       Runs.RemoveRange(e.OldItems);
       Runs.AddRange(e.Items);
     }
-    private void Algorithm_Runs_ItemsAdded(object sender, CollectionItemsChangedEventArgs<IRun> e) {
+    private void Optimizer_Runs_ItemsAdded(object sender, CollectionItemsChangedEventArgs<IRun> e) {
       Runs.AddRange(e.Items);
     }
-    private void Algorithm_Runs_ItemsRemoved(object sender, CollectionItemsChangedEventArgs<IRun> e) {
+    private void Optimizer_Runs_ItemsRemoved(object sender, CollectionItemsChangedEventArgs<IRun> e) {
       Runs.RemoveRange(e.Items);
     }
@@ -355,5 +363,5 @@
         if (executionTime != null) ExecutionTime -= executionTime.Value;
       }
-      if (Algorithm != null) Algorithm.Runs.RemoveRange(e.OldItems);
+      if (Optimizer != null) Optimizer.Runs.RemoveRange(e.OldItems);
       foreach (IRun run in e.Items) {
         IItem item;
@@ -378,5 +386,5 @@
         if (executionTime != null) ExecutionTime -= executionTime.Value;
       }
-      if (Algorithm != null) Algorithm.Runs.RemoveRange(e.Items);
+      if (Optimizer != null) Optimizer.Runs.RemoveRange(e.Items);
     }
     #endregion
Index: trunk/sources/HeuristicLab.Optimization/3.3/Experiment.cs
===================================================================
--- trunk/sources/HeuristicLab.Optimization/3.3/Experiment.cs	(revision 5292)
+++ trunk/sources/HeuristicLab.Optimization/3.3/Experiment.cs	(revision 5300)
@@ -30,7 +30,7 @@
 namespace HeuristicLab.Optimization {
   /// <summary>
-  /// An experiment which contains multiple batch runs of algorithms.
+  /// An experiment which contains multiple algorithms, batch runs or other experiments.
   /// </summary>
-  [Item("Experiment", "An experiment which contains multiple batch runs of algorithms.")]
+  [Item("Experiment", "An experiment which contains multiple algorithms, batch runs or other experiments.")]
   [Creatable("Testing & Analysis")]
   [StorableClass]
Index: trunk/sources/HeuristicLab.Optimizer/3.3/CreateExperimentDialog.Designer.cs
===================================================================
--- trunk/sources/HeuristicLab.Optimizer/3.3/CreateExperimentDialog.Designer.cs	(revision 5292)
+++ trunk/sources/HeuristicLab.Optimizer/3.3/CreateExperimentDialog.Designer.cs	(revision 5300)
@@ -89,5 +89,5 @@
       this.createBatchRunCheckBox.Size = new System.Drawing.Size(15, 14);
       this.createBatchRunCheckBox.TabIndex = 1;
-      this.toolTip.SetToolTip(this.createBatchRunCheckBox, "Check to create a batch run for executing an algorithm multiple times.");
+      this.toolTip.SetToolTip(this.createBatchRunCheckBox, "Check to create a batch run for executing an optimizer multiple times.");
       this.createBatchRunCheckBox.UseVisualStyleBackColor = true;
       this.createBatchRunCheckBox.CheckedChanged += new System.EventHandler(this.createBatchRunCheckBox_CheckedChanged);
Index: trunk/sources/HeuristicLab.Optimizer/3.3/CreateExperimentDialog.cs
===================================================================
--- trunk/sources/HeuristicLab.Optimizer/3.3/CreateExperimentDialog.cs	(revision 5292)
+++ trunk/sources/HeuristicLab.Optimizer/3.3/CreateExperimentDialog.cs	(revision 5300)
@@ -26,14 +26,14 @@
 namespace HeuristicLab.Optimizer {
   public partial class CreateExperimentDialog : Form {
-    private IAlgorithm algorithm;
-    public IAlgorithm Algorithm {
-      get { return algorithm; }
+    private IOptimizer optimizer;
+    public IOptimizer Optimizer {
+      get { return optimizer; }
       set {
-        algorithm = value;
+        optimizer = value;
         experiment = null;
-        okButton.Enabled = algorithm != null;
+        okButton.Enabled = optimizer != null;
       }
     }
-    
+
     private Experiment experiment;
     public Experiment Experiment {
@@ -43,9 +43,10 @@
     public CreateExperimentDialog() {
       experiment = null;
-      algorithm = null;
+      optimizer = null;
       InitializeComponent();
     }
-    public CreateExperimentDialog(IAlgorithm algorithm) : this() {
-      Algorithm = algorithm;
+    public CreateExperimentDialog(IOptimizer optimizer)
+      : this() {
+      Optimizer = optimizer;
     }
 
@@ -58,12 +59,12 @@
     }
     private void okButton_Click(object sender, EventArgs e) {
-      experiment = new Experiment(Algorithm.Name);
+      experiment = new Experiment(Optimizer.Name);
       if (createBatchRunCheckBox.Checked) {
-        BatchRun batchRun = new BatchRun(Algorithm.Name);
+        BatchRun batchRun = new BatchRun(Optimizer.Name);
         batchRun.Repetitions = (int)repetitionsNumericUpDown.Value;
-        batchRun.Algorithm = (IAlgorithm)Algorithm.Clone();
+        batchRun.Optimizer = (IOptimizer)Optimizer.Clone();
         Experiment.Optimizers.Add(batchRun);
       } else {
-        Experiment.Optimizers.Add((IAlgorithm)Algorithm.Clone());
+        Experiment.Optimizers.Add((IOptimizer)Optimizer.Clone());
       }
       Experiment.Prepare(true);
Index: trunk/sources/HeuristicLab.Optimizer/3.3/MenuItems/CreateExperimentMenuItem.cs
===================================================================
--- trunk/sources/HeuristicLab.Optimizer/3.3/MenuItems/CreateExperimentMenuItem.cs	(revision 5292)
+++ trunk/sources/HeuristicLab.Optimizer/3.3/MenuItems/CreateExperimentMenuItem.cs	(revision 5300)
@@ -38,5 +38,5 @@
     }
     public override string ToolTipText {
-      get { return "Create an experiment for the shown algorithm"; }
+      get { return "Create an experiment for the shown optimizer"; }
     }
 
@@ -46,11 +46,11 @@
     protected override void OnActiveViewChanged(object sender, EventArgs e) {
       IContentView activeView = MainFormManager.MainForm.ActiveView as IContentView;
-      ToolStripItem.Enabled = (activeView != null) && (activeView.Content != null) && (activeView.Content is IAlgorithm) && !activeView.Locked;
+      ToolStripItem.Enabled = (activeView != null) && (activeView.Content != null) && (activeView.Content is IOptimizer) && !activeView.Locked;
     }
 
     public override void Execute() {
       IContentView activeView = MainFormManager.MainForm.ActiveView as IContentView;
-      if ((activeView != null) && (activeView.Content != null) && (activeView.Content is IAlgorithm) && !activeView.Locked) {
-        using (CreateExperimentDialog dialog = new CreateExperimentDialog((IAlgorithm)activeView.Content)) {
+      if ((activeView != null) && (activeView.Content != null) && (activeView.Content is IOptimizer) && !activeView.Locked) {
+        using (CreateExperimentDialog dialog = new CreateExperimentDialog((IOptimizer)activeView.Content)) {
           if (dialog.ShowDialog() == DialogResult.OK) MainFormManager.MainForm.ShowContent(dialog.Experiment);
         }
