Index: /trunk/sources/HeuristicLab.Analysis/3.3/HeatMap.cs
===================================================================
--- /trunk/sources/HeuristicLab.Analysis/3.3/HeatMap.cs	(revision 4714)
+++ /trunk/sources/HeuristicLab.Analysis/3.3/HeatMap.cs	(revision 4715)
@@ -53,4 +53,8 @@
       return clone;
     }
+
+    public override string ToString() {
+      return ItemName;
+    }
   }
 }
Index: /trunk/sources/HeuristicLab.Analysis/3.3/PopulationDiversityAnalyzer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Analysis/3.3/PopulationDiversityAnalyzer.cs	(revision 4714)
+++ /trunk/sources/HeuristicLab.Analysis/3.3/PopulationDiversityAnalyzer.cs	(revision 4715)
@@ -96,21 +96,30 @@
         double[,] similarities = CalculateSimilarities(sortedSolutions);
 
-        // calculate maximum similarities, average maximum similarity and average similarity
+        // calculate minimum, average and maximum similarities
         double similarity;
         int count = sortedSolutions.Length;
+        double[] minSimilarities = new double[sortedSolutions.Length];
+        double[] avgSimilarities = new double[sortedSolutions.Length];
         double[] maxSimilarities = new double[sortedSolutions.Length];
-        double avgMaxSimilarity;
         double avgSimilarity = 0;
-        maxSimilarities.Initialize();
         for (int i = 0; i < count; i++) {
-          for (int j = i + 1; j < count; j++) {
-            similarity = similarities[i, j];
-            avgSimilarity += similarity;
-            if (maxSimilarities[i] < similarity) maxSimilarities[i] = similarity;
-            if (maxSimilarities[j] < similarity) maxSimilarities[j] = similarity;
+          minSimilarities[i] = 1;
+          avgSimilarities[i] = 0;
+          maxSimilarities[i] = 0;
+          for (int j = 0; j < count; j++) {
+            if (i != j) {
+              similarity = similarities[i, j];
+              avgSimilarity += similarity;
+              if (minSimilarities[i] > similarity) minSimilarities[i] = similarity;
+              avgSimilarities[i] += similarity;
+              if (maxSimilarities[i] < similarity) maxSimilarities[i] = similarity;
+            }
           }
-        }
-        avgMaxSimilarity = maxSimilarities.Average();
-        avgSimilarity = avgSimilarity / ((count - 1) * count / 2);
+          avgSimilarities[i] = avgSimilarities[i] / (count - 1);
+        }
+        double avgMinSimilarity = minSimilarities.Average();
+        double avgAvgSimilarity = avgSimilarities.Average();
+        double avgMaxSimilarity = maxSimilarities.Average();
+        avgSimilarity = avgSimilarity / (count * count - count);
 
         // fetch results collection
@@ -147,5 +156,15 @@
           ((DoubleValue)results["Average Population Similarity"].Value).Value = avgSimilarity;
 
-        // store average maximum similarity
+        // store average minimum, average and maximum similarity
+        if (!results.ContainsKey("Average Minimum Solution Similarity"))
+          results.Add(new Result("Average Minimum Solution Similarity", new DoubleValue(avgMinSimilarity)));
+        else
+          ((DoubleValue)results["Average Minimum Solution Similarity"].Value).Value = avgMinSimilarity;
+
+        if (!results.ContainsKey("Average Average Solution Similarity"))
+          results.Add(new Result("Average Average Solution Similarity", new DoubleValue(avgAvgSimilarity)));
+        else
+          ((DoubleValue)results["Average Average Solution Similarity"].Value).Value = avgAvgSimilarity;
+
         if (!results.ContainsKey("Average Maximum Solution Similarity"))
           results.Add(new Result("Average Maximum Solution Similarity", new DoubleValue(avgMaxSimilarity)));
@@ -155,37 +174,47 @@
         // store population similarity data table
         DataTable similarityDataTable;
