Index: /trunk/sources/HeuristicLab.ExtLibs/HeuristicLab.SpringNET/1.3.0/HeuristicLab.SpringNET-1.3.0.csproj
===================================================================
--- /trunk/sources/HeuristicLab.ExtLibs/HeuristicLab.SpringNET/1.3.0/HeuristicLab.SpringNET-1.3.0.csproj	(revision 2903)
+++ /trunk/sources/HeuristicLab.ExtLibs/HeuristicLab.SpringNET/1.3.0/HeuristicLab.SpringNET-1.3.0.csproj	(revision 2904)
@@ -86,4 +86,5 @@
   <ItemGroup>
     <None Include="HeuristicLab.snk" />
+    <None Include="HeuristicLabSpringNetPlugin.cs.frame" />
     <None Include="Properties\AssemblyInfo.frame" />
   </ItemGroup>
@@ -125,5 +126,6 @@
 set Outdir=$(Outdir)
 
-call PreBuildEvent.cmd</PreBuildEvent>
+call PreBuildEvent.cmd
+SubWCRev "%25ProjectDir%25/" "%25ProjectDir%25/HeuristicLabSpringNetPlugin.cs.frame" "%25ProjectDir%25/HeuristicLabSpringNetPlugin.cs"</PreBuildEvent>
   </PropertyGroup>
 </Project>
