Index: /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/JobDto.cs
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/JobDto.cs	(revision 4143)
+++ /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/JobDto.cs	(revision 4144)
@@ -82,6 +82,4 @@
     public ProjectDto Project { get; set; }
 
-    
-
     public override string ToString() {
       return base.ToString() + "State: " + State + ", [Ressource : " + Client + " ] , DateCreated: " + DateCreated + ", DateCalculated: " + DateCalculated +
Index: /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/HeuristicLab.Hive.Experiment.Views-3.3.csproj
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/HeuristicLab.Hive.Experiment.Views-3.3.csproj	(revision 4143)
+++ /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/HeuristicLab.Hive.Experiment.Views-3.3.csproj	(revision 4144)
@@ -67,7 +67,5 @@
       <HintPath>..\..\..\..\..\..\..\..\..\Programme\HeuristicLab 3.3\HeuristicLab.Core-3.3.dll</HintPath>
     </Reference>
-    <Reference Include="HeuristicLab.Core.Views-3.3">
-      <HintPath>..\..\..\..\..\..\..\..\..\Programme\HeuristicLab 3.3\HeuristicLab.Core.Views-3.3.dll</HintPath>
-    </Reference>
+    <Reference Include="HeuristicLab.Core.Views-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL" />
     <Reference Include="HeuristicLab.Data-3.3">
       <HintPath>..\..\..\..\..\..\..\..\..\Programme\HeuristicLab 3.3\HeuristicLab.Data-3.3.dll</HintPath>
Index: /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/HiveExperimentView.Designer.cs
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/HiveExperimentView.Designer.cs	(revision 4143)
+++ /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/HiveExperimentView.Designer.cs	(revision 4144)
@@ -48,8 +48,8 @@
       this.tabControl = new System.Windows.Forms.TabControl();
       this.experimentTabPage = new System.Windows.Forms.TabPage();
+      this.openExperimentButton = new System.Windows.Forms.Button();
+      this.newExperimentButton = new System.Windows.Forms.Button();
       this.experimentNamedItemView = new HeuristicLab.Core.Views.NamedItemView();
-      this.newExperimentButton = new System.Windows.Forms.Button();
-      this.openExperimentButton = new System.Windows.Forms.Button();
-      this.loadExperimentButton = new System.Windows.Forms.Button();
+      this.viewExperimentButton = new System.Windows.Forms.Button();
       this.hiveStatusTabPage = new System.Windows.Forms.TabPage();
       this.jobListView = new HeuristicLab.Hive.Experiment.Views.JobItemListView();
@@ -68,4 +68,6 @@
       this.disconnectButton = new System.Windows.Forms.Button();
       this.reconnectButton = new System.Windows.Forms.Button();
+      this.runsTabPage = new System.Windows.Forms.TabPage();
+      this.runCollectionView = new HeuristicLab.Optimization.Views.RunCollectionView();
       ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
       this.tabControl.SuspendLayout();
@@ -73,4 +75,5 @@
       this.hiveStatusTabPage.SuspendLayout();
       this.logTabPage.SuspendLayout();
+      this.runsTabPage.SuspendLayout();
       this.SuspendLayout();
       // 
@@ -92,4 +95,5 @@
       this.tabControl.Controls.Add(this.experimentTabPage);
       this.tabControl.Controls.Add(this.hiveStatusTabPage);
+      this.tabControl.Controls.Add(this.runsTabPage);
       this.tabControl.Controls.Add(this.logTabPage);
       this.tabControl.Location = new System.Drawing.Point(0, 99);
@@ -101,8 +105,8 @@
       // experimentTabPage
       // 
+      this.experimentTabPage.Controls.Add(this.openExperimentButton);
+      this.experimentTabPage.Controls.Add(this.newExperimentButton);
       this.experimentTabPage.Controls.Add(this.experimentNamedItemView);
-      this.experimentTabPage.Controls.Add(this.newExperimentButton);
-      this.experimentTabPage.Controls.Add(this.openExperimentButton);
-      this.experimentTabPage.Controls.Add(this.loadExperimentButton);
+      this.experimentTabPage.Controls.Add(this.viewExperimentButton);
       this.experimentTabPage.Location = new System.Drawing.Point(4, 22);
       this.experimentTabPage.Name = "experimentTabPage";
@@ -113,4 +117,26 @@
       this.experimentTabPage.UseVisualStyleBackColor = true;
       // 
+      // openExperimentButton
+      // 
+      this.openExperimentButton.Image = ((System.Drawing.Image)(resources.GetObject("openExperimentButton.Image")));
+      this.openExperimentButton.Location = new System.Drawing.Point(36, 6);
+      this.openExperimentButton.Name = "openExperimentButton";
+      this.openExperimentButton.Size = new System.Drawing.Size(24, 24);
+      this.openExperimentButton.TabIndex = 5;
+      this.toolTip.SetToolTip(this.openExperimentButton, "Open Experiment");
+      this.openExperimentButton.UseVisualStyleBackColor = true;
+      this.openExperimentButton.Click += new System.EventHandler(this.openExperimentButton_Click);
+      // 
+      // newExperimentButton
+      // 
+      this.newExperimentButton.Image = ((System.Drawing.Image)(resources.GetObject("newExperimentButton.Image")));
+      this.newExperimentButton.Location = new System.Drawing.Point(6, 6);
+      this.newExperimentButton.Name = "newExperimentButton";
+      this.newExperimentButton.Size = new System.Drawing.Size(24, 24);
+      this.newExperimentButton.TabIndex = 4;
+      this.toolTip.SetToolTip(this.newExperimentButton, "New Experiment");
+      this.newExperimentButton.UseVisualStyleBackColor = true;
+      this.newExperimentButton.Click += new System.EventHandler(this.newExperimentButton_Click);
+      // 
       // experimentNamedItemView
       // 
@@ -119,39 +145,21 @@
       this.experimentNamedItemView.Caption = "NamedItem View";
       this.experimentNamedItemView.Content = null;
-      this.experimentNamedItemView.Location = new System.Drawing.Point(144, 7);
+      this.experimentNamedItemView.Location = new System.Drawing.Point(3, 36);
       this.experimentNamedItemView.Name = "experimentNamedItemView";
       this.experimentNamedItemView.ReadOnly = false;
-      this.experimentNamedItemView.Size = new System.Drawing.Size(577, 52);
+      this.experimentNamedItemView.Size = new System.Drawing.Size(721, 52);
       this.experimentNamedItemView.TabIndex = 3;
       // 
-      // newExperimentButton
-      // 
-      this.newExperimentButton.Location = new System.Drawing.Point(6, 6);
-      this.newExperimentButton.Name = "newExperimentButton";
-      this.newExperimentButton.Size = new System.Drawing.Size(131, 32);
-      this.newExperimentButton.TabIndex = 2;
-      this.newExperimentButton.Text = "New Experiment";
-      this.newExperimentButton.UseVisualStyleBackColor = true;
-      this.newExperimentButton.Click += new System.EventHandler(this.newExperimentButton_Click);
-      // 
-      // openExperimentButton
-      // 
-      this.openExperimentButton.Location = new System.Drawing.Point(6, 82);
-      this.openExperimentButton.Name = "openExperimentButton";
-      this.openExperimentButton.Size = new System.Drawing.Size(131, 32);
-      this.openExperimentButton.TabIndex = 1;
-      this.openExperimentButton.Text = "Open Experiment";
-      this.openExperimentButton.UseVisualStyleBackColor = true;
-      this.openExperimentButton.Click += new System.EventHandler(this.openExperimentButton_Click);
-      // 
-      // loadExperimentButton
-      // 
-      this.loadExperimentButton.Location = new System.Drawing.Point(6, 44);
-      this.loadExperimentButton.Name = "loadExperimentButton";
-      this.loadExperimentButton.Size = new System.Drawing.Size(131, 32);
-      this.loadExperimentButton.TabIndex = 0;
-      this.loadExperimentButton.Text = "Load Experiment";
-      this.loadExperimentButton.UseVisualStyleBackColor = true;
-      this.loadExperimentButton.Click += new System.EventHandler(this.loadExperimentButton_Click);
+      // viewExperimentButton
+      // 
+      this.viewExperimentButton.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.viewExperimentButton.Location = new System.Drawing.Point(0, 94);
+      this.viewExperimentButton.Name = "viewExperimentButton";
+      this.viewExperimentButton.Size = new System.Drawing.Size(727, 23);
+      this.viewExperimentButton.TabIndex = 1;
+      this.viewExperimentButton.Text = "&Show Experiment";
+      this.viewExperimentButton.UseVisualStyleBackColor = true;
+      this.viewExperimentButton.Click += new System.EventHandler(this.showExperimentButton_Click);
       // 
       // hiveStatusTabPage
@@ -335,4 +343,27 @@
       this.reconnectButton.UseVisualStyleBackColor = true;
       this.reconnectButton.Click += new System.EventHandler(this.reconnectButton_Click);
+      // 
+      // runsTabPage
+      // 
+      this.runsTabPage.Controls.Add(this.runCollectionView);
+      this.runsTabPage.Location = new System.Drawing.Point(4, 22);
+      this.runsTabPage.Name = "runsTabPage";
+      this.runsTabPage.Size = new System.Drawing.Size(727, 369);
+      this.runsTabPage.TabIndex = 4;
+      this.runsTabPage.Text = "Runs";
+      this.runsTabPage.UseVisualStyleBackColor = true;
+      // 
+      // runCollectionView
+      // 
+      this.runCollectionView.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.runCollectionView.Caption = "RunCollection View";
+      this.runCollectionView.Content = null;
+      this.runCollectionView.Location = new System.Drawing.Point(0, 3);
+      this.runCollectionView.Name = "runCollectionView";
+      this.runCollectionView.ReadOnly = false;
+      this.runCollectionView.Size = new System.Drawing.Size(727, 366);
+      this.runCollectionView.TabIndex = 0;
       // 
       // HiveExperimentView
@@ -363,8 +394,4 @@
       this.Controls.SetChildIndex(this.startButton, 0);
       this.Controls.SetChildIndex(this.tabControl, 0);
-      this.Controls.SetChildIndex(this.nameLabel, 0);
-      this.Controls.SetChildIndex(this.descriptionLabel, 0);
-      this.Controls.SetChildIndex(this.nameTextBox, 0);
-      this.Controls.SetChildIndex(this.descriptionTextBox, 0);
       this.Controls.SetChildIndex(this.resourceIdsLabel, 0);
       this.Controls.SetChildIndex(this.serverUrlTextBox, 0);
@@ -372,4 +399,8 @@
       this.Controls.SetChildIndex(this.disconnectButton, 0);
       this.Controls.SetChildIndex(this.reconnectButton, 0);
+      this.Controls.SetChildIndex(this.nameLabel, 0);
+      this.Controls.SetChildIndex(this.descriptionLabel, 0);
+      this.Controls.SetChildIndex(this.nameTextBox, 0);
+      this.Controls.SetChildIndex(this.descriptionTextBox, 0);
       ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
       this.tabControl.ResumeLayout(false);
@@ -377,4 +408,5 @@
       this.hiveStatusTabPage.ResumeLayout(false);
       this.logTabPage.ResumeLayout(false);
+      this.runsTabPage.ResumeLayout(false);
       this.ResumeLayout(false);
       this.PerformLayout();
@@ -396,7 +428,5 @@
     private System.Windows.Forms.TextBox serverUrlTextBox;
     private System.Windows.Forms.TextBox resourceIdsTextBox;
-    private System.Windows.Forms.Button newExperimentButton;
-    private System.Windows.Forms.Button openExperimentButton;
-    private System.Windows.Forms.Button loadExperimentButton;
+    private System.Windows.Forms.Button viewExperimentButton;
     private Core.Views.NamedItemView experimentNamedItemView;
     private System.Windows.Forms.TabPage logTabPage;
@@ -405,4 +435,8 @@
     private System.Windows.Forms.Button disconnectButton;
     private System.Windows.Forms.Button reconnectButton;
+    protected System.Windows.Forms.Button openExperimentButton;
+    protected System.Windows.Forms.Button newExperimentButton;
+    private System.Windows.Forms.TabPage runsTabPage;
+    private Optimization.Views.RunCollectionView runCollectionView;
 
   }
