Index: branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Administration/3.4/Views/ResourcesView.cs
===================================================================
--- branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Administration/3.4/Views/ResourcesView.cs	(revision 6463)
+++ branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Administration/3.4/Views/ResourcesView.cs	(revision 6464)
@@ -38,4 +38,9 @@
     }
 
+    private const string ungroupedGroupName = "UNGROUPED";
+    private const int slaveImageIndex = 0;
+    private const int slaveGroupImageIndex = 1;
+
+
     public ResourcesView() {
       InitializeComponent();
@@ -68,9 +73,9 @@
 
         //rebuild
-        TreeNode ungrp = new TreeNode("UNGROUPED");
-        ungrp.ImageIndex = treeSlaveGroup.ImageList.Images.Count - 1;
+        TreeNode ungrp = new TreeNode(ungroupedGroupName);
+        ungrp.ImageIndex = slaveGroupImageIndex;
         ungrp.SelectedImageIndex = ungrp.ImageIndex;
         var newGroup = new SlaveGroup();
-        newGroup.Name = "UNGROUPED";
+        newGroup.Name = ungroupedGroupName;
         newGroup.Id = Guid.NewGuid();
         newGroup.Description = "Contains slaves which are in no group";
@@ -82,5 +87,5 @@
             if (g.ParentResourceId == null) {
               TreeNode tn = new TreeNode();
-              tn.ImageIndex = treeSlaveGroup.ImageList.Images.Count - 1;
+              tn.ImageIndex = slaveGroupImageIndex;
               tn.SelectedImageIndex = tn.ImageIndex;
 
@@ -89,4 +94,5 @@
 
               BuildSlaveGroupTree(g, tn);
+              tn.ExpandAll();
               treeSlaveGroup.Nodes.Add(tn);
             }
@@ -94,5 +100,5 @@
             if (g.ParentResourceId == null) {
               var stn = new TreeNode(g.Name);
-              stn.ImageIndex = 0;
+              stn.ImageIndex = slaveImageIndex;
               stn.SelectedImageIndex = stn.ImageIndex;
               stn.Tag = g;
@@ -101,4 +107,5 @@
           }
         }
+        ungrp.ExpandAll();
         treeSlaveGroup.Nodes.Add(ungrp);
       }
@@ -111,5 +118,5 @@
           stn.ImageIndex = 0;
         } else if (r is SlaveGroup) {
-          stn.ImageIndex = treeSlaveGroup.ImageList.Images.Count - 1;
+          stn.ImageIndex = slaveGroupImageIndex;
         }
         stn.SelectedImageIndex = stn.ImageIndex;
@@ -204,4 +211,10 @@
 
         if (destNode.TreeView == newNode.TreeView) {
+          if (destNode.Text == ungroupedGroupName || (destNode.Parent != null && destNode.Parent.Text == ungroupedGroupName)) {
+            MessageBox.Show(String.Format("You can't drag items to the {0} group.{1}This group only contains slaves which haven't yet been assigned to a real group.",
+              ungroupedGroupName, Environment.NewLine), "HeuristicLab Hive Administration", MessageBoxButtons.OK, MessageBoxIcon.Information);
+            return;
+          }
+
           SlaveGroup sgrp = null;
           if (destNode.Tag != null && destNode.Tag is SlaveGroup) {
Index: branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Administration/3.4/Views/SlaveView.Designer.cs
===================================================================
--- branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Administration/3.4/Views/SlaveView.Designer.cs	(revision 6463)
+++ branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Administration/3.4/Views/SlaveView.Designer.cs	(revision 6464)
@@ -69,4 +69,5 @@
       this.txtSlaveState.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
                   | System.Windows.Forms.AnchorStyles.Right)));
+      this.txtSlaveState.Enabled = false;
       this.txtSlaveState.Location = new System.Drawing.Point(120, 186);
       this.txtSlaveState.Name = "txtSlaveState";
@@ -78,4 +79,5 @@
       this.txtOS.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
                   | System.Windows.Forms.AnchorStyles.Right)));
+      this.txtOS.Enabled = false;
       this.txtOS.Location = new System.Drawing.Point(120, 160);
       this.txtOS.Name = "txtOS";
@@ -105,4 +107,5 @@
       this.txtDetailsDescription.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
                   | System.Windows.Forms.AnchorStyles.Right)));
+      this.txtDetailsDescription.Enabled = false;
       this.txtDetailsDescription.Location = new System.Drawing.Point(120, 56);
       this.txtDetailsDescription.Name = "txtDetailsDescription";
@@ -127,5 +130,5 @@
       this.txtName.Size = new System.Drawing.Size(249, 20);
       this.txtName.TabIndex = 21;
