Index: /trunk/sources/HeuristicLab.Hive.Client.Communication/HeuristicLab.Hive.Client.Communication.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Client.Communication/HeuristicLab.Hive.Client.Communication.csproj	(revision 1378)
+++ /trunk/sources/HeuristicLab.Hive.Client.Communication/HeuristicLab.Hive.Client.Communication.csproj	(revision 1379)
@@ -122,6 +122,8 @@
     <None Include="Properties\DataSources\HeuristicLab.Hive.Contracts.ResponseHB.datasource" />
     <None Include="Properties\DataSources\HeuristicLab.Hive.Contracts.ResponseJob.datasource" />
+    <None Include="Properties\DataSources\HeuristicLab.Hive.Contracts.ResponsePlugin.datasource" />
     <None Include="Properties\DataSources\HeuristicLab.Hive.Contracts.ResponseResultReceived.datasource" />
-    <None Include="Service References\ServerService\Arrays1.xsd" />
+    <None Include="Service References\ServerService\Arrays.xsd" />
+    <None Include="Service References\ServerService\HeuristicLab.DataAccess.xsd" />
     <None Include="Service References\ServerService\HeuristicLab.Hive.Contracts.BusinessObjects1.xsd" />
     <None Include="Service References\ServerService\HeuristicLab.Hive.Contracts1.xsd" />
Index: /trunk/sources/HeuristicLab.Hive.Client.Communication/Properties/DataSources/HeuristicLab.Hive.Contracts.ResponsePlugin.datasource
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Client.Communication/Properties/DataSources/HeuristicLab.Hive.Contracts.ResponsePlugin.datasource	(revision 1379)
+++ /trunk/sources/HeuristicLab.Hive.Client.Communication/Properties/DataSources/HeuristicLab.Hive.Contracts.ResponsePlugin.datasource	(revision 1379)
@@ -0,0 +1,10 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<!--
+    This file is automatically generated by Visual Studio .Net. It is 
+    used to store generic object data source configuration information.  
+    Renaming the file extension or editing the content of this file may   
+    cause the file to be unrecognizable by the program.
+-->
+<GenericObjectDataSource DisplayName="ResponsePlugin" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
+   <TypeInfo>HeuristicLab.Hive.Contracts.ResponsePlugin, HeuristicLab.Hive.Contracts-3.2, Version=3.2.0.1369, Culture=neutral, PublicKeyToken=ba48961d6f65dcec</TypeInfo>
+</GenericObjectDataSource>
Index: /trunk/sources/HeuristicLab.Hive.Client.Communication/Service References/ServerService/Arrays.xsd
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Client.Communication/Service References/ServerService/Arrays.xsd	(revision 1379)
+++ /trunk/sources/HeuristicLab.Hive.Client.Communication/Service References/ServerService/Arrays.xsd	(revision 1379)
@@ -0,0 +1,27 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:tns="http://schemas.microsoft.com/2003/10/Serialization/Arrays" elementFormDefault="qualified" targetNamespace="http://schemas.microsoft.com/2003/10/Serialization/Arrays" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:complexType name="ArrayOfKeyValueOflongdouble">
+    <xs:annotation>
+      <xs:appinfo>
+        <IsDictionary xmlns="http://schemas.microsoft.com/2003/10/Serialization/">true</IsDictionary>
+      </xs:appinfo>
+    </xs:annotation>
+    <xs:sequence>
+      <xs:element minOccurs="0" maxOccurs="unbounded" name="KeyValueOflongdouble">
+        <xs:complexType>
+          <xs:sequence>
+            <xs:element name="Key" type="xs:long" />
+            <xs:element name="Value" type="xs:double" />
+          </xs:sequence>
+        </xs:complexType>
+      </xs:element>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="ArrayOfKeyValueOflongdouble" nillable="true" type="tns:ArrayOfKeyValueOflongdouble" />
+  <xs:complexType name="ArrayOfstring">
+    <xs:sequence>
+      <xs:element minOccurs="0" maxOccurs="unbounded" name="string" nillable="true" type="xs:string" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="ArrayOfstring" nillable="true" type="tns:ArrayOfstring" />
+</xs:schema>
Index: unk/sources/HeuristicLab.Hive.Client.Communication/Service References/ServerService/Arrays1.xsd
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Client.Communication/Service References/ServerService/Arrays1.xsd	(revision 1378)
+++ 	(revision )
@@ -1,21 +1,0 @@
-﻿<?xml version="1.0" encoding="utf-8"?>
-<xs:schema xmlns:tns="http://schemas.microsoft.com/2003/10/Serialization/Arrays" elementFormDefault="qualified" targetNamespace="http://schemas.microsoft.com/2003/10/Serialization/Arrays" xmlns:xs="http://www.w3.org/2001/XMLSchema">
-  <xs:complexType name="ArrayOfKeyValueOflongdouble">
-    <xs:annotation>
-      <xs:appinfo>
-        <IsDictionary xmlns="http://schemas.microsoft.com/2003/10/Serialization/">true</IsDictionary>
-      </xs:appinfo>
-    </xs:annotation>
-    <xs:sequence>
-      <xs:element minOccurs="0" maxOccurs="unbounded" name="KeyValueOflongdouble">
-        <xs:complexType>
-          <xs:sequence>
-            <xs:element name="Key" type="xs:long" />
-            <xs:element name="Value" type="xs:double" />
-          </xs:sequence>
-        </xs:complexType>
-      </xs:element>
-    </xs:sequence>
-  </xs:complexType>
-  <xs:element name="ArrayOfKeyValueOflongdouble" nillable="true" type="tns:ArrayOfKeyValueOflongdouble" />
-</xs:schema>
Index: /trunk/sources/HeuristicLab.Hive.Client.Communication/Service References/ServerService/HeuristicLab.DataAccess.xsd
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Client.Communication/Service References/ServerService/HeuristicLab.DataAccess.xsd	(revision 1379)
+++ /trunk/sources/HeuristicLab.Hive.Client.Communication/Service References/ServerService/HeuristicLab.DataAccess.xsd	(revision 1379)
@@ -0,0 +1,9 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:tns="http://schemas.datacontract.org/2004/07/HeuristicLab.DataAccess" elementFormDefault="qualified" targetNamespace="http://schemas.datacontract.org/2004/07/HeuristicLab.DataAccess" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:complexType name="PersistableObject">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="Id" type="xs:long" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="PersistableObject" nillable="true" type="tns:PersistableObject" />
+</xs:schema>
Index: /trunk/sources/HeuristicLab.Hive.Client.Communication/Service References/ServerService/HeuristicLab.Hive.Contracts.BusinessObjects1.xsd
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Client.Communication/Service References/ServerService/HeuristicLab.Hive.Contracts.BusinessObjects1.xsd	(revision 1378)
+++ /trunk/sources/HeuristicLab.Hive.Client.Communication/Service References/ServerService/HeuristicLab.Hive.Contracts.BusinessObjects1.xsd	(revision 1379)
@@ -2,4 +2,5 @@
 <xs:schema xmlns:tns="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.BusinessObjects" xmlns:ser="http://schemas.microsoft.com/2003/10/Serialization/" elementFormDefault="qualified" targetNamespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.BusinessObjects" xmlns:xs="http://www.w3.org/2001/XMLSchema">
   <xs:import namespace="http://schemas.microsoft.com/2003/10/Serialization/" />
+  <xs:import namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.DataAccess" />
   <xs:import namespace="http://schemas.microsoft.com/2003/10/Serialization/Arrays" />
   <xs:complexType name="ClientInfo">
@@ -22,5 +23,5 @@
   <xs:complexType name="Resource">
     <xs:complexContent mixed="false">
-      <xs:extension base="tns:HiveBaseObject">
+      <xs:extension xmlns:q1="http://schemas.datacontract.org/2004/07/HeuristicLab.DataAccess" base="q1:PersistableObject">
         <xs:sequence>
           <xs:element minOccurs="0" name="Name" nillable="true" type="xs:string" />
@@ -30,13 +31,7 @@
   </xs:complexType>
   <xs:element name="Resource" nillable="true" type="tns:Resource" />
-  <xs:complexType name="HiveBaseObject">
-    <xs:sequence>
-      <xs:element minOccurs="0" name="Id" type="xs:long" />
-    </xs:sequence>
-  </xs:complexType>
-  <xs:element name="HiveBaseObject" nillable="true" type="tns:HiveBaseObject" />
   <xs:complexType name="ClientConfig">
     <xs:complexContent mixed="false">
-      <xs:extension base="tns:HiveBaseObject">
+      <xs:extension xmlns:q2="http://schemas.datacontract.org/2004/07/HeuristicLab.DataAccess" base="q2:PersistableObject">
         <xs:sequence>
           <xs:element minOccurs="0" name="HeartBeatIntervall" type="xs:int" />
@@ -60,7 +55,7 @@
     <xs:sequence>
       <xs:element minOccurs="0" name="ClientId" type="ser:guid" />
-      <xs:element minOccurs="0" name="freeCores" type="xs:int" />
-      <xs:element minOccurs="0" name="freeMemory" type="xs:int" />
-      <xs:element xmlns:q1="http://schemas.microsoft.com/2003/10/Serialization/Arrays" minOccurs="0" name="jobProgress" nillable="true" type="q1:ArrayOfKeyValueOflongdouble" />
+      <xs:element minOccurs="0" name="FreeCores" type="xs:int" />
+      <xs:element minOccurs="0" name="FreeMemory" type="xs:int" />
+      <xs:element xmlns:q3="http://schemas.microsoft.com/2003/10/Serialization/Arrays" minOccurs="0" name="JobProgress" nillable="true" type="q3:ArrayOfKeyValueOflongdouble" />
     </xs:sequence>
   </xs:complexType>
@@ -68,5 +63,5 @@
   <xs:complexType name="Job">
     <xs:complexContent mixed="false">
-      <xs:extension base="tns:HiveBaseObject">
+      <xs:extension xmlns:q4="http://schemas.datacontract.org/2004/07/HeuristicLab.DataAccess" base="q4:PersistableObject">
         <xs:sequence>
           <xs:element minOccurs="0" name="Client" nillable="true" type="tns:ClientInfo" />
@@ -78,5 +73,5 @@
           <xs:element minOccurs="0" name="SerializedJob" nillable="true" type="xs:base64Binary" />
           <xs:element minOccurs="0" name="State" type="tns:State" />
-          <xs:element minOccurs="0" name="User" nillable="true" type="tns:User" />
+          <xs:element minOccurs="0" name="UserId" type="ser:guid" />
         </xs:sequence>
       </xs:extension>
