Index: branches/RuntimeOptimizer/HeuristicLab.Optimization.Views/3.3/TimeLimitRunView.Designer.cs
===================================================================
--- branches/RuntimeOptimizer/HeuristicLab.Optimization.Views/3.3/TimeLimitRunView.Designer.cs	(revision 8956)
+++ branches/RuntimeOptimizer/HeuristicLab.Optimization.Views/3.3/TimeLimitRunView.Designer.cs	(revision 8961)
@@ -38,5 +38,5 @@
       this.timeLimitTextBox = new System.Windows.Forms.TextBox();
       this.label1 = new System.Windows.Forms.Label();
-      this.snapShotsTextBox = new System.Windows.Forms.TextBox();
+      this.snapshotsTextBox = new System.Windows.Forms.TextBox();
       this.storeAlgorithmInEachSnapshotCheckBox = new System.Windows.Forms.CheckBox();
       this.tabControl = new HeuristicLab.MainForm.WindowsForms.DragOverTabControl();
@@ -61,17 +61,19 @@
       // 
       this.startButton.Location = new System.Drawing.Point(0, 440);
+      this.startButton.TabIndex = 9;
       this.toolTip.SetToolTip(this.startButton, "Start/Resume Optimizer");
       // 
       // executionTimeTextBox
       // 
-      this.executionTimeTextBox.Location = new System.Drawing.Point(295, 444);
+      this.executionTimeTextBox.Location = new System.Drawing.Point(412, 444);
       // 
       // executionTimeLabel
       // 
-      this.executionTimeLabel.Location = new System.Drawing.Point(206, 447);
+      this.executionTimeLabel.Location = new System.Drawing.Point(323, 447);
       // 
       // pauseButton
       // 
       this.pauseButton.Location = new System.Drawing.Point(30, 440);
+      this.pauseButton.TabIndex = 10;
       this.toolTip.SetToolTip(this.pauseButton, "Pause Optimizer");
       // 
@@ -79,4 +81,5 @@
       // 
       this.stopButton.Location = new System.Drawing.Point(60, 440);
+      this.stopButton.TabIndex = 11;
       this.toolTip.SetToolTip(this.stopButton, "Stop Optimizer");
       // 
@@ -84,4 +87,5 @@
       // 
       this.resetButton.Location = new System.Drawing.Point(90, 440);
+      this.resetButton.TabIndex = 12;
       this.toolTip.SetToolTip(this.resetButton, "Reset Optimizer");
       // 
@@ -91,5 +95,9 @@
       this.errorProvider.SetIconPadding(this.nameTextBox, 2);
       this.nameTextBox.Location = new System.Drawing.Point(69, 0);
-      this.nameTextBox.Size = new System.Drawing.Size(338, 20);
+      this.nameTextBox.Size = new System.Drawing.Size(455, 20);
+      // 
+      // infoLabel
+      // 
+      this.infoLabel.Location = new System.Drawing.Point(530, 3);
       // 
       // timeLimitLabel
@@ -99,15 +107,15 @@
       this.timeLimitLabel.Name = "timeLimitLabel";
       this.timeLimitLabel.Size = new System.Drawing.Size(53, 13);
-      this.timeLimitLabel.TabIndex = 16;
+      this.timeLimitLabel.TabIndex = 3;
       this.timeLimitLabel.Text = "Time limit:";
       // 
       // timeLimitTextBox
       // 
-      this.timeLimitTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+      this.timeLimitTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
             | System.Windows.Forms.AnchorStyles.Right)));
       this.timeLimitTextBox.Location = new System.Drawing.Point(69, 26);
       this.timeLimitTextBox.Name = "timeLimitTextBox";
-      this.timeLimitTextBox.Size = new System.Drawing.Size(338, 20);
-      this.timeLimitTextBox.TabIndex = 17;
+      this.timeLimitTextBox.Size = new System.Drawing.Size(455, 20);
+      this.timeLimitTextBox.TabIndex = 4;
       this.timeLimitTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.timeLimitTextBox_Validating);
       // 
@@ -118,15 +126,16 @@
       this.label1.Name = "label1";
       this.label1.Size = new System.Drawing.Size(60, 13);
-      this.label1.TabIndex = 16;
+      this.label1.TabIndex = 5;
       this.label1.Text = "Snapshots:";
       // 