-      this.txtName.TextChanged += new System.EventHandler(this.txtName_TextChanged_1);
+      this.txtName.TextChanged += new System.EventHandler(this.txtName_TextChanged);
       // 
       // txtCPU
@@ -133,4 +136,5 @@
       this.txtCPU.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
                   | System.Windows.Forms.AnchorStyles.Right)));
+      this.txtCPU.Enabled = false;
       this.txtCPU.Location = new System.Drawing.Point(120, 82);
       this.txtCPU.Name = "txtCPU";
@@ -142,4 +146,5 @@
       this.txtMemory.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
                   | System.Windows.Forms.AnchorStyles.Right)));
+      this.txtMemory.Enabled = false;
       this.txtMemory.Location = new System.Drawing.Point(120, 108);
       this.txtMemory.Name = "txtMemory";
@@ -151,4 +156,5 @@
       this.txtLastHeartbeat.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
                   | System.Windows.Forms.AnchorStyles.Right)));
+      this.txtLastHeartbeat.Enabled = false;
       this.txtLastHeartbeat.Location = new System.Drawing.Point(120, 212);
       this.txtLastHeartbeat.Name = "txtLastHeartbeat";
@@ -205,4 +211,5 @@
       this.txtFreeMemory.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
                   | System.Windows.Forms.AnchorStyles.Right)));
+      this.txtFreeMemory.Enabled = false;
       this.txtFreeMemory.Location = new System.Drawing.Point(120, 134);
       this.txtFreeMemory.Name = "txtFreeMemory";
@@ -214,4 +221,5 @@
       this.txtId.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
                   | System.Windows.Forms.AnchorStyles.Right)));
+      this.txtId.Enabled = false;
       this.txtId.Location = new System.Drawing.Point(120, 30);
       this.txtId.Name = "txtId";
Index: branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Administration/3.4/Views/SlaveView.cs
===================================================================
--- branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Administration/3.4/Views/SlaveView.cs	(revision 6463)
+++ branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Administration/3.4/Views/SlaveView.cs	(revision 6464)
@@ -66,5 +66,5 @@
           Slave ct = (Slave)Content;
           txtName.Text = ct.Name;
-          txtCPU.Text = ct.Cores.ToString() + " Cores @ " + ct.CpuSpeed.ToString() + " Mhz, Arch.: " + ct.CpuArchitecture.ToString();
+          txtCPU.Text = string.Format("{0} Cores @ {1} Mhz, Arch.: {2}", ct.Cores.ToString(), ct.CpuSpeed.ToString(), ct.CpuArchitecture.ToString());
           txtDetailsDescription.Text = ct.Description;
           txtMemory.Text = ct.Memory.ToString();
@@ -78,12 +78,8 @@
           txtName.Text = ct.Name;
           ShowSlaveUI(false);
-        } else
+        } else {
           throw new Exception("Unknown Resource in SlaveView");
-
+        }
       }
-    }
-
-    void txtName_TextChanged(object sender, EventArgs e) {
-      throw new NotImplementedException();
     }
 
@@ -105,4 +101,5 @@
       txtFreeMemory.Visible = show;
       txtId.Visible = show;
+      txtName.Enabled = !show;
     }
 
@@ -111,5 +108,5 @@
     }
 