@@ -84,23 +79,3 @@
   </xs:complexType>
   <xs:element name="Job" nillable="true" type="tns:Job" />
-  <xs:complexType name="User">
-    <xs:complexContent mixed="false">
-      <xs:extension base="tns:PermissionOwner">
-        <xs:sequence>
-          <xs:element minOccurs="0" name="Password" nillable="true" type="xs:string" />
-        </xs:sequence>
-      </xs:extension>
-    </xs:complexContent>
-  </xs:complexType>
-  <xs:element name="User" nillable="true" type="tns:User" />
-  <xs:complexType name="PermissionOwner">
-    <xs:complexContent mixed="false">
-      <xs:extension base="tns:HiveBaseObject">
-        <xs:sequence>
-          <xs:element minOccurs="0" name="Name" nillable="true" type="xs:string" />
-        </xs:sequence>
-      </xs:extension>
-    </xs:complexContent>
-  </xs:complexType>
-  <xs:element name="PermissionOwner" nillable="true" type="tns:PermissionOwner" />
 </xs:schema>
Index: /trunk/sources/HeuristicLab.Hive.Client.Communication/Service References/ServerService/HeuristicLab.Hive.Contracts1.xsd
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Client.Communication/Service References/ServerService/HeuristicLab.Hive.Contracts1.xsd	(revision 1378)
+++ /trunk/sources/HeuristicLab.Hive.Client.Communication/Service References/ServerService/HeuristicLab.Hive.Contracts1.xsd	(revision 1379)
@@ -66,3 +66,13 @@
   </xs:complexType>
   <xs:element name="ResponseResultReceived" nillable="true" type="tns:ResponseResultReceived" />
+  <xs:complexType name="ResponsePlugin">
+    <xs:complexContent mixed="false">
+      <xs:extension base="tns:Response">
+        <xs:sequence>
+          <xs:element minOccurs="0" name="Plugins" nillable="true" type="xs:base64Binary" />
+        </xs:sequence>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:element name="ResponsePlugin" nillable="true" type="tns:ResponsePlugin" />
 </xs:schema>
Index: /trunk/sources/HeuristicLab.Hive.Client.Communication/Service References/ServerService/Reference.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Client.Communication/Service References/ServerService/Reference.cs	(revision 1378)
+++ /trunk/sources/HeuristicLab.Hive.Client.Communication/Service References/ServerService/Reference.cs	(revision 1379)
@@ -20,4 +20,5 @@
         [System.ServiceModel.ServiceKnownTypeAttribute(typeof(HeuristicLab.Hive.Contracts.ResponseJob))]
         [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);
         
@@ -43,11 +44,19 @@
         HeuristicLab.Hive.Contracts.ResponseJob EndSendJob(System.IAsyncResult result);
         
-        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IClientCommunicator/ProcessJobResult", ReplyAction="http://tempuri.org/IClientCommunicator/ProcessJobResultResponse")]
-        HeuristicLab.Hive.Contracts.ResponseResultReceived ProcessJobResult(System.Guid clientId, long jobId, byte[] result, double percentage, System.Exception exception, bool finished);
-        
-        [System.ServiceModel.OperationContractAttribute(AsyncPattern=true, Action="http://tempuri.org/IClientCommunicator/ProcessJobResult", ReplyAction="http://tempuri.org/IClientCommunicator/ProcessJobResultResponse")]
-        System.IAsyncResult BeginProcessJobResult(System.Guid clientId, long jobId, byte[] result, double percentage, System.Exception exception, bool finished, System.AsyncCallback callback, object asyncState);
-        
-        HeuristicLab.Hive.Contracts.ResponseResultReceived EndProcessJobResult(System.IAsyncResult result);
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IClientCommunicator/StoreFinishedJobResult", ReplyAction="http://tempuri.org/IClientCommunicator/StoreFinishedJobResultResponse")]
+        HeuristicLab.Hive.Contracts.ResponseResultReceived StoreFinishedJobResult(System.Guid clientId, long jobId, byte[] result, double percentage, System.Exception exception);
+        
+        [System.ServiceModel.OperationContractAttribute(AsyncPattern=true, Action="http://tempuri.org/IClientCommunicator/StoreFinishedJobResult", ReplyAction="http://tempuri.org/IClientCommunicator/StoreFinishedJobResultResponse")]
+        System.IAsyncResult BeginStoreFinishedJobResult(System.Guid clientId, long jobId, byte[] result, double percentage, System.Exception exception, System.AsyncCallback callback, object asyncState);
+        
+        HeuristicLab.Hive.Contracts.ResponseResultReceived EndStoreFinishedJobResult(System.IAsyncResult result);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IClientCommunicator/ProcessSnapshot", ReplyAction="http://tempuri.org/IClientCommunicator/ProcessSnapshotResponse")]
+        HeuristicLab.Hive.Contracts.ResponseResultReceived ProcessSnapshot(System.Guid clientId, long jobId, byte[] result, double percentage, System.Exception exception);
+        
+        [System.ServiceModel.OperationContractAttribute(AsyncPattern=true, Action="http://tempuri.org/IClientCommunicator/ProcessSnapshot", ReplyAction="http://tempuri.org/IClientCommunicator/ProcessSnapshotResponse")]
+        System.IAsyncResult BeginProcessSnapshot(System.Guid clientId, long jobId, byte[] result, double percentage, System.Exception exception, System.AsyncCallback callback, object asyncState);
+        
+        HeuristicLab.Hive.Contracts.ResponseResultReceived EndProcessSnapshot(System.IAsyncResult result);
         
         [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IClientCommunicator/Logout", ReplyAction="http://tempuri.org/IClientCommunicator/LogoutResponse")]
@@ -55,4 +64,5 @@
         [System.ServiceModel.ServiceKnownTypeAttribute(typeof(HeuristicLab.Hive.Contracts.ResponseJob))]
         [System.ServiceModel.ServiceKnownTypeAttribute(typeof(HeuristicLab.Hive.Contracts.ResponseResultReceived))]
+        [System.ServiceModel.ServiceKnownTypeAttribute(typeof(HeuristicLab.Hive.Contracts.ResponsePlugin))]
         HeuristicLab.Hive.Contracts.Response Logout(System.Guid clientId);
         
@@ -61,4 +71,24 @@
         
         HeuristicLab.Hive.Contracts.Response EndLogout(System.IAsyncResult result);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IClientCommunicator/IsJobStillNeeded", ReplyAction="http://tempuri.org/IClientCommunicator/IsJobStillNeededResponse")]
+        [System.ServiceModel.ServiceKnownTypeAttribute(typeof(HeuristicLab.Hive.Contracts.ResponseHB))]
+        [System.ServiceModel.ServiceKnownTypeAttribute(typeof(HeuristicLab.Hive.Contracts.ResponseJob))]
+        [System.ServiceModel.ServiceKnownTypeAttribute(typeof(HeuristicLab.Hive.Contracts.ResponseResultReceived))]
+        [System.ServiceModel.ServiceKnownTypeAttribute(typeof(HeuristicLab.Hive.Contracts.ResponsePlugin))]
+        HeuristicLab.Hive.Contracts.Response IsJobStillNeeded(long jobId);
+        
+        [System.ServiceModel.OperationContractAttribute(AsyncPattern=true, Action="http://tempuri.org/IClientCommunicator/IsJobStillNeeded", ReplyAction="http://tempuri.org/IClientCommunicator/IsJobStillNeededResponse")]
+        System.IAsyncResult BeginIsJobStillNeeded(long jobId, System.AsyncCallback callback, object asyncState);
+        
+        HeuristicLab.Hive.Contracts.Response EndIsJobStillNeeded(System.IAsyncResult result);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IClientCommunicator/SendPlugins", ReplyAction="http://tempuri.org/IClientCommunicator/SendPluginsResponse")]
+        HeuristicLab.Hive.Contracts.ResponsePlugin SendPlugins(string[] pluginList);
+        
+        [System.ServiceModel.OperationContractAttribute(AsyncPattern=true, Action="http://tempuri.org/IClientCommunicator/SendPlugins", ReplyAction="http://tempuri.org/IClientCommunicator/SendPluginsResponse")]
+        System.IAsyncResult BeginSendPlugins(string[] pluginList, System.AsyncCallback callback, object asyncState);
+        
+        HeuristicLab.Hive.Contracts.ResponsePlugin EndSendPlugins(System.IAsyncResult result);
     }
     