-      // snapShotsTextBox
-      // 
-      this.snapShotsTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
-            | System.Windows.Forms.AnchorStyles.Right)));
-      this.snapShotsTextBox.Location = new System.Drawing.Point(69, 52);
-      this.snapShotsTextBox.Name = "snapShotsTextBox";
-      this.snapShotsTextBox.Size = new System.Drawing.Size(142, 20);
-      this.snapShotsTextBox.TabIndex = 17;
+      // snapshotsTextBox
+      // 
+      this.snapshotsTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+            | System.Windows.Forms.AnchorStyles.Right)));
+      this.snapshotsTextBox.Location = new System.Drawing.Point(69, 52);
+      this.snapshotsTextBox.Name = "snapshotsTextBox";
+      this.snapshotsTextBox.Size = new System.Drawing.Size(259, 20);
+      this.snapshotsTextBox.TabIndex = 6;
+      this.snapshotsTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.snapshotsTextBox_Validating);
       // 
       // storeAlgorithmInEachSnapshotCheckBox
@@ -134,8 +143,8 @@
       this.storeAlgorithmInEachSnapshotCheckBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
       this.storeAlgorithmInEachSnapshotCheckBox.AutoSize = true;
-      this.storeAlgorithmInEachSnapshotCheckBox.Location = new System.Drawing.Point(223, 54);
+      this.storeAlgorithmInEachSnapshotCheckBox.Location = new System.Drawing.Point(340, 54);
       this.storeAlgorithmInEachSnapshotCheckBox.Name = "storeAlgorithmInEachSnapshotCheckBox";
       this.storeAlgorithmInEachSnapshotCheckBox.Size = new System.Drawing.Size(184, 17);
-      this.storeAlgorithmInEachSnapshotCheckBox.TabIndex = 18;
+      this.storeAlgorithmInEachSnapshotCheckBox.TabIndex = 7;
       this.storeAlgorithmInEachSnapshotCheckBox.Text = "Store Algorithm in Each Snapshot";
       this.storeAlgorithmInEachSnapshotCheckBox.UseVisualStyleBackColor = true;
@@ -145,6 +154,6 @@
       // 
       this.tabControl.AllowDrop = true;
-      this.tabControl.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
-            | System.Windows.Forms.AnchorStyles.Left) 
+      this.tabControl.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+            | System.Windows.Forms.AnchorStyles.Left)
             | System.Windows.Forms.AnchorStyles.Right)));
       this.tabControl.Controls.Add(this.algorithmTabPage);
@@ -154,6 +163,6 @@
       this.tabControl.Name = "tabControl";
       this.tabControl.SelectedIndex = 0;
-      this.tabControl.Size = new System.Drawing.Size(429, 356);
-      this.tabControl.TabIndex = 19;
+      this.tabControl.Size = new System.Drawing.Size(546, 356);
+      this.tabControl.TabIndex = 8;
       // 
       // algorithmTabPage
@@ -166,5 +175,5 @@
       this.algorithmTabPage.Name = "algorithmTabPage";
       this.algorithmTabPage.Padding = new System.Windows.Forms.Padding(3);
-      this.algorithmTabPage.Size = new System.Drawing.Size(421, 330);
+      this.algorithmTabPage.Size = new System.Drawing.Size(538, 330);
       this.algorithmTabPage.TabIndex = 1;
       this.algorithmTabPage.Text = "Algorithm";
@@ -176,6 +185,6 @@
       // algorithmViewHost
       // 
-      this.algorithmViewHost.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
-            | System.Windows.Forms.AnchorStyles.Left) 
+      this.algorithmViewHost.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+            | System.Windows.Forms.AnchorStyles.Left)
             | System.Windows.Forms.AnchorStyles.Right)));
       this.algorithmViewHost.Caption = "View";
@@ -185,6 +194,6 @@
       this.algorithmViewHost.Name = "algorithmViewHost";
       this.algorithmViewHost.ReadOnly = false;
-      this.algorithmViewHost.Size = new System.Drawing.Size(409, 288);
-      this.algorithmViewHost.TabIndex = 3;
+      this.algorithmViewHost.Size = new System.Drawing.Size(526, 288);
+      this.algorithmViewHost.TabIndex = 2;
       this.algorithmViewHost.ViewsLabelVisible = true;
       this.algorithmViewHost.ViewType = null;
@@ -192,5 +201,5 @@
       // openAlgorithmButton
       // 
-      this.openAlgorithmButton.Image = ((System.Drawing.Image)(resources.GetObject("openAlgorithmButton.Image")));
+      this.openAlgorithmButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.Open;
       this.openAlgorithmButton.Location = new System.Drawing.Point(36, 6);
       this.openAlgorithmButton.Name = "openAlgorithmButton";
