Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.ExperimentManager/3.4/Views/RefreshableHiveExperimentView.Designer.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.ExperimentManager/3.4/Views/RefreshableHiveExperimentView.Designer.cs	(revision 6418)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.ExperimentManager/3.4/Views/RefreshableHiveExperimentView.Designer.cs	(revision 6419)
@@ -21,4 +21,5 @@
 
 using HeuristicLab.Clients.Hive.Views.ExperimentManager;
+using HeuristicLab.MainForm.WindowsForms;
 namespace HeuristicLab.Clients.Hive.ExperimentManager.Views {
   partial class RefreshableHiveExperimentView {
@@ -66,4 +67,5 @@
       this.toolTip = new System.Windows.Forms.ToolTip(this.components);
       this.refreshButton = new System.Windows.Forms.Button();
+      this.isPrivilegedCheckBox = new System.Windows.Forms.CheckBox();
       this.refreshAutomaticallyCheckBox = new System.Windows.Forms.CheckBox();
       this.infoGroupBox = new System.Windows.Forms.GroupBox();
@@ -74,9 +76,11 @@
       this.calculatingLabel = new System.Windows.Forms.Label();
       this.jobsLabel = new System.Windows.Forms.Label();
-      this.isPrivilegedCheckBox = new System.Windows.Forms.CheckBox();
+      this.stateTabPage = new System.Windows.Forms.TabPage();
+      this.stateLogViewHost = new ViewHost();
       this.tabControl.SuspendLayout();
       this.jobsTabPage.SuspendLayout();
       this.logTabPage.SuspendLayout();
       this.infoGroupBox.SuspendLayout();
+      this.stateTabPage.SuspendLayout();
       this.SuspendLayout();
       // 
@@ -87,4 +91,5 @@
                   | System.Windows.Forms.AnchorStyles.Right)));
       this.tabControl.Controls.Add(this.jobsTabPage);
+      this.tabControl.Controls.Add(this.stateTabPage);
       this.tabControl.Controls.Add(this.logTabPage);
       this.tabControl.Location = new System.Drawing.Point(0, 78);
@@ -126,5 +131,5 @@
       this.logTabPage.Location = new System.Drawing.Point(4, 22);
       this.logTabPage.Name = "logTabPage";
-      this.logTabPage.Size = new System.Drawing.Size(813, 494);
+      this.logTabPage.Size = new System.Drawing.Size(709, 426);
       this.logTabPage.TabIndex = 3;
       this.logTabPage.Text = "Log";
@@ -271,4 +276,17 @@
       this.refreshButton.UseVisualStyleBackColor = true;
       this.refreshButton.Click += new System.EventHandler(this.refreshButton_Click);
+      // 
+      // isPrivilegedCheckBox
+      // 
+      this.isPrivilegedCheckBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+      this.isPrivilegedCheckBox.AutoSize = true;
+      this.isPrivilegedCheckBox.Location = new System.Drawing.Point(383, 55);
+      this.isPrivilegedCheckBox.Name = "isPrivilegedCheckBox";
+      this.isPrivilegedCheckBox.Size = new System.Drawing.Size(80, 17);
+      this.isPrivilegedCheckBox.TabIndex = 26;
+      this.isPrivilegedCheckBox.Text = "IsPrivileged";
+      this.toolTip.SetToolTip(this.isPrivilegedCheckBox, "If checked, the job will be executed in a privileged sandbox on the slave.");
+      this.isPrivilegedCheckBox.UseVisualStyleBackColor = true;
+      this.isPrivilegedCheckBox.CheckedChanged += new System.EventHandler(this.isPrivilegedCheckBox_CheckedChanged);
       // 
       // refreshAutomaticallyCheckBox
@@ -353,16 +371,24 @@
       this.jobsLabel.Text = "Jobs:";
       // 
-      // isPrivilegedCheckBox
-      // 
-      this.isPrivilegedCheckBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
-      this.isPrivilegedCheckBox.AutoSize = true;
-      this.isPrivilegedCheckBox.Location = new System.Drawing.Point(383, 55);
-      this.isPrivilegedCheckBox.Name = "isPrivilegedCheckBox";
-      this.isPrivilegedCheckBox.Size = new System.Drawing.Size(80, 17);
-      this.isPrivilegedCheckBox.TabIndex = 26;
-      this.isPrivilegedCheckBox.Text = "IsPrivileged";
-      this.toolTip.SetToolTip(this.isPrivilegedCheckBox, "If checked, the job will be executed in a privileged sandbox on the slave.");
-      this.isPrivilegedCheckBox.UseVisualStyleBackColor = true;
-      this.isPrivilegedCheckBox.CheckedChanged += new System.EventHandler(this.isPrivilegedCheckBox_CheckedChanged);
+      // stateTabPage
+      // 
+      this.stateTabPage.Controls.Add(this.stateLogViewHost);
+      this.stateTabPage.Location = new System.Drawing.Point(4, 22);
+      this.stateTabPage.Name = "stateTabPage";
+      this.stateTabPage.Size = new System.Drawing.Size(709, 426);
+      this.stateTabPage.TabIndex = 6;
+      this.stateTabPage.Text = "State";
+      this.stateTabPage.UseVisualStyleBackColor = true;
+      // 
+      // stateLogViewHost
+      // 
+      this.stateLogViewHost.Caption = "StateLog View";
+      this.stateLogViewHost.Content = null;
+      this.stateLogViewHost.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.stateLogViewHost.Location = new System.Drawing.Point(0, 0);
+      this.stateLogViewHost.Name = "stateLogViewHost";
+      this.stateLogViewHost.ReadOnly = false;
+      this.stateLogViewHost.Size = new System.Drawing.Size(709, 426);
+      this.stateLogViewHost.TabIndex = 0;
       // 
       // RefreshableHiveExperimentView
@@ -393,4 +419,5 @@
       this.infoGroupBox.ResumeLayout(false);
       this.infoGroupBox.PerformLayout();
+      this.stateTabPage.ResumeLayout(false);
       this.ResumeLayout(false);
       this.PerformLayout();
@@ -426,4 +453,6 @@
     private System.Windows.Forms.Label jobsLabel;
     private System.Windows.Forms.CheckBox isPrivilegedCheckBox;
+    private System.Windows.Forms.TabPage stateTabPage;
+    private ViewHost stateLogViewHost;
 
   }
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.ExperimentManager/3.4/Views/RefreshableHiveExperimentView.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.ExperimentManager/3.4/Views/RefreshableHiveExperimentView.cs	(revision 6418)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.ExperimentManager/3.4/Views/RefreshableHiveExperimentView.cs	(revision 6419)
@@ -61,4 +61,5 @@
       Content.JobStatisticsChanged += new EventHandler(Content_JobStatisticsChanged);
       Content.ExceptionOccured += new EventHandler<EventArgs<Exception>>(Content_ExceptionOccured);
