Index: branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.4/ConfigManager.cs
===================================================================
--- branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.4/ConfigManager.cs	(revision 6268)
+++ branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.4/ConfigManager.cs	(revision 6269)
@@ -48,4 +48,5 @@
     public Core Core { get; set; }
     private Slave slave;
+    private PerformanceCounter cpuCounter;
 
     /// <summary>
@@ -53,4 +54,9 @@
     /// </summary>
     private ConfigManager() {
+      cpuCounter = new PerformanceCounter();
+      cpuCounter.CategoryName = "Processor";
+      cpuCounter.CounterName = "% Processor Time";
+      cpuCounter.InstanceName = "_Total";
+
       Asleep = false;
       slave = new Slave();
@@ -252,4 +258,8 @@
       return mb;
     }
+
+    public float GetCpuUtilization() {
+      return cpuCounter.NextValue();
+    }
   }
 }
Index: branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.4/HeartbeatManager.cs
===================================================================
--- branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.4/HeartbeatManager.cs	(revision 6268)
+++ branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.4/HeartbeatManager.cs	(revision 6269)
@@ -86,9 +86,10 @@
             if (wcfService.ConnState == NetworkEnum.WcfConnState.Connected) {
               Slave info = ConfigManager.Instance.GetClientInfo();
-
+              
               Heartbeat heartBeatData = new Heartbeat {
                 SlaveId = info.Id,
                 FreeCores = info.Cores.HasValue ? info.Cores.Value - SlaveStatusInfo.UsedCores : 0,
                 FreeMemory = ConfigManager.GetFreeMemory(),
+                CpuUtilization = ConfigManager.Instance.GetCpuUtilization(),
                 JobProgress = ConfigManager.Instance.GetExecutionTimeOfAllJobs(),
                 AssignJob = !ConfigManager.Instance.Asleep
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 6268)
+++ branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.4/app_ascheibe.config	(revision 6269)
@@ -1,16 +1,20 @@
 <?xml version="1.0"?>
 <configuration>
-    <configSections>
-        <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-            <section name="HeuristicLab.Clients.Hive.Slave.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false"/>
-        </sectionGroup>
-    </configSections>
-    <userSettings>
-        <HeuristicLab.Clients.Hive.Slave.Properties.Settings>
-            <setting name="Guid" serializeAs="String">
-                <value>00000000-0000-0000-0000-000000000000</value>
-            </setting>
-        </HeuristicLab.Clients.Hive.Slave.Properties.Settings>
-    </userSettings>
+  <runtime>
+    <gcServer enabled="true" />
+  </runtime>
+
+  <configSections>
+    <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+      <section name="HeuristicLab.Clients.Hive.Slave.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false"/>
+    </sectionGroup>
+  </configSections>
+  <userSettings>
+    <HeuristicLab.Clients.Hive.Slave.Properties.Settings>
+      <setting name="Guid" serializeAs="String">
+        <value>00000000-0000-0000-0000-000000000000</value>
+      </setting>
+    </HeuristicLab.Clients.Hive.Slave.Properties.Settings>
+  </userSettings>
 
   <system.serviceModel>
@@ -28,5 +32,5 @@
     </bindings>
     <services>
-      <service name="HeuristicLab.Clients.Hive.SlaveCore.SlaveCommunicationService">        
+      <service name="HeuristicLab.Clients.Hive.SlaveCore.SlaveCommunicationService">
         <endpoint address="net.pipe://localhost/HeuristicLabSlaveCom" binding="netNamedPipeBinding" contract="HeuristicLab.Clients.Hive.SlaveCore.ServiceContracts.ISlaveCommunication"/>
       </service>
@@ -42,3 +46,6 @@
   </system.serviceModel>
 
-<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>
+  <startup>
+    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
+  </startup>
+</configuration>
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 6268)
+++ branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.4/app_f005pc.config	(revision 6269)
@@ -1,16 +1,20 @@
 <?xml version="1.0"?>
 <configuration>