Index: /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/HiveExperimentView.cs
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/HiveExperimentView.cs	(revision 4143)
+++ /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/HiveExperimentView.cs	(revision 4144)
@@ -86,4 +86,5 @@
         logView.Content = Content.Log;
         jobListView.Content = Content.JobItems;
+        Content_ExperimentChanged(this, EventArgs.Empty);
       }
     }
@@ -93,5 +94,5 @@
       executionTimeTextBox.Enabled = Content != null;
       if (Content != null) {
-        openExperimentButton.Enabled = Content.Experiment != null;
+        viewExperimentButton.Enabled = Content.Experiment != null;
         experimentNamedItemView.Locked = Content.Experiment == null;
       }
@@ -107,4 +108,5 @@
       experimentNamedItemView.Content = Content.Experiment;
       if (Content.Experiment != null) {
+        runCollectionView.Content = Content.Experiment.Runs;
         Content.Prepare();
       }
@@ -210,5 +212,5 @@
     }
 
-    private void loadExperimentButton_Click(object sender, EventArgs e) {
+    private void openExperimentButton_Click(object sender, EventArgs e) {
       OpenFileDialog openFileDialog = new OpenFileDialog();
       openFileDialog.Title = "Open Experimenter";
@@ -223,5 +225,5 @@
     }
 
-    private void openExperimentButton_Click(object sender, EventArgs e) {
+    private void showExperimentButton_Click(object sender, EventArgs e) {
       MainFormManager.MainForm.ShowContent(Content.Experiment);
     }
Index: /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/HiveExperimentView.resx
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/HiveExperimentView.resx	(revision 4143)
+++ /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/HiveExperimentView.resx	(revision 4144)
@@ -121,16 +121,45 @@
     <value>102, 17</value>
   </metadata>
-  <metadata name="errorProvider.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>102, 17</value>
-  </metadata>
   <metadata name="toolTip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
     <value>17, 17</value>
   </metadata>
   <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="openExperimentButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALDQAA
+        Cw0B7QfALAAAAn9JREFUOE+lk2tI01EYxhf0oU8WqVEIRpaIBWJgSPUhROmippS3QkkTylsXDMW8ts3b
+        1G06daVibuqaOq0sxbBCKBSJ0PJCialZUFSKqaGSt1//TbIsww8deOBwznl+5zkv71kHiP5rGAFrKb1Q
+        5ypR6bmaVU6m2kCiXJv007Om2XgwJEaNT4QiyDi/GF9mKRVgsWkav+CYQkR1utwAQfypphqZ4l/JIhOL
+        jvtGKfCOyDMB6O/WMjNea9L3MT1zIxoM5QrqdWnS1SA+kUq8w1V4hhUgqq1QMj1WtcK88KmIud5oqsqy
+        qCzOQFMopSQvhRvyBApkcQLzV91E1docpr9ol29eFMz0J0Bv2Kr6C3CrVMa3jyWm2EZzc12OSQ8M2TTo
+        ZdytzMCgSUVfIqFcfY2bqiSKlQmoc+JNaUSVJRlMvsvHGHuoVUx9lZKFIQkMp63UW2FtMBH6YuBVFF01
+        /lwO9aoQadSpTAxkwXs596oVtD+ULx36/Qkvg6HDl/k2D2YeufCmwoELZ45MCIA9olKVmK+vJQy3JVOv
+        l7M4KIae8CVAV6hgPMV8uxczLYeZbDrIaN1eJBG2nHazyDN1cZEymdHueG7rcuh8KiTpixYA56AziMVn
+        J5h9coyp5kOM1TvxudqejvRNBHrY4GRnZmcCqLMT6GlJ4Y4uGwZS4IUQ97kfs62eTD12YbzBmRGDAx+0
+        u+iVmyMO24njbqvG5VbOz4yjtjyL3vuRdOSKltUuX0+LbAON0o3UJFmiibPi+pXtBLrvWHR2tHZfBuSm
+        xZIrPk9mfAiJlwKMleWsvxsnj+7H9YAD+xxssbexwnqbBVs2m7HV3GxlI631E9fa/wGRpaRpa3TTbQAA
+        AABJRU5ErkJggg==
+</value>
+  </data>
+  <data name="newExperimentButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALDQAA
+        Cw0B7QfALAAAAaJJREFUOE+Nkk1LAkEYx5egU9Sla9AX6NKhLlH3IujSoXtBn0EI+gB5qVBIKyIMtEDo
+        BUIhK6qDSUj4gqYloilmvqa5rrr/Zlx3dkU0B/48z87O/zfzPDMcAE7SOg8sB2AkqYdIXIoAK4LyX17X
+        HiVzYPhC0NBUB1yR6Jfy5lx59rQXRAKEhl6Y4YhMnXOSmUDywRlYHV5YbG6YLp1UW2pgEyBoSdARbdNP
+        OszSSQxEZnkO2D+7w/TCWhtEOoGfqyE5KmKnVf/HIHBLcn4SiI21oGQPkw32J68M0VKvBKgvulgJdEey
+        O+sJNhlg9/i6aZalAEpz98xwQADhAaWJ2GOAWr0BCpFBCoCeIjOxgdCIHlYCiI8DGQ1QMjKzKIooVwSk
+        MuUmYGp+lf5rlcDeArhD6wMzqZOqUEe2UEE0WegNMFgcHYB6Q0SxXEUiXcJbNNsboD+xdwAqfA3p3C8i
+        n3l4QuneAFqfetDG5X94xFJFBCIZuHzJ/gHqxoVjObwGv/DojvcPUDfO9/4NpyeBm+dofwD5vrvFrtco
+        3zFd8J/oO/gDpYIVhUFyWDsAAAAASUVORK5CYII=
+</value>
+  </data>
   <data name="startButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
-        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALBgAA
-        CwYBZDTpJAAAALZJREFUOE9j/P//PwNFAGQAOi7bn+2GTRybGIZmkKKEGRH/iTUEpwGWZfpEGYLVgKgp
+        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALAgAA
+        CwIBm8luNgAAALZJREFUOE9j/P//PwNFAGQAOi7bn+2GTRybGIZmkKKEGRH/iTUEpwGWZfpEGYLVgKgp
         Qf833Fr8nxhDsBoQPMEbZDtRhmA1wKfLGWwACEctCsDrEqwGODZb/M/YEAvWbNus/1+nWOG/RBo3iFZD
         jwmsBpjX6KFo5k9gwaoZnIawxa1eqTLcZnyacRqgki8FdjYhzTgNkM4QJEozTgNEkjlx+pmoQMQW2rjy
@@ -141,6 +170,6 @@
     <value>
         iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
-        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALBgAA
-        CwYBZDTpJAAAAXJJREFUOE+tkj1IQmEYhWsoaIi2xmhpiYSgKFoiCMLJJYSEJiEI0mgIyqjA6vaLUKIU
+        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALAgAA
+        CwIBm8luNgAAAXJJREFUOE+tkj1IQmEYhWsoaIi2xmhpiYSgKFoiCMLJJYSEJiEI0mgIyqjA6vaLUKIU
         iZlJKKUoWEbZDzVYCYlQYVxcNDIoRND8ud7idD83C27g7YNvPM8573nfcgBlgh4BCPmCxIX0Qtx/ATTu
         Lyy78ph3ZKC2pTBlSWB86w2jhleMrD9jWB9N/jQsSkDEj5FPPERZ+J7yOL5j4PYzsPsYGL1piKR7nL64
@@ -154,6 +183,6 @@
     <value>
         iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
-        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALBgAA
-        CwYBZDTpJAAAAYNJREFUOE9j/P//PwNFAGQAJZgizWDXI9veu/nvfxhuW/vtf+OKz/9rF7//XzHv1f+S
+        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALAgAA
+        CwIBm8luNgAAAYNJREFUOE9j/P//PwNFAGQAJZgizWDXI9veu/nvfxhuW/vtf+OKz/9rF7//XzHv1f+S
         2c//F0x//L901mOgFoSrUQzo2vDr/6aT3/6vPPTl/4I9n/5ffvDzf+/ad/+bl74BG5I3/cV/3dBVuA0A
         2bri4Jf/83Z9+n/ryS+Qwv8NS978L5378n/O1Of/k3qf/Vf1W4TbAJCT5+z49P/hyx9gzSBQMvvl/6wp
@@ -167,6 +196,6 @@
     <value>
         iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
-        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALBgAA
-        CwYBZDTpJAAAAMZJREFUOE9j/P//PwNFAGQAJZgizWDXU2I7VgN6N//937Xh1/+8qY8+gRSg89EtxHAB
+        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALAgAA
+        CwIBm8luNgAAAMZJREFUOE9j/P//PwNFAGQAJZgizWDXU2I7VgN6N//937Xh1/+8qY8+gRSg89EtxHAB
         SPPVh3/+64auAqr9z4DOJ2hA29pv/289/f1f1W8R2AB0PkEDGld8/n/54e//cm6zwAag8wkaULv4/f8T
         13//F7ObBDYAnU/QgIp5r/7vvvDzP79ZN9gAdD5BA0pmP/+//uTP/5wGrWAD0PkEDSiY/vj/gj2f/7Pq
@@ -177,6 +206,6 @@
     <value>
         iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
-        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALBQAA
-        CwUByY3ISQAAAMZJREFUOE9j/P//PwNFAGQAJZgizWDXU2I7VgN6N//937Xh1/+8qY8+gRSg89EtxHAB
+        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALAQAA
+        CwEBNnBPWwAAAMZJREFUOE9j/P//PwNFAGQAJZgizWDXU2I7VgN6N//937Xh1/+8qY8+gRSg89EtxHAB
         SPPVh3/+64auAqr9z4DOJ2hA29pv/289/f1f1W8R2AB0PkEDGld8/n/54e//cm6zwAag8wkaULv4/f8T
         13//F7ObBDYAnU/QgIp5r/7vvvDzP79ZN9gAdD5BA0pmP/+//uTP/5wGrWAD0PkEDSiY/vj/gj2f/7Pq
@@ -187,6 +216,6 @@
     <value>
         iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
-        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALBAAA
-        CwQBG8oqrQAAAMZJREFUOE9j/P//PwNFAGQAJZgizWDXU2I7VgN6N//937Xh1/+8qY8+gRSg89EtxHAB
+        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALAAAA
+        CwAB5DetvwAAAMZJREFUOE9j/P//PwNFAGQAJZgizWDXU2I7VgN6N//937Xh1/+8qY8+gRSg89EtxHAB
         SPPVh3/+64auAqr9z4DOJ2hA29pv/289/f1f1W8R2AB0PkEDGld8/n/54e//cm6zwAag8wkaULv4/f8T
         13//F7ObBDYAnU/QgIp5r/7vvvDzP79ZN9gAdD5BA0pmP/+//uTP/5wGrWAD0PkEDSiY/vj/gj2f/7Pq
Index: /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/JobItemView.Designer.cs
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/JobItemView.Designer.cs	(revision 4143)
+++ /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/JobItemView.Designer.cs	(revision 4144)
@@ -34,5 +34,5 @@
       this.coresNeededTextBox = new System.Windows.Forms.TextBox();
       this.memoryNeededTextBox = new System.Windows.Forms.TextBox();
-      this.pluginsNeededTextBox = new System.Windows.Forms.TextBox();
+      this.exceptionTextBox = new System.Windows.Forms.TextBox();
       this.projectTextBox = new System.Windows.Forms.TextBox();
       this.percentageLabel = new System.Windows.Forms.Label();
@@ -42,7 +42,8 @@
       this.coresNeededLabel = new System.Windows.Forms.Label();
       this.memoryNeededLabel = new System.Windows.Forms.Label();
-      this.pluginsNeededLabel = new System.Windows.Forms.Label();
+      this.exceptionLabel = new System.Windows.Forms.Label();
       this.projectLabel = new System.Windows.Forms.Label();
       this.snapshotGroupBox = new System.Windows.Forms.GroupBox();
+      this.requestSnapshotButton = new System.Windows.Forms.Button();
       this.openSnapshotButton = new System.Windows.Forms.Button();
       this.snapshotTimeText = new System.Windows.Forms.TextBox();
@@ -56,7 +57,8 @@
       this.tabControl = new System.Windows.Forms.TabControl();
       this.detailsTabPage = new System.Windows.Forms.TabPage();
+      this.jobIdLabel = new System.Windows.Forms.Label();
+      this.jobIdTextBox = new System.Windows.Forms.TextBox();
       this.logTabPage = new System.Windows.Forms.TabPage();
       this.logView = new HeuristicLab.Core.Views.LogView();
-      this.requestSnapshotButton = new System.Windows.Forms.Button();
       this.snapshotGroupBox.SuspendLayout();
       this.jobStatusGroupBox.SuspendLayout();
@@ -78,5 +80,5 @@
       // 
       this.userIdLabel.AutoSize = true;
-      this.userIdLabel.Location = new System.Drawing.Point(3, 3);
+      this.userIdLabel.Location = new System.Drawing.Point(3, 28);
       this.userIdLabel.Name = "userIdLabel";
       this.userIdLabel.Size = new System.Drawing.Size(41, 13);
@@ -97,5 +99,5 @@
       this.userIdTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
                   | System.Windows.Forms.AnchorStyles.Right)));
