Index: trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/CrossValidation.cs
===================================================================
--- trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/CrossValidation.cs	(revision 8736)
+++ trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/CrossValidation.cs	(revision 8738)
@@ -44,5 +44,5 @@
 
       executionState = ExecutionState.Stopped;
-      runs = new RunCollection();
+      runs = new RunCollection { AlgorithmName = name };
       runsCounter = 0;
 
@@ -246,4 +246,9 @@
     #endregion
 
+    protected override void OnNameChanged() {
+      base.OnNameChanged();
+      Runs.AlgorithmName = Name;
+    }
+
     public void Prepare() {
       if (ExecutionState == ExecutionState.Started)
Index: trunk/sources/HeuristicLab.Optimization.Views/3.3/RunCollectionViews/RunCollectionBoxPlotView.cs
===================================================================
--- trunk/sources/HeuristicLab.Optimization.Views/3.3/RunCollectionViews/RunCollectionBoxPlotView.cs	(revision 8736)
+++ trunk/sources/HeuristicLab.Optimization.Views/3.3/RunCollectionViews/RunCollectionBoxPlotView.cs	(revision 8738)
@@ -75,4 +75,5 @@
       Content.CollectionReset += new HeuristicLab.Collections.CollectionItemsChangedEventHandler<IRun>(Content_CollectionReset);
       Content.UpdateOfRunsInProgressChanged += new EventHandler(Content_UpdateOfRunsInProgressChanged);
+      Content.AlgorithmNameChanged += new EventHandler(Content_AlgorithmNameChanged);
       RegisterRunEvents(Content);
     }
@@ -85,4 +86,5 @@
       Content.CollectionReset -= new HeuristicLab.Collections.CollectionItemsChangedEventHandler<IRun>(Content_CollectionReset);
       Content.UpdateOfRunsInProgressChanged -= new EventHandler(Content_UpdateOfRunsInProgressChanged);
+      Content.AlgorithmNameChanged -= new EventHandler(Content_AlgorithmNameChanged);
       DeregisterRunEvents(Content);
     }
@@ -139,4 +141,10 @@
       }
     }
+
+    private void Content_AlgorithmNameChanged(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(Content_AlgorithmNameChanged), sender, e);
+      else UpdateCaption();
+    }
     #endregion
 
@@ -147,4 +155,9 @@
       UpdateComboBoxes();
       UpdateDataPoints();
+      UpdateCaption();
+    }
+
+    private void UpdateCaption() {
+      Caption = Content != null ? Content.AlgorithmName + "Box Plots" : ViewAttribute.GetViewName(GetType());
     }
 
Index: trunk/sources/HeuristicLab.Optimization.Views/3.3/RunCollectionViews/RunCollectionBubbleChartView.cs
===================================================================
--- trunk/sources/HeuristicLab.Optimization.Views/3.3/RunCollectionViews/RunCollectionBubbleChartView.cs	(revision 8736)
+++ trunk/sources/HeuristicLab.Optimization.Views/3.3/RunCollectionViews/RunCollectionBubbleChartView.cs	(revision 8738)
@@ -93,4 +93,5 @@
       Content.CollectionReset += new HeuristicLab.Collections.CollectionItemsChangedEventHandler<IRun>(Content_CollectionReset);
       Content.UpdateOfRunsInProgressChanged += new EventHandler(Content_UpdateOfRunsInProgressChanged);
+      Content.AlgorithmNameChanged += new EventHandler(Content_AlgorithmNameChanged);
       RegisterRunEvents(Content);
     }
@@ -103,4 +104,5 @@
       Content.CollectionReset -= new HeuristicLab.Collections.CollectionItemsChangedEventHandler<IRun>(Content_CollectionReset);
       Content.UpdateOfRunsInProgressChanged -= new EventHandler(Content_UpdateOfRunsInProgressChanged);
+      Content.AlgorithmNameChanged -= new EventHandler(Content_AlgorithmNameChanged);
       DeregisterRunEvents(Content);
     }
@@ -163,4 +165,5 @@
       UpdateComboBoxes();
       UpdateDataPoints();