-    <configSections>
-        <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-            <section name="HeuristicLab.Clients.Hive.Slave.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false"/>
-        </sectionGroup>
-    </configSections>
-    <userSettings>
-        <HeuristicLab.Clients.Hive.Slave.Properties.Settings>
-            <setting name="Guid" serializeAs="String">
-                <value>00000000-0000-0000-0000-000000000000</value>
-            </setting>
-        </HeuristicLab.Clients.Hive.Slave.Properties.Settings>
-    </userSettings>
+  <runtime>
+    <gcServer enabled="true" />
+  </runtime>
+
+  <configSections>
+    <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+      <section name="HeuristicLab.Clients.Hive.Slave.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false"/>
+    </sectionGroup>
+  </configSections>
+  <userSettings>
+    <HeuristicLab.Clients.Hive.Slave.Properties.Settings>
+      <setting name="Guid" serializeAs="String">
+        <value>00000000-0000-0000-0000-000000000000</value>
+      </setting>
+    </HeuristicLab.Clients.Hive.Slave.Properties.Settings>
+  </userSettings>
 
   <system.serviceModel>
@@ -28,5 +32,5 @@
     </bindings>
     <services>
-      <service name="HeuristicLab.Clients.Hive.SlaveCore.SlaveCommunicationService">        
+      <service name="HeuristicLab.Clients.Hive.SlaveCore.SlaveCommunicationService">
         <endpoint address="net.pipe://localhost/HeuristicLabSlaveCom" binding="netNamedPipeBinding" contract="HeuristicLab.Clients.Hive.SlaveCore.ServiceContracts.ISlaveCommunication"/>
       </service>
@@ -42,3 +46,6 @@
   </system.serviceModel>
 
-<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>
+  <startup>
+    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
+  </startup>
+</configuration>
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 6268)
+++ branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.4/app_services.config	(revision 6269)
@@ -1,16 +1,20 @@
 <?xml version="1.0"?>
 <configuration>
-    <configSections>
-        <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-            <section name="HeuristicLab.Clients.Hive.Slave.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false"/>
-        </sectionGroup>
-    </configSections>
-    <userSettings>
-        <HeuristicLab.Clients.Hive.Slave.Properties.Settings>
-            <setting name="Guid" serializeAs="String">
-                <value>00000000-0000-0000-0000-000000000000</value>
-            </setting>
-        </HeuristicLab.Clients.Hive.Slave.Properties.Settings>
-    </userSettings>
+  <runtime>
+    <gcServer enabled="true" />
+  </runtime>
+
+  <configSections>
+    <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+      <section name="HeuristicLab.Clients.Hive.Slave.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false"/>
+    </sectionGroup>
+  </configSections>
+  <userSettings>
+    <HeuristicLab.Clients.Hive.Slave.Properties.Settings>
+      <setting name="Guid" serializeAs="String">
+        <value>00000000-0000-0000-0000-000000000000</value>
+      </setting>
+    </HeuristicLab.Clients.Hive.Slave.Properties.Settings>
+  </userSettings>
 
   <system.serviceModel>
@@ -28,5 +32,5 @@
     </bindings>
     <services>
-      <service name="HeuristicLab.Clients.Hive.SlaveCore.SlaveCommunicationService">        
+      <service name="HeuristicLab.Clients.Hive.SlaveCore.SlaveCommunicationService">
         <endpoint address="net.pipe://localhost/HeuristicLabSlaveCom" binding="netNamedPipeBinding" contract="HeuristicLab.Clients.Hive.SlaveCore.ServiceContracts.ISlaveCommunication"/>
       </service>
@@ -42,3 +46,6 @@
   </system.serviceModel>
 