-      this.userIdTextBox.Location = new System.Drawing.Point(91, 3);
+      this.userIdTextBox.Location = new System.Drawing.Point(91, 28);
       this.userIdTextBox.Name = "userIdTextBox";
       this.userIdTextBox.Size = new System.Drawing.Size(448, 20);
@@ -131,5 +133,5 @@
       this.priorityTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
                   | System.Windows.Forms.AnchorStyles.Right)));
-      this.priorityTextBox.Location = new System.Drawing.Point(91, 25);
+      this.priorityTextBox.Location = new System.Drawing.Point(91, 50);
       this.priorityTextBox.Name = "priorityTextBox";
       this.priorityTextBox.Size = new System.Drawing.Size(448, 20);
@@ -140,5 +142,5 @@
       this.coresNeededTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
                   | System.Windows.Forms.AnchorStyles.Right)));
-      this.coresNeededTextBox.Location = new System.Drawing.Point(91, 47);
+      this.coresNeededTextBox.Location = new System.Drawing.Point(91, 72);
       this.coresNeededTextBox.Name = "coresNeededTextBox";
       this.coresNeededTextBox.Size = new System.Drawing.Size(448, 20);
@@ -149,17 +151,17 @@
       this.memoryNeededTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
                   | System.Windows.Forms.AnchorStyles.Right)));