+      UpdateCaption();
     }
     private void Content_ColumnNamesChanged(object sender, EventArgs e) {
@@ -169,4 +172,8 @@
       else
         UpdateComboBoxes();
+    }
+
+    private void UpdateCaption() {
+      Caption = Content != null ? Content.AlgorithmName + "Bubble Chart" : ViewAttribute.GetViewName(GetType());
     }
 
@@ -215,4 +222,10 @@
         if (!suppressUpdates) UpdateDataPoints();
       }
+    }
+
+    private void Content_AlgorithmNameChanged(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(Content_AlgorithmNameChanged), sender, e);
+      else UpdateCaption();
     }
 
Index: trunk/sources/HeuristicLab.Optimization.Views/3.3/RunCollectionViews/RunCollectionDataTableView.cs
===================================================================
--- trunk/sources/HeuristicLab.Optimization.Views/3.3/RunCollectionViews/RunCollectionDataTableView.cs	(revision 8736)
+++ trunk/sources/HeuristicLab.Optimization.Views/3.3/RunCollectionViews/RunCollectionDataTableView.cs	(revision 8738)
@@ -63,4 +63,5 @@
       Content.CollectionReset += new CollectionItemsChangedEventHandler<IRun>(Content_CollectionReset);
       Content.UpdateOfRunsInProgressChanged += new EventHandler(Content_UpdateOfRunsInProgressChanged);
+      Content.AlgorithmNameChanged += new EventHandler(Content_AlgorithmNameChanged);
     }
     protected override void DeregisterContentEvents() {
@@ -69,4 +70,5 @@
       Content.CollectionReset -= new CollectionItemsChangedEventHandler<IRun>(Content_CollectionReset);
       Content.UpdateOfRunsInProgressChanged -= new EventHandler(Content_UpdateOfRunsInProgressChanged);
+      Content.AlgorithmNameChanged -= new EventHandler(Content_AlgorithmNameChanged);
       base.DeregisterContentEvents();
     }
@@ -93,4 +95,9 @@
       RemoveRuns(e.OldItems);
       AddRuns(e.Items);
+    }
+    private void Content_AlgorithmNameChanged(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(Content_AlgorithmNameChanged), sender, e);
+      else UpdateCaption();
     }
     private void Content_UpdateOfRunsInProgressChanged(object sender, EventArgs e) {
@@ -123,4 +130,5 @@
       runMapping.Clear();
 
+      UpdateCaption();
       if (Content != null) {
         UpdateDataTableComboBox();
@@ -195,4 +203,8 @@
     }
 
+    private void UpdateCaption() {
+      Caption = Content != null ? Content.AlgorithmName + "Data Table" : ViewAttribute.GetViewName(GetType());
+    }
+
     private void UpdateDataRowComboBox() {
       dataRowComboBox.Items.Clear();
Index: trunk/sources/HeuristicLab.Optimization.Views/3.3/RunCollectionViews/RunCollectionTabularView.cs
===================================================================
--- trunk/sources/HeuristicLab.Optimization.Views/3.3/RunCollectionViews/RunCollectionTabularView.cs	(revision 8736)
+++ trunk/sources/HeuristicLab.Optimization.Views/3.3/RunCollectionViews/RunCollectionTabularView.cs	(revision 8738)
@@ -55,4 +55,5 @@
         UpdateRowAttributes();
       }
+      UpdateCaption();
     }
 
@@ -64,4 +65,5 @@
       Content.CollectionReset += new HeuristicLab.Collections.CollectionItemsChangedEventHandler<IRun>(Content_CollectionReset);
       Content.UpdateOfRunsInProgressChanged += new EventHandler(Content_UpdateOfRunsInProgressChanged);
+      Content.AlgorithmNameChanged += new EventHandler(Content_AlgorithmNameChanged);
       RegisterRunEvents(Content);
     }
@@ -76,4 +78,5 @@
       Content.CollectionReset -= new HeuristicLab.Collections.CollectionItemsChangedEventHandler<IRun>(Content_CollectionReset);
       Content.UpdateOfRunsInProgressChanged -= new EventHandler(Content_UpdateOfRunsInProgressChanged);
+      Content.AlgorithmNameChanged -= new EventHandler(Content_AlgorithmNameChanged);
       DeregisterRunEvents(Content);
     }
