Index: /trunk/sources/HeuristicLab.Hive.Client.Communication/3.2/Service References/ServerService/Reference.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Client.Communication/3.2/Service References/ServerService/Reference.cs	(revision 3010)
+++ /trunk/sources/HeuristicLab.Hive.Client.Communication/3.2/Service References/ServerService/Reference.cs	(revision 3011)
@@ -1,3 +1,3 @@
-﻿//------------------------------------------------------------------------------
+//------------------------------------------------------------------------------
 // <auto-generated>
 //     This code was generated by a tool.
@@ -22,8 +22,8 @@
         [System.ServiceModel.ServiceKnownTypeAttribute(typeof(HeuristicLab.Hive.Contracts.ResponseResultReceived))]
         [System.ServiceModel.ServiceKnownTypeAttribute(typeof(HeuristicLab.Hive.Contracts.ResponsePlugin))]
-        HeuristicLab.Hive.Contracts.Response Login(HeuristicLab.Hive.Contracts.BusinessObjects.ClientInfo clientInfo);
+        HeuristicLab.Hive.Contracts.Response Login(HeuristicLab.Hive.Contracts.BusinessObjects.ClientDto clientInfo);
         
         [System.ServiceModel.OperationContractAttribute(AsyncPattern=true, Action="http://tempuri.org/IClientCommunicator/Login", ReplyAction="http://tempuri.org/IClientCommunicator/LoginResponse")]
-        System.IAsyncResult BeginLogin(HeuristicLab.Hive.Contracts.BusinessObjects.ClientInfo clientInfo, System.AsyncCallback callback, object asyncState);
+        System.IAsyncResult BeginLogin(HeuristicLab.Hive.Contracts.BusinessObjects.ClientDto clientInfo, System.AsyncCallback callback, object asyncState);
         
         HeuristicLab.Hive.Contracts.Response EndLogin(System.IAsyncResult result);