-      this.memoryNeededTextBox.Location = new System.Drawing.Point(91, 69);
+      this.memoryNeededTextBox.Location = new System.Drawing.Point(91, 94);
       this.memoryNeededTextBox.Name = "memoryNeededTextBox";
       this.memoryNeededTextBox.Size = new System.Drawing.Size(448, 20);
       this.memoryNeededTextBox.TabIndex = 9;
       // 
-      // pluginsNeededTextBox
-      // 
-      this.pluginsNeededTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
-                  | System.Windows.Forms.AnchorStyles.Right)));
-      this.pluginsNeededTextBox.Location = new System.Drawing.Point(91, 91);
-      this.pluginsNeededTextBox.Name = "pluginsNeededTextBox";
-      this.pluginsNeededTextBox.Size = new System.Drawing.Size(448, 20);
-      this.pluginsNeededTextBox.TabIndex = 10;
+      // exceptionTextBox
+      // 
+      this.exceptionTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.exceptionTextBox.Location = new System.Drawing.Point(91, 116);
+      this.exceptionTextBox.Name = "exceptionTextBox";
+      this.exceptionTextBox.Size = new System.Drawing.Size(448, 20);
+      this.exceptionTextBox.TabIndex = 10;
       // 
       // projectTextBox
@@ -167,5 +169,5 @@
       this.projectTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
                   | System.Windows.Forms.AnchorStyles.Right)));