Index: /trunk/sources/HeuristicLab.ExtLibs/HeuristicLab.SpringNET/1.3.0/HeuristicLabSpringNetPlugin.cs
===================================================================
--- /trunk/sources/HeuristicLab.ExtLibs/HeuristicLab.SpringNET/1.3.0/HeuristicLabSpringNetPlugin.cs	(revision 2903)
+++ /trunk/sources/HeuristicLab.ExtLibs/HeuristicLab.SpringNET/1.3.0/HeuristicLabSpringNetPlugin.cs	(revision 2904)
@@ -1,3 +1,24 @@
-﻿using System;
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2009 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;
@@ -6,5 +27,6 @@
 
 namespace HeuristicLab.SpringNET {
-  [Plugin("HeuristicLab.SpringNET", "1.3.0")]
+  
+  [Plugin("HeuristicLab.SpringNET", "1.3.0.2849")]
   [PluginFile("HeuristicLab.SpringNET-1.3.0.dll", PluginFileType.Assembly)]
   [PluginFile("Common.Logging.dll", PluginFileType.Assembly)]
@@ -12,6 +34,5 @@
   [PluginFile("Spring.Core.dll", PluginFileType.Assembly)]
   [PluginFile("Spring.Aop.dll", PluginFileType.Assembly)]  
-  public class HeuristicLabSpringNetPlugin: PluginBase {
-
+  public class HeuristicLabSpringNetPlugin : PluginBase {
   }
 }
Index: /trunk/sources/HeuristicLab.ExtLibs/HeuristicLab.SpringNET/1.3.0/HeuristicLabSpringNetPlugin.cs.frame
===================================================================
--- /trunk/sources/HeuristicLab.ExtLibs/HeuristicLab.SpringNET/1.3.0/HeuristicLabSpringNetPlugin.cs.frame	(revision 2904)
+++ /trunk/sources/HeuristicLab.ExtLibs/HeuristicLab.SpringNET/1.3.0/HeuristicLabSpringNetPlugin.cs.frame	(revision 2904)
@@ -0,0 +1,38 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2009 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.Text;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.SpringNET {
+  
+  [Plugin("HeuristicLab.SpringNET", "1.3.0.$WCREV$")]
+  [PluginFile("HeuristicLab.SpringNET-1.3.0.dll", PluginFileType.Assembly)]
+  [PluginFile("Common.Logging.dll", PluginFileType.Assembly)]
+  [PluginFile("Spring.Services.dll", PluginFileType.Assembly)]
+  [PluginFile("Spring.Core.dll", PluginFileType.Assembly)]
+  [PluginFile("Spring.Aop.dll", PluginFileType.Assembly)]  
+  public class HeuristicLabSpringNetPlugin : PluginBase {
+  }
+}
Index: /trunk/sources/HeuristicLab.Hive.Engine/3.2/HeuristicLab.Hive.Engine-3.2.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Engine/3.2/HeuristicLab.Hive.Engine-3.2.csproj	(revision 2903)
+++ /trunk/sources/HeuristicLab.Hive.Engine/3.2/HeuristicLab.Hive.Engine-3.2.csproj	(revision 2904)
@@ -89,5 +89,4 @@
     <Compile Include="HiveEngine.cs" />
     <Compile Include="HiveEngineEditor.cs">
-      <SubType>UserControl</SubType>
     </Compile>
     <Compile Include="HiveEngineEditor.Designer.cs">
Index: /trunk/sources/HeuristicLab.Hive.Server.Core/3.2/ClientCommunicator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.Core/3.2/ClientCommunicator.cs	(revision 2903)
+++ /trunk/sources/HeuristicLab.Hive.Server.Core/3.2/ClientCommunicator.cs	(revision 2904)
@@ -39,4 +39,5 @@
 using System.Runtime.Serialization.Formatters.Binary;
 using HeuristicLab.Tracing;
+using Linq = HeuristicLab.Hive.Server.LINQDataAccess;
 
 namespace HeuristicLab.Hive.Server.Core {
@@ -60,4 +61,6 @@
     private IInternalJobManager jobManager;
     private IScheduler scheduler;
+
+    Linq.ClientDao clientDao = new Linq.ClientDao();
 
     private static int PENDING_TIMEOUT = 100;
@@ -195,12 +198,12 @@
     /// <returns></returns>
     public Response Login(ClientInfo clientInfo) {
-      ISession session = factory.GetSessionForCurrentThread();
-      ITransaction tx = null;
-
-      try {
-        IClientAdapter clientAdapter =
-          session.GetDataAdapter<ClientInfo, IClientAdapter>();
-
-        tx = session.BeginTransaction();
+    //  ISession session = factory.GetSessionForCurrentThread();
+    //  ITransaction tx = null;
+
+    //  try {
+    //    IClientAdapter clientAdapter =
+    //      session.GetDataAdapter<ClientInfo, IClientAdapter>();
+
+    //    tx = session.BeginTransaction();
 
         Response response = new Response();
@@ -215,12 +218,17 @@
 
         clientInfo.State = State.idle;
-        clientAdapter.Update(clientInfo);
+
+        if (clientDao.FindById(clientInfo.Id) == null)
+          clientDao.Insert(clientInfo); 
+        else 
+          clientDao.Update(clientInfo);
+        //clientAdapter.Update(clientInfo);
         response.Success = true;
         response.StatusMessage = ApplicationConstants.RESPONSE_COMMUNICATOR_LOGIN_SUCCESS;
 
-        tx.Commit();
+        //tx.Commit();
         return response;
-      }
-      catch (Exception ex) {
+      //}
+      /*catch (Exception ex) {
         if (tx != null)
           tx.Rollback();
@@ -230,5 +238,5 @@
         if (session != null)
           session.EndSession();
-      }
+      } */
     }
 
Index: /trunk/sources/HeuristicLab.Hive.Server.Core/3.2/ClientFacade.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.Core/3.2/ClientFacade.cs	(revision 2903)
+++ /trunk/sources/HeuristicLab.Hive.Server.Core/3.2/ClientFacade.cs	(revision 2904)
@@ -36,5 +36,8 @@
   [ServiceBehavior(InstanceContextMode =
     InstanceContextMode.PerCall, ConcurrencyMode = ConcurrencyMode.Multiple)]
-  class ClientFacade: IClientFacade {
+  public class ClientFacade: IClientFacade {
+
+    public ClientFacade() {      
+    }
 
     private IClientCommunicator clientCommunicator =
Index: /trunk/sources/HeuristicLab.Hive.Server.Core/3.2/ClientManager.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.Core/3.2/ClientManager.cs	(revision 2903)
+++ /trunk/sources/HeuristicLab.Hive.Server.Core/3.2/ClientManager.cs	(revision 2904)
@@ -29,7 +29,12 @@
 using HeuristicLab.Hive.Server.DataAccess;
 using HeuristicLab.DataAccess.Interfaces;
+using HeuristicLab.Hive.Server.LINQDataAccess;
+using ClientGroup=HeuristicLab.Hive.Contracts.BusinessObjects.ClientGroup;
+using Resource=HeuristicLab.Hive.Contracts.BusinessObjects.Resource;
 
 namespace HeuristicLab.Hive.Server.Core {
   class ClientManager: IClientManager {
+
+    ClientDao clientDao = new ClientDao();
 
     ISessionFactory factory;
Index: /trunk/sources/HeuristicLab.Hive.Server.Core/3.2/DbTestApp.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.Core/3.2/DbTestApp.cs	(revision 2903)
+++ /trunk/sources/HeuristicLab.Hive.Server.Core/3.2/DbTestApp.cs	(revision 2904)
@@ -34,4 +34,5 @@
 using HeuristicLab.Hive.Server.Core;
 using HeuristicLab.Core;
+using HeuristicLab.Hive.Server.LINQDataAccess;
 
 namespace HeuristicLab.Hive.Server {
@@ -298,5 +299,5 @@
 
       IJobAdapter jobAdapter =
-        session.GetDataAdapter<Job, IJobAdapter>();
+        session.GetDataAdapter<HeuristicLab.Hive.Contracts.BusinessObjects.Job, IJobAdapter>();
 
       Stream s = jobAdapter.GetSerializedJobStream(
@@ -358,4 +359,20 @@
       IStorable restoredJob =
         PersistenceManager.RestoreFromGZip(response.Obj.SerializedJobResultData);
+    }
+
+    private void TestLINQImplementation() {      
+      ClientDao clientDao = new ClientDao();      
+      ClientInfo info = new ClientInfo();
+      info.Id = Guid.NewGuid();
+      info.FreeMemory = 1000;
+      info.Login = DateTime.Now;
+      info.Memory = 1000;
+      info.Name = "jackie";
+      info.NrOfCores = 3;
+      info.NrOfFreeCores = 2;
+      info.CpuSpeedPerCore = 2500;
+      info.State = State.idle;
+      info = clientDao.Insert(info);
+
     }
 
@@ -365,6 +382,11 @@
       //TestJobStreaming();
       //TestJobResultStreaming();
-      TestJobResultDeserialization();
-    }
+      //TestJobResultDeserialization();
+
+      TestLINQImplementation();
+
+    }
+
+
   }
 }
Index: /trunk/sources/HeuristicLab.Hive.Server.Core/3.2/ExecutionEngineFacade.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.Core/3.2/ExecutionEngineFacade.cs	(revision 2903)
+++ /trunk/sources/HeuristicLab.Hive.Server.Core/3.2/ExecutionEngineFacade.cs	(revision 2904)
@@ -29,8 +29,12 @@
 
 namespace HeuristicLab.Hive.Server.Core {
-  class ExecutionEngineFacade: IExecutionEngineFacade {
+  public class ExecutionEngineFacade: IExecutionEngineFacade {
 
     private IJobManager jobManager =
       ServiceLocator.GetJobManager();
+
+    public ExecutionEngineFacade() {
+      
+    }
 
     #region IExecutionEngineFacade Members
Index: /trunk/sources/HeuristicLab.Hive.Server.Core/3.2/HeuristicLab.Hive.Server.Core-3.2.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.Core/3.2/HeuristicLab.Hive.Server.Core-3.2.csproj	(revision 2903)
+++ /trunk/sources/HeuristicLab.Hive.Server.Core/3.2/HeuristicLab.Hive.Server.Core-3.2.csproj	(revision 2904)
@@ -68,4 +68,7 @@
     <Reference Include="System" />
     <Reference Include="System.Core">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data.Linq">
       <RequiredTargetFramework>3.5</RequiredTargetFramework>
     </Reference>
@@ -149,4 +152,8 @@
       <Name>HeuristicLab.Hive.Server.DataAccess-3.2</Name>
     </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Hive.Server.LINQDataAccess\3.2\HeuristicLab.Hive.Server.LINQDataAccess-3.2.csproj">
+      <Project>{A4499DDD-D1B8-414F-98F6-903C2C71BEB0}</Project>
+      <Name>HeuristicLab.Hive.Server.LINQDataAccess-3.2</Name>
+    </ProjectReference>
     <ProjectReference Include="..\..\HeuristicLab.PluginInfrastructure\HeuristicLab.PluginInfrastructure.csproj">
       <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
@@ -171,4 +178,7 @@
       <CopyToOutputDirectory>Always</CopyToOutputDirectory>
     </EmbeddedResource>
+  </ItemGroup>
+  <ItemGroup>
+    <WCFMetadata Include="Service References\" />
   </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
Index: /trunk/sources/HeuristicLab.Hive.Server.Core/3.2/ServerConsoleFacade.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.Core/3.2/ServerConsoleFacade.cs	(revision 2903)
+++ /trunk/sources/HeuristicLab.Hive.Server.Core/3.2/ServerConsoleFacade.cs	(revision 2904)
@@ -43,4 +43,7 @@
 
     public Guid sessionID = Guid.Empty;
+
+    public ServerConsoleFacade() {      
+    }
 
     public Response Login(string username, string password) {
Index: /trunk/sources/HeuristicLab.Hive.Server.Core/3.2/app.config
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.Core/3.2/app.config	(revision 2903)
+++ /trunk/sources/HeuristicLab.Hive.Server.Core/3.2/app.config	(revision 2904)
@@ -1,5 +1,9 @@
 ﻿<?xml version="1.0" encoding="utf-8" ?>
 <configuration>
-  <configSections>
+  <configSections>  
+    <sectionGroup name="spring">
+      <section name="context" type="Spring.Context.Support.ContextHandler, Spring.Core"/>
+      <section name="objects" type="Spring.Context.Support.DefaultSectionHandler, Spring.Core"/>
+    </sectionGroup>    
     <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
       <section name="HeuristicLab.Hive.Server.Core.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
@@ -13,3 +17,28 @@
     </HeuristicLab.Hive.Server.Core.Properties.Settings>
   </applicationSettings>
+  <spring>
+    <context>
+      <resource uri="config://spring/objects"/>
+    </context>
+    
+    <objects xmlns="http://www.springframework.net"
+         xmlns:aop="http://www.springframework.net/aop">
+      <object id="calculator" singleton="false"
+              type="HeuristicLab.Hive.Server.Core.ClientFacade, HeuristicLab.Hive.Server.Core-3.2" />
+
+      <object id="serviceOperation" type="Spring.Aop.Support.SdkRegularExpressionMethodPointcut, Spring.Aop">
+        <property name="patterns">
+          <list>
+            <value>HeuristicLab.Hive.Server.Core.ClientFacade.*</value>
+          </list>
+        </property>
+      </object>
+
+      <object id="sci" type="HeuristicLab.Hive.Server.ServiceCallInterception, HeuristicLab.Hive.Server-3.2" />
+
+      <aop:config>
+        <aop:advisor pointcut-ref="serviceOperation" advice-ref="sci"/>
+      </aop:config>
+    </objects>
+  </spring>
 </configuration>
Index: /trunk/sources/HeuristicLab.Hive.Server.LINQDataAccess/3.2/BaseDao.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.LINQDataAccess/3.2/BaseDao.cs	(revision 2904)
+++ /trunk/sources/HeuristicLab.Hive.Server.LINQDataAccess/3.2/BaseDao.cs	(revision 2904)
@@ -0,0 +1,14 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace HeuristicLab.Hive.Server.LINQDataAccess {
+  public class BaseDao {
+    public static HiveDataContext Context {
+      get {
+        return ContextFactory.Context;
+      }
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Hive.Server.LINQDataAccess/3.2/ClientDao.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.LINQDataAccess/3.2/ClientDao.cs	(revision 2904)
+++ /trunk/sources/HeuristicLab.Hive.Server.LINQDataAccess/3.2/ClientDao.cs	(revision 2904)
@@ -0,0 +1,93 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+
+namespace HeuristicLab.Hive.Server.LINQDataAccess {
+  public class ClientDao: BaseDao, IClientDao {
+
+    public ClientDao() {      
+    }
+
+    public ClientInfo FindById(Guid id) {
+      return (from client in Context.Clients
+              where client.ResourceId.Equals(id)
+              select
+                new ClientInfo {
+                  CpuSpeedPerCore = client.CPUSpeed,
+                  FreeMemory = client.FreeMemory,
+                  Id = client.ResourceId,
+                  Login = client.Login,
+                  Memory = client.Memory,
+                  Name = client.Resource.Name,
+                  NrOfCores = client.NumberOfCores,
+                  NrOfFreeCores = client.NumberOfFreeCores,
+                  State = (State)Enum.Parse(typeof(State), client.Status)
+                }
+            ).SingleOrDefault();      
+    }
+
+    public IEnumerable<ClientInfo> FindAll() {
+      return (from client in Context.Clients
+              select
+                new ClientInfo {
+                                 CpuSpeedPerCore = client.CPUSpeed,
+                                 FreeMemory = client.FreeMemory,
+                                 Id = client.ResourceId,
+                                 Login = client.Login,
+                                 Memory = client.Memory,
+                                 Name = client.Resource.Name,
+                                 NrOfCores = client.NumberOfCores,
+                                 NrOfFreeCores = client.NumberOfFreeCores,
+                                 State = (State) Enum.Parse(typeof (State), client.Status)
+                               }
+             ).ToList();
+    }
+
+ 
+    public ClientInfo Insert(ClientInfo info) {
+      Client c = new Client {
+                              CPUSpeed = info.CpuSpeedPerCore,
+                              FreeMemory = info.FreeMemory,
+                              Resource = new Resource {Name = info.Name, ResourceId = info.Id},
+                              Login = info.Login,
+                              Memory = info.Memory,
+                              NumberOfCores = info.NrOfCores,
+                              NumberOfFreeCores = info.NrOfFreeCores,
+                              Status = Enum.GetName(typeof (State), info.State)
+                            };
+
+      Context.Clients.InsertOnSubmit(c);
+      Context.SubmitChanges();
+      info.Id = c.ResourceId;
+      return info;
+    }
+
+    public void Delete(ClientInfo info) {
+      Client client = Context.Clients.SingleOrDefault(c => c.ResourceId.Equals(info.Id));
+      Context.Clients.DeleteOnSubmit(client);
+    }
+
+    public void Update(ClientInfo info) {
+      Client client = Context.Clients.SingleOrDefault(c => c.ResourceId.Equals(info.Id));
+      client.CPUSpeed = info.CpuSpeedPerCore;
+      client.FreeMemory = info.FreeMemory;
+      client.Resource.Name = info.Name;
+      client.Login = info.Login;
+      client.Memory = info.Memory;
+      client.NumberOfCores = info.NrOfCores;
+      client.NumberOfFreeCores = info.NrOfFreeCores;
+      client.Status = Enum.GetName(typeof (State), info.State);
+      Context.SubmitChanges();
+    }
+
+
+
+    #region IGenericDao<ClientInfo,Client> Members
+
+
+
+    #endregion
+  }
+}
Index: /trunk/sources/HeuristicLab.Hive.Server.LINQDataAccess/3.2/ContextFactory.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.LINQDataAccess/3.2/ContextFactory.cs	(revision 2904)
+++ /trunk/sources/HeuristicLab.Hive.Server.LINQDataAccess/3.2/ContextFactory.cs	(revision 2904)
@@ -0,0 +1,19 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace HeuristicLab.Hive.Server.LINQDataAccess {
+  public class ContextFactory {
+    [ThreadStatic]
+    private static HiveDataContext _hiveDataContext;
+
+    public static HiveDataContext Context { 
+      get {
+        if(_hiveDataContext == null) 
+          _hiveDataContext = new HiveDataContext();
+        return _hiveDataContext;        
+      } 
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Hive.Server.LINQDataAccess/3.2/HeuristicLab.Hive.Server.LINQDataAccess-3.2.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.LINQDataAccess/3.2/HeuristicLab.Hive.Server.LINQDataAccess-3.2.csproj	(revision 2903)
+++ /trunk/sources/HeuristicLab.Hive.Server.LINQDataAccess/3.2/HeuristicLab.Hive.Server.LINQDataAccess-3.2.csproj	(revision 2904)
@@ -71,4 +71,9 @@
       <RequiredTargetFramework>3.5</RequiredTargetFramework>
     </Reference>
+    <Reference Include="System.Data.Linq">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Windows.Forms" />
     <Reference Include="System.Xml.Linq">
       <RequiredTargetFramework>3.5</RequiredTargetFramework>
@@ -81,16 +86,58 @@
   </ItemGroup>
   <ItemGroup>
+    <Compile Include="BaseDao.cs" />
+    <Compile Include="ClientDao.cs" />
+    <Compile Include="ContextFactory.cs" />
+    <Compile Include="Hive.designer.cs">
+      <AutoGen>True</AutoGen>
+      <DesignTime>True</DesignTime>
+      <DependentUpon>Hive.dbml</DependentUpon>
+    </Compile>
+    <Compile Include="IClientDao.cs" />
+    <Compile Include="IGenericDao.cs" />
+    <Compile Include="IJobDao.cs" />
     <Compile Include="LINQDataAccessPlugin.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="Properties\Settings.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DesignTimeSharedInput>True</DesignTimeSharedInput>
+      <DependentUpon>Settings.settings</DependentUpon>
+    </Compile>
   </ItemGroup>
   <ItemGroup>
+    <None Include="Hive.dbml">
+      <Generator>MSLinqToSQLGenerator</Generator>
+      <LastGenOutput>Hive.designer.cs</LastGenOutput>
+      <SubType>Designer</SubType>
+    </None>
     <None Include="HeuristicLab.snk" />
     <None Include="Properties\AssemblyInfo.frame" />
   </ItemGroup>
   <ItemGroup>
+    <ProjectReference Include="..\..\HeuristicLab.DataAccess\3.2\HeuristicLab.DataAccess-3.2.csproj">
+      <Project>{9076697B-C151-46CD-95BC-1D059492B478}</Project>
+      <Name>HeuristicLab.DataAccess-3.2</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Hive.Contracts\3.2\HeuristicLab.Hive.Contracts-3.2.csproj">
+      <Project>{134F93D7-E7C8-4ECD-9923-7F63259A60D8}</Project>
+      <Name>HeuristicLab.Hive.Contracts-3.2</Name>
+    </ProjectReference>
     <ProjectReference Include="..\..\HeuristicLab.PluginInfrastructure\HeuristicLab.PluginInfrastructure.csproj">
       <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
       <Name>HeuristicLab.PluginInfrastructure</Name>
     </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <Service Include="{3259AA49-8AA1-44D3-9025-A0B520596A8C}" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="app.config" />
+    <None Include="Hive.dbml.layout">
+      <DependentUpon>Hive.dbml</DependentUpon>
+    </None>
+    <None Include="Properties\Settings.settings">
+      <Generator>SettingsSingleFileGenerator</Generator>
+      <LastGenOutput>Settings.Designer.cs</LastGenOutput>
+    </None>
   </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
Index: /trunk/sources/HeuristicLab.Hive.Server.LINQDataAccess/3.2/Hive.dbml
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.LINQDataAccess/3.2/Hive.dbml	(revision 2904)
+++ /trunk/sources/HeuristicLab.Hive.Server.LINQDataAccess/3.2/Hive.dbml	(revision 2904)
@@ -0,0 +1,122 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Database Name="HeuristicLab.Hive.Linq" Class="HiveDataContext" xmlns="http://schemas.microsoft.com/linqtosql/dbml/2007">
+  <Connection Mode="AppSettings" ConnectionString="Data Source=SEMTEX-PC;Initial Catalog=HeuristicLab.Hive.Linq;Integrated Security=True" SettingsObjectName="HeuristicLab.Hive.Server.LINQDataAccess.Properties.Settings" SettingsPropertyName="HeuristicLab_Hive_LinqConnectionString" Provider="System.Data.SqlClient" />
+  <Table Name="dbo.AssignedResources" Member="AssignedResources">
+    <Type Name="AssignedResource">
+      <Column Name="ResourceId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" CanBeNull="false" />
+      <Column Name="JobId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" CanBeNull="false" />
+      <Column Name="AssignedRessourcesId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" IsDbGenerated="true" CanBeNull="false" />
+      <Association Name="Job_AssignedResource" Member="Job" ThisKey="JobId" OtherKey="JobId" Type="Job" IsForeignKey="true" DeleteRule="CASCADE" DeleteOnNull="true" />
+      <Association Name="Resource_AssignedResource" Member="Resource" ThisKey="ResourceId" OtherKey="ResourceId" Type="Resource" IsForeignKey="true" DeleteRule="CASCADE" DeleteOnNull="true" />
+    </Type>
+  </Table>
+  <Table Name="dbo.UptimeStatistics" Member="UptimeStatistics">
+    <Type Name="UptimeStatistic">
+      <Column Name="UptimeStatisticsId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" IsDbGenerated="true" CanBeNull="false" />
+      <Column Name="Login" Type="System.DateTime" DbType="DateTime" CanBeNull="true" />
+      <Column Name="Logout" Type="System.DateTime" DbType="DateTime" CanBeNull="true" />
+      <Column Name="ResourceId" Type="System.Guid" DbType="UniqueIdentifier" CanBeNull="true" />
+      <Association Name="Client_UptimeStatistic" Member="Client" ThisKey="ResourceId" OtherKey="ResourceId" Type="Client" IsForeignKey="true" DeleteRule="SET NULL" />
+    </Type>
+  </Table>
+  <Table Name="dbo.ClientConfig" Member="ClientConfigs">
+    <Type Name="ClientConfig">
+      <Column Name="ClientConfigId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" IsDbGenerated="true" CanBeNull="false" />
+      <Column Name="UpDownTimeCalendar" Type="System.Xml.Linq.XElement" DbType="Xml" CanBeNull="true" UpdateCheck="Never" />
+      <Column Name="HeartBeatIntervall" Type="System.Int32" DbType="Int" CanBeNull="true" />
+      <Association Name="ClientConfig_Client" Member="Clients" ThisKey="ClientConfigId" OtherKey="ClientConfigId" Type="Client" />
+    </Type>
+  </Table>
+  <Table Name="dbo.ClientGroup" Member="ClientGroups">
+    <Type Name="ClientGroup">
+      <Column Name="ResourceId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
+      <Association Name="ClientGroup_ClientGroup_Resource" Member="ClientGroup_Resources" ThisKey="ResourceId" OtherKey="ClientGroupId" Type="ClientGroup_Resource" />
+      <Association Name="Resource_ClientGroup" Member="Resource" ThisKey="ResourceId" OtherKey="ResourceId" Type="Resource" IsForeignKey="true" DeleteRule="CASCADE" DeleteOnNull="true" />
+    </Type>
+  </Table>
+  <Table Name="dbo.ClientGroup_Resource" Member="ClientGroup_Resources">
+    <Type Name="ClientGroup_Resource">
+      <Column Name="ClientGroupId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" CanBeNull="false" />
+      <Column Name="ResourceId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" CanBeNull="false" />
+      <Column Name="ClientGroup_RessourceId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" IsDbGenerated="true" CanBeNull="false" />
+      <Association Name="ClientGroup_ClientGroup_Resource" Member="ClientGroup" ThisKey="ClientGroupId" OtherKey="ResourceId" Type="ClientGroup" IsForeignKey="true" />
+      <Association Name="Resource_ClientGroup_Resource" Member="Resource" ThisKey="ResourceId" OtherKey="ResourceId" Type="Resource" IsForeignKey="true" DeleteRule="CASCADE" DeleteOnNull="true" />
+    </Type>
+  </Table>
+  <Table Name="dbo.Job" Member="Jobs">
+    <Type Name="Job">
+      <Column Name="JobId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" IsDbGenerated="true" CanBeNull="false" />
+      <Column Name="ParentJobId" Type="System.Guid" DbType="UniqueIdentifier" CanBeNull="true" />
+      <Column Name="JobState" Type="System.String" DbType="VarChar(MAX)" CanBeNull="true" />
+      <Column Name="ResourceId" Type="System.Guid" DbType="UniqueIdentifier" CanBeNull="true" />
+      <Column Name="Percentage" Type="System.Double" DbType="Float" CanBeNull="true" />
+      <Column Name="SerializedJob" Type="System.Data.Linq.Binary" DbType="VarBinary(MAX)" CanBeNull="true" UpdateCheck="Never" />
+      <Column Name="DateCreated" Type="System.DateTime" DbType="DateTime" CanBeNull="true" />
+      <Column Name="DateCalculated" Type="System.DateTime" DbType="DateTime" CanBeNull="true" />
+      <Column Name="DateFinished" Type="System.DateTime" DbType="DateTime" CanBeNull="true" />
+      <Column Name="Priority" Type="System.Int32" DbType="Int" CanBeNull="true" />
+      <Column Name="ProjectId" Type="System.Guid" DbType="UniqueIdentifier" CanBeNull="true" />
+      <Column Name="UserId" Type="System.Guid" DbType="UniqueIdentifier" CanBeNull="true" />
+      <Column Name="CoresNeeded" Type="System.Int32" DbType="Int" CanBeNull="true" />
+      <Column Name="MemoryNeeded" Type="System.Int32" DbType="Int" CanBeNull="true" />
+      <Association Name="Job_AssignedResource" Member="AssignedResources" ThisKey="JobId" OtherKey="JobId" Type="AssignedResource" />
+      <Association Name="Job_Job" Member="Jobs" ThisKey="JobId" OtherKey="ParentJobId" Type="Job" />
+      <Association Name="Job_RequiredPlugin" Member="RequiredPlugins" ThisKey="JobId" OtherKey="JobId" Type="RequiredPlugin" />
+      <Association Name="Job_Job" Member="Job1" ThisKey="ParentJobId" OtherKey="JobId" Type="Job" IsForeignKey="true" />
+      <Association Name="Project_Job" Member="Project" ThisKey="ProjectId" OtherKey="ProjectId" Type="Project" IsForeignKey="true" DeleteRule="SET NULL" />
+      <Association Name="Client_Job" Member="Client" ThisKey="ResourceId" OtherKey="ResourceId" Type="Client" IsForeignKey="true" DeleteRule="SET NULL" />
+    </Type>
+  </Table>
+  <Table Name="dbo.PluginInfo" Member="PluginInfos">
+    <Type Name="PluginInfo">
+      <Column Name="PluginId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" IsDbGenerated="true" CanBeNull="false" />
+      <Column Name="Name" Type="System.String" DbType="VarChar(MAX)" CanBeNull="true" />
+      <Column Name="Version" Type="System.String" DbType="VarChar(MAX)" CanBeNull="true" />
+      <Column Name="BuildDate" Type="System.String" DbType="VarChar(20)" CanBeNull="true" />
+      <Association Name="PluginInfo_RequiredPlugin" Member="RequiredPlugins" ThisKey="PluginId" OtherKey="PluginId" Type="RequiredPlugin" />
+    </Type>
+  </Table>
+  <Table Name="dbo.Project" Member="Projects">
+    <Type Name="Project">
+      <Column Name="ProjectId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" IsDbGenerated="true" CanBeNull="false" />
+      <Column Name="Name" Type="System.String" DbType="VarChar(MAX)" CanBeNull="true" />
+      <Association Name="Project_Job" Member="Jobs" ThisKey="ProjectId" OtherKey="ProjectId" Type="Job" />
+    </Type>
+  </Table>
+  <Table Name="dbo.RequiredPlugins" Member="RequiredPlugins">
+    <Type Name="RequiredPlugin">
+      <Column Name="JobId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" CanBeNull="false" />
+      <Column Name="PluginId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" CanBeNull="false" />
+      <Column Name="RequiredPluginId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" IsDbGenerated="true" CanBeNull="false" />
+      <Association Name="Job_RequiredPlugin" Member="Job" ThisKey="JobId" OtherKey="JobId" Type="Job" IsForeignKey="true" />
+      <Association Name="PluginInfo_RequiredPlugin" Member="PluginInfo" ThisKey="PluginId" OtherKey="PluginId" Type="PluginInfo" IsForeignKey="true" DeleteRule="CASCADE" DeleteOnNull="true" />
+    </Type>
+  </Table>
+  <Table Name="dbo.Resource" Member="Resources">
+    <Type Name="Resource">
+      <Column Name="ResourceId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" IsDbGenerated="true" CanBeNull="false" />
+      <Column Name="Name" Type="System.String" DbType="VarChar(MAX)" CanBeNull="true" />
+      <Association Name="Resource_AssignedResource" Member="AssignedResources" ThisKey="ResourceId" OtherKey="ResourceId" Type="AssignedResource" />
+      <Association Name="Resource_ClientGroup" Member="ClientGroup" ThisKey="ResourceId" OtherKey="ResourceId" Type="ClientGroup" Cardinality="One" />
+      <Association Name="Resource_ClientGroup_Resource" Member="ClientGroup_Resources" ThisKey="ResourceId" OtherKey="ResourceId" Type="ClientGroup_Resource" />
+      <Association Name="Resource_Client" Member="Client" ThisKey="ResourceId" OtherKey="ResourceId" Type="Client" Cardinality="One" />
+    </Type>
+  </Table>
+  <Table Name="dbo.Client" Member="Clients">
+    <Type Name="Client">
+      <Column Name="ResourceId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
+      <Column Name="CPUSpeed" Type="System.Int32" DbType="Int NOT NULL" CanBeNull="false" />
+      <Column Name="Memory" Type="System.Int32" DbType="Int NOT NULL" CanBeNull="false" />
+      <Column Name="Login" Type="System.DateTime" DbType="DateTime NOT NULL" CanBeNull="false" />
+      <Column Name="Status" Type="System.String" DbType="VarChar(MAX)" CanBeNull="true" />
+      <Column Name="ClientConfigId" Type="System.Guid" DbType="UniqueIdentifier" CanBeNull="true" />
+      <Column Name="NumberOfCores" Type="System.Int32" DbType="Int NOT NULL" CanBeNull="false" />
+      <Column Name="NumberOfFreeCores" Type="System.Int32" DbType="Int NOT NULL" CanBeNull="false" />
+      <Column Name="FreeMemory" Type="System.Int32" DbType="Int NOT NULL" CanBeNull="false" />
+      <Association Name="Client_UptimeStatistic" Member="UptimeStatistics" ThisKey="ResourceId" OtherKey="ResourceId" Type="UptimeStatistic" />
+      <Association Name="Client_Job" Member="Jobs" ThisKey="ResourceId" OtherKey="ResourceId" Type="Job" />
+      <Association Name="Resource_Client" Member="Resource" ThisKey="ResourceId" OtherKey="ResourceId" Type="Resource" IsForeignKey="true" DeleteRule="CASCADE" DeleteOnNull="true" />
+      <Association Name="ClientConfig_Client" Member="ClientConfig" ThisKey="ClientConfigId" OtherKey="ClientConfigId" Type="ClientConfig" IsForeignKey="true" DeleteRule="SET NULL" />
+    </Type>
+  </Table>
+</Database>
Index: /trunk/sources/HeuristicLab.Hive.Server.LINQDataAccess/3.2/Hive.dbml.layout
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.LINQDataAccess/3.2/Hive.dbml.layout	(revision 2904)
+++ /trunk/sources/HeuristicLab.Hive.Server.LINQDataAccess/3.2/Hive.dbml.layout	(revision 2904)
@@ -0,0 +1,163 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<ordesignerObjectsDiagram dslVersion="1.0.0.0" absoluteBounds="0, 0, 14.25, 12.625" name="DataClasses1">
+  <DataContextMoniker Name="/HiveDataContext" />
+  <nestedChildShapes>
+    <classShape Id="3bbfffd4-3ad8-4ff9-b0ff-bdddca70b322" absoluteBounds="3.5, 3.75, 2, 1.3862939453125005">
+      <DataClassMoniker Name="/HiveDataContext/AssignedResource" />
+      <nestedChildShapes>
+        <elementListCompartment Id="40e2e788-932b-41d4-9853-f4bc011a045a" absoluteBounds="3.515, 4.21, 1.9700000000000002, 0.8262939453125" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <classShape Id="93016de7-5896-4132-9db6-bc2fe38230fe" absoluteBounds="0.75, 9.25, 2, 1.5785953776041666">
+      <DataClassMoniker Name="/HiveDataContext/UptimeStatistic" />
+      <nestedChildShapes>
+        <elementListCompartment Id="c1f9c6c9-81a2-4007-8bd0-bcadb42ee3d5" absoluteBounds="0.76499999999999968, 9.71, 1.9700000000000002, 1.0185953776041665" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <classShape Id="5f1881a6-9a97-4298-a30e-bc434b948d15" absoluteBounds="3.625, 11, 2, 1.3862939453124987">
+      <DataClassMoniker Name="/HiveDataContext/ClientConfig" />
+      <nestedChildShapes>
+        <elementListCompartment Id="3dbf7375-bb24-421c-a581-712b9ba03996" absoluteBounds="3.64, 11.46, 1.9700000000000002, 0.8262939453125" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <classShape Id="fdda4acc-8a1b-47c8-95ae-5e366f019c84" absoluteBounds="6, 5, 2, 1.0016910807291666">
+      <DataClassMoniker Name="/HiveDataContext/ClientGroup" />
+      <nestedChildShapes>
+        <elementListCompartment Id="a7ba98a6-72ae-4d79-ac43-e86da625101e" absoluteBounds="6.0150000000000006, 5.46, 1.9700000000000002, 0.44169108072916669" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <classShape Id="0535d2ec-d743-4b65-a1d6-70f7af1eead3" absoluteBounds="6, 6.375, 2, 1.3862939453125005">
+      <DataClassMoniker Name="/HiveDataContext/ClientGroup_Resource" />
+      <nestedChildShapes>
+        <elementListCompartment Id="21c0b804-20b8-44c5-8ca5-27abfd546691" absoluteBounds="6.015, 6.835, 1.9700000000000002, 0.8262939453125" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <classShape Id="63840838-dba2-4615-b10b-b812f68ec9a1" absoluteBounds="9, 6.25, 2, 3.5016097005208318">
+      <DataClassMoniker Name="/HiveDataContext/Job" />
+      <nestedChildShapes>
+        <elementListCompartment Id="3758a5b7-d1ea-4673-b0e6-db5da665526e" absoluteBounds="9.015, 6.7100000000000009, 1.9700000000000002, 2.941609700520833" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <classShape Id="a054f27a-f931-4019-b8a0-500bbd926986" absoluteBounds="12, 6.375, 2, 1.5785953776041666">
+      <DataClassMoniker Name="/HiveDataContext/PluginInfo" />
+      <nestedChildShapes>
+        <elementListCompartment Id="02e6b3f0-ccab-4dba-863d-9d35e1214765" absoluteBounds="12.015, 6.835, 1.9700000000000002, 1.0185953776041665" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <classShape Id="401c6a1e-69dc-43e4-a4c6-bfc7c2130170" absoluteBounds="6.25, 10.5, 2, 1.193992513020834">
+      <DataClassMoniker Name="/HiveDataContext/Project" />
+      <nestedChildShapes>
+        <elementListCompartment Id="ca3c7af1-fbed-43b6-8624-d94da9397e73" absoluteBounds="6.265, 10.96, 1.9700000000000002, 0.63399251302083326" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <classShape Id="59a84aec-bc57-49b5-a709-71cdf7612b31" absoluteBounds="12, 8.75, 2, 1.3862939453124987">
+      <DataClassMoniker Name="/HiveDataContext/RequiredPlugin" />
+      <nestedChildShapes>
+        <elementListCompartment Id="eabd8d36-2ac8-4d59-9e58-18e1ce2c7d22" absoluteBounds="12.015, 9.21, 1.9700000000000002, 0.8262939453125" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <classShape Id="e44e8355-4290-42f0-8b46-4473e91e504b" absoluteBounds="3.375, 5.75, 2, 1.1939925130208327">
+      <DataClassMoniker Name="/HiveDataContext/Resource" />
+      <nestedChildShapes>
+        <elementListCompartment Id="822605f6-079e-4225-bd10-dc002d09045d" absoluteBounds="3.39, 6.21, 1.9700000000000002, 0.63399251302083326" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <associationConnector edgePoints="[(7 : 6.00169108072917); (7 : 6.375)]" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/HiveDataContext/ClientGroup/ClientGroup_ClientGroup_Resource" />
+      <nodes>
+        <classShapeMoniker Id="fdda4acc-8a1b-47c8-95ae-5e366f019c84" />
+        <classShapeMoniker Id="0535d2ec-d743-4b65-a1d6-70f7af1eead3" />
+      </nodes>
+    </associationConnector>
+    <associationConnector edgePoints="[(10 : 6.25); (10 : 4.34375); (5.5 : 4.34375)]" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/HiveDataContext/Job/Job_AssignedResource" />
+      <nodes>
+        <classShapeMoniker Id="63840838-dba2-4615-b10b-b812f68ec9a1" />
+        <classShapeMoniker Id="3bbfffd4-3ad8-4ff9-b0ff-bdddca70b322" />
+      </nodes>
+    </associationConnector>
+    <associationConnector edgePoints="[(9.70923076923077 : 9.75160970052083); (9.70923076923077 : 10.0016097005208); (10.3046153846154 : 10.0016097005208); (10.3046153846154 : 9.75160970052083)]" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/HiveDataContext/Job/Job_Job" />
+      <nodes>
+        <classShapeMoniker Id="63840838-dba2-4615-b10b-b812f68ec9a1" />
+        <classShapeMoniker Id="63840838-dba2-4615-b10b-b812f68ec9a1" />
+      </nodes>
+    </associationConnector>
+    <associationConnector edgePoints="[(8.25 : 11.0969962565104); (9.32336288461538 : 11.0969962565104); (9.32336288461538 : 9.75160970052083)]" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/HiveDataContext/Project/Project_Job" />
+      <nodes>
+        <classShapeMoniker Id="401c6a1e-69dc-43e4-a4c6-bfc7c2130170" />
+        <classShapeMoniker Id="63840838-dba2-4615-b10b-b812f68ec9a1" />
+      </nodes>
+    </associationConnector>
+    <associationConnector edgePoints="[(11 : 9.25080485026042); (12 : 9.25080485026042)]" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/HiveDataContext/Job/Job_RequiredPlugin" />
+      <nodes>
+        <classShapeMoniker Id="63840838-dba2-4615-b10b-b812f68ec9a1" />
+        <classShapeMoniker Id="59a84aec-bc57-49b5-a709-71cdf7612b31" />
+      </nodes>
+    </associationConnector>
+    <associationConnector edgePoints="[(13 : 7.95359537760417); (13 : 8.75)]" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/HiveDataContext/PluginInfo/PluginInfo_RequiredPlugin" />
+      <nodes>
+        <classShapeMoniker Id="a054f27a-f931-4019-b8a0-500bbd926986" />
+        <classShapeMoniker Id="59a84aec-bc57-49b5-a709-71cdf7612b31" />
+      </nodes>
+    </associationConnector>
+    <associationConnector edgePoints="[(4.4375 : 5.75); (4.4375 : 5.1362939453125)]" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/HiveDataContext/Resource/Resource_AssignedResource" />
+      <nodes>
+        <classShapeMoniker Id="e44e8355-4290-42f0-8b46-4473e91e504b" />
+        <classShapeMoniker Id="3bbfffd4-3ad8-4ff9-b0ff-bdddca70b322" />
+      </nodes>
+    </associationConnector>
+    <associationConnector edgePoints="[(5.375 : 5.87584554036458); (6 : 5.87584554036458)]" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/HiveDataContext/Resource/Resource_ClientGroup" />
+      <nodes>
+        <classShapeMoniker Id="e44e8355-4290-42f0-8b46-4473e91e504b" />
+        <classShapeMoniker Id="fdda4acc-8a1b-47c8-95ae-5e366f019c84" />
+      </nodes>
+    </associationConnector>
+    <associationConnector edgePoints="[(5.375 : 6.65949625651042); (6 : 6.65949625651042)]" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/HiveDataContext/Resource/Resource_ClientGroup_Resource" />
+      <nodes>
+        <classShapeMoniker Id="e44e8355-4290-42f0-8b46-4473e91e504b" />
+        <classShapeMoniker Id="0535d2ec-d743-4b65-a1d6-70f7af1eead3" />
+      </nodes>
+    </associationConnector>
+    <classShape Id="a2f0b500-6e5f-4de0-b608-64e4b55a73c4" absoluteBounds="3.625, 7.625, 2, 2.5401025390625">
+      <DataClassMoniker Name="/HiveDataContext/Client" />
+      <nestedChildShapes>
+        <elementListCompartment Id="73aab418-5f1d-4648-a326-abf68f213f0e" absoluteBounds="3.64, 8.085, 1.9700000000000002, 1.9801025390625" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <associationConnector edgePoints="[(3.625 : 9.70755126953125); (2.75 : 9.70755126953125)]" fixedFrom="Algorithm" fixedTo="Algorithm">
+      <AssociationMoniker Name="/HiveDataContext/Client/Client_UptimeStatistic" />
+      <nodes>
+        <classShapeMoniker Id="a2f0b500-6e5f-4de0-b608-64e4b55a73c4" />
+        <classShapeMoniker Id="93016de7-5896-4132-9db6-bc2fe38230fe" />
+      </nodes>
+    </associationConnector>
+    <associationConnector edgePoints="[(5.625 : 8.78770182291667); (9 : 8.78770182291667)]" fixedFrom="Algorithm" fixedTo="Algorithm">
+      <AssociationMoniker Name="/HiveDataContext/Client/Client_Job" />
+      <nodes>
+        <classShapeMoniker Id="a2f0b500-6e5f-4de0-b608-64e4b55a73c4" />
+        <classShapeMoniker Id="63840838-dba2-4615-b10b-b812f68ec9a1" />
+      </nodes>
+    </associationConnector>
+    <associationConnector edgePoints="[(4.5 : 6.94399251302083); (4.5 : 7.625)]" fixedFrom="Algorithm" fixedTo="Algorithm">
+      <AssociationMoniker Name="/HiveDataContext/Resource/Resource_Client" />
+      <nodes>
+        <classShapeMoniker Id="e44e8355-4290-42f0-8b46-4473e91e504b" />
+        <classShapeMoniker Id="a2f0b500-6e5f-4de0-b608-64e4b55a73c4" />
+      </nodes>
+    </associationConnector>
+    <associationConnector edgePoints="[(4.625 : 11); (4.625 : 10.1651025390625)]" fixedFrom="Algorithm" fixedTo="Algorithm">
+      <AssociationMoniker Name="/HiveDataContext/ClientConfig/ClientConfig_Client" />
+      <nodes>
+        <classShapeMoniker Id="5f1881a6-9a97-4298-a30e-bc434b948d15" />
+        <classShapeMoniker Id="a2f0b500-6e5f-4de0-b608-64e4b55a73c4" />
+      </nodes>
+    </associationConnector>
+  </nestedChildShapes>
+</ordesignerObjectsDiagram>
Index: /trunk/sources/HeuristicLab.Hive.Server.LINQDataAccess/3.2/Hive.designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.LINQDataAccess/3.2/Hive.designer.cs	(revision 2904)
+++ /trunk/sources/HeuristicLab.Hive.Server.LINQDataAccess/3.2/Hive.designer.cs	(revision 2904)
@@ -0,0 +1,2662 @@
+﻿#pragma warning disable 1591
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:2.0.50727.4927
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HeuristicLab.Hive.Server.LINQDataAccess
+{
+	using System.Data.Linq;
+	using System.Data.Linq.Mapping;
+	using System.Data;
+	using System.Collections.Generic;
+	using System.Reflection;
+	using System.Linq;
+	using System.Linq.Expressions;
+	using System.ComponentModel;
+	using System;
+	
+	
+	[System.Data.Linq.Mapping.DatabaseAttribute(Name="HeuristicLab.Hive.Linq")]
+	public partial class HiveDataContext : System.Data.Linq.DataContext
+	{
+		
+		private static System.Data.Linq.Mapping.MappingSource mappingSource = new AttributeMappingSource();
+		
+    #region Extensibility Method Definitions
+    partial void OnCreated();
+    partial void InsertAssignedResource(AssignedResource instance);
+    partial void UpdateAssignedResource(AssignedResource instance);
+    partial void DeleteAssignedResource(AssignedResource instance);
+    partial void InsertUptimeStatistic(UptimeStatistic instance);
+    partial void UpdateUptimeStatistic(UptimeStatistic instance);
+    partial void DeleteUptimeStatistic(UptimeStatistic instance);
+    partial void InsertClientConfig(ClientConfig instance);
+    partial void UpdateClientConfig(ClientConfig instance);
+    partial void DeleteClientConfig(ClientConfig instance);
+    partial void InsertClientGroup(ClientGroup instance);
+    partial void UpdateClientGroup(ClientGroup instance);
+    partial void DeleteClientGroup(ClientGroup instance);
+    partial void InsertClientGroup_Resource(ClientGroup_Resource instance);
+    partial void UpdateClientGroup_Resource(ClientGroup_Resource instance);
+    partial void DeleteClientGroup_Resource(ClientGroup_Resource instance);
+    partial void InsertJob(Job instance);
+    partial void UpdateJob(Job instance);
+    partial void DeleteJob(Job instance);
+    partial void InsertPluginInfo(PluginInfo instance);
+    partial void UpdatePluginInfo(PluginInfo instance);
+    partial void DeletePluginInfo(PluginInfo instance);
+    partial void InsertProject(Project instance);
+    partial void UpdateProject(Project instance);
+    partial void DeleteProject(Project instance);
+    partial void InsertRequiredPlugin(RequiredPlugin instance);
+    partial void UpdateRequiredPlugin(RequiredPlugin instance);
+    partial void DeleteRequiredPlugin(RequiredPlugin instance);
+    partial void InsertResource(Resource instance);
+    partial void UpdateResource(Resource instance);
+    partial void DeleteResource(Resource instance);
+    partial void InsertClient(Client instance);
+    partial void UpdateClient(Client instance);
+    partial void DeleteClient(Client instance);
+    #endregion
+		
+		public HiveDataContext() : 
+				base(global::HeuristicLab.Hive.Server.LINQDataAccess.Properties.Settings.Default.HeuristicLab_Hive_LinqConnectionString, mappingSource)
+		{
+			OnCreated();
+		}
+		
+		public HiveDataContext(string connection) : 
+				base(connection, mappingSource)
+		{
+			OnCreated();
+		}
+		
+		public HiveDataContext(System.Data.IDbConnection connection) : 
+				base(connection, mappingSource)
+		{
+			OnCreated();
+		}
+		
+		public HiveDataContext(string connection, System.Data.Linq.Mapping.MappingSource mappingSource) : 
+				base(connection, mappingSource)
+		{
+			OnCreated();
+		}
+		
+		public HiveDataContext(System.Data.IDbConnection connection, System.Data.Linq.Mapping.MappingSource mappingSource) : 
+				base(connection, mappingSource)
+		{
+			OnCreated();
+		}
+		
+		public System.Data.Linq.Table<AssignedResource> AssignedResources
+		{
+			get
+			{
+				return this.GetTable<AssignedResource>();
+			}
+		}
+		
+		public System.Data.Linq.Table<UptimeStatistic> UptimeStatistics
+		{
+			get
+			{
+				return this.GetTable<UptimeStatistic>();
+			}
+		}
+		
+		public System.Data.Linq.Table<ClientConfig> ClientConfigs
+		{
+			get
+			{
+				return this.GetTable<ClientConfig>();
+			}
+		}
+		
+		public System.Data.Linq.Table<ClientGroup> ClientGroups
+		{
+			get
+			{
+				return this.GetTable<ClientGroup>();
+			}
+		}
+		
+		public System.Data.Linq.Table<ClientGroup_Resource> ClientGroup_Resources
+		{
+			get
+			{
+				return this.GetTable<ClientGroup_Resource>();
+			}
+		}
+		
+		public System.Data.Linq.Table<Job> Jobs
+		{
+			get
+			{
+				return this.GetTable<Job>();
+			}
+		}
+		
+		public System.Data.Linq.Table<PluginInfo> PluginInfos
+		{
+			get
+			{
+				return this.GetTable<PluginInfo>();
+			}
+		}
+		
+		public System.Data.Linq.Table<Project> Projects
+		{
+			get
+			{
+				return this.GetTable<Project>();
+			}
+		}
+		
+		public System.Data.Linq.Table<RequiredPlugin> RequiredPlugins
+		{
+			get
+			{
+				return this.GetTable<RequiredPlugin>();
+			}
+		}
+		
+		public System.Data.Linq.Table<Resource> Resources
+		{
+			get
+			{
+				return this.GetTable<Resource>();
+			}
+		}
+		
+		public System.Data.Linq.Table<Client> Clients
+		{
+			get
+			{
+				return this.GetTable<Client>();
+			}
+		}
+	}
+	
+	[Table(Name="dbo.AssignedResources")]
+	public partial class AssignedResource : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		private System.Guid _ResourceId;
+		
+		private System.Guid _JobId;
+		
+		private System.Guid _AssignedRessourcesId;
+		
+		private EntityRef<Job> _Job;
+		
+		private EntityRef<Resource> _Resource;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnResourceIdChanging(System.Guid value);
+    partial void OnResourceIdChanged();
+    partial void OnJobIdChanging(System.Guid value);
+    partial void OnJobIdChanged();
+    partial void OnAssignedRessourcesIdChanging(System.Guid value);
+    partial void OnAssignedRessourcesIdChanged();
+    #endregion
+		
+		public AssignedResource()
+		{
+			this._Job = default(EntityRef<Job>);
+			this._Resource = default(EntityRef<Resource>);
+			OnCreated();
+		}
+		
+		[Column(Storage="_ResourceId", DbType="UniqueIdentifier NOT NULL")]
+		public System.Guid ResourceId
+		{
+			get
+			{
+				return this._ResourceId;
+			}
+			set
+			{
+				if ((this._ResourceId != value))
+				{
+					if (this._Resource.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnResourceIdChanging(value);
+					this.SendPropertyChanging();
+					this._ResourceId = value;
+					this.SendPropertyChanged("ResourceId");
+					this.OnResourceIdChanged();
+				}
+			}
+		}
+		
+		[Column(Storage="_JobId", DbType="UniqueIdentifier NOT NULL")]
+		public System.Guid JobId
+		{
+			get
+			{
+				return this._JobId;
+			}
+			set
+			{
+				if ((this._JobId != value))
+				{
+					if (this._Job.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnJobIdChanging(value);
+					this.SendPropertyChanging();
+					this._JobId = value;
+					this.SendPropertyChanged("JobId");
+					this.OnJobIdChanged();
+				}
+			}
+		}
+		
+		[Column(Storage="_AssignedRessourcesId", AutoSync=AutoSync.OnInsert, DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true, IsDbGenerated=true)]
+		public System.Guid AssignedRessourcesId
+		{
+			get
+			{
+				return this._AssignedRessourcesId;
+			}
+			set
+			{
+				if ((this._AssignedRessourcesId != value))
+				{
+					this.OnAssignedRessourcesIdChanging(value);
+					this.SendPropertyChanging();
+					this._AssignedRessourcesId = value;
+					this.SendPropertyChanged("AssignedRessourcesId");
+					this.OnAssignedRessourcesIdChanged();
+				}
+			}
+		}
+		
+		[Association(Name="Job_AssignedResource", Storage="_Job", ThisKey="JobId", OtherKey="JobId", IsForeignKey=true, DeleteOnNull=true, DeleteRule="CASCADE")]
+		public Job Job
+		{
+			get
+			{
+				return this._Job.Entity;
+			}
+			set
+			{
+				Job previousValue = this._Job.Entity;
+				if (((previousValue != value) 
+							|| (this._Job.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._Job.Entity = null;
+						previousValue.AssignedResources.Remove(this);
+					}
+					this._Job.Entity = value;
+					if ((value != null))
+					{
+						value.AssignedResources.Add(this);
+						this._JobId = value.JobId;
+					}
+					else
+					{
+						this._JobId = default(System.Guid);
+					}
+					this.SendPropertyChanged("Job");
+				}
+			}
+		}
+		
+		[Association(Name="Resource_AssignedResource", Storage="_Resource", ThisKey="ResourceId", OtherKey="ResourceId", IsForeignKey=true, DeleteOnNull=true, DeleteRule="CASCADE")]
+		public Resource Resource
+		{
+			get
+			{
+				return this._Resource.Entity;
+			}
+			set
+			{
+				Resource previousValue = this._Resource.Entity;
+				if (((previousValue != value) 
+							|| (this._Resource.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._Resource.Entity = null;
+						previousValue.AssignedResources.Remove(this);
+					}
+					this._Resource.Entity = value;
+					if ((value != null))
+					{
+						value.AssignedResources.Add(this);
+						this._ResourceId = value.ResourceId;
+					}
+					else
+					{
+						this._ResourceId = default(System.Guid);
+					}
+					this.SendPropertyChanged("Resource");
+				}
+			}
+		}
+		
+		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));
+			}
+		}
+	}
+	
+	[Table(Name="dbo.UptimeStatistics")]
+	public partial class UptimeStatistic : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		private System.Guid _UptimeStatisticsId;
+		
+		private System.Nullable<System.DateTime> _Login;
+		
+		private System.Nullable<System.DateTime> _Logout;
+		
+		private System.Nullable<System.Guid> _ResourceId;
+		
+		private EntityRef<Client> _Client;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnUptimeStatisticsIdChanging(System.Guid value);
+    partial void OnUptimeStatisticsIdChanged();
+    partial void OnLoginChanging(System.Nullable<System.DateTime> value);
+    partial void OnLoginChanged();
+    partial void OnLogoutChanging(System.Nullable<System.DateTime> value);
+    partial void OnLogoutChanged();
+    partial void OnResourceIdChanging(System.Nullable<System.Guid> value);
+    partial void OnResourceIdChanged();
+    #endregion
+		
+		public UptimeStatistic()
+		{
+			this._Client = default(EntityRef<Client>);
+			OnCreated();
+		}
+		
+		[Column(Storage="_UptimeStatisticsId", AutoSync=AutoSync.OnInsert, DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true, IsDbGenerated=true)]
+		public System.Guid UptimeStatisticsId
+		{
+			get
+			{
+				return this._UptimeStatisticsId;
+			}
+			set
+			{
+				if ((this._UptimeStatisticsId != value))
+				{
+					this.OnUptimeStatisticsIdChanging(value);
+					this.SendPropertyChanging();
+					this._UptimeStatisticsId = value;
+					this.SendPropertyChanged("UptimeStatisticsId");
+					this.OnUptimeStatisticsIdChanged();
+				}
+			}
+		}
+		
+		[Column(Storage="_Login", DbType="DateTime")]
+		public System.Nullable<System.DateTime> Login
+		{
+			get
+			{
+				return this._Login;
+			}
+			set
+			{
+				if ((this._Login != value))
+				{
+					this.OnLoginChanging(value);
+					this.SendPropertyChanging();
+					this._Login = value;
+					this.SendPropertyChanged("Login");
+					this.OnLoginChanged();
+				}
+			}
+		}
+		
+		[Column(Storage="_Logout", DbType="DateTime")]
+		public System.Nullable<System.DateTime> Logout
+		{
+			get
+			{
+				return this._Logout;
+			}
+			set
+			{
+				if ((this._Logout != value))
+				{
+					this.OnLogoutChanging(value);
+					this.SendPropertyChanging();
+					this._Logout = value;
+					this.SendPropertyChanged("Logout");
+					this.OnLogoutChanged();
+				}
+			}
+		}
+		
+		[Column(Storage="_ResourceId", DbType="UniqueIdentifier")]
+		public System.Nullable<System.Guid> ResourceId
+		{
+			get
+			{
+				return this._ResourceId;
+			}
+			set
+			{
+				if ((this._ResourceId != value))
+				{
+					if (this._Client.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnResourceIdChanging(value);
+					this.SendPropertyChanging();
+					this._ResourceId = value;
+					this.SendPropertyChanged("ResourceId");
+					this.OnResourceIdChanged();
+				}
+			}
+		}
+		
+		[Association(Name="Client_UptimeStatistic", Storage="_Client", ThisKey="ResourceId", OtherKey="ResourceId", IsForeignKey=true, DeleteRule="SET NULL")]
+		public Client Client
+		{
+			get
+			{
+				return this._Client.Entity;
+			}
+			set
+			{
+				Client previousValue = this._Client.Entity;
+				if (((previousValue != value) 
+							|| (this._Client.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._Client.Entity = null;
+						previousValue.UptimeStatistics.Remove(this);
+					}
+					this._Client.Entity = value;
+					if ((value != null))
+					{
+						value.UptimeStatistics.Add(this);
+						this._ResourceId = value.ResourceId;
+					}
+					else
+					{
+						this._ResourceId = default(Nullable<System.Guid>);
+					}
+					this.SendPropertyChanged("Client");
+				}
+			}
+		}
+		
+		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));
+			}
+		}
+	}
+	
+	[Table(Name="dbo.ClientConfig")]
+	public partial class ClientConfig : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		private System.Guid _ClientConfigId;
+		
+		private System.Xml.Linq.XElement _UpDownTimeCalendar;
+		
+		private System.Nullable<int> _HeartBeatIntervall;
+		
+		private EntitySet<Client> _Clients;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnClientConfigIdChanging(System.Guid value);
+    partial void OnClientConfigIdChanged();
+    partial void OnUpDownTimeCalendarChanging(System.Xml.Linq.XElement value);
+    partial void OnUpDownTimeCalendarChanged();
+    partial void OnHeartBeatIntervallChanging(System.Nullable<int> value);
+    partial void OnHeartBeatIntervallChanged();
+    #endregion
+		
+		public ClientConfig()
+		{
+			this._Clients = new EntitySet<Client>(new Action<Client>(this.attach_Clients), new Action<Client>(this.detach_Clients));
+			OnCreated();
+		}
+		
+		[Column(Storage="_ClientConfigId", AutoSync=AutoSync.OnInsert, DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true, IsDbGenerated=true)]
+		public System.Guid ClientConfigId
+		{
+			get
+			{
+				return this._ClientConfigId;
+			}
+			set
+			{
+				if ((this._ClientConfigId != value))
+				{
+					this.OnClientConfigIdChanging(value);
+					this.SendPropertyChanging();
+					this._ClientConfigId = value;
+					this.SendPropertyChanged("ClientConfigId");
+					this.OnClientConfigIdChanged();
+				}
+			}
+		}
+		
+		[Column(Storage="_UpDownTimeCalendar", DbType="Xml", UpdateCheck=UpdateCheck.Never)]
+		public System.Xml.Linq.XElement UpDownTimeCalendar
+		{
+			get
+			{
+				return this._UpDownTimeCalendar;
+			}
+			set
+			{
+				if ((this._UpDownTimeCalendar != value))
+				{
+					this.OnUpDownTimeCalendarChanging(value);
+					this.SendPropertyChanging();
+					this._UpDownTimeCalendar = value;
+					this.SendPropertyChanged("UpDownTimeCalendar");
+					this.OnUpDownTimeCalendarChanged();
+				}
+			}
+		}
+		
+		[Column(Storage="_HeartBeatIntervall", DbType="Int")]
+		public System.Nullable<int> HeartBeatIntervall
+		{
+			get
+			{
+				return this._HeartBeatIntervall;
+			}
+			set
+			{
+				if ((this._HeartBeatIntervall != value))
+				{
+					this.OnHeartBeatIntervallChanging(value);
+					this.SendPropertyChanging();
+					this._HeartBeatIntervall = value;
+					this.SendPropertyChanged("HeartBeatIntervall");
+					this.OnHeartBeatIntervallChanged();
+				}
+			}
+		}
+		
+		[Association(Name="ClientConfig_Client", Storage="_Clients", ThisKey="ClientConfigId", OtherKey="ClientConfigId")]
+		public EntitySet<Client> Clients
+		{
+			get
+			{
+				return this._Clients;
+			}
+			set
+			{
+				this._Clients.Assign(value);
+			}
+		}
+		
+		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));
+			}
+		}
+		
+		private void attach_Clients(Client entity)
+		{
+			this.SendPropertyChanging();
+			entity.ClientConfig = this;
+		}
+		
+		private void detach_Clients(Client entity)
+		{
+			this.SendPropertyChanging();
+			entity.ClientConfig = null;
+		}
+	}
+	
+	[Table(Name="dbo.ClientGroup")]
+	public partial class ClientGroup : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		private System.Guid _ResourceId;
+		
+		private EntitySet<ClientGroup_Resource> _ClientGroup_Resources;
+		
+		private EntityRef<Resource> _Resource;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnResourceIdChanging(System.Guid value);
+    partial void OnResourceIdChanged();
+    #endregion
+		
+		public ClientGroup()
+		{
+			this._ClientGroup_Resources = new EntitySet<ClientGroup_Resource>(new Action<ClientGroup_Resource>(this.attach_ClientGroup_Resources), new Action<ClientGroup_Resource>(this.detach_ClientGroup_Resources));
+			this._Resource = default(EntityRef<Resource>);
+			OnCreated();
+		}
+		
+		[Column(Storage="_ResourceId", DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true)]
+		public System.Guid ResourceId
+		{
+			get
+			{
+				return this._ResourceId;
+			}
+			set
+			{
+				if ((this._ResourceId != value))
+				{
+					if (this._Resource.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnResourceIdChanging(value);
+					this.SendPropertyChanging();
+					this._ResourceId = value;
+					this.SendPropertyChanged("ResourceId");
+					this.OnResourceIdChanged();
+				}
+			}
+		}
+		
+		[Association(Name="ClientGroup_ClientGroup_Resource", Storage="_ClientGroup_Resources", ThisKey="ResourceId", OtherKey="ClientGroupId")]
+		public EntitySet<ClientGroup_Resource> ClientGroup_Resources
+		{
+			get
+			{
+				return this._ClientGroup_Resources;
+			}
+			set
+			{
+				this._ClientGroup_Resources.Assign(value);
+			}
+		}
+		
+		[Association(Name="Resource_ClientGroup", Storage="_Resource", ThisKey="ResourceId", OtherKey="ResourceId", IsForeignKey=true, DeleteOnNull=true, DeleteRule="CASCADE")]
+		public Resource Resource
+		{
+			get
+			{
+				return this._Resource.Entity;
+			}
+			set
+			{
+				Resource previousValue = this._Resource.Entity;
+				if (((previousValue != value) 
+							|| (this._Resource.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._Resource.Entity = null;
+						previousValue.ClientGroup = null;
+					}
+					this._Resource.Entity = value;
+					if ((value != null))
+					{
+						value.ClientGroup = this;
+						this._ResourceId = value.ResourceId;
+					}
+					else
+					{
+						this._ResourceId = default(System.Guid);
+					}
+					this.SendPropertyChanged("Resource");
+				}
+			}
+		}
+		
+		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));
+			}
+		}
+		
+		private void attach_ClientGroup_Resources(ClientGroup_Resource entity)
+		{
+			this.SendPropertyChanging();
+			entity.ClientGroup = this;
+		}
+		
+		private void detach_ClientGroup_Resources(ClientGroup_Resource entity)
+		{
+			this.SendPropertyChanging();
+			entity.ClientGroup = null;
+		}
+	}
+	
+	[Table(Name="dbo.ClientGroup_Resource")]
+	public partial class ClientGroup_Resource : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		private System.Guid _ClientGroupId;
+		
+		private System.Guid _ResourceId;
+		
+		private System.Guid _ClientGroup_RessourceId;
+		
+		private EntityRef<ClientGroup> _ClientGroup;
+		
+		private EntityRef<Resource> _Resource;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnClientGroupIdChanging(System.Guid value);
+    partial void OnClientGroupIdChanged();
+    partial void OnResourceIdChanging(System.Guid value);
+    partial void OnResourceIdChanged();
+    partial void OnClientGroup_RessourceIdChanging(System.Guid value);
+    partial void OnClientGroup_RessourceIdChanged();
+    #endregion
+		
+		public ClientGroup_Resource()
+		{
+			this._ClientGroup = default(EntityRef<ClientGroup>);
+			this._Resource = default(EntityRef<Resource>);
+			OnCreated();
+		}
+		
+		[Column(Storage="_ClientGroupId", DbType="UniqueIdentifier NOT NULL")]
+		public System.Guid ClientGroupId
+		{
+			get
+			{
+				return this._ClientGroupId;
+			}
+			set
+			{
+				if ((this._ClientGroupId != value))
+				{
+					if (this._ClientGroup.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnClientGroupIdChanging(value);
+					this.SendPropertyChanging();
+					this._ClientGroupId = value;
+					this.SendPropertyChanged("ClientGroupId");
+					this.OnClientGroupIdChanged();
+				}
+			}
+		}
+		
+		[Column(Storage="_ResourceId", DbType="UniqueIdentifier NOT NULL")]
+		public System.Guid ResourceId
+		{
+			get
+			{
+				return this._ResourceId;
+			}
+			set
+			{
+				if ((this._ResourceId != value))
+				{
+					if (this._Resource.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnResourceIdChanging(value);
+					this.SendPropertyChanging();
+					this._ResourceId = value;
+					this.SendPropertyChanged("ResourceId");
+					this.OnResourceIdChanged();
+				}
+			}
+		}
+		
+		[Column(Storage="_ClientGroup_RessourceId", AutoSync=AutoSync.OnInsert, DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true, IsDbGenerated=true)]
+		public System.Guid ClientGroup_RessourceId
+		{
+			get
+			{
+				return this._ClientGroup_RessourceId;
+			}
+			set
+			{
+				if ((this._ClientGroup_RessourceId != value))
+				{
+					this.OnClientGroup_RessourceIdChanging(value);
+					this.SendPropertyChanging();
+					this._ClientGroup_RessourceId = value;
+					this.SendPropertyChanged("ClientGroup_RessourceId");
+					this.OnClientGroup_RessourceIdChanged();
+				}
+			}
+		}
+		
+		[Association(Name="ClientGroup_ClientGroup_Resource", Storage="_ClientGroup", ThisKey="ClientGroupId", OtherKey="ResourceId", IsForeignKey=true)]
+		public ClientGroup ClientGroup
+		{
+			get
+			{
+				return this._ClientGroup.Entity;
+			}
+			set
+			{
+				ClientGroup previousValue = this._ClientGroup.Entity;
+				if (((previousValue != value) 
+							|| (this._ClientGroup.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._ClientGroup.Entity = null;
+						previousValue.ClientGroup_Resources.Remove(this);
+					}
+					this._ClientGroup.Entity = value;
+					if ((value != null))
+					{
+						value.ClientGroup_Resources.Add(this);
+						this._ClientGroupId = value.ResourceId;
+					}
+					else
+					{
+						this._ClientGroupId = default(System.Guid);
+					}
+					this.SendPropertyChanged("ClientGroup");
+				}
+			}
+		}
+		
+		[Association(Name="Resource_ClientGroup_Resource", Storage="_Resource", ThisKey="ResourceId", OtherKey="ResourceId", IsForeignKey=true, DeleteOnNull=true, DeleteRule="CASCADE")]
+		public Resource Resource
+		{
+			get
+			{
+				return this._Resource.Entity;
+			}
+			set
+			{
+				Resource previousValue = this._Resource.Entity;
+				if (((previousValue != value) 
+							|| (this._Resource.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._Resource.Entity = null;
+						previousValue.ClientGroup_Resources.Remove(this);
+					}
+					this._Resource.Entity = value;
+					if ((value != null))
+					{
+						value.ClientGroup_Resources.Add(this);
+						this._ResourceId = value.ResourceId;
+					}
+					else
+					{
+						this._ResourceId = default(System.Guid);
+					}
+					this.SendPropertyChanged("Resource");
+				}
+			}
+		}
+		
+		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));
+			}
+		}
+	}
+	
+	[Table(Name="dbo.Job")]
+	public partial class Job : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		private System.Guid _JobId;
+		
+		private System.Nullable<System.Guid> _ParentJobId;
+		
+		private string _JobState;
+		
+		private System.Nullable<System.Guid> _ResourceId;
+		
+		private System.Nullable<double> _Percentage;
+		
+		private System.Data.Linq.Binary _SerializedJob;
+		
+		private System.Nullable<System.DateTime> _DateCreated;
+		
+		private System.Nullable<System.DateTime> _DateCalculated;
+		
+		private System.Nullable<System.DateTime> _DateFinished;
+		
+		private System.Nullable<int> _Priority;
+		
+		private System.Nullable<System.Guid> _ProjectId;
+		
+		private System.Nullable<System.Guid> _UserId;
+		
+		private System.Nullable<int> _CoresNeeded;
+		
+		private System.Nullable<int> _MemoryNeeded;
+		
+		private EntitySet<AssignedResource> _AssignedResources;
+		
+		private EntitySet<Job> _Jobs;
+		
+		private EntitySet<RequiredPlugin> _RequiredPlugins;
+		
+		private EntityRef<Job> _Job1;
+		
+		private EntityRef<Project> _Project;
+		
+		private EntityRef<Client> _Client;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnJobIdChanging(System.Guid value);
+    partial void OnJobIdChanged();
+    partial void OnParentJobIdChanging(System.Nullable<System.Guid> value);
+    partial void OnParentJobIdChanged();
+    partial void OnJobStateChanging(string value);
+    partial void OnJobStateChanged();
+    partial void OnResourceIdChanging(System.Nullable<System.Guid> value);
+    partial void OnResourceIdChanged();
+    partial void OnPercentageChanging(System.Nullable<double> value);
+    partial void OnPercentageChanged();
+    partial void OnSerializedJobChanging(System.Data.Linq.Binary value);
+    partial void OnSerializedJobChanged();
+    partial void OnDateCreatedChanging(System.Nullable<System.DateTime> value);
+    partial void OnDateCreatedChanged();
+    partial void OnDateCalculatedChanging(System.Nullable<System.DateTime> value);
+    partial void OnDateCalculatedChanged();
+    partial void OnDateFinishedChanging(System.Nullable<System.DateTime> value);
+    partial void OnDateFinishedChanged();
+    partial void OnPriorityChanging(System.Nullable<int> value);
+    partial void OnPriorityChanged();
+    partial void OnProjectIdChanging(System.Nullable<System.Guid> value);
+    partial void OnProjectIdChanged();
+    partial void OnUserIdChanging(System.Nullable<System.Guid> value);
+    partial void OnUserIdChanged();
+    partial void OnCoresNeededChanging(System.Nullable<int> value);
+    partial void OnCoresNeededChanged();
+    partial void OnMemoryNeededChanging(System.Nullable<int> value);
+    partial void OnMemoryNeededChanged();
+    #endregion
+		
+		public Job()
+		{
+			this._AssignedResources = new EntitySet<AssignedResource>(new Action<AssignedResource>(this.attach_AssignedResources), new Action<AssignedResource>(this.detach_AssignedResources));
+			this._Jobs = new EntitySet<Job>(new Action<Job>(this.attach_Jobs), new Action<Job>(this.detach_Jobs));
+			this._RequiredPlugins = new EntitySet<RequiredPlugin>(new Action<RequiredPlugin>(this.attach_RequiredPlugins), new Action<RequiredPlugin>(this.detach_RequiredPlugins));
+			this._Job1 = default(EntityRef<Job>);
+			this._Project = default(EntityRef<Project>);
+			this._Client = default(EntityRef<Client>);
+			OnCreated();
+		}
+		
+		[Column(Storage="_JobId", AutoSync=AutoSync.OnInsert, DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true, IsDbGenerated=true)]
+		public System.Guid JobId
+		{
+			get
+			{
+				return this._JobId;
+			}
+			set
+			{
+				if ((this._JobId != value))
+				{
+					this.OnJobIdChanging(value);
+					this.SendPropertyChanging();
+					this._JobId = value;
+					this.SendPropertyChanged("JobId");
+					this.OnJobIdChanged();
+				}
+			}
+		}
+		
+		[Column(Storage="_ParentJobId", DbType="UniqueIdentifier")]
+		public System.Nullable<System.Guid> ParentJobId
+		{
+			get
+			{
+				return this._ParentJobId;
+			}
+			set
+			{
+				if ((this._ParentJobId != value))
+				{
+					if (this._Job1.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnParentJobIdChanging(value);
+					this.SendPropertyChanging();
+					this._ParentJobId = value;
+					this.SendPropertyChanged("ParentJobId");
+					this.OnParentJobIdChanged();
+				}
+			}
+		}
+		
+		[Column(Storage="_JobState", DbType="VarChar(MAX)")]
+		public string JobState
+		{
+			get
+			{
+				return this._JobState;
+			}
+			set
+			{
+				if ((this._JobState != value))
+				{
+					this.OnJobStateChanging(value);
+					this.SendPropertyChanging();
+					this._JobState = value;
+					this.SendPropertyChanged("JobState");
+					this.OnJobStateChanged();
+				}
+			}
+		}
+		
+		[Column(Storage="_ResourceId", DbType="UniqueIdentifier")]
+		public System.Nullable<System.Guid> ResourceId
+		{
+			get
+			{
+				return this._ResourceId;
+			}
+			set
+			{
+				if ((this._ResourceId != value))
+				{
+					if (this._Client.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnResourceIdChanging(value);
+					this.SendPropertyChanging();
+					this._ResourceId = value;
+					this.SendPropertyChanged("ResourceId");
+					this.OnResourceIdChanged();
+				}
+			}
+		}
+		
+		[Column(Storage="_Percentage", DbType="Float")]
+		public System.Nullable<double> Percentage
+		{
+			get
+			{
+				return this._Percentage;
+			}
+			set
+			{
+				if ((this._Percentage != value))
+				{
+					this.OnPercentageChanging(value);
+					this.SendPropertyChanging();
+					this._Percentage = value;
+					this.SendPropertyChanged("Percentage");
+					this.OnPercentageChanged();
+				}
+			}
+		}
+		
+		[Column(Storage="_SerializedJob", DbType="VarBinary(MAX)", UpdateCheck=UpdateCheck.Never)]
+		public System.Data.Linq.Binary SerializedJob
+		{
+			get
+			{
+				return this._SerializedJob;
+			}
+			set
+			{
+				if ((this._SerializedJob != value))
+				{
+					this.OnSerializedJobChanging(value);
+					this.SendPropertyChanging();
+					this._SerializedJob = value;
+					this.SendPropertyChanged("SerializedJob");
+					this.OnSerializedJobChanged();
+				}
+			}
+		}
+		
+		[Column(Storage="_DateCreated", DbType="DateTime")]
+		public System.Nullable<System.DateTime> DateCreated
+		{
+			get
+			{
+				return this._DateCreated;
+			}
+			set
+			{
+				if ((this._DateCreated != value))
+				{
+					this.OnDateCreatedChanging(value);
+					this.SendPropertyChanging();
+					this._DateCreated = value;
+					this.SendPropertyChanged("DateCreated");
+					this.OnDateCreatedChanged();
+				}
+			}
+		}
+		
+		[Column(Storage="_DateCalculated", DbType="DateTime")]
+		public System.Nullable<System.DateTime> DateCalculated
+		{
+			get
+			{
+				return this._DateCalculated;
+			}
+			set
+			{
+				if ((this._DateCalculated != value))
+				{
+					this.OnDateCalculatedChanging(value);
+					this.SendPropertyChanging();
+					this._DateCalculated = value;
+					this.SendPropertyChanged("DateCalculated");
+					this.OnDateCalculatedChanged();
+				}
+			}
+		}
+		
+		[Column(Storage="_DateFinished", DbType="DateTime")]
+		public System.Nullable<System.DateTime> DateFinished
+		{
+			get
+			{
+				return this._DateFinished;
+			}
+			set
+			{
+				if ((this._DateFinished != value))
+				{
+					this.OnDateFinishedChanging(value);
+					this.SendPropertyChanging();
+					this._DateFinished = value;
+					this.SendPropertyChanged("DateFinished");
+					this.OnDateFinishedChanged();
+				}
+			}
+		}
+		
+		[Column(Storage="_Priority", DbType="Int")]
+		public System.Nullable<int> Priority
+		{
+			get
+			{
+				return this._Priority;
+			}
+			set
+			{
+				if ((this._Priority != value))
+				{
+					this.OnPriorityChanging(value);
+					this.SendPropertyChanging();
+					this._Priority = value;
+					this.SendPropertyChanged("Priority");
+					this.OnPriorityChanged();
+				}
+			}
+		}
+		
+		[Column(Storage="_ProjectId", DbType="UniqueIdentifier")]
+		public System.Nullable<System.Guid> ProjectId
+		{
+			get
+			{
+				return this._ProjectId;
+			}
+			set
+			{
+				if ((this._ProjectId != value))
+				{
+					if (this._Project.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnProjectIdChanging(value);
+					this.SendPropertyChanging();
+					this._ProjectId = value;
+					this.SendPropertyChanged("ProjectId");
+					this.OnProjectIdChanged();
+				}
+			}
+		}
+		
+		[Column(Storage="_UserId", DbType="UniqueIdentifier")]
+		public System.Nullable<System.Guid> UserId
+		{
+			get
+			{
+				return this._UserId;
+			}
+			set
+			{
+				if ((this._UserId != value))
+				{
+					this.OnUserIdChanging(value);
+					this.SendPropertyChanging();
+					this._UserId = value;
+					this.SendPropertyChanged("UserId");
+					this.OnUserIdChanged();
+				}
+			}
+		}
+		
+		[Column(Storage="_CoresNeeded", DbType="Int")]
+		public System.Nullable<int> CoresNeeded
+		{
+			get
+			{
+				return this._CoresNeeded;
+			}
+			set
+			{
+				if ((this._CoresNeeded != value))
+				{
+					this.OnCoresNeededChanging(value);
+					this.SendPropertyChanging();
+					this._CoresNeeded = value;
+					this.SendPropertyChanged("CoresNeeded");
+					this.OnCoresNeededChanged();
+				}
+			}
+		}
+		
+		[Column(Storage="_MemoryNeeded", DbType="Int")]
+		public System.Nullable<int> MemoryNeeded
+		{
+			get
+			{
+				return this._MemoryNeeded;
+			}
+			set
+			{
+				if ((this._MemoryNeeded != value))
+				{
+					this.OnMemoryNeededChanging(value);
+					this.SendPropertyChanging();
+					this._MemoryNeeded = value;
+					this.SendPropertyChanged("MemoryNeeded");
+					this.OnMemoryNeededChanged();
+				}
+			}
+		}
+		
+		[Association(Name="Job_AssignedResource", Storage="_AssignedResources", ThisKey="JobId", OtherKey="JobId")]
+		public EntitySet<AssignedResource> AssignedResources
+		{
+			get
+			{
+				return this._AssignedResources;
+			}
+			set
+			{
+				this._AssignedResources.Assign(value);
+			}
+		}
+		
+		[Association(Name="Job_Job", Storage="_Jobs", ThisKey="JobId", OtherKey="ParentJobId")]
+		public EntitySet<Job> Jobs
+		{
+			get
+			{
+				return this._Jobs;
+			}
+			set
+			{
+				this._Jobs.Assign(value);
+			}
+		}
+		
+		[Association(Name="Job_RequiredPlugin", Storage="_RequiredPlugins", ThisKey="JobId", OtherKey="JobId")]
+		public EntitySet<RequiredPlugin> RequiredPlugins
+		{
+			get
+			{
+				return this._RequiredPlugins;
+			}
+			set
+			{
+				this._RequiredPlugins.Assign(value);
+			}
+		}
+		
+		[Association(Name="Job_Job", Storage="_Job1", ThisKey="ParentJobId", OtherKey="JobId", IsForeignKey=true)]
+		public Job Job1
+		{
+			get
+			{
+				return this._Job1.Entity;
+			}
+			set
+			{
+				Job previousValue = this._Job1.Entity;
+				if (((previousValue != value) 
+							|| (this._Job1.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._Job1.Entity = null;
+						previousValue.Jobs.Remove(this);
+					}
+					this._Job1.Entity = value;
+					if ((value != null))
+					{
+						value.Jobs.Add(this);
+						this._ParentJobId = value.JobId;
+					}
+					else
+					{
+						this._ParentJobId = default(Nullable<System.Guid>);
+					}
+					this.SendPropertyChanged("Job1");
+				}
+			}
+		}
+		
+		[Association(Name="Project_Job", Storage="_Project", ThisKey="ProjectId", OtherKey="ProjectId", IsForeignKey=true, DeleteRule="SET NULL")]
+		public Project Project
+		{
+			get
+			{
+				return this._Project.Entity;
+			}
+			set
+			{
+				Project previousValue = this._Project.Entity;
+				if (((previousValue != value) 
+							|| (this._Project.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._Project.Entity = null;
+						previousValue.Jobs.Remove(this);
+					}
+					this._Project.Entity = value;
+					if ((value != null))
+					{
+						value.Jobs.Add(this);
+						this._ProjectId = value.ProjectId;
+					}
+					else
+					{
+						this._ProjectId = default(Nullable<System.Guid>);
+					}
+					this.SendPropertyChanged("Project");
+				}
+			}
+		}
+		
+		[Association(Name="Client_Job", Storage="_Client", ThisKey="ResourceId", OtherKey="ResourceId", IsForeignKey=true, DeleteRule="SET NULL")]
+		public Client Client
+		{
+			get
+			{
+				return this._Client.Entity;
+			}
+			set
+			{
+				Client previousValue = this._Client.Entity;
+				if (((previousValue != value) 
+							|| (this._Client.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._Client.Entity = null;
+						previousValue.Jobs.Remove(this);
+					}
+					this._Client.Entity = value;
+					if ((value != null))
+					{
+						value.Jobs.Add(this);
+						this._ResourceId = value.ResourceId;
+					}
+					else
+					{
+						this._ResourceId = default(Nullable<System.Guid>);
+					}
+					this.SendPropertyChanged("Client");
+				}
+			}
+		}
+		
+		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));
+			}
+		}
+		
+		private void attach_AssignedResources(AssignedResource entity)
+		{
+			this.SendPropertyChanging();
+			entity.Job = this;
+		}
+		
+		private void detach_AssignedResources(AssignedResource entity)
+		{
+			this.SendPropertyChanging();
+			entity.Job = null;
+		}
+		
+		private void attach_Jobs(Job entity)
+		{
+			this.SendPropertyChanging();
+			entity.Job1 = this;
+		}
+		
+		private void detach_Jobs(Job entity)
+		{
+			this.SendPropertyChanging();
+			entity.Job1 = null;
+		}
+		
+		private void attach_RequiredPlugins(RequiredPlugin entity)
+		{
+			this.SendPropertyChanging();
+			entity.Job = this;
+		}
+		
+		private void detach_RequiredPlugins(RequiredPlugin entity)
+		{
+			this.SendPropertyChanging();
+			entity.Job = null;
+		}
+	}
+	
+	[Table(Name="dbo.PluginInfo")]
+	public partial class PluginInfo : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		private System.Guid _PluginId;
+		
+		private string _Name;
+		
+		private string _Version;
+		
+		private string _BuildDate;
+		
+		private EntitySet<RequiredPlugin> _RequiredPlugins;
+		
+    #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 OnNameChanging(string value);
+    partial void OnNameChanged();
+    partial void OnVersionChanging(string value);
+    partial void OnVersionChanged();
+    partial void OnBuildDateChanging(string value);
+    partial void OnBuildDateChanged();
+    #endregion
+		
+		public PluginInfo()
+		{
+			this._RequiredPlugins = new EntitySet<RequiredPlugin>(new Action<RequiredPlugin>(this.attach_RequiredPlugins), new Action<RequiredPlugin>(this.detach_RequiredPlugins));
+			OnCreated();
+		}
+		
+		[Column(Storage="_PluginId", AutoSync=AutoSync.OnInsert, DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true, IsDbGenerated=true)]
+		public System.Guid PluginId
+		{
+			get
+			{
+				return this._PluginId;
+			}
+			set
+			{
+				if ((this._PluginId != value))
+				{
+					this.OnPluginIdChanging(value);
+					this.SendPropertyChanging();
+					this._PluginId = value;
+					this.SendPropertyChanged("PluginId");
+					this.OnPluginIdChanged();
+				}
+			}
+		}
+		
+		[Column(Storage="_Name", DbType="VarChar(MAX)")]
+		public string Name
+		{
+			get
+			{
+				return this._Name;
+			}
+			set
+			{
+				if ((this._Name != value))
+				{
+					this.OnNameChanging(value);
+					this.SendPropertyChanging();
+					this._Name = value;
+					this.SendPropertyChanged("Name");
+					this.OnNameChanged();
+				}
+			}
+		}
+		
+		[Column(Storage="_Version", DbType="VarChar(MAX)")]
+		public string Version
+		{
+			get
+			{
+				return this._Version;
+			}
+			set
+			{
+				if ((this._Version != value))
+				{
+					this.OnVersionChanging(value);
+					this.SendPropertyChanging();
+					this._Version = value;
+					this.SendPropertyChanged("Version");
+					this.OnVersionChanged();
+				}
+			}
+		}
+		
+		[Column(Storage="_BuildDate", DbType="VarChar(20)")]
+		public string BuildDate
+		{
+			get
+			{
+				return this._BuildDate;
+			}
+			set
+			{
+				if ((this._BuildDate != value))
+				{
+					this.OnBuildDateChanging(value);
+					this.SendPropertyChanging();
+					this._BuildDate = value;
+					this.SendPropertyChanged("BuildDate");
+					this.OnBuildDateChanged();
+				}
+			}
+		}
+		
+		[Association(Name="PluginInfo_RequiredPlugin", Storage="_RequiredPlugins", ThisKey="PluginId", OtherKey="PluginId")]
+		public EntitySet<RequiredPlugin> RequiredPlugins
+		{
+			get
+			{
+				return this._RequiredPlugins;
+			}
+			set
+			{
+				this._RequiredPlugins.Assign(value);
+			}
+		}
+		
+		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));
+			}
+		}
+		
+		private void attach_RequiredPlugins(RequiredPlugin entity)
+		{
+			this.SendPropertyChanging();
+			entity.PluginInfo = this;
+		}
+		
+		private void detach_RequiredPlugins(RequiredPlugin entity)
+		{
+			this.SendPropertyChanging();
+			entity.PluginInfo = null;
+		}
+	}
+	
+	[Table(Name="dbo.Project")]
+	public partial class Project : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		private System.Guid _ProjectId;
+		
+		private string _Name;
+		
+		private EntitySet<Job> _Jobs;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnProjectIdChanging(System.Guid value);
+    partial void OnProjectIdChanged();
+    partial void OnNameChanging(string value);
+    partial void OnNameChanged();
+    #endregion
+		
+		public Project()
+		{
+			this._Jobs = new EntitySet<Job>(new Action<Job>(this.attach_Jobs), new Action<Job>(this.detach_Jobs));
+			OnCreated();
+		}
+		
+		[Column(Storage="_ProjectId", AutoSync=AutoSync.OnInsert, DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true, IsDbGenerated=true)]
+		public System.Guid ProjectId
+		{
+			get
+			{
+				return this._ProjectId;
+			}
+			set
+			{
+				if ((this._ProjectId != value))
+				{
+					this.OnProjectIdChanging(value);
+					this.SendPropertyChanging();
+					this._ProjectId = value;
+					this.SendPropertyChanged("ProjectId");
+					this.OnProjectIdChanged();
+				}
+			}
+		}
+		
+		[Column(Storage="_Name", DbType="VarChar(MAX)")]
+		public string Name
+		{
+			get
+			{
+				return this._Name;
+			}
+			set
+			{
+				if ((this._Name != value))
+				{
+					this.OnNameChanging(value);
+					this.SendPropertyChanging();
+					this._Name = value;
+					this.SendPropertyChanged("Name");
+					this.OnNameChanged();
+				}
+			}
+		}
+		
+		[Association(Name="Project_Job", Storage="_Jobs", ThisKey="ProjectId", OtherKey="ProjectId")]
+		public EntitySet<Job> Jobs
+		{
+			get
+			{
+				return this._Jobs;
+			}
+			set
+			{
+				this._Jobs.Assign(value);
+			}
+		}
+		
+		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));
+			}
+		}
+		
+		private void attach_Jobs(Job entity)
+		{
+			this.SendPropertyChanging();
+			entity.Project = this;
+		}
+		
+		private void detach_Jobs(Job entity)
+		{
+			this.SendPropertyChanging();
+			entity.Project = null;
+		}
+	}
+	
+	[Table(Name="dbo.RequiredPlugins")]
+	public partial class RequiredPlugin : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		private System.Guid _JobId;
+		
+		private System.Guid _PluginId;
+		
+		private System.Guid _RequiredPluginId;
+		
+		private EntityRef<Job> _Job;
+		
+		private EntityRef<PluginInfo> _PluginInfo;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnJobIdChanging(System.Guid value);
+    partial void OnJobIdChanged();
+    partial void OnPluginIdChanging(System.Guid value);
+    partial void OnPluginIdChanged();
+    partial void OnRequiredPluginIdChanging(System.Guid value);
+    partial void OnRequiredPluginIdChanged();
+    #endregion
+		
+		public RequiredPlugin()
+		{
+			this._Job = default(EntityRef<Job>);
+			this._PluginInfo = default(EntityRef<PluginInfo>);
+			OnCreated();
+		}
+		
+		[Column(Storage="_JobId", DbType="UniqueIdentifier NOT NULL")]
+		public System.Guid JobId
+		{
+			get
+			{
+				return this._JobId;
+			}
+			set
+			{
+				if ((this._JobId != value))
+				{
+					if (this._Job.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnJobIdChanging(value);
+					this.SendPropertyChanging();
+					this._JobId = value;
+					this.SendPropertyChanged("JobId");
+					this.OnJobIdChanged();
+				}
+			}
+		}
+		
+		[Column(Storage="_PluginId", DbType="UniqueIdentifier NOT NULL")]
+		public System.Guid PluginId
+		{
+			get
+			{
+				return this._PluginId;
+			}
+			set
+			{
+				if ((this._PluginId != value))
+				{
+					if (this._PluginInfo.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnPluginIdChanging(value);
+					this.SendPropertyChanging();
+					this._PluginId = value;
+					this.SendPropertyChanged("PluginId");
+					this.OnPluginIdChanged();
+				}
+			}
+		}
+		
+		[Column(Storage="_RequiredPluginId", AutoSync=AutoSync.OnInsert, DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true, IsDbGenerated=true)]
+		public System.Guid RequiredPluginId
+		{
+			get
+			{
+				return this._RequiredPluginId;
+			}
+			set
+			{
+				if ((this._RequiredPluginId != value))
+				{
+					this.OnRequiredPluginIdChanging(value);
+					this.SendPropertyChanging();
+					this._RequiredPluginId = value;
+					this.SendPropertyChanged("RequiredPluginId");
+					this.OnRequiredPluginIdChanged();
+				}
+			}
+		}
+		
+		[Association(Name="Job_RequiredPlugin", Storage="_Job", ThisKey="JobId", OtherKey="JobId", IsForeignKey=true)]
+		public Job Job
+		{
+			get
+			{
+				return this._Job.Entity;
+			}
+			set
+			{
+				Job previousValue = this._Job.Entity;
+				if (((previousValue != value) 
+							|| (this._Job.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._Job.Entity = null;
+						previousValue.RequiredPlugins.Remove(this);
+					}
+					this._Job.Entity = value;
+					if ((value != null))
+					{
+						value.RequiredPlugins.Add(this);
+						this._JobId = value.JobId;
+					}
+					else
+					{
+						this._JobId = default(System.Guid);
+					}
+					this.SendPropertyChanged("Job");
+				}
+			}
+		}
+		
+		[Association(Name="PluginInfo_RequiredPlugin", Storage="_PluginInfo", ThisKey="PluginId", OtherKey="PluginId", IsForeignKey=true, DeleteOnNull=true, DeleteRule="CASCADE")]
+		public PluginInfo PluginInfo
+		{
+			get
+			{
+				return this._PluginInfo.Entity;
+			}
+			set
+			{
+				PluginInfo previousValue = this._PluginInfo.Entity;
+				if (((previousValue != value) 
+							|| (this._PluginInfo.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._PluginInfo.Entity = null;
+						previousValue.RequiredPlugins.Remove(this);
+					}
+					this._PluginInfo.Entity = value;
+					if ((value != null))
+					{
+						value.RequiredPlugins.Add(this);
+						this._PluginId = value.PluginId;
+					}
+					else
+					{
+						this._PluginId = default(System.Guid);
+					}
+					this.SendPropertyChanged("PluginInfo");
+				}
+			}
+		}
+		
+		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));
+			}
+		}
+	}
+	
+	[Table(Name="dbo.Resource")]
+	public partial class Resource : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		private System.Guid _ResourceId;
+		
+		private string _Name;
+		
+		private EntitySet<AssignedResource> _AssignedResources;
+		
+		private EntityRef<ClientGroup> _ClientGroup;
+		
+		private EntitySet<ClientGroup_Resource> _ClientGroup_Resources;
+		
+		private EntityRef<Client> _Client;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnResourceIdChanging(System.Guid value);
+    partial void OnResourceIdChanged();
+    partial void OnNameChanging(string value);
+    partial void OnNameChanged();
+    #endregion
+		
+		public Resource()
+		{
+			this._AssignedResources = new EntitySet<AssignedResource>(new Action<AssignedResource>(this.attach_AssignedResources), new Action<AssignedResource>(this.detach_AssignedResources));
+			this._ClientGroup = default(EntityRef<ClientGroup>);
+			this._ClientGroup_Resources = new EntitySet<ClientGroup_Resource>(new Action<ClientGroup_Resource>(this.attach_ClientGroup_Resources), new Action<ClientGroup_Resource>(this.detach_ClientGroup_Resources));
+			this._Client = default(EntityRef<Client>);
+			OnCreated();
+		}
+		
+		[Column(Storage="_ResourceId", AutoSync=AutoSync.OnInsert, DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true, IsDbGenerated=true)]
+		public System.Guid ResourceId
+		{
+			get
+			{
+				return this._ResourceId;
+			}
+			set
+			{
+				if ((this._ResourceId != value))
+				{
+					this.OnResourceIdChanging(value);
+					this.SendPropertyChanging();
+					this._ResourceId = value;
+					this.SendPropertyChanged("ResourceId");
+					this.OnResourceIdChanged();
+				}
+			}
+		}
+		
+		[Column(Storage="_Name", DbType="VarChar(MAX)")]
+		public string Name
+		{
+			get
+			{
+				return this._Name;
+			}
+			set
+			{
+				if ((this._Name != value))
+				{
+					this.OnNameChanging(value);
+					this.SendPropertyChanging();
+					this._Name = value;
+					this.SendPropertyChanged("Name");
+					this.OnNameChanged();
+				}
+			}
+		}
+		
+		[Association(Name="Resource_AssignedResource", Storage="_AssignedResources", ThisKey="ResourceId", OtherKey="ResourceId")]
+		public EntitySet<AssignedResource> AssignedResources
+		{
+			get
+			{
+				return this._AssignedResources;
+			}
+			set
+			{
+				this._AssignedResources.Assign(value);
+			}
+		}
+		
+		[Association(Name="Resource_ClientGroup", Storage="_ClientGroup", ThisKey="ResourceId", OtherKey="ResourceId", IsUnique=true, IsForeignKey=false)]
+		public ClientGroup ClientGroup
+		{
+			get
+			{
+				return this._ClientGroup.Entity;
+			}
+			set
+			{
+				ClientGroup previousValue = this._ClientGroup.Entity;
+				if (((previousValue != value) 
+							|| (this._ClientGroup.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._ClientGroup.Entity = null;
+						previousValue.Resource = null;
+					}
+					this._ClientGroup.Entity = value;
+					if ((value != null))
+					{
+						value.Resource = this;
+					}
+					this.SendPropertyChanged("ClientGroup");
+				}
+			}
+		}
+		
+		[Association(Name="Resource_ClientGroup_Resource", Storage="_ClientGroup_Resources", ThisKey="ResourceId", OtherKey="ResourceId")]
+		public EntitySet<ClientGroup_Resource> ClientGroup_Resources
+		{
+			get
+			{
+				return this._ClientGroup_Resources;
+			}
+			set
+			{
+				this._ClientGroup_Resources.Assign(value);
+			}
+		}
+		
+		[Association(Name="Resource_Client", Storage="_Client", ThisKey="ResourceId", OtherKey="ResourceId", IsUnique=true, IsForeignKey=false)]
+		public Client Client
+		{
+			get
+			{
+				return this._Client.Entity;
+			}
+			set
+			{
+				Client previousValue = this._Client.Entity;
+				if (((previousValue != value) 
+							|| (this._Client.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._Client.Entity = null;
+						previousValue.Resource = null;
+					}
+					this._Client.Entity = value;
+					if ((value != null))
+					{
+						value.Resource = this;
+					}
+					this.SendPropertyChanged("Client");
+				}
+			}
+		}
+		
+		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));
+			}
+		}
+		
+		private void attach_AssignedResources(AssignedResource entity)
+		{
+			this.SendPropertyChanging();
+			entity.Resource = this;
+		}
+		
+		private void detach_AssignedResources(AssignedResource entity)
+		{
+			this.SendPropertyChanging();
+			entity.Resource = null;
+		}
+		
+		private void attach_ClientGroup_Resources(ClientGroup_Resource entity)
+		{
+			this.SendPropertyChanging();
+			entity.Resource = this;
+		}
+		
+		private void detach_ClientGroup_Resources(ClientGroup_Resource entity)
+		{
+			this.SendPropertyChanging();
+			entity.Resource = null;
+		}
+	}
+	
+	[Table(Name="dbo.Client")]
+	public partial class Client : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		private System.Guid _ResourceId;
+		
+		private int _CPUSpeed;
+		
+		private int _Memory;
+		
+		private System.DateTime _Login;
+		
+		private string _Status;
+		
+		private System.Nullable<System.Guid> _ClientConfigId;
+		
+		private int _NumberOfCores;
+		
+		private int _NumberOfFreeCores;
+		
+		private int _FreeMemory;
+		
+		private EntitySet<UptimeStatistic> _UptimeStatistics;
+		
+		private EntitySet<Job> _Jobs;
+		
+		private EntityRef<Resource> _Resource;
+		
+		private EntityRef<ClientConfig> _ClientConfig;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnResourceIdChanging(System.Guid value);
+    partial void OnResourceIdChanged();
+    partial void OnCPUSpeedChanging(int value);
+    partial void OnCPUSpeedChanged();
+    partial void OnMemoryChanging(int value);
+    partial void OnMemoryChanged();
+    partial void OnLoginChanging(System.DateTime value);
+    partial void OnLoginChanged();
+    partial void OnStatusChanging(string value);
+    partial void OnStatusChanged();
+    partial void OnClientConfigIdChanging(System.Nullable<System.Guid> value);
+    partial void OnClientConfigIdChanged();
+    partial void OnNumberOfCoresChanging(int value);
+    partial void OnNumberOfCoresChanged();
+    partial void OnNumberOfFreeCoresChanging(int value);
+    partial void OnNumberOfFreeCoresChanged();
+    partial void OnFreeMemoryChanging(int value);
+    partial void OnFreeMemoryChanged();
+    #endregion
+		
+		public Client()
+		{
+			this._UptimeStatistics = new EntitySet<UptimeStatistic>(new Action<UptimeStatistic>(this.attach_UptimeStatistics), new Action<UptimeStatistic>(this.detach_UptimeStatistics));
+			this._Jobs = new EntitySet<Job>(new Action<Job>(this.attach_Jobs), new Action<Job>(this.detach_Jobs));
+			this._Resource = default(EntityRef<Resource>);
+			this._ClientConfig = default(EntityRef<ClientConfig>);
+			OnCreated();
+		}
+		
+		[Column(Storage="_ResourceId", DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true)]
+		public System.Guid ResourceId
+		{
+			get
+			{
+				return this._ResourceId;
+			}
+			set
+			{
+				if ((this._ResourceId != value))
+				{
+					if (this._Resource.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnResourceIdChanging(value);
+					this.SendPropertyChanging();
+					this._ResourceId = value;
+					this.SendPropertyChanged("ResourceId");
+					this.OnResourceIdChanged();
+				}
+			}
+		}
+		
+		[Column(Storage="_CPUSpeed", DbType="Int NOT NULL")]
+		public int CPUSpeed
+		{
+			get
+			{
+				return this._CPUSpeed;
+			}
+			set
+			{
+				if ((this._CPUSpeed != value))
+				{
+					this.OnCPUSpeedChanging(value);
+					this.SendPropertyChanging();
+					this._CPUSpeed = value;
+					this.SendPropertyChanged("CPUSpeed");
+					this.OnCPUSpeedChanged();
+				}
+			}
+		}
+		
+		[Column(Storage="_Memory", DbType="Int NOT NULL")]
+		public int Memory
+		{
+			get
+			{
+				return this._Memory;
+			}
+			set
+			{
+				if ((this._Memory != value))
+				{
+					this.OnMemoryChanging(value);
+					this.SendPropertyChanging();
+					this._Memory = value;
+					this.SendPropertyChanged("Memory");
+					this.OnMemoryChanged();
+				}
+			}
+		}
+		
+		[Column(Storage="_Login", DbType="DateTime NOT NULL")]
+		public System.DateTime Login
+		{
+			get
+			{
+				return this._Login;
+			}
+			set
+			{
+				if ((this._Login != value))
+				{
+					this.OnLoginChanging(value);
+					this.SendPropertyChanging();
+					this._Login = value;
+					this.SendPropertyChanged("Login");
+					this.OnLoginChanged();
+				}
+			}
+		}
+		
+		[Column(Storage="_Status", DbType="VarChar(MAX)")]
+		public string Status
+		{
+			get
+			{
+				return this._Status;
+			}
+			set
+			{
+				if ((this._Status != value))
+				{
+					this.OnStatusChanging(value);
+					this.SendPropertyChanging();
+					this._Status = value;
+					this.SendPropertyChanged("Status");
+					this.OnStatusChanged();
+				}
+			}
+		}
+		
+		[Column(Storage="_ClientConfigId", DbType="UniqueIdentifier")]
+		public System.Nullable<System.Guid> ClientConfigId
+		{
+			get
+			{
+				return this._ClientConfigId;
+			}
+			set
+			{
+				if ((this._ClientConfigId != value))
+				{
+					if (this._ClientConfig.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnClientConfigIdChanging(value);
+					this.SendPropertyChanging();
+					this._ClientConfigId = value;
+					this.SendPropertyChanged("ClientConfigId");
+					this.OnClientConfigIdChanged();
+				}
+			}
+		}
+		
+		[Column(Storage="_NumberOfCores", DbType="Int NOT NULL")]
+		public int NumberOfCores
+		{
+			get
+			{
+				return this._NumberOfCores;
+			}
+			set
+			{
+				if ((this._NumberOfCores != value))
+				{
+					this.OnNumberOfCoresChanging(value);
+					this.SendPropertyChanging();
+					this._NumberOfCores = value;
+					this.SendPropertyChanged("NumberOfCores");
+					this.OnNumberOfCoresChanged();
+				}
+			}
+		}
+		
+		[Column(Storage="_NumberOfFreeCores", DbType="Int NOT NULL")]
+		public int NumberOfFreeCores
+		{
+			get
+			{
+				return this._NumberOfFreeCores;
+			}
+			set
+			{
+				if ((this._NumberOfFreeCores != value))
+				{
+					this.OnNumberOfFreeCoresChanging(value);
+					this.SendPropertyChanging();
+					this._NumberOfFreeCores = value;
+					this.SendPropertyChanged("NumberOfFreeCores");
+					this.OnNumberOfFreeCoresChanged();
+				}
+			}
+		}
+		
+		[Column(Storage="_FreeMemory", DbType="Int NOT NULL")]
+		public int FreeMemory
+		{
+			get
+			{
+				return this._FreeMemory;
+			}
+			set
+			{
+				if ((this._FreeMemory != value))
+				{
+					this.OnFreeMemoryChanging(value);
+					this.SendPropertyChanging();
+					this._FreeMemory = value;
+					this.SendPropertyChanged("FreeMemory");
+					this.OnFreeMemoryChanged();
+				}
+			}
+		}
+		
+		[Association(Name="Client_UptimeStatistic", Storage="_UptimeStatistics", ThisKey="ResourceId", OtherKey="ResourceId")]
+		public EntitySet<UptimeStatistic> UptimeStatistics
+		{
+			get
+			{
+				return this._UptimeStatistics;
+			}
+			set
+			{
+				this._UptimeStatistics.Assign(value);
+			}
+		}
+		
+		[Association(Name="Client_Job", Storage="_Jobs", ThisKey="ResourceId", OtherKey="ResourceId")]
+		public EntitySet<Job> Jobs
+		{
+			get
+			{
+				return this._Jobs;
+			}
+			set
+			{
+				this._Jobs.Assign(value);
+			}
+		}
+		
+		[Association(Name="Resource_Client", Storage="_Resource", ThisKey="ResourceId", OtherKey="ResourceId", IsForeignKey=true, DeleteOnNull=true, DeleteRule="CASCADE")]
+		public Resource Resource
+		{
+			get
+			{
+				return this._Resource.Entity;
+			}
+			set
+			{
+				Resource previousValue = this._Resource.Entity;
+				if (((previousValue != value) 
+							|| (this._Resource.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._Resource.Entity = null;
+						previousValue.Client = null;
+					}
+					this._Resource.Entity = value;
+					if ((value != null))
+					{
+						value.Client = this;
+						this._ResourceId = value.ResourceId;
+					}
+					else
+					{
+						this._ResourceId = default(System.Guid);
+					}
+					this.SendPropertyChanged("Resource");
+				}
+			}
+		}
+		
+		[Association(Name="ClientConfig_Client", Storage="_ClientConfig", ThisKey="ClientConfigId", OtherKey="ClientConfigId", IsForeignKey=true, DeleteRule="SET NULL")]
+		public ClientConfig ClientConfig
+		{
+			get
+			{
+				return this._ClientConfig.Entity;
+			}
+			set
+			{
+				ClientConfig previousValue = this._ClientConfig.Entity;
+				if (((previousValue != value) 
+							|| (this._ClientConfig.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._ClientConfig.Entity = null;
+						previousValue.Clients.Remove(this);
+					}
+					this._ClientConfig.Entity = value;
+					if ((value != null))
+					{
+						value.Clients.Add(this);
+						this._ClientConfigId = value.ClientConfigId;
+					}
+					else
+					{
+						this._ClientConfigId = default(Nullable<System.Guid>);
+					}
+					this.SendPropertyChanged("ClientConfig");
+				}
+			}
+		}
+		
+		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));
+			}
+		}
+		
+		private void attach_UptimeStatistics(UptimeStatistic entity)
+		{
+			this.SendPropertyChanging();
+			entity.Client = this;
+		}
+		
+		private void detach_UptimeStatistics(UptimeStatistic entity)
+		{
+			this.SendPropertyChanging();
+			entity.Client = null;
+		}
+		
+		private void attach_Jobs(Job entity)
+		{
+			this.SendPropertyChanging();
+			entity.Client = this;
+		}
+		
+		private void detach_Jobs(Job entity)
+		{
+			this.SendPropertyChanging();
+			entity.Client = null;
+		}
+	}
+}
+#pragma warning restore 1591
Index: /trunk/sources/HeuristicLab.Hive.Server.LINQDataAccess/3.2/IClientDao.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.LINQDataAccess/3.2/IClientDao.cs	(revision 2904)
+++ /trunk/sources/HeuristicLab.Hive.Server.LINQDataAccess/3.2/IClientDao.cs	(revision 2904)
@@ -0,0 +1,10 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+
+namespace HeuristicLab.Hive.Server.LINQDataAccess {
+  public interface IClientDao: IGenericDao<ClientInfo, Client> {
+  }
+}
Index: /trunk/sources/HeuristicLab.Hive.Server.LINQDataAccess/3.2/IGenericDao.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.LINQDataAccess/3.2/IGenericDao.cs	(revision 2904)
+++ /trunk/sources/HeuristicLab.Hive.Server.LINQDataAccess/3.2/IGenericDao.cs	(revision 2904)
@@ -0,0 +1,15 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace HeuristicLab.Hive.Server.LINQDataAccess {
+  public interface IGenericDao<TBusiness, TDatabase> {
+    TBusiness FindById(Guid id);
+    IEnumerable<TBusiness> FindAll();
+    TBusiness Insert(TBusiness bObj);
+    void Delete(TBusiness bObj);
+
+    void Update(TBusiness bObj);
+  }
+}
Index: /trunk/sources/HeuristicLab.Hive.Server.LINQDataAccess/3.2/IJobDao.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.LINQDataAccess/3.2/IJobDao.cs	(revision 2904)
+++ /trunk/sources/HeuristicLab.Hive.Server.LINQDataAccess/3.2/IJobDao.cs	(revision 2904)
@@ -0,0 +1,10 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace HeuristicLab.Hive.Server.LINQDataAccess {
+  public interface IJobDao: IGenericDao<HeuristicLab.Hive.Contracts.BusinessObjects.Job, Job> {
+
+  }
+}
Index: /trunk/sources/HeuristicLab.Hive.Server.LINQDataAccess/3.2/Properties/Settings.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.LINQDataAccess/3.2/Properties/Settings.Designer.cs	(revision 2904)
+++ /trunk/sources/HeuristicLab.Hive.Server.LINQDataAccess/3.2/Properties/Settings.Designer.cs	(revision 2904)
@@ -0,0 +1,37 @@
+﻿//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:2.0.50727.4927
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HeuristicLab.Hive.Server.LINQDataAccess.Properties {
+    
+    
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "9.0.0.0")]
+    internal 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.SpecialSettingAttribute(global::System.Configuration.SpecialSetting.ConnectionString)]
+        [global::System.Configuration.DefaultSettingValueAttribute("Data Source=SEMTEX-PC;Initial Catalog=HeuristicLab.Hive.Linq;Integrated Security=" +
+            "True")]
+        public string HeuristicLab_Hive_LinqConnectionString {
+            get {
+                return ((string)(this["HeuristicLab_Hive_LinqConnectionString"]));
+            }
+        }
+    }
+}
Index: /trunk/sources/HeuristicLab.Hive.Server.LINQDataAccess/3.2/Properties/Settings.settings
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.LINQDataAccess/3.2/Properties/Settings.settings	(revision 2904)
+++ /trunk/sources/HeuristicLab.Hive.Server.LINQDataAccess/3.2/Properties/Settings.settings	(revision 2904)
@@ -0,0 +1,14 @@
+﻿<?xml version='1.0' encoding='utf-8'?>
+<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="HeuristicLab.Hive.Server.LINQDataAccess.Properties" GeneratedClassName="Settings">
+  <Profiles />
+  <Settings>
+    <Setting Name="HeuristicLab_Hive_LinqConnectionString" Type="(Connection string)" Scope="Application">
+      <DesignTimeValue Profile="(Default)">&lt;?xml version="1.0" encoding="utf-16"?&gt;
+&lt;SerializableConnectionString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"&gt;
+  &lt;ConnectionString&gt;Data Source=SEMTEX-PC;Initial Catalog=HeuristicLab.Hive.Linq;Integrated Security=True&lt;/ConnectionString&gt;
+  &lt;ProviderName&gt;System.Data.SqlClient&lt;/ProviderName&gt;
+&lt;/SerializableConnectionString&gt;</DesignTimeValue>
+      <Value Profile="(Default)">Data Source=SEMTEX-PC;Initial Catalog=HeuristicLab.Hive.Linq;Integrated Security=True</Value>
+    </Setting>
+  </Settings>
+</SettingsFile>
Index: /trunk/sources/HeuristicLab.Hive.Server.LINQDataAccess/3.2/app.config
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.LINQDataAccess/3.2/app.config	(revision 2904)
+++ /trunk/sources/HeuristicLab.Hive.Server.LINQDataAccess/3.2/app.config	(revision 2904)
@@ -0,0 +1,10 @@
+﻿<?xml version="1.0" encoding="utf-8" ?>
+<configuration>
+    <configSections>
+    </configSections>
+    <connectionStrings>
+        <add name="HeuristicLab.Hive.Server.LINQDataAccess.Properties.Settings.HeuristicLab_Hive_LinqConnectionString"
+            connectionString="Data Source=SEMTEX-PC;Initial Catalog=HeuristicLab.Hive.Linq;Integrated Security=True"
+            providerName="System.Data.SqlClient" />
+    </connectionStrings>
+</configuration>
Index: /trunk/sources/HeuristicLab.Hive.Server/3.2/App.config
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server/3.2/App.config	(revision 2904)
+++ /trunk/sources/HeuristicLab.Hive.Server/3.2/App.config	(revision 2904)
@@ -0,0 +1,37 @@
+﻿<?xml version="1.0" encoding="utf-8" ?>
+<configuration>
+  <configSections>
+    <sectionGroup name="spring">
+      <section name="context" type="Spring.Context.Support.ContextHandler, Spring.Core"/>
+      <section name="objects" type="Spring.Context.Support.DefaultSectionHandler, Spring.Core"/>
+    </sectionGroup>
+  </configSections>
+  <spring>
+
+    <context>
+      <resource uri="config://spring/objects"/>
+    </context>
+
+    <objects xmlns="http://www.springframework.net"
+         xmlns:aop="http://www.springframework.net/aop">
+      <object id="calculator" singleton="false"
+              type="HeuristicLab.Hive.Server.Core.ClientFacade, HeuristicLab.Hive.Server.Core-3.2" />
+
+      <object id="serviceOperation" type="Spring.Aop.Support.SdkRegularExpressionMethodPointcut, Spring.Aop">
+        <property name="patterns">
+          <list>
+            <value>HeuristicLab.Hive.Server.Core.ClientFacade.*</value>            
+          </list>
+        </property>
+      </object>
+
+      <object id="sci" type="HeuristicLab.Hive.Server.ServiceCallInterception, HeuristicLab.Hive.Server-3.2" />
+
+      <aop:config>
+        <aop:advisor pointcut-ref="serviceOperation" advice-ref="sci"/>
+      </aop:config>
+    </objects>
+
+
+  </spring>
+</configuration>
Index: /trunk/sources/HeuristicLab.Hive.Server/3.2/HeuristicLab.Hive.Server-3.2.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server/3.2/HeuristicLab.Hive.Server-3.2.csproj	(revision 2903)
+++ /trunk/sources/HeuristicLab.Hive.Server/3.2/HeuristicLab.Hive.Server-3.2.csproj	(revision 2904)
@@ -68,4 +68,20 @@
   </PropertyGroup>
   <ItemGroup>
