Index: branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave.ConsoleClient-3.4/HeuristicLab.Clients.Hive.Slave.ConsoleClient-3.4.csproj
===================================================================
--- branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave.ConsoleClient-3.4/HeuristicLab.Clients.Hive.Slave.ConsoleClient-3.4.csproj	(revision 5372)
+++ branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave.ConsoleClient-3.4/HeuristicLab.Clients.Hive.Slave.ConsoleClient-3.4.csproj	(revision 5375)
@@ -78,5 +78,7 @@
   </ItemGroup>
   <ItemGroup>
-    <None Include="app.config" />
+    <None Include="app.config">
+      <SubType>Designer</SubType>
+    </None>
   </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
Index: branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave.ConsoleClient-3.4/Program.cs
===================================================================
--- branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave.ConsoleClient-3.4/Program.cs	(revision 5372)
+++ branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave.ConsoleClient-3.4/Program.cs	(revision 5375)
@@ -22,5 +22,4 @@
 using System;
 using System.Threading;
-using HeuristicLab.Clients.Hive.Slave;
 using HeuristicLab.Clients.Hive.Slave.Tests;
 
@@ -30,5 +29,6 @@
     static void Main(string[] args) {
       //mock the hive service for testing purposes
-      ServiceLocator.Instance = new MockServiceLocator();
+      //ServiceLocator.Instance = new MockServiceLocator();
+
       //slave part
       Core core = new Core();
Index: branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave.ConsoleClient-3.4/app.config
===================================================================
--- branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave.ConsoleClient-3.4/app.config	(revision 5372)
+++ branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave.ConsoleClient-3.4/app.config	(revision 5375)
@@ -23,12 +23,14 @@
 
    <client>
-    <endpoint address="http://localhost:9000/Hive-3.4" 
+     <!--http://localhost:9000/Hive-3.4-->
+    <endpoint address="http://localhost:80/Service.svc" 
               binding="wsHttpBinding" 
               bindingConfiguration="wsHttpBinding" 
               contract="HeuristicLab.Services.Hive.Common.ServiceContracts.IHiveService" 
               name="wsHttpBinding_IHiveService">
-      <identity>
-        <certificate encodedValue="AwAAAAEAAAAUAAAAfEKvcVixnJay+q4hCPFuO0JL5TQgAAAAAQAAAPIBAAAwggHuMIIBW6ADAgECAhCNN5wrUcXMmE/9xwp4TYa9MAkGBSsOAwIdBQAwFDESMBAGA1UEAxMJbG9jYWxob3N0MB4XDTEwMTAxOTEwNTMxNVoXDTM5MTIzMTIzNTk1OVowFDESMBAGA1UEAxMJbG9jYWxob3N0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDXwC5TGcAffd/0oAWHtm0s6YXVXEgXgb1AYmBkkkhkKIFJG/e/Z0KSYbJepmSJD44W3oOAVm+x1DAsZxU79HahDYgWCuHLMm1TLpwSmYOQ0kV3pGHWHhiWV7h7oGLds/eqZ2EOpaNGryfEPnrA4VmxY91vV5/2BTeVSWG6F8lRKQIDAQABo0kwRzBFBgNVHQEEPjA8gBAR7kBnMRHO5gzThEqda0wWoRYwFDESMBAGA1UEAxMJbG9jYWxob3N0ghCNN5wrUcXMmE/9xwp4TYa9MAkGBSsOAwIdBQADgYEAoPwEG4QTDXhlxERNDfsZmM2IhEpV42ppz1kEah2oYKDa/ElIMVtvqLv6flVtg18ENN/mEJWiHZ3NyP3qr2Pip+sh+/2WBiSbOaukES/CM7OJn9kJCImH7M/xqM8pxqY8IfgM6iBVrVj9uHqj3j2BBck+cYY8fKyh3CFifMIp6ac="/>
-      </identity>
+              <identity>
+                <certificate encodedValue="AwAAAAEAAAAUAAAAiQt8DnyaI8rYHhLNyW62i58+eG8gAAAAAQAAAPIBAAAwggHuMIIBW6ADAgECAhAFNFYz6Srdmk3PZJ/mka5sMAkGBSsOAwIdBQAwFDESMBAGA1UEAxMJbG9jYWxob3N0MB4XDTEwMTIwNjE0MTc0M1oXDTM5MTIzMTIzNTk1OVowFDESMBAGA1UEAxMJbG9jYWxob3N0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCueTMWJzOZ1IBacG40aWdr3qDWijEO4VwhgtNr+WNFsRG+qW2rTZZFtaC0U028aj3MX13mr+pzpcPJMes2rr38PuxhN6BhdzgRfyEy/eHk4iKqZztuJSXgNAyfyjhovTchLitT2lilddTRFj2PlLYv+PUu+QhQNTm2iW4UDljS9wIDAQABo0kwRzBFBgNVHQEEPjA8gBBeipmIklE3kPz7i+AdKqAgoRYwFDESMBAGA1UEAxMJbG9jYWxob3N0ghAFNFYz6Srdmk3PZJ/mka5sMAkGBSsOAwIdBQADgYEAGnxEaFT8QKKk1DtJ8/+TOBxSo0UkBlNiTY0HKkA3w/2DOPZKybhslm8gqJic8ZPsk5YgEibrdQqB0AnNG983RAlFqgGvsAbQAMXTDJ5GoTgHaxk/T+7a7Sk4xJALUL/vWuPGbA354RVoKA4gV3gJzU+Fj3/fLACf0+D/nR9B5nw=" />
+              </identity>
+
     </endpoint>
    </client>
Index: branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave.Tests/Mocks/MockHiveService.cs
===================================================================
--- branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave.Tests/Mocks/MockHiveService.cs	(revision 5372)
+++ branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave.Tests/Mocks/MockHiveService.cs	(revision 5375)
@@ -219,6 +219,6 @@
     }
 