-      this.projectTextBox.Location = new System.Drawing.Point(91, 113);
+      this.projectTextBox.Location = new System.Drawing.Point(91, 138);
       this.projectTextBox.Name = "projectTextBox";
       this.projectTextBox.Size = new System.Drawing.Size(448, 20);
@@ -202,5 +204,5 @@
       // 
       this.priorityLabel.AutoSize = true;
-      this.priorityLabel.Location = new System.Drawing.Point(3, 25);
+      this.priorityLabel.Location = new System.Drawing.Point(3, 50);
       this.priorityLabel.Name = "priorityLabel";
       this.priorityLabel.Size = new System.Drawing.Size(41, 13);
@@ -211,5 +213,5 @@
       // 
       this.coresNeededLabel.AutoSize = true;
-      this.coresNeededLabel.Location = new System.Drawing.Point(3, 47);
+      this.coresNeededLabel.Location = new System.Drawing.Point(3, 72);
       this.coresNeededLabel.Name = "coresNeededLabel";
       this.coresNeededLabel.Size = new System.Drawing.Size(75, 13);
@@ -220,5 +222,5 @@
       // 
       this.memoryNeededLabel.AutoSize = true;
-      this.memoryNeededLabel.Location = new System.Drawing.Point(3, 69);
+      this.memoryNeededLabel.Location = new System.Drawing.Point(3, 94);
       this.memoryNeededLabel.Name = "memoryNeededLabel";
       this.memoryNeededLabel.Size = new System.Drawing.Size(85, 13);