-        if (!results.ContainsKey("Population Similarity")) {
-          similarityDataTable = new DataTable("Population Similarity");
-          results.Add(new Result("Population Similarity", similarityDataTable));
+        if (!results.ContainsKey("Average Solution Similarity")) {
+          similarityDataTable = new DataTable("Average Solution Similarity");
+          results.Add(new Result("Average Solution Similarity", similarityDataTable));
           DataRowVisualProperties visualProperties = new DataRowVisualProperties();
           visualProperties.ChartType = DataRowVisualProperties.DataRowChartType.Line;
           visualProperties.StartIndexZero = true;
           similarityDataTable.Rows.Add(new DataRow("Average Population Similarity", null, visualProperties));
+          similarityDataTable.Rows.Add(new DataRow("Average Minimum Solution Similarity", null, visualProperties));
+          similarityDataTable.Rows.Add(new DataRow("Average Average Solution Similarity", null, visualProperties));
           similarityDataTable.Rows.Add(new DataRow("Average Maximum Solution Similarity", null, visualProperties));
         } else {
-          similarityDataTable = (DataTable)results["Population Similarity"].Value;
+          similarityDataTable = (DataTable)results["Average Solution Similarity"].Value;
         }
         similarityDataTable.Rows["Average Population Similarity"].Values.Add(avgSimilarity);
+        similarityDataTable.Rows["Average Minimum Solution Similarity"].Values.Add(avgMinSimilarity);
+        similarityDataTable.Rows["Average Average Solution Similarity"].Values.Add(avgAvgSimilarity);
         similarityDataTable.Rows["Average Maximum Solution Similarity"].Values.Add(avgMaxSimilarity);
 
         // store maximum similarities
-        DataTable maxSimilaritiesDataTable = new DataTable("Maximum Solution Similarities");
-        maxSimilaritiesDataTable.Rows.Add(new DataRow("Maximum Solution Similarity"));
-        maxSimilaritiesDataTable.Rows["Maximum Solution Similarity"].VisualProperties.ChartType = DataRowVisualProperties.DataRowChartType.Columns;
-        maxSimilaritiesDataTable.Rows["Maximum Solution Similarity"].Values.AddRange(maxSimilarities);
-        if (!results.ContainsKey("Maximum Solution Similarities")) {
-          results.Add(new Result("Maximum Solution Similarities", maxSimilaritiesDataTable));
+        DataTable minAvgMaxSimilaritiesDataTable = new DataTable("Minimum/Average/Maximum Solution Similarities");
+        minAvgMaxSimilaritiesDataTable.Rows.Add(new DataRow("Minimum Solution Similarity"));
+        minAvgMaxSimilaritiesDataTable.Rows["Minimum Solution Similarity"].VisualProperties.ChartType = DataRowVisualProperties.DataRowChartType.Columns;
+        minAvgMaxSimilaritiesDataTable.Rows["Minimum Solution Similarity"].Values.AddRange(minSimilarities);
+        minAvgMaxSimilaritiesDataTable.Rows.Add(new DataRow("Average Solution Similarity"));
+        minAvgMaxSimilaritiesDataTable.Rows["Average Solution Similarity"].VisualProperties.ChartType = DataRowVisualProperties.DataRowChartType.Columns;
+        minAvgMaxSimilaritiesDataTable.Rows["Average Solution Similarity"].Values.AddRange(avgSimilarities);
+        minAvgMaxSimilaritiesDataTable.Rows.Add(new DataRow("Maximum Solution Similarity"));
+        minAvgMaxSimilaritiesDataTable.Rows["Maximum Solution Similarity"].VisualProperties.ChartType = DataRowVisualProperties.DataRowChartType.Columns;
+        minAvgMaxSimilaritiesDataTable.Rows["Maximum Solution Similarity"].Values.AddRange(maxSimilarities);
+        if (!results.ContainsKey("Minimum/Average/Maximum Solution Similarities")) {
+          results.Add(new Result("Minimum/Average/Maximum Solution Similarities", minAvgMaxSimilaritiesDataTable));
         } else {
-          results["Maximum Solution Similarities"].Value = maxSimilaritiesDataTable;
+          results["Minimum/Average/Maximum Solution Similarities"].Value = minAvgMaxSimilaritiesDataTable;
         }
 
         // store maximum similarities history
         if (storeHistory) {
-          if (!results.ContainsKey("Maximum Solution Similarities History")) {
+          if (!results.ContainsKey("Minimum/Average/Maximum Solution Similarities History")) {
             DataTableHistory history = new DataTableHistory();
-            history.Add(maxSimilaritiesDataTable);
-            results.Add(new Result("Maximum Solution Similarities History", history));
+            history.Add(minAvgMaxSimilaritiesDataTable);
+            results.Add(new Result("Minimum/Average/Maximum Solution Similarities History", history));
           } else {
-            ((DataTableHistory)results["Maximum Solution Similarities History"].Value).Add(maxSimilaritiesDataTable);
+            ((DataTableHistory)results["Minimum/Average/Maximum Solution Similarities History"].Value).Add(minAvgMaxSimilaritiesDataTable);
           }
         }
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/MovieView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/MovieView.Designer.cs	(revision 4714)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/MovieView.Designer.cs	(revision 4715)
@@ -49,10 +49,13 @@
       this.components = new System.ComponentModel.Container();
       this.itemsGroupBox = new System.Windows.Forms.GroupBox();
+      this.indexLabel = new System.Windows.Forms.Label();
+      this.delayComboBox = new System.Windows.Forms.ComboBox();
       this.stopButton = new System.Windows.Forms.Button();
+      this.nextButton = new System.Windows.Forms.Button();
       this.lastButton = new System.Windows.Forms.Button();
       this.playButton = new System.Windows.Forms.Button();
+      this.previousButton = new System.Windows.Forms.Button();
       this.firstButton = new System.Windows.Forms.Button();
       this.maximumLabel = new System.Windows.Forms.Label();
-      this.indexLabel = new System.Windows.Forms.Label();
       this.minimumLabel = new System.Windows.Forms.Label();
       this.trackBar = new System.Windows.Forms.TrackBar();
@@ -69,10 +72,13 @@
                   | System.Windows.Forms.AnchorStyles.Left)
                   | System.Windows.Forms.AnchorStyles.Right)));