-<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>
+  <startup>
+    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
+  </startup>
+</configuration>
Index: branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.4/ServiceClients/HiveServiceClient.cs
===================================================================
--- branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.4/ServiceClients/HiveServiceClient.cs	(revision 6268)
+++ branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.4/ServiceClients/HiveServiceClient.cs	(revision 6269)
@@ -14,10 +14,198 @@
   [System.Diagnostics.DebuggerStepThroughAttribute()]
     [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="Job", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Hive.Common.DataTra" +
+        "nsfer")]
+    [System.SerializableAttribute()]
+    public partial class Job : HeuristicLab.Clients.Hive.LightweightJob
+    {
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int CoresNeededField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private bool FinishWhenChildJobsFinishedField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Guid HiveExperimentIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private bool IsParentJobField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private bool IsPrivilegedField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Nullable<System.DateTime> LastHeartbeatField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int MemoryNeededField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<System.Guid> PluginsNeededIdsField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int PriorityField;
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int CoresNeeded
+        {
+            get
+            {
+                return this.CoresNeededField;
+            }
+            set
+            {
+                if ((this.CoresNeededField.Equals(value) != true))
+                {
+                    this.CoresNeededField = value;
+                    this.RaisePropertyChanged("CoresNeeded");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public bool FinishWhenChildJobsFinished
+        {
+            get
+            {
+                return this.FinishWhenChildJobsFinishedField;
+            }
+            set
+            {
+                if ((this.FinishWhenChildJobsFinishedField.Equals(value) != true))
+                {
+                    this.FinishWhenChildJobsFinishedField = value;
+                    this.RaisePropertyChanged("FinishWhenChildJobsFinished");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public System.Guid HiveExperimentId
+        {
+            get
+            {
+                return this.HiveExperimentIdField;
+            }
+            set
+            {
+                if ((this.HiveExperimentIdField.Equals(value) != true))
+                {
+                    this.HiveExperimentIdField = value;
+                    this.RaisePropertyChanged("HiveExperimentId");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public bool IsParentJob
+        {
+            get
+            {
+                return this.IsParentJobField;
+            }
+            set
+            {
+                if ((this.IsParentJobField.Equals(value) != true))
+                {
+                    this.IsParentJobField = value;
+                    this.RaisePropertyChanged("IsParentJob");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public bool IsPrivileged
+        {
+            get
+            {
+                return this.IsPrivilegedField;
+            }
+            set
+            {
+                if ((this.IsPrivilegedField.Equals(value) != true))
+                {
+                    this.IsPrivilegedField = value;
+                    this.RaisePropertyChanged("IsPrivileged");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public System.Nullable<System.DateTime> LastHeartbeat
+        {
+            get
+            {
+                return this.LastHeartbeatField;
+            }
+            set
+            {
+                if ((this.LastHeartbeatField.Equals(value) != true))
+                {
+                    this.LastHeartbeatField = value;
+                    this.RaisePropertyChanged("LastHeartbeat");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int MemoryNeeded
+        {
+            get
+            {
+                return this.MemoryNeededField;
+            }
+            set
+            {
+                if ((this.MemoryNeededField.Equals(value) != true))
+                {
+                    this.MemoryNeededField = value;
+                    this.RaisePropertyChanged("MemoryNeeded");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public System.Collections.Generic.List<System.Guid> PluginsNeededIds
+        {
+            get
+            {
+                return this.PluginsNeededIdsField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.PluginsNeededIdsField, value) != true))
+                {
+                    this.PluginsNeededIdsField = value;
+                    this.RaisePropertyChanged("PluginsNeededIds");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int Priority
+        {
+            get
+            {
+                return this.PriorityField;
+            }
+            set
+            {
+                if ((this.PriorityField.Equals(value) != true))
+                {
+                    this.PriorityField = value;
+                    this.RaisePropertyChanged("Priority");
+                }
+            }
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
     [System.Runtime.Serialization.DataContractAttribute(Name="HiveItem", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Hive.Common.DataTra" +
         "nsfer")]
     [System.SerializableAttribute()]
-    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Hive.LightweightJob))]
     [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Hive.StateLog))]
-    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Hive.Job))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Hive.Appointment))]
     [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Hive.NamedHiveItem))]
     [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Hive.HiveExperiment))]
@@ -27,5 +215,6 @@
     [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Hive.Plugin))]
     [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Hive.PluginData))]
-    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Hive.Appointment))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Hive.LightweightJob))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Hive.Job))]
     public partial class HiveItem : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged
     {
@@ -80,134 +269,4 @@
     [System.Diagnostics.DebuggerStepThroughAttribute()]
     [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
-    [System.Runtime.Serialization.DataContractAttribute(Name="LightweightJob", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Hive.Common.DataTra" +
-        "nsfer")]
-    [System.SerializableAttribute()]
-    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Hive.Job))]
-    public partial class LightweightJob : HeuristicLab.Clients.Hive.HiveItem
-    {
-        
-        [System.Runtime.Serialization.OptionalFieldAttribute()]
-        private System.Nullable<HeuristicLab.Clients.Hive.Command> CommandField;
-        
-        [System.Runtime.Serialization.OptionalFieldAttribute()]
-        private System.TimeSpan ExecutionTimeField;
-        
-        [System.Runtime.Serialization.OptionalFieldAttribute()]
-        private System.DateTime LastJobDataUpdateField;
-        
-        [System.Runtime.Serialization.OptionalFieldAttribute()]
-        private System.Nullable<System.Guid> ParentJobIdField;
-        
-        [System.Runtime.Serialization.OptionalFieldAttribute()]
-        private HeuristicLab.Clients.Hive.JobState StateField;
-        
-        [System.Runtime.Serialization.OptionalFieldAttribute()]
-        private System.Collections.Generic.List<HeuristicLab.Clients.Hive.StateLog> StateLogField;
-        
-        [System.Runtime.Serialization.DataMemberAttribute()]
-        public System.Nullable<HeuristicLab.Clients.Hive.Command> Command
-        {
-            get
-            {
-                return this.CommandField;
-            }
-            set
-            {
-                if ((this.CommandField.Equals(value) != true))
-                {
-                    this.CommandField = value;
-                    this.RaisePropertyChanged("Command");
-                }
-            }
-        }
-        
-        [System.Runtime.Serialization.DataMemberAttribute()]
-        public System.TimeSpan ExecutionTime
-        {
-            get
-            {
-                return this.ExecutionTimeField;
-            }
-            set
-            {
-                if ((this.ExecutionTimeField.Equals(value) != true))
-                {
-                    this.ExecutionTimeField = value;
-                    this.RaisePropertyChanged("ExecutionTime");
-                }
-            }
-        }
-        
-        [System.Runtime.Serialization.DataMemberAttribute()]
-        public System.DateTime LastJobDataUpdate
-        {
-            get
-            {
-                return this.LastJobDataUpdateField;
-            }
-            set
-            {
-                if ((this.LastJobDataUpdateField.Equals(value) != true))
-                {
-                    this.LastJobDataUpdateField = value;
-                    this.RaisePropertyChanged("LastJobDataUpdate");
-                }
-            }
-        }
-        
-        [System.Runtime.Serialization.DataMemberAttribute()]
-        public System.Nullable<System.Guid> ParentJobId
-        {
-            get
-            {
-                return this.ParentJobIdField;
-            }
-            set
-            {
-                if ((this.ParentJobIdField.Equals(value) != true))
-                {
-                    this.ParentJobIdField = value;
-                    this.RaisePropertyChanged("ParentJobId");
-                }
-            }
-        }
-        
-        [System.Runtime.Serialization.DataMemberAttribute()]
-        public HeuristicLab.Clients.Hive.JobState State
-        {
-            get
-            {
-                return this.StateField;
-            }
-            set
-            {
-                if ((this.StateField.Equals(value) != true))
-                {
-                    this.StateField = value;
-                    this.RaisePropertyChanged("State");
-                }
-            }
-        }
-        
-        [System.Runtime.Serialization.DataMemberAttribute()]
-        public System.Collections.Generic.List<HeuristicLab.Clients.Hive.StateLog> StateLog
-        {
-            get
-            {
-                return this.StateLogField;
-            }
-            set
-            {
-                if ((object.ReferenceEquals(this.StateLogField, value) != true))
-                {
-                    this.StateLogField = value;
-                    this.RaisePropertyChanged("StateLog");
-                }
-            }
-        }
-    }
-    
-    [System.Diagnostics.DebuggerStepThroughAttribute()]
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
     [System.Runtime.Serialization.DataContractAttribute(Name="StateLog", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Hive.Common.DataTra" +
         "nsfer")]