@@ -226,17 +228,17 @@
       this.memoryNeededLabel.Text = "MemoryNeeded:";
       // 
-      // pluginsNeededLabel
-      // 
-      this.pluginsNeededLabel.AutoSize = true;
-      this.pluginsNeededLabel.Location = new System.Drawing.Point(3, 91);
-      this.pluginsNeededLabel.Name = "pluginsNeededLabel";
-      this.pluginsNeededLabel.Size = new System.Drawing.Size(82, 13);
-      this.pluginsNeededLabel.TabIndex = 19;
-      this.pluginsNeededLabel.Text = "PluginsNeeded:";
+      // exceptionLabel
+      // 
+      this.exceptionLabel.AutoSize = true;
+      this.exceptionLabel.Location = new System.Drawing.Point(3, 116);
+      this.exceptionLabel.Name = "exceptionLabel";
+      this.exceptionLabel.Size = new System.Drawing.Size(57, 13);
+      this.exceptionLabel.TabIndex = 19;
+      this.exceptionLabel.Text = "Exception:";
       // 
       // projectLabel
       // 
       this.projectLabel.AutoSize = true;
-      this.projectLabel.Location = new System.Drawing.Point(3, 113);
+      this.projectLabel.Location = new System.Drawing.Point(3, 138);
       this.projectLabel.Name = "projectLabel";
       this.projectLabel.Size = new System.Drawing.Size(43, 13);
@@ -254,5 +256,5 @@
       this.snapshotGroupBox.Controls.Add(this.snapshotTimeLabel);
       this.snapshotGroupBox.Controls.Add(this.snapshotStatusLabel);
-      this.snapshotGroupBox.Location = new System.Drawing.Point(6, 279);
+      this.snapshotGroupBox.Location = new System.Drawing.Point(6, 304);
       this.snapshotGroupBox.Name = "snapshotGroupBox";
       this.snapshotGroupBox.Size = new System.Drawing.Size(533, 100);
@@ -260,4 +262,15 @@
       this.snapshotGroupBox.TabStop = false;
       this.snapshotGroupBox.Text = "Latest Snapshot";
+      // 
+      // requestSnapshotButton
+      // 
+      this.requestSnapshotButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+      this.requestSnapshotButton.Location = new System.Drawing.Point(307, 67);
+      this.requestSnapshotButton.Name = "requestSnapshotButton";
+      this.requestSnapshotButton.Size = new System.Drawing.Size(107, 26);
+      this.requestSnapshotButton.TabIndex = 26;
+      this.requestSnapshotButton.Text = "Request Snapshot";
+      this.requestSnapshotButton.UseVisualStyleBackColor = true;
+      this.requestSnapshotButton.Click += new System.EventHandler(this.requestSnapshotButton_Click);
       // 
       // openSnapshotButton
@@ -341,5 +354,5 @@
       this.jobStatusGroupBox.Controls.Add(this.dateCreatedLabel);
       this.jobStatusGroupBox.Controls.Add(this.dateFinishedLabel);
-      this.jobStatusGroupBox.Location = new System.Drawing.Point(6, 139);
+      this.jobStatusGroupBox.Location = new System.Drawing.Point(6, 164);
       this.jobStatusGroupBox.Name = "jobStatusGroupBox";
       this.jobStatusGroupBox.Size = new System.Drawing.Size(533, 134);
@@ -372,4 +385,6 @@
       // detailsTabPage
       // 
+      this.detailsTabPage.Controls.Add(this.jobIdLabel);
+      this.detailsTabPage.Controls.Add(this.jobIdTextBox);
       this.detailsTabPage.Controls.Add(this.userIdLabel);
       this.detailsTabPage.Controls.Add(this.jobStatusGroupBox);
@@ -379,8 +394,8 @@
       this.detailsTabPage.Controls.Add(this.projectLabel);
       this.detailsTabPage.Controls.Add(this.coresNeededTextBox);
-      this.detailsTabPage.Controls.Add(this.pluginsNeededLabel);
+      this.detailsTabPage.Controls.Add(this.exceptionLabel);
       this.detailsTabPage.Controls.Add(this.memoryNeededTextBox);
       this.detailsTabPage.Controls.Add(this.memoryNeededLabel);
-      this.detailsTabPage.Controls.Add(this.pluginsNeededTextBox);
+      this.detailsTabPage.Controls.Add(this.exceptionTextBox);
       this.detailsTabPage.Controls.Add(this.coresNeededLabel);
       this.detailsTabPage.Controls.Add(this.projectTextBox);
@@ -394,4 +409,22 @@
       this.detailsTabPage.UseVisualStyleBackColor = true;
       // 
+      // jobIdLabel
+      // 
+      this.jobIdLabel.AutoSize = true;
+      this.jobIdLabel.Location = new System.Drawing.Point(3, 6);
+      this.jobIdLabel.Name = "jobIdLabel";
+      this.jobIdLabel.Size = new System.Drawing.Size(36, 13);
+      this.jobIdLabel.TabIndex = 25;
+      this.jobIdLabel.Text = "JobId:";
+      // 
+      // jobIdTextBox
+      // 
+      this.jobIdTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.jobIdTextBox.Location = new System.Drawing.Point(91, 6);
+      this.jobIdTextBox.Name = "jobIdTextBox";
+      this.jobIdTextBox.Size = new System.Drawing.Size(448, 20);
+      this.jobIdTextBox.TabIndex = 26;
+      // 
       // logTabPage
       // 
@@ -417,15 +450,4 @@
       this.logView.Size = new System.Drawing.Size(536, 447);
       this.logView.TabIndex = 0;
-      // 
-      // requestSnapshotButton
-      // 
-      this.requestSnapshotButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
-      this.requestSnapshotButton.Location = new System.Drawing.Point(307, 67);
-      this.requestSnapshotButton.Name = "requestSnapshotButton";
-      this.requestSnapshotButton.Size = new System.Drawing.Size(107, 26);
-      this.requestSnapshotButton.TabIndex = 26;
-      this.requestSnapshotButton.Text = "Request Snapshot";
-      this.requestSnapshotButton.UseVisualStyleBackColor = true;
-      this.requestSnapshotButton.Click += new System.EventHandler(this.requestSnapshotButton_Click);
       // 
       // JobItemView