@@ -203,5 +212,5 @@
       // newAlgorithmButton
       // 
-      this.newAlgorithmButton.Image = ((System.Drawing.Image)(resources.GetObject("newAlgorithmButton.Image")));
+      this.newAlgorithmButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.NewDocument;
       this.newAlgorithmButton.Location = new System.Drawing.Point(6, 6);
       this.newAlgorithmButton.Name = "newAlgorithmButton";
@@ -218,5 +227,5 @@
       this.snapshotsTabPage.Name = "snapshotsTabPage";
       this.snapshotsTabPage.Padding = new System.Windows.Forms.Padding(3);
-      this.snapshotsTabPage.Size = new System.Drawing.Size(421, 330);
+      this.snapshotsTabPage.Size = new System.Drawing.Size(538, 330);
       this.snapshotsTabPage.TabIndex = 2;
       this.snapshotsTabPage.Text = "Snapshots";
@@ -225,6 +234,6 @@
       // snapshotsView
       // 
-      this.snapshotsView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
-            | System.Windows.Forms.AnchorStyles.Left) 
+      this.snapshotsView.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.snapshotsView.Caption = "RunCollection View";
@@ -233,5 +242,5 @@
       this.snapshotsView.Name = "snapshotsView";
       this.snapshotsView.ReadOnly = false;
-      this.snapshotsView.Size = new System.Drawing.Size(409, 317);
+      this.snapshotsView.Size = new System.Drawing.Size(526, 317);
       this.snapshotsView.TabIndex = 0;
       // 
@@ -241,5 +250,5 @@
       this.runsTabPage.Location = new System.Drawing.Point(4, 22);
       this.runsTabPage.Name = "runsTabPage";
-      this.runsTabPage.Size = new System.Drawing.Size(421, 330);
+      this.runsTabPage.Size = new System.Drawing.Size(538, 330);
       this.runsTabPage.TabIndex = 3;
       this.runsTabPage.Text = "Runs";
@@ -248,6 +257,6 @@
       // runsView
       // 
-      this.runsView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
-            | System.Windows.Forms.AnchorStyles.Left) 
+      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 View";
@@ -256,5 +265,5 @@
       this.runsView.Name = "runsView";
       this.runsView.ReadOnly = false;
-      this.runsView.Size = new System.Drawing.Size(409, 317);
+      this.runsView.Size = new System.Drawing.Size(526, 317);
       this.runsView.TabIndex = 1;
       // 
@@ -272,5 +281,5 @@
       this.snapshotButton.Name = "snapshotButton";
       this.snapshotButton.Size = new System.Drawing.Size(24, 24);
-      this.snapshotButton.TabIndex = 20;
+      this.snapshotButton.TabIndex = 13;
       this.snapshotButton.Text = "Snapshot";
       this.snapshotButton.UseVisualStyleBackColor = true;
@@ -285,10 +294,10 @@
       this.Controls.Add(this.timeLimitLabel);
       this.Controls.Add(this.label1);
-      this.Controls.Add(this.snapShotsTextBox);
+      this.Controls.Add(this.snapshotsTextBox);
       this.Controls.Add(this.storeAlgorithmInEachSnapshotCheckBox);
       this.Name = "TimeLimitRunView";
-      this.Size = new System.Drawing.Size(432, 464);
+      this.Size = new System.Drawing.Size(549, 464);
       this.Controls.SetChildIndex(this.storeAlgorithmInEachSnapshotCheckBox, 0);
-      this.Controls.SetChildIndex(this.snapShotsTextBox, 0);
+      this.Controls.SetChildIndex(this.snapshotsTextBox, 0);
       this.Controls.SetChildIndex(this.label1, 0);
       this.Controls.SetChildIndex(this.timeLimitLabel, 0);
@@ -320,5 +329,5 @@
     private System.Windows.Forms.TextBox timeLimitTextBox;
     private System.Windows.Forms.Label label1;
-    private System.Windows.Forms.TextBox snapShotsTextBox;
+    private System.Windows.Forms.TextBox snapshotsTextBox;
     private System.Windows.Forms.CheckBox storeAlgorithmInEachSnapshotCheckBox;
     private MainForm.WindowsForms.DragOverTabControl tabControl;