@@ -339,186 +398,126 @@
     [System.Diagnostics.DebuggerStepThroughAttribute()]
     [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
-    [System.Runtime.Serialization.DataContractAttribute(Name="Job", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Hive.Common.DataTra" +
+    [System.Runtime.Serialization.DataContractAttribute(Name="Appointment", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Hive.Common.DataTra" +
         "nsfer")]
     [System.SerializableAttribute()]
-    public partial class Job : HeuristicLab.Clients.Hive.LightweightJob
+    public partial class Appointment : HeuristicLab.Clients.Hive.HiveItem
     {
         
         [System.Runtime.Serialization.OptionalFieldAttribute()]
-        private int CoresNeededField;
-        
-        [System.Runtime.Serialization.OptionalFieldAttribute()]
-        private bool FinishWhenChildJobsFinishedField;
-        
-        [System.Runtime.Serialization.OptionalFieldAttribute()]
-        private System.Guid HiveExperimentIdField;
-        
-        [System.Runtime.Serialization.OptionalFieldAttribute()]
-        private bool IsParentJobField;
-        
-        [System.Runtime.Serialization.OptionalFieldAttribute()]
-        private bool IsPrivilegedField;
-        
-        [System.Runtime.Serialization.OptionalFieldAttribute()]
-        private System.Nullable<System.DateTime> LastHeartbeatField;
-        
-        [System.Runtime.Serialization.OptionalFieldAttribute()]
-        private int MemoryNeededField;
-        
-        [System.Runtime.Serialization.OptionalFieldAttribute()]
-        private System.Collections.Generic.List<System.Guid> PluginsNeededIdsField;
-        
-        [System.Runtime.Serialization.OptionalFieldAttribute()]
-        private int PriorityField;
-        
-        [System.Runtime.Serialization.DataMemberAttribute()]
-        public int CoresNeeded
-        {
-            get
-            {
-                return this.CoresNeededField;
-            }
-            set
-            {
-                if ((this.CoresNeededField.Equals(value) != true))
-                {
-                    this.CoresNeededField = value;
-                    this.RaisePropertyChanged("CoresNeeded");
-                }
-            }
-        }
-        
-        [System.Runtime.Serialization.DataMemberAttribute()]
-        public bool FinishWhenChildJobsFinished
-        {
-            get
-            {
-                return this.FinishWhenChildJobsFinishedField;
-            }
-            set
-            {
-                if ((this.FinishWhenChildJobsFinishedField.Equals(value) != true))
-                {
-                    this.FinishWhenChildJobsFinishedField = value;
-                    this.RaisePropertyChanged("FinishWhenChildJobsFinished");
-                }
-            }
-        }
-        
-        [System.Runtime.Serialization.DataMemberAttribute()]
-        public System.Guid HiveExperimentId
-        {
-            get
-            {
-                return this.HiveExperimentIdField;
-            }
-            set
-            {
-                if ((this.HiveExperimentIdField.Equals(value) != true))
-                {
-                    this.HiveExperimentIdField = value;
-                    this.RaisePropertyChanged("HiveExperimentId");
-                }
-            }
-        }
-        
-        [System.Runtime.Serialization.DataMemberAttribute()]
-        public bool IsParentJob
-        {
-            get
-            {
-                return this.IsParentJobField;
-            }
-            set
-            {
-                if ((this.IsParentJobField.Equals(value) != true))
-                {
-                    this.IsParentJobField = value;
-                    this.RaisePropertyChanged("IsParentJob");
-                }
-            }
-        }
-        
-        [System.Runtime.Serialization.DataMemberAttribute()]
-        public bool IsPrivileged
-        {
-            get
-            {
-                return this.IsPrivilegedField;
-            }
-            set
-            {
-                if ((this.IsPrivilegedField.Equals(value) != true))
-                {
-                    this.IsPrivilegedField = value;
-                    this.RaisePropertyChanged("IsPrivileged");
-                }
-            }
-        }
-        
-        [System.Runtime.Serialization.DataMemberAttribute()]
-        public System.Nullable<System.DateTime> LastHeartbeat
-        {
-            get
-            {
-                return this.LastHeartbeatField;
-            }
-            set
-            {
-                if ((this.LastHeartbeatField.Equals(value) != true))
-                {
-                    this.LastHeartbeatField = value;
-                    this.RaisePropertyChanged("LastHeartbeat");
-                }
-            }
-        }
-        
-        [System.Runtime.Serialization.DataMemberAttribute()]
-        public int MemoryNeeded
-        {
-            get
-            {
-                return this.MemoryNeededField;
-            }
-            set
-            {
-                if ((this.MemoryNeededField.Equals(value) != true))
-                {
-                    this.MemoryNeededField = value;
-                    this.RaisePropertyChanged("MemoryNeeded");
-                }
-            }
-        }
-        
-        [System.Runtime.Serialization.DataMemberAttribute()]
-        public System.Collections.Generic.List<System.Guid> PluginsNeededIds
-        {
-            get
-            {
-                return this.PluginsNeededIdsField;
-            }
-            set
-            {
-                if ((object.ReferenceEquals(this.PluginsNeededIdsField, value) != true))
-                {
-                    this.PluginsNeededIdsField = value;
-                    this.RaisePropertyChanged("PluginsNeededIds");
-                }
-            }
-        }
-        
-        [System.Runtime.Serialization.DataMemberAttribute()]
-        public int Priority
-        {
-            get
-            {
-                return this.PriorityField;
-            }
-            set
-            {
-                if ((this.PriorityField.Equals(value) != true))
-                {
-                    this.PriorityField = value;
-                    this.RaisePropertyChanged("Priority");
+        private bool AllDayEventField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.DateTime EndDateField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private bool RecurringField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Guid RecurringIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Guid ResourceIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.DateTime StartDateField;
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public bool AllDayEvent
+        {
+            get
+            {
+                return this.AllDayEventField;
+            }
+            set
+            {
+                if ((this.AllDayEventField.Equals(value) != true))
+                {
+                    this.AllDayEventField = value;
+                    this.RaisePropertyChanged("AllDayEvent");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public System.DateTime EndDate
+        {
+            get
+            {
+                return this.EndDateField;
+            }
+            set
+            {
+                if ((this.EndDateField.Equals(value) != true))
+                {
+                    this.EndDateField = value;
+                    this.RaisePropertyChanged("EndDate");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public bool Recurring
+        {
+            get
+            {
+                return this.RecurringField;
+            }
+            set
+            {
+                if ((this.RecurringField.Equals(value) != true))
+                {
+                    this.RecurringField = value;
+                    this.RaisePropertyChanged("Recurring");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public System.Guid RecurringId
+        {
+            get
+            {
+                return this.RecurringIdField;
+            }
+            set
+            {
+                if ((this.RecurringIdField.Equals(value) != true))
+                {
+                    this.RecurringIdField = value;
+                    this.RaisePropertyChanged("RecurringId");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public System.Guid ResourceId
+        {
+            get
+            {
+                return this.ResourceIdField;
+            }
+            set
+            {
+                if ((this.ResourceIdField.Equals(value) != true))
+                {
+                    this.ResourceIdField = value;
+                    this.RaisePropertyChanged("ResourceId");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public System.DateTime StartDate
+        {
+            get
+            {
+                return this.StartDateField;
+            }
+            set
+            {
+                if ((this.StartDateField.Equals(value) != true))
+                {
+                    this.StartDateField = value;
+                    this.RaisePropertyChanged("StartDate");
                 }
             }
@@ -1158,126 +1157,127 @@
     [System.Diagnostics.DebuggerStepThroughAttribute()]
     [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
-    [System.Runtime.Serialization.DataContractAttribute(Name="Appointment", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Hive.Common.DataTra" +
+    [System.Runtime.Serialization.DataContractAttribute(Name="LightweightJob", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Hive.Common.DataTra" +
         "nsfer")]
     [System.SerializableAttribute()]
-    public partial class Appointment : HeuristicLab.Clients.Hive.HiveItem
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Hive.Job))]
+    public partial class LightweightJob : HeuristicLab.Clients.Hive.HiveItem
     {
         
         [System.Runtime.Serialization.OptionalFieldAttribute()]
-        private bool AllDayEventField;
-        
-        [System.Runtime.Serialization.OptionalFieldAttribute()]
-        private System.DateTime EndDateField;
-        
-        [System.Runtime.Serialization.OptionalFieldAttribute()]
-        private bool RecurringField;
-        
-        [System.Runtime.Serialization.OptionalFieldAttribute()]
-        private System.Guid RecurringIdField;
-        
-        [System.Runtime.Serialization.OptionalFieldAttribute()]
-        private System.Guid ResourceIdField;
-        
-        [System.Runtime.Serialization.OptionalFieldAttribute()]
-        private System.DateTime StartDateField;
-        
-        [System.Runtime.Serialization.DataMemberAttribute()]
-        public bool AllDayEvent
-        {
-            get
-            {
-                return this.AllDayEventField;
-            }
-            set
-            {
-                if ((this.AllDayEventField.Equals(value) != true))
-                {
-                    this.AllDayEventField = value;
-                    this.RaisePropertyChanged("AllDayEvent");
-                }
-            }
-        }
-        
-        [System.Runtime.Serialization.DataMemberAttribute()]
-        public System.DateTime EndDate
-        {
-            get
-            {
-                return this.EndDateField;
-            }
-            set
-            {
-                if ((this.EndDateField.Equals(value) != true))
-                {
-                    this.EndDateField = value;
-                    this.RaisePropertyChanged("EndDate");
-                }
-            }
-        }
-        
-        [System.Runtime.Serialization.DataMemberAttribute()]
-        public bool Recurring
-        {
-            get
-            {
-                return this.RecurringField;
-            }
-            set
-            {
-                if ((this.RecurringField.Equals(value) != true))
-                {
-                    this.RecurringField = value;
-                    this.RaisePropertyChanged("Recurring");
-                }
-            }
-        }
-        
-        [System.Runtime.Serialization.DataMemberAttribute()]
-        public System.Guid RecurringId
-        {
-            get
-            {
-                return this.RecurringIdField;
-            }
-            set
-            {
-                if ((this.RecurringIdField.Equals(value) != true))
-                {
-                    this.RecurringIdField = value;
-                    this.RaisePropertyChanged("RecurringId");
-                }
-            }
-        }
-        
-        [System.Runtime.Serialization.DataMemberAttribute()]
-        public System.Guid ResourceId
-        {
-            get
-            {
-                return this.ResourceIdField;
-            }
-            set
-            {
-                if ((this.ResourceIdField.Equals(value) != true))
-                {
-                    this.ResourceIdField = value;
-                    this.RaisePropertyChanged("ResourceId");
-                }
-            }
-        }
-        
-        [System.Runtime.Serialization.DataMemberAttribute()]
-        public System.DateTime StartDate
-        {
-            get
-            {
-                return this.StartDateField;
-            }
-            set
-            {
-                if ((this.StartDateField.Equals(value) != true))
-                {
-                    this.StartDateField = value;
-                    this.RaisePropertyChanged("StartDate");
+        private System.Nullable<HeuristicLab.Clients.Hive.Command> CommandField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.TimeSpan ExecutionTimeField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.DateTime LastJobDataUpdateField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Nullable<System.Guid> ParentJobIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.Clients.Hive.JobState StateField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<HeuristicLab.Clients.Hive.StateLog> StateLogField;
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public System.Nullable<HeuristicLab.Clients.Hive.Command> Command
+        {
+            get
+            {
+                return this.CommandField;
+            }
+            set
+            {
+                if ((this.CommandField.Equals(value) != true))
+                {
+                    this.CommandField = value;
+                    this.RaisePropertyChanged("Command");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public System.TimeSpan ExecutionTime
+        {
+            get
+            {
+                return this.ExecutionTimeField;
+            }
+            set
+            {
+                if ((this.ExecutionTimeField.Equals(value) != true))
+                {
+                    this.ExecutionTimeField = value;
+                    this.RaisePropertyChanged("ExecutionTime");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public System.DateTime LastJobDataUpdate
+        {
+            get
+            {
+                return this.LastJobDataUpdateField;
+            }
+            set
+            {
+                if ((this.LastJobDataUpdateField.Equals(value) != true))
+                {
+                    this.LastJobDataUpdateField = value;
+                    this.RaisePropertyChanged("LastJobDataUpdate");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public System.Nullable<System.Guid> ParentJobId
+        {
+            get
+            {
+                return this.ParentJobIdField;
+            }
+            set
+            {
+                if ((this.ParentJobIdField.Equals(value) != true))
+                {
+                    this.ParentJobIdField = value;
+                    this.RaisePropertyChanged("ParentJobId");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public HeuristicLab.Clients.Hive.JobState State
+        {
+            get
+            {
+                return this.StateField;
+            }
+            set
+            {
+                if ((this.StateField.Equals(value) != true))
+                {
+                    this.StateField = value;
+                    this.RaisePropertyChanged("State");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public System.Collections.Generic.List<HeuristicLab.Clients.Hive.StateLog> StateLog
+        {
+            get
+            {
+                return this.StateLogField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.StateLogField, value) != true))
+                {
+                    this.StateLogField = value;
+                    this.RaisePropertyChanged("StateLog");
                 }
             }
@@ -1471,4 +1471,7 @@
         
         [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private float CpuUtilizationField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
         private int FreeCoresField;
         
@@ -1507,4 +1510,21 @@
                     this.AssignJobField = value;
                     this.RaisePropertyChanged("AssignJob");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public float CpuUtilization
+        {
+            get
+            {
+                return this.CpuUtilizationField;
+            }
+            set
+            {
+                if ((this.CpuUtilizationField.Equals(value) != true))
+                {
+                    this.CpuUtilizationField = value;
+                    this.RaisePropertyChanged("CpuUtilization");
                 }
             }
@@ -1772,4 +1792,7 @@
     {
         
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IHiveService/GetJobsByResourceId", ReplyAction="http://tempuri.org/IHiveService/GetJobsByResourceIdResponse")]
+        System.Collections.Generic.List<HeuristicLab.Clients.Hive.Job> GetJobsByResourceId(System.Guid resourceId);
+        
         [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IHiveService/TriggerLifecycle", ReplyAction="http://tempuri.org/IHiveService/TriggerLifecycleResponse")]
         void TriggerLifecycle(bool force);
@@ -1949,4 +1972,9 @@
         }
         
+        public System.Collections.Generic.List<HeuristicLab.Clients.Hive.Job> GetJobsByResourceId(System.Guid resourceId)
+        {
+            return base.Channel.GetJobsByResourceId(resourceId);
+        }
+        
         public void TriggerLifecycle(bool force)
         {
Index: branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.Common/3.4/DataTransfer/Heartbeat.cs
===================================================================
--- branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.Common/3.4/DataTransfer/Heartbeat.cs	(revision 6268)
+++ branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.Common/3.4/DataTransfer/Heartbeat.cs	(revision 6269)
@@ -38,4 +38,6 @@
     [DataMember]
     public bool AssignJob { get; set; } // if false, the server will not assign a new job
+    [DataMember]
+    public float CpuUtilization { get; set; }
 
     public override string ToString() {
Index: branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.4/HeartbeatManager.cs
===================================================================
--- branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.4/HeartbeatManager.cs	(revision 6268)
+++ branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.4/HeartbeatManager.cs	(revision 6269)
@@ -30,4 +30,5 @@
         slave.FreeCores = heartbeat.FreeCores;
         slave.FreeMemory = heartbeat.FreeMemory;
+        slave.CpuUtilization = heartbeat.CpuUtilization;
         slave.IsAllowedToCalculate = true; // Todo: look into calendar
         slave.SlaveState = (heartbeat.JobProgress != null && heartbeat.JobProgress.Count > 0) ? SlaveState.Calculating : SlaveState.Idle;