-    public void GoodBye() {
-      // do nothing
+    public void GoodBye(Guid id) {
+      // do nothing      
     }
 
Index: branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.4/HeartbeatManager.cs
===================================================================
--- branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.4/HeartbeatManager.cs	(revision 5372)
+++ branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.4/HeartbeatManager.cs	(revision 5375)
@@ -91,5 +91,5 @@
 
               Heartbeat heartBeatData = new Heartbeat {
-                SlaveId = info.Id,
+                SlaveId = info.Id, /*Settings.Default.Guid*/
                 FreeCores = info.Cores.HasValue ? info.Cores.Value - ConfigManager.Instance.GetUsedCores() : 0,
                 FreeMemory = GetFreeMemory(),
Index: branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.4/WcfService.cs
===================================================================
--- branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.4/WcfService.cs	(revision 5372)
+++ branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.4/WcfService.cs	(revision 5375)
@@ -79,5 +79,5 @@
           ConnState = NetworkEnum.WcfConnState.Connected;
           ConnectedSince = DateTime.Now;
-          service.Obj.Hello(Settings.Default.Guid, slaveInfo.Name, slaveInfo.Cores.Value, slaveInfo.Memory.Value);
+          service.Obj.Hello(slaveInfo.Id/*Settings.Default.Guid*/, slaveInfo.Name, slaveInfo.Cores.Value, slaveInfo.Memory.Value);
           OnConnected();
         }
@@ -94,5 +94,5 @@
       using (Disposable<IHiveService> service = ServiceLocator.Instance.GetService()) {
         try {
-          service.Obj.GoodBye();
+          service.Obj.GoodBye(ConfigManager.Instance.GetClientInfo().Id);
           ConnState = NetworkEnum.WcfConnState.Disconnected;
         }
Index: branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.4/ServiceLocator.cs
===================================================================
--- branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.4/ServiceLocator.cs	(revision 5372)
+++ branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.4/ServiceLocator.cs	(revision 5375)
@@ -20,7 +20,6 @@
 #endregion
 
+using HeuristicLab.Clients.Common;
 using HeuristicLab.Services.Hive.Common.ServiceContracts;
-using HeuristicLab.Clients.Hive.Properties;
-using HeuristicLab.Clients.Common;
 
 namespace HeuristicLab.Clients.Hive {
@@ -40,5 +39,6 @@
 
     public Disposable<IHiveService> GetService() {
-        return ClientFactory.CreateClient<IHiveService>("wsHttpBinding_IHiveService");
+      //TODO: move user config to app.config!
+      return ClientFactory.CreateClient<IHiveService>("wsHttpBinding_IHiveService", null, "ascheibe", "ascheibe$4");
     }
   }
Index: branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Hive 3.4.sln
===================================================================
--- branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Hive 3.4.sln	(revision 5372)
+++ branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Hive 3.4.sln	(revision 5375)
@@ -49,5 +49,5 @@
 		Release.AspNetCompiler.FixedNames = "false"
 		Release.AspNetCompiler.Debug = "False"
-		VWDPort = "49227"
+		VWDPort = "49885"
 		DefaultWebSiteLanguage = "Visual C#"
 	EndProjectSection
Index: branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.Common/3.4/DataTransfer/PluginData.cs
===================================================================
--- branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.Common/3.4/DataTransfer/PluginData.cs	(revision 5372)
+++ branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.Common/3.4/DataTransfer/PluginData.cs	(revision 5375)
@@ -29,4 +29,6 @@
   public class PluginData : HiveItemBase {
     [DataMember]
+    public int PluginDataId { get; set; }
+    [DataMember]
     public Guid PluginId { get; set; }
     [DataMember]
@@ -43,4 +45,6 @@
       Array.Copy(original.Data, this.Data, original.Data.Length);
       this.FileName = original.FileName;
+      this.PluginDataId = original.PluginDataId;
+      this.PluginId = original.PluginId;
     }
     public override IDeepCloneable Clone(Cloner cloner) {
Index: branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.Common/3.4/ServiceContracts/IHiveService.cs
===================================================================
--- branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.Common/3.4/ServiceContracts/IHiveService.cs	(revision 5372)
+++ branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.Common/3.4/ServiceContracts/IHiveService.cs	(revision 5375)
@@ -1,10 +1,7 @@
 ﻿using System;
 using System.Collections.Generic;
-using System.Linq;
-using System.Text;
+using System.Net.Security;
 using System.ServiceModel;
-using System.IO;
 using HeuristicLab.Services.Hive.Common.DataTransfer;
-using System.Net.Security;
 
 namespace HeuristicLab.Services.Hive.Common.ServiceContracts {
@@ -85,5 +82,5 @@
 
     [OperationContract]
-    void GoodBye();
+    void GoodBye(Guid slaveId);
     #endregion
 
@@ -101,5 +98,5 @@
     IEnumerable<PluginData> GetPluginDatas(List<Guid> pluginIds);
     #endregion
-    
+
     #region Slave Methods
     [OperationContract]
Index: branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.DataAccess/3.4/Convert.cs
===================================================================
--- branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.DataAccess/3.4/Convert.cs	(revision 5372)
+++ branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.DataAccess/3.4/Convert.cs	(revision 5375)
@@ -126,5 +126,5 @@
     public static DT.PluginData ToDto(PluginData source) {
       if (source == null) return null;
-      return new DT.PluginData { PluginId = source.PluginId, Data = source.Data.ToArray(), FileName = source.FileName };
+      return new DT.PluginData { PluginId = source.PluginId, Data = source.Data.ToArray(), FileName = source.FileName, PluginDataId = source.PluginDataId };
     }
     public static PluginData ToEntity(DT.PluginData source) {
Index: branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.DataAccess/3.4/HiveDao.cs
===================================================================
--- branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.DataAccess/3.4/HiveDao.cs	(revision 5372)
+++ branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.DataAccess/3.4/HiveDao.cs	(revision 5375)
@@ -90,5 +90,5 @@
                     orderby ar.Job.Priority descending
                     select Convert.ToDto(ar.Job);
-        return query;
+        return query.ToArray();
       }
     }
@@ -100,5 +100,7 @@
                     orderby j.Priority descending
                     select Convert.ToDto(j);
-        return query.Union(GetWaitingParentJobs(slave.Id)).OrderByDescending(x => x.Priority).ToArray();
+        var waitingJobs = query.ToArray();
+        var waitingParentJobs = GetWaitingParentJobs(slave.Id);
+        return waitingJobs.Union(waitingParentJobs).OrderByDescending(x => x.Priority);
       }
     }
@@ -322,4 +324,6 @@
     public Guid AddSlaveGroup(DT.SlaveGroup dto) {
       using (var db = CreateContext()) {
+        if (dto.Id == Guid.Empty)
+          dto.Id = Guid.NewGuid();
         var entity = Convert.ToEntity(dto);
         db.Resources.InsertOnSubmit(entity);
Index: branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.DataAccess/3.4/HiveDataContext.dbml
===================================================================
--- branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.DataAccess/3.4/HiveDataContext.dbml	(revision 5372)
+++ branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.DataAccess/3.4/HiveDataContext.dbml	(revision 5375)
@@ -15,5 +15,5 @@
       <Column Name="Version" Type="System.String" DbType="VarChar(MAX)" CanBeNull="false" />
       <Association Name="Plugin_RequiredPlugin" Member="RequiredPlugins" ThisKey="PluginId" OtherKey="PluginId" Type="RequiredPlugin" />
-      <Association Name="Plugin_PluginData" Member="PluginData" ThisKey="PluginId" OtherKey="PluginId" Type="PluginData" Cardinality="One" />
+      <Association Name="Plugin_PluginData" Member="PluginData" ThisKey="PluginId" OtherKey="PluginId" Type="PluginData" />
     </Type>
   </Table>
@@ -29,5 +29,5 @@
   <Table Name="dbo.Resource" Member="Resources">
     <Type Name="Resource" InheritanceCode="RESOURCE">
-      <Column Name="ResourceId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" IsDbGenerated="true" CanBeNull="false" />
+      <Column Name="ResourceId" AutoSync="OnInsert" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
       <Column Name="Name" Type="System.String" DbType="VarChar(MAX)" CanBeNull="false" />
       <Column Name="ResourceType" Type="System.String" CanBeNull="false" IsDiscriminator="true" />
@@ -112,4 +112,5 @@
       <Column Name="Data" Type="System.Data.Linq.Binary" DbType="VarBinary(MAX) NOT NULL" CanBeNull="false" UpdateCheck="Never" />
       <Column Name="FileName" Type="System.String" DbType="VarChar(MAX)" CanBeNull="false" />
+      <Column Name="PluginDataId" Type="System.Int32" DbType="Int IDENTITY(1,1)" IsPrimaryKey="true" IsDbGenerated="true" CanBeNull="false" />
       <Association Name="Plugin_PluginData" Member="Plugin" ThisKey="PluginId" OtherKey="PluginId" Type="Plugin" IsForeignKey="true" />
     </Type>
Index: branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.DataAccess/3.4/HiveDataContext.dbml.layout
===================================================================
--- branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.DataAccess/3.4/HiveDataContext.dbml.layout	(revision 5372)
+++ branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.DataAccess/3.4/HiveDataContext.dbml.layout	(revision 5375)
@@ -124,11 +124,11 @@
       </nestedChildShapes>
     </classShape>
-    <classShape Id="ad25bd0f-80e8-4a06-abd8-190eb678eec7" absoluteBounds="11.375, 5.5, 2, 1.3862939453124996">
+    <classShape Id="ad25bd0f-80e8-4a06-abd8-190eb678eec7" absoluteBounds="11.625, 5.5, 2, 1.5785953776041666">
       <DataClassMoniker Name="/HiveDataContext/PluginData" />
       <nestedChildShapes>
-        <elementListCompartment Id="acddb513-7de6-4bb4-8335-d6982fb2ef35" absoluteBounds="11.39, 5.9600000000000009, 1.9700000000000002, 0.8262939453125" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+        <elementListCompartment Id="acddb513-7de6-4bb4-8335-d6982fb2ef35" absoluteBounds="11.64, 5.9600000000000009, 1.9700000000000002, 1.0185953776041665" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
       </nestedChildShapes>
     </classShape>
-    <associationConnector edgePoints="[(11 : 6.19314697265625); (11.375 : 6.19314697265625)]" fixedFrom="Algorithm" fixedTo="Algorithm">
+    <associationConnector edgePoints="[(11 : 6.19314697265625); (11.625 : 6.19314697265625)]" fixedFrom="NotFixed" fixedTo="NotFixed">
       <AssociationMoniker Name="/HiveDataContext/Plugin/Plugin_PluginData" />
       <nodes>
@@ -137,5 +137,5 @@
       </nodes>
     </associationConnector>
-    <associationConnector edgePoints="[(6.5 : 1.69314697265625); (6.125 : 1.69314697265625)]" fixedFrom="Algorithm" fixedTo="Algorithm">
+    <associationConnector edgePoints="[(6.5 : 1.69314697265625); (6.125 : 1.69314697265625)]" fixedFrom="NotFixed" fixedTo="NotFixed">
       <AssociationMoniker Name="/HiveDataContext/Job/Job_JobData" />
       <nodes>
Index: branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.DataAccess/3.4/HiveDataContext.designer.cs
===================================================================
--- branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.DataAccess/3.4/HiveDataContext.designer.cs	(revision 5372)
+++ branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.DataAccess/3.4/HiveDataContext.designer.cs	(revision 5375)
@@ -55,4 +55,7 @@
     partial void UpdateJobData(JobData instance);
     partial void DeleteJobData(JobData instance);
+    partial void InsertPluginData(PluginData instance);
+    partial void UpdatePluginData(PluginData instance);
+    partial void DeletePluginData(PluginData instance);
     #endregion
 		
@@ -360,4 +363,6 @@
 		private EntitySet<RequiredPlugin> _RequiredPlugins;
 		
+		private EntitySet<PluginData> _PluginData;
+		
     #region Extensibility Method Definitions
     partial void OnLoaded();
@@ -375,4 +380,5 @@
 		{
 			this._RequiredPlugins = new EntitySet<RequiredPlugin>(new Action<RequiredPlugin>(this.attach_RequiredPlugins), new Action<RequiredPlugin>(this.detach_RequiredPlugins));
+			this._PluginData = new EntitySet<PluginData>(new Action<PluginData>(this.attach_PluginData), new Action<PluginData>(this.detach_PluginData));
 			OnCreated();
 		}
@@ -451,4 +457,17 @@
 		}
 		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Plugin_PluginData", Storage="_PluginData", ThisKey="PluginId", OtherKey="PluginId")]
+		public EntitySet<PluginData> PluginData
+		{
+			get
+			{
+				return this._PluginData;
+			}
+			set
+			{
+				this._PluginData.Assign(value);
+			}
+		}
+		
 		public event PropertyChangingEventHandler PropertyChanging;
 		
@@ -478,4 +497,16 @@
 		
 		private void detach_RequiredPlugins(RequiredPlugin entity)
+		{
+			this.SendPropertyChanging();
+			entity.Plugin = null;
+		}
+		
+		private void attach_PluginData(PluginData entity)
+		{
+			this.SendPropertyChanging();
+			entity.Plugin = this;
+		}
+		
+		private void detach_PluginData(PluginData entity)
 		{
 			this.SendPropertyChanging();
@@ -724,5 +755,5 @@
 		}
 		
-		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_ResourceId", AutoSync=AutoSync.OnInsert, DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true, IsDbGenerated=true)]
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_ResourceId", AutoSync=AutoSync.OnInsert, DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true)]
 		public System.Guid ResourceId
 		{
@@ -2386,7 +2417,9 @@
 	
 	[global::System.Data.Linq.Mapping.TableAttribute(Name="")]
-	public partial class PluginData
+	public partial class PluginData : INotifyPropertyChanging, INotifyPropertyChanged
 	{
 		
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
 		private System.Guid _PluginId;
 		
@@ -2395,6 +2428,26 @@
 		private string _FileName;
 		
+		private int _PluginDataId;
+		
+		private EntityRef<Plugin> _Plugin;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnPluginIdChanging(System.Guid value);
+    partial void OnPluginIdChanged();
+    partial void OnDataChanging(System.Data.Linq.Binary value);
+    partial void OnDataChanged();
+    partial void OnFileNameChanging(string value);
+    partial void OnFileNameChanged();
+    partial void OnPluginDataIdChanging(int value);
+    partial void OnPluginDataIdChanged();
+    #endregion
+		
 		public PluginData()
 		{
+			this._Plugin = default(EntityRef<Plugin>);
+			OnCreated();
 		}
 		
@@ -2410,5 +2463,13 @@
 				if ((this._PluginId != value))
 				{
+					if (this._Plugin.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnPluginIdChanging(value);
+					this.SendPropertyChanging();
 					this._PluginId = value;
+					this.SendPropertyChanged("PluginId");
+					this.OnPluginIdChanged();
 				}
 			}
@@ -2426,5 +2487,9 @@
 				if ((this._Data != value))
 				{
+					this.OnDataChanging(value);
+					this.SendPropertyChanging();
 					this._Data = value;
+					this.SendPropertyChanged("Data");
+					this.OnDataChanged();
 				}
 			}
@@ -2442,6 +2507,84 @@
 				if ((this._FileName != value))
 				{
+					this.OnFileNameChanging(value);
+					this.SendPropertyChanging();
 					this._FileName = value;
-				}
+					this.SendPropertyChanged("FileName");
+					this.OnFileNameChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_PluginDataId", AutoSync=AutoSync.OnInsert, DbType="Int IDENTITY(1,1)", IsPrimaryKey=true, IsDbGenerated=true)]
+		public int PluginDataId
+		{
+			get
+			{
+				return this._PluginDataId;
+			}
+			set
+			{
+				if ((this._PluginDataId != value))
+				{
+					this.OnPluginDataIdChanging(value);
+					this.SendPropertyChanging();
+					this._PluginDataId = value;
+					this.SendPropertyChanged("PluginDataId");
+					this.OnPluginDataIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Plugin_PluginData", Storage="_Plugin", ThisKey="PluginId", OtherKey="PluginId", IsForeignKey=true)]
+		public Plugin Plugin
+		{
+			get
+			{
+				return this._Plugin.Entity;
+			}
+			set
+			{
+				Plugin previousValue = this._Plugin.Entity;
+				if (((previousValue != value) 
+							|| (this._Plugin.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._Plugin.Entity = null;
+						previousValue.PluginData.Remove(this);
+					}
+					this._Plugin.Entity = value;
+					if ((value != null))
+					{
+						value.PluginData.Add(this);
+						this._PluginId = value.PluginId;
+					}
+					else
+					{
+						this._PluginId = default(System.Guid);
+					}
+					this.SendPropertyChanged("Plugin");
+				}
+			}
+		}
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		protected virtual void SendPropertyChanging()
+		{
+			if ((this.PropertyChanging != null))
+			{
+				this.PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+		
+		protected virtual void SendPropertyChanged(String propertyName)
+		{
+			if ((this.PropertyChanged != null))
+			{
+				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
 			}
 		}
Index: branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.Web/Hive-3.4/App_Code/HiveServerModule.cs
===================================================================
--- branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.Web/Hive-3.4/App_Code/HiveServerModule.cs	(revision 5372)
+++ branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.Web/Hive-3.4/App_Code/HiveServerModule.cs	(revision 5375)
@@ -35,7 +35,4 @@
 
     public void Init(HttpApplication context) {
-      if (hiveService == null)
-        hiveService = new HiveService();
-
       if (lifecycleManager == null)
         lifecycleManager = new LifecycleManager();
Index: branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.4/HiveService.cs
===================================================================
--- branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.4/HiveService.cs	(revision 5372)
+++ branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.4/HiveService.cs	(revision 5375)
@@ -2,13 +2,8 @@
 using System.Collections.Generic;
 using System.Linq;
-using System.Text;
 using System.ServiceModel;
+using HeuristicLab.Services.Hive.Common;
+using HeuristicLab.Services.Hive.Common.DataTransfer;
 using HeuristicLab.Services.Hive.Common.ServiceContracts;
-using HeuristicLab.Services.Hive.Common.DataTransfer;
-using System.IO;
-using System.Security.Permissions;
-using System.Data.Linq;
-using HeuristicLab.Services.Hive.Common;
-using System.Transactions;
 
 namespace HeuristicLab.Services.Hive {
@@ -121,5 +116,14 @@
 
     public PluginData GetConfigurationFile() {
-      throw new NotImplementedException();
+      using (trans.OpenTransaction()) {
+        //TODO: move filename to app.config
+        PluginData configFile = dao.GetPluginDatas(x => x.FileName == "HeuristicLab 3.3.exe.config").SingleOrDefault();
+        if (configFile == null) {
+          //TODO: error handling
+          return null;
+        } else {
+          return configFile;
+        }
+      }
     }
 
@@ -173,9 +177,26 @@
     #region Login Methods
     public void Hello(Guid slaveId, string name, int cores, int memory) {
-      throw new NotImplementedException();
-    }
-
-    public void GoodBye() {
-      throw new NotImplementedException();
+      using (trans.OpenTransaction()) {
+        var slave = dao.GetSlave(slaveId);
+
+        if (slave == null) {
+          slave = new Slave { Id = slaveId, Name = name, Cores = cores, Memory = memory };
+          slave.IsAllowedToCalculate = true; //a little bit to optimistic?
+          slave.SlaveState = SlaveState.Idle;
+          dao.AddSlave(slave);
+        } else {
+          //TODO: error handling? 
+        }
+      }
+    }
+
+    public void GoodBye(Guid slaveId) {
+      using (trans.OpenTransaction()) {
+        var slave = dao.GetSlave(slaveId);
+        if (slave != null) {
+          slave.SlaveState = SlaveState.Offline;
+          dao.UpdateSlave(slave);
+        }
+      }
     }
     #endregion
@@ -203,10 +224,21 @@
       return dao.GetPlugins(x => true);
     }
+
     public IEnumerable<PluginData> GetPluginDatas(List<Guid> pluginIds) {
-      throw new NotImplementedException();
-    }
-    public Stream GetStreamedPluginDatas(List<Guid> pluginIds) {
-      throw new NotImplementedException();
-    }
+      List<PluginData> pluginDatas = new List<PluginData>();
+
+      using (trans.OpenTransaction()) {
+        foreach (Guid guid in pluginIds) {
+          List<PluginData> pluginData = dao.GetPluginDatas(x => x.PluginId == guid).ToList();
+          if (pluginData != null) {
+            pluginDatas.AddRange(pluginData);
+          } else {
+            //ignore ? 
+          }
+        }
+        return pluginDatas;
+      }
+    }
+
     #endregion
 
@@ -301,5 +333,5 @@
 
     #endregion
-  
+
   }
 }