@@ -460,5 +482,5 @@
     private System.Windows.Forms.TextBox coresNeededTextBox;
     private System.Windows.Forms.TextBox memoryNeededTextBox;
-    private System.Windows.Forms.TextBox pluginsNeededTextBox;
+    private System.Windows.Forms.TextBox exceptionTextBox;
     private System.Windows.Forms.TextBox projectTextBox;
     private System.Windows.Forms.Label percentageLabel;
@@ -468,5 +490,5 @@
     private System.Windows.Forms.Label coresNeededLabel;
     private System.Windows.Forms.Label memoryNeededLabel;
-    private System.Windows.Forms.Label pluginsNeededLabel;
+    private System.Windows.Forms.Label exceptionLabel;
     private System.Windows.Forms.Label projectLabel;
     private System.Windows.Forms.GroupBox snapshotGroupBox;
@@ -485,4 +507,6 @@
     private Core.Views.LogView logView;
     private System.Windows.Forms.Button requestSnapshotButton;
+    private System.Windows.Forms.Label jobIdLabel;
+    private System.Windows.Forms.TextBox jobIdTextBox;
   }
 }
Index: /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/JobItemView.cs
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/JobItemView.cs	(revision 4143)
+++ /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/JobItemView.cs	(revision 4144)
@@ -59,4 +59,5 @@
         Invoke(new EventHandler(Content_JobDtoChanged), sender, e);
       } else {
+        this.jobIdTextBox.Text = Content.JobDto.Id.ToString();
         this.stateTextBox.Text = Content.JobDto.State.ToString();
         this.userIdTextBox.Text = Content.JobDto.UserId.ToString();
@@ -69,5 +70,5 @@
         this.coresNeededTextBox.Text = Content.JobDto.CoresNeeded.ToString();
         this.memoryNeededTextBox.Text = Content.JobDto.MemoryNeeded.ToString();
-        this.pluginsNeededTextBox.Text = string.Join(", ", Content.JobDto.PluginsNeeded.Select(x => x.Name + "-" + x.Version).ToArray());
+        this.exceptionTextBox.Text = Content.JobDto.Exception;
         this.projectTextBox.Text = Content.JobDto.Project != null ? Content.JobDto.Project.Name : "-";
       }
@@ -92,4 +93,5 @@
       base.SetEnabledStateOfControls();
       openSnapshotButton.Enabled = Content != null && Content.LatestSnapshot != null;
+      this.jobIdTextBox.ReadOnly = this.ReadOnly;
       this.stateTextBox.ReadOnly = this.ReadOnly;
       this.userIdTextBox.ReadOnly = this.ReadOnly;
@@ -101,5 +103,5 @@
       this.coresNeededTextBox.ReadOnly = this.ReadOnly;
       this.memoryNeededTextBox.ReadOnly = this.ReadOnly;
-      this.pluginsNeededTextBox.ReadOnly = this.ReadOnly;
+      this.exceptionTextBox.ReadOnly = this.ReadOnly;
       this.projectTextBox.ReadOnly = this.ReadOnly;
       this.snapshotStatusText.ReadOnly = this.ReadOnly;
Index: /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/HiveExperiment.cs
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/HiveExperiment.cs	(revision 4143)
+++ /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/HiveExperiment.cs	(revision 4144)
@@ -280,5 +280,6 @@
               StatusMessage = "Initial Snapshot",
               Success = true
-            }
+            },
+            Optimizer = optimizer
           };
           jobItems.Add(jobItem);
@@ -348,5 +349,5 @@
         return optimizers;
       } else {
-        return FlatOptimizerTree(null, experiment);
+        return FlatOptimizerTree(null, experiment, "");
       }
     }
@@ -361,21 +362,29 @@
     /// </summary>
     /// <returns>a dictionary mapping from the parent optimizer to the child optimizer</returns>
