Index: branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Views/3.4/ExperimentManager/GanttChart.Designer.cs
===================================================================
--- branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Views/3.4/ExperimentManager/GanttChart.Designer.cs	(revision 5597)
+++ branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Views/3.4/ExperimentManager/GanttChart.Designer.cs	(revision 5636)
@@ -1,3 +1,3 @@
-﻿namespace HeuristicLab.Clients.Hive.Views.ExperimentManager {
+﻿namespace HeuristicLab.Clients.Hive.Views {
   partial class GanttChart {
     /// <summary> 
@@ -44,4 +44,5 @@
       series1.ChartArea = "ChartArea1";
       series1.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.RangeBar;
+      series1.CustomProperties = "DrawingStyle=Cylinder";
       series1.IsVisibleInLegend = false;
       series1.Legend = "Legend";
Index: branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Views/3.4/ExperimentManager/GanttChart.cs
===================================================================
--- branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Views/3.4/ExperimentManager/GanttChart.cs	(revision 5597)
+++ branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Views/3.4/ExperimentManager/GanttChart.cs	(revision 5636)
@@ -2,11 +2,13 @@
 using System.Collections.Generic;
 using System.Drawing;
+using System.Linq;
 using System.Windows.Forms;
 using System.Windows.Forms.DataVisualization.Charting;
 
-namespace HeuristicLab.Clients.Hive.Views.ExperimentManager {
+namespace HeuristicLab.Clients.Hive.Views {
   public partial class GanttChart : UserControl {
 
     private IDictionary<string, Color> categories = new Dictionary<string, Color>();
+    private IDictionary<string, int> rowNames = new Dictionary<string, int>();
 
     public GanttChart() {
@@ -19,14 +21,23 @@
     }
 
-    public void AddData(int id, string category, DateTime start, DateTime end, string tooltip, bool showLabel = true) {
-      var point = CreateDataPoint(id, start, end, showLabel ? category : string.Empty, categories[category]);
+    public void AddData(string rowName, string category, DateTime start, DateTime end, string tooltip, bool showLabel = true) {
+      AddRowName(rowName);
+      var point = CreateDataPoint(rowNames[rowName], rowName, start, end, showLabel ? category : string.Empty, categories[category]);
       point.ToolTip = tooltip;
       chart.Series[0].Points.Add(point);
     }
 
-    private static DataPoint CreateDataPoint(double x, DateTime start, DateTime end, string text, Color color) {
+    private void AddRowName(string rowName) {
+      if (!rowNames.ContainsKey(rowName)) {
+        int nextId = rowNames.Count == 0 ? 1 : rowNames.Values.Max() + 1;
+        rowNames.Add(rowName, nextId);
+      }
+    }
+
+    private static DataPoint CreateDataPoint(double x, string axisLabel, DateTime start, DateTime end, string text, Color color) {
       var point = new DataPoint(x, new double[] { start.ToOADate(), end.ToOADate() });
       point.Color = color;
       point.Label = text;
+      point.AxisLabel = axisLabel;
       return point;
     }
@@ -36,4 +47,5 @@
       categories.Clear();
       chart.Legends[0].CustomItems.Clear();
+      rowNames.Clear();
     }
   }
Index: branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Views/3.4/ExperimentManager/HiveJobView.cs
===================================================================
--- branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Views/3.4/ExperimentManager/HiveJobView.cs	(revision 5597)
+++ branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Views/3.4/ExperimentManager/HiveJobView.cs	(revision 5636)
@@ -135,9 +135,9 @@
           this.exceptionTextBox.Text = Content.Job.CurrentStateLog.Exception;
           if (Content.OptimizerJob.ComputeInParallel) {
-            this.stateLogViewHost.Content = new ItemList<StateLogItemList>(
-                this.Content.ChildHiveJobs.Select(child => new StateLogItemList(child.Job.StateLog.Select(x => new StateLogItem(x)))
+            this.stateLogViewHost.Content = new ItemList<StateLogList>(
+                this.Content.ChildHiveJobs.Select(child => new StateLogList(child.Job.StateLog)
               ));
           } else {
-            this.stateLogViewHost.Content = new StateLogItemList(Content.Job.StateLog.Select(x => new StateLogItem(x)));
+            this.stateLogViewHost.Content = new StateLogList(Content.Job.StateLog);
           }
         } else {
Index: branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Views/3.4/ExperimentManager/StateLogGanttChartListView.cs
===================================================================
--- branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Views/3.4/ExperimentManager/StateLogGanttChartListView.cs	(revision 5597)
+++ branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Views/3.4/ExperimentManager/StateLogGanttChartListView.cs	(revision 5636)
@@ -20,16 +20,17 @@
 #endregion
 
+using System;
 using System.Drawing;
+using System.Linq;
 using HeuristicLab.Core;
 using HeuristicLab.Core.Views;
 using HeuristicLab.MainForm;
-using HeuristicLab.Services.Hive.Common.DataTransfer;
 
 namespace HeuristicLab.Clients.Hive.Views {
   [View("StateLogGanttChartList View")]
-  [Content(typeof(IItemList<StateLogItemList>), IsDefaultView = true)]
+  [Content(typeof(IItemList<StateLogList>), IsDefaultView = true)]
   public sealed partial class StateLogGanttChartListView : ItemView {
-    public new IItemList<StateLogItemList> Content {
-      get { return (IItemList<StateLogItemList>)base.Content; }
+    public new IItemList<StateLogList> Content {
+      get { return (IItemList<StateLogList>)base.Content; }
       set { base.Content = value; }
     }
@@ -61,18 +62,16 @@
         // Add code when content has been changed and is not null
         ganttChart.Reset();
-        ganttChart.AddCategory(JobState.Offline.ToString(), Color.Brown);
-        ganttChart.AddCategory(JobState.Waiting.ToString(), Color.Yellow);
-        ganttChart.AddCategory(JobState.Transferring.ToString(), Color.Blue);
-        ganttChart.AddCategory(JobState.Calculating.ToString(), Color.Green);
-        ganttChart.AddCategory(JobState.Finished.ToString(), Color.DarkGreen);
-        ganttChart.AddCategory(JobState.Aborted.ToString(), Color.Orange);
-        ganttChart.AddCategory(JobState.Failed.ToString(), Color.Red);
+        SetupCategories(ganttChart);
+
+        DateTime maxValue = Content.Max(x => x.Max(y => y.DateTime));
+        var upperLimit = DateTime.FromOADate(Math.Min(DateTime.Now.AddSeconds(10).ToOADate(), maxValue.AddSeconds(10).ToOADate()));
 
         for (int i = 0; i < Content.Count; i++) {
           for (int j = 0; j < Content[i].Count - 1; j++) {
-            string tooltip = string.Format("State: {0}\n{1} - {2}", Content[i][j].State, Content[i][j].DateTime, Content[i][j+1].DateTime);
-            if (!string.IsNullOrEmpty(Content[i][j].Exception))
-              tooltip += "\n" + Content[i][j].Exception;
-            ganttChart.AddData(i + 1, Content[i][j].State.ToString(), Content[i][j].DateTime, Content[i][j + 1].DateTime, tooltip, false);
+            if(Content[i][j].State != JobState.Offline && Content[i][j].State != JobState.Finished) 
+              AddData(ganttChart, i.ToString(), Content[i][j], Content[i][j+1], upperLimit);
+          }
+          if(Content[i].Count > 0) {
+            AddData(ganttChart, i.ToString(), Content[i][Content[i].Count - 1], null, upperLimit);
           }
         }
@@ -80,4 +79,32 @@
     }
 
+    public static void SetupCategories(GanttChart ganttChart) {
+      ganttChart.AddCategory(JobState.Offline.ToString(), Color.Gainsboro);
+      ganttChart.AddCategory(JobState.Waiting.ToString(), Color.NavajoWhite);
+      ganttChart.AddCategory(JobState.Transferring.ToString(), Color.CornflowerBlue);
+      ganttChart.AddCategory(JobState.Calculating.ToString(), Color.DarkGreen);
+      ganttChart.AddCategory(JobState.Finished.ToString(), Color.White);
+      ganttChart.AddCategory(JobState.Aborted.ToString(), Color.Orange);
+      ganttChart.AddCategory(JobState.Failed.ToString(), Color.Red);
+    }
+
+    //private void AddData(int i, int j, DateTime upperLimit) {
+    //  DateTime until = j < Content[i].Count - 1 ? Content[i][j + 1].DateTime : upperLimit;
+    //  TimeSpan duration = until - Content[i][j].DateTime;
+    //  string tooltip = string.Format("State: {0}\nDuration: {1}\n{2} - {3}", Content[i][j].State, Content[i][j].DateTime, duration, until);
+    //  if (!string.IsNullOrEmpty(Content[i][j].Exception))
+    //    tooltip += "\n" + Content[i][j].Exception;
+    //  ganttChart.AddData(i + 1, Content[i][j].State.ToString(), Content[i][j].DateTime, until, tooltip, false);
+    //}
+
+    public static void AddData(GanttChart ganttChart, string name, StateLog from, StateLog to, DateTime upperLimit) {
+      DateTime until = to != null ? to.DateTime : upperLimit;
+      TimeSpan duration = until - from.DateTime;
+      string tooltip = string.Format("State: {0}\nDuration: {1}\n{2} - {3}", from.State, from.DateTime, duration, until);
+      if (!string.IsNullOrEmpty(from.Exception))
+        tooltip += "\n" + from.Exception;
+      ganttChart.AddData(name, from.State.ToString(), from.DateTime, until, tooltip, false);
+    }
+    
     protected override void SetEnabledStateOfControls() {
       base.SetEnabledStateOfControls();
Index: branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Views/3.4/ExperimentManager/StateLogGanttChartListView.designer.cs
===================================================================
--- branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Views/3.4/ExperimentManager/StateLogGanttChartListView.designer.cs	(revision 5597)
+++ branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Views/3.4/ExperimentManager/StateLogGanttChartListView.designer.cs	(revision 5636)
@@ -24,5 +24,5 @@
     /// </summary>
     private void InitializeComponent() {
-      this.ganttChart = new HeuristicLab.Clients.Hive.Views.ExperimentManager.GanttChart();
+      this.ganttChart = new HeuristicLab.Clients.Hive.Views.GanttChart();
       this.SuspendLayout();
       // 
@@ -50,5 +50,5 @@
     #endregion
 
-    private ExperimentManager.GanttChart ganttChart;
+    private GanttChart ganttChart;
 
   }
Index: branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Views/3.4/ExperimentManager/StateLogGanttChartView.cs
===================================================================
--- branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Views/3.4/ExperimentManager/StateLogGanttChartView.cs	(revision 5597)
+++ branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Views/3.4/ExperimentManager/StateLogGanttChartView.cs	(revision 5636)
@@ -20,15 +20,14 @@
 #endregion
 
-using System.Drawing;
+using System;
 using HeuristicLab.Core.Views;
 using HeuristicLab.MainForm;
-using HeuristicLab.Services.Hive.Common.DataTransfer;
 
 namespace HeuristicLab.Clients.Hive.Views {
   [View("StateLogGanttChart View")]
-  [Content(typeof(StateLogItemList), IsDefaultView = false)]
+  [Content(typeof(StateLogList), IsDefaultView = false)]
   public sealed partial class StateLogGanttChartView : ItemView {
-    public new StateLogItemList Content {
-      get { return (StateLogItemList)base.Content; }
+    public new StateLogList Content {
+      get { return (StateLogList)base.Content; }
       set { base.Content = value; }
     }
@@ -60,18 +59,15 @@
         // Add code when content has been changed and is not null
         ganttChart.Reset();
-        ganttChart.AddCategory(JobState.Offline.ToString(), Color.Brown);
-        ganttChart.AddCategory(JobState.Waiting.ToString(), Color.Yellow);
-        ganttChart.AddCategory(JobState.Transferring.ToString(), Color.Blue);
-        ganttChart.AddCategory(JobState.Calculating.ToString(), Color.Green);
-        ganttChart.AddCategory(JobState.Finished.ToString(), Color.DarkGreen);
-        ganttChart.AddCategory(JobState.Aborted.ToString(), Color.Orange);
-        ganttChart.AddCategory(JobState.Failed.ToString(), Color.Red);
+        StateLogGanttChartListView.SetupCategories(ganttChart);
+        var upperLimit = DateTime.Now.AddSeconds(10);
         
         for (int i = 0; i < Content.Count-1; i++) {
-          string tooltip = string.Format("State: {0}\n{1} - {2}", Content[i].State, Content[i].DateTime, Content[i + 1].DateTime);
-          if (!string.IsNullOrEmpty(Content[i].Exception))
-            tooltip += "\n" + Content[i].Exception;
-          ganttChart.AddData(0, Content[i].State.ToString(), Content[i].DateTime, Content[i + 1].DateTime, tooltip);
+          //string tooltip = string.Format("State: {0}\n{1} - {2}", Content[i].State, Content[i].DateTime, Content[i + 1].DateTime);
+          //if (!string.IsNullOrEmpty(Content[i].Exception))
+          //  tooltip += "\n" + Content[i].Exception;
+          //ganttChart.AddData(Content[i].State.ToString(), Content[i].State.ToString(), Content[i].DateTime, Content[i + 1].DateTime, tooltip, false);
+          StateLogGanttChartListView.AddData(ganttChart, i.ToString(), Content[i], Content[i+1], upperLimit);
         }
+        StateLogGanttChartListView.AddData(ganttChart, (Content.Count - 1).ToString(), Content[Content.Count - 1], null, upperLimit);
       }
     }
Index: branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Views/3.4/ExperimentManager/StateLogGanttChartView.designer.cs
===================================================================
--- branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Views/3.4/ExperimentManager/StateLogGanttChartView.designer.cs	(revision 5597)
+++ branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Views/3.4/ExperimentManager/StateLogGanttChartView.designer.cs	(revision 5636)
@@ -24,5 +24,5 @@
     /// </summary>
     private void InitializeComponent() {
-      this.ganttChart = new HeuristicLab.Clients.Hive.Views.ExperimentManager.GanttChart();
+      this.ganttChart = new HeuristicLab.Clients.Hive.Views.GanttChart();
       this.SuspendLayout();
       // 
@@ -50,5 +50,5 @@
     #endregion
 
-    private ExperimentManager.GanttChart ganttChart;
+    private GanttChart ganttChart;
 
   }
Index: branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Views/3.4/ExperimentManager/StateLogItemList.cs
===================================================================
--- branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Views/3.4/ExperimentManager/StateLogItemList.cs	(revision 5597)
+++ 	(revision )
@@ -1,22 +1,0 @@
-﻿using System.Collections.Generic;
-using HeuristicLab.Common;
-using HeuristicLab.Core;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-
-namespace HeuristicLab.Clients.Hive.Views {
-  [StorableClass]
-  public class StateLogItemList : ItemList<StateLogItem> {
-
-    [StorableConstructor]
-    protected StateLogItemList(bool deserializing) : base(deserializing) { }
-    public StateLogItemList() : base() { }
-    protected StateLogItemList(StateLogItemList original, Cloner cloner) : base(original, cloner) { }
-    public StateLogItemList(IEnumerable<StateLogItem> collection)
-      : base(collection) {
-    }
-    public override IDeepCloneable Clone(Cloner cloner) {
-      return new StateLogItemList(this, cloner);
-    }
-
-  }
-}
Index: branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Views/3.4/ExperimentManager/StateLogList.cs
===================================================================
--- branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Views/3.4/ExperimentManager/StateLogList.cs	(revision 5636)
+++ branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Views/3.4/ExperimentManager/StateLogList.cs	(revision 5636)
@@ -0,0 +1,22 @@
+﻿using System.Collections.Generic;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Clients.Hive.Views {
+  [StorableClass]
+  public class StateLogList : ItemList<StateLog> {
+
+    [StorableConstructor]
+    protected StateLogList(bool deserializing) : base(deserializing) { }
+    public StateLogList() : base() { }
+    protected StateLogList(StateLogList original, Cloner cloner) : base(original, cloner) { }
+    public StateLogList(IEnumerable<StateLog> collection)
+      : base(collection) {
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new StateLogList(this, cloner);
+    }
+
+  }
+}
Index: branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Views/3.4/ExperimentManager/StateLogListView.cs
===================================================================
--- branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Views/3.4/ExperimentManager/StateLogListView.cs	(revision 5597)
+++ branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Views/3.4/ExperimentManager/StateLogListView.cs	(revision 5636)
@@ -25,7 +25,7 @@
 
 namespace HeuristicLab.Clients.Hive.Views {
-  [View("StateLogItem View")]
-  [Content(typeof(IItemList<StateLogItem>), false)]
-  public partial class StateLogListView : ItemListView<StateLogItem> {
+  [View("StateLog View")]
+  [Content(typeof(IItemList<StateLog>), false)]
+  public partial class StateLogListView : ItemListView<StateLog> {
 
     public StateLogListView() {
@@ -34,5 +34,5 @@
     }
 
-    protected override StateLogItem CreateItem() {
+    protected override StateLog CreateItem() {
       return null;
     }
Index: branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Views/3.4/ExperimentManager/StateLogView.cs
===================================================================
--- branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Views/3.4/ExperimentManager/StateLogView.cs	(revision 5597)
+++ branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Views/3.4/ExperimentManager/StateLogView.cs	(revision 5636)
@@ -23,11 +23,12 @@
 using HeuristicLab.Core.Views;
 using HeuristicLab.MainForm;
+using HeuristicLab.MainForm.WindowsForms;
 
 namespace HeuristicLab.Clients.Hive.Views {
   [View("StateLog View")]
-  [Content(typeof(StateLogItem), IsDefaultView = false)]
+  [Content(typeof(StateLog), IsDefaultView = false)]
   public sealed partial class StateLogView : ItemView {
-    public new StateLogItem Content {
-      get { return (StateLogItem)base.Content; }
+    public new StateLog Content {
+      get { return (StateLog)base.Content; }
       set { base.Content = value; }
     }