+      this.itemsGroupBox.Controls.Add(this.indexLabel);
+      this.itemsGroupBox.Controls.Add(this.delayComboBox);
       this.itemsGroupBox.Controls.Add(this.stopButton);
+      this.itemsGroupBox.Controls.Add(this.nextButton);
       this.itemsGroupBox.Controls.Add(this.lastButton);
       this.itemsGroupBox.Controls.Add(this.playButton);
+      this.itemsGroupBox.Controls.Add(this.previousButton);
       this.itemsGroupBox.Controls.Add(this.firstButton);
       this.itemsGroupBox.Controls.Add(this.maximumLabel);
-      this.itemsGroupBox.Controls.Add(this.indexLabel);
       this.itemsGroupBox.Controls.Add(this.minimumLabel);
       this.itemsGroupBox.Controls.Add(this.trackBar);
@@ -85,15 +91,49 @@
       this.itemsGroupBox.Text = "Items";
       // 
+      // indexLabel
+      // 
+      this.indexLabel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.indexLabel.Location = new System.Drawing.Point(173, 364);
+      this.indexLabel.Name = "indexLabel";
+      this.indexLabel.Size = new System.Drawing.Size(186, 13);
+      this.indexLabel.TabIndex = 9;
+      this.indexLabel.Text = "0";
+      this.indexLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+      // 
+      // delayComboBox
+      // 
+      this.delayComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+      this.delayComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+      this.delayComboBox.FormattingEnabled = true;
+      this.delayComboBox.Location = new System.Drawing.Point(472, 355);
+      this.delayComboBox.Name = "delayComboBox";
+      this.delayComboBox.Size = new System.Drawing.Size(54, 21);
+      this.delayComboBox.TabIndex = 11;
+      this.toolTip.SetToolTip(this.delayComboBox, "Visualization Delay");
+      this.delayComboBox.SelectedIndexChanged += new System.EventHandler(this.delayComboBox_SelectedIndexChanged);
+      // 
       // stopButton
       // 
