Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.ExperimentManager/3.3/HeuristicLab.Clients.Hive.ExperimentManager-3.3.csproj
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.ExperimentManager/3.3/HeuristicLab.Clients.Hive.ExperimentManager-3.3.csproj	(revision 6716)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.ExperimentManager/3.3/HeuristicLab.Clients.Hive.ExperimentManager-3.3.csproj	(revision 6717)
@@ -203,8 +203,4 @@
       <Name>HeuristicLab.Hive-3.3</Name>
     </ProjectReference>
-    <ProjectReference Include="..\..\HeuristicLab.Services.Hive.Common\3.3\HeuristicLab.Services.Hive.Common-3.3.csproj">
-      <Project>{14424A16-48D4-445E-80BF-DDF617548BBB}</Project>
-      <Name>HeuristicLab.Services.Hive.Common-3.3</Name>
-    </ProjectReference>
   </ItemGroup>
   <ItemGroup>
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Tests/HeuristicLab.Clients.Hive.Tests-3.3.csproj
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Tests/HeuristicLab.Clients.Hive.Tests-3.3.csproj	(revision 6716)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Tests/HeuristicLab.Clients.Hive.Tests-3.3.csproj	(revision 6717)
@@ -337,15 +337,7 @@
       <Name>HeuristicLab.Hive-3.3</Name>
     </ProjectReference>
-    <ProjectReference Include="..\HeuristicLab.Services.Hive.Common\3.3\HeuristicLab.Services.Hive.Common-3.3.csproj">
-      <Project>{14424A16-48D4-445E-80BF-DDF617548BBB}</Project>
-      <Name>HeuristicLab.Services.Hive.Common-3.3</Name>
-    </ProjectReference>
     <ProjectReference Include="..\HeuristicLab.Services.Hive.DataAccess\3.3\HeuristicLab.Services.Hive.DataAccess-3.3.csproj">
       <Project>{EC2C8109-6E1E-4C88-9A2B-908CFF2EF4AC}</Project>
       <Name>HeuristicLab.Services.Hive.DataAccess-3.3</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\HeuristicLab.Services.Hive.Tests\HeuristicLab.Services.Hive.Tests-3.3.csproj">
-      <Project>{17187EAC-5D8C-4B11-9CEA-D88F71B59658}</Project>
-      <Name>HeuristicLab.Services.Hive.Tests-3.3</Name>
     </ProjectReference>
     <ProjectReference Include="..\HeuristicLab.Services.Hive\3.3\HeuristicLab.Services.Hive-3.3.csproj">
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Tests/Mocks/MockServiceLocator.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Tests/Mocks/MockServiceLocator.cs	(revision 6716)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Tests/Mocks/MockServiceLocator.cs	(revision 6717)
@@ -16,14 +16,14 @@
     }
 