Index: branches/RuntimeOptimizer/HeuristicLab.Optimization.Views/3.3/TimeLimitRunView.cs
===================================================================
--- branches/RuntimeOptimizer/HeuristicLab.Optimization.Views/3.3/TimeLimitRunView.cs	(revision 8956)
+++ branches/RuntimeOptimizer/HeuristicLab.Optimization.Views/3.3/TimeLimitRunView.cs	(revision 8961)
@@ -24,4 +24,5 @@
 using System.Linq;
 using System.Windows.Forms;
+using HeuristicLab.Collections;
 using HeuristicLab.Common;
 using HeuristicLab.Common.Resources;
@@ -60,4 +61,9 @@
     protected override void DeregisterContentEvents() {
       Content.PropertyChanged -= Content_PropertyChanged;
+      Content.SnapshotTimes.ItemsAdded -= Content_SnapshotTimes_Changed;
+      Content.SnapshotTimes.ItemsMoved -= Content_SnapshotTimes_Changed;
+      Content.SnapshotTimes.ItemsRemoved -= Content_SnapshotTimes_Changed;
+      Content.SnapshotTimes.ItemsReplaced -= Content_SnapshotTimes_Changed;
+      Content.SnapshotTimes.CollectionReset -= Content_SnapshotTimes_Changed;
       base.DeregisterContentEvents();
     }
@@ -65,4 +71,9 @@
       base.RegisterContentEvents();
       Content.PropertyChanged += Content_PropertyChanged;
+      Content.SnapshotTimes.ItemsAdded += Content_SnapshotTimes_Changed;
+      Content.SnapshotTimes.ItemsMoved += Content_SnapshotTimes_Changed;
+      Content.SnapshotTimes.ItemsRemoved += Content_SnapshotTimes_Changed;
+      Content.SnapshotTimes.ItemsReplaced += Content_SnapshotTimes_Changed;
+      Content.SnapshotTimes.CollectionReset += Content_SnapshotTimes_Changed;
     }
 
@@ -73,5 +84,5 @@
         if (Content == null) {
           timeLimitTextBox.Text = FormatTimeSpan(TimeSpan.FromSeconds(60));
-          snapShotsTextBox.Text = String.Empty;
+          snapshotsTextBox.Text = String.Empty;
           storeAlgorithmInEachSnapshotCheckBox.Checked = false;
           algorithmViewHost.Content = null;
@@ -80,5 +91,5 @@
         } else {
           timeLimitTextBox.Text = FormatTimeSpan(Content.MaximumExecutionTime);
-          snapShotsTextBox.Text = String.Join(" ; ", Content.SnapshotTimes);
+          snapshotsTextBox.Text = String.Join(" ; ", Content.SnapshotTimes.Select(x => FormatTimeSpan(x, true)));
           storeAlgorithmInEachSnapshotCheckBox.Checked = Content.StoreAlgorithmInEachSnapshot;
           algorithmViewHost.Content = Content.Algorithm;
@@ -92,5 +103,5 @@
       base.SetEnabledStateOfControls();
       timeLimitTextBox.Enabled = Content != null && !ReadOnly;
-      snapShotsTextBox.Enabled = Content != null && !ReadOnly;
+      snapshotsTextBox.Enabled = Content != null && !ReadOnly;
       storeAlgorithmInEachSnapshotCheckBox.Enabled = Content != null && !ReadOnly;
       newAlgorithmButton.Enabled = Content != null && !ReadOnly;
@@ -128,5 +139,15 @@
           } finally { SuppressEvents = false; }
           break;
-        case "SnapshotTimes": break;
+        case "SnapshotTimes":
+          SuppressEvents = true;
+          try {
+            snapshotsTextBox.Text = string.Join(" ; ", Content.SnapshotTimes.Select(x => FormatTimeSpan(x, true)));
+            Content.SnapshotTimes.ItemsAdded += Content_SnapshotTimes_Changed;
+            Content.SnapshotTimes.ItemsMoved += Content_SnapshotTimes_Changed;
+            Content.SnapshotTimes.ItemsRemoved += Content_SnapshotTimes_Changed;
+            Content.SnapshotTimes.ItemsReplaced += Content_SnapshotTimes_Changed;
+            Content.SnapshotTimes.CollectionReset += Content_SnapshotTimes_Changed;
+          } finally { SuppressEvents = false; }
+          break;
         case "StoreAlgorithmInEachSnapshot":
           SuppressEvents = true;
@@ -154,4 +175,11 @@
           break;
       }