@@ -96,8 +96,8 @@
         
         [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IClientCommunicator/SendPlugins", ReplyAction="http://tempuri.org/IClientCommunicator/SendPluginsResponse")]
-        HeuristicLab.Hive.Contracts.ResponsePlugin SendPlugins(HeuristicLab.Hive.Contracts.BusinessObjects.HivePluginInfo[] pluginList);
+        HeuristicLab.Hive.Contracts.ResponsePlugin SendPlugins(HeuristicLab.Hive.Contracts.BusinessObjects.HivePluginInfoDto[] pluginList);
         
         [System.ServiceModel.OperationContractAttribute(AsyncPattern=true, Action="http://tempuri.org/IClientCommunicator/SendPlugins", ReplyAction="http://tempuri.org/IClientCommunicator/SendPluginsResponse")]
-        System.IAsyncResult BeginSendPlugins(HeuristicLab.Hive.Contracts.BusinessObjects.HivePluginInfo[] pluginList, System.AsyncCallback callback, object asyncState);
+        System.IAsyncResult BeginSendPlugins(HeuristicLab.Hive.Contracts.BusinessObjects.HivePluginInfoDto[] pluginList, System.AsyncCallback callback, object asyncState);
         
         HeuristicLab.Hive.Contracts.ResponsePlugin EndSendPlugins(System.IAsyncResult result);
@@ -112,8 +112,8 @@
         
         [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IClientFacade/SendStreamedPlugins", ReplyAction="http://tempuri.org/IClientFacade/SendStreamedPluginsResponse")]
-        System.IO.Stream SendStreamedPlugins(HeuristicLab.Hive.Contracts.BusinessObjects.HivePluginInfo[] pluginList);
+        System.IO.Stream SendStreamedPlugins(HeuristicLab.Hive.Contracts.BusinessObjects.HivePluginInfoDto[] pluginList);
         
         [System.ServiceModel.OperationContractAttribute(AsyncPattern=true, Action="http://tempuri.org/IClientFacade/SendStreamedPlugins", ReplyAction="http://tempuri.org/IClientFacade/SendStreamedPluginsResponse")]
-        System.IAsyncResult BeginSendStreamedPlugins(HeuristicLab.Hive.Contracts.BusinessObjects.HivePluginInfo[] pluginList, System.AsyncCallback callback, object asyncState);
+        System.IAsyncResult BeginSendStreamedPlugins(HeuristicLab.Hive.Contracts.BusinessObjects.HivePluginInfoDto[] pluginList, System.AsyncCallback callback, object asyncState);
         
         System.IO.Stream EndSendStreamedPlugins(System.IAsyncResult result);
@@ -521,10 +521,10 @@
         public event System.EventHandler<ProcessSnapshotStreamedCompletedEventArgs> ProcessSnapshotStreamedCompleted;
         
-        public HeuristicLab.Hive.Contracts.Response Login(HeuristicLab.Hive.Contracts.BusinessObjects.ClientInfo clientInfo) {
+        public HeuristicLab.Hive.Contracts.Response Login(HeuristicLab.Hive.Contracts.BusinessObjects.ClientDto clientInfo) {
             return base.Channel.Login(clientInfo);
         }
         
         [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
-        public System.IAsyncResult BeginLogin(HeuristicLab.Hive.Contracts.BusinessObjects.ClientInfo clientInfo, System.AsyncCallback callback, object asyncState) {
+        public System.IAsyncResult BeginLogin(HeuristicLab.Hive.Contracts.BusinessObjects.ClientDto clientInfo, System.AsyncCallback callback, object asyncState) {
             return base.Channel.BeginLogin(clientInfo, callback, asyncState);
         }
@@ -536,5 +536,5 @@
         
         private System.IAsyncResult OnBeginLogin(object[] inValues, System.AsyncCallback callback, object asyncState) {
-            HeuristicLab.Hive.Contracts.BusinessObjects.ClientInfo clientInfo = ((HeuristicLab.Hive.Contracts.BusinessObjects.ClientInfo)(inValues[0]));
+            HeuristicLab.Hive.Contracts.BusinessObjects.ClientDto clientInfo = ((HeuristicLab.Hive.Contracts.BusinessObjects.ClientDto)(inValues[0]));
             return this.BeginLogin(clientInfo, callback, asyncState);
         }
@@ -553,9 +553,9 @@
         }
         
-        public void LoginAsync(HeuristicLab.Hive.Contracts.BusinessObjects.ClientInfo clientInfo) {
+        public void LoginAsync(HeuristicLab.Hive.Contracts.BusinessObjects.ClientDto clientInfo) {
             this.LoginAsync(clientInfo, null);
         }
         
-        public void LoginAsync(HeuristicLab.Hive.Contracts.BusinessObjects.ClientInfo clientInfo, object userState) {
+        public void LoginAsync(HeuristicLab.Hive.Contracts.BusinessObjects.ClientDto clientInfo, object userState) {
             if ((this.onBeginLoginDelegate == null)) {
                 this.onBeginLoginDelegate = new BeginOperationDelegate(this.OnBeginLogin);
@@ -937,10 +937,10 @@
         }
         
-        public HeuristicLab.Hive.Contracts.ResponsePlugin SendPlugins(HeuristicLab.Hive.Contracts.BusinessObjects.HivePluginInfo[] pluginList) {
+        public HeuristicLab.Hive.Contracts.ResponsePlugin SendPlugins(HeuristicLab.Hive.Contracts.BusinessObjects.HivePluginInfoDto[] pluginList) {
             return base.Channel.SendPlugins(pluginList);
         }
         
         [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
-        public System.IAsyncResult BeginSendPlugins(HeuristicLab.Hive.Contracts.BusinessObjects.HivePluginInfo[] pluginList, System.AsyncCallback callback, object asyncState) {
+        public System.IAsyncResult BeginSendPlugins(HeuristicLab.Hive.Contracts.BusinessObjects.HivePluginInfoDto[] pluginList, System.AsyncCallback callback, object asyncState) {
             return base.Channel.BeginSendPlugins(pluginList, callback, asyncState);
         }
@@ -952,5 +952,5 @@
         
         private System.IAsyncResult OnBeginSendPlugins(object[] inValues, System.AsyncCallback callback, object asyncState) {
-            HeuristicLab.Hive.Contracts.BusinessObjects.HivePluginInfo[] pluginList = ((HeuristicLab.Hive.Contracts.BusinessObjects.HivePluginInfo[])(inValues[0]));
+            HeuristicLab.Hive.Contracts.BusinessObjects.HivePluginInfoDto[] pluginList = ((HeuristicLab.Hive.Contracts.BusinessObjects.HivePluginInfoDto[])(inValues[0]));
             return this.BeginSendPlugins(pluginList, callback, asyncState);
         }
@@ -969,9 +969,9 @@
         }
         
-        public void SendPluginsAsync(HeuristicLab.Hive.Contracts.BusinessObjects.HivePluginInfo[] pluginList) {
+        public void SendPluginsAsync(HeuristicLab.Hive.Contracts.BusinessObjects.HivePluginInfoDto[] pluginList) {
             this.SendPluginsAsync(pluginList, null);
         }
         
-        public void SendPluginsAsync(HeuristicLab.Hive.Contracts.BusinessObjects.HivePluginInfo[] pluginList, object userState) {
+        public void SendPluginsAsync(HeuristicLab.Hive.Contracts.BusinessObjects.HivePluginInfoDto[] pluginList, object userState) {
             if ((this.onBeginSendPluginsDelegate == null)) {
                 this.onBeginSendPluginsDelegate = new BeginOperationDelegate(this.OnBeginSendPlugins);
@@ -1037,10 +1037,10 @@
         }
         
-        public System.IO.Stream SendStreamedPlugins(HeuristicLab.Hive.Contracts.BusinessObjects.HivePluginInfo[] pluginList) {
+        public System.IO.Stream SendStreamedPlugins(HeuristicLab.Hive.Contracts.BusinessObjects.HivePluginInfoDto[] pluginList) {
             return base.Channel.SendStreamedPlugins(pluginList);
         }
         
         [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
-        public System.IAsyncResult BeginSendStreamedPlugins(HeuristicLab.Hive.Contracts.BusinessObjects.HivePluginInfo[] pluginList, System.AsyncCallback callback, object asyncState) {
+        public System.IAsyncResult BeginSendStreamedPlugins(HeuristicLab.Hive.Contracts.BusinessObjects.HivePluginInfoDto[] pluginList, System.AsyncCallback callback, object asyncState) {
             return base.Channel.BeginSendStreamedPlugins(pluginList, callback, asyncState);
         }
@@ -1052,5 +1052,5 @@
         
         private System.IAsyncResult OnBeginSendStreamedPlugins(object[] inValues, System.AsyncCallback callback, object asyncState) {
-            HeuristicLab.Hive.Contracts.BusinessObjects.HivePluginInfo[] pluginList = ((HeuristicLab.Hive.Contracts.BusinessObjects.HivePluginInfo[])(inValues[0]));
+            HeuristicLab.Hive.Contracts.BusinessObjects.HivePluginInfoDto[] pluginList = ((HeuristicLab.Hive.Contracts.BusinessObjects.HivePluginInfoDto[])(inValues[0]));
             return this.BeginSendStreamedPlugins(pluginList, callback, asyncState);
         }
@@ -1069,9 +1069,9 @@
         }
         
-        public void SendStreamedPluginsAsync(HeuristicLab.Hive.Contracts.BusinessObjects.HivePluginInfo[] pluginList) {
+        public void SendStreamedPluginsAsync(HeuristicLab.Hive.Contracts.BusinessObjects.HivePluginInfoDto[] pluginList) {
             this.SendStreamedPluginsAsync(pluginList, null);
         }
         
-        public void SendStreamedPluginsAsync(HeuristicLab.Hive.Contracts.BusinessObjects.HivePluginInfo[] pluginList, object userState) {
+        public void SendStreamedPluginsAsync(HeuristicLab.Hive.Contracts.BusinessObjects.HivePluginInfoDto[] pluginList, object userState) {
             if ((this.onBeginSendStreamedPluginsDelegate == null)) {
                 this.onBeginSendStreamedPluginsDelegate = new BeginOperationDelegate(this.OnBeginSendStreamedPlugins);
Index: /trunk/sources/HeuristicLab.Hive.Client.Communication/3.2/WcfService.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Client.Communication/3.2/WcfService.cs	(revision 3010)
+++ /trunk/sources/HeuristicLab.Hive.Client.Communication/3.2/WcfService.cs	(revision 3011)
@@ -1,3 +1,3 @@
-﻿#region License Information
+#region License Information
 /* HeuristicLab
  * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
@@ -151,5 +151,5 @@
     #region Login
     public event System.EventHandler<LoginCompletedEventArgs> LoginCompleted;
-    public void LoginAsync(ClientInfo clientInfo) {
+    public void LoginAsync(ClientDto clientInfo) {
       if (ConnState == NetworkEnum.WcfConnState.Connected)
         proxy.LoginAsync(clientInfo);
@@ -162,5 +162,5 @@
     }
 
-    public void LoginSync(ClientInfo clientInfo) {
+    public void LoginSync(ClientDto clientInfo) {
       try {
         if (ConnState == NetworkEnum.WcfConnState.Connected) {
@@ -372,5 +372,5 @@
     }
 
-    public List<CachedHivePluginInfo> RequestPlugins(List<HivePluginInfo> requestedPlugins) {
+    public List<CachedHivePluginInfoDto> RequestPlugins(List<HivePluginInfoDto> requestedPlugins) {
       try {
         Stream stream = proxy.SendStreamedPlugins(requestedPlugins.ToArray());
Index: /trunk/sources/HeuristicLab.Hive.Client.Core/3.2/ConfigurationManager/ConfigManager.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Client.Core/3.2/ConfigurationManager/ConfigManager.cs	(revision 3010)
+++ /trunk/sources/HeuristicLab.Hive.Client.Core/3.2/ConfigurationManager/ConfigManager.cs	(revision 3011)
@@ -47,5 +47,5 @@
 
     public Core Core { get; set; }    
-    private ClientInfo hardwareInfo;        
+    private ClientDto hardwareInfo;        
 
     /// <summary>
@@ -53,5 +53,5 @@
     /// </summary>
     private ConfigManager() {      
-      hardwareInfo = new ClientInfo();
+      hardwareInfo = new ClientDto();
 
       if (Settings.Default.Guid == Guid.Empty) {
@@ -71,5 +71,5 @@
     /// </summary>
     /// <returns>the ClientInfo object</returns>
-    public ClientInfo GetClientInfo() {
+    public ClientDto GetClientInfo() {
       hardwareInfo.Login = WcfService.Instance.ConnectedSince;
       return hardwareInfo;          
@@ -139,8 +139,8 @@
     public int GetUsedCores() {
       Dictionary<Guid, Executor> engines = Core.GetExecutionEngines();
-      Dictionary<Guid, Job> jobs = Core.GetJobs();
+      Dictionary<Guid, JobDto> jobs = Core.GetJobs();
       int usedCores = 0;
       lock (engines) {        
-        foreach (KeyValuePair<Guid, Job> kvp in jobs)
+        foreach (KeyValuePair<Guid, JobDto> kvp in jobs)
           usedCores += kvp.Value.CoresNeeded;
       }
Index: /trunk/sources/HeuristicLab.Hive.Client.Core/3.2/Core.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Client.Core/3.2/Core.cs	(revision 3010)
+++ /trunk/sources/HeuristicLab.Hive.Client.Core/3.2/Core.cs	(revision 3011)
@@ -55,5 +55,5 @@
     private Dictionary<Guid, Executor> engines = new Dictionary<Guid, Executor>();
     private Dictionary<Guid, AppDomain> appDomains = new Dictionary<Guid, AppDomain>();
-    private Dictionary<Guid, Job> jobs = new Dictionary<Guid, Job>();
+    private Dictionary<Guid, JobDto> jobs = new Dictionary<Guid, JobDto>();
 
     private WcfService wcfService;
@@ -303,5 +303,5 @@
         List<byte[]> files = new List<byte[]>();
         Logging.Instance.Info(this.ToString(), "Fetching plugins for job " + e.Result.Job.Id);
-        foreach (CachedHivePluginInfo plugininfo in PluginCache.Instance.GetPlugins(e.Result.Job.PluginsNeeded))
+        foreach (CachedHivePluginInfoDto plugininfo in PluginCache.Instance.GetPlugins(e.Result.Job.PluginsNeeded))
           files.AddRange(plugininfo.PluginFiles);
         Logging.Instance.Info(this.ToString(), "Plugins fetched for job " + e.Result.Job.Id);
@@ -409,5 +409,5 @@
     }
 
-    internal Dictionary<Guid, Job> GetJobs() {
+    internal Dictionary<Guid, JobDto> GetJobs() {
       return jobs;
     }
Index: /trunk/sources/HeuristicLab.Hive.Client.Core/3.2/Heartbeat.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Client.Core/3.2/Heartbeat.cs	(revision 3010)
+++ /trunk/sources/HeuristicLab.Hive.Client.Core/3.2/Heartbeat.cs	(revision 3011)
@@ -1,3 +1,3 @@
-﻿#region License Information
+#region License Information
 /* HeuristicLab
  * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
@@ -74,5 +74,5 @@
     /// <param name="e"></param>
     void heartbeatTimer_Elapsed(object sender, ElapsedEventArgs e) {      
-      ClientInfo info = ConfigManager.Instance.GetClientInfo();      
+      ClientDto info = ConfigManager.Instance.GetClientInfo();      
 
       PerformanceCounter counter = new PerformanceCounter("Memory", "Available Bytes", true);
Index: /trunk/sources/HeuristicLab.Hive.Client.Core/3.2/PluginCache.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Client.Core/3.2/PluginCache.cs	(revision 3010)
+++ /trunk/sources/HeuristicLab.Hive.Client.Core/3.2/PluginCache.cs	(revision 3011)
@@ -1,3 +1,3 @@
-﻿using System;
+using System;
 using System.Collections.Generic;
 using System.Linq;
@@ -20,23 +20,23 @@
     } 
     
-    private List<CachedHivePluginInfo> pluginCache;
+    private List<CachedHivePluginInfoDto> pluginCache;
     
 
     public PluginCache() {
-      pluginCache = new List<CachedHivePluginInfo>();
+      pluginCache = new List<CachedHivePluginInfoDto>();
     }
     
-    public void AddPlugin(CachedHivePluginInfo plugin) {
+    public void AddPlugin(CachedHivePluginInfoDto plugin) {
       pluginCache.Add(plugin);    
     }
 
-    public List<CachedHivePluginInfo> GetPlugins(List<HivePluginInfo> requests) {
-      List<CachedHivePluginInfo> neededPlugins = new List<CachedHivePluginInfo>();
-      List<HivePluginInfo> missingPlugins = new List<HivePluginInfo>();
+    public List<CachedHivePluginInfoDto> GetPlugins(List<HivePluginInfoDto> requests) {
+      List<CachedHivePluginInfoDto> neededPlugins = new List<CachedHivePluginInfoDto>();
+      List<HivePluginInfoDto> missingPlugins = new List<HivePluginInfoDto>();
       bool found = false;
             
-      foreach (HivePluginInfo info in requests) {
+      foreach (HivePluginInfoDto info in requests) {
         //we MAY run in problems here - if there is a plugin twice in requests, there may be added two different versions of the plugin
-        foreach (CachedHivePluginInfo cache in pluginCache) {
+        foreach (CachedHivePluginInfoDto cache in pluginCache) {
           if (info.Name.Equals(cache.Name) && info.Version.Equals(cache.Version) && info.BuildDate <= cache.BuildDate) {
             neededPlugins.Add(cache);
@@ -50,5 +50,5 @@
       }
 
-      List<CachedHivePluginInfo> receivedPlugins = WcfService.Instance.RequestPlugins(missingPlugins);
+      List<CachedHivePluginInfoDto> receivedPlugins = WcfService.Instance.RequestPlugins(missingPlugins);
       if (receivedPlugins != null) {
         neededPlugins.AddRange(receivedPlugins);
Index: /trunk/sources/HeuristicLab.Hive.Contracts/3.2/BusinessObjects/CachedHivePluginInfoDto.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Contracts/3.2/BusinessObjects/CachedHivePluginInfoDto.cs	(revision 3011)
+++ /trunk/sources/HeuristicLab.Hive.Contracts/3.2/BusinessObjects/CachedHivePluginInfoDto.cs	(revision 3011)
@@ -0,0 +1,43 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 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.Text;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.PluginInfrastructure {
+  [DataContract]
+  [Serializable]
+  public class CachedHivePluginInfoDto : HivePluginInfoDto {
+
+    private List<byte[]> pluginFiles = new List<byte[]>();
+    /// <summary>
+    /// stores the plugin files in a list of byte arrays
+    /// </summary>
+    [DataMember]
+    public List<byte[]> PluginFiles {
+      get { return pluginFiles; }
+      set { pluginFiles = value; }
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Hive.Contracts/3.2/BusinessObjects/ClientConfigDto.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Contracts/3.2/BusinessObjects/ClientConfigDto.cs	(revision 3011)
+++ /trunk/sources/HeuristicLab.Hive.Contracts/3.2/BusinessObjects/ClientConfigDto.cs	(revision 3011)
@@ -0,0 +1,39 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 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 System.Runtime.Serialization;
+using HeuristicLab.DataAccess;
+
+namespace HeuristicLab.Hive.Contracts.BusinessObjects {
+
+  [DataContract]
+  [Serializable]
+  public class ClientConfigDto : PersistableObject {
+    [DataMember]
+    public String UpDownTimeCalendar { get; set; }
+    [DataMember]
+    public int? HeartBeatIntervall { get; set; }
+  }
+}
Index: /trunk/sources/HeuristicLab.Hive.Contracts/3.2/BusinessObjects/ClientDto.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Contracts/3.2/BusinessObjects/ClientDto.cs	(revision 3011)
+++ /trunk/sources/HeuristicLab.Hive.Contracts/3.2/BusinessObjects/ClientDto.cs	(revision 3011)
@@ -0,0 +1,56 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 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 System.Runtime.Serialization;
+                                   
+namespace HeuristicLab.Hive.Contracts.BusinessObjects {
+
+  public enum State { nullState, idle, calculating, offline, finished, abort, requestSnapshot, requestSnapshotSent, pending };
+
+  [DataContract]
+  [Serializable]
+  public class ClientDto : ResourceDto {
+    [DataMember]
+    public int NrOfCores { get; set; }
+    [DataMember]
+    public int NrOfFreeCores { get; set; }
+    [DataMember]
+    public int CpuSpeedPerCore { get; set; }
+    [DataMember]
+    public int Memory { get; set; }
+    [DataMember]
+    public int FreeMemory { get; set; }
+    [DataMember]
+    public DateTime Login { get; set; }
+    [DataMember]
+    public State State { get; set; }
+    [DataMember]
+    public ClientConfigDto Config { get; set; }
+
+    public override string ToString() {
+      return base.ToString() + ", NrOfCores: " + NrOfCores + ", NrOfFreeCores " + NrOfFreeCores + ", Login: " + Login + ", State: " + State;
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Hive.Contracts/3.2/BusinessObjects/ClientGroupDto.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Contracts/3.2/BusinessObjects/ClientGroupDto.cs	(revision 3011)
+++ /trunk/sources/HeuristicLab.Hive.Contracts/3.2/BusinessObjects/ClientGroupDto.cs	(revision 3011)
@@ -0,0 +1,39 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 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 System.Runtime.Serialization;
+
+namespace HeuristicLab.Hive.Contracts.BusinessObjects {
+
+  [DataContract]
+  public class ClientGroupDto : ResourceDto {
+    [DataMember]
+    public List<ResourceDto> Resources { get; set; }
+
+    public ClientGroupDto() {
+      Resources = new List<ResourceDto>();
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Hive.Contracts/3.2/BusinessObjects/HivePluginInfoDto.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Contracts/3.2/BusinessObjects/HivePluginInfoDto.cs	(revision 3011)
+++ /trunk/sources/HeuristicLab.Hive.Contracts/3.2/BusinessObjects/HivePluginInfoDto.cs	(revision 3011)
@@ -0,0 +1,44 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 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 System.Runtime.Serialization;
+using HeuristicLab.DataAccess;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Hive.Contracts.BusinessObjects {
+
+  [DataContract]
+  [Serializable]
+  public class HivePluginInfoDto : PersistableObject {
+    [DataMember]
+    public String Name { get; set; }
+
+    [DataMember]
+    public String Version { get; set; }
+
+    [DataMember]
+    public DateTime BuildDate { get; set; }
+  }
+}
Index: /trunk/sources/HeuristicLab.Hive.Contracts/3.2/BusinessObjects/JobDto.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Contracts/3.2/BusinessObjects/JobDto.cs	(revision 3011)
+++ /trunk/sources/HeuristicLab.Hive.Contracts/3.2/BusinessObjects/JobDto.cs	(revision 3011)
@@ -0,0 +1,72 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 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 System.Runtime.Serialization;
+using HeuristicLab.DataAccess;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Hive.Contracts.BusinessObjects {
+
+  [DataContract]
+  [Serializable]
+  public class JobDto : PersistableObject {
+    [DataMember]
+    public State State { get; set; }
+    [DataMember]
+    public Guid UserId { get; set; }
+    [DataMember]
+    public ClientDto Client { get; set; }
+    [DataMember]
+    public JobDto ParentJob { get; set; }
+    [DataMember]
+    public double? Percentage { get; set; }
+    [DataMember]
+    public DateTime? DateCreated { get; set; }
+    [DataMember]
+    public DateTime? DateCalculated { get; set; }
+    [DataMember]
+    public int? Priority { get; set; }
+    [DataMember]
+    public int CoresNeeded { get; set; }
+    [DataMember]
+    public int MemoryNeeded { get; set; }
+    [DataMember]
+    public List<HivePluginInfoDto> PluginsNeeded { get; set; }
+    [DataMember]
+    public List<Guid> AssignedResourceIds { get; set; }
+    [DataMember]
+    public ProjectDto Project { get; set; }
+
+    public override string ToString() {
+      return base.ToString() + "State: " + State + ", [Ressource : " + Client + " ] , DateCreated: " + DateCreated + ", DateCalculated: " + DateCalculated +
+        "Priority: " + Priority + ", CoresNeeded: " + CoresNeeded + "AssignedResources: " + AssignedResourceIds;
+    }
+
+    public JobDto() {
+      PluginsNeeded = new List<HivePluginInfoDto>();
+      AssignedResourceIds = new List<Guid>();
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Hive.Contracts/3.2/BusinessObjects/ProjectDto.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Contracts/3.2/BusinessObjects/ProjectDto.cs	(revision 3011)
+++ /trunk/sources/HeuristicLab.Hive.Contracts/3.2/BusinessObjects/ProjectDto.cs	(revision 3011)
@@ -0,0 +1,38 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 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 System.Runtime.Serialization;
+using HeuristicLab.DataAccess;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Hive.Contracts.BusinessObjects {
+
+  [DataContract]
+  [Serializable]
+  public class ProjectDto : PersistableObject {
+    [DataMember]
+    public String Name { get; set; }
+  }
+}
Index: /trunk/sources/HeuristicLab.Hive.Contracts/3.2/BusinessObjects/ResourceDto.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Contracts/3.2/BusinessObjects/ResourceDto.cs	(revision 3011)
+++ /trunk/sources/HeuristicLab.Hive.Contracts/3.2/BusinessObjects/ResourceDto.cs	(revision 3011)
@@ -0,0 +1,41 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 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 System.Runtime.Serialization;
+using HeuristicLab.DataAccess;
+
+namespace HeuristicLab.Hive.Contracts.BusinessObjects {
+
+  [DataContract]
+  [Serializable]
+  public class ResourceDto : PersistableObject {
+    [DataMember]
+    public string Name { get; set; }
+
+    public override string ToString() {
+      return Id + " " + Name;
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Hive.Contracts/3.2/BusinessObjects/SerializedJob.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Contracts/3.2/BusinessObjects/SerializedJob.cs	(revision 3010)
+++ /trunk/sources/HeuristicLab.Hive.Contracts/3.2/BusinessObjects/SerializedJob.cs	(revision 3011)
@@ -31,5 +31,5 @@
   public class SerializedJob {
     [DataMember]
-    public Job JobInfo { get; set; }
+    public JobDto JobInfo { get; set; }
     
     [DataMember]
Index: /trunk/sources/HeuristicLab.Hive.Contracts/3.2/BusinessObjects/UpTimeStatisticsDto.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Contracts/3.2/BusinessObjects/UpTimeStatisticsDto.cs	(revision 3011)
+++ /trunk/sources/HeuristicLab.Hive.Contracts/3.2/BusinessObjects/UpTimeStatisticsDto.cs	(revision 3011)
@@ -0,0 +1,41 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 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 System.Runtime.Serialization;
+using HeuristicLab.DataAccess;
+
+namespace HeuristicLab.Hive.Contracts.BusinessObjects {
+
+  [DataContract]
+  public class UpTimeStatisticsDto : PersistableObject {
+    [DataMember]
+    public ClientDto Client { get; set; }
+    [DataMember]
+    public DateTime Login { get; set; }
+    [DataMember]
+    public DateTime Logout { get; set; }
+
+  }
+}
Index: /trunk/sources/HeuristicLab.Hive.Contracts/3.2/HeuristicLab.Hive.Contracts-3.2.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Contracts/3.2/HeuristicLab.Hive.Contracts-3.2.csproj	(revision 3010)
+++ /trunk/sources/HeuristicLab.Hive.Contracts/3.2/HeuristicLab.Hive.Contracts-3.2.csproj	(revision 3011)
@@ -87,17 +87,17 @@
   <ItemGroup>
     <Compile Include="ApplicationConstants.cs" />
-    <Compile Include="BusinessObjects\CachedHivePluginInfo.cs" />
-    <Compile Include="BusinessObjects\ClientGroup.cs" />
+    <Compile Include="BusinessObjects\CachedHivePluginInfoDto.cs" />
+    <Compile Include="BusinessObjects\ClientGroupDto.cs" />
+    <Compile Include="BusinessObjects\ResourceDto.cs" />
     <Compile Include="BusinessObjects\SerializedJob.cs" />
-    <Compile Include="BusinessObjects\Project.cs" />
-    <Compile Include="BusinessObjects\HivePluginInfo.cs" />
+    <Compile Include="BusinessObjects\ProjectDto.cs" />
+    <Compile Include="BusinessObjects\HivePluginInfoDto.cs" />
     <Compile Include="BusinessObjects\HeartBeatData.cs" />
-    <Compile Include="BusinessObjects\Job.cs" />
+    <Compile Include="BusinessObjects\JobDto.cs" />
     <Compile Include="BusinessObjects\JobResult.cs" />
-    <Compile Include="BusinessObjects\Resource.cs" />
     <Compile Include="BusinessObjects\SerializedJobResult.cs" />
-    <Compile Include="BusinessObjects\UpTimeStatistics.cs" />
-    <Compile Include="BusinessObjects\Client.cs" />
-    <Compile Include="BusinessObjects\ClientConfig.cs" />
+    <Compile Include="BusinessObjects\UpTimeStatisticsDto.cs" />
+    <Compile Include="BusinessObjects\ClientDto.cs" />
+    <Compile Include="BusinessObjects\ClientConfigDto.cs" />
     <Compile Include="ResponseSerializedJob.cs" />
     <Compile Include="MultiStream.cs" />
Index: /trunk/sources/HeuristicLab.Hive.Contracts/3.2/Interfaces/IClientCommunicator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Contracts/3.2/Interfaces/IClientCommunicator.cs	(revision 3010)
+++ /trunk/sources/HeuristicLab.Hive.Contracts/3.2/Interfaces/IClientCommunicator.cs	(revision 3011)
@@ -1,3 +1,3 @@
-﻿#region License Information
+#region License Information
 /* HeuristicLab
  * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
@@ -35,11 +35,11 @@
   public interface IClientCommunicator {
     [OperationContract]
-    Response Login(ClientInfo clientInfo);
+    Response Login(ClientDto clientInfo);
     [OperationContract]
     ResponseHB ProcessHeartBeat(HeartBeatData hbData);
     [OperationContract]
     ResponseJob SendJob(Guid clientId);
-    [OperationContract]
-    ResponseSerializedJob SendSerializedJob(Guid clientId);
+    //[OperationContract]
+    //ResponseSerializedJob SendSerializedJob(Guid clientId);
     [OperationContract]
     ResponseResultReceived StoreFinishedJobResult(Guid clientId, 
@@ -59,5 +59,5 @@
     Response IsJobStillNeeded(Guid jobId);
     [OperationContract]
-    ResponsePlugin SendPlugins(List<HivePluginInfo> pluginList);
+    ResponsePlugin SendPlugins(List<HivePluginInfoDto> pluginList);
   }
 }
Index: /trunk/sources/HeuristicLab.Hive.Contracts/3.2/Interfaces/IClientFacade.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Contracts/3.2/Interfaces/IClientFacade.cs	(revision 3010)
+++ /trunk/sources/HeuristicLab.Hive.Contracts/3.2/Interfaces/IClientFacade.cs	(revision 3011)
@@ -35,5 +35,5 @@
 
     [OperationContract]
-    Stream SendStreamedPlugins(List<HivePluginInfo> pluginList);
+    Stream SendStreamedPlugins(List<HivePluginInfoDto> pluginList);
 
     [OperationContract]
Index: /trunk/sources/HeuristicLab.Hive.Contracts/3.2/Interfaces/IClientManager.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Contracts/3.2/Interfaces/IClientManager.cs	(revision 3010)
+++ /trunk/sources/HeuristicLab.Hive.Contracts/3.2/Interfaces/IClientManager.cs	(revision 3011)
@@ -1,3 +1,3 @@
-﻿#region License Information
+#region License Information
 /* HeuristicLab
  * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
@@ -34,25 +34,25 @@
   public interface IClientManager {
     [OperationContract]
-    ResponseList<ClientInfo> GetAllClients();
+    ResponseList<ClientDto> GetAllClients();
     [OperationContract]
-    [ServiceKnownType(typeof (Resource))]
-    [ServiceKnownType(typeof(ClientInfo))]
-    [ServiceKnownType(typeof(ClientGroup))]
-    ResponseList<ClientGroup> GetAllClientGroups();
+    [ServiceKnownType(typeof (ResourceDto))]
+    [ServiceKnownType(typeof(ClientDto))]
+    [ServiceKnownType(typeof(ClientGroupDto))]
+    ResponseList<ClientGroupDto> GetAllClientGroups();
     [OperationContract]
-    ResponseObject<List<ClientGroup>> GetAllGroupsOfResource(Guid resourceId);
+    ResponseObject<List<ClientGroupDto>> GetAllGroupsOfResource(Guid resourceId);
     [OperationContract]
-    ResponseObject<ClientGroup> AddClientGroup(ClientGroup clientGroup);
+    ResponseObject<ClientGroupDto> AddClientGroup(ClientGroupDto clientGroup);
     [OperationContract]
     Response DeleteClientGroup(Guid clientGroupId);
     [OperationContract]
-    [ServiceKnownType(typeof(Resource))]
-    [ServiceKnownType(typeof(ClientInfo))]
-    [ServiceKnownType(typeof(ClientGroup))]
-    Response AddResourceToGroup(Guid clientGroupId, Resource resource);
+    [ServiceKnownType(typeof(ResourceDto))]
+    [ServiceKnownType(typeof(ClientDto))]
+    [ServiceKnownType(typeof(ClientGroupDto))]
+    Response AddResourceToGroup(Guid clientGroupId, ResourceDto resource);
     [OperationContract]
     Response DeleteResourceFromGroup(Guid clientGroupId, Guid resourceId);
     [OperationContract]
-    ResponseList<UpTimeStatistics> GetAllUpTimeStatistics();
+    ResponseList<UpTimeStatisticsDto> GetAllUpTimeStatistics();
   }
 }
Index: /trunk/sources/HeuristicLab.Hive.Contracts/3.2/Interfaces/IExecutionEngineFacade.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Contracts/3.2/Interfaces/IExecutionEngineFacade.cs	(revision 3010)
+++ /trunk/sources/HeuristicLab.Hive.Contracts/3.2/Interfaces/IExecutionEngineFacade.cs	(revision 3011)
@@ -31,9 +31,9 @@
   public interface IExecutionEngineFacade {
     [OperationContract]
-    ResponseObject<Job> AddJob(SerializedJob job);
+    ResponseObject<JobDto> AddJob(SerializedJob job);
     [OperationContract]
     Response RequestSnapshot(Guid jobId);
     [OperationContract]
-    ResponseObject<SerializedJobResult> GetLastSerializedResult(Guid jobId, bool requested);
+    ResponseObject<SerializedJob> GetLastSerializedResult(Guid jobId, bool requested);
     [OperationContract]
     Response AbortJob(Guid jobId);
Index: /trunk/sources/HeuristicLab.Hive.Contracts/3.2/Interfaces/IJobManager.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Contracts/3.2/Interfaces/IJobManager.cs	(revision 3010)
+++ /trunk/sources/HeuristicLab.Hive.Contracts/3.2/Interfaces/IJobManager.cs	(revision 3011)
@@ -34,15 +34,15 @@
   public interface IJobManager {
     [OperationContract]
-    ResponseList<Job> GetAllJobs();
+    ResponseList<JobDto> GetAllJobs();
     [OperationContract]
-    ResponseObject<Job> GetJobById(Guid jobId);
+    ResponseObject<JobDto> GetJobById(Guid jobId);
     [OperationContract]
-    ResponseObject<Job> AddNewJob(SerializedJob job);
+    ResponseObject<JobDto> AddNewJob(SerializedJob job);
     [OperationContract]
     Response RemoveJob(Guid jobId);
     [OperationContract]
-    ResponseObject<JobResult> GetLastJobResultOf(Guid jobId);
+    ResponseObject<JobDto> GetLastJobResultOf(Guid jobId);
     [OperationContract]
-    ResponseObject<SerializedJobResult> GetLastSerializedJobResultOf(Guid jobId, bool requested);
+    ResponseObject<SerializedJob> GetLastSerializedJobResultOf(Guid jobId, bool requested);
     [OperationContract]
     ResponseList<JobResult> GetAllJobResults(Guid jobId);
@@ -52,13 +52,13 @@
     Response AbortJob(Guid jobId);
     [OperationContract]
-    ResponseList<Project> GetAllProjects();
+    ResponseList<ProjectDto> GetAllProjects();
     [OperationContract]
-    Response CreateProject(Project project);
+    Response CreateProject(ProjectDto project);
     [OperationContract]
-    Response ChangeProject(Project project);
+    Response ChangeProject(ProjectDto project);
     [OperationContract]
     Response DeleteProject(Guid projectId);
     [OperationContract]
-    ResponseList<Job> GetJobsByProject(Guid projectId);
+    ResponseList<JobDto> GetJobsByProject(Guid projectId);
   }
 }
Index: /trunk/sources/HeuristicLab.Hive.Contracts/3.2/ResponseJob.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Contracts/3.2/ResponseJob.cs	(revision 3010)
+++ /trunk/sources/HeuristicLab.Hive.Contracts/3.2/ResponseJob.cs	(revision 3011)
@@ -37,5 +37,5 @@
   public class ResponseJob : Response {
     [DataMember]
-    public Job Job { get; set; }
+    public JobDto Job { get; set; }
   }
 }
Index: /trunk/sources/HeuristicLab.Hive.Contracts/3.2/ResponsePlugin.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Contracts/3.2/ResponsePlugin.cs	(revision 3010)
+++ /trunk/sources/HeuristicLab.Hive.Contracts/3.2/ResponsePlugin.cs	(revision 3011)
@@ -1,3 +1,3 @@
-﻿using System;
+using System;
 using System.Collections.Generic;
 using System.Linq;
@@ -12,9 +12,9 @@
   public class ResponsePlugin : Response {
     public ResponsePlugin() {
-      Plugins = new List<CachedHivePluginInfo>();
+      Plugins = new List<CachedHivePluginInfoDto>();
     }
 
     [DataMember]
-    public List<CachedHivePluginInfo> Plugins { get; set; }
+    public List<CachedHivePluginInfoDto> Plugins { get; set; }
   }
 }
Index: /trunk/sources/HeuristicLab.Hive.Contracts/3.2/ResponseResultReceived.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Contracts/3.2/ResponseResultReceived.cs	(revision 3010)
+++ /trunk/sources/HeuristicLab.Hive.Contracts/3.2/ResponseResultReceived.cs	(revision 3011)
@@ -33,6 +33,4 @@
     public Guid JobId { get; set; }
     [DataMember]
-    public Guid JobResultId { get; set; }
-    [DataMember]
     public bool finished { get; set; }
   }
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 3010)
+++ /trunk/sources/HeuristicLab.Hive.Engine/3.2/HeuristicLab.Hive.Engine-3.2.csproj	(revision 3011)
@@ -89,4 +89,5 @@
     <Compile Include="HiveEngine.cs" />
     <Compile Include="HiveEngineEditor.cs">
+      <SubType>UserControl</SubType>
     </Compile>
     <Compile Include="HiveEngineEditor.Designer.cs">
Index: /trunk/sources/HeuristicLab.Hive.Engine/3.2/HiveEngine.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Engine/3.2/HiveEngine.cs	(revision 3010)
+++ /trunk/sources/HeuristicLab.Hive.Engine/3.2/HiveEngine.cs	(revision 3011)
@@ -101,5 +101,5 @@
 
       for (int i = 0; i < loops; i++) {
-        ResponseObject<Contracts.BusinessObjects.Job> res = executionEngineFacade.AddJob(jobObj);
+        ResponseObject<Contracts.BusinessObjects.JobDto> res = executionEngineFacade.AddJob(jobObj);
         jobId = res.Obj.Id;
       }
@@ -112,5 +112,5 @@
       Thread t = new Thread(() => {
         IExecutionEngineFacade executionEngineFacade = ServiceLocator.CreateExecutionEngineFacade(HiveServerUrl);
-        ResponseObject<SerializedJobResult> response = null;
+        ResponseObject<SerializedJob> response = null;
         Job restoredJob = null;
         do {
@@ -128,5 +128,5 @@
             if (response.Success && response.Obj != null) {
               HiveLogger.Debug("HiveEngine: Results-polling - Got result!");
-              restoredJob = (Job)PersistenceManager.RestoreFromGZip(response.Obj.SerializedJobResultData);
+              restoredJob = (Job)PersistenceManager.RestoreFromGZip(response.Obj.SerializedJobData);
               HiveLogger.Debug("HiveEngine: Results-polling - IsSnapshotResult: " + (restoredJob.Progress<1.0));
             }
@@ -146,5 +146,5 @@
       IExecutionEngineFacade executionEngineFacade = ServiceLocator.CreateExecutionEngineFacade(HiveServerUrl);
       int retryCount = 0;
-      ResponseObject<SerializedJobResult> response;
+      ResponseObject<SerializedJob> response;
       lock (locker) {
         HiveLogger.Debug("HiveEngine: Abort - RequestSnapshot");
@@ -174,8 +174,8 @@
         }
       }
-      SerializedJobResult jobResult = response.Obj;
+      SerializedJob jobResult = response.Obj;
       if (jobResult != null) {
         HiveLogger.Debug("HiveEngine: Results-polling - Got result!");
-        job = (Job)PersistenceManager.RestoreFromGZip(jobResult.SerializedJobResultData);
+        job = (Job)PersistenceManager.RestoreFromGZip(jobResult.SerializedJobData);
         ControlManager.Manager.ShowControl(job.Engine.CreateView());
       }
@@ -210,6 +210,6 @@
 
     private HeuristicLab.Hive.Contracts.BusinessObjects.SerializedJob CreateJobObj() {
-      HeuristicLab.Hive.Contracts.BusinessObjects.Job jobObj =
-        new HeuristicLab.Hive.Contracts.BusinessObjects.Job();
+      HeuristicLab.Hive.Contracts.BusinessObjects.JobDto jobObj =
+        new HeuristicLab.Hive.Contracts.BusinessObjects.JobDto();
 
       MemoryStream memStream = new MemoryStream();
@@ -240,9 +240,9 @@
       }
 
-      List<HivePluginInfo> pluginsNeeded =
-        new List<HivePluginInfo>();
+      List<HivePluginInfoDto> pluginsNeeded =
+        new List<HivePluginInfoDto>();
       foreach (IPluginDescription uniquePlugin in plugins) {
-        HivePluginInfo pluginInfo =
-          new HivePluginInfo();
+        HivePluginInfoDto pluginInfo =
+          new HivePluginInfoDto();
         pluginInfo.Name = uniquePlugin.Name;
         pluginInfo.Version = uniquePlugin.Version.ToString();
Index: /trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/3.2/ClientAdapter.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/3.2/ClientAdapter.cs	(revision 3010)
+++ /trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/3.2/ClientAdapter.cs	(revision 3011)
@@ -38,5 +38,5 @@
     DataAdapterBase<
       dsHiveServerTableAdapters.ClientTableAdapter, 
-      ClientInfo, 
+      ClientDto, 
       dsHiveServer.ClientRow>,
     IClientAdapter {
@@ -48,5 +48,5 @@
         if (resAdapter == null)
           resAdapter =
-            this.Session.GetDataAdapter<Resource, IResourceAdapter>();
+            this.Session.GetDataAdapter<ResourceDto, IResourceAdapter>();
 
         return resAdapter;
@@ -60,5 +60,5 @@
         if (clientGroupAdapter == null) {
           clientGroupAdapter =
-            this.Session.GetDataAdapter<ClientGroup, IClientGroupAdapter>();
+            this.Session.GetDataAdapter<ClientGroupDto, IClientGroupAdapter>();
         }
 
@@ -72,5 +72,5 @@
       get {
         if (jobAdapter == null) {
-          this.Session.GetDataAdapter<Job, IJobAdapter>();
+          this.Session.GetDataAdapter<JobDto, IJobAdapter>();
         }
 
@@ -85,5 +85,5 @@
         if (clientConfigAdapter == null) {
           clientConfigAdapter =
-            this.Session.GetDataAdapter<ClientConfig, IClientConfigAdapter>();
+            this.Session.GetDataAdapter<ClientConfigDto, IClientConfigAdapter>();
         }
 
@@ -98,6 +98,6 @@
 
     #region Overrides
-    protected override ClientInfo ConvertRow(dsHiveServer.ClientRow row, 
-      ClientInfo client) {
+    protected override ClientDto ConvertRow(dsHiveServer.ClientRow row, 
+      ClientDto client) {
       if(row != null && client != null) {      
         /*Parent - resource*/
@@ -152,5 +152,5 @@
     }
 
-    protected override dsHiveServer.ClientRow ConvertObj(ClientInfo client,
+    protected override dsHiveServer.ClientRow ConvertObj(ClientDto client,
       dsHiveServer.ClientRow row) {
       if (client != null && row != null) {
@@ -179,5 +179,5 @@
 
     #region IClientAdapter Members
-    protected override void doUpdate(ClientInfo client) {
+    protected override void doUpdate(ClientDto client) {
       if (client != null) {
         ResAdapter.Update(client);
@@ -188,10 +188,10 @@
     }
 
-    public ClientInfo GetByName(string name) {
-      return (ClientInfo)
+    public ClientDto GetByName(string name) {
+      return (ClientDto)
         base.doInTransaction(
         delegate() {
-          ClientInfo client = new ClientInfo();
-          Resource res =
+          ClientDto client = new ClientDto();
+          ResourceDto res =
             ResAdapter.GetByName(name);
 
@@ -200,5 +200,5 @@
     }
 
-    protected override bool doDelete(ClientInfo client) {
+    protected override bool doDelete(ClientDto client) {
       return (bool)base.doInTransaction(
         delegate() {
@@ -219,5 +219,5 @@
     }
 
-    public ICollection<ClientInfo> GetGrouplessClients() {
+    public ICollection<ClientDto> GetGrouplessClients() {
       return
         base.FindMultiple(
Index: /trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/3.2/ClientConfigAdapter.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/3.2/ClientConfigAdapter.cs	(revision 3010)
+++ /trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/3.2/ClientConfigAdapter.cs	(revision 3011)
@@ -12,5 +12,5 @@
     DataAdapterBase<
       dsHiveServerTableAdapters.ClientConfigTableAdapter,
-      ClientConfig,
+      ClientConfigDto,
       dsHiveServer.ClientConfigRow>,
     IClientConfigAdapter {
@@ -20,9 +20,10 @@
 
     protected override dsHiveServer.ClientConfigRow 
-      ConvertObj(ClientConfig config, dsHiveServer.ClientConfigRow row) {
+      ConvertObj(ClientConfigDto config, dsHiveServer.ClientConfigRow row) {
       if (row != null && config != null) {
         row.ClientConfigId = config.Id;
-        row.HeartBeatIntervall = config.HeartBeatIntervall;
-        row.UpDownTimeCalendar = config.UpDownTimeCalendar;
+        //Todo: commOut
+        //row.HeartBeatIntervall = config.HeartBeatIntervall;
+        //row.UpDownTimeCalendar = config.UpDownTimeCalendar;
 
         return row;
@@ -31,5 +32,5 @@
     }
 
-    protected override ClientConfig ConvertRow(dsHiveServer.ClientConfigRow row, ClientConfig config) {
+    protected override ClientConfigDto ConvertRow(dsHiveServer.ClientConfigRow row, ClientConfigDto config) {
       if (config != null && row != null) {
         config.Id = row.ClientConfigId;
Index: /trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/3.2/ClientGroupAdapter.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/3.2/ClientGroupAdapter.cs	(revision 3010)
+++ /trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/3.2/ClientGroupAdapter.cs	(revision 3011)
@@ -37,5 +37,5 @@
   class ClientGroupAdapter : 
     DataAdapterBase<dsHiveServerTableAdapters.ClientGroupTableAdapter, 
-    ClientGroup, 
+    ClientGroupDto, 
     dsHiveServer.ClientGroupRow>, 
     IClientGroupAdapter {
@@ -66,5 +66,5 @@
         if (resourceAdapter == null)
           resourceAdapter =
-            this.Session.GetDataAdapter<Resource, IResourceAdapter>();
+            this.Session.GetDataAdapter<ResourceDto, IResourceAdapter>();
 
         return resourceAdapter;
@@ -78,6 +78,6 @@
 
     #region Overrides
-    protected override ClientGroup ConvertRow(dsHiveServer.ClientGroupRow row,
-      ClientGroup clientGroup) {
+    protected override ClientGroupDto ConvertRow(dsHiveServer.ClientGroupRow row,
+      ClientGroupDto clientGroup) {
       if (row != null && clientGroup != null) {
         /*Parent - Permission Owner*/
@@ -90,5 +90,5 @@
         clientGroup.Resources.Clear();
         foreach(Guid resource in resources) {
-          Resource res =
+          ResourceDto res =
             ResAdapter.GetByIdPolymorphic(resource);
 
@@ -101,5 +101,5 @@
     }
 
-    protected override dsHiveServer.ClientGroupRow ConvertObj(ClientGroup clientGroup,
+    protected override dsHiveServer.ClientGroupRow ConvertObj(ClientGroupDto clientGroup,
       dsHiveServer.ClientGroupRow row) {
       if (clientGroup != null && row != null) {
@@ -112,5 +112,5 @@
 
     #region IClientGroupAdapter Members
-    protected override void doUpdate(ClientGroup group) {
+    protected override void doUpdate(ClientGroupDto group) {
       if (group != null) {
         ResAdapter.Update(group);
@@ -120,5 +120,5 @@
         List<Guid> relationships = 
           new List<Guid>();
-        foreach(Resource res in group.Resources) {
+        foreach(ResourceDto res in group.Resources) {
           ResAdapter.UpdatePolymorphic(res);
 
@@ -131,7 +131,7 @@
     }
 
-    public ClientGroup GetByName(string name) {
-      ClientGroup group = new ClientGroup();
-      Resource res =
+    public ClientGroupDto GetByName(string name) {
+      ClientGroupDto group = new ClientGroupDto();
+      ResourceDto res =
         ResAdapter.GetByName(name);
 
@@ -143,5 +143,5 @@
     }
 
-    public ICollection<ClientGroup> MemberOf(Resource resource) {
+    public ICollection<ClientGroupDto> MemberOf(ResourceDto resource) {
       if (resource != null) {
         return base.FindMultiple(
@@ -155,10 +155,10 @@
     }
 
-    protected override bool doDelete(ClientGroup group) {
+    protected override bool doDelete(ClientGroupDto group) {
       if (group != null) {
         //recursively delete all subgroups
-        foreach (Resource res in group.Resources) {
-          if (res is ClientGroup) {
-            Delete(res as ClientGroup);
+        foreach (ResourceDto res in group.Resources) {
+          if (res is ClientGroupDto) {
+            Delete(res as ClientGroupDto);
           }
         }
Index: /trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/3.2/JobAdapter.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/3.2/JobAdapter.cs	(revision 3010)
+++ /trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/3.2/JobAdapter.cs	(revision 3011)
@@ -37,5 +37,5 @@
   class JobAdapter :
     DataAdapterBase<dsHiveServerTableAdapters.JobTableAdapter,
-                      Job, 
+                      JobDto, 
                       dsHiveServer.JobRow>, 
     IJobAdapter {
@@ -87,5 +87,5 @@
         if (clientAdapter == null)
           clientAdapter = 
-            this.Session.GetDataAdapter<ClientInfo, IClientAdapter>();
+            this.Session.GetDataAdapter<ClientDto, IClientAdapter>();
 
         return clientAdapter;
@@ -112,5 +112,5 @@
         if (pluginInfoAdapter == null) {
           pluginInfoAdapter =
-            this.Session.GetDataAdapter<HivePluginInfo, IPluginInfoAdapter>();
+            this.Session.GetDataAdapter<HivePluginInfoDto, IPluginInfoAdapter>();
         }
 
@@ -125,5 +125,5 @@
         if (projectAdapter == null) {
           projectAdapter =
-            this.Session.GetDataAdapter<Project, IProjectAdapter>();
+            this.Session.GetDataAdapter<ProjectDto, IProjectAdapter>();
         }
 
@@ -137,6 +137,6 @@
 
     #region Overrides
-    protected override Job ConvertRow(dsHiveServer.JobRow row,
-      Job job) {
+    protected override JobDto ConvertRow(dsHiveServer.JobRow row,
+      JobDto job) {
       if (row != null && job != null) {
         job.Id = row.JobId;
@@ -203,5 +203,5 @@
         job.PluginsNeeded.Clear();
         foreach (Guid requiredPlugin in requiredPlugins) {
-          HivePluginInfo pluginInfo = 
+          HivePluginInfoDto pluginInfo = 
             PluginInfoAdapter.GetById(requiredPlugin);
 
@@ -218,5 +218,5 @@
     }
 
-    protected override dsHiveServer.JobRow ConvertObj(Job job,
+    protected override dsHiveServer.JobRow ConvertObj(JobDto job,
       dsHiveServer.JobRow row) {
       if (job != null && row != null) {
@@ -250,4 +250,6 @@
           row.SetJobStateNull();
 
+        //Todo: commout
+        /*
         row.Percentage = job.Percentage;
 
@@ -266,5 +268,5 @@
         row.CoresNeeded = job.CoresNeeded;
 
-        row.MemoryNeeded = job.MemoryNeeded;
+        row.MemoryNeeded = job.MemoryNeeded;*/
 
         if (job.Project != null)
@@ -279,5 +281,5 @@
 
     #region IJobAdapter Members
-    public ICollection<Job> GetAllSubjobs(Job job) {
+    public ICollection<JobDto> GetAllSubjobs(JobDto job) {
       if (job != null) {
         return
@@ -291,5 +293,5 @@
     }
 
-    public ICollection<Job> GetJobsByState(State state) {
+    public ICollection<JobDto> GetJobsByState(State state) {
       return
          base.FindMultiple(
@@ -299,5 +301,5 @@
     }
 
-    public ICollection<Job> GetJobsOf(ClientInfo client) {
+    public ICollection<JobDto> GetJobsOf(ClientDto client) {
       if (client != null) {
         return
@@ -311,5 +313,5 @@
     }
 
-    public ICollection<Job> GetActiveJobsOf(ClientInfo client) {
+    public ICollection<JobDto> GetActiveJobsOf(ClientDto client) {
 
       if (client != null) {
@@ -324,5 +326,5 @@
     }
 
-    public ICollection<Job> GetJobsOf(Guid userId) {      
+    public ICollection<JobDto> GetJobsOf(Guid userId) {      
       return 
           base.FindMultiple(
@@ -332,5 +334,5 @@
     }
 
-    public ICollection<Job> FindJobs(State state, int cores, int memory,
+    public ICollection<JobDto> FindJobs(State state, int cores, int memory,
       Guid resourceId) {
       return
@@ -345,5 +347,5 @@
     }
 
-    public ICollection<Job> GetJobsByProject(Guid projectId) {
+    public ICollection<JobDto> GetJobsByProject(Guid projectId) {
       return
          base.FindMultiple(
@@ -353,5 +355,5 @@
     }
 
-    protected override void doUpdate(Job obj) {
+    protected override void doUpdate(JobDto obj) {
       if (obj != null) {
         ProjectAdapter.Update(obj.Project);
@@ -364,7 +366,7 @@
         List<Guid> relationships =
           new List<Guid>();
-        foreach (HivePluginInfo pluginInfo in obj.PluginsNeeded) {
+        foreach (HivePluginInfoDto pluginInfo in obj.PluginsNeeded) {
           //first check if pluginInfo already exists in the db
-          HivePluginInfo found = PluginInfoAdapter.GetByNameVersionBuilddate(
+          HivePluginInfoDto found = PluginInfoAdapter.GetByNameVersionBuilddate(
             pluginInfo.Name, pluginInfo.Version, pluginInfo.BuildDate);
           if (found != null) {
@@ -384,5 +386,5 @@
     }
 
-    protected override bool doDelete(Job job) {
+    protected override bool doDelete(JobDto job) {
       if (job != null) {
         dsHiveServer.JobRow row =
@@ -403,7 +405,7 @@
 
           //delete orphaned pluginInfos
-          ICollection<HivePluginInfo> orphanedPluginInfos =
+          ICollection<HivePluginInfoDto> orphanedPluginInfos =
              PluginInfoAdapter.GetOrphanedPluginInfos();
-          foreach(HivePluginInfo orphanedPlugin in orphanedPluginInfos) {
+          foreach(HivePluginInfoDto orphanedPlugin in orphanedPluginInfos) {
             PluginInfoAdapter.Delete(orphanedPlugin);
           }
Index: /trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/3.2/JobResultsAdapter.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/3.2/JobResultsAdapter.cs	(revision 3010)
+++ /trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/3.2/JobResultsAdapter.cs	(revision 3011)
@@ -25,5 +25,5 @@
         if (clientAdapter == null)
           clientAdapter =
-            this.Session.GetDataAdapter<ClientInfo, IClientAdapter>();
+            this.Session.GetDataAdapter<ClientDto, IClientAdapter>();
 
         return clientAdapter;
@@ -37,5 +37,5 @@
         if (jobAdapter == null)
           jobAdapter =
-            this.Session.GetDataAdapter<Job, IJobAdapter>();
+            this.Session.GetDataAdapter<JobDto, IJobAdapter>();
 
         return jobAdapter;
@@ -57,5 +57,5 @@
 
         if (result.ClientId != Guid.Empty)  {
-          ClientInfo client = 
+          ClientDto client = 
                  ClientAdapter.GetById(result.ClientId);
 
Index: /trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/3.2/PluginInfoAdapter.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/3.2/PluginInfoAdapter.cs	(revision 3010)
+++ /trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/3.2/PluginInfoAdapter.cs	(revision 3011)
@@ -14,5 +14,5 @@
   class PluginInfoAdapter:
     DataAdapterBase<dsHiveServerTableAdapters.PluginInfoTableAdapter,
-      HivePluginInfo,
+      HivePluginInfoDto,
       dsHiveServer.PluginInfoRow>,
     IPluginInfoAdapter {
@@ -22,5 +22,5 @@
     }
 
-    protected override dsHiveServer.PluginInfoRow ConvertObj(HivePluginInfo pluginInfo, 
+    protected override dsHiveServer.PluginInfoRow ConvertObj(HivePluginInfoDto pluginInfo, 
       dsHiveServer.PluginInfoRow row) {
       if (row != null && pluginInfo != null) {
@@ -36,6 +36,6 @@
     }
 
-    protected override HivePluginInfo ConvertRow(dsHiveServer.PluginInfoRow row,
-      HivePluginInfo pluginInfo) {
+    protected override HivePluginInfoDto ConvertRow(dsHiveServer.PluginInfoRow row,
+      HivePluginInfoDto pluginInfo) {
       if (row != null && pluginInfo != null) {
         pluginInfo.Id = row.PluginId;
@@ -65,5 +65,5 @@
     }
 
-    public HivePluginInfo GetByNameVersionBuilddate(String name, String version, DateTime buildDate) {
+    public HivePluginInfoDto GetByNameVersionBuilddate(String name, String version, DateTime buildDate) {
       return
          base.FindSingle(
@@ -73,5 +73,5 @@
     }
 
-    public ICollection<HivePluginInfo> GetOrphanedPluginInfos() {
+    public ICollection<HivePluginInfoDto> GetOrphanedPluginInfos() {
       return
         base.FindMultiple(
Index: /trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/3.2/ProjectAdapter.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/3.2/ProjectAdapter.cs	(revision 3010)
+++ /trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/3.2/ProjectAdapter.cs	(revision 3011)
@@ -38,5 +38,5 @@
     DataAdapterBase<
       dsHiveServerTableAdapters.ProjectTableAdapter, 
-      Project, 
+      ProjectDto, 
       dsHiveServer.ProjectRow>,
     IProjectAdapter{
@@ -46,6 +46,6 @@
 
     #region Overrides
-    protected override Project ConvertRow(dsHiveServer.ProjectRow row, 
-      Project project) {
+    protected override ProjectDto ConvertRow(dsHiveServer.ProjectRow row, 
+      ProjectDto project) {
       if (row != null && project != null) {
         project.Id = row.ProjectId;
@@ -62,5 +62,5 @@
     }
 
-    protected override dsHiveServer.ProjectRow ConvertObj(Project project,
+    protected override dsHiveServer.ProjectRow ConvertObj(ProjectDto project,
       dsHiveServer.ProjectRow row) {
       if (project != null && row != null) {
Index: /trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/3.2/Properties/Settings.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/3.2/Properties/Settings.Designer.cs	(revision 3010)
+++ /trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/3.2/Properties/Settings.Designer.cs	(revision 3011)
@@ -2,5 +2,5 @@
 // <auto-generated>
 //     This code was generated by a tool.
-//     Runtime Version:2.0.50727.3082
+//     Runtime Version:2.0.50727.4927
 //
 //     Changes to this file may cause incorrect behavior and will be lost if
@@ -27,6 +27,6 @@
         [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
         [global::System.Configuration.SpecialSettingAttribute(global::System.Configuration.SpecialSetting.ConnectionString)]
-        [global::System.Configuration.DefaultSettingValueAttribute("Data Source=10.22.20.84;Initial Catalog=HiveServer;Persist Security Info=True;Use" +
-            "r ID=hive;Password=hive")]
+        [global::System.Configuration.DefaultSettingValueAttribute("Data Source=127.0.0.1;Initial Catalog=HeuristicLab.Hive;Persist Security Info=Tru" +
+            "e;User ID=hive;Password=hive;Pooling=true;MultipleActiveResultSets=true")]
         public string HiveServerConnectionString {
             get {
Index: /trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/3.2/Properties/Settings.settings
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/3.2/Properties/Settings.settings	(revision 3010)
+++ /trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/3.2/Properties/Settings.settings	(revision 3011)
@@ -6,8 +6,8 @@
       <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=10.22.20.84;Initial Catalog=HiveServer;Persist Security Info=True;User ID=hive;Password=hive&lt;/ConnectionString&gt;
+  &lt;ConnectionString&gt;Data Source=127.0.0.1;Initial Catalog=HeuristicLab.Hive;Persist Security Info=True;User ID=hive;Password=hive;Pooling=true;MultipleActiveResultSets=true&lt;/ConnectionString&gt;
   &lt;ProviderName&gt;System.Data.SqlClient&lt;/ProviderName&gt;
 &lt;/SerializableConnectionString&gt;</DesignTimeValue>
-      <Value Profile="(Default)">Data Source=10.22.20.84;Initial Catalog=HiveServer;Persist Security Info=True;User ID=hive;Password=hive</Value>
+      <Value Profile="(Default)">Data Source=127.0.0.1;Initial Catalog=HeuristicLab.Hive;Persist Security Info=True;User ID=hive;Password=hive;Pooling=true;MultipleActiveResultSets=true</Value>
     </Setting>
   </Settings>
Index: /trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/3.2/ResourceAdapter.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/3.2/ResourceAdapter.cs	(revision 3010)
+++ /trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/3.2/ResourceAdapter.cs	(revision 3011)
@@ -1,3 +1,3 @@
-﻿#region License Information
+#region License Information
 /* HeuristicLab
  * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
@@ -36,5 +36,5 @@
     DataAdapterBase<
       dsHiveServerTableAdapters.ResourceTableAdapter, 
-      Resource, 
+      ResourceDto, 
       dsHiveServer.ResourceRow>,  
     IResourceAdapter {
@@ -46,5 +46,5 @@
         if (clientAdapter == null)
           clientAdapter =
-            this.Session.GetDataAdapter<ClientInfo, IClientAdapter>();
+            this.Session.GetDataAdapter<ClientDto, IClientAdapter>();
         
         return clientAdapter;
@@ -58,5 +58,5 @@
         if (clientGroupAdapter == null)
           clientGroupAdapter =
-            this.Session.GetDataAdapter<ClientGroup, IClientGroupAdapter>();
+            this.Session.GetDataAdapter<ClientGroupDto, IClientGroupAdapter>();
 
         return clientGroupAdapter;
@@ -69,6 +69,6 @@
 
     #region Overrides
-    protected override Resource ConvertRow(dsHiveServer.ResourceRow row,
-      Resource resource) {
+    protected override ResourceDto ConvertRow(dsHiveServer.ResourceRow row,
+      ResourceDto resource) {
       if (row != null && resource != null) {
         resource.Id = row.ResourceId;
@@ -83,5 +83,5 @@
     }
 
-    protected override dsHiveServer.ResourceRow ConvertObj(Resource resource,
+    protected override dsHiveServer.ResourceRow ConvertObj(ResourceDto resource,
       dsHiveServer.ResourceRow row) {
       if (resource != null && row != null) {
@@ -96,5 +96,5 @@
 
     #region IResourceAdapter Members
-    public bool GetById(Resource resource) {
+    public bool GetById(ResourceDto resource) {
       if (resource != null) {
         dsHiveServer.ResourceRow row =
@@ -111,5 +111,5 @@
     }
 
-    public Resource GetByName(string name) {
+    public ResourceDto GetByName(string name) {
       return
         base.FindSingle (
@@ -123,9 +123,9 @@
     #region IPolymorphicDataAdapter<Resource> Members
 
-    public void UpdatePolymorphic(Resource res) {
-      if (res is ClientInfo) {
-        ClientAdapter.Update(res as ClientInfo);
-      } else if (res is ClientGroup) {
-        ClientGroupAdapter.Update(res as ClientGroup);
+    public void UpdatePolymorphic(ResourceDto res) {
+      if (res is ClientDto) {
+        ClientAdapter.Update(res as ClientDto);
+      } else if (res is ClientGroupDto) {
+        ClientGroupAdapter.Update(res as ClientGroupDto);
       } else {
         this.Update(res);
@@ -133,6 +133,6 @@
     }
 
-    public Resource GetByIdPolymorphic(Guid id) {
-      ClientGroup group =
+    public ResourceDto GetByIdPolymorphic(Guid id) {
+      ClientGroupDto group =
         ClientGroupAdapter.GetById(id);
 
@@ -140,5 +140,5 @@
         return group;
       else {
-        ClientInfo client =
+        ClientDto client =
           ClientAdapter.GetById(id);
 
@@ -151,9 +151,9 @@
     }
 
-    public bool DeletePolymorphic(Resource res) {
-      if (res is ClientInfo) {
-        return ClientAdapter.Delete(res as ClientInfo);
-      } else if (res is ClientGroup) {
-        return ClientGroupAdapter.Delete(res as ClientGroup);
+    public bool DeletePolymorphic(ResourceDto res) {
+      if (res is ClientDto) {
+        return ClientAdapter.Delete(res as ClientDto);
+      } else if (res is ClientGroupDto) {
+        return ClientGroupAdapter.Delete(res as ClientGroupDto);
       } else {
         return this.Delete(res);
Index: /trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/3.2/TableAdapterWrapper/ClientAdapterWrapper.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/3.2/TableAdapterWrapper/ClientAdapterWrapper.cs	(revision 3010)
+++ /trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/3.2/TableAdapterWrapper/ClientAdapterWrapper.cs	(revision 3011)
@@ -1,3 +1,3 @@
-﻿using System;
+using System;
 using System.Collections.Generic;
 using System.Linq;
@@ -12,5 +12,5 @@
    TableAdapterWrapperBase<
        dsHiveServerTableAdapters.ClientTableAdapter,
-   ClientInfo,
+   ClientDto,
    dsHiveServer.ClientRow> {
     public override void UpdateRow(dsHiveServer.ClientRow row) {
@@ -19,5 +19,5 @@
 
     public override dsHiveServer.ClientRow
-      InsertNewRow(ClientInfo client) {
+      InsertNewRow(ClientDto client) {
       dsHiveServer.ClientDataTable data =
         new dsHiveServer.ClientDataTable();
Index: /trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/3.2/TableAdapterWrapper/ClientConfigAdapterWrapper.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/3.2/TableAdapterWrapper/ClientConfigAdapterWrapper.cs	(revision 3010)
+++ /trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/3.2/TableAdapterWrapper/ClientConfigAdapterWrapper.cs	(revision 3011)
@@ -12,5 +12,5 @@
     TableAdapterWrapperBase<
         dsHiveServerTableAdapters.ClientConfigTableAdapter,
-    ClientConfig,
+    ClientConfigDto,
     dsHiveServer.ClientConfigRow> {
     public override void UpdateRow(dsHiveServer.ClientConfigRow row) {
@@ -19,5 +19,5 @@
 
     public override dsHiveServer.ClientConfigRow
-      InsertNewRow(ClientConfig config) {
+      InsertNewRow(ClientConfigDto config) {
       dsHiveServer.ClientConfigDataTable data =
         new dsHiveServer.ClientConfigDataTable();
Index: /trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/3.2/TableAdapterWrapper/ClientGroupAdapterWrapper.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/3.2/TableAdapterWrapper/ClientGroupAdapterWrapper.cs	(revision 3010)
+++ /trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/3.2/TableAdapterWrapper/ClientGroupAdapterWrapper.cs	(revision 3011)
@@ -11,8 +11,8 @@
   class ClientGroupAdapterWrapper :
     TableAdapterWrapperBase<dsHiveServerTableAdapters.ClientGroupTableAdapter,
-    ClientGroup,
+    ClientGroupDto,
     dsHiveServer.ClientGroupRow> {
     public override dsHiveServer.ClientGroupRow
-     InsertNewRow(ClientGroup group) {
+     InsertNewRow(ClientGroupDto group) {
       dsHiveServer.ClientGroupDataTable data =
          new dsHiveServer.ClientGroupDataTable();
Index: /trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/3.2/TableAdapterWrapper/JobAdapterWrapper.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/3.2/TableAdapterWrapper/JobAdapterWrapper.cs	(revision 3010)
+++ /trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/3.2/TableAdapterWrapper/JobAdapterWrapper.cs	(revision 3011)
@@ -14,5 +14,5 @@
   class JobAdapterWrapper :
     TableAdapterWrapperBase<dsHiveServerTableAdapters.JobTableAdapter,
-                      Job,
+                      JobDto,
                       dsHiveServer.JobRow> {
     public override void UpdateRow(dsHiveServer.JobRow row) {
@@ -21,5 +21,5 @@
 
     public override dsHiveServer.JobRow
-      InsertNewRow(Job job) {
+      InsertNewRow(JobDto job) {
       dsHiveServer.JobDataTable data =
         new dsHiveServer.JobDataTable();
Index: /trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/3.2/TableAdapterWrapper/PluginInfoAdapterWrapper.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/3.2/TableAdapterWrapper/PluginInfoAdapterWrapper.cs	(revision 3010)
+++ /trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/3.2/TableAdapterWrapper/PluginInfoAdapterWrapper.cs	(revision 3011)
@@ -12,5 +12,5 @@
    TableAdapterWrapperBase<
        dsHiveServerTableAdapters.PluginInfoTableAdapter,
-   HivePluginInfo,
+   HivePluginInfoDto,
    dsHiveServer.PluginInfoRow> {
     public override void UpdateRow(dsHiveServer.PluginInfoRow row) {
@@ -19,5 +19,5 @@
 
     public override dsHiveServer.PluginInfoRow
-      InsertNewRow(HivePluginInfo pluginInfo) {
+      InsertNewRow(HivePluginInfoDto pluginInfo) {
       dsHiveServer.PluginInfoDataTable data =
         new dsHiveServer.PluginInfoDataTable();
Index: /trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/3.2/TableAdapterWrapper/ProjectAdapterWrapper.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/3.2/TableAdapterWrapper/ProjectAdapterWrapper.cs	(revision 3010)
+++ /trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/3.2/TableAdapterWrapper/ProjectAdapterWrapper.cs	(revision 3011)
@@ -11,5 +11,5 @@
   class ProjectAdapterWrapper :
     TableAdapterWrapperBase<dsHiveServerTableAdapters.ProjectTableAdapter,
-                      Project,
+                      ProjectDto,
                       dsHiveServer.ProjectRow> {
     public override void UpdateRow(dsHiveServer.ProjectRow row) {
@@ -18,5 +18,5 @@
 
     public override dsHiveServer.ProjectRow
-      InsertNewRow(Project project) {
+      InsertNewRow(ProjectDto project) {
       dsHiveServer.ProjectDataTable data =
         new dsHiveServer.ProjectDataTable();
Index: /trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/3.2/TableAdapterWrapper/ResourceAdapterWrapper.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/3.2/TableAdapterWrapper/ResourceAdapterWrapper.cs	(revision 3010)
+++ /trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/3.2/TableAdapterWrapper/ResourceAdapterWrapper.cs	(revision 3011)
@@ -1,3 +1,3 @@
-﻿using System;
+using System;
 using System.Collections.Generic;
 using System.Linq;
@@ -12,5 +12,5 @@
   TableAdapterWrapperBase<
     dsHiveServerTableAdapters.ResourceTableAdapter,
-    Resource,
+    ResourceDto,
     dsHiveServer.ResourceRow> {
     public override void UpdateRow(dsHiveServer.ResourceRow row) {
@@ -19,5 +19,5 @@
 
     public override dsHiveServer.ResourceRow
-      InsertNewRow(Resource resource) {
+      InsertNewRow(ResourceDto resource) {
       dsHiveServer.ResourceDataTable data =
         new dsHiveServer.ResourceDataTable();
Index: /trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/3.2/dsHiveServer.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/3.2/dsHiveServer.Designer.cs	(revision 3010)
+++ /trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/3.2/dsHiveServer.Designer.cs	(revision 3011)
@@ -2,5 +2,5 @@
 // <auto-generated>
 //     This code was generated by a tool.
-//     Runtime Version:2.0.50727.3082
+//     Runtime Version:2.0.50727.4927
 //
 //     Changes to this file may cause incorrect behavior and will be lost if
Index: /trunk/sources/HeuristicLab.Hive.Server.Console/3.2/AddJobForm.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.Console/3.2/AddJobForm.cs	(revision 3010)
+++ /trunk/sources/HeuristicLab.Hive.Server.Console/3.2/AddJobForm.cs	(revision 3011)
@@ -1,3 +1,3 @@
-﻿#region License Information
+#region License Information
 /* HeuristicLab
  * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
@@ -43,8 +43,8 @@
     public event addDelegate addJobEvent;
 
-    ResponseList<Project> projects = null;
+    ResponseList<ProjectDto> projects = null;
     IJobManager jobManager;
     IClientManager clientManager; 
-    ResponseList<ClientGroup> clientGroups;
+    ResponseList<ClientGroupDto> clientGroups;
 
     Dictionary<Guid, string> clients = null;
@@ -69,5 +69,5 @@
       cbProject.Items.Add("none");
       cbProject.SelectedIndex = 0;
-      foreach (Project project in projects.List) {
+      foreach (ProjectDto project in projects.List) {
         cbProject.Items.Add(project.Name);
       }
@@ -86,5 +86,5 @@
 
     private void AddClientGroups() {
-     foreach (ClientGroup cg in clientGroups.List) {
+     foreach (ClientGroupDto cg in clientGroups.List) {
        if (cg.Id != Guid.Empty)
        clients.Add(cg.Id, cg.Name);
@@ -93,10 +93,10 @@
     }
 
-    private void AddClientOrGroup(ClientGroup clientGroup) {
-      foreach (Resource resource in clientGroup.Resources) {
-        if (resource is ClientGroup) {
+    private void AddClientOrGroup(ClientGroupDto clientGroup) {
+      foreach (ResourceDto resource in clientGroup.Resources) {
+        if (resource is ClientGroupDto) {
           if (resource.Id != Guid.Empty)
           clients.Add(resource.Id, resource.Name);
-          AddClientOrGroup(resource as ClientGroup);
+          AddClientOrGroup(resource as ClientGroupDto);
         }
       }
@@ -110,5 +110,5 @@
         if (numJobs > 0) {
           for (int i = 0; i < numJobs; i++) {
-            Job job = new Job { State = State.offline, CoresNeeded = 1 };
+            JobDto job = new JobDto { State = State.offline, CoresNeeded = 1 };
             
             // if project selected (0 -> none)
Index: /trunk/sources/HeuristicLab.Hive.Server.Console/3.2/HiveServerManagementConsole.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.Console/3.2/HiveServerManagementConsole.cs	(revision 3010)
+++ /trunk/sources/HeuristicLab.Hive.Server.Console/3.2/HiveServerManagementConsole.cs	(revision 3011)
@@ -48,5 +48,5 @@
 
     #region private variables
-    private ResponseList<Job> jobs = null;
+    private ResponseList<JobDto> jobs = null;
 
     List<ListViewGroup> jobGroup;
@@ -54,6 +54,6 @@
     private List<Changes> changes = new List<Changes>();
 
-    private Job currentJob = null;
-    private ClientInfo currentClient = null;
+    private JobDto currentJob = null;
+    private ClientDto currentClient = null;
 
     private TreeNode currentGroupNode = null;
@@ -93,5 +93,5 @@
         IJobManager jobManager = ServiceLocator.GetJobManager();
         if (lvJobControl.SelectedItems.Count == 1) {
-          jobManager.AbortJob(((Job)(lvJobControl.SelectedItems[0].Tag)).Id);
+          jobManager.AbortJob(((JobDto)(lvJobControl.SelectedItems[0].Tag)).Id);
         }
       };
@@ -101,5 +101,5 @@
         IJobManager jobManager = ServiceLocator.GetJobManager();
         if (lvJobControl.SelectedItems.Count == 1) {
-          jobManager.RequestSnapshot(((Job)(lvJobControl.SelectedItems[0].Tag)).Id);
+          jobManager.RequestSnapshot(((JobDto)(lvJobControl.SelectedItems[0].Tag)).Id);
         }
       };
@@ -109,6 +109,6 @@
         AddGroup addgroup = new AddGroup();
         parentgroup = Guid.Empty;
-        if ((tvClientControl.SelectedNode != null) && (((ClientGroup)tvClientControl.SelectedNode.Tag).Id != Guid.Empty)) {
-          parentgroup = ((ClientGroup)tvClientControl.SelectedNode.Tag).Id;
+        if ((tvClientControl.SelectedNode != null) && (((ClientGroupDto)tvClientControl.SelectedNode.Tag).Id != Guid.Empty)) {
+          parentgroup = ((ClientGroupDto)tvClientControl.SelectedNode.Tag).Id;
         }
         addgroup.addGroupEvent += new AddGroupDelegate(addgroup_addGroupEvent);
@@ -120,5 +120,5 @@
         IClientManager clientManager = ServiceLocator.GetClientManager();
         if (tvClientControl.SelectedNode != null) {
-          Response resp = clientManager.DeleteClientGroup(((ClientGroup)tvClientControl.SelectedNode.Tag).Id);
+          Response resp = clientManager.DeleteClientGroup(((ClientGroupDto)tvClientControl.SelectedNode.Tag).Id);
           if (tvClientControl.SelectedNode == currentGroupNode) {
             currentGroupNode = null;
@@ -147,5 +147,5 @@
         Point mouseLocation = tvClientControl.PointToClient(new Point(e.X, e.Y));
         TreeNode node = tvClientControl.GetNodeAt(mouseLocation);
-        if (node != null && ((ClientGroup)node.Tag).Id != Guid.Empty) {
+        if (node != null && ((ClientGroupDto)node.Tag).Id != Guid.Empty) {
           e.Effect = DragDropEffects.Move;
           if (hoverNode == null) {
@@ -170,16 +170,16 @@
           Point dropLocation = (sender as TreeView).PointToClient(new Point(e.X, e.Y));
           TreeNode dropNode = (sender as TreeView).GetNodeAt(dropLocation);
-          if (((ClientGroup)dropNode.Tag).Id != Guid.Empty) {
-            Dictionary<ClientInfo, Guid> clients = new Dictionary<ClientInfo, Guid>();
+          if (((ClientGroupDto)dropNode.Tag).Id != Guid.Empty) {
+            Dictionary<ClientDto, Guid> clients = new Dictionary<ClientDto, Guid>();
             foreach (ListViewItem lvi in lvClientControl.SelectedItems) {
               Guid groupId = Guid.Empty;
               foreach (ListViewGroup lvg in lvClientGroups) {
-                if (lvi.Group.Header == ((ClientGroup)lvg.Tag).Name) {
-                  groupId = ((ClientGroup)lvg.Tag).Id;
+                if (lvi.Group.Header == ((ClientGroupDto)lvg.Tag).Name) {
+                  groupId = ((ClientGroupDto)lvg.Tag).Id;
                 }
               }
-              clients.Add((ClientInfo)lvi.Tag, groupId);
-            }
-            ChangeGroup(clients, ((ClientGroup)dropNode.Tag).Id);
+              clients.Add((ClientDto)lvi.Tag, groupId);
+            }
+            ChangeGroup(clients, ((ClientGroupDto)dropNode.Tag).Id);
           }
           tvClientControl_DragLeave(null, EventArgs.Empty);
@@ -194,7 +194,7 @@
     /// <param name="clients">list of clients</param>
     /// <param name="clientgroupID">group of clients</param>
-    private void ChangeGroup(Dictionary<ClientInfo, Guid> clients, Guid clientgroupID) {
+    private void ChangeGroup(Dictionary<ClientDto, Guid> clients, Guid clientgroupID) {
       IClientManager clientManager = ServiceLocator.GetClientManager();
-      foreach (KeyValuePair<ClientInfo, Guid> client in clients) {
+      foreach (KeyValuePair<ClientDto, Guid> client in clients) {
         if (client.Key.Id != Guid.Empty) {
           Response resp = clientManager.DeleteResourceFromGroup(client.Value, client.Key.Id);
@@ -224,5 +224,5 @@
       changes.Clear();
 
-      ResponseList<Job> jobsOld = jobs;
+      ResponseList<JobDto> jobsOld = jobs;
       try {
         IJobManager jobManager =
@@ -231,5 +231,5 @@
         jobs = jobManager.GetAllJobs();
 
-        IDictionary<int, Job> jobsOldHelp;
+        IDictionary<int, JobDto> jobsOldHelp;
         CloneList(jobsOld, out jobsOldHelp);
 
@@ -269,5 +269,5 @@
         if (jobs != null && jobs.List != null) {
 
-          foreach (Job job in jobs.List) {
+          foreach (JobDto job in jobs.List) {
             if (job.State == State.calculating) {
               ListViewItem lvi = new ListViewItem(job.Id.ToString(), 1, lvJobCalculating);
@@ -312,8 +312,8 @@
       tvClientControl.Nodes.Clear();
       try {
-        ResponseList<ClientGroup> clientGroups = ClientManager.GetAllClientGroups();
+        ResponseList<ClientGroupDto> clientGroups = ClientManager.GetAllClientGroups();
 
         if (clientGroups != null && clientGroups.List != null) {
-          foreach (ClientGroup cg in clientGroups.List) {
+          foreach (ClientGroupDto cg in clientGroups.List) {
             AddClientOrGroup(cg, null);
           }
@@ -333,5 +333,5 @@
     }
 
-    private void AddClientOrGroup(ClientGroup clientGroup, TreeNode currentNode) {
+    private void AddClientOrGroup(ClientGroupDto clientGroup, TreeNode currentNode) {
       currentNode = CreateTreeNode(clientGroup, currentNode);
       List<ListViewItem> clientGroupList = new List<ListViewItem>();
@@ -345,10 +345,10 @@
       lvg.Tag = clientGroup;
       lvClientGroups.Add(lvg);
-      foreach (Resource resource in clientGroup.Resources) {
-        if (resource is ClientInfo) {
-          int percentageUsage = CapacityRam(((ClientInfo)resource).NrOfCores, ((ClientInfo)resource).NrOfFreeCores);
+      foreach (ResourceDto resource in clientGroup.Resources) {
+        if (resource is ClientDto) {
+          int percentageUsage = CapacityRam(((ClientDto)resource).NrOfCores, ((ClientDto)resource).NrOfFreeCores);
           int usage = 3;
-          if ((((ClientInfo)resource).State != State.offline) &&
-            (((ClientInfo)resource).State != State.nullState)) {
+          if ((((ClientDto)resource).State != State.offline) &&
+            (((ClientDto)resource).State != State.nullState)) {
             if ((percentageUsage >= 0) && (percentageUsage <= 25)) {
               usage = 0;
@@ -360,8 +360,8 @@
           }
           ListViewItem lvi = new ListViewItem(resource.Name, usage, lvg);
-          lvi.Tag = resource as ClientInfo;
+          lvi.Tag = resource as ClientDto;
           clientGroupList.Add(lvi);
-        } else if (resource is ClientGroup) {
-          AddClientOrGroup(resource as ClientGroup, currentNode);
+        } else if (resource is ClientGroupDto) {
+          AddClientOrGroup(resource as ClientGroupDto, currentNode);
         }
       }
@@ -369,5 +369,5 @@
     }
 
-    private TreeNode CreateTreeNode(ClientGroup clientGroup, TreeNode currentNode) {
+    private TreeNode CreateTreeNode(ClientGroupDto clientGroup, TreeNode currentNode) {
       TreeNode tn;
       if (string.IsNullOrEmpty(clientGroup.Name)) {
@@ -390,5 +390,5 @@
         lvClientControl.Groups.Add(lvg);
         lvg.Tag = node.Tag;
-        foreach (ListViewItem item in clientList[((ClientGroup)node.Tag).Id]) {
+        foreach (ListViewItem item in clientList[((ClientGroupDto)node.Tag).Id]) {
           item.Group = lvg;
           lvClientControl.Items.Add(item);
@@ -475,5 +475,6 @@
           IJobManager jobManager =
             ServiceLocator.GetJobManager();
-          ResponseObject<JobResult> jobRes = jobManager.GetLastJobResultOf(currentJob.Id);
+          ResponseObject<JobResult> jobRes = null;
+          //Todo: jobManager.GetLastJobResultOf(currentJob.Id);
 
           if (jobRes != null && jobRes.Obj != null) {
@@ -532,5 +533,5 @@
         for (int i = 0; i < lvJobControl.Items.Count; i++) {
           if (lvJobControl.Items[i].Text == change.ID.ToString()) {
-            foreach (Job job in jobs.List) {
+            foreach (JobDto job in jobs.List) {
               if (job.Id == change.ID) {
                 lvJobControl.Items[i].Tag = job;
@@ -562,5 +563,5 @@
         ListViewItem lvi = new ListViewItem(
           change.ID.ToString(), 2, jobGroup[2]);
-        foreach (Job job in jobs.List) {
+        foreach (JobDto job in jobs.List) {
           if (job.Id == change.ID) {
             lvi.Tag = job;
@@ -612,5 +613,5 @@
 
     private void OnLVJobControlClicked(object sender, EventArgs e) {
-      currentJob = (Job)lvJobControl.SelectedItems[0].Tag;
+      currentJob = (JobDto)lvJobControl.SelectedItems[0].Tag;
       JobClicked();
     }
@@ -629,5 +630,5 @@
       ListViewHitTestInfo hitTestInfo = lvJobControl.HitTest(e.Location);
       if (e.Button == MouseButtons.Right && hitTestInfo.Item != null && lvJobControl.SelectedItems.Count == 1) {
-        Job selectedJob = (Job)lvJobControl.SelectedItems[0].Tag;
+        JobDto selectedJob = (JobDto)lvJobControl.SelectedItems[0].Tag;
 
         if (selectedJob != null && selectedJob.State == State.calculating) {
@@ -649,6 +650,6 @@
       AddGroup addgroup = new AddGroup();
       parentgroup = Guid.Empty;
-      if ((tvClientControl.SelectedNode != null) && (((ClientGroup)tvClientControl.SelectedNode.Tag).Id != Guid.Empty)) {
-        parentgroup = ((ClientGroup)tvClientControl.SelectedNode.Tag).Id;
+      if ((tvClientControl.SelectedNode != null) && (((ClientGroupDto)tvClientControl.SelectedNode.Tag).Id != Guid.Empty)) {
+        parentgroup = ((ClientGroupDto)tvClientControl.SelectedNode.Tag).Id;
       }
       addgroup.addGroupEvent += new AddGroupDelegate(addgroup_addGroupEvent);
@@ -663,5 +664,5 @@
 
     private void OnLVClientClicked(object sender, EventArgs e) {
-      currentClient = (ClientInfo)lvClientControl.SelectedItems[0].Tag;
+      currentClient = (ClientDto)lvClientControl.SelectedItems[0].Tag;
       ClientClicked();
     }
@@ -675,5 +676,5 @@
       if (e.Button != MouseButtons.Right) return;
       if (hitTestInfo.Node != null) {
-        Resource selectedGroup = (Resource)tvClientControl.SelectedNode.Tag;
+        ResourceDto selectedGroup = (ResourceDto)tvClientControl.SelectedNode.Tag;
 
         if (selectedGroup != null) {
@@ -690,5 +691,5 @@
       IJobManager jobManager = ServiceLocator.GetJobManager();
 
-      Project pg = new Project() { Name = name };
+      ProjectDto pg = new ProjectDto() { Name = name };
       jobManager.CreateProject(pg);
 
@@ -699,6 +700,6 @@
 
       if (parentgroup != Guid.Empty) {
-        ClientGroup cg = new ClientGroup() { Name = name };
-        ResponseObject<ClientGroup> respcg = clientManager.AddClientGroup(cg);
+        ClientGroupDto cg = new ClientGroupDto() { Name = name };
+        ResponseObject<ClientGroupDto> respcg = clientManager.AddClientGroup(cg);
         Response res = clientManager.AddResourceToGroup(parentgroup, respcg.Obj);
         if (res != null && !res.Success) {
@@ -706,5 +707,5 @@
         }
       } else {
-        ClientGroup cg = new ClientGroup() { Name = name };
+        ClientGroupDto cg = new ClientGroupDto() { Name = name };
         clientManager.AddClientGroup(cg);
       }
@@ -762,6 +763,6 @@
     #region Helper methods
 
-    private void CloneList(ResponseList<Job> oldList, out IDictionary<int, Job> newList) {
-      newList = new Dictionary<int, Job>();
+    private void CloneList(ResponseList<JobDto> oldList, out IDictionary<int, JobDto> newList) {
+      newList = new Dictionary<int, JobDto>();
       for (int i = 0; i < oldList.List.Count; i++) {
         newList.Add(i, oldList.List[i]);
@@ -769,5 +770,5 @@
     }
 
-    private bool IsEqual(ClientInfo ci1, ClientInfo ci2) {
+    private bool IsEqual(ClientDto ci1, ClientDto ci2) {
       if (ci2 == null) {
         return false;
@@ -786,11 +787,11 @@
     }
 
-    private void GetDelta(IList<Job> oldJobs, IDictionary<int, Job> helpJobs) {
+    private void GetDelta(IList<JobDto> oldJobs, IDictionary<int, JobDto> helpJobs) {
       bool found = false;
       for (int i = 0; i < jobs.List.Count; i++) {
-        Job job = jobs.List[i];
+        JobDto job = jobs.List[i];
         for (int j = 0; j < oldJobs.Count; j++) {
 
-          Job jobold = oldJobs[j];
+          JobDto jobold = oldJobs[j];
 
           if (job.Id.Equals(jobold.Id)) {
@@ -814,5 +815,5 @@
 
             int removeAt = -1;
-            foreach (KeyValuePair<int, Job> kvp in helpJobs) {
+            foreach (KeyValuePair<int, JobDto> kvp in helpJobs) {
               if (job.Id.Equals(kvp.Value.Id)) {
                 removeAt = kvp.Key;
@@ -832,5 +833,5 @@
         found = false;
       }
-      foreach (KeyValuePair<int, Job> kvp in helpJobs) {
+      foreach (KeyValuePair<int, JobDto> kvp in helpJobs) {
         changes.Add(new Changes { Types = Type.Job, ID = kvp.Value.Id, ChangeType = Change.Delete, Position = kvp.Key });
       }
@@ -844,5 +845,5 @@
       ResponseList<JobResult> jobRes = jobManager.GetAllJobResults(currentJob.Id);
 
-      if (jobRes.List != null) {
+      if (jobRes != null && jobRes.List != null) {
         foreach (JobResult jobresult in jobRes.List) {
           ListViewItem curSnapshot = new ListViewItem(jobresult.ClientId.ToString());
@@ -854,5 +855,5 @@
       }
 
-      if ((jobRes.List == null) && (jobRes.List.Count == 0)) {
+      if ((jobRes.List == null) || (jobRes.List.Count == 0)) {
         lvSnapshots.Visible = false;
       } else {
Index: /trunk/sources/HeuristicLab.Hive.Server.Core/3.2/Authorization/HivePermissionManager.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.Core/3.2/Authorization/HivePermissionManager.cs	(revision 3010)
+++ /trunk/sources/HeuristicLab.Hive.Server.Core/3.2/Authorization/HivePermissionManager.cs	(revision 3011)
@@ -53,5 +53,5 @@
       if ((p != null) && (entityID!=Guid.Empty))
       {
-          ResponseObject<Job> job = jobManager.GetJobById(entityID);
+          ResponseObject<JobDto> job = jobManager.GetJobById(entityID);
           if (job.Obj.Project != null)
               if (CheckPermission(sessionID, p.Id, jobManager.GetJobById(entityID).Obj.Project.Id)) return;
@@ -92,6 +92,6 @@
     private bool CheckPermissionHelper(Guid sessionId, Guid actionId, Guid entityId) {
       if (entityId == Guid.Empty) return true;
-      IList<ClientGroup> groups = clientManager.GetAllGroupsOfResource(entityId).Obj;
-      foreach (ClientGroup group in groups)
+      IList<ClientGroupDto> groups = clientManager.GetAllGroupsOfResource(entityId).Obj;
+      foreach (ClientGroupDto group in groups)
         if (CheckPermission(sessionId, actionId, group.Id)) return true;
       return false;
Index: /trunk/sources/HeuristicLab.Hive.Server.Core/3.2/ClientCommunicator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.Core/3.2/ClientCommunicator.cs	(revision 3010)
+++ /trunk/sources/HeuristicLab.Hive.Server.Core/3.2/ClientCommunicator.cs	(revision 3011)
@@ -40,4 +40,5 @@
 using HeuristicLab.Tracing;
 using Linq = HeuristicLab.Hive.Server.LINQDataAccess;
+using System.Transactions;
 
 namespace HeuristicLab.Hive.Server.Core {
@@ -57,10 +58,8 @@
       new ReaderWriterLockSlim(LockRecursionPolicy.SupportsRecursion);
 
-    private ISessionFactory factory;
+    //private ISessionFactory factory;
     private ILifecycleManager lifecycleManager;
     private IInternalJobManager jobManager;
-    private IScheduler scheduler;
-
-    Linq.ClientDao clientDao = new Linq.ClientDao();
+    private IScheduler scheduler;    
 
     private static int PENDING_TIMEOUT = 100;
@@ -72,5 +71,5 @@
     /// </summary>
     public ClientCommunicator() {
-      factory = ServiceLocator.GetSessionFactory();
+      //factory = ServiceLocator.GetSessionFactory();
 
       lifecycleManager = ServiceLocator.GetLifecycleManager();
@@ -90,32 +89,27 @@
     /// <param name="e"></param>
     void lifecycleManager_OnServerHeartbeat(object sender, EventArgs e) {
-      ISession session = factory.GetSessionForCurrentThread();
-      ITransaction tx = null;
-
       HiveLogger.Info(this.ToString() + ": Server Heartbeat ticked");
 
-      try {
-        IClientAdapter clientAdapter =
-          session.GetDataAdapter<ClientInfo, IClientAdapter>();
-        IJobAdapter jobAdapter =
-          session.GetDataAdapter<Job, IJobAdapter>();
-
-        tx = session.BeginTransaction();
-
-        List<ClientInfo> allClients = new List<ClientInfo>(clientAdapter.GetAll());
-
-        foreach (ClientInfo client in allClients) {
+      using (TransactionScope scope = new TransactionScope()) {
+
+        List<ClientDto> allClients = new List<ClientDto>(DaoLocator.ClientDao.FindAll());
+
+        foreach (ClientDto client in allClients) {
           if (client.State != State.offline && client.State != State.nullState) {
             heartbeatLock.EnterUpgradeableReadLock();
 
             if (!lastHeartbeats.ContainsKey(client.Id)) {
-              HiveLogger.Info(this.ToString() + ": Client " + client.Id + " wasn't offline but hasn't sent heartbeats - setting offline");
+              HiveLogger.Info(this.ToString() + ": Client " + client.Id +
+                              " wasn't offline but hasn't sent heartbeats - setting offline");
               client.State = State.offline;
-              clientAdapter.Update(client);
-              HiveLogger.Info(this.ToString() + ": Client " + client.Id + " wasn't offline but hasn't sent heartbeats - Resetting all his jobs");
-              foreach (Job job in jobAdapter.GetActiveJobsOf(client)) {                
+              DaoLocator.ClientDao.Update(client);
+              //clientAdapter.Update(client);
+              HiveLogger.Info(this.ToString() + ": Client " + client.Id +
+                              " wasn't offline but hasn't sent heartbeats - Resetting all his jobs");
+              foreach (JobDto job in DaoLocator.JobDao.FindActiveJobsOfClient(client)) {
                 jobManager.ResetJobsDependingOnResults(job);
               }
-            } else {
+            }
+            else {
               DateTime lastHbOfClient = lastHeartbeats[client.Id];
 
@@ -125,5 +119,5 @@
                 // if client calculated jobs, the job must be reset
                 HiveLogger.Info(this.ToString() + ": Client timed out and is on RESET");
-                foreach (Job job in jobAdapter.GetActiveJobsOf(client)) {
+                foreach (JobDto job in DaoLocator.JobDao.FindActiveJobsOfClient(client)) {
                   jobManager.ResetJobsDependingOnResults(job);
                   lock (newAssignedJobs) {
@@ -135,5 +129,7 @@
                 // client must be set offline
                 client.State = State.offline;
-                clientAdapter.Update(client);
+
+                //clientAdapter.Update(client);
+                DaoLocator.ClientDao.Update(client);
 
                 heartbeatLock.EnterWriteLock();
@@ -144,5 +140,6 @@
 
             heartbeatLock.ExitUpgradeableReadLock();
-          } else {
+          }
+          else {
             //TODO: RLY neccesary?
             //HiveLogger.Info(this.ToString() + ": Client " + client.Id + " has wrong state: Shouldn't have offline or nullstate, has " + client.State);
@@ -151,5 +148,5 @@
             if (lastHeartbeats.ContainsKey(client.Id))
               lastHeartbeats.Remove(client.Id);
-            foreach (Job job in jobAdapter.GetActiveJobsOf(client)) {
+            foreach (JobDto job in DaoLocator.JobDao.FindActiveJobsOfClient(client)) {
               jobManager.ResetJobsDependingOnResults(job);
             }
@@ -157,28 +154,20 @@
           }
         }
-        CheckForPendingJobs(jobAdapter);
-
-        tx.Commit();
-      }
-      catch (Exception ex) {
-        if (tx != null)
-          tx.Rollback();
-        throw ex;
-      }
-      finally {
-        if (session != null)
-          session.EndSession();
-      }
-    }
-
-    private void CheckForPendingJobs(IJobAdapter jobAdapter) {
-      IList<Job> pendingJobsInDB = new List<Job>(jobAdapter.GetJobsByState(State.pending));
-
-      foreach (Job currJob in pendingJobsInDB) {
+        CheckForPendingJobs();
+        DaoLocator.DestroyContext();
+        scope.Complete();        
+      }
+    }
+
+    private void CheckForPendingJobs() {
+      IList<JobDto> pendingJobsInDB = new List<JobDto>(DaoLocator.JobDao.GetJobsByState(State.pending));
+
+      foreach (JobDto currJob in pendingJobsInDB) {
         lock (pendingJobs) {
           if (pendingJobs.ContainsKey(currJob.Id)) {
             if (pendingJobs[currJob.Id] <= 0) {
               currJob.State = State.offline;
-              jobAdapter.Update(currJob);
+              DaoLocator.JobDao.Update(currJob);
+              //jobAdapter.Update(currJob);
             } else {
               pendingJobs[currJob.Id]--;
@@ -197,5 +186,5 @@
     /// <param name="clientInfo"></param>
     /// <returns></returns>
-    public Response Login(ClientInfo clientInfo) {
+    public Response Login(ClientDto clientInfo) {
     //  ISession session = factory.GetSessionForCurrentThread();
     //  ITransaction tx = null;
@@ -219,9 +208,8 @@
         clientInfo.State = State.idle;
 
-        if (clientDao.FindById(clientInfo.Id) == null)
-          clientDao.Insert(clientInfo); 
-        else 
-          clientDao.Update(clientInfo);
-        //clientAdapter.Update(clientInfo);
+        if (DaoLocator.ClientDao.FindById(clientInfo.Id) == null)
+          DaoLocator.ClientDao.Insert(clientInfo); 
+        else
+          DaoLocator.ClientDao.Update(clientInfo);        
         response.Success = true;
         response.StatusMessage = ApplicationConstants.RESPONSE_COMMUNICATOR_LOGIN_SUCCESS;
@@ -250,19 +238,19 @@
     public ResponseHB ProcessHeartBeat(HeartBeatData hbData) {
       
-      ISession session = factory.GetSessionForCurrentThread();
-      ITransaction tx = null;
+     /* ISession session = factory.GetSessionForCurrentThread();
+      ITransaction tx = null;*/
 
       HiveLogger.Info(this.ToString() + ": BEGIN Processing Heartbeat for Client " + hbData.ClientId);
 
-      try {
+      //try {
         HiveLogger.Info(this.ToString() + ": BEGIN Fetching Adapters");
-        IClientAdapter clientAdapter =
-          session.GetDataAdapter<ClientInfo, IClientAdapter>();
+      /*  IClientAdapter clientAdapter =
+          session.GetDataAdapter<ClientDto, IClientAdapter>();
 
         IJobAdapter jobAdapter =        
-          session.GetDataAdapter<Job, IJobAdapter>();
+          session.GetDataAdapter<JobDto, IJobAdapter>(); */
         HiveLogger.Info(this.ToString() + ": END Fetched Adapters");
         HiveLogger.Info(this.ToString() + ": BEGIN Starting Transaction");
-        tx = session.BeginTransaction();
+        //tx = session.BeginTransaction();
         HiveLogger.Info(this.ToString() + ": END Started Transaction");
 
@@ -271,5 +259,5 @@
 
         HiveLogger.Info(this.ToString() + ": BEGIN Started Client Fetching");
-        ClientInfo client = clientAdapter.GetById(hbData.ClientId);
+        ClientDto client = DaoLocator.ClientDao.FindById(hbData.ClientId);
         HiveLogger.Info(this.ToString() + ": END Finished Client Fetching");
         // check if the client is logged in
@@ -311,13 +299,13 @@
 
         HiveLogger.Info(this.ToString() + ": BEGIN Processing Heartbeat Jobs");
-        processJobProcess(hbData, jobAdapter, clientAdapter, response);
+        processJobProcess(hbData, response);
         HiveLogger.Info(this.ToString() + ": END Processed Heartbeat Jobs");
         
-        clientAdapter.Update(client);
-
-        tx.Commit();
+        DaoLocator.ClientDao.Update(client);
+
+        //tx.Commit();
         HiveLogger.Info(this.ToString() + ": END Processed Heartbeat for Client " + hbData.ClientId);
         return response;
-      }
+      } /*
       catch (Exception ex) {
         if (tx != null)
@@ -328,6 +316,6 @@
         if (session != null)
           session.EndSession();
-      }
-    }
+      }   
+    }     */
 
     /// <summary>
@@ -338,9 +326,9 @@
     /// <param name="clientAdapter"></param>
     /// <param name="response"></param>
-    private void processJobProcess(HeartBeatData hbData, IJobAdapter jobAdapter, IClientAdapter clientAdapter, ResponseHB response) {
+    private void processJobProcess(HeartBeatData hbData, ResponseHB response) {
       HiveLogger.Info(this.ToString() + " processJobProcess: Started for Client " + hbData.ClientId);      
       
       if (hbData.JobProgress != null && hbData.JobProgress.Count > 0) {
-        List<Job> jobsOfClient = new List<Job>(jobAdapter.GetActiveJobsOf(clientAdapter.GetById(hbData.ClientId)));
+        List<JobDto> jobsOfClient = new List<JobDto>(DaoLocator.JobDao.FindActiveJobsOfClient(DaoLocator.ClientDao.FindById(hbData.ClientId)));
         if (jobsOfClient == null || jobsOfClient.Count == 0) {
           response.Success = false;
@@ -351,5 +339,6 @@
 
         foreach (KeyValuePair<Guid, double> jobProgress in hbData.JobProgress) {
-          Job curJob = jobAdapter.GetById(jobProgress.Key);
+          JobDto curJob = DaoLocator.JobDao.FindById(jobProgress.Key);
+          curJob.Client = DaoLocator.ClientDao.GetClientForJob(curJob.Id);
           if (curJob.Client == null || curJob.Client.Id != hbData.ClientId) {
             response.Success = false;
@@ -370,7 +359,7 @@
             }
           }
-          jobAdapter.Update(curJob);
-        }
-        foreach (Job currJob in jobsOfClient) {
+          DaoLocator.JobDao.Update(curJob);
+        }
+        foreach (JobDto currJob in jobsOfClient) {
           bool found = false;
           foreach (Guid jobId in hbData.JobProgress.Keys) {
@@ -389,5 +378,5 @@
 
                   currJob.State = State.offline;
-                  jobAdapter.Update(currJob);
+                  DaoLocator.JobDao.Update(currJob);
 
                   response.ActionRequest.Add(new MessageContainer(MessageContainer.MessageType.AbortJob, currJob.Id));
@@ -398,5 +387,5 @@
                 HiveLogger.Error(this.ToString() + " processJobProcess: Job ID wasn't with the heartbeats:  " + currJob);                      
                 currJob.State = State.offline;
-                jobAdapter.Update(currJob);
+                DaoLocator.JobDao.Update(currJob);
               }
             } // lock
@@ -420,5 +409,5 @@
     /// <param name="clientId"></param>
     /// <returns></returns>
-    public ResponseSerializedJob SendSerializedJob(Guid clientId) {
+    /*public ResponseSerializedJob SendSerializedJob(Guid clientId) {
       ISession session = factory.GetSessionForCurrentThread();
       ITransaction tx = null;
@@ -426,5 +415,5 @@
       try {
         IJobAdapter jobAdapter =
-          session.GetDataAdapter<Job, IJobAdapter>();
+          session.GetDataAdapter<JobDto, IJobAdapter>();
 
         tx = session.BeginTransaction();
@@ -432,5 +421,5 @@
         ResponseSerializedJob response = new ResponseSerializedJob();
 
-        Job job2Calculate = scheduler.GetNextJobForClient(clientId);
+        JobDto job2Calculate = scheduler.GetNextJobForClient(clientId);
         if (job2Calculate != null) {
           SerializedJob computableJob =
@@ -465,5 +454,5 @@
           session.EndSession();
       }
-    }
+    }     */
 
     /// <summary>
@@ -474,45 +463,28 @@
     /// <returns></returns>
     public ResponseJob SendJob(Guid clientId) {
-      ISession session = factory.GetSessionForCurrentThread();
-      ITransaction tx = null;
-
-      try {
-        IJobAdapter jobAdapter =
-          session.GetDataAdapter<Job, IJobAdapter>();
-
-        tx = session.BeginTransaction();
-
-        ResponseJob response = new ResponseJob();
-
-        Job job2Calculate = scheduler.GetNextJobForClient(clientId);
-        if (job2Calculate != null) {
-          response.Job = job2Calculate;
-          response.Success = true;
-          HiveLogger.Info(this.ToString() + " SendSerializedJob: Job pulled: " + job2Calculate + " for user " + clientId);                      
-          response.StatusMessage = ApplicationConstants.RESPONSE_COMMUNICATOR_JOB_PULLED;
-          lock (newAssignedJobs) {
-            if (!newAssignedJobs.ContainsKey(job2Calculate.Id))
-              newAssignedJobs.Add(job2Calculate.Id, ApplicationConstants.JOB_TIME_TO_LIVE);
-          }
-        } else {
-          response.Success = false;
-          response.Job = null;
-          response.StatusMessage = ApplicationConstants.RESPONSE_COMMUNICATOR_NO_JOBS_LEFT;
-          HiveLogger.Info(this.ToString() + " SendSerializedJob: No more Jobs left for " + clientId);                      
-        }
-
-        tx.Commit();
-
-        return response;
-      }
-      catch (Exception ex) {
-        if (tx != null)
-          tx.Rollback();
-        throw ex;
-      }
-      finally {
-        if (session != null)
-          session.EndSession();
-      }
+
+      ResponseJob response = new ResponseJob();
+
+      JobDto job2Calculate = scheduler.GetNextJobForClient(clientId);
+      if (job2Calculate != null) {
+        response.Job = job2Calculate;
+        response.Success = true;
+        HiveLogger.Info(this.ToString() + " SendSerializedJob: Job pulled: " + job2Calculate + " for user " + clientId);
+        response.StatusMessage = ApplicationConstants.RESPONSE_COMMUNICATOR_JOB_PULLED;
+        lock (newAssignedJobs) {
+          if (!newAssignedJobs.ContainsKey(job2Calculate.Id))
+            newAssignedJobs.Add(job2Calculate.Id, ApplicationConstants.JOB_TIME_TO_LIVE);
+        }
+      }
+      else {
+        response.Success = false;
+        response.Job = null;
+        response.StatusMessage = ApplicationConstants.RESPONSE_COMMUNICATOR_NO_JOBS_LEFT;
+        HiveLogger.Info(this.ToString() + " SendSerializedJob: No more Jobs left for " + clientId);
+      }
+
+
+
+      return response;
     }
 
@@ -523,10 +495,9 @@
       HiveLogger.Info(this.ToString() + " ProcessJobResult: BEGIN Job received for Storage - main method:");
       
-      ISession session = factory.GetSessionForCurrentThread();
-      ITransaction tx = null;
+     
       Stream jobResultStream = null;
       Stream jobStream = null;
 
-      try {
+      //try {
         BinaryFormatter formatter =
           new BinaryFormatter();
@@ -538,5 +509,5 @@
         //otherwise race conditions could occur when writing the stream into the DB
         //just removed TransactionIsolationLevel.RepeatableRead
-        tx = session.BeginTransaction();
+        //tx = session.BeginTransaction();
 
         ResponseResultReceived response =
@@ -550,49 +521,17 @@
 
         if (response.Success) {
-          //second deserialize the BLOB
-          IJobResultsAdapter jobResultsAdapter =
-            session.GetDataAdapter<JobResult, IJobResultsAdapter>();
-
-          IJobAdapter jobAdapter =
-            session.GetDataAdapter<Job, IJobAdapter>();
-
-          jobResultStream =
-            jobResultsAdapter.GetSerializedJobResultStream(response.JobResultId, true);
-
-          jobStream =
-            jobAdapter.GetSerializedJobStream(result.JobId, true);
+          jobStream = DaoLocator.JobDao.GetSerializedJobStream(result.JobId);
 
           byte[] buffer = new byte[3024];
           int read = 0;
-          while ((read = stream.Read(buffer, 0, buffer.Length)) > 0) {
-            jobResultStream.Write(buffer, 0, read);
+          while ((read = stream.Read(buffer, 0, buffer.Length)) > 0) {            
             jobStream.Write(buffer, 0, read);
           }
-
-          jobResultStream.Close();
-          jobStream.Close();
-
-          tx.Commit();
-        }
+          jobStream.Close();          
+        }                   
         HiveLogger.Info(this.ToString() + " ProcessJobResult: END Job received for Storage:");
         return response;
       }
-      catch (Exception ex) {
-        HiveLogger.Error(this.ToString() + " ProcessJobResult: Exception raised: " + ex);
-        if (tx != null)
-          tx.Rollback();
-        throw ex;
-      }
-      finally {
-        if (jobStream != null)
-          jobStream.Dispose();
-
-        if (jobResultStream != null)
-          jobResultStream.Dispose();
-
-        if (session != null)
-          session.EndSession();
-      }
-    }
+
 
     private ResponseResultReceived ProcessJobResult(Guid clientId,
@@ -605,22 +544,7 @@
       HiveLogger.Info(this.ToString() + " ProcessJobResult: BEGIN Job received for Storage - SUB method: " + jobId);
 
-      ISession session = factory.GetSessionForCurrentThread();
-            
-      ITransaction tx = null;
-
-      try {
-        IClientAdapter clientAdapter =
-          session.GetDataAdapter<ClientInfo, IClientAdapter>();
-        IJobAdapter jobAdapter =
-          session.GetDataAdapter<Job, IJobAdapter>();
-        IJobResultsAdapter jobResultAdapter =
-          session.GetDataAdapter<JobResult, IJobResultsAdapter>();
-        
-        //should fetch the existing transaction        
-        tx = session.BeginTransaction();
-
         ResponseResultReceived response = new ResponseResultReceived();
-        ClientInfo client =
-          clientAdapter.GetById(clientId);
+        ClientDto client =
+          DaoLocator.ClientDao.FindById(clientId);
 
         SerializedJob job =
@@ -629,5 +553,6 @@
         if (job != null) {
           job.JobInfo =
-            jobAdapter.GetById(jobId);
+            DaoLocator.JobDao.FindById(jobId);          
+          job.JobInfo.Client = job.JobInfo.Client = DaoLocator.ClientDao.GetClientForJob(jobId);
         }
 
@@ -639,5 +564,5 @@
           HiveLogger.Error(this.ToString() + " ProcessJobResult: No job with Id " + jobId);                      
           
-          tx.Rollback();
+          //tx.Rollback();
           return response;
         }
@@ -648,5 +573,5 @@
           HiveLogger.Error(this.ToString() + " ProcessJobResult: Job was aborted! " + job.JobInfo);                      
           
-          tx.Rollback();
+          //tx.Rollback();
           return response;
         }
@@ -658,5 +583,5 @@
           HiveLogger.Error(this.ToString() + " ProcessJobResult: Job is not being calculated (client = null)! " + job.JobInfo);                      
 
-          tx.Rollback();
+          //tx.Rollback();
           return response;
         }
@@ -668,5 +593,5 @@
           HiveLogger.Error(this.ToString() + " ProcessJobResult: Wrong Client for this Job! " + job.JobInfo + ", Sending Client is: " + clientId);                      
 
-          tx.Rollback();
+          //tx.Rollback();
           return response;
         }
@@ -678,5 +603,5 @@
           HiveLogger.Error(this.ToString() + " ProcessJobResult: Job already finished! " + job.JobInfo + ", Sending Client is: " + clientId);                      
 
-          tx.Rollback();
+          //tx.Rollback();
           return response;
         }
@@ -692,5 +617,5 @@
           HiveLogger.Error(this.ToString() + " ProcessJobResult: Wrong Job State, job is: " + job.JobInfo);                      
 
-          tx.Rollback();
+          //tx.Rollback();
           return response;
         }
@@ -702,44 +627,15 @@
 
         job.SerializedJobData = result;
-        jobAdapter.UpdateSerializedJob(job);
-
-        List<JobResult> jobResults = new List<JobResult>(
-          jobResultAdapter.GetResultsOf(job.JobInfo.Id));
-        foreach (JobResult currentResult in jobResults)
-          jobResultAdapter.Delete(currentResult);
-
-        SerializedJobResult serializedjobResult =
-          new SerializedJobResult();
-        JobResult jobResult = new JobResult();
-        jobResult.ClientId = client.Id;
-        jobResult.JobId = job.JobInfo.Id;
-        jobResult.Percentage = percentage;
-        jobResult.Exception = exception;
-        jobResult.DateFinished = DateTime.Now;
-        serializedjobResult.JobResult = jobResult;
-        serializedjobResult.SerializedJobResultData =
-          result;
-
-        jobResultAdapter.UpdateSerializedJobResult(serializedjobResult);
+        
+        DaoLocator.JobDao.Update(job.JobInfo);
 
         response.Success = true;
         response.StatusMessage = ApplicationConstants.RESPONSE_COMMUNICATOR_JOBRESULT_RECEIVED;
         response.JobId = jobId;
-        response.finished = finished;
-        response.JobResultId = jobResult.Id;
+        response.finished = finished;        
                 
-        tx.Commit();
         HiveLogger.Info(this.ToString() + " ProcessJobResult: END Job received for Storage - SUB method: " + jobId);        
         return response;
-      }
-      catch (Exception ex) {
-        if (tx != null)
-          tx.Rollback();
-        throw ex;
-      }
-      finally {
-        if (session != null)
-          session.EndSession();
-      }
+
     }
 
@@ -780,15 +676,15 @@
       HiveLogger.Info("Client logged out " + clientId);
       
-      ISession session = factory.GetSessionForCurrentThread();
+      /*ISession session = factory.GetSessionForCurrentThread();
       ITransaction tx = null;
 
       try {
         IClientAdapter clientAdapter =
-          session.GetDataAdapter<ClientInfo, IClientAdapter>();
+          session.GetDataAdapter<ClientDto, IClientAdapter>();
         IJobAdapter jobAdapter =
-          session.GetDataAdapter<Job, IJobAdapter>();
+          session.GetDataAdapter<JobDto, IJobAdapter>();
 
         tx = session.BeginTransaction();
-
+           */
         Response response = new Response();
 
@@ -798,5 +694,5 @@
         heartbeatLock.ExitWriteLock();
 
-        ClientInfo client = clientAdapter.GetById(clientId);
+      ClientDto client = DaoLocator.ClientDao.FindById(clientId);
         if (client == null) {
           response.Success = false;
@@ -806,6 +702,6 @@
         if (client.State == State.calculating) {
           // check wich job the client was calculating and reset it
-          ICollection<Job> jobsOfClient = jobAdapter.GetJobsOf(client);
-          foreach (Job job in jobsOfClient) {
+          IEnumerable<JobDto> jobsOfClient = DaoLocator.JobDao.FindActiveJobsOfClient(client);
+          foreach (JobDto job in jobsOfClient) {
             if (job.State != State.finished)
               jobManager.ResetJobsDependingOnResults(job);
@@ -814,12 +710,12 @@
 
         client.State = State.offline;
-        clientAdapter.Update(client);
+        DaoLocator.ClientDao.Update(client);
 
         response.Success = true;
         response.StatusMessage = ApplicationConstants.RESPONSE_COMMUNICATOR_LOGOUT_SUCCESS;
 
-        tx.Commit();
+        //tx.Commit();
         return response;
-      }
+      } /*
       catch (Exception ex) {
         if (tx != null)
@@ -831,5 +727,5 @@
           session.EndSession();
       }
-    }
+    }     */
 
     /// <summary>
@@ -840,14 +736,14 @@
     /// <returns></returns>
     public Response IsJobStillNeeded(Guid jobId) {
-      ISession session = factory.GetSessionForCurrentThread();
+      /*ISession session = factory.GetSessionForCurrentThread();
       ITransaction tx = null;
 
       try {
         IJobAdapter jobAdapter =
-          session.GetDataAdapter<Job, IJobAdapter>();
-        tx = session.BeginTransaction();
+          session.GetDataAdapter<JobDto, IJobAdapter>();
+        tx = session.BeginTransaction();                */
 
         Response response = new Response();
-        Job job = jobAdapter.GetById(jobId);
+      JobDto job = DaoLocator.JobDao.FindById(jobId);
         if (job == null) {
           response.Success = false;
@@ -867,12 +763,12 @@
         }
 
-        jobAdapter.Update(job);
+        DaoLocator.JobDao.Update(job);
 
         response.Success = true;
         response.StatusMessage = ApplicationConstants.RESPONSE_COMMUNICATOR_SEND_JOBRESULT;
-        tx.Commit();
+        //tx.Commit();
         return response;
       }
-      catch (Exception ex) {
+      /*catch (Exception ex) {
         if (tx != null)
           tx.Rollback();
@@ -883,9 +779,9 @@
           session.EndSession();
       }
-    }
-
-    public ResponsePlugin SendPlugins(List<HivePluginInfo> pluginList) {
+    }   */
+
+    public ResponsePlugin SendPlugins(List<HivePluginInfoDto> pluginList) {
       ResponsePlugin response = new ResponsePlugin();
-      foreach (HivePluginInfo pluginInfo in pluginList) {
+      foreach (HivePluginInfoDto pluginInfo in pluginList) {
         // TODO: BuildDate deleted, not needed???
         // TODO: Split version to major, minor and revision number
@@ -893,5 +789,5 @@
           if (currPlugin.Name == pluginInfo.Name) {
 
-            CachedHivePluginInfo currCachedPlugin = new CachedHivePluginInfo {
+            CachedHivePluginInfoDto currCachedPlugin = new CachedHivePluginInfoDto {
               Name = currPlugin.Name,
               Version = currPlugin.Version.ToString(),
Index: /trunk/sources/HeuristicLab.Hive.Server.Core/3.2/ClientFacade.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.Core/3.2/ClientFacade.cs	(revision 3010)
+++ /trunk/sources/HeuristicLab.Hive.Server.Core/3.2/ClientFacade.cs	(revision 3011)
@@ -1,3 +1,3 @@
-﻿#region License Information
+#region License Information
 /* HeuristicLab
  * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
@@ -46,5 +46,5 @@
     #region IClientCommunicator Members
 
-    public Response Login(ClientInfo clientInfo) {
+    public Response Login(ClientDto clientInfo) {
       return clientCommunicator.Login(clientInfo);
     }
@@ -58,7 +58,7 @@
     }
 
-    public ResponseSerializedJob SendSerializedJob(Guid clientId) {
+    /*public ResponseSerializedJob SendSerializedJob(Guid clientId) {
       return clientCommunicator.SendSerializedJob(clientId);
-    }
+    } */
 
     public ResponseResultReceived StoreFinishedJobResult(Guid clientId,
@@ -78,5 +78,5 @@
     }
 
-    public ResponsePlugin SendPlugins(List<HivePluginInfo> pluginList) {
+    public ResponsePlugin SendPlugins(List<HivePluginInfoDto> pluginList) {
       return clientCommunicator.SendPlugins(pluginList);
     }
@@ -120,5 +120,5 @@
     }
 
-    public Stream SendStreamedPlugins(List<HivePluginInfo> pluginList) {
+    public Stream SendStreamedPlugins(List<HivePluginInfoDto> pluginList) {
       return
         new StreamedObject<ResponsePlugin>(
Index: /trunk/sources/HeuristicLab.Hive.Server.Core/3.2/ClientManager.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.Core/3.2/ClientManager.cs	(revision 3010)
+++ /trunk/sources/HeuristicLab.Hive.Server.Core/3.2/ClientManager.cs	(revision 3011)
@@ -1,3 +1,3 @@
-﻿#region License Information
+#region License Information
 /* HeuristicLab
  * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
@@ -30,17 +30,14 @@
 using HeuristicLab.DataAccess.Interfaces;
 using HeuristicLab.Hive.Server.LINQDataAccess;
-using ClientGroup=HeuristicLab.Hive.Contracts.BusinessObjects.ClientGroup;
-using Resource=HeuristicLab.Hive.Contracts.BusinessObjects.Resource;
+using ClientGroup=HeuristicLab.Hive.Contracts.BusinessObjects.ClientGroupDto;
 
 namespace HeuristicLab.Hive.Server.Core {
   class ClientManager: IClientManager {
-
-    ClientDao clientDao = new ClientDao();
-
-    ISessionFactory factory;
+    
+    //ISessionFactory factory;
     List<ClientGroup> clientGroups;
 
     public ClientManager() {
-      factory = ServiceLocator.GetSessionFactory();
+      //factory = ServiceLocator.GetSessionFactory();
       
       clientGroups = new List<ClientGroup>();
@@ -53,23 +50,24 @@
     /// </summary>
     /// <returns></returns>
-    public ResponseList<ClientInfo> GetAllClients() {
-      ISession session = factory.GetSessionForCurrentThread();
-
-      try {
+    public ResponseList<ClientDto> GetAllClients() {
+      /*ISession session = factory.GetSessionForCurrentThread();
+
+      try {
+        
         IClientAdapter clientAdapter =
-          session.GetDataAdapter<ClientInfo, IClientAdapter>();
-
-        ResponseList<ClientInfo> response = new ResponseList<ClientInfo>();
-
-        response.List = new List<ClientInfo>(clientAdapter.GetAll());
+          session.GetDataAdapter<ClientDto, IClientAdapter>();*/
+
+        ResponseList<ClientDto> response = new ResponseList<ClientDto>();
+
+        response.List = new List<ClientDto>(DaoLocator.ClientDao.FindAll());
         response.StatusMessage = ApplicationConstants.RESPONSE_CLIENT_GET_ALL_CLIENTS;
         response.Success = true;
 
         return response;
-      }
+      /*}
       finally {
         if (session != null)
           session.EndSession();
-      }
+      }*/
     }
 
@@ -79,5 +77,5 @@
     /// <returns></returns>
     public ResponseList<ClientGroup> GetAllClientGroups() {
-      ISession session = factory.GetSessionForCurrentThread();
+      /*ISession session = factory.GetSessionForCurrentThread();
 
       try {
@@ -85,12 +83,12 @@
           session.GetDataAdapter<ClientGroup, IClientGroupAdapter>();
         IClientAdapter clientAdapter =
-          session.GetDataAdapter<ClientInfo, IClientAdapter>();
+          session.GetDataAdapter<ClientDto, IClientAdapter>();*/
         ResponseList<ClientGroup> response = new ResponseList<ClientGroup>();
 
-        List<ClientGroup> allClientGroups = new List<ClientGroup>(clientGroupAdapter.GetAll());
+        List<ClientGroup> allClientGroups = new List<ClientGroup>(DaoLocator.ClientGroupDao.FindAllWithSubGroupsAndClients());
         ClientGroup emptyClientGroup = new ClientGroup();
-        ICollection<ClientInfo> groupLessClients = clientAdapter.GetGrouplessClients();
+        IEnumerable<ClientDto> groupLessClients = DaoLocator.ClientDao.FindAllClientsWithoutGroup();
         if (groupLessClients != null) {
-          foreach (ClientInfo currClient in groupLessClients) {
+          foreach (ClientDto currClient in groupLessClients) {
             emptyClientGroup.Resources.Add(currClient);
           }
@@ -104,13 +102,13 @@
 
         return response;
-      }
+   /*   }
       finally {
         if (session != null)
           session.EndSession();
-      }
-    }
-
-    public ResponseList<UpTimeStatistics> GetAllUpTimeStatistics() {
-      ResponseList<UpTimeStatistics> response = new ResponseList<UpTimeStatistics>();
+      }*/
+    }
+
+    public ResponseList<UpTimeStatisticsDto> GetAllUpTimeStatistics() {
+      ResponseList<UpTimeStatisticsDto> response = new ResponseList<UpTimeStatisticsDto>();
       response.Success = true;
       return response;
@@ -123,9 +121,9 @@
     /// <returns></returns>
     public ResponseObject<ClientGroup> AddClientGroup(ClientGroup clientGroup) {
-      ISession session = factory.GetSessionForCurrentThread();
-
-      try {
-        IClientGroupAdapter clientGroupAdapter =
-          session.GetDataAdapter<ClientGroup, IClientGroupAdapter>();
+      /*ISession session = factory.GetSessionForCurrentThread();
+
+      try {
+        IClientGroupAdapter clientGroupAdapter =
+          session.GetDataAdapter<ClientGroup, IClientGroupAdapter>();*/
 
         ResponseObject<ClientGroup> response = new ResponseObject<ClientGroup>();
@@ -135,5 +133,6 @@
           response.StatusMessage = ApplicationConstants.RESPONSE_CLIENT_ID_MUST_NOT_BE_SET;
         } else {
-          clientGroupAdapter.Update(clientGroup);
+          clientGroup = DaoLocator.ClientGroupDao.Insert(clientGroup);
+          //clientGroupAdapter.Update(clientGroup);
           response.Obj = clientGroup;
           response.Success = true;
@@ -142,9 +141,9 @@
 
         return response;
-      }
+      /*}
       finally {
         if (session != null)
           session.EndSession();
-      }
+      } */
     }
 
@@ -155,14 +154,14 @@
     /// <param name="resource"></param>
     /// <returns></returns>
-    public Response AddResourceToGroup(Guid clientGroupId, Resource resource) {
-      ISession session = factory.GetSessionForCurrentThread();
-
-      try {
-        IClientGroupAdapter clientGroupAdapter =
-          session.GetDataAdapter<ClientGroup, IClientGroupAdapter>();
+    public Response AddResourceToGroup(Guid clientGroupId, ResourceDto resource) {
+      /*ISession session = factory.GetSessionForCurrentThread();
+
+      try {
+        IClientGroupAdapter clientGroupAdapter =
+          session.GetDataAdapter<ClientGroup, IClientGroupAdapter>();*/
 
         Response response = new Response();
 
-        ClientGroup clientGroup = clientGroupAdapter.GetById(clientGroupId);
+        ClientGroup clientGroup = DaoLocator.ClientGroupDao.FindById(clientGroupId);
         if (clientGroup == null) {
           response.Success = false;
@@ -171,5 +170,6 @@
         }
         clientGroup.Resources.Add(resource);
-        clientGroupAdapter.Update(clientGroup);
+        DaoLocator.ClientGroupDao.AddRessourceToClientGroup(resource.Id, clientGroup.Id);          
+        //clientGroupAdapter.Update(clientGroup);
 
         response.Success = true;
@@ -178,9 +178,9 @@
         return response;
       }
-      finally {
-        if (session != null)
-          session.EndSession();
-      }
-    }
+      /*finally {
+        if (session != null)
+          session.EndSession();
+      } 
+    }   */
 
     /// <summary>
@@ -191,13 +191,13 @@
     /// <returns></returns>
     public Response DeleteResourceFromGroup(Guid clientGroupId, Guid resourceId) {
-      ISession session = factory.GetSessionForCurrentThread();
-
-      try {
-        IClientGroupAdapter clientGroupAdapter =
-          session.GetDataAdapter<ClientGroup, IClientGroupAdapter>();
+      /*ISession session = factory.GetSessionForCurrentThread();
+
+      try {
+        IClientGroupAdapter clientGroupAdapter =
+          session.GetDataAdapter<ClientGroup, IClientGroupAdapter>();*/
 
         Response response = new Response();
 
-        ClientGroup clientGroup = clientGroupAdapter.GetById(clientGroupId);
+        ClientGroup clientGroup = DaoLocator.ClientGroupDao.FindById(clientGroupId);
         if (clientGroup == null) {
           response.Success = false;
@@ -205,8 +205,9 @@
           return response;
         }
-        foreach (Resource resource in clientGroup.Resources) {
+        foreach (ResourceDto resource in clientGroup.Resources) {
           if (resource.Id == resourceId) {
             clientGroup.Resources.Remove(resource);
-            clientGroupAdapter.Update(clientGroup);
+            DaoLocator.ClientGroupDao.RemoveRessourceFromClientGroup(resource.Id, clientGroup.Id);
+            //clientGroupAdapter.Update(clientGroup);
             response.Success = true;
             response.StatusMessage = ApplicationConstants.RESPONSE_CLIENT_RESOURCE_REMOVED;
@@ -219,12 +220,12 @@
         return response;
       }
-      finally {
-        if (session != null)
-          session.EndSession();
-      }
-    }
+      /*finally {
+        if (session != null)
+          session.EndSession();
+      }
+    }   */
 
     public ResponseObject<List<ClientGroup>> GetAllGroupsOfResource(Guid resourceId) {
-      ISession session = factory.GetSessionForCurrentThread();
+      /*ISession session = factory.GetSessionForCurrentThread();
 
       try {
@@ -232,11 +233,11 @@
           session.GetDataAdapter<ClientGroup, IClientGroupAdapter>();
         IClientAdapter clientAdapter =
-          session.GetDataAdapter<ClientInfo, IClientAdapter>();
+          session.GetDataAdapter<ClientDto, IClientAdapter>();*/
 
         ResponseObject<List<ClientGroup>> response = new ResponseObject<List<ClientGroup>>();
 
-        ClientInfo client = clientAdapter.GetById(resourceId);
+        ClientDto client = DaoLocator.ClientDao.FindById(resourceId);
         if (client != null) {
-          List<ClientGroup> groupsOfClient = new List<ClientGroup>(clientGroupAdapter.MemberOf(client));
+          List<ClientGroup> groupsOfClient = new List<ClientGroup>(DaoLocator.ClientGroupDao.MemberOf(client));
           response.Obj = groupsOfClient;
           response.Success = true;
@@ -250,20 +251,20 @@
         return response;
       }
-      finally {
-        if (session != null)
-          session.EndSession();
-      }
-    }
+      /*finally {
+        if (session != null)
+          session.EndSession();
+      }
+    }   */
 
     public Response DeleteClientGroup(Guid clientGroupId) {
-      ISession session = factory.GetSessionForCurrentThread();
-
-      try {
-        IClientGroupAdapter clientGroupAdapter =
-          session.GetDataAdapter<ClientGroup, IClientGroupAdapter>();
+      /*ISession session = factory.GetSessionForCurrentThread();
+
+      try {
+        IClientGroupAdapter clientGroupAdapter =
+          session.GetDataAdapter<ClientGroup, IClientGroupAdapter>();*/
 
         Response response = new Response();
 
-        ClientGroup clientGroup = clientGroupAdapter.GetById(clientGroupId);
+        ClientGroup clientGroup = DaoLocator.ClientGroupDao.FindById(clientGroupId);
         if (clientGroup == null) {
           response.Success = false;
@@ -272,5 +273,5 @@
         }
 
-        clientGroupAdapter.Delete(clientGroup);
+        DaoLocator.ClientGroupDao.Delete(clientGroup);
 
         response.Success = true;
@@ -278,9 +279,9 @@
         return response;
 
-      } finally {
-        if (session != null)
-          session.EndSession();
-      }
-    }
+      }/* finally {
+        if (session != null)
+          session.EndSession();
+      }
+    }    */
 
     #endregion
Index: /trunk/sources/HeuristicLab.Hive.Server.Core/3.2/DaoLocator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.Core/3.2/DaoLocator.cs	(revision 3011)
+++ /trunk/sources/HeuristicLab.Hive.Server.Core/3.2/DaoLocator.cs	(revision 3011)
@@ -0,0 +1,64 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Hive.Server.DataAccess;
+using HeuristicLab.Hive.Server.LINQDataAccess;
+
+namespace HeuristicLab.Hive.Server.Core {
+  public class DaoLocator {
+    
+    [ThreadStatic] private static IClientDao clientDao;
+    [ThreadStatic] private static IClientConfigDao clientConfigDao;
+    [ThreadStatic] private static IClientGroupDao clientGroupDao;
+    [ThreadStatic] private static IJobDao jobDao;
+    [ThreadStatic] private static IPluginInfoDao pluginInfoDao;
+
+    public static IClientDao ClientDao {
+      get {
+        if (clientDao == null)
+          clientDao = new ClientDao();
+        return clientDao;
+      }
+    }
+
+    public static IClientConfigDao ClientConfigDao {
+      get {
+        if(clientConfigDao == null)
+          clientConfigDao = new ClientConfigDao();
+        return clientConfigDao;
+      }
+    }
+
+    public static IClientGroupDao ClientGroupDao {
+      get {
+        if(clientGroupDao == null)
+          clientGroupDao = new ClientGroupDao();
+        return clientGroupDao;
+      }
+    }
+
+    public static IJobDao JobDao {
+      get {
+        if(jobDao == null)
+          jobDao = new JobDao();
+        return jobDao;
+      }
+    }
+
+    public static IPluginInfoDao PluginInfoDao {
+      get {
+        if(pluginInfoDao == null)
+          pluginInfoDao = new PluginInfoDao();
+        return pluginInfoDao;
+      }
+    }
+
+    public static void DestroyContext() {
+      if (ContextFactory.Context != null) {
+        ContextFactory.Context.Dispose();
+        ContextFactory.Context = null;
+      }
+    }
+
+  }
+}
Index: /trunk/sources/HeuristicLab.Hive.Server.Core/3.2/DbTestApp.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.Core/3.2/DbTestApp.cs	(revision 3010)
+++ /trunk/sources/HeuristicLab.Hive.Server.Core/3.2/DbTestApp.cs	(revision 3011)
@@ -299,5 +299,5 @@
 
       IJobAdapter jobAdapter =
-        session.GetDataAdapter<HeuristicLab.Hive.Contracts.BusinessObjects.Job, IJobAdapter>();
+        session.GetDataAdapter<HeuristicLab.Hive.Contracts.BusinessObjects.JobDto, IJobAdapter>();
 
       Stream s = jobAdapter.GetSerializedJobStream(
@@ -349,5 +349,5 @@
     }
 
-    private void TestJobResultDeserialization() {
+    /*private void TestJobResultDeserialization() {
       ExecutionEngineFacade executionEngineFacade =
         new ExecutionEngineFacade();
@@ -359,21 +359,122 @@
       IStorable restoredJob =
         PersistenceManager.RestoreFromGZip(response.Obj.SerializedJobResultData);
-    }
+    } */
+
+    ClientDao clientDao = new ClientDao();
+    ClientGroupDao cgd = new ClientGroupDao();
 
     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);
-
-    }
+      
+      
+      ClientDto c1 = new ClientDto();
+      c1.Id = Guid.NewGuid();
+      c1.FreeMemory = 1000;
+      c1.Login = DateTime.Now;
+      c1.Memory = 1000;
+      c1.Name = "jackie";
+      c1.NrOfCores = 3;
+      c1.NrOfFreeCores = 2;
+      c1.CpuSpeedPerCore = 2500;
+      c1.State = State.idle;
+      c1 = clientDao.Insert(c1);
+
+      clientDao.Update(c1);
+
+      ClientDto c2 = new ClientDto();
+      c2.Id = Guid.NewGuid();
+      c2.FreeMemory = 600;
+      c2.Login = DateTime.Now;
+      c2.Memory = 2048;
+      c2.Name = "HPCs";
+      c2.NrOfCores = 4;
+      c2.NrOfFreeCores = 1;
+      c2.CpuSpeedPerCore = 4000;
+      c2.State = State.idle;
+      c2 = clientDao.Insert(c2);
+
+      //ClientDto info2 = clientDao.FindById(info.Id);
+      //Console.WriteLine(info2);
+      
+      ClientGroupDto tg = new ClientGroupDto();
+      tg.Name = "TopGroup";
+      tg = cgd.Insert(tg);
+
+      ClientGroupDto sg = new ClientGroupDto();
+      sg.Name = "Subgroup";
+      sg = cgd.Insert(sg);
+
+      cgd.AddRessourceToClientGroup(sg.Id, tg.Id);
+      cgd.AddRessourceToClientGroup(c1.Id, tg.Id);
+      cgd.AddRessourceToClientGroup(c2.Id, tg.Id);
+
+      JobDto job = new JobDto {
+                                Client = c1,
+                                CoresNeeded = 2,
+                                DateCreated = DateTime.Now,
+                                MemoryNeeded = 500,
+                                Percentage = 0,
+                                Priority = 1,
+                                State = State.offline
+                              };
+
+      job = DaoLocator.JobDao.Insert(job);
+
+
+      DaoLocator.JobDao.AssignClientToJob(c1.Id, job.Id);
+
+      List<ClientGroupDto> list = new List<ClientGroupDto>(cgd.FindAllWithSubGroupsAndClients());
+      
+      cgd.RemoveRessourceFromClientGroup(sg.Id, tg.Id);
+
+      cgd.Delete(sg);
+      cgd.Delete(tg);
+      clientDao.Delete(c1);
+      clientDao.Delete(c2);
+
+    }
+
+    private void StressTest() {
+      //Speed Test
+      Random r = new Random();
+
+
+      for (int i = 0; i < 200; i++) {
+        ClientGroupDto mg = new ClientGroupDto();
+        mg.Name = "MainGroup" + i;
+        mg = cgd.Insert(mg);
+
+        populateMainGroup(mg, 3);
+      }
+    }
+
+    private void populateMainGroup(ClientGroupDto mg, int p) {
+      Random r = new Random();
+
+      for (int j = 0; j < r.Next(15); j++) {
+        ClientDto client = new ClientDto();
+        client.Id = Guid.NewGuid();
+        client.FreeMemory = r.Next(1000);
+        client.Login = DateTime.Now;
+        client.Memory = r.Next(500);
+        client.Name = "client" + mg.Name + "_" + j;
+        client.NrOfCores = 3;
+        client.NrOfFreeCores = 2;
+        client.CpuSpeedPerCore = 2500;
+        client.State = State.idle;
+        client = clientDao.Insert(client);
+        cgd.AddRessourceToClientGroup(client.Id, mg.Id);
+      }
+      for (int i = 0; i < r.Next(p); i++) {
+        ClientGroupDto sg = new ClientGroupDto();
+        sg.Name = "SubGroup " + mg.Name + " - " + p;
+        sg = cgd.Insert(sg);
+        cgd.AddRessourceToClientGroup(sg.Id, mg.Id);
+        populateMainGroup(sg, p-1);
+      }
+
+      
+    }
+
+
 
     public override void Run() {
@@ -384,6 +485,23 @@
       //TestJobResultDeserialization();
 
-      TestLINQImplementation();
-
+      //TestLINQImplementation();
+      //StressTest();
+
+      //SpeedTest();
+      TestJobBytearrFetching();
+
+    }
+
+    private void TestJobBytearrFetching() {
+      byte[] arr = DaoLocator.JobDao.GetBinaryJobFile(new Guid("A3386907-2B3C-4976-BE07-04D660D40A5B"));
+      Console.WriteLine(arr);
+    }
+
+    private void SpeedTest() {
+      DateTime start = new DateTime();
+      List<ClientGroupDto> list = new List<ClientGroupDto>(cgd.FindAllWithSubGroupsAndClients());
+      DateTime end = new DateTime();
+      TimeSpan used = end - start;
+      Console.WriteLine(used.TotalMilliseconds);
     }
 
Index: /trunk/sources/HeuristicLab.Hive.Server.Core/3.2/DefaultScheduler.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.Core/3.2/DefaultScheduler.cs	(revision 3011)
+++ /trunk/sources/HeuristicLab.Hive.Server.Core/3.2/DefaultScheduler.cs	(revision 3011)
@@ -0,0 +1,87 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Hive.Server.Core.InternalInterfaces;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+using HeuristicLab.Hive.Server.DataAccess;
+using System.Threading;
+using HeuristicLab.DataAccess.Interfaces;
+
+namespace HeuristicLab.Hive.Server.Core {
+  class DefaultScheduler: IScheduler {
+
+    //private ISessionFactory factory;
+
+    private static Mutex jobLock =
+      new Mutex();
+
+    #region IScheduler Members
+
+    public DefaultScheduler() {
+      //factory = ServiceLocator.GetSessionFactory();
+    }
+
+    public bool ExistsJobForClient(HeuristicLab.Hive.Contracts.BusinessObjects.HeartBeatData hbData) {
+      //ISession session = factory.GetSessionForCurrentThread();
+
+      //try {
+        /*IJobAdapter jobAdapter =
+          session.GetDataAdapter<JobDto, IJobAdapter>();*/
+
+        List<JobDto> allOfflineJobsForClient = new List<JobDto>(DaoLocator.JobDao.FindFittingJobsForClient(State.offline, hbData.FreeCores, hbData.FreeMemory));
+          /*jobAdapter.FindJobs(State.offline, 
+          hbData.FreeCores,
+          hbData.FreeMemory, 
+          hbData.ClientId));*/
+        return (allOfflineJobsForClient != null && allOfflineJobsForClient.Count > 0);
+      //}
+      /*finally {
+        if (session != null)
+          session.EndSession();
+      } */
+    }   
+
+    public HeuristicLab.Hive.Contracts.BusinessObjects.JobDto GetNextJobForClient(Guid clientId) {
+      /*ISession session = factory.GetSessionForCurrentThread();
+
+      try {
+        IJobAdapter jobAdapter =
+          session.GetDataAdapter<JobDto, IJobAdapter>();
+
+        IClientAdapter clientAdapter =
+          session.GetDataAdapter<ClientDto, IClientAdapter>();*/
+
+        /// Critical section ///
+        jobLock.WaitOne();
+
+        ClientDto client = DaoLocator.ClientDao.FindById(clientId);
+      LinkedList<JobDto> allOfflineJobsForClient =
+        new LinkedList<JobDto>(DaoLocator.JobDao.FindFittingJobsForClient(State.offline, client.NrOfFreeCores,
+                                                                          client.FreeMemory));
+
+        JobDto jobToCalculate = null;
+        if (allOfflineJobsForClient != null && allOfflineJobsForClient.Count > 0) {
+          jobToCalculate = allOfflineJobsForClient.First.Value;
+          jobToCalculate.State = State.calculating;
+          jobToCalculate.Client = client;
+          jobToCalculate.Client.State = State.calculating;          
+          jobToCalculate.DateCalculated = DateTime.Now;
+          DaoLocator.JobDao.AssignClientToJob(client.Id, jobToCalculate.Id);
+          DaoLocator.JobDao.Update(jobToCalculate);
+          DaoLocator.ClientDao.Update(jobToCalculate.Client);
+        }
+        jobLock.ReleaseMutex();
+        /// End Critical section ///
+
+        return jobToCalculate;
+      }
+      /*finally {
+        if (session != null)
+          session.EndSession();
+      } 
+    }   */
+
+    #endregion
+  }
+}
Index: /trunk/sources/HeuristicLab.Hive.Server.Core/3.2/ExecutionEngineFacade.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.Core/3.2/ExecutionEngineFacade.cs	(revision 3010)
+++ /trunk/sources/HeuristicLab.Hive.Server.Core/3.2/ExecutionEngineFacade.cs	(revision 3011)
@@ -40,5 +40,5 @@
     #region IExecutionEngineFacade Members
 
-    public ResponseObject<Job> AddJob(SerializedJob job) {
+    public ResponseObject<JobDto> AddJob(SerializedJob job) {
       return jobManager.AddNewJob(job);
     }
@@ -48,5 +48,5 @@
     }
 
-    public ResponseObject<SerializedJobResult> 
+    public ResponseObject<SerializedJob> 
       GetLastSerializedResult(Guid jobId, bool requested) {
       return jobManager.GetLastSerializedJobResultOf(jobId, requested);
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 3010)
+++ /trunk/sources/HeuristicLab.Hive.Server.Core/3.2/HeuristicLab.Hive.Server.Core-3.2.csproj	(revision 3011)
@@ -77,4 +77,5 @@
       <RequiredTargetFramework>3.0</RequiredTargetFramework>
     </Reference>
+    <Reference Include="System.Transactions" />
     <Reference Include="System.Windows.Forms" />
     <Reference Include="System.Xml.Linq">
@@ -97,5 +98,7 @@
     <Compile Include="ClientFacade.cs" />
     <Compile Include="ClientManager.cs" />
+    <Compile Include="DaoLocator.cs" />
     <Compile Include="DbTestApp.cs" />
+    <Compile Include="DefaultScheduler.cs" />
     <Compile Include="ExecutionEngineFacade.cs" />
     <Compile Include="Authorization\HivePermissionManager.cs" />
Index: /trunk/sources/HeuristicLab.Hive.Server.Core/3.2/HiveServerCorePlugin.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.Core/3.2/HiveServerCorePlugin.cs	(revision 3010)
+++ /trunk/sources/HeuristicLab.Hive.Server.Core/3.2/HiveServerCorePlugin.cs	(revision 3011)
@@ -29,5 +29,10 @@
   [PluginFile("HeuristicLab.Hive.Server.Core-3.2.dll", PluginFileType.Assembly)]
   [PluginDependency("HeuristicLab.Core-3.2")]
+  [PluginDependency("HeuristicLab.DataAccess-3.2")]
   [PluginDependency("HeuristicLab.Hive.Contracts-3.2")]
+  [PluginDependency("HeuristicLab.Hive.JobBase-3.2")]
+  [PluginDependency("HeuristicLab.Hive.Server.DataAccess-3.2")]
+  [PluginDependency("HeuristicLab.Hive.Server.LINQDataAccess-3.2")]
+  [PluginDependency("HeuristicLab.Hive.Server.Security.Contracts-3.2")]
   public class HiveServerCorePlugin : PluginBase {
   }
Index: /trunk/sources/HeuristicLab.Hive.Server.Core/3.2/InternalInterfaces/IInternalJobManager.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.Core/3.2/InternalInterfaces/IInternalJobManager.cs	(revision 3010)
+++ /trunk/sources/HeuristicLab.Hive.Server.Core/3.2/InternalInterfaces/IInternalJobManager.cs	(revision 3011)
@@ -29,5 +29,5 @@
 namespace HeuristicLab.Hive.Server.Core.InternalInterfaces {
   interface IInternalJobManager {
-    void ResetJobsDependingOnResults(Job job);
+    void ResetJobsDependingOnResults(JobDto job);
 
     Stream GetJobStreamById(Guid jobId);
Index: /trunk/sources/HeuristicLab.Hive.Server.Core/3.2/InternalInterfaces/IScheduler.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.Core/3.2/InternalInterfaces/IScheduler.cs	(revision 3010)
+++ /trunk/sources/HeuristicLab.Hive.Server.Core/3.2/InternalInterfaces/IScheduler.cs	(revision 3011)
@@ -29,5 +29,5 @@
   public interface IScheduler {
     bool ExistsJobForClient(HeartBeatData hbData);
-    Job GetNextJobForClient(Guid clientId);
+    JobDto GetNextJobForClient(Guid clientId);
   }
 }
Index: /trunk/sources/HeuristicLab.Hive.Server.Core/3.2/JobManager.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.Core/3.2/JobManager.cs	(revision 3010)
+++ /trunk/sources/HeuristicLab.Hive.Server.Core/3.2/JobManager.cs	(revision 3011)
@@ -33,9 +33,10 @@
 using System.IO;
 using HeuristicLab.Tracing;
+using System.Transactions;
 
 namespace HeuristicLab.Hive.Server.Core {
   class JobManager: IJobManager, IInternalJobManager {
 
-    ISessionFactory factory;
+    //ISessionFactory factory;
     ILifecycleManager lifecycleManager;
 
@@ -43,5 +44,5 @@
 
     public JobManager() {
-      factory = ServiceLocator.GetSessionFactory();
+      //factory = ServiceLocator.GetSessionFactory();
       lifecycleManager = ServiceLocator.GetLifecycleManager();
 
@@ -50,98 +51,28 @@
     }
 
-    private JobResult GetLastJobResult(Guid jobId) {
-      ISession session = factory.GetSessionForCurrentThread();
-
-      try {
-        IJobResultsAdapter jobResultAdapter =
-            session.GetDataAdapter<JobResult, IJobResultsAdapter>();
-
-        return jobResultAdapter.GetLastResultOf(jobId);
-      }
-      finally {
-        if (session != null)
-          session.EndSession();
-      }
-    }
-
-    public void ResetJobsDependingOnResults(Job job) {
-
+    private JobDto GetLastJobResult(Guid jobId) {     
+      return DaoLocator.JobDao.FindById(jobId);
+    }
+
+    public void ResetJobsDependingOnResults(JobDto job) {
       HiveLogger.Info(this.ToString() + ": Setting job " + job.Id + " offline");
-
-      ISession session = factory.GetSessionForCurrentThread();
-      ITransaction tx = null;
-
-      try {
-        IJobAdapter jobAdapter =
-            session.GetDataAdapter<Job, IJobAdapter>();
-
-        IJobResultsAdapter jobResultsAdapter =
-          session.GetDataAdapter<JobResult, IJobResultsAdapter>();
-
-        tx = session.BeginTransaction();
-
-        if (job != null) {
-          SerializedJob computableJob =
-              new SerializedJob();
-          computableJob.JobInfo =
-            job;
-
-          JobResult lastResult = 
-            GetLastJobResult(job.Id);
-
-          if (lastResult != null) {
-            SerializedJobResult lastJobResult =
-              jobResultsAdapter.GetSerializedJobResult(lastResult.Id);
-
-            if (lastJobResult != null) {
-              computableJob.JobInfo.Percentage = lastJobResult.JobResult.Percentage;
-              computableJob.SerializedJobData = lastJobResult.SerializedJobResultData;
-
-              jobAdapter.UpdateSerializedJob(computableJob);
-            } else {
-              computableJob.JobInfo.Percentage = 0;
-            }
-          } else {
-            computableJob.JobInfo.Percentage = 0;
-          }
-
-          computableJob.JobInfo.Client = null;
-          computableJob.JobInfo.State = State.offline;
-
-          jobAdapter.Update(computableJob.JobInfo);
-        }
-
-        tx.Commit();
-      }
-      catch (Exception ex) {
-        if (tx != null)
-          tx.Rollback();
-        throw ex;
-      }
-      finally {
-        if (session != null)
-          session.EndSession();
-      }
-    }
+      if (job != null) {
+        DaoLocator.JobDao.SetJobOffline(job);
+      }
+    }
+         
 
     void checkForDeadJobs() {
       HiveLogger.Info(this.ToString() + " Searching for dead Jobs");
-       ISession session = factory.GetSessionForCurrentThread();
-
-       try {
-         IJobAdapter jobAdapter =
-             session.GetDataAdapter<Job, IJobAdapter>();
-
-         List<Job> allJobs = new List<Job>(jobAdapter.GetAll());
-         foreach (Job curJob in allJobs) {
-           if (curJob.State == State.calculating) {
-             ResetJobsDependingOnResults(curJob);
-           }
-         }
-       }
-       finally {
-         if (session != null)
-           session.EndSession();
-       }
+      using (TransactionScope scope = new TransactionScope()) {
+        List<JobDto> allJobs = new List<JobDto>(DaoLocator.JobDao.FindAll());
+        foreach (JobDto curJob in allJobs) {
+          if (curJob.State != State.calculating) {
+            ResetJobsDependingOnResults(curJob);
+          }
+        }
+        scope.Complete();
+      }
+      DaoLocator.DestroyContext();
     }
 
@@ -158,23 +89,23 @@
     /// </summary>
     /// <returns></returns>
-    public ResponseList<Job> GetAllJobs() {
-       ISession session = factory.GetSessionForCurrentThread();
+    public ResponseList<JobDto> GetAllJobs() {
+       /*ISession session = factory.GetSessionForCurrentThread();
 
        try {
          IJobAdapter jobAdapter =
-             session.GetDataAdapter<Job, IJobAdapter>();
-
-         ResponseList<Job> response = new ResponseList<Job>();
-
-         response.List = new List<Job>(jobAdapter.GetAll());
+             session.GetDataAdapter<JobDto, IJobAdapter>();*/
+
+         ResponseList<JobDto> response = new ResponseList<JobDto>();
+
+         response.List = new List<JobDto>(DaoLocator.JobDao.FindAll());
          response.Success = true;
          response.StatusMessage = ApplicationConstants.RESPONSE_JOB_ALL_JOBS;
 
          return response;
-       }
+       /*}
        finally {
          if (session != null)
            session.EndSession();
-       }
+       } */
     }
 
@@ -184,16 +115,7 @@
     /// <param name="jobId"></param>
     /// <returns></returns>
-    public Stream GetJobStreamById(Guid jobId) {
-      ISession session = factory.GetSessionForCurrentThread();
-      try {
-        IJobAdapter jobAdapter =
-          session.GetDataAdapter<Job, IJobAdapter>();
-
-        return jobAdapter.GetSerializedJobStream(jobId, false);
-      }
-      finally {
-        if (session != null)
-          session.EndSession();
-      }
+    public Stream GetJobStreamById(Guid jobId) {           
+      return DaoLocator.JobDao.GetSerializedJobStream(jobId);
+      
     }
 
@@ -202,14 +124,14 @@
     /// </summary>
     /// <returns></returns>
-    public ResponseObject<Job> GetJobById(Guid jobId) {
-      ISession session = factory.GetSessionForCurrentThread();
-
-      try {
+    public ResponseObject<JobDto> GetJobById(Guid jobId) {
+      /*ISession session = factory.GetSessionForCurrentThread();
+
+      try {              
         IJobAdapter jobAdapter =
-            session.GetDataAdapter<Job, IJobAdapter>();
-
-        ResponseObject<Job> response = new ResponseObject<Job>();
-
-        response.Obj = jobAdapter.GetById(jobId);
+            session.GetDataAdapter<JobDto, IJobAdapter>();*/
+
+        ResponseObject<JobDto> response = new ResponseObject<JobDto>();
+
+      response.Obj = DaoLocator.JobDao.FindById(jobId);
         if (response.Obj != null) {
           response.Success = true;
@@ -222,9 +144,9 @@
         return response;
       }
-      finally {
-        if (session != null)
-          session.EndSession();
-      }
-    }
+      /*finally {
+        if (session != null)
+          session.EndSession();
+      }
+    }   */
 
     /// <summary>
@@ -233,12 +155,12 @@
     /// <param name="job"></param>
     /// <returns></returns>
-    public ResponseObject<Job> AddNewJob(SerializedJob job) {
-      ISession session = factory.GetSessionForCurrentThread();
+    public ResponseObject<JobDto> AddNewJob(SerializedJob job) {
+      /*ISession session = factory.GetSessionForCurrentThread();
 
       try {
         IJobAdapter jobAdapter =
-            session.GetDataAdapter<Job, IJobAdapter>();
-
-        ResponseObject<Job> response = new ResponseObject<Job>();
+            session.GetDataAdapter<JobDto, IJobAdapter>();*/
+
+        ResponseObject<JobDto> response = new ResponseObject<JobDto>();
 
         if (job != null && job.JobInfo != null) {
@@ -260,5 +182,7 @@
 
           job.JobInfo.DateCreated = DateTime.Now;
-          jobAdapter.UpdateSerializedJob(job);
+          DaoLocator.JobDao.InsertWithAttachedJob(job);
+          DaoLocator.PluginInfoDao.InsertPluginDependenciesForJob(job.JobInfo);
+          //jobAdapter.UpdateSerializedJob(job);
           response.Success = true;
           response.Obj = job.JobInfo;
@@ -271,9 +195,9 @@
         return response;
       }
-      finally {
-        if (session != null)
-          session.EndSession();
-      }
-    }
+    /*  finally {
+        if (session != null)
+          session.EndSession();
+      }
+    } */
 
     /// <summary>
@@ -283,12 +207,13 @@
     /// <returns></returns>
     public Response RemoveJob(Guid jobId) {
-      ISession session = factory.GetSessionForCurrentThread();
+      /*ISession session = factory.GetSessionForCurrentThread();
 
       try {
         IJobAdapter jobAdapter =
-            session.GetDataAdapter<Job, IJobAdapter>();
+            session.GetDataAdapter<JobDto, IJobAdapter>();*/
+
         Response response = new Response();
 
-        Job job = jobAdapter.GetById(jobId);
+      JobDto job = DaoLocator.JobDao.FindById(jobId);
         if (job == null) {
           response.Success = false;
@@ -296,5 +221,5 @@
           return response;
         }
-        jobAdapter.Delete(job);
+        DaoLocator.JobDao.Delete(job);
         response.Success = false;
         response.StatusMessage = ApplicationConstants.RESPONSE_JOB_JOB_REMOVED;
@@ -302,13 +227,13 @@
         return response;
       }
-      finally {
-        if (session != null)
-          session.EndSession();
-      }
-    }
-
-    public ResponseObject<JobResult> GetLastJobResultOf(Guid jobId) {
-       ResponseObject<JobResult> result = 
-        new ResponseObject<JobResult>();
+      /*finally {
+        if (session != null)
+          session.EndSession();
+      }
+    }   */
+
+    public ResponseObject<JobDto> GetLastJobResultOf(Guid jobId) {
+      ResponseObject<JobDto> result =
+        new ResponseObject<JobDto>();
 
        result.Obj =
@@ -320,7 +245,7 @@
     }
 
-    public ResponseObject<SerializedJobResult>
+    public ResponseObject<SerializedJob>
       GetLastSerializedJobResultOf(Guid jobId, bool requested) {
-      ISession session = factory.GetSessionForCurrentThread();
+      /*ISession session = factory.GetSessionForCurrentThread();
 
       ITransaction tx = null;
@@ -328,41 +253,42 @@
       try {
         IJobAdapter jobAdapter =
-            session.GetDataAdapter<Job, IJobAdapter>();
+            session.GetDataAdapter<JobDto, IJobAdapter>();
 
         IJobResultsAdapter jobResultsAdapter =
           session.GetDataAdapter<JobResult, IJobResultsAdapter>();
 
-        tx = session.BeginTransaction();
-
-        ResponseObject<SerializedJobResult> response =
-          new ResponseObject<SerializedJobResult>();
-
-        Job job = jobAdapter.GetById(jobId);
+        tx = session.BeginTransaction();                          */
+
+        ResponseObject<SerializedJob> response =
+          new ResponseObject<SerializedJob>();
+
+      JobDto job = DaoLocator.JobDao.FindById(jobId);
         if (requested && (job.State == State.requestSnapshot || job.State == State.requestSnapshotSent)) {
           response.Success = true;
           response.StatusMessage = ApplicationConstants.RESPONSE_JOB_RESULT_NOT_YET_HERE;
-
-          tx.Commit();
+          
+          //tx.Commit();
           
           return response;
         }
 
-        JobResult lastResult =
-          jobResultsAdapter.GetLastResultOf(job.Id);
-
-        if (lastResult != null) {
+        /*JobResult lastResult =
+          jobResultsAdapter.GetLastResultOf(job.Id);*/
+
+        //if (lastResult != null) {
           response.Success = true;
           response.StatusMessage = ApplicationConstants.RESPONSE_JOB_JOB_RESULT_SENT;
-          response.Obj =
-            jobResultsAdapter.GetSerializedJobResult(
-              lastResult.Id);          
-        } else {
-          response.Success = false;
-        }
-
-        tx.Commit();
-        return response;
-      }
-      catch (Exception ex) {
+          response.Obj = new SerializedJob();
+          response.Obj.JobInfo = job;
+          response.Obj.SerializedJobData =
+            DaoLocator.JobDao.GetBinaryJobFile(jobId);
+        //} else {
+        //  response.Success = false;
+        //}
+
+        //tx.Commit();
+        return response;
+      }
+      /*catch (Exception ex) {
         if (tx != null)
           tx.Rollback();
@@ -373,15 +299,15 @@
           session.EndSession();
       }
-    }
+    }    */
 
 
     public Response RequestSnapshot(Guid jobId) {
-      ISession session = factory.GetSessionForCurrentThread();
+     // ISession session = factory.GetSessionForCurrentThread();
       Response response = new Response();
       
-      try {
-        IJobAdapter jobAdapter = session.GetDataAdapter<Job, IJobAdapter>();
-
-        Job job = jobAdapter.GetById(jobId);
+     /* try {
+        IJobAdapter jobAdapter = session.GetDataAdapter<JobDto, IJobAdapter>();*/
+
+        JobDto job = DaoLocator.JobDao.FindById(jobId);
         if (job.State == State.requestSnapshot || job.State == State.requestSnapshotSent) {
           response.Success = true;
@@ -396,5 +322,5 @@
         // job is in correct state
         job.State = State.requestSnapshot;
-        jobAdapter.Update(job);
+        DaoLocator.JobDao.Update(job);
 
         response.Success = true;
@@ -403,18 +329,19 @@
         return response;
       }
-      finally {
-        if (session != null)
-          session.EndSession();
-      }
-    }
+    /*  finally {
+        if (session != null)
+          session.EndSession();
+      }
+    } */
 
     public Response AbortJob(Guid jobId) {
-      ISession session = factory.GetSessionForCurrentThread();
+      //ISession session = factory.GetSessionForCurrentThread();
       Response response = new Response();
 
-      try {
-        IJobAdapter jobAdapter = session.GetDataAdapter<Job, IJobAdapter>();
-
-        Job job = jobAdapter.GetById(jobId);
+    /*  try {
+        IJobAdapter jobAdapter = session.GetDataAdapter<JobDto, IJobAdapter>();*/
+
+//        JobDto job = jobAdapter.GetById(jobId);
+      JobDto job = DaoLocator.JobDao.FindById(jobId);
         if (job == null) {
           response.Success = false;
@@ -434,5 +361,5 @@
         // job is in correct state
         job.State = State.abort;
-        jobAdapter.Update(job);
+      DaoLocator.JobDao.Update(job);
 
         response.Success = true;
@@ -441,12 +368,12 @@
         return response;
       }
-      finally {
-        if (session != null)
-          session.EndSession();
-      }
-    }
+      /*finally {
+        if (session != null)
+          session.EndSession();
+      }
+    }   */
 
     public ResponseList<JobResult> GetAllJobResults(Guid jobId) {
-      ISession session = factory.GetSessionForCurrentThread();
+     /* ISession session = factory.GetSessionForCurrentThread();
       ResponseList<JobResult> response = new ResponseList<JobResult>();
 
@@ -454,7 +381,7 @@
         IJobResultsAdapter jobResultAdapter =
             session.GetDataAdapter<JobResult, IJobResultsAdapter>();
-        IJobAdapter jobAdapter = session.GetDataAdapter<Job, IJobAdapter>();
-
-        Job job = jobAdapter.GetById(jobId);
+        IJobAdapter jobAdapter = session.GetDataAdapter<JobDto, IJobAdapter>();
+
+        JobDto job = jobAdapter.GetById(jobId);
         if (job == null) {
           response.Success = false;
@@ -471,16 +398,17 @@
         if(session != null)
           session.EndSession();
-      }
-    }
-
-    public ResponseList<Project> GetAllProjects() {
-      ISession session = factory.GetSessionForCurrentThread();
-      ResponseList<Project> response = new ResponseList<Project>();
+      }  */
+      return new ResponseList<JobResult>();
+    }
+
+    public ResponseList<ProjectDto> GetAllProjects() {
+      /*ISession session = factory.GetSessionForCurrentThread();
+      ResponseList<ProjectDto> response = new ResponseList<ProjectDto>();
 
       try {
         IProjectAdapter projectAdapter =
-          session.GetDataAdapter<Project, IProjectAdapter>();
-
-        List<Project> allProjects = new List<Project>(projectAdapter.GetAll());
+          session.GetDataAdapter<ProjectDto, IProjectAdapter>();
+
+        List<ProjectDto> allProjects = new List<ProjectDto>(projectAdapter.GetAll());
         response.List = allProjects;
         response.Success = true;
@@ -490,9 +418,10 @@
         if (session != null)
           session.EndSession();
-      }
-    }
-
-    private Response createUpdateProject(Project project) {
-      ISession session = factory.GetSessionForCurrentThread();
+      } */
+      return null;
+    }
+
+    private Response createUpdateProject(ProjectDto project) {
+      /*ISession session = factory.GetSessionForCurrentThread();
       Response response = new Response();
       ITransaction tx = null;
@@ -500,5 +429,5 @@
       try {
         IProjectAdapter projectAdapter =
-          session.GetDataAdapter<Project, IProjectAdapter>();
+          session.GetDataAdapter<ProjectDto, IProjectAdapter>();
 
         if (project.Name == null || project.Name == "") {
@@ -528,17 +457,18 @@
           session.EndSession();
       }
-      return response;
-    }
-
-    public Response CreateProject(Project project) {
+      return response;    */
+      return null;
+    }
+
+    public Response CreateProject(ProjectDto project) {
       return createUpdateProject(project);
     }
 
-    public Response ChangeProject(Project project) {
+    public Response ChangeProject(ProjectDto project) {
       return createUpdateProject(project);
     }
 
     public Response DeleteProject(Guid projectId) {
-      ISession session = factory.GetSessionForCurrentThread();
+      /*ISession session = factory.GetSessionForCurrentThread();
       Response response = new Response();
       ITransaction tx = null;
@@ -546,7 +476,7 @@
       try {
         IProjectAdapter projectAdapter =
-          session.GetDataAdapter<Project, IProjectAdapter>();
-
-        Project project = projectAdapter.GetById(projectId);
+          session.GetDataAdapter<ProjectDto, IProjectAdapter>();
+
+        ProjectDto project = projectAdapter.GetById(projectId);
         if (project == null) {
           response.Success = false;
@@ -568,16 +498,17 @@
         if (session != null)
           session.EndSession();
-      }
-      return response;
-    }
-
-    public ResponseList<Job> GetJobsByProject(Guid projectId) {
-      ISession session = factory.GetSessionForCurrentThread();
-      ResponseList<Job> response = new ResponseList<Job>();
+      }     
+      return response; */
+      return null;
+    }
+
+    public ResponseList<JobDto> GetJobsByProject(Guid projectId) {
+      /*ISession session = factory.GetSessionForCurrentThread();
+      ResponseList<JobDto> response = new ResponseList<JobDto>();
 
       try {
         IJobAdapter jobAdapter =
-          session.GetDataAdapter<Job, IJobAdapter>();
-        List<Job> jobsByProject = new List<Job>(jobAdapter.GetJobsByProject(projectId));
+          session.GetDataAdapter<JobDto, IJobAdapter>();
+        List<JobDto> jobsByProject = new List<JobDto>(jobAdapter.GetJobsByProject(projectId));
         response.List = jobsByProject;
         response.Success = true;
@@ -586,6 +517,8 @@
         if (session != null)
           session.EndSession();
-      }
-      return response;
+      } 
+       
+      return response;*/
+      return null;      
     }
 
Index: /trunk/sources/HeuristicLab.Hive.Server.Core/3.2/ServerConsoleFacade.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.Core/3.2/ServerConsoleFacade.cs	(revision 3010)
+++ /trunk/sources/HeuristicLab.Hive.Server.Core/3.2/ServerConsoleFacade.cs	(revision 3011)
@@ -63,25 +63,25 @@
 
 
-    public ResponseList<ClientInfo> GetAllClients() {
+    public ResponseList<ClientDto> GetAllClients() {
       secMan.Authorize("AccessClients", sessionID, Guid.Empty);
       return clientManager.GetAllClients();
     }
 
-    public ResponseList<ClientGroup> GetAllClientGroups() {
+    public ResponseList<ClientGroupDto> GetAllClientGroups() {
       //secMan.Authorize("AccessClientGroup", sessionID, Guid.Empty);
       return clientManager.GetAllClientGroups();
     }
 
-    public ResponseList<UpTimeStatistics> GetAllUpTimeStatistics() {
+    public ResponseList<UpTimeStatisticsDto> GetAllUpTimeStatistics() {
       secMan.Authorize("AccessStatistics", sessionID, Guid.Empty);
       return clientManager.GetAllUpTimeStatistics();
     }
 
-    public ResponseObject<ClientGroup> AddClientGroup(ClientGroup clientGroup) {
+    public ResponseObject<ClientGroupDto> AddClientGroup(ClientGroupDto clientGroup) {
       secMan.Authorize("AddClientGroup", sessionID, Guid.Empty);
       return clientManager.AddClientGroup(clientGroup);
     }
 
-    public Response AddResourceToGroup(Guid clientGroupId, Resource resource) {
+    public Response AddResourceToGroup(Guid clientGroupId, ResourceDto resource) {
       secMan.Authorize("AddResource", sessionID, Guid.Empty);                
       return clientManager.AddResourceToGroup(clientGroupId, resource);
@@ -92,25 +92,25 @@
     }
 
-    public ResponseList<Job> GetAllJobs() {
+    public ResponseList<JobDto> GetAllJobs() {
       secMan.Authorize("AccessJobs", sessionID, Guid.Empty);
       return jobManager.GetAllJobs();
     }
 
-    public ResponseObject<Job> GetJobById(Guid jobId) {
+    public ResponseObject<JobDto> GetJobById(Guid jobId) {
       secMan.Authorize("AccessJobs", sessionID, jobId);
       return jobManager.GetJobById(jobId);
     }
 
-    public ResponseObject<Job> AddNewJob(SerializedJob job) {
+    public ResponseObject<JobDto> AddNewJob(SerializedJob job) {
       secMan.Authorize("AddJob", sessionID, job.JobInfo.Id);
       return jobManager.AddNewJob(job);
     }
 
-    public ResponseObject<JobResult> GetLastJobResultOf(Guid jobId) {
+    public ResponseObject<JobDto> GetLastJobResultOf(Guid jobId) {
       secMan.Authorize("AccessJobResults", sessionID, jobId);
       return jobManager.GetLastJobResultOf(jobId);
     }
 
-    public ResponseObject<SerializedJobResult> GetLastSerializedJobResultOf(Guid jobId, bool requested) {
+    public ResponseObject<SerializedJob> GetLastSerializedJobResultOf(Guid jobId, bool requested) {
       secMan.Authorize("AccessJobResults", sessionID, jobId);
       return jobManager.GetLastSerializedJobResultOf(jobId, requested);
@@ -137,5 +137,5 @@
     }
 
-    public ResponseObject<List<ClientGroup>> GetAllGroupsOfResource(Guid resourceId) {
+    public ResponseObject<List<ClientGroupDto>> GetAllGroupsOfResource(Guid resourceId) {
       secMan.Authorize("AccessUserGroup", sessionID, Guid.Empty);
       return clientManager.GetAllGroupsOfResource(resourceId);
@@ -147,15 +147,15 @@
     }
 
-    public ResponseList<Project> GetAllProjects() {
+    public ResponseList<ProjectDto> GetAllProjects() {
       secMan.Authorize("AccessProjects", sessionID, Guid.Empty);
       return jobManager.GetAllProjects();
     }
 
-    public Response CreateProject(Project project) {
+    public Response CreateProject(ProjectDto project) {
       secMan.Authorize("CreateProjects", sessionID, Guid.Empty);
       return jobManager.CreateProject(project);
     }
 
-    public Response ChangeProject(Project project) {
+    public Response ChangeProject(ProjectDto project) {
       secMan.Authorize("ChangeProjects", sessionID, Guid.Empty);
       return jobManager.ChangeProject(project);
@@ -167,5 +167,5 @@
     }
 
-    public ResponseList<Job> GetJobsByProject(Guid projectId) {
+    public ResponseList<JobDto> GetJobsByProject(Guid projectId) {
       secMan.Authorize("AccessJobs", sessionID, Guid.Empty);
       return jobManager.GetJobsByProject(projectId);
Index: /trunk/sources/HeuristicLab.Hive.Server.DataAccess/3.2/HeuristicLab.Hive.Server.DataAccess-3.2.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.DataAccess/3.2/HeuristicLab.Hive.Server.DataAccess-3.2.csproj	(revision 3010)
+++ /trunk/sources/HeuristicLab.Hive.Server.DataAccess/3.2/HeuristicLab.Hive.Server.DataAccess-3.2.csproj	(revision 3011)
@@ -77,5 +77,11 @@
   <ItemGroup>
     <Compile Include="IClientConfigAdapter.cs" />
+    <Compile Include="IClientConfigDao.cs" />
+    <Compile Include="IClientDao.cs" />
+    <Compile Include="IClientGroupDao.cs" />
+    <Compile Include="IGenericDao.cs" />
+    <Compile Include="IJobDao.cs" />
     <Compile Include="IPluginInfoAdapter.cs" />
+    <Compile Include="IPluginInfoDao.cs" />
     <Compile Include="IProjectAdapter.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
@@ -86,4 +92,5 @@
     <Compile Include="IJobResultsAdapter.cs" />
     <Compile Include="IResourceAdapter.cs" />
+    <Compile Include="VarBinaryStream.cs" />
   </ItemGroup>
   <ItemGroup>
@@ -116,4 +123,5 @@
     <Reference Include="System" />
     <Reference Include="System.Data" />
+    <Reference Include="System.Transactions" />
     <Reference Include="System.Xml" />
   </ItemGroup>
Index: /trunk/sources/HeuristicLab.Hive.Server.DataAccess/3.2/HiveServerDataAccessPlugin.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.DataAccess/3.2/HiveServerDataAccessPlugin.cs	(revision 3010)
+++ /trunk/sources/HeuristicLab.Hive.Server.DataAccess/3.2/HiveServerDataAccessPlugin.cs	(revision 3011)
@@ -27,6 +27,7 @@
 namespace HeuristicLab.Hive.DataAccess {
   [Plugin("HeuristicLab.Hive.Server.DataAccess-3.2")]
-  [PluginFile("HeuristicLab.Hive.Server.DataAccess-3.2.dll", PluginFileType.Assembly)]
+  [PluginFile("HeuristicLab.Hive.Server.DataAccess-3.2.dll", PluginFileType.Assembly)]  
   [PluginDependency("HeuristicLab.Core-3.2")]
+  [PluginDependency("HeuristicLab.Hive.DataAccess-3.2")]
   [PluginDependency("HeuristicLab.Hive.Contracts-3.2")]
   public class HiveServerDataAccessPlugin : PluginBase {
Index: /trunk/sources/HeuristicLab.Hive.Server.DataAccess/3.2/IClientAdapter.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.DataAccess/3.2/IClientAdapter.cs	(revision 3010)
+++ /trunk/sources/HeuristicLab.Hive.Server.DataAccess/3.2/IClientAdapter.cs	(revision 3011)
@@ -1,3 +1,3 @@
-﻿#region License Information
+#region License Information
 /* HeuristicLab
  * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
@@ -30,5 +30,5 @@
   /// The client database adapter
   /// </summary>
-  public interface IClientAdapter : IDataAdapter<ClientInfo> {
+  public interface IClientAdapter : IDataAdapter<ClientDto> {
     /// <summary>
     /// Get the client with the specified name
@@ -36,5 +36,5 @@
     /// <param name="clientId"></param>
     /// <returns></returns>
-    ClientInfo GetByName(string name);
+    ClientDto GetByName(string name);
 
     /// <summary>
@@ -42,5 +42,5 @@
     /// </summary>
     /// <returns></returns>
-    ICollection<ClientInfo> GetGrouplessClients();
+    ICollection<ClientDto> GetGrouplessClients();
   }
 }
Index: /trunk/sources/HeuristicLab.Hive.Server.DataAccess/3.2/IClientConfigAdapter.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.DataAccess/3.2/IClientConfigAdapter.cs	(revision 3010)
+++ /trunk/sources/HeuristicLab.Hive.Server.DataAccess/3.2/IClientConfigAdapter.cs	(revision 3011)
@@ -26,5 +26,5 @@
 
 namespace HeuristicLab.Hive.Server.DataAccess {
-  public interface IClientConfigAdapter: IDataAdapter<ClientConfig> {
+  public interface IClientConfigAdapter: IDataAdapter<ClientConfigDto> {
   }
 }
Index: /trunk/sources/HeuristicLab.Hive.Server.DataAccess/3.2/IClientConfigDao.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.DataAccess/3.2/IClientConfigDao.cs	(revision 3011)
+++ /trunk/sources/HeuristicLab.Hive.Server.DataAccess/3.2/IClientConfigDao.cs	(revision 3011)
@@ -0,0 +1,10 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+
+namespace HeuristicLab.Hive.Server.DataAccess {
+  public interface IClientConfigDao: IGenericDao<ClientConfigDto> {
+
+  }
+}
Index: /trunk/sources/HeuristicLab.Hive.Server.DataAccess/3.2/IClientDao.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.DataAccess/3.2/IClientDao.cs	(revision 3011)
+++ /trunk/sources/HeuristicLab.Hive.Server.DataAccess/3.2/IClientDao.cs	(revision 3011)
@@ -0,0 +1,12 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+
+namespace HeuristicLab.Hive.Server.DataAccess {
+  public interface IClientDao: IGenericDao<ClientDto> {
+    IEnumerable<ClientDto> FindAllClientsWithoutGroup();
+
+    ClientDto GetClientForJob(Guid jobId);
+  }
+}
Index: /trunk/sources/HeuristicLab.Hive.Server.DataAccess/3.2/IClientGroupAdapter.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.DataAccess/3.2/IClientGroupAdapter.cs	(revision 3010)
+++ /trunk/sources/HeuristicLab.Hive.Server.DataAccess/3.2/IClientGroupAdapter.cs	(revision 3011)
@@ -30,5 +30,5 @@
   /// The client group database adapter
   /// </summary>
-  public interface IClientGroupAdapter: IDataAdapter<ClientGroup> {
+  public interface IClientGroupAdapter: IDataAdapter<ClientGroupDto> {
     /// <summary>
     /// Get the client group with the specified name
@@ -36,5 +36,5 @@
     /// <param name="clientId"></param>
     /// <returns></returns>
-    ClientGroup GetByName(string name);
+    ClientGroupDto GetByName(string name);
 
     /// <summary>
@@ -43,5 +43,5 @@
     /// <param name="permOwner"></param>
     /// <returns></returns>
-    ICollection<ClientGroup> MemberOf(Resource resource);
+    ICollection<ClientGroupDto> MemberOf(ResourceDto resource);
   }
 }
Index: /trunk/sources/HeuristicLab.Hive.Server.DataAccess/3.2/IClientGroupDao.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.DataAccess/3.2/IClientGroupDao.cs	(revision 3011)
+++ /trunk/sources/HeuristicLab.Hive.Server.DataAccess/3.2/IClientGroupDao.cs	(revision 3011)
@@ -0,0 +1,15 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+
+namespace HeuristicLab.Hive.Server.DataAccess {
+  public interface IClientGroupDao: IGenericDao<ClientGroupDto> {
+    void AddRessourceToClientGroup(Guid ressource, Guid clientGroupId);
+    void RemoveRessourceFromClientGroup(Guid ressource, Guid clientGroupId);
+
+    IEnumerable<ClientGroupDto> MemberOf(ClientDto client);
+
+    IEnumerable<ClientGroupDto> FindAllWithSubGroupsAndClients();
+  }
+}
Index: /trunk/sources/HeuristicLab.Hive.Server.DataAccess/3.2/IGenericDao.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.DataAccess/3.2/IGenericDao.cs	(revision 3011)
+++ /trunk/sources/HeuristicLab.Hive.Server.DataAccess/3.2/IGenericDao.cs	(revision 3011)
@@ -0,0 +1,15 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HeuristicLab.Hive.Server.DataAccess {
+  public interface IGenericDao<TBusiness> {
+    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.DataAccess/3.2/IJobAdapter.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.DataAccess/3.2/IJobAdapter.cs	(revision 3010)
+++ /trunk/sources/HeuristicLab.Hive.Server.DataAccess/3.2/IJobAdapter.cs	(revision 3011)
@@ -28,10 +28,10 @@
 
 namespace HeuristicLab.Hive.Server.DataAccess {
-  public interface IJobAdapter: IDataAdapter<Job> {
+  public interface IJobAdapter: IDataAdapter<JobDto> {
     /// <summary>
     /// Gets all subjobs of the specified job
     /// </summary>
     /// <returns></returns>
-    ICollection<Job> GetAllSubjobs(Job job);
+    ICollection<JobDto> GetAllSubjobs(JobDto job);
 
     /// <summary>
@@ -39,5 +39,5 @@
     /// </summary>
     /// <returns></returns>
-    ICollection<Job> GetJobsByState(State state);
+    ICollection<JobDto> GetJobsByState(State state);
 
     /// <summary>
@@ -49,5 +49,5 @@
     /// <param name="resourceId">all jobs that can be calculated by that resource</param>
     /// <returns></returns>
-    ICollection<Job> FindJobs(State state, 
+    ICollection<JobDto> FindJobs(State state, 
       int cores, 
       int memory, 
@@ -59,5 +59,5 @@
     /// <param name="client"></param>
     /// <returns></returns>
-    ICollection<Job> GetJobsOf(ClientInfo client);
+    ICollection<JobDto> GetJobsOf(ClientDto client);
 
     /// <summary>
@@ -66,5 +66,5 @@
     /// <param name="client"></param>
     /// <returns></returns>
-    ICollection<Job> GetActiveJobsOf(ClientInfo client);
+    ICollection<JobDto> GetActiveJobsOf(ClientDto client);
 
     /// <summary>
@@ -73,5 +73,5 @@
     /// <param name="user"></param>
     /// <returns></returns>
-    ICollection<Job> GetJobsOf(Guid userId);
+    ICollection<JobDto> GetJobsOf(Guid userId);
 
     /// <summary>
@@ -80,5 +80,5 @@
     /// <param name="user"></param>
     /// <returns></returns>
-    ICollection<Job> GetJobsByProject(Guid projectId);
+    ICollection<JobDto> GetJobsByProject(Guid projectId);
 
     /// <summary>
Index: /trunk/sources/HeuristicLab.Hive.Server.DataAccess/3.2/IJobDao.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.DataAccess/3.2/IJobDao.cs	(revision 3011)
+++ /trunk/sources/HeuristicLab.Hive.Server.DataAccess/3.2/IJobDao.cs	(revision 3011)
@@ -0,0 +1,24 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+using System.IO;
+
+namespace HeuristicLab.Hive.Server.DataAccess {
+  public interface IJobDao: IGenericDao<JobDto> {
+    IEnumerable<JobDto> FindActiveJobsOfClient(ClientDto client);
+
+    IEnumerable<JobDto> GetJobsByState(State state);
+
+    void AssignClientToJob(Guid clientId, Guid jobId);
+
+    void SetJobOffline(JobDto job);
+
+    SerializedJob InsertWithAttachedJob(SerializedJob job);
+
+    byte[] GetBinaryJobFile(Guid jobId); 
+
+    IEnumerable<JobDto> FindFittingJobsForClient(State state, int freeCores, int freeMemory);
+    Stream GetSerializedJobStream(Guid jobId);
+  }
+}
Index: /trunk/sources/HeuristicLab.Hive.Server.DataAccess/3.2/IPluginInfoAdapter.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.DataAccess/3.2/IPluginInfoAdapter.cs	(revision 3010)
+++ /trunk/sources/HeuristicLab.Hive.Server.DataAccess/3.2/IPluginInfoAdapter.cs	(revision 3011)
@@ -30,8 +30,8 @@
   /// The plugin info database adapter
   /// </summary>
-  public interface IPluginInfoAdapter : IDataAdapter<HivePluginInfo> {
-    HivePluginInfo GetByNameVersionBuilddate(String name, String version, DateTime buildDate);
+  public interface IPluginInfoAdapter : IDataAdapter<HivePluginInfoDto> {
+    HivePluginInfoDto GetByNameVersionBuilddate(String name, String version, DateTime buildDate);
 
-    ICollection<HivePluginInfo> GetOrphanedPluginInfos();
+    ICollection<HivePluginInfoDto> GetOrphanedPluginInfos();
   }
 }
Index: /trunk/sources/HeuristicLab.Hive.Server.DataAccess/3.2/IPluginInfoDao.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.DataAccess/3.2/IPluginInfoDao.cs	(revision 3011)
+++ /trunk/sources/HeuristicLab.Hive.Server.DataAccess/3.2/IPluginInfoDao.cs	(revision 3011)
@@ -0,0 +1,10 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+
+namespace HeuristicLab.Hive.Server.DataAccess {
+  public interface IPluginInfoDao: IGenericDao<HivePluginInfoDto> {    
+    void InsertPluginDependenciesForJob(JobDto jobDto);
+  }
+}
Index: /trunk/sources/HeuristicLab.Hive.Server.DataAccess/3.2/IProjectAdapter.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.DataAccess/3.2/IProjectAdapter.cs	(revision 3010)
+++ /trunk/sources/HeuristicLab.Hive.Server.DataAccess/3.2/IProjectAdapter.cs	(revision 3011)
@@ -6,5 +6,5 @@
 
 namespace HeuristicLab.Hive.Server.DataAccess {
-  public interface IProjectAdapter : IDataAdapter<Project> {
+  public interface IProjectAdapter : IDataAdapter<ProjectDto> {
   }
 }
Index: /trunk/sources/HeuristicLab.Hive.Server.DataAccess/3.2/IResourceAdapter.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.DataAccess/3.2/IResourceAdapter.cs	(revision 3010)
+++ /trunk/sources/HeuristicLab.Hive.Server.DataAccess/3.2/IResourceAdapter.cs	(revision 3011)
@@ -1,3 +1,3 @@
-﻿#region License Information
+#region License Information
 /* HeuristicLab
  * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
@@ -30,5 +30,5 @@
   /// The resource database adapter
   /// </summary>
-  public interface IResourceAdapter: IPolymorphicDataAdapter<Resource> {
+  public interface IResourceAdapter: IPolymorphicDataAdapter<ResourceDto> {
     /// <summary>
     /// Gets the resource and updates the values of the object
@@ -36,5 +36,5 @@
     /// <param name="resource"></param>
     /// <returns></returns>
-    bool GetById(Resource resource);
+    bool GetById(ResourceDto resource);
 
     /// <summary>
@@ -43,5 +43,5 @@
     /// <param name="clientId"></param>
     /// <returns></returns>
-    Resource GetByName(string name);
+    ResourceDto GetByName(string name);
   }
 }
Index: /trunk/sources/HeuristicLab.Hive.Server.DataAccess/3.2/VarBinaryStream.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.DataAccess/3.2/VarBinaryStream.cs	(revision 3011)
+++ /trunk/sources/HeuristicLab.Hive.Server.DataAccess/3.2/VarBinaryStream.cs	(revision 3011)
@@ -0,0 +1,277 @@
+/* Based on: 
+ *   http://www.eggheadcafe.com/conversation.aspx?messageid=29988910&threadid=29988841
+ * */
+
+using System;
+using System.IO;
+using System.Data.SqlClient;
+using System.Data;
+
+namespace HeuristicLab.Hive.Server.DataAccess {
+  /// <summary>
+  /// The VarBinaryStream class inherits from Stream. It uses a
+  /// VarBinarySource class to execute the actual TSQL.
+  /// </summary>
+  public class VarBinaryStream : Stream, IDisposable {
+    private long _position;
+    private readonly VarBinarySource _source;
+
+    public VarBinaryStream(VarBinarySource source) {
+      _position = 0;
+      _source = source;
+    }
+
+    public override bool CanRead {
+      get { return true; }
+    }
+
+    public override bool CanSeek {
+      get { return true; }
+    }
+
+    public override bool CanWrite {
+      get { return true; }
+    }
+
+    public override long Length {
+      get { return _source.Length; }
+    }
+
+    public override long Position {
+      get { return _position; }
+      set { this.Seek(value, SeekOrigin.Begin); }
+    }
+
+    public override void Flush() { }
+
+    public override long Seek(long offset, SeekOrigin origin) {
+      switch (origin) {
+        case SeekOrigin.Begin: {
+            if ((offset < 0) && (offset > this.Length))
+              throw new ArgumentException("Invalid seek origin.");
+            _position = offset;
+            break;
+          }
+        case SeekOrigin.End: {
+            if ((offset > 0) && (offset < -this.Length))
+              throw new ArgumentException("Invalid seek origin.");
+            _position = this.Length - offset;
+            break;
+          }
+        case SeekOrigin.Current: {
+            if ((_position + offset > this.Length))
+              throw new ArgumentException("Invalid seek origin.");
+            _position = _position + offset;
+            break;
+          }
+        default: {
+            throw new ArgumentOutOfRangeException("origin");
+          }
+      }
+      return _position;
+    }
+
+    public override void SetLength(long value) {
+      throw new NotSupportedException();
+    }
+
+    public override int Read(byte[] buffer, int offset, int count) {
+      if (buffer == null)
+        throw new ArgumentNullException("buffer");
+      if (offset < 0)
+        throw new ArgumentOutOfRangeException("offset");
+      if (count < 0)
+        throw new ArgumentOutOfRangeException("count");
+      if (buffer.Length - offset < count)
+        throw new ArgumentException("Offset and length were out of bounds for the array");
+
+      byte[] data = _source.Read(Position, count);
+      if (data == null)
+        return 0;
+
+      Buffer.BlockCopy(data, 0, buffer, offset, data.Length);
+      _position += data.Length;
+      return data.Length;
+    }
+
+    public override void Write(byte[] buffer, int offset, int count) {
+      if (buffer == null)
+        throw new ArgumentNullException("buffer");
+      if (offset < 0)
+        throw new ArgumentOutOfRangeException("offset");
+      if (count < 0)
+        throw new ArgumentOutOfRangeException("count");
+      if (buffer.Length - offset < count)
+        throw new ArgumentException("Offset and length were out of bounds for the array");
+
+      byte[] data = GetWriteBuffer(buffer, count, offset);
+      _source.Write(data, _position, count);
+      _position += count;
+    }
+
+    private static byte[] GetWriteBuffer(byte[] buffer, int count, int
+    offset) {
+      if (buffer.Length == count)
+        return buffer;
+      byte[] data = new byte[count];
+      Buffer.BlockCopy(buffer, offset, data, 0, count);
+      return data;
+    }
+
+    public override void Close() {
+      _source.Close();
+    }
+
+    protected override void Dispose(bool disposing) {
+      if (!disposing) {
+        if (_source != null) {
+          _source.Close();
+          _source.Dispose();
+        }
+      }
+      base.Dispose(disposing);
+    }
+  }
+
+
+  public class VarBinarySource : IDisposable {
+    private SqlCommand _readCommand;
+    private SqlCommand _writeCommand;
+    private SqlConnection _connection;
+    private SqlTransaction _transaction;
+    private bool _ownedTransaction = false;
+    private bool _ownedConnection = false;
+    private readonly long _length;
+
+    public VarBinarySource(SqlConnection connection,
+      SqlTransaction transaction,
+      string table, string
+    dataColumn, string keyColumn, Guid key) {
+      _connection = connection;
+      
+      if (_connection.State == ConnectionState.Closed) {
+        _connection.Open();
+        _ownedConnection = true;
+
+        _transaction =
+          _connection.BeginTransaction(IsolationLevel.RepeatableRead) as SqlTransaction;
+        _ownedTransaction = true;
+      } else {
+        _ownedConnection = false;
+
+        if (transaction != null) {
+          _transaction = transaction;
+
+          _ownedTransaction = false;
+        } else {
+          _transaction =
+            _connection.BeginTransaction(IsolationLevel.ReadCommitted) as SqlTransaction;
+
+          _ownedTransaction = true;
+        }
+      }
+
+      _length = GetLength(connection, table, dataColumn, keyColumn, key);
+      _readCommand = CreateReadCommand(connection, table, dataColumn,
+      keyColumn, key);
+      _writeCommand = CreateWriteCommand(connection, table, dataColumn,
+      keyColumn, key);
+    }
+
+    public long Length {
+      get { return _length; }
+    }
+
+    private static SqlCommand CreateReadCommand(SqlConnection connection,
+    string table, string dataColumn, string keyColumn,
+    Guid key) {
+      SqlCommand readCommand = connection.CreateCommand();
+      readCommand.CommandText = string.Format(@"
+select substring({0}, @offset, @length)
+from {1}
+where {2} = @key", dataColumn, table, keyColumn);
+      readCommand.Parameters.Add("@key", SqlDbType.UniqueIdentifier).Value = key;
+      readCommand.Parameters.Add("@offset", SqlDbType.BigInt);
+      readCommand.Parameters.Add("@length", SqlDbType.BigInt);
+      return readCommand;
+    }
+
+    private static SqlCommand CreateWriteCommand(SqlConnection connection,
+    string table, string dataColumn, string keyColumn,
+    Guid key) {
+      SqlCommand writecommand = connection.CreateCommand();
+      writecommand.CommandText = string.Format(@"
+update {0}
+set {1}.write(@buffer, @offset, @length)
+where {2} = @key", table, dataColumn, keyColumn);
+      writecommand.Parameters.Add("@key", SqlDbType.UniqueIdentifier).Value = key;
+      writecommand.Parameters.Add("@offset", SqlDbType.BigInt);
+      writecommand.Parameters.Add("@length", SqlDbType.BigInt);
+      writecommand.Parameters.Add("@buffer", SqlDbType.VarBinary);
+      return writecommand;
+    }
+
+    private long GetLength(SqlConnection connection,
+      string table,
+    string dataColumn, string keyColumn,
+    Guid key) {
+      using (SqlCommand command = connection.CreateCommand()) {
+        command.Transaction = _transaction;
+
+        SqlParameter length = command.Parameters.Add("@length",
+        SqlDbType.BigInt);
+        length.Direction = ParameterDirection.Output;
+
+        command.CommandText = string.Format(@"
+select @length = cast(datalength({0}) as bigint)
+from {1}
+where {2} = @key", dataColumn, table, keyColumn);
+        command.Parameters.Add("@key", SqlDbType.UniqueIdentifier).Value = key;
+        command.ExecuteNonQuery();
+        return length.Value == DBNull.Value ? 0 : (long)length.Value;
+      }
+    }
+
+    public byte[] Read(long offset, long length) {
+      _readCommand.Transaction = _transaction;
+
+      // substring is 1-based.
+      _readCommand.Parameters["@offset"].Value = offset + 1;
+      _readCommand.Parameters["@length"].Value = length;
+      return (byte[])_readCommand.ExecuteScalar();
+    }
+
+    public void Write(byte[] buffer, long offset, long length) {
+      _writeCommand.Transaction = _transaction;
+
+      _writeCommand.Parameters["@buffer"].Value = buffer;
+      _writeCommand.Parameters["@offset"].Value = offset;
+      _writeCommand.Parameters["@length"].Value = length;
+      _writeCommand.ExecuteNonQuery();
+    }
+
+    public void Close() {
+      if (_transaction != null) {
+        if (_ownedTransaction)
+          _transaction.Commit();
+        _transaction = null;
+      }
+
+      if (_connection != null) {
+        if (_ownedConnection)
+          _connection.Close();
+        _connection = null;
+      }
+    }
+
+    public void Dispose() {
+      if (_readCommand != null) {
+        _readCommand.Dispose();
+      }
+      if (_writeCommand != null) {
+        _writeCommand.Dispose();
+      }
+    }
+  }
+}
+
Index: /trunk/sources/HeuristicLab.Hive.Server.LINQDataAccess/3.2/BaseDao.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.LINQDataAccess/3.2/BaseDao.cs	(revision 3010)
+++ /trunk/sources/HeuristicLab.Hive.Server.LINQDataAccess/3.2/BaseDao.cs	(revision 3011)
@@ -5,5 +5,5 @@
 
 namespace HeuristicLab.Hive.Server.LINQDataAccess {
-  public class BaseDao {
+  public abstract class BaseDao<TBusiness, TDatabaseEntity> {
     public static HiveDataContext Context {
       get {
@@ -11,4 +11,8 @@
       }
     }
+
+    public abstract TDatabaseEntity DtoToEntity(TBusiness source, TDatabaseEntity target);
+    public abstract TBusiness EntityToDto(TDatabaseEntity source, TBusiness target);
+
   }
 }
Index: /trunk/sources/HeuristicLab.Hive.Server.LINQDataAccess/3.2/ClientConfigDao.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.LINQDataAccess/3.2/ClientConfigDao.cs	(revision 3011)
+++ /trunk/sources/HeuristicLab.Hive.Server.LINQDataAccess/3.2/ClientConfigDao.cs	(revision 3011)
@@ -0,0 +1,71 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+using HeuristicLab.Hive.Server.DataAccess;
+
+namespace HeuristicLab.Hive.Server.LINQDataAccess {
+  public class ClientConfigDao: BaseDao<ClientConfigDto, ClientConfig>, IClientConfigDao {
+
+
+    #region IGenericDao<ClientConfigDto,ClientConfig> Members
+
+    public ClientConfigDto FindById(Guid id) {
+      return (from cc in Context.ClientConfigs
+              where cc.ClientConfigId.Equals(id)
+              select EntityToDto(cc, null)).SingleOrDefault();
+    }
+
+    public IEnumerable<ClientConfigDto> FindAll() {
+      return (from cc in Context.ClientConfigs              
+              select EntityToDto(cc, null)).ToList();
+    }
+
+    public ClientConfigDto Insert(ClientConfigDto bObj) {
+      ClientConfig c = DtoToEntity(bObj, null);
+      Context.ClientConfigs.InsertOnSubmit(c);
+      Context.SubmitChanges();
+      bObj.Id = c.ClientConfigId;
+      return bObj;  
+    }
+
+    public void Delete(ClientConfigDto bObj) {
+      Context.ClientConfigs.DeleteOnSubmit(Context.ClientConfigs.SingleOrDefault(c => c.ClientConfigId.Equals(bObj.Id)));
+      Context.SubmitChanges();
+    }
+
+    public void Update(ClientConfigDto bObj) {
+      ClientConfig cc = Context.ClientConfigs.SingleOrDefault(c => c.ClientConfigId.Equals(bObj.Id));
+      DtoToEntity(bObj, cc);
+      Context.SubmitChanges();
+    }
+
+    #endregion
+
+    public override ClientConfig DtoToEntity(ClientConfigDto source, ClientConfig target) {
+      if (source == null)
+        return null;
+      if (target == null)
+        target = new ClientConfig();
+
+      target.ClientConfigId = source.Id;
+      target.HeartBeatIntervall = source.HeartBeatIntervall;
+      
+      return target;
+    }
+
+    public override ClientConfigDto EntityToDto(ClientConfig source, ClientConfigDto target) {
+      if (source == null)
+        return null;
+      if (target == null)
+        target = new ClientConfigDto();
+
+      target.Id = source.ClientConfigId;
+      target.HeartBeatIntervall = source.HeartBeatIntervall;
+
+      return target;
+
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Hive.Server.LINQDataAccess/3.2/ClientDao.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.LINQDataAccess/3.2/ClientDao.cs	(revision 3010)
+++ /trunk/sources/HeuristicLab.Hive.Server.LINQDataAccess/3.2/ClientDao.cs	(revision 3011)
@@ -4,59 +4,41 @@
 using System.Text;
 using HeuristicLab.Hive.Contracts.BusinessObjects;
+using HeuristicLab.Hive.Server.DataAccess;
+using System.Threading;
 
 namespace HeuristicLab.Hive.Server.LINQDataAccess {
-  public class ClientDao: BaseDao, IClientDao {
+  public class ClientDao: BaseDao<ClientDto, Client>, IClientDao {
 
     public ClientDao() {      
     }
 
-    public ClientInfo FindById(Guid id) {
+    public ClientDto 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)
-                }
+              select EntityToDto(client, null)
             ).SingleOrDefault();      
     }
 
-    public IEnumerable<ClientInfo> FindAll() {
+    public IEnumerable<ClientDto> 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)
-                               }
+                EntityToDto(client, null)
              ).ToList();
     }
 
+    public IEnumerable<ClientDto> FindAllClientsWithoutGroup() {
+      return (from client in Context.Clients
+              where client.Resource.ClientGroup_Resources.Count == 0
+              select EntityToDto(client, null)).ToList();
+    }
+
+    public ClientDto GetClientForJob(Guid jobId) {
+      return (from job in Context.Jobs
+              where job.JobId.Equals(jobId)
+              select EntityToDto(job.Client, null)).SingleOrDefault();
+    }
  
-    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)
-                            };
-
+    public ClientDto Insert(ClientDto info) {
+      Client c = DtoToEntity(info, null);      
       Context.Clients.InsertOnSubmit(c);
       Context.SubmitChanges();
@@ -65,29 +47,61 @@
     }
 
-    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);
+    //Cascading delete takes care of the rest
+    public void Delete(ClientDto info) {
+      Resource res = Context.Resources.SingleOrDefault(c => c.ResourceId.Equals(info.Id));            
+      Context.Resources.DeleteOnSubmit(res);
       Context.SubmitChanges();
     }
 
+    public void Update(ClientDto info) {
+      Client client = Context.Clients.SingleOrDefault(c => c.ResourceId.Equals(info.Id));
+      DtoToEntity(info, client);
+      try {
+        Console.WriteLine("Sending from thread: " + Thread.CurrentThread.ManagedThreadId);
+        Context.SubmitChanges();
+      } catch (System.Data.Linq.ChangeConflictException cce) {
+        Console.WriteLine(cce);        
+      }
+    }
 
+    public override Client DtoToEntity(ClientDto source, Client target) {
+      if (source == null)
+        return null;
+      if (target == null) 
+        target = new Client();
+      
+      target.CPUSpeed = source.CpuSpeedPerCore;
+      
+      if(target.Resource == null)
+        target.Resource = new Resource();
 
-    #region IGenericDao<ClientInfo,Client> Members
+      target.FreeMemory = source.FreeMemory;
+      target.Resource.Name = source.Name;
+      target.Resource.ResourceId = source.Id;
 
+      target.Login = source.Login;
+      target.Memory = source.Memory;
+      target.NumberOfCores = source.NrOfCores;
+      target.NumberOfFreeCores = source.NrOfFreeCores;
+      target.Status = Enum.GetName(typeof(State), source.State);
+      return target;
+    }
 
-
-    #endregion
+    public override ClientDto EntityToDto(Client source, ClientDto target) {
+      if (source == null)
+        return null;
+      if(target == null) 
+        target = new ClientDto();
+      target.CpuSpeedPerCore = source.CPUSpeed;
+      target.FreeMemory = source.FreeMemory;
+      target.Id = source.ResourceId;
+      target.Login = source.Login;
+      target.Memory = source.Memory;
+      target.Name = source.Resource.Name;
+      target.NrOfCores = source.NumberOfCores;
+      target.NrOfFreeCores = source.NumberOfFreeCores;
+      target.State = (State) Enum.Parse(typeof (State), source.Status);
+      return target;
+    }
   }
 }
Index: /trunk/sources/HeuristicLab.Hive.Server.LINQDataAccess/3.2/ClientGroupDao.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.LINQDataAccess/3.2/ClientGroupDao.cs	(revision 3011)
+++ /trunk/sources/HeuristicLab.Hive.Server.LINQDataAccess/3.2/ClientGroupDao.cs	(revision 3011)
@@ -0,0 +1,143 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+using HeuristicLab.Hive.Server.DataAccess;
+
+namespace HeuristicLab.Hive.Server.LINQDataAccess {
+  public class ClientGroupDao : BaseDao<ClientGroupDto, ClientGroup>, IClientGroupDao {
+
+
+    #region IGenericDao<ClientGroupDto,ClientGroup> Members
+
+    public ClientGroupDto FindById(Guid id) {
+      return (from cc in Context.ClientGroups
+              where cc.ResourceId.Equals(id)
+              select EntityToDto(cc, null)).SingleOrDefault();
+    }
+
+
+    public IEnumerable<ClientGroupDto> FindAll() {
+      return (from cc in Context.ClientGroups
+              select EntityToDto(cc, null)).ToList();
+    }
+
+    public ClientGroupDto Insert(ClientGroupDto bObj) {
+      //Auto GUID is disabled for Ressource... thx to the clients... grml      
+      if(bObj.Id == Guid.Empty)
+        bObj.Id = Guid.NewGuid();
+
+      ClientGroup cc = DtoToEntity(bObj, null);
+      Context.ClientGroups.InsertOnSubmit(cc);
+      Context.SubmitChanges();
+      bObj.Id = cc.ResourceId;
+      return bObj;
+    }
+
+    public void Delete(ClientGroupDto bObj) {
+      
+      //Deleting all references
+      Context.ClientGroup_Resources.DeleteAllOnSubmit(Context.ClientGroup_Resources.Where(cg => cg.ClientGroupId.Equals(bObj.Id)));
+
+      Resource res = Context.Resources.SingleOrDefault(c => c.ResourceId.Equals(bObj.Id));
+
+      Context.Resources.DeleteOnSubmit(res);
+      Context.SubmitChanges();
+    }
+
+    public void Update(ClientGroupDto bObj) {
+      ClientGroup client = Context.ClientGroups.SingleOrDefault(c => c.ResourceId.Equals(bObj.Id));
+      DtoToEntity(bObj, client);
+      Context.SubmitChanges();
+    }
+
+    public void AddRessourceToClientGroup(Guid resource, Guid clientGroupId) {
+      ClientGroup cg = Context.ClientGroups.SingleOrDefault(c => c.ResourceId.Equals(clientGroupId));
+      Resource res = Context.Resources.SingleOrDefault(r => r.ResourceId.Equals(resource));
+      cg.ClientGroup_Resources.Add(new ClientGroup_Resource { ClientGroup = cg, Resource = res });
+      Context.SubmitChanges();
+    }
+
+    public void RemoveRessourceFromClientGroup(Guid resource, Guid clientGroupId) {
+      ClientGroup_Resource cgr =
+        Context.ClientGroup_Resources.SingleOrDefault(
+          cg => cg.ResourceId.Equals(resource) && cg.ClientGroupId.Equals(clientGroupId));
+      Context.ClientGroup_Resources.DeleteOnSubmit(cgr);
+      Context.SubmitChanges();
+    }
+
+    public IEnumerable<ClientGroupDto> MemberOf(ClientDto client) {
+      return (from cgr in Context.ClientGroup_Resources
+              where cgr.ResourceId.Equals(client.Id)
+              select EntityToDto(cgr.ClientGroup, null)).ToList();
+    }
+
+    public IEnumerable<ClientGroupDto> FindAllWithSubGroupsAndClients() {
+      List<ClientGroupDto> groupList = new List<ClientGroupDto>();
+
+      var q = (from cg in Context.ClientGroups
+               where !Context.ClientGroup_Resources.Any(cgr => cgr.ResourceId.Equals(cg.ResourceId))
+               select cg);
+
+      foreach (ClientGroup cg in q) {
+        ClientGroupDto cgd = EntityToDto(cg, null);
+        groupList.Add(cgd);
+        FillSubGroupsAndClientsRecursivly(cgd, cg.ClientGroup_Resources);        
+      }
+      return groupList;
+    }
+
+    private void FillSubGroupsAndClientsRecursivly(ClientGroupDto parentClientGroup, System.Data.Linq.EntitySet<ClientGroup_Resource> parentResourceSet) {
+      ClientDao cd = new ClientDao();      
+      //Get all the Groups
+      
+      var qGroups = (from cg in Context.ClientGroups
+               where cg.Resource.ClientGroup_Resources.Any(cgr => cgr.ClientGroupId.Equals(parentClientGroup.Id))
+               select cg);
+
+      foreach (ClientGroup cg in qGroups) {
+        ClientGroupDto cgd = EntityToDto(cg, null);
+        parentClientGroup.Resources.Add(cgd);
+        FillSubGroupsAndClientsRecursivly(cgd, cg.ClientGroup_Resources);
+      }
+
+      //get the clients
+      var qClients = (from cl in Context.Clients
+               where cl.Resource.ClientGroup_Resources.Any(cgr => cgr.ClientGroupId.Equals(parentClientGroup.Id))
+               select cl);
+      foreach (Client client in qClients) {
+        parentClientGroup.Resources.Add(cd.EntityToDto(client, null));                        
+      }
+     
+    }
+
+    #endregion
+
+    public override ClientGroup DtoToEntity(ClientGroupDto source, ClientGroup target) {
+      if (source == null)
+        return null;
+      if (target == null)
+        target = new ClientGroup();
+      if (target.Resource == null)
+        target.Resource = new Resource();
+
+      target.Resource.Name = source.Name;
+      target.Resource.ResourceId = source.Id;
+
+      return target;
+    }
+
+    public override ClientGroupDto EntityToDto(ClientGroup source, ClientGroupDto target) {
+      if (source == null)
+        return null;
+      if (target == null)
+        target = new ClientGroupDto();
+
+      target.Id = source.ResourceId;
+      target.Name = source.Resource.Name;
+
+      return target;
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Hive.Server.LINQDataAccess/3.2/ContextFactory.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.LINQDataAccess/3.2/ContextFactory.cs	(revision 3010)
+++ /trunk/sources/HeuristicLab.Hive.Server.LINQDataAccess/3.2/ContextFactory.cs	(revision 3011)
@@ -15,4 +15,7 @@
         return _hiveDataContext;        
       } 
+      set {
+        _hiveDataContext = value;
+      }
     }
   }
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 3010)
+++ /trunk/sources/HeuristicLab.Hive.Server.LINQDataAccess/3.2/HeuristicLab.Hive.Server.LINQDataAccess-3.2.csproj	(revision 3011)
@@ -87,5 +87,7 @@
   <ItemGroup>
     <Compile Include="BaseDao.cs" />
+    <Compile Include="ClientConfigDao.cs" />
     <Compile Include="ClientDao.cs" />
+    <Compile Include="ClientGroupDao.cs" />
     <Compile Include="ContextFactory.cs" />
     <Compile Include="Hive.designer.cs">
@@ -94,8 +96,7 @@
       <DependentUpon>Hive.dbml</DependentUpon>
     </Compile>
-    <Compile Include="IClientDao.cs" />
-    <Compile Include="IGenericDao.cs" />
-    <Compile Include="IJobDao.cs" />
+    <Compile Include="JobDao.cs" />
     <Compile Include="LINQDataAccessPlugin.cs" />
+    <Compile Include="PluginInfoDao.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
     <Compile Include="Properties\Settings.Designer.cs">
@@ -122,4 +123,8 @@
       <Project>{134F93D7-E7C8-4ECD-9923-7F63259A60D8}</Project>
       <Name>HeuristicLab.Hive.Contracts-3.2</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Hive.Server.DataAccess\3.2\HeuristicLab.Hive.Server.DataAccess-3.2.csproj">
+      <Project>{4D5A2A16-66C2-431D-9AA3-BD3041E64B84}</Project>
+      <Name>HeuristicLab.Hive.Server.DataAccess-3.2</Name>
     </ProjectReference>
     <ProjectReference Include="..\..\HeuristicLab.PluginInfrastructure\HeuristicLab.PluginInfrastructure.csproj">
Index: /trunk/sources/HeuristicLab.Hive.Server.LINQDataAccess/3.2/Hive.dbml
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.LINQDataAccess/3.2/Hive.dbml	(revision 3010)
+++ /trunk/sources/HeuristicLab.Hive.Server.LINQDataAccess/3.2/Hive.dbml	(revision 3011)
@@ -51,5 +51,5 @@
       <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="SerializedJob" Type="System.Data.Linq.Binary" DbType="VarBinary(MAX)" CanBeNull="true" UpdateCheck="Never" IsDelayLoaded="true" />
       <Column Name="DateCreated" Type="System.DateTime" DbType="DateTime" CanBeNull="true" />
       <Column Name="DateCalculated" Type="System.DateTime" DbType="DateTime" CanBeNull="true" />
@@ -58,6 +58,6 @@
       <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" />
+      <Column Name="CoresNeeded" Type="System.Int32" DbType="Int" CanBeNull="false" />
+      <Column Name="MemoryNeeded" Type="System.Int32" DbType="Int" CanBeNull="false" />
       <Association Name="Job_AssignedResource" Member="AssignedResources" ThisKey="JobId" OtherKey="JobId" Type="AssignedResource" />
       <Association Name="Job_Job" Member="Jobs" ThisKey="JobId" OtherKey="ParentJobId" Type="Job" />
@@ -88,5 +88,5 @@
       <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" />
+      <Column Name="RequiredPluginId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" IsDbGenerated="true" CanBeNull="false" UpdateCheck="Never" />
       <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" />
@@ -95,5 +95,5 @@
   <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="ResourceId" AutoSync="OnInsert" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="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" />
Index: /trunk/sources/HeuristicLab.Hive.Server.LINQDataAccess/3.2/Hive.dbml.layout
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.LINQDataAccess/3.2/Hive.dbml.layout	(revision 3010)
+++ /trunk/sources/HeuristicLab.Hive.Server.LINQDataAccess/3.2/Hive.dbml.layout	(revision 3011)
@@ -132,5 +132,5 @@
       </nestedChildShapes>
     </classShape>
-    <associationConnector edgePoints="[(3.625 : 9.70755126953125); (2.75 : 9.70755126953125)]" fixedFrom="Algorithm" fixedTo="Algorithm">
+    <associationConnector edgePoints="[(3.625 : 9.70755126953125); (2.75 : 9.70755126953125)]" fixedFrom="NotFixed" fixedTo="NotFixed">
       <AssociationMoniker Name="/HiveDataContext/Client/Client_UptimeStatistic" />
       <nodes>
@@ -139,5 +139,5 @@
       </nodes>
     </associationConnector>
-    <associationConnector edgePoints="[(5.625 : 8.78770182291667); (9 : 8.78770182291667)]" fixedFrom="Algorithm" fixedTo="Algorithm">
+    <associationConnector edgePoints="[(5.625 : 8.78770182291667); (9 : 8.78770182291667)]" fixedFrom="NotFixed" fixedTo="NotFixed">
       <AssociationMoniker Name="/HiveDataContext/Client/Client_Job" />
       <nodes>
@@ -146,5 +146,5 @@
       </nodes>
     </associationConnector>
-    <associationConnector edgePoints="[(4.5 : 6.94399251302083); (4.5 : 7.625)]" fixedFrom="Algorithm" fixedTo="Algorithm">
+    <associationConnector edgePoints="[(4.5 : 6.94399251302083); (4.5 : 7.625)]" fixedFrom="NotFixed" fixedTo="NotFixed">
       <AssociationMoniker Name="/HiveDataContext/Resource/Resource_Client" />
       <nodes>
@@ -153,5 +153,5 @@
       </nodes>
     </associationConnector>
-    <associationConnector edgePoints="[(4.625 : 11); (4.625 : 10.1651025390625)]" fixedFrom="Algorithm" fixedTo="Algorithm">
+    <associationConnector edgePoints="[(4.625 : 11); (4.625 : 10.1651025390625)]" fixedFrom="NotFixed" fixedTo="NotFixed">
       <AssociationMoniker Name="/HiveDataContext/ClientConfig/ClientConfig_Client" />
       <nodes>
Index: /trunk/sources/HeuristicLab.Hive.Server.LINQDataAccess/3.2/Hive.designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.LINQDataAccess/3.2/Hive.designer.cs	(revision 3010)
+++ /trunk/sources/HeuristicLab.Hive.Server.LINQDataAccess/3.2/Hive.designer.cs	(revision 3011)
@@ -604,5 +604,5 @@
 		}
 		
-		[Column(Storage="_UpDownTimeCalendar", DbType="Xml", UpdateCheck=UpdateCheck.Never)]
+		[Column(Storage="_UpDownTimeCalendar", DbType="Xml", CanBeNull=true, UpdateCheck=UpdateCheck.Never)]
 		public System.Xml.Linq.XElement UpDownTimeCalendar
 		{
@@ -1029,5 +1029,5 @@
 		private System.Nullable<double> _Percentage;
 		
-		private System.Data.Linq.Binary _SerializedJob;
+		private System.Data.Linq.Link<System.Data.Linq.Binary> _SerializedJob;
 		
 		private System.Nullable<System.DateTime> _DateCreated;
@@ -1043,7 +1043,7 @@
 		private System.Nullable<System.Guid> _UserId;
 		
-		private System.Nullable<int> _CoresNeeded;
-		
-		private System.Nullable<int> _MemoryNeeded;
+		private int _CoresNeeded;
+		
+		private int _MemoryNeeded;
 		
 		private EntitySet<AssignedResource> _AssignedResources;
@@ -1087,7 +1087,7 @@
     partial void OnUserIdChanging(System.Nullable<System.Guid> value);
     partial void OnUserIdChanged();
-    partial void OnCoresNeededChanging(System.Nullable<int> value);
+    partial void OnCoresNeededChanging(int value);
     partial void OnCoresNeededChanged();
-    partial void OnMemoryNeededChanging(System.Nullable<int> value);
+    partial void OnMemoryNeededChanging(int value);
     partial void OnMemoryNeededChanged();
     #endregion
@@ -1212,18 +1212,18 @@
 		}
 		
-		[Column(Storage="_SerializedJob", DbType="VarBinary(MAX)", UpdateCheck=UpdateCheck.Never)]
+		[Column(Storage="_SerializedJob", DbType="VarBinary(MAX)", CanBeNull=true, UpdateCheck=UpdateCheck.Never)]
 		public System.Data.Linq.Binary SerializedJob
 		{
 			get
 			{
-				return this._SerializedJob;
-			}
-			set
-			{
-				if ((this._SerializedJob != value))
+				return this._SerializedJob.Value;
+			}
+			set
+			{
+				if ((this._SerializedJob.Value != value))
 				{
 					this.OnSerializedJobChanging(value);
 					this.SendPropertyChanging();
-					this._SerializedJob = value;
+					this._SerializedJob.Value = value;
 					this.SendPropertyChanged("SerializedJob");
 					this.OnSerializedJobChanged();
@@ -1357,5 +1357,5 @@
 		
 		[Column(Storage="_CoresNeeded", DbType="Int")]
-		public System.Nullable<int> CoresNeeded
+		public int CoresNeeded
 		{
 			get
@@ -1377,5 +1377,5 @@
 		
 		[Column(Storage="_MemoryNeeded", DbType="Int")]
-		public System.Nullable<int> MemoryNeeded
+		public int MemoryNeeded
 		{
 			get
@@ -1953,5 +1953,5 @@
 		}
 		
-		[Column(Storage="_RequiredPluginId", AutoSync=AutoSync.OnInsert, DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true, IsDbGenerated=true)]
+		[Column(Storage="_RequiredPluginId", AutoSync=AutoSync.OnInsert, DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true, IsDbGenerated=true, UpdateCheck=UpdateCheck.Never)]
 		public System.Guid RequiredPluginId
 		{
@@ -2099,5 +2099,5 @@
 		}
 		
-		[Column(Storage="_ResourceId", AutoSync=AutoSync.OnInsert, DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true, IsDbGenerated=true)]
+		[Column(Storage="_ResourceId", AutoSync=AutoSync.OnInsert, DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true)]
 		public System.Guid ResourceId
 		{
Index: unk/sources/HeuristicLab.Hive.Server.LINQDataAccess/3.2/IClientDao.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.LINQDataAccess/3.2/IClientDao.cs	(revision 3010)
+++ 	(revision )
@@ -1,10 +1,0 @@
-﻿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: unk/sources/HeuristicLab.Hive.Server.LINQDataAccess/3.2/IGenericDao.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.LINQDataAccess/3.2/IGenericDao.cs	(revision 3010)
+++ 	(revision )
@@ -1,15 +1,0 @@
-﻿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: unk/sources/HeuristicLab.Hive.Server.LINQDataAccess/3.2/IJobDao.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.LINQDataAccess/3.2/IJobDao.cs	(revision 3010)
+++ 	(revision )
@@ -1,10 +1,0 @@
-﻿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/JobDao.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.LINQDataAccess/3.2/JobDao.cs	(revision 3011)
+++ /trunk/sources/HeuristicLab.Hive.Server.LINQDataAccess/3.2/JobDao.cs	(revision 3011)
@@ -0,0 +1,166 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+using System.Data.Linq;
+using HeuristicLab.Hive.Server.DataAccess;
+using System.IO;
+using System.Data.SqlClient;
+
+namespace HeuristicLab.Hive.Server.LINQDataAccess {
+  public class JobDao: BaseDao<JobDto, Job>, IJobDao {
+   
+    #region IGenericDao<JobDto,Job> Members
+
+    public JobDto FindById(Guid id) {
+      return (from job in Context.Jobs
+              where job.JobId.Equals(id)
+              select EntityToDto(job, null)).SingleOrDefault();
+    }
+
+    public IEnumerable<JobDto> FindAll() {
+      return (from job in Context.Jobs
+              select EntityToDto(job, null)).ToList();
+    }
+
+    public byte[] GetBinaryJobFile(Guid jobId) {
+      return (from job in Context.Jobs
+              where job.JobId.Equals(jobId)
+              select job.SerializedJob).SingleOrDefault().ToArray();
+    }
+
+    public JobDto Insert(JobDto bObj) {
+      Job j = DtoToEntity(bObj, null);
+      Context.Jobs.InsertOnSubmit(j);
+      Context.SubmitChanges();
+      bObj.Id = j.JobId;
+      return bObj;
+    }
+
+    public SerializedJob InsertWithAttachedJob(SerializedJob job) {
+      Job j = DtoToEntity(job.JobInfo, null);
+      j.SerializedJob = job.SerializedJobData;
+      Context.Jobs.InsertOnSubmit(j);
+      Context.SubmitChanges();
+      job.JobInfo.Id = j.JobId;
+      return job;
+
+    }
+
+    public void Delete(JobDto bObj) {
+      Job job = Context.Jobs.SingleOrDefault(j => j.JobId.Equals(bObj.Id));
+      Context.Jobs.DeleteOnSubmit(job);
+      Context.SubmitChanges();
+    }
+
+    public void Update(JobDto bObj) {
+      Job job = Context.Jobs.SingleOrDefault(j => j.JobId.Equals(bObj.Id));
+      DtoToEntity(bObj, job);
+      Context.SubmitChanges();
+    }
+
+    public IEnumerable<JobDto> FindActiveJobsOfClient(ClientDto client) {
+      return (from j in Context.Jobs
+              where (j.JobState == Enum.GetName(typeof (State), State.calculating) ||
+                     j.JobState == Enum.GetName(typeof (State), State.abort) ||
+                     j.JobState == Enum.GetName(typeof (State), State.requestSnapshot) ||
+                     j.JobState == Enum.GetName(typeof (State), State.requestSnapshotSent)) &&
+                    (j.ResourceId.Equals(client.Id))
+              select EntityToDto(j, null)).ToList();
+    }
+    public IEnumerable<JobDto> FindFittingJobsForClient(State state, int freeCores, int freeMemory) {
+      return (from j in Context.Jobs
+              where j.JobState == Enum.GetName(typeof (State), State.offline) &&
+                    j.CoresNeeded <= freeCores &&
+                    j.MemoryNeeded <= freeMemory
+              select EntityToDto(j, null)).ToList();
+      
+    }
+
+    public IEnumerable<JobDto> GetJobsByState(State state) {
+      return (from j in Context.Jobs
+              where (j.JobState == Enum.GetName(typeof (State), state))
+              select EntityToDto(j, null)).ToList();
+    }
+
+    public void AssignClientToJob(Guid clientId, Guid jobId) {
+      Client c = Context.Clients.SingleOrDefault(client => client.ResourceId.Equals(clientId));
+      Job j = Context.Jobs.SingleOrDefault(job => job.JobId.Equals(jobId));
+      c.Jobs.Add(j);
+      j.Client = c;
+      Context.SubmitChanges();      
+    }
+
+    public void SetJobOffline(JobDto job) {
+      Job j = Context.Jobs.SingleOrDefault(jq => jq.JobId.Equals(job.Id));
+      j.Client = null;
+      j.JobState = Enum.GetName(typeof(State), State.offline); 
+      Context.SubmitChanges();
+    }
+
+    public Stream GetSerializedJobStream(Guid jobId) {
+      HiveDataContext hdc = new HiveDataContext();
+      hdc.Transaction = null;
+
+      VarBinarySource source =
+        new VarBinarySource(
+          hdc.Connection as SqlConnection, null,
+          "Job", "SerializedJob", "JobId", jobId);
+
+      return new VarBinaryStream(source);
+    }
+
+    #endregion
+
+    public override Job DtoToEntity(JobDto source, Job target) {
+      if (source == null)
+        return null;
+      if (target == null)
+        target = new Job();
+
+      target.CoresNeeded = source.CoresNeeded;
+      target.MemoryNeeded = source.MemoryNeeded;
+
+      target.DateCalculated = source.DateCalculated;
+      target.DateCreated = source.DateCreated;
+      target.JobId = source.Id;
+
+      target.Percentage = source.Percentage;
+
+      target.Priority = source.Priority;
+      target.JobState = Enum.GetName(typeof(State), source.State);
+      return target;
+    }
+
+    //Assigned ressources are not used atm!
+    //Client is not used ATM - not sure when we stopped using those...
+    public override JobDto EntityToDto(Job source, JobDto target) {
+      if (source == null)
+        return null;
+      if(target == null)
+        target = new JobDto();
+    
+      //target.ParentJob = null;
+      //target.PluginsNeeded = null;
+      //target.Client = null;
+      //target.Project = null;
+      
+      target.CoresNeeded = source.CoresNeeded;
+      target.MemoryNeeded = source.MemoryNeeded;
+
+
+
+      target.DateCalculated = source.DateCalculated;
+      target.DateCreated = source.DateCreated;
+      target.Id = source.JobId;
+      
+          
+      target.Percentage = source.Percentage;
+      
+      target.Priority = source.Priority;
+      target.State = (State) Enum.Parse(typeof (State), source.JobState);
+      return target;
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Hive.Server.LINQDataAccess/3.2/LINQDataAccessPlugin.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.LINQDataAccess/3.2/LINQDataAccessPlugin.cs	(revision 3010)
+++ /trunk/sources/HeuristicLab.Hive.Server.LINQDataAccess/3.2/LINQDataAccessPlugin.cs	(revision 3011)
@@ -9,4 +9,6 @@
   [PluginFile("HeuristicLab.Hive.Server.LINQDataAccess-3.2.dll", PluginFileType.Assembly)]
   [PluginDependency("HeuristicLab.Core-3.2")]
+  [PluginDependency("HeuristicLab.Hive.Contracts-3.2")]
+  [PluginDependency("HeuristicLab.Hive.Server.DataAccess-3.2")]
   public class LINQDataAccessPlugin: PluginBase {
   }
Index: /trunk/sources/HeuristicLab.Hive.Server.LINQDataAccess/3.2/PluginInfoDao.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.LINQDataAccess/3.2/PluginInfoDao.cs	(revision 3011)
+++ /trunk/sources/HeuristicLab.Hive.Server.LINQDataAccess/3.2/PluginInfoDao.cs	(revision 3011)
@@ -0,0 +1,96 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+using HeuristicLab.Hive.Server.DataAccess;
+
+namespace HeuristicLab.Hive.Server.LINQDataAccess {
+  public class PluginInfoDao: BaseDao<HivePluginInfoDto, PluginInfo>, IPluginInfoDao {
+    #region IGenericDao<HivePluginInfoDto,PluginInfo> Members
+
+    public HivePluginInfoDto FindById(Guid id) {
+      return (from pi in Context.PluginInfos
+              where pi.PluginId.Equals(id)
+              select EntityToDto(pi, null)
+             ).SingleOrDefault();  
+    }
+
+    public IEnumerable<HivePluginInfoDto> FindAll() {
+      return (from pi in Context.PluginInfos              
+              select EntityToDto(pi, null)
+       ).ToList();  
+    }
+
+    public HivePluginInfoDto Insert(HivePluginInfoDto bObj) {
+      PluginInfo pi = DtoToEntity(bObj, null);
+      Context.PluginInfos.InsertOnSubmit(pi);
+      Context.SubmitChanges();
+      bObj.Id = pi.PluginId;
+      return bObj;
+    }
+
+    public void Delete(HivePluginInfoDto bObj) {
+      PluginInfo pi = Context.PluginInfos.SingleOrDefault(p => p.PluginId.Equals(bObj.Id));
+      Context.PluginInfos.DeleteOnSubmit(pi);      
+    }
+
+    public void Update(HivePluginInfoDto bObj) {
+      PluginInfo pi = Context.PluginInfos.SingleOrDefault(p => p.PluginId.Equals(bObj.Id));
+      DtoToEntity(bObj, pi);
+      Context.SubmitChanges();
+    }
+
+    public void InsertPluginDependenciesForJob(JobDto jobDto) {
+      foreach (HivePluginInfoDto info in jobDto.PluginsNeeded) {        
+        PluginInfo dbpi =
+          Context.PluginInfos.Where(pi => pi.Name.Equals(info.Name) && pi.Version == info.Version).SingleOrDefault();
+        if (dbpi == null) {
+          dbpi = new PluginInfo {
+                                  BuildDate = info.BuildDate.ToString(),
+                                  Name = info.Name,
+                                  Version = info.Version
+                                };
+          Context.PluginInfos.InsertOnSubmit(dbpi);
+          Context.SubmitChanges();
+        }
+
+        RequiredPlugin rq = new RequiredPlugin();
+        rq.JobId = jobDto.Id;
+        rq.PluginInfo = dbpi;
+        Context.RequiredPlugins.InsertOnSubmit(rq);
+        Context.SubmitChanges();
+      }
+    }
+
+    #endregion
+
+    // Build Date not mapped - won't matter anyway, it's a obsolete field.
+    public override PluginInfo DtoToEntity(HivePluginInfoDto source, PluginInfo target) {
+      if (source == null)
+        return null;
+      if (target == null)
+        target = new PluginInfo();
+
+      target.Name = source.Name;
+      target.PluginId = source.Id;
+      target.Version = source.Version;      
+
+      return target;
+
+    }
+
+    public override HivePluginInfoDto EntityToDto(PluginInfo source, HivePluginInfoDto target) {
+      if (source == null)
+        return null;
+      if (target == null)
+        target = new HivePluginInfoDto();
+
+      target.Name = source.Name;
+      target.Id = source.PluginId;
+      target.Version = source.Version;
+
+      return target;
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Hive.Server.Scheduler/3.2/HeuristicLab.Hive.Server.Scheduler-3.2.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.Scheduler/3.2/HeuristicLab.Hive.Server.Scheduler-3.2.csproj	(revision 3010)
+++ /trunk/sources/HeuristicLab.Hive.Server.Scheduler/3.2/HeuristicLab.Hive.Server.Scheduler-3.2.csproj	(revision 3011)
@@ -80,5 +80,4 @@
   </ItemGroup>
   <ItemGroup>
-    <Compile Include="DefaultScheduler.cs" />
     <Compile Include="HiveServerSchedulerPlugin.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
Index: /trunk/sources/HeuristicLab.Hive.Server/3.2/App.config
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server/3.2/App.config	(revision 3010)
+++ /trunk/sources/HeuristicLab.Hive.Server/3.2/App.config	(revision 3011)
@@ -7,31 +7,3 @@
     </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 3010)
+++ /trunk/sources/HeuristicLab.Hive.Server/3.2/HeuristicLab.Hive.Server-3.2.csproj	(revision 3011)
@@ -88,4 +88,7 @@
       <RequiredTargetFramework>3.5</RequiredTargetFramework>
     </Reference>
+    <Reference Include="System.Data.Linq">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
     <Reference Include="System.Runtime.Serialization">
       <RequiredTargetFramework>3.0</RequiredTargetFramework>
@@ -94,4 +97,5 @@
       <RequiredTargetFramework>3.0</RequiredTargetFramework>
     </Reference>
+    <Reference Include="System.Transactions" />
     <Reference Include="System.Xml.Linq">
       <RequiredTargetFramework>3.5</RequiredTargetFramework>
@@ -156,4 +160,8 @@
       <Name>HeuristicLab.Hive.Server.Core-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>
Index: /trunk/sources/HeuristicLab.Hive.Server/3.2/HiveServerPlugin.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server/3.2/HiveServerPlugin.cs	(revision 3010)
+++ /trunk/sources/HeuristicLab.Hive.Server/3.2/HiveServerPlugin.cs	(revision 3011)
@@ -30,6 +30,8 @@
   [PluginFile("HeuristicLab.Hive.Server-3.2.dll", PluginFileType.Assembly)]
   [PluginDependency("HeuristicLab.Core-3.2")]
+  [PluginDependency("HeuristicLab.DataAccess-3.2")]
   [PluginDependency("HeuristicLab.Hive.Server.Core-3.2")]
   [PluginDependency("HeuristicLab.Hive.Contracts-3.2")]
+  [PluginDependency("HeuristicLab.Hive.Server.LINQDataAccess-3.2")]
   [PluginDependency("HeuristicLab.SpringNET", "1.3.0.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 3010)
+++ /trunk/sources/HeuristicLab.Hive.Server/3.2/ServiceCallInterception.cs	(revision 3011)
@@ -5,4 +5,6 @@
 using AopAlliance.Intercept;
 using System.Threading;
+using HeuristicLab.Hive.Server.LINQDataAccess;
+using System.Transactions;
 
 namespace HeuristicLab.Hive.Server {
@@ -12,6 +14,19 @@
     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);
+
+      Object obj;
+      
+      using (TransactionScope scope = new TransactionScope()) {
+        try {
+          obj = invocation.Proceed();
+          scope.Complete();
+        } finally {
+          ContextFactory.Context.Dispose();
+          Console.WriteLine("setting old context null");
+          ContextFactory.Context = null;
+          Console.WriteLine("Disposing old Context");      
+        }
+      }     
+      Console.WriteLine(DateTime.Now + " - " + Thread.CurrentThread.ManagedThreadId + " - Leaving Method " + invocation.Method.Name);            
       return obj;
     }
Index: /trunk/sources/HeuristicLab/app.config
===================================================================
--- /trunk/sources/HeuristicLab/app.config	(revision 3010)
+++ /trunk/sources/HeuristicLab/app.config	(revision 3011)
@@ -3,5 +3,5 @@
     <configSections>
         <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
-            <section name="HeuristicLab.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
+            <section name="HeuristicLab.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />          
         </sectionGroup>
     </configSections>
@@ -32,3 +32,37 @@
     </HeuristicLab.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="clientFacade" singleton="false"
+              type="HeuristicLab.Hive.Server.Core.ClientFacade, HeuristicLab.Hive.Server.Core-3.2" />
+
+      <object id="executionEngineFacade" singleton="false"
+              type="HeuristicLab.Hive.Server.Core.ExecutionEngineFacade, HeuristicLab.Hive.Server.Core-3.2" />
+
+      <object id="serverConsoleFacade" singleton="false"
+              type="HeuristicLab.Hive.Server.Core.ServerConsoleFacade, 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>
+            <value>HeuristicLab.Hive.Server.Core.ExecutionEngineFacade.*</value>
+            <value>HeuristicLab.Hive.Server.Core.ServerConsoleFacade.*</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>