+      Content.StateLogListChanged += new EventHandler(Content_StateLogListChanged);
     }
 
@@ -69,4 +70,5 @@
       Content.JobStatisticsChanged -= new EventHandler(Content_JobStatisticsChanged);
       Content.ExceptionOccured -= new EventHandler<EventArgs<Exception>>(Content_ExceptionOccured);
+      Content.StateLogListChanged -= new EventHandler(Content_StateLogListChanged);
       base.DeregisterContentEvents();
     }
@@ -105,5 +107,5 @@
         isPrivilegedCheckBox.Checked = false;
         logView.Content = null;
-        refreshAutomaticallyCheckBox.Checked = false;        
+        refreshAutomaticallyCheckBox.Checked = false;
         logView.Content = null;
       } else {
@@ -120,4 +122,5 @@
       Content_HiveJobChanged(this, EventArgs.Empty);
       Content_IsProgressingChanged(this, EventArgs.Empty);
+      Content_StateLogListChanged(this, EventArgs.Empty);
       SetEnabledStateOfControls();
     }
@@ -260,4 +263,19 @@
         // show error dialog only if Controllable (otherwise it should continue trying without an error dialog (e.g. HiveEngine))
         ErrorHandling.ShowErrorDialog(this, e.Value);
+      }
+    }
+    private void Content_StateLogListChanged(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(Content_StateLogListChanged), sender, e);
+      else {
+        UpdateStateLogList();
+      }
+    }
+
+    private void UpdateStateLogList() {
+      if (Content != null && this.Content.HiveExperiment != null) {
+        stateLogViewHost.Content = this.Content.HiveExperiment.StateLogList;
+      } else {
+        stateLogViewHost.Content = null;
       }
     }
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.4/Executor.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.4/Executor.cs	(revision 6418)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.4/Executor.cs	(revision 6419)
@@ -31,22 +31,19 @@
   /// </summary>
   public class Executor : MarshalByRefObject, IDisposable {
-    public Guid JobId { get; set; }
-    private IJob Job { get; set; }
-    public int CoresNeeded { get; set; }
-    public int MemoryNeeded { get; set; }
     private bool wasJobAborted = false;
     private Semaphore pauseStopSem = new Semaphore(0, 1);
     private Semaphore startJobSem = new Semaphore(0, 1);
-    //make pause or stop wait until start is finished
-    private Semaphore jobStartedSem = new Semaphore(0, 1);
+    private Semaphore jobStartedSem = new Semaphore(0, 1); // make pause or stop wait until start is finished
     private ExecutorQueue executorQueue;
-    public ExecutorQueue ExecutorCommandQueue {
-      get {
-        return executorQueue;
-      }
-    }
+    private bool jobDataInvalid = false; // if true, the jobdata is not sent when the job is failed
+    private IJob job;
+    private DateTime creationTime;
+
+    public Guid JobId { get; set; }
+    public int CoresNeeded { get; set; }
+    public int MemoryNeeded { get; set; }
     public bool IsStopping { get; set; }
     public bool IsPausing { get; set; }
-    private DateTime CreationTime { get; set; }
+
     private Exception currentException;
     public String CurrentException {
@@ -60,14 +57,14 @@
     }
 
+    public ExecutorQueue ExecutorCommandQueue {
+      get { return executorQueue; }
+    }
+
     private ExecutionState ExecutionState {
-      get {
-        return Job != null ? Job.ExecutionState : HeuristicLab.Core.ExecutionState.Stopped;
-      }
+      get { return job != null ? job.ExecutionState : HeuristicLab.Core.ExecutionState.Stopped; }
     }
 
     public TimeSpan ExecutionTime {
-      get {
-        return Job != null ? Job.ExecutionTime : new TimeSpan(0, 0, 0);
-      }
+      get { return job != null ? job.ExecutionTime : new TimeSpan(0, 0, 0); }
     }
 
@@ -80,11 +77,12 @@
     public void Start(byte[] serializedJob) {
       try {
-        CreationTime = DateTime.Now;
-        Job = PersistenceUtil.Deserialize<IJob>(serializedJob);
+        creationTime = DateTime.Now;
+        job = PersistenceUtil.Deserialize<IJob>(serializedJob);
 
         RegisterJobEvents();
 
-        Job.Start();
-        if (!jobStartedSem.WaitOne(TimeSpan.FromSeconds(15))) {
+        job.Start();
+        if (!jobStartedSem.WaitOne(TimeSpan.FromSeconds(25))) {
+          jobDataInvalid = true;
           throw new TimeoutException("Timeout when starting the job. JobStarted event was not fired.");
         }
@@ -101,12 +99,12 @@
       // wait until job is started. if this does not happen, the Job is null an we give up
       jobStartedSem.WaitOne(TimeSpan.FromSeconds(15));
-      if (Job == null) {
+      if (job == null) {
         currentException = new Exception("Pausing job " + this.JobId + ": Job is null");
         return;
       }
 
-      if (Job.ExecutionState == ExecutionState.Started) {
+      if (job.ExecutionState == ExecutionState.Started) {
         try {
-          Job.Pause();
+          job.Pause();
           //we need to block the pause...
           pauseStopSem.WaitOne();
@@ -122,5 +120,5 @@
       // wait until job is started. if this does not happen, the Job is null an we give up
       jobStartedSem.WaitOne(TimeSpan.FromSeconds(15));
-      if (Job == null) {
+      if (job == null) {
         currentException = new Exception("Stopping job " + this.JobId + ": Job is null");
       }
@@ -129,5 +127,5 @@
       if ((ExecutionState == ExecutionState.Started) || (ExecutionState == ExecutionState.Paused)) {
         try {
-          Job.Stop();
+          job.Stop();
           pauseStopSem.WaitOne();
         }
@@ -139,15 +137,15 @@
 
     private void RegisterJobEvents() {
-      Job.JobStopped += new EventHandler(Job_JobStopped);
-      Job.JobFailed += new EventHandler(Job_JobFailed);
-      Job.JobPaused += new EventHandler(Job_JobPaused);
-      Job.JobStarted += new EventHandler(Job_JobStarted);
+      job.JobStopped += new EventHandler(Job_JobStopped);
+      job.JobFailed += new EventHandler(Job_JobFailed);
+      job.JobPaused += new EventHandler(Job_JobPaused);
+      job.JobStarted += new EventHandler(Job_JobStarted);
     }
 
     private void DeregisterJobEvents() {
-      Job.JobStopped -= new EventHandler(Job_JobStopped);
-      Job.JobFailed -= new EventHandler(Job_JobFailed);
-      Job.JobPaused -= new EventHandler(Job_JobPaused);
-      Job.JobStarted -= new EventHandler(Job_JobStarted);
+      job.JobStopped -= new EventHandler(Job_JobStopped);
+      job.JobFailed -= new EventHandler(Job_JobFailed);
+      job.JobPaused -= new EventHandler(Job_JobPaused);
+      job.JobStarted -= new EventHandler(Job_JobStarted);
     }
 
@@ -182,9 +180,11 @@
 
     public JobData GetJobData() {
-      if (Job.ExecutionState == ExecutionState.Started) {
+      if (jobDataInvalid) return null;
+
+      if (job.ExecutionState == ExecutionState.Started) {
         throw new InvalidStateException("Job is still running");
       } else {
         JobData jobData = new JobData();
-        if (Job == null) {
+        if (job == null) {
           //send empty job and save exception
           jobData.Data = PersistenceUtil.Serialize(new JobData());
@@ -193,5 +193,5 @@
           }
         } else {
-          jobData.Data = PersistenceUtil.Serialize(Job);
+          jobData.Data = PersistenceUtil.Serialize(job);
         }
         jobData.JobId = JobId;
@@ -201,7 +201,7 @@
 
     public void Dispose() {
-      if (Job != null)
+      if (job != null)
         DeregisterJobEvents();
-      Job = null;
+      job = null;
     }
   }
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.4/WcfService.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.4/WcfService.cs	(revision 6418)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.4/WcfService.cs	(revision 6419)
@@ -105,5 +105,7 @@
         service.UpdateJob(job);
         job = service.UpdateJobState(job.Id, JobState.Transferring, slaveId, null, null);
-        service.UpdateJobData(job, jobData);
+        HiveClient.TryAndRepeat(() => {
+          service.UpdateJobData(job, jobData);
+        }, 3, "Could not upload jobdata.");
         service.UpdateJobState(job.Id, state, slaveId, null, exception);
       });
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Views/3.4/HeuristicLab.Clients.Hive.Views-3.4.csproj
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Views/3.4/HeuristicLab.Clients.Hive.Views-3.4.csproj	(revision 6418)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Views/3.4/HeuristicLab.Clients.Hive.Views-3.4.csproj	(revision 6419)
@@ -149,5 +149,4 @@
       <DependentUpon>HiveJobView.cs</DependentUpon>
     </Compile>
-    <Compile Include="StateLog\StateLogListList.cs" />
     <Compile Include="TreeView\NewExperimentTreeNodeAction.cs" />
     <Compile Include="TreeView\DeleteJobTreeNodeAction.cs" />
@@ -182,5 +181,4 @@
       <DependentUpon>StateLogGanttChartView.cs</DependentUpon>
     </Compile>
-    <Compile Include="StateLog\StateLogList.cs" />
     <Compile Include="StateLog\StateLogListView.cs">
       <SubType>UserControl</SubType>
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Views/3.4/HiveJobs/HiveJobView.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Views/3.4/HiveJobs/HiveJobView.cs	(revision 6418)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Views/3.4/HiveJobs/HiveJobView.cs	(revision 6419)
@@ -21,5 +21,4 @@
 
 using System;
-using System.Linq;
 using System.Windows.Forms;
 using HeuristicLab.Core.Views;
@@ -49,4 +48,5 @@
       Content.JobChanged += new EventHandler(Content_JobChanged);
       Content.JobStateChanged += new EventHandler(Content_JobStateChanged);
+      Content.StateLogChanged += new EventHandler(Content_StateLogChanged);
     }
 
@@ -55,4 +55,5 @@
       Content.JobChanged -= new EventHandler(Content_JobChanged);
       Content.JobStateChanged -= new EventHandler(Content_JobStateChanged);
+      Content.StateLogChanged -= new EventHandler(Content_StateLogChanged);
       base.DeregisterContentEvents();
     }
@@ -129,11 +130,4 @@
           this.exceptionTextBox.Text = Content.Job.CurrentStateLog != null ? Content.Job.CurrentStateLog.Exception : string.Empty;
           this.lastUpdatedTextBox.Text = Content.Job.LastJobDataUpdate.ToString();
-          if (Content.ItemJob.ComputeInParallel) {
-            this.stateLogViewHost.Content = new StateLogListList(
-                this.Content.ChildHiveJobs.Select(child => new StateLogList(child.Job.StateLog)
-              ));
-          } else {
-            this.stateLogViewHost.Content = new StateLogList(Content.Job.StateLog);
-          }
         } else {
           this.stateTextBox.Text = string.Empty;
@@ -143,7 +137,7 @@
           this.dateFinishedTextBox.Text = string.Empty;
           this.exceptionTextBox.Text = string.Empty;
-          this.stateLogViewHost.Content = null;
           this.lastUpdatedTextBox.Text = string.Empty;
         }
+        Content_StateLogChanged(this, EventArgs.Empty);
         SetEnabledStateOfControls();
       }
@@ -155,4 +149,16 @@
       } else {
         computeInParallelCheckBox.Checked = Content.ItemJob.ComputeInParallel;
+      }
+    }
+
+    protected virtual void Content_StateLogChanged(object sender, EventArgs e) {
+      if (Content != null) {
+        if (Content.ItemJob.ComputeInParallel) {
+          this.stateLogViewHost.Content = Content.ChildStateLogList;
+        } else {
+          this.stateLogViewHost.Content = Content.StateLog;
+        }
+      } else {
+        this.stateLogViewHost.Content = null;
       }
     }
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.4/HeuristicLab.Clients.Hive-3.4.csproj
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.4/HeuristicLab.Clients.Hive-3.4.csproj	(revision 6418)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.4/HeuristicLab.Clients.Hive-3.4.csproj	(revision 6419)
@@ -115,4 +115,6 @@
     <Compile Include="Jobs\ItemJob.cs" />
     <Compile Include="RefreshableHiveExperiment.cs" />
+    <Compile Include="StateLogList.cs" />
+    <Compile Include="StateLogListList.cs" />
     <Compile Include="ThreadSafeLog.cs" />
     <None Include="app_f005pc.config" />
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.4/HiveClient.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.4/HiveClient.cs	(revision 6418)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.4/HiveClient.cs	(revision 6419)
@@ -297,5 +297,5 @@
           hiveJob.Job.Id = service.AddJob(hiveJob.Job, jobData, groups.ToList());
         }
-      }, -1, "Failed to add job");
+      }, -1, "Failed to add job", log);
 
       foreach (HiveJob child in hiveJob.ChildHiveJobs) {
@@ -391,10 +391,10 @@
     /// If repetitions is -1, it is repeated infinitely.
     /// </summary>
-    public static void TryAndRepeat(Action action, int repetitions, string errorMessage) {
+    public static void TryAndRepeat(Action action, int repetitions, string errorMessage, ILog log = null) {
       while (true) {
         try { action(); return; }
         catch (Exception e) {
-          if (repetitions == 0)
-            throw new HiveException(errorMessage, e);
+          if (repetitions == 0) throw new HiveException(errorMessage, e);
+          if (log != null) log.LogMessage(string.Format("{0}: {1} - will try again!", errorMessage, e.ToString()));
           repetitions--;
         }
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.4/HiveJobs/EngineHiveJob.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.4/HiveJobs/EngineHiveJob.cs	(revision 6418)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.4/HiveJobs/EngineHiveJob.cs	(revision 6419)
@@ -71,4 +71,9 @@
       return jobData;
     }
+
+    public override void ClearData() {
+      base.ClearData();
+      this.ItemJob.InitialOperation = null;
+    }
   }
 }
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.4/HiveJobs/HiveJob.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.4/HiveJobs/HiveJob.cs	(revision 6418)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.4/HiveJobs/HiveJob.cs	(revision 6419)
@@ -123,4 +123,12 @@
     protected bool syncJobsWithOptimizers = true;
 
+    public StateLogList StateLog {
+      get { return new StateLogList(this.job.StateLog); }
+    }
+
+    public StateLogListList ChildStateLogList {
+      get { return new StateLogListList(this.childHiveJobs.Select(x => x.StateLog)); }
+    }
+
     #region Constructors and Cloning
     public HiveJob() {
@@ -234,4 +242,5 @@
         OnToStringChanged();
         OnItemImageChanged();
+        OnStateLogChanged();
       }
     }