@@ -91,4 +94,9 @@
     private void Content_ItemsAdded(object sender, HeuristicLab.Collections.CollectionItemsChangedEventArgs<IRun> e) {
       RegisterRunEvents(e.Items);
+    }
+    private void Content_AlgorithmNameChanged(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(Content_AlgorithmNameChanged), sender, e);
+      else UpdateCaption();
     }
     private void run_Changed(object sender, EventArgs e) {
@@ -101,4 +109,8 @@
     }
     #endregion
+
+    private void UpdateCaption() {
+      Caption = Content != null ? Content.AlgorithmName + "Tabular View" : ViewAttribute.GetViewName(GetType());
+    }
 
     protected override void UpdateColumnHeaders() {
Index: trunk/sources/HeuristicLab.Optimization/3.3/Algorithms/Algorithm.cs
===================================================================
--- trunk/sources/HeuristicLab.Optimization/3.3/Algorithms/Algorithm.cs	(revision 8736)
+++ trunk/sources/HeuristicLab.Optimization/3.3/Algorithms/Algorithm.cs	(revision 8738)
@@ -134,5 +134,5 @@
       storeAlgorithmInEachRun = false;
       runsCounter = 0;
-      Runs = new RunCollection();
+      Runs = new RunCollection { AlgorithmName = Name };
     }
     protected Algorithm(string name)
@@ -142,5 +142,5 @@
       storeAlgorithmInEachRun = false;
       runsCounter = 0;
-      Runs = new RunCollection();
+      Runs = new RunCollection { AlgorithmName = Name };
     }
     protected Algorithm(string name, ParameterCollection parameters)
@@ -150,5 +150,5 @@
       storeAlgorithmInEachRun = false;
       runsCounter = 0;
-      Runs = new RunCollection();
+      Runs = new RunCollection { AlgorithmName = Name };
     }
     protected Algorithm(string name, string description)
@@ -158,5 +158,5 @@
       storeAlgorithmInEachRun = false;
       runsCounter = 0;
-      Runs = new RunCollection();
+      Runs = new RunCollection { AlgorithmName = Name };
     }
     protected Algorithm(string name, string description, ParameterCollection parameters)
@@ -166,5 +166,5 @@
       storeAlgorithmInEachRun = false;
       runsCounter = 0;
-      Runs = new RunCollection();
+      Runs = new RunCollection { AlgorithmName = Name };
     }
     [StorableConstructor]
@@ -250,4 +250,9 @@
 
     #region Events
+    protected override void OnNameChanged() {
+      base.OnNameChanged();
+      Runs.AlgorithmName = Name;
+    }
+
     public event EventHandler ExecutionStateChanged;
     protected virtual void OnExecutionStateChanged() {
Index: trunk/sources/HeuristicLab.Optimization/3.3/BatchRun.cs
===================================================================
--- trunk/sources/HeuristicLab.Optimization/3.3/BatchRun.cs	(revision 8736)
+++ trunk/sources/HeuristicLab.Optimization/3.3/BatchRun.cs	(revision 8738)
@@ -175,5 +175,5 @@
       repetitions = 10;
       repetitionsCounter = 0;
-      Runs = new RunCollection();
+      Runs = new RunCollection { AlgorithmName = Name };
     }
     public BatchRun(string name)
@@ -185,5 +185,5 @@
       repetitions = 10;
       repetitionsCounter = 0;
-      Runs = new RunCollection();
+      Runs = new RunCollection { AlgorithmName = Name };
     }
     public BatchRun(string name, string description)
@@ -194,5 +194,5 @@
       repetitions = 10;
       repetitionsCounter = 0;
-      Runs = new RunCollection();
+      Runs = new RunCollection { AlgorithmName = Name };
     }
     [StorableConstructor]
@@ -278,4 +278,9 @@
 
     #region Events
+    protected override void OnNameChanged() {
+      base.OnNameChanged();
+      runs.AlgorithmName = Name;
+    }
+
     public event EventHandler ExecutionStateChanged;
     private void OnExecutionStateChanged() {
Index: trunk/sources/HeuristicLab.Optimization/3.3/Experiment.cs
===================================================================
--- trunk/sources/HeuristicLab.Optimization/3.3/Experiment.cs	(revision 8736)
+++ trunk/sources/HeuristicLab.Optimization/3.3/Experiment.cs	(revision 8738)
@@ -117,5 +117,5 @@
       executionTime = TimeSpan.Zero;
       optimizers = new OptimizerList();
-      Runs = new RunCollection();
+      Runs = new RunCollection { AlgorithmName = Name };
       Initialize();
     }