-    private void txtName_TextChanged_1(object sender, EventArgs e) {
+    private void txtName_TextChanged(object sender, EventArgs e) {
       if (Content != null && Content is SlaveGroup) {
         Content.Name = txtName.Text;
Index: branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.4/Core.cs
===================================================================
--- branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.4/Core.cs	(revision 6463)
+++ branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.4/Core.cs	(revision 6464)
@@ -299,4 +299,7 @@
         throw;
       }
+      catch (AppDomainNotCreatedException) {
+        throw;
+      }
     }
 
@@ -394,4 +397,5 @@
       heartbeatManager.AwakeHeartBeatThread();
       clientCom.LogMessage(string.Format("Exception occured for job {0}: {1}", e.Value.JobId, e.Value2.ToString()));
+      wcfService.UpdateJobState(e.Value.JobId, JobState.Waiting, e.Value2.ToString());
     }
 
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 6463)
+++ branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.4/Executor.cs	(revision 6464)
@@ -33,7 +33,7 @@
   public class Executor : MarshalByRefObject, IDisposable {
     private bool wasJobAborted = false;
-    private Semaphore pauseStopSem = new Semaphore(0, 1);
-    private Semaphore startJobSem = new Semaphore(0, 1);
-    private Semaphore jobStartedSem = new Semaphore(0, 1); // make pause or stop wait until start is finished
+    private AutoResetEvent pauseStopSem = new AutoResetEvent(false);
+    private AutoResetEvent startJobSem = new AutoResetEvent(false); // block start method call
+    private AutoResetEvent jobStartedSem = new AutoResetEvent(false); // make pause or stop wait until start is finished
     private ExecutorQueue executorQueue;
     private bool jobDataInvalid = false; // if true, the jobdata is not sent when the job is failed
@@ -47,9 +47,9 @@
     public bool IsPausing { get; set; }
 
-    private Exception currentException;
-    public String CurrentException {
+    public Exception CurrentException;
+    public String CurrentExceptionStr {
       get {
-        if (currentException != null) {
-          return currentException.ToString();
+        if (CurrentException != null) {
+          return CurrentException.ToString();
         } else {
           return string.Empty;
@@ -84,13 +84,15 @@
 
         job.Start();
-        if (!jobStartedSem.WaitOne(TimeSpan.FromSeconds(Settings.Default.ExecutorSemTimeouts))) {
+        if (!startJobSem.WaitOne(Settings.Default.ExecutorSemTimeouts)) {
           jobDataInvalid = true;
           throw new TimeoutException("Timeout when starting the job. JobStarted event was not fired.");
         }
-        jobStartedSem.Release();
       }
       catch (Exception e) {
-        this.currentException = e;
+        this.CurrentException = e;
         Job_JobFailed(this, new EventArgs<Exception>(e));
+      }
+      finally {
+        jobStartedSem.Set();
       }
     }
@@ -101,5 +103,6 @@
       jobStartedSem.WaitOne(Settings.Default.ExecutorSemTimeouts);
       if (job == null) {
-        currentException = new Exception("Pausing job " + this.JobId + ": Job is null");
+        CurrentException = new Exception("Pausing job " + this.JobId + ": Job is null");
+        executorQueue.AddMessage(ExecutorMessageType.ExceptionOccured);
         return;
       }
@@ -112,5 +115,6 @@
         }
         catch (Exception ex) {
-          currentException = new Exception("Error pausing job " + this.JobId + ": " + ex.ToString());
+          CurrentException = new Exception("Error pausing job " + this.JobId + ": " + ex.ToString());
+          executorQueue.AddMessage(ExecutorMessageType.ExceptionOccured);
         }
       }
@@ -122,5 +126,6 @@
       jobStartedSem.WaitOne(Settings.Default.ExecutorSemTimeouts);
       if (job == null) {
-        currentException = new Exception("Stopping job " + this.JobId + ": Job is null");
+        CurrentException = new Exception("Stopping job " + this.JobId + ": Job is null");
+        executorQueue.AddMessage(ExecutorMessageType.ExceptionOccured);
       }
       wasJobAborted = true;
@@ -132,5 +137,6 @@
         }
         catch (Exception ex) {
-          currentException = new Exception("Error stopping job " + this.JobId + ": " + ex.ToString());
+          CurrentException = new Exception("Error stopping job " + this.JobId + ": " + ex.ToString());
+          executorQueue.AddMessage(ExecutorMessageType.ExceptionOccured);
         }
       }
@@ -155,6 +161,5 @@
       IsStopping = true;
       EventArgs<Exception> ex = (EventArgs<Exception>)e;
-      currentException = ex.Value;
-
+      CurrentException = ex.Value;
       executorQueue.AddMessage(ExecutorMessageType.JobFailed);
     }
@@ -162,7 +167,7 @@
     private void Job_JobStopped(object sender, EventArgs e) {
       IsStopping = true;
-      if (wasJobAborted)
-        pauseStopSem.Release();
-
+      if (wasJobAborted) {
+        pauseStopSem.Set();
+      }
       executorQueue.AddMessage(ExecutorMessageType.JobStopped);
     }
@@ -170,10 +175,10 @@
     private void Job_JobPaused(object sender, EventArgs e) {
       IsPausing = true;
-      pauseStopSem.Release();
+      pauseStopSem.Set();
       executorQueue.AddMessage(ExecutorMessageType.JobPaused);
     }
 
     private void Job_JobStarted(object sender, EventArgs e) {
-      jobStartedSem.Release();
+      startJobSem.Set();
       executorQueue.AddMessage(ExecutorMessageType.JobStarted);
     }
@@ -190,6 +195,6 @@
           //send empty job and save exception
           jobData.Data = PersistenceUtil.Serialize(new JobData());
-          if (currentException == null) {
-            currentException = new Exception("Job with id " + this.JobId + " is null, sending empty job");
+          if (CurrentException == null) {
+            CurrentException = new Exception("Job with id " + this.JobId + " is null, sending empty job");
           }
         } else {
Index: branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.4/ExecutorMessage.cs
===================================================================
--- branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.4/ExecutorMessage.cs	(revision 6463)
+++ branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.4/ExecutorMessage.cs	(revision 6464)
@@ -30,5 +30,6 @@
     JobStopped,
     JobFailed,
-    StopExecutorMonitoringThread
+    StopExecutorMonitoringThread,
+    ExceptionOccured
   }
 