-      this.stopButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+      this.stopButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
       this.stopButton.Image = HeuristicLab.Common.Resources.VS2008ImageLibrary.Stop;
-      this.stopButton.Location = new System.Drawing.Point(502, 355);
+      this.stopButton.Location = new System.Drawing.Point(36, 355);
       this.stopButton.Name = "stopButton";
       this.stopButton.Size = new System.Drawing.Size(24, 24);
-      this.stopButton.TabIndex = 5;
+      this.stopButton.TabIndex = 7;
       this.toolTip.SetToolTip(this.stopButton, "Stop");
       this.stopButton.UseVisualStyleBackColor = true;
       this.stopButton.Click += new System.EventHandler(this.stopButton_Click);
+      // 
+      // nextButton
+      // 
+      this.nextButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+      this.nextButton.Image = HeuristicLab.Common.Resources.VS2008ImageLibrary.MoveNext;
+      this.nextButton.Location = new System.Drawing.Point(472, 325);
+      this.nextButton.Name = "nextButton";
+      this.nextButton.Size = new System.Drawing.Size(24, 24);
+      this.nextButton.TabIndex = 4;
+      this.nextButton.UseVisualStyleBackColor = true;
+      this.nextButton.Click += new System.EventHandler(this.nextButton_Click);
       // 
       // lastButton
@@ -104,5 +144,5 @@
       this.lastButton.Name = "lastButton";
       this.lastButton.Size = new System.Drawing.Size(24, 24);
-      this.lastButton.TabIndex = 3;
+      this.lastButton.TabIndex = 5;
       this.toolTip.SetToolTip(this.lastButton, "Move to Last");
       this.lastButton.UseVisualStyleBackColor = true;
@@ -116,8 +156,19 @@
       this.playButton.Name = "playButton";
       this.playButton.Size = new System.Drawing.Size(24, 24);
-      this.playButton.TabIndex = 4;
+      this.playButton.TabIndex = 6;
       this.toolTip.SetToolTip(this.playButton, "Play");
       this.playButton.UseVisualStyleBackColor = true;
       this.playButton.Click += new System.EventHandler(this.playButton_Click);
+      // 
+      // previousButton
+      // 
+      this.previousButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.previousButton.Image = HeuristicLab.Common.Resources.VS2008ImageLibrary.MovePrevious;
+      this.previousButton.Location = new System.Drawing.Point(36, 325);
+      this.previousButton.Name = "previousButton";
+      this.previousButton.Size = new System.Drawing.Size(24, 24);
+      this.previousButton.TabIndex = 2;
+      this.previousButton.UseVisualStyleBackColor = true;
+      this.previousButton.Click += new System.EventHandler(this.previousButton_Click);
       // 
       // firstButton
@@ -136,29 +187,18 @@
       // 
       this.maximumLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
-      this.maximumLabel.Location = new System.Drawing.Point(388, 364);
+      this.maximumLabel.Location = new System.Drawing.Point(351, 364);
       this.maximumLabel.Name = "maximumLabel";
       this.maximumLabel.Size = new System.Drawing.Size(108, 13);
-      this.maximumLabel.TabIndex = 8;
+      this.maximumLabel.TabIndex = 10;
       this.maximumLabel.Text = "10";
       this.maximumLabel.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
       // 
-      // indexLabel
-      // 
-      this.indexLabel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
-                  | System.Windows.Forms.AnchorStyles.Right)));
-      this.indexLabel.Location = new System.Drawing.Point(173, 364);
-      this.indexLabel.Name = "indexLabel";
-      this.indexLabel.Size = new System.Drawing.Size(186, 13);
-      this.indexLabel.TabIndex = 7;
-      this.indexLabel.Text = "0";
-      this.indexLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
-      // 
       // minimumLabel
       // 
       this.minimumLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