+    }
+
+    private void Content_SnapshotTimes_Changed(object sender, EventArgs e) {
+      SuppressEvents = true;
+      try {
+        snapshotsTextBox.Text = string.Join(" ; ", Content.SnapshotTimes.Select(x => FormatTimeSpan(x, true)));
+      } finally { SuppressEvents = false; }
     }
     #endregion
@@ -160,26 +188,34 @@
     private void timeLimitTextBox_Validating(object sender, CancelEventArgs e) {
       if (SuppressEvents) return;
-      double value;
-      var text = timeLimitTextBox.Text.Trim();
-      var length = text.Length;
-      while (!double.TryParse(text.Substring(0, length), out value)) {
-        length--;
-        if (length <= 0) {
-          value = double.NaN;
-          break;
-        }
-      }
-      if (double.IsNaN(value)) {
+      TimeSpan ts;
+      if (!TryGetTimeSpanFromFormat(timeLimitTextBox.Text, out ts)) {
         e.Cancel = true;
         errorProvider.SetError(timeLimitTextBox, "Please enter a valid time span, e.g. 60, 20s, 45 seconds, 3h, 1 hour, 4 d, 2 days");
       } else {
-        TimeSpan ts;
-        if (length < text.Length) {
-          ts = GetTimeSpanFromFormat(value, text.Substring(length - 1, text.Length - (length - 1)).TrimStart());
-        } else ts = TimeSpan.FromSeconds(value);
         Content.MaximumExecutionTime = ts;
         e.Cancel = false;
         errorProvider.SetError(timeLimitTextBox, String.Empty);
       }
+    }
+
+    private void snapshotsTextBox_Validating(object sender, CancelEventArgs e) {
+      if (SuppressEvents) return;
+      e.Cancel = false;
+      errorProvider.SetError(timeLimitTextBox, String.Empty);
+
+      var tokens = snapshotsTextBox.Text.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries);
+
+      var snapshotTimes = new ObservableList<TimeSpan>();
+      foreach (var t in tokens) {
+        TimeSpan value;
+        if (!TryGetTimeSpanFromFormat(t, out value)) {
+          e.Cancel = true;
+          errorProvider.SetError(snapshotsTextBox, "Error parsing " + t + ", please provide a valid time span, e.g. 60, 20s, 45 seconds, 3h, 1 hour, 4 d, 2 days");
+          return;
+        } else {
+          snapshotTimes.Add(value);
+        }
+      }
+      Content.SnapshotTimes = snapshotTimes;
     }
 
@@ -258,23 +294,41 @@
     #endregion
 