Index: branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.4/Manager/HeartbeatManager.cs
===================================================================
--- branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.4/Manager/HeartbeatManager.cs	(revision 6463)
+++ branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.4/Manager/HeartbeatManager.cs	(revision 6464)
@@ -40,5 +40,5 @@
 
     public HeartbeatManager() {
-      Interval = new TimeSpan(0, 0, Settings.Default.HeartbeatInterval);
+      Interval = Settings.Default.HeartbeatInterval;
     }
 
Index: branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.4/Properties/Settings.Designer.cs
===================================================================
--- branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.4/Properties/Settings.Designer.cs	(revision 6463)
+++ branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.4/Properties/Settings.Designer.cs	(revision 6464)
@@ -26,8 +26,8 @@
         [global::System.Configuration.UserScopedSettingAttribute()]
         [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-        [global::System.Configuration.DefaultSettingValueAttribute("10")]
-        public int HeartbeatInterval {
-            get {
-                return ((int)(this["HeartbeatInterval"]));
+        [global::System.Configuration.DefaultSettingValueAttribute("00:00:10")]
+        public global::System.TimeSpan HeartbeatInterval {
+            get {
+                return ((global::System.TimeSpan)(this["HeartbeatInterval"]));
             }
             set {
@@ -182,8 +182,8 @@
         [global::System.Configuration.UserScopedSettingAttribute()]
         [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-        [global::System.Configuration.DefaultSettingValueAttribute("50")]
-        public int DirOpSleepTime {
-            get {
-                return ((int)(this["DirOpSleepTime"]));
+        [global::System.Configuration.DefaultSettingValueAttribute("00:00:01")]
+        public global::System.TimeSpan DirOpSleepTime {
+            get {
+                return ((global::System.TimeSpan)(this["DirOpSleepTime"]));
             }
             set {
@@ -206,8 +206,8 @@
         [global::System.Configuration.UserScopedSettingAttribute()]
         [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-        [global::System.Configuration.DefaultSettingValueAttribute("1000")]
-        public int PluginDeletionTimeout {
-            get {
-                return ((int)(this["PluginDeletionTimeout"]));
+        [global::System.Configuration.DefaultSettingValueAttribute("00:00:01")]
+        public global::System.TimeSpan PluginDeletionTimeout {
+            get {
+                return ((global::System.TimeSpan)(this["PluginDeletionTimeout"]));
             }
             set {
@@ -218,8 +218,8 @@
         [global::System.Configuration.UserScopedSettingAttribute()]
         [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-        [global::System.Configuration.DefaultSettingValueAttribute("45")]
-        public int ExecutorSemTimeouts {
-            get {
-                return ((int)(this["ExecutorSemTimeouts"]));
+        [global::System.Configuration.DefaultSettingValueAttribute("00:00:46")]
+        public global::System.TimeSpan ExecutorSemTimeouts {
+            get {
+                return ((global::System.TimeSpan)(this["ExecutorSemTimeouts"]));
             }
             set {
Index: branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.4/Properties/Settings.settings
===================================================================
--- branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.4/Properties/Settings.settings	(revision 6463)
+++ branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.4/Properties/Settings.settings	(revision 6464)
@@ -3,6 +3,6 @@
   <Profiles />
   <Settings>
-    <Setting Name="HeartbeatInterval" Type="System.Int32" Scope="User">
-      <Value Profile="(Default)">10</Value>
+    <Setting Name="HeartbeatInterval" Type="System.TimeSpan" Scope="User">
+      <Value Profile="(Default)">00:00:10</Value>
     </Setting>
     <Setting Name="LastUsedFileName" Type="System.String" Scope="User">
@@ -42,15 +42,15 @@
       <Value Profile="(Default)">3</Value>
     </Setting>
-    <Setting Name="DirOpSleepTime" Type="System.Int32" Scope="User">
-      <Value Profile="(Default)">50</Value>
+    <Setting Name="DirOpSleepTime" Type="System.TimeSpan" Scope="User">
+      <Value Profile="(Default)">00:00:01</Value>
     </Setting>
     <Setting Name="PluginDeletionRetries" Type="System.Int32" Scope="User">
       <Value Profile="(Default)">5</Value>
     </Setting>
-    <Setting Name="PluginDeletionTimeout" Type="System.Int32" Scope="User">
-      <Value Profile="(Default)">1000</Value>
+    <Setting Name="PluginDeletionTimeout" Type="System.TimeSpan" Scope="User">
+      <Value Profile="(Default)">00:00:01</Value>
     </Setting>
-    <Setting Name="ExecutorSemTimeouts" Type="System.Int32" Scope="User">
-      <Value Profile="(Default)">45</Value>
+    <Setting Name="ExecutorSemTimeouts" Type="System.TimeSpan" Scope="User">
+      <Value Profile="(Default)">00:00:46</Value>
     </Setting>
     <Setting Name="QueuesMaxThreads" Type="System.Int32" Scope="User">
Index: branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.4/SlaveJob.cs
===================================================================
--- branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.4/SlaveJob.cs	(revision 6463)
+++ branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.4/SlaveJob.cs	(revision 6464)
@@ -202,5 +202,5 @@
           case ExecutorMessageType.JobFailed:
             executorMonitoringRun = false;
-            OnJobFailed(new JobFailedException(executor.CurrentException));
+            OnJobFailed(new JobFailedException(executor.CurrentExceptionStr));
             DisposeAppDomain();
             break;
@@ -208,5 +208,15 @@
           case ExecutorMessageType.StopExecutorMonitoringThread:
             executorMonitoringRun = false;
-            return;
+            break;
+
+          case ExecutorMessageType.ExceptionOccured:
+            executorMonitoringRun = false;
+            DisposeAppDomain();
+            if (executor.CurrentException != null) {
+              OnExceptionOccured(executor.CurrentException);
+            } else {
+              OnExceptionOccured(new Exception(string.Format("Unknow exception occured in Executor for job {0}", JobId)));
+            }
+            break;
         }
       }
Index: branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.4/app_ascheibe.config
===================================================================
--- branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.4/app_ascheibe.config	(revision 6463)
+++ branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.4/app_ascheibe.config	(revision 6464)
@@ -13,5 +13,5 @@
     <HeuristicLab.Clients.Hive.SlaveCore.Properties.Settings>
       <setting name="HeartbeatInterval" serializeAs="String">
-        <value>10</value>
+        <value>00:00:10</value>
       </setting>
       <setting name="LastUsedFileName" serializeAs="String">
@@ -52,5 +52,5 @@
       </setting>
       <setting name="DirOpSleepTime" serializeAs="String">
-        <value>50</value>
+        <value>00:00:01</value>
       </setting>
       <setting name="PluginDeletionRetries" serializeAs="String">
@@ -58,8 +58,8 @@
       </setting>
       <setting name="PluginDeletionTimeout" serializeAs="String">
-        <value>1000</value>
+        <value>00:00:01</value>
       </setting>
       <setting name="ExecutorSemTimeouts" serializeAs="String">
-        <value>45</value>
+        <value>00:00:46</value>
       </setting>
       <setting name="QueuesMaxThreads" serializeAs="String">
Index: branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.4/app_f005pc.config
===================================================================
--- branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.4/app_f005pc.config	(revision 6463)
+++ branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.4/app_f005pc.config	(revision 6464)
@@ -13,5 +13,5 @@
     <HeuristicLab.Clients.Hive.SlaveCore.Properties.Settings>
       <setting name="HeartbeatInterval" serializeAs="String">
-        <value>10</value>
+        <value>00:00:10</value>
       </setting>
       <setting name="LastUsedFileName" serializeAs="String">
@@ -52,5 +52,5 @@
       </setting>
       <setting name="DirOpSleepTime" serializeAs="String">
-        <value>50</value>
+        <value>00:00:01</value>
       </setting>
       <setting name="PluginDeletionRetries" serializeAs="String">
@@ -58,8 +58,8 @@
       </setting>
       <setting name="PluginDeletionTimeout" serializeAs="String">
-        <value>1000</value>
+        <value>00:00:01</value>
       </setting>
       <setting name="ExecutorSemTimeouts" serializeAs="String">
-        <value>45</value>
+        <value>00:00:46</value>
       </setting>
       <setting name="QueuesMaxThreads" serializeAs="String">
Index: branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.4/app_services.config
===================================================================
--- branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.4/app_services.config	(revision 6463)
+++ branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.4/app_services.config	(revision 6464)
@@ -13,5 +13,5 @@
     <HeuristicLab.Clients.Hive.SlaveCore.Properties.Settings>
       <setting name="HeartbeatInterval" serializeAs="String">
-        <value>10</value>
+        <value>00:00:10</value>
       </setting>
       <setting name="LastUsedFileName" serializeAs="String">
@@ -52,5 +52,5 @@
       </setting>
       <setting name="DirOpSleepTime" serializeAs="String">
-        <value>50</value>
+        <value>00:00:01</value>
       </setting>
       <setting name="PluginDeletionRetries" serializeAs="String">
@@ -58,8 +58,8 @@
       </setting>
       <setting name="PluginDeletionTimeout" serializeAs="String">
-        <value>1000</value>
+        <value>00:00:01</value>
       </setting>
       <setting name="ExecutorSemTimeouts" serializeAs="String">
-        <value>45</value>
+        <value>00:00:46</value>
       </setting>
       <setting name="QueuesMaxThreads" serializeAs="String">
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 6463)
+++ 	(revision )
@@ -1,245 +1,0 @@
-USE [HeuristicLab.Hive-3.4]
-/* this script is supposed to be executed after the plain DB is generated by the linq-to-sql schema */
-
-/* use these DROP commands if you want to run this query a second time on the same db */
-
-/*
-ALTER TABLE dbo.AssignedResources ALTER COLUMN AssignedRessourcesId DROP ROWGUIDCOL;
-ALTER TABLE dbo.Job ALTER COLUMN JobId DROP ROWGUIDCOL;
-ALTER TABLE dbo.SlaveGroup_Resource ALTER COLUMN SlaveGroup_RessourceId DROP ROWGUIDCOL;
-ALTER TABLE dbo.Plugin ALTER COLUMN PluginId DROP ROWGUIDCOL;
-ALTER TABLE dbo.RequiredPlugins ALTER COLUMN RequiredPluginId DROP ROWGUIDCOL;
-ALTER TABLE dbo.Resource ALTER COLUMN ResourceId DROP ROWGUIDCOL;
-ALTER TABLE dbo.UptimeCalendar ALTER COLUMN UptimeCalendarId DROP ROWGUIDCOL;
-ALTER TABLE dbo.HiveExperiment ALTER COLUMN HiveExperimentId DROP ROWGUIDCOL;
-
-ALTER TABLE dbo.AssignedResources DROP CONSTRAINT [DF_AssignedResources_AssignedRessourcesId];
-ALTER TABLE dbo.Job DROP CONSTRAINT [DF_Job_JobId];
-ALTER TABLE dbo.SlaveGroup_Resource DROP CONSTRAINT [DF_SlaveGroup_ResourceSlaveGroup_RessourceId];
-ALTER TABLE dbo.Plugin DROP CONSTRAINT [DF_Plugin_PluginId];
-ALTER TABLE dbo.RequiredPlugins DROP CONSTRAINT [DF_RequiredPlugins_RequiredPluginId];
-ALTER TABLE dbo.Resource DROP CONSTRAINT [DF_Resource_ResourceId];
-ALTER TABLE dbo.UptimeCalendar DROP CONSTRAINT [DF_UptimeCalendar_UptimeCalendarId];
-ALTER TABLE dbo.HiveExperiment DROP CONSTRAINT [DF_HiveExperiment_HiveExperimentId];
-*/
-
-ALTER TABLE dbo.AssignedResources ALTER COLUMN AssignedRessourcesId ADD ROWGUIDCOL;
-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])
-REFERENCES [dbo].[Job] ([JobId])
-ON UPDATE CASCADE
-ON DELETE CASCADE
-GO
-ALTER TABLE [dbo].[AssignedResources]  DROP  CONSTRAINT [Resource_AssignedResource]
-ALTER TABLE [dbo].[AssignedResources]  WITH CHECK ADD  CONSTRAINT [Resource_AssignedResource] FOREIGN KEY([ResourceId])
-REFERENCES [dbo].[Resource] ([ResourceId])
-ON UPDATE CASCADE
-ON DELETE CASCADE
-GO
-
-ALTER TABLE dbo.Job ALTER COLUMN JobId ADD ROWGUIDCOL;
-ALTER TABLE dbo.Job WITH NOCHECK ADD CONSTRAINT [DF_Job_JobId] DEFAULT (NEWSEQUENTIALID()) FOR JobId;
-GO
-
-ALTER TABLE [dbo].[StateLog]  DROP  CONSTRAINT [Job_StateLog]
-ALTER TABLE [dbo].[StateLog]  WITH CHECK ADD CONSTRAINT [Job_StateLog] FOREIGN KEY([JobId])
-REFERENCES [dbo].[Job] ([JobId])
-ON UPDATE CASCADE
-ON DELETE CASCADE
-GO
-ALTER TABLE [dbo].[StateLog]  DROP  CONSTRAINT [Resource_StateLog]
-ALTER TABLE [dbo].[StateLog]  WITH CHECK ADD CONSTRAINT [Resource_StateLog] FOREIGN KEY([SlaveId])
-REFERENCES [dbo].[Resource] ([ResourceId])
-ON UPDATE CASCADE
-ON DELETE SET NULL
-GO
-
-ALTER TABLE dbo.Plugin ALTER COLUMN PluginId ADD ROWGUIDCOL;
-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 (NEWSEQUENTIALID()) FOR PluginDataId;
-
-ALTER TABLE [dbo].[PluginData]  DROP  CONSTRAINT [Plugin_PluginData]
-ALTER TABLE [dbo].[PluginData]  WITH CHECK ADD  CONSTRAINT [Plugin_PluginData] FOREIGN KEY([PluginId])
-REFERENCES [dbo].[Plugin] ([PluginId])
-ON UPDATE CASCADE
-ON DELETE CASCADE
-GO
-
-ALTER TABLE dbo.RequiredPlugins ALTER COLUMN RequiredPluginId ADD ROWGUIDCOL;
-ALTER TABLE dbo.RequiredPlugins WITH NOCHECK ADD CONSTRAINT [DF_RequiredPlugins_RequiredPluginId] DEFAULT (NEWSEQUENTIALID()) FOR RequiredPluginId;
-
-ALTER TABLE [dbo].[RequiredPlugins]  DROP  CONSTRAINT [Job_RequiredPlugin]
-ALTER TABLE [dbo].[RequiredPlugins]  WITH CHECK ADD  CONSTRAINT [Job_RequiredPlugin] FOREIGN KEY([JobId])
-REFERENCES [dbo].[Job] ([JobId])
-ON UPDATE CASCADE
-ON DELETE CASCADE
-GO
-
-ALTER TABLE [dbo].[RequiredPlugins]  DROP  CONSTRAINT [Plugin_RequiredPlugin]
-ALTER TABLE [dbo].[RequiredPlugins]  WITH CHECK ADD  CONSTRAINT [Plugin_RequiredPlugin] FOREIGN KEY([PluginId])
-REFERENCES [dbo].[Plugin] ([PluginId])
-ON UPDATE CASCADE
-ON DELETE CASCADE
-GO
-
-ALTER TABLE dbo.Resource ALTER COLUMN ResourceId ADD ROWGUIDCOL;
-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 (NEWSEQUENTIALID()) FOR UptimeCalendarId;
-
-ALTER TABLE dbo.HiveExperiment ALTER COLUMN HiveExperimentId ADD ROWGUIDCOL;
-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 (NEWSEQUENTIALID()) FOR StateLogId;
-
-ALTER TABLE [dbo].[HiveExperimentPermission]  DROP  CONSTRAINT [HiveExperiment_HiveExperimentPermission]
-ALTER TABLE [dbo].[HiveExperimentPermission]  WITH CHECK ADD CONSTRAINT [HiveExperiment_HiveExperimentPermission] FOREIGN KEY([HiveExperimentId])
-REFERENCES [dbo].[HiveExperiment] ([HiveExperimentId])
-ON UPDATE CASCADE
-ON DELETE CASCADE
-GO
-
-ALTER TABLE [dbo].[Statistics] ALTER COLUMN StatisticsId ADD ROWGUIDCOL;
-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 (NEWSEQUENTIALID()) FOR DeletedJobStatisticsId;
-GO
-
-ALTER TABLE [dbo].[SlaveStatistics]  DROP  CONSTRAINT [Statistics_SlaveStatistics]
-ALTER TABLE [dbo].[SlaveStatistics]  WITH CHECK ADD  CONSTRAINT [Statistics_SlaveStatistics] FOREIGN KEY([StatisticsId])
-REFERENCES [dbo].[Statistics] ([StatisticsId])
-ON UPDATE CASCADE
-ON DELETE CASCADE
-GO
-
-ALTER TABLE [dbo].[UserStatistics]  DROP  CONSTRAINT [Statistics_UserStatistics]
-ALTER TABLE [dbo].[UserStatistics]  WITH CHECK ADD  CONSTRAINT [Statistics_UserStatistics] FOREIGN KEY([StatisticsId])
-REFERENCES [dbo].[Statistics] ([StatisticsId])
-ON UPDATE CASCADE
-ON DELETE CASCADE
-GO
-
-/* create indices */
-CREATE INDEX Index_RequiredPlugins_JobId ON RequiredPlugins(JobId);
-GO
-
-/* views */
--- =============================================
--- Author:		cneumuel
--- Description:	Returns the first StateLog entry for each job
--- =============================================
-CREATE VIEW [dbo].[view_FirstState]
-AS
-SELECT     sl.JobId, sl.DateTime, sl.State
-FROM         dbo.StateLog AS sl INNER JOIN
-                          (SELECT     JobId, MIN(DateTime) AS DateTime
-                            FROM          dbo.StateLog
-                            GROUP BY JobId) AS minDate ON sl.DateTime = minDate.DateTime AND sl.JobId = minDate.JobId
-
-GO
-
--- =============================================
--- Author:		cneumuel
--- Description:	Returns the last StateLog entry for each job
--- =============================================
-CREATE VIEW [dbo].[view_LastState]
-AS
-SELECT     sl.JobId, sl.DateTime, sl.State
-FROM         dbo.StateLog AS sl INNER JOIN
-                          (SELECT     JobId, MAX(DateTime) AS DateTime
-                            FROM          dbo.StateLog
-                            GROUP BY JobId) AS minDate ON sl.DateTime = minDate.DateTime AND sl.JobId = minDate.JobId
-
-GO
-
-/* triggers */
-GO
-/****** Object:  Trigger [dbo].[tr_HiveExperimentDeleteCascade]    Script Date: 04/19/2011 16:31:53 ******/
-SET ANSI_NULLS ON
-GO
-SET QUOTED_IDENTIFIER ON
-GO
--- =============================================
--- Author:		cneumuel
--- Create date: 19.04.2011
--- Description:	(1) Writes the execution times of deleted jobs into DeletedJobStats to ensure correct statistics
---				(2) Deletes all associated jobs. This cannot be done with cascading delete, 
---              because the job table defines a INSTEAD OF DELETE trigger itself, which
---              is not compatible with cascading deletes.
--- =============================================
-CREATE TRIGGER [dbo].[tr_HiveExperimentDeleteCascade] ON [dbo].[HiveExperiment] INSTEAD OF DELETE AS 
-BEGIN
-	DELETE Job FROM deleted, Job WHERE deleted.HiveExperimentId = Job.HiveExperimentId
-	DELETE HiveExperiment FROM deleted, HiveExperiment WHERE deleted.HiveExperimentId = HiveExperiment.HiveExperimentId
-END
-GO
-
--- =============================================
--- Author:		cneumuel
--- Create date: 11.11.2010
--- Description:	Recursively deletes all child-jobs of a job when it is deleted. (Source: http://devio.wordpress.com/2008/05/23/recursive-delete-in-sql-server/)
--- =============================================
-CREATE TRIGGER [dbo].[tr_JobDeleteCascade] ON [dbo].[Job] INSTEAD OF DELETE AS 
-BEGIN
-	-- add statistics
-	INSERT INTO dbo.DeletedJobStatistics (UserId, ExecutionTimeMs, ExecutionTimeMsFinishedJobs, StartToEndTimeMs)
-	SELECT 
-		he.OwnerUserId AS UserId, 
-		SUM(j.ExecutionTimeMs) AS ExecutionTimeMs, 
-		SUM(CASE ls.State WHEN 'Finished' THEN j.ExecutionTimeMs END) AS ExecutionTimeMsFinishedJobs,
-		SUM(CASE ls.State WHEN 'Finished' THEN DATEDIFF(MS,fs.DateTime,ls.DateTime) ELSE 0 END) AS StartToEndMs
-	FROM 
-		deleted j, 
-		HiveExperiment he, 
-		view_FirstState fs, 
-		view_LastState ls
-	WHERE 
-		he.HiveExperimentId = j.HiveExperimentId AND 
-		fs.JobId = j.JobId AND 
-		ls.JobId = j.JobId
-	GROUP BY he.OwnerUserId
-
-	-- recursively delete jobs
-	CREATE TABLE #Table( 
-		JobId uniqueidentifier 
-	)
-	INSERT INTO #Table (JobId)
-	SELECT JobId FROM deleted
-	
-	DECLARE @c INT
-	SET @c = 0
-	
-	WHILE @c <> (SELECT COUNT(JobId) FROM #Table) BEGIN
-		SELECT @c = COUNT(JobId) FROM #Table
-		
-		INSERT INTO #Table (JobId)
-			SELECT Job.JobId
-			FROM Job
-			LEFT OUTER JOIN #Table ON Job.JobId = #Table.JobId
-			WHERE Job.ParentJobId IN (SELECT JobId FROM #Table)
-				AND #Table.JobId IS NULL
-	END
-	
-	DELETE JobData FROM JobData INNER JOIN #Table ON JobData.JobId = #Table.JobId
-	DELETE Job FROM Job INNER JOIN #Table ON Job.JobId = #Table.JobId
-END
-GO
-
--- =============================================
--- Author:		cneumuel
--- Create date: 17.05.2011
--- Description:	Writes the execution times of deleted jobs into DeletedJobStats to ensure correct statistics
--- =============================================
---CREATE TRIGGER [dbo].[tr_DeletedJobStats] ON [dbo].[Job] AFTER DELETE AS
---BEGIN
-
-
---END
---GO