-      this.minimumLabel.Location = new System.Drawing.Point(36, 364);
+      this.minimumLabel.Location = new System.Drawing.Point(73, 364);
       this.minimumLabel.Name = "minimumLabel";
       this.minimumLabel.Size = new System.Drawing.Size(38, 13);
-      this.minimumLabel.TabIndex = 6;
+      this.minimumLabel.TabIndex = 8;
       this.minimumLabel.Text = "0";
       this.minimumLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
@@ -169,8 +209,8 @@
                   | System.Windows.Forms.AnchorStyles.Right)));
       this.trackBar.LargeChange = 1;
-      this.trackBar.Location = new System.Drawing.Point(36, 316);
+      this.trackBar.Location = new System.Drawing.Point(66, 316);
       this.trackBar.Name = "trackBar";
-      this.trackBar.Size = new System.Drawing.Size(460, 45);
-      this.trackBar.TabIndex = 2;
+      this.trackBar.Size = new System.Drawing.Size(400, 45);
+      this.trackBar.TabIndex = 3;
       this.trackBar.TickStyle = System.Windows.Forms.TickStyle.Both;
       this.trackBar.ValueChanged += new System.EventHandler(this.trackBar_ValueChanged);
@@ -224,4 +264,7 @@
     protected Label minimumLabel;
     protected System.ComponentModel.BackgroundWorker backgroundWorker;
+    protected Button nextButton;
+    protected Button previousButton;
+    protected ComboBox delayComboBox;
   }
 }
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/MovieView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/MovieView.cs	(revision 4714)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/MovieView.cs	(revision 4715)
@@ -31,4 +31,22 @@
   [View("Movie View")]
   public partial class MovieView<T> : ItemView where T : class, IItem {
+    #region Delay
+    protected class Delay {
+      public string Text { get; private set; }
+      public int Milliseconds { get; private set; }
+
+      public Delay(string text, int milliseconds) {
+        Text = text;
+        Milliseconds = milliseconds;
+      }
+
+      public override string ToString() {
+        return Text;
+      }
+    }
+    #endregion
+
+    protected int delay;
+
     public new IItemCollection<T> Content {
       get { return (IItemCollection<T>)base.Content; }
@@ -38,4 +56,14 @@
     public MovieView() {
       InitializeComponent();
+
+      delayComboBox.Items.Add(new Delay("5s", 5000));
+      delayComboBox.Items.Add(new Delay("2s", 2000));
+      delayComboBox.Items.Add(new Delay("1s", 1000));
+      delayComboBox.Items.Add(new Delay("0.5s", 500));
+      delayComboBox.Items.Add(new Delay("0.1s", 100));
+      delayComboBox.Items.Add(new Delay("0.05s", 50));
+      delayComboBox.Items.Add(new Delay("0.01s", 10));
+      delayComboBox.SelectedIndex = 4;
+      delay = 100;
     }
 
@@ -70,9 +98,12 @@
     protected override void SetEnabledStateOfControls() {
       base.SetEnabledStateOfControls();
-      firstButton.Enabled = (Content != null) && (Content.Count > 0) && (!backgroundWorker.IsBusy);
+      firstButton.Enabled = (Content != null) && (Content.Count > 0) && (trackBar.Value != trackBar.Minimum) && (!backgroundWorker.IsBusy);
+      previousButton.Enabled = (Content != null) && (Content.Count > 0) && (trackBar.Value != trackBar.Minimum) && (!backgroundWorker.IsBusy);
       trackBar.Enabled = (Content != null) && (Content.Count > 0) && (!backgroundWorker.IsBusy);
-      lastButton.Enabled = (Content != null) && (Content.Count > 0) && (!backgroundWorker.IsBusy);
+      nextButton.Enabled = (Content != null) && (Content.Count > 0) && (trackBar.Value != trackBar.Maximum) && (!backgroundWorker.IsBusy);
+      lastButton.Enabled = (Content != null) && (Content.Count > 0) && (trackBar.Value != trackBar.Maximum) && (!backgroundWorker.IsBusy);
       playButton.Enabled = (Content != null) && (Content.Count > 0) && (!backgroundWorker.IsBusy);
       stopButton.Enabled = (Content != null) && (backgroundWorker.IsBusy);
+      delayComboBox.Enabled = (Content != null) && (Content.Count > 0);
     }
 
@@ -89,8 +120,6 @@
         trackBar.Maximum = Content.Count - 1;
         maximumLabel.Text = trackBar.Maximum.ToString();
-        if (viewHost.Content == null) {
-          viewHost.Content = Content.FirstOrDefault();
-          SetEnabledStateOfControls();
-        }
+        if (viewHost.Content == null) viewHost.Content = Content.FirstOrDefault();
+        SetEnabledStateOfControls();
       }
     }