-    private string FormatTimeSpan(TimeSpan ts) {
-      if (ts.TotalSeconds < 180) return ts.TotalSeconds + " seconds";
-      if (ts.TotalMinutes < 180) return ts.TotalMinutes + " minutes";
-      if (ts.TotalHours < 96) return ts.TotalHours + " hours";
-      return ts.TotalDays + " days";
-    }
-
-    private TimeSpan GetTimeSpanFromFormat(double value, string text) {
-      switch (text) {
-        case "d":
-        case "day":
-        case "days": return TimeSpan.FromDays(value);
-        case "h":
-        case "hour":
-        case "hours": return TimeSpan.FromHours(value);
-        case "min":
-        case "minute":
-        case "minutes": return TimeSpan.FromMinutes(value);
-        default: return TimeSpan.FromSeconds(value);
+    private string FormatTimeSpan(TimeSpan ts, bool abbrevUnit = false) {
+      if (ts.TotalSeconds < 180) return ts.TotalSeconds + (abbrevUnit ? "s" : " seconds");
+      if (ts.TotalMinutes < 180) return ts.TotalMinutes + (abbrevUnit ? "min" : " minutes");
+      if (ts.TotalHours < 96) return ts.TotalHours + (abbrevUnit ? "h" : " hours");
+      return ts.TotalDays + (abbrevUnit ? "d" : " days");
+    }
+
+    private bool TryGetTimeSpanFromFormat(string text, out TimeSpan result) {
+      double value;
+      text = text.Trim();
+      var length = text.Length;
+      while (!double.TryParse(text.Substring(0, length), out value)) {
+        length--;
+        if (length <= 0) {
+          value = double.NaN;
+          break;
+        }
+      }
+      if (double.IsNaN(value)) {
+        result = TimeSpan.Zero;
+        return false;
+      } else {
+        var remaining = String.Empty;
+        if (length < text.Length) remaining = text.Substring(length, text.Length - length);
+        switch (remaining.Trim()) {
+          case "d":
+          case "day":
+          case "days": result = TimeSpan.FromDays(value); break;
+          case "h":
+          case "hour":
+          case "hours": result = TimeSpan.FromHours(value); break;
+          case "min":
+          case "minute":
+          case "minutes": result = TimeSpan.FromMinutes(value); break;
+          default: result = TimeSpan.FromSeconds(value); break;
+        }
+        return true;
       }
     }
Index: branches/RuntimeOptimizer/HeuristicLab.Optimization/3.3/MetaOptimizers/TimeLimitRun.cs
===================================================================
--- branches/RuntimeOptimizer/HeuristicLab.Optimization/3.3/MetaOptimizers/TimeLimitRun.cs	(revision 8956)
+++ branches/RuntimeOptimizer/HeuristicLab.Optimization/3.3/MetaOptimizers/TimeLimitRun.cs	(revision 8961)
@@ -78,6 +78,6 @@
     private int snapshotTimesIndex;
     [Storable]
-    private ObservableList<double> snapshotTimes;
-    public ObservableList<double> SnapshotTimes {
+    private ObservableList<TimeSpan> snapshotTimes;
+    public ObservableList<TimeSpan> SnapshotTimes {
       get { return snapshotTimes; }
       set {
@@ -170,5 +170,5 @@
       : base(original, cloner) {
       maximumExecutionTime = original.maximumExecutionTime;
-      snapshotTimes = new ObservableList<double>(original.snapshotTimes);
+      snapshotTimes = new ObservableList<TimeSpan>(original.snapshotTimes);
       snapshotTimesIndex = original.snapshotTimesIndex;
       snapshots = cloner.Clone(original.snapshots);
@@ -200,8 +200,8 @@
       description = ItemDescription;
       maximumExecutionTime = TimeSpan.FromMinutes(1);
-      snapshotTimes = new ObservableList<double>(new[] {
-          TimeSpan.FromSeconds(5).TotalMilliseconds,
-          TimeSpan.FromSeconds(10).TotalMilliseconds,
-          TimeSpan.FromSeconds(30).TotalMilliseconds });
+      snapshotTimes = new ObservableList<TimeSpan>(new[] {
+          TimeSpan.FromSeconds(5),
+          TimeSpan.FromSeconds(10),
+          TimeSpan.FromSeconds(30) });
       snapshotTimesIndex = 0;
       snapTimer = new Timer() {
@@ -223,8 +223,8 @@
       description = ItemDescription;
       maximumExecutionTime = TimeSpan.FromMinutes(1);
-      snapshotTimes = new ObservableList<double>(new[] {
-          TimeSpan.FromSeconds(5).TotalMilliseconds,
-          TimeSpan.FromSeconds(10).TotalMilliseconds,
-          TimeSpan.FromSeconds(30).TotalMilliseconds });
+      snapshotTimes = new ObservableList<TimeSpan>(new[] {
+          TimeSpan.FromSeconds(5),
+          TimeSpan.FromSeconds(10),
+          TimeSpan.FromSeconds(30) });
       snapshotTimesIndex = 0;
       snapTimer = new Timer() {
@@ -245,8 +245,8 @@
       : base(name, description) {
       maximumExecutionTime = TimeSpan.FromMinutes(1);
-      snapshotTimes = new ObservableList<double>(new[] {
-          TimeSpan.FromSeconds(5).TotalMilliseconds,
-          TimeSpan.FromSeconds(10).TotalMilliseconds,
-          TimeSpan.FromSeconds(30).TotalMilliseconds });
+      snapshotTimes = new ObservableList<TimeSpan>(new[] {
+          TimeSpan.FromSeconds(5),
+          TimeSpan.FromSeconds(10),
+          TimeSpan.FromSeconds(30) });
       snapshotTimesIndex = 0;
       snapTimer = new Timer() {
@@ -320,5 +320,5 @@
           var execTime = ExecutionTime;
           if (snapshotTimesIndex < SnapshotTimes.Count &&
-              SnapshotTimes[snapshotTimesIndex] <= execTime.TotalMilliseconds) {
+              SnapshotTimes[snapshotTimesIndex] <= execTime) {
             DoSnapshot();
             snapshotTimesIndex++;
@@ -345,5 +345,5 @@
     private void FindNextSnapshotTimeIndex(TimeSpan reference) {
       var index = 0;
-      while (index < snapshotTimes.Count && (snapshotTimes[index] - reference.TotalMilliseconds) <= 0) {
+      while (index < snapshotTimes.Count && snapshotTimes[index] <= reference) {
         index++;
       };