+    <Reference Include="Common.Logging, Version=1.2.0.0, Culture=neutral, PublicKeyToken=af08829b84f0328e">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\HeuristicLab.ExtLibs\HeuristicLab.SpringNET\1.3.0\Common.Logging.dll</HintPath>
+    </Reference>
+    <Reference Include="Spring.Aop, Version=1.3.0.20214, Culture=neutral, PublicKeyToken=65e474d141e25e07, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\HeuristicLab.ExtLibs\HeuristicLab.SpringNET\1.3.0\Spring.Aop.dll</HintPath>
+    </Reference>
+    <Reference Include="Spring.Core, Version=1.3.0.20214, Culture=neutral, PublicKeyToken=65e474d141e25e07, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\HeuristicLab.ExtLibs\HeuristicLab.SpringNET\1.3.0\Spring.Core.dll</HintPath>
+    </Reference>
+    <Reference Include="Spring.Services, Version=1.3.0.30214, Culture=neutral, PublicKeyToken=65e474d141e25e07, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\HeuristicLab.ExtLibs\HeuristicLab.SpringNET\1.3.0\Spring.Services.dll</HintPath>
+    </Reference>
     <Reference Include="System" />
     <Reference Include="System.Core">
@@ -125,4 +141,5 @@
       <DesignTimeSharedInput>True</DesignTimeSharedInput>
     </Compile>