@@ -126,5 +126,5 @@
       executionTime = TimeSpan.Zero;
       optimizers = new OptimizerList();
-      Runs = new RunCollection();
+      Runs = new RunCollection { AlgorithmName = Name };
       Initialize();
     }
@@ -134,5 +134,5 @@
       executionTime = TimeSpan.Zero;
       optimizers = new OptimizerList();
-      Runs = new RunCollection();
+      Runs = new RunCollection { AlgorithmName = Name };
       Initialize();
     }
@@ -180,5 +180,6 @@
       foreach (IOptimizer optimizer in Optimizers.Where(x => x.ExecutionState != ExecutionState.Started)) {
         // a race-condition may occur when the optimizer has changed the state by itself in the meantime
-        try { optimizer.Prepare(clearRuns); } catch (InvalidOperationException) { }
+        try { optimizer.Prepare(clearRuns); }
+        catch (InvalidOperationException) { }
       }
     }
@@ -193,5 +194,6 @@
       if (optimizer != null) {
         // a race-condition may occur when the optimizer has changed the state by itself in the meantime
-        try { optimizer.Start(); } catch (InvalidOperationException) { }
+        try { optimizer.Start(); }
+        catch (InvalidOperationException) { }
       }
     }
@@ -205,5 +207,6 @@
       foreach (IOptimizer optimizer in Optimizers.Where(x => x.ExecutionState == ExecutionState.Started)) {
         // a race-condition may occur when the optimizer has changed the state by itself in the meantime
-        try { optimizer.Pause(); } catch (InvalidOperationException) { }
+        try { optimizer.Pause(); }
+        catch (InvalidOperationException) { }
       }
     }
@@ -218,5 +221,6 @@
         foreach (var optimizer in Optimizers.Where(x => (x.ExecutionState == ExecutionState.Started) || (x.ExecutionState == ExecutionState.Paused))) {
           // a race-condition may occur when the optimizer has changed the state by itself in the meantime
-          try { optimizer.Stop(); } catch (InvalidOperationException) { }
+          try { optimizer.Stop(); }
+          catch (InvalidOperationException) { }
         }
       } else {
@@ -226,4 +230,9 @@
 
     #region Events
+    protected override void OnNameChanged() {
+      base.OnNameChanged();
+      Runs.AlgorithmName = Name;
+    }
+
     public event EventHandler ExecutionStateChanged;
     private void OnExecutionStateChanged() {
Index: trunk/sources/HeuristicLab.Optimization/3.3/RunCollection.cs
===================================================================
--- trunk/sources/HeuristicLab.Optimization/3.3/RunCollection.cs	(revision 8736)
+++ trunk/sources/HeuristicLab.Optimization/3.3/RunCollection.cs	(revision 8738)
@@ -44,4 +44,6 @@
       : base(original, cloner) {
       updateOfRunsInProgress = false;
+      algorithmName = original.algorithmName;
+
       resultNames = new List<string>(original.resultNames);
       parameterNames = new List<string>(original.parameterNames);
@@ -104,4 +106,16 @@
     }
 
+    private string algorithmName = string.Empty;
+    [Storable]
+    public string AlgorithmName {
+      get { return algorithmName; }
+      set {
+        if (value != algorithmName && !string.IsNullOrEmpty(value)) {
+          algorithmName = value;
+          OnAlgorithmNameChanged();
+        }
+      }
+    }
+
     [StorableHook(HookType.AfterDeserialization)]
     private void AfterDeserialization() {
@@ -120,4 +134,10 @@
     protected virtual void OnUpdateOfRunsInProgressChanged() {
       var handler = UpdateOfRunsInProgressChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public event EventHandler AlgorithmNameChanged;
+    protected virtual void OnAlgorithmNameChanged() {
+      var handler = AlgorithmNameChanged;
       if (handler != null) handler(this, EventArgs.Empty);
     }