-    public HeuristicLab.Services.Hive.Common.ServiceContracts.IHiveService GetService() {
+    public HeuristicLab.Services.Hive.ServiceContracts.IHiveService GetService() {
       HiveService service = new HeuristicLab.Services.Hive.HiveService();
       return service;
     }
 
-    public void CallHiveService(Action<HeuristicLab.Services.Hive.Common.ServiceContracts.IHiveService> call) {
+    public void CallHiveService(Action<HeuristicLab.Services.Hive.ServiceContracts.IHiveService> call) {
       call(GetService());
     }
 
-    public T CallHiveService<T>(Func<HeuristicLab.Services.Hive.Common.ServiceContracts.IHiveService, T> call) {
+    public T CallHiveService<T>(Func<HeuristicLab.Services.Hive.ServiceContracts.IHiveService, T> call) {
       return call(GetService());
     }
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Views/3.3/HeuristicLab.Clients.Hive.Views-3.3.csproj
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Views/3.3/HeuristicLab.Clients.Hive.Views-3.3.csproj	(revision 6716)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Views/3.3/HeuristicLab.Clients.Hive.Views-3.3.csproj	(revision 6717)
@@ -264,8 +264,4 @@
       <Name>HeuristicLab.Hive-3.3</Name>
     </ProjectReference>
-    <ProjectReference Include="..\..\HeuristicLab.Services.Hive.Common\3.3\HeuristicLab.Services.Hive.Common-3.3.csproj">
-      <Project>{14424A16-48D4-445E-80BF-DDF617548BBB}</Project>
-      <Name>HeuristicLab.Services.Hive.Common-3.3</Name>
-    </ProjectReference>
   </ItemGroup>
   <ItemGroup>
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Views/3.3/HeuristicLabClientsHiveViewsPlugin.cs.frame
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Views/3.3/HeuristicLabClientsHiveViewsPlugin.cs.frame	(revision 6716)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Views/3.3/HeuristicLabClientsHiveViewsPlugin.cs.frame	(revision 6717)
@@ -21,6 +21,5 @@
   [PluginDependency("HeuristicLab.Optimization", "3.3")]
   [PluginDependency("HeuristicLab.Optimizer", "3.3")]
-  [PluginDependency("HeuristicLab.Persistence", "3.3")]
-  [PluginDependency("HeuristicLab.Services.Hive.Common", "3.3")]
+  [PluginDependency("HeuristicLab.Persistence", "3.3")]  
   [PluginDependency("HeuristicLab.Visualization.ChartControlsExtensions", "3.3")]
   public class HeuristicLabClientsHiveViewsPlugin : PluginBase {
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.3/ServiceClients/HiveServiceClient.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.3/ServiceClients/HiveServiceClient.cs	(revision 6716)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.3/ServiceClients/HiveServiceClient.cs	(revision 6717)
@@ -2,5 +2,5 @@
 // <auto-generated>
 //     This code was generated by a tool.
-//     Runtime Version:4.0.30319.225
+//     Runtime Version:4.0.30319.235
 //
 //     Changes to this file may cause incorrect behavior and will be lost if
@@ -13,2403 +13,1968 @@
 
   [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.DataTransfer")]
+  [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.Downtime))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Hive.HiveExperimentPermission))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Hive.PluginData))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Hive.NamedHiveItem))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Hive.HiveExperiment))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Hive.Plugin))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Hive.Resource))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Hive.Slave))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Hive.SlaveGroup))]
+  public partial class HiveItem : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+
+    [System.NonSerializedAttribute()]
+    private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private System.Guid IdField;
+
+    public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+      get {
+        return this.extensionDataField;
+      }
+      set {
+        this.extensionDataField = value;
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public System.Guid Id {
+      get {
+        return this.IdField;
+      }
+      set {
+        if ((this.IdField.Equals(value) != true)) {
+          this.IdField = value;
+          this.RaisePropertyChanged("Id");
+        }
+      }
+    }
+
+    public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+  }
+
+  [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.DataTransfer")]
+  [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.DataTransfer")]
+  [System.SerializableAttribute()]
+  public partial class StateLog : HeuristicLab.Clients.Hive.HiveItem {
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private System.DateTime DateTimeField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private string ExceptionField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private System.Guid JobIdField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private System.Nullable<System.Guid> SlaveIdField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private HeuristicLab.Clients.Hive.JobState StateField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private System.Nullable<System.Guid> UserIdField;
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public System.DateTime DateTime {
+      get {
+        return this.DateTimeField;
+      }
+      set {
+        if ((this.DateTimeField.Equals(value) != true)) {
+          this.DateTimeField = value;
+          this.RaisePropertyChanged("DateTime");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public string Exception {
+      get {
+        return this.ExceptionField;
+      }
+      set {
+        if ((object.ReferenceEquals(this.ExceptionField, value) != true)) {
+          this.ExceptionField = value;
+          this.RaisePropertyChanged("Exception");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public System.Guid JobId {
+      get {
+        return this.JobIdField;
+      }
+      set {
+        if ((this.JobIdField.Equals(value) != true)) {
+          this.JobIdField = value;
+          this.RaisePropertyChanged("JobId");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public System.Nullable<System.Guid> SlaveId {
+      get {
+        return this.SlaveIdField;
+      }
+      set {
+        if ((this.SlaveIdField.Equals(value) != true)) {
+          this.SlaveIdField = value;
+          this.RaisePropertyChanged("SlaveId");
+        }
+      }
+    }
+
+    [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.Nullable<System.Guid> UserId {
+      get {
+        return this.UserIdField;
+      }
+      set {
+        if ((this.UserIdField.Equals(value) != true)) {
+          this.UserIdField = value;
+          this.RaisePropertyChanged("UserId");
+        }
+      }
+    }
+  }
+
+  [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.DataTransfer")]
+  [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 = "Downtime", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Hive.DataTransfer")]
+  [System.SerializableAttribute()]
+  public partial class Downtime : 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");
+        }
+      }
+    }
+  }
+
+  [System.Diagnostics.DebuggerStepThroughAttribute()]
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "HiveExperimentPermission", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Hive.DataTransfer")]
+  [System.SerializableAttribute()]
+  public partial class HiveExperimentPermission : HeuristicLab.Clients.Hive.HiveItem {
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private System.Guid GrantedByUserIdField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private System.Guid GrantedUserIdField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private System.Guid HiveExperimentIdField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private HeuristicLab.Clients.Hive.Permission PermissionField;
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public System.Guid GrantedByUserId {
+      get {
+        return this.GrantedByUserIdField;
+      }
+      set {
+        if ((this.GrantedByUserIdField.Equals(value) != true)) {
+          this.GrantedByUserIdField = value;
+          this.RaisePropertyChanged("GrantedByUserId");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public System.Guid GrantedUserId {
+      get {
+        return this.GrantedUserIdField;
+      }
+      set {
+        if ((this.GrantedUserIdField.Equals(value) != true)) {
+          this.GrantedUserIdField = value;
+          this.RaisePropertyChanged("GrantedUserId");
+        }
+      }
+    }
+
+    [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 HeuristicLab.Clients.Hive.Permission Permission {
+      get {
+        return this.PermissionField;
+      }
+      set {
+        if ((this.PermissionField.Equals(value) != true)) {
+          this.PermissionField = value;
+          this.RaisePropertyChanged("Permission");
+        }
+      }
+    }
+  }
+
+  [System.Diagnostics.DebuggerStepThroughAttribute()]
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "PluginData", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Hive.DataTransfer")]
+  [System.SerializableAttribute()]
+  public partial class PluginData : HeuristicLab.Clients.Hive.HiveItem {
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private byte[] DataField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private string FileNameField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private System.Guid PluginIdField;
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public byte[] Data {
+      get {
+        return this.DataField;
+      }
+      set {
+        if ((object.ReferenceEquals(this.DataField, value) != true)) {
+          this.DataField = value;
+          this.RaisePropertyChanged("Data");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public string FileName {
+      get {
+        return this.FileNameField;
+      }
+      set {
+        if ((object.ReferenceEquals(this.FileNameField, value) != true)) {
+          this.FileNameField = value;
+          this.RaisePropertyChanged("FileName");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public System.Guid PluginId {
+      get {
+        return this.PluginIdField;
+      }
+      set {
+        if ((this.PluginIdField.Equals(value) != true)) {
+          this.PluginIdField = value;
+          this.RaisePropertyChanged("PluginId");
+        }
+      }
+    }
+  }
+
+  [System.Diagnostics.DebuggerStepThroughAttribute()]
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "NamedHiveItem", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Hive.DataTransfer")]
+  [System.SerializableAttribute()]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Hive.HiveExperiment))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Hive.Plugin))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Hive.Resource))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Hive.Slave))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Hive.SlaveGroup))]
+  public partial class NamedHiveItem : HeuristicLab.Clients.Hive.HiveItem {
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private string DescriptionField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private string NameField;
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public string Description {
+      get {
+        return this.DescriptionField;
+      }
+      set {
+        if ((object.ReferenceEquals(this.DescriptionField, value) != true)) {
+          this.DescriptionField = value;
+          this.RaisePropertyChanged("Description");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public string Name {
+      get {
+        return this.NameField;
+      }
+      set {
+        if ((object.ReferenceEquals(this.NameField, value) != true)) {
+          this.NameField = value;
+          this.RaisePropertyChanged("Name");
+        }
+      }
+    }
+  }
+
+  [System.Diagnostics.DebuggerStepThroughAttribute()]
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "HiveExperiment", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Hive.DataTransfer")]
+  [System.SerializableAttribute()]
+  public partial class HiveExperiment : HeuristicLab.Clients.Hive.NamedHiveItem {
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private int CalculatingCountField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private System.DateTime DateCreatedField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private int FinishedCountField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private int JobCountField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private System.Nullable<System.DateTime> LastAccessedField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private System.Guid OwnerUserIdField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private string OwnerUsernameField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private HeuristicLab.Clients.Hive.Permission PermissionField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private string ResourceNamesField;
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public int CalculatingCount {
+      get {
+        return this.CalculatingCountField;
+      }
+      set {
+        if ((this.CalculatingCountField.Equals(value) != true)) {
+          this.CalculatingCountField = value;
+          this.RaisePropertyChanged("CalculatingCount");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public System.DateTime DateCreated {
+      get {
+        return this.DateCreatedField;
+      }
+      set {
+        if ((this.DateCreatedField.Equals(value) != true)) {
+          this.DateCreatedField = value;
+          this.RaisePropertyChanged("DateCreated");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public int FinishedCount {
+      get {
+        return this.FinishedCountField;
+      }
+      set {
+        if ((this.FinishedCountField.Equals(value) != true)) {
+          this.FinishedCountField = value;
+          this.RaisePropertyChanged("FinishedCount");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public int JobCount {
+      get {
+        return this.JobCountField;
+      }
+      set {
+        if ((this.JobCountField.Equals(value) != true)) {
+          this.JobCountField = value;
+          this.RaisePropertyChanged("JobCount");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public System.Nullable<System.DateTime> LastAccessed {
+      get {
+        return this.LastAccessedField;
+      }
+      set {
+        if ((this.LastAccessedField.Equals(value) != true)) {
+          this.LastAccessedField = value;
+          this.RaisePropertyChanged("LastAccessed");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public System.Guid OwnerUserId {
+      get {
+        return this.OwnerUserIdField;
+      }
+      set {
+        if ((this.OwnerUserIdField.Equals(value) != true)) {
+          this.OwnerUserIdField = value;
+          this.RaisePropertyChanged("OwnerUserId");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public string OwnerUsername {
+      get {
+        return this.OwnerUsernameField;
+      }
+      set {
+        if ((object.ReferenceEquals(this.OwnerUsernameField, value) != true)) {
+          this.OwnerUsernameField = value;
+          this.RaisePropertyChanged("OwnerUsername");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public HeuristicLab.Clients.Hive.Permission Permission {
+      get {
+        return this.PermissionField;
+      }
+      set {
+        if ((this.PermissionField.Equals(value) != true)) {
+          this.PermissionField = value;
+          this.RaisePropertyChanged("Permission");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public string ResourceNames {
+      get {
+        return this.ResourceNamesField;
+      }
+      set {
+        if ((object.ReferenceEquals(this.ResourceNamesField, value) != true)) {
+          this.ResourceNamesField = value;
+          this.RaisePropertyChanged("ResourceNames");
+        }
+      }
+    }
+  }
+
+  [System.Diagnostics.DebuggerStepThroughAttribute()]
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "Plugin", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Hive.DataTransfer")]
+  [System.SerializableAttribute()]
+  public partial class Plugin : HeuristicLab.Clients.Hive.NamedHiveItem {
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private System.DateTime DateCreatedField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private byte[] HashField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private System.Guid UserIdField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private System.Version VersionField;
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public System.DateTime DateCreated {
+      get {
+        return this.DateCreatedField;
+      }
+      set {
+        if ((this.DateCreatedField.Equals(value) != true)) {
+          this.DateCreatedField = value;
+          this.RaisePropertyChanged("DateCreated");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public byte[] Hash {
+      get {
+        return this.HashField;
+      }
+      set {
+        if ((object.ReferenceEquals(this.HashField, value) != true)) {
+          this.HashField = value;
+          this.RaisePropertyChanged("Hash");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public System.Guid UserId {
+      get {
+        return this.UserIdField;
+      }
+      set {
+        if ((this.UserIdField.Equals(value) != true)) {
+          this.UserIdField = value;
+          this.RaisePropertyChanged("UserId");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public System.Version Version {
+      get {
+        return this.VersionField;
+      }
+      set {
+        if ((object.ReferenceEquals(this.VersionField, value) != true)) {
+          this.VersionField = value;
+          this.RaisePropertyChanged("Version");
+        }
+      }
+    }
+  }
+
+  [System.Diagnostics.DebuggerStepThroughAttribute()]
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "Resource", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Hive.DataTransfer")]
+  [System.SerializableAttribute()]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Hive.Slave))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Hive.SlaveGroup))]
+  public partial class Resource : HeuristicLab.Clients.Hive.NamedHiveItem {
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private System.Nullable<System.Guid> ParentResourceIdField;
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public System.Nullable<System.Guid> ParentResourceId {
+      get {
+        return this.ParentResourceIdField;
+      }
+      set {
+        if ((this.ParentResourceIdField.Equals(value) != true)) {
+          this.ParentResourceIdField = value;
+          this.RaisePropertyChanged("ParentResourceId");
+        }
+      }
+    }
+  }
+
+  [System.Diagnostics.DebuggerStepThroughAttribute()]
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "Slave", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Hive.DataTransfer")]
+  [System.SerializableAttribute()]
+  public partial class Slave : HeuristicLab.Clients.Hive.Resource {
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private System.Nullable<int> CoresField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private HeuristicLab.Clients.Hive.CpuArchitecture CpuArchitectureField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private System.Nullable<int> CpuSpeedField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private double CpuUtilizationField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private System.Nullable<int> FreeCoresField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private System.Nullable<int> FreeMemoryField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private bool IsAllowedToCalculateField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private System.Nullable<System.DateTime> LastHeartbeatField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private System.Nullable<int> MemoryField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private string OperatingSystemField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private HeuristicLab.Clients.Hive.SlaveState SlaveStateField;
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public System.Nullable<int> Cores {
+      get {
+        return this.CoresField;
+      }
+      set {
+        if ((this.CoresField.Equals(value) != true)) {
+          this.CoresField = value;
+          this.RaisePropertyChanged("Cores");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public HeuristicLab.Clients.Hive.CpuArchitecture CpuArchitecture {
+      get {
+        return this.CpuArchitectureField;
+      }
+      set {
+        if ((this.CpuArchitectureField.Equals(value) != true)) {
+          this.CpuArchitectureField = value;
+          this.RaisePropertyChanged("CpuArchitecture");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public System.Nullable<int> CpuSpeed {
+      get {
+        return this.CpuSpeedField;
+      }
+      set {
+        if ((this.CpuSpeedField.Equals(value) != true)) {
+          this.CpuSpeedField = value;
+          this.RaisePropertyChanged("CpuSpeed");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public double CpuUtilization {
+      get {
+        return this.CpuUtilizationField;
+      }
+      set {
+        if ((this.CpuUtilizationField.Equals(value) != true)) {
+          this.CpuUtilizationField = value;
+          this.RaisePropertyChanged("CpuUtilization");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public System.Nullable<int> FreeCores {
+      get {
+        return this.FreeCoresField;
+      }
+      set {
+        if ((this.FreeCoresField.Equals(value) != true)) {
+          this.FreeCoresField = value;
+          this.RaisePropertyChanged("FreeCores");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public System.Nullable<int> FreeMemory {
+      get {
+        return this.FreeMemoryField;
+      }
+      set {
+        if ((this.FreeMemoryField.Equals(value) != true)) {
+          this.FreeMemoryField = value;
+          this.RaisePropertyChanged("FreeMemory");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public bool IsAllowedToCalculate {
+      get {
+        return this.IsAllowedToCalculateField;
+      }
+      set {
+        if ((this.IsAllowedToCalculateField.Equals(value) != true)) {
+          this.IsAllowedToCalculateField = value;
+          this.RaisePropertyChanged("IsAllowedToCalculate");
+        }
+      }
+    }
+
+    [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 System.Nullable<int> Memory {
+      get {
+        return this.MemoryField;
+      }
+      set {
+        if ((this.MemoryField.Equals(value) != true)) {
+          this.MemoryField = value;
+          this.RaisePropertyChanged("Memory");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public string OperatingSystem {
+      get {
+        return this.OperatingSystemField;
+      }
+      set {
+        if ((object.ReferenceEquals(this.OperatingSystemField, value) != true)) {
+          this.OperatingSystemField = value;
+          this.RaisePropertyChanged("OperatingSystem");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public HeuristicLab.Clients.Hive.SlaveState SlaveState {
+      get {
+        return this.SlaveStateField;
+      }
+      set {
+        if ((this.SlaveStateField.Equals(value) != true)) {
+          this.SlaveStateField = value;
+          this.RaisePropertyChanged("SlaveState");
+        }
+      }
+    }
+  }
+
+  [System.Diagnostics.DebuggerStepThroughAttribute()]
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "SlaveGroup", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Hive.DataTransfer")]
+  [System.SerializableAttribute()]
+  public partial class SlaveGroup : HeuristicLab.Clients.Hive.Resource {
+  }
+
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "Command", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Hive.DataTransfer")]
+  public enum Command : int {
+
+    [System.Runtime.Serialization.EnumMemberAttribute()]
+    Stop = 0,
+
+    [System.Runtime.Serialization.EnumMemberAttribute()]
+    Abort = 1,
+
+    [System.Runtime.Serialization.EnumMemberAttribute()]
+    Pause = 2,
+  }
+
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "JobState", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Hive.DataTransfer")]
+  public enum JobState : int {
+
+    [System.Runtime.Serialization.EnumMemberAttribute()]
+    Offline = 0,
+
+    [System.Runtime.Serialization.EnumMemberAttribute()]
+    Waiting = 1,
+
+    [System.Runtime.Serialization.EnumMemberAttribute()]
+    Transferring = 2,
+
+    [System.Runtime.Serialization.EnumMemberAttribute()]
+    Calculating = 3,
+
+    [System.Runtime.Serialization.EnumMemberAttribute()]
+    Paused = 4,
+
+    [System.Runtime.Serialization.EnumMemberAttribute()]
+    Finished = 5,
+
+    [System.Runtime.Serialization.EnumMemberAttribute()]
+    Aborted = 6,
+
+    [System.Runtime.Serialization.EnumMemberAttribute()]
+    Failed = 7,
+  }
+
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "Permission", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Hive.DataTransfer")]
+  public enum Permission : int {
+
+    [System.Runtime.Serialization.EnumMemberAttribute()]
+    NotAllowed = 0,
+
+    [System.Runtime.Serialization.EnumMemberAttribute()]
+    Read = 1,
+
+    [System.Runtime.Serialization.EnumMemberAttribute()]
+    Full = 2,
+  }
+
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "CpuArchitecture", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Hive.DataTransfer")]
+  public enum CpuArchitecture : int {
+
+    [System.Runtime.Serialization.EnumMemberAttribute()]
+    x86 = 0,
+
+    [System.Runtime.Serialization.EnumMemberAttribute()]
+    x64 = 1,
+  }
+
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "SlaveState", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Hive.DataTransfer")]
+  public enum SlaveState : int {
+
+    [System.Runtime.Serialization.EnumMemberAttribute()]
+    Idle = 0,
+
+    [System.Runtime.Serialization.EnumMemberAttribute()]
+    Calculating = 1,
+
+    [System.Runtime.Serialization.EnumMemberAttribute()]
+    Offline = 2,
+  }
+
+  [System.Diagnostics.DebuggerStepThroughAttribute()]
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "JobData", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Hive.DataTransfer")]
+  [System.SerializableAttribute()]
+  public partial class JobData : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+
+    [System.NonSerializedAttribute()]
+    private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private byte[] DataField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private System.Guid JobIdField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private System.DateTime LastUpdateField;
+
+    public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+      get {
+        return this.extensionDataField;
+      }
+      set {
+        this.extensionDataField = value;
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public byte[] Data {
+      get {
+        return this.DataField;
+      }
+      set {
+        if ((object.ReferenceEquals(this.DataField, value) != true)) {
+          this.DataField = value;
+          this.RaisePropertyChanged("Data");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public System.Guid JobId {
+      get {
+        return this.JobIdField;
+      }
+      set {
+        if ((this.JobIdField.Equals(value) != true)) {
+          this.JobIdField = value;
+          this.RaisePropertyChanged("JobId");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public System.DateTime LastUpdate {
+      get {
+        return this.LastUpdateField;
+      }
+      set {
+        if ((this.LastUpdateField.Equals(value) != true)) {
+          this.LastUpdateField = value;
+          this.RaisePropertyChanged("LastUpdate");
+        }
+      }
+    }
+
+    public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+
+    protected void RaisePropertyChanged(string propertyName) {
+      System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
+      if ((propertyChanged != null)) {
+        propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+      }
+    }
+  }
+
+  [System.Diagnostics.DebuggerStepThroughAttribute()]
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "Heartbeat", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Hive.DataTransfer")]
+  [System.SerializableAttribute()]
+  public partial class Heartbeat : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+
+    [System.NonSerializedAttribute()]
+    private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private bool AssignJobField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private float CpuUtilizationField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private int FreeCoresField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private int FreeMemoryField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private System.Collections.Generic.Dictionary<System.Guid, System.TimeSpan> JobProgressField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private System.Guid SlaveIdField;
+
+    public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+      get {
+        return this.extensionDataField;
+      }
+      set {
+        this.extensionDataField = value;
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public bool AssignJob {
+      get {
+        return this.AssignJobField;
+      }
+      set {
+        if ((this.AssignJobField.Equals(value) != true)) {
+          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");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public int FreeCores {
+      get {
+        return this.FreeCoresField;
+      }
+      set {
+        if ((this.FreeCoresField.Equals(value) != true)) {
+          this.FreeCoresField = value;
+          this.RaisePropertyChanged("FreeCores");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public int FreeMemory {
+      get {
+        return this.FreeMemoryField;
+      }
+      set {
+        if ((this.FreeMemoryField.Equals(value) != true)) {
+          this.FreeMemoryField = value;
+          this.RaisePropertyChanged("FreeMemory");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public System.Collections.Generic.Dictionary<System.Guid, System.TimeSpan> JobProgress {
+      get {
+        return this.JobProgressField;
+      }
+      set {
+        if ((object.ReferenceEquals(this.JobProgressField, value) != true)) {
+          this.JobProgressField = value;
+          this.RaisePropertyChanged("JobProgress");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public System.Guid SlaveId {
+      get {
+        return this.SlaveIdField;
+      }
+      set {
+        if ((this.SlaveIdField.Equals(value) != true)) {
+          this.SlaveIdField = value;
+          this.RaisePropertyChanged("SlaveId");
+        }
+      }
+    }
+
+    public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+
+    protected void RaisePropertyChanged(string propertyName) {
+      System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
+      if ((propertyChanged != null)) {
+        propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+      }
+    }
+  }
+
+  [System.Diagnostics.DebuggerStepThroughAttribute()]
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "MessageContainer", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Hive")]
+  [System.SerializableAttribute()]
+  public partial class MessageContainer : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+
+    [System.NonSerializedAttribute()]
+    private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private System.Guid JobIdField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private HeuristicLab.Clients.Hive.MessageContainer.MessageType MessageField;
+
+    public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+      get {
+        return this.extensionDataField;
+      }
+      set {
+        this.extensionDataField = value;
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public System.Guid JobId {
+      get {
+        return this.JobIdField;
+      }
+      set {
+        if ((this.JobIdField.Equals(value) != true)) {
+          this.JobIdField = value;
+          this.RaisePropertyChanged("JobId");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public HeuristicLab.Clients.Hive.MessageContainer.MessageType Message {
+      get {
+        return this.MessageField;
+      }
+      set {
+        if ((this.MessageField.Equals(value) != true)) {
+          this.MessageField = value;
+          this.RaisePropertyChanged("Message");
+        }
+      }
+    }
+
+    public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+
+    protected void RaisePropertyChanged(string propertyName) {
+      System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
+      if ((propertyChanged != null)) {
+        propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+      }
+    }
+
     [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.Downtime))]
-    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Hive.HiveExperimentPermission))]
-    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Hive.PluginData))]
-    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Hive.NamedHiveItem))]
-    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Hive.HiveExperiment))]
-    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Hive.Plugin))]
-    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Hive.Resource))]
-    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Hive.Slave))]
-    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Hive.SlaveGroup))]
-    public partial class HiveItem : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged
-    {
-        
-        [System.NonSerializedAttribute()]
-        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
-        
-        [System.Runtime.Serialization.OptionalFieldAttribute()]
-        private System.Guid IdField;
-        
-        public System.Runtime.Serialization.ExtensionDataObject ExtensionData
-        {
-            get
-            {
-                return this.extensionDataField;
-            }
-            set
-            {
-                this.extensionDataField = value;
-            }
-        }
-        
-        [System.Runtime.Serialization.DataMemberAttribute()]
-        public System.Guid Id
-        {
-            get
-            {
-                return this.IdField;
-            }
-            set
-            {
-                if ((this.IdField.Equals(value) != true))
-                {
-                    this.IdField = value;
-                    this.RaisePropertyChanged("Id");
-                }
-            }
-        }
-        
-        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
-        
-        //protected void RaisePropertyChanged(string propertyName)
-        //{
-        //    System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
-        //    if ((propertyChanged != null))
-        //    {
-        //        propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
-        //    }
-        //}
-    }
-    
-    [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")]
-    [System.SerializableAttribute()]
-    public partial class StateLog : HeuristicLab.Clients.Hive.HiveItem
-    {
-        
-        [System.Runtime.Serialization.OptionalFieldAttribute()]
-        private System.DateTime DateTimeField;
-        
-        [System.Runtime.Serialization.OptionalFieldAttribute()]
-        private string ExceptionField;
-        
-        [System.Runtime.Serialization.OptionalFieldAttribute()]
-        private System.Guid JobIdField;
-        
-        [System.Runtime.Serialization.OptionalFieldAttribute()]
-        private System.Nullable<System.Guid> SlaveIdField;
-        
-        [System.Runtime.Serialization.OptionalFieldAttribute()]
-        private HeuristicLab.Clients.Hive.JobState StateField;
-        
-        [System.Runtime.Serialization.OptionalFieldAttribute()]
-        private System.Nullable<System.Guid> UserIdField;
-        
-        [System.Runtime.Serialization.DataMemberAttribute()]
-        public System.DateTime DateTime
-        {
-            get
-            {
-                return this.DateTimeField;
-            }
-            set
-            {
-                if ((this.DateTimeField.Equals(value) != true))
-                {
-                    this.DateTimeField = value;
-                    this.RaisePropertyChanged("DateTime");
-                }
-            }
-        }
-        
-        [System.Runtime.Serialization.DataMemberAttribute()]
-        public string Exception
-        {
-            get
-            {
-                return this.ExceptionField;
-            }
-            set
-            {
-                if ((object.ReferenceEquals(this.ExceptionField, value) != true))
-                {
-                    this.ExceptionField = value;
-                    this.RaisePropertyChanged("Exception");
-                }
-            }
-        }
-        
-        [System.Runtime.Serialization.DataMemberAttribute()]
-        public System.Guid JobId
-        {
-            get
-            {
-                return this.JobIdField;
-            }
-            set
-            {
-                if ((this.JobIdField.Equals(value) != true))
-                {
-                    this.JobIdField = value;
-                    this.RaisePropertyChanged("JobId");
-                }
-            }
-        }
-        
-        [System.Runtime.Serialization.DataMemberAttribute()]
-        public System.Nullable<System.Guid> SlaveId
-        {
-            get
-            {
-                return this.SlaveIdField;
-            }
-            set
-            {
-                if ((this.SlaveIdField.Equals(value) != true))
-                {
-                    this.SlaveIdField = value;
-                    this.RaisePropertyChanged("SlaveId");
-                }
-            }
-        }
-        
-        [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.Nullable<System.Guid> UserId
-        {
-            get
-            {
-                return this.UserIdField;
-            }
-            set
-            {
-                if ((this.UserIdField.Equals(value) != true))
-                {
-                    this.UserIdField = value;
-                    this.RaisePropertyChanged("UserId");
-                }
-            }
-        }
-    }
-    
-    [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="Downtime", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Hive.Common.DataTra" +
-        "nsfer")]
-    [System.SerializableAttribute()]
-    public partial class Downtime : 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");
-                }
-            }
-        }
-    }
-    
-    [System.Diagnostics.DebuggerStepThroughAttribute()]
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
-    [System.Runtime.Serialization.DataContractAttribute(Name="HiveExperimentPermission", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Hive.Common.DataTra" +
-        "nsfer")]
-    [System.SerializableAttribute()]
-    public partial class HiveExperimentPermission : HeuristicLab.Clients.Hive.HiveItem
-    {
-        
-        [System.Runtime.Serialization.OptionalFieldAttribute()]
-        private System.Guid GrantedByUserIdField;
-        
-        [System.Runtime.Serialization.OptionalFieldAttribute()]
-        private System.Guid GrantedUserIdField;
-        
-        [System.Runtime.Serialization.OptionalFieldAttribute()]
-        private System.Guid HiveExperimentIdField;
-        
-        [System.Runtime.Serialization.OptionalFieldAttribute()]
-        private HeuristicLab.Clients.Hive.Permission PermissionField;
-        
-        [System.Runtime.Serialization.DataMemberAttribute()]
-        public System.Guid GrantedByUserId
-        {
-            get
-            {
-                return this.GrantedByUserIdField;
-            }
-            set
-            {
-                if ((this.GrantedByUserIdField.Equals(value) != true))
-                {
-                    this.GrantedByUserIdField = value;
-                    this.RaisePropertyChanged("GrantedByUserId");
-                }
-            }
-        }
-        
-        [System.Runtime.Serialization.DataMemberAttribute()]
-        public System.Guid GrantedUserId
-        {
-            get
-            {
-                return this.GrantedUserIdField;
-            }
-            set
-            {
-                if ((this.GrantedUserIdField.Equals(value) != true))
-                {
-                    this.GrantedUserIdField = value;
-                    this.RaisePropertyChanged("GrantedUserId");
-                }
-            }
-        }
-        
-        [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 HeuristicLab.Clients.Hive.Permission Permission
-        {
-            get
-            {
-                return this.PermissionField;
-            }
-            set
-            {
-                if ((this.PermissionField.Equals(value) != true))
-                {
-                    this.PermissionField = value;
-                    this.RaisePropertyChanged("Permission");
-                }
-            }
-        }
-    }
-    
-    [System.Diagnostics.DebuggerStepThroughAttribute()]
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
-    [System.Runtime.Serialization.DataContractAttribute(Name="PluginData", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Hive.Common.DataTra" +
-        "nsfer")]
-    [System.SerializableAttribute()]
-    public partial class PluginData : HeuristicLab.Clients.Hive.HiveItem
-    {
-        
-        [System.Runtime.Serialization.OptionalFieldAttribute()]
-        private byte[] DataField;
-        
-        [System.Runtime.Serialization.OptionalFieldAttribute()]
-        private string FileNameField;
-        
-        [System.Runtime.Serialization.OptionalFieldAttribute()]
-        private System.Guid PluginIdField;
-        
-        [System.Runtime.Serialization.DataMemberAttribute()]
-        public byte[] Data
-        {
-            get
-            {
-                return this.DataField;
-            }
-            set
-            {
-                if ((object.ReferenceEquals(this.DataField, value) != true))
-                {
-                    this.DataField = value;
-                    this.RaisePropertyChanged("Data");
-                }
-            }
-        }
-        
-        [System.Runtime.Serialization.DataMemberAttribute()]
-        public string FileName
-        {
-            get
-            {
-                return this.FileNameField;
-            }
-            set
-            {
-                if ((object.ReferenceEquals(this.FileNameField, value) != true))
-                {
-                    this.FileNameField = value;
-                    this.RaisePropertyChanged("FileName");
-                }
-            }
-        }
-        
-        [System.Runtime.Serialization.DataMemberAttribute()]
-        public System.Guid PluginId
-        {
-            get
-            {
-                return this.PluginIdField;
-            }
-            set
-            {
-                if ((this.PluginIdField.Equals(value) != true))
-                {
-                    this.PluginIdField = value;
-                    this.RaisePropertyChanged("PluginId");
-                }
-            }
-        }
-    }
-    
-    [System.Diagnostics.DebuggerStepThroughAttribute()]
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
-    [System.Runtime.Serialization.DataContractAttribute(Name="NamedHiveItem", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Hive.Common.DataTra" +
-        "nsfer")]
-    [System.SerializableAttribute()]
-    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Hive.HiveExperiment))]
-    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Hive.Plugin))]
-    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Hive.Resource))]
-    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Hive.Slave))]
-    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Hive.SlaveGroup))]
-    public partial class NamedHiveItem : HeuristicLab.Clients.Hive.HiveItem
-    {
-        
-        [System.Runtime.Serialization.OptionalFieldAttribute()]
-        private string DescriptionField;
-        
-        [System.Runtime.Serialization.OptionalFieldAttribute()]
-        private string NameField;
-        
-        [System.Runtime.Serialization.DataMemberAttribute()]
-        public string Description
-        {
-            get
-            {
-                return this.DescriptionField;
-            }
-            set
-            {
-                if ((object.ReferenceEquals(this.DescriptionField, value) != true))
-                {
-                    this.DescriptionField = value;
-                    this.RaisePropertyChanged("Description");
-                }
-            }
-        }
-        
-        [System.Runtime.Serialization.DataMemberAttribute()]
-        public string Name
-        {
-            get
-            {
-                return this.NameField;
-            }
-            set
-            {
-                if ((object.ReferenceEquals(this.NameField, value) != true))
-                {
-                    this.NameField = value;
-                    this.RaisePropertyChanged("Name");
-                }
-            }
-        }
-    }
-    
-    [System.Diagnostics.DebuggerStepThroughAttribute()]
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
-    [System.Runtime.Serialization.DataContractAttribute(Name="HiveExperiment", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Hive.Common.DataTra" +
-        "nsfer")]
-    [System.SerializableAttribute()]
-    public partial class HiveExperiment : HeuristicLab.Clients.Hive.NamedHiveItem
-    {
-        
-        [System.Runtime.Serialization.OptionalFieldAttribute()]
-        private int CalculatingCountField;
-        
-        [System.Runtime.Serialization.OptionalFieldAttribute()]
-        private System.DateTime DateCreatedField;
-        
-        [System.Runtime.Serialization.OptionalFieldAttribute()]
-        private int FinishedCountField;
-        
-        [System.Runtime.Serialization.OptionalFieldAttribute()]
-        private int JobCountField;
-        
-        [System.Runtime.Serialization.OptionalFieldAttribute()]
-        private System.Nullable<System.DateTime> LastAccessedField;
-        
-        [System.Runtime.Serialization.OptionalFieldAttribute()]
-        private System.Guid OwnerUserIdField;
-        
-        [System.Runtime.Serialization.OptionalFieldAttribute()]
-        private string OwnerUsernameField;
-        
-        [System.Runtime.Serialization.OptionalFieldAttribute()]
-        private HeuristicLab.Clients.Hive.Permission PermissionField;
-        
-        [System.Runtime.Serialization.OptionalFieldAttribute()]
-        private string ResourceNamesField;
-        
-        [System.Runtime.Serialization.DataMemberAttribute()]
-        public int CalculatingCount
-        {
-            get
-            {
-                return this.CalculatingCountField;
-            }
-            set
-            {
-                if ((this.CalculatingCountField.Equals(value) != true))
-                {
-                    this.CalculatingCountField = value;
-                    this.RaisePropertyChanged("CalculatingCount");
-                }
-            }
-        }
-        
-        [System.Runtime.Serialization.DataMemberAttribute()]
-        public System.DateTime DateCreated
-        {
-            get
-            {
-                return this.DateCreatedField;
-            }
-            set
-            {
-                if ((this.DateCreatedField.Equals(value) != true))
-                {
-                    this.DateCreatedField = value;
-                    this.RaisePropertyChanged("DateCreated");
-                }
-            }
-        }
-        
-        [System.Runtime.Serialization.DataMemberAttribute()]
-        public int FinishedCount
-        {
-            get
-            {
-                return this.FinishedCountField;
-            }
-            set
-            {
-                if ((this.FinishedCountField.Equals(value) != true))
-                {
-                    this.FinishedCountField = value;
-                    this.RaisePropertyChanged("FinishedCount");
-                }
-            }
-        }
-        
-        [System.Runtime.Serialization.DataMemberAttribute()]
-        public int JobCount
-        {
-            get
-            {
-                return this.JobCountField;
-            }
-            set
-            {
-                if ((this.JobCountField.Equals(value) != true))
-                {
-                    this.JobCountField = value;
-                    this.RaisePropertyChanged("JobCount");
-                }
-            }
-        }
-        
-        [System.Runtime.Serialization.DataMemberAttribute()]
-        public System.Nullable<System.DateTime> LastAccessed
-        {
-            get
-            {
-                return this.LastAccessedField;
-            }
-            set
-            {
-                if ((this.LastAccessedField.Equals(value) != true))
-                {
-                    this.LastAccessedField = value;
-                    this.RaisePropertyChanged("LastAccessed");
-                }
-            }
-        }
-        
-        [System.Runtime.Serialization.DataMemberAttribute()]
-        public System.Guid OwnerUserId
-        {
-            get
-            {
-                return this.OwnerUserIdField;
-            }
-            set
-            {
-                if ((this.OwnerUserIdField.Equals(value) != true))
-                {
-                    this.OwnerUserIdField = value;
-                    this.RaisePropertyChanged("OwnerUserId");
-                }
-            }
-        }
-        
-        [System.Runtime.Serialization.DataMemberAttribute()]
-        public string OwnerUsername
-        {
-            get
-            {
-                return this.OwnerUsernameField;
-            }
-            set
-            {
-                if ((object.ReferenceEquals(this.OwnerUsernameField, value) != true))
-                {
-                    this.OwnerUsernameField = value;
-                    this.RaisePropertyChanged("OwnerUsername");
-                }
-            }
-        }
-        
-        [System.Runtime.Serialization.DataMemberAttribute()]
-        public HeuristicLab.Clients.Hive.Permission Permission
-        {
-            get
-            {
-                return this.PermissionField;
-            }
-            set
-            {
-                if ((this.PermissionField.Equals(value) != true))
-                {
-                    this.PermissionField = value;
-                    this.RaisePropertyChanged("Permission");
-                }
-            }
-        }
-        
-        [System.Runtime.Serialization.DataMemberAttribute()]
-        public string ResourceNames
-        {
-            get
-            {
-                return this.ResourceNamesField;
-            }
-            set
-            {
-                if ((object.ReferenceEquals(this.ResourceNamesField, value) != true))
-                {
-                    this.ResourceNamesField = value;
-                    this.RaisePropertyChanged("ResourceNames");
-                }
-            }
-        }
-    }
-    
-    [System.Diagnostics.DebuggerStepThroughAttribute()]
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
-    [System.Runtime.Serialization.DataContractAttribute(Name="Plugin", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Hive.Common.DataTra" +
-        "nsfer")]
-    [System.SerializableAttribute()]
-    public partial class Plugin : HeuristicLab.Clients.Hive.NamedHiveItem
-    {
-        
-        [System.Runtime.Serialization.OptionalFieldAttribute()]
-        private System.DateTime DateCreatedField;
-        
-        [System.Runtime.Serialization.OptionalFieldAttribute()]
-        private byte[] HashField;
-        
-        [System.Runtime.Serialization.OptionalFieldAttribute()]
-        private System.Guid UserIdField;
-        
-        [System.Runtime.Serialization.OptionalFieldAttribute()]
-        private System.Version VersionField;
-        
-        [System.Runtime.Serialization.DataMemberAttribute()]
-        public System.DateTime DateCreated
-        {
-            get
-            {
-                return this.DateCreatedField;
-            }
-            set
-            {
-                if ((this.DateCreatedField.Equals(value) != true))
-                {
-                    this.DateCreatedField = value;
-                    this.RaisePropertyChanged("DateCreated");
-                }
-            }
-        }
-        
-        [System.Runtime.Serialization.DataMemberAttribute()]
-        public byte[] Hash
-        {
-            get
-            {
-                return this.HashField;
-            }
-            set
-            {
-                if ((object.ReferenceEquals(this.HashField, value) != true))
-                {
-                    this.HashField = value;
-                    this.RaisePropertyChanged("Hash");
-                }
-            }
-        }
-        
-        [System.Runtime.Serialization.DataMemberAttribute()]
-        public System.Guid UserId
-        {
-            get
-            {
-                return this.UserIdField;
-            }
-            set
-            {
-                if ((this.UserIdField.Equals(value) != true))
-                {
-                    this.UserIdField = value;
-                    this.RaisePropertyChanged("UserId");
-                }
-            }
-        }
-        
-        [System.Runtime.Serialization.DataMemberAttribute()]
-        public System.Version Version
-        {
-            get
-            {
-                return this.VersionField;
-            }
-            set
-            {
-                if ((object.ReferenceEquals(this.VersionField, value) != true))
-                {
-                    this.VersionField = value;
-                    this.RaisePropertyChanged("Version");
-                }
-            }
-        }
-    }
-    
-    [System.Diagnostics.DebuggerStepThroughAttribute()]
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
-    [System.Runtime.Serialization.DataContractAttribute(Name="Resource", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Hive.Common.DataTra" +
-        "nsfer")]
-    [System.SerializableAttribute()]
-    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Hive.Slave))]
-    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Hive.SlaveGroup))]
-    public partial class Resource : HeuristicLab.Clients.Hive.NamedHiveItem
-    {
-        
-        [System.Runtime.Serialization.OptionalFieldAttribute()]
-        private System.Nullable<System.Guid> ParentResourceIdField;
-        
-        [System.Runtime.Serialization.DataMemberAttribute()]
-        public System.Nullable<System.Guid> ParentResourceId
-        {
-            get
-            {
-                return this.ParentResourceIdField;
-            }
-            set
-            {
-                if ((this.ParentResourceIdField.Equals(value) != true))
-                {
-                    this.ParentResourceIdField = value;
-                    this.RaisePropertyChanged("ParentResourceId");
-                }
-            }
-        }
-    }
-    
-    [System.Diagnostics.DebuggerStepThroughAttribute()]
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
-    [System.Runtime.Serialization.DataContractAttribute(Name="Slave", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Hive.Common.DataTra" +
-        "nsfer")]
-    [System.SerializableAttribute()]
-    public partial class Slave : HeuristicLab.Clients.Hive.Resource
-    {
-        
-        [System.Runtime.Serialization.OptionalFieldAttribute()]
-        private System.Nullable<int> CoresField;
-        
-        [System.Runtime.Serialization.OptionalFieldAttribute()]
-        private HeuristicLab.Clients.Hive.CpuArchitecture CpuArchitectureField;
-        
-        [System.Runtime.Serialization.OptionalFieldAttribute()]
-        private System.Nullable<int> CpuSpeedField;
-        
-        [System.Runtime.Serialization.OptionalFieldAttribute()]
-        private double CpuUtilizationField;
-        
-        [System.Runtime.Serialization.OptionalFieldAttribute()]
-        private System.Nullable<int> FreeCoresField;
-        
-        [System.Runtime.Serialization.OptionalFieldAttribute()]
-        private System.Nullable<int> FreeMemoryField;
-        
-        [System.Runtime.Serialization.OptionalFieldAttribute()]
-        private bool IsAllowedToCalculateField;
-        
-        [System.Runtime.Serialization.OptionalFieldAttribute()]
-        private System.Nullable<System.DateTime> LastHeartbeatField;
-        
-        [System.Runtime.Serialization.OptionalFieldAttribute()]
-        private System.Nullable<int> MemoryField;
-        
-        [System.Runtime.Serialization.OptionalFieldAttribute()]
-        private string OperatingSystemField;
-        
-        [System.Runtime.Serialization.OptionalFieldAttribute()]
-        private HeuristicLab.Clients.Hive.SlaveState SlaveStateField;
-        
-        [System.Runtime.Serialization.DataMemberAttribute()]
-        public System.Nullable<int> Cores
-        {
-            get
-            {
-                return this.CoresField;
-            }
-            set
-            {
-                if ((this.CoresField.Equals(value) != true))
-                {
-                    this.CoresField = value;
-                    this.RaisePropertyChanged("Cores");
-                }
-            }
-        }
-        
-        [System.Runtime.Serialization.DataMemberAttribute()]
-        public HeuristicLab.Clients.Hive.CpuArchitecture CpuArchitecture
-        {
-            get
-            {
-                return this.CpuArchitectureField;
-            }
-            set
-            {
-                if ((this.CpuArchitectureField.Equals(value) != true))
-                {
-                    this.CpuArchitectureField = value;
-                    this.RaisePropertyChanged("CpuArchitecture");
-                }
-            }
-        }
-        
-        [System.Runtime.Serialization.DataMemberAttribute()]
-        public System.Nullable<int> CpuSpeed
-        {
-            get
-            {
-                return this.CpuSpeedField;
-            }
-            set
-            {
-                if ((this.CpuSpeedField.Equals(value) != true))
-                {
-                    this.CpuSpeedField = value;
-                    this.RaisePropertyChanged("CpuSpeed");
-                }
-            }
-        }
-        
-        [System.Runtime.Serialization.DataMemberAttribute()]
-        public double CpuUtilization
-        {
-            get
-            {
-                return this.CpuUtilizationField;
-            }
-            set
-            {
-                if ((this.CpuUtilizationField.Equals(value) != true))
-                {
-                    this.CpuUtilizationField = value;
-                    this.RaisePropertyChanged("CpuUtilization");
-                }
-            }
-        }
-        
-        [System.Runtime.Serialization.DataMemberAttribute()]
-        public System.Nullable<int> FreeCores
-        {
-            get
-            {
-                return this.FreeCoresField;
-            }
-            set
-            {
-                if ((this.FreeCoresField.Equals(value) != true))
-                {
-                    this.FreeCoresField = value;
-                    this.RaisePropertyChanged("FreeCores");
-                }
-            }
-        }
-        
-        [System.Runtime.Serialization.DataMemberAttribute()]
-        public System.Nullable<int> FreeMemory
-        {
-            get
-            {
-                return this.FreeMemoryField;
-            }
-            set
-            {
-                if ((this.FreeMemoryField.Equals(value) != true))
-                {
-                    this.FreeMemoryField = value;
-                    this.RaisePropertyChanged("FreeMemory");
-                }
-            }
-        }
-        
-        [System.Runtime.Serialization.DataMemberAttribute()]
-        public bool IsAllowedToCalculate
-        {
-            get
-            {
-                return this.IsAllowedToCalculateField;
-            }
-            set
-            {
-                if ((this.IsAllowedToCalculateField.Equals(value) != true))
-                {
-                    this.IsAllowedToCalculateField = value;
-                    this.RaisePropertyChanged("IsAllowedToCalculate");
-                }
-            }
-        }
-        
-        [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 System.Nullable<int> Memory
-        {
-            get
-            {
-                return this.MemoryField;
-            }
-            set
-            {
-                if ((this.MemoryField.Equals(value) != true))
-                {
-                    this.MemoryField = value;
-                    this.RaisePropertyChanged("Memory");
-                }
-            }
-        }
-        
-        [System.Runtime.Serialization.DataMemberAttribute()]
-        public string OperatingSystem
-        {
-            get
-            {
-                return this.OperatingSystemField;
-            }
-            set
-            {
-                if ((object.ReferenceEquals(this.OperatingSystemField, value) != true))
-                {
-                    this.OperatingSystemField = value;
-                    this.RaisePropertyChanged("OperatingSystem");
-                }
-            }
-        }
-        
-        [System.Runtime.Serialization.DataMemberAttribute()]
-        public HeuristicLab.Clients.Hive.SlaveState SlaveState
-        {
-            get
-            {
-                return this.SlaveStateField;
-            }
-            set
-            {
-                if ((this.SlaveStateField.Equals(value) != true))
-                {
-                    this.SlaveStateField = value;
-                    this.RaisePropertyChanged("SlaveState");
-                }
-            }
-        }
-    }
-    
-    [System.Diagnostics.DebuggerStepThroughAttribute()]
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
-    [System.Runtime.Serialization.DataContractAttribute(Name="SlaveGroup", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Hive.Common.DataTra" +
-        "nsfer")]
-    [System.SerializableAttribute()]
-    public partial class SlaveGroup : HeuristicLab.Clients.Hive.Resource
-    {
-    }
-    
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
-    [System.Runtime.Serialization.DataContractAttribute(Name="Command", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Hive.Common.DataTra" +
-        "nsfer")]
-    public enum Command : int
-    {
-        
-        [System.Runtime.Serialization.EnumMemberAttribute()]
-        Stop = 0,
-        
-        [System.Runtime.Serialization.EnumMemberAttribute()]
-        Abort = 1,
-        
-        [System.Runtime.Serialization.EnumMemberAttribute()]
-        Pause = 2,
-    }
-    
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
-    [System.Runtime.Serialization.DataContractAttribute(Name="JobState", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Hive.Common.DataTra" +
-        "nsfer")]
-    public enum JobState : int
-    {
-        
-        [System.Runtime.Serialization.EnumMemberAttribute()]
-        Offline = 0,
-        
-        [System.Runtime.Serialization.EnumMemberAttribute()]
-        Waiting = 1,
-        
-        [System.Runtime.Serialization.EnumMemberAttribute()]
-        Transferring = 2,
-        
-        [System.Runtime.Serialization.EnumMemberAttribute()]
-        Calculating = 3,
-        
-        [System.Runtime.Serialization.EnumMemberAttribute()]
-        Paused = 4,
-        
-        [System.Runtime.Serialization.EnumMemberAttribute()]
-        Finished = 5,
-        
-        [System.Runtime.Serialization.EnumMemberAttribute()]
-        Aborted = 6,
-        
-        [System.Runtime.Serialization.EnumMemberAttribute()]
-        Failed = 7,
-    }
-    
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
-    [System.Runtime.Serialization.DataContractAttribute(Name="Permission", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Hive.Common.DataTra" +
-        "nsfer")]
-    public enum Permission : int
-    {
-        
-        [System.Runtime.Serialization.EnumMemberAttribute()]
-        NotAllowed = 0,
-        
-        [System.Runtime.Serialization.EnumMemberAttribute()]
-        Read = 1,
-        
-        [System.Runtime.Serialization.EnumMemberAttribute()]
-        Full = 2,
-    }
-    
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
-    [System.Runtime.Serialization.DataContractAttribute(Name="CpuArchitecture", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Hive.Common.DataTra" +
-        "nsfer")]
-    public enum CpuArchitecture : int
-    {
-        
-        [System.Runtime.Serialization.EnumMemberAttribute()]
-        x86 = 0,
-        
-        [System.Runtime.Serialization.EnumMemberAttribute()]
-        x64 = 1,
-    }
-    
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
-    [System.Runtime.Serialization.DataContractAttribute(Name="SlaveState", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Hive.Common.DataTra" +
-        "nsfer")]
-    public enum SlaveState : int
-    {
-        
-        [System.Runtime.Serialization.EnumMemberAttribute()]
-        Idle = 0,
-        
-        [System.Runtime.Serialization.EnumMemberAttribute()]
-        Calculating = 1,
-        
-        [System.Runtime.Serialization.EnumMemberAttribute()]
-        Offline = 2,
-    }
-    
-    [System.Diagnostics.DebuggerStepThroughAttribute()]
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
-    [System.Runtime.Serialization.DataContractAttribute(Name="JobData", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Hive.Common.DataTra" +
-        "nsfer")]
-    [System.SerializableAttribute()]
-    public partial class JobData : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged
-    {
-        
-        [System.NonSerializedAttribute()]
-        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
-        
-        [System.Runtime.Serialization.OptionalFieldAttribute()]
-        private byte[] DataField;
-        
-        [System.Runtime.Serialization.OptionalFieldAttribute()]
-        private System.Guid JobIdField;
-        
-        [System.Runtime.Serialization.OptionalFieldAttribute()]
-        private System.DateTime LastUpdateField;
-        
-        public System.Runtime.Serialization.ExtensionDataObject ExtensionData
-        {
-            get
-            {
-                return this.extensionDataField;
-            }
-            set
-            {
-                this.extensionDataField = value;
-            }
-        }
-        
-        [System.Runtime.Serialization.DataMemberAttribute()]
-        public byte[] Data
-        {
-            get
-            {
-                return this.DataField;
-            }
-            set
-            {
-                if ((object.ReferenceEquals(this.DataField, value) != true))
-                {
-                    this.DataField = value;
-                    this.RaisePropertyChanged("Data");
-                }
-            }
-        }
-        
-        [System.Runtime.Serialization.DataMemberAttribute()]
-        public System.Guid JobId
-        {
-            get
-            {
-                return this.JobIdField;
-            }
-            set
-            {
-                if ((this.JobIdField.Equals(value) != true))
-                {
-                    this.JobIdField = value;
-                    this.RaisePropertyChanged("JobId");
-                }
-            }
-        }
-        
-        [System.Runtime.Serialization.DataMemberAttribute()]
-        public System.DateTime LastUpdate
-        {
-            get
-            {
-                return this.LastUpdateField;
-            }
-            set
-            {
-                if ((this.LastUpdateField.Equals(value) != true))
-                {
-                    this.LastUpdateField = value;
-                    this.RaisePropertyChanged("LastUpdate");
-                }
-            }
-        }
-        
-        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
-        
-        protected void RaisePropertyChanged(string propertyName)
-        {
-            System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
-            if ((propertyChanged != null))
-            {
-                propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
-            }
-        }
-    }
-    
-    [System.Diagnostics.DebuggerStepThroughAttribute()]
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
-    [System.Runtime.Serialization.DataContractAttribute(Name="Heartbeat", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Hive.Common.DataTra" +
-        "nsfer")]
-    [System.SerializableAttribute()]
-    public partial class Heartbeat : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged
-    {
-        
-        [System.NonSerializedAttribute()]
-        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
-        
-        [System.Runtime.Serialization.OptionalFieldAttribute()]
-        private bool AssignJobField;
-        
-        [System.Runtime.Serialization.OptionalFieldAttribute()]
-        private float CpuUtilizationField;
-        
-        [System.Runtime.Serialization.OptionalFieldAttribute()]
-        private int FreeCoresField;
-        
-        [System.Runtime.Serialization.OptionalFieldAttribute()]
-        private int FreeMemoryField;
-        
-        [System.Runtime.Serialization.OptionalFieldAttribute()]
-        private System.Collections.Generic.Dictionary<System.Guid, System.TimeSpan> JobProgressField;
-        
-        [System.Runtime.Serialization.OptionalFieldAttribute()]
-        private System.Guid SlaveIdField;
-        
-        public System.Runtime.Serialization.ExtensionDataObject ExtensionData
-        {
-            get
-            {
-                return this.extensionDataField;
-            }
-            set
-            {
-                this.extensionDataField = value;
-            }
-        }
-        
-        [System.Runtime.Serialization.DataMemberAttribute()]
-        public bool AssignJob
-        {
-            get
-            {
-                return this.AssignJobField;
-            }
-            set
-            {
-                if ((this.AssignJobField.Equals(value) != true))
-                {
-                    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");
-                }
-            }
-        }
-        
-        [System.Runtime.Serialization.DataMemberAttribute()]
-        public int FreeCores
-        {
-            get
-            {
-                return this.FreeCoresField;
-            }
-            set
-            {
-                if ((this.FreeCoresField.Equals(value) != true))
-                {
-                    this.FreeCoresField = value;
-                    this.RaisePropertyChanged("FreeCores");
-                }
-            }
-        }
-        
-        [System.Runtime.Serialization.DataMemberAttribute()]
-        public int FreeMemory
-        {
-            get
-            {
-                return this.FreeMemoryField;
-            }
-            set
-            {
-                if ((this.FreeMemoryField.Equals(value) != true))
-                {
-                    this.FreeMemoryField = value;
-                    this.RaisePropertyChanged("FreeMemory");
-                }
-            }
-        }
-        
-        [System.Runtime.Serialization.DataMemberAttribute()]
-        public System.Collections.Generic.Dictionary<System.Guid, System.TimeSpan> JobProgress
-        {
-            get
-            {
-                return this.JobProgressField;
-            }
-            set
-            {
-                if ((object.ReferenceEquals(this.JobProgressField, value) != true))
-                {
-                    this.JobProgressField = value;
-                    this.RaisePropertyChanged("JobProgress");
-                }
-            }
-        }
-        
-        [System.Runtime.Serialization.DataMemberAttribute()]
-        public System.Guid SlaveId
-        {
-            get
-            {
-                return this.SlaveIdField;
-            }
-            set
-            {
-                if ((this.SlaveIdField.Equals(value) != true))
-                {
-                    this.SlaveIdField = value;
-                    this.RaisePropertyChanged("SlaveId");
-                }
-            }
-        }
-        
-        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
-        
-        protected void RaisePropertyChanged(string propertyName)
-        {
-            System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
-            if ((propertyChanged != null))
-            {
-                propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
-            }
-        }
-    }
-    
-    [System.Diagnostics.DebuggerStepThroughAttribute()]
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
-    [System.Runtime.Serialization.DataContractAttribute(Name="MessageContainer", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Hive.Common")]
-    [System.SerializableAttribute()]
-    public partial class MessageContainer : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged
-    {
-        
-        [System.NonSerializedAttribute()]
-        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
-        
-        [System.Runtime.Serialization.OptionalFieldAttribute()]
-        private System.Guid JobIdField;
-        
-        [System.Runtime.Serialization.OptionalFieldAttribute()]
-        private HeuristicLab.Clients.Hive.MessageContainer.MessageType MessageField;
-        
-        public System.Runtime.Serialization.ExtensionDataObject ExtensionData
-        {
-            get
-            {
-                return this.extensionDataField;
-            }
-            set
-            {
-                this.extensionDataField = value;
-            }
-        }
-        
-        [System.Runtime.Serialization.DataMemberAttribute()]
-        public System.Guid JobId
-        {
-            get
-            {
-                return this.JobIdField;
-            }
-            set
-            {
-                if ((this.JobIdField.Equals(value) != true))
-                {
-                    this.JobIdField = value;
-                    this.RaisePropertyChanged("JobId");
-                }
-            }
-        }
-        
-        [System.Runtime.Serialization.DataMemberAttribute()]
-        public HeuristicLab.Clients.Hive.MessageContainer.MessageType Message
-        {
-            get
-            {
-                return this.MessageField;
-            }
-            set
-            {
-                if ((this.MessageField.Equals(value) != true))
-                {
-                    this.MessageField = value;
-                    this.RaisePropertyChanged("Message");
-                }
-            }
-        }
-        
-        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
-        
-        protected void RaisePropertyChanged(string propertyName)
-        {
-            System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
-            if ((propertyChanged != null))
-            {
-                propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
-            }
-        }
-        
-        [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
-        [System.Runtime.Serialization.DataContractAttribute(Name="MessageContainer.MessageType", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Hive.Common")]
-        public enum MessageType : int
-        {
-            
-            [System.Runtime.Serialization.EnumMemberAttribute()]
-            CalculateJob = 0,
-            
-            [System.Runtime.Serialization.EnumMemberAttribute()]
-            StopJob = 1,
-            
-            [System.Runtime.Serialization.EnumMemberAttribute()]
-            StopAll = 2,
-            
-            [System.Runtime.Serialization.EnumMemberAttribute()]
-            AbortJob = 3,
-            
-            [System.Runtime.Serialization.EnumMemberAttribute()]
-            AbortAll = 4,
-            
-            [System.Runtime.Serialization.EnumMemberAttribute()]
-            PauseJob = 5,
-            
-            [System.Runtime.Serialization.EnumMemberAttribute()]
-            PauseAll = 6,
-            
-            [System.Runtime.Serialization.EnumMemberAttribute()]
-            Restart = 7,
-            
-            [System.Runtime.Serialization.EnumMemberAttribute()]
-            Sleep = 8,
-            
-            [System.Runtime.Serialization.EnumMemberAttribute()]
-            ShutdownSlave = 9,
-            
-            [System.Runtime.Serialization.EnumMemberAttribute()]
-            SayHello = 10,
-        }
-    }
-    
-    [System.Diagnostics.DebuggerStepThroughAttribute()]
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
-    [System.Runtime.Serialization.DataContractAttribute(Name="PluginAlreadyExistsFault", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Hive.Common")]
-    [System.SerializableAttribute()]
-    public partial class PluginAlreadyExistsFault : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged
-    {
-        
-        [System.NonSerializedAttribute()]
-        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
-        
-        [System.Runtime.Serialization.OptionalFieldAttribute()]
-        private System.Guid IdField;
-        
-        public System.Runtime.Serialization.ExtensionDataObject ExtensionData
-        {
-            get
-            {
-                return this.extensionDataField;
-            }
-            set
-            {
-                this.extensionDataField = value;
-            }
-        }
-        
-        [System.Runtime.Serialization.DataMemberAttribute()]
-        public System.Guid Id
-        {
-            get
-            {
-                return this.IdField;
-            }
-            set
-            {
-                if ((this.IdField.Equals(value) != true))
-                {
-                    this.IdField = value;
-                    this.RaisePropertyChanged("Id");
-                }
-            }
-        }
-        
-        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
-        
-        protected void RaisePropertyChanged(string propertyName)
-        {
-            System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
-            if ((propertyChanged != null))
-            {
-                propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
-            }
-        }
-    }
-    
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
-    [System.ServiceModel.ServiceContractAttribute(ConfigurationName="HeuristicLab.Clients.Hive.IHiveService")]
-    public interface IHiveService
-    {
-        
-        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IHiveService/UpdateSlaveGroup", ReplyAction="http://tempuri.org/IHiveService/UpdateSlaveGroupResponse")]
-        void UpdateSlaveGroup(HeuristicLab.Clients.Hive.SlaveGroup slaveGroup);
-        
-        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IHiveService/DeleteSlave", ReplyAction="http://tempuri.org/IHiveService/DeleteSlaveResponse")]
-        void DeleteSlave(System.Guid slaveId);
-        
-        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IHiveService/DeleteSlaveGroup", ReplyAction="http://tempuri.org/IHiveService/DeleteSlaveGroupResponse")]
-        void DeleteSlaveGroup(System.Guid slaveGroupId);
-        
-        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IHiveService/AddResourceToGroup", ReplyAction="http://tempuri.org/IHiveService/AddResourceToGroupResponse")]
-        void AddResourceToGroup(System.Guid slaveGroupId, System.Guid resourceId);
-        
-        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IHiveService/RemoveResourceFromGroup", ReplyAction="http://tempuri.org/IHiveService/RemoveResourceFromGroupResponse")]
-        void RemoveResourceFromGroup(System.Guid slaveGroupId, System.Guid resourceId);
-        
-        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IHiveService/GetResourceId", ReplyAction="http://tempuri.org/IHiveService/GetResourceIdResponse")]
-        System.Guid GetResourceId(string resourceName);
-        
-        [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);
-        
-        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IHiveService/AddDowntime", ReplyAction="http://tempuri.org/IHiveService/AddDowntimeResponse")]
-        System.Guid AddDowntime(HeuristicLab.Clients.Hive.Downtime downtime);
-        
-        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IHiveService/DeleteDowntime", ReplyAction="http://tempuri.org/IHiveService/DeleteDowntimeResponse")]
-        void DeleteDowntime(System.Guid downtimeId);
-        
-        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IHiveService/UpdateDowntime", ReplyAction="http://tempuri.org/IHiveService/UpdateDowntimeResponse")]
-        void UpdateDowntime(HeuristicLab.Clients.Hive.Downtime downtime);
-        
-        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IHiveService/GetDowntimesForResource", ReplyAction="http://tempuri.org/IHiveService/GetDowntimesForResourceResponse")]
-        System.Collections.Generic.List<HeuristicLab.Clients.Hive.Downtime> GetDowntimesForResource(System.Guid resourceId);
-        
-        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IHiveService/GetUsernameByUserId", ReplyAction="http://tempuri.org/IHiveService/GetUsernameByUserIdResponse")]
-        string GetUsernameByUserId(System.Guid userId);
-        
-        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IHiveService/GetUserIdByUsername", ReplyAction="http://tempuri.org/IHiveService/GetUserIdByUsernameResponse")]
-        System.Guid GetUserIdByUsername(string username);
-        
-        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IHiveService/AddJob", ReplyAction="http://tempuri.org/IHiveService/AddJobResponse")]
-        System.Guid AddJob(HeuristicLab.Clients.Hive.Job job, HeuristicLab.Clients.Hive.JobData jobData, System.Collections.Generic.List<System.Guid> resourceIds);
-        
-        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IHiveService/AddChildJob", ReplyAction="http://tempuri.org/IHiveService/AddChildJobResponse")]
-        System.Guid AddChildJob(System.Guid parentJobId, HeuristicLab.Clients.Hive.Job job, HeuristicLab.Clients.Hive.JobData jobData);
-        
-        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IHiveService/GetJob", ReplyAction="http://tempuri.org/IHiveService/GetJobResponse")]
-        HeuristicLab.Clients.Hive.Job GetJob(System.Guid jobId);
-        
-        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IHiveService/GetJobs", ReplyAction="http://tempuri.org/IHiveService/GetJobsResponse")]
-        System.Collections.Generic.List<HeuristicLab.Clients.Hive.Job> GetJobs();
-        
-        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IHiveService/GetLightweightJobs", ReplyAction="http://tempuri.org/IHiveService/GetLightweightJobsResponse")]
-        System.Collections.Generic.List<HeuristicLab.Clients.Hive.LightweightJob> GetLightweightJobs(System.Collections.Generic.List<System.Guid> jobIds);
-        
-        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IHiveService/GetLightweightChildJobs", ReplyAction="http://tempuri.org/IHiveService/GetLightweightChildJobsResponse")]
-        System.Collections.Generic.List<HeuristicLab.Clients.Hive.LightweightJob> GetLightweightChildJobs(System.Nullable<System.Guid> parentJobId, bool recursive, bool includeParent);
-        
-        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IHiveService/GetLightweightExperimentJobs", ReplyAction="http://tempuri.org/IHiveService/GetLightweightExperimentJobsResponse")]
-        System.Collections.Generic.List<HeuristicLab.Clients.Hive.LightweightJob> GetLightweightExperimentJobs(System.Guid experimentId);
-        
-        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IHiveService/GetJobData", ReplyAction="http://tempuri.org/IHiveService/GetJobDataResponse")]
-        HeuristicLab.Clients.Hive.JobData GetJobData(System.Guid jobId);
-        
-        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IHiveService/UpdateJob", ReplyAction="http://tempuri.org/IHiveService/UpdateJobResponse")]
-        void UpdateJob(HeuristicLab.Clients.Hive.Job jobDto);
-        
-        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IHiveService/UpdateJobData", ReplyAction="http://tempuri.org/IHiveService/UpdateJobDataResponse")]
-        void UpdateJobData(HeuristicLab.Clients.Hive.Job jobDto, HeuristicLab.Clients.Hive.JobData jobDataDto);
-        
-        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IHiveService/DeleteJob", ReplyAction="http://tempuri.org/IHiveService/DeleteJobResponse")]
-        void DeleteJob(System.Guid jobId);
-        
-        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IHiveService/DeleteChildJobs", ReplyAction="http://tempuri.org/IHiveService/DeleteChildJobsResponse")]
-        void DeleteChildJobs(System.Guid parentJobId);
-        
-        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IHiveService/UpdateJobState", ReplyAction="http://tempuri.org/IHiveService/UpdateJobStateResponse")]
-        HeuristicLab.Clients.Hive.Job UpdateJobState(System.Guid jobId, HeuristicLab.Clients.Hive.JobState jobState, System.Nullable<System.Guid> slaveId, System.Nullable<System.Guid> userId, string exception);
-        
-        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IHiveService/StopJob", ReplyAction="http://tempuri.org/IHiveService/StopJobResponse")]
-        void StopJob(System.Guid jobId);
-        
-        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IHiveService/PauseJob", ReplyAction="http://tempuri.org/IHiveService/PauseJobResponse")]
-        void PauseJob(System.Guid jobId);
-        
-        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IHiveService/RestartJob", ReplyAction="http://tempuri.org/IHiveService/RestartJobResponse")]
-        void RestartJob(System.Guid jobId);
-        
-        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IHiveService/GetHiveExperiment", ReplyAction="http://tempuri.org/IHiveService/GetHiveExperimentResponse")]
-        HeuristicLab.Clients.Hive.HiveExperiment GetHiveExperiment(System.Guid id);
-        
-        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IHiveService/GetHiveExperiments", ReplyAction="http://tempuri.org/IHiveService/GetHiveExperimentsResponse")]
-        System.Collections.Generic.List<HeuristicLab.Clients.Hive.HiveExperiment> GetHiveExperiments();
-        
-        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IHiveService/GetAllHiveExperiments", ReplyAction="http://tempuri.org/IHiveService/GetAllHiveExperimentsResponse")]
-        System.Collections.Generic.List<HeuristicLab.Clients.Hive.HiveExperiment> GetAllHiveExperiments();
-        
-        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IHiveService/AddHiveExperiment", ReplyAction="http://tempuri.org/IHiveService/AddHiveExperimentResponse")]
-        System.Guid AddHiveExperiment(HeuristicLab.Clients.Hive.HiveExperiment hiveExperimentDto);
-        
-        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IHiveService/UpdateHiveExperiment", ReplyAction="http://tempuri.org/IHiveService/UpdateHiveExperimentResponse")]
-        void UpdateHiveExperiment(HeuristicLab.Clients.Hive.HiveExperiment hiveExperimentDto);
-        
-        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IHiveService/DeleteHiveExperiment", ReplyAction="http://tempuri.org/IHiveService/DeleteHiveExperimentResponse")]
-        void DeleteHiveExperiment(System.Guid hiveExperimentId);
-        
-        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IHiveService/GrantPermission", ReplyAction="http://tempuri.org/IHiveService/GrantPermissionResponse")]
-        void GrantPermission(System.Guid hiveExperimentId, System.Guid grantedUserId, HeuristicLab.Clients.Hive.Permission permission);
-        
-        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IHiveService/RevokePermission", ReplyAction="http://tempuri.org/IHiveService/RevokePermissionResponse")]
-        void RevokePermission(System.Guid hiveExperimentId, System.Guid grantedUserId);
-        
-        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IHiveService/GetHiveExperimentPermissions", ReplyAction="http://tempuri.org/IHiveService/GetHiveExperimentPermissionsResponse")]
-        System.Collections.Generic.List<HeuristicLab.Clients.Hive.HiveExperimentPermission> GetHiveExperimentPermissions(System.Guid hiveExperimentId);
-        
-        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IHiveService/IsAllowedPrivileged", ReplyAction="http://tempuri.org/IHiveService/IsAllowedPrivilegedResponse")]
-        bool IsAllowedPrivileged();
-        
-        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IHiveService/Hello", ReplyAction="http://tempuri.org/IHiveService/HelloResponse")]
-        void Hello(HeuristicLab.Clients.Hive.Slave slave);
-        
-        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IHiveService/GoodBye", ReplyAction="http://tempuri.org/IHiveService/GoodByeResponse")]
-        void GoodBye(System.Guid slaveId);
-        
-        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IHiveService/Heartbeat", ReplyAction="http://tempuri.org/IHiveService/HeartbeatResponse")]
-        System.Collections.Generic.List<HeuristicLab.Clients.Hive.MessageContainer> Heartbeat([System.ServiceModel.MessageParameterAttribute(Name="heartbeat")] HeuristicLab.Clients.Hive.Heartbeat heartbeat1);
-        
-        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IHiveService/GetPlugin", ReplyAction="http://tempuri.org/IHiveService/GetPluginResponse")]
-        HeuristicLab.Clients.Hive.Plugin GetPlugin(System.Guid pluginId);
-        
-        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IHiveService/GetPluginByHash", ReplyAction="http://tempuri.org/IHiveService/GetPluginByHashResponse")]
-        HeuristicLab.Clients.Hive.Plugin GetPluginByHash(byte[] hash);
-        
-        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IHiveService/AddPlugin", ReplyAction="http://tempuri.org/IHiveService/AddPluginResponse")]
-        [System.ServiceModel.FaultContractAttribute(typeof(HeuristicLab.Clients.Hive.PluginAlreadyExistsFault), Action="http://tempuri.org/IHiveService/AddPluginPluginAlreadyExistsFaultFault", Name="PluginAlreadyExistsFault", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Hive.Common")]
-        System.Guid AddPlugin(HeuristicLab.Clients.Hive.Plugin plugin, System.Collections.Generic.List<HeuristicLab.Clients.Hive.PluginData> pluginData);
-        
-        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IHiveService/GetPlugins", ReplyAction="http://tempuri.org/IHiveService/GetPluginsResponse")]
-        System.Collections.Generic.List<HeuristicLab.Clients.Hive.Plugin> GetPlugins();
-        
-        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IHiveService/GetPluginDatas", ReplyAction="http://tempuri.org/IHiveService/GetPluginDatasResponse")]
-        System.Collections.Generic.List<HeuristicLab.Clients.Hive.PluginData> GetPluginDatas(System.Collections.Generic.List<System.Guid> pluginIds);
-        
-        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IHiveService/DeletePlugin", ReplyAction="http://tempuri.org/IHiveService/DeletePluginResponse")]
-        void DeletePlugin(System.Guid pluginId);
-        
-        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IHiveService/AddSlave", ReplyAction="http://tempuri.org/IHiveService/AddSlaveResponse")]
-        System.Guid AddSlave(HeuristicLab.Clients.Hive.Slave slave);
-        
-        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IHiveService/AddSlaveGroup", ReplyAction="http://tempuri.org/IHiveService/AddSlaveGroupResponse")]
-        System.Guid AddSlaveGroup(HeuristicLab.Clients.Hive.SlaveGroup slaveGroup);
-        
-        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IHiveService/GetSlave", ReplyAction="http://tempuri.org/IHiveService/GetSlaveResponse")]
-        HeuristicLab.Clients.Hive.Slave GetSlave(System.Guid slaveId);
-        
-        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IHiveService/GetSlaveGroup", ReplyAction="http://tempuri.org/IHiveService/GetSlaveGroupResponse")]
-        HeuristicLab.Clients.Hive.SlaveGroup GetSlaveGroup(System.Guid slaveGroupId);
-        
-        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IHiveService/GetSlaves", ReplyAction="http://tempuri.org/IHiveService/GetSlavesResponse")]
-        System.Collections.Generic.List<HeuristicLab.Clients.Hive.Slave> GetSlaves();
-        
-        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IHiveService/GetSlaveGroups", ReplyAction="http://tempuri.org/IHiveService/GetSlaveGroupsResponse")]
-        System.Collections.Generic.List<HeuristicLab.Clients.Hive.SlaveGroup> GetSlaveGroups();
-        
-        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IHiveService/UpdateSlave", ReplyAction="http://tempuri.org/IHiveService/UpdateSlaveResponse")]
-        void UpdateSlave(HeuristicLab.Clients.Hive.Slave slave);
-    }
-    
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
-    public interface IHiveServiceChannel : HeuristicLab.Clients.Hive.IHiveService, System.ServiceModel.IClientChannel
-    {
-    }
-    
-    [System.Diagnostics.DebuggerStepThroughAttribute()]
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
-    public partial class HiveServiceClient : System.ServiceModel.ClientBase<HeuristicLab.Clients.Hive.IHiveService>, HeuristicLab.Clients.Hive.IHiveService
-    {
-        
-        public HiveServiceClient()
-        {
-        }
-        
-        public HiveServiceClient(string endpointConfigurationName) : 
-                base(endpointConfigurationName)
-        {
-        }
-        
-        public HiveServiceClient(string endpointConfigurationName, string remoteAddress) : 
-                base(endpointConfigurationName, remoteAddress)
-        {
-        }
-        
-        public HiveServiceClient(string endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) : 
-                base(endpointConfigurationName, remoteAddress)
-        {
-        }
-        
-        public HiveServiceClient(System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress) : 
-                base(binding, remoteAddress)
-        {
-        }
-        
-        public void UpdateSlaveGroup(HeuristicLab.Clients.Hive.SlaveGroup slaveGroup)
-        {
-            base.Channel.UpdateSlaveGroup(slaveGroup);
-        }
-        
-        public void DeleteSlave(System.Guid slaveId)
-        {
-            base.Channel.DeleteSlave(slaveId);
-        }
-        
-        public void DeleteSlaveGroup(System.Guid slaveGroupId)
-        {
-            base.Channel.DeleteSlaveGroup(slaveGroupId);
-        }
-        
-        public void AddResourceToGroup(System.Guid slaveGroupId, System.Guid resourceId)
-        {
-            base.Channel.AddResourceToGroup(slaveGroupId, resourceId);
-        }
-        
-        public void RemoveResourceFromGroup(System.Guid slaveGroupId, System.Guid resourceId)
-        {
-            base.Channel.RemoveResourceFromGroup(slaveGroupId, resourceId);
-        }
-        
-        public System.Guid GetResourceId(string resourceName)
-        {
-            return base.Channel.GetResourceId(resourceName);
-        }
-        
-        public System.Collections.Generic.List<HeuristicLab.Clients.Hive.Job> GetJobsByResourceId(System.Guid resourceId)
-        {
-            return base.Channel.GetJobsByResourceId(resourceId);
-        }
-        
-        public void TriggerLifecycle(bool force)
-        {
-            base.Channel.TriggerLifecycle(force);
-        }
-        
-        public System.Guid AddDowntime(HeuristicLab.Clients.Hive.Downtime downtime)
-        {
-            return base.Channel.AddDowntime(downtime);
-        }
-        
-        public void DeleteDowntime(System.Guid downtimeId)
-        {
-            base.Channel.DeleteDowntime(downtimeId);
-        }
-        
-        public void UpdateDowntime(HeuristicLab.Clients.Hive.Downtime downtime)
-        {
-            base.Channel.UpdateDowntime(downtime);
-        }
-        
-        public System.Collections.Generic.List<HeuristicLab.Clients.Hive.Downtime> GetDowntimesForResource(System.Guid resourceId)
-        {
-            return base.Channel.GetDowntimesForResource(resourceId);
-        }
-        
-        public string GetUsernameByUserId(System.Guid userId)
-        {
-            return base.Channel.GetUsernameByUserId(userId);
-        }
-        
-        public System.Guid GetUserIdByUsername(string username)
-        {
-            return base.Channel.GetUserIdByUsername(username);
-        }
-        
-        public System.Guid AddJob(HeuristicLab.Clients.Hive.Job job, HeuristicLab.Clients.Hive.JobData jobData, System.Collections.Generic.List<System.Guid> resourceIds)
-        {
-            return base.Channel.AddJob(job, jobData, resourceIds);
-        }
-        
-        public System.Guid AddChildJob(System.Guid parentJobId, HeuristicLab.Clients.Hive.Job job, HeuristicLab.Clients.Hive.JobData jobData)
-        {
-            return base.Channel.AddChildJob(parentJobId, job, jobData);
-        }
-        
-        public HeuristicLab.Clients.Hive.Job GetJob(System.Guid jobId)
-        {
-            return base.Channel.GetJob(jobId);
-        }
-        
-        public System.Collections.Generic.List<HeuristicLab.Clients.Hive.Job> GetJobs()
-        {
-            return base.Channel.GetJobs();
-        }
-        
-        public System.Collections.Generic.List<HeuristicLab.Clients.Hive.LightweightJob> GetLightweightJobs(System.Collections.Generic.List<System.Guid> jobIds)
-        {
-            return base.Channel.GetLightweightJobs(jobIds);
-        }
-        
-        public System.Collections.Generic.List<HeuristicLab.Clients.Hive.LightweightJob> GetLightweightChildJobs(System.Nullable<System.Guid> parentJobId, bool recursive, bool includeParent)
-        {
-            return base.Channel.GetLightweightChildJobs(parentJobId, recursive, includeParent);
-        }
-        
-        public System.Collections.Generic.List<HeuristicLab.Clients.Hive.LightweightJob> GetLightweightExperimentJobs(System.Guid experimentId)
-        {
-            return base.Channel.GetLightweightExperimentJobs(experimentId);
-        }
-        
-        public HeuristicLab.Clients.Hive.JobData GetJobData(System.Guid jobId)
-        {
-            return base.Channel.GetJobData(jobId);
-        }
-        
-        public void UpdateJob(HeuristicLab.Clients.Hive.Job jobDto)
-        {
-            base.Channel.UpdateJob(jobDto);
-        }
-        
-        public void UpdateJobData(HeuristicLab.Clients.Hive.Job jobDto, HeuristicLab.Clients.Hive.JobData jobDataDto)
-        {
-            base.Channel.UpdateJobData(jobDto, jobDataDto);
-        }
-        
-        public void DeleteJob(System.Guid jobId)
-        {
-            base.Channel.DeleteJob(jobId);
-        }
-        
-        public void DeleteChildJobs(System.Guid parentJobId)
-        {
-            base.Channel.DeleteChildJobs(parentJobId);
-        }
-        
-        public HeuristicLab.Clients.Hive.Job UpdateJobState(System.Guid jobId, HeuristicLab.Clients.Hive.JobState jobState, System.Nullable<System.Guid> slaveId, System.Nullable<System.Guid> userId, string exception)
-        {
-            return base.Channel.UpdateJobState(jobId, jobState, slaveId, userId, exception);
-        }
-        
-        public void StopJob(System.Guid jobId)
-        {
-            base.Channel.StopJob(jobId);
-        }
-        
-        public void PauseJob(System.Guid jobId)
-        {
-            base.Channel.PauseJob(jobId);
-        }
-        
-        public void RestartJob(System.Guid jobId)
-        {
-            base.Channel.RestartJob(jobId);
-        }
-        
-        public HeuristicLab.Clients.Hive.HiveExperiment GetHiveExperiment(System.Guid id)
-        {
-            return base.Channel.GetHiveExperiment(id);
-        }
-        
-        public System.Collections.Generic.List<HeuristicLab.Clients.Hive.HiveExperiment> GetHiveExperiments()
-        {
-            return base.Channel.GetHiveExperiments();
-        }
-        
-        public System.Collections.Generic.List<HeuristicLab.Clients.Hive.HiveExperiment> GetAllHiveExperiments()
-        {
-            return base.Channel.GetAllHiveExperiments();
-        }
-        
-        public System.Guid AddHiveExperiment(HeuristicLab.Clients.Hive.HiveExperiment hiveExperimentDto)
-        {
-            return base.Channel.AddHiveExperiment(hiveExperimentDto);
-        }
-        
-        public void UpdateHiveExperiment(HeuristicLab.Clients.Hive.HiveExperiment hiveExperimentDto)
-        {
-            base.Channel.UpdateHiveExperiment(hiveExperimentDto);
-        }
-        
-        public void DeleteHiveExperiment(System.Guid hiveExperimentId)
-        {
-            base.Channel.DeleteHiveExperiment(hiveExperimentId);
-        }
-        
-        public void GrantPermission(System.Guid hiveExperimentId, System.Guid grantedUserId, HeuristicLab.Clients.Hive.Permission permission)
-        {
-            base.Channel.GrantPermission(hiveExperimentId, grantedUserId, permission);
-        }
-        
-        public void RevokePermission(System.Guid hiveExperimentId, System.Guid grantedUserId)
-        {
-            base.Channel.RevokePermission(hiveExperimentId, grantedUserId);
-        }
-        
-        public System.Collections.Generic.List<HeuristicLab.Clients.Hive.HiveExperimentPermission> GetHiveExperimentPermissions(System.Guid hiveExperimentId)
-        {
-            return base.Channel.GetHiveExperimentPermissions(hiveExperimentId);
-        }
-        
-        public bool IsAllowedPrivileged()
-        {
-            return base.Channel.IsAllowedPrivileged();
-        }
-        
-        public void Hello(HeuristicLab.Clients.Hive.Slave slave)
-        {
-            base.Channel.Hello(slave);
-        }
-        
-        public void GoodBye(System.Guid slaveId)
-        {
-            base.Channel.GoodBye(slaveId);
-        }
-        
-        public System.Collections.Generic.List<HeuristicLab.Clients.Hive.MessageContainer> Heartbeat(HeuristicLab.Clients.Hive.Heartbeat heartbeat1)
-        {
-            return base.Channel.Heartbeat(heartbeat1);
-        }
-        
-        public HeuristicLab.Clients.Hive.Plugin GetPlugin(System.Guid pluginId)
-        {
-            return base.Channel.GetPlugin(pluginId);
-        }
-        
-        public HeuristicLab.Clients.Hive.Plugin GetPluginByHash(byte[] hash)
-        {
-            return base.Channel.GetPluginByHash(hash);
-        }
-        
-        public System.Guid AddPlugin(HeuristicLab.Clients.Hive.Plugin plugin, System.Collections.Generic.List<HeuristicLab.Clients.Hive.PluginData> pluginData)
-        {
-            return base.Channel.AddPlugin(plugin, pluginData);
-        }
-        
-        public System.Collections.Generic.List<HeuristicLab.Clients.Hive.Plugin> GetPlugins()
-        {
-            return base.Channel.GetPlugins();
-        }
-        
-        public System.Collections.Generic.List<HeuristicLab.Clients.Hive.PluginData> GetPluginDatas(System.Collections.Generic.List<System.Guid> pluginIds)
-        {
-            return base.Channel.GetPluginDatas(pluginIds);
-        }
-        
-        public void DeletePlugin(System.Guid pluginId)
-        {
-            base.Channel.DeletePlugin(pluginId);
-        }
-        
-        public System.Guid AddSlave(HeuristicLab.Clients.Hive.Slave slave)
-        {
-            return base.Channel.AddSlave(slave);
-        }
-        
-        public System.Guid AddSlaveGroup(HeuristicLab.Clients.Hive.SlaveGroup slaveGroup)
-        {
-            return base.Channel.AddSlaveGroup(slaveGroup);
-        }
-        
-        public HeuristicLab.Clients.Hive.Slave GetSlave(System.Guid slaveId)
-        {
-            return base.Channel.GetSlave(slaveId);
-        }
-        
-        public HeuristicLab.Clients.Hive.SlaveGroup GetSlaveGroup(System.Guid slaveGroupId)
-        {
-            return base.Channel.GetSlaveGroup(slaveGroupId);
-        }
-        
-        public System.Collections.Generic.List<HeuristicLab.Clients.Hive.Slave> GetSlaves()
-        {
-            return base.Channel.GetSlaves();
-        }
-        
-        public System.Collections.Generic.List<HeuristicLab.Clients.Hive.SlaveGroup> GetSlaveGroups()
-        {
-            return base.Channel.GetSlaveGroups();
-        }
-        
-        public void UpdateSlave(HeuristicLab.Clients.Hive.Slave slave)
-        {
-            base.Channel.UpdateSlave(slave);
-        }
-    }
+    [System.Runtime.Serialization.DataContractAttribute(Name = "MessageContainer.MessageType", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Hive")]
+    public enum MessageType : int {
+
+      [System.Runtime.Serialization.EnumMemberAttribute()]
+      CalculateJob = 0,
+
+      [System.Runtime.Serialization.EnumMemberAttribute()]
+      StopJob = 1,
+
+      [System.Runtime.Serialization.EnumMemberAttribute()]
+      StopAll = 2,
+
+      [System.Runtime.Serialization.EnumMemberAttribute()]
+      AbortJob = 3,
+
+      [System.Runtime.Serialization.EnumMemberAttribute()]
+      AbortAll = 4,
+
+      [System.Runtime.Serialization.EnumMemberAttribute()]
+      PauseJob = 5,
+
+      [System.Runtime.Serialization.EnumMemberAttribute()]
+      PauseAll = 6,
+
+      [System.Runtime.Serialization.EnumMemberAttribute()]
+      Restart = 7,
+
+      [System.Runtime.Serialization.EnumMemberAttribute()]
+      Sleep = 8,
+
+      [System.Runtime.Serialization.EnumMemberAttribute()]
+      ShutdownSlave = 9,
+
+      [System.Runtime.Serialization.EnumMemberAttribute()]
+      SayHello = 10,
+    }
+  }
+
+  [System.Diagnostics.DebuggerStepThroughAttribute()]
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "PluginAlreadyExistsFault", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Hive")]
+  [System.SerializableAttribute()]
+  public partial class PluginAlreadyExistsFault : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+
+    [System.NonSerializedAttribute()]
+    private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private System.Guid IdField;
+
+    public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+      get {
+        return this.extensionDataField;
+      }
+      set {
+        this.extensionDataField = value;
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public System.Guid Id {
+      get {
+        return this.IdField;
+      }
+      set {
+        if ((this.IdField.Equals(value) != true)) {
+          this.IdField = value;
+          this.RaisePropertyChanged("Id");
+        }
+      }
+    }
+
+    public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+
+    protected void RaisePropertyChanged(string propertyName) {
+      System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
+      if ((propertyChanged != null)) {
+        propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+      }
+    }
+  }
+
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+  [System.ServiceModel.ServiceContractAttribute(ConfigurationName = "HeuristicLab.Clients.Hive.IHiveService")]
+  public interface IHiveService {
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/UpdateSlaveGroup", ReplyAction = "http://tempuri.org/IHiveService/UpdateSlaveGroupResponse")]
+    void UpdateSlaveGroup(HeuristicLab.Clients.Hive.SlaveGroup slaveGroup);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/DeleteSlave", ReplyAction = "http://tempuri.org/IHiveService/DeleteSlaveResponse")]
+    void DeleteSlave(System.Guid slaveId);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/DeleteSlaveGroup", ReplyAction = "http://tempuri.org/IHiveService/DeleteSlaveGroupResponse")]
+    void DeleteSlaveGroup(System.Guid slaveGroupId);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/AddResourceToGroup", ReplyAction = "http://tempuri.org/IHiveService/AddResourceToGroupResponse")]
+    void AddResourceToGroup(System.Guid slaveGroupId, System.Guid resourceId);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/RemoveResourceFromGroup", ReplyAction = "http://tempuri.org/IHiveService/RemoveResourceFromGroupResponse")]
+    void RemoveResourceFromGroup(System.Guid slaveGroupId, System.Guid resourceId);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/GetResourceId", ReplyAction = "http://tempuri.org/IHiveService/GetResourceIdResponse")]
+    System.Guid GetResourceId(string resourceName);
+
+    [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/TriggerEventManager", ReplyAction = "http://tempuri.org/IHiveService/TriggerEventManagerResponse")]
+    void TriggerEventManager(bool force);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/AddDowntime", ReplyAction = "http://tempuri.org/IHiveService/AddDowntimeResponse")]
+    System.Guid AddDowntime(HeuristicLab.Clients.Hive.Downtime downtime);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/DeleteDowntime", ReplyAction = "http://tempuri.org/IHiveService/DeleteDowntimeResponse")]
+    void DeleteDowntime(System.Guid downtimeId);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/UpdateDowntime", ReplyAction = "http://tempuri.org/IHiveService/UpdateDowntimeResponse")]
+    void UpdateDowntime(HeuristicLab.Clients.Hive.Downtime downtime);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/GetDowntimesForResource", ReplyAction = "http://tempuri.org/IHiveService/GetDowntimesForResourceResponse")]
+    System.Collections.Generic.List<HeuristicLab.Clients.Hive.Downtime> GetDowntimesForResource(System.Guid resourceId);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/GetUsernameByUserId", ReplyAction = "http://tempuri.org/IHiveService/GetUsernameByUserIdResponse")]
+    string GetUsernameByUserId(System.Guid userId);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/GetUserIdByUsername", ReplyAction = "http://tempuri.org/IHiveService/GetUserIdByUsernameResponse")]
+    System.Guid GetUserIdByUsername(string username);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/AddJob", ReplyAction = "http://tempuri.org/IHiveService/AddJobResponse")]
+    System.Guid AddJob(HeuristicLab.Clients.Hive.Job job, HeuristicLab.Clients.Hive.JobData jobData, System.Collections.Generic.List<System.Guid> resourceIds);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/AddChildJob", ReplyAction = "http://tempuri.org/IHiveService/AddChildJobResponse")]
+    System.Guid AddChildJob(System.Guid parentJobId, HeuristicLab.Clients.Hive.Job job, HeuristicLab.Clients.Hive.JobData jobData);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/GetJob", ReplyAction = "http://tempuri.org/IHiveService/GetJobResponse")]
+    HeuristicLab.Clients.Hive.Job GetJob(System.Guid jobId);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/GetJobs", ReplyAction = "http://tempuri.org/IHiveService/GetJobsResponse")]
+    System.Collections.Generic.List<HeuristicLab.Clients.Hive.Job> GetJobs();
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/GetLightweightJobs", ReplyAction = "http://tempuri.org/IHiveService/GetLightweightJobsResponse")]
+    System.Collections.Generic.List<HeuristicLab.Clients.Hive.LightweightJob> GetLightweightJobs(System.Collections.Generic.List<System.Guid> jobIds);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/GetLightweightChildJobs", ReplyAction = "http://tempuri.org/IHiveService/GetLightweightChildJobsResponse")]
+    System.Collections.Generic.List<HeuristicLab.Clients.Hive.LightweightJob> GetLightweightChildJobs(System.Nullable<System.Guid> parentJobId, bool recursive, bool includeParent);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/GetLightweightExperimentJobs", ReplyAction = "http://tempuri.org/IHiveService/GetLightweightExperimentJobsResponse")]
+    System.Collections.Generic.List<HeuristicLab.Clients.Hive.LightweightJob> GetLightweightExperimentJobs(System.Guid experimentId);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/GetJobData", ReplyAction = "http://tempuri.org/IHiveService/GetJobDataResponse")]
+    HeuristicLab.Clients.Hive.JobData GetJobData(System.Guid jobId);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/UpdateJob", ReplyAction = "http://tempuri.org/IHiveService/UpdateJobResponse")]
+    void UpdateJob(HeuristicLab.Clients.Hive.Job jobDto);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/UpdateJobData", ReplyAction = "http://tempuri.org/IHiveService/UpdateJobDataResponse")]
+    void UpdateJobData(HeuristicLab.Clients.Hive.Job jobDto, HeuristicLab.Clients.Hive.JobData jobDataDto);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/DeleteJob", ReplyAction = "http://tempuri.org/IHiveService/DeleteJobResponse")]
+    void DeleteJob(System.Guid jobId);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/DeleteChildJobs", ReplyAction = "http://tempuri.org/IHiveService/DeleteChildJobsResponse")]
+    void DeleteChildJobs(System.Guid parentJobId);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/UpdateJobState", ReplyAction = "http://tempuri.org/IHiveService/UpdateJobStateResponse")]
+    HeuristicLab.Clients.Hive.Job UpdateJobState(System.Guid jobId, HeuristicLab.Clients.Hive.JobState jobState, System.Nullable<System.Guid> slaveId, System.Nullable<System.Guid> userId, string exception);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/StopJob", ReplyAction = "http://tempuri.org/IHiveService/StopJobResponse")]
+    void StopJob(System.Guid jobId);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/PauseJob", ReplyAction = "http://tempuri.org/IHiveService/PauseJobResponse")]
+    void PauseJob(System.Guid jobId);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/RestartJob", ReplyAction = "http://tempuri.org/IHiveService/RestartJobResponse")]
+    void RestartJob(System.Guid jobId);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/GetHiveExperiment", ReplyAction = "http://tempuri.org/IHiveService/GetHiveExperimentResponse")]
+    HeuristicLab.Clients.Hive.HiveExperiment GetHiveExperiment(System.Guid id);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/GetHiveExperiments", ReplyAction = "http://tempuri.org/IHiveService/GetHiveExperimentsResponse")]
+    System.Collections.Generic.List<HeuristicLab.Clients.Hive.HiveExperiment> GetHiveExperiments();
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/GetAllHiveExperiments", ReplyAction = "http://tempuri.org/IHiveService/GetAllHiveExperimentsResponse")]
+    System.Collections.Generic.List<HeuristicLab.Clients.Hive.HiveExperiment> GetAllHiveExperiments();
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/AddHiveExperiment", ReplyAction = "http://tempuri.org/IHiveService/AddHiveExperimentResponse")]
+    System.Guid AddHiveExperiment(HeuristicLab.Clients.Hive.HiveExperiment hiveExperimentDto);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/UpdateHiveExperiment", ReplyAction = "http://tempuri.org/IHiveService/UpdateHiveExperimentResponse")]
+    void UpdateHiveExperiment(HeuristicLab.Clients.Hive.HiveExperiment hiveExperimentDto);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/DeleteHiveExperiment", ReplyAction = "http://tempuri.org/IHiveService/DeleteHiveExperimentResponse")]
+    void DeleteHiveExperiment(System.Guid hiveExperimentId);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/GrantPermission", ReplyAction = "http://tempuri.org/IHiveService/GrantPermissionResponse")]
+    void GrantPermission(System.Guid hiveExperimentId, System.Guid grantedUserId, HeuristicLab.Clients.Hive.Permission permission);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/RevokePermission", ReplyAction = "http://tempuri.org/IHiveService/RevokePermissionResponse")]
+    void RevokePermission(System.Guid hiveExperimentId, System.Guid grantedUserId);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/GetHiveExperimentPermissions", ReplyAction = "http://tempuri.org/IHiveService/GetHiveExperimentPermissionsResponse")]
+    System.Collections.Generic.List<HeuristicLab.Clients.Hive.HiveExperimentPermission> GetHiveExperimentPermissions(System.Guid hiveExperimentId);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/IsAllowedPrivileged", ReplyAction = "http://tempuri.org/IHiveService/IsAllowedPrivilegedResponse")]
+    bool IsAllowedPrivileged();
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/Hello", ReplyAction = "http://tempuri.org/IHiveService/HelloResponse")]
+    void Hello(HeuristicLab.Clients.Hive.Slave slave);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/GoodBye", ReplyAction = "http://tempuri.org/IHiveService/GoodByeResponse")]
+    void GoodBye(System.Guid slaveId);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/Heartbeat", ReplyAction = "http://tempuri.org/IHiveService/HeartbeatResponse")]
+    System.Collections.Generic.List<HeuristicLab.Clients.Hive.MessageContainer> Heartbeat([System.ServiceModel.MessageParameterAttribute(Name = "heartbeat")] HeuristicLab.Clients.Hive.Heartbeat heartbeat1);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/GetPlugin", ReplyAction = "http://tempuri.org/IHiveService/GetPluginResponse")]
+    HeuristicLab.Clients.Hive.Plugin GetPlugin(System.Guid pluginId);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/GetPluginByHash", ReplyAction = "http://tempuri.org/IHiveService/GetPluginByHashResponse")]
+    HeuristicLab.Clients.Hive.Plugin GetPluginByHash(byte[] hash);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/AddPlugin", ReplyAction = "http://tempuri.org/IHiveService/AddPluginResponse")]
+    [System.ServiceModel.FaultContractAttribute(typeof(HeuristicLab.Clients.Hive.PluginAlreadyExistsFault), Action = "http://tempuri.org/IHiveService/AddPluginPluginAlreadyExistsFaultFault", Name = "PluginAlreadyExistsFault", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Hive")]
+    System.Guid AddPlugin(HeuristicLab.Clients.Hive.Plugin plugin, System.Collections.Generic.List<HeuristicLab.Clients.Hive.PluginData> pluginData);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/GetPlugins", ReplyAction = "http://tempuri.org/IHiveService/GetPluginsResponse")]
+    System.Collections.Generic.List<HeuristicLab.Clients.Hive.Plugin> GetPlugins();
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/GetPluginDatas", ReplyAction = "http://tempuri.org/IHiveService/GetPluginDatasResponse")]
+    System.Collections.Generic.List<HeuristicLab.Clients.Hive.PluginData> GetPluginDatas(System.Collections.Generic.List<System.Guid> pluginIds);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/DeletePlugin", ReplyAction = "http://tempuri.org/IHiveService/DeletePluginResponse")]
+    void DeletePlugin(System.Guid pluginId);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/AddSlave", ReplyAction = "http://tempuri.org/IHiveService/AddSlaveResponse")]
+    System.Guid AddSlave(HeuristicLab.Clients.Hive.Slave slave);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/AddSlaveGroup", ReplyAction = "http://tempuri.org/IHiveService/AddSlaveGroupResponse")]
+    System.Guid AddSlaveGroup(HeuristicLab.Clients.Hive.SlaveGroup slaveGroup);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/GetSlave", ReplyAction = "http://tempuri.org/IHiveService/GetSlaveResponse")]
+    HeuristicLab.Clients.Hive.Slave GetSlave(System.Guid slaveId);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/GetSlaveGroup", ReplyAction = "http://tempuri.org/IHiveService/GetSlaveGroupResponse")]
+    HeuristicLab.Clients.Hive.SlaveGroup GetSlaveGroup(System.Guid slaveGroupId);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/GetSlaves", ReplyAction = "http://tempuri.org/IHiveService/GetSlavesResponse")]
+    System.Collections.Generic.List<HeuristicLab.Clients.Hive.Slave> GetSlaves();
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/GetSlaveGroups", ReplyAction = "http://tempuri.org/IHiveService/GetSlaveGroupsResponse")]
+    System.Collections.Generic.List<HeuristicLab.Clients.Hive.SlaveGroup> GetSlaveGroups();
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/UpdateSlave", ReplyAction = "http://tempuri.org/IHiveService/UpdateSlaveResponse")]
+    void UpdateSlave(HeuristicLab.Clients.Hive.Slave slave);
+  }
+
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+  public interface IHiveServiceChannel : HeuristicLab.Clients.Hive.IHiveService, System.ServiceModel.IClientChannel {
+  }
+
+  [System.Diagnostics.DebuggerStepThroughAttribute()]
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+  public partial class HiveServiceClient : System.ServiceModel.ClientBase<HeuristicLab.Clients.Hive.IHiveService>, HeuristicLab.Clients.Hive.IHiveService {
+
+    public HiveServiceClient() {
+    }
+
+    public HiveServiceClient(string endpointConfigurationName) :
+      base(endpointConfigurationName) {
+    }
+
+    public HiveServiceClient(string endpointConfigurationName, string remoteAddress) :
+      base(endpointConfigurationName, remoteAddress) {
+    }
+
+    public HiveServiceClient(string endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) :
+      base(endpointConfigurationName, remoteAddress) {
+    }
+
+    public HiveServiceClient(System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress) :
+      base(binding, remoteAddress) {
+    }
+
+    public void UpdateSlaveGroup(HeuristicLab.Clients.Hive.SlaveGroup slaveGroup) {
+      base.Channel.UpdateSlaveGroup(slaveGroup);
+    }
+
+    public void DeleteSlave(System.Guid slaveId) {
+      base.Channel.DeleteSlave(slaveId);
+    }
+
+    public void DeleteSlaveGroup(System.Guid slaveGroupId) {
+      base.Channel.DeleteSlaveGroup(slaveGroupId);
+    }
+
+    public void AddResourceToGroup(System.Guid slaveGroupId, System.Guid resourceId) {
+      base.Channel.AddResourceToGroup(slaveGroupId, resourceId);
+    }
+
+    public void RemoveResourceFromGroup(System.Guid slaveGroupId, System.Guid resourceId) {
+      base.Channel.RemoveResourceFromGroup(slaveGroupId, resourceId);
+    }
+
+    public System.Guid GetResourceId(string resourceName) {
+      return base.Channel.GetResourceId(resourceName);
+    }
+
+    public System.Collections.Generic.List<HeuristicLab.Clients.Hive.Job> GetJobsByResourceId(System.Guid resourceId) {
+      return base.Channel.GetJobsByResourceId(resourceId);
+    }
+
+    public void TriggerEventManager(bool force) {
+      base.Channel.TriggerEventManager(force);
+    }
+
+    public System.Guid AddDowntime(HeuristicLab.Clients.Hive.Downtime downtime) {
+      return base.Channel.AddDowntime(downtime);
+    }
+
+    public void DeleteDowntime(System.Guid downtimeId) {
+      base.Channel.DeleteDowntime(downtimeId);
+    }
+
+    public void UpdateDowntime(HeuristicLab.Clients.Hive.Downtime downtime) {
+      base.Channel.UpdateDowntime(downtime);
+    }
+
+    public System.Collections.Generic.List<HeuristicLab.Clients.Hive.Downtime> GetDowntimesForResource(System.Guid resourceId) {
+      return base.Channel.GetDowntimesForResource(resourceId);
+    }
+
+    public string GetUsernameByUserId(System.Guid userId) {
+      return base.Channel.GetUsernameByUserId(userId);
+    }
+
+    public System.Guid GetUserIdByUsername(string username) {
+      return base.Channel.GetUserIdByUsername(username);
+    }
+
+    public System.Guid AddJob(HeuristicLab.Clients.Hive.Job job, HeuristicLab.Clients.Hive.JobData jobData, System.Collections.Generic.List<System.Guid> resourceIds) {
+      return base.Channel.AddJob(job, jobData, resourceIds);
+    }
+
+    public System.Guid AddChildJob(System.Guid parentJobId, HeuristicLab.Clients.Hive.Job job, HeuristicLab.Clients.Hive.JobData jobData) {
+      return base.Channel.AddChildJob(parentJobId, job, jobData);
+    }
+
+    public HeuristicLab.Clients.Hive.Job GetJob(System.Guid jobId) {
+      return base.Channel.GetJob(jobId);
+    }
+
+    public System.Collections.Generic.List<HeuristicLab.Clients.Hive.Job> GetJobs() {
+      return base.Channel.GetJobs();
+    }
+
+    public System.Collections.Generic.List<HeuristicLab.Clients.Hive.LightweightJob> GetLightweightJobs(System.Collections.Generic.List<System.Guid> jobIds) {
+      return base.Channel.GetLightweightJobs(jobIds);
+    }
+
+    public System.Collections.Generic.List<HeuristicLab.Clients.Hive.LightweightJob> GetLightweightChildJobs(System.Nullable<System.Guid> parentJobId, bool recursive, bool includeParent) {
+      return base.Channel.GetLightweightChildJobs(parentJobId, recursive, includeParent);
+    }
+
+    public System.Collections.Generic.List<HeuristicLab.Clients.Hive.LightweightJob> GetLightweightExperimentJobs(System.Guid experimentId) {
+      return base.Channel.GetLightweightExperimentJobs(experimentId);
+    }
+
+    public HeuristicLab.Clients.Hive.JobData GetJobData(System.Guid jobId) {
+      return base.Channel.GetJobData(jobId);
+    }
+
+    public void UpdateJob(HeuristicLab.Clients.Hive.Job jobDto) {
+      base.Channel.UpdateJob(jobDto);
+    }
+
+    public void UpdateJobData(HeuristicLab.Clients.Hive.Job jobDto, HeuristicLab.Clients.Hive.JobData jobDataDto) {
+      base.Channel.UpdateJobData(jobDto, jobDataDto);
+    }
+
+    public void DeleteJob(System.Guid jobId) {
+      base.Channel.DeleteJob(jobId);
+    }
+
+    public void DeleteChildJobs(System.Guid parentJobId) {
+      base.Channel.DeleteChildJobs(parentJobId);
+    }
+
+    public HeuristicLab.Clients.Hive.Job UpdateJobState(System.Guid jobId, HeuristicLab.Clients.Hive.JobState jobState, System.Nullable<System.Guid> slaveId, System.Nullable<System.Guid> userId, string exception) {
+      return base.Channel.UpdateJobState(jobId, jobState, slaveId, userId, exception);
+    }
+
+    public void StopJob(System.Guid jobId) {
+      base.Channel.StopJob(jobId);
+    }
+
+    public void PauseJob(System.Guid jobId) {
+      base.Channel.PauseJob(jobId);
+    }
+
+    public void RestartJob(System.Guid jobId) {
+      base.Channel.RestartJob(jobId);
+    }
+
+    public HeuristicLab.Clients.Hive.HiveExperiment GetHiveExperiment(System.Guid id) {
+      return base.Channel.GetHiveExperiment(id);
+    }
+
+    public System.Collections.Generic.List<HeuristicLab.Clients.Hive.HiveExperiment> GetHiveExperiments() {
+      return base.Channel.GetHiveExperiments();
+    }
+
+    public System.Collections.Generic.List<HeuristicLab.Clients.Hive.HiveExperiment> GetAllHiveExperiments() {
+      return base.Channel.GetAllHiveExperiments();
+    }
+
+    public System.Guid AddHiveExperiment(HeuristicLab.Clients.Hive.HiveExperiment hiveExperimentDto) {
+      return base.Channel.AddHiveExperiment(hiveExperimentDto);
+    }
+
+    public void UpdateHiveExperiment(HeuristicLab.Clients.Hive.HiveExperiment hiveExperimentDto) {
+      base.Channel.UpdateHiveExperiment(hiveExperimentDto);
+    }
+
+    public void DeleteHiveExperiment(System.Guid hiveExperimentId) {
+      base.Channel.DeleteHiveExperiment(hiveExperimentId);
+    }
+
+    public void GrantPermission(System.Guid hiveExperimentId, System.Guid grantedUserId, HeuristicLab.Clients.Hive.Permission permission) {
+      base.Channel.GrantPermission(hiveExperimentId, grantedUserId, permission);
+    }
+
+    public void RevokePermission(System.Guid hiveExperimentId, System.Guid grantedUserId) {
+      base.Channel.RevokePermission(hiveExperimentId, grantedUserId);
+    }
+
+    public System.Collections.Generic.List<HeuristicLab.Clients.Hive.HiveExperimentPermission> GetHiveExperimentPermissions(System.Guid hiveExperimentId) {
+      return base.Channel.GetHiveExperimentPermissions(hiveExperimentId);
+    }
+
+    public bool IsAllowedPrivileged() {
+      return base.Channel.IsAllowedPrivileged();
+    }
+
+    public void Hello(HeuristicLab.Clients.Hive.Slave slave) {
+      base.Channel.Hello(slave);
+    }
+
+    public void GoodBye(System.Guid slaveId) {
+      base.Channel.GoodBye(slaveId);
+    }
+
+    public System.Collections.Generic.List<HeuristicLab.Clients.Hive.MessageContainer> Heartbeat(HeuristicLab.Clients.Hive.Heartbeat heartbeat1) {
+      return base.Channel.Heartbeat(heartbeat1);
+    }
+
+    public HeuristicLab.Clients.Hive.Plugin GetPlugin(System.Guid pluginId) {
+      return base.Channel.GetPlugin(pluginId);
+    }
+
+    public HeuristicLab.Clients.Hive.Plugin GetPluginByHash(byte[] hash) {
+      return base.Channel.GetPluginByHash(hash);
+    }
+
+    public System.Guid AddPlugin(HeuristicLab.Clients.Hive.Plugin plugin, System.Collections.Generic.List<HeuristicLab.Clients.Hive.PluginData> pluginData) {
+      return base.Channel.AddPlugin(plugin, pluginData);
+    }
+
+    public System.Collections.Generic.List<HeuristicLab.Clients.Hive.Plugin> GetPlugins() {
+      return base.Channel.GetPlugins();
+    }
+
+    public System.Collections.Generic.List<HeuristicLab.Clients.Hive.PluginData> GetPluginDatas(System.Collections.Generic.List<System.Guid> pluginIds) {
+      return base.Channel.GetPluginDatas(pluginIds);
+    }
+
+    public void DeletePlugin(System.Guid pluginId) {
+      base.Channel.DeletePlugin(pluginId);
+    }
+
+    public System.Guid AddSlave(HeuristicLab.Clients.Hive.Slave slave) {
+      return base.Channel.AddSlave(slave);
+    }
+
+    public System.Guid AddSlaveGroup(HeuristicLab.Clients.Hive.SlaveGroup slaveGroup) {
+      return base.Channel.AddSlaveGroup(slaveGroup);
+    }
+
+    public HeuristicLab.Clients.Hive.Slave GetSlave(System.Guid slaveId) {
+      return base.Channel.GetSlave(slaveId);
+    }
+
+    public HeuristicLab.Clients.Hive.SlaveGroup GetSlaveGroup(System.Guid slaveGroupId) {
+      return base.Channel.GetSlaveGroup(slaveGroupId);
+    }
+
+    public System.Collections.Generic.List<HeuristicLab.Clients.Hive.Slave> GetSlaves() {
+      return base.Channel.GetSlaves();
+    }
+
+    public System.Collections.Generic.List<HeuristicLab.Clients.Hive.SlaveGroup> GetSlaveGroups() {
+      return base.Channel.GetSlaveGroups();
+    }
+
+    public void UpdateSlave(HeuristicLab.Clients.Hive.Slave slave) {
+      base.Channel.UpdateSlave(slave);
+    }
+  }
 }
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Hive 3.4.sln
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Hive 3.4.sln	(revision 6716)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Hive 3.4.sln	(revision 6717)
@@ -5,6 +5,4 @@
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Clients.Hive.Slave-3.3", "HeuristicLab.Clients.Hive.Slave\3.3\HeuristicLab.Clients.Hive.Slave-3.3.csproj", "{989FE92B-484E-41EE-87E2-6A24AF0381D8}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Services.Hive.Common-3.3", "HeuristicLab.Services.Hive.Common\3.3\HeuristicLab.Services.Hive.Common-3.3.csproj", "{14424A16-48D4-445E-80BF-DDF617548BBB}"
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Services.Hive.DataAccess-3.3", "HeuristicLab.Services.Hive.DataAccess\3.3\HeuristicLab.Services.Hive.DataAccess-3.3.csproj", "{EC2C8109-6E1E-4C88-9A2B-908CFF2EF4AC}"
@@ -34,5 +32,5 @@
 	ProjectSection(WebsiteProperties) = preProject
 		TargetFrameworkMoniker = ".NETFramework,Version%3Dv4.0"
-		ProjectReferences = "{CF9DA321-AC1B-4FD3-9EC3-67BC6B861BDE}|HeuristicLab.Services.Hive-3.3.dll;{14424A16-48D4-445E-80BF-DDF617548BBB}|HeuristicLab.Services.Hive.Common-3.3.dll;{EC2C8109-6E1E-4C88-9A2B-908CFF2EF4AC}|HeuristicLab.Services.Hive.DataAccess-3.3.dll;{F98A1740-9AC9-4D36-A582-6A2D0D06978D}|HeuristicLab.Hive-3.3.dll;"
+		ProjectReferences = "{CF9DA321-AC1B-4FD3-9EC3-67BC6B861BDE}|HeuristicLab.Services.Hive-3.3.dll;{EC2C8109-6E1E-4C88-9A2B-908CFF2EF4AC}|HeuristicLab.Services.Hive.DataAccess-3.3.dll;{F98A1740-9AC9-4D36-A582-6A2D0D06978D}|HeuristicLab.Hive-3.3.dll;"
 		Debug.AspNetCompiler.VirtualPath = "/Hive-3.4"
 		Debug.AspNetCompiler.PhysicalPath = "HeuristicLab.Services.Hive.Web\Hive-3.4\"
@@ -89,6 +87,4 @@
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Clients.Hive.Administrator-3.3", "HeuristicLab.Clients.Hive.Administrator\3.3\HeuristicLab.Clients.Hive.Administrator-3.3.csproj", "{5211F1AD-BBA2-4C62-8749-DCA0A25CF5D8}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Services.Hive.DbCreator-3.3", "HeuristicLab.Services.Hive.DbCreator\3.3\HeuristicLab.Services.Hive.DbCreator-3.3.csproj", "{691FC65E-CA1A-4477-B66F-EB49D21B7393}"
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Clients.Hive.Slave.TrayIcon-3.3", "HeuristicLab.Clients.Hive.Slave.TrayIcon\3.3\HeuristicLab.Clients.Hive.Slave.TrayIcon-3.3.csproj", "{7C4B1DE4-FC9A-4448-BCF8-3CB3FA3CB8FA}"
@@ -139,17 +135,4 @@
 		{989FE92B-484E-41EE-87E2-6A24AF0381D8}.Release|x64.ActiveCfg = Release|x86
 		{989FE92B-484E-41EE-87E2-6A24AF0381D8}.Release|x86.ActiveCfg = Release|Any CPU
-		{14424A16-48D4-445E-80BF-DDF617548BBB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{14424A16-48D4-445E-80BF-DDF617548BBB}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{14424A16-48D4-445E-80BF-DDF617548BBB}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
-		{14424A16-48D4-445E-80BF-DDF617548BBB}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
-		{14424A16-48D4-445E-80BF-DDF617548BBB}.Debug|x64.ActiveCfg = Debug|x86
-		{14424A16-48D4-445E-80BF-DDF617548BBB}.Debug|x86.ActiveCfg = Debug|x86
-		{14424A16-48D4-445E-80BF-DDF617548BBB}.Debug|x86.Build.0 = Debug|x86
-		{14424A16-48D4-445E-80BF-DDF617548BBB}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{14424A16-48D4-445E-80BF-DDF617548BBB}.Release|Any CPU.Build.0 = Release|Any CPU
-		{14424A16-48D4-445E-80BF-DDF617548BBB}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
-		{14424A16-48D4-445E-80BF-DDF617548BBB}.Release|Mixed Platforms.Build.0 = Release|Any CPU
-		{14424A16-48D4-445E-80BF-DDF617548BBB}.Release|x64.ActiveCfg = Release|x86
-		{14424A16-48D4-445E-80BF-DDF617548BBB}.Release|x86.ActiveCfg = Release|Any CPU
 		{EC2C8109-6E1E-4C88-9A2B-908CFF2EF4AC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{EC2C8109-6E1E-4C88-9A2B-908CFF2EF4AC}.Debug|Any CPU.Build.0 = Debug|Any CPU
@@ -391,17 +374,4 @@
 		{5211F1AD-BBA2-4C62-8749-DCA0A25CF5D8}.Release|x86.ActiveCfg = Release|x86
 		{5211F1AD-BBA2-4C62-8749-DCA0A25CF5D8}.Release|x86.Build.0 = Release|x86
-		{691FC65E-CA1A-4477-B66F-EB49D21B7393}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{691FC65E-CA1A-4477-B66F-EB49D21B7393}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{691FC65E-CA1A-4477-B66F-EB49D21B7393}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
-		{691FC65E-CA1A-4477-B66F-EB49D21B7393}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
-		{691FC65E-CA1A-4477-B66F-EB49D21B7393}.Debug|x64.ActiveCfg = Debug|x86
-		{691FC65E-CA1A-4477-B66F-EB49D21B7393}.Debug|x86.ActiveCfg = Debug|x86
-		{691FC65E-CA1A-4477-B66F-EB49D21B7393}.Debug|x86.Build.0 = Debug|x86
-		{691FC65E-CA1A-4477-B66F-EB49D21B7393}.Release|Any CPU.ActiveCfg = Release|x86
-		{691FC65E-CA1A-4477-B66F-EB49D21B7393}.Release|Mixed Platforms.ActiveCfg = Release|x86
-		{691FC65E-CA1A-4477-B66F-EB49D21B7393}.Release|Mixed Platforms.Build.0 = Release|x86
-		{691FC65E-CA1A-4477-B66F-EB49D21B7393}.Release|x64.ActiveCfg = Release|x86
-		{691FC65E-CA1A-4477-B66F-EB49D21B7393}.Release|x86.ActiveCfg = Release|x86
-		{691FC65E-CA1A-4477-B66F-EB49D21B7393}.Release|x86.Build.0 = Release|x86
 		{7C4B1DE4-FC9A-4448-BCF8-3CB3FA3CB8FA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{7C4B1DE4-FC9A-4448-BCF8-3CB3FA3CB8FA}.Debug|Any CPU.Build.0 = Debug|Any CPU
@@ -466,6 +436,4 @@
 		{0CA6706D-A569-45DE-A85C-4158891CC1BC} = {E69A1E5F-63F7-493F-BBA2-163D6E321D44}
 		{17187EAC-5D8C-4B11-9CEA-D88F71B59658} = {E69A1E5F-63F7-493F-BBA2-163D6E321D44}
-		{14424A16-48D4-445E-80BF-DDF617548BBB} = {E69A1E5F-63F7-493F-BBA2-163D6E321D44}
-		{691FC65E-CA1A-4477-B66F-EB49D21B7393} = {E69A1E5F-63F7-493F-BBA2-163D6E321D44}
 		{E1D6C801-892A-406A-B606-F158E36DD3C3} = {E46F2FC8-8C15-48E5-96DB-FF2DB36BC509}
 		{8D40A723-139D-40E4-8BBA-4CB309A9E4B9} = {E46F2FC8-8C15-48E5-96DB-FF2DB36BC509}
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.DataAccess/3.3/Enums/Command.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.DataAccess/3.3/Enums/Command.cs	(revision 6717)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.DataAccess/3.3/Enums/Command.cs	(revision 6717)
@@ -0,0 +1,32 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+
+namespace HeuristicLab.Services.Hive.DataAccess {
+
+  [Serializable]
+  public enum Command {
+    Stop,
+    Abort,
+    Pause
+  }
+}
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.DataAccess/3.3/Enums/CpuArchitecture.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.DataAccess/3.3/Enums/CpuArchitecture.cs	(revision 6717)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.DataAccess/3.3/Enums/CpuArchitecture.cs	(revision 6717)
@@ -0,0 +1,30 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+
+namespace HeuristicLab.Services.Hive.DataAccess {
+
+  [Serializable]
+  public enum CpuArchitecture {
+    x86, x64
+  };
+}
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.DataAccess/3.3/Enums/JobState.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.DataAccess/3.3/Enums/JobState.cs	(revision 6717)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.DataAccess/3.3/Enums/JobState.cs	(revision 6717)
@@ -0,0 +1,67 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+
+namespace HeuristicLab.Services.Hive.DataAccess {
+  [Serializable]
+  public enum JobState {
+    /// <summary>
+    /// A job is offline as long as he is not yet submitted to the hive
+    /// </summary>
+    Offline,
+
+    /// <summary>
+    /// Job is waiting to be calculated
+    /// </summary>
+    Waiting,
+
+    /// <summary>
+    /// Job is beeing transferred
+    /// </summary>
+    Transferring,
+
+    /// <summary>
+    /// Job is actively calculated on a Slave
+    /// </summary>
+    Calculating,
+
+    /// <summary>
+    /// Job is paused, will not be picked up by slaves
+    /// </summary>
+    Paused,
+
+    /// <summary>
+    /// Job as finished and is ready to be collected by the Client
+    /// </summary>
+    Finished,
+
+    /// <summary>
+    /// Job is aborted and result can be collected by the Client
+    /// </summary>
+    Aborted,
+
+    /// <summary>
+    /// Job as been aborted due to an error. Results are ready to be collected
+    /// </summary>
+    Failed
+  };
+}
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.DataAccess/3.3/Enums/Permission.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.DataAccess/3.3/Enums/Permission.cs	(revision 6717)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.DataAccess/3.3/Enums/Permission.cs	(revision 6717)
@@ -0,0 +1,42 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+namespace HeuristicLab.Services.Hive.DataAccess {
+
+  [Serializable]
+  public enum Permission {
+    /// <summary>
+    /// User is not allowed to access
+    /// </summary>
+    NotAllowed,
+
+    /// <summary>
+    /// User can only download and view experiments
+    /// </summary>
+    Read,
+
+    /// <summary>
+    /// User can pause, stop, restart, delete experiment. can also grant other 
+    /// </summary>
+    Full
+  }
+}
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.DataAccess/3.3/Enums/SlaveState.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.DataAccess/3.3/Enums/SlaveState.cs	(revision 6717)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.DataAccess/3.3/Enums/SlaveState.cs	(revision 6717)
@@ -0,0 +1,32 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+
+namespace HeuristicLab.Services.Hive.DataAccess {
+
+  [Serializable]
+  public enum SlaveState {
+    Idle,
+    Calculating,
+    Offline
+  };
+}
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.DataAccess/3.3/HeuristicLab.Services.Hive.DataAccess-3.3.csproj
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.DataAccess/3.3/HeuristicLab.Services.Hive.DataAccess-3.3.csproj	(revision 6716)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.DataAccess/3.3/HeuristicLab.Services.Hive.DataAccess-3.3.csproj	(revision 6717)
@@ -94,8 +94,8 @@
   </ItemGroup>
   <ItemGroup>
-    <Compile Include="Convert.cs" />
     <None Include="HeuristicLabServicesHiveDataAccessPlugin.cs.frame" />
+    <Compile Include="Enums\Command.cs" />
+    <Compile Include="Enums\CpuArchitecture.cs" />
     <Compile Include="HeuristicLabServicesHiveDataAccessPlugin.cs" />
-    <Compile Include="HiveDao.cs" />
     <Compile Include="HiveDataContext.cs">
       <DependentUpon>HiveDataContext.dbml</DependentUpon>
@@ -106,5 +106,8 @@
       <DependentUpon>HiveDataContext.dbml</DependentUpon>
     </Compile>
-    <Compile Include="Interfaces\IHiveDao.cs" />
+    <Compile Include="ITransactionManager.cs" />
+    <Compile Include="Enums\JobState.cs" />
+    <Compile Include="Logger.cs" />
+    <Compile Include="Enums\Permission.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
     <None Include="Properties\AssemblyInfo.cs.frame" />
@@ -114,4 +117,5 @@
       <DependentUpon>Settings.settings</DependentUpon>
     </Compile>
+    <Compile Include="Enums\SlaveState.cs" />
     <Compile Include="TransactionManager.cs" />
   </ItemGroup>
@@ -130,5 +134,5 @@
     </None>
     <None Include="Settings.settings">
-      <Generator>SettingsSingleFileGenerator</Generator>
+      <Generator>PublicSettingsSingleFileGenerator</Generator>
       <LastGenOutput>Settings.Designer.cs</LastGenOutput>
     </None>
@@ -138,10 +142,4 @@
       <DependentUpon>HiveDataContext.dbml</DependentUpon>
     </None>
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="..\..\HeuristicLab.Services.Hive.Common\3.3\HeuristicLab.Services.Hive.Common-3.3.csproj">
-      <Project>{14424A16-48D4-445E-80BF-DDF617548BBB}</Project>
-      <Name>HeuristicLab.Services.Hive.Common-3.4</Name>
-    </ProjectReference>
   </ItemGroup>
   <ItemGroup>
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.DataAccess/3.3/HeuristicLabServicesHiveDataAccessPlugin.cs.frame
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.DataAccess/3.3/HeuristicLabServicesHiveDataAccessPlugin.cs.frame	(revision 6716)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.DataAccess/3.3/HeuristicLabServicesHiveDataAccessPlugin.cs.frame	(revision 6717)
@@ -31,6 +31,5 @@
   [PluginDependency("HeuristicLab.Common", "3.3")]
   [PluginDependency("HeuristicLab.Core", "3.3")]
-  [PluginDependency("HeuristicLab.Persistence", "3.3")]
-  [PluginDependency("HeuristicLab.Services.Hive.Common", "3.3")]
+  [PluginDependency("HeuristicLab.Persistence", "3.3")]  
   public class HeuristicLabServicesHiveDataAccessPlugin : PluginBase {
   }
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.DataAccess/3.3/HiveDataContext.dbml
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.DataAccess/3.3/HiveDataContext.dbml	(revision 6716)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.DataAccess/3.3/HiveDataContext.dbml	(revision 6717)
@@ -1,4 +1,4 @@
 ﻿<?xml version="1.0" encoding="utf-8"?><Database Name="HeuristicLab.Hive" Class="HiveDataContext" xmlns="http://schemas.microsoft.com/linqtosql/dbml/2007">
-  <Connection Mode="AppSettings" ConnectionString="Data Source=localhost;Initial Catalog=HeuristicLab.Hive-3.4;Integrated Security=True" SettingsObjectName="HeuristicLab.Services.Hive.DataAccess.Settings" SettingsPropertyName="HeuristicLab_Hive_LinqConnectionString" Provider="System.Data.SqlClient" />
+  <Connection Mode="AppSettings" ConnectionString="Data Source=localhost;Initial Catalog=HeuristicLab.Hive-3.3;Integrated Security=True" SettingsObjectName="HeuristicLab.Services.Hive.DataAccess.Settings" SettingsPropertyName="HeuristicLab_Hive_LinqConnectionString" Provider="System.Data.SqlClient" />
   <Table Name="dbo.AssignedResources" Member="AssignedResources">
     <Type Name="AssignedResource">
@@ -45,10 +45,10 @@
         <Column Name="Memory" Type="System.Int32" DbType="Int" CanBeNull="true" />
         <Column Name="Login" Type="System.DateTime" DbType="DateTime" CanBeNull="true" />
-        <Column Name="SlaveState" Storage="_Status" Type="global::HeuristicLab.Services.Hive.Common.DataTransfer.SlaveState" DbType="VarChar(15)" CanBeNull="true" />
+        <Column Name="SlaveState" Storage="_Status" Type="global::HeuristicLab.Services.Hive.DataAccess.SlaveState" DbType="VarChar(15)" CanBeNull="true" />
         <Column Name="Cores" Storage="_NumberOfCores" Type="System.Int32" DbType="Int" CanBeNull="true" />
         <Column Name="FreeCores" Storage="_NumberOfFreeCores" Type="System.Int32" DbType="Int" CanBeNull="true" />
         <Column Name="FreeMemory" Type="System.Int32" DbType="Int" CanBeNull="true" />
         <Column Name="IsAllowedToCalculate" Type="System.Boolean" DbType="Bit" CanBeNull="false" />
-        <Column Name="CpuArchitecture" Type="global::HeuristicLab.Services.Hive.Common.DataTransfer.CpuArchitecture" DbType="VarChar(3)" CanBeNull="false" />
+        <Column Name="CpuArchitecture" Type="global::HeuristicLab.Services.Hive.DataAccess.CpuArchitecture" DbType="VarChar(3)" CanBeNull="false" />
         <Column Name="OperatingSystem" Type="System.String" DbType="VarChar(MAX)" CanBeNull="false" UpdateCheck="Never" />
         <Column Name="LastHeartbeat" Type="System.DateTime" DbType="DateTime" CanBeNull="true" />
@@ -61,5 +61,5 @@
     <Type Name="Job">
       <Column Name="JobId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" IsDbGenerated="true" CanBeNull="false" />
-      <Column Name="JobState" Member="State" Type="global::HeuristicLab.Services.Hive.Common.DataTransfer.JobState" DbType="VarChar(30)" CanBeNull="false" />
+      <Column Name="JobState" Member="State" Type="global::HeuristicLab.Services.Hive.DataAccess.JobState" DbType="VarChar(30)" CanBeNull="false" />
       <Column Name="ExecutionTimeMs" Storage="_ExecutionTime" Type="System.Double" DbType="float" CanBeNull="false" />
       <Column Name="LastHeartbeat" Type="System.DateTime" DbType="DateTime" CanBeNull="true" />
@@ -70,5 +70,5 @@
       <Column Name="IsParentJob" Type="System.Boolean" DbType="Bit" CanBeNull="false" />
       <Column Name="FinishWhenChildJobsFinished" Type="System.Boolean" DbType="Bit" CanBeNull="false" />
-      <Column Name="Command" Type="global::HeuristicLab.Services.Hive.Common.DataTransfer.Command?" DbType="VarChar(30)" CanBeNull="true" />
+      <Column Name="Command" Type="global::HeuristicLab.Services.Hive.DataAccess.Command?" DbType="VarChar(30)" CanBeNull="true" />
       <Column Name="HiveExperimentId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" CanBeNull="false" />
       <Column Name="IsPrivileged" Type="System.Boolean" DbType="Bit" CanBeNull="false" />
@@ -128,5 +128,5 @@
     <Type Name="StateLog">
       <Column Name="StateLogId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" IsDbGenerated="true" CanBeNull="false" />
-      <Column Name="State" Type="global::HeuristicLab.Services.Hive.Common.DataTransfer.JobState" DbType="VarChar(30) NOT NULL" CanBeNull="false" />
+      <Column Name="State" Type="global::HeuristicLab.Services.Hive.DataAccess.JobState" DbType="VarChar(30) NOT NULL" CanBeNull="false" />
       <Column Name="DateTime" Type="System.DateTime" DbType="DateTime NOT NULL" CanBeNull="false" />
       <Column Name="JobId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" CanBeNull="false" />
@@ -143,5 +143,5 @@
       <Column Name="GrantedUserId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
       <Column Name="GrantedByUserId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" CanBeNull="false" />
-      <Column Name="Permission" Type="global::HeuristicLab.Services.Hive.Common.DataTransfer.Permission" DbType="VarChar(15) NOT NULL" CanBeNull="false" />
+      <Column Name="Permission" Type="global::HeuristicLab.Services.Hive.DataAccess.Permission" DbType="VarChar(15) NOT NULL" CanBeNull="false" />
       <Association Name="HiveExperiment_HiveExperimentPermission" Member="HiveExperiment" ThisKey="HiveExperimentId" OtherKey="HiveExperimentId" Type="HiveExperiment" IsForeignKey="true" />
     </Type>
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.DataAccess/3.3/HiveDataContext.dbml.layout
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.DataAccess/3.3/HiveDataContext.dbml.layout	(revision 6716)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.DataAccess/3.3/HiveDataContext.dbml.layout	(revision 6717)
@@ -69,5 +69,5 @@
       </nodes>
     </inheritanceConnector>
-    <associationConnector edgePoints="[(11.9843735 : 2.57859537760417); (11.9843735 : 4.59699625651042); (10.875 : 4.59699625651042)]" fixedFrom="Algorithm" fixedTo="Algorithm">
+    <associationConnector edgePoints="[(11.9843735 : 2.57859537760417); (11.9843735 : 4.59699625651042); (10.875 : 4.59699625651042)]" fixedFrom="NotFixed" fixedTo="NotFixed">
       <AssociationMoniker Name="/HiveDataContext/Resource/Resource_AssignedResource" />
       <nodes>
@@ -76,5 +76,5 @@
       </nodes>
     </associationConnector>
-    <associationConnector edgePoints="[(7.5 : 4.30930826822917); (7.5 : 4.751650890625); (8.875 : 4.751650890625)]" fixedFrom="Algorithm" fixedTo="Algorithm">
+    <associationConnector edgePoints="[(7.5 : 4.30930826822917); (7.5 : 4.751650890625); (8.875 : 4.751650890625)]" fixedFrom="NotFixed" fixedTo="NotFixed">
       <AssociationMoniker Name="/HiveDataContext/Job/Job_AssignedResource" />
       <nodes>
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.DataAccess/3.3/HiveDataContext.designer.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.DataAccess/3.3/HiveDataContext.designer.cs	(revision 6716)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.DataAccess/3.3/HiveDataContext.designer.cs	(revision 6717)
@@ -1137,5 +1137,5 @@
 		private System.Nullable<System.DateTime> _Login;
 		
-		private global::HeuristicLab.Services.Hive.Common.DataTransfer.SlaveState _Status;
+		private global::HeuristicLab.Services.Hive.DataAccess.SlaveState _Status;
 		
 		private System.Nullable<int> _NumberOfCores;
@@ -1147,5 +1147,5 @@
 		private bool _IsAllowedToCalculate;
 		
-		private global::HeuristicLab.Services.Hive.Common.DataTransfer.CpuArchitecture _CpuArchitecture;
+		private global::HeuristicLab.Services.Hive.DataAccess.CpuArchitecture _CpuArchitecture;
 		
 		private string _OperatingSystem;
@@ -1165,5 +1165,5 @@
     partial void OnLoginChanging(System.Nullable<System.DateTime> value);
     partial void OnLoginChanged();
-    partial void OnSlaveStateChanging(global::HeuristicLab.Services.Hive.Common.DataTransfer.SlaveState value);
+    partial void OnSlaveStateChanging(global::HeuristicLab.Services.Hive.DataAccess.SlaveState value);
     partial void OnSlaveStateChanged();
     partial void OnCoresChanging(System.Nullable<int> value);
@@ -1175,5 +1175,5 @@
     partial void OnIsAllowedToCalculateChanging(bool value);
     partial void OnIsAllowedToCalculateChanged();
-    partial void OnCpuArchitectureChanging(global::HeuristicLab.Services.Hive.Common.DataTransfer.CpuArchitecture value);
+    partial void OnCpuArchitectureChanging(global::HeuristicLab.Services.Hive.DataAccess.CpuArchitecture value);
     partial void OnCpuArchitectureChanged();
     partial void OnOperatingSystemChanging(string value);
@@ -1251,5 +1251,5 @@
 		
 		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Status", DbType="VarChar(15)", CanBeNull=true)]
-		public global::HeuristicLab.Services.Hive.Common.DataTransfer.SlaveState SlaveState
+		public global::HeuristicLab.Services.Hive.DataAccess.SlaveState SlaveState
 		{
 			get
@@ -1351,5 +1351,5 @@
 		
 		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_CpuArchitecture", DbType="VarChar(3)", CanBeNull=false)]
-		public global::HeuristicLab.Services.Hive.Common.DataTransfer.CpuArchitecture CpuArchitecture
+		public global::HeuristicLab.Services.Hive.DataAccess.CpuArchitecture CpuArchitecture
 		{
 			get
@@ -1454,5 +1454,5 @@
 		private System.Guid _JobId;
 		
-		private global::HeuristicLab.Services.Hive.Common.DataTransfer.JobState _State;
+		private global::HeuristicLab.Services.Hive.DataAccess.JobState _State;
 		
 		private double _ExecutionTime;
@@ -1472,5 +1472,5 @@
 		private bool _FinishWhenChildJobsFinished;
 		
-		private global::HeuristicLab.Services.Hive.Common.DataTransfer.Command? _Command;
+		private global::HeuristicLab.Services.Hive.DataAccess.Command? _Command;
 		
 		private System.Guid _HiveExperimentId;
@@ -1498,5 +1498,5 @@
     partial void OnJobIdChanging(System.Guid value);
     partial void OnJobIdChanged();
-    partial void OnStateChanging(global::HeuristicLab.Services.Hive.Common.DataTransfer.JobState value);
+    partial void OnStateChanging(global::HeuristicLab.Services.Hive.DataAccess.JobState value);
     partial void OnStateChanged();
     partial void OnExecutionTimeMsChanging(double value);
@@ -1516,5 +1516,5 @@
     partial void OnFinishWhenChildJobsFinishedChanging(bool value);
     partial void OnFinishWhenChildJobsFinishedChanged();
-    partial void OnCommandChanging(global::HeuristicLab.Services.Hive.Common.DataTransfer.Command? value);
+    partial void OnCommandChanging(global::HeuristicLab.Services.Hive.DataAccess.Command? value);
     partial void OnCommandChanged();
     partial void OnHiveExperimentIdChanging(System.Guid value);
@@ -1557,5 +1557,5 @@
 		
 		[global::System.Data.Linq.Mapping.ColumnAttribute(Name="JobState", Storage="_State", DbType="VarChar(30)", CanBeNull=false)]
-		public global::HeuristicLab.Services.Hive.Common.DataTransfer.JobState State
+		public global::HeuristicLab.Services.Hive.DataAccess.JobState State
 		{
 			get
@@ -1741,5 +1741,5 @@
 		
 		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Command", DbType="VarChar(30)", CanBeNull=true)]
-		public global::HeuristicLab.Services.Hive.Common.DataTransfer.Command? Command
+		public global::HeuristicLab.Services.Hive.DataAccess.Command? Command
 		{
 			get
@@ -2889,5 +2889,5 @@
 		private System.Guid _StateLogId;
 		
-		private global::HeuristicLab.Services.Hive.Common.DataTransfer.JobState _State;
+		private global::HeuristicLab.Services.Hive.DataAccess.JobState _State;
 		
 		private System.DateTime _DateTime;
@@ -2911,5 +2911,5 @@
     partial void OnStateLogIdChanging(System.Guid value);
     partial void OnStateLogIdChanged();
-    partial void OnStateChanging(global::HeuristicLab.Services.Hive.Common.DataTransfer.JobState value);
+    partial void OnStateChanging(global::HeuristicLab.Services.Hive.DataAccess.JobState value);
     partial void OnStateChanged();
     partial void OnDateTimeChanging(System.DateTime value);
@@ -2953,5 +2953,5 @@
 		
 		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_State", DbType="VarChar(30) NOT NULL", CanBeNull=false)]
-		public global::HeuristicLab.Services.Hive.Common.DataTransfer.JobState State
+		public global::HeuristicLab.Services.Hive.DataAccess.JobState State
 		{
 			get
@@ -3181,5 +3181,5 @@
 		private System.Guid _GrantedByUserId;
 		
-		private global::HeuristicLab.Services.Hive.Common.DataTransfer.Permission _Permission;
+		private global::HeuristicLab.Services.Hive.DataAccess.Permission _Permission;
 		
 		private EntityRef<HiveExperiment> _HiveExperiment;
@@ -3195,5 +3195,5 @@
     partial void OnGrantedByUserIdChanging(System.Guid value);
     partial void OnGrantedByUserIdChanged();
-    partial void OnPermissionChanging(global::HeuristicLab.Services.Hive.Common.DataTransfer.Permission value);
+    partial void OnPermissionChanging(global::HeuristicLab.Services.Hive.DataAccess.Permission value);
     partial void OnPermissionChanged();
     #endregion
@@ -3270,5 +3270,5 @@
 		
 		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Permission", DbType="VarChar(15) NOT NULL", CanBeNull=false)]
-		public global::HeuristicLab.Services.Hive.Common.DataTransfer.Permission Permission
+		public global::HeuristicLab.Services.Hive.DataAccess.Permission Permission
 		{
 			get
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.DataAccess/3.3/ITransactionManager.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.DataAccess/3.3/ITransactionManager.cs	(revision 6717)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.DataAccess/3.3/ITransactionManager.cs	(revision 6717)
@@ -0,0 +1,29 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+
+namespace HeuristicLab.Services.Hive.DataAccess {
+  public interface ITransactionManager {
+    void UseTransaction(Action call, bool serializable = false, bool longRunning = false);
+    T UseTransaction<T>(Func<T> call, bool serializable = false, bool longRunning = false);
+  }
+}
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.DataAccess/3.3/Logger.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.DataAccess/3.3/Logger.cs	(revision 6717)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.DataAccess/3.3/Logger.cs	(revision 6717)
@@ -0,0 +1,76 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Diagnostics;
+using System.Security;
+using System.Threading;
+
+namespace HeuristicLab.Services.Hive.DataAccess {
+  public class LogFactory {
+    public static ILogger GetLogger(string source) {
+      return new Logger("HL.Hive", source);
+    }
+  }
+
+  public interface ILogger {
+    void Log(string message);
+    void Error(Exception e);
+  }
+
+  internal class Logger : ILogger {
+    private EventLog log;
+
+    /// <summary>
+    /// Creating an EventSource requires certain permissions, which by default a IIS AppPool user does not have.
+    /// In this case just ignore security exceptions.
+    /// In order to make this work, the eventsource needs to be created manually
+    /// </summary>
+    public Logger(string name, string source) {
+      try {
+        if (!EventLog.SourceExists(source)) {
+          EventLog.CreateEventSource(source, name);
+        }
+        log = new EventLog(name);
+        log.Source = source;
+      }
+      catch (SecurityException) { }
+    }
+
+    public void Log(string message) {
+      try {
+        if (log != null) {
+          log.WriteEntry(string.Format("{0} (AppDomain: {1}, Thread: {2})", message, AppDomain.CurrentDomain.Id, Thread.CurrentThread.ManagedThreadId), EventLogEntryType.Information);
+        }
+      }
+      catch (SecurityException) { }
+    }
+
+    public void Error(Exception e) {
+      try {
+        if (log != null) {
+          log.WriteEntry(string.Format("{0} (AppDomain: {1}, Thread: {2})", e.Message, AppDomain.CurrentDomain.Id, Thread.CurrentThread.ManagedThreadId), EventLogEntryType.Error);
+        }
+      }
+      catch (SecurityException) { }
+    }
+  }
+}
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.DataAccess/3.3/Settings.Designer.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.DataAccess/3.3/Settings.Designer.cs	(revision 6716)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.DataAccess/3.3/Settings.Designer.cs	(revision 6717)
@@ -14,5 +14,5 @@
     [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
     [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")]
-    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
+    public sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
         
         private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.DataAccess/3.3/TransactionManager.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.DataAccess/3.3/TransactionManager.cs	(revision 6716)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.DataAccess/3.3/TransactionManager.cs	(revision 6717)
@@ -22,5 +22,5 @@
 using System;
 using System.Transactions;
-using HeuristicLab.Services.Hive.Common;
+using HeuristicLab.Services.Hive.DataAccess;
 
 namespace HeuristicLab.Services.Hive.DataAccess {  
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.Tests/DaoTests.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.Tests/DaoTests.cs	(revision 6716)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.Tests/DaoTests.cs	(revision 6717)
@@ -24,9 +24,6 @@
 using System.Linq;
 using System.Threading;
-using HeuristicLab.Services.Hive.Common.DataTransfer;
-using HeuristicLab.Services.Hive.Common.ServiceContracts;
-using HeuristicLab.Services.Hive.DataAccess;
 using Microsoft.VisualStudio.TestTools.UnitTesting;
-using DT = HeuristicLab.Services.Hive.Common.DataTransfer;
+using DT = HeuristicLab.Services.Hive.DataTransfer;
 
 namespace HeuristicLab.Services.Hive.Tests {
@@ -39,6 +36,6 @@
     }
 
-    private IHiveService GetLocalService() {
-      return new HiveService();
+    private HeuristicLab.Services.Hive.ServiceContracts.IHiveService GetLocalService() {
+      return new HeuristicLab.Services.Hive.HiveService();
     }
 
@@ -55,7 +52,7 @@
 
       DT.Job job1 = new DT.Job();
-      job1.State = JobState.Offline;
-      job1.StateLog.Add(new DT.StateLog { State = JobState.Offline, DateTime = DateTime.Now });
-      job1.Command = Command.Pause;
+      job1.State = DT.JobState.Offline;
+      job1.StateLog.Add(new DT.StateLog { State = DT.JobState.Offline, DateTime = DateTime.Now });
+      job1.Command = DT.Command.Pause;
       job1.HiveExperimentId = he.Id;
       job1.IsPrivileged = true;
@@ -110,8 +107,8 @@
 
       // test jobstates
-      job1.StateLog.Add(new DT.StateLog { State = JobState.Transferring, DateTime = DateTime.Now }); Thread.Sleep(10);
-      job1.StateLog.Add(new DT.StateLog { State = JobState.Calculating, DateTime = DateTime.Now }); Thread.Sleep(10);
-      job1.StateLog.Add(new DT.StateLog { State = JobState.Transferring, DateTime = DateTime.Now }); Thread.Sleep(10);
-      job1.StateLog.Add(new DT.StateLog { State = JobState.Finished, DateTime = DateTime.Now }); Thread.Sleep(10);
+      job1.StateLog.Add(new DT.StateLog { State = DT.JobState.Transferring, DateTime = DateTime.Now }); Thread.Sleep(10);
+      job1.StateLog.Add(new DT.StateLog { State = DT.JobState.Calculating, DateTime = DateTime.Now }); Thread.Sleep(10);
+      job1.StateLog.Add(new DT.StateLog { State = DT.JobState.Transferring, DateTime = DateTime.Now }); Thread.Sleep(10);
+      job1.StateLog.Add(new DT.StateLog { State = DT.JobState.Finished, DateTime = DateTime.Now }); Thread.Sleep(10);
       dao.UpdateJob(job1);
 
@@ -226,6 +223,6 @@
 
       DT.Job job = new DT.Job();
-      job.State = JobState.Offline;
-      job.StateLog.Add(new DT.StateLog { State = JobState.Offline, DateTime = DateTime.Now });
+      job.State = DT.JobState.Offline;
+      job.StateLog.Add(new DT.StateLog { State = DT.JobState.Offline, DateTime = DateTime.Now });
       job.HiveExperimentId = he.Id;
       job.Id = dao.AddJob(job);
@@ -235,5 +232,5 @@
       perm.GrantedByUserId = he.OwnerUserId;
       perm.GrantedUserId = Guid.NewGuid();
-      perm.Permission = Permission.Full;
+      perm.Permission = DT.Permission.Full;
       dao.AddHiveExperimentPermission(perm);
 
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.Tests/HeuristicLab.Services.Hive.Tests-3.3.csproj
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.Tests/HeuristicLab.Services.Hive.Tests-3.3.csproj	(revision 6716)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.Tests/HeuristicLab.Services.Hive.Tests-3.3.csproj	(revision 6717)
@@ -114,4 +114,5 @@
     <Reference Include="System.Data.Linq" />
     <Reference Include="System.Drawing" />
+    <Reference Include="System.Runtime.Serialization" />
     <Reference Include="System.ServiceModel" />
     <Reference Include="System.Transactions" />
@@ -135,8 +136,4 @@
       <Name>HeuristicLab.Hive-3.3</Name>
     </ProjectReference>
-    <ProjectReference Include="..\HeuristicLab.Services.Hive.Common\3.3\HeuristicLab.Services.Hive.Common-3.3.csproj">
-      <Project>{14424A16-48D4-445E-80BF-DDF617548BBB}</Project>
-      <Name>HeuristicLab.Services.Hive.Common-3.3</Name>
-    </ProjectReference>
     <ProjectReference Include="..\HeuristicLab.Services.Hive.DataAccess\3.3\HeuristicLab.Services.Hive.DataAccess-3.3.csproj">
       <Project>{EC2C8109-6E1E-4C88-9A2B-908CFF2EF4AC}</Project>
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.Tests/Mocks/MockAuthorizationManager.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.Tests/Mocks/MockAuthorizationManager.cs	(revision 6716)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.Tests/Mocks/MockAuthorizationManager.cs	(revision 6717)
@@ -28,9 +28,9 @@
     }
 
-    public void AuthorizeForJob(Guid jobId, Common.DataTransfer.Permission requiredPermission) {
+    public void AuthorizeForJob(Guid jobId, DataTransfer.Permission requiredPermission) {
       // ok.
     }
 
-    public void AuthorizeForExperiment(Guid experimentId, Common.DataTransfer.Permission requiredPermission) {
+    public void AuthorizeForExperiment(Guid experimentId, DataTransfer.Permission requiredPermission) {
       // ok.
     }
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.Tests/ServiceTests.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.Tests/ServiceTests.cs	(revision 6716)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.Tests/ServiceTests.cs	(revision 6717)
@@ -23,10 +23,8 @@
 using System.Collections.Generic;
 using System.Linq;
-using HeuristicLab.Services.Hive.Common;
-using HeuristicLab.Services.Hive.Common.DataTransfer;
-using HeuristicLab.Services.Hive.Common.ServiceContracts;
+using HeuristicLab.Clients.Hive;
 using HeuristicLab.Services.Hive.Tests.Mocks;
 using Microsoft.VisualStudio.TestTools.UnitTesting;
-using DT = HeuristicLab.Services.Hive.Common.DataTransfer;
+using DT = HeuristicLab.Services.Hive.DataTransfer;
 
 namespace HeuristicLab.Services.Hive.Tests {
@@ -42,6 +40,6 @@
     }
 
-    private IHiveService GetLocalService() {
-      return new HiveService();
+    private HeuristicLab.Services.Hive.ServiceContracts.IHiveService GetLocalService() {
+      return new HeuristicLab.Services.Hive.HiveService();
     }
 
@@ -55,6 +53,6 @@
       // create job
       DT.Job job = new DT.Job() { CoresNeeded = 1, MemoryNeeded = 0, Priority = 0 };
-      job.State = JobState.Offline;
-      job.StateLog.Add(new StateLog { State = JobState.Offline, DateTime = DateTime.Now });
+      job.State = DT.JobState.Offline;
+      job.StateLog.Add(new DT.StateLog { State = DT.JobState.Offline, DateTime = DateTime.Now });
 
       DT.JobData jobData = new DT.JobData() {
@@ -80,5 +78,5 @@
       pluginData1.Data = new byte[] { 0, 1, 2, 3, 4, 5 };
 
-      plugin1.Id = service.AddPlugin(plugin1, new List<PluginData> { pluginData1 });
+      plugin1.Id = service.AddPlugin(plugin1, new List<DT.PluginData> { pluginData1 });
       pluginData1.PluginId = plugin1.Id;
 
@@ -87,5 +85,5 @@
 
       // create slave
-      DT.Slave slave = new Slave();
+      DT.Slave slave = new DT.Slave();
       slave.Id = Guid.NewGuid();
       slave.Name = "TestSlave";
@@ -94,5 +92,5 @@
       slave.CpuSpeed = 2800;
       slave.OperatingSystem = "Windows 3.11";
-      slave.CpuArchitecture = CpuArchitecture.x64;
+      slave.CpuArchitecture = DT.CpuArchitecture.x64;
 
       // add slave
@@ -112,5 +110,5 @@
       Assert.AreEqual(job.MemoryNeeded, jobLoaded.MemoryNeeded);
       Assert.AreEqual(job.Priority, jobLoaded.Priority);
-      Assert.AreEqual(JobState.Waiting, jobLoaded.State);
+      Assert.AreEqual(DT.JobState.Waiting, jobLoaded.State);
       Assert.IsTrue(job.PluginsNeededIds.SequenceEqual(jobLoaded.PluginsNeededIds));
       Assert.AreEqual(job.HiveExperimentId, jobLoaded.HiveExperimentId);
@@ -127,5 +125,5 @@
 
       // test assigned ressources
-      var actions = service.Heartbeat(new Heartbeat() { SlaveId = slave.Id, AssignJob = true, FreeCores = 4, FreeMemory = 1024, JobProgress = new Dictionary<Guid, TimeSpan>() });
+      var actions = service.Heartbeat(new DT.Heartbeat() { SlaveId = slave.Id, AssignJob = true, FreeCores = 4, FreeMemory = 1024, JobProgress = new Dictionary<Guid, TimeSpan>() });
       Assert.AreEqual(1, actions.Count);
       Assert.AreEqual(MessageContainer.MessageType.CalculateJob, actions[0].Message);
@@ -136,10 +134,10 @@
 
       // slave is responsible for updating state to 'Calculating'
-      service.UpdateJobState(jobLoaded.Id, JobState.Calculating, slave.Id, null, null);
+      service.UpdateJobState(jobLoaded.Id, DT.JobState.Calculating, slave.Id, null, null);
 
       // send progress
       var progress = new Dictionary<Guid, TimeSpan>();
       progress.Add(job.Id, new TimeSpan(1, 5, 10, 20, 30));
-      actions = service.Heartbeat(new Heartbeat() { SlaveId = slave.Id, AssignJob = true, FreeCores = 3, FreeMemory = 1024, JobProgress = progress });
+      actions = service.Heartbeat(new DT.Heartbeat() { SlaveId = slave.Id, AssignJob = true, FreeCores = 3, FreeMemory = 1024, JobProgress = progress });
       Assert.AreEqual(0, actions.Count);
 
@@ -155,5 +153,5 @@
 
       // set it to finished
-      service.UpdateJobState(jobLoaded.Id, JobState.Finished, slave.Id, null, null);
+      service.UpdateJobState(jobLoaded.Id, DT.JobState.Finished, slave.Id, null, null);
 
       // test if the job is returned for the resource (it should not be)
@@ -162,8 +160,8 @@
 
       // set job waiting again
-      service.UpdateJobState(job.Id, JobState.Waiting, null, null, string.Empty);
+      service.UpdateJobState(job.Id, DT.JobState.Waiting, null, null, string.Empty);
 
       // get job again
-      actions = service.Heartbeat(new Heartbeat() { SlaveId = slave.Id, AssignJob = true, FreeCores = 4, FreeMemory = 1024, JobProgress = new Dictionary<Guid, TimeSpan>() });
+      actions = service.Heartbeat(new DT.Heartbeat() { SlaveId = slave.Id, AssignJob = true, FreeCores = 4, FreeMemory = 1024, JobProgress = new Dictionary<Guid, TimeSpan>() });
       Assert.AreEqual(1, actions.Count);
       Assert.AreEqual(MessageContainer.MessageType.CalculateJob, actions[0].Message);
@@ -171,9 +169,9 @@
 
       // create downtime which should make slave unavailable for calculation
-      Guid downtimeId = service.AddDowntime(new Downtime { ResourceId = slave.Id, StartDate = DateTime.Now - TimeSpan.FromMinutes(1), EndDate = DateTime.Now + TimeSpan.FromMinutes(1), Recurring = false });
+      Guid downtimeId = service.AddDowntime(new DT.Downtime { ResourceId = slave.Id, StartDate = DateTime.Now - TimeSpan.FromMinutes(1), EndDate = DateTime.Now + TimeSpan.FromMinutes(1), Recurring = false });
 
       progress.Clear();
       progress.Add(job.Id, new TimeSpan(1, 5, 10, 20, 30));
-      actions = service.Heartbeat(new Heartbeat() { SlaveId = slave.Id, AssignJob = true, FreeCores = 4, FreeMemory = 1024, JobProgress = new Dictionary<Guid, TimeSpan>() });
+      actions = service.Heartbeat(new DT.Heartbeat() { SlaveId = slave.Id, AssignJob = true, FreeCores = 4, FreeMemory = 1024, JobProgress = new Dictionary<Guid, TimeSpan>() });
       Assert.AreEqual(1, actions.Count);
       Assert.AreEqual(MessageContainer.MessageType.PauseAll, actions[0].Message);
@@ -189,5 +187,5 @@
 
       // send another heartbeat with the deleted job; the server should command the abortion of the job
-      actions = service.Heartbeat(new Heartbeat() { SlaveId = slave.Id, AssignJob = true, FreeCores = 3, FreeMemory = 1024, JobProgress = progress });
+      actions = service.Heartbeat(new DT.Heartbeat() { SlaveId = slave.Id, AssignJob = true, FreeCores = 3, FreeMemory = 1024, JobProgress = progress });
       Assert.AreEqual(1, actions.Count);
       Assert.AreEqual(MessageContainer.MessageType.AbortJob, actions[0].Message);
@@ -213,6 +211,6 @@
         FinishWhenChildJobsFinished = true
       };
-      parentJob.State = JobState.Offline;
-      parentJob.StateLog.Add(new StateLog { State = JobState.Offline, DateTime = DateTime.Now });
+      parentJob.State = DT.JobState.Offline;
+      parentJob.StateLog.Add(new DT.StateLog { State = DT.JobState.Offline, DateTime = DateTime.Now });
 
       DT.JobData parentJobData = new DT.JobData() { Data = new byte[0] };
@@ -224,11 +222,11 @@
         Priority = 0
       };
-      childJob.State = JobState.Offline;
-      childJob.StateLog.Add(new StateLog { State = JobState.Offline, DateTime = DateTime.Now });
+      childJob.State = DT.JobState.Offline;
+      childJob.StateLog.Add(new DT.StateLog { State = DT.JobState.Offline, DateTime = DateTime.Now });
 
       DT.JobData childJobData = new DT.JobData() { Data = new byte[1000] };
 
       // create slave
-      DT.Slave slave = new Slave();
+      DT.Slave slave = new DT.Slave();
       slave.Id = Guid.NewGuid();
       slave.Name = "TestSlave";
@@ -237,5 +235,5 @@
       slave.CpuSpeed = 2800;
       slave.OperatingSystem = "Windows 3.11";
-      slave.CpuArchitecture = CpuArchitecture.x64;
+      slave.CpuArchitecture = DT.CpuArchitecture.x64;
 
       // add slave
@@ -258,5 +256,5 @@
       Assert.AreEqual(childJob.ParentJobId, childJobLoaded.ParentJobId);
       Assert.AreEqual(childJob.HiveExperimentId, childJobLoaded.HiveExperimentId);
-      Assert.AreEqual(JobState.Waiting, childJobLoaded.State);
+      Assert.AreEqual(DT.JobState.Waiting, childJobLoaded.State);
       Assert.AreEqual(false, childJobLoaded.FinishWhenChildJobsFinished);
       Assert.AreEqual(false, childJobLoaded.IsParentJob);
@@ -270,5 +268,5 @@
 
       // test heartbeat
-      var actions = service.Heartbeat(new Heartbeat() { SlaveId = slave.Id, AssignJob = true, FreeCores = 4, FreeMemory = 1024, JobProgress = new Dictionary<Guid, TimeSpan>() });
+      var actions = service.Heartbeat(new DT.Heartbeat() { SlaveId = slave.Id, AssignJob = true, FreeCores = 4, FreeMemory = 1024, JobProgress = new Dictionary<Guid, TimeSpan>() });
       Assert.AreEqual(1, actions.Count); // only the child job should be assigned
       Assert.AreEqual(MessageContainer.MessageType.CalculateJob, actions[0].Message);
@@ -282,5 +280,5 @@
 
       // set child job to finished
-      childJobLoaded = service.UpdateJobState(childJobLoaded.Id, JobState.Finished, slave.Id, null, null);
+      childJobLoaded = service.UpdateJobState(childJobLoaded.Id, DT.JobState.Finished, slave.Id, null, null);
 
       // lifecycle - let it process one server-heartbeat; this should set the parent job to finished
@@ -308,10 +306,10 @@
       DT.HiveExperiment e1 = new DT.HiveExperiment() { Name = "TestExperiment", Description = "" };
       e1.Id = service.AddHiveExperiment(e1);
-      
+
       var e1loaded = service.GetHiveExperiment(e1.Id);
       Assert.AreEqual(Permission.Full, e1loaded.Permission);
       var allExp = service.GetHiveExperiments();
       Assert.AreEqual(1, allExp.Count(x => x.Id == e1.Id));
-      
+
       // change to user2
       mockServiceLocator.SetCurrentUserId(MockUserManager.MockUserId2);
@@ -319,5 +317,6 @@
         e1loaded = service.GetHiveExperiment(e1.Id);
         Assert.Fail("Access should not be possible");
-      } catch { /* ok, cool */ }
+      }
+      catch { /* ok, cool */ }
       allExp = service.GetHiveExperiments();
       Assert.AreEqual(0, allExp.Count(x => x.Id == e1.Id));
@@ -325,5 +324,5 @@
       // user2 should not be able to grant permissions
       try {
-        service.GrantPermission(e1.Id, MockUserManager.MockUserId2, Permission.Read);
+        service.GrantPermission(e1.Id, MockUserManager.MockUserId2, DT.Permission.Read);
         Assert.Fail("Should not be possible to grant permission due to missing permission for User2");
       }
@@ -332,5 +331,5 @@
       // switch back to user1 (owner) and grant user2 permissions
       mockServiceLocator.SetCurrentUserId(MockUserManager.MockUserId1);
-      service.GrantPermission(e1.Id, MockUserManager.MockUserId2, Permission.Read);
+      service.GrantPermission(e1.Id, MockUserManager.MockUserId2, DT.Permission.Read);
 
       // back to user2
@@ -343,5 +342,5 @@
       // user2 should still not be able to grant permissions
       try {
-        service.GrantPermission(e1.Id, MockUserManager.MockUserId2, Permission.Read);
+        service.GrantPermission(e1.Id, MockUserManager.MockUserId2, DT.Permission.Read);
         Assert.Fail("Should not be possible to grant permission due to missing permission for User2");
       }
@@ -350,5 +349,5 @@
       // back to user1
       mockServiceLocator.SetCurrentUserId(MockUserManager.MockUserId1);
-      service.GrantPermission(e1.Id, MockUserManager.MockUserId2, Permission.Full);
+      service.GrantPermission(e1.Id, MockUserManager.MockUserId2, DT.Permission.Full);
 
       // back to user2
@@ -358,7 +357,7 @@
       allExp = service.GetHiveExperiments();
       Assert.AreEqual(1, allExp.Count(x => x.Id == e1.Id));
-      
+
       // grant rights to user3, now this should be possible due to full permissions
-      service.GrantPermission(e1.Id, MockUserManager.MockUserId3, Permission.Read);
+      service.GrantPermission(e1.Id, MockUserManager.MockUserId3, DT.Permission.Read);
 
       // back to user1 and revoke rights for user2
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.Web/Hive-3.4/Status.aspx.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.Web/Hive-3.4/Status.aspx.cs	(revision 6716)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.Web/Hive-3.4/Status.aspx.cs	(revision 6717)
@@ -7,7 +7,8 @@
 using HeuristicLab.Services.Hive.DataAccess;
 using HeuristicLab.Services.Hive;
-using HeuristicLab.Services.Hive.Common.DataTransfer;
+using HeuristicLab.Services.Hive.DataTransfer;
 using System.Text;
 using System.Web.UI.DataVisualization.Charting;
+using DA = HeuristicLab.Services.Hive.DataAccess;
 
 public partial class Status : System.Web.UI.Page {
@@ -26,10 +27,10 @@
       speedupChartMinutes.Visible = true;
     }
-
-    var onlineSlaves = dao.GetSlaves(x => (x.SlaveState == SlaveState.Calculating || x.SlaveState == SlaveState.Idle) && resourceIds.Contains(x.ResourceId));
+                                  
+    var onlineSlaves = dao.GetSlaves(x => (x.SlaveState == DA.SlaveState.Calculating || x.SlaveState == DA.SlaveState.Idle) && resourceIds.Contains(x.ResourceId));
 
     int currentlyAvailableCores = onlineSlaves.Sum(s => s.Cores.Value);
     int currentlyUsedCores = currentlyAvailableCores - onlineSlaves.Sum(s => s.FreeCores.Value);
-    int currentlyJobsWaiting = ServiceLocator.Instance.HiveDao.GetJobs(x => x.State == JobState.Waiting).Count();
+    int currentlyJobsWaiting = ServiceLocator.Instance.HiveDao.GetJobs(x => x.State == DA.JobState.Waiting).Count();
 
     this.availableCoresLabel.Text = currentlyAvailableCores.ToString();
@@ -41,5 +42,5 @@
     cpuUtilizationLabel.Text = (onlineSlaves.Count() > 0 ? Math.Round(onlineSlaves.Average(s => s.CpuUtilization), 2).ToString() : "0.0") + " %";
 
-    HeuristicLab.Services.Hive.Common.DataTransfer.Statistics[] stats;
+    HeuristicLab.Services.Hive.DataTransfer.Statistics[] stats;
     if (daysDropDownList.SelectedValue == "All")
       stats = dao.GetStatistics(x => true).OrderBy(x => x.TimeStamp).ToArray();
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.Web/Hive-3.4/Web.config
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.Web/Hive-3.4/Web.config	(revision 6716)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.Web/Hive-3.4/Web.config	(revision 6717)
@@ -98,5 +98,5 @@
       <service behaviorConfiguration="ServiceBehaviour_IHiveService" name="HeuristicLab.Services.Hive.HiveService">
         <endpoint address="mex" binding="mexHttpBinding" bindingConfiguration="" name="MexEndpoint" contract="IMetadataExchange"/>
-        <endpoint binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IHiveService" name="WSHttpBinding_IHiveService" contract="HeuristicLab.Services.Hive.Common.ServiceContracts.IHiveService"/>
+        <endpoint binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IHiveService" name="WSHttpBinding_IHiveService" contract="HeuristicLab.Services.Hive.ServiceContracts.IHiveService"/>
       </service>
     </services>
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/Convert.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/Convert.cs	(revision 6717)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/Convert.cs	(revision 6717)
@@ -0,0 +1,511 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Data.Linq;
+using System.Linq;
+using DB = HeuristicLab.Services.Hive.DataAccess;
+using DT = HeuristicLab.Services.Hive.DataTransfer;
+
+
+namespace HeuristicLab.Services.Hive.DataTransfer {
+  public static class Convert {
+    #region Job
+    public static DT.Job ToDto(DB.Job source) {
+      if (source == null) return null;
+      return new DT.Job {
+        Id = source.JobId,
+        CoresNeeded = source.CoresNeeded,
+        ExecutionTime = TimeSpan.FromMilliseconds(source.ExecutionTimeMs),
+        MemoryNeeded = source.MemoryNeeded,
+        ParentJobId = source.ParentJobId,
+        Priority = source.Priority,
+        PluginsNeededIds = (source.RequiredPlugins == null ? new List<Guid>() : source.RequiredPlugins.Select(x => x.PluginId).ToList()),
+        LastHeartbeat = source.LastHeartbeat,
+        State = Convert.ToDto(source.State),
+        StateLog = (source.StateLogs == null ? new List<DT.StateLog>() : source.StateLogs.Select(x => Convert.ToDto(x)).OrderBy(x => x.DateTime).ToList()),
+        IsParentJob = source.IsParentJob,
+        FinishWhenChildJobsFinished = source.FinishWhenChildJobsFinished,
+        Command = Convert.ToDto(source.Command),
+        LastJobDataUpdate = (source.JobData == null ? DateTime.MinValue : source.JobData.LastUpdate),
+        HiveExperimentId = source.HiveExperimentId,
+        IsPrivileged = source.IsPrivileged
+      };
+    }
+
+    public static DB.Job ToEntity(DT.Job source) {
+      if (source == null) return null;
+      var entity = new DB.Job(); ToEntity(source, entity);
+      return entity;
+    }
+    public static void ToEntity(DT.Job source, DB.Job target) {
+      if ((source != null) && (target != null)) {
+        target.JobId = source.Id;
+        target.CoresNeeded = source.CoresNeeded;
+        target.ExecutionTimeMs = source.ExecutionTime.TotalMilliseconds;
+        target.MemoryNeeded = source.MemoryNeeded;
+        target.ParentJobId = source.ParentJobId;
+        target.Priority = source.Priority;
+        target.LastHeartbeat = source.LastHeartbeat;
+        target.State = Convert.ToEntity(source.State);
+        if (target.StateLogs == null) target.StateLogs = new EntitySet<DB.StateLog>();
+        foreach (DT.StateLog sl in source.StateLog.Where(x => x.Id == Guid.Empty)) {
+          target.StateLogs.Add(Convert.ToEntity(sl));
+        }
+        target.IsParentJob = source.IsParentJob;
+        target.FinishWhenChildJobsFinished = source.FinishWhenChildJobsFinished;
+        target.Command = Convert.ToEntity(source.Command);
+        // RequiredPlugins are added by Dao
+        target.HiveExperimentId = source.HiveExperimentId;
+        target.IsPrivileged = source.IsPrivileged;
+      }
+    }
+    #endregion
+
+    #region JobData
+    public static DT.JobData ToDto(DB.JobData source) {
+      if (source == null) return null;
+      return new DT.JobData { JobId = source.JobId, Data = source.Data.ToArray(), LastUpdate = source.LastUpdate };
+    }
+    public static DB.JobData ToEntity(DT.JobData source) {
+      if (source == null) return null;
+      var entity = new DB.JobData(); ToEntity(source, entity);
+      return entity;
+    }
+    public static void ToEntity(DT.JobData source, DB.JobData target) {
+      if ((source != null) && (target != null)) {
+        target.JobId = source.JobId; target.Data = new Binary(source.Data); target.LastUpdate = source.LastUpdate;
+      }
+    }
+    #endregion
+
+    #region StateLog
+    public static DT.StateLog ToDto(DB.StateLog source) {
+      if (source == null) return null;
+      return new DT.StateLog { Id = source.StateLogId, DateTime = source.DateTime, Exception = source.Exception, JobId = source.JobId, SlaveId = source.SlaveId, State = Convert.ToDto(source.State), UserId = source.UserId };
+    }
+    public static DB.StateLog ToEntity(DT.StateLog source) {
+      if (source == null) return null;
+      var entity = new DB.StateLog(); ToEntity(source, entity);
+      return entity;
+    }
+    public static void ToEntity(DT.StateLog source, DB.StateLog target) {
+      if ((source != null) && (target != null)) {
+        target.StateLogId = source.Id; target.DateTime = source.DateTime; target.Exception = source.Exception; target.JobId = source.JobId; target.SlaveId = source.SlaveId; target.State = Convert.ToEntity(source.State); target.UserId = source.UserId;
+      }
+    }
+    #endregion
+
+    #region Downtimes
+    public static DT.Downtime ToDto(DB.Downtime source) {
+      if (source == null) return null;
+      return new DT.Downtime { Id = source.DowntimeId, AllDayEvent = source.AllDayEvent, EndDate = source.EndDate, Recurring = source.Recurring, RecurringId = source.RecurringId, ResourceId = source.ResourceId, StartDate = source.StartDate };
+    }
+    public static DB.Downtime ToEntity(DT.Downtime source) {
+      if (source == null) return null;
+      var entity = new DB.Downtime(); ToEntity(source, entity);
+      return entity;
+    }
+    public static void ToEntity(DT.Downtime source, DB.Downtime target) {
+      if ((source != null) && (target != null)) {
+        target.DowntimeId = source.Id; target.AllDayEvent = source.AllDayEvent; target.EndDate = source.EndDate; target.Recurring = source.Recurring; target.RecurringId = source.RecurringId; target.ResourceId = source.ResourceId; target.StartDate = source.StartDate;
+      }
+    }
+    #endregion
+
+    #region HiveExperiment
+    public static DT.HiveExperiment ToDto(DB.HiveExperiment source) {
+      if (source == null) return null;
+      return new DT.HiveExperiment { Id = source.HiveExperimentId, Description = source.Description, Name = source.Name, OwnerUserId = source.OwnerUserId, DateCreated = source.DateCreated, ResourceNames = source.ResourceIds, LastAccessed = source.LastAccessed };
+    }
+    public static DB.HiveExperiment ToEntity(DT.HiveExperiment source) {
+      if (source == null) return null;
+      var entity = new DB.HiveExperiment(); ToEntity(source, entity);
+      return entity;
+    }
+    public static void ToEntity(DT.HiveExperiment source, DB.HiveExperiment target) {
+      if ((source != null) && (target != null)) {
+        target.HiveExperimentId = source.Id; target.Description = source.Description; target.Name = source.Name; target.OwnerUserId = source.OwnerUserId; target.DateCreated = source.DateCreated; target.ResourceIds = source.ResourceNames; target.LastAccessed = source.LastAccessed;
+      }
+    }
+    #endregion
+
+    #region HiveExperimentPermission
+    public static DT.HiveExperimentPermission ToDto(DB.HiveExperimentPermission source) {
+      if (source == null) return null;
+      return new DT.HiveExperimentPermission { HiveExperimentId = source.HiveExperimentId, GrantedUserId = source.GrantedUserId, GrantedByUserId = source.GrantedByUserId, Permission = Convert.ToDto(source.Permission) };
+    }
+    public static DB.HiveExperimentPermission ToEntity(DT.HiveExperimentPermission source) {
+      if (source == null) return null;
+      var entity = new DB.HiveExperimentPermission(); ToEntity(source, entity);
+      return entity;
+    }
+    public static void ToEntity(DT.HiveExperimentPermission source, DB.HiveExperimentPermission target) {
+      if ((source != null) && (target != null)) {
+        target.HiveExperimentId = source.HiveExperimentId; target.GrantedUserId = source.GrantedUserId; target.GrantedByUserId = source.GrantedByUserId; target.Permission = Convert.ToEntity(source.Permission);
+      }
+    }
+    #endregion
+
+    #region Plugin
+    public static DT.Plugin ToDto(DB.Plugin source) {
+      if (source == null) return null;
+      return new DT.Plugin { Id = source.PluginId, Name = source.Name, Version = new Version(source.Version), UserId = source.UserId, DateCreated = source.DateCreated, Hash = source.Hash };
+    }
+    public static DB.Plugin ToEntity(DT.Plugin source) {
+      if (source == null) return null;
+      var entity = new DB.Plugin(); ToEntity(source, entity);
+      return entity;
+    }
+    public static void ToEntity(DT.Plugin source, DB.Plugin target) {
+      if ((source != null) && (target != null)) {
+        target.PluginId = source.Id; target.Name = source.Name; target.Version = source.Version.ToString(); target.UserId = source.UserId; target.DateCreated = source.DateCreated; target.Hash = source.Hash;
+      }
+    }
+    #endregion
+
+    #region PluginData
+    public static DT.PluginData ToDto(DB.PluginData source) {
+      if (source == null) return null;
+      return new DT.PluginData { Id = source.PluginDataId, PluginId = source.PluginId, Data = source.Data.ToArray(), FileName = source.FileName };
+    }
+    public static DB.PluginData ToEntity(DT.PluginData source) {
+      if (source == null) return null;
+      var entity = new DB.PluginData(); ToEntity(source, entity);
+      return entity;
+    }
+    public static void ToEntity(DT.PluginData source, DB.PluginData target) {
+      if ((source != null) && (target != null)) {
+        target.PluginDataId = source.Id; target.PluginId = source.PluginId; target.Data = new Binary(source.Data); target.FileName = source.FileName;
+      }
+    }
+    #endregion
+
+    #region Slave
+    public static DT.Slave ToDto(DB.Slave source) {
+      if (source == null) return null;
+      return new DT.Slave {
+        Id = source.ResourceId,
+        ParentResourceId = source.ParentResourceId,
+        Cores = source.Cores,
+        CpuSpeed = source.CpuSpeed,
+        FreeCores = source.FreeCores,
+        FreeMemory = source.FreeMemory,
+        IsAllowedToCalculate = source.IsAllowedToCalculate,
+        Memory = source.Memory,
+        Name = source.Name,
+        SlaveState = Convert.ToDto(source.SlaveState),
+        CpuArchitecture = Convert.ToDto(source.CpuArchitecture),
+        OperatingSystem = source.OperatingSystem,
+        LastHeartbeat = source.LastHeartbeat,
+        CpuUtilization = source.CpuUtilization
+      };
+    }
+    public static DB.Slave ToEntity(DT.Slave source) {
+      if (source == null) return null;
+      var entity = new DB.Slave(); ToEntity(source, entity);
+      return entity;
+    }
+    public static void ToEntity(DT.Slave source, DB.Slave target) {
+      if ((source != null) && (target != null)) {
+        target.ResourceId = source.Id;
+        target.ParentResourceId = source.ParentResourceId;
+        target.Cores = source.Cores;
+        target.CpuSpeed = source.CpuSpeed;
+        target.FreeCores = source.FreeCores;
+        target.FreeMemory = source.FreeMemory;
+        target.IsAllowedToCalculate = source.IsAllowedToCalculate;
+        target.Memory = source.Memory;
+        target.Name = source.Name;
+        target.SlaveState = Convert.ToEntity(source.SlaveState);
+        target.CpuArchitecture = Convert.ToEntity(source.CpuArchitecture);
+        target.OperatingSystem = source.OperatingSystem;
+        target.LastHeartbeat = source.LastHeartbeat;
+        target.CpuUtilization = source.CpuUtilization;
+      }
+    }
+    #endregion
+
+    #region SlaveGroup
+    public static DT.SlaveGroup ToDto(DB.SlaveGroup source) {
+      if (source == null) return null;
+      return new DT.SlaveGroup { Id = source.ResourceId, Name = source.Name, ParentResourceId = source.ParentResourceId };
+    }
+    public static DB.SlaveGroup ToEntity(DT.SlaveGroup source) {
+      if (source == null) return null;
+      var entity = new DB.SlaveGroup(); ToEntity(source, entity);
+      return entity;
+    }
+    public static void ToEntity(DT.SlaveGroup source, DB.SlaveGroup target) {
+      if ((source != null) && (target != null)) {
+        target.ResourceId = source.Id; target.Name = source.Name; target.ParentResourceId = source.ParentResourceId;
+      }
+    }
+    #endregion
+
+    #region Resource
+    public static DT.Resource ToDto(DB.Resource source) {
+      if (source == null) return null;
+      return new DT.Resource { Id = source.ResourceId, Name = source.Name, ParentResourceId = source.ParentResourceId };
+    }
+    public static DB.Resource ToEntity(DT.Resource source) {
+      if (source == null) return null;
+      var entity = new DB.Resource(); ToEntity(source, entity);
+      return entity;
+    }
+    public static void ToEntity(DT.Resource source, DB.Resource target) {
+      if ((source != null) && (target != null)) {
+        target.ResourceId = source.Id; target.Name = source.Name; target.ParentResourceId = source.ParentResourceId;
+      }
+    }
+    #endregion
+
+    #region Statistics
+    public static DT.Statistics ToDto(DB.Statistics source) {
+      if (source == null) return null;
+      return new DT.Statistics {
+        Id = source.StatisticsId,
+        TimeStamp = source.Timestamp,
+        SlaveStatistics = source.SlaveStatistics.Select(x => Convert.ToDto(x)).ToArray(),
+        UserStatistics = source.UserStatistics.Select(x => Convert.ToDto(x)).ToArray()
+      };
+    }
+    public static DB.Statistics ToEntity(DT.Statistics source) {
+      if (source == null) return null;
+      var entity = new DB.Statistics(); ToEntity(source, entity);
+      return entity;
+    }
+    public static void ToEntity(DT.Statistics source, DB.Statistics target) {
+      if ((source != null) && (target != null)) {
+        target.StatisticsId = source.Id;
+        target.Timestamp = source.TimeStamp;
+
+      }
+    }
+    #endregion
+
+    #region SlaveStatistics
+    public static DT.SlaveStatistics ToDto(DB.SlaveStatistics source) {
+      if (source == null) return null;
+      return new DT.SlaveStatistics {
+        Id = source.StatisticsId,
+        SlaveId = source.SlaveId,
+        Cores = source.Cores,
+        CpuUtilization = source.CpuUtilization,
+        FreeCores = source.FreeCores,
+        FreeMemory = source.FreeMemory,
+        Memory = source.Memory
+      };
+    }
+    public static DB.SlaveStatistics ToEntity(DT.SlaveStatistics source) {
+      if (source == null) return null;
+      var entity = new DB.SlaveStatistics(); ToEntity(source, entity);
+      return entity;
+    }
+    public static void ToEntity(DT.SlaveStatistics source, DB.SlaveStatistics target) {
+      if ((source != null) && (target != null)) {
+        target.StatisticsId = source.Id;
+        target.SlaveId = source.SlaveId;
+        target.Cores = source.Cores;
+        target.CpuUtilization = source.CpuUtilization;
+        target.FreeCores = source.FreeCores;
+        target.FreeMemory = source.FreeMemory;
+        target.Memory = source.Memory;
+      }
+    }
+    #endregion
+
+    #region UserStatistics
+    public static DT.UserStatistics ToDto(DB.UserStatistics source) {
+      if (source == null) return null;
+      return new DT.UserStatistics {
+        Id = source.StatisticsId,
+        UserId = source.UserId,
+        UsedCores = source.UsedCores,
+        ExecutionTime = TimeSpan.FromMilliseconds(source.ExecutionTimeMs),
+        ExecutionTimeFinishedJobs = TimeSpan.FromMilliseconds(source.ExecutionTimeMsFinishedJobs),
+        StartToEndTime = TimeSpan.FromMilliseconds(source.StartToEndTimeMs)
+      };
+    }
+    public static DB.UserStatistics ToEntity(DT.UserStatistics source) {
+      if (source == null) return null;
+      var entity = new DB.UserStatistics(); ToEntity(source, entity);
+      return entity;
+    }
+    public static void ToEntity(DT.UserStatistics source, DB.UserStatistics target) {
+      if ((source != null) && (target != null)) {
+        target.StatisticsId = source.Id;
+        target.UserId = source.UserId;
+        target.UsedCores = source.UsedCores;
+        target.ExecutionTimeMs = source.ExecutionTime.TotalMilliseconds;
+        target.ExecutionTimeMsFinishedJobs = source.ExecutionTimeFinishedJobs.TotalMilliseconds;
+        target.StartToEndTimeMs = source.StartToEndTime.TotalMilliseconds;
+      }
+    }
+    #endregion
+
+
+    #region JobState
+    public static DT.JobState ToDto(DB.JobState source) {
+      if (source == DB.JobState.Aborted) {
+        return JobState.Aborted;
+      } else if (source == DB.JobState.Calculating) {
+        return JobState.Calculating;
+      } else if (source == DB.JobState.Failed) {
+        return JobState.Failed;
+      } else if (source == DB.JobState.Finished) {
+        return JobState.Finished;
+      } else if (source == DB.JobState.Offline) {
+        return JobState.Offline;
+      } else if (source == DB.JobState.Paused) {
+        return JobState.Paused;
+      } else if (source == DB.JobState.Transferring) {
+        return JobState.Transferring;
+      } else if (source == DB.JobState.Waiting) {
+        return JobState.Waiting;
+      } else
+        return JobState.Failed;
+    }
+
+    public static DB.JobState ToEntity(DT.JobState source) {
+      if (source == DT.JobState.Aborted) {
+        return DB.JobState.Aborted;
+      } else if (source == DT.JobState.Calculating) {
+        return DB.JobState.Calculating;
+      } else if (source == DT.JobState.Failed) {
+        return DB.JobState.Failed;
+      } else if (source == DT.JobState.Finished) {
+        return DB.JobState.Finished;
+      } else if (source == DT.JobState.Offline) {
+        return DB.JobState.Offline;
+      } else if (source == DT.JobState.Paused) {
+        return DB.JobState.Paused;
+      } else if (source == DT.JobState.Transferring) {
+        return DB.JobState.Transferring;
+      } else if (source == DT.JobState.Waiting) {
+        return DB.JobState.Waiting;
+      } else
+        return DB.JobState.Failed;
+    }
+    #endregion
+
+    #region Permission
+    public static DT.Permission ToDto(DB.Permission source) {
+      if (source == DB.Permission.Full) {
+        return Permission.Full;
+      } else if (source == DB.Permission.NotAllowed) {
+        return Permission.NotAllowed;
+      } else if (source == DB.Permission.Read) {
+        return Permission.Read;
+      } else
+        return Permission.NotAllowed;
+    }
+
+    public static DB.Permission ToEntity(DT.Permission source) {
+      if (source == DT.Permission.Full) {
+        return DB.Permission.Full;
+      } else if (source == DT.Permission.NotAllowed) {
+        return DB.Permission.NotAllowed;
+      } else if (source == DT.Permission.Read) {
+        return DB.Permission.Read;
+      } else
+        return DB.Permission.NotAllowed;
+    }
+    #endregion
+
+
+    #region Command
+    public static DT.Command? ToDto(DB.Command? source) {
+      if (source.HasValue) {
+        if (source.Value == DB.Command.Abort) {
+          return Command.Abort;
+        } else if (source.Value == DB.Command.Pause) {
+          return Command.Pause;
+        } else if (source.Value == DB.Command.Stop) {
+          return Command.Stop;
+        } else
+          return Command.Pause;
+      }
+      return null;
+    }
+
+    public static DB.Command? ToEntity(DT.Command? source) {
+      if (source.HasValue) {
+        if (source == DT.Command.Abort) {
+          return DB.Command.Abort;
+        } else if (source == DT.Command.Pause) {
+          return DB.Command.Pause;
+        } else if (source == DT.Command.Stop) {
+          return DB.Command.Stop;
+        } else
+          return DB.Command.Pause;
+      } else
+        return null;
+    }
+
+    #endregion
+
+    #region CpuArchiteture
+    public static DT.CpuArchitecture ToDto(DB.CpuArchitecture source) {
+      if (source == DB.CpuArchitecture.x64) {
+        return CpuArchitecture.x64;
+      } else if (source == DB.CpuArchitecture.x86) {
+        return CpuArchitecture.x86;
+      } else
+        return CpuArchitecture.x86;
+    }
+
+    public static DB.CpuArchitecture ToEntity(DT.CpuArchitecture source) {
+      if (source == DT.CpuArchitecture.x64) {
+        return DB.CpuArchitecture.x64;
+      } else if (source == DT.CpuArchitecture.x86) {
+        return DB.CpuArchitecture.x86;
+      } else
+        return DB.CpuArchitecture.x86;
+    }
+    #endregion
+
+    #region SlaveState
+    public static DT.SlaveState ToDto(DB.SlaveState source) {
+      if (source == DB.SlaveState.Calculating) {
+        return SlaveState.Calculating;
+      } else if (source == DB.SlaveState.Idle) {
+        return SlaveState.Idle;
+      } else if (source == DB.SlaveState.Offline) {
+        return SlaveState.Offline;
+      } else
+        return SlaveState.Offline;
+    }
+
+    public static DB.SlaveState ToEntity(DT.SlaveState source) {
+      if (source == DT.SlaveState.Calculating) {
+        return DB.SlaveState.Calculating;
+      } else if (source == DT.SlaveState.Idle) {
+        return DB.SlaveState.Idle;
+      } else if (source == DT.SlaveState.Offline) {
+        return DB.SlaveState.Offline;
+      } else
+        return DB.SlaveState.Offline;
+    }
+    #endregion
+  }
+}
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/DataTransfer/Command.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/DataTransfer/Command.cs	(revision 6717)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/DataTransfer/Command.cs	(revision 6717)
@@ -0,0 +1,31 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+
+namespace HeuristicLab.Services.Hive.DataTransfer {
+  [Serializable]
+  public enum Command {
+    Stop,
+    Abort,
+    Pause
+  }
+}
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/DataTransfer/Downtime.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/DataTransfer/Downtime.cs	(revision 6717)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/DataTransfer/Downtime.cs	(revision 6717)
@@ -0,0 +1,41 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.Hive.DataTransfer {
+  [DataContract]
+  public class Downtime : HiveItem {
+    [DataMember]
+    public DateTime StartDate { get; set; }
+    [DataMember]
+    public DateTime EndDate { get; set; }
+    [DataMember]
+    public bool AllDayEvent { get; set; }
+    [DataMember]
+    public bool Recurring { get; set; }
+    [DataMember]
+    public Guid RecurringId { get; set; }
+    [DataMember]
+    public Guid ResourceId { get; set; }
+  }
+}
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/DataTransfer/Heartbeat.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/DataTransfer/Heartbeat.cs	(revision 6717)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/DataTransfer/Heartbeat.cs	(revision 6717)
@@ -0,0 +1,51 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.Hive.DataTransfer {
+
+  [DataContract]
+  public class Heartbeat {
+    [DataMember]
+    public Guid SlaveId { get; set; }
+    [DataMember]
+    public int FreeMemory { get; set; }
+    [DataMember]
+    public int FreeCores { get; set; }
+    [DataMember]
+    public Dictionary<Guid, TimeSpan> JobProgress { get; set; } // TODO: define Type
+    [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() {
+      String val = "SlaveId: " + SlaveId + ", FreeCores: " + FreeCores;
+      foreach (KeyValuePair<Guid, TimeSpan> kvp in JobProgress) {
+        val += Environment.NewLine + "Id" + kvp.Key + " ExecutionTime " + kvp.Value;
+      }
+      return val;
+    }
+  }
+}
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/DataTransfer/HiveExperiment.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/DataTransfer/HiveExperiment.cs	(revision 6717)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/DataTransfer/HiveExperiment.cs	(revision 6717)
@@ -0,0 +1,57 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.Hive.DataTransfer {
+  [DataContract]
+  [Serializable]
+  public class HiveExperiment : NamedHiveItem {
+    [DataMember]
+    public Guid OwnerUserId { get; set; }
+    [DataMember]
+    public DateTime DateCreated { get; set; }
+    [DataMember]
+    public string ResourceNames { get; set; }
+    [DataMember]
+    public DateTime? LastAccessed { get; set; }
+    [DataMember]
+    public Permission Permission { get; set; } // the permission for the currently logged in user
+    [DataMember]
+    public string OwnerUsername { get; set; }
+
+    /* ==== some computed statistics ==== */
+    [DataMember]
+    public int JobCount { get; set; }
+    [DataMember]
+    public int FinishedCount { get; set; }
+    [DataMember]
+    public int CalculatingCount { get; set; }
+    /* ================================== */
+
+    public HiveExperiment() { }
+
+    public override string ToString() {
+      return base.ToString() + "Name: " + Name + ", Description: " + Description;
+    }
+  }
+}
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/DataTransfer/HiveExperimentPermission.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/DataTransfer/HiveExperimentPermission.cs	(revision 6717)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/DataTransfer/HiveExperimentPermission.cs	(revision 6717)
@@ -0,0 +1,41 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.Hive.DataTransfer {
+  [DataContract]
+  [Serializable]
+  public class HiveExperimentPermission : HiveItem {
+    // info: this class is derived from HiveItem to simplify handling on the client side, altough it does not have a Id.
+    [DataMember]
+    public Guid HiveExperimentId { get; set; }
+    [DataMember]
+    public Guid GrantedUserId { get; set; }
+    [DataMember]
+    public Guid GrantedByUserId { get; set; }
+    [DataMember]
+    public Permission Permission { get; set; }
+
+    public HiveExperimentPermission() { }
+  }
+}
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/DataTransfer/HiveItem.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/DataTransfer/HiveItem.cs	(revision 6717)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/DataTransfer/HiveItem.cs	(revision 6717)
@@ -0,0 +1,34 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.Hive.DataTransfer {
+  [DataContract]
+  [Serializable]
+  public abstract class HiveItem  {
+    [DataMember]
+    public Guid Id { get; set; }
+
+    public HiveItem() { }
+  }
+}
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/DataTransfer/Job.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/DataTransfer/Job.cs	(revision 6717)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/DataTransfer/Job.cs	(revision 6717)
@@ -0,0 +1,53 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.Hive.DataTransfer {
+  [DataContract]
+  [Serializable]
+  public class Job : LightweightJob {
+    [DataMember]
+    public int Priority { get; set; }
+    [DataMember]
+    public int CoresNeeded { get; set; }
+    [DataMember]
+    public int MemoryNeeded { get; set; }
+    [DataMember]
+    public List<Guid> PluginsNeededIds { get; set; }
+    [DataMember]
+    public DateTime? LastHeartbeat { get; set; }
+    [DataMember]
+    public bool IsParentJob { get; set; }
+    [DataMember]
+    public bool FinishWhenChildJobsFinished { get; set; }
+    [DataMember]
+    public Guid HiveExperimentId { get; set; }
+    [DataMember]
+    public bool IsPrivileged { get; set; }
+
+    public Job() {
+      this.PluginsNeededIds = new List<Guid>();
+    }
+  }
+}
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/DataTransfer/JobData.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/DataTransfer/JobData.cs	(revision 6717)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/DataTransfer/JobData.cs	(revision 6717)
@@ -0,0 +1,38 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.Hive.DataTransfer {
+  [DataContract]
+  [Serializable]
+  public class JobData {
+    [DataMember]
+    public Guid JobId { get; set; }
+    [DataMember]
+    public byte[] Data { get; set; }
+    [DataMember]
+    public DateTime LastUpdate { get; set; }
+
+    public JobData() { }
+  }
+}
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/DataTransfer/JobState.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/DataTransfer/JobState.cs	(revision 6717)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/DataTransfer/JobState.cs	(revision 6717)
@@ -0,0 +1,92 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+
+namespace HeuristicLab.Services.Hive.DataTransfer {
+  [Serializable]
+  public enum JobState {
+    /// <summary>
+    /// A job is offline as long as he is not yet submitted to the hive
+    /// </summary>
+    Offline,
+
+    /// <summary>
+    /// Job is waiting to be calculated
+    /// </summary>
+    Waiting,
+
+    /// <summary>
+    /// Job is beeing transferred
+    /// </summary>
+    Transferring,
+
+    /// <summary>
+    /// Job is actively calculated on a Slave
+    /// </summary>
+    Calculating,
+
+    /// <summary>
+    /// Job is paused, will not be picked up by slaves
+    /// </summary>
+    Paused,
+
+    /// <summary>
+    /// Job as finished and is ready to be collected by the Client
+    /// </summary>
+    Finished,
+
+    /// <summary>
+    /// Job is aborted and result can be collected by the Client
+    /// </summary>
+    Aborted,
+
+    /// <summary>
+    /// Job as been aborted due to an error. Results are ready to be collected
+    /// </summary>
+    Failed
+  };
+
+  public static class JobStateExtensions {
+    /// <summary>
+    /// This job is not yet done
+    /// </summary>
+    public static bool IsActive(this JobState jobState) {
+      return !jobState.IsDone();
+    }
+
+    /// <summary>
+    /// This job is Waiting
+    /// </summary>
+    public static bool IsWaiting(this JobState jobState) {
+      return jobState == JobState.Waiting;
+    }
+
+    /// <summary>
+    /// This job is Finished || Failed || Aborted
+    /// </summary>
+    public static bool IsDone(this JobState jobState) {
+      return jobState == JobState.Finished ||
+        jobState == JobState.Aborted ||
+        jobState == JobState.Failed;
+    }
+  }
+}
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/DataTransfer/LightweightJob.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/DataTransfer/LightweightJob.cs	(revision 6717)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/DataTransfer/LightweightJob.cs	(revision 6717)
@@ -0,0 +1,62 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.Hive.DataTransfer {
+  [DataContract]
+  [Serializable]
+  public class LightweightJob : HiveItem {
+    [DataMember]
+    public TimeSpan ExecutionTime { get; set; }
+    [DataMember]
+    public Guid? ParentJobId { get; set; }
+    [DataMember]
+    public List<StateLog> StateLog { get; set; }
+    [DataMember]
+    public JobState State { get; set; }
+    [DataMember]
+    public Command? Command { get; set; }
+    [DataMember]
+    public DateTime LastJobDataUpdate { get; set; }
+
+    public StateLog CurrentStateLog { get { return StateLog.LastOrDefault(); } }
+    public DateTime? DateCreated { get { return StateLog.Count > 0 ? new DateTime?(StateLog.First().DateTime) : null; } }
+    public DateTime? DateFinished { get { return (StateLog.Count > 0 && CurrentStateLog.State == JobState.Finished) ? new DateTime?(CurrentStateLog.DateTime) : null; } }
+
+    public LightweightJob() {
+      StateLog = new List<DataTransfer.StateLog>();
+    }
+
+    public LightweightJob(Job job) {
+      this.Id = job.Id;
+      this.ExecutionTime = job.ExecutionTime;
+      this.ParentJobId = job.ParentJobId;
+      this.StateLog = new List<StateLog>(job.StateLog);
+      this.State = job.State;
+      this.Command = job.Command;
+      this.LastJobDataUpdate = job.LastJobDataUpdate;
+    }
+  }
+}
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/DataTransfer/NamedHiveItem.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/DataTransfer/NamedHiveItem.cs	(revision 6717)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/DataTransfer/NamedHiveItem.cs	(revision 6717)
@@ -0,0 +1,34 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.Hive.DataTransfer {
+  [DataContract]
+  public abstract class NamedHiveItem : HiveItem {
+    [DataMember]
+    public string Name { get; set; }
+    [DataMember]
+    public string Description { get; set; }
+
+    protected NamedHiveItem() { }
+  }
+}
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/DataTransfer/Permission.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/DataTransfer/Permission.cs	(revision 6717)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/DataTransfer/Permission.cs	(revision 6717)
@@ -0,0 +1,39 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Services.Hive.DataTransfer {
+  public enum Permission {
+    /// <summary>
+    /// User is not allowed to access
+    /// </summary>
+    NotAllowed,
+
+    /// <summary>
+    /// User can only download and view experiments
+    /// </summary>
+    Read,
+
+    /// <summary>
+    /// User can pause, stop, restart, delete experiment. can also grant other 
+    /// </summary>
+    Full
+  }
+}
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/DataTransfer/Plugin.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/DataTransfer/Plugin.cs	(revision 6717)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/DataTransfer/Plugin.cs	(revision 6717)
@@ -0,0 +1,43 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.Hive.DataTransfer {
+  [DataContract]
+  [Serializable]
+  public class Plugin : NamedHiveItem {
+    [DataMember]
+    public Version Version { get; set; }
+
+    [DataMember]
+    public Guid UserId { get; set; }
+
+    [DataMember]
+    public DateTime DateCreated { get; set; }
+
+    [DataMember]
+    public byte[] Hash { get; set; }
+
+    public Plugin() { }
+  }
+}
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/DataTransfer/PluginData.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/DataTransfer/PluginData.cs	(revision 6717)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/DataTransfer/PluginData.cs	(revision 6717)
@@ -0,0 +1,38 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.Hive.DataTransfer {
+  [Serializable]
+  [DataContract]
+  public class PluginData : HiveItem {
+    [DataMember]
+    public Guid PluginId { get; set; }
+    [DataMember]
+    public byte[] Data { get; set; }
+    [DataMember]
+    public String FileName { get; set; }
+
+    public PluginData() { }
+  }
+}
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/DataTransfer/Resource.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/DataTransfer/Resource.cs	(revision 6717)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/DataTransfer/Resource.cs	(revision 6717)
@@ -0,0 +1,34 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.Hive.DataTransfer {
+  [DataContract]
+  [Serializable]
+  public class Resource : NamedHiveItem {
+    [DataMember]
+    public Guid? ParentResourceId { get; set; }
+
+    public Resource() { }
+  }
+}
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/DataTransfer/Slave.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/DataTransfer/Slave.cs	(revision 6717)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/DataTransfer/Slave.cs	(revision 6717)
@@ -0,0 +1,64 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.Hive.DataTransfer {
+  public enum CpuArchitecture {
+    x86, x64
+  }
+
+  [DataContract]
+  [Serializable]
+  public class Slave : Resource {
+    [DataMember]
+    public int? Cores { get; set; }
+    [DataMember]
+    public int? FreeCores { get; set; }
+    [DataMember]
+    public int? CpuSpeed { get; set; } // MHz
+    [DataMember]
+    public CpuArchitecture CpuArchitecture { get; set; }
+    [DataMember]
+    public int? Memory { get; set; } // MB
+    [DataMember]
+    public int? FreeMemory { get; set; } // MB
+    [DataMember]
+    public string OperatingSystem { get; set; }
+    [DataMember]
+    public SlaveState SlaveState { get; set; }
+    [DataMember]
+    public bool IsAllowedToCalculate { get; set; }
+    [DataMember]
+    public DateTime? LastHeartbeat { get; set; }
+    [DataMember]
+    public double CpuUtilization { get; set; }
+
+    public Slave() {
+      SlaveState = DataTransfer.SlaveState.Idle;
+    }
+
+    public override string ToString() {
+      return string.Format("Cores: {0}, FreeCores: {1}", Cores, FreeCores);
+    }
+  }
+}
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/DataTransfer/SlaveGroup.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/DataTransfer/SlaveGroup.cs	(revision 6717)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/DataTransfer/SlaveGroup.cs	(revision 6717)
@@ -0,0 +1,29 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.Hive.DataTransfer {
+  [DataContract]
+  public class SlaveGroup : Resource {
+    public SlaveGroup() { }
+  }
+}
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/DataTransfer/SlaveState.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/DataTransfer/SlaveState.cs	(revision 6717)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/DataTransfer/SlaveState.cs	(revision 6717)
@@ -0,0 +1,29 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+
+namespace HeuristicLab.Services.Hive.DataTransfer {
+  public enum SlaveState {
+    Idle,
+    Calculating,
+    Offline
+  };
+}
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/DataTransfer/SlaveStatistics.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/DataTransfer/SlaveStatistics.cs	(revision 6717)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/DataTransfer/SlaveStatistics.cs	(revision 6717)
@@ -0,0 +1,42 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.Hive.DataTransfer {
+  [DataContract]
+  [Serializable]
+  public class SlaveStatistics : HiveItem {
+    [DataMember]
+    public Guid SlaveId { get; set; }
+    [DataMember]
+    public int Cores { get; set; }
+    [DataMember]
+    public int FreeCores { get; set; }
+    [DataMember]
+    public int Memory { get; set; }
+    [DataMember]
+    public int FreeMemory { get; set; }
+    [DataMember]
+    public double CpuUtilization { get; set; }
+  }
+}
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/DataTransfer/StateLog.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/DataTransfer/StateLog.cs	(revision 6717)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/DataTransfer/StateLog.cs	(revision 6717)
@@ -0,0 +1,44 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.Hive.DataTransfer {
+  [DataContract]
+  [Serializable]
+  public class StateLog : HiveItem {
+    [DataMember]
+    public DateTime DateTime { get; set; }
+    [DataMember]
+    public Guid? UserId { get; set; }
+    [DataMember]
+    public Guid? SlaveId { get; set; }
+    [DataMember]
+    public string Exception { get; set; }
+    [DataMember]
+    public JobState State { get; set; }
+    [DataMember]
+    public Guid JobId { get; set; }
+
+    public StateLog() { }
+  }
+}
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/DataTransfer/Statistics.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/DataTransfer/Statistics.cs	(revision 6717)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/DataTransfer/Statistics.cs	(revision 6717)
@@ -0,0 +1,39 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.Hive.DataTransfer {
+  [DataContract]
+  [Serializable]
+  public class Statistics : HiveItem {
+    [DataMember]
+    public DateTime TimeStamp { get; set; }
+    [DataMember]
+    public IEnumerable<UserStatistics> UserStatistics { get; set; }
+    [DataMember]
+    public IEnumerable<SlaveStatistics> SlaveStatistics { get; set; }
+
+    public Statistics() { }
+  }
+}
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/DataTransfer/UserStatistics.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/DataTransfer/UserStatistics.cs	(revision 6717)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/DataTransfer/UserStatistics.cs	(revision 6717)
@@ -0,0 +1,40 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.Hive.DataTransfer {
+  [DataContract]
+  [Serializable]
+  public class UserStatistics : HiveItem {
+    [DataMember]
+    public Guid UserId { get; set; }
+    [DataMember]
+    public int UsedCores { get; set; }
+    [DataMember]
+    public TimeSpan ExecutionTime { get; set; }
+    [DataMember]
+    public TimeSpan ExecutionTimeFinishedJobs { get; set; }
+    [DataMember]
+    public TimeSpan StartToEndTime { get; set; }
+  }
+}
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/HeuristicLab.Services.Hive-3.3.csproj
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/HeuristicLab.Services.Hive-3.3.csproj	(revision 6716)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/HeuristicLab.Services.Hive-3.3.csproj	(revision 6717)
@@ -92,4 +92,5 @@
     <Reference Include="System.Data.Linq" />
     <Reference Include="System.Drawing" />
+    <Reference Include="System.Runtime.Serialization" />
     <Reference Include="System.ServiceModel" />
     <Reference Include="System.Transactions" />
@@ -103,4 +104,29 @@
   </ItemGroup>
   <ItemGroup>
+    <Compile Include="Convert.cs" />
+    <Compile Include="DataTransfer\Command.cs" />
+    <Compile Include="DataTransfer\Downtime.cs" />
+    <Compile Include="DataTransfer\Heartbeat.cs" />
+    <Compile Include="DataTransfer\HiveExperiment.cs" />
+    <Compile Include="DataTransfer\HiveExperimentPermission.cs" />
+    <Compile Include="DataTransfer\HiveItem.cs" />
+    <Compile Include="DataTransfer\Job.cs" />
+    <Compile Include="DataTransfer\JobData.cs" />
+    <Compile Include="DataTransfer\JobState.cs" />
+    <Compile Include="DataTransfer\LightweightJob.cs" />
+    <Compile Include="DataTransfer\NamedHiveItem.cs" />
+    <Compile Include="DataTransfer\Permission.cs" />
+    <Compile Include="DataTransfer\Plugin.cs" />
+    <Compile Include="DataTransfer\PluginData.cs" />
+    <Compile Include="DataTransfer\Resource.cs" />
+    <Compile Include="DataTransfer\Slave.cs" />
+    <Compile Include="DataTransfer\SlaveGroup.cs" />
+    <Compile Include="DataTransfer\SlaveState.cs" />
+    <Compile Include="DataTransfer\SlaveStatistics.cs" />
+    <Compile Include="DataTransfer\StateLog.cs" />
+    <Compile Include="DataTransfer\Statistics.cs" />
+    <Compile Include="DataTransfer\UserStatistics.cs" />
+    <Compile Include="HiveDao.cs" />
+    <Compile Include="Interfaces\IHiveDao.cs" />
     <Compile Include="Interfaces\IUserManager.cs" />
     <Compile Include="Manager\UserManager.cs" />
@@ -118,12 +144,20 @@
     <Compile Include="HiveService.cs" />
     <Compile Include="Interfaces\IAuthorizationManager.cs" />
+    <Compile Include="MessageContainer.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="Properties\Settings.Designer.cs">
+      <DependentUpon>Settings.settings</DependentUpon>
+      <AutoGen>True</AutoGen>
+      <DesignTimeSharedInput>True</DesignTimeSharedInput>
+    </Compile>
+    <Compile Include="ServiceContracts\IHiveService.cs" />
+    <Compile Include="ServiceFaults\PluginAlreadyExistsFault.cs" />
     <Compile Include="ServiceLocator.cs" />
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="..\..\HeuristicLab.Services.Hive.Common\3.3\HeuristicLab.Services.Hive.Common-3.3.csproj">
-      <Project>{14424A16-48D4-445E-80BF-DDF617548BBB}</Project>
-      <Name>HeuristicLab.Services.Hive.Common-3.3</Name>
-    </ProjectReference>
+    <None Include="Properties\Settings.settings">
+      <Generator>PublicSettingsSingleFileGenerator</Generator>
+      <LastGenOutput>Settings.Designer.cs</LastGenOutput>
+    </None>
+  </ItemGroup>
+  <ItemGroup>
     <ProjectReference Include="..\..\HeuristicLab.Services.Hive.DataAccess\3.3\HeuristicLab.Services.Hive.DataAccess-3.3.csproj">
       <Project>{EC2C8109-6E1E-4C88-9A2B-908CFF2EF4AC}</Project>
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/HeuristicLabServicesHivePlugin.cs.frame
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/HeuristicLabServicesHivePlugin.cs.frame	(revision 6716)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/HeuristicLabServicesHivePlugin.cs.frame	(revision 6717)
@@ -32,6 +32,5 @@
   [PluginDependency("HeuristicLab.Common.Resources", "3.3")]
   [PluginDependency("HeuristicLab.Core", "3.3")]
-  [PluginDependency("HeuristicLab.Persistence", "3.3")]
-  [PluginDependency("HeuristicLab.Services.Hive.Common", "3.3")]
+  [PluginDependency("HeuristicLab.Persistence", "3.3")]  
   [PluginDependency("HeuristicLab.Services.Hive.DataAccess", "3.3")]
   public class HeuristicLabServicesHivePlugin : PluginBase {
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/HiveDao.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/HiveDao.cs	(revision 6717)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/HiveDao.cs	(revision 6717)
@@ -0,0 +1,829 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Linq.Expressions;
+using DT = HeuristicLab.Services.Hive.DataTransfer;
+
+namespace HeuristicLab.Services.Hive.DataAccess {
+  public class HiveDao : IHiveDao {
+    public static HiveDataContext CreateContext(bool longRunning = false) {
+      var context = new HiveDataContext(Settings.Default.HeuristicLab_Hive_LinqConnectionString);
+      if (longRunning) context.CommandTimeout = (int)Settings.Default.LongRunningDatabaseCommandTimeout.TotalSeconds;
+      return context;
+    }
+
+    public HiveDao() { }
+
+    #region Job Methods
+    public DT.Job GetJob(Guid id) {
+      using (var db = CreateContext()) {
+        return DT.Convert.ToDto(db.Jobs.SingleOrDefault(x => x.JobId == id));
+      }
+    }
+
+    public IEnumerable<DT.Job> GetJobs(Expression<Func<Job, bool>> predicate) {
+      using (var db = CreateContext()) {
+        return db.Jobs.Where(predicate).Select(x => DT.Convert.ToDto(x)).ToArray();
+      }
+    }
+
+    public Guid AddJob(DT.Job dto) {
+      using (var db = CreateContext()) {
+        var entity = DT.Convert.ToEntity(dto);
+        db.Jobs.InsertOnSubmit(entity);
+        db.SubmitChanges();
+        foreach (Guid pluginId in dto.PluginsNeededIds) {
+          db.RequiredPlugins.InsertOnSubmit(new RequiredPlugin() { JobId = entity.JobId, PluginId = pluginId });
+        }
+        db.SubmitChanges();
+        return entity.JobId;
+      }
+    }
+
+    public void UpdateJob(DT.Job dto) {
+      using (var db = CreateContext()) {
+        var entity = db.Jobs.FirstOrDefault(x => x.JobId == dto.Id);
+        if (entity == null) db.Jobs.InsertOnSubmit(DT.Convert.ToEntity(dto));
+        else DT.Convert.ToEntity(dto, entity);
+        foreach (Guid pluginId in dto.PluginsNeededIds) {
+          if (db.RequiredPlugins.Count(p => p.PluginId == pluginId) == 0) {
+            db.RequiredPlugins.InsertOnSubmit(new RequiredPlugin() { JobId = entity.JobId, PluginId = pluginId });
+          }
+        }
+        db.SubmitChanges();
+      }
+    }
+
+    public void DeleteJob(Guid id) {
+      using (var db = CreateContext()) {
+        var entity = db.Jobs.FirstOrDefault(x => x.JobId == id);
+        if (entity != null) db.Jobs.DeleteOnSubmit(entity);
+        db.SubmitChanges(); // JobData and child jobs are deleted by db-trigger
+      }
+    }
+
+    /// <summary>
+    /// returns all parent jobs which are waiting for their child jobs to finish
+    /// </summary>
+    /// <param name="resourceIds">list of resourceids which for which the jobs should be valid</param>
+    /// <param name="count">maximum number of jobs to return</param>
+    /// <param name="finished">if true, all parent jobs which have FinishWhenChildJobsFinished=true are returned, otherwise only FinishWhenChildJobsFinished=false are returned</param>
+    /// <returns></returns>
+    public IEnumerable<DT.Job> GetParentJobs(IEnumerable<Guid> resourceIds, int count, bool finished) {
+      using (var db = CreateContext()) {
+        var query = from ar in db.AssignedResources
+                    where resourceIds.Contains(ar.ResourceId)
+                       && ar.Job.State == JobState.Waiting
+                       && ar.Job.IsParentJob
+                       && (finished ? ar.Job.FinishWhenChildJobsFinished : !ar.Job.FinishWhenChildJobsFinished)
+                       && (from child in db.Jobs
+                           where child.ParentJobId == ar.Job.JobId
+                           select child.State == JobState.Finished
+                               || child.State == JobState.Aborted
+                               || child.State == JobState.Failed).All(x => x)
+                       && (from child in db.Jobs // avoid returning WaitForChildJobs jobs where no child-jobs exist (yet)
+                           where child.ParentJobId == ar.Job.JobId
+                           select child).Count() > 0
+                    orderby ar.Job.Priority descending, db.Random()
+                    select DT.Convert.ToDto(ar.Job);
+        return count == 0 ? query.ToArray() : query.Take(count).ToArray();
+      }
+    }
+
+    public IEnumerable<DT.Job> GetWaitingJobs(DT.Slave slave, int count) {
+      using (var db = CreateContext()) {
+        var resourceIds = GetParentResources(slave.Id).Select(r => r.Id);
+        var waitingParentJobs = GetParentJobs(resourceIds, count, false);
+        if (count > 0 && waitingParentJobs.Count() >= count) return waitingParentJobs.Take(count).ToArray();
+
+        var query = from ar in db.AssignedResources
+                    where resourceIds.Contains(ar.ResourceId)
+                       && !(ar.Job.IsParentJob && ar.Job.FinishWhenChildJobsFinished)
+                       && ar.Job.State == JobState.Waiting
+                       && ar.Job.CoresNeeded <= slave.FreeCores
+                       && ar.Job.MemoryNeeded <= slave.FreeMemory
+                    orderby ar.Job.Priority descending, db.Random() // take random job to avoid the race condition that occurs when this method is called concurrently (the same job would be returned)
+                    select DT.Convert.ToDto(ar.Job);
+        var waitingJobs = (count == 0 ? query : query.Take(count)).ToArray();
+        return waitingJobs.Union(waitingParentJobs).OrderByDescending(x => x.Priority);
+      }
+    }
+
+    public DT.Job UpdateJobState(Guid jobId, JobState jobState, Guid? slaveId, Guid? userId, string exception) {
+      using (var db = CreateContext()) {
+        var job = db.Jobs.SingleOrDefault(x => x.JobId == jobId);
+        job.State = jobState;
+        db.StateLogs.InsertOnSubmit(new StateLog {
+          JobId = jobId,
+          State = jobState,
+          SlaveId = slaveId,
+          UserId = userId,
+          Exception = exception,
+          DateTime = DateTime.Now
+        });
+        db.SubmitChanges();
+        job = db.Jobs.SingleOrDefault(x => x.JobId == jobId);
+        return DT.Convert.ToDto(job);
+      }
+    }
+    #endregion
+
+    #region JobData Methods
+    public DT.JobData GetJobData(Guid id) {
+      using (var db = CreateContext(true)) {
+        return DT.Convert.ToDto(db.JobDatas.SingleOrDefault(x => x.JobId == id));
+      }
+    }
+
+    public IEnumerable<DT.JobData> GetJobDatas(Expression<Func<JobData, bool>> predicate) {
+      using (var db = CreateContext(true)) {
+        return db.JobDatas.Where(predicate).Select(x => DT.Convert.ToDto(x)).ToArray();
+      }
+    }
+
+    public Guid AddJobData(DT.JobData dto) {
+      using (var db = CreateContext(true)) {
+        var entity = DT.Convert.ToEntity(dto);
+        db.JobDatas.InsertOnSubmit(entity);
+        db.SubmitChanges();
+        return entity.JobId;
+      }
+    }
+
+    public void UpdateJobData(DT.JobData dto) {
+      using (var db = CreateContext(true)) {
+        var entity = db.JobDatas.FirstOrDefault(x => x.JobId == dto.JobId);
+        if (entity == null) db.JobDatas.InsertOnSubmit(DT.Convert.ToEntity(dto));
+        else DT.Convert.ToEntity(dto, entity);
+        db.SubmitChanges();
+      }
+    }
+
+    public void DeleteJobData(Guid id) {
+      using (var db = CreateContext()) {
+        var entity = db.JobDatas.FirstOrDefault(x => x.JobId == id); // check if all the byte[] is loaded into memory here. otherwise work around to delete without loading it
+        if (entity != null) db.JobDatas.DeleteOnSubmit(entity);
+        db.SubmitChanges();
+      }
+    }
+    #endregion
+
+    #region StateLog Methods
+    public DT.StateLog GetStateLog(Guid id) {
+      using (var db = CreateContext()) {
+        return DT.Convert.ToDto(db.StateLogs.SingleOrDefault(x => x.StateLogId == id));
+      }
+    }
+
+    public IEnumerable<DT.StateLog> GetStateLogs(Expression<Func<StateLog, bool>> predicate) {
+      using (var db = CreateContext()) {
+        return db.StateLogs.Where(predicate).Select(x => DT.Convert.ToDto(x)).ToArray();
+      }
+    }
+
+    public Guid AddStateLog(DT.StateLog dto) {
+      using (var db = CreateContext()) {
+        var entity = DT.Convert.ToEntity(dto);
+        db.StateLogs.InsertOnSubmit(entity);
+        db.SubmitChanges();
+        return entity.StateLogId;
+      }
+    }
+
+    public void UpdateStateLog(DT.StateLog dto) {
+      using (var db = CreateContext()) {
+        var entity = db.StateLogs.FirstOrDefault(x => x.StateLogId == dto.Id);
+        if (entity == null) db.StateLogs.InsertOnSubmit(DT.Convert.ToEntity(dto));
+        else DT.Convert.ToEntity(dto, entity);
+        db.SubmitChanges();
+      }
+    }
+
+    public void DeleteStateLog(Guid id) {
+      using (var db = CreateContext()) {
+        var entity = db.StateLogs.FirstOrDefault(x => x.StateLogId == id);
+        if (entity != null) db.StateLogs.DeleteOnSubmit(entity);
+        db.SubmitChanges();
+      }
+    }
+    #endregion
+
+    #region HiveExperiment Methods
+    public DT.HiveExperiment GetHiveExperiment(Guid id) {
+      using (var db = CreateContext()) {
+        return AddStatsToExperiment(db, DT.Convert.ToDto(db.HiveExperiments.SingleOrDefault(x => x.HiveExperimentId == id)));
+      }
+    }
+
+    private DT.HiveExperiment AddStatsToExperiment(HiveDataContext db, DT.HiveExperiment exp) {
+      if (exp == null)
+        return null;
+
+      var jobs = db.Jobs.Where(j => j.HiveExperimentId == exp.Id);
+      exp.JobCount = jobs.Count();
+      exp.CalculatingCount = jobs.Count(j => j.State == JobState.Calculating);
+      exp.FinishedCount = jobs.Count(j => j.State == JobState.Finished);
+      return exp;
+    }
+
+    public IEnumerable<DT.HiveExperiment> GetHiveExperiments(Expression<Func<HiveExperiment, bool>> predicate) {
+      using (var db = CreateContext()) {
+        return db.HiveExperiments.Where(predicate).Select(x => AddStatsToExperiment(db, DT.Convert.ToDto(x))).ToArray();
+      }
+    }
+
+    public Guid AddHiveExperiment(DT.HiveExperiment dto) {
+      using (var db = CreateContext()) {
+        var entity = DT.Convert.ToEntity(dto);
+        db.HiveExperiments.InsertOnSubmit(entity);
+        db.SubmitChanges();
+        return entity.HiveExperimentId;
+      }
+    }
+
+    public void UpdateHiveExperiment(DT.HiveExperiment dto) {
+      using (var db = CreateContext()) {
+        var entity = db.HiveExperiments.FirstOrDefault(x => x.HiveExperimentId == dto.Id);
+        if (entity == null) db.HiveExperiments.InsertOnSubmit(DT.Convert.ToEntity(dto));
+        else DT.Convert.ToEntity(dto, entity);
+        db.SubmitChanges();
+      }
+    }
+
+    public void DeleteHiveExperiment(Guid id) {
+      using (var db = CreateContext()) {
+        var entity = db.HiveExperiments.FirstOrDefault(x => x.HiveExperimentId == id);
+        if (entity != null) db.HiveExperiments.DeleteOnSubmit(entity);
+        db.SubmitChanges();
+      }
+    }
+    #endregion
+
+    #region HiveExperimentPermission Methods
+    public DT.HiveExperimentPermission GetHiveExperimentPermission(Guid hiveExperimentId, Guid grantedUserId) {
+      using (var db = CreateContext()) {
+        return DT.Convert.ToDto(db.HiveExperimentPermissions.SingleOrDefault(x => x.HiveExperimentId == hiveExperimentId && x.GrantedUserId == grantedUserId));
+      }
+    }
+
+    public IEnumerable<DT.HiveExperimentPermission> GetHiveExperimentPermissions(Expression<Func<HiveExperimentPermission, bool>> predicate) {
+      using (var db = CreateContext()) {
+        return db.HiveExperimentPermissions.Where(predicate).Select(x => DT.Convert.ToDto(x)).ToArray();
+      }
+    }
+
+    public void AddHiveExperimentPermission(DT.HiveExperimentPermission dto) {
+      using (var db = CreateContext()) {
+        var entity = DT.Convert.ToEntity(dto);
+        db.HiveExperimentPermissions.InsertOnSubmit(entity);
+        db.SubmitChanges();
+      }
+    }
+
+    public void UpdateHiveExperimentPermission(DT.HiveExperimentPermission dto) {
+      using (var db = CreateContext()) {
+        var entity = db.HiveExperimentPermissions.FirstOrDefault(x => x.HiveExperimentId == dto.HiveExperimentId && x.GrantedUserId == dto.GrantedUserId);
+        if (entity == null) db.HiveExperimentPermissions.InsertOnSubmit(DT.Convert.ToEntity(dto));
+        else DT.Convert.ToEntity(dto, entity);
+        db.SubmitChanges();
+      }
+    }
+
+    public void DeleteHiveExperimentPermission(Guid hiveExperimentId, Guid grantedUserId) {
+      using (var db = CreateContext()) {
+        var entity = db.HiveExperimentPermissions.FirstOrDefault(x => x.HiveExperimentId == hiveExperimentId && x.GrantedUserId == grantedUserId);
+        if (entity != null) db.HiveExperimentPermissions.DeleteOnSubmit(entity);
+        db.SubmitChanges();
+      }
+    }
+
+    /// <summary>
+    /// Sets the permissions for a experiment. makes sure that only one permission per user exists.
+    /// </summary>
+    public void SetHiveExperimentPermission(Guid hiveExperimentId, Guid grantedByUserId, Guid grantedUserId, Permission permission) {
+      using (var db = CreateContext()) {
+        HiveExperimentPermission hiveExperimentPermission = db.HiveExperimentPermissions.SingleOrDefault(x => x.HiveExperimentId == hiveExperimentId && x.GrantedUserId == grantedUserId);
+        if (hiveExperimentPermission != null) {
+          if (permission == Permission.NotAllowed) {
+            // not allowed, delete
+            db.HiveExperimentPermissions.DeleteOnSubmit(hiveExperimentPermission);
+          } else {
+            // update
+            hiveExperimentPermission.Permission = permission;
+            hiveExperimentPermission.GrantedByUserId = grantedByUserId; // update grantedByUserId, always the last "granter" is stored
+          }
+        } else {
+          // insert
+          if (permission != Permission.NotAllowed) {
+            hiveExperimentPermission = new HiveExperimentPermission() { HiveExperimentId = hiveExperimentId, GrantedByUserId = grantedByUserId, GrantedUserId = grantedUserId, Permission = permission };
+            db.HiveExperimentPermissions.InsertOnSubmit(hiveExperimentPermission);
+          }
+        }
+        db.SubmitChanges();
+      }
+    }
+    #endregion
+
+    #region Plugin Methods
+    public DT.Plugin GetPlugin(Guid id) {
+      using (var db = CreateContext()) {
+        return DT.Convert.ToDto(db.Plugins.SingleOrDefault(x => x.PluginId == id));
+      }
+    }
+
+    public IEnumerable<DT.Plugin> GetPlugins(Expression<Func<Plugin, bool>> predicate) {
+      using (var db = CreateContext()) {
+        return db.Plugins.Where(predicate).Select(x => DT.Convert.ToDto(x)).ToArray();
+      }
+    }
+
+    public Guid AddPlugin(DT.Plugin dto) {
+      using (var db = CreateContext()) {
+        var entity = DT.Convert.ToEntity(dto);
+        db.Plugins.InsertOnSubmit(entity);
+        db.SubmitChanges();
+        return entity.PluginId;
+      }
+    }
+
+    public void UpdatePlugin(DT.Plugin dto) {
+      using (var db = CreateContext()) {
+        var entity = db.Plugins.FirstOrDefault(x => x.PluginId == dto.Id);
+        if (entity == null) db.Plugins.InsertOnSubmit(DT.Convert.ToEntity(dto));
+        else DT.Convert.ToEntity(dto, entity);
+        db.SubmitChanges();
+      }
+    }
+
+    public void DeletePlugin(Guid id) {
+      using (var db = CreateContext()) {
+        var entity = db.Plugins.FirstOrDefault(x => x.PluginId == id);
+        if (entity != null) db.Plugins.DeleteOnSubmit(entity);
+        db.SubmitChanges();
+      }
+    }
+    #endregion
+
+    #region PluginData Methods
+    public DT.PluginData GetPluginData(Guid id) {
+      using (var db = CreateContext()) {
+        return DT.Convert.ToDto(db.PluginDatas.SingleOrDefault(x => x.PluginDataId == id));
+      }
+    }
+
+    public IEnumerable<DT.PluginData> GetPluginDatas(Expression<Func<PluginData, bool>> predicate) {
+      using (var db = CreateContext()) {
+        return db.PluginDatas.Where(predicate).Select(x => DT.Convert.ToDto(x)).ToArray();
+      }
+    }
+
+    public Guid AddPluginData(DT.PluginData dto) {
+      using (var db = CreateContext()) {
+        var entity = DT.Convert.ToEntity(dto);
+        db.PluginDatas.InsertOnSubmit(entity);
+        db.SubmitChanges();
+        return entity.PluginDataId;
+      }
+    }
+
+    public void UpdatePluginData(DT.PluginData dto) {
+      using (var db = CreateContext()) {
+        var entity = db.PluginDatas.FirstOrDefault(x => x.PluginId == dto.PluginId);
+        if (entity == null) db.PluginDatas.InsertOnSubmit(DT.Convert.ToEntity(dto));
+        else DT.Convert.ToEntity(dto, entity);
+        db.SubmitChanges();
+      }
+    }
+
+    public void DeletePluginData(Guid id) {
+      using (var db = CreateContext()) {
+        var entity = db.PluginDatas.FirstOrDefault(x => x.PluginDataId == id);
+        if (entity != null) db.PluginDatas.DeleteOnSubmit(entity);
+        db.SubmitChanges();
+      }
+    }
+    #endregion
+
+    #region Slave Methods
+    public DT.Slave GetSlave(Guid id) {
+      using (var db = CreateContext()) {
+        return DT.Convert.ToDto(db.Resources.OfType<Slave>().SingleOrDefault(x => x.ResourceId == id));
+      }
+    }
+
+    public IEnumerable<DT.Slave> GetSlaves(Expression<Func<Slave, bool>> predicate) {
+      using (var db = CreateContext()) {
+        return db.Resources.OfType<Slave>().Where(predicate).Select(x => DT.Convert.ToDto(x)).ToArray();
+      }
+    }
+
+    public Guid AddSlave(DT.Slave dto) {
+      using (var db = CreateContext()) {
+        var entity = DT.Convert.ToEntity(dto);
+        db.Resources.InsertOnSubmit(entity);
+        db.SubmitChanges();
+        return entity.ResourceId;
+      }
+    }
+
+    public void UpdateSlave(DT.Slave dto) {
+      using (var db = CreateContext()) {
+        var entity = db.Resources.OfType<Slave>().FirstOrDefault(x => x.ResourceId == dto.Id);
+        if (entity == null) db.Resources.InsertOnSubmit(DT.Convert.ToEntity(dto));
+        else DT.Convert.ToEntity(dto, entity);
+        db.SubmitChanges();
+      }
+    }
+
+    public void DeleteSlave(Guid id) {
+      using (var db = CreateContext()) {
+        var entity = db.Resources.OfType<Slave>().FirstOrDefault(x => x.ResourceId == id);
+        if (entity != null) db.Resources.DeleteOnSubmit(entity);
+        db.SubmitChanges();
+      }
+    }
+    #endregion
+
+    #region SlaveGroup Methods
+    public DT.SlaveGroup GetSlaveGroup(Guid id) {
+      using (var db = CreateContext()) {
+        return DT.Convert.ToDto(db.Resources.OfType<SlaveGroup>().SingleOrDefault(x => x.ResourceId == id));
+      }
+    }
+
+    public IEnumerable<DT.SlaveGroup> GetSlaveGroups(Expression<Func<SlaveGroup, bool>> predicate) {
+      using (var db = CreateContext()) {
+        return db.Resources.OfType<SlaveGroup>().Where(predicate).Select(x => DT.Convert.ToDto(x)).ToArray();
+      }
+    }
+
+    public Guid AddSlaveGroup(DT.SlaveGroup dto) {
+      using (var db = CreateContext()) {
+        if (dto.Id == Guid.Empty)
+          dto.Id = Guid.NewGuid();
+        var entity = DT.Convert.ToEntity(dto);
+        db.Resources.InsertOnSubmit(entity);
+        db.SubmitChanges();
+        return entity.ResourceId;
+      }
+    }
+
+    public void UpdateSlaveGroup(DT.SlaveGroup dto) {
+      using (var db = CreateContext()) {
+        var entity = db.Resources.OfType<SlaveGroup>().FirstOrDefault(x => x.ResourceId == dto.Id);
+        if (entity == null) db.Resources.InsertOnSubmit(DT.Convert.ToEntity(dto));
+        else DT.Convert.ToEntity(dto, entity);
+        db.SubmitChanges();
+      }
+    }
+
+    public void DeleteSlaveGroup(Guid id) {
+      using (var db = CreateContext()) {
+        var entity = db.Resources.OfType<SlaveGroup>().FirstOrDefault(x => x.ResourceId == id);
+        if (entity != null) {
+          if (db.Resources.Where(r => r.ParentResourceId == id).Count() > 0) {
+            throw new InvalidOperationException("Cannot delete SlaveGroup as long as there are Slaves in the group");
+          }
+          db.Resources.DeleteOnSubmit(entity);
+        }
+        db.SubmitChanges();
+      }
+    }
+    #endregion
+
+    #region Resource Methods
+    public DT.Resource GetResource(Guid id) {
+      using (var db = CreateContext()) {
+        return DT.Convert.ToDto(db.Resources.SingleOrDefault(x => x.ResourceId == id));
+      }
+    }
+
+    public IEnumerable<DT.Resource> GetResources(Expression<Func<Resource, bool>> predicate) {
+      using (var db = CreateContext()) {
+        return db.Resources.Where(predicate).Select(x => DT.Convert.ToDto(x)).ToArray();
+      }
+    }
+
+    public Guid AddResource(DT.Resource dto) {
+      using (var db = CreateContext()) {
+        var entity = DT.Convert.ToEntity(dto);
+        db.Resources.InsertOnSubmit(entity);
+        db.SubmitChanges();
+        return entity.ResourceId;
+      }
+    }
+
+    public void UpdateResource(DT.Resource dto) {
+      using (var db = CreateContext()) {
+        var entity = db.Resources.FirstOrDefault(x => x.ResourceId == dto.Id);
+        if (entity == null) db.Resources.InsertOnSubmit(DT.Convert.ToEntity(dto));
+        else DT.Convert.ToEntity(dto, entity);
+        db.SubmitChanges();
+      }
+    }
+
+    public void DeleteResource(Guid id) {
+      using (var db = CreateContext()) {
+        var entity = db.Resources.FirstOrDefault(x => x.ResourceId == id);
+        if (entity != null) db.Resources.DeleteOnSubmit(entity);
+        db.SubmitChanges();
+      }
+    }
+
+    public void AssignJobToResource(Guid jobId, Guid resourceId) {
+      using (var db = CreateContext()) {
+        var job = db.Jobs.Where(x => x.JobId == jobId).Single();
+        job.AssignedResources.Add(new AssignedResource() { JobId = jobId, ResourceId = resourceId });
+        db.SubmitChanges();
+      }
+    }
+
+    public IEnumerable<DT.Resource> GetAssignedResources(Guid jobId) {
+      using (var db = CreateContext()) {
+        var job = db.Jobs.Where(x => x.JobId == jobId).Single();
+        return job.AssignedResources.Select(x => DT.Convert.ToDto(x.Resource)).ToArray();
+      }
+    }
+
+    /// <summary>
+    /// Returns all parent resources of a resource (the given resource is also added)
+    /// </summary>
+    public IEnumerable<DT.Resource> GetParentResources(Guid resourceId) {
+      using (var db = CreateContext()) {
+        var resources = new List<Resource>();
+        CollectParentResources(resources, db.Resources.Where(r => r.ResourceId == resourceId).Single());
+        return resources.Select(r => DT.Convert.ToDto(r)).ToArray();
+      }
+    }
+
+    private void CollectParentResources(List<Resource> resources, Resource resource) {
+      if (resource == null) return;
+      resources.Add(resource);
+      CollectParentResources(resources, resource.ParentResource);
+    }
+
+    /// <summary>
+    /// Returns all child resources of a resource (without the given resource)
+    /// </summary>
+    public IEnumerable<DT.Resource> GetChildResources(Guid resourceId) {
+      using (var db = CreateContext()) {
+        var childs = new List<DT.Resource>();
+        foreach (var child in db.Resources.Where(x => x.ParentResourceId == resourceId)) {
+          childs.Add(DT.Convert.ToDto(child));
+          childs.AddRange(GetChildResources(child.ResourceId));
+        }
+        return childs;
+      }
+    }
+
+    public IEnumerable<DT.Job> GetJobsByResourceId(Guid resourceId) {
+      using (var db = CreateContext()) {
+        var resources = GetChildResources(resourceId).Select(x => x.Id).ToList();
+        resources.Add(resourceId);
+
+        var jobs = db.Jobs.Where(j =>
+          j.State == JobState.Calculating &&
+          j.StateLogs.OrderByDescending(x => x.DateTime).First().SlaveId.HasValue &&
+          resources.Contains(j.StateLogs.OrderByDescending(x => x.DateTime).First().SlaveId.Value));
+        return jobs.Select(j => DT.Convert.ToDto(j)).ToArray();
+      }
+    }
+    #endregion
+
+    #region Authorization Methods
+    public Permission GetPermissionForJob(Guid jobId, Guid userId) {
+      using (var db = CreateContext()) {
+        return GetPermissionForExperiment(GetExperimentForJob(jobId), userId);
+      }
+    }
+
+    public Permission GetPermissionForExperiment(Guid experimentId, Guid userId) {
+      using (var db = CreateContext()) {
+        HiveExperiment hiveExperiment = db.HiveExperiments.SingleOrDefault(x => x.HiveExperimentId == experimentId);
+        if (hiveExperiment == null) return Permission.NotAllowed;
+        if (hiveExperiment.OwnerUserId == userId) return Permission.Full;
+        HiveExperimentPermission permission = db.HiveExperimentPermissions.SingleOrDefault(p => p.HiveExperimentId == experimentId && p.GrantedUserId == userId);
+        return permission != null ? permission.Permission : Permission.NotAllowed;
+      }
+    }
+
+    public Guid GetExperimentForJob(Guid jobId) {
+      using (var db = CreateContext()) {
+        return db.Jobs.Single(j => j.JobId == jobId).HiveExperimentId;
+      }
+    }
+    #endregion
+
+    #region Lifecycle Methods
+    public DateTime GetLastCleanup() {
+      using (var db = CreateContext()) {
+        var entity = db.Lifecycles.SingleOrDefault();
+        return entity != null ? entity.LastCleanup : DateTime.MinValue;
+      }
+    }
+
+    public void SetLastCleanup(DateTime datetime) {
+      using (var db = CreateContext()) {
+        var entity = db.Lifecycles.SingleOrDefault();
+        if (entity != null) {
+          entity.LastCleanup = datetime;
+        } else {
+          entity = new Lifecycle();
+          entity.LifecycleId = 0; // always only one entry with ID:0
+          entity.LastCleanup = datetime;
+          db.Lifecycles.InsertOnSubmit(entity);
+        }
+        db.SubmitChanges();
+      }
+    }
+    #endregion
+
+    #region Downtime Methods
+    public DT.Downtime GetDowntime(Guid id) {
+      using (var db = CreateContext()) {
+        return DT.Convert.ToDto(db.Downtimes.SingleOrDefault(x => x.DowntimeId == id));
+      }
+    }
+
+    public IEnumerable<DT.Downtime> GetDowntimes(Expression<Func<Downtime, bool>> predicate) {
+      using (var db = CreateContext()) {
+        return db.Downtimes.Where(predicate).Select(x => DT.Convert.ToDto(x)).ToArray();
+      }
+    }
+
+    public Guid AddDowntime(DT.Downtime dto) {
+      using (var db = CreateContext()) {
+        var entity = DT.Convert.ToEntity(dto);
+        db.Downtimes.InsertOnSubmit(entity);
+        db.SubmitChanges();
+        return entity.DowntimeId;
+      }
+    }
+
+    public void UpdateDowntime(DT.Downtime dto) {
+      using (var db = CreateContext()) {
+        var entity = db.Downtimes.FirstOrDefault(x => x.DowntimeId == dto.Id);
+        if (entity == null) db.Downtimes.InsertOnSubmit(DT.Convert.ToEntity(dto));
+        else DT.Convert.ToEntity(dto, entity);
+        db.SubmitChanges();
+      }
+    }
+
+    public void DeleteDowntime(Guid id) {
+      using (var db = CreateContext()) {
+        var entity = db.Downtimes.FirstOrDefault(x => x.DowntimeId == id);
+        if (entity != null) db.Downtimes.DeleteOnSubmit(entity);
+        db.SubmitChanges();
+      }
+    }
+    #endregion
+
+    #region Statistics Methods
+    public DT.Statistics GetStatistic(Guid id) {
+      using (var db = CreateContext()) {
+        return DT.Convert.ToDto(db.Statistics.SingleOrDefault(x => x.StatisticsId == id));
+      }
+    }
+
+    public IEnumerable<DT.Statistics> GetStatistics(Expression<Func<Statistics, bool>> predicate) {
+      using (var db = CreateContext()) {
+        return db.Statistics.Where(predicate).Select(x => DT.Convert.ToDto(x)).ToArray();
+      }
+    }
+
+    public Guid AddStatistics(DT.Statistics dto) {
+      using (var db = CreateContext()) {
+        var entity = DT.Convert.ToEntity(dto);
+        db.Statistics.InsertOnSubmit(entity);
+        db.SubmitChanges();
+        foreach (var slaveStat in dto.SlaveStatistics) {
+          slaveStat.Id = entity.StatisticsId;
+          db.SlaveStatistics.InsertOnSubmit(DT.Convert.ToEntity(slaveStat));
+        }
+        foreach (var userStat in dto.UserStatistics) {
+          userStat.Id = entity.StatisticsId;
+          db.UserStatistics.InsertOnSubmit(DT.Convert.ToEntity(userStat));
+        }
+        db.SubmitChanges();
+        return entity.StatisticsId;
+      }
+    }
+
+    public void DeleteStatistics(Guid id) {
+      using (var db = CreateContext()) {
+        var entity = db.Statistics.FirstOrDefault(x => x.StatisticsId == id);
+        if (entity != null) db.Statistics.DeleteOnSubmit(entity);
+        db.SubmitChanges();
+      }
+    }
+
+    public List<DT.UserStatistics> GetUserStatistics() {
+      using (var db = CreateContext()) {
+        var userStats = new Dictionary<Guid, DT.UserStatistics>();
+
+        var usedCoresByUser = from job in db.Jobs
+                              where job.State == JobState.Calculating
+                              group job by job.HiveExperiment.OwnerUserId into g
+                              select new { UserId = g.Key, UsedCores = g.Count() };
+
+        foreach (var item in usedCoresByUser) {
+          if (!userStats.ContainsKey(item.UserId)) {
+            userStats.Add(item.UserId, new DT.UserStatistics() { UserId = item.UserId });
+          }
+          userStats[item.UserId].UsedCores += item.UsedCores;
+        }
+
+        var executionTimesByUser = from job in db.Jobs
+                                   group job by job.HiveExperiment.OwnerUserId into g
+                                   select new { UserId = g.Key, ExecutionTime = TimeSpan.FromMilliseconds(g.Select(x => x.ExecutionTimeMs).Sum()) };
+        foreach (var item in executionTimesByUser) {
+          if (!userStats.ContainsKey(item.UserId)) {
+            userStats.Add(item.UserId, new DT.UserStatistics() { UserId = item.UserId });
+          }
+          userStats[item.UserId].ExecutionTime += item.ExecutionTime;
+        }
+
+        // execution times only of finished jobs - necessary to compute efficieny
+        var executionTimesFinishedJobs = from job in db.Jobs
+                                         where job.State == JobState.Finished
+                                         group job by job.HiveExperiment.OwnerUserId into g
+                                         select new { UserId = g.Key, ExecutionTimeFinishedJobs = TimeSpan.FromMilliseconds(g.Select(x => x.ExecutionTimeMs).Sum()) };
+
+        foreach (var item in executionTimesFinishedJobs) {
+          if (!userStats.ContainsKey(item.UserId)) {
+            userStats.Add(item.UserId, new DT.UserStatistics() { UserId = item.UserId });
+          }
+          userStats[item.UserId].ExecutionTimeFinishedJobs += item.ExecutionTimeFinishedJobs;
+        }
+
+        // start to end times only of finished jobs - necessary to compute efficiency
+        var startToEndTimesFinishedJobs = from job in db.Jobs
+                                          where job.State == JobState.Finished
+                                          group job by job.HiveExperiment.OwnerUserId into g
+                                          select new {
+                                            UserId = g.Key,
+                                            StartToEndTime = new TimeSpan(g.Select(x => x.StateLogs.OrderByDescending(sl => sl.DateTime).First().DateTime - x.StateLogs.OrderBy(sl => sl.DateTime).First().DateTime).Sum(ts => ts.Ticks))
+                                          };
+        foreach (var item in startToEndTimesFinishedJobs) {
+          if (!userStats.ContainsKey(item.UserId)) {
+            userStats.Add(item.UserId, new DT.UserStatistics() { UserId = item.UserId });
+          }
+          userStats[item.UserId].StartToEndTime += item.StartToEndTime;
+        }
+
+        // also consider executiontimes of DeletedJobStats 
+        var deletedJobsExecutionTimesByUsers = from del in db.DeletedJobStatistics
+                                               group del by del.UserId into g
+                                               select new {
+                                                 UserId = g.Key,
+                                                 ExecutionTime = TimeSpan.FromMilliseconds(g.Select(x => x.ExecutionTimeMs).Sum()),
+                                                 ExecutionTimeFinishedJobs = TimeSpan.FromMilliseconds(g.Select(x => x.ExecutionTimeMsFinishedJobs).Sum()),
+                                                 StartToEndTime = TimeSpan.FromMilliseconds(g.Select(x => x.StartToEndTimeMs).Sum())
+                                               };
+        foreach (var item in deletedJobsExecutionTimesByUsers) {
+          if (!userStats.ContainsKey(item.UserId)) {
+            userStats.Add(item.UserId, new DT.UserStatistics() { UserId = item.UserId });
+          }
+          userStats[item.UserId].ExecutionTime += item.ExecutionTime;
+          userStats[item.UserId].ExecutionTimeFinishedJobs += item.ExecutionTimeFinishedJobs;
+          userStats[item.UserId].StartToEndTime += item.StartToEndTime;
+        }
+
+        return userStats.Values.ToList();
+      }
+    }
+    #endregion
+
+    #region Helpers
+    private void CollectChildJobs(HiveDataContext db, Guid parentJobId, List<Job> collection) {
+      var jobs = db.Jobs.Where(j => j.ParentJobId == parentJobId);
+      foreach (var job in jobs) {
+        collection.Add(job);
+        if (job.IsParentJob)
+          CollectChildJobs(db, job.JobId, collection);
+      }
+    }
+    #endregion
+  }
+}
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/HiveService.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/HiveService.cs	(revision 6716)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/HiveService.cs	(revision 6717)
@@ -24,7 +24,9 @@
 using System.Linq;
 using System.ServiceModel;
-using HeuristicLab.Services.Hive.Common;
-using HeuristicLab.Services.Hive.Common.DataTransfer;
-using HeuristicLab.Services.Hive.Common.ServiceContracts;
+using HeuristicLab.Services.Hive.DataTransfer;
+using HeuristicLab.Services.Hive.ServiceContracts;
+using DA = HeuristicLab.Services.Hive.DataAccess;
+using DT = HeuristicLab.Services.Hive.DataTransfer;
+
 
 namespace HeuristicLab.Services.Hive {
@@ -36,5 +38,5 @@
   [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall, IgnoreExtensionDataObject = true)]
   public class HiveService : IHiveService {
-    private DataAccess.IHiveDao dao {
+    private IHiveDao dao {
       get { return ServiceLocator.Instance.HiveDao; }
     }
@@ -45,5 +47,5 @@
       get { return ServiceLocator.Instance.AuthorizationManager; }
     }
-    private ITransactionManager trans {
+    private DataAccess.ITransactionManager trans {
       get { return ServiceLocator.Instance.TransactionManager; }
     }
@@ -69,5 +71,5 @@
         }
         dao.AddJobData(jobData);
-        dao.UpdateJobState(job.Id, JobState.Waiting, null, userManager.CurrentUserId, null);
+        dao.UpdateJobState(job.Id, DA.JobState.Waiting, null, userManager.CurrentUserId, null);
         return jobData.JobId;
       }, false, true);
@@ -167,5 +169,5 @@
       author.AuthorizeForJob(jobId, Permission.Full);
       return trans.UseTransaction(() => {
-        Job job = dao.UpdateJobState(jobId, jobState, slaveId, userId, exception);
+        Job job = dao.UpdateJobState(jobId, DataTransfer.Convert.ToEntity(jobState), slaveId, userId, exception);
 
         if (job.Command.HasValue && job.Command.Value == Command.Pause && job.State == JobState.Paused) {
@@ -177,5 +179,5 @@
         } else if (jobState == JobState.Paused && !job.Command.HasValue) {
           // slave paused and uploaded the job (no user-command) -> set waiting.
-          job = dao.UpdateJobState(jobId, JobState.Waiting, slaveId, userId, exception);
+          job = dao.UpdateJobState(jobId, DataTransfer.Convert.ToEntity(JobState.Waiting), slaveId, userId, exception);
         }
 
@@ -188,5 +190,5 @@
       authen.AuthenticateForAnyRole(HiveRoles.Administrator);
       var jobs = trans.UseTransaction(() => dao.GetJobsByResourceId(resourceId));
-      foreach(var job in jobs)
+      foreach (var job in jobs)
         author.AuthorizeForJob(job.Id, Permission.Read);
       return jobs;
@@ -229,5 +231,5 @@
       author.AuthorizeForJob(jobId, Permission.Full);
       trans.UseTransaction(() => {
-        Job job = dao.UpdateJobState(jobId, JobState.Waiting, null, userManager.CurrentUserId, string.Empty);
+        Job job = dao.UpdateJobState(jobId, DA.JobState.Waiting, null, userManager.CurrentUserId, string.Empty);
         job.Command = null;
         dao.UpdateJob(job);
@@ -242,8 +244,8 @@
       var hiveExperiment = dao.GetHiveExperiments(x =>
             x.HiveExperimentId == id
-            && (x.OwnerUserId == userManager.CurrentUserId || x.HiveExperimentPermissions.Count(hep => hep.Permission != Permission.NotAllowed && hep.GrantedUserId == userManager.CurrentUserId) > 0)
+            && (x.OwnerUserId == userManager.CurrentUserId || x.HiveExperimentPermissions.Count(hep => hep.Permission != DA.Permission.NotAllowed && hep.GrantedUserId == userManager.CurrentUserId) > 0)
           ).FirstOrDefault();
       if (hiveExperiment != null) {
-        hiveExperiment.Permission = dao.GetPermissionForExperiment(hiveExperiment.Id, userManager.CurrentUserId);
+        hiveExperiment.Permission = DT.Convert.ToDto(dao.GetPermissionForExperiment(hiveExperiment.Id, userManager.CurrentUserId));
         hiveExperiment.OwnerUsername = userManager.GetUserById(hiveExperiment.OwnerUserId).UserName;
       }
@@ -253,8 +255,8 @@
     public IEnumerable<HiveExperiment> GetHiveExperiments() {
       authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
-      var hiveExperiments = dao.GetHiveExperiments(x => x.OwnerUserId == userManager.CurrentUserId || x.HiveExperimentPermissions.Count(hep => hep.Permission != Permission.NotAllowed && hep.GrantedUserId == userManager.CurrentUserId) > 0);
+      var hiveExperiments = dao.GetHiveExperiments(x => x.OwnerUserId == userManager.CurrentUserId || x.HiveExperimentPermissions.Count(hep => hep.Permission != DA.Permission.NotAllowed && hep.GrantedUserId == userManager.CurrentUserId) > 0);
       foreach (var he in hiveExperiments) {
         author.AuthorizeForExperiment(he.Id, Permission.Read);
-        he.Permission = dao.GetPermissionForExperiment(he.Id, userManager.CurrentUserId);
+        he.Permission = DT.Convert.ToDto(dao.GetPermissionForExperiment(he.Id, userManager.CurrentUserId));
         he.OwnerUsername = userManager.GetUserById(he.OwnerUserId).UserName;
       }
@@ -266,5 +268,5 @@
       var hiveExperiments = dao.GetHiveExperiments(x => true);
       foreach (var he in hiveExperiments) { // no authorization here, since this method is admin-only! (admin is allowed to read all jobs)
-        he.Permission = dao.GetPermissionForExperiment(he.Id, userManager.CurrentUserId);
+        he.Permission = DT.Convert.ToDto(dao.GetPermissionForExperiment(he.Id, userManager.CurrentUserId));
         he.OwnerUsername = userManager.GetUserById(he.OwnerUserId).UserName;
       }
@@ -304,7 +306,7 @@
         HiveExperiment he = dao.GetHiveExperiment(hiveExperimentId);
         if (he == null) throw new FaultException<FaultReason>(new FaultReason("Could not find hiveExperiment with id " + hiveExperimentId));
-        Permission perm = dao.GetPermissionForExperiment(he.Id, userManager.CurrentUserId);
+        Permission perm = DT.Convert.ToDto(dao.GetPermissionForExperiment(he.Id, userManager.CurrentUserId));
         if (perm != Permission.Full) throw new FaultException<FaultReason>(new FaultReason("Not allowed to grant permissions for this experiment"));
-        dao.SetHiveExperimentPermission(hiveExperimentId, userManager.CurrentUserId, grantedUserId, permission);
+        dao.SetHiveExperimentPermission(hiveExperimentId, userManager.CurrentUserId, grantedUserId, DT.Convert.ToEntity(permission));
       });
     }
@@ -315,7 +317,7 @@
         HiveExperiment he = dao.GetHiveExperiment(hiveExperimentId);
         if (he == null) throw new FaultException<FaultReason>(new FaultReason("Could not find hiveExperiment with id " + hiveExperimentId));
-        Permission perm = dao.GetPermissionForExperiment(he.Id, userManager.CurrentUserId);
-        if (perm != Permission.Full) throw new FaultException<FaultReason>(new FaultReason("Not allowed to grant permissions for this experiment"));
-        dao.SetHiveExperimentPermission(hiveExperimentId, userManager.CurrentUserId, grantedUserId, Permission.NotAllowed);
+        DA.Permission perm = dao.GetPermissionForExperiment(he.Id, userManager.CurrentUserId);
+        if (perm != DA.Permission.Full) throw new FaultException<FaultReason>(new FaultReason("Not allowed to grant permissions for this experiment"));
+        dao.SetHiveExperimentPermission(hiveExperimentId, userManager.CurrentUserId, grantedUserId, DA.Permission.NotAllowed);
       });
     }
@@ -323,6 +325,6 @@
       authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
       return trans.UseTransaction(() => {
-        Permission currentUserPermission = dao.GetPermissionForExperiment(hiveExperimentId, userManager.CurrentUserId);
-        if (currentUserPermission != Permission.Full) throw new FaultException<FaultReason>(new FaultReason("Not allowed to list permissions for this experiment"));
+        DA.Permission currentUserPermission = dao.GetPermissionForExperiment(hiveExperimentId, userManager.CurrentUserId);
+        if (currentUserPermission != DA.Permission.Full) throw new FaultException<FaultReason>(new FaultReason("Not allowed to list permissions for this experiment"));
         return dao.GetHiveExperimentPermissions(x => x.HiveExperimentId == hiveExperimentId);
       });
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/Interfaces/IAuthorizationManager.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/Interfaces/IAuthorizationManager.cs	(revision 6716)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/Interfaces/IAuthorizationManager.cs	(revision 6717)
@@ -21,5 +21,6 @@
 
 using System;
-using HeuristicLab.Services.Hive.Common.DataTransfer;
+using HeuristicLab.Services.Hive.DataTransfer;
+
 namespace HeuristicLab.Services.Hive {
   public interface IAuthorizationManager {
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/Interfaces/IHiveDao.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/Interfaces/IHiveDao.cs	(revision 6717)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/Interfaces/IHiveDao.cs	(revision 6717)
@@ -0,0 +1,149 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq.Expressions;
+using HeuristicLab.Services.Hive.DataAccess;
+using DT = HeuristicLab.Services.Hive.DataTransfer;
+
+namespace HeuristicLab.Services.Hive {
+  public interface IHiveDao {
+    #region Job Methods
+    DT.Job GetJob(Guid id);
+    IEnumerable<DT.Job> GetJobs(Expression<Func<Job, bool>> predicate);
+    Guid AddJob(DT.Job dto);
+    void UpdateJob(DT.Job dto);
+    void DeleteJob(Guid id);
+    IEnumerable<DT.Job> GetWaitingJobs(DT.Slave slave, int count);
+    IEnumerable<DT.Job> GetParentJobs(IEnumerable<Guid> resourceIds, int count, bool finished);
+    DT.Job UpdateJobState(Guid jobId, JobState jobState, Guid? slaveId, Guid? userId, string exception);
+    #endregion
+
+    #region JobData Methods
+    DT.JobData GetJobData(Guid id);
+    IEnumerable<DT.JobData> GetJobDatas(Expression<Func<JobData, bool>> predicate);
+    Guid AddJobData(DT.JobData dto);
+    void UpdateJobData(DT.JobData dto);
+    void DeleteJobData(Guid id);
+    #endregion
+
+    #region StateLog Methods
+    DT.StateLog GetStateLog(Guid id);
+    IEnumerable<DT.StateLog> GetStateLogs(Expression<Func<StateLog, bool>> predicate);
+    Guid AddStateLog(DT.StateLog dto);
+    void UpdateStateLog(DT.StateLog dto);
+    void DeleteStateLog(Guid id);
+    #endregion
+
+    #region HiveExperiment Methods
+    DT.HiveExperiment GetHiveExperiment(Guid id);
+    IEnumerable<DT.HiveExperiment> GetHiveExperiments(Expression<Func<HiveExperiment, bool>> predicate);
+    Guid AddHiveExperiment(DT.HiveExperiment dto);
+    void UpdateHiveExperiment(DT.HiveExperiment dto);
+    void DeleteHiveExperiment(Guid id);
+    #endregion
+
+    #region HiveExperimentPermission Methods
+    DT.HiveExperimentPermission GetHiveExperimentPermission(Guid hiveExperimentId, Guid grantedUserId);
+    IEnumerable<DT.HiveExperimentPermission> GetHiveExperimentPermissions(Expression<Func<HiveExperimentPermission, bool>> predicate);
+    void AddHiveExperimentPermission(DT.HiveExperimentPermission dto);
+    void UpdateHiveExperimentPermission(DT.HiveExperimentPermission dto);
+    void DeleteHiveExperimentPermission(Guid hiveExperimentId, Guid grantedUserId);
+    void SetHiveExperimentPermission(Guid hiveExperimentId, Guid grantedByUserId, Guid grantedUserId, Permission permission);
+    #endregion
+
+    #region Plugin Methods
+    DT.Plugin GetPlugin(Guid id);
+    IEnumerable<DT.Plugin> GetPlugins(Expression<Func<Plugin, bool>> predicate);
+    Guid AddPlugin(DT.Plugin dto);
+    void UpdatePlugin(DT.Plugin dto);
+    void DeletePlugin(Guid id);
+    #endregion
+
+    #region PluginData Methods
+    DT.PluginData GetPluginData(Guid id);
+    IEnumerable<DT.PluginData> GetPluginDatas(Expression<Func<PluginData, bool>> predicate);
+    Guid AddPluginData(DT.PluginData dto);
+    void UpdatePluginData(DT.PluginData dto);
+    void DeletePluginData(Guid id);
+    #endregion
+
+    #region Calendar Methods
+    #endregion
+
+    #region Slave Methods
+    DT.Slave GetSlave(Guid id);
+    IEnumerable<DT.Slave> GetSlaves(Expression<Func<Slave, bool>> predicate);
+    Guid AddSlave(DT.Slave dto);
+    void UpdateSlave(DT.Slave dto);
+    void DeleteSlave(Guid id);
+    #endregion
+
+    #region SlaveGroup Methods
+    DT.SlaveGroup GetSlaveGroup(Guid id);
+    IEnumerable<DT.SlaveGroup> GetSlaveGroups(Expression<Func<SlaveGroup, bool>> predicate);
+    Guid AddSlaveGroup(DT.SlaveGroup dto);
+    void UpdateSlaveGroup(DT.SlaveGroup dto);
+    void DeleteSlaveGroup(Guid id);
+    #endregion
+
+    #region Resource Methods
+    DT.Resource GetResource(Guid id);
+    IEnumerable<DT.Resource> GetResources(Expression<Func<Resource, bool>> predicate);
+    Guid AddResource(DT.Resource dto);
+    void UpdateResource(DT.Resource dto);
+    void DeleteResource(Guid id);
+    void AssignJobToResource(Guid jobId, Guid resourceId);
+    IEnumerable<DT.Resource> GetAssignedResources(Guid jobId);
+    IEnumerable<DT.Resource> GetParentResources(Guid resourceId);
+    IEnumerable<DT.Resource> GetChildResources(Guid resourceId);
+    IEnumerable<DT.Job> GetJobsByResourceId(Guid resourceId);
+    #endregion
+
+    #region Authorization Methods
+    Permission GetPermissionForJob(Guid jobId, Guid userId);
+    Permission GetPermissionForExperiment(Guid experimentId, Guid userId);
+    Guid GetExperimentForJob(Guid jobId);
+    #endregion
+
+    #region Lifecycle Methods
+    DateTime GetLastCleanup();
+    void SetLastCleanup(DateTime datetime);
+    #endregion
+
+    #region Downtime Methods
+    DT.Downtime GetDowntime(Guid id);
+    IEnumerable<DT.Downtime> GetDowntimes(Expression<Func<Downtime, bool>> predicate);
+    Guid AddDowntime(DT.Downtime dto);
+    void UpdateDowntime(DT.Downtime dto);
+    void DeleteDowntime(Guid id);
+    #endregion
+
+    #region Statistics Methods
+    DT.Statistics GetStatistic(Guid id);
+    IEnumerable<DT.Statistics> GetStatistics(Expression<Func<Statistics, bool>> predicate);
+    Guid AddStatistics(DT.Statistics dto);
+    void DeleteStatistics(Guid id);
+    List<DT.UserStatistics> GetUserStatistics();
+    #endregion
+  }
+}
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/Manager/AuthorizationManager.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/Manager/AuthorizationManager.cs	(revision 6716)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/Manager/AuthorizationManager.cs	(revision 6717)
@@ -22,5 +22,7 @@
 using System;
 using System.Security;
-using HeuristicLab.Services.Hive.Common.DataTransfer;
+using HeuristicLab.Services.Hive.DataAccess;
+using DT = HeuristicLab.Services.Hive.DataTransfer;
+
 
 namespace HeuristicLab.Services.Hive {
@@ -31,15 +33,15 @@
     }
 
-    public void AuthorizeForJob(Guid jobId, Permission requiredPermission) {
+    public void AuthorizeForJob(Guid jobId, DT.Permission requiredPermission) {
       if (ServiceLocator.Instance.AuthenticationManager.IsInRole(HiveRoles.Slave)) return; // slave-users can access all jobs
 
       Permission permission = ServiceLocator.Instance.HiveDao.GetPermissionForJob(jobId, ServiceLocator.Instance.UserManager.CurrentUserId);
-      if (permission == Permission.NotAllowed || (permission != requiredPermission && requiredPermission == Permission.Full))
+      if (permission == Permission.NotAllowed || (permission != DT.Convert.ToEntity(requiredPermission) && DT.Convert.ToEntity(requiredPermission) == Permission.Full))
         throw new SecurityException("Current user is not authorized to access job");
     }
 
-    public void AuthorizeForExperiment(Guid experimentId, Permission requiredPermission) {
+    public void AuthorizeForExperiment(Guid experimentId, DT.Permission requiredPermission) {
       Permission permission = ServiceLocator.Instance.HiveDao.GetPermissionForExperiment(experimentId, ServiceLocator.Instance.UserManager.CurrentUserId);
-      if (permission == Permission.NotAllowed || (permission != requiredPermission && requiredPermission == Permission.Full)) 
+      if (permission == Permission.NotAllowed || (permission != DT.Convert.ToEntity(requiredPermission) && DT.Convert.ToEntity(requiredPermission) == Permission.Full))
         throw new SecurityException("Current user is not authorized to access experiment");
     }
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/Manager/EventManager.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/Manager/EventManager.cs	(revision 6716)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/Manager/EventManager.cs	(revision 6717)
@@ -23,6 +23,8 @@
 using System.Collections.Generic;
 using System.Linq;
-using HeuristicLab.Services.Hive.Common;
-using HeuristicLab.Services.Hive.Common.DataTransfer;
+using HeuristicLab.Services.Hive.DataAccess;
+using HeuristicLab.Services.Hive.DataAccess;
+using DT = HeuristicLab.Services.Hive.DataTransfer;
+
 
 namespace HeuristicLab.Services.Hive {
@@ -31,5 +33,5 @@
   /// </summary>
   public class EventManager : IEventManager {
-    private DataAccess.IHiveDao dao {
+    private IHiveDao dao {
       get { return ServiceLocator.Instance.HiveDao; }
     }
@@ -52,9 +54,9 @@
       var slaves = dao.GetSlaves(x => x.SlaveState == SlaveState.Calculating || x.SlaveState == SlaveState.Idle);
 
-      var stats = new Statistics();
+      var stats = new DataTransfer.Statistics();
       stats.TimeStamp = DateTime.Now;
-      var slaveStats = new List<SlaveStatistics>();
+      var slaveStats = new List<DT.SlaveStatistics>();
       foreach (var slave in slaves) {
-        slaveStats.Add(new SlaveStatistics() {
+        slaveStats.Add(new DT.SlaveStatistics() {
           SlaveId = slave.Id,
           Cores = slave.Cores.HasValue ? slave.Cores.Value : 0,
@@ -75,7 +77,7 @@
     private void SetTimeoutSlavesOffline() {
       var slaves = dao.GetSlaves(x => x.SlaveState != SlaveState.Offline);
-      foreach (Slave slave in slaves) {
-        if (!slave.LastHeartbeat.HasValue || (DateTime.Now - slave.LastHeartbeat.Value) > Settings.Default.SlaveHeartbeatTimeout) {
-          slave.SlaveState = SlaveState.Offline;
+      foreach (DT.Slave slave in slaves) {
+        if (!slave.LastHeartbeat.HasValue || (DateTime.Now - slave.LastHeartbeat.Value) > HeuristicLab.Services.Hive.Properties.Settings.Default.SlaveHeartbeatTimeout) {
+          slave.SlaveState = DT.SlaveState.Offline;
           SetJobsWaiting(slave.Id);
           dao.UpdateSlave(slave);
@@ -97,5 +99,5 @@
       var jobs = dao.GetJobs(x => x.State == JobState.Calculating).Where(x => x.StateLog.Last().SlaveId == slaveId);
       foreach (var j in jobs) {
-        Job job = dao.UpdateJobState(j.Id, JobState.Waiting, slaveId, null, "Slave timed out.");
+        DT.Job job = dao.UpdateJobState(j.Id, JobState.Waiting, slaveId, null, "Slave timed out.");
         job.Command = null;
         dao.UpdateJob(job);
@@ -107,8 +109,8 @@
     /// </summary>
     private void SetTimeoutJobsWaiting() {
-      var jobs = dao.GetJobs(x => (x.State == JobState.Calculating && (DateTime.Now - x.LastHeartbeat) > Settings.Default.CalculatingJobHeartbeatTimeout)
-                               || (x.State == JobState.Transferring && (DateTime.Now - x.LastHeartbeat) > Settings.Default.TransferringJobHeartbeatTimeout));
+      var jobs = dao.GetJobs(x => (x.State == JobState.Calculating && (DateTime.Now - x.LastHeartbeat) > HeuristicLab.Services.Hive.Properties.Settings.Default.CalculatingJobHeartbeatTimeout)
+                               || (x.State == JobState.Transferring && (DateTime.Now - x.LastHeartbeat) > HeuristicLab.Services.Hive.Properties.Settings.Default.TransferringJobHeartbeatTimeout));
       foreach (var j in jobs) {
-        Job job = dao.UpdateJobState(j.Id, JobState.Waiting, null, null, "Slave timed out.");
+        DT.Job job = dao.UpdateJobState(j.Id, JobState.Waiting, null, null, "Slave timed out.");
         job.Command = null;
         dao.UpdateJob(job);
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/Manager/HeartbeatManager.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/Manager/HeartbeatManager.cs	(revision 6716)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/Manager/HeartbeatManager.cs	(revision 6717)
@@ -23,10 +23,10 @@
 using System.Collections.Generic;
 using System.Linq;
-using HeuristicLab.Services.Hive.Common;
-using HeuristicLab.Services.Hive.Common.DataTransfer;
+using HeuristicLab.Services.Hive.DataTransfer;
+using DA = HeuristicLab.Services.Hive.DataAccess;
 
 namespace HeuristicLab.Services.Hive {
   public class HeartbeatManager {
-    private DataAccess.IHiveDao dao {
+    private IHiveDao dao {
       get { return ServiceLocator.Instance.HiveDao; }
     }
@@ -75,5 +75,5 @@
       if (dao.GetJob(job.Id).State != JobState.Waiting) return false;
 
-      job = dao.UpdateJobState(job.Id, JobState.Transferring, slave.Id, null, null);
+      job = dao.UpdateJobState(job.Id, DataAccess.JobState.Transferring, slave.Id, null, null);
 
       // from now on the job has some time to send the next heartbeat (ApplicationConstants.TransferringJobHeartbeatTimeout)
@@ -102,10 +102,10 @@
             // job does not exist in db
             actions.Add(new MessageContainer(MessageContainer.MessageType.AbortJob, jobProgress.Key));
-            LogFactory.GetLogger(this.GetType().Namespace).Log("Job does not exist in DB: " + jobProgress.Key);
+            DA.LogFactory.GetLogger(this.GetType().Namespace).Log("Job does not exist in DB: " + jobProgress.Key);
           } else {
             if (curJob.CurrentStateLog.SlaveId == Guid.Empty || curJob.CurrentStateLog.SlaveId != heartbeat.SlaveId) {
               // assigned slave does not match heartbeat
               actions.Add(new MessageContainer(MessageContainer.MessageType.AbortJob, curJob.Id));
-              LogFactory.GetLogger(this.GetType().Namespace).Log("The slave " + heartbeat.SlaveId + " is not supposed to calculate Job: " + curJob);
+              DA.LogFactory.GetLogger(this.GetType().Namespace).Log("The slave " + heartbeat.SlaveId + " is not supposed to calculate Job: " + curJob);
             } else if (!JobIsAllowedToBeCalculatedBySlave(heartbeat.SlaveId, curJob)) {
               // assigned resources ids of job do not match with slaveId (and parent resourceGroupIds); this might happen when slave is moved to different group
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/MessageContainer.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/MessageContainer.cs	(revision 6717)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/MessageContainer.cs	(revision 6717)
@@ -0,0 +1,83 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Runtime.Serialization;
+using HeuristicLab.Common;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Services.Hive {
+  /// <summary>
+  /// The MessageContainer is a container class for Messages. Its two parts are:
+  /// the actual message itself and the JobId, refered by the message
+  /// </summary>
+  [StorableClass]
+  [Serializable]
+  [DataContract]
+  public class MessageContainer : IDeepCloneable {
+
+    public enum MessageType {
+      // *** commands from hive server ***
+      CalculateJob, // slave should calculate a job. the job is already assigned to the slave
+      StopJob,   // slave should stop the job and submit results
+      StopAll,   // stop all and submit results
+      AbortJob,  // slave should shut the job down immediately without submitting results
+      AbortAll,  // slave should abort all jobs immediately
+      PauseJob,  // pause the job and submit the results   
+      PauseAll,  // pause all jobs and submit results
+      Restart,   // restart operation after Sleep
+      Sleep,     // disconnect from server, but don't shutdown
+      ShutdownSlave,  // slave should shutdown immediately without submitting results
+      SayHello,  // Slave should say hello, because he is unknown to the server
+    };
+
+    [Storable]
+    [DataMember]
+    public MessageType Message { get; set; }
+
+    [Storable]
+    [DataMember]
+    public Guid JobId { get; set; }
+
+    [StorableConstructor]
+    protected MessageContainer(bool deserializing) { }
+    protected MessageContainer() { }
+    public MessageContainer(MessageType message) {
+      Message = message;
+      JobId = Guid.Empty;
+    }
+    public MessageContainer(MessageType message, Guid jobId) {
+      Message = message;
+      JobId = jobId;
+    }
+    protected MessageContainer(MessageContainer original, Cloner cloner) {
+      cloner.RegisterClonedObject(original, this);
+      this.Message = original.Message;
+      this.JobId = original.JobId;
+    }
+    public virtual IDeepCloneable Clone(Cloner cloner) {
+      return new MessageContainer(this, cloner);
+    }
+    public object Clone() {
+      return Clone(new Cloner());
+    }
+  }
+}
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/Properties/Settings.Designer.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/Properties/Settings.Designer.cs	(revision 6717)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/Properties/Settings.Designer.cs	(revision 6717)
@@ -0,0 +1,53 @@
+﻿//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.235
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HeuristicLab.Services.Hive.Properties {
+    
+    
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")]
+    public sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
+        
+        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+        
+        public static Settings Default {
+            get {
+                return defaultInstance;
+            }
+        }
+        
+        [global::System.Configuration.ApplicationScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.DefaultSettingValueAttribute("00:01:00")]
+        public global::System.TimeSpan SlaveHeartbeatTimeout {
+            get {
+                return ((global::System.TimeSpan)(this["SlaveHeartbeatTimeout"]));
+            }
+        }
+        
+        [global::System.Configuration.ApplicationScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.DefaultSettingValueAttribute("00:05:30")]
+        public global::System.TimeSpan CalculatingJobHeartbeatTimeout {
+            get {
+                return ((global::System.TimeSpan)(this["CalculatingJobHeartbeatTimeout"]));
+            }
+        }
+        
+        [global::System.Configuration.ApplicationScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.DefaultSettingValueAttribute("00:05:30")]
+        public global::System.TimeSpan TransferringJobHeartbeatTimeout {
+            get {
+                return ((global::System.TimeSpan)(this["TransferringJobHeartbeatTimeout"]));
+            }
+        }
+    }
+}
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/Properties/Settings.settings
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/Properties/Settings.settings	(revision 6717)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/Properties/Settings.settings	(revision 6717)
@@ -0,0 +1,15 @@
+﻿<?xml version='1.0' encoding='utf-8'?>
+<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="HeuristicLab.Services.Hive.Common" GeneratedClassName="Settings">
+  <Profiles />
+  <Settings>
+    <Setting Name="SlaveHeartbeatTimeout" Type="System.TimeSpan" Scope="Application">
+      <Value Profile="(Default)">00:01:00</Value>
+    </Setting>
+    <Setting Name="CalculatingJobHeartbeatTimeout" Type="System.TimeSpan" Scope="Application">
+      <Value Profile="(Default)">00:05:30</Value>
+    </Setting>
+    <Setting Name="TransferringJobHeartbeatTimeout" Type="System.TimeSpan" Scope="Application">
+      <Value Profile="(Default)">00:05:30</Value>
+    </Setting>
+  </Settings>
+</SettingsFile>
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/ServiceContracts/IHiveService.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/ServiceContracts/IHiveService.cs	(revision 6717)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/ServiceContracts/IHiveService.cs	(revision 6717)
@@ -0,0 +1,224 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Net.Security;
+using System.ServiceModel;
+using HeuristicLab.Services.Hive.DataTransfer;
+
+namespace HeuristicLab.Services.Hive.ServiceContracts {
+
+  [ServiceContract(ProtectionLevel = ProtectionLevel.EncryptAndSign)]
+  public interface IHiveService {
+
+    #region Job Methods
+    [OperationContract]
+    Guid AddJob(Job job, JobData jobData, IEnumerable<Guid> resourceIds);
+
+    [OperationContract]
+    Guid AddChildJob(Guid parentJobId, Job job, JobData jobData);
+
+    [OperationContract]
+    Job GetJob(Guid jobId);
+
+    [OperationContract]
+    IEnumerable<Job> GetJobs();
+
+    [OperationContract]
+    IEnumerable<LightweightJob> GetLightweightJobs(IEnumerable<Guid> jobIds);
+
+    [OperationContract]
+    IEnumerable<LightweightJob> GetLightweightChildJobs(Guid? parentJobId, bool recursive, bool includeParent);
+
+    [OperationContract]
+    IEnumerable<LightweightJob> GetLightweightExperimentJobs(Guid experimentId);
+
+    [OperationContract]
+    JobData GetJobData(Guid jobId);
+
+    [OperationContract]
+    void UpdateJob(Job jobDto);
+
+    [OperationContract]
+    void UpdateJobData(Job jobDto, JobData jobDataDto);
+
+    [OperationContract]
+    void DeleteJob(Guid jobId);
+
+    [OperationContract]
+    void DeleteChildJobs(Guid parentJobId);
+
+    [OperationContract]
+    Job UpdateJobState(Guid jobId, JobState jobState, Guid? slaveId, Guid? userId, string exception);
+    #endregion
+
+    #region Job Control Methods
+    [OperationContract]
+    void StopJob(Guid jobId);
+
+    [OperationContract]
+    void PauseJob(Guid jobId);
+
+    [OperationContract]
+    void RestartJob(Guid jobId);
+    #endregion
+
+    #region HiveExperiment Methods
+    [OperationContract]
+    HiveExperiment GetHiveExperiment(Guid id);
+
+    /// <summary>
+    /// Returns all experiments for the current user
+    /// </summary>
+    [OperationContract]
+    IEnumerable<HiveExperiment> GetHiveExperiments();
+
+    /// <summary>
+    /// Returns all experiments in the hive (only for admins)
+    /// </summary>
+    /// <returns></returns>
+    [OperationContract]
+    IEnumerable<HiveExperiment> GetAllHiveExperiments();
+
+    [OperationContract]
+    Guid AddHiveExperiment(HiveExperiment hiveExperimentDto);
+
+    [OperationContract]
+    void UpdateHiveExperiment(HiveExperiment hiveExperimentDto);
+
+    [OperationContract]
+    void DeleteHiveExperiment(Guid hiveExperimentId);
+    #endregion
+
+    #region HiveExperimentPermission Methods
+    [OperationContract]
+    void GrantPermission(Guid hiveExperimentId, Guid grantedUserId, Permission permission);
+
+    [OperationContract]
+    void RevokePermission(Guid hiveExperimentId, Guid grantedUserId);
+
+    [OperationContract]
+    IEnumerable<HiveExperimentPermission> GetHiveExperimentPermissions(Guid hiveExperimentId);
+
+    [OperationContract]
+    bool IsAllowedPrivileged(); // current user may execute privileged jobs
+    #endregion
+
+    #region Login Methods
+    [OperationContract]
+    void Hello(Slave slave);
+
+    [OperationContract]
+    void GoodBye(Guid slaveId);
+    #endregion
+
+    #region Heartbeat Methods
+    [OperationContract]
+    List<MessageContainer> Heartbeat(Heartbeat heartbeat);
+    #endregion
+
+    #region Plugin Methods
+    [OperationContract]
+    Plugin GetPlugin(Guid pluginId);
+    [OperationContract]
+    Plugin GetPluginByHash(byte[] hash);
+    [OperationContract]
+    [FaultContract(typeof(PluginAlreadyExistsFault))]
+    Guid AddPlugin(Plugin plugin, List<PluginData> pluginData);
+    [OperationContract]
+    IEnumerable<Plugin> GetPlugins();
+    [OperationContract]
+    IEnumerable<PluginData> GetPluginDatas(List<Guid> pluginIds);
+    [OperationContract]
+    void DeletePlugin(Guid pluginId);
+    #endregion
+
+    #region Slave Methods
+    [OperationContract]
+    Guid AddSlave(Slave slave);
+
+    [OperationContract]
+    Guid AddSlaveGroup(SlaveGroup slaveGroup);
+
+    [OperationContract]
+    Slave GetSlave(Guid slaveId);
+
+    [OperationContract]
+    SlaveGroup GetSlaveGroup(Guid slaveGroupId);
+
+    [OperationContract]
+    IEnumerable<Slave> GetSlaves();
+
+    [OperationContract]
+    IEnumerable<SlaveGroup> GetSlaveGroups();
+
+    [OperationContract]
+    void UpdateSlave(Slave slave);
+
+    [OperationContract]
+    void UpdateSlaveGroup(SlaveGroup slaveGroup);
+
+    [OperationContract]
+    void DeleteSlave(Guid slaveId);
+
+    [OperationContract]
+    void DeleteSlaveGroup(Guid slaveGroupId);
+
+    [OperationContract]
+    void AddResourceToGroup(Guid slaveGroupId, Guid resourceId);
+
+    [OperationContract]
+    void RemoveResourceFromGroup(Guid slaveGroupId, Guid resourceId);
+
+    [OperationContract]
+    Guid GetResourceId(string resourceName);
+
+    [OperationContract]
+    IEnumerable<Job> GetJobsByResourceId(Guid resourceId);
+
+    [OperationContract]
+    void TriggerEventManager(bool force);
+    #endregion
+
+    #region Downtime Methods
+    [OperationContract]
+    Guid AddDowntime(Downtime downtime);
+
+    [OperationContract]
+    void DeleteDowntime(Guid downtimeId);
+
+    [OperationContract]
+    void UpdateDowntime(Downtime downtime);
+
+    [OperationContract]
+    IEnumerable<Downtime> GetDowntimesForResource(Guid resourceId);
+    #endregion
+
+    #region User Methods
+    [OperationContract]
+    string GetUsernameByUserId(Guid userId);
+
+    [OperationContract]
+    Guid GetUserIdByUsername(string username);
+    #endregion
+  }
+}
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/ServiceFaults/PluginAlreadyExistsFault.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/ServiceFaults/PluginAlreadyExistsFault.cs	(revision 6717)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/ServiceFaults/PluginAlreadyExistsFault.cs	(revision 6717)
@@ -0,0 +1,40 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.Hive {
+  [DataContract]
+  public class PluginAlreadyExistsFault {
+    
+    private Guid id;
+    [DataMember]
+    public Guid Id {
+      get { return id; }
+      set { id = value; }
+    }
+
+    public PluginAlreadyExistsFault(Guid id) {
+      this.id = id;
+    }
+  }
+}