+    <Compile Include="ServiceCallInterception.cs" />
   </ItemGroup>
   <ItemGroup>
@@ -135,4 +152,8 @@
       <Name>HeuristicLab.Hive.Contracts-3.2</Name>
     </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Hive.Server.Core\3.2\HeuristicLab.Hive.Server.Core-3.2.csproj">
+      <Project>{898B31CF-81DC-453B-AEB3-BDF83197A7EE}</Project>
+      <Name>HeuristicLab.Hive.Server.Core-3.2</Name>
+    </ProjectReference>
     <ProjectReference Include="..\..\HeuristicLab.PluginInfrastructure\HeuristicLab.PluginInfrastructure.csproj">
       <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
@@ -141,4 +162,6 @@
   </ItemGroup>
   <ItemGroup>
+    <None Include="App.config">
+    </None>
     <None Include="Resources\HeuristicLab.ico" />
   </ItemGroup>
Index: /trunk/sources/HeuristicLab.Hive.Server/3.2/HiveServerApplication.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server/3.2/HiveServerApplication.cs	(revision 2903)
+++ /trunk/sources/HeuristicLab.Hive.Server/3.2/HiveServerApplication.cs	(revision 2904)
@@ -29,7 +29,9 @@
 using System.ServiceModel.Description;
 using System.Net;