@@ -255,5 +264,5 @@
     }
 
-    #region Events
+    #region Event Handler
     public event EventHandler JobChanged;
     private void OnJobChanged() {
@@ -278,4 +287,10 @@
     private void OnIsFinishedJobDownloadedChanged() {
       var handler = IsFinishedJobDownloadedChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public event EventHandler StateLogChanged;
+    private void OnStateLogChanged() {
+      var handler = StateLogChanged;
       if (handler != null) handler(this, EventArgs.Empty);
     }
@@ -371,4 +386,7 @@
     public event CollectionItemsChangedEventHandler<IItemTree<HiveJob>> CollectionReset;
     private void OnCollectionReset(object sender, CollectionItemsChangedEventArgs<IndexedItem<HiveJob>> e) {
+      foreach (var item in e.Items) {
+        item.Value.StateLogChanged -= new EventHandler(ChildHiveJob_StateLogChanged);
+      }
       var handler = CollectionReset;
       if (handler != null) handler(this, ToCollectionItemsChangedEventArgs(e));
@@ -377,4 +395,7 @@
     public event CollectionItemsChangedEventHandler<IItemTree<HiveJob>> ItemsAdded;
     private void OnItemsAdded(object sender, CollectionItemsChangedEventArgs<IndexedItem<HiveJob>> e) {
+      foreach (var item in e.Items) {
+        item.Value.StateLogChanged += new EventHandler(ChildHiveJob_StateLogChanged);
+      }
       var handler = ItemsAdded;
       if (handler != null) handler(this, ToCollectionItemsChangedEventArgs(e));
@@ -383,4 +404,7 @@
     public event CollectionItemsChangedEventHandler<IItemTree<HiveJob>> ItemsRemoved;
     private void OnItemsRemoved(object sender, CollectionItemsChangedEventArgs<IndexedItem<HiveJob>> e) {
+      foreach (var item in e.Items) {
+        item.Value.StateLogChanged -= new EventHandler(ChildHiveJob_StateLogChanged);
+      }
       var handler = ItemsRemoved;
       if (handler != null) handler(this, ToCollectionItemsChangedEventArgs(e));
@@ -389,4 +413,8 @@
     private static CollectionItemsChangedEventArgs<IItemTree<HiveJob>> ToCollectionItemsChangedEventArgs(CollectionItemsChangedEventArgs<IndexedItem<HiveJob>> e) {
       return new CollectionItemsChangedEventArgs<IItemTree<HiveJob>>(e.Items.Select(x => x.Value), e.OldItems == null ? null : e.OldItems.Select(x => x.Value));
+    }
+
+    private void ChildHiveJob_StateLogChanged(object sender, EventArgs e) {
+      OnStateLogChanged();
     }
     #endregion
@@ -443,5 +471,5 @@
     /// Delete ItemJob
     /// </summary>
-    public void ClearData() {
+    public virtual void ClearData() {
       this.ItemJob.Item = null;
     }
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.4/Jobs/EngineJob.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.4/Jobs/EngineJob.cs	(revision 6418)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.4/Jobs/EngineJob.cs	(revision 6419)
@@ -1,8 +1,6 @@
 ﻿using System;
-using System.Collections.Generic;
 using System.Drawing;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
-using HeuristicLab.Hive;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 
@@ -65,8 +63,4 @@
     public override void Stop() {
       Item.Stop();
-    }
-    
-    public override void Resume(IEnumerable<IJob> childJobs) {
-      throw new NotImplementedException();
     }
 
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.4/Jobs/ItemJob.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.4/Jobs/ItemJob.cs	(revision 6418)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.4/Jobs/ItemJob.cs	(revision 6419)
@@ -21,5 +21,4 @@
 
 using System;
-using System.Collections.Generic;
 using System.Drawing;
 using HeuristicLab.Common;
@@ -113,6 +112,4 @@
     public abstract void Stop();
 
-    public abstract void Resume(IEnumerable<IJob> childJobs);
-
     public event EventHandler JobStarted;
     protected virtual void OnJobStarted() {
@@ -139,22 +136,4 @@
     }
 
-    public event EventHandler<EventArgs<IJob>> NewChildJob;
-    protected virtual void OnNewChildJob(IJob job) {
-      EventHandler<EventArgs<IJob>> handler = NewChildJob;
-      if (handler != null) handler(this, new EventArgs<IJob>(job));
-    }
-
-    public event EventHandler WaitForChildJobs;
-    protected virtual void OnWaitForChildJobs() {
-      EventHandler handler = WaitForChildJobs;
-      if (handler != null) handler(this, EventArgs.Empty);
-    }
-
-    public event EventHandler DeleteChildJobs;
-    protected virtual void OnDeleteChildJobs() {
-      EventHandler handler = DeleteChildJobs;
-      if (handler != null) handler(this, EventArgs.Empty);
-    }
-
     public event EventHandler ComputeInParallelChanged;
     protected virtual void OnComputeInParallelChanged() {
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.4/Jobs/OptimizerJob.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.4/Jobs/OptimizerJob.cs	(revision 6418)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.4/Jobs/OptimizerJob.cs	(revision 6419)
@@ -113,8 +113,4 @@
     public override void Stop() {
       Item.Stop();
-    }
-
-    public override void Resume(IEnumerable<IJob> childJobs) {
-      OnJobStopped();
     }
     #endregion
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.4/RefreshableHiveExperiment.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.4/RefreshableHiveExperiment.cs	(revision 6418)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.4/RefreshableHiveExperiment.cs	(revision 6419)
@@ -88,5 +88,4 @@
     }
     private static object logLocker = new object();
-    
 
     #region Constructors and Cloning
@@ -220,4 +219,5 @@
       UpdateTotalExecutionTime();
       UpdateStatistics();
+      OnStateLogListChanged();
     }
 
@@ -269,4 +269,5 @@
     #endregion
 
+    #region HiveExperiment Events
     private void RegisterHiveExperimentEvents() {
       hiveExperiment.HiveJobsChanged += new EventHandler(hiveExperiment_HiveJobsChanged);
@@ -296,6 +297,7 @@
       }
     }
-
-    #region Events
+    #endregion
+
+    #region Event Handler
     public event EventHandler RefreshAutomaticallyChanged;
     private void OnRefreshAutomaticallyChanged() {
@@ -358,4 +360,10 @@
       if (handler != null) handler(this, new EventArgs<Exception>(exception));
     }
+
+    public event EventHandler StateLogListChanged;
+    private void OnStateLogListChanged() {
+      var handler = StateLogListChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
     #endregion
 
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.4/ServiceClients/HiveExperiment.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.4/ServiceClients/HiveExperiment.cs	(revision 6418)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.4/ServiceClients/HiveExperiment.cs	(revision 6419)
@@ -24,4 +24,5 @@
 using System.ComponentModel;
 using System.Linq;
+using HeuristicLab.Collections;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
@@ -68,5 +69,7 @@
       set {
         if (hiveJobs != value) {
+          if (hiveJobs != null) DeregisterHiveJobsEvents();
           hiveJobs = value;
+          if (hiveJobs != null) RegisterHiveJobsEvents();
           OnHiveJobsChanged();
         }
@@ -89,4 +92,8 @@
       get { return progress; }
       set { this.progress = value; }
+    }
+
+    public StateLogListList StateLogList {
+      get { return new StateLogListList(this.GetAllHiveJobs().Select(x => x.StateLog)); }
     }
 
@@ -147,4 +154,67 @@
       if (handler != null) handler(this, EventArgs.Empty);
     }
+
+    public event EventHandler<CollectionItemsChangedEventArgs<HiveJob>> HiveJobsAdded;
+    private void OnHiveJobsAdded(CollectionItemsChangedEventArgs<HiveJob> e) {
+      var handler = HiveJobsAdded;
+      if (handler != null) handler(this, e);
+    }
+
+    public event EventHandler<CollectionItemsChangedEventArgs<HiveJob>> HiveJobsRemoved;
+    private void OnHiveJobsRemoved(CollectionItemsChangedEventArgs<HiveJob> e) {
+      var handler = HiveJobsRemoved;
+      if (handler != null) handler(this, e);
+    }
+
+    public event EventHandler<CollectionItemsChangedEventArgs<HiveJob>> HiveJobsReset;
+    private void OnHiveJobsReset(CollectionItemsChangedEventArgs<HiveJob> e) {
+      var handler = HiveJobsReset;
+      if (handler != null) handler(this, e);
+    }
+
+    public event EventHandler StateLogListChanged;
+    private void OnStateLogListChanged() {
+      var handler = StateLogListChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    #endregion
+
+    #region HiveJobs Events
+    private void RegisterHiveJobsEvents() {
+      this.hiveJobs.ItemsAdded += new CollectionItemsChangedEventHandler<HiveJob>(hiveJobs_ItemsAdded);
+      this.hiveJobs.ItemsRemoved += new CollectionItemsChangedEventHandler<HiveJob>(hiveJobs_ItemsRemoved);
+      this.hiveJobs.CollectionReset += new CollectionItemsChangedEventHandler<HiveJob>(hiveJobs_CollectionReset);
+    }
+
+    private void DeregisterHiveJobsEvents() {
+      this.hiveJobs.ItemsAdded -= new CollectionItemsChangedEventHandler<HiveJob>(hiveJobs_ItemsAdded);
+      this.hiveJobs.ItemsRemoved -= new CollectionItemsChangedEventHandler<HiveJob>(hiveJobs_ItemsRemoved);
+      this.hiveJobs.CollectionReset -= new CollectionItemsChangedEventHandler<HiveJob>(hiveJobs_CollectionReset);
+    }
+
+    private void hiveJobs_CollectionReset(object sender, CollectionItemsChangedEventArgs<HiveJob> e) {
+      foreach (var item in e.Items) {
+        item.StateLogChanged -= new EventHandler(item_StateLogChanged);
+      }
+      OnHiveJobsReset(e);
+    }
+
+    private void hiveJobs_ItemsRemoved(object sender, CollectionItemsChangedEventArgs<HiveJob> e) {
+      foreach (var item in e.Items) {
+        item.StateLogChanged -= new EventHandler(item_StateLogChanged);
+      }
+      OnHiveJobsRemoved(e);
+    }
+
+    private void hiveJobs_ItemsAdded(object sender, CollectionItemsChangedEventArgs<HiveJob> e) {
+      foreach (var item in e.Items) {
+        item.StateLogChanged += new EventHandler(item_StateLogChanged);
+      }
+      OnHiveJobsAdded(e);
+    }
+    
+    private void item_StateLogChanged(object sender, EventArgs e) {
+      OnStateLogListChanged();
+    }
     #endregion
 
@@ -171,4 +241,6 @@
 
     public IEnumerable<HiveJob> GetAllHiveJobs() {
+      if (hiveJobs == null) return Enumerable.Empty<HiveJob>();
+
       var jobs = new List<HiveJob>();
       foreach (HiveJob job in HiveJobs) {
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.4/StateLogList.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.4/StateLogList.cs	(revision 6419)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.4/StateLogList.cs	(revision 6419)
@@ -0,0 +1,22 @@
+﻿using System.Collections.Generic;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Clients.Hive {
+  [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/3.4/StateLogListList.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.4/StateLogListList.cs	(revision 6419)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.4/StateLogListList.cs	(revision 6419)
@@ -0,0 +1,22 @@
+﻿using System.Collections.Generic;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Clients.Hive {
+  [StorableClass]
+  public class StateLogListList : ItemList<StateLogList> {
+
+    [StorableConstructor]
+    protected StateLogListList(bool deserializing) : base(deserializing) { }
+    public StateLogListList() : base() { }
+    protected StateLogListList(StateLogListList original, Cloner cloner) : base(original, cloner) { }
+    public StateLogListList(IEnumerable<StateLogList> collection)
+      : base(collection) {
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new StateLogListList(this, cloner);
+    }
+
+  }
+}
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.HiveEngine.Views/3.4/HiveEngineView.Designer.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.HiveEngine.Views/3.4/HiveEngineView.Designer.cs	(revision 6418)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.HiveEngine.Views/3.4/HiveEngineView.Designer.cs	(revision 6419)
@@ -64,5 +64,5 @@
       this.resourceIdsTextBox.TabIndex = 4;
       this.resourceIdsTextBox.Text = "HEAL";
-      this.resourceIdsTextBox.TextChanged += new System.EventHandler(this.resourceIdsTextBox_TextChanged);
+      this.resourceIdsTextBox.Validated += new System.EventHandler(this.resourceIdsTextBox_Validated);
       // 
       // priorityLabel
@@ -82,5 +82,5 @@
       this.priorityTextBox.TabIndex = 6;
       this.priorityTextBox.Text = "0";
-      this.priorityTextBox.TextChanged += new System.EventHandler(this.priorityTextBox_TextChanged);
+      this.priorityTextBox.Validated += new System.EventHandler(this.priorityTextBox_Validated);
       // 
       // label1
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.HiveEngine.Views/3.4/HiveEngineView.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.HiveEngine.Views/3.4/HiveEngineView.cs	(revision 6418)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.HiveEngine.Views/3.4/HiveEngineView.cs	(revision 6419)
@@ -105,9 +105,9 @@
     
     #region Event Handlers (child controls)
-    private void resourceIdsTextBox_TextChanged(object sender, EventArgs e) {
+    private void resourceIdsTextBox_Validated(object sender, EventArgs e) {
       Content.ResourceNames = resourceIdsTextBox.Text;
     }
 
-    private void priorityTextBox_TextChanged(object sender, EventArgs e) {
+    private void priorityTextBox_Validated(object sender, EventArgs e) {
       Content.Priority = int.Parse(priorityTextBox.Text);
     }
@@ -121,4 +121,6 @@
     }
     #endregion
+
+
   }
 }
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.HiveEngine/3.4/HiveEngine.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.HiveEngine/3.4/HiveEngine.cs	(revision 6418)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.HiveEngine/3.4/HiveEngine.cs	(revision 6419)
@@ -196,24 +196,28 @@
           //} else if (coll.Parallel) {
           if (coll.Parallel) {
-            // clone the parent scope here and reuse it for each operation. otherwise for each job the whole scope-tree first needs to be copied and then cleaned, which causes a lot of work for the Garbage Collector
-            IScope parentScopeClone = (IScope)((IAtomicOperation)coll.First()).Scope.Parent.Clone();
-            parentScopeClone.SubScopes.Clear();
-            parentScopeClone.ClearParentScopes();
-
-            EngineJob[] jobs = new EngineJob[coll.Count];
-            for (int i = 0; i < coll.Count; i++) {
-              jobs[i] = new EngineJob(coll[i], new SequentialEngine.SequentialEngine());
+            try {
+              // clone the parent scope here and reuse it for each operation. otherwise for each job the whole scope-tree first needs to be copied and then cleaned, which causes a lot of work for the Garbage Collector
+              IScope parentScopeClone = (IScope)((IAtomicOperation)coll.First()).Scope.Parent.Clone();
+              parentScopeClone.SubScopes.Clear();
+              parentScopeClone.ClearParentScopes();
+
+              EngineJob[] jobs = new EngineJob[coll.Count];
+              for (int i = 0; i < coll.Count; i++) {
+                jobs[i] = new EngineJob(coll[i], new SequentialEngine.SequentialEngine());
+              }
+
+              var experiment = CreateHiveExperiment();
+              IScope[] scopes = ExecuteOnHive(experiment, jobs, parentScopeClone, cancellationToken);
+
+              for (int i = 0; i < coll.Count; i++) {
+                if (coll[i] is IAtomicOperation) {
+                  ExchangeScope(scopes[i], ((IAtomicOperation)coll[i]).Scope);
+                } else if (coll[i] is OperationCollection) {
+                  // todo ??
+                }
+              }
             }
-
-            var experiment = CreateHiveExperiment();
-            IScope[] scopes = ExecuteOnHive(experiment, jobs, parentScopeClone, cancellationToken);
-            DisposeHiveExperiment(experiment);
-
-            for (int i = 0; i < coll.Count; i++) {
-              if (coll[i] is IAtomicOperation) {
-                ExchangeScope(scopes[i], ((IAtomicOperation)coll[i]).Scope);
-              } else if (coll[i] is OperationCollection) {
-                // todo ??
-              }
+            catch {
+              executionStack.Push(coll); throw;
             }
           } else {
@@ -305,5 +309,5 @@
 
         var failedJobs = hiveExperiment.HiveJobs.Where(x => x.Job.State == JobState.Failed);
-        if(failedJobs.Count() > 0) {
+        if (failedJobs.Count() > 0) {
           throw new HiveEngineException("Job failed: " + failedJobs.First().Job.StateLog.Last().Exception);
         }
@@ -318,15 +322,12 @@
       }
       catch (OperationCanceledException e) {
-        lock (locker) {
-          DeleteHiveExperiment(hiveExperiment.Id);
-        }
         throw e;
       }
       catch (Exception e) {
-        lock (locker) {
-          DeleteHiveExperiment(hiveExperiment.Id);
-        }
         LogException(e);
         throw e;
+      }
+      finally {
+        DisposeHiveExperiment(refreshableHiveExperiment);
       }
     }
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.Common/3.4/ApplicationConstants.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.Common/3.4/ApplicationConstants.cs	(revision 6418)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.Common/3.4/ApplicationConstants.cs	(revision 6419)
@@ -26,17 +26,17 @@
     public static TimeSpan SlaveHeartbeatTimeout = TimeSpan.FromMinutes(1);
 
-    public static TimeSpan CalculatingJobHeartbeatTimeout = TimeSpan.FromMinutes(1);
+    public static TimeSpan CalculatingJobHeartbeatTimeout = TimeSpan.FromMinutes(5.5);
 
-    public static TimeSpan TransferringJobHeartbeatTimeout = TimeSpan.FromMinutes(5);
+    public static TimeSpan TransferringJobHeartbeatTimeout = TimeSpan.FromMinutes(5.5);
+
+    /// <summary>
+    /// Timeout for long running database command (storing or loading jobData)
+    /// </summary>
+    public static TimeSpan LongRunningDatabaseCommandTimeout = TimeSpan.FromMinutes(5);
 
     /// <summary>
     /// Interval in which the HL.HiveExperiment will poll results from server
     /// </summary>
-    public static TimeSpan ResultPollingInterval = TimeSpan.FromSeconds(5);
-
-    /// <summary>
-    /// Maximum number of jobs that the server should send/receive simultaniously
-    /// </summary>
-    public static int MaxJobTransferCount = 6;
+    public static TimeSpan ResultPollingInterval = TimeSpan.FromSeconds(10);
   }
 }
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.DataAccess/3.4/HiveDao.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.DataAccess/3.4/HiveDao.cs	(revision 6418)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.DataAccess/3.4/HiveDao.cs	(revision 6419)
@@ -24,13 +24,15 @@
 using System.Linq;
 using System.Linq.Expressions;
+using HeuristicLab.Services.Hive.Common;
+using HeuristicLab.Services.Hive.Common.DataTransfer;
+using HeuristicLab.Services.Hive.DataAccess.Properties;
+using DT = HeuristicLab.Services.Hive.Common.DataTransfer;
 
 namespace HeuristicLab.Services.Hive.DataAccess {
-  using HeuristicLab.Services.Hive.Common.DataTransfer;
-  using HeuristicLab.Services.Hive.DataAccess.Properties;
-  using DT = HeuristicLab.Services.Hive.Common.DataTransfer;
-
   public class HiveDao : IHiveDao {
-    public static HiveDataContext CreateContext() {
-      return new HiveDataContext(Settings.Default.HeuristicLab_Hive_LinqConnectionString);
+    public static HiveDataContext CreateContext(bool longRunning = false) {
+      var context = new HiveDataContext(Settings.Default.HeuristicLab_Hive_LinqConnectionString);
+      if (longRunning) context.CommandTimeout = (int)ApplicationConstants.LongRunningDatabaseCommandTimeout.TotalSeconds;      
+      return context;
     }
 
@@ -71,5 +73,5 @@
           if (db.RequiredPlugins.Count(p => p.PluginId == pluginId) == 0) {
             db.RequiredPlugins.InsertOnSubmit(new RequiredPlugin() { JobId = entity.JobId, PluginId = pluginId });
-          }          
+          }
         }
         db.SubmitChanges();
@@ -153,5 +155,5 @@
     #region JobData Methods
     public DT.JobData GetJobData(Guid id) {
-      using (var db = CreateContext()) {
+      using (var db = CreateContext(true)) {
         return Convert.ToDto(db.JobDatas.SingleOrDefault(x => x.JobId == id));
       }
@@ -159,5 +161,5 @@
 
     public IEnumerable<DT.JobData> GetJobDatas(Expression<Func<JobData, bool>> predicate) {
-      using (var db = CreateContext()) {
+      using (var db = CreateContext(true)) {
         return db.JobDatas.Where(predicate).Select(x => Convert.ToDto(x)).ToArray();
       }
@@ -165,5 +167,5 @@
 
     public Guid AddJobData(DT.JobData dto) {
-      using (var db = CreateContext()) {
+      using (var db = CreateContext(true)) {
         var entity = Convert.ToEntity(dto);
         db.JobDatas.InsertOnSubmit(entity);
@@ -174,5 +176,5 @@
 
     public void UpdateJobData(DT.JobData dto) {
-      using (var db = CreateContext()) {
+      using (var db = CreateContext(true)) {
         var entity = db.JobDatas.FirstOrDefault(x => x.JobId == dto.JobId);
         if (entity == null) db.JobDatas.InsertOnSubmit(Convert.ToEntity(dto));
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.DataAccess/3.4/Tools/prepareHiveDatabase.sql
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.DataAccess/3.4/Tools/prepareHiveDatabase.sql	(revision 6418)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.DataAccess/3.4/Tools/prepareHiveDatabase.sql	(revision 6419)
@@ -25,5 +25,5 @@
 
 ALTER TABLE dbo.AssignedResources ALTER COLUMN AssignedRessourcesId ADD ROWGUIDCOL;
-ALTER TABLE dbo.AssignedResources WITH NOCHECK ADD CONSTRAINT [DF_AssignedResources_AssignedRessourcesId] DEFAULT (newid()) FOR AssignedRessourcesId;
+ALTER TABLE dbo.AssignedResources WITH NOCHECK ADD CONSTRAINT [DF_AssignedResources_AssignedRessourcesId] DEFAULT (NEWSEQUENTIALID()) FOR AssignedRessourcesId;
 ALTER TABLE [dbo].[AssignedResources]  DROP  CONSTRAINT [Job_AssignedResource]
 ALTER TABLE [dbo].[AssignedResources]  WITH CHECK ADD  CONSTRAINT [Job_AssignedResource] FOREIGN KEY([JobId])
@@ -40,5 +40,5 @@
 
 ALTER TABLE dbo.Job ALTER COLUMN JobId ADD ROWGUIDCOL;
-ALTER TABLE dbo.Job WITH NOCHECK ADD CONSTRAINT [DF_Job_JobId] DEFAULT (newid()) FOR JobId;
+ALTER TABLE dbo.Job WITH NOCHECK ADD CONSTRAINT [DF_Job_JobId] DEFAULT (NEWSEQUENTIALID()) FOR JobId;
 GO
 
@@ -57,8 +57,8 @@
 
 ALTER TABLE dbo.Plugin ALTER COLUMN PluginId ADD ROWGUIDCOL;
-ALTER TABLE dbo.Plugin WITH NOCHECK ADD CONSTRAINT [DF_Plugin_PluginId] DEFAULT (newid()) FOR PluginId;
+ALTER TABLE dbo.Plugin WITH NOCHECK ADD CONSTRAINT [DF_Plugin_PluginId] DEFAULT (NEWSEQUENTIALID()) FOR PluginId;
 
 ALTER TABLE dbo.PluginData ALTER COLUMN PluginDataId ADD ROWGUIDCOL;
-ALTER TABLE dbo.PluginData WITH NOCHECK ADD CONSTRAINT [DF_PluginData_PluginDataId] DEFAULT (newid()) FOR PluginDataId;
+ALTER TABLE dbo.PluginData WITH NOCHECK ADD CONSTRAINT [DF_PluginData_PluginDataId] DEFAULT (NEWSEQUENTIALID()) FOR PluginDataId;
 
 ALTER TABLE [dbo].[PluginData]  DROP  CONSTRAINT [Plugin_PluginData]
@@ -70,5 +70,5 @@
 
 ALTER TABLE dbo.RequiredPlugins ALTER COLUMN RequiredPluginId ADD ROWGUIDCOL;
-ALTER TABLE dbo.RequiredPlugins WITH NOCHECK ADD CONSTRAINT [DF_RequiredPlugins_RequiredPluginId] DEFAULT (newid()) FOR RequiredPluginId;
+ALTER TABLE dbo.RequiredPlugins WITH NOCHECK ADD CONSTRAINT [DF_RequiredPlugins_RequiredPluginId] DEFAULT (NEWSEQUENTIALID()) FOR RequiredPluginId;
 
 ALTER TABLE [dbo].[RequiredPlugins]  DROP  CONSTRAINT [Job_RequiredPlugin]
@@ -87,14 +87,14 @@
 
 ALTER TABLE dbo.Resource ALTER COLUMN ResourceId ADD ROWGUIDCOL;
-ALTER TABLE dbo.Resource WITH NOCHECK ADD CONSTRAINT [DF_Resource_ResourceId] DEFAULT (newid()) FOR ResourceId;
+ALTER TABLE dbo.Resource WITH NOCHECK ADD CONSTRAINT [DF_Resource_ResourceId] DEFAULT (NEWSEQUENTIALID()) FOR ResourceId;
 
 ALTER TABLE dbo.UptimeCalendar ALTER COLUMN UptimeCalendarId ADD ROWGUIDCOL;
-ALTER TABLE dbo.UptimeCalendar WITH NOCHECK ADD CONSTRAINT [DF_UptimeCalendar_UptimeCalendarId] DEFAULT (newid()) FOR UptimeCalendarId;
+ALTER TABLE dbo.UptimeCalendar WITH NOCHECK ADD CONSTRAINT [DF_UptimeCalendar_UptimeCalendarId] DEFAULT (NEWSEQUENTIALID()) FOR UptimeCalendarId;
 
 ALTER TABLE dbo.HiveExperiment ALTER COLUMN HiveExperimentId ADD ROWGUIDCOL;
-ALTER TABLE dbo.HiveExperiment WITH NOCHECK ADD CONSTRAINT [DF_HiveExperiment_HiveExperimentId] DEFAULT (newid()) FOR HiveExperimentId;
+ALTER TABLE dbo.HiveExperiment WITH NOCHECK ADD CONSTRAINT [DF_HiveExperiment_HiveExperimentId] DEFAULT (NEWSEQUENTIALID()) FOR HiveExperimentId;
 
 ALTER TABLE dbo.StateLog ALTER COLUMN StateLogId ADD ROWGUIDCOL;
-ALTER TABLE dbo.StateLog WITH NOCHECK ADD CONSTRAINT [DF_StateLog_StateLogId] DEFAULT (newid()) FOR StateLogId;
+ALTER TABLE dbo.StateLog WITH NOCHECK ADD CONSTRAINT [DF_StateLog_StateLogId] DEFAULT (NEWSEQUENTIALID()) FOR StateLogId;
 
 ALTER TABLE [dbo].[HiveExperimentPermission]  DROP  CONSTRAINT [HiveExperiment_HiveExperimentPermission]
@@ -106,9 +106,9 @@
 
 ALTER TABLE [dbo].[Statistics] ALTER COLUMN StatisticsId ADD ROWGUIDCOL;
-ALTER TABLE [dbo].[Statistics] WITH NOCHECK ADD CONSTRAINT [DF_Statistics_StatisticsId] DEFAULT (newid()) FOR StatisticsId;
+ALTER TABLE [dbo].[Statistics] WITH NOCHECK ADD CONSTRAINT [DF_Statistics_StatisticsId] DEFAULT (NEWSEQUENTIALID()) FOR StatisticsId;
 GO
 
 ALTER TABLE [dbo].[DeletedJobStatistics] ALTER COLUMN DeletedJobStatisticsId ADD ROWGUIDCOL;
-ALTER TABLE [dbo].[DeletedJobStatistics] WITH NOCHECK ADD CONSTRAINT [DF_DeletedJobStatistics_DeletedJobStatisticsId] DEFAULT (newid()) FOR DeletedJobStatisticsId;
+ALTER TABLE [dbo].[DeletedJobStatistics] WITH NOCHECK ADD CONSTRAINT [DF_DeletedJobStatistics_DeletedJobStatisticsId] DEFAULT (NEWSEQUENTIALID()) FOR DeletedJobStatisticsId;
 GO
 
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.DataAccess/3.4/TransactionManager.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.DataAccess/3.4/TransactionManager.cs	(revision 6418)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.DataAccess/3.4/TransactionManager.cs	(revision 6419)
@@ -22,9 +22,10 @@
 using System;
 using System.Transactions;
+using HeuristicLab.Services.Hive.Common;
 
 namespace HeuristicLab.Services.Hive.DataAccess {
   public class TransactionManager {
-    public void UseTransaction(Action call, bool serializable = false) {
-      TransactionScope transaction = serializable ? CreateSerializableTransaction() : CreateTransaction();
+    public void UseTransaction(Action call, bool serializable = false, bool longRunning = false) {
+      TransactionScope transaction = CreateTransaction(serializable, longRunning);
       try {
         call();
@@ -36,6 +37,6 @@
     }
 
-    public T UseTransaction<T>(Func<T> call, bool serializable = false) {
-      TransactionScope transaction = serializable ? CreateSerializableTransaction() : CreateTransaction();
+    public T UseTransaction<T>(Func<T> call, bool serializable = false, bool longRunning = false) {
+      TransactionScope transaction = CreateTransaction(serializable, longRunning);
       try {
         T result = call();
@@ -47,10 +48,16 @@
       }
     }
+    
+    private static TransactionScope CreateTransaction(bool serializable, bool longRunning) {
+      var options = new TransactionOptions();
+      if (serializable)
+        options.IsolationLevel = IsolationLevel.Serializable;
+      else
+        options.IsolationLevel = IsolationLevel.ReadUncommitted;
 
-    private static TransactionScope CreateTransaction() {
-      return new TransactionScope(TransactionScopeOption.Required, new TransactionOptions { IsolationLevel = IsolationLevel.ReadUncommitted });
-    }
-    private static TransactionScope CreateSerializableTransaction() {
-      return new TransactionScope(TransactionScopeOption.Required, new TransactionOptions { IsolationLevel = IsolationLevel.Serializable });
+      if (longRunning)
+        options.Timeout = ApplicationConstants.LongRunningDatabaseCommandTimeout;
+      
+      return new TransactionScope(TransactionScopeOption.Required, options);
     }
   }
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.4/HiveService.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.4/HiveService.cs	(revision 6418)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.4/HiveService.cs	(revision 6419)
@@ -47,5 +47,5 @@
         dao.UpdateJobState(job.Id, JobState.Waiting, null, author.UserId, null);
         return jobData.JobId;
-      });
+      }, false, true);
     }
 
@@ -55,5 +55,5 @@
         job.ParentJobId = parentJobId;
         return AddJob(job, jobData, dao.GetAssignedResources(parentJobId).Select(x => x.Id));
-      });
+      }, false, true);
     }
 
@@ -97,9 +97,9 @@
     public void UpdateJobData(Job job, JobData jobData) {
       authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client, HiveRoles.Slave);
-      trans.UseTransaction(() => {
+      //trans.UseTransaction(() => { // cneumuel: try without transaction
         jobData.LastUpdate = DateTime.Now;
         dao.UpdateJob(job);
         dao.UpdateJobData(jobData);
-      });
+      //}, false, true);
     }
 