@@ -105,6 +134,6 @@
           viewHost.Content = Content.FirstOrDefault();
           UpdateLables();
-          SetEnabledStateOfControls();
         }
+        SetEnabledStateOfControls();
       }
     }
@@ -124,16 +153,25 @@
     #region Control Events
     protected virtual void trackBar_ValueChanged(object sender, EventArgs e) {
+      viewHost.Content = Content == null ? null : Content.ElementAtOrDefault(trackBar.Value);
       indexLabel.Text = trackBar.Value.ToString();
-      viewHost.Content = Content == null ? null : Content.ElementAtOrDefault(trackBar.Value);
+      SetEnabledStateOfControls();
     }
     protected virtual void firstButton_Click(object sender, EventArgs e) {
-      trackBar.Value = trackBar.Minimum;
+      if (trackBar.Value != trackBar.Minimum) trackBar.Value = trackBar.Minimum;
+    }
+    protected virtual void previousButton_Click(object sender, EventArgs e) {
+      if (trackBar.Value != trackBar.Minimum) trackBar.Value--;
+    }
+    protected virtual void nextButton_Click(object sender, EventArgs e) {
+      if (trackBar.Value != trackBar.Maximum) trackBar.Value++;
     }
     protected virtual void lastButton_Click(object sender, EventArgs e) {
-      trackBar.Value = trackBar.Maximum;
+      if (trackBar.Value != trackBar.Maximum) trackBar.Value = trackBar.Maximum;
     }
     protected virtual void playButton_Click(object sender, EventArgs e) {
       firstButton.Enabled = false;
+      previousButton.Enabled = false;
       trackBar.Enabled = false;
+      nextButton.Enabled = false;
       lastButton.Enabled = false;
       playButton.Enabled = false;
@@ -142,5 +180,10 @@
     }
     protected virtual void stopButton_Click(object sender, EventArgs e) {
+      stopButton.Enabled = false;
       backgroundWorker.CancelAsync();
+    }
+    protected virtual void delayComboBox_SelectedIndexChanged(object sender, EventArgs e) {
+      Delay selected = delayComboBox.SelectedItem as Delay;
+      if (selected != null) delay = selected.Milliseconds;
     }
     #endregion
@@ -154,10 +197,12 @@
           terminate = trackBar.Value == trackBar.Maximum;
         });
-        Thread.Sleep(100);
+        Thread.Sleep(delay);
       }
     }
     protected virtual void backgroundWorker_RunWorkerCompleted(object sender, System.ComponentModel.RunWorkerCompletedEventArgs e) {
       firstButton.Enabled = true;
+      previousButton.Enabled = true;
       trackBar.Enabled = true;
+      nextButton.Enabled = true;
       lastButton.Enabled = true;
       playButton.Enabled = true;
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/NamedItemCollectionView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/NamedItemCollectionView.cs	(revision 4714)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/NamedItemCollectionView.cs	(revision 4715)
@@ -75,5 +75,5 @@
     protected override ListViewItem CreateListViewItem(T item) {
       ListViewItem listViewItem = base.CreateListViewItem(item);
-      listViewItem.ToolTipText = item.ItemName + ": " + item.Description;
+      listViewItem.ToolTipText = string.IsNullOrEmpty(item.Description) ? item.ItemName : item.ItemName + ": " + item.Description;
       return listViewItem;
     }