+using HeuristicLab.Hive.Server.Core;
 using HeuristicLab.Hive.Contracts;
 using HeuristicLab.Hive.Contracts.Interfaces;
 using HeuristicLab.Hive.Server.Properties;
+using Spring.ServiceModel;
 
 namespace HeuristicLab.Hive.Server {
@@ -67,13 +69,15 @@
       string curServiceHost = "";
       Uri uriTcp;
-      IEnumerable<IClientFacade> clientCommunicatorInstances = ApplicationManager.Manager.GetInstances<IClientFacade>();
+      /*IEnumerable<IClientFacade> clientCommunicatorInstances = ApplicationManager.Manager.GetInstances<IClientFacade>();
       IEnumerable<IServerConsoleFacade> serverConsoleInstances = ApplicationManager.Manager.GetInstances<IServerConsoleFacade>();
-      IEnumerable<IExecutionEngineFacade> executionEngineInstances = ApplicationManager.Manager.GetInstances<IExecutionEngineFacade>();
-      ServiceHost serviceHost = null;
+      IEnumerable<IExecutionEngineFacade> executionEngineInstances = ApplicationManager.Manager.GetInstances<IExecutionEngineFacade>();*/
+      SpringServiceHost serviceHost = null;
       switch (svc) {
         case Services.ClientCommunicator:
-          if (clientCommunicatorInstances.Count() > 0) {
+        //  if (clientCommunicatorInstances.Count() > 0) {
             uriTcp = new Uri("net.tcp://" + ipAddress + ":" + port + "/HiveServer/");
-            serviceHost = new ServiceHost(clientCommunicatorInstances.First().GetType(), uriTcp);
+            //serviceHost = new ServiceHost(clientCommunicatorInstances.First().GetType(), uriTcp);
+            //serviceHost = new ServiceHost(typeof(ClientFacade), uriTcp);
+            serviceHost = new SpringServiceHost("clientFacade", uriTcp);
             serviceHost.AddServiceEndpoint(typeof(IClientFacade), streamedBinding, STR_ClientCommunicator);
             
@@ -88,21 +92,23 @@
 
             curServiceHost = STR_ClientCommunicator;
-          }
+        //  }
           break;
         case Services.ServerConsoleFacade:
-          if (serverConsoleInstances.Count() > 0) {
+        //  if (serverConsoleInstances.Count() > 0) {
             uriTcp = new Uri("net.tcp://" + ipAddress + ":" + port + "/HiveServerConsole/");
-            serviceHost = new ServiceHost(serverConsoleInstances.First().GetType(), uriTcp);
+            //serviceHost = new ServiceHost(serverConsoleInstances.First().GetType(), uriTcp);
+            serviceHost = new SpringServiceHost("serverConsoleFacade", uriTcp);
             serviceHost.AddServiceEndpoint(typeof(IServerConsoleFacade), binding, STR_ServerConsoleFacade);
             curServiceHost = STR_ServerConsoleFacade;
-          }
+        //  }
           break;
         case Services.ExecutionEngineFacade:
-          if (executionEngineInstances.Count() > 0) {
+        //  if (executionEngineInstances.Count() > 0) {
             uriTcp = new Uri("net.tcp://" + ipAddress + ":" + port + "/ExecutionEngine/");
-            serviceHost = new ServiceHost(executionEngineInstances.First().GetType(), uriTcp);
+            //serviceHost = new ServiceHost(executionEngineInstances.First().GetType(), uriTcp);
+            serviceHost = new SpringServiceHost("executionEngineFacade", uriTcp);
             serviceHost.AddServiceEndpoint(typeof(IExecutionEngineFacade), streamedBinding, STR_ExecutionEngineFacade);
             curServiceHost = STR_ExecutionEngineFacade;
-          }
+        //  }
           break;
         case Services.All:
@@ -111,5 +117,5 @@
           return null;
       }
-      if ((serviceHost != null) && (!String.IsNullOrEmpty(curServiceHost))) {
+      if (!String.IsNullOrEmpty(curServiceHost)) {
         AddMexEndpoint(serviceHost);
         //WcfSettings.SetServiceCertificate(serviceHost);
Index: /trunk/sources/HeuristicLab.Hive.Server/3.2/HiveServerPlugin.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server/3.2/HiveServerPlugin.cs	(revision 2903)
+++ /trunk/sources/HeuristicLab.Hive.Server/3.2/HiveServerPlugin.cs	(revision 2904)
@@ -30,5 +30,7 @@
   [PluginFile("HeuristicLab.Hive.Server-3.2.dll", PluginFileType.Assembly)]
   [PluginDependency("HeuristicLab.Core-3.2")]
+  [PluginDependency("HeuristicLab.Hive.Server.Core-3.2")]
   [PluginDependency("HeuristicLab.Hive.Contracts-3.2")]
+  //[PluginDependency("HeuristicLab.SpringNET-1.3.0")]
   public class HiveServerPlugin : PluginBase {
   }
Index: /trunk/sources/HeuristicLab.Hive.Server/3.2/ServiceCallInterception.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server/3.2/ServiceCallInterception.cs	(revision 2904)
+++ /trunk/sources/HeuristicLab.Hive.Server/3.2/ServiceCallInterception.cs	(revision 2904)
@@ -0,0 +1,21 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using AopAlliance.Intercept;
+using System.Threading;
+
+namespace HeuristicLab.Hive.Server {
+  class ServiceCallInterception: IMethodInterceptor {
+    #region IMethodInterceptor Members
+
+    public object Invoke(IMethodInvocation invocation) {
+      Console.WriteLine(DateTime.Now + " - " + Thread.CurrentThread.ManagedThreadId + " - Entering Method " + invocation.Method.Name);
+      var obj = invocation.Proceed();
+      Console.WriteLine(DateTime.Now + " - " + Thread.CurrentThread.ManagedThreadId + " - Leaving Method " + invocation.Method.Name);
+      return obj;
+    }
+
+    #endregion
+  }
+}
Index: /trunk/sources/HeuristicLab/MergeConfigs.cmd
===================================================================
--- /trunk/sources/HeuristicLab/MergeConfigs.cmd	(revision 2903)
+++ /trunk/sources/HeuristicLab/MergeConfigs.cmd	(revision 2904)
@@ -2,4 +2,5 @@
 ConfigMerger "%SolutionDir%\HeuristicLab.Hive.Client.Core\3.2\%Outdir%\HeuristicLab.Hive.Client.Core-3.2.dll.config" "HeuristicLab.exe.config"
 ConfigMerger "%SolutionDir%\HeuristicLab.Hive.Client.Console\3.2\%Outdir%\HeuristicLab.Hive.Client.Console-3.2.dll.config" "HeuristicLab.exe.config"
+ConfigMerger "%SolutionDir%\HeuristicLab.Hive.Server\3.2\%Outdir%\HeuristicLab.Hive.Server-3.2.dll.config" "HeuristicLab.exe.config"
 ConfigMerger "%SolutionDir%\HeuristicLab.Hive.Server.Core\3.2\%Outdir%\HeuristicLab.Hive.Server.Core-3.2.dll.config" "HeuristicLab.exe.config"
 ConfigMerger "%SolutionDir%\HeuristicLab.Tracing\3.2\%Outdir%\HeuristicLab.Tracing-3.2.dll.config" "HeuristicLab.exe.config"