@@ -126,9 +156,9 @@
     [System.Diagnostics.DebuggerStepThroughAttribute()]
     [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
-    public partial class ProcessJobResultCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
+    public partial class StoreFinishedJobResultCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
         
         private object[] results;
         
-        public ProcessJobResultCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : 
+        public StoreFinishedJobResultCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : 
                 base(exception, cancelled, userState) {
             this.results = results;
@@ -145,4 +175,23 @@
     [System.Diagnostics.DebuggerStepThroughAttribute()]
     [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
+    public partial class ProcessSnapshotCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
+        
+        private object[] results;
+        
+        public ProcessSnapshotCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : 
+                base(exception, cancelled, userState) {
+            this.results = results;
+        }
+        
+        public HeuristicLab.Hive.Contracts.ResponseResultReceived Result {
+            get {
+                base.RaiseExceptionIfNecessary();
+                return ((HeuristicLab.Hive.Contracts.ResponseResultReceived)(this.results[0]));
+            }
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
     public partial class LogoutCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
         
@@ -164,4 +213,42 @@
     [System.Diagnostics.DebuggerStepThroughAttribute()]
     [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
+    public partial class IsJobStillNeededCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
+        
+        private object[] results;
+        
+        public IsJobStillNeededCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : 
+                base(exception, cancelled, userState) {
+            this.results = results;
+        }
+        
+        public HeuristicLab.Hive.Contracts.Response Result {
+            get {
+                base.RaiseExceptionIfNecessary();
+                return ((HeuristicLab.Hive.Contracts.Response)(this.results[0]));
+            }
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
+    public partial class SendPluginsCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
+        
+        private object[] results;
+        
+        public SendPluginsCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : 
+                base(exception, cancelled, userState) {
+            this.results = results;
+        }
+        
+        public HeuristicLab.Hive.Contracts.ResponsePlugin Result {
+            get {
+                base.RaiseExceptionIfNecessary();
+                return ((HeuristicLab.Hive.Contracts.ResponsePlugin)(this.results[0]));
+            }
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
     public partial class ClientCommunicatorClient : System.ServiceModel.ClientBase<HeuristicLab.Hive.Client.Communication.ServerService.IClientCommunicator>, HeuristicLab.Hive.Client.Communication.ServerService.IClientCommunicator {
         
@@ -184,9 +271,15 @@
         private System.Threading.SendOrPostCallback onSendJobCompletedDelegate;
         
-        private BeginOperationDelegate onBeginProcessJobResultDelegate;
-        
-        private EndOperationDelegate onEndProcessJobResultDelegate;
-        
-        private System.Threading.SendOrPostCallback onProcessJobResultCompletedDelegate;
+        private BeginOperationDelegate onBeginStoreFinishedJobResultDelegate;
+        
+        private EndOperationDelegate onEndStoreFinishedJobResultDelegate;
+        
+        private System.Threading.SendOrPostCallback onStoreFinishedJobResultCompletedDelegate;
+        
+        private BeginOperationDelegate onBeginProcessSnapshotDelegate;
+        
+        private EndOperationDelegate onEndProcessSnapshotDelegate;
+        
+        private System.Threading.SendOrPostCallback onProcessSnapshotCompletedDelegate;
         
         private BeginOperationDelegate onBeginLogoutDelegate;
@@ -195,4 +288,16 @@
         
         private System.Threading.SendOrPostCallback onLogoutCompletedDelegate;
+        
+        private BeginOperationDelegate onBeginIsJobStillNeededDelegate;
+        
+        private EndOperationDelegate onEndIsJobStillNeededDelegate;
+        
+        private System.Threading.SendOrPostCallback onIsJobStillNeededCompletedDelegate;
+        
+        private BeginOperationDelegate onBeginSendPluginsDelegate;
+        
+        private EndOperationDelegate onEndSendPluginsDelegate;
+        
+        private System.Threading.SendOrPostCallback onSendPluginsCompletedDelegate;
         
         public ClientCommunicatorClient() {
@@ -221,7 +326,13 @@
         public event System.EventHandler<SendJobCompletedEventArgs> SendJobCompleted;
         
-        public event System.EventHandler<ProcessJobResultCompletedEventArgs> ProcessJobResultCompleted;
+        public event System.EventHandler<StoreFinishedJobResultCompletedEventArgs> StoreFinishedJobResultCompleted;
+        
+        public event System.EventHandler<ProcessSnapshotCompletedEventArgs> ProcessSnapshotCompleted;
         
         public event System.EventHandler<LogoutCompletedEventArgs> LogoutCompleted;
+        
+        public event System.EventHandler<IsJobStillNeededCompletedEventArgs> IsJobStillNeededCompleted;
+        
+        public event System.EventHandler<SendPluginsCompletedEventArgs> SendPluginsCompleted;
         
         public HeuristicLab.Hive.Contracts.Response Login(HeuristicLab.Hive.Contracts.BusinessObjects.ClientInfo clientInfo) {
@@ -375,19 +486,19 @@
         }
         
-        public HeuristicLab.Hive.Contracts.ResponseResultReceived ProcessJobResult(System.Guid clientId, long jobId, byte[] result, double percentage, System.Exception exception, bool finished) {
-            return base.Channel.ProcessJobResult(clientId, jobId, result, percentage, exception, finished);
-        }
-        
-        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
-        public System.IAsyncResult BeginProcessJobResult(System.Guid clientId, long jobId, byte[] result, double percentage, System.Exception exception, bool finished, System.AsyncCallback callback, object asyncState) {
-            return base.Channel.BeginProcessJobResult(clientId, jobId, result, percentage, exception, finished, callback, asyncState);
-        }
-        
-        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
-        public HeuristicLab.Hive.Contracts.ResponseResultReceived EndProcessJobResult(System.IAsyncResult result) {
-            return base.Channel.EndProcessJobResult(result);
-        }
-        
-        private System.IAsyncResult OnBeginProcessJobResult(object[] inValues, System.AsyncCallback callback, object asyncState) {
+        public HeuristicLab.Hive.Contracts.ResponseResultReceived StoreFinishedJobResult(System.Guid clientId, long jobId, byte[] result, double percentage, System.Exception exception) {
+            return base.Channel.StoreFinishedJobResult(clientId, jobId, result, percentage, exception);
+        }
+        
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+        public System.IAsyncResult BeginStoreFinishedJobResult(System.Guid clientId, long jobId, byte[] result, double percentage, System.Exception exception, System.AsyncCallback callback, object asyncState) {
+            return base.Channel.BeginStoreFinishedJobResult(clientId, jobId, result, percentage, exception, callback, asyncState);
+        }
+        
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+        public HeuristicLab.Hive.Contracts.ResponseResultReceived EndStoreFinishedJobResult(System.IAsyncResult result) {
+            return base.Channel.EndStoreFinishedJobResult(result);
+        }
+        
+        private System.IAsyncResult OnBeginStoreFinishedJobResult(object[] inValues, System.AsyncCallback callback, object asyncState) {
             System.Guid clientId = ((System.Guid)(inValues[0]));
             long jobId = ((long)(inValues[1]));
@@ -395,42 +506,98 @@
             double percentage = ((double)(inValues[3]));
             System.Exception exception = ((System.Exception)(inValues[4]));
-            bool finished = ((bool)(inValues[5]));
-            return this.BeginProcessJobResult(clientId, jobId, result, percentage, exception, finished, callback, asyncState);
-        }
-        
-        private object[] OnEndProcessJobResult(System.IAsyncResult result) {
-            HeuristicLab.Hive.Contracts.ResponseResultReceived retVal = this.EndProcessJobResult(result);
+            return this.BeginStoreFinishedJobResult(clientId, jobId, result, percentage, exception, callback, asyncState);
+        }
+        
+        private object[] OnEndStoreFinishedJobResult(System.IAsyncResult result) {
+            HeuristicLab.Hive.Contracts.ResponseResultReceived retVal = this.EndStoreFinishedJobResult(result);
             return new object[] {
                     retVal};
         }
         
-        private void OnProcessJobResultCompleted(object state) {
-            if ((this.ProcessJobResultCompleted != null)) {
+        private void OnStoreFinishedJobResultCompleted(object state) {
+            if ((this.StoreFinishedJobResultCompleted != null)) {
                 InvokeAsyncCompletedEventArgs e = ((InvokeAsyncCompletedEventArgs)(state));
-                this.ProcessJobResultCompleted(this, new ProcessJobResultCompletedEventArgs(e.Results, e.Error, e.Cancelled, e.UserState));
-            }
-        }
-        
-        public void ProcessJobResultAsync(System.Guid clientId, long jobId, byte[] result, double percentage, System.Exception exception, bool finished) {
-            this.ProcessJobResultAsync(clientId, jobId, result, percentage, exception, finished, null);
-        }
-        
-        public void ProcessJobResultAsync(System.Guid clientId, long jobId, byte[] result, double percentage, System.Exception exception, bool finished, object userState) {
-            if ((this.onBeginProcessJobResultDelegate == null)) {
-                this.onBeginProcessJobResultDelegate = new BeginOperationDelegate(this.OnBeginProcessJobResult);
-            }
-            if ((this.onEndProcessJobResultDelegate == null)) {
-                this.onEndProcessJobResultDelegate = new EndOperationDelegate(this.OnEndProcessJobResult);
-            }
-            if ((this.onProcessJobResultCompletedDelegate == null)) {
-                this.onProcessJobResultCompletedDelegate = new System.Threading.SendOrPostCallback(this.OnProcessJobResultCompleted);
-            }
-            base.InvokeAsync(this.onBeginProcessJobResultDelegate, new object[] {
+                this.StoreFinishedJobResultCompleted(this, new StoreFinishedJobResultCompletedEventArgs(e.Results, e.Error, e.Cancelled, e.UserState));
+            }
+        }
+        
+        public void StoreFinishedJobResultAsync(System.Guid clientId, long jobId, byte[] result, double percentage, System.Exception exception) {
+            this.StoreFinishedJobResultAsync(clientId, jobId, result, percentage, exception, null);
+        }
+        
+        public void StoreFinishedJobResultAsync(System.Guid clientId, long jobId, byte[] result, double percentage, System.Exception exception, object userState) {
+            if ((this.onBeginStoreFinishedJobResultDelegate == null)) {
+                this.onBeginStoreFinishedJobResultDelegate = new BeginOperationDelegate(this.OnBeginStoreFinishedJobResult);
+            }
+            if ((this.onEndStoreFinishedJobResultDelegate == null)) {
+                this.onEndStoreFinishedJobResultDelegate = new EndOperationDelegate(this.OnEndStoreFinishedJobResult);
+            }
+            if ((this.onStoreFinishedJobResultCompletedDelegate == null)) {
+                this.onStoreFinishedJobResultCompletedDelegate = new System.Threading.SendOrPostCallback(this.OnStoreFinishedJobResultCompleted);
+            }
+            base.InvokeAsync(this.onBeginStoreFinishedJobResultDelegate, new object[] {
                         clientId,
                         jobId,
                         result,
                         percentage,
-                        exception,
-                        finished}, this.onEndProcessJobResultDelegate, this.onProcessJobResultCompletedDelegate, userState);
+                        exception}, this.onEndStoreFinishedJobResultDelegate, this.onStoreFinishedJobResultCompletedDelegate, userState);
+        }
+        
+        public HeuristicLab.Hive.Contracts.ResponseResultReceived ProcessSnapshot(System.Guid clientId, long jobId, byte[] result, double percentage, System.Exception exception) {
+            return base.Channel.ProcessSnapshot(clientId, jobId, result, percentage, exception);
+        }
+        
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+        public System.IAsyncResult BeginProcessSnapshot(System.Guid clientId, long jobId, byte[] result, double percentage, System.Exception exception, System.AsyncCallback callback, object asyncState) {
+            return base.Channel.BeginProcessSnapshot(clientId, jobId, result, percentage, exception, callback, asyncState);
+        }
+        
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+        public HeuristicLab.Hive.Contracts.ResponseResultReceived EndProcessSnapshot(System.IAsyncResult result) {
+            return base.Channel.EndProcessSnapshot(result);
+        }
+        
+        private System.IAsyncResult OnBeginProcessSnapshot(object[] inValues, System.AsyncCallback callback, object asyncState) {
+            System.Guid clientId = ((System.Guid)(inValues[0]));
+            long jobId = ((long)(inValues[1]));
+            byte[] result = ((byte[])(inValues[2]));
+            double percentage = ((double)(inValues[3]));
+            System.Exception exception = ((System.Exception)(inValues[4]));
+            return this.BeginProcessSnapshot(clientId, jobId, result, percentage, exception, callback, asyncState);
+        }
+        
+        private object[] OnEndProcessSnapshot(System.IAsyncResult result) {
+            HeuristicLab.Hive.Contracts.ResponseResultReceived retVal = this.EndProcessSnapshot(result);
+            return new object[] {
+                    retVal};
+        }
+        
+        private void OnProcessSnapshotCompleted(object state) {
+            if ((this.ProcessSnapshotCompleted != null)) {
+                InvokeAsyncCompletedEventArgs e = ((InvokeAsyncCompletedEventArgs)(state));
+                this.ProcessSnapshotCompleted(this, new ProcessSnapshotCompletedEventArgs(e.Results, e.Error, e.Cancelled, e.UserState));
+            }
+        }
+        
+        public void ProcessSnapshotAsync(System.Guid clientId, long jobId, byte[] result, double percentage, System.Exception exception) {
+            this.ProcessSnapshotAsync(clientId, jobId, result, percentage, exception, null);
+        }
+        
+        public void ProcessSnapshotAsync(System.Guid clientId, long jobId, byte[] result, double percentage, System.Exception exception, object userState) {
+            if ((this.onBeginProcessSnapshotDelegate == null)) {
+                this.onBeginProcessSnapshotDelegate = new BeginOperationDelegate(this.OnBeginProcessSnapshot);
+            }
+            if ((this.onEndProcessSnapshotDelegate == null)) {
+                this.onEndProcessSnapshotDelegate = new EndOperationDelegate(this.OnEndProcessSnapshot);
+            }
+            if ((this.onProcessSnapshotCompletedDelegate == null)) {
+                this.onProcessSnapshotCompletedDelegate = new System.Threading.SendOrPostCallback(this.OnProcessSnapshotCompleted);
+            }
+            base.InvokeAsync(this.onBeginProcessSnapshotDelegate, new object[] {
+                        clientId,
+                        jobId,
+                        result,
+                        percentage,
+                        exception}, this.onEndProcessSnapshotDelegate, this.onProcessSnapshotCompletedDelegate, userState);
         }
         
@@ -484,4 +651,104 @@
                         clientId}, this.onEndLogoutDelegate, this.onLogoutCompletedDelegate, userState);
         }
+        
+        public HeuristicLab.Hive.Contracts.Response IsJobStillNeeded(long jobId) {
+            return base.Channel.IsJobStillNeeded(jobId);
+        }
+        
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+        public System.IAsyncResult BeginIsJobStillNeeded(long jobId, System.AsyncCallback callback, object asyncState) {
+            return base.Channel.BeginIsJobStillNeeded(jobId, callback, asyncState);
+        }
+        
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+        public HeuristicLab.Hive.Contracts.Response EndIsJobStillNeeded(System.IAsyncResult result) {
+            return base.Channel.EndIsJobStillNeeded(result);
+        }
+        
+        private System.IAsyncResult OnBeginIsJobStillNeeded(object[] inValues, System.AsyncCallback callback, object asyncState) {
+            long jobId = ((long)(inValues[0]));
+            return this.BeginIsJobStillNeeded(jobId, callback, asyncState);
+        }
+        
+        private object[] OnEndIsJobStillNeeded(System.IAsyncResult result) {
+            HeuristicLab.Hive.Contracts.Response retVal = this.EndIsJobStillNeeded(result);
+            return new object[] {
+                    retVal};
+        }
+        
+        private void OnIsJobStillNeededCompleted(object state) {
+            if ((this.IsJobStillNeededCompleted != null)) {
+                InvokeAsyncCompletedEventArgs e = ((InvokeAsyncCompletedEventArgs)(state));
+                this.IsJobStillNeededCompleted(this, new IsJobStillNeededCompletedEventArgs(e.Results, e.Error, e.Cancelled, e.UserState));
+            }
+        }
+        
+        public void IsJobStillNeededAsync(long jobId) {
+            this.IsJobStillNeededAsync(jobId, null);
+        }
+        
+        public void IsJobStillNeededAsync(long jobId, object userState) {
+            if ((this.onBeginIsJobStillNeededDelegate == null)) {
+                this.onBeginIsJobStillNeededDelegate = new BeginOperationDelegate(this.OnBeginIsJobStillNeeded);
+            }
+            if ((this.onEndIsJobStillNeededDelegate == null)) {
+                this.onEndIsJobStillNeededDelegate = new EndOperationDelegate(this.OnEndIsJobStillNeeded);
+            }
+            if ((this.onIsJobStillNeededCompletedDelegate == null)) {
+                this.onIsJobStillNeededCompletedDelegate = new System.Threading.SendOrPostCallback(this.OnIsJobStillNeededCompleted);
+            }
+            base.InvokeAsync(this.onBeginIsJobStillNeededDelegate, new object[] {
+                        jobId}, this.onEndIsJobStillNeededDelegate, this.onIsJobStillNeededCompletedDelegate, userState);
+        }
+        
+        public HeuristicLab.Hive.Contracts.ResponsePlugin SendPlugins(string[] pluginList) {
+            return base.Channel.SendPlugins(pluginList);
+        }
+        
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+        public System.IAsyncResult BeginSendPlugins(string[] pluginList, System.AsyncCallback callback, object asyncState) {
+            return base.Channel.BeginSendPlugins(pluginList, callback, asyncState);
+        }
+        
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+        public HeuristicLab.Hive.Contracts.ResponsePlugin EndSendPlugins(System.IAsyncResult result) {
+            return base.Channel.EndSendPlugins(result);
+        }
+        
+        private System.IAsyncResult OnBeginSendPlugins(object[] inValues, System.AsyncCallback callback, object asyncState) {
+            string[] pluginList = ((string[])(inValues[0]));
+            return this.BeginSendPlugins(pluginList, callback, asyncState);
+        }
+        
+        private object[] OnEndSendPlugins(System.IAsyncResult result) {
+            HeuristicLab.Hive.Contracts.ResponsePlugin retVal = this.EndSendPlugins(result);
+            return new object[] {
+                    retVal};
+        }
+        
+        private void OnSendPluginsCompleted(object state) {
+            if ((this.SendPluginsCompleted != null)) {
+                InvokeAsyncCompletedEventArgs e = ((InvokeAsyncCompletedEventArgs)(state));
+                this.SendPluginsCompleted(this, new SendPluginsCompletedEventArgs(e.Results, e.Error, e.Cancelled, e.UserState));
+            }
+        }
+        
+        public void SendPluginsAsync(string[] pluginList) {
+            this.SendPluginsAsync(pluginList, null);
+        }
+        
+        public void SendPluginsAsync(string[] pluginList, object userState) {
+            if ((this.onBeginSendPluginsDelegate == null)) {
+                this.onBeginSendPluginsDelegate = new BeginOperationDelegate(this.OnBeginSendPlugins);
+            }
+            if ((this.onEndSendPluginsDelegate == null)) {
+                this.onEndSendPluginsDelegate = new EndOperationDelegate(this.OnEndSendPlugins);
+            }
+            if ((this.onSendPluginsCompletedDelegate == null)) {
+                this.onSendPluginsCompletedDelegate = new System.Threading.SendOrPostCallback(this.OnSendPluginsCompleted);
+            }
+            base.InvokeAsync(this.onBeginSendPluginsDelegate, new object[] {
+                        pluginList}, this.onEndSendPluginsDelegate, this.onSendPluginsCompletedDelegate, userState);
+        }
     }
 }
Index: /trunk/sources/HeuristicLab.Hive.Client.Communication/Service References/ServerService/Reference.svcmap
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Client.Communication/Service References/ServerService/Reference.svcmap	(revision 1378)
+++ /trunk/sources/HeuristicLab.Hive.Client.Communication/Service References/ServerService/Reference.svcmap	(revision 1379)
@@ -18,14 +18,15 @@
   </ClientOptions>
   <MetadataSources>
-    <MetadataSource Address="net.tcp://10.20.53.2:9000/HiveServer/mex" Protocol="mex" SourceId="1" />
+    <MetadataSource Address="net.tcp://10.20.53.3:9000/HiveServer/mex" Protocol="mex" SourceId="1" />
   </MetadataSources>
   <Metadata>
-    <MetadataFile FileName="service1.wsdl" MetadataType="Wsdl" ID="82cfa882-0330-4203-b34c-ea82d152db7d" SourceId="1" SourceUrl="net.tcp://10.20.53.2:9000/HiveServer/mex" />
-    <MetadataFile FileName="service2.xsd" MetadataType="Schema" ID="11d3bb75-8299-4928-b8dc-d716378ed760" SourceId="1" SourceUrl="net.tcp://10.20.53.2:9000/HiveServer/mex" />
-    <MetadataFile FileName="service3.xsd" MetadataType="Schema" ID="e023ab8b-7af8-4c99-987d-6639735b1600" SourceId="1" SourceUrl="net.tcp://10.20.53.2:9000/HiveServer/mex" />
-    <MetadataFile FileName="HeuristicLab.Hive.Contracts.BusinessObjects1.xsd" MetadataType="Schema" ID="a2b9f991-9c94-4b82-8de5-3797a066d2a4" SourceId="1" SourceUrl="net.tcp://10.20.53.2:9000/HiveServer/mex" />
-    <MetadataFile FileName="HeuristicLab.Hive.Contracts1.xsd" MetadataType="Schema" ID="7d7ae733-1ac7-47bc-8215-a17cba2f7f23" SourceId="1" SourceUrl="net.tcp://10.20.53.2:9000/HiveServer/mex" />
-    <MetadataFile FileName="Arrays1.xsd" MetadataType="Schema" ID="77920668-a89e-49ed-acc6-98584ea7aefb" SourceId="1" SourceUrl="net.tcp://10.20.53.2:9000/HiveServer/mex" />
-    <MetadataFile FileName="System1.xsd" MetadataType="Schema" ID="681a5cc3-c407-4ae9-8e77-0b0e8efa299d" SourceId="1" SourceUrl="net.tcp://10.20.53.2:9000/HiveServer/mex" />
+    <MetadataFile FileName="service1.wsdl" MetadataType="Wsdl" ID="9a3a50f8-3779-4e16-9fef-d8a373f7ff94" SourceId="1" SourceUrl="net.tcp://10.20.53.3:9000/HiveServer/mex" />
+    <MetadataFile FileName="service2.xsd" MetadataType="Schema" ID="735695ce-6295-4bf1-9d88-11005317d84a" SourceId="1" SourceUrl="net.tcp://10.20.53.3:9000/HiveServer/mex" />
+    <MetadataFile FileName="service3.xsd" MetadataType="Schema" ID="bd04471f-a95e-4abf-af17-6292f4dc3482" SourceId="1" SourceUrl="net.tcp://10.20.53.3:9000/HiveServer/mex" />
+    <MetadataFile FileName="HeuristicLab.Hive.Contracts.BusinessObjects1.xsd" MetadataType="Schema" ID="092b1a9a-88d0-4e2b-ac02-0e6580be4547" SourceId="1" SourceUrl="net.tcp://10.20.53.3:9000/HiveServer/mex" />
+    <MetadataFile FileName="HeuristicLab.DataAccess.xsd" MetadataType="Schema" ID="7a6b32ca-8a1f-4b6a-88e8-8b1aea9167c0" SourceId="1" SourceUrl="net.tcp://10.20.53.3:9000/HiveServer/mex" />
+    <MetadataFile FileName="HeuristicLab.Hive.Contracts1.xsd" MetadataType="Schema" ID="a0ecfa49-b2b3-4fa0-822f-720f9111893a" SourceId="1" SourceUrl="net.tcp://10.20.53.3:9000/HiveServer/mex" />
+    <MetadataFile FileName="Arrays.xsd" MetadataType="Schema" ID="c38ef568-759d-4e63-902a-2915442cb7ce" SourceId="1" SourceUrl="net.tcp://10.20.53.3:9000/HiveServer/mex" />
+    <MetadataFile FileName="System1.xsd" MetadataType="Schema" ID="0eba9d8e-f039-45d9-928b-146e162b1103" SourceId="1" SourceUrl="net.tcp://10.20.53.3:9000/HiveServer/mex" />
   </Metadata>
   <Extensions>
Index: /trunk/sources/HeuristicLab.Hive.Client.Communication/Service References/ServerService/configuration.svcinfo
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Client.Communication/Service References/ServerService/configuration.svcinfo	(revision 1378)
+++ /trunk/sources/HeuristicLab.Hive.Client.Communication/Service References/ServerService/configuration.svcinfo	(revision 1379)
@@ -3,8 +3,8 @@
   <behaviors />
   <bindings>
-    <binding digest="System.ServiceModel.Configuration.NetTcpBindingElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089:&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-16&quot;?&gt;&lt;Data hostNameComparisonMode=&quot;StrongWildcard&quot; listenBacklog=&quot;10&quot; maxBufferSize=&quot;65536&quot; maxConnections=&quot;10&quot; name=&quot;NetTcpBinding_IClientCommunicator&quot; transactionFlow=&quot;false&quot; transactionProtocol=&quot;OleTransactions&quot; transferMode=&quot;Buffered&quot;&gt;&lt;readerQuotas maxArrayLength=&quot;16384&quot; maxBytesPerRead=&quot;4096&quot; maxDepth=&quot;32&quot; maxNameTableCharCount=&quot;16384&quot; maxStringContentLength=&quot;8192&quot; /&gt;&lt;reliableSession enabled=&quot;false&quot; inactivityTimeout=&quot;00:10:00&quot; ordered=&quot;true&quot; /&gt;&lt;security mode=&quot;Transport&quot;&gt;&lt;message clientCredentialType=&quot;Windows&quot; /&gt;&lt;transport clientCredentialType=&quot;Windows&quot; protectionLevel=&quot;EncryptAndSign&quot; /&gt;&lt;/security&gt;&lt;/Data&gt;" bindingType="netTcpBinding" name="NetTcpBinding_IClientCommunicator" />
+    <binding digest="System.ServiceModel.Configuration.NetTcpBindingElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089:&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-16&quot;?&gt;&lt;Data hostNameComparisonMode=&quot;StrongWildcard&quot; listenBacklog=&quot;10&quot; maxBufferSize=&quot;65536&quot; maxConnections=&quot;10&quot; name=&quot;NetTcpBinding_IClientCommunicator&quot; transactionFlow=&quot;false&quot; transactionProtocol=&quot;OleTransactions&quot; transferMode=&quot;Buffered&quot;&gt;&lt;readerQuotas maxArrayLength=&quot;16384&quot; maxBytesPerRead=&quot;4096&quot; maxDepth=&quot;32&quot; maxNameTableCharCount=&quot;16384&quot; maxStringContentLength=&quot;8192&quot; /&gt;&lt;reliableSession enabled=&quot;true&quot; inactivityTimeout=&quot;00:10:00&quot; ordered=&quot;true&quot; /&gt;&lt;security mode=&quot;None&quot;&gt;&lt;message clientCredentialType=&quot;Windows&quot; /&gt;&lt;transport clientCredentialType=&quot;Windows&quot; protectionLevel=&quot;EncryptAndSign&quot; /&gt;&lt;/security&gt;&lt;/Data&gt;" bindingType="netTcpBinding" name="NetTcpBinding_IClientCommunicator" />
   </bindings>
   <endpoints>
-    <endpoint normalizedDigest="&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-16&quot;?&gt;&lt;Data address=&quot;net.tcp://10.20.53.2:9000/HiveServer/ClientCommunicator&quot; binding=&quot;netTcpBinding&quot; bindingConfiguration=&quot;NetTcpBinding_IClientCommunicator&quot; contract=&quot;ServerService.IClientCommunicator&quot; name=&quot;NetTcpBinding_IClientCommunicator&quot;&gt;&lt;identity&gt;&lt;userPrincipalName value=&quot;mse08023@fhs-hagenberg.ac.at&quot; /&gt;&lt;/identity&gt;&lt;/Data&gt;" digest="&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-16&quot;?&gt;&lt;Data address=&quot;net.tcp://10.20.53.2:9000/HiveServer/ClientCommunicator&quot; binding=&quot;netTcpBinding&quot; bindingConfiguration=&quot;NetTcpBinding_IClientCommunicator&quot; contract=&quot;ServerService.IClientCommunicator&quot; name=&quot;NetTcpBinding_IClientCommunicator&quot;&gt;&lt;identity&gt;&lt;userPrincipalName value=&quot;mse08023@fhs-hagenberg.ac.at&quot; /&gt;&lt;/identity&gt;&lt;/Data&gt;" contractName="ServerService.IClientCommunicator" name="NetTcpBinding_IClientCommunicator" />
+    <endpoint normalizedDigest="&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-16&quot;?&gt;&lt;Data address=&quot;net.tcp://10.20.53.3:9000/HiveServer/ClientCommunicator&quot; binding=&quot;netTcpBinding&quot; bindingConfiguration=&quot;NetTcpBinding_IClientCommunicator&quot; contract=&quot;ServerService.IClientCommunicator&quot; name=&quot;NetTcpBinding_IClientCommunicator&quot; /&gt;" digest="&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-16&quot;?&gt;&lt;Data address=&quot;net.tcp://10.20.53.3:9000/HiveServer/ClientCommunicator&quot; binding=&quot;netTcpBinding&quot; bindingConfiguration=&quot;NetTcpBinding_IClientCommunicator&quot; contract=&quot;ServerService.IClientCommunicator&quot; name=&quot;NetTcpBinding_IClientCommunicator&quot; /&gt;" contractName="ServerService.IClientCommunicator" name="NetTcpBinding_IClientCommunicator" />
   </endpoints>
 </configurationSnapshot>
Index: /trunk/sources/HeuristicLab.Hive.Client.Communication/Service References/ServerService/configuration91.svcinfo
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Client.Communication/Service References/ServerService/configuration91.svcinfo	(revision 1378)
+++ /trunk/sources/HeuristicLab.Hive.Client.Communication/Service References/ServerService/configuration91.svcinfo	(revision 1379)
@@ -1,4 +1,4 @@
 <?xml version="1.0" encoding="utf-8"?>
-<SavedWcfConfigurationInformation xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Version="9.1" CheckSum="Rqe47epOB9kn3CQ5FcfRHLaniGg=">
+<SavedWcfConfigurationInformation xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Version="9.1" CheckSum="Nwi0N5LZnU7QQwSvbAcjLVRBz9w=">
   <bindingConfigurations>
     <bindingConfiguration bindingType="netTcpBinding" name="NetTcpBinding_IClientCommunicator">
@@ -77,5 +77,5 @@
         </property>
         <property path="/reliableSession/enabled" isComplexType="false" isExplicitlyDefined="true" clrType="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-          <serializedValue>False</serializedValue>
+          <serializedValue>True</serializedValue>
         </property>
         <property path="/security" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.NetTcpSecurityElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
@@ -83,5 +83,5 @@
         </property>
         <property path="/security/mode" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.SecurityMode, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-          <serializedValue>Transport</serializedValue>
+          <serializedValue>None</serializedValue>
         </property>
         <property path="/security/transport" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.TcpTransportSecurityElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
@@ -107,8 +107,8 @@
   </bindingConfigurations>
   <endpoints>
-    <endpoint name="NetTcpBinding_IClientCommunicator" contract="ServerService.IClientCommunicator" bindingType="netTcpBinding" address="net.tcp://10.20.53.2:9000/HiveServer/ClientCommunicator" bindingConfiguration="NetTcpBinding_IClientCommunicator">
+    <endpoint name="NetTcpBinding_IClientCommunicator" contract="ServerService.IClientCommunicator" bindingType="netTcpBinding" address="net.tcp://10.20.53.3:9000/HiveServer/ClientCommunicator" bindingConfiguration="NetTcpBinding_IClientCommunicator">
       <properties>
         <property path="/address" isComplexType="false" isExplicitlyDefined="true" clrType="System.Uri, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-          <serializedValue>net.tcp://10.20.53.2:9000/HiveServer/ClientCommunicator</serializedValue>
+          <serializedValue>net.tcp://10.20.53.3:9000/HiveServer/ClientCommunicator</serializedValue>
         </property>
         <property path="/behaviorConfiguration" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
@@ -136,6 +136,6 @@
           <serializedValue>System.ServiceModel.Configuration.UserPrincipalNameElement</serializedValue>
         </property>
-        <property path="/identity/userPrincipalName/value" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-          <serializedValue>mse08023@fhs-hagenberg.ac.at</serializedValue>
+        <property path="/identity/userPrincipalName/value" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
         </property>
         <property path="/identity/servicePrincipalName" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.ServicePrincipalNameElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
Index: /trunk/sources/HeuristicLab.Hive.Client.Communication/Service References/ServerService/service1.wsdl
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Client.Communication/Service References/ServerService/service1.wsdl	(revision 1378)
+++ /trunk/sources/HeuristicLab.Hive.Client.Communication/Service References/ServerService/service1.wsdl	(revision 1379)
@@ -4,29 +4,12 @@
     <wsp:ExactlyOne>
       <wsp:All>
+        <wsrm:RMAssertion xmlns:wsrm="http://schemas.xmlsoap.org/ws/2005/02/rm/policy">
+          <wsrm:InactivityTimeout Milliseconds="600000">
+          </wsrm:InactivityTimeout>
+          <wsrm:AcknowledgementInterval Milliseconds="200">
+          </wsrm:AcknowledgementInterval>
+        </wsrm:RMAssertion>
         <msb:BinaryEncoding xmlns:msb="http://schemas.microsoft.com/ws/06/2004/mspolicy/netbinary1">
         </msb:BinaryEncoding>
-        <sp:TransportBinding xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
-          <wsp:Policy>
-            <sp:TransportToken>
-              <wsp:Policy>
-                <msf:WindowsTransportSecurity xmlns:msf="http://schemas.microsoft.com/ws/2006/05/framing/policy">
-                  <msf:ProtectionLevel>EncryptAndSign</msf:ProtectionLevel>
-                </msf:WindowsTransportSecurity>
-              </wsp:Policy>
-            </sp:TransportToken>
-            <sp:AlgorithmSuite>
-              <wsp:Policy>
-                <sp:Basic256>
-                </sp:Basic256>
-              </wsp:Policy>
-            </sp:AlgorithmSuite>
-            <sp:Layout>
-              <wsp:Policy>
-                <sp:Strict>
-                </sp:Strict>
-              </wsp:Policy>
-            </sp:Layout>
-          </wsp:Policy>
-        </sp:TransportBinding>
         <wsaw:UsingAddressing>
         </wsaw:UsingAddressing>
@@ -39,4 +22,5 @@
       <xsd:import namespace="http://schemas.microsoft.com/2003/10/Serialization/" />
       <xsd:import namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.BusinessObjects" />
+      <xsd:import namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.DataAccess" />
       <xsd:import namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts" />
       <xsd:import namespace="http://schemas.microsoft.com/2003/10/Serialization/Arrays" />
@@ -62,9 +46,15 @@
     <wsdl:part name="parameters" element="tns:SendJobResponse" />
   </wsdl:message>
-  <wsdl:message name="IClientCommunicator_ProcessJobResult_InputMessage">
-    <wsdl:part name="parameters" element="tns:ProcessJobResult" />
+  <wsdl:message name="IClientCommunicator_StoreFinishedJobResult_InputMessage">
+    <wsdl:part name="parameters" element="tns:StoreFinishedJobResult" />
   </wsdl:message>
-  <wsdl:message name="IClientCommunicator_ProcessJobResult_OutputMessage">
-    <wsdl:part name="parameters" element="tns:ProcessJobResultResponse" />
+  <wsdl:message name="IClientCommunicator_StoreFinishedJobResult_OutputMessage">
+    <wsdl:part name="parameters" element="tns:StoreFinishedJobResultResponse" />
+  </wsdl:message>
+  <wsdl:message name="IClientCommunicator_ProcessSnapshot_InputMessage">
+    <wsdl:part name="parameters" element="tns:ProcessSnapshot" />
+  </wsdl:message>
+  <wsdl:message name="IClientCommunicator_ProcessSnapshot_OutputMessage">
+    <wsdl:part name="parameters" element="tns:ProcessSnapshotResponse" />
   </wsdl:message>
   <wsdl:message name="IClientCommunicator_Logout_InputMessage">
@@ -73,4 +63,16 @@
   <wsdl:message name="IClientCommunicator_Logout_OutputMessage">
     <wsdl:part name="parameters" element="tns:LogoutResponse" />
+  </wsdl:message>
+  <wsdl:message name="IClientCommunicator_IsJobStillNeeded_InputMessage">
+    <wsdl:part name="parameters" element="tns:IsJobStillNeeded" />
+  </wsdl:message>
+  <wsdl:message name="IClientCommunicator_IsJobStillNeeded_OutputMessage">
+    <wsdl:part name="parameters" element="tns:IsJobStillNeededResponse" />
+  </wsdl:message>
+  <wsdl:message name="IClientCommunicator_SendPlugins_InputMessage">
+    <wsdl:part name="parameters" element="tns:SendPlugins" />
+  </wsdl:message>
+  <wsdl:message name="IClientCommunicator_SendPlugins_OutputMessage">
+    <wsdl:part name="parameters" element="tns:SendPluginsResponse" />
   </wsdl:message>
   <wsdl:portType name="IClientCommunicator">
@@ -87,11 +89,23 @@
       <wsdl:output wsaw:Action="http://tempuri.org/IClientCommunicator/SendJobResponse" message="tns:IClientCommunicator_SendJob_OutputMessage" />
     </wsdl:operation>
-    <wsdl:operation name="ProcessJobResult">
-      <wsdl:input wsaw:Action="http://tempuri.org/IClientCommunicator/ProcessJobResult" message="tns:IClientCommunicator_ProcessJobResult_InputMessage" />
-      <wsdl:output wsaw:Action="http://tempuri.org/IClientCommunicator/ProcessJobResultResponse" message="tns:IClientCommunicator_ProcessJobResult_OutputMessage" />
+    <wsdl:operation name="StoreFinishedJobResult">
+      <wsdl:input wsaw:Action="http://tempuri.org/IClientCommunicator/StoreFinishedJobResult" message="tns:IClientCommunicator_StoreFinishedJobResult_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/IClientCommunicator/StoreFinishedJobResultResponse" message="tns:IClientCommunicator_StoreFinishedJobResult_OutputMessage" />
+    </wsdl:operation>
+    <wsdl:operation name="ProcessSnapshot">
+      <wsdl:input wsaw:Action="http://tempuri.org/IClientCommunicator/ProcessSnapshot" message="tns:IClientCommunicator_ProcessSnapshot_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/IClientCommunicator/ProcessSnapshotResponse" message="tns:IClientCommunicator_ProcessSnapshot_OutputMessage" />
     </wsdl:operation>
     <wsdl:operation name="Logout">
       <wsdl:input wsaw:Action="http://tempuri.org/IClientCommunicator/Logout" message="tns:IClientCommunicator_Logout_InputMessage" />
       <wsdl:output wsaw:Action="http://tempuri.org/IClientCommunicator/LogoutResponse" message="tns:IClientCommunicator_Logout_OutputMessage" />
+    </wsdl:operation>
+    <wsdl:operation name="IsJobStillNeeded">
+      <wsdl:input wsaw:Action="http://tempuri.org/IClientCommunicator/IsJobStillNeeded" message="tns:IClientCommunicator_IsJobStillNeeded_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/IClientCommunicator/IsJobStillNeededResponse" message="tns:IClientCommunicator_IsJobStillNeeded_OutputMessage" />
+    </wsdl:operation>
+    <wsdl:operation name="SendPlugins">
+      <wsdl:input wsaw:Action="http://tempuri.org/IClientCommunicator/SendPlugins" message="tns:IClientCommunicator_SendPlugins_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/IClientCommunicator/SendPluginsResponse" message="tns:IClientCommunicator_SendPlugins_OutputMessage" />
     </wsdl:operation>
   </wsdl:portType>
@@ -127,6 +141,15 @@
       </wsdl:output>
     </wsdl:operation>
-    <wsdl:operation name="ProcessJobResult">
-      <soap12:operation soapAction="http://tempuri.org/IClientCommunicator/ProcessJobResult" style="document" />
+    <wsdl:operation name="StoreFinishedJobResult">
+      <soap12:operation soapAction="http://tempuri.org/IClientCommunicator/StoreFinishedJobResult" style="document" />
+      <wsdl:input>
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="ProcessSnapshot">
+      <soap12:operation soapAction="http://tempuri.org/IClientCommunicator/ProcessSnapshot" style="document" />
       <wsdl:input>
         <soap12:body use="literal" />
@@ -145,13 +168,28 @@
       </wsdl:output>
     </wsdl:operation>
+    <wsdl:operation name="IsJobStillNeeded">
+      <soap12:operation soapAction="http://tempuri.org/IClientCommunicator/IsJobStillNeeded" style="document" />
+      <wsdl:input>
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="SendPlugins">
+      <soap12:operation soapAction="http://tempuri.org/IClientCommunicator/SendPlugins" style="document" />
+      <wsdl:input>
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
   </wsdl:binding>
   <wsdl:service name="ClientFacade">
     <wsdl:port name="NetTcpBinding_IClientCommunicator" binding="tns:NetTcpBinding_IClientCommunicator">
-      <soap12:address location="net.tcp://10.20.53.2:9000/HiveServer/ClientCommunicator" />
+      <soap12:address location="net.tcp://10.20.53.3:9000/HiveServer/ClientCommunicator" />
       <wsa10:EndpointReference>
-        <wsa10:Address>net.tcp://10.20.53.2:9000/HiveServer/ClientCommunicator</wsa10:Address>
-        <Identity xmlns="http://schemas.xmlsoap.org/ws/2006/02/addressingidentity">
-          <Upn>mse08023@fhs-hagenberg.ac.at</Upn>
-        </Identity>
+        <wsa10:Address>net.tcp://10.20.53.3:9000/HiveServer/ClientCommunicator</wsa10:Address>
       </wsa10:EndpointReference>
     </wsdl:port>
Index: /trunk/sources/HeuristicLab.Hive.Client.Communication/Service References/ServerService/service2.xsd
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Client.Communication/Service References/ServerService/service2.xsd	(revision 1378)
+++ /trunk/sources/HeuristicLab.Hive.Client.Communication/Service References/ServerService/service2.xsd	(revision 1379)
@@ -5,4 +5,5 @@
   <xs:import namespace="http://schemas.microsoft.com/2003/10/Serialization/" />
   <xs:import namespace="http://schemas.datacontract.org/2004/07/System" />
+  <xs:import namespace="http://schemas.microsoft.com/2003/10/Serialization/Arrays" />
   <xs:element name="Login">
     <xs:complexType>
@@ -47,5 +48,5 @@
     </xs:complexType>
   </xs:element>
-  <xs:element name="ProcessJobResult">
+  <xs:element name="StoreFinishedJobResult">
     <xs:complexType>
       <xs:sequence>
@@ -55,12 +56,29 @@
         <xs:element minOccurs="0" name="percentage" type="xs:double" />
         <xs:element xmlns:q8="http://schemas.datacontract.org/2004/07/System" minOccurs="0" name="exception" nillable="true" type="q8:Exception" />
-        <xs:element minOccurs="0" name="finished" type="xs:boolean" />
       </xs:sequence>
     </xs:complexType>
   </xs:element>
-  <xs:element name="ProcessJobResultResponse">
+  <xs:element name="StoreFinishedJobResultResponse">
     <xs:complexType>
       <xs:sequence>
-        <xs:element xmlns:q9="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts" minOccurs="0" name="ProcessJobResultResult" nillable="true" type="q9:ResponseResultReceived" />
+        <xs:element xmlns:q9="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts" minOccurs="0" name="StoreFinishedJobResultResult" nillable="true" type="q9:ResponseResultReceived" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="ProcessSnapshot">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q10="http://schemas.microsoft.com/2003/10/Serialization/" minOccurs="0" name="clientId" type="q10:guid" />
+        <xs:element minOccurs="0" name="jobId" type="xs:long" />
+        <xs:element minOccurs="0" name="result" nillable="true" type="xs:base64Binary" />
+        <xs:element minOccurs="0" name="percentage" type="xs:double" />
+        <xs:element xmlns:q11="http://schemas.datacontract.org/2004/07/System" minOccurs="0" name="exception" nillable="true" type="q11:Exception" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="ProcessSnapshotResponse">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q12="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts" minOccurs="0" name="ProcessSnapshotResult" nillable="true" type="q12:ResponseResultReceived" />
       </xs:sequence>
     </xs:complexType>
@@ -69,5 +87,5 @@
     <xs:complexType>
       <xs:sequence>
-        <xs:element xmlns:q10="http://schemas.microsoft.com/2003/10/Serialization/" minOccurs="0" name="clientId" type="q10:guid" />
+        <xs:element xmlns:q13="http://schemas.microsoft.com/2003/10/Serialization/" minOccurs="0" name="clientId" type="q13:guid" />
       </xs:sequence>
     </xs:complexType>
@@ -76,5 +94,33 @@
     <xs:complexType>
       <xs:sequence>
-        <xs:element xmlns:q11="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts" minOccurs="0" name="LogoutResult" nillable="true" type="q11:Response" />
+        <xs:element xmlns:q14="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts" minOccurs="0" name="LogoutResult" nillable="true" type="q14:Response" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="IsJobStillNeeded">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="jobId" type="xs:long" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="IsJobStillNeededResponse">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q15="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts" minOccurs="0" name="IsJobStillNeededResult" nillable="true" type="q15:Response" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="SendPlugins">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q16="http://schemas.microsoft.com/2003/10/Serialization/Arrays" minOccurs="0" name="pluginList" nillable="true" type="q16:ArrayOfstring" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="SendPluginsResponse">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q17="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts" minOccurs="0" name="SendPluginsResult" nillable="true" type="q17:ResponsePlugin" />
       </xs:sequence>
     </xs:complexType>
Index: /trunk/sources/HeuristicLab.Hive.Client.Communication/WcfService.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Client.Communication/WcfService.cs	(revision 1378)
+++ /trunk/sources/HeuristicLab.Hive.Client.Communication/WcfService.cs	(revision 1379)
@@ -80,5 +80,6 @@
         proxy.LoginCompleted += new EventHandler<LoginCompletedEventArgs>(proxy_LoginCompleted);
         proxy.SendJobCompleted += new EventHandler<SendJobCompletedEventArgs>(proxy_SendJobCompleted);
-        proxy.ProcessJobResultCompleted += new EventHandler<ProcessJobResultCompletedEventArgs>(proxy_ProcessJobResultCompleted);
+        proxy.StoreFinishedJobResultCompleted += new EventHandler<StoreFinishedJobResultCompletedEventArgs>(proxy_StoreFinishedJobResultCompleted);
+        proxy.ProcessSnapshotCompleted += new EventHandler<ProcessSnapshotCompletedEventArgs>(proxy_ProcessSnapshotCompleted);
         proxy.ProcessHeartBeatCompleted += new EventHandler<ProcessHeartBeatCompletedEventArgs>(proxy_ProcessHeartBeatCompleted);
         proxy.Open();
@@ -97,4 +98,6 @@
       }
     }
+
+
 
     /// <summary>
@@ -184,16 +187,31 @@
     /// </summary>
     #region SendJobResults
-    public event System.EventHandler<ProcessJobResultCompletedEventArgs> ProcessJobResultCompleted;
-    public void ProcessJobResultAsync(Guid clientId, long jobId, byte[] result, double percentage, Exception exception, bool finished) {
+    public event System.EventHandler<StoreFinishedJobResultCompletedEventArgs> StoreFinishedJobResultCompleted;
+    public void StoreFinishedJobResultAsync(Guid clientId, long jobId, byte[] result, double percentage, Exception exception, bool finished) {
       if (ConnState == NetworkEnum.WcfConnState.Loggedin)
-        proxy.ProcessJobResultAsync(clientId, jobId, result, percentage, exception, finished);
-    }
-    private void proxy_ProcessJobResultCompleted(object sender, ProcessJobResultCompletedEventArgs e) {
-      if (e.Error == null)
-        ProcessJobResultCompleted(sender, e);
-      else
-        HandleNetworkError(e.Error);
-    }
-
+        proxy.StoreFinishedJobResultAsync(clientId, jobId, result, percentage, exception, finished);
+    }
+    private void proxy_StoreFinishedJobResultCompleted(object sender, StoreFinishedJobResultCompletedEventArgs e) {
+      if (e.Error == null)
+        StoreFinishedJobResultCompleted(sender, e);
+      else
+        HandleNetworkError(e.Error);
+    }
+
+    #endregion
+
+    #region Processsnapshots
+    public event System.EventHandler<ProcessSnapshotCompletedEventArgs> ProcessSnapshotCompleted;
+    public void ProcessSnapshotAsync(Guid clientId, long jobId, byte[] result, double percentage, Exception exception, bool finished) {
+      if(ConnState == NetworkEnum.WcfConnState.Loggedin)
+        proxy.ProcessSnapshotAsync(clientId, jobId, result, percentage, exception);
+    }
+    void proxy_ProcessSnapshotCompleted(object sender, ProcessSnapshotCompletedEventArgs e) {
+      if (e.Error == null)
+        ProcessSnapshotCompleted(sender, e);
+      else
+        HandleNetworkError(e.Error);
+    }    
+    
     #endregion
 
@@ -221,6 +239,6 @@
     /// Send back finished and Stored Job Results
     /// </summary>
-    #region SendJobResults
-    public event System.EventHandler<ProcessJobResultCompletedEventArgs> ProcessStoredJobResultCompleted;
+    /*#region SendJobResults
+    public event System.EventHandler<StoreFinishedJobResultCompletedEventArgs> ProcessStoredJobResultCompleted;
     public void ProcessStoredJobResultAsync(Guid clientId, long jobId, byte[] result, double percentage, Exception exception, bool finished) {
       if (ConnState == NetworkEnum.WcfConnState.Loggedin)
@@ -228,8 +246,8 @@
         proxy.ProcessJobResultAsync(clientId, jobId, result, percentage, exception, finished);
     }  
-    #endregion
+    #endregion  */
 
     public ResponseResultReceived SendStoredJobResultsSync(Guid clientId, long jobId, byte[] result, double percentage, Exception exception, bool finished) {
-      return proxy.ProcessJobResult(clientId, jobId, result, percentage, exception, finished);
+      return proxy.StoreFinishedJobResult(clientId, jobId, result, percentage, exception);
     }
   }
Index: /trunk/sources/HeuristicLab.Hive.Client.Communication/app.config
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Client.Communication/app.config	(revision 1378)
+++ /trunk/sources/HeuristicLab.Hive.Client.Communication/app.config	(revision 1379)
@@ -13,6 +13,6 @@
                         maxBytesPerRead="4096" maxNameTableCharCount="16384" />
                     <reliableSession ordered="true" inactivityTimeout="00:10:00"
-                        enabled="false" />
-                    <security mode="Transport">
+                        enabled="true" />
+                    <security mode="None">
                         <transport clientCredentialType="Windows" protectionLevel="EncryptAndSign" />
                         <message clientCredentialType="Windows" />
@@ -22,11 +22,7 @@
         </bindings>
         <client>
-            <endpoint address="net.tcp://10.20.53.2:9000/HiveServer/ClientCommunicator"
+            <endpoint address="net.tcp://10.20.53.3:9000/HiveServer/ClientCommunicator"
                 binding="netTcpBinding" bindingConfiguration="NetTcpBinding_IClientCommunicator"
-                contract="ServerService.IClientCommunicator" name="NetTcpBinding_IClientCommunicator">
-                <identity>
-                    <userPrincipalName value="mse08023@fhs-hagenberg.ac.at" />
-                </identity>
-            </endpoint>
+                contract="ServerService.IClientCommunicator" name="NetTcpBinding_IClientCommunicator" />
         </client>
     </system.serviceModel>
Index: /trunk/sources/HeuristicLab.Hive.Client.Core/ClientConsoleService/ClientConsoleCommunicator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Client.Core/ClientConsoleService/ClientConsoleCommunicator.cs	(revision 1378)
+++ /trunk/sources/HeuristicLab.Hive.Client.Core/ClientConsoleService/ClientConsoleCommunicator.cs	(revision 1379)
@@ -13,8 +13,6 @@
     #region IClientConsoleCommunicator Members
 
-    public StatusCommons GetStatusInfos() {
-      lock (Core.Locker) {
+    public StatusCommons GetStatusInfos() {      
         return ConfigManager.Instance.GetStatusForClientConsole();
-      }
     }
 
Index: /trunk/sources/HeuristicLab.Hive.Client.Core/ConfigurationManager/ConfigManager.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Client.Core/ConfigurationManager/ConfigManager.cs	(revision 1378)
+++ /trunk/sources/HeuristicLab.Hive.Client.Core/ConfigurationManager/ConfigManager.cs	(revision 1379)
@@ -100,4 +100,5 @@
     /// <returns></returns>
     public StatusCommons GetStatusForClientConsole() {
+      //Todo: Locking
       StatusCommons st = new StatusCommons();
       st.ClientGuid = hardwareInfo.ClientId;
@@ -113,7 +114,9 @@
       st.Jobs = new List<JobStatus>();
 
-      foreach (KeyValuePair<long, Executor> kvp in engines) {
-        Executor e = kvp.Value;
-        st.Jobs.Add(new JobStatus { JobId = e.JobId, Progress = e.Progress, Since = e.CreationTime });
+      lock (engines) {
+        foreach (KeyValuePair<long, Executor> kvp in engines) {
+          Executor e = kvp.Value;
+          st.Jobs.Add(new JobStatus { JobId = e.JobId, Progress = e.Progress, Since = e.CreationTime });
+        }
       }
       return st;      
@@ -123,7 +126,9 @@
       Dictionary<long,double> prog = new Dictionary<long,double>();
       Dictionary<long, Executor> engines = Core.GetExecutionEngines();
-      foreach (KeyValuePair<long, Executor> kvp in engines) {
-        Executor e = kvp.Value;
-        prog[e.JobId] = e.Progress;
+      lock (engines) {
+        foreach (KeyValuePair<long, Executor> kvp in engines) {
+          Executor e = kvp.Value;
+          prog[e.JobId] = e.Progress;
+        }
       }
       return prog;
Index: /trunk/sources/HeuristicLab.Hive.Client.Core/Core.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Client.Core/Core.cs	(revision 1378)
+++ /trunk/sources/HeuristicLab.Hive.Client.Core/Core.cs	(revision 1379)
@@ -50,7 +50,5 @@
   /// The core component of the Hive Client
   /// </summary>
-  public class Core: MarshalByRefObject {
-    //Todo: Ask wagner
-    public static Object Locker { get; set; }    
+  public class Core: MarshalByRefObject {       
     public static bool abortRequested { get; set; }
         
@@ -65,6 +63,5 @@
     /// Main Method for the client
     /// </summary>
-    public void Start() {
-      Core.Locker = new Object();
+    public void Start() {      
       abortRequested = false;
 
@@ -79,6 +76,7 @@
       wcfService = WcfService.Instance;
       wcfService.LoginCompleted += new EventHandler<LoginCompletedEventArgs>(wcfService_LoginCompleted);
-      wcfService.SendJobCompleted += new EventHandler<SendJobCompletedEventArgs>(wcfService_PullJobCompleted);
-      wcfService.ProcessJobResultCompleted += new EventHandler<ProcessJobResultCompletedEventArgs>(wcfService_SendJobResultCompleted);
+      wcfService.SendJobCompleted += new EventHandler<SendJobCompletedEventArgs>(wcfService_SendJobCompleted);
+      wcfService.StoreFinishedJobResultCompleted += new EventHandler<StoreFinishedJobResultCompletedEventArgs>(wcfService_StoreFinishedJobResultCompleted);
+      wcfService.ProcessSnapshotCompleted += new EventHandler<ProcessSnapshotCompletedEventArgs>(wcfService_ProcessSnapshotCompleted);
       wcfService.ConnectionRestored += new EventHandler(wcfService_ConnectionRestored);
       wcfService.ServerChanged += new EventHandler(wcfService_ServerChanged);
@@ -105,5 +103,5 @@
         DetermineAction(container);
       }
-    }
+    }    
 
     /// <summary>
@@ -127,7 +125,5 @@
         //Snapshot is ready and can be sent back to the Server
         case MessageContainer.MessageType.SnapshotReady:
-          ThreadPool.QueueUserWorkItem(new WaitCallback(GetSnapshot), container.JobId);
-          //Thread ssr = new Thread(new ParameterizedThreadStart(GetSnapshot));
-          //ssr.Start(container.JobId);          
+          ThreadPool.QueueUserWorkItem(new WaitCallback(GetSnapshot), container.JobId);          
           break;
         //Pull a Job from the Server
@@ -137,7 +133,5 @@
         //A Job has finished and can be sent back to the server
         case MessageContainer.MessageType.FinishedJob:
-          ThreadPool.QueueUserWorkItem(new WaitCallback(GetFinishedJob), container.JobId);
-          //Thread finThread = new Thread(new ParameterizedThreadStart(GetFinishedJob));
-          //finThread.Start(container.JobId);          
+          ThreadPool.QueueUserWorkItem(new WaitCallback(GetFinishedJob), container.JobId);          
           break;     
         //Hard shutdown of the client
@@ -158,5 +152,5 @@
 
         if (WcfService.Instance.ConnState == NetworkEnum.WcfConnState.Loggedin) {
-          wcfService.ProcessJobResultAsync(ConfigManager.Instance.GetClientInfo().ClientId,
+          wcfService.StoreFinishedJobResultAsync(ConfigManager.Instance.GetClientInfo().ClientId,
             jId,
             sJob,
@@ -166,5 +160,5 @@
         } else {          
           JobStorageManager.PersistObjectToDisc(wcfService.ServerIP, wcfService.ServerPort, jId, sJob);
-          lock (Core.Locker) {
+          lock (engines) {
             AppDomain.Unload(appDomains[jId]);
             appDomains.Remove(jId);
@@ -182,5 +176,5 @@
       long jId = (long)jobId;
       byte[] obj = engines[jId].GetSnapshot();
-      wcfService.ProcessJobResultAsync(ConfigManager.Instance.GetClientInfo().ClientId,
+      wcfService.ProcessSnapshotAsync(ConfigManager.Instance.GetClientInfo().ClientId,
         jId,
         obj,
@@ -202,5 +196,5 @@
     }    
 
-    void wcfService_PullJobCompleted(object sender, SendJobCompletedEventArgs e) {
+    void wcfService_SendJobCompleted(object sender, SendJobCompletedEventArgs e) {
       if (e.Result.StatusMessage != ApplicationConstants.RESPONSE_COMMUNICATOR_NO_JOBS_LEFT) {
         bool sandboxed = true;
@@ -209,5 +203,5 @@
         AppDomain appDomain = PluginManager.Manager.CreateAndInitAppDomainWithSandbox(e.Result.Job.Id.ToString(), sandboxed, typeof(TestJob));
         appDomain.UnhandledException += new UnhandledExceptionEventHandler(appDomain_UnhandledException);
-        lock (Locker) {                    
+        lock (engines) {                    
           if (!jobs.ContainsKey(e.Result.Job.Id)) {
             jobs.Add(e.Result.Job.Id, e.Result.Job);
@@ -228,21 +222,17 @@
     }
     
-    //Todo: Seperate this method into 2: Finished jobs and Snapshots
-    void wcfService_SendJobResultCompleted(object sender, ProcessJobResultCompletedEventArgs e) {
+
+    void wcfService_StoreFinishedJobResultCompleted(object sender, StoreFinishedJobResultCompletedEventArgs e) {
       if (e.Result.Success) {        
-        lock (Locker) {
+        lock(engines) {        
           //if the engine is running again -> we sent an snapshot. Otherwise the job was finished
           //this method has a risk concerning race conditions.
           //better expand the sendjobresultcompltedeventargs with a boolean "snapshot?" flag
-          if (e.Result.finished == false) {
-            Logging.Instance.Info(this.ToString(), "Snapshot for Job " + e.Result.JobId + " transmitted");
-          } else {
-            AppDomain.Unload(appDomains[e.Result.JobId]);
-            appDomains.Remove(e.Result.JobId);
-            engines.Remove(e.Result.JobId);
-            jobs.Remove(e.Result.JobId);
-            ClientStatusInfo.JobsProcessed++;
-            Debug.WriteLine("ProcessedJobs to:" + ClientStatusInfo.JobsProcessed);
-          }
+          AppDomain.Unload(appDomains[e.Result.JobId]);
+          appDomains.Remove(e.Result.JobId);
+          engines.Remove(e.Result.JobId);
+          jobs.Remove(e.Result.JobId);
+          ClientStatusInfo.JobsProcessed++;
+          Debug.WriteLine("ProcessedJobs to:" + ClientStatusInfo.JobsProcessed);
         }        
       } else {        
@@ -251,8 +241,12 @@
     }
 
+    void wcfService_ProcessSnapshotCompleted(object sender, ProcessSnapshotCompletedEventArgs e) {
+      Logging.Instance.Info(this.ToString(), "Snapshot " + e.Result.JobId + " has been transmitted according to plan");
+    }
+
     //Todo: First stop all threads, then terminate
     void wcfService_ServerChanged(object sender, EventArgs e) {
       Logging.Instance.Info(this.ToString(), "ServerChanged has been called");
-      lock (Locker) {
+      lock (engines) {
         foreach (KeyValuePair<long, AppDomain> entries in appDomains)
           AppDomain.Unload(appDomains[entries.Key]);
Index: /trunk/sources/HeuristicLab.Hive.Client.Core/Heartbeat.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Client.Core/Heartbeat.cs	(revision 1378)
+++ /trunk/sources/HeuristicLab.Hive.Client.Core/Heartbeat.cs	(revision 1379)
@@ -61,5 +61,5 @@
       heartbeatTimer.Elapsed += new ElapsedEventHandler(heartbeatTimer_Elapsed);
       wcfService = WcfService.Instance;
-      wcfService.SendHeartBeatCompleted += new EventHandler<ProcessHeartBeatCompletedEventArgs>(wcfService_SendHeartBeatCompleted);
+      wcfService.SendHeartBeatCompleted += new EventHandler<ProcessHeartBeatCompletedEventArgs>(wcfService_ProcessHeartBeatCompleted);
       heartbeatTimer.Start();
     }
@@ -75,8 +75,12 @@
       // Todo: remove tempfix for free cores.
 
-      HeartBeatData heartBeatData = new HeartBeatData {
+      PerformanceCounter counter = new PerformanceCounter("Memory", "Available Bytes", true);
+      int mb = (int)(counter.NextValue() / 1024 / 1024);
+
+
+        HeartBeatData heartBeatData = new HeartBeatData {
         ClientId = info.ClientId,
         FreeCores = info.NrOfCores - (ClientStatusInfo.JobsFetched - ClientStatusInfo.JobsProcessed),
-        FreeMemory = 1000,
+        FreeMemory = mb,
         JobProgress = ConfigManager.Instance.GetProgressOfAllJobs()
       };
@@ -88,5 +92,5 @@
     }
 
-    void wcfService_SendHeartBeatCompleted(object sender, ProcessHeartBeatCompletedEventArgs e) {
+    void wcfService_ProcessHeartBeatCompleted(object sender, ProcessHeartBeatCompletedEventArgs e) {
       System.Diagnostics.Debug.WriteLine("Heartbeat received! ");
       e.Result.ActionRequest.ForEach(mc => MessageQueue.GetInstance().AddMessage(mc));
Index: /trunk/sources/HeuristicLab.Hive.Client.Core/JobStorage/JobStorageManager.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Client.Core/JobStorage/JobStorageManager.cs	(revision 1378)
+++ /trunk/sources/HeuristicLab.Hive.Client.Core/JobStorage/JobStorageManager.cs	(revision 1379)
@@ -21,16 +21,19 @@
 
       JobStorageInfo info = new JobStorageInfo { JobID = jobId, ServerIP = serverIP, ServerPort = serverPort, TimeFinished = DateTime.Now };
-      
-      //Todo: Filestream won't be closed if exception occurs
+            
+      Stream jobstream = null;
       try {
-        Stream jobstream = File.Create(path + filename + ".dat");
+        jobstream = File.Create(path + filename + ".dat");
         jobstream.Write(job, 0, job.Length);
         storedJobsList.Add(info);
-        jobstream.Close();
         Logging.Instance.Info("JobStorageManager", "Job " + info.JobID + " stored on the harddisc");
       }
       catch (Exception e) {
         Logging.Instance.Error("JobStorageManager", "Exception: ", e);
-      }       
+      }
+      finally {
+        if(jobstream!=null)
+          jobstream.Close();
+      }
     }
 