-    private IDictionary<IOptimizer, IOptimizer> FlatOptimizerTree(IOptimizer parent, IOptimizer optimizer) {
+    private IDictionary<IOptimizer, IOptimizer> FlatOptimizerTree(IOptimizer parent, IOptimizer optimizer, string prepend) {
       IDictionary<IOptimizer, IOptimizer> optimizers = new Dictionary<IOptimizer, IOptimizer>();
       if (optimizer is HeuristicLab.Optimization.Experiment) {
         HeuristicLab.Optimization.Experiment experiment = optimizer as HeuristicLab.Optimization.Experiment;
+        if (this.experiment != experiment) {
+          prepend += "Experiment/"; // don't prepend for top-level optimizers
+        }
         foreach (IOptimizer opt in experiment.Optimizers) {
-          AddRange(optimizers, FlatOptimizerTree(experiment, opt));
+          AddRange(optimizers, FlatOptimizerTree(experiment, opt, prepend));
         }
       } else if (optimizer is BatchRun) {
         BatchRun batchRun = optimizer as BatchRun;
+        prepend += "BatchRun/";
         for (int i = 0; i < batchRun.Repetitions; i++) {
           IOptimizer opt = (IOptimizer)batchRun.Algorithm.Clone();
-          AddRange(optimizers, FlatOptimizerTree(batchRun, opt));
+          opt.Name += " [" + i + "]";
+          IDictionary<IOptimizer, IOptimizer> batchOptimizers = FlatOptimizerTree(batchRun, opt, prepend);
+          AddRange(optimizers, batchOptimizers);
         }
       } else if (optimizer is EngineAlgorithm) {
+        optimizer.Name = prepend + optimizer.Name;
         optimizers.Add(optimizer, parent);
       } else {
         Logger.Warn("Optimizer of type " + optimizers.GetType().ToString() + " unknown");
+        optimizer.Name = prepend + optimizer.Name;
         optimizers.Add(optimizer, parent);
       }
@@ -398,5 +407,5 @@
           BatchRun batchRun = (BatchRun)parentOptimizer;
           if (newOptimizer is IAlgorithm) {
-            batchRun.Runs.Add(new Run((IAlgorithm)newOptimizer));
+            batchRun.Runs.Add(new Run(newOptimizer.Name, (IAlgorithm)newOptimizer) );
           } else {
             throw new NotSupportedException("Only IAlgorithm types supported");
@@ -461,22 +470,7 @@
           IExecutionEngineFacade executionEngineFacade = GetExecutionEngineFacade();
           IJob restoredObject = null;
+          IOptimizer originalOptimizer = pendingOptimizersByJobId[job.Id];
 
           do {
-            if (stopPending || !this.IsPollingResults) {
-              return;
-            }
-
-            ResponseObject<JobDto> response = executionEngineFacade.GetJobById(job.Id);
-            LogMessage("Response: " + response.StatusMessage + " (jobId: " + job.Id + ")");
-            GetJobItemById(job.Id).LogMessage("Response: " + response.StatusMessage);
-
-            UpdateJobItem(response.Obj);
-
-            if (response.Obj.State == State.Abort) {
-              // job is aborted, don't poll for results anymore
-              GetJobItemById(job.Id).LogMessage("Job successfully aborted");
-              return;
-            }
-
             // loop while 
             // 1. the user doesn't request an abort 
@@ -484,11 +478,36 @@
             // 3. no result for the job is available yet (response.Obj==null)
             // 4. the result that we get from the server is a snapshot and not the final result
+
+            if (stopPending || !this.IsPollingResults) {
+              return;
+            }
+
+            ResponseObject<JobDto> response = executionEngineFacade.GetJobById(job.Id);
+            LogMessage("Response: " + response.StatusMessage + " (jobId: " + job.Id + ")");
+            GetJobItemById(job.Id).LogMessage("Response: " + response.StatusMessage);
+
+            UpdateJobItem(response.Obj);
+
+            if (response.Obj.State == State.Abort) {
+              pendingOptimizersByJobId.Remove(job.Id);
+              parentOptimizersByPendingOptimizer.Remove(originalOptimizer);
+              GetJobItemById(job.Id).LogMessage("Job successfully aborted");
+              return;
+            }
+
+            if (response.Obj.State == State.Failed) {
+              pendingOptimizersByJobId.Remove(job.Id);
+              parentOptimizersByPendingOptimizer.Remove(originalOptimizer);
+              GetJobItemById(job.Id).LogMessage("Job failed with exception: " + response.Obj.Exception);
+              return;
+            }
+
             if (response.Success && response.Obj != null && response.Obj.State == State.Finished) {
               ResponseObject<SerializedJob> jobResponse = executionEngineFacade.GetLastSerializedResult(job.Id, false, false);
               restoredObject = XmlParser.Deserialize<IJob>(new MemoryStream(jobResponse.Obj.SerializedJobData));
               UpdateSnapshot(jobResponse);
+            } else {
+              Thread.Sleep(resultPollingIntervalMs);
             }
-
-            Thread.Sleep(resultPollingIntervalMs);
           } while (restoredObject == null || restoredObject.ExecutionState != Core.ExecutionState.Stopped);
 
@@ -496,5 +515,5 @@
           GetJobItemById(job.Id).LogMessage("Job finished");
           // job retrieved... replace the existing optimizers with the finished one
-          IOptimizer originalOptimizer = pendingOptimizersByJobId[job.Id];
+          
           IOptimizer restoredOptimizer = ((OptimizerJob)restoredObject).Optimizer;
           
Index: /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/JobItem.cs
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/JobItem.cs	(revision 4143)
+++ /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/JobItem.cs	(revision 4144)
@@ -10,4 +10,5 @@
 using HeuristicLab.Common;
 using System.Diagnostics;
+using HeuristicLab.Optimization;
 
 namespace HeuristicLab.Hive.Experiment {
@@ -19,8 +20,9 @@
       get {
         if (jobDto.State == State.Offline) return HeuristicLab.Common.Resources.VS2008ImageLibrary.ExecutablePrepared;
-        else if (jobDto.State == State.Idle) return HeuristicLab.Common.Resources.VS2008ImageLibrary.ExecutableStopped;
+        else if (jobDto.State == State.Idle) return HeuristicLab.Common.Resources.VS2008ImageLibrary.ExecutablePrepared;
         else if (jobDto.State == State.Calculating) return HeuristicLab.Common.Resources.VS2008ImageLibrary.ExecutableStarted;
-        else if (jobDto.State == State.Offline) return HeuristicLab.Common.Resources.VS2008ImageLibrary.ExecutableStopped;
         else if (jobDto.State == State.Abort) return HeuristicLab.Common.Resources.VS2008ImageLibrary.ExecutableStopped;
+        else if (jobDto.State == State.Failed) return HeuristicLab.Common.Resources.VS2008ImageLibrary.Error;
+        else if (jobDto.State == State.Finished) return HeuristicLab.Common.Resources.VS2008ImageLibrary.ExecutableStopped;
         else return HeuristicLab.Common.Resources.VS2008ImageLibrary.Event;
       }
@@ -65,4 +67,11 @@
       get { return log; }
     }
+
+    [Storable]
+    private IOptimizer optimizer;
+    public IOptimizer Optimizer {
+      get { return optimizer; }
+      set { this.optimizer = value; }
+    }
     
     public JobItem() {
@@ -72,5 +81,5 @@
     public override string ToString() {
       if (jobDto != null) {
-        return base.ToString() + " - " + jobDto.Id.ToString();
+        return optimizer.Name;
       } else {
         return base.ToString();
@@ -105,4 +114,5 @@
       clone.latestSnapshot = (ResponseObject<SerializedJob>)cloner.Clone(this.latestSnapshot);
       clone.log = (ILog)cloner.Clone(this.log);
+      clone.optimizer = (IOptimizer)cloner.Clone(this.optimizer);
       return clone;
     }
