Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Calendar/3.3/Properties/AssemblyInfo.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Calendar/3.3/Properties/AssemblyInfo.cs	(revision 4422)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Calendar/3.3/Properties/AssemblyInfo.cs	(revision 4423)
@@ -58,3 +58,3 @@
 // [assembly: AssemblyVersion("1.0.*")]
 [assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.0.4343")]
+[assembly: AssemblyFileVersion("3.3.0.4368")]
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive 3.3.sln
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive 3.3.sln	(revision 4422)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive 3.3.sln	(revision 4423)
@@ -31,6 +31,4 @@
 		HeuristicLab 3.3.vsmdi = HeuristicLab 3.3.vsmdi
 		LocalTestRun.testrunconfig = LocalTestRun.testrunconfig
-		Performance1.psess = Performance1.psess
-		Performance3.psess = Performance3.psess
 		PreBuildEvent.cmd = PreBuildEvent.cmd
 	EndProjectSection
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/ApplicationConstants.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/ApplicationConstants.cs	(revision 4422)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/ApplicationConstants.cs	(revision 4423)
@@ -39,4 +39,14 @@
     
     public static int JOB_TIME_TO_LIVE = 5;
+
+    /// <summary>
+    /// Interval in which the HL.HiveExperiment will poll results from server
+    /// </summary>
+    public static TimeSpan RESULT_POLLING_INTERVAL = new TimeSpan(0, 0, 5);
+
+    /// <summary>
+    /// Maximum number of jobs that the server should send/receive simultaniously
+    /// </summary>
+    public static int MAX_JOB_TRANSFER_COUNT = 6;
   }
 }
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/HeartBeatData.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/HeartBeatData.cs	(revision 4422)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/HeartBeatData.cs	(revision 4423)
@@ -37,5 +37,5 @@
     public int FreeCores { get; set; }
     [DataMember]
-    public Dictionary<Guid, double> JobProgress { get; set; } // TODO: define Type 
+    public Dictionary<Guid, TimeSpan> JobProgress { get; set; } // TODO: define Type
     [DataMember]
     public bool IsAllowedToCalculate { get; set; } // this is true if slave is allowed to work according to calendar
@@ -43,6 +43,6 @@
     public override string ToString() {
       String val = "SlaveId: " + SlaveId + ", FreeCores: " + FreeCores;
-      foreach (KeyValuePair<Guid, double> kvp in JobProgress) {
-        val += "\nId" + kvp.Key + " Progress " + kvp.Value;
+      foreach (KeyValuePair<Guid, TimeSpan> kvp in JobProgress) {
+        val += "\nId" + kvp.Key + " ExecutionTime " + kvp.Value;
       }
       return val;
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/HiveExperimentDto.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/HiveExperimentDto.cs	(revision 4423)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/HiveExperimentDto.cs	(revision 4423)
@@ -0,0 +1,71 @@
+﻿#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.Common;
+using HeuristicLab.DataAccess;
+using HeuristicLab.PluginInfrastructure;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Hive.Contracts.BusinessObjects {
+
+  [StorableClass]
+  [DataContract]
+  [Serializable]
+  public class HiveExperimentDto : PersistableObject {
+    [Storable]
+    [DataMember]
+    public string Name { get; set; }
+    [Storable]
+    [DataMember]
+    public string Description { get; set; }
+    [Storable]
+    [DataMember]
+    public string ResourceIds { get; set; }
+    [Storable]
+    [DataMember]
+    public Guid UserId { get; set; }
+    [Storable]
+    [DataMember]
+    public Guid? RootJobId { get; set; }
+
+    public override string ToString() {
+      return base.ToString() + "Name: " + Name + ", Description: " + Description + ", ResourceIds: " + ResourceIds;
+    }
+
+    public HiveExperimentDto() {
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      HiveExperimentDto clone = (HiveExperimentDto)base.Clone(cloner);
+      clone.Name = this.Name;
+      clone.Description = this.Description;
+      clone.ResourceIds = this.ResourceIds;
+      clone.RootJobId = this.RootJobId;
+      clone.UserId = this.UserId;
+      return clone;
+    }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/HiveExperimentDtoList.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/HiveExperimentDtoList.cs	(revision 4423)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/HiveExperimentDtoList.cs	(revision 4423)
@@ -0,0 +1,30 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Common;
+using HeuristicLab.Collections;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Hive.Contracts.BusinessObjects {
+  public class HiveExperimentDtoList : ObservableList<HiveExperimentDto>, IDeepCloneable {
+    public HiveExperimentDtoList() { }
+    public HiveExperimentDtoList(IEnumerable<HiveExperimentDto> collection) {
+      this.list = new List<HiveExperimentDto>(collection);
+    }
+
+    [StorableConstructor]
+    protected HiveExperimentDtoList(bool deserializing) : base(deserializing) { }
+
+    public object Clone() {
+      return Clone(new Cloner());
+    }
+
+    public virtual IDeepCloneable Clone(Cloner cloner) {
+      HiveExperimentDtoList clone = (HiveExperimentDtoList)Activator.CreateInstance(this.GetType());
+      cloner.RegisterClonedObject(this, clone);
+      clone.list = (this.Select(x => (HiveExperimentDto)cloner.Clone(x))).ToList();
+      return clone;
+    }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/JobDto.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/JobDto.cs	(revision 4422)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/JobDto.cs	(revision 4423)
@@ -41,5 +41,5 @@
     [Storable]
     [DataMember]
-    public Guid? UserId { get; set; }
+    public Guid UserId { get; set; }
     [Storable]
     [DataMember]
@@ -47,8 +47,8 @@
     [Storable]
     [DataMember]
-    public JobDto ParentJob { get; set; }
+    public Guid? ParentJobId { get; set; }
     [Storable]
     [DataMember]
-    public double? Percentage { get; set; }
+    public TimeSpan ExecutionTime { get; set; }
     [Storable]
     [DataMember]
@@ -104,6 +104,6 @@
       clone.Id = this.Id;
       clone.MemoryNeeded = this.MemoryNeeded;
-      clone.ParentJob = (JobDto)cloner.Clone(this.ParentJob);
-      clone.Percentage = this.Percentage;
+      clone.ParentJobId = this.ParentJobId;
+      clone.ExecutionTime = this.ExecutionTime;
       clone.PluginsNeeded = (from p in this.PluginsNeeded
                              select (HivePluginInfoDto)cloner.Clone(p)).ToList();
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/JobResult.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/JobResult.cs	(revision 4422)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/JobResult.cs	(revision 4423)
@@ -44,5 +44,5 @@
     [Storable]
     [DataMember]
-    public double? Percentage { get; set; }
+    public TimeSpan ExecutionTime { get; set; }
     [Storable]
     [DataMember]
@@ -68,5 +68,5 @@
       clone.DateFinished = this.DateFinished;
       clone.Exception = this.Exception;
-      clone.Percentage = this.Percentage;
+      clone.ExecutionTime = this.ExecutionTime;
       clone.State = this.State;
       clone.ParentJobId = this.ParentJobId;
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/JobState.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/JobState.cs	(revision 4422)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/JobState.cs	(revision 4423)
@@ -6,12 +6,47 @@
 namespace HeuristicLab.Hive.Contracts.BusinessObjects {
   public enum JobState {
+    /// <summary>
+    /// Job is actively calculated on a Slave
+    /// </summary>
     Calculating,
+
+    /// <summary>
+    /// Job is waiting to be calculated
+    /// </summary>
     Offline,
+
+    /// <summary>
+    /// Job as finished and is ready to be collected by the Client
+    /// </summary>
     Finished,
+
+    /// <summary>
+    /// Job is aborted and result can be collected by the Client
+    /// </summary>
     Aborted,
+
+    /// <summary>
+    /// A snapshot has been requested. The calculating slave is responsible for pausing the Job and sending the snapshot to the server. After that state will be SnapshotSent
+    /// </summary>
     SnapshotRequested,
+
+    /// <summary>
+    /// Snapshot has been sent to the server and its calculating again (should'nt it be back to Calculating again?)
+    /// </summary>
     SnapshotSent,
+
+    /// <summary>
+    /// ???
+    /// </summary>
     Pending,
+
+    /// <summary>
+    /// Job as been aborted due to an error. Results are ready to be collected
+    /// </summary>
     Failed,
+
+    /// <summary>
+    /// The job is paused and waits on the server to be sent back to a Slave when all of its child jobs are Finished.
+    /// </summary>
     WaitForChildJobs
   };
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/SerializedJob.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/SerializedJob.cs	(revision 4422)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/SerializedJob.cs	(revision 4423)
@@ -27,4 +27,7 @@
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 using HeuristicLab.Common;
+using System.IO;
+using HeuristicLab.Persistence.Default.Xml;
+using HeuristicLab.Hive.JobBase;
 
 namespace HeuristicLab.Hive.Contracts.BusinessObjects {
@@ -52,4 +55,19 @@
       return Clone(new Cloner());
     }
+
+    public static byte[] Serialize(object obj) {
+      MemoryStream memStream = new MemoryStream();
+      XmlGenerator.Serialize(obj, memStream);
+      byte[] jobByteArray = memStream.ToArray();
+      memStream.Dispose();
+      return jobByteArray;
+    }
+
+    public static T Deserialize<T>(byte[] sjob) {
+      MemoryStream memStream = new MemoryStream(sjob);
+      T job = XmlParser.Deserialize<T>(memStream);
+      memStream.Dispose();
+      return job;
+    }
   }
 }
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/SlaveDto.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/SlaveDto.cs	(revision 4422)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/SlaveDto.cs	(revision 4423)
@@ -35,8 +35,8 @@
     [Storable]
     [DataMember]
-    public int NrOfCores { get; set; }
+    public int? NrOfCores { get; set; }
     [Storable]
     [DataMember]
-    public int NrOfFreeCores { get; set; }
+    public int? NrOfFreeCores { get; set; }
     [Storable]
     [DataMember]
@@ -44,8 +44,8 @@
     [Storable]
     [DataMember]
-    public int Memory { get; set; }
+    public int? Memory { get; set; }
     [Storable]
     [DataMember]
-    public int FreeMemory { get; set; }
+    public int? FreeMemory { get; set; }
     [Storable]
     [DataMember]
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/Disposable.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/Disposable.cs	(revision 4422)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/Disposable.cs	(revision 4423)
@@ -1,3 +1,23 @@
-﻿using System;
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+using System;
 
 namespace HeuristicLab.Hive.Contracts {
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/HeuristicLab.Hive.Contracts-3.3.csproj
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/HeuristicLab.Hive.Contracts-3.3.csproj	(revision 4422)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/HeuristicLab.Hive.Contracts-3.3.csproj	(revision 4423)
@@ -119,4 +119,6 @@
     <Compile Include="BusinessObjects\CachedHivePluginInfoDto.cs" />
     <Compile Include="BusinessObjects\CalendarState.cs" />
+    <Compile Include="BusinessObjects\HiveExperimentDtoList.cs" />
+    <Compile Include="BusinessObjects\HiveExperimentDto.cs" />
     <Compile Include="BusinessObjects\SerializedJobList.cs" />
     <Compile Include="BusinessObjects\SlaveGroupDto.cs" />
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/HiveRoles.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/HiveRoles.cs	(revision 4422)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/HiveRoles.cs	(revision 4423)
@@ -1,3 +1,23 @@
-﻿using System;
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 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;
Index: anches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/HiveServerMessages.resx
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/HiveServerMessages.resx	(revision 4422)
+++ 	(revision )
@@ -1,240 +1,0 @@
-﻿<?xml version="1.0" encoding="utf-8"?>
-<root>
-  <!-- 
-    Microsoft ResX Schema 
-    
-    Version 2.0
-    
-    The primary goals of this format is to allow a simple XML format 
-    that is mostly human readable. The generation and parsing of the 
-    various data types are done through the TypeConverter classes 
-    associated with the data types.
-    
-    Example:
-    
-    ... ado.net/XML headers & schema ...
-    <resheader name="resmimetype">text/microsoft-resx</resheader>
-    <resheader name="version">2.0</resheader>
-    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
-    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
-    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
-    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
-    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
-        <value>[base64 mime encoded serialized .NET Framework object]</value>
-    </data>
-    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
-        <comment>This is a comment</comment>
-    </data>
-                
-    There are any number of "resheader" rows that contain simple 
-    name/value pairs.
-    
-    Each data row contains a name, and value. The row also contains a 
-    type or mimetype. Type corresponds to a .NET class that support 
-    text/value conversion through the TypeConverter architecture. 
-    Classes that don't support this are serialized and stored with the 
-    mimetype set.
-    
-    The mimetype is used for serialized objects, and tells the 
-    ResXResourceReader how to depersist the object. This is currently not 
-    extensible. For a given mimetype the value must be set accordingly:
-    
-    Note - application/x-microsoft.net.object.binary.base64 is the format 
-    that the ResXResourceWriter will generate, however the reader can 
-    read any of the formats listed below.
-    
-    mimetype: application/x-microsoft.net.object.binary.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
-            : and then encoded with base64 encoding.
-    
-    mimetype: application/x-microsoft.net.object.soap.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
-            : and then encoded with base64 encoding.
-
-    mimetype: application/x-microsoft.net.object.bytearray.base64
-    value   : The object must be serialized into a byte array 
-            : using a System.ComponentModel.TypeConverter
-            : and then encoded with base64 encoding.
-    -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
-    <xsd:element name="root" msdata:IsDataSet="true">
-      <xsd:complexType>
-        <xsd:choice maxOccurs="unbounded">
-          <xsd:element name="metadata">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" />
-              </xsd:sequence>
-              <xsd:attribute name="name" use="required" type="xsd:string" />
-              <xsd:attribute name="type" type="xsd:string" />
-              <xsd:attribute name="mimetype" type="xsd:string" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="assembly">
-            <xsd:complexType>
-              <xsd:attribute name="alias" type="xsd:string" />
-              <xsd:attribute name="name" type="xsd:string" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="data">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
-              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
-              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="resheader">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" />
-            </xsd:complexType>
-          </xsd:element>
-        </xsd:choice>
-      </xsd:complexType>
-    </xsd:element>
-  </xsd:schema>
-  <resheader name="resmimetype">
-    <value>text/microsoft-resx</value>
-  </resheader>
-  <resheader name="version">
-    <value>2.0</value>
-  </resheader>
-  <resheader name="reader">
-    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <data name="Client.GetAllClientGroups" xml:space="preserve">
-    <value>All ClientGroups returned</value>
-  </data>
-  <data name="Client.GetAllClients" xml:space="preserve">
-    <value>All Clients returned</value>
-  </data>
-  <data name="Communicator.HeardbeatReceived" xml:space="preserve">
-    <value>Heartbeat received</value>
-  </data>
-  <data name="Communicator.JobPulled" xml:space="preserve">
-    <value>Job sent</value>
-  </data>
-  <data name="Communicator.JobResultReceived" xml:space="preserve">
-    <value>JobResult received, thanks for calculating</value>
-  </data>
-  <data name="Communicator.LoginClientNotRegistered" xml:space="preserve">
-    <value>Sorry this client was not registered yet</value>
-  </data>
-  <data name="Communicator.LoginSuccess" xml:space="preserve">
-    <value>The Login was successfull</value>
-  </data>
-  <data name="Communicator.LogoutSuccess" xml:space="preserve">
-    <value>You where logged out successfully. Good bye</value>
-  </data>
-  <data name="Communicator.LogoutUserAllreadyOnline" xml:space="preserve">
-    <value>A User with this GUID is allready logged in</value>
-  </data>
-  <data name="UserRole.AllUserGroupsReturned" xml:space="preserve">
-    <value>All UserGroups returned</value>
-  </data>
-  <data name="UserRole.GetAllUsers" xml:space="preserve">
-    <value>All Users returned</value>
-  </data>
-  <data name="UserRole.PermissionOwnerAdded" xml:space="preserve">
-    <value>PermissionOwner successfully added</value>
-  </data>
-  <data name="UserRole.PermissionOwnerDoesntExist" xml:space="preserve">
-    <value>PermissionOwner doesnt exist</value>
-  </data>
-  <data name="UserRole.PermissionOwnerRemoved" xml:space="preserve">
-    <value>PermissionOwner successfully removed</value>
-  </data>
-  <data name="UserRole.UserDoesntExist" xml:space="preserve">
-    <value>Sorry, but this user doesn't exist</value>
-  </data>
-  <data name="UserRole.UserExistsAllready" xml:space="preserve">
-    <value>Sorry, but a user with this name exists allready in database</value>
-  </data>
-  <data name="UserRole.UserGroupAdded" xml:space="preserve">
-    <value>UserGroup successfully added to database</value>
-  </data>
-  <data name="UserRole.UsergroupExistsAllready" xml:space="preserve">
-    <value>The UserGroup exists allready</value>
-  </data>
-  <data name="UserRole.UserRemoved" xml:space="preserve">
-    <value>User sucessfully removed from database</value>
-  </data>
-  <data name="UserRole.UserSuccessfullyAdded" xml:space="preserve">
-    <value>User successfully added to database</value>
-  </data>
-  <data name="Client.ClientGroupAdded" xml:space="preserve">
-    <value>ClientGroup successfully added</value>
-  </data>
-  <data name="Client.ClientGroupDoesntExist" xml:space="preserve">
-    <value>The specified ClientGroup doesn't exist</value>
-  </data>
-  <data name="Client.IdMustNotBeSet" xml:space="preserve">
-    <value>In this context the id must not be set</value>
-  </data>
-  <data name="Client.ResourceAddedToGroup" xml:space="preserve">
-    <value>Resource successfully added to ClientGroup</value>
-  </data>
-  <data name="Client.ResourceRemoved" xml:space="preserve">
-    <value>Resource successfully removed from ClientGroup</value>
-  </data>
-  <data name="UserRole.IdMustNotBeSet" xml:space="preserve">
-    <value>In this context the id must not be set</value>
-  </data>
-  <data name="Job.AllJobs" xml:space="preserve">
-    <value>All Jobs returned</value>
-  </data>
-  <data name="Job.IdMustNotBeSet" xml:space="preserve">
-    <value>Id must not be set in this context</value>
-  </data>
-  <data name="Job.JobAdded" xml:space="preserve">
-    <value>Job successfully added to database</value>
-  </data>
-  <data name="Job.JobNull" xml:space="preserve">
-    <value>The job you sent was null</value>
-  </data>
-  <data name="Job.JobRemoved" xml:space="preserve">
-    <value>Job successfully removed</value>
-  </data>
-  <data name="JobDoesntExist" xml:space="preserve">
-    <value>The specified job doesn't exist</value>
-  </data>
-  <data name="UserRole.UsernameExistsAllready" xml:space="preserve">
-    <value>A user with this username exists allready</value>
-  </data>
-  <data name="Communicator.IdMustNotBeSet" xml:space="preserve">
-    <value>The id must not be set in this context</value>
-  </data>
-  <data name="Communicator.NoJobWithThisId" xml:space="preserve">
-    <value>There exists no job with this id</value>
-  </data>
-  <data name="Job.JobStateMustBeOffline" xml:space="preserve">
-    <value>The state of the job must be offline</value>
-  </data>
-  <data name="Communicator.UserNotLoggedIn" xml:space="preserve">
-    <value>User is not logged in, you must login before sending Heartbeats</value>
-  </data>
-  <data name="Communicator.JobIsNotBeenigCalculated" xml:space="preserve">
-    <value>There is no client registered to calculate this job</value>
-  </data>
-  <data name="Communicator.WrongClientForJob" xml:space="preserve">
-    <value>This client is not registered to calculate this job</value>
-  </data>
-  <data name="Job.JobResultSent" xml:space="preserve">
-    <value>Job Result sent successfully</value>
-  </data>
-</root>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/Interfaces/IClientFacade.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/Interfaces/IClientFacade.cs	(revision 4422)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/Interfaces/IClientFacade.cs	(revision 4423)
@@ -49,4 +49,19 @@
     [OperationContract]
     ResponseObject<JobResultList> GetChildJobResults(Guid? parentJobId, bool recursive, bool includeParent);
+
+    /// <summary>
+    /// Returns all experiments for the current user
+    /// </summary>
+    [OperationContract]
+    ResponseObject<HiveExperimentDtoList> GetHiveExperiments();
+    
+    [OperationContract]
+    ResponseObject<HiveExperimentDto> UpdateHiveExperiment(HiveExperimentDto hiveExperimentDto);
+
+    [OperationContract]
+    Response DeleteHiveExperiment(Guid hiveExperimentId);
+
+    [OperationContract]
+    ResponseObject<JobDto> AddChildJob(Guid parentJobId, SerializedJob serializedJob);
   }
 }
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/Interfaces/IJobManager.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/Interfaces/IJobManager.cs	(revision 4422)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/Interfaces/IJobManager.cs	(revision 4423)
@@ -97,4 +97,16 @@
     [OperationContract]
     ResponseObject<JobDto> PauseJob(SerializedJob serializedJob);
+
+    [OperationContract]
+    ResponseObject<HiveExperimentDtoList> GetHiveExperiments();
+
+    [OperationContract]
+    ResponseObject<HiveExperimentDto> UpdateHiveExperiment(HiveExperimentDto hiveExperimentDto);
+
+    [OperationContract]
+    Response DeleteHiveExperiment(Guid hiveExperimentId);
+
+    [OperationContract]
+    Response DeleteChildJobs(Guid jobId);
   }
 }
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/Interfaces/ILifecycleManager.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/Interfaces/ILifecycleManager.cs	(revision 4422)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/Interfaces/ILifecycleManager.cs	(revision 4423)
@@ -26,33 +26,29 @@
 using HeuristicLab.DataAccess.Interfaces;
 
-namespace HeuristicLab.Hive.Contracts.Interfaces {    
+namespace HeuristicLab.Hive.Contracts.Interfaces {
   /// <summary>
   /// Manages the lifecycle of the application
   /// </summary>
-  public interface ILifecycleManager {    
+  public interface ILifecycleManager {
     /// <summary>
     /// Initializes the application
     /// </summary>
-    void Init();
-
-    /// <summary>
-    /// The server heartbeat
-    /// </summary>
-    void RegisterHeartbeat(EventHandler handler);
-
-    /// <summary>
-    /// The startup event
-    /// </summary>
-    void RegisterStartup(EventHandler handler);
-
-    /// <summary>
-    /// The shutdown event
-    /// </summary>
-    void RegisterShutdown(EventHandler handler);
+    void Start();
 
     /// <summary>
     /// Shuts the application down
     /// </summary>
-    void Shutdown();
+    void Stop();
+
+    /// <summary>
+    /// The number of jobs which are transferred at the moment
+    /// </summary>
+    int JobsCurrentlyTransferring { get; set; }
+
+    event EventHandler ServerHeartbeat;
+
+    event EventHandler Started;
+
+    event EventHandler Stopped;
   }
 }
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/Interfaces/ISlaveCommunicator.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/Interfaces/ISlaveCommunicator.cs	(revision 4422)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/Interfaces/ISlaveCommunicator.cs	(revision 4423)
@@ -50,8 +50,8 @@
 
     [OperationContract]
-    ResponseResultReceived StoreFinishedJobResult(Guid clientId, Guid jobId, byte[] result, double percentage, string exception);
+    ResponseResultReceived StoreFinishedJobResult(Guid clientId, Guid jobId, byte[] result, TimeSpan executionTime, string exception);
 
     [OperationContract]
-    ResponseResultReceived ProcessSnapshot(Guid clientId, Guid jobId, byte[] result, double percentage, string exception);
+    ResponseResultReceived ProcessSnapshot(Guid clientId, Guid jobId, byte[] result, TimeSpan executionTime, string exception);
 
     [OperationContract]
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/Interfaces/ISlaveFacade.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/Interfaces/ISlaveFacade.cs	(revision 4422)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/Interfaces/ISlaveFacade.cs	(revision 4423)
@@ -56,4 +56,7 @@
     [OperationContract]
     SerializedJob GetLastSerializedResult(Guid jobId);
+
+    [OperationContract]
+    Response DeleteChildJobs(Guid jobId);
   }
 }
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/MessageContainer.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/MessageContainer.cs	(revision 4422)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/MessageContainer.cs	(revision 4423)
@@ -40,5 +40,6 @@
       FetchOrForceFetchCalendar, AddChildJob,
       PauseJob,
-      GetChildJobs
+      GetChildJobs,
+      DeleteChildJobs
     };
 
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/MessageContainerWithCallback.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/MessageContainerWithCallback.cs	(revision 4422)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/MessageContainerWithCallback.cs	(revision 4423)
@@ -1,3 +1,23 @@
-﻿using System;
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 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 HeuristicLab.Common;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/ResponseStatus.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/ResponseStatus.cs	(revision 4422)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/ResponseStatus.cs	(revision 4423)
@@ -1,3 +1,23 @@
-﻿using System;
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 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;
@@ -5,7 +25,4 @@
 
 namespace HeuristicLab.Hive.Contracts {
-  /// <summary>
-  /// [chn] todo: make names consistent: NotFound, DoesNotExist, NotAvailable, ...
-  /// </summary>
   public enum ResponseStatus {
     Ok,
@@ -18,5 +35,5 @@
     GetJobByIdWithDetails_JobDoesNotExist, // ApplicationConstants.RESPONSE_JOB_JOB_DOESNT_EXIST
 
-    AddNewJob_JobStateMustBeOffline, // ApplicationConstants.RESPONSE_JOB_JOBSTATE_MUST_BE_OFFLINE
+    AddNewJob_InvalidJobState, // ApplicationConstants.RESPONSE_JOB_JOBSTATE_MUST_BE_OFFLINE
     AddNewJob_JobIdMustNotBeSet, // ApplicationConstants.RESPONSE_JOB_ID_MUST_NOT_BE_SET
     AddNewJob_JobNull, // ApplicationConstants.RESPONSE_JOB_JOB_NULL
@@ -30,8 +47,8 @@
     AbortJob_JobIsNotBeeingCalculated, // ApplicationConstants.RESPONSE_JOB_IS_NOT_BEEING_CALCULATED
 
-    GetCalendar_ResourceNotFound, // ApplicationConstants.RESPONSE_CLIENT_RESOURCE_NOT_FOUND
+    GetCalendar_ResourceDoesNotExist, // ApplicationConstants.RESPONSE_CLIENT_RESOURCE_NOT_FOUND
     GetCalendar_NoCalendarFound, // ApplicationConstants.RESPONSE_UPTIMECALENDAR_NO_CALENDAR_FOUND
 
-    SetCalendarStatus_ResourceNotFound, // ApplicationConstants.RESPONSE_CLIENT_RESOURCE_NOT_FOUND
+    SetCalendarStatus_ResourceDoesNotExist, // ApplicationConstants.RESPONSE_CLIENT_RESOURCE_NOT_FOUND
 
     ProcessHeartBeat_UserNotLoggedIn, // ApplicationConstants.RESPONSE_COMMUNICATOR_USER_NOT_LOGGED_IN
@@ -60,8 +77,11 @@
     DeleteResourceFromGroup_SlaveGroupDoesNotExist, // ApplicationConstants.RESPONSE_CLIENT_CLIENTGROUP_DOESNT_EXIST
 
-    GetAllGroupsOfResource_ResourceNotFound, // ApplicationConstants.RESPONSE_CLIENT_RESOURCE_NOT_FOUND
+    GetAllGroupsOfResource_ResourceDoesNotExist, // ApplicationConstants.RESPONSE_CLIENT_RESOURCE_NOT_FOUND
 
     DeleteSlaveGroup_SlaveGroupDoesNotExist, // ApplicationConstants.RESPONSE_CLIENT_CLIENTGROUP_DOESNT_EXIST
 
+    GetLastSerializedResult_JobDoesNotExist,
+    DeleteHiveExperiment_Failed,
+    DeleteChildJobs_Failed,
   }
 }
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/StreamedObject.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/StreamedObject.cs	(revision 4422)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/StreamedObject.cs	(revision 4423)
@@ -1,3 +1,23 @@
-﻿using System;
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 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;
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/WcfServicePool.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/WcfServicePool.cs	(revision 4422)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/WcfServicePool.cs	(revision 4423)
@@ -1,13 +1,65 @@
-﻿using System;
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 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.ServiceModel;
 using HeuristicLab.Common;
+using HeuristicLab.Tracing;
 
 namespace HeuristicLab.Hive.Contracts {
   public class WcfServicePool<T> {
     private static object locker = new object();
+
     private string hostAddress;
+    public string HostAddress {
+      get { return hostAddress; }
+      set {
+        if (hostAddress != value) {
+          hostAddress = value;
+          this.factory = null;
+        } 
+      }
+    }
+
+    private string endpointName;
+
     private string username;
+    public string Username {
+      get { return username; }
+      set { 
+        if(username != value) {
+          username = value;
+          this.factory = null;
+        }
+      }
+    }
+
     private string password;
-    private string endpointName;
+    public string Password {
+      set {
+        if (password != value) {
+          password = value;
+          this.factory = null;
+        }
+      }
+    }
+
     private ChannelFactory<T> factory = null;
     private Disposable<T> disposableService = null;
@@ -41,5 +93,5 @@
         factory.Credentials.UserName.Password = password;
       }
-
+      
       return factory.CreateChannel();
     }
@@ -48,10 +100,34 @@
       lock (locker) {
         requestCount++;
+        Logger.Debug("Request for ServiceProxy (count: " + requestCount + ")");
+        if (disposableService != null) {
+          if (GetServiceState() == CommunicationState.Faulted) {
+            DisposeService();
+          }
+        }
         if (disposableService == null) {
-          disposableService = new Disposable<T>(CreateFacade(endpointName));
-          disposableService.OnDisposing += new EventHandler(disposableService_OnDisposing);
-        }
+          disposableService = new Disposable<T>(CreateFacade(this.endpointName));
+          RegisterServiceEvents();
+        }        
         return disposableService;
       }
+    }
+
+    private void RegisterServiceEvents() {
+      disposableService.OnDisposing += new EventHandler(disposableService_OnDisposing);
+      ((ICommunicationObject)disposableService.Obj).Faulted += new EventHandler(WcfServicePool_Faulted);
+    }
+
+    private void DeregisterServiceEvents() {
+      disposableService.OnDisposing -= new EventHandler(disposableService_OnDisposing);
+      ((ICommunicationObject)disposableService.Obj).Faulted -= new EventHandler(WcfServicePool_Faulted);
+    }
+
+    private CommunicationState GetServiceState() {
+      return ((ICommunicationObject)disposableService.Obj).State;
+    }
+
+    void WcfServicePool_Faulted(object sender, EventArgs e) {
+      OnExceptionOccured(new CommunicationException(e.ToString()));
     }
 
@@ -63,7 +139,16 @@
       lock (locker) {
         requestCount--;
+        Logger.Debug("Disposing ServiceProxy (count: " + requestCount + ")");
         if (requestCount == 0) {
-          WcfSettings.DisposeWcfClient((ICommunicationObject)disposableService.Obj);
-          disposableService = null;
+          try {
+            DeregisterServiceEvents();
+            WcfSettings.DisposeWcfClient((ICommunicationObject)disposableService.Obj);
+          }
+          catch (Exception e) {
+            OnExceptionOccured(e);
+          }
+          finally {
+            disposableService = null;
+          }
         } else if (requestCount < 0) {
           throw new WcfServicePoolException("requestCount cannot be less than 0.");
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/WcfServicePoolException.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/WcfServicePoolException.cs	(revision 4422)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/WcfServicePoolException.cs	(revision 4423)
@@ -1,3 +1,23 @@
-﻿using System;
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+using System;
 
 namespace HeuristicLab.Hive.Contracts {
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/WcfSettings.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/WcfSettings.cs	(revision 4422)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/WcfSettings.cs	(revision 4423)
@@ -1,3 +1,23 @@
-﻿//#define USE_MSG_BINDING
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 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
+//#define USE_MSG_BINDING
 using System;
 using System.Collections.Generic;
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/HeuristicLab.Hive.Experiment.Views-3.3.csproj
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/HeuristicLab.Hive.Experiment.Views-3.3.csproj	(revision 4422)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/HeuristicLab.Hive.Experiment.Views-3.3.csproj	(revision 4423)
@@ -142,22 +142,15 @@
     </Compile>
     <Compile Include="ControlExtensions.cs" />
-    <Compile Include="Form1.cs">
-      <SubType>Form</SubType>
-    </Compile>
-    <Compile Include="Form1.Designer.cs">
-      <DependentUpon>Form1.cs</DependentUpon>
-    </Compile>
-    <Compile Include="TestApp.cs" />
-    <Compile Include="JobConfigListView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="JobConfigListView.Designer.cs">
-      <DependentUpon>JobConfigListView.cs</DependentUpon>
-    </Compile>
-    <Compile Include="JobConfigView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="JobConfigView.Designer.cs">
-      <DependentUpon>JobConfigView.cs</DependentUpon>
+    <Compile Include="HiveJobListView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="HiveJobListView.Designer.cs">
+      <DependentUpon>HiveJobListView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="HiveJobView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="HiveJobView.Designer.cs">
+      <DependentUpon>HiveJobView.cs</DependentUpon>
     </Compile>
     <Compile Include="HiveExperimentListView.cs">
@@ -179,16 +172,4 @@
     <Compile Include="HiveExperimentView.Designer.cs">
       <DependentUpon>HiveExperimentView.cs</DependentUpon>
-    </Compile>
-    <Compile Include="JobItemListView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="JobItemListView.Designer.cs">
-      <DependentUpon>JobItemListView.cs</DependentUpon>
-    </Compile>
-    <Compile Include="JobItemView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="JobItemView.Designer.cs">
-      <DependentUpon>JobItemView.cs</DependentUpon>
     </Compile>
     <Compile Include="MenuItems\ConnectionSetupMenuItem.cs" />
@@ -232,9 +213,6 @@
       <DependentUpon>ConnectionSetupView.cs</DependentUpon>
     </EmbeddedResource>
-    <EmbeddedResource Include="Form1.resx">
-      <DependentUpon>Form1.cs</DependentUpon>
-    </EmbeddedResource>
-    <EmbeddedResource Include="JobConfigView.resx">
-      <DependentUpon>JobConfigView.cs</DependentUpon>
+    <EmbeddedResource Include="HiveJobView.resx">
+      <DependentUpon>HiveJobView.cs</DependentUpon>
     </EmbeddedResource>
     <EmbeddedResource Include="HiveClientView.resx">
@@ -243,7 +221,5 @@
     <EmbeddedResource Include="HiveExperimentView.resx">
       <DependentUpon>HiveExperimentView.cs</DependentUpon>
-    </EmbeddedResource>
-    <EmbeddedResource Include="JobItemView.resx">
-      <DependentUpon>JobItemView.cs</DependentUpon>
+      <SubType>Designer</SubType>
     </EmbeddedResource>
     <EmbeddedResource Include="ProgressView.resx">
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/HiveClientView.Designer.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/HiveClientView.Designer.cs	(revision 4422)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/HiveClientView.Designer.cs	(revision 4423)
@@ -45,36 +45,10 @@
     /// </summary>
     private void InitializeComponent() {
-      this.tabControl = new System.Windows.Forms.TabControl();
-      this.experimentsTabPage = new System.Windows.Forms.TabPage();
+      System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(HiveClientView));
       this.hiveExperimentListView = new HeuristicLab.Hive.Experiment.Views.HiveExperimentListView();
-      this.logTabPage = new System.Windows.Forms.TabPage();
       this.updateExperimentsButton = new System.Windows.Forms.Button();
-      this.tabControl.SuspendLayout();
-      this.experimentsTabPage.SuspendLayout();
+      this.updateExperimentsPanel = new System.Windows.Forms.Panel();
+      this.updateExperimentsPanel.SuspendLayout();
       this.SuspendLayout();
-      // 
-      // tabControl
-      // 
-      this.tabControl.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
-                  | System.Windows.Forms.AnchorStyles.Left)
-                  | System.Windows.Forms.AnchorStyles.Right)));
-      this.tabControl.Controls.Add(this.experimentsTabPage);
-      this.tabControl.Controls.Add(this.logTabPage);
-      this.tabControl.Location = new System.Drawing.Point(3, 3);
-      this.tabControl.Name = "tabControl";
-      this.tabControl.SelectedIndex = 0;
-      this.tabControl.Size = new System.Drawing.Size(729, 489);
-      this.tabControl.TabIndex = 4;
-      // 
-      // experimentsTabPage
-      // 
-      this.experimentsTabPage.Controls.Add(this.hiveExperimentListView);
-      this.experimentsTabPage.Location = new System.Drawing.Point(4, 22);
-      this.experimentsTabPage.Name = "experimentsTabPage";
-      this.experimentsTabPage.Padding = new System.Windows.Forms.Padding(3);
-      this.experimentsTabPage.Size = new System.Drawing.Size(721, 463);
-      this.experimentsTabPage.TabIndex = 0;
-      this.experimentsTabPage.Text = "Experiments";
-      this.experimentsTabPage.UseVisualStyleBackColor = true;
       // 
       // hiveExperimentListView
@@ -85,26 +59,19 @@
       this.hiveExperimentListView.Caption = "HiveExperimentList View";
       this.hiveExperimentListView.Content = null;
-      this.hiveExperimentListView.Location = new System.Drawing.Point(6, 6);
+      this.hiveExperimentListView.Location = new System.Drawing.Point(3, 3);
       this.hiveExperimentListView.Name = "hiveExperimentListView";
       this.hiveExperimentListView.ReadOnly = false;
-      this.hiveExperimentListView.Size = new System.Drawing.Size(712, 437);
+      this.hiveExperimentListView.Size = new System.Drawing.Size(729, 518);
       this.hiveExperimentListView.TabIndex = 0;
-      // 
-      // logTabPage
-      // 
-      this.logTabPage.Location = new System.Drawing.Point(4, 22);
-      this.logTabPage.Name = "logTabPage";
-      this.logTabPage.Padding = new System.Windows.Forms.Padding(3);
-      this.logTabPage.Size = new System.Drawing.Size(721, 463);
-      this.logTabPage.TabIndex = 1;
-      this.logTabPage.Text = "Log";
-      this.logTabPage.UseVisualStyleBackColor = true;
       // 
       // updateExperimentsButton
       // 
-      this.updateExperimentsButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
-      this.updateExperimentsButton.Location = new System.Drawing.Point(3, 498);
+      this.updateExperimentsButton.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.updateExperimentsButton.Image = ((System.Drawing.Image)(resources.GetObject("updateExperimentsButton.Image")));
+      this.updateExperimentsButton.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
+      this.updateExperimentsButton.Location = new System.Drawing.Point(87, 28);
       this.updateExperimentsButton.Name = "updateExperimentsButton";
-      this.updateExperimentsButton.Size = new System.Drawing.Size(144, 23);
+      this.updateExperimentsButton.Size = new System.Drawing.Size(175, 59);
       this.updateExperimentsButton.TabIndex = 5;
       this.updateExperimentsButton.Text = "Update Experiment List";
@@ -112,14 +79,21 @@
       this.updateExperimentsButton.Click += new System.EventHandler(this.updateExperimentsButton_Click);
       // 
+      // updateExperimentsPanel
+      // 
+      this.updateExperimentsPanel.Controls.Add(this.updateExperimentsButton);
+      this.updateExperimentsPanel.Location = new System.Drawing.Point(228, 0);
+      this.updateExperimentsPanel.Name = "updateExperimentsPanel";
+      this.updateExperimentsPanel.Size = new System.Drawing.Size(360, 103);
+      this.updateExperimentsPanel.TabIndex = 6;
+      // 
       // HiveClientView
       // 
       this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
       this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-      this.Controls.Add(this.tabControl);
-      this.Controls.Add(this.updateExperimentsButton);
+      this.Controls.Add(this.updateExperimentsPanel);
+      this.Controls.Add(this.hiveExperimentListView);
       this.Name = "HiveClientView";
       this.Size = new System.Drawing.Size(735, 524);
-      this.tabControl.ResumeLayout(false);
-      this.experimentsTabPage.ResumeLayout(false);
+      this.updateExperimentsPanel.ResumeLayout(false);
       this.ResumeLayout(false);
 
@@ -127,9 +101,7 @@
     #endregion
 
-    private System.Windows.Forms.TabControl tabControl;
-    private System.Windows.Forms.TabPage experimentsTabPage;
-    private System.Windows.Forms.TabPage logTabPage;
     private System.Windows.Forms.Button updateExperimentsButton;
     private HiveExperimentListView hiveExperimentListView;
+    private System.Windows.Forms.Panel updateExperimentsPanel;
 
 
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/HiveClientView.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/HiveClientView.cs	(revision 4422)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/HiveClientView.cs	(revision 4423)
@@ -30,4 +30,5 @@
 using HeuristicLab.Optimization.Views;
 using HeuristicLab.Hive.Experiment.Properties;
+using System.Threading;
 
 namespace HeuristicLab.Hive.Experiment.Views {
@@ -38,4 +39,6 @@
   [Content(typeof(HiveClient), true)]
   public sealed partial class HiveClientView : ItemView {
+    private ProgressView progressView;
+
     public new HiveClient Content {
       get { return (HiveClient)base.Content; }
@@ -48,18 +51,36 @@
     public HiveClientView() {
       InitializeComponent();
+      updateExperimentsPanel.Dock = DockStyle.Fill;
     }
 
     protected override void OnContentChanged() {
       base.OnContentChanged();
-      if (Content == null) {
-        this.hiveExperimentListView.Content = null;
-      } else {
+      Content_HiveExperimentsChanged(this, EventArgs.Empty);
+      Content_IsProgressingChanged(this, EventArgs.Empty);
+    }
+
+    protected override void RegisterContentEvents() {
+      this.Content.HiveExperimentsChanged += new EventHandler(Content_HiveExperimentsChanged);
+      this.Content.IsProgressingChanged += new EventHandler(Content_IsProgressingChanged);
+    }
+
+    protected override void DeregisterContentEvents() {
+      this.Content.HiveExperimentsChanged -= new EventHandler(Content_HiveExperimentsChanged);
+      this.Content.IsProgressingChanged -= new EventHandler(Content_IsProgressingChanged);
+    }
+
+    private void Content_HiveExperimentsChanged(object sender, EventArgs e) {
+      if (Content != null) {
         this.hiveExperimentListView.Content = Content.HiveExperiments;
       }
     }
 
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      updateExperimentsPanel.Visible = Content != null && Content.HiveExperiments == null;
+
+    }
+
     private void updateExperimentsButton_Click(object sender, EventArgs e) {
-      ProgressView progressView = new ProgressView(this, "Loading Experiments from server...", true);
-
       MethodInvoker invoker = new MethodInvoker(Content.UpdateExperimentList);
       invoker.BeginInvoke((ar) => {
@@ -67,9 +88,37 @@
           invoker.EndInvoke(ar);
         }
-        finally {
-          progressView.Finish();
+        catch (Exception ex) {
+          ThreadPool.QueueUserWorkItem(delegate(object exception) { ErrorHandling.ShowErrorDialog(this, (Exception)exception); }, ex);
         }
       }, null);
     }
+
+    private void Content_IsProgressingChanged(object sender, EventArgs e) {
+      if (this.InvokeRequired) {
+        Invoke(new EventHandler(Content_IsProgressingChanged), sender, e);
+      } else {
+        if (Content != null && Content.IsProgressing) {
+          SetProgressView();
+        } else {
+          FinishProgressView();
+        }
+      }
+    }
+
+    private void SetProgressView() {
+      if (progressView == null) {
+        progressView = new ProgressView(this, Content.Progress);
+      } else {
+        progressView.Progress = Content.Progress;
+      }
+    }
+
+    private void FinishProgressView() {
+      if (progressView != null) {
+        progressView.Finish();
+        progressView = null;
+        SetEnabledStateOfControls();
+      }
+    }
   }
 }
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/HiveClientView.resx
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/HiveClientView.resx	(revision 4422)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/HiveClientView.resx	(revision 4423)
@@ -118,4 +118,70 @@
     <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </resheader>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="updateExperimentsButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAACH
+        DwAAjA8AAP1SAACBQAAAfXkAAOmLAAA85QAAGcxzPIV3AAAKOWlDQ1BQaG90b3Nob3AgSUNDIHByb2Zp
+        bGUAAEjHnZZ3VFTXFofPvXd6oc0wAlKG3rvAANJ7k15FYZgZYCgDDjM0sSGiAhFFRJoiSFDEgNFQJFZE
+        sRAUVLAHJAgoMRhFVCxvRtaLrqy89/Ly++Osb+2z97n77L3PWhcAkqcvl5cGSwGQyhPwgzyc6RGRUXTs
+        AIABHmCAKQBMVka6X7B7CBDJy82FniFyAl8EAfB6WLwCcNPQM4BOB/+fpFnpfIHomAARm7M5GSwRF4g4
+        JUuQLrbPipgalyxmGCVmvihBEcuJOWGRDT77LLKjmNmpPLaIxTmns1PZYu4V8bZMIUfEiK+ICzO5nCwR
+        3xKxRoowlSviN+LYVA4zAwAUSWwXcFiJIjYRMYkfEuQi4uUA4EgJX3HcVyzgZAvEl3JJS8/hcxMSBXQd
+        li7d1NqaQffkZKVwBALDACYrmcln013SUtOZvBwAFu/8WTLi2tJFRbY0tba0NDQzMv2qUP91829K3NtF
+        ehn4uWcQrf+L7a/80hoAYMyJarPziy2uCoDOLQDI3fti0zgAgKSobx3Xv7oPTTwviQJBuo2xcVZWlhGX
+        wzISF/QP/U+Hv6GvvmckPu6P8tBdOfFMYYqALq4bKy0lTcinZ6QzWRy64Z+H+B8H/nUeBkGceA6fwxNF
+        hImmjMtLELWbx+YKuGk8Opf3n5r4D8P+pMW5FonS+BFQY4yA1HUqQH7tBygKESDR+8Vd/6NvvvgwIH55
+        4SqTi3P/7zf9Z8Gl4iWDm/A5ziUohM4S8jMX98TPEqABAUgCKpAHykAd6ABDYAasgC1wBG7AG/iDEBAJ
+        VgMWSASpgA+yQB7YBApBMdgJ9oBqUAcaQTNoBcdBJzgFzoNL4Bq4AW6D+2AUTIBnYBa8BgsQBGEhMkSB
+        5CEVSBPSh8wgBmQPuUG+UBAUCcVCCRAPEkJ50GaoGCqDqqF6qBn6HjoJnYeuQIPQXWgMmoZ+h97BCEyC
+        qbASrAUbwwzYCfaBQ+BVcAK8Bs6FC+AdcCXcAB+FO+Dz8DX4NjwKP4PnEIAQERqiihgiDMQF8UeikHiE
+        j6xHipAKpAFpRbqRPuQmMorMIG9RGBQFRUcZomxRnqhQFAu1BrUeVYKqRh1GdaB6UTdRY6hZ1Ec0Ga2I
+        1kfboL3QEegEdBa6EF2BbkK3oy+ib6Mn0K8xGAwNo42xwnhiIjFJmLWYEsw+TBvmHGYQM46Zw2Kx8lh9
+        rB3WH8vECrCF2CrsUexZ7BB2AvsGR8Sp4Mxw7rgoHA+Xj6vAHcGdwQ3hJnELeCm8Jt4G749n43PwpfhG
+        fDf+On4Cv0CQJmgT7AghhCTCJkIloZVwkfCA8JJIJKoRrYmBRC5xI7GSeIx4mThGfEuSIemRXEjRJCFp
+        B+kQ6RzpLuklmUzWIjuSo8gC8g5yM/kC+RH5jQRFwkjCS4ItsUGiRqJDYkjiuSReUlPSSXK1ZK5kheQJ
+        yeuSM1J4KS0pFymm1HqpGqmTUiNSc9IUaVNpf+lU6RLpI9JXpKdksDJaMm4ybJkCmYMyF2TGKQhFneJC
+        YVE2UxopFykTVAxVm+pFTaIWU7+jDlBnZWVkl8mGyWbL1sielh2lITQtmhcthVZKO04bpr1borTEaQln
+        yfYlrUuGlszLLZVzlOPIFcm1yd2WeydPl3eTT5bfJd8p/1ABpaCnEKiQpbBf4aLCzFLqUtulrKVFS48v
+        vacIK+opBimuVTyo2K84p6Ss5KGUrlSldEFpRpmm7KicpFyufEZ5WoWiYq/CVSlXOavylC5Ld6Kn0Cvp
+        vfRZVUVVT1Whar3qgOqCmrZaqFq+WpvaQ3WCOkM9Xr1cvUd9VkNFw08jT6NF454mXpOhmai5V7NPc15L
+        Wytca6tWp9aUtpy2l3audov2Ax2yjoPOGp0GnVu6GF2GbrLuPt0berCehV6iXo3edX1Y31Kfq79Pf9AA
+        bWBtwDNoMBgxJBk6GWYathiOGdGMfI3yjTqNnhtrGEcZ7zLuM/5oYmGSYtJoct9UxtTbNN+02/R3Mz0z
+        llmN2S1zsrm7+QbzLvMXy/SXcZbtX3bHgmLhZ7HVosfig6WVJd+y1XLaSsMq1qrWaoRBZQQwShiXrdHW
+        ztYbrE9Zv7WxtBHYHLf5zdbQNtn2iO3Ucu3lnOWNy8ft1OyYdvV2o/Z0+1j7A/ajDqoOTIcGh8eO6o5s
+        xybHSSddpySno07PnU2c+c7tzvMuNi7rXM65Iq4erkWuA24ybqFu1W6P3NXcE9xb3Gc9LDzWepzzRHv6
+        eO7yHPFS8mJ5NXvNelt5r/Pu9SH5BPtU+zz21fPl+3b7wX7efrv9HqzQXMFb0ekP/L38d/s/DNAOWBPw
+        YyAmMCCwJvBJkGlQXlBfMCU4JvhI8OsQ55DSkPuhOqHC0J4wybDosOaw+XDX8LLw0QjjiHUR1yIVIrmR
+        XVHYqLCopqi5lW4r96yciLaILoweXqW9KnvVldUKq1NWn46RjGHGnIhFx4bHHol9z/RnNjDn4rziauNm
+        WS6svaxnbEd2OXuaY8cp40zG28WXxU8l2CXsTphOdEisSJzhunCruS+SPJPqkuaT/ZMPJX9KCU9pS8Wl
+        xqae5Mnwknm9acpp2WmD6frphemja2zW7Fkzy/fhN2VAGasyugRU0c9Uv1BHuEU4lmmfWZP5Jiss60S2
+        dDYvuz9HL2d7zmSue+63a1FrWWt78lTzNuWNrXNaV78eWh+3vmeD+oaCDRMbPTYe3kTYlLzpp3yT/LL8
+        V5vDN3cXKBVsLBjf4rGlpVCikF84stV2a9021DbutoHt5turtn8sYhddLTYprih+X8IqufqN6TeV33za
+        Eb9joNSydP9OzE7ezuFdDrsOl0mX5ZaN7/bb3VFOLy8qf7UnZs+VimUVdXsJe4V7Ryt9K7uqNKp2Vr2v
+        Tqy+XeNc01arWLu9dn4fe9/Qfsf9rXVKdcV17w5wD9yp96jvaNBqqDiIOZh58EljWGPft4xvm5sUmoqb
+        PhziHRo9HHS4t9mqufmI4pHSFrhF2DJ9NProje9cv+tqNWytb6O1FR8Dx4THnn4f+/3wcZ/jPScYJ1p/
+        0Pyhtp3SXtQBdeR0zHYmdo52RXYNnvQ+2dNt293+o9GPh06pnqo5LXu69AzhTMGZT2dzz86dSz83cz7h
+        /HhPTM/9CxEXbvUG9g5c9Ll4+ZL7pQt9Tn1nL9tdPnXF5srJq4yrndcsr3X0W/S3/2TxU/uA5UDHdavr
+        XTesb3QPLh88M+QwdP6m681Lt7xuXbu94vbgcOjwnZHokdE77DtTd1PuvriXeW/h/sYH6AdFD6UeVjxS
+        fNTws+7PbaOWo6fHXMf6Hwc/vj/OGn/2S8Yv7ycKnpCfVEyqTDZPmU2dmnafvvF05dOJZ+nPFmYKf5X+
+        tfa5zvMffnP8rX82YnbiBf/Fp99LXsq/PPRq2aueuYC5R69TXy/MF72Rf3P4LeNt37vwd5MLWe+x7ys/
+        6H7o/ujz8cGn1E+f/gUDmPP8usTo0wAAAAlwSFlzAAAOwgAADsIBFShKgAAAA2JJREFUOE9lk31MFHQY
+        x59JZIU62/QPF1gauDJXjkpyZLxVMEEubgpKU0NePKS6yp168qaJ4OIlMhUH6hRWChyuuuTaQjqFk8j0
+        MEhlURdMRgp0XERccfjpx7G1Vn8822+/fb/fz/f54xFA/jtDf03S4fyTloE/6PhlFNfvY0xMTCjZ/7X/
+        mCfv3qXH7ab6lp387i/Y2VWE9mIhcdZk1phrybXeofvWIG6l+XeQN8CtzJ/fucHb10rZ013N0f5zHOyr
+        Ytf3kWhb5hJQnciMfb+y9HA/J1u6cTqdTE5OeoPEo8y1A00kWFcr8jZqBk185f6Bc6MOCntySLItYuGZ
+        /UiRE9lhZ05RGdWNNoaHh6cDrricrLI8yfpLj5B/U0vlgJVPRppoc1/l1O1O1rZ08NDpC8wo7kP25iE5
+        QmD2IWw2G2NjY0hi/TB+Zbm83BxA6uVgjNdTybuZzIEfjRT/BDHn4b5jClVWiOwPRoyCzxvPkFtSRW9v
+        L/Jwwc/Irhs83hBI5Jf+JFxcoKjBpLS3o7kA/meU+QMP8l4m8q4vsn0mPrp5xGYV0q40MkvfgbzlYNah
+        LSxuEB6tiyfIdJSFtTD7pDIfnFDkAaRgij4XyVjB7JTnCd2YQ2NjI+KX2ops/U616OTe97fje3gH91em
+        Ih+q/2IVUPAbkl+qRhRduEfnS0DaS4SsM1JfX4/MT7ciSc2I7ppq0o/s7lR1w5Q5SJmOI4YeRG9CtkXh
+        k76EBVuXsTwtixfWGqirq0OW7/4aiVRJiU3Ia5dUxS5k5yvTxGw1GZXIhstIrA0/TSnP6jaxcnM5mg2Z
+        mM1mBbD047OqBok4jcR9hiScR9afQt5U5i3hSLwFiT6LhNbwYNQRNLojPLG6jKys12lra0Ou991mWd63
+        PBCi6k5NaC0z47OZszEUCTuBrKzB57kTzI/4mJCkJp7WmoiI3UxJSQkOhwMZHx+ntrWLoGw7gWvM+Ieb
+        WKItYrGmnHlhDSyKOcsKtV5M2jc8laDeL6ZgMBiwWq2Mjo5OX9fIyAifNrcRvcfMY5ntRGW0EpveSlzG
+        FeJ1Vwl5tZml0fuI0WzCaDRisVgYHBz03oM3YOrhcrmw2+2UV33EunfKiUo5QHjyXiISDWiTdej1eioq
+        Krx7Dw0N4fF4vLfwN80WjZRSOVvaAAAAAElFTkSuQmCC
+</value>
+  </data>
   <metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
     <value>57</value>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/HiveExperimentListView.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/HiveExperimentListView.cs	(revision 4422)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/HiveExperimentListView.cs	(revision 4423)
@@ -29,5 +29,26 @@
 
     protected override void SetEnabledStateOfControls() {
-      base.SetEnabledStateOfControls();
+      if (InvokeRequired) {
+        this.InvokeIfRequired(c => { SetEnabledStateOfControls(); });
+      } else {
+        base.SetEnabledStateOfControls();
+        if (Content != null) {
+          if (itemsListView.SelectedItems.Count > 0) {
+            // only allow delete-operation if all selected items are stored in hive (they have HiveExperimentId)
+            bool canRemove = true;
+            foreach (ListViewItem item in itemsListView.SelectedItems) {
+              canRemove = canRemove && Content[item.Index].HiveExperimentId != Guid.Empty;
+            }
+            this.removeButton.Enabled = canRemove;
+          }
+        }
+      }
+    }
+
+    protected override void removeButton_Click(object sender, EventArgs e) {
+      DialogResult result = MessageBox.Show("This action will permanently delete this experiment (also on the hive server). Continue?", "Delete Experiment", MessageBoxButtons.OKCancel);
+      if (result == DialogResult.OK) {
+        base.removeButton_Click(sender, e);
+      }
     }
   }
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/HiveExperimentView.Designer.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/HiveExperimentView.Designer.cs	(revision 4422)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/HiveExperimentView.Designer.cs	(revision 4423)
@@ -52,11 +52,9 @@
       this.experimentNamedItemView = new HeuristicLab.Core.Views.NamedItemView();
       this.viewExperimentButton = new System.Windows.Forms.Button();
-      this.configurationTabPage = new System.Windows.Forms.TabPage();
-      this.updateJobConfigTreeButton = new System.Windows.Forms.Button();
       this.jobsTabPage = new System.Windows.Forms.TabPage();
-      this.runsTabPage = new System.Windows.Forms.TabPage();
-      this.runCollectionView = new HeuristicLab.Optimization.Views.RunCollectionView();
+      this.hiveJobView = new HeuristicLab.Hive.Experiment.Views.HiveJobView();
       this.logTabPage = new System.Windows.Forms.TabPage();
       this.logView = new HeuristicLab.Core.Views.LogView();
+      this.downloadExperimentButton = new System.Windows.Forms.Button();
       this.startButton = new System.Windows.Forms.Button();
       this.stopButton = new System.Windows.Forms.Button();
@@ -69,14 +67,11 @@
       this.disconnectButton = new System.Windows.Forms.Button();
       this.reconnectButton = new System.Windows.Forms.Button();
-      this.downloadExperimentButton = new System.Windows.Forms.Button();
-      this.jobConfigView = new HeuristicLab.Hive.Experiment.Views.JobConfigView();
-      this.jobItemView = new HeuristicLab.Hive.Experiment.Views.JobItemView();
+      this.downloadExperimentPanel = new System.Windows.Forms.Panel();
       ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
       this.tabControl.SuspendLayout();
       this.experimentTabPage.SuspendLayout();
-      this.configurationTabPage.SuspendLayout();
       this.jobsTabPage.SuspendLayout();
-      this.runsTabPage.SuspendLayout();
       this.logTabPage.SuspendLayout();
+      this.downloadExperimentPanel.SuspendLayout();
       this.SuspendLayout();
       // 
@@ -97,7 +92,5 @@
                   | System.Windows.Forms.AnchorStyles.Right)));
       this.tabControl.Controls.Add(this.experimentTabPage);
-      this.tabControl.Controls.Add(this.configurationTabPage);
       this.tabControl.Controls.Add(this.jobsTabPage);
-      this.tabControl.Controls.Add(this.runsTabPage);
       this.tabControl.Controls.Add(this.logTabPage);
       this.tabControl.Location = new System.Drawing.Point(0, 78);
@@ -109,5 +102,4 @@
       // experimentTabPage
       // 
-      this.experimentTabPage.Controls.Add(this.downloadExperimentButton);
       this.experimentTabPage.Controls.Add(this.openExperimentButton);
       this.experimentTabPage.Controls.Add(this.newExperimentButton);
@@ -168,29 +160,7 @@
       this.viewExperimentButton.Click += new System.EventHandler(this.showExperimentButton_Click);
       // 
-      // configurationTabPage
-      // 
-      this.configurationTabPage.Controls.Add(this.jobConfigView);
-      this.configurationTabPage.Controls.Add(this.updateJobConfigTreeButton);
-      this.configurationTabPage.Location = new System.Drawing.Point(4, 22);
-      this.configurationTabPage.Name = "configurationTabPage";
-      this.configurationTabPage.Padding = new System.Windows.Forms.Padding(3);
-      this.configurationTabPage.Size = new System.Drawing.Size(727, 390);
-      this.configurationTabPage.TabIndex = 2;
-      this.configurationTabPage.Text = "Configuration";
-      this.configurationTabPage.UseVisualStyleBackColor = true;
-      // 
-      // updateJobConfigTreeButton
-      // 
-      this.updateJobConfigTreeButton.Location = new System.Drawing.Point(6, 6);
-      this.updateJobConfigTreeButton.Name = "updateJobConfigTreeButton";
-      this.updateJobConfigTreeButton.Size = new System.Drawing.Size(199, 23);
-      this.updateJobConfigTreeButton.TabIndex = 1;
-      this.updateJobConfigTreeButton.Text = "Update Config Tree from Experiment";
-      this.updateJobConfigTreeButton.UseVisualStyleBackColor = true;
-      this.updateJobConfigTreeButton.Click += new System.EventHandler(this.updateJobConfigTreeButton_Click);
-      // 
       // jobsTabPage
       // 
-      this.jobsTabPage.Controls.Add(this.jobItemView);
+      this.jobsTabPage.Controls.Add(this.hiveJobView);
       this.jobsTabPage.Location = new System.Drawing.Point(4, 22);
       this.jobsTabPage.Name = "jobsTabPage";
@@ -200,26 +170,16 @@
       this.jobsTabPage.UseVisualStyleBackColor = true;
       // 
-      // runsTabPage
-      // 
-      this.runsTabPage.Controls.Add(this.runCollectionView);
-      this.runsTabPage.Location = new System.Drawing.Point(4, 22);
-      this.runsTabPage.Name = "runsTabPage";
-      this.runsTabPage.Size = new System.Drawing.Size(727, 390);
-      this.runsTabPage.TabIndex = 4;
-      this.runsTabPage.Text = "Runs";
-      this.runsTabPage.UseVisualStyleBackColor = true;
-      // 
-      // runCollectionView
-      // 
-      this.runCollectionView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+      // hiveJobView
+      // 
+      this.hiveJobView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
                   | System.Windows.Forms.AnchorStyles.Left)
                   | System.Windows.Forms.AnchorStyles.Right)));
-      this.runCollectionView.Caption = "RunCollection View";
-      this.runCollectionView.Content = null;
-      this.runCollectionView.Location = new System.Drawing.Point(0, 3);
-      this.runCollectionView.Name = "runCollectionView";
-      this.runCollectionView.ReadOnly = false;
-      this.runCollectionView.Size = new System.Drawing.Size(727, 366);
-      this.runCollectionView.TabIndex = 0;
+      this.hiveJobView.Caption = "HiveJob View";
+      this.hiveJobView.Content = null;
+      this.hiveJobView.Location = new System.Drawing.Point(2, 3);
+      this.hiveJobView.Name = "hiveJobView";
+      this.hiveJobView.ReadOnly = true;
+      this.hiveJobView.Size = new System.Drawing.Size(722, 384);
+      this.hiveJobView.TabIndex = 0;
       // 
       // logTabPage
@@ -245,4 +205,19 @@
       this.logView.Size = new System.Drawing.Size(721, 362);
       this.logView.TabIndex = 0;
+      // 
+      // downloadExperimentButton
+      // 
+      this.downloadExperimentButton.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.downloadExperimentButton.Image = ((System.Drawing.Image)(resources.GetObject("downloadExperimentButton.Image")));
+      this.downloadExperimentButton.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
+      this.downloadExperimentButton.Location = new System.Drawing.Point(44, 22);
+      this.downloadExperimentButton.Name = "downloadExperimentButton";
+      this.downloadExperimentButton.Size = new System.Drawing.Size(164, 54);
+      this.downloadExperimentButton.TabIndex = 17;
+      this.downloadExperimentButton.Text = "Download Experiment";
+      this.toolTip.SetToolTip(this.downloadExperimentButton, "Reconnect to Hive");
+      this.downloadExperimentButton.UseVisualStyleBackColor = true;
+      this.downloadExperimentButton.Click += new System.EventHandler(this.downloadExperimentButton_Click);
       // 
       // startButton
@@ -360,43 +335,11 @@
       this.reconnectButton.Click += new System.EventHandler(this.reconnectButton_Click);
       // 
-      // downloadExperimentButton
-      // 
-      this.downloadExperimentButton.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
-                  | System.Windows.Forms.AnchorStyles.Right)));
-      this.downloadExperimentButton.Enabled = false;
-      this.downloadExperimentButton.Location = new System.Drawing.Point(2, 123);
-      this.downloadExperimentButton.Name = "downloadExperimentButton";
-      this.downloadExperimentButton.Size = new System.Drawing.Size(725, 24);
-      this.downloadExperimentButton.TabIndex = 17;
-      this.downloadExperimentButton.Text = "Download Experiment";
-      this.toolTip.SetToolTip(this.downloadExperimentButton, "Reconnect to Hive");
-      this.downloadExperimentButton.UseVisualStyleBackColor = true;
-      this.downloadExperimentButton.Click += new System.EventHandler(this.downloadExperimentButton_Click);
-      // 
-      // jobConfigView
-      // 
-      this.jobConfigView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
-                  | System.Windows.Forms.AnchorStyles.Left)
-                  | System.Windows.Forms.AnchorStyles.Right)));
-      this.jobConfigView.Caption = "JobConfigView";
-      this.jobConfigView.Content = null;
-      this.jobConfigView.Location = new System.Drawing.Point(3, 35);
-      this.jobConfigView.Name = "jobConfigView";
-      this.jobConfigView.ReadOnly = false;
-      this.jobConfigView.Size = new System.Drawing.Size(721, 352);
-      this.jobConfigView.TabIndex = 2;
-      // 
-      // jobItemView
-      // 
-      this.jobItemView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
-                  | System.Windows.Forms.AnchorStyles.Left)
-                  | System.Windows.Forms.AnchorStyles.Right)));
-      this.jobItemView.Caption = "JobItem View";
-      this.jobItemView.Content = null;
-      this.jobItemView.Location = new System.Drawing.Point(2, 3);
-      this.jobItemView.Name = "jobItemView";
-      this.jobItemView.ReadOnly = true;
-      this.jobItemView.Size = new System.Drawing.Size(722, 384);
-      this.jobItemView.TabIndex = 0;
+      // downloadExperimentPanel
+      // 
+      this.downloadExperimentPanel.Controls.Add(this.downloadExperimentButton);
+      this.downloadExperimentPanel.Location = new System.Drawing.Point(331, 3);
+      this.downloadExperimentPanel.Name = "downloadExperimentPanel";
+      this.downloadExperimentPanel.Size = new System.Drawing.Size(250, 80);
+      this.downloadExperimentPanel.TabIndex = 18;
       // 
       // HiveExperimentView
@@ -404,4 +347,5 @@
       this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
       this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.downloadExperimentPanel);
       this.Controls.Add(this.tabControl);
       this.Controls.Add(this.disconnectButton);
@@ -432,11 +376,11 @@
       this.Controls.SetChildIndex(this.nameTextBox, 0);
       this.Controls.SetChildIndex(this.descriptionTextBox, 0);
+      this.Controls.SetChildIndex(this.downloadExperimentPanel, 0);
       ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
       this.tabControl.ResumeLayout(false);
       this.experimentTabPage.ResumeLayout(false);
-      this.configurationTabPage.ResumeLayout(false);
       this.jobsTabPage.ResumeLayout(false);
-      this.runsTabPage.ResumeLayout(false);
       this.logTabPage.ResumeLayout(false);
+      this.downloadExperimentPanel.ResumeLayout(false);
       this.ResumeLayout(false);
       this.PerformLayout();
@@ -453,5 +397,4 @@
     private System.Windows.Forms.TextBox executionTimeTextBox;
     private System.Windows.Forms.Button pauseButton;
-    private System.Windows.Forms.TabPage configurationTabPage;
     private System.Windows.Forms.Label resourceIdsLabel;
     private System.Windows.Forms.TextBox resourceIdsTextBox;
@@ -464,11 +407,8 @@
     protected System.Windows.Forms.Button openExperimentButton;
     protected System.Windows.Forms.Button newExperimentButton;
-    private System.Windows.Forms.TabPage runsTabPage;
-    private Optimization.Views.RunCollectionView runCollectionView;
-    private System.Windows.Forms.Button updateJobConfigTreeButton;
     private System.Windows.Forms.TabPage jobsTabPage;
-    private JobItemView jobItemView;
-    private JobConfigView jobConfigView;
     private System.Windows.Forms.Button downloadExperimentButton;
+    private System.Windows.Forms.Panel downloadExperimentPanel;
+    private HiveJobView hiveJobView;
 
   }
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/HiveExperimentView.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/HiveExperimentView.cs	(revision 4422)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/HiveExperimentView.cs	(revision 4423)
@@ -30,4 +30,5 @@
 using HeuristicLab.Optimization.Views;
 using HeuristicLab.Hive.Experiment.Properties;
+using System.Threading;
 
 namespace HeuristicLab.Hive.Experiment.Views {
@@ -38,4 +39,6 @@
   [Content(typeof(HiveExperiment), true)]
   public sealed partial class HiveExperimentView : NamedItemView {
+    private ProgressView progressView;
+
     public new HiveExperiment Content {
       get { return (HiveExperiment)base.Content; }
@@ -48,4 +51,5 @@
     public HiveExperimentView() {
       InitializeComponent();
+      downloadExperimentPanel.Dock = DockStyle.Fill;
     }
 
@@ -58,7 +62,7 @@
       Content.Paused -= new EventHandler(Content_Paused);
       Content.Stopped -= new EventHandler(Content_Stopped);
-      Content.ExperimentChanged -= new EventHandler(Content_ExperimentChanged);
       Content.IsResultsPollingChanged -= new EventHandler(Content_IsResultsPollingChanged);
-      Content.RootJobItemChanged -= new EventHandler(Content_RootJobItemChanged);
+      Content.HiveJobChanged -= new EventHandler(Content_HiveJobChanged);
+      Content.IsProgressingChanged -= new EventHandler(Content_IsProgressingChanged);
       base.DeregisterContentEvents();
     }
@@ -74,7 +78,6 @@
       Content.Stopped += new EventHandler(Content_Stopped);
       Content.IsResultsPollingChanged += new EventHandler(Content_IsResultsPollingChanged);
-      Content.ExperimentChanged += new EventHandler(Content_ExperimentChanged);
-      Content.RootJobChanged += new EventHandler(Content_RootJobChanged);
-      Content.RootJobItemChanged += new EventHandler(Content_RootJobItemChanged);
+      Content.HiveJobChanged += new EventHandler(Content_HiveJobChanged);
+      Content.IsProgressingChanged += new EventHandler(Content_IsProgressingChanged);
     }
 
@@ -83,13 +86,14 @@
       if (Content == null) {
         executionTimeTextBox.Text = string.Empty;
+        resourceIdsTextBox.Text = string.Empty;
+        logView.Content = null;
       } else {
         executionTimeTextBox.Text = Content.ExecutionTime.ToString();
         resourceIdsTextBox.Text = Content.ResourceIds;
-        experimentNamedItemView.Content = Content.Experiment;
         logView.Content = Content.Log;
-        Content_ExperimentChanged(this, EventArgs.Empty);
-        Content_RootJobChanged(this, EventArgs.Empty);
-        Content_RootJobItemChanged(this, EventArgs.Empty);
-      }
+      }
+      Content_HiveJobChanged(this, EventArgs.Empty);
+      Content_IsProgressingChanged(this, EventArgs.Empty);
+      SetEnabledStateOfControls();
     }
 
@@ -97,7 +101,15 @@
       base.SetEnabledStateOfControls();
       executionTimeTextBox.Enabled = Content != null;
+      experimentNamedItemView.ReadOnly = true;
       if (Content != null) {
-        viewExperimentButton.Enabled = Content.Experiment != null;
-        experimentNamedItemView.Locked = Content.Experiment == null;
+        this.nameTextBox.ReadOnly = Content.ExecutionState != ExecutionState.Prepared;
+        this.descriptionTextBox.ReadOnly = Content.ExecutionState != ExecutionState.Prepared;
+        this.resourceIdsTextBox.ReadOnly = Content.ExecutionState != ExecutionState.Prepared;
+        this.hiveJobView.ReadOnly = Content.ExecutionState != ExecutionState.Prepared;
+
+        viewExperimentButton.Enabled = Content.GetExperiment() != null;
+
+        this.Locked = Content.ExecutionState == ExecutionState.Started && Content.IsPollingResults;
+        downloadExperimentPanel.Visible = Content.HiveExperimentId != Guid.Empty && Content.GetExperiment() == null;
       }
       SetEnabledStateOfExecutableButtons();
@@ -106,24 +118,8 @@
     protected override void OnClosed(FormClosedEventArgs e) {
       if (Content != null) {
-        if (Content.IsPollingResults) Content.StopResultPolling();
+        if (Content.IsPollingResults)
+          Content.StopResultPolling();
       }
       base.OnClosed(e);
-    }
-
-    private void Content_ExperimentChanged(object sender, EventArgs e) {
-      if (InvokeRequired)
-        Invoke(new EventHandler(Content_ExperimentChanged), sender, e);
-      else {
-        experimentNamedItemView.Content = Content.Experiment;
-        if (Content.Experiment != null) {
-          runCollectionView.Content = Content.Experiment.Runs;
-          if (Content.ExecutionState == ExecutionState.Stopped) {
-            Content.Prepare();
-          }
-          Content_RootJobChanged(sender, e);
-          Content_RootJobItemChanged(sender, e);
-        }
-        SetEnabledStateOfControls();
-      }
     }
 
@@ -133,5 +129,5 @@
         Invoke(new EventHandler(Content_ExecutionStateChanged), sender, e);
       else
-        SetEnabledStateOfExecutableButtons();
+        SetEnabledStateOfControls();
     }
     private void Content_Prepared(object sender, EventArgs e) {
@@ -141,5 +137,5 @@
         nameTextBox.Enabled = descriptionTextBox.Enabled = true;
         Locked = false;
-        SetEnabledStateOfExecutableButtons();
+        SetEnabledStateOfControls();
       }
     }
@@ -149,5 +145,5 @@
       else {
         nameTextBox.Enabled = descriptionTextBox.Enabled = false;
-        SetEnabledStateOfExecutableButtons();
+        SetEnabledStateOfControls();
       }
     }
@@ -157,5 +153,5 @@
       else {
         nameTextBox.Enabled = descriptionTextBox.Enabled = true;
-        SetEnabledStateOfExecutableButtons();
+        SetEnabledStateOfControls();
       }
     }
@@ -166,5 +162,5 @@
         nameTextBox.Enabled = descriptionTextBox.Enabled = true;
         Locked = false;
-        SetEnabledStateOfExecutableButtons();
+        SetEnabledStateOfControls();
       }
     }
@@ -188,17 +184,15 @@
       }
     }
-    void Content_RootJobChanged(object sender, EventArgs e) {
-      if (InvokeRequired)
-        Invoke(new EventHandler(Content_RootJobChanged), sender, e);
-      else {
-        jobConfigView.Content = Content.RootJob;
-        SetEnabledStateOfControls();
-      }
-    }
-    void Content_RootJobItemChanged(object sender, EventArgs e) {
-      if (InvokeRequired)
-        Invoke(new EventHandler(Content_RootJobItemChanged), sender, e);
-      else {
-        jobItemView.Content = Content.RootJobItem;
+    void Content_HiveJobChanged(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(Content_HiveJobChanged), sender, e);
+      else {
+        if (Content != null) {
+          hiveJobView.Content = Content.HiveJob;
+          experimentNamedItemView.Content = Content.GetExperiment();
+        } else {
+          hiveJobView.Content = null;
+          experimentNamedItemView.Content = null;
+        }
         SetEnabledStateOfControls();
       }
@@ -225,5 +219,5 @@
 
     private void newExperimentButton_Click(object sender, EventArgs e) {
-      Content.Experiment = new HeuristicLab.Optimization.Experiment();
+      Content.SetExperiment(new HeuristicLab.Optimization.Experiment());
     }
 
@@ -237,10 +231,10 @@
 
       if (openFileDialog.ShowDialog() == DialogResult.OK) {
-        Content.Experiment = (HeuristicLab.Optimization.Experiment)ContentManager.Load(openFileDialog.FileName);
+        Content.SetExperiment((HeuristicLab.Optimization.Experiment)ContentManager.Load(openFileDialog.FileName));
       }
     }
 
     private void showExperimentButton_Click(object sender, EventArgs e) {
-      MainFormManager.MainForm.ShowContent(Content.Experiment);
+      MainFormManager.MainForm.ShowContent(Content.GetExperiment());
     }
 
@@ -265,36 +259,52 @@
         startButton.Enabled = pauseButton.Enabled = stopButton.Enabled = resetButton.Enabled = reconnectButton.Enabled = disconnectButton.Enabled = false;
       } else {
-        startButton.Enabled = Content.Experiment != null && Content.ExecutionState == ExecutionState.Prepared;
-        pauseButton.Enabled = false; // disabled for now
+        startButton.Enabled = Content.GetExperiment() != null && Content.ExecutionState == ExecutionState.Prepared;
+        pauseButton.Enabled = false;
         stopButton.Enabled = Content.ExecutionState == ExecutionState.Started && Content.IsPollingResults;
-        resetButton.Enabled = Content.ExecutionState != ExecutionState.Started;
+        resetButton.Enabled = false;
         reconnectButton.Enabled = (Content.ExecutionState == ExecutionState.Started) && !Content.IsPollingResults;
         disconnectButton.Enabled = (Content.ExecutionState == ExecutionState.Started) && Content.IsPollingResults;
-
-        this.Locked = Content.ExecutionState == ExecutionState.Started && Content.IsPollingResults;
-        downloadExperimentButton.Enabled = Content.Experiment == null;
       }
     }
     #endregion
 
-    private void updateJobConfigTreeButton_Click(object sender, EventArgs e) {
-      Content.RefreshJobTree();
-    }
-
     private void downloadExperimentButton_Click(object sender, EventArgs e) {
-      ProgressView progressView = new ProgressView(this, "Downloading Experiment...", true);
-      var invoker = new MethodInvoker(Content.LoadExperimentFromHive);
+      var invoker = new MethodInvoker(Content.LoadHiveJob);
       invoker.BeginInvoke((ar) => {
         try {
-          invoker.EndInvoke(ar); // todo: das hier wird mehrfach aufgerufen... warum?
+          invoker.EndInvoke(ar);
         }
         catch (Exception ex) {
-          throw ex;
-        }
-        finally {
-          progressView.Finish();
+          ThreadPool.QueueUserWorkItem(delegate(object exception) { ErrorHandling.ShowErrorDialog(this, (Exception)exception); }, ex);
         }
       }, null);
     }
+
+    private void Content_IsProgressingChanged(object sender, EventArgs e) {
+      if (this.InvokeRequired) {
+        Invoke(new EventHandler(Content_IsProgressingChanged), sender, e);
+      } else {
+        if (Content != null && Content.IsProgressing) {
+          SetProgressView();
+        } else {
+          FinishProgressView();
+        }
+      }
+    }
+
+    private void SetProgressView() {
+      if (progressView == null) {
+        progressView = new ProgressView(this, Content.Progress);
+      }
+      progressView.Progress = Content.Progress;
+    }
+
+    private void FinishProgressView() {
+      if (progressView != null) {
+        progressView.Finish();
+        progressView = null;
+        SetEnabledStateOfControls();
+      }
+    }
   }
 }
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/HiveExperimentView.resx
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/HiveExperimentView.resx	(revision 4422)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/HiveExperimentView.resx	(revision 4423)
@@ -157,4 +157,69 @@
 </value>
   </data>
+  <data name="downloadExperimentButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAACH
+        DwAAjA8AAP1SAACBQAAAfXkAAOmLAAA85QAAGcxzPIV3AAAKOWlDQ1BQaG90b3Nob3AgSUNDIHByb2Zp
+        bGUAAEjHnZZ3VFTXFofPvXd6oc0wAlKG3rvAANJ7k15FYZgZYCgDDjM0sSGiAhFFRJoiSFDEgNFQJFZE
+        sRAUVLAHJAgoMRhFVCxvRtaLrqy89/Ly++Osb+2z97n77L3PWhcAkqcvl5cGSwGQyhPwgzyc6RGRUXTs
+        AIABHmCAKQBMVka6X7B7CBDJy82FniFyAl8EAfB6WLwCcNPQM4BOB/+fpFnpfIHomAARm7M5GSwRF4g4
+        JUuQLrbPipgalyxmGCVmvihBEcuJOWGRDT77LLKjmNmpPLaIxTmns1PZYu4V8bZMIUfEiK+ICzO5nCwR
+        3xKxRoowlSviN+LYVA4zAwAUSWwXcFiJIjYRMYkfEuQi4uUA4EgJX3HcVyzgZAvEl3JJS8/hcxMSBXQd
+        li7d1NqaQffkZKVwBALDACYrmcln013SUtOZvBwAFu/8WTLi2tJFRbY0tba0NDQzMv2qUP91829K3NtF
+        ehn4uWcQrf+L7a/80hoAYMyJarPziy2uCoDOLQDI3fti0zgAgKSobx3Xv7oPTTwviQJBuo2xcVZWlhGX
+        wzISF/QP/U+Hv6GvvmckPu6P8tBdOfFMYYqALq4bKy0lTcinZ6QzWRy64Z+H+B8H/nUeBkGceA6fwxNF
+        hImmjMtLELWbx+YKuGk8Opf3n5r4D8P+pMW5FonS+BFQY4yA1HUqQH7tBygKESDR+8Vd/6NvvvgwIH55
+        4SqTi3P/7zf9Z8Gl4iWDm/A5ziUohM4S8jMX98TPEqABAUgCKpAHykAd6ABDYAasgC1wBG7AG/iDEBAJ
+        VgMWSASpgA+yQB7YBApBMdgJ9oBqUAcaQTNoBcdBJzgFzoNL4Bq4AW6D+2AUTIBnYBa8BgsQBGEhMkSB
+        5CEVSBPSh8wgBmQPuUG+UBAUCcVCCRAPEkJ50GaoGCqDqqF6qBn6HjoJnYeuQIPQXWgMmoZ+h97BCEyC
+        qbASrAUbwwzYCfaBQ+BVcAK8Bs6FC+AdcCXcAB+FO+Dz8DX4NjwKP4PnEIAQERqiihgiDMQF8UeikHiE
+        j6xHipAKpAFpRbqRPuQmMorMIG9RGBQFRUcZomxRnqhQFAu1BrUeVYKqRh1GdaB6UTdRY6hZ1Ec0Ga2I
+        1kfboL3QEegEdBa6EF2BbkK3oy+ib6Mn0K8xGAwNo42xwnhiIjFJmLWYEsw+TBvmHGYQM46Zw2Kx8lh9
+        rB3WH8vECrCF2CrsUexZ7BB2AvsGR8Sp4Mxw7rgoHA+Xj6vAHcGdwQ3hJnELeCm8Jt4G749n43PwpfhG
+        fDf+On4Cv0CQJmgT7AghhCTCJkIloZVwkfCA8JJIJKoRrYmBRC5xI7GSeIx4mThGfEuSIemRXEjRJCFp
+        B+kQ6RzpLuklmUzWIjuSo8gC8g5yM/kC+RH5jQRFwkjCS4ItsUGiRqJDYkjiuSReUlPSSXK1ZK5kheQJ
+        yeuSM1J4KS0pFymm1HqpGqmTUiNSc9IUaVNpf+lU6RLpI9JXpKdksDJaMm4ybJkCmYMyF2TGKQhFneJC
+        YVE2UxopFykTVAxVm+pFTaIWU7+jDlBnZWVkl8mGyWbL1sielh2lITQtmhcthVZKO04bpr1borTEaQln
+        yfYlrUuGlszLLZVzlOPIFcm1yd2WeydPl3eTT5bfJd8p/1ABpaCnEKiQpbBf4aLCzFLqUtulrKVFS48v
+        vacIK+opBimuVTyo2K84p6Ss5KGUrlSldEFpRpmm7KicpFyufEZ5WoWiYq/CVSlXOavylC5Ld6Kn0Cvp
+        vfRZVUVVT1Whar3qgOqCmrZaqFq+WpvaQ3WCOkM9Xr1cvUd9VkNFw08jT6NF454mXpOhmai5V7NPc15L
+        Wytca6tWp9aUtpy2l3audov2Ax2yjoPOGp0GnVu6GF2GbrLuPt0berCehV6iXo3edX1Y31Kfq79Pf9AA
+        bWBtwDNoMBgxJBk6GWYathiOGdGMfI3yjTqNnhtrGEcZ7zLuM/5oYmGSYtJoct9UxtTbNN+02/R3Mz0z
+        llmN2S1zsrm7+QbzLvMXy/SXcZbtX3bHgmLhZ7HVosfig6WVJd+y1XLaSsMq1qrWaoRBZQQwShiXrdHW
+        ztYbrE9Zv7WxtBHYHLf5zdbQNtn2iO3Ucu3lnOWNy8ft1OyYdvV2o/Z0+1j7A/ajDqoOTIcGh8eO6o5s
+        xybHSSddpySno07PnU2c+c7tzvMuNi7rXM65Iq4erkWuA24ybqFu1W6P3NXcE9xb3Gc9LDzWepzzRHv6
+        eO7yHPFS8mJ5NXvNelt5r/Pu9SH5BPtU+zz21fPl+3b7wX7efrv9HqzQXMFb0ekP/L38d/s/DNAOWBPw
+        YyAmMCCwJvBJkGlQXlBfMCU4JvhI8OsQ55DSkPuhOqHC0J4wybDosOaw+XDX8LLw0QjjiHUR1yIVIrmR
+        XVHYqLCopqi5lW4r96yciLaILoweXqW9KnvVldUKq1NWn46RjGHGnIhFx4bHHol9z/RnNjDn4rziauNm
+        WS6svaxnbEd2OXuaY8cp40zG28WXxU8l2CXsTphOdEisSJzhunCruS+SPJPqkuaT/ZMPJX9KCU9pS8Wl
+        xqae5Mnwknm9acpp2WmD6frphemja2zW7Fkzy/fhN2VAGasyugRU0c9Uv1BHuEU4lmmfWZP5Jiss60S2
+        dDYvuz9HL2d7zmSue+63a1FrWWt78lTzNuWNrXNaV78eWh+3vmeD+oaCDRMbPTYe3kTYlLzpp3yT/LL8
+        V5vDN3cXKBVsLBjf4rGlpVCikF84stV2a9021DbutoHt5turtn8sYhddLTYprih+X8IqufqN6TeV33za
+        Eb9joNSydP9OzE7ezuFdDrsOl0mX5ZaN7/bb3VFOLy8qf7UnZs+VimUVdXsJe4V7Ryt9K7uqNKp2Vr2v
+        Tqy+XeNc01arWLu9dn4fe9/Qfsf9rXVKdcV17w5wD9yp96jvaNBqqDiIOZh58EljWGPft4xvm5sUmoqb
+        PhziHRo9HHS4t9mqufmI4pHSFrhF2DJ9NProje9cv+tqNWytb6O1FR8Dx4THnn4f+/3wcZ/jPScYJ1p/
+        0Pyhtp3SXtQBdeR0zHYmdo52RXYNnvQ+2dNt293+o9GPh06pnqo5LXu69AzhTMGZT2dzz86dSz83cz7h
+        /HhPTM/9CxEXbvUG9g5c9Ll4+ZL7pQt9Tn1nL9tdPnXF5srJq4yrndcsr3X0W/S3/2TxU/uA5UDHdavr
+        XTesb3QPLh88M+QwdP6m681Lt7xuXbu94vbgcOjwnZHokdE77DtTd1PuvriXeW/h/sYH6AdFD6UeVjxS
+        fNTws+7PbaOWo6fHXMf6Hwc/vj/OGn/2S8Yv7ycKnpCfVEyqTDZPmU2dmnafvvF05dOJZ+nPFmYKf5X+
+        tfa5zvMffnP8rX82YnbiBf/Fp99LXsq/PPRq2aueuYC5R69TXy/MF72Rf3P4LeNt37vwd5MLWe+x7ys/
+        6H7o/ujz8cGn1E+f/gUDmPP8usTo0wAAAAlwSFlzAAAOvgAADr4B6kKxwAAAA2JJREFUOE9lk31MFHQY
+        x59JZIU62/QPF1gauDJXjkpyZLxVMEEubgpKU0NePKS6yp168qaJ4OIlMhUH6hRWChyuuuTaQjqFk8j0
+        MEhlURdMRgp0XERccfjpx7G1Vn8822+/fb/fz/f54xFA/jtDf03S4fyTloE/6PhlFNfvY0xMTCjZ/7X/
+        mCfv3qXH7ab6lp387i/Y2VWE9mIhcdZk1phrybXeofvWIG6l+XeQN8CtzJ/fucHb10rZ013N0f5zHOyr
+        Ytf3kWhb5hJQnciMfb+y9HA/J1u6cTqdTE5OeoPEo8y1A00kWFcr8jZqBk185f6Bc6MOCntySLItYuGZ
+        /UiRE9lhZ05RGdWNNoaHh6cDrricrLI8yfpLj5B/U0vlgJVPRppoc1/l1O1O1rZ08NDpC8wo7kP25iE5
+        QmD2IWw2G2NjY0hi/TB+Zbm83BxA6uVgjNdTybuZzIEfjRT/BDHn4b5jClVWiOwPRoyCzxvPkFtSRW9v
+        L/Jwwc/Irhs83hBI5Jf+JFxcoKjBpLS3o7kA/meU+QMP8l4m8q4vsn0mPrp5xGYV0q40MkvfgbzlYNah
+        LSxuEB6tiyfIdJSFtTD7pDIfnFDkAaRgij4XyVjB7JTnCd2YQ2NjI+KX2ops/U616OTe97fje3gH91em
+        Ih+q/2IVUPAbkl+qRhRduEfnS0DaS4SsM1JfX4/MT7ciSc2I7ppq0o/s7lR1w5Q5SJmOI4YeRG9CtkXh
+        k76EBVuXsTwtixfWGqirq0OW7/4aiVRJiU3Ia5dUxS5k5yvTxGw1GZXIhstIrA0/TSnP6jaxcnM5mg2Z
+        mM1mBbD047OqBok4jcR9hiScR9afQt5U5i3hSLwFiT6LhNbwYNQRNLojPLG6jKys12lra0Ou991mWd63
+        PBCi6k5NaC0z47OZszEUCTuBrKzB57kTzI/4mJCkJp7WmoiI3UxJSQkOhwMZHx+ntrWLoGw7gWvM+Ieb
+        WKItYrGmnHlhDSyKOcsKtV5M2jc8laDeL6ZgMBiwWq2Mjo5OX9fIyAifNrcRvcfMY5ntRGW0EpveSlzG
+        FeJ1Vwl5tZml0fuI0WzCaDRisVgYHBz03oM3YOrhcrmw2+2UV33EunfKiUo5QHjyXiISDWiTdej1eioq
+        Krx7Dw0N4fF4vLfwN80WjZRSOVvaAAAAAElFTkSuQmCC
+</value>
+  </data>
   <data name="startButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/HiveJobListView.Designer.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/HiveJobListView.Designer.cs	(revision 4423)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/HiveJobListView.Designer.cs	(revision 4423)
@@ -0,0 +1,32 @@
+﻿namespace HeuristicLab.Hive.Experiment.Views {
+  partial class HiveJobListView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing) {
+        if (components != null) components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      components = new System.ComponentModel.Container();
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+    }
+
+    #endregion
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/HiveJobListView.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/HiveJobListView.cs	(revision 4423)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/HiveJobListView.cs	(revision 4423)
@@ -0,0 +1,38 @@
+﻿using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Core.Views;
+using HeuristicLab.Core;
+using HeuristicLab.MainForm;
+using HeuristicLab.Optimization;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Hive.Experiment.Views {
+  [View("JobItemList View")]
+  [Content(typeof(HiveJobList), true)]
+  [Content(typeof(IItemList<HiveJob>), false)]
+  public partial class HiveJobListView : ItemListView<HiveJob> {
+
+    public HiveJobListView() {
+      InitializeComponent();
+      itemsGroupBox.Text = "Jobs";
+    }
+
+    protected override HiveJob CreateItem() {
+      return null;
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      this.addButton.Enabled = false;
+      this.moveDownButton.Enabled = false;
+      this.moveUpButton.Enabled = false;
+      this.removeButton.Enabled = false;
+    }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/HiveJobView.Designer.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/HiveJobView.Designer.cs	(revision 4423)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/HiveJobView.Designer.cs	(revision 4423)
@@ -0,0 +1,492 @@
+﻿namespace HeuristicLab.Hive.Experiment.Views {
+  partial class HiveJobView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.stateLabel = new System.Windows.Forms.Label();
+      this.stateTextBox = new System.Windows.Forms.TextBox();
+      this.executionTimeTextBox = new System.Windows.Forms.TextBox();
+      this.dateCreatedTextBox = new System.Windows.Forms.TextBox();
+      this.dateFinishedTextBox = new System.Windows.Forms.TextBox();
+      this.exceptionTextBox = new System.Windows.Forms.TextBox();
+      this.executionTimeLabel = new System.Windows.Forms.Label();
+      this.dateCreatedLabel = new System.Windows.Forms.Label();
+      this.dateFinishedLabel = new System.Windows.Forms.Label();
+      this.exceptionLabel = new System.Windows.Forms.Label();
+      this.dateCalculatedText = new System.Windows.Forms.TextBox();
+      this.dateCalculatedLabel = new System.Windows.Forms.Label();
+      this.jobStatusGroupBox = new System.Windows.Forms.GroupBox();
+      this.tabControl = new System.Windows.Forms.TabControl();
+      this.detailsTabPage = new System.Windows.Forms.TabPage();
+      this.optimizerGroupBox = new System.Windows.Forms.GroupBox();
+      this.optimizerNamedItemView = new HeuristicLab.Core.Views.NamedItemView();
+      this.configurationGroupBox = new System.Windows.Forms.GroupBox();
+      this.priorityTextBox = new System.Windows.Forms.TextBox();
+      this.priorityLabel = new System.Windows.Forms.Label();
+      this.coresNeededTextBox = new System.Windows.Forms.TextBox();
+      this.memoryNeededTextBox = new System.Windows.Forms.TextBox();
+      this.memoryNeededLabel = new System.Windows.Forms.Label();
+      this.coresNeededLabel = new System.Windows.Forms.Label();
+      this.computeInParallelLabel = new System.Windows.Forms.Label();
+      this.computeInParallelCheckBox = new System.Windows.Forms.CheckBox();
+      this.jobIdLabel = new System.Windows.Forms.Label();
+      this.jobIdTextBox = new System.Windows.Forms.TextBox();
+      this.childJobsTabPage = new System.Windows.Forms.TabPage();
+      this.childHiveJobView = new HeuristicLab.Hive.Experiment.Views.HiveJobListView();
+      this.runsTabPage = new System.Windows.Forms.TabPage();
+      this.runCollectionView = new HeuristicLab.Optimization.Views.RunCollectionView();
+      this.logTabPage = new System.Windows.Forms.TabPage();
+      this.logView = new HeuristicLab.Core.Views.LogView();
+      this.jobStatusGroupBox.SuspendLayout();
+      this.tabControl.SuspendLayout();
+      this.detailsTabPage.SuspendLayout();
+      this.optimizerGroupBox.SuspendLayout();
+      this.configurationGroupBox.SuspendLayout();
+      this.childJobsTabPage.SuspendLayout();
+      this.runsTabPage.SuspendLayout();
+      this.logTabPage.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // stateLabel
+      // 
+      this.stateLabel.AutoSize = true;
+      this.stateLabel.Location = new System.Drawing.Point(7, 19);
+      this.stateLabel.Name = "stateLabel";
+      this.stateLabel.Size = new System.Drawing.Size(35, 13);
+      this.stateLabel.TabIndex = 0;
+      this.stateLabel.Text = "State:";
+      // 
+      // stateTextBox
+      // 
+      this.stateTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.stateTextBox.Location = new System.Drawing.Point(95, 19);
+      this.stateTextBox.Name = "stateTextBox";
+      this.stateTextBox.Size = new System.Drawing.Size(509, 20);
+      this.stateTextBox.TabIndex = 2;
+      // 
+      // executionTimeTextBox
+      // 
+      this.executionTimeTextBox.Location = new System.Drawing.Point(95, 41);
+      this.executionTimeTextBox.Name = "executionTimeTextBox";
+      this.executionTimeTextBox.Size = new System.Drawing.Size(509, 20);
+      this.executionTimeTextBox.TabIndex = 4;
+      // 
+      // dateCreatedTextBox
+      // 
+      this.dateCreatedTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.dateCreatedTextBox.Location = new System.Drawing.Point(95, 63);
+      this.dateCreatedTextBox.Name = "dateCreatedTextBox";
+      this.dateCreatedTextBox.Size = new System.Drawing.Size(509, 20);
+      this.dateCreatedTextBox.TabIndex = 5;
+      // 
+      // dateFinishedTextBox
+      // 
+      this.dateFinishedTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.dateFinishedTextBox.Location = new System.Drawing.Point(95, 107);
+      this.dateFinishedTextBox.Name = "dateFinishedTextBox";
+      this.dateFinishedTextBox.Size = new System.Drawing.Size(509, 20);
+      this.dateFinishedTextBox.TabIndex = 6;
+      // 
+      // exceptionTextBox
+      // 
+      this.exceptionTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.exceptionTextBox.Location = new System.Drawing.Point(95, 129);
+      this.exceptionTextBox.Name = "exceptionTextBox";
+      this.exceptionTextBox.Size = new System.Drawing.Size(509, 20);
+      this.exceptionTextBox.TabIndex = 10;
+      // 
+      // executionTimeLabel
+      // 
+      this.executionTimeLabel.AutoSize = true;
+      this.executionTimeLabel.Location = new System.Drawing.Point(7, 41);
+      this.executionTimeLabel.Name = "executionTimeLabel";
+      this.executionTimeLabel.Size = new System.Drawing.Size(80, 13);
+      this.executionTimeLabel.TabIndex = 13;
+      this.executionTimeLabel.Text = "ExecutionTime:";
+      // 
+      // dateCreatedLabel
+      // 
+      this.dateCreatedLabel.AutoSize = true;
+      this.dateCreatedLabel.Location = new System.Drawing.Point(7, 63);
+      this.dateCreatedLabel.Name = "dateCreatedLabel";
+      this.dateCreatedLabel.Size = new System.Drawing.Size(70, 13);
+      this.dateCreatedLabel.TabIndex = 14;
+      this.dateCreatedLabel.Text = "DateCreated:";
+      // 
+      // dateFinishedLabel
+      // 
+      this.dateFinishedLabel.AutoSize = true;
+      this.dateFinishedLabel.Location = new System.Drawing.Point(7, 107);
+      this.dateFinishedLabel.Name = "dateFinishedLabel";
+      this.dateFinishedLabel.Size = new System.Drawing.Size(72, 13);
+      this.dateFinishedLabel.TabIndex = 15;
+      this.dateFinishedLabel.Text = "DateFinished:";
+      // 
+      // exceptionLabel
+      // 
+      this.exceptionLabel.AutoSize = true;
+      this.exceptionLabel.Location = new System.Drawing.Point(7, 129);
+      this.exceptionLabel.Name = "exceptionLabel";
+      this.exceptionLabel.Size = new System.Drawing.Size(57, 13);
+      this.exceptionLabel.TabIndex = 19;
+      this.exceptionLabel.Text = "Exception:";
+      // 
+      // dateCalculatedText
+      // 
+      this.dateCalculatedText.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.dateCalculatedText.Location = new System.Drawing.Point(95, 85);
+      this.dateCalculatedText.Name = "dateCalculatedText";
+      this.dateCalculatedText.Size = new System.Drawing.Size(509, 20);
+      this.dateCalculatedText.TabIndex = 22;
+      // 
+      // dateCalculatedLabel
+      // 
+      this.dateCalculatedLabel.AutoSize = true;
+      this.dateCalculatedLabel.Location = new System.Drawing.Point(7, 85);
+      this.dateCalculatedLabel.Name = "dateCalculatedLabel";
+      this.dateCalculatedLabel.Size = new System.Drawing.Size(83, 13);
+      this.dateCalculatedLabel.TabIndex = 23;
+      this.dateCalculatedLabel.Text = "DateCalculated:";
+      // 
+      // jobStatusGroupBox
+      // 
+      this.jobStatusGroupBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.jobStatusGroupBox.Controls.Add(this.stateTextBox);
+      this.jobStatusGroupBox.Controls.Add(this.dateCalculatedLabel);
+      this.jobStatusGroupBox.Controls.Add(this.stateLabel);
+      this.jobStatusGroupBox.Controls.Add(this.dateCalculatedText);
+      this.jobStatusGroupBox.Controls.Add(this.dateFinishedTextBox);
+      this.jobStatusGroupBox.Controls.Add(this.executionTimeTextBox);
+      this.jobStatusGroupBox.Controls.Add(this.dateCreatedTextBox);
+      this.jobStatusGroupBox.Controls.Add(this.executionTimeLabel);
+      this.jobStatusGroupBox.Controls.Add(this.exceptionLabel);
+      this.jobStatusGroupBox.Controls.Add(this.dateCreatedLabel);
+      this.jobStatusGroupBox.Controls.Add(this.dateFinishedLabel);
+      this.jobStatusGroupBox.Controls.Add(this.exceptionTextBox);
+      this.jobStatusGroupBox.Location = new System.Drawing.Point(6, 226);
+      this.jobStatusGroupBox.Name = "jobStatusGroupBox";
+      this.jobStatusGroupBox.Size = new System.Drawing.Size(610, 162);
+      this.jobStatusGroupBox.TabIndex = 24;
+      this.jobStatusGroupBox.TabStop = false;
+      this.jobStatusGroupBox.Text = "Job Status";
+      // 
+      // tabControl
+      // 
+      this.tabControl.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.tabControl.Controls.Add(this.detailsTabPage);
+      this.tabControl.Controls.Add(this.childJobsTabPage);
+      this.tabControl.Controls.Add(this.runsTabPage);
+      this.tabControl.Controls.Add(this.logTabPage);
+      this.tabControl.Location = new System.Drawing.Point(3, 3);
+      this.tabControl.Name = "tabControl";
+      this.tabControl.SelectedIndex = 0;
+      this.tabControl.Size = new System.Drawing.Size(627, 518);
+      this.tabControl.TabIndex = 25;
+      // 
+      // detailsTabPage
+      // 
+      this.detailsTabPage.Controls.Add(this.optimizerGroupBox);
+      this.detailsTabPage.Controls.Add(this.configurationGroupBox);
+      this.detailsTabPage.Controls.Add(this.jobIdLabel);
+      this.detailsTabPage.Controls.Add(this.jobIdTextBox);
+      this.detailsTabPage.Controls.Add(this.jobStatusGroupBox);
+      this.detailsTabPage.Location = new System.Drawing.Point(4, 22);
+      this.detailsTabPage.Name = "detailsTabPage";
+      this.detailsTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.detailsTabPage.Size = new System.Drawing.Size(619, 492);
+      this.detailsTabPage.TabIndex = 0;
+      this.detailsTabPage.Text = "Details";
+      this.detailsTabPage.UseVisualStyleBackColor = true;
+      // 
+      // optimizerGroupBox
+      // 
+      this.optimizerGroupBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.optimizerGroupBox.Controls.Add(this.optimizerNamedItemView);
+      this.optimizerGroupBox.Location = new System.Drawing.Point(6, 29);
+      this.optimizerGroupBox.Name = "optimizerGroupBox";
+      this.optimizerGroupBox.Size = new System.Drawing.Size(610, 74);
+      this.optimizerGroupBox.TabIndex = 28;
+      this.optimizerGroupBox.TabStop = false;
+      this.optimizerGroupBox.Text = "Optimizer";
+      // 
+      // optimizerNamedItemView
+      // 
+      this.optimizerNamedItemView.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.optimizerNamedItemView.Caption = "NamedItem View";
+      this.optimizerNamedItemView.Content = null;
+      this.optimizerNamedItemView.Location = new System.Drawing.Point(0, 20);
+      this.optimizerNamedItemView.Name = "optimizerNamedItemView";
+      this.optimizerNamedItemView.ReadOnly = false;
+      this.optimizerNamedItemView.Size = new System.Drawing.Size(604, 51);
+      this.optimizerNamedItemView.TabIndex = 0;
+      // 
+      // configurationGroupBox
+      // 
+      this.configurationGroupBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.configurationGroupBox.Controls.Add(this.priorityTextBox);
+      this.configurationGroupBox.Controls.Add(this.priorityLabel);
+      this.configurationGroupBox.Controls.Add(this.coresNeededTextBox);
+      this.configurationGroupBox.Controls.Add(this.memoryNeededTextBox);
+      this.configurationGroupBox.Controls.Add(this.memoryNeededLabel);
+      this.configurationGroupBox.Controls.Add(this.coresNeededLabel);
+      this.configurationGroupBox.Controls.Add(this.computeInParallelLabel);
+      this.configurationGroupBox.Controls.Add(this.computeInParallelCheckBox);
+      this.configurationGroupBox.Location = new System.Drawing.Point(6, 105);
+      this.configurationGroupBox.Name = "configurationGroupBox";
+      this.configurationGroupBox.Size = new System.Drawing.Size(610, 119);
+      this.configurationGroupBox.TabIndex = 27;
+      this.configurationGroupBox.TabStop = false;
+      this.configurationGroupBox.Text = "Configuration";
+      // 
+      // priorityTextBox
+      // 
+      this.priorityTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.priorityTextBox.Location = new System.Drawing.Point(108, 66);
+      this.priorityTextBox.Name = "priorityTextBox";
+      this.priorityTextBox.Size = new System.Drawing.Size(496, 20);
+      this.priorityTextBox.TabIndex = 41;
+      // 
+      // priorityLabel
+      // 
+      this.priorityLabel.AutoSize = true;
+      this.priorityLabel.Location = new System.Drawing.Point(7, 66);
+      this.priorityLabel.Name = "priorityLabel";
+      this.priorityLabel.Size = new System.Drawing.Size(41, 13);
+      this.priorityLabel.TabIndex = 42;
+      this.priorityLabel.Text = "Priority:";
+      // 
+      // coresNeededTextBox
+      // 
+      this.coresNeededTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.coresNeededTextBox.Location = new System.Drawing.Point(108, 20);
+      this.coresNeededTextBox.Name = "coresNeededTextBox";
+      this.coresNeededTextBox.Size = new System.Drawing.Size(496, 20);
+      this.coresNeededTextBox.TabIndex = 37;
+      // 
+      // memoryNeededTextBox
+      // 
+      this.memoryNeededTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.memoryNeededTextBox.Location = new System.Drawing.Point(108, 42);
+      this.memoryNeededTextBox.Name = "memoryNeededTextBox";
+      this.memoryNeededTextBox.Size = new System.Drawing.Size(496, 20);
+      this.memoryNeededTextBox.TabIndex = 38;
+      // 
+      // memoryNeededLabel
+      // 
+      this.memoryNeededLabel.AutoSize = true;
+      this.memoryNeededLabel.Location = new System.Drawing.Point(7, 42);
+      this.memoryNeededLabel.Name = "memoryNeededLabel";
+      this.memoryNeededLabel.Size = new System.Drawing.Size(85, 13);
+      this.memoryNeededLabel.TabIndex = 40;
+      this.memoryNeededLabel.Text = "MemoryNeeded:";
+      // 
+      // coresNeededLabel
+      // 
+      this.coresNeededLabel.AutoSize = true;
+      this.coresNeededLabel.Location = new System.Drawing.Point(7, 20);
+      this.coresNeededLabel.Name = "coresNeededLabel";
+      this.coresNeededLabel.Size = new System.Drawing.Size(75, 13);
+      this.coresNeededLabel.TabIndex = 39;
+      this.coresNeededLabel.Text = "CoresNeeded:";
+      // 
+      // computeInParallelLabel
+      // 
+      this.computeInParallelLabel.AutoSize = true;
+      this.computeInParallelLabel.Location = new System.Drawing.Point(7, 93);
+      this.computeInParallelLabel.Name = "computeInParallelLabel";
+      this.computeInParallelLabel.Size = new System.Drawing.Size(95, 13);
+      this.computeInParallelLabel.TabIndex = 36;
+      this.computeInParallelLabel.Text = "ComputeInParallel:";
+      // 
+      // computeInParallelCheckBox
+      // 
+      this.computeInParallelCheckBox.AutoSize = true;
+      this.computeInParallelCheckBox.Location = new System.Drawing.Point(108, 92);
+      this.computeInParallelCheckBox.Name = "computeInParallelCheckBox";
+      this.computeInParallelCheckBox.Size = new System.Drawing.Size(15, 14);
+      this.computeInParallelCheckBox.TabIndex = 35;
+      this.computeInParallelCheckBox.UseVisualStyleBackColor = true;
+      this.computeInParallelCheckBox.CheckedChanged += new System.EventHandler(this.computeInParallelCheckBox_CheckedChanged);
+      // 
+      // jobIdLabel
+      // 
+      this.jobIdLabel.AutoSize = true;
+      this.jobIdLabel.Location = new System.Drawing.Point(3, 6);
+      this.jobIdLabel.Name = "jobIdLabel";
+      this.jobIdLabel.Size = new System.Drawing.Size(36, 13);
+      this.jobIdLabel.TabIndex = 25;
+      this.jobIdLabel.Text = "JobId:";
+      // 
+      // jobIdTextBox
+      // 
+      this.jobIdTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.jobIdTextBox.Location = new System.Drawing.Point(91, 6);
+      this.jobIdTextBox.Name = "jobIdTextBox";
+      this.jobIdTextBox.Size = new System.Drawing.Size(525, 20);
+      this.jobIdTextBox.TabIndex = 26;
+      // 
+      // childJobsTabPage
+      // 
+      this.childJobsTabPage.Controls.Add(this.childHiveJobView);
+      this.childJobsTabPage.Location = new System.Drawing.Point(4, 22);
+      this.childJobsTabPage.Name = "childJobsTabPage";
+      this.childJobsTabPage.Size = new System.Drawing.Size(619, 492);
+      this.childJobsTabPage.TabIndex = 2;
+      this.childJobsTabPage.Text = "Child Jobs";
+      this.childJobsTabPage.UseVisualStyleBackColor = true;
+      // 
+      // childHiveJobView
+      // 
+      this.childHiveJobView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.childHiveJobView.Caption = "JobItemList View";
+      this.childHiveJobView.Content = null;
+      this.childHiveJobView.Location = new System.Drawing.Point(3, 3);
+      this.childHiveJobView.Name = "childHiveJobView";
+      this.childHiveJobView.ReadOnly = false;
+      this.childHiveJobView.Size = new System.Drawing.Size(613, 486);
+      this.childHiveJobView.TabIndex = 0;
+      // 
+      // runsTabPage
+      // 
+      this.runsTabPage.Controls.Add(this.runCollectionView);
+      this.runsTabPage.Location = new System.Drawing.Point(4, 22);
+      this.runsTabPage.Name = "runsTabPage";
+      this.runsTabPage.Size = new System.Drawing.Size(619, 492);
+      this.runsTabPage.TabIndex = 4;
+      this.runsTabPage.Text = "Runs";
+      this.runsTabPage.UseVisualStyleBackColor = true;
+      // 
+      // runCollectionView
+      // 
+      this.runCollectionView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.runCollectionView.Caption = "RunCollection View";
+      this.runCollectionView.Content = null;
+      this.runCollectionView.Location = new System.Drawing.Point(3, 3);
+      this.runCollectionView.Name = "runCollectionView";
+      this.runCollectionView.ReadOnly = false;
+      this.runCollectionView.Size = new System.Drawing.Size(613, 486);
+      this.runCollectionView.TabIndex = 0;
+      // 
+      // logTabPage
+      // 
+      this.logTabPage.Controls.Add(this.logView);
+      this.logTabPage.Location = new System.Drawing.Point(4, 22);
+      this.logTabPage.Name = "logTabPage";
+      this.logTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.logTabPage.Size = new System.Drawing.Size(619, 492);
+      this.logTabPage.TabIndex = 1;
+      this.logTabPage.Text = "Log";
+      this.logTabPage.UseVisualStyleBackColor = true;
+      // 
+      // logView
+      // 
+      this.logView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.logView.Caption = "Log View";
+      this.logView.Content = null;
+      this.logView.Location = new System.Drawing.Point(3, 3);
+      this.logView.Name = "logView";
+      this.logView.ReadOnly = false;
+      this.logView.Size = new System.Drawing.Size(613, 486);
+      this.logView.TabIndex = 0;
+      // 
+      // HiveJobView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.tabControl);
+      this.Name = "HiveJobView";
+      this.Size = new System.Drawing.Size(633, 524);
+      this.jobStatusGroupBox.ResumeLayout(false);
+      this.jobStatusGroupBox.PerformLayout();
+      this.tabControl.ResumeLayout(false);
+      this.detailsTabPage.ResumeLayout(false);
+      this.detailsTabPage.PerformLayout();
+      this.optimizerGroupBox.ResumeLayout(false);
+      this.configurationGroupBox.ResumeLayout(false);
+      this.configurationGroupBox.PerformLayout();
+      this.childJobsTabPage.ResumeLayout(false);
+      this.runsTabPage.ResumeLayout(false);
+      this.logTabPage.ResumeLayout(false);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Label stateLabel;
+    private System.Windows.Forms.TextBox stateTextBox;
+    private System.Windows.Forms.TextBox executionTimeTextBox;
+    private System.Windows.Forms.TextBox dateCreatedTextBox;
+    private System.Windows.Forms.TextBox dateFinishedTextBox;
+    private System.Windows.Forms.TextBox exceptionTextBox;
+    private System.Windows.Forms.Label executionTimeLabel;
+    private System.Windows.Forms.Label dateCreatedLabel;
+    private System.Windows.Forms.Label dateFinishedLabel;
+    private System.Windows.Forms.Label exceptionLabel;
+    private System.Windows.Forms.TextBox dateCalculatedText;
+    private System.Windows.Forms.Label dateCalculatedLabel;
+    private System.Windows.Forms.GroupBox jobStatusGroupBox;
+    private System.Windows.Forms.TabControl tabControl;
+    private System.Windows.Forms.TabPage detailsTabPage;
+    private System.Windows.Forms.TabPage logTabPage;
+    private Core.Views.LogView logView;
+    private System.Windows.Forms.Label jobIdLabel;
+    private System.Windows.Forms.TextBox jobIdTextBox;
+    private System.Windows.Forms.TabPage childJobsTabPage;
+    private HiveJobListView childHiveJobView;
+    private System.Windows.Forms.GroupBox configurationGroupBox;
+    private System.Windows.Forms.TextBox priorityTextBox;
+    private System.Windows.Forms.Label priorityLabel;
+    private System.Windows.Forms.TextBox coresNeededTextBox;
+    private System.Windows.Forms.TextBox memoryNeededTextBox;
+    private System.Windows.Forms.Label memoryNeededLabel;
+    private System.Windows.Forms.Label coresNeededLabel;
+    private System.Windows.Forms.Label computeInParallelLabel;
+    private System.Windows.Forms.CheckBox computeInParallelCheckBox;
+    private System.Windows.Forms.GroupBox optimizerGroupBox;
+    private Core.Views.NamedItemView optimizerNamedItemView;
+    private System.Windows.Forms.TabPage runsTabPage;
+    private Optimization.Views.RunCollectionView runCollectionView;
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/HiveJobView.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/HiveJobView.cs	(revision 4423)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/HiveJobView.cs	(revision 4423)
@@ -0,0 +1,184 @@
+﻿using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
+using HeuristicLab.Hive.JobBase;
+using HeuristicLab.Persistence.Default.Xml;
+using System.IO;
+using HeuristicLab.Hive.Experiment.Jobs;
+
+namespace HeuristicLab.Hive.Experiment.Views {
+  [View("HiveJob View")]
+  [Content(typeof(HiveJob), true)]
+  public partial class HiveJobView : ItemView {
+    public new HiveJob Content {
+      get { return (HiveJob)base.Content; }
+      set {
+        if (base.Content != value) {
+          base.Content = value;
+        }
+      }
+    }
+
+    public HiveJobView() {
+      InitializeComponent();
+    }
+
+    protected override void RegisterContentEvents() {
+      base.RegisterContentEvents();
+      Content.JobChanged += new EventHandler(Content_JobChanged);
+      Content.JobDtoChanged += new EventHandler(Content_JobDtoChanged);
+      Content.JobStateChanged += new EventHandler(Content_JobStateChanged);
+    }
+
+    protected override void DeregisterContentEvents() {
+      Content.JobChanged -= new EventHandler(Content_JobChanged);
+      Content.JobDtoChanged -= new EventHandler(Content_JobDtoChanged);
+      Content.JobStateChanged -= new EventHandler(Content_JobStateChanged);
+      base.DeregisterContentEvents();
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      if (Content != null && Content.Job != null) {
+        logView.Content = Content.Job.Log;
+        childHiveJobView.Content = Content.ChildHiveJobs;
+        computeInParallelCheckBox.Checked = Content.Job.ComputeInParallel;
+      } else {
+        logView.Content = null;
+        childHiveJobView.Content = null;
+        computeInParallelCheckBox.Checked = false;
+      }
+      Content_JobChanged(this, EventArgs.Empty);
+      Content_JobDtoChanged(this, EventArgs.Empty);
+      Content_JobStateChanged(this, EventArgs.Empty);
+    }
+
+    void Content_JobChanged(object sender, EventArgs e) {
+      RegisterJobEvents();
+      Job_OptimizerChanged(this, e);
+    }
+
+    void Job_OptimizerChanged(object sender, EventArgs e) {
+      if (Content != null && Content.Job != null && Content.Job.Optimizer != null) {
+        optimizerNamedItemView.Content = Content.Job.Optimizer;
+        runCollectionView.Content = Content.Job.Optimizer.Runs;
+      } else {
+        optimizerNamedItemView.Content = null;
+        runCollectionView.Content = null;
+      }
+    }
+
+    private void RegisterJobEvents() {
+      if (Content != null && Content.Job != null) {
+        Content.Job.ComputeInParallelChanged += new EventHandler(Job_ComputeInParallelChanged);
+        Content.Job.OptimizerChanged += new EventHandler(Job_OptimizerChanged);
+      }
+    }
+
+    private void DeregisterJobEvents() {
+      if (Content != null && Content.Job != null) {
+        Content.Job.ComputeInParallelChanged -= new EventHandler(Job_ComputeInParallelChanged);
+        Content.Job.OptimizerChanged -= new EventHandler(Job_OptimizerChanged);
+      }
+    }
+
+    #region Content Events
+    private void Content_JobDtoChanged(object sender, EventArgs e) {
+      if (InvokeRequired) {
+        Invoke(new EventHandler(Content_JobDtoChanged), sender, e);
+      } else {
+        if (Content != null && Content.JobDto != null) {
+          this.jobIdTextBox.Text = Content.JobDto.Id.ToString();
+          this.dateCreatedTextBox.Text = Content.JobDto.DateCreated.ToString();
+          this.priorityTextBox.Text = Content.JobDto.Priority.ToString();
+          this.coresNeededTextBox.Text = Content.JobDto.CoresNeeded.ToString();
+          this.memoryNeededTextBox.Text = Content.JobDto.MemoryNeeded.ToString();
+        } else {
+          this.jobIdTextBox.Text = string.Empty;
+          this.dateCreatedTextBox.Text = string.Empty;
+          this.priorityTextBox.Text = string.Empty;
+          this.coresNeededTextBox.Text = string.Empty;
+          this.memoryNeededTextBox.Text = string.Empty;
+        }
+      }
+    }
+
+    private void Content_JobStateChanged(object sender, EventArgs e) {
+      if (InvokeRequired) {
+        Invoke(new EventHandler(Content_JobStateChanged), sender, e);
+      } else {
+        if (Content != null && Content.JobDto != null) {
+          this.stateTextBox.Text = Content.JobDto.State.ToString();
+          this.executionTimeTextBox.Text = Content.JobDto.ExecutionTime.ToString();
+          this.dateCalculatedText.Text = Content.JobDto.DateCalculated.ToString();
+          this.dateFinishedTextBox.Text = Content.JobDto.DateFinished.ToString();
+          this.exceptionTextBox.Text = Content.JobDto.Exception;
+        } else {
+          this.stateTextBox.Text = string.Empty;
+          this.executionTimeTextBox.Text = string.Empty;
+          this.dateCalculatedText.Text = string.Empty;
+          this.dateFinishedTextBox.Text = string.Empty;
+          this.exceptionTextBox.Text = string.Empty;
+        }
+      }
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      if (InvokeRequired) {
+        this.InvokeIfRequired(c => { SetEnabledStateOfControls(); });
+      } else {
+        base.SetEnabledStateOfControls();
+        this.jobIdTextBox.ReadOnly = true;
+        this.stateTextBox.ReadOnly = true;
+        this.executionTimeTextBox.ReadOnly = true;
+        this.dateCreatedTextBox.ReadOnly = true;
+        this.dateCalculatedText.ReadOnly = true;
+        this.dateFinishedTextBox.ReadOnly = true;
+        this.exceptionTextBox.ReadOnly = true;
+
+        this.priorityTextBox.ReadOnly = this.ReadOnly;
+        this.coresNeededTextBox.ReadOnly = this.ReadOnly;
+        this.memoryNeededTextBox.ReadOnly = this.ReadOnly;
+        this.computeInParallelCheckBox.Enabled = !this.ReadOnly && this.Content != null && this.Content.Job != null && this.Content.Job.IsParallelizable;
+
+        optimizerNamedItemView.ReadOnly = true;
+        ShowOrHideChildJobTabPage();
+      }
+    }
+
+    void Job_ComputeInParallelChanged(object sender, EventArgs e) {
+      if (InvokeRequired) {
+        Invoke(new EventHandler(Job_ComputeInParallelChanged), sender, e);
+      } else {
+        computeInParallelCheckBox.Checked = Content.Job.ComputeInParallel;
+        ShowOrHideChildJobTabPage();
+      }
+    }
+
+    private void ShowOrHideChildJobTabPage() {
+      if (Content != null && Content.Job != null) {
+        if (!Content.Job.ComputeInParallel) {
+          if (tabControl.TabPages.Contains(childJobsTabPage))
+            tabControl.TabPages.Remove(childJobsTabPage);
+        } else {
+          if (!tabControl.TabPages.Contains(childJobsTabPage))
+            tabControl.TabPages.Insert(1, childJobsTabPage);
+        }
+      }
+    }
+    #endregion
+
+    private void computeInParallelCheckBox_CheckedChanged(object sender, EventArgs e) {
+      if (Content != null) {
+        this.Content.Job.ComputeInParallel = this.computeInParallelCheckBox.Checked;
+      }
+    }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/HiveJobView.resx
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/HiveJobView.resx	(revision 4423)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/HiveJobView.resx	(revision 4423)
@@ -0,0 +1,120 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: anches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/JobConfigListView.Designer.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/JobConfigListView.Designer.cs	(revision 4422)
+++ 	(revision )
@@ -1,32 +1,0 @@
-﻿namespace HeuristicLab.Hive.Experiment.Views {
-  partial class JobConfigListView {
-    /// <summary> 
-    /// Required designer variable.
-    /// </summary>
-    private System.ComponentModel.IContainer components = null;
-
-    /// <summary> 
-    /// Clean up any resources being used.
-    /// </summary>
-    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
-    protected override void Dispose(bool disposing) {
-      if (disposing) {
-        if (components != null) components.Dispose();
-      }
-      base.Dispose(disposing);
-    }
-
-    #region Component Designer generated code
-
-    /// <summary> 
-    /// Required method for Designer support - do not modify 
-    /// the contents of this method with the code editor.
-    /// </summary>
-    private void InitializeComponent() {
-      components = new System.ComponentModel.Container();
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-    }
-
-    #endregion
-  }
-}
Index: anches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/JobConfigListView.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/JobConfigListView.cs	(revision 4422)
+++ 	(revision )
@@ -1,38 +1,0 @@
-﻿using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Drawing;
-using System.Data;
-using System.Linq;
-using System.Text;
-using System.Windows.Forms;
-using HeuristicLab.Core.Views;
-using HeuristicLab.Core;
-using HeuristicLab.MainForm;
-using HeuristicLab.Optimization;
-using HeuristicLab.PluginInfrastructure;
-using HeuristicLab.Hive.JobBase;
-
-namespace HeuristicLab.Hive.Experiment.Views {
-  [View("JobConfigListView")]
-  [Content(typeof(IItemList<IJob>), true)]
-  public partial class JobConfigListView : ItemListView<IJob> {
-
-    public JobConfigListView() {
-      InitializeComponent();
-      itemsGroupBox.Text = "Child Job Configuration";
-    }
-
-    protected override IJob CreateItem() {
-      return null;
-    }
-
-    protected override void SetEnabledStateOfControls() {
-      base.SetEnabledStateOfControls();
-      this.addButton.Enabled = false;
-      this.moveDownButton.Enabled = false;
-      this.moveUpButton.Enabled = false;
-      this.removeButton.Enabled = false;
-    }
-  }
-}
Index: anches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/JobConfigView.Designer.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/JobConfigView.Designer.cs	(revision 4422)
+++ 	(revision )
@@ -1,206 +1,0 @@
-﻿namespace HeuristicLab.Hive.Experiment.Views {
-  partial class JobConfigView {
-    /// <summary> 
-    /// Required designer variable.
-    /// </summary>
-    private System.ComponentModel.IContainer components = null;
-
-    /// <summary> 
-    /// Clean up any resources being used.
-    /// </summary>
-    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
-    protected override void Dispose(bool disposing) {
-      if (disposing && (components != null)) {
-        components.Dispose();
-      }
-      base.Dispose(disposing);
-    }
-
-    #region Component Designer generated code
-
-    /// <summary> 
-    /// Required method for Designer support - do not modify 
-    /// the contents of this method with the code editor.
-    /// </summary>
-    private void InitializeComponent() {
-      this.coresNeededLabel = new System.Windows.Forms.Label();
-      this.memoryNeededLabel = new System.Windows.Forms.Label();
-      this.memoryNeededTextBox = new System.Windows.Forms.TextBox();
-      this.coresNeededTextBox = new System.Windows.Forms.TextBox();
-      this.optimizerTypeLabel = new System.Windows.Forms.Label();
-      this.optimizerTypeTextBox = new System.Windows.Forms.TextBox();
-      this.computeInParallelCheckBox = new System.Windows.Forms.CheckBox();
-      this.computeInParallelLabel = new System.Windows.Forms.Label();
-      this.jobConfigListView = new HeuristicLab.Hive.Experiment.Views.JobConfigListView();
-      this.tabControl = new System.Windows.Forms.TabControl();
-      this.configurationTabPage = new System.Windows.Forms.TabPage();
-      this.childJobsTabPage = new System.Windows.Forms.TabPage();
-      this.tabControl.SuspendLayout();
-      this.configurationTabPage.SuspendLayout();
-      this.childJobsTabPage.SuspendLayout();
-      this.SuspendLayout();
-      // 
-      // coresNeededLabel
-      // 
-      this.coresNeededLabel.AutoSize = true;
-      this.coresNeededLabel.Location = new System.Drawing.Point(6, 25);
-      this.coresNeededLabel.Name = "coresNeededLabel";
-      this.coresNeededLabel.Size = new System.Drawing.Size(75, 13);
-      this.coresNeededLabel.TabIndex = 17;
-      this.coresNeededLabel.Text = "CoresNeeded:";
-      // 
-      // memoryNeededLabel
-      // 
-      this.memoryNeededLabel.AutoSize = true;
-      this.memoryNeededLabel.Location = new System.Drawing.Point(6, 47);
-      this.memoryNeededLabel.Name = "memoryNeededLabel";
-      this.memoryNeededLabel.Size = new System.Drawing.Size(85, 13);
-      this.memoryNeededLabel.TabIndex = 18;
-      this.memoryNeededLabel.Text = "MemoryNeeded:";
-      // 
-      // memoryNeededTextBox
-      // 
-      this.memoryNeededTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
-                  | System.Windows.Forms.AnchorStyles.Right)));
-      this.memoryNeededTextBox.Location = new System.Drawing.Point(107, 47);
-      this.memoryNeededTextBox.Name = "memoryNeededTextBox";
-      this.memoryNeededTextBox.Size = new System.Drawing.Size(658, 20);
-      this.memoryNeededTextBox.TabIndex = 9;
-      this.memoryNeededTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.memoryNeededTextBox_Validating);
-      this.memoryNeededTextBox.Validated += new System.EventHandler(this.memoryNeededTextBox_Validated);
-      // 
-      // coresNeededTextBox
-      // 
-      this.coresNeededTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
-                  | System.Windows.Forms.AnchorStyles.Right)));
-      this.coresNeededTextBox.Location = new System.Drawing.Point(107, 25);
-      this.coresNeededTextBox.Name = "coresNeededTextBox";
-      this.coresNeededTextBox.Size = new System.Drawing.Size(658, 20);
-      this.coresNeededTextBox.TabIndex = 8;
-      this.coresNeededTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.coresNeededTextBox_Validating);
-      this.coresNeededTextBox.Validated += new System.EventHandler(this.coresNeededTextBox_Validated);
-      // 
-      // optimizerTypeLabel
-      // 
-      this.optimizerTypeLabel.AutoSize = true;
-      this.optimizerTypeLabel.Location = new System.Drawing.Point(6, 3);
-      this.optimizerTypeLabel.Name = "optimizerTypeLabel";
-      this.optimizerTypeLabel.Size = new System.Drawing.Size(77, 13);
-      this.optimizerTypeLabel.TabIndex = 19;
-      this.optimizerTypeLabel.Text = "OptimizerType:";
-      // 
-      // optimizerTypeTextBox
-      // 
-      this.optimizerTypeTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
-                  | System.Windows.Forms.AnchorStyles.Right)));
-      this.optimizerTypeTextBox.Location = new System.Drawing.Point(107, 3);
-      this.optimizerTypeTextBox.Name = "optimizerTypeTextBox";
-      this.optimizerTypeTextBox.Size = new System.Drawing.Size(658, 20);
-      this.optimizerTypeTextBox.TabIndex = 20;
-      // 
-      // computeInParallelCheckBox
-      // 
-      this.computeInParallelCheckBox.AutoSize = true;
-      this.computeInParallelCheckBox.Location = new System.Drawing.Point(107, 74);
-      this.computeInParallelCheckBox.Name = "computeInParallelCheckBox";
-      this.computeInParallelCheckBox.Size = new System.Drawing.Size(15, 14);
-      this.computeInParallelCheckBox.TabIndex = 21;
-      this.computeInParallelCheckBox.UseVisualStyleBackColor = true;
-      this.computeInParallelCheckBox.CheckedChanged += new System.EventHandler(this.computeInParallelCheckBox_CheckedChanged);
-      // 
-      // computeInParallelLabel
-      // 
-      this.computeInParallelLabel.AutoSize = true;
-      this.computeInParallelLabel.Location = new System.Drawing.Point(6, 74);
-      this.computeInParallelLabel.Name = "computeInParallelLabel";
-      this.computeInParallelLabel.Size = new System.Drawing.Size(95, 13);
-      this.computeInParallelLabel.TabIndex = 22;
-      this.computeInParallelLabel.Text = "ComputeInParallel:";
-      // 
-      // jobConfigListView
-      // 
-      this.jobConfigListView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
-                  | System.Windows.Forms.AnchorStyles.Left)
-                  | System.Windows.Forms.AnchorStyles.Right)));
-      this.jobConfigListView.Caption = "JobConfigListView";
-      this.jobConfigListView.Content = null;
-      this.jobConfigListView.Location = new System.Drawing.Point(3, 3);
-      this.jobConfigListView.Name = "jobConfigListView";
-      this.jobConfigListView.ReadOnly = false;
-      this.jobConfigListView.Size = new System.Drawing.Size(762, 387);
-      this.jobConfigListView.TabIndex = 23;
-      // 
-      // tabControl
-      // 
-      this.tabControl.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
-                  | System.Windows.Forms.AnchorStyles.Left)
-                  | System.Windows.Forms.AnchorStyles.Right)));
-      this.tabControl.Controls.Add(this.configurationTabPage);
-      this.tabControl.Controls.Add(this.childJobsTabPage);
-      this.tabControl.Location = new System.Drawing.Point(3, 3);
-      this.tabControl.Name = "tabControl";
-      this.tabControl.SelectedIndex = 0;
-      this.tabControl.Size = new System.Drawing.Size(776, 419);
-      this.tabControl.TabIndex = 24;
-      // 
-      // configurationTabPage
-      // 
-      this.configurationTabPage.Controls.Add(this.optimizerTypeLabel);
-      this.configurationTabPage.Controls.Add(this.coresNeededLabel);
-      this.configurationTabPage.Controls.Add(this.computeInParallelLabel);
-      this.configurationTabPage.Controls.Add(this.memoryNeededLabel);
-      this.configurationTabPage.Controls.Add(this.computeInParallelCheckBox);
-      this.configurationTabPage.Controls.Add(this.memoryNeededTextBox);
-      this.configurationTabPage.Controls.Add(this.optimizerTypeTextBox);
-      this.configurationTabPage.Controls.Add(this.coresNeededTextBox);
-      this.configurationTabPage.Location = new System.Drawing.Point(4, 22);
-      this.configurationTabPage.Name = "configurationTabPage";
-      this.configurationTabPage.Padding = new System.Windows.Forms.Padding(3);
-      this.configurationTabPage.Size = new System.Drawing.Size(768, 393);
-      this.configurationTabPage.TabIndex = 0;
-      this.configurationTabPage.Text = "Configuration";
-      this.configurationTabPage.UseVisualStyleBackColor = true;
-      // 
-      // childJobsTabPage
-      // 
-      this.childJobsTabPage.Controls.Add(this.jobConfigListView);
-      this.childJobsTabPage.Location = new System.Drawing.Point(4, 22);
-      this.childJobsTabPage.Name = "childJobsTabPage";
-      this.childJobsTabPage.Padding = new System.Windows.Forms.Padding(3);
-      this.childJobsTabPage.Size = new System.Drawing.Size(768, 393);
-      this.childJobsTabPage.TabIndex = 1;
-      this.childJobsTabPage.Text = "Child Jobs";
-      this.childJobsTabPage.UseVisualStyleBackColor = true;
-      // 
-      // JobConfigView
-      // 
-      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-      this.Controls.Add(this.tabControl);
-      this.Name = "JobConfigView";
-      this.Size = new System.Drawing.Size(782, 425);
-      this.tabControl.ResumeLayout(false);
-      this.configurationTabPage.ResumeLayout(false);
-      this.configurationTabPage.PerformLayout();
-      this.childJobsTabPage.ResumeLayout(false);
-      this.ResumeLayout(false);
-
-    }
-
-    #endregion
-
-    private System.Windows.Forms.Label coresNeededLabel;
-    private System.Windows.Forms.Label memoryNeededLabel;
-    private System.Windows.Forms.TextBox memoryNeededTextBox;
-    private System.Windows.Forms.TextBox coresNeededTextBox;
-    private System.Windows.Forms.Label optimizerTypeLabel;
-    private System.Windows.Forms.TextBox optimizerTypeTextBox;
-    private System.Windows.Forms.CheckBox computeInParallelCheckBox;
-    private System.Windows.Forms.Label computeInParallelLabel;
-    private JobConfigListView jobConfigListView;
-    private System.Windows.Forms.TabControl tabControl;
-    private System.Windows.Forms.TabPage configurationTabPage;
-    private System.Windows.Forms.TabPage childJobsTabPage;
-
-  }
-}
Index: anches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/JobConfigView.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/JobConfigView.cs	(revision 4422)
+++ 	(revision )
@@ -1,116 +1,0 @@
-﻿using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Drawing;
-using System.Data;
-using System.Linq;
-using System.Text;
-using System.Windows.Forms;
-using HeuristicLab.Core.Views;
-using HeuristicLab.MainForm;
-using HeuristicLab.Hive.JobBase;
-using HeuristicLab.Persistence.Default.Xml;
-using System.IO;
-using HeuristicLab.Hive.Experiment.Jobs;
-
-namespace HeuristicLab.Hive.Experiment.Views {
-  [View("JobConfigView")]
-  [Content(typeof(IJob), true)]
-  public partial class JobConfigView : ItemView {
-    public new IJob Content {
-      get { return (IJob)base.Content; }
-      set {
-        if (base.Content != value) {
-          base.Content = value;
-        }
-      }
-    }
-
-    public JobConfigView() {
-      InitializeComponent();
-    }
-
-    protected override void OnContentChanged() {
-      base.OnContentChanged();
-      if (Content != null) {
-        this.optimizerTypeTextBox.Text = Content.Name;
-        this.memoryNeededTextBox.Text = Content.MemoryNeeded.ToString();
-        this.coresNeededTextBox.Text = Content.CoresNeeded.ToString();
-        this.computeInParallelCheckBox.Checked = Content.ComputeInParallel;
-        this.jobConfigListView.Content = new JobList(Content.ChildJobs);
-        SetEnabledStateOfControls();
-      }
-    }
-
-    protected override void RegisterContentEvents() {
-      base.RegisterContentEvents();
-    }
-
-    protected override void DeregisterContentEvents() {
-      base.DeregisterContentEvents();
-    }
-
-    protected override void SetEnabledStateOfControls() {
-      if (InvokeRequired) {
-        this.InvokeIfRequired(c => { SetEnabledStateOfControls(); });
-      } else {
-        base.SetEnabledStateOfControls();
-        this.optimizerTypeTextBox.ReadOnly = true;
-        this.computeInParallelCheckBox.Enabled = this.ReadOnly;
-        this.coresNeededTextBox.ReadOnly = this.ReadOnly;
-        this.memoryNeededTextBox.ReadOnly = this.ReadOnly;
-
-        if (Content != null) {
-          if (Content.IsParallelizable) {
-            this.computeInParallelCheckBox.Enabled = true;
-          } else {
-            this.computeInParallelCheckBox.Enabled = false;
-            this.computeInParallelCheckBox.Checked = false;
-          }
-        }
-
-        if (this.computeInParallelCheckBox.Checked) {
-          if (!tabControl.TabPages.ContainsKey(childJobsTabPage.Name)) {
-            tabControl.TabPages.Add(childJobsTabPage);
-          }
-        } else {
-          if (tabControl.TabPages.ContainsKey(childJobsTabPage.Name)) {
-            tabControl.TabPages.Remove(childJobsTabPage);
-          }
-        }
-      }
-    }
-
-    private void UpdateContent(object sender, EventArgs e) {
-      if (InvokeRequired)
-        Invoke(new EventHandler(UpdateContent), sender, e);
-      else {
-        if (Content != null) {
-          Content.CoresNeeded = int.Parse(this.coresNeededTextBox.Text);
-          Content.MemoryNeeded = int.Parse(this.memoryNeededTextBox.Text);
-          Content.ComputeInParallel = computeInParallelCheckBox.Checked;
-        }
-      }
-    }
-    
-    private void coresNeededTextBox_Validated(object sender, EventArgs e) {
-      UpdateContent(sender, e);
-    }
-
-    private void coresNeededTextBox_Validating(object sender, CancelEventArgs e) {
-    }
-
-    private void memoryNeededTextBox_Validated(object sender, EventArgs e) {
-      UpdateContent(sender, e);
-    }
-
-    private void memoryNeededTextBox_Validating(object sender, CancelEventArgs e) {
-    }
-
-    void computeInParallelCheckBox_CheckedChanged(object sender, System.EventArgs e) {
-      UpdateContent(sender, e);
-      SetEnabledStateOfControls();
-    }
-
-  }
-}
Index: anches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/JobConfigView.resx
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/JobConfigView.resx	(revision 4422)
+++ 	(revision )
@@ -1,120 +1,0 @@
-﻿<?xml version="1.0" encoding="utf-8"?>
-<root>
-  <!-- 
-    Microsoft ResX Schema 
-    
-    Version 2.0
-    
-    The primary goals of this format is to allow a simple XML format 
-    that is mostly human readable. The generation and parsing of the 
-    various data types are done through the TypeConverter classes 
-    associated with the data types.
-    
-    Example:
-    
-    ... ado.net/XML headers & schema ...
-    <resheader name="resmimetype">text/microsoft-resx</resheader>
-    <resheader name="version">2.0</resheader>
-    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
-    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
-    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
-    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
-    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
-        <value>[base64 mime encoded serialized .NET Framework object]</value>
-    </data>
-    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
-        <comment>This is a comment</comment>
-    </data>
-                
-    There are any number of "resheader" rows that contain simple 
-    name/value pairs.
-    
-    Each data row contains a name, and value. The row also contains a 
-    type or mimetype. Type corresponds to a .NET class that support 
-    text/value conversion through the TypeConverter architecture. 
-    Classes that don't support this are serialized and stored with the 
-    mimetype set.
-    
-    The mimetype is used for serialized objects, and tells the 
-    ResXResourceReader how to depersist the object. This is currently not 
-    extensible. For a given mimetype the value must be set accordingly:
-    
-    Note - application/x-microsoft.net.object.binary.base64 is the format 
-    that the ResXResourceWriter will generate, however the reader can 
-    read any of the formats listed below.
-    
-    mimetype: application/x-microsoft.net.object.binary.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
-            : and then encoded with base64 encoding.
-    
-    mimetype: application/x-microsoft.net.object.soap.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
-            : and then encoded with base64 encoding.
-
-    mimetype: application/x-microsoft.net.object.bytearray.base64
-    value   : The object must be serialized into a byte array 
-            : using a System.ComponentModel.TypeConverter
-            : and then encoded with base64 encoding.
-    -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
-    <xsd:element name="root" msdata:IsDataSet="true">
-      <xsd:complexType>
-        <xsd:choice maxOccurs="unbounded">
-          <xsd:element name="metadata">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" />
-              </xsd:sequence>
-              <xsd:attribute name="name" use="required" type="xsd:string" />
-              <xsd:attribute name="type" type="xsd:string" />
-              <xsd:attribute name="mimetype" type="xsd:string" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="assembly">
-            <xsd:complexType>
-              <xsd:attribute name="alias" type="xsd:string" />
-              <xsd:attribute name="name" type="xsd:string" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="data">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
-              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
-              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="resheader">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" />
-            </xsd:complexType>
-          </xsd:element>
-        </xsd:choice>
-      </xsd:complexType>
-    </xsd:element>
-  </xsd:schema>
-  <resheader name="resmimetype">
-    <value>text/microsoft-resx</value>
-  </resheader>
-  <resheader name="version">
-    <value>2.0</value>
-  </resheader>
-  <resheader name="reader">
-    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-</root>
Index: anches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/JobItemListView.Designer.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/JobItemListView.Designer.cs	(revision 4422)
+++ 	(revision )
@@ -1,32 +1,0 @@
-﻿namespace HeuristicLab.Hive.Experiment.Views {
-  partial class JobItemListView {
-    /// <summary> 
-    /// Required designer variable.
-    /// </summary>
-    private System.ComponentModel.IContainer components = null;
-
-    /// <summary> 
-    /// Clean up any resources being used.
-    /// </summary>
-    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
-    protected override void Dispose(bool disposing) {
-      if (disposing) {
-        if (components != null) components.Dispose();
-      }
-      base.Dispose(disposing);
-    }
-
-    #region Component Designer generated code
-
-    /// <summary> 
-    /// Required method for Designer support - do not modify 
-    /// the contents of this method with the code editor.
-    /// </summary>
-    private void InitializeComponent() {
-      components = new System.ComponentModel.Container();
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-    }
-
-    #endregion
-  }
-}
Index: anches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/JobItemListView.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/JobItemListView.cs	(revision 4422)
+++ 	(revision )
@@ -1,39 +1,0 @@
-﻿using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Drawing;
-using System.Data;
-using System.Linq;
-using System.Text;
-using System.Windows.Forms;
-using HeuristicLab.Core.Views;
-using HeuristicLab.Core;
-using HeuristicLab.MainForm;
-using HeuristicLab.Optimization;
-using HeuristicLab.PluginInfrastructure;
-
-namespace HeuristicLab.Hive.Experiment.Views {
-  [View("JobItemList View")]
-  [Content(typeof(JobItemList), true)]
-  [Content(typeof(IItemList<JobItem>), false)]
-  public partial class JobItemListView : ItemListView<JobItem> {
-
-    public JobItemListView() {
-      InitializeComponent();
-      itemsGroupBox.Text = "Jobs";
-      this.viewHost.ReadOnly = true;
-    }
-
-    protected override JobItem CreateItem() {
-      return null;
-    }
-
-    protected override void SetEnabledStateOfControls() {
-      base.SetEnabledStateOfControls();
-      this.addButton.Enabled = false;
-      this.moveDownButton.Enabled = false;
-      this.moveUpButton.Enabled = false;
-      this.removeButton.Enabled = false;
-    }
-  }
-}
Index: anches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/JobItemView.Designer.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/JobItemView.Designer.cs	(revision 4422)
+++ 	(revision )
@@ -1,475 +1,0 @@
-﻿namespace HeuristicLab.Hive.Experiment.Views {
-  partial class JobItemView {
-    /// <summary> 
-    /// Required designer variable.
-    /// </summary>
-    private System.ComponentModel.IContainer components = null;
-
-    /// <summary> 
-    /// Clean up any resources being used.
-    /// </summary>
-    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
-    protected override void Dispose(bool disposing) {
-      if (disposing && (components != null)) {
-        components.Dispose();
-      }
-      base.Dispose(disposing);
-    }
-
-    #region Component Designer generated code
-
-    /// <summary> 
-    /// Required method for Designer support - do not modify 
-    /// the contents of this method with the code editor.
-    /// </summary>
-    private void InitializeComponent() {
-      this.stateLabel = new System.Windows.Forms.Label();
-      this.userIdLabel = new System.Windows.Forms.Label();
-      this.stateTextBox = new System.Windows.Forms.TextBox();
-      this.userIdTextBox = new System.Windows.Forms.TextBox();
-      this.percentageTextBox = new System.Windows.Forms.TextBox();
-      this.dateCreatedTextBox = new System.Windows.Forms.TextBox();
-      this.dateFinishedTextBox = new System.Windows.Forms.TextBox();
-      this.priorityTextBox = new System.Windows.Forms.TextBox();
-      this.coresNeededTextBox = new System.Windows.Forms.TextBox();
-      this.memoryNeededTextBox = new System.Windows.Forms.TextBox();
-      this.exceptionTextBox = new System.Windows.Forms.TextBox();
-      this.projectTextBox = new System.Windows.Forms.TextBox();
-      this.percentageLabel = new System.Windows.Forms.Label();
-      this.dateCreatedLabel = new System.Windows.Forms.Label();
-      this.dateFinishedLabel = new System.Windows.Forms.Label();
-      this.priorityLabel = new System.Windows.Forms.Label();
-      this.coresNeededLabel = new System.Windows.Forms.Label();
-      this.memoryNeededLabel = new System.Windows.Forms.Label();
-      this.exceptionLabel = new System.Windows.Forms.Label();
-      this.projectLabel = new System.Windows.Forms.Label();
-      this.dateCalculatedText = new System.Windows.Forms.TextBox();
-      this.dateCalculatedLabel = new System.Windows.Forms.Label();
-      this.jobStatusGroupBox = new System.Windows.Forms.GroupBox();
-      this.percentageProgressBar = new System.Windows.Forms.ProgressBar();
-      this.tabControl = new System.Windows.Forms.TabControl();
-      this.detailsTabPage = new System.Windows.Forms.TabPage();
-      this.jobIdLabel = new System.Windows.Forms.Label();
-      this.jobIdTextBox = new System.Windows.Forms.TextBox();
-      this.childJobsTabPage = new System.Windows.Forms.TabPage();
-      this.childJobItemListView = new HeuristicLab.Hive.Experiment.Views.JobItemListView();
-      this.logTabPage = new System.Windows.Forms.TabPage();
-      this.logView = new HeuristicLab.Core.Views.LogView();
-      this.resultTabPage = new System.Windows.Forms.TabPage();
-      this.getLatestResultButton = new System.Windows.Forms.Button();
-      this.jobStatusGroupBox.SuspendLayout();
-      this.tabControl.SuspendLayout();
-      this.detailsTabPage.SuspendLayout();
-      this.childJobsTabPage.SuspendLayout();
-      this.logTabPage.SuspendLayout();
-      this.resultTabPage.SuspendLayout();
-      this.SuspendLayout();
-      // 
-      // stateLabel
-      // 
-      this.stateLabel.AutoSize = true;
-      this.stateLabel.Location = new System.Drawing.Point(7, 19);
-      this.stateLabel.Name = "stateLabel";
-      this.stateLabel.Size = new System.Drawing.Size(35, 13);
-      this.stateLabel.TabIndex = 0;
-      this.stateLabel.Text = "State:";
-      // 
-      // userIdLabel
-      // 
-      this.userIdLabel.AutoSize = true;
-      this.userIdLabel.Location = new System.Drawing.Point(3, 28);
-      this.userIdLabel.Name = "userIdLabel";
-      this.userIdLabel.Size = new System.Drawing.Size(41, 13);
-      this.userIdLabel.TabIndex = 1;
-      this.userIdLabel.Text = "UserId:";
-      // 
-      // stateTextBox
-      // 
-      this.stateTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
-                  | System.Windows.Forms.AnchorStyles.Right)));
-      this.stateTextBox.Location = new System.Drawing.Point(95, 19);
-      this.stateTextBox.Name = "stateTextBox";
-      this.stateTextBox.Size = new System.Drawing.Size(509, 20);
-      this.stateTextBox.TabIndex = 2;
-      // 
-      // userIdTextBox
-      // 
-      this.userIdTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
-                  | System.Windows.Forms.AnchorStyles.Right)));
-      this.userIdTextBox.Location = new System.Drawing.Point(91, 28);
-      this.userIdTextBox.Name = "userIdTextBox";
-      this.userIdTextBox.Size = new System.Drawing.Size(525, 20);
-      this.userIdTextBox.TabIndex = 3;
-      // 
-      // percentageTextBox
-      // 
-      this.percentageTextBox.Location = new System.Drawing.Point(95, 41);
-      this.percentageTextBox.Name = "percentageTextBox";
-      this.percentageTextBox.Size = new System.Drawing.Size(52, 20);
-      this.percentageTextBox.TabIndex = 4;
-      // 
-      // dateCreatedTextBox
-      // 
-      this.dateCreatedTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
-                  | System.Windows.Forms.AnchorStyles.Right)));
-      this.dateCreatedTextBox.Location = new System.Drawing.Point(95, 63);
-      this.dateCreatedTextBox.Name = "dateCreatedTextBox";
-      this.dateCreatedTextBox.Size = new System.Drawing.Size(509, 20);
-      this.dateCreatedTextBox.TabIndex = 5;
-      // 
-      // dateFinishedTextBox
-      // 
-      this.dateFinishedTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
-                  | System.Windows.Forms.AnchorStyles.Right)));
-      this.dateFinishedTextBox.Location = new System.Drawing.Point(95, 107);
-      this.dateFinishedTextBox.Name = "dateFinishedTextBox";
-      this.dateFinishedTextBox.Size = new System.Drawing.Size(509, 20);
-      this.dateFinishedTextBox.TabIndex = 6;
-      // 
-      // priorityTextBox
-      // 
-      this.priorityTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
-                  | System.Windows.Forms.AnchorStyles.Right)));
-      this.priorityTextBox.Location = new System.Drawing.Point(91, 50);
-      this.priorityTextBox.Name = "priorityTextBox";
-      this.priorityTextBox.Size = new System.Drawing.Size(525, 20);
-      this.priorityTextBox.TabIndex = 7;
-      // 
-      // coresNeededTextBox
-      // 
-      this.coresNeededTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
-                  | System.Windows.Forms.AnchorStyles.Right)));
-      this.coresNeededTextBox.Location = new System.Drawing.Point(91, 72);
-      this.coresNeededTextBox.Name = "coresNeededTextBox";
-      this.coresNeededTextBox.Size = new System.Drawing.Size(525, 20);
-      this.coresNeededTextBox.TabIndex = 8;
-      // 
-      // memoryNeededTextBox
-      // 
-      this.memoryNeededTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
-                  | System.Windows.Forms.AnchorStyles.Right)));
-      this.memoryNeededTextBox.Location = new System.Drawing.Point(91, 94);
-      this.memoryNeededTextBox.Name = "memoryNeededTextBox";
-      this.memoryNeededTextBox.Size = new System.Drawing.Size(525, 20);
-      this.memoryNeededTextBox.TabIndex = 9;
-      // 
-      // exceptionTextBox
-      // 
-      this.exceptionTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
-                  | System.Windows.Forms.AnchorStyles.Right)));
-      this.exceptionTextBox.Location = new System.Drawing.Point(95, 129);
-      this.exceptionTextBox.Name = "exceptionTextBox";
-      this.exceptionTextBox.Size = new System.Drawing.Size(509, 20);
-      this.exceptionTextBox.TabIndex = 10;
-      // 
-      // projectTextBox
-      // 
-      this.projectTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
-                  | System.Windows.Forms.AnchorStyles.Right)));
-      this.projectTextBox.Location = new System.Drawing.Point(91, 116);
-      this.projectTextBox.Name = "projectTextBox";
-      this.projectTextBox.Size = new System.Drawing.Size(525, 20);
-      this.projectTextBox.TabIndex = 11;
-      // 
-      // percentageLabel
-      // 
-      this.percentageLabel.AutoSize = true;
-      this.percentageLabel.Location = new System.Drawing.Point(7, 41);
-      this.percentageLabel.Name = "percentageLabel";
-      this.percentageLabel.Size = new System.Drawing.Size(65, 13);
-      this.percentageLabel.TabIndex = 13;
-      this.percentageLabel.Text = "Percentage:";
-      // 
-      // dateCreatedLabel
-      // 
-      this.dateCreatedLabel.AutoSize = true;
-      this.dateCreatedLabel.Location = new System.Drawing.Point(7, 63);
-      this.dateCreatedLabel.Name = "dateCreatedLabel";
-      this.dateCreatedLabel.Size = new System.Drawing.Size(70, 13);
-      this.dateCreatedLabel.TabIndex = 14;
-      this.dateCreatedLabel.Text = "DateCreated:";
-      // 
-      // dateFinishedLabel
-      // 
-      this.dateFinishedLabel.AutoSize = true;
-      this.dateFinishedLabel.Location = new System.Drawing.Point(7, 107);
-      this.dateFinishedLabel.Name = "dateFinishedLabel";
-      this.dateFinishedLabel.Size = new System.Drawing.Size(72, 13);
-      this.dateFinishedLabel.TabIndex = 15;
-      this.dateFinishedLabel.Text = "DateFinished:";
-      // 
-      // priorityLabel
-      // 
-      this.priorityLabel.AutoSize = true;
-      this.priorityLabel.Location = new System.Drawing.Point(3, 50);
-      this.priorityLabel.Name = "priorityLabel";
-      this.priorityLabel.Size = new System.Drawing.Size(41, 13);
-      this.priorityLabel.TabIndex = 16;
-      this.priorityLabel.Text = "Priority:";
-      // 
-      // coresNeededLabel
-      // 
-      this.coresNeededLabel.AutoSize = true;
-      this.coresNeededLabel.Location = new System.Drawing.Point(3, 72);
-      this.coresNeededLabel.Name = "coresNeededLabel";
-      this.coresNeededLabel.Size = new System.Drawing.Size(75, 13);
-      this.coresNeededLabel.TabIndex = 17;
-      this.coresNeededLabel.Text = "CoresNeeded:";
-      // 
-      // memoryNeededLabel
-      // 
-      this.memoryNeededLabel.AutoSize = true;
-      this.memoryNeededLabel.Location = new System.Drawing.Point(3, 94);
-      this.memoryNeededLabel.Name = "memoryNeededLabel";
-      this.memoryNeededLabel.Size = new System.Drawing.Size(85, 13);
-      this.memoryNeededLabel.TabIndex = 18;
-      this.memoryNeededLabel.Text = "MemoryNeeded:";
-      // 
-      // exceptionLabel
-      // 
-      this.exceptionLabel.AutoSize = true;
-      this.exceptionLabel.Location = new System.Drawing.Point(7, 129);
-      this.exceptionLabel.Name = "exceptionLabel";
-      this.exceptionLabel.Size = new System.Drawing.Size(57, 13);
-      this.exceptionLabel.TabIndex = 19;
-      this.exceptionLabel.Text = "Exception:";
-      // 
-      // projectLabel
-      // 
-      this.projectLabel.AutoSize = true;
-      this.projectLabel.Location = new System.Drawing.Point(3, 116);
-      this.projectLabel.Name = "projectLabel";
-      this.projectLabel.Size = new System.Drawing.Size(43, 13);
-      this.projectLabel.TabIndex = 20;
-      this.projectLabel.Text = "Project:";
-      // 
-      // dateCalculatedText
-      // 
-      this.dateCalculatedText.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
-                  | System.Windows.Forms.AnchorStyles.Right)));
-      this.dateCalculatedText.Location = new System.Drawing.Point(95, 85);
-      this.dateCalculatedText.Name = "dateCalculatedText";
-      this.dateCalculatedText.Size = new System.Drawing.Size(509, 20);
-      this.dateCalculatedText.TabIndex = 22;
-      // 
-      // dateCalculatedLabel
-      // 
-      this.dateCalculatedLabel.AutoSize = true;
-      this.dateCalculatedLabel.Location = new System.Drawing.Point(7, 85);
-      this.dateCalculatedLabel.Name = "dateCalculatedLabel";
-      this.dateCalculatedLabel.Size = new System.Drawing.Size(83, 13);
-      this.dateCalculatedLabel.TabIndex = 23;
-      this.dateCalculatedLabel.Text = "DateCalculated:";
-      // 
-      // jobStatusGroupBox
-      // 
-      this.jobStatusGroupBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
-                  | System.Windows.Forms.AnchorStyles.Right)));
-      this.jobStatusGroupBox.Controls.Add(this.percentageProgressBar);
-      this.jobStatusGroupBox.Controls.Add(this.stateTextBox);
-      this.jobStatusGroupBox.Controls.Add(this.dateCalculatedLabel);
-      this.jobStatusGroupBox.Controls.Add(this.stateLabel);
-      this.jobStatusGroupBox.Controls.Add(this.dateCalculatedText);
-      this.jobStatusGroupBox.Controls.Add(this.dateFinishedTextBox);
-      this.jobStatusGroupBox.Controls.Add(this.percentageTextBox);
-      this.jobStatusGroupBox.Controls.Add(this.dateCreatedTextBox);
-      this.jobStatusGroupBox.Controls.Add(this.percentageLabel);
-      this.jobStatusGroupBox.Controls.Add(this.exceptionLabel);
-      this.jobStatusGroupBox.Controls.Add(this.dateCreatedLabel);
-      this.jobStatusGroupBox.Controls.Add(this.dateFinishedLabel);
-      this.jobStatusGroupBox.Controls.Add(this.exceptionTextBox);
-      this.jobStatusGroupBox.Location = new System.Drawing.Point(6, 142);
-      this.jobStatusGroupBox.Name = "jobStatusGroupBox";
-      this.jobStatusGroupBox.Size = new System.Drawing.Size(610, 162);
-      this.jobStatusGroupBox.TabIndex = 24;
-      this.jobStatusGroupBox.TabStop = false;
-      this.jobStatusGroupBox.Text = "Job Status";
-      // 
-      // percentageProgressBar
-      // 
-      this.percentageProgressBar.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
-                  | System.Windows.Forms.AnchorStyles.Right)));
-      this.percentageProgressBar.Location = new System.Drawing.Point(153, 41);
-      this.percentageProgressBar.Name = "percentageProgressBar";
-      this.percentageProgressBar.Size = new System.Drawing.Size(451, 20);
-      this.percentageProgressBar.TabIndex = 25;
-      // 
-      // tabControl
-      // 
-      this.tabControl.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
-                  | System.Windows.Forms.AnchorStyles.Left)
-                  | System.Windows.Forms.AnchorStyles.Right)));
-      this.tabControl.Controls.Add(this.detailsTabPage);
-      this.tabControl.Controls.Add(this.childJobsTabPage);
-      this.tabControl.Controls.Add(this.logTabPage);
-      this.tabControl.Controls.Add(this.resultTabPage);
-      this.tabControl.Location = new System.Drawing.Point(3, 3);
-      this.tabControl.Name = "tabControl";
-      this.tabControl.SelectedIndex = 0;
-      this.tabControl.Size = new System.Drawing.Size(627, 518);
-      this.tabControl.TabIndex = 25;
-      // 
-      // detailsTabPage
-      // 
-      this.detailsTabPage.Controls.Add(this.jobIdLabel);
-      this.detailsTabPage.Controls.Add(this.jobIdTextBox);
-      this.detailsTabPage.Controls.Add(this.userIdLabel);
-      this.detailsTabPage.Controls.Add(this.jobStatusGroupBox);
-      this.detailsTabPage.Controls.Add(this.userIdTextBox);
-      this.detailsTabPage.Controls.Add(this.priorityTextBox);
-      this.detailsTabPage.Controls.Add(this.projectLabel);
-      this.detailsTabPage.Controls.Add(this.coresNeededTextBox);
-      this.detailsTabPage.Controls.Add(this.memoryNeededTextBox);
-      this.detailsTabPage.Controls.Add(this.memoryNeededLabel);
-      this.detailsTabPage.Controls.Add(this.coresNeededLabel);
-      this.detailsTabPage.Controls.Add(this.projectTextBox);
-      this.detailsTabPage.Controls.Add(this.priorityLabel);
-      this.detailsTabPage.Location = new System.Drawing.Point(4, 22);
-      this.detailsTabPage.Name = "detailsTabPage";
-      this.detailsTabPage.Padding = new System.Windows.Forms.Padding(3);
-      this.detailsTabPage.Size = new System.Drawing.Size(619, 492);
-      this.detailsTabPage.TabIndex = 0;
-      this.detailsTabPage.Text = "Details";
-      this.detailsTabPage.UseVisualStyleBackColor = true;
-      // 
-      // jobIdLabel
-      // 
-      this.jobIdLabel.AutoSize = true;
-      this.jobIdLabel.Location = new System.Drawing.Point(3, 6);
-      this.jobIdLabel.Name = "jobIdLabel";
-      this.jobIdLabel.Size = new System.Drawing.Size(36, 13);
-      this.jobIdLabel.TabIndex = 25;
-      this.jobIdLabel.Text = "JobId:";
-      // 
-      // jobIdTextBox
-      // 
-      this.jobIdTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
-                  | System.Windows.Forms.AnchorStyles.Right)));
-      this.jobIdTextBox.Location = new System.Drawing.Point(91, 6);
-      this.jobIdTextBox.Name = "jobIdTextBox";
-      this.jobIdTextBox.Size = new System.Drawing.Size(525, 20);
-      this.jobIdTextBox.TabIndex = 26;
-      // 
-      // childJobsTabPage
-      // 
-      this.childJobsTabPage.Controls.Add(this.childJobItemListView);
-      this.childJobsTabPage.Location = new System.Drawing.Point(4, 22);
-      this.childJobsTabPage.Name = "childJobsTabPage";
-      this.childJobsTabPage.Size = new System.Drawing.Size(619, 492);
-      this.childJobsTabPage.TabIndex = 2;
-      this.childJobsTabPage.Text = "Child Jobs";
-      this.childJobsTabPage.UseVisualStyleBackColor = true;
-      // 
-      // childJobItemListView
-      // 
-      this.childJobItemListView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
-                  | System.Windows.Forms.AnchorStyles.Left)
-                  | System.Windows.Forms.AnchorStyles.Right)));
-      this.childJobItemListView.Caption = "JobItemList View";
-      this.childJobItemListView.Content = null;
-      this.childJobItemListView.Location = new System.Drawing.Point(3, 3);
-      this.childJobItemListView.Name = "childJobItemListView";
-      this.childJobItemListView.ReadOnly = false;
-      this.childJobItemListView.Size = new System.Drawing.Size(613, 486);
-      this.childJobItemListView.TabIndex = 0;
-      // 
-      // logTabPage
-      // 
-      this.logTabPage.Controls.Add(this.logView);
-      this.logTabPage.Location = new System.Drawing.Point(4, 22);
-      this.logTabPage.Name = "logTabPage";
-      this.logTabPage.Padding = new System.Windows.Forms.Padding(3);
-      this.logTabPage.Size = new System.Drawing.Size(619, 492);
-      this.logTabPage.TabIndex = 1;
-      this.logTabPage.Text = "Log";
-      this.logTabPage.UseVisualStyleBackColor = true;
-      // 
-      // logView
-      // 
-      this.logView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
-                  | System.Windows.Forms.AnchorStyles.Left)
-                  | System.Windows.Forms.AnchorStyles.Right)));
-      this.logView.Caption = "Log View";
-      this.logView.Content = null;
-      this.logView.Location = new System.Drawing.Point(3, 3);
-      this.logView.Name = "logView";
-      this.logView.ReadOnly = false;
-      this.logView.Size = new System.Drawing.Size(613, 486);
-      this.logView.TabIndex = 0;
-      // 
-      // resultTabPage
-      // 
-      this.resultTabPage.Controls.Add(this.getLatestResultButton);
-      this.resultTabPage.Location = new System.Drawing.Point(4, 22);
-      this.resultTabPage.Name = "resultTabPage";
-      this.resultTabPage.Size = new System.Drawing.Size(619, 492);
-      this.resultTabPage.TabIndex = 3;
-      this.resultTabPage.Text = "Result";
-      this.resultTabPage.UseVisualStyleBackColor = true;
-      // 
-      // getLatestResultButton
-      // 
-      this.getLatestResultButton.Location = new System.Drawing.Point(4, 4);
-      this.getLatestResultButton.Name = "getLatestResultButton";
-      this.getLatestResultButton.Size = new System.Drawing.Size(112, 23);
-      this.getLatestResultButton.TabIndex = 0;
-      this.getLatestResultButton.Text = "Get latest result";
-      this.getLatestResultButton.UseVisualStyleBackColor = true;
-      // 
-      // JobItemView
-      // 
-      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-      this.Controls.Add(this.tabControl);
-      this.Name = "JobItemView";
-      this.Size = new System.Drawing.Size(633, 524);
-      this.jobStatusGroupBox.ResumeLayout(false);
-      this.jobStatusGroupBox.PerformLayout();
-      this.tabControl.ResumeLayout(false);
-      this.detailsTabPage.ResumeLayout(false);
-      this.detailsTabPage.PerformLayout();
-      this.childJobsTabPage.ResumeLayout(false);
-      this.logTabPage.ResumeLayout(false);
-      this.resultTabPage.ResumeLayout(false);
-      this.ResumeLayout(false);
-
-    }
-
-    #endregion
-
-    private System.Windows.Forms.Label stateLabel;
-    private System.Windows.Forms.Label userIdLabel;
-    private System.Windows.Forms.TextBox stateTextBox;
-    private System.Windows.Forms.TextBox userIdTextBox;
-    private System.Windows.Forms.TextBox percentageTextBox;
-    private System.Windows.Forms.TextBox dateCreatedTextBox;
-    private System.Windows.Forms.TextBox dateFinishedTextBox;
-    private System.Windows.Forms.TextBox priorityTextBox;
-    private System.Windows.Forms.TextBox coresNeededTextBox;
-    private System.Windows.Forms.TextBox memoryNeededTextBox;
-    private System.Windows.Forms.TextBox exceptionTextBox;
-    private System.Windows.Forms.TextBox projectTextBox;
-    private System.Windows.Forms.Label percentageLabel;
-    private System.Windows.Forms.Label dateCreatedLabel;
-    private System.Windows.Forms.Label dateFinishedLabel;
-    private System.Windows.Forms.Label priorityLabel;
-    private System.Windows.Forms.Label coresNeededLabel;
-    private System.Windows.Forms.Label memoryNeededLabel;
-    private System.Windows.Forms.Label exceptionLabel;
-    private System.Windows.Forms.Label projectLabel;
-    private System.Windows.Forms.TextBox dateCalculatedText;
-    private System.Windows.Forms.Label dateCalculatedLabel;
-    private System.Windows.Forms.GroupBox jobStatusGroupBox;
-    private System.Windows.Forms.ProgressBar percentageProgressBar;
-    private System.Windows.Forms.TabControl tabControl;
-    private System.Windows.Forms.TabPage detailsTabPage;
-    private System.Windows.Forms.TabPage logTabPage;
-    private Core.Views.LogView logView;
-    private System.Windows.Forms.Label jobIdLabel;
-    private System.Windows.Forms.TextBox jobIdTextBox;
-    private System.Windows.Forms.TabPage childJobsTabPage;
-    private JobItemListView childJobItemListView;
-    private System.Windows.Forms.TabPage resultTabPage;
-    private System.Windows.Forms.Button getLatestResultButton;
-  }
-}
Index: anches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/JobItemView.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/JobItemView.cs	(revision 4422)
+++ 	(revision )
@@ -1,119 +1,0 @@
-﻿using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Drawing;
-using System.Data;
-using System.Linq;
-using System.Text;
-using System.Windows.Forms;
-using HeuristicLab.Core.Views;
-using HeuristicLab.MainForm;
-using HeuristicLab.Hive.JobBase;
-using HeuristicLab.Persistence.Default.Xml;
-using System.IO;
-using HeuristicLab.Hive.Experiment.Jobs;
-
-namespace HeuristicLab.Hive.Experiment.Views {
-  [View("JobItem View")]
-  [Content(typeof(JobItem), true)]
-  public partial class JobItemView : ItemView {
-    public new JobItem Content {
-      get { return (JobItem)base.Content; }
-      set {
-        if (base.Content != value) {
-          base.Content = value;
-        }
-      }
-    }
-
-    public JobItemView() {
-      InitializeComponent();
-    }
-
-    protected override void OnContentChanged() {
-      base.OnContentChanged();
-      if (Content != null) {
-        Content_JobChanged(this, EventArgs.Empty);
-        Content_ChildJobAdded(this, EventArgs.Empty);
-      }
-    }
-
-    void Content_JobChanged(object sender, EventArgs e) {
-      if (Content.Job != null) {
-        logView.Content = Content.Job.Log;
-        Content_JobDtoChanged(this, EventArgs.Empty);
-        Content_JobStateChanged(this, EventArgs.Empty);
-      }
-    }
-
-    protected override void RegisterContentEvents() {
-      base.RegisterContentEvents();
-      Content.JobChanged += new EventHandler(Content_JobChanged);
-      Content.JobDtoChanged += new EventHandler(Content_JobDtoChanged);
-      Content.JobStateChanged += new EventHandler(Content_JobStateChanged);
-      Content.ChildJobAdded += new EventHandler(Content_ChildJobAdded);
-    }
-
-    protected override void DeregisterContentEvents() {
-      Content.JobChanged -= new EventHandler(Content_JobChanged);
-      Content.JobDtoChanged -= new EventHandler(Content_JobDtoChanged);
-      Content.JobStateChanged -= new EventHandler(Content_JobStateChanged);
-      Content.ChildJobAdded -= new EventHandler(Content_ChildJobAdded);
-      base.DeregisterContentEvents();
-    }
-
-    private void Content_JobDtoChanged(object sender, EventArgs e) {
-      if (InvokeRequired) {
-        Invoke(new EventHandler(Content_JobDtoChanged), sender, e);
-      } else {
-        this.jobIdTextBox.Text = Content.JobDto.Id.ToString();
-        this.dateCreatedTextBox.Text = Content.JobDto.DateCreated.ToString();
-        this.priorityTextBox.Text = Content.JobDto.Priority.ToString();
-        this.coresNeededTextBox.Text = Content.JobDto.CoresNeeded.ToString();
-        this.memoryNeededTextBox.Text = Content.JobDto.MemoryNeeded.ToString();
-        this.projectTextBox.Text = Content.JobDto.Project != null ? Content.JobDto.Project.Name : "-";
-      }
-    }
-
-    private void Content_JobStateChanged(object sender, EventArgs e) {
-      if (InvokeRequired) {
-        Invoke(new EventHandler(Content_JobStateChanged), sender, e);
-      } else {
-        this.stateTextBox.Text = Content.JobDto.State.ToString();
-        this.percentageTextBox.Text = (Content.JobDto.Percentage * 100).ToString() + "%";
-        this.percentageProgressBar.Value = Convert.ToInt32(Content.JobDto.Percentage * percentageProgressBar.Maximum);
-        this.dateCalculatedText.Text = Content.JobDto.DateCalculated.ToString();
-        this.dateFinishedTextBox.Text = Content.JobDto.DateFinished.ToString();
-        this.exceptionTextBox.Text = Content.JobDto.Exception;
-      }
-    }
-
-    void Content_ChildJobAdded(object sender, EventArgs e) {
-      if (InvokeRequired) {
-        Invoke(new EventHandler(Content_ChildJobAdded), sender, e);
-      } else {
-        childJobItemListView.Content = new JobItemList(Content.ChildJobItems);
-      }
-    }
-
-    protected override void SetEnabledStateOfControls() {
-      if (InvokeRequired) {
-        this.InvokeIfRequired(c => { SetEnabledStateOfControls(); });
-      } else {
-        base.SetEnabledStateOfControls();
-        this.jobIdTextBox.ReadOnly = this.ReadOnly;
-        this.stateTextBox.ReadOnly = this.ReadOnly;
-        this.userIdTextBox.ReadOnly = this.ReadOnly;
-        this.percentageTextBox.ReadOnly = this.ReadOnly;
-        this.dateCreatedTextBox.ReadOnly = this.ReadOnly;
-        this.dateCalculatedText.ReadOnly = this.ReadOnly;
-        this.dateFinishedTextBox.ReadOnly = this.ReadOnly;
-        this.priorityTextBox.ReadOnly = this.ReadOnly;
-        this.coresNeededTextBox.ReadOnly = this.ReadOnly;
-        this.memoryNeededTextBox.ReadOnly = this.ReadOnly;
-        this.exceptionTextBox.ReadOnly = this.ReadOnly;
-        this.projectTextBox.ReadOnly = this.ReadOnly;
-      }
-    }
-  }
-}
Index: anches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/JobItemView.resx
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/JobItemView.resx	(revision 4422)
+++ 	(revision )
@@ -1,120 +1,0 @@
-﻿<?xml version="1.0" encoding="utf-8"?>
-<root>
-  <!-- 
-    Microsoft ResX Schema 
-    
-    Version 2.0
-    
-    The primary goals of this format is to allow a simple XML format 
-    that is mostly human readable. The generation and parsing of the 
-    various data types are done through the TypeConverter classes 
-    associated with the data types.
-    
-    Example:
-    
-    ... ado.net/XML headers & schema ...
-    <resheader name="resmimetype">text/microsoft-resx</resheader>
-    <resheader name="version">2.0</resheader>
-    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
-    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
-    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
-    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
-    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
-        <value>[base64 mime encoded serialized .NET Framework object]</value>
-    </data>
-    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
-        <comment>This is a comment</comment>
-    </data>
-                
-    There are any number of "resheader" rows that contain simple 
-    name/value pairs.
-    
-    Each data row contains a name, and value. The row also contains a 
-    type or mimetype. Type corresponds to a .NET class that support 
-    text/value conversion through the TypeConverter architecture. 
-    Classes that don't support this are serialized and stored with the 
-    mimetype set.
-    
-    The mimetype is used for serialized objects, and tells the 
-    ResXResourceReader how to depersist the object. This is currently not 
-    extensible. For a given mimetype the value must be set accordingly:
-    
-    Note - application/x-microsoft.net.object.binary.base64 is the format 
-    that the ResXResourceWriter will generate, however the reader can 
-    read any of the formats listed below.
-    
-    mimetype: application/x-microsoft.net.object.binary.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
-            : and then encoded with base64 encoding.
-    
-    mimetype: application/x-microsoft.net.object.soap.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
-            : and then encoded with base64 encoding.
-
-    mimetype: application/x-microsoft.net.object.bytearray.base64
-    value   : The object must be serialized into a byte array 
-            : using a System.ComponentModel.TypeConverter
-            : and then encoded with base64 encoding.
-    -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
-    <xsd:element name="root" msdata:IsDataSet="true">
-      <xsd:complexType>
-        <xsd:choice maxOccurs="unbounded">
-          <xsd:element name="metadata">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" />
-              </xsd:sequence>
-              <xsd:attribute name="name" use="required" type="xsd:string" />
-              <xsd:attribute name="type" type="xsd:string" />
-              <xsd:attribute name="mimetype" type="xsd:string" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="assembly">
-            <xsd:complexType>
-              <xsd:attribute name="alias" type="xsd:string" />
-              <xsd:attribute name="name" type="xsd:string" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="data">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
-              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
-              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="resheader">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" />
-            </xsd:complexType>
-          </xsd:element>
-        </xsd:choice>
-      </xsd:complexType>
-    </xsd:element>
-  </xsd:schema>
-  <resheader name="resmimetype">
-    <value>text/microsoft-resx</value>
-  </resheader>
-  <resheader name="version">
-    <value>2.0</value>
-  </resheader>
-  <resheader name="reader">
-    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-</root>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/ProgressView.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/ProgressView.cs	(revision 4422)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/ProgressView.cs	(revision 4423)
@@ -12,6 +12,21 @@
 namespace HeuristicLab.Hive.Experiment.Views {
   public partial class ProgressView : HeuristicLab.MainForm.WindowsForms.View {
-    private ContentView parentView = null;
-    private bool simulateProgress = false;
+    private ContentView parentView;
+    private IProgress progress;
+    public IProgress Progress {
+      get {
+        return this.progress;
+      }
+      set {
+        if (this.progress != value) {
+          if (this.progress != null) {
+            DeregisterProgressEvents();
+          }
+          this.progress = value;
+          RegisterProgressEvents();
+          OnProgressChanged();
+        }
+      }
+    }
 
     public bool CancelEnabled {
@@ -28,47 +43,13 @@
     }
 
-    private string status;
-    public string Status {
-      get { return status; }
-      set {
-        if (InvokeRequired) {
-          Invoke(new Action<string>((s) => { Status = s;}), value);
-        } else {
-          status = value;
-          statusLabel.Text = status;
-        }
-        
-      }
-    }
-
-    public ProgressView(ContentView parentView)
-      : this(parentView, "", false, true) {
-    }
-
-    public ProgressView(ContentView parentView, string initialStatus)
-      : this(parentView, initialStatus, false, true) {
-    }
-
-    public ProgressView(ContentView parentView, string initialStatus, bool simulateProgress)
-      : this(parentView, initialStatus, simulateProgress, true) {
-    }
-
     /// <param name="parentView">This is the View which will be locked if lockParentView is true</param>
-    /// <param name="initialStatus">Status message</param>
-    /// <param name="simulateProgress">If true, the progress will be simulated by a timer which addes some progress every second</param>
-    /// <param name="lockParentView">if true parentView will be locked</param>
-    public ProgressView(ContentView parentView, string initialStatus, bool simulateProgress, bool lockParentView) {
+    public ProgressView(ContentView parentView, IProgress progress) {
       InitializeComponent();
       this.parentView = parentView;
+      this.Progress = progress;
+
       this.CancelEnabled = false;
-      this.Status = initialStatus;
-      this.simulateProgress = simulateProgress;
 
-      if (simulateProgress) {
-        Timer progressSimulator = new Timer();
-        progressSimulator.Interval = 2000;
-        progressSimulator.Tick += new EventHandler(progressSimulator_Tick);
-        progressSimulator.Start();
-      }
+      progressBar.Style = ProgressBarStyle.Marquee;
 
       this.Left = (parentView.ClientRectangle.Width / 2) - (this.Width / 2);
@@ -76,6 +57,5 @@
       this.Anchor = AnchorStyles.Left | AnchorStyles.Top;
 
-      if (lockParentView)
-        LockBackground();
+      LockBackground();
 
       parentView.Controls.Add(this);
@@ -83,22 +63,47 @@
     }
 
-    private void progressSimulator_Tick(object sender, EventArgs e) {
-      progressBar.Value = Math.Min(progressBar.Value + (progressBar.Maximum - progressBar.Value) / 10 + 1, progressBar.Maximum - 1);
+    private void RegisterProgressEvents() {
+      progress.Finished += new EventHandler(progress_Finished);
+      progress.StatusChanged += new EventHandler(progress_StatusChanged);
+      progress.ProgressValueChanged += new EventHandler(progress_ProgressChanged);
+    }
+
+    private void DeregisterProgressEvents() {
+      progress.Finished -= new EventHandler(progress_Finished);
+      progress.StatusChanged -= new EventHandler(progress_StatusChanged);
+      progress.ProgressValueChanged -= new EventHandler(progress_ProgressChanged);
+    }
+
+    void progress_Finished(object sender, EventArgs e) {
+      Finish();
+    }
+
+    void progress_ProgressChanged(object sender, EventArgs e) {
+      if (InvokeRequired) {
+        Invoke(new EventHandler(progress_ProgressChanged), sender, e);
+      } else {
+        progressBar.Style = ProgressBarStyle.Blocks;
+        this.progressBar.Value = Math.Min(this.progressBar.Maximum, (int)(progress.ProgressValue * progressBar.Maximum));
+      }
+    }
+
+    void progress_StatusChanged(object sender, EventArgs e) {
+      if (InvokeRequired) {
+        Invoke(new EventHandler(progress_StatusChanged), sender, e);
+      } else {
+        statusLabel.Text = progress.Status;
+      }
     }
 
     private void LockBackground() {
-      this.parentView.Locked = true;
-      foreach (Control c in this.parentView.Controls) {
-        c.Enabled = false;
-      }
-      this.Enabled = true;
-      this.ReadOnly = false;
-    }
-
-    public void SetProgress(double progress) {
       if (InvokeRequired) {
-        Invoke(new Action<double>(SetProgress), progress);
+        Invoke(new Action(LockBackground));
       } else {
-        this.progressBar.Value = Math.Max(this.progressBar.Value, (int)(progress * progressBar.Maximum));
+        this.parentView.Locked = true;
+        foreach (Control c in this.parentView.Controls) {
+          c.Enabled = false;
+        }
+        this.Enabled = true;
+        this.ReadOnly = false;
       }
     }
@@ -122,4 +127,9 @@
     }
 
+    private void OnProgressChanged() {
+      progress_StatusChanged(this, EventArgs.Empty);
+      progress_ProgressChanged(this, EventArgs.Empty);
+    }
+
     public event EventHandler Canceled;
     protected virtual void OnCanceled() {
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/Exceptions/AddJobToHiveException.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/Exceptions/AddJobToHiveException.cs	(revision 4423)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/Exceptions/AddJobToHiveException.cs	(revision 4423)
@@ -0,0 +1,10 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace HeuristicLab.Hive.Experiment {
+  class AddJobToHiveException : Exception {
+    public AddJobToHiveException(string message) : base(message) { }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/Exceptions/JobResultPollingException.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/Exceptions/JobResultPollingException.cs	(revision 4423)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/Exceptions/JobResultPollingException.cs	(revision 4423)
@@ -0,0 +1,10 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace HeuristicLab.Hive.Experiment {
+  class JobResultPollingException : Exception {
+    public JobResultPollingException(string message) : base(message) { }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/Exceptions/OptimizerNotFoundException.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/Exceptions/OptimizerNotFoundException.cs	(revision 4423)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/Exceptions/OptimizerNotFoundException.cs	(revision 4423)
@@ -0,0 +1,12 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace HeuristicLab.Hive.Experiment {
+  class OptimizerNotFoundException : Exception {
+
+    public OptimizerNotFoundException(string message) : base(message) {
+    }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/HeuristicLab.Hive.Experiment-3.3.csproj
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/HeuristicLab.Hive.Experiment-3.3.csproj	(revision 4422)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/HeuristicLab.Hive.Experiment-3.3.csproj	(revision 4423)
@@ -118,14 +118,19 @@
   </ItemGroup>
   <ItemGroup>
-    <Compile Include="JobItem.cs" />
-    <Compile Include="JobItemList.cs" />
-    <Compile Include="Jobs\BachRunJob.cs" />
+    <Compile Include="Exceptions\AddJobToHiveException.cs" />
+    <Compile Include="HiveExperiment.cs" />
+    <Compile Include="HiveJob.cs" />
+    <Compile Include="HiveJobList.cs" />
+    <Compile Include="Progress\IProgress.cs" />
+    <Compile Include="Progress\IProgressReporter.cs" />
+    <Compile Include="JobResultPoller.cs" />
+    <Compile Include="Exceptions\JobResultPollingException.cs" />
     <Compile Include="Jobs\JobList.cs" />
-    <Compile Include="Jobs\ExperimentJob.cs" />
     <Compile Include="HiveClient.cs" />
     <Compile Include="HiveExperimentList.cs" />
     <Compile Include="Jobs\OptimizerJob.cs" />
     <Compile Include="HeuristicLabHiveExperimentPlugin.cs" />
-    <Compile Include="HiveExperiment.cs" />
+    <Compile Include="Exceptions\OptimizerNotFoundException.cs" />
+    <Compile Include="Progress\Progress.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
     <Compile Include="Properties\Settings.Designer.cs">
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/HiveClient.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/HiveClient.cs	(revision 4422)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/HiveClient.cs	(revision 4423)
@@ -11,10 +11,14 @@
 using System.ServiceModel;
 using HeuristicLab.Hive.Contracts;
+using HeuristicLab.DataAccess;
+using HeuristicLab.Collections;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Hive.Experiment {
   [Item("Hive Client", "Connects to Hive and lists all submitted experiments by the current user.")]
   [Creatable("Hive")]
-  public class HiveClient : Item {
+  public class HiveClient : Item, IProgressReporter {
     private static object locker = new object();
+    private bool currentlyUpdating;
 
     private ILog log;
@@ -28,7 +32,5 @@
       set {
         if (hiveExperiments != value) {
-          if (hiveExperiments != null) {
-            DeRegisterHiveExperimentsEvents();
-          }
+          DeRegisterHiveExperimentsEvents();
           hiveExperiments = value;
           RegisterHiveExperimentsEvent();
@@ -38,22 +40,35 @@
     }
 
+    private bool isProgressing;
+    public bool IsProgressing {
+      get { return isProgressing; }
+      set {
+        if (isProgressing != value) {
+          isProgressing = value;
+          OnIsProgressingChanged();
+        }
+      }
+    }
+
+    private IProgress progress;
+    public IProgress Progress {
+      get { return progress; }
+    }
+
     private void RegisterHiveExperimentsEvent() {
-      hiveExperiments.ItemsAdded += new Collections.CollectionItemsChangedEventHandler<Collections.IndexedItem<HiveExperiment>>(hiveExperiments_ItemsAdded);
-      hiveExperiments.ItemsRemoved += new Collections.CollectionItemsChangedEventHandler<Collections.IndexedItem<HiveExperiment>>(hiveExperiments_ItemsRemoved);
-      hiveExperiments.ItemsMoved += new Collections.CollectionItemsChangedEventHandler<Collections.IndexedItem<HiveExperiment>>(hiveExperiments_ItemsMoved);
+      if (hiveExperiments != null) {
+        hiveExperiments.ItemsRemoved += new CollectionItemsChangedEventHandler<IndexedItem<HiveExperiment>>(hiveExperiments_ItemsRemoved);
+      }
     }
 
     private void DeRegisterHiveExperimentsEvents() {
-      hiveExperiments.ItemsAdded -= new Collections.CollectionItemsChangedEventHandler<Collections.IndexedItem<HiveExperiment>>(hiveExperiments_ItemsAdded);
-      hiveExperiments.ItemsRemoved -= new Collections.CollectionItemsChangedEventHandler<Collections.IndexedItem<HiveExperiment>>(hiveExperiments_ItemsRemoved);
-      hiveExperiments.ItemsMoved -= new Collections.CollectionItemsChangedEventHandler<Collections.IndexedItem<HiveExperiment>>(hiveExperiments_ItemsMoved);
-
+      if (hiveExperiments != null) {
+        hiveExperiments.ItemsRemoved -= new CollectionItemsChangedEventHandler<IndexedItem<HiveExperiment>>(hiveExperiments_ItemsRemoved);
+      }
     }
 
     public HiveClient() {
       this.log = new Log();
-      this.HiveExperiments = new HiveExperimentList();
     }
-
 
     public override Common.IDeepCloneable Clone(Common.Cloner cloner) {
@@ -65,46 +80,43 @@
 
     public void UpdateExperimentList() {
-      //IClientFacade client = CreateClientFacade();
-      using (Disposable<IClientFacade> service = ServiceLocator.Instance.ClientFacadePool.GetService()) {
-        ResponseObject<JobResultList> response = service.Obj.GetChildJobResults(null, false, false);
-        RefreshExperimentList(response.Obj);
+      this.progress = new Progress("Downloading HiveExperiments...");
+      try {
+        IsProgressing = true;
+        if (this.HiveExperiments == null) {
+          this.HiveExperiments = new HiveExperimentList();
+        }
+        using (Disposable<IClientFacade> service = ServiceLocator.Instance.ClientFacadePool.GetService()) {
+          currentlyUpdating = true;
+          ResponseObject<HiveExperimentDtoList> response = service.Obj.GetHiveExperiments();
+          progress.Status = "Populating HiveExperiment list...";
+          RefreshExperimentList(response.Obj);
+          currentlyUpdating = false;
+        }
       }
-      //ServiceLocator.DisposeClientFacade(client);
+      catch (Exception) {
+        this.HiveExperiments = null;
+        throw;
+      }
+      finally {
+        IsProgressing = false;
+      }
     }
 
-    private void RefreshExperimentList(JobResultList jobResultList) {
-      foreach (JobResult jobResult in jobResultList) {
-        HiveExperiment hiveExperiment = GetHiveExperiment(jobResult);
+    private void RefreshExperimentList(HiveExperimentDtoList hiveExperiments) {
+      foreach (HiveExperimentDto hiveExperimentDto in hiveExperiments) {
+        HiveExperiment hiveExperiment = GetHiveExperiment(hiveExperimentDto.Id);
         if (hiveExperiment == null) {
-          // create new
-          hiveExperiment = new HiveExperiment() { RootJobItem = new JobItem(jobResult) };
-          this.hiveExperiments.Add(hiveExperiment);
+          // not yet there, create new
+          this.HiveExperiments.Add(new HiveExperiment(hiveExperimentDto));
         } else {
           // update
-          //hiveExperiment.RootJob.UpdateJob(jobResult);
+          hiveExperiment.UpdateFromDto(hiveExperimentDto);
         }
       }
     }
 
-    private HiveExperiment GetHiveExperiment(JobResult jobResult) {
-      //var matches = this.hiveExperiments.Where(exp => exp.RootJob != null && exp.RootJob.JobDto.Id == jobResult.JobId);
-      //if (matches.Count() == 0) {
-      //  return null;
-      //} else {
-      //  return matches.First();
-      //}
-      return null;
+    private HiveExperiment GetHiveExperiment(Guid hiveExperimentId) {
+      return this.HiveExperiments.SingleOrDefault(he => he.HiveExperimentId.Equals(hiveExperimentId));
     }
-
-    //private IClientFacade CreateClientFacade() {
-    //  IClientFacade clientFacade = null;
-    //  try {
-    //    clientFacade = ServiceLocator.CreateClientFacade(Settings.Default.HiveServerIp);
-    //  }
-    //  catch (EndpointNotFoundException exception) {
-    //    LogMessage("Could not connect to Server: " + exception.Message);
-    //  }
-    //  return clientFacade;
-    //}
 
     private void LogMessage(string message) {
@@ -120,17 +132,22 @@
       if (handler != null) handler(this, EventArgs.Empty);
     }
-
-    void hiveExperiments_ItemsAdded(object sender, Collections.CollectionItemsChangedEventArgs<Collections.IndexedItem<HiveExperiment>> e) {
-      
+    
+    void hiveExperiments_ItemsRemoved(object sender, Collections.CollectionItemsChangedEventArgs<Collections.IndexedItem<HiveExperiment>> e) {
+      if (!currentlyUpdating) {
+        using (Disposable<IClientFacade> service = ServiceLocator.Instance.ClientFacadePool.GetService()) {
+          foreach (IndexedItem<HiveExperiment> item in e.Items) {
+            if (item.Value.HiveExperimentId != Guid.Empty) {
+              service.Obj.DeleteHiveExperiment(item.Value.HiveExperimentId);
+            }
+          }
+        }
+      }
     }
 
-    void hiveExperiments_ItemsRemoved(object sender, Collections.CollectionItemsChangedEventArgs<Collections.IndexedItem<HiveExperiment>> e) {
-      
+    public event EventHandler IsProgressingChanged;
+    private void OnIsProgressingChanged() {
+      var handler = IsProgressingChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
     }
-
-    void hiveExperiments_ItemsMoved(object sender, Collections.CollectionItemsChangedEventArgs<Collections.IndexedItem<HiveExperiment>> e) {
-      
-    }
-
   }
 }
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/HiveExperiment.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/HiveExperiment.cs	(revision 4422)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/HiveExperiment.cs	(revision 4423)
@@ -1,49 +1,20 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2010 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;
+using System.Collections.Generic;
 using System.Linq;
-using HeuristicLab.Common;
+using System.Text;
 using HeuristicLab.Core;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+using HeuristicLab.Hive.Contracts;
+using HeuristicLab.Hive.Contracts.Interfaces;
+using HeuristicLab.Hive.Contracts.ResponseObjects;
+using HeuristicLab.Hive.JobBase;
+using HeuristicLab.Persistence.Default.Xml;
+using System.IO;
+using HeuristicLab.Hive.Experiment.Jobs;
+using HeuristicLab.Tracing;
+using System.Threading;
 using HeuristicLab.Optimization;
-using System.Drawing;
-using HeuristicLab.Collections;
-using System.Collections.Generic;
-using HeuristicLab.Hive.Contracts.BusinessObjects;
-using System.IO;
-using HeuristicLab.Persistence.Default.Xml;
-using HeuristicLab.PluginInfrastructure;
-using System.Reflection;
-using HeuristicLab.Hive.Contracts.Interfaces;
-using HeuristicLab.Hive.Contracts;
-using System.Threading;
-using HeuristicLab.Tracing;
-using HeuristicLab.Hive.JobBase;
-using System.Diagnostics;
-using System.Collections;
-using System.ServiceModel;
-using HeuristicLab.Hive.Contracts.ResponseObjects;
-using HeuristicLab.Hive.Experiment.Properties;
-using System.ComponentModel;
-using HeuristicLab.Hive.Experiment.Jobs;
 
 namespace HeuristicLab.Hive.Experiment {
@@ -52,24 +23,48 @@
   /// </summary>
   [Item(itemName, itemDescription)]
-  [StorableClass]
-  public class HiveExperiment : NamedItem, IExecutable {
+  public class HiveExperiment : NamedItem, IExecutable, IProgressReporter {
+    private object locker = new object();
     private const string itemName = "Hive Experiment";
     private const string itemDescription = "A runner for a single experiment, which's algorithms are executed in the Hive.";
-    private const int resultPollingIntervalMs = 5000;
-    private const int snapshotPollingIntervalMs = 1000;
-    private const int maxSnapshotRetries = 20;
-    private object locker = new object();
-
     private System.Timers.Timer timer;
-    private bool pausePending, stopPending;
-
-    // ensure that only 2 threads can fetch jobresults simultaniously
-    private Semaphore fetchJobSemaphore = new Semaphore(2, 2);
-
-    private static object pendingOptimizerMappingsLocker = new object();
-
-    private bool stopResultsPollingPending = false;
-
-    private Thread resultPollingThread;
+
+    private Guid hiveExperimentId;
+    public Guid HiveExperimentId {
+      get { return hiveExperimentId; }
+      set { hiveExperimentId = value; }
+    }
+
+    private HiveJob hiveJob;
+    public HiveJob HiveJob {
+      get { return hiveJob; }
+      set {
+        DeregisterHiveJobEvents();
+        if (hiveJob != value) {
+          hiveJob = value;
+          RegisterHiveJobEvents();
+          OnHiveJobChanged();
+        }
+      }
+    }
+
+    private ILog log;
+    public ILog Log {
+      get { return log; }
+    }
+
+    private DateTime lastUpdateTime;
+
+    private string resourceIds;
+    public string ResourceIds {
+      get { return resourceIds; }
+      set {
+        if (resourceIds != value) {
+          resourceIds = value;
+          OnResourceIdsChanged();
+        }
+      }
+    }
+
+    private Guid? rootJobId;
 
     private bool isPollingResults;
@@ -84,49 +79,92 @@
     }
 
-    public IEnumerable<string> ResourceGroups {
-      get {
-        if (!string.IsNullOrEmpty(resourceIds)) {
-          return resourceIds.Split(';');
-        } else {
-          return new List<string>();
-        }
-      }
-    }
-
-    #region Storable Properties
-    [Storable]
-    private DateTime lastUpdateTime;
+    private bool isProgressing;
+    public bool IsProgressing {
+      get { return isProgressing; }
+      set {
+        if (isProgressing != value) {
+          isProgressing = value;
+          OnIsProgressingChanged();
+        }
+      }
+    }
+
+    private IProgress progress;
+    public IProgress Progress {
+      get { return progress; }
+    }
     
-    [Storable]
-    private string resourceIds;
-    public string ResourceIds {
-      get { return resourceIds; }
-      set {
-        if (resourceIds != value) {
-          resourceIds = value;
-          OnResourceIdsChanged();
-        }
-      }
-    }
-
-    [Storable]
-    private HeuristicLab.Optimization.Experiment experiment;
-    public HeuristicLab.Optimization.Experiment Experiment {
-      get { return experiment; }
-      set {
-        if (experiment != value) {
-          experiment = value;
-          OnExperimentChanged();
-        }
-      }
-    }
-
-    [Storable]
-    private ILog log;
-    public ILog Log {
-      get { return log; }
-    }
-
-    [Storable]
+    private JobResultPoller jobResultPoller;
+
+    public HiveExperiment()
+      : base(itemName, itemDescription) {
+      this.ResourceIds = HeuristicLab.Hive.Experiment.Properties.Settings.Default.ResourceIds;
+      this.log = new Log();
+      InitTimer();
+    }
+
+    public HiveExperiment(HiveExperimentDto hiveExperimentDto)
+      : this() {
+      UpdateFromDto(hiveExperimentDto);
+    }
+
+    public void UpdateFromDto(HiveExperimentDto hiveExperimentDto) {
+      this.HiveExperimentId = hiveExperimentDto.Id;
+      this.Name = hiveExperimentDto.Name;
+      this.Description = hiveExperimentDto.Description;
+      this.ResourceIds = hiveExperimentDto.ResourceIds;
+      this.rootJobId = hiveExperimentDto.RootJobId;
+    }
+
+    public HiveExperimentDto ToHiveExperimentDto() {
+      return new HiveExperimentDto() {
+        Id = this.HiveExperimentId,
+        Name = this.Name,
+        Description = this.Description,
+        ResourceIds = this.ResourceIds,
+        RootJobId = this.rootJobId
+      };
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      LogMessage("I am beeing cloned");
+      HiveExperiment clone = (HiveExperiment)base.Clone(cloner);
+      clone.resourceIds = this.resourceIds;
+      clone.executionState = this.executionState;
+      clone.executionTime = this.executionTime;
+      clone.log = (ILog)cloner.Clone(log);
+      clone.lastUpdateTime = this.lastUpdateTime;
+      clone.rootJobId = this.rootJobId;
+      return clone;
+    }
+
+    public void SetExperiment(Optimization.Experiment experiment) {
+      this.HiveJob = new HiveJob(experiment);
+      Prepare();
+    }
+
+    private void RegisterHiveJobEvents() {
+      if (HiveJob != null) {
+        HiveJob.JobStateChanged += new EventHandler(HiveJob_JobStateChanged);
+      }
+    }
+
+    private void DeregisterHiveJobEvents() {
+      if (HiveJob != null) {
+        HiveJob.JobStateChanged -= new EventHandler(HiveJob_JobStateChanged);
+      }
+    }
+
+    /// <summary>
+    /// Returns the experiment from the root HiveJob
+    /// </summary>
+    public Optimization.Experiment GetExperiment() {
+      if (this.HiveJob != null) {
+        return HiveJob.Job.OptimizerAsExperiment;
+      }
+      return null;
+    }
+
+    #region IExecutable Members
     private Core.ExecutionState executionState;
     public ExecutionState ExecutionState {
@@ -140,5 +178,4 @@
     }
 
-    [Storable]
     private TimeSpan executionTime;
     public TimeSpan ExecutionTime {
@@ -152,87 +189,291 @@
     }
 
-    [Storable]
-    private IJob rootJob;
-    public IJob RootJob {
-      get { return rootJob; }
-      set {
-        if (rootJob != value) {
-          rootJob = value;
-          OnRootJobChanged();
-        }
-      }
-    }
-
-    private JobItem rootJobItem;
-    public JobItem RootJobItem {
-      get { return rootJobItem; }
-      set {
-        if (rootJobItem != null) {
-          DeregisterRootJobItemEvents();
-        }
-        if (rootJobItem != value) {
-          rootJobItem = value;
-          RegisterRootJobItemEvents();
-          OnRootJobItemChanged();
-        }
-      }
-    }
-
-    private void RegisterRootJobItemEvents() {
-      rootJobItem.FinalResultAvailable += new EventHandler(rootJobItem_FinalResultAvailable);
-    }
-
-    private void DeregisterRootJobItemEvents() {
-      rootJobItem.FinalResultAvailable -= new EventHandler(rootJobItem_FinalResultAvailable);
+    public void Pause() {
+      throw new NotSupportedException();
+    }
+
+    public void Prepare() {
+      // do nothing
+    }
+
+    public void Start() {
+      OnStarted();
+      ExecutionTime = new TimeSpan();
+      lastUpdateTime = DateTime.Now;
+      this.ExecutionState = Core.ExecutionState.Started;
+
+      Thread t = new Thread(RunUploadExperiment);
+      t.Name = "RunUploadExperimentThread";
+      t.Start();
+    }
+
+    private void RunUploadExperiment() {
+      try {
+        this.progress = new Progress("Connecting to server...");
+        IsProgressing = true;
+        using (Disposable<IClientFacade> service = ServiceLocator.Instance.StreamedClientFacadePool.GetService()) {
+          IEnumerable<string> groups = ToResourceIdList(this.ResourceIds);
+          this.HiveJob.SetIndexInParentOptimizerList(null);
+
+          int totalJobCount = this.HiveJob.GetAllHiveJobs().Count();
+          int jobCount = 0;
+
+          this.progress.Status = "Uploading jobs...";
+          UploadJobWithChildren(service.Obj, this.HiveJob, null, groups, ref jobCount, totalJobCount);
+          this.rootJobId = this.HiveJob.JobDto.Id;
+          LogMessage("Finished sending jobs to hive");
+
+          // insert or update HiveExperiment
+          this.progress.Status = "Uploading HiveExperiment...";
+          ResponseObject<HiveExperimentDto> resp = service.Obj.UpdateHiveExperiment(this.ToHiveExperimentDto());
+          this.UpdateFromDto(resp.Obj);
+
+          StartResultPolling();
+        }
+      }
+      catch (Exception e) {
+        OnExceptionOccured(e);
+      }
+      finally {
+        IsProgressing = false;
+      }
+    }
+
+    /// <summary>
+    /// Uploads the given job and all its child-jobs while setting the proper parentJobId values for the childs
+    /// 
+    /// </summary>
+    /// <param name="service"></param>
+    /// <param name="hiveJob"></param>
+    /// <param name="parentHiveJob">shall be null if its the root job</param>
+    /// <param name="groups"></param>
+    private void UploadJobWithChildren(IClientFacade service, HiveJob hiveJob, HiveJob parentHiveJob, IEnumerable<string> groups, ref int jobCount, int totalJobCount) {
+      jobCount++;
+      this.progress.Status = string.Format("Serializing job {0} of {1}", jobCount, totalJobCount);
+      SerializedJob serializedJob;
+      if (hiveJob.Job.ComputeInParallel &&
+        (hiveJob.Job.Optimizer is Optimization.Experiment || hiveJob.Job.Optimizer is Optimization.BatchRun)) {
+        hiveJob.JobDto.State = JobState.WaitForChildJobs;
+        hiveJob.Job.CollectChildJobs = false; // don't collect child-jobs on slaves
+        serializedJob = hiveJob.GetAsSerializedJob(true);
+      } else {
+        serializedJob = hiveJob.GetAsSerializedJob(false);
+      }
+
+      this.progress.Status = string.Format("Uploading job {0} of {1} ({2} kb)", jobCount, totalJobCount, serializedJob.SerializedJobData.Count() / 1024);
+      this.progress.ProgressValue = (double)jobCount / totalJobCount;
+      ResponseObject<JobDto> response;
+      if (parentHiveJob != null) {
+        response = service.AddChildJob(parentHiveJob.JobDto.Id, serializedJob);
+      } else {
+        response = service.AddJobWithGroupStrings(serializedJob, groups);
+      }
+
+      if (response.StatusMessage == ResponseStatus.Ok) {
+        LogMessage(response.Obj.Id, "Job sent to Hive");
+        hiveJob.JobDto = response.Obj;
+
+        foreach (HiveJob child in hiveJob.ChildHiveJobs) {
+          UploadJobWithChildren(service, child, hiveJob, groups, ref jobCount, totalJobCount);
+        }
+      } else {
+        throw new AddJobToHiveException(response.StatusMessage.ToString());
+      }
+    }
+
+    /// <summary>
+    /// Converts a string which can contain Ids separated by ';' to a enumerable
+    /// </summary>
+    private IEnumerable<string> ToResourceIdList(string resourceGroups) {
+      if (!string.IsNullOrEmpty(resourceGroups)) {
+        return resourceIds.Split(';');
+      } else {
+        return new List<string>();
+      }
+    }
+
+    public void Stop() {
+      using (Disposable<IClientFacade> service = ServiceLocator.Instance.StreamedClientFacadePool.GetService()) {
+        foreach(HiveJob hj in HiveJob.GetAllHiveJobs()) {
+          service.Obj.AbortJob(hj.JobDto.Id);
+        }
+      }
     }
 
     #endregion
 
-    [StorableConstructor]
-    public HiveExperiment(bool deserializing)
-      : base(deserializing) {
-    }
-
-    public HiveExperiment()
-      : base(itemName, itemDescription) {
-      this.ResourceIds = HeuristicLab.Hive.Experiment.Properties.Settings.Default.ResourceIds;
-      this.log = new Log();
-      pausePending = stopPending = false;
-      isPollingResults = false;
-      InitTimer();
-    }
-
-    public override IDeepCloneable Clone(Cloner cloner) {
-      LogMessage("I am beeing cloned");
-      HiveExperiment clone = (HiveExperiment)base.Clone(cloner);
-      clone.resourceIds = this.resourceIds;
-      clone.experiment = (HeuristicLab.Optimization.Experiment)cloner.Clone(experiment);
-      clone.executionState = this.executionState;
-      clone.executionTime = this.executionTime;
-      clone.log = (ILog)cloner.Clone(log);
-      clone.stopPending = this.stopPending;
-      clone.pausePending = this.pausePending;
-      clone.lastUpdateTime = this.lastUpdateTime;
-      clone.isPollingResults = this.isPollingResults;
-      clone.rootJob = (IJob)cloner.Clone(this.rootJob);
-      return clone;
-    }
-
-    [StorableHook(HookType.AfterDeserialization)]
-    private void AfterDeserialization() {
-      InitTimer();
-      this.IsPollingResults = false;
-      this.stopResultsPollingPending = false;
-      RegisterEvents();
-      LogMessage("I was deserialized.");
-    }
-
-    private void RegisterEvents() {
-      RootJobChanged += new EventHandler(HiveExperiment_RootJobChanged);
-    }
-
-    private void DeRegisterEvents() {
-      RootJobChanged -= new EventHandler(HiveExperiment_RootJobChanged);
-    }
+    public void StartResultPolling() {
+      if (!jobResultPoller.IsPolling) {
+        jobResultPoller.Start();
+      } else {
+        throw new JobResultPollingException("Result polling already running");
+      }
+    }
+
+    public void StopResultPolling() {
+      if (jobResultPoller.IsPolling) {
+        jobResultPoller.Stop();
+      } else {
+        throw new JobResultPollingException("Result polling not running");
+      }
+    }
+
+    #region HiveJob Events
+    void HiveJob_JobStateChanged(object sender, EventArgs e) {
+      if (HiveJob != null) {
+        rootJobId = HiveJob.JobDto.Id;
+      }
+    }
+    #endregion
+
+    #region Eventhandler
+
+    public event EventHandler ExecutionTimeChanged;
+    private void OnExecutionTimeChanged() {
+      EventHandler handler = ExecutionTimeChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public event EventHandler ExecutionStateChanged;
+    private void OnExecutionStateChanged() {
+      LogMessage("ExecutionState changed to " + executionState.ToString());
+      EventHandler handler = ExecutionStateChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public event EventHandler Started;
+    private void OnStarted() {
+      LogMessage("Started");
+      timer.Start();
+      EventHandler handler = Started;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public event EventHandler Stopped;
+    private void OnStopped() {
+      LogMessage("Stopped");
+      timer.Stop();
+      EventHandler handler = Stopped;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public event EventHandler Paused;
+    private void OnPaused() {
+      LogMessage("Paused");
+      EventHandler handler = Paused;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public event EventHandler Prepared;
+    protected virtual void OnPrepared() {
+      LogMessage("Prepared");
+      EventHandler handler = Prepared;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public event EventHandler ResourceIdsChanged;
+    protected virtual void OnResourceIdsChanged() {
+      EventHandler handler = ResourceIdsChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public event EventHandler IsResultsPollingChanged;
+    private void OnIsPollingResultsChanged() {
+      if (this.IsPollingResults) {
+        LogMessage("Results Polling Started");
+      } else {
+        LogMessage("Results Polling Stopped");
+      }
+      EventHandler handler = IsResultsPollingChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public event EventHandler<EventArgs<Exception>> ExceptionOccurred;
+    private void OnExceptionOccured(Exception e) {
+      var handler = ExceptionOccurred;
+      if (handler != null) handler(this, new EventArgs<Exception>(e));
+    }
+
+    public event EventHandler HiveJobChanged;
+    private void OnHiveJobChanged() {
+      if (jobResultPoller != null && jobResultPoller.IsPolling) {
+        jobResultPoller.Stop();
+        DeregisterResultPollingEvents();
+      }
+      if (HiveJob != null) {
+        jobResultPoller = new JobResultPoller(HiveJob, ApplicationConstants.RESULT_POLLING_INTERVAL);
+        RegisterResultPollingEvents();
+      }
+      EventHandler handler = HiveJobChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public event EventHandler IsProgressingChanged;
+    private void OnIsProgressingChanged() {
+      var handler = IsProgressingChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    #endregion
+
+    #region JobResultPoller Events
+    private void RegisterResultPollingEvents() {
+      jobResultPoller.ExceptionOccured += new EventHandler<EventArgs<Exception>>(jobResultPoller_ExceptionOccured);
+      jobResultPoller.JobResultsReceived += new EventHandler<EventArgs<JobResultList>>(jobResultPoller_JobResultReceived);
+      jobResultPoller.PollingStarted += new EventHandler(jobResultPoller_PollingStarted);
+      jobResultPoller.PollingFinished += new EventHandler(jobResultPoller_PollingFinished);
+      jobResultPoller.IsPollingChanged += new EventHandler(jobResultPoller_IsPollingChanged);
+    }
+    private void DeregisterResultPollingEvents() {
+      jobResultPoller.ExceptionOccured -= new EventHandler<EventArgs<Exception>>(jobResultPoller_ExceptionOccured);
+      jobResultPoller.JobResultsReceived -= new EventHandler<EventArgs<JobResultList>>(jobResultPoller_JobResultReceived);
+      jobResultPoller.PollingStarted -= new EventHandler(jobResultPoller_PollingStarted);
+      jobResultPoller.PollingFinished -= new EventHandler(jobResultPoller_PollingFinished);
+      jobResultPoller.IsPollingChanged -= new EventHandler(jobResultPoller_IsPollingChanged);
+    }
+    void jobResultPoller_IsPollingChanged(object sender, EventArgs e) {
+      this.IsPollingResults = jobResultPoller.IsPolling;
+    }
+    void jobResultPoller_PollingFinished(object sender, EventArgs e) {
+      LogMessage("Polling results finished");
+    }
+    void jobResultPoller_PollingStarted(object sender, EventArgs e) {
+      LogMessage("Polling results started");
+    }
+    void jobResultPoller_JobResultReceived(object sender, EventArgs<JobResultList> e) {
+      foreach (JobResult jobResult in e.Value) {
+        HiveJob hj = hiveJob.GetHiveJobByJobId(jobResult.Id);
+        if (hj != null) {
+          hj.UpdateFromJobResult(jobResult);
+          if ((hj.JobDto.State == JobState.Aborted ||
+               hj.JobDto.State == JobState.Failed ||
+               hj.JobDto.State == JobState.Finished) &&
+              !hj.IsFinishedOptimizerDownloaded) {
+            LogMessage(hj.JobDto.Id, "Downloading optimizer for job");
+            OptimizerJob optimizerJob = LoadOptimizerJob(hj.JobDto.Id);
+            if (jobResult.ParentJobId.HasValue) {
+              HiveJob parentHiveJob = HiveJob.GetHiveJobByJobId(jobResult.ParentJobId.Value);
+              parentHiveJob.UpdateChildOptimizer(optimizerJob, hj.JobDto.Id);
+            } else {
+              this.HiveJob.IsFinishedOptimizerDownloaded = true;
+            }
+          }
+        }
+      }
+      GC.Collect(); // force GC, because .NET is too lazy here (deserialization takes a lot of memory)
+      if (AllJobsFinished()) {
+        this.ExecutionState = Core.ExecutionState.Stopped;
+        StopResultPolling();
+        OnStopped();
+      }
+    }
+
+    private bool AllJobsFinished() {
+      return HiveJob.GetAllHiveJobs().All(hj => hj.IsFinishedOptimizerDownloaded);
+    }
+
+    void jobResultPoller_ExceptionOccured(object sender, EventArgs<Exception> e) {
+      OnExceptionOccured(e.Value);
+    }
+    #endregion
 
     #region Execution Time Timer
@@ -250,454 +491,4 @@
     #endregion
 
-    #region IExecutable Methods
-    public void Pause() {
-      throw new NotSupportedException();
-    }
-
-    public void Prepare() {
-      if (experiment != null) {
-        StopResultPolling();
-        experiment.Prepare();
-        this.ExecutionState = Core.ExecutionState.Prepared;
-        OnPrepared();
-      }
-    }
-
-    public void Start() {
-      OnStarted();
-      ExecutionTime = new TimeSpan();
-      lastUpdateTime = DateTime.Now;
-      this.ExecutionState = Core.ExecutionState.Started;
-
-      Thread t = new Thread(() => {
-        using (Disposable<IClientFacade> service = ServiceLocator.Instance.StreamedClientFacadePool.GetService()) {
-          try {
-            RootJobItem = ToJobItem(RootJob);
-
-            IEnumerable<string> groups = ResourceGroups;
-            SerializedJob serializedJob = RootJobItem.ToSerializedJob();
-            ResponseObject<JobDto> response = service.Obj.AddJobWithGroupStrings(serializedJob, groups);
-
-            if (response.StatusMessage != ResponseStatus.Ok) {
-              throw new Exception(response.StatusMessage.ToString());
-            } else {
-              RootJobItem.JobDto = response.Obj;
-              LogMessage(RootJobItem.JobDto.Id, "Job sent to Hive");
-
-              StartResultPolling();
-            }
-          }
-          catch (Exception e) {
-            LogMessage("Error: Starting HiveExperiment failed: " + e.Message);
-            this.ExecutionState = Core.ExecutionState.Stopped;
-            OnStopped();
-          }
-        }
-      });
-      t.Start();
-    }
-
-    public void Stop() {
-      if (IsPollingResults)
-        StopResultPolling();
-      this.ExecutionState = Core.ExecutionState.Stopped;
-      OnStopped();
-    }
-    #endregion
-    
-    #region Job Management
-    public void RefreshJobTree() {
-      this.RootJob = CreateJobTree(this.Experiment);
-    }
-    
-    private IJob CreateJobTree(IOptimizer optimizer) {
-      IJob job = null;
-      if (optimizer is HeuristicLab.Optimization.Experiment) {
-        HeuristicLab.Optimization.Experiment exp = (HeuristicLab.Optimization.Experiment)optimizer;
-        ExperimentJob expJob = new ExperimentJob(exp);
-        foreach (IOptimizer opt in exp.Optimizers) {
-          expJob.AddChildJob(CreateJobTree(opt));
-        }
-        job = expJob;
-      } else if (optimizer is BatchRun) {
-        job = new BatchRunJob(optimizer);
-      } else {
-        job = new OptimizerJob(optimizer);
-      }
-      return job;
-    }
-
-    private JobItem ToJobItem(IJob j) {
-      return new JobItem() {
-        Job = j,
-        JobDto = new JobDto() {
-          State = JobState.Offline,
-          PluginsNeeded = HivePluginInfoDto.FindPluginsNeeded(j.GetType())
-        }
-      };
-    }
-
-    /// <summary>
-    /// Updates all JobItems with the results
-    /// if one is finished, the serialized job is downloaded and updated
-    /// </summary>
-    /// <param name="jobResultList"></param>
-    private void UpdateJobItems(JobResultList jobResultList) {
-      if (RootJobItem == null) {
-        var rootResults = jobResultList.Where(res => !res.ParentJobId.HasValue);
-        if (rootResults.Count() > 0) {
-          RootJobItem = new JobItem(rootResults.First());
-        } else {
-          LogMessage("Error: Could not find JobResult for RootJobItem");
-          return;
-        }
-      }
-
-      using (Disposable<IClientFacade> service = ServiceLocator.Instance.StreamedClientFacadePool.GetService()) {
-        foreach (JobResult jobResult in jobResultList) {
-          JobItem jobItem = FindJobItem(RootJobItem, jobResult.Id);
-          if (jobItem != null) {
-            jobItem.UpdateJob(jobResult);
-            if (jobItem.JobDto.State == JobState.Finished && !jobItem.IsFinalResultAvailable) {
-              // job is finished but the final result was not yet downloaded
-              SerializedJob serializedJob = service.Obj.GetLastSerializedResult(jobResult.Id).Obj;
-              jobItem.Job = XmlParser.Deserialize<IJob>(new MemoryStream(serializedJob.SerializedJobData));
-              UpdateChildJobs(jobItem);
-              this.Experiment.Runs.AddRange(((OptimizerJob)jobItem.Job).Optimizer.Runs);
-              //ReplaceOptimizerInExperiment(jobItem.JobDto.Id, jobItem.Job);
-            }
-          } else {
-            // job does not yet exist locally
-            JobItem parentJobItem = FindJobItem(RootJobItem, jobResult.ParentJobId.Value);
-            if (parentJobItem != null) {
-              LogMessage(jobResult.Id, "Creating JobItem");
-              SerializedJob serializedJob = service.Obj.GetLastSerializedResult(jobResult.Id).Obj;
-              JobItem newJobItem = new JobItem();
-              newJobItem.JobDto = serializedJob.JobInfo;
-              newJobItem.Job = XmlParser.Deserialize<IJob>(new MemoryStream(serializedJob.SerializedJobData));
-              parentJobItem.AddChildJob(newJobItem);
-              if (newJobItem.JobDto.State == JobState.Finished && newJobItem.IsFinalResultAvailable) {
-                this.Experiment.Runs.AddRange(((OptimizerJob)newJobItem.Job).Optimizer.Runs);
-                UpdateChildJobs(newJobItem);
-                //ReplaceOptimizerInExperiment(jobItem.JobDto.Id, jobItem.Job);
-              }
-            } else {
-              LogMessage("Error: Could not update JobResult for " + jobResult.Id);
-            }
-          }
-        }
-      }
-    }
-
-    /// <summary>
-    /// Updates the ChildJobItems of a JobItem according to the IJob.ChildJobs of JobItem.Job (pretty confusing, right)
-    /// </summary>
-    /// <param name="jobItem"></param>
-    private void UpdateChildJobs(JobItem jobItem) {
-      List<JobItem> newJobItems = new List<JobItem>();
-      foreach (IJob job in jobItem.Job.ChildJobs) {
-        if (!jobItem.ReplaceChildJob(job)) {
-          newJobItems.Add(ToJobItem(job));
-        }
-      }
-      foreach (JobItem item in newJobItems) {
-        jobItem.AddChildJob(item);
-      }
-    }
-
-    private JobItem FindJobItem(JobItem parentJobItem, Guid jobId) {
-      if (parentJobItem.JobDto.Id == jobId) {
-        return parentJobItem;
-      } else {
-        foreach (JobItem child in parentJobItem.ChildJobItems) {
-          JobItem result = FindJobItem(child, jobId);
-          if (result != null)
-            return result;
-        }
-      }
-      return null;
-    }
-
-    private void JobItem_JobStateChanged(object sender, EventArgs e) {
-      JobItem jobItem = (JobItem)sender;
-
-      Thread t = new Thread(() => {
-        try {
-          if (jobItem.JobDto.State == JobState.Finished) {
-            FetchAndUpdateJob(jobItem.JobDto.Id);
-          } else if (jobItem.JobDto.State == JobState.Failed) {
-            
-          }
-        }
-        catch (Exception ex) {
-          LogMessage("JobItem_JobStateChanged failed badly: " + ex.Message);
-        }
-      });
-      t.Start();
-    }
-
-    /// <summary>
-    /// Fetches the finished job from the server and updates the jobItem
-    /// </summary>
-    private void FetchAndUpdateJob(Guid jobId) {
-      bool tryagain = false;
-      LogMessage(jobId, "FetchAndUpdateJob started");
-      if (fetchJobSemaphore.WaitOne(new TimeSpan(0, 2, 0))) {
-
-        try {
-          using (Disposable<IClientFacade> service = ServiceLocator.Instance.StreamedClientFacadePool.GetService()) {
-            ResponseObject<SerializedJob> jobResponse = service.Obj.GetLastSerializedResult(jobId);
-            IJob restoredObject = XmlParser.Deserialize<IJob>(new MemoryStream(jobResponse.Obj.SerializedJobData));
-            IOptimizer restoredOptimizer = ((OptimizerJob)restoredObject).Optimizer;
-            LogMessage(jobId, "FetchAndUpdateJob ended");
-          }
-        }
-        catch (Exception e) {
-          LogMessage(jobId, "FetchAndUpdateJob failed: " + e.Message + ". Will try again!");
-          tryagain = true;
-        }
-        finally {
-          fetchJobSemaphore.Release();
-        }
-      } else {
-        LogMessage(jobId, "FetchAndUpdateJob timed out. Will try again!");
-        tryagain = true;
-      }
-
-      if (tryagain) {
-        FetchAndUpdateJob(jobId);
-      }
-    }
-
-    public void AbortJob(Guid jobId) {
-      using (Disposable<IClientFacade> service = ServiceLocator.Instance.ClientFacadePool.GetService()) {
-        Response response = service.Obj.AbortJob(jobId);
-        LogMessage(jobId, "Aborting Job: " + response.StatusMessage);
-      }
-    }
-    #endregion
-
-    #region Result Polling
-    public void StartResultPolling() {
-      this.stopResultsPollingPending = false;
-      this.IsPollingResults = true;
-      resultPollingThread = new Thread(RunResultPollingThread);
-      if (resultPollingThread.ThreadState != System.Threading.ThreadState.Running)
-        resultPollingThread.Start();
-    }
-
-    public void StopResultPolling() {
-      this.stopResultsPollingPending = true;
-      if (resultPollingThread != null) {
-        if (resultPollingThread.ThreadState == System.Threading.ThreadState.WaitSleepJoin) {
-          resultPollingThread.Interrupt();
-        }
-        resultPollingThread.Join();
-      }
-      this.stopResultsPollingPending = false;
-    }
-
-    private void RunResultPollingThread() {
-      try {
-        do {
-          if (RootJobItem.JobDto.State != JobState.Finished) {
-            using (Disposable<IClientFacade> service = ServiceLocator.Instance.StreamedClientFacadePool.GetService()) {
-              LogMessage("Polling results");
-              try {
-                ResponseObject<JobResultList> response = service.Obj.GetChildJobResults(RootJobItem.JobDto.Id, true, true);
-                if (response.StatusMessage == ResponseStatus.Ok) {
-                  JobResultList jobItemList = response.Obj;
-                  UpdateJobItems(jobItemList);
-
-                  LogMessage("Polling successfully finished");
-                } else {
-                  throw new Exception(response.StatusMessage.ToString());
-                }
-              }
-              catch (Exception e) {
-                LogMessage("Polling results failed: " + e.Message);
-              }
-            }
-            Thread.Sleep(resultPollingIntervalMs);
-          } else {
-            // all the jobs have been sent to hive, but non are to query any more (all finished or failed)
-            this.stopResultsPollingPending = true;
-          }
-        } while (!this.stopResultsPollingPending);
-      }
-      catch (ThreadInterruptedException) {
-        // thread has been interuppted
-      }
-      catch (Exception e) {
-        LogMessage("Result Polling Thread failed badly: " + e.Message);
-      }
-      finally {
-        this.IsPollingResults = false;
-      }
-    }
-
-    #endregion
-
-    #region Snapshots
-
-    //private void UpdateSnapshot(ResponseObject<SerializedJob> response) {
-    //  JobItem jobItem = jobItems.Single(x => x.JobDto.Id == response.Obj.JobInfo.Id);
-    //  jobItem.LatestSnapshot = response;
-    //}
-
-    //public void RequestSnapshot(Guid jobId) {
-    //  Thread t = new Thread(() => {
-    //    IClientFacade clientFacade = null;
-    //    try {
-    //      clientFacade = CreateStreamedClientFacade();
-
-    //      ResponseObject<SerializedJob> response;
-    //      int retryCount = 0;
-
-    //      Response snapShotResponse = clientFacade.RequestSnapshot(jobId);
-    //      if (snapShotResponse.StatusMessage == ResponseStatus.RequestSnapshot_JobIsNotBeeingCalculated) {
-    //        // job already finished
-    //        Logger.Debug("HiveExperiment: Abort - GetLastResult(false)");
-    //        response = clientFacade.GetLastSerializedResult(jobId, false, false);
-    //        Logger.Debug("HiveExperiment: Abort - Server: " + response.StatusMessage);
-    //      } else {
-    //        // server sent snapshot request to client
-    //        // poll until snapshot is ready
-    //        do {
-    //          Thread.Sleep(snapshotPollingIntervalMs);
-    //          Logger.Debug("HiveExperiment: Abort - GetLastResult(true)");
-    //          response = clientFacade.GetLastSerializedResult(jobId, false, true);
-    //          Logger.Debug("HiveExperiment: Abort - Server: " + response.StatusMessage);
-    //          retryCount++;
-    //          // loop while
-    //          // 1. problem with communication with server
-    //          // 2. job result not yet ready
-    //        } while (
-    //          (retryCount < maxSnapshotRetries) && (
-    //          response.StatusMessage == ResponseStatus.GetLastSerializedResult_JobResultNotYetThere)
-    //          );
-    //      }
-    //      if (response.StatusMessage == ResponseStatus.Ok) {
-    //        LogMessage(jobId, "Snapshot polling successfull for job " + jobId);
-    //        //UpdateSnapshot(response);
-    //      } else {
-    //        LogMessage(jobId, "Error: Polling of Snapshot failed for job " + jobId + ": " + response.StatusMessage);
-    //      }
-    //    }
-    //    catch (Exception e) {
-    //      LogMessage("RequestSnapshot Thread failed badly: " + e.Message);
-    //      Logger.Error("RequestSnapshot Thread failed badly: " + e.Message);
-    //    }
-    //    finally {
-    //      ServiceLocator.DisposeClientFacade(clientFacade);
-    //    }
-    //  });
-    //  t.Start();
-    //}
-
-    //void JobItem_SnapshotRequestedStateChanged(object sender, EventArgs e) {
-    //  JobItem jobItem = (JobItem)sender;
-    //  if (jobItem.SnapshotRequestedState == SnapshotRequestedState.Requested) {
-    //    RequestSnapshot(jobItem.JobDto.Id);
-    //  }
-    //}
-
-    #endregion
-
-    #region Eventhandler
-
-    public event EventHandler ExecutionTimeChanged;
-    private void OnExecutionTimeChanged() {
-      EventHandler handler = ExecutionTimeChanged;
-      if (handler != null) handler(this, EventArgs.Empty);
-    }
-
-    public event EventHandler ExecutionStateChanged;
-    private void OnExecutionStateChanged() {
-      LogMessage("ExecutionState changed to " + executionState.ToString());
-      EventHandler handler = ExecutionStateChanged;
-      if (handler != null) handler(this, EventArgs.Empty);
-    }
-
-    public event EventHandler<EventArgs<Exception>> ExceptionOccurred;
-
-    public event EventHandler Started;
-    private void OnStarted() {
-      LogMessage("Started");
-      timer.Start();
-      EventHandler handler = Started;
-      if (handler != null) handler(this, EventArgs.Empty);
-    }
-
-    public event EventHandler Stopped;
-    private void OnStopped() {
-      timer.Stop();
-      LogMessage("Stopped");
-      EventHandler handler = Stopped;
-      if (handler != null) handler(this, EventArgs.Empty);
-    }
-
-    public event EventHandler Paused;
-    private void OnPaused() {
-      timer.Stop();
-      LogMessage("Paused");
-      EventHandler handler = Paused;
-      if (handler != null) handler(this, EventArgs.Empty);
-    }
-
-    public event EventHandler Prepared;
-    protected virtual void OnPrepared() {
-      LogMessage("Prepared");
-      EventHandler handler = Prepared;
-      if (handler != null) handler(this, EventArgs.Empty);
-    }
-
-    public event EventHandler ResourceIdsChanged;
-    protected virtual void OnResourceIdsChanged() {
-      EventHandler handler = ResourceIdsChanged;
-      if (handler != null) handler(this, EventArgs.Empty);
-    }
-
-    public event EventHandler ExperimentChanged;
-    protected virtual void OnExperimentChanged() {
-      LogMessage("Experiment changed");
-      EventHandler handler = ExperimentChanged;
-      if (handler != null) handler(this, EventArgs.Empty);
-    }
-
-    public event EventHandler RootJobChanged;
-    private void OnRootJobChanged() {
-      EventHandler handler = RootJobChanged;
-      if (handler != null) handler(this, EventArgs.Empty);
-    }
-
-    public event EventHandler RootJobItemChanged;
-    private void OnRootJobItemChanged() {
-      EventHandler handler = RootJobItemChanged;
-      if (handler != null) handler(this, EventArgs.Empty);
-    }
-
-    public event EventHandler IsResultsPollingChanged;
-    private void OnIsPollingResultsChanged() {
-      if (this.IsPollingResults) {
-        LogMessage("Results Polling Started");
-        timer.Start();
-      } else {
-        LogMessage("Results Polling Stopped");
-        timer.Stop();
-      }
-      EventHandler handler = IsResultsPollingChanged;
-      if (handler != null) handler(this, EventArgs.Empty);
-    }
-
-    void HiveExperiment_RootJobChanged(object sender, EventArgs e) {
-      this.Experiment = (Optimization.Experiment)((ExperimentJob)rootJobItem.Job).Optimizer;
-    }
-
-    void rootJobItem_FinalResultAvailable(object sender, EventArgs e) {
-      this.Experiment = (Optimization.Experiment)((ExperimentJob)rootJobItem.Job).Optimizer;
-    }
-    #endregion
-    
     #region Logging
     private void LogMessage(string message) {
@@ -719,16 +510,76 @@
     /// Downloads the root job from hive and sets the experiment, rootJob and rootJobItem
     /// </summary>
-    public void LoadExperimentFromHive() {
+    public void LoadHiveJob() {
+      progress = new Progress();
+      try {
+        IsProgressing = true;
+        int totalJobCount = 0;
+        int jobCount = 0;
+        progress.Status = "Connecting to Server...";
+        using (Disposable<IClientFacade> service = ServiceLocator.Instance.StreamedClientFacadePool.GetService()) {
+          // fetch all JobDto objects to create the full tree of tree of HiveJob objects
+          progress.Status = "Downloading list of jobs...";
+          JobResultList allResults = service.Obj.GetChildJobResults(rootJobId.Value, true, true).Obj;
+          totalJobCount = allResults.Count;
+
+          // download them first
+          IDictionary<Guid, SerializedJob> allSerializedJobs = new Dictionary<Guid, SerializedJob>();
+          foreach (JobResult jobResult in allResults) {
+            jobCount++;
+            progress.Status = string.Format("Downloading {0} of {1} jobs...", jobCount, totalJobCount);
+            allSerializedJobs.Add(jobResult.Id, service.Obj.GetLastSerializedResult(jobResult.Id).Obj);
+            progress.ProgressValue = (double)jobCount / totalJobCount;
+          }
+
+          jobCount = 1;
+          progress.Status = string.Format("Deserializing {0} of {1} jobs... ({2} kb)", jobCount, totalJobCount, allSerializedJobs[this.rootJobId.Value].SerializedJobData.Count() / 1024);
+          this.HiveJob = new HiveJob(allSerializedJobs[this.rootJobId.Value], false);
+          allSerializedJobs.Remove(this.rootJobId.Value); // reduce memory footprint
+          progress.ProgressValue = (double)jobCount / totalJobCount;
+
+          if (this.HiveJob.JobDto.DateFinished.HasValue) {
+            this.ExecutionTime = this.HiveJob.JobDto.DateFinished.Value - this.HiveJob.JobDto.DateCreated.Value;
+            this.lastUpdateTime = this.HiveJob.JobDto.DateFinished.Value;
+          } else {
+            this.ExecutionTime = DateTime.Now - this.HiveJob.JobDto.DateCreated.Value;
+            this.lastUpdateTime = DateTime.Now;
+          }
+
+          // build child-job tree
+          LoadChildResults(service.Obj, this.HiveJob, allResults, allSerializedJobs, progress, totalJobCount, ref jobCount);
+          StartResultPolling();
+        }
+      }
+      catch (Exception e) {
+        OnExceptionOccured(e);
+      }
+      finally {
+        IsProgressing = false;
+      }
+    }
+
+    private void LoadChildResults(IClientFacade service, HiveJob parentHiveJob, JobResultList allResults, IDictionary<Guid, SerializedJob> allSerializedJobs, IProgress progress, int totalJobCount, ref int jobCount) {
+      IEnumerable<JobResult> childResults = from result in allResults
+                                            where result.ParentJobId.HasValue && result.ParentJobId.Value == parentHiveJob.JobDto.Id
+                                            orderby result.DateCreated ascending
+                                            select result;
+      foreach (JobResult jobResult in childResults) {
+        jobCount++;
+        progress.Status = string.Format("Deserializing {0} of {1} jobs ({2} kb)...", jobCount, totalJobCount, allSerializedJobs[jobResult.Id].SerializedJobData.Count() / 1024);
+        OptimizerJob optimizerJob = SerializedJob.Deserialize<OptimizerJob>(allSerializedJobs[jobResult.Id].SerializedJobData);
+        progress.ProgressValue = (double)jobCount / totalJobCount;
+        HiveJob childHiveJob = new HiveJob(optimizerJob, false);
+        parentHiveJob.AddChildHiveJob(childHiveJob);
+        childHiveJob.JobDto = allSerializedJobs[jobResult.Id].JobInfo;
+        allSerializedJobs.Remove(jobResult.Id); // reduce memory footprint
+        if(jobCount % 10 == 0) GC.Collect(); // this is needed or otherwise HL takes over the system when the number of jobs is high
+        LoadChildResults(service, childHiveJob, allResults, allSerializedJobs, progress, totalJobCount, ref jobCount);
+      }
+    }
+
+    private OptimizerJob LoadOptimizerJob(Guid jobId) {
       using (Disposable<IClientFacade> service = ServiceLocator.Instance.StreamedClientFacadePool.GetService()) {
-        ResponseObject<SerializedJob> response = service.Obj.GetLastSerializedResult(RootJobItem.JobDto.Id);
-        IJob job = XmlParser.Deserialize<IJob>(new MemoryStream(response.Obj.SerializedJobData));
-        RootJob = job;
-        RootJobItem.JobDto = response.Obj.JobInfo;
-        this.Experiment = (Optimization.Experiment)((OptimizerJob)job).Optimizer;
-        if (rootJobItem.JobDto.State == JobState.Finished) {
-          // set execution time and finish up
-        } else if (rootJobItem.JobDto.State != JobState.Aborted && rootJobItem.JobDto.State != JobState.Failed) {
-          this.ExecutionState = Core.ExecutionState.Started;
-        }
+        ResponseObject<SerializedJob> serializedJob = service.Obj.GetLastSerializedResult(jobId);
+        return SerializedJob.Deserialize<OptimizerJob>(serializedJob.Obj.SerializedJobData);
       }
     }
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/HiveExperimentList.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/HiveExperimentList.cs	(revision 4422)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/HiveExperimentList.cs	(revision 4423)
@@ -21,5 +21,5 @@
 
     public override Common.IDeepCloneable Clone(Common.Cloner cloner) {
-      HiveExperimentList clone = (HiveExperimentList)base.Clone(cloner);
+      HiveExperiment clone = (HiveExperiment)base.Clone(cloner);
       return clone;
     }
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/HiveJob.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/HiveJob.cs	(revision 4423)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/HiveJob.cs	(revision 4423)
@@ -0,0 +1,540 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+using HeuristicLab.Hive.Contracts;
+using System.Drawing;
+using HeuristicLab.Common;
+using System.Diagnostics;
+using HeuristicLab.Optimization;
+using HeuristicLab.Hive.Contracts.ResponseObjects;
+using HeuristicLab.Hive.JobBase;
+using System.IO;
+using HeuristicLab.Persistence.Default.Xml;
+using HeuristicLab.PluginInfrastructure;
+using System.Reflection;
+using HeuristicLab.Hive.Experiment.Jobs;
+using HeuristicLab.Collections;
+
+namespace HeuristicLab.Hive.Experiment {
+  [StorableClass]
+  public class HiveJob : Item {
+    private static object locker = new object();
+
+    public override Image ItemImage {
+      get {
+        if (jobDto.Id == Guid.Empty) { // not yet uploaded
+          return HeuristicLab.Common.Resources.VS2008ImageLibrary.Event;
+        } else {
+          if (jobDto.State == JobState.Offline) return HeuristicLab.Common.Resources.VS2008ImageLibrary.ExecutablePrepared;
+          else if (jobDto.State == JobState.WaitForChildJobs) return HeuristicLab.Common.Resources.VS2008ImageLibrary.ExecutablePrepared;
+          else if (jobDto.State == JobState.Calculating) return HeuristicLab.Common.Resources.VS2008ImageLibrary.ExecutableStarted;
+          else if (jobDto.State == JobState.Aborted) return HeuristicLab.Common.Resources.VS2008ImageLibrary.ExecutableStopped;
+          else if (jobDto.State == JobState.Failed) return HeuristicLab.Common.Resources.VS2008ImageLibrary.Error;
+          else if (jobDto.State == JobState.Finished) return HeuristicLab.Common.Resources.VS2008ImageLibrary.ExecutableStopped;
+          else return HeuristicLab.Common.Resources.VS2008ImageLibrary.Event;
+        }
+      }
+    }
+
+    [Storable]
+    private JobDto jobDto;
+    public JobDto JobDto {
+      get { return jobDto; }
+      set {
+        if (jobDto != value) {
+          jobDto = value;
+          OnJobDtoChanged();
+          OnToStringChanged();
+          OnItemImageChanged();
+        }
+      }
+    }
+
+    [Storable]
+    private OptimizerJob job;
+    public OptimizerJob Job {
+      get { return job; }
+      private set {
+        if (job != null && syncJobsWithOptimizers) {
+          this.childHiveJobs.Clear();
+        }
+        if (job != value) {
+          DergisterOptimizerEvents();
+          job = value;
+          if (job.ExecutionState == ExecutionState.Stopped) {
+            IsFinishedOptimizerDownloaded = true;
+          }
+          RegisterOptimizerEvents();
+          OnJobChanged();
+        }
+      }
+    }
+
+    [Storable]
+    private HiveJobList childHiveJobs;
+    public ReadOnlyItemList<HiveJob> ChildHiveJobs {
+      get { return childHiveJobs.AsReadOnly(); }
+    }
+
+    [Storable]
+    private bool isFinishedOptimizerDownloaded;
+    public bool IsFinishedOptimizerDownloaded {
+      get { return isFinishedOptimizerDownloaded; }
+      set {
+        if (isFinishedOptimizerDownloaded != value) {
+          isFinishedOptimizerDownloaded = value;
+          OnIsFinishedOptimizerDownloadedChanged();
+        }
+      }
+    }
+
+    [Storable]
+    private bool syncJobsWithOptimizers = true;
+
+    public HiveJob() {
+      this.JobDto = new JobDto() {
+        State = JobState.Offline,
+        DateCreated = DateTime.Now,
+        CoresNeeded = 1,
+        MemoryNeeded = 0
+      };
+      this.childHiveJobs = new HiveJobList();
+      syncJobsWithOptimizers = true;
+    }
+
+    public HiveJob(JobDto jobDto)
+      : this() {
+      this.JobDto = jobDto;
+    }
+
+    public HiveJob(JobResult jobResult)
+      : this() {
+      UpdateFromJobResult(jobResult);
+    }
+
+    public HiveJob(OptimizerJob optimizerJob, bool autoCreateChildHiveJobs)
+      : this() {
+      this.syncJobsWithOptimizers = autoCreateChildHiveJobs;
+      this.Job = optimizerJob;
+      this.syncJobsWithOptimizers = true;
+    }
+
+    public HiveJob(IOptimizer optimizer)
+      : this() {
+      this.Job = new OptimizerJob(optimizer);
+    }
+
+    public HiveJob(SerializedJob serializedJob, bool autoCreateChildHiveJobs)
+      : this() {
+      this.syncJobsWithOptimizers = autoCreateChildHiveJobs;
+      this.JobDto = serializedJob.JobInfo;
+      this.Job = SerializedJob.Deserialize<OptimizerJob>(serializedJob.SerializedJobData);
+      this.syncJobsWithOptimizers = true;
+    }
+
+    /// <summary>
+    /// if this.Optimizer is an experiment
+    ///   Uses the child-optimizers of this.HiveJob and creates HiveJob-childs
+    /// if this.Optimizer is a batchrun
+    ///   Creates a number of child-jobs according to repetitions
+    /// </summary>
+    private void UpdateChildHiveJobs() {
+      if (Job != null && syncJobsWithOptimizers) {
+        if (Job.Optimizer is Optimization.Experiment) {
+          Optimization.Experiment experiment = (Optimization.Experiment)Job.Optimizer;
+          foreach (IOptimizer childOpt in experiment.Optimizers) {
+            this.childHiveJobs.Add(new HiveJob(childOpt));
+          }
+        } else if (Job.Optimizer is Optimization.BatchRun) {
+          Optimization.BatchRun batchRun = Job.OptimizerAsBatchRun;
+          if (batchRun.Algorithm != null) {
+            while (this.childHiveJobs.Count < batchRun.Repetitions) {
+              this.childHiveJobs.Add(new HiveJob(batchRun.Algorithm));
+            }
+            while (this.childHiveJobs.Count > batchRun.Repetitions) {
+              this.childHiveJobs.Remove(this.childHiveJobs.Last());
+            }
+          }
+        }
+      }
+    }
+
+    private void RegisterOptimizerEvents() {
+      if (Job != null) {
+        if (Job.Optimizer is Optimization.Experiment) {
+          Optimization.Experiment experiment = Job.OptimizerAsExperiment;
+          experiment.Optimizers.ItemsAdded += new Collections.CollectionItemsChangedEventHandler<Collections.IndexedItem<IOptimizer>>(Optimizers_ItemsAdded);
+          experiment.Optimizers.ItemsReplaced += new Collections.CollectionItemsChangedEventHandler<Collections.IndexedItem<IOptimizer>>(Optimizers_ItemsReplaced);
+          experiment.Optimizers.ItemsRemoved += new Collections.CollectionItemsChangedEventHandler<Collections.IndexedItem<IOptimizer>>(Optimizers_ItemsRemoved);
+          experiment.Optimizers.CollectionReset += new CollectionItemsChangedEventHandler<IndexedItem<IOptimizer>>(Optimizers_CollectionReset);
+        } else if (Job.Optimizer is Optimization.BatchRun) {
+          Optimization.BatchRun batchRun = Job.OptimizerAsBatchRun;
+          batchRun.RepetitionsChanged += new EventHandler(batchRun_RepetitionsChanged);
+          batchRun.AlgorithmChanged += new EventHandler(batchRun_AlgorithmChanged);
+        }
+
+        Job.ComputeInParallelChanged += new EventHandler(Job_ComputeInParallelChanged);
+      }
+    }
+
+    void batchRun_AlgorithmChanged(object sender, EventArgs e) {
+      if (syncJobsWithOptimizers) {
+        this.childHiveJobs.Clear();
+        UpdateChildHiveJobs();
+      }
+    }
+
+    void batchRun_RepetitionsChanged(object sender, EventArgs e) {
+      if (syncJobsWithOptimizers) {
+        UpdateChildHiveJobs();
+      }
+    }
+
+    private void DergisterOptimizerEvents() {
+      if (Job != null && Job.Optimizer is Optimization.Experiment) {
+        if (Job.Optimizer is Optimization.Experiment) {
+          Optimization.Experiment experiment = Job.OptimizerAsExperiment;
+          experiment.Optimizers.ItemsAdded -= new Collections.CollectionItemsChangedEventHandler<Collections.IndexedItem<IOptimizer>>(Optimizers_ItemsAdded);
+          experiment.Optimizers.ItemsReplaced -= new Collections.CollectionItemsChangedEventHandler<Collections.IndexedItem<IOptimizer>>(Optimizers_ItemsReplaced);
+          experiment.Optimizers.ItemsRemoved -= new Collections.CollectionItemsChangedEventHandler<Collections.IndexedItem<IOptimizer>>(Optimizers_ItemsRemoved);
+          experiment.Optimizers.CollectionReset -= new CollectionItemsChangedEventHandler<IndexedItem<IOptimizer>>(Optimizers_CollectionReset);
+        } else if (Job.Optimizer is Optimization.BatchRun) {
+          Optimization.BatchRun batchRun = Job.OptimizerAsBatchRun;
+          batchRun.RepetitionsChanged -= new EventHandler(batchRun_RepetitionsChanged);
+          batchRun.AlgorithmChanged -= new EventHandler(batchRun_AlgorithmChanged);
+        }
+
+        Job.ComputeInParallelChanged -= new EventHandler(Job_ComputeInParallelChanged);
+      }
+    }
+
+    private void Optimizers_ItemsAdded(object sender, CollectionItemsChangedEventArgs<IndexedItem<IOptimizer>> e) {
+      if (syncJobsWithOptimizers && this.Job.ComputeInParallel) {
+        foreach (var item in e.Items) {
+          if (GetChildByOptimizer(item.Value) == null && item.Value.Name != "Placeholder") {
+            this.childHiveJobs.Add(new HiveJob(item.Value));
+          }
+        }
+      }
+    }
+    private void Optimizers_ItemsReplaced(object sender, CollectionItemsChangedEventArgs<IndexedItem<IOptimizer>> e) {
+      if (syncJobsWithOptimizers && this.Job.ComputeInParallel) {
+        foreach (var item in e.OldItems) {
+          this.childHiveJobs.Remove(this.GetChildByOptimizer(item.Value));
+        }
+        foreach (var item in e.Items) {
+          if (GetChildByOptimizer(item.Value) == null && item.Value.Name != "Placeholder") {
+            this.childHiveJobs.Add(new HiveJob(item.Value));
+          }
+        }
+      }
+    }
+    private void Optimizers_ItemsRemoved(object sender, CollectionItemsChangedEventArgs<IndexedItem<IOptimizer>> e) {
+      if (syncJobsWithOptimizers && this.Job.ComputeInParallel) {
+        foreach (var item in e.Items) {
+          this.childHiveJobs.Remove(this.GetChildByOptimizer(item.Value));
+        }
+      }
+    }
+    void Optimizers_CollectionReset(object sender, CollectionItemsChangedEventArgs<IndexedItem<IOptimizer>> e) {
+      if (syncJobsWithOptimizers && this.Job.ComputeInParallel) {
+        foreach (var item in e.Items) {
+          this.childHiveJobs.Remove(this.GetChildByOptimizer(item.Value));
+        }
+      }
+    }
+
+    void Job_ComputeInParallelChanged(object sender, EventArgs e) {
+      if (Job != null && syncJobsWithOptimizers) {
+        if (Job.ComputeInParallel) {
+          // child-hive jobs are not yet created, so create them according to the child-optimizers
+          this.UpdateChildHiveJobs();
+        } else {
+          // child-hive jobs need to be deleted
+          this.childHiveJobs.Clear();
+        }
+      }
+    }
+
+    public void AddChildHiveJob(HiveJob hiveJob) {
+      this.childHiveJobs.Add(hiveJob);
+      syncJobsWithOptimizers = false;
+      if (this.Job.Optimizer is Optimization.Experiment) {
+        if (!this.Job.OptimizerAsExperiment.Optimizers.Contains(hiveJob.Job.Optimizer)) {
+          UpdateOptimizerInExperiment(this.Job.OptimizerAsExperiment, hiveJob.Job);
+        }
+      } else if (this.Job.Optimizer is Optimization.BatchRun) {
+        UpdateOptimizerInBatchRun(this.Job.OptimizerAsBatchRun, hiveJob.Job);
+      }
+      syncJobsWithOptimizers = true;
+    }
+
+    /// <summary>
+    /// if this.Optimizer is Experiment
+    ///   replace the child-optimizer in the experiment
+    /// if this.Optimizer is BatchRun
+    ///   add the runs from the optimizerJob to the batchrun and replace the algorithm
+    /// </summary>
+    public void UpdateChildOptimizer(OptimizerJob optimizerJob, Guid childJobId) {
+      syncJobsWithOptimizers = false; // don't sync with optimizers during this method
+      ExecutionState executionState = optimizerJob.Optimizer.ExecutionState; // has to be stored before adding the optimizers, because of the sideeffects of updating the optimizers in experiment/batchrun
+
+      if (this.Job.Optimizer is Optimization.Experiment) {
+        UpdateOptimizerInExperiment(this.Job.OptimizerAsExperiment, optimizerJob);
+        executionState = ExecutionState.Stopped;
+      } else if (this.Job.Optimizer is Optimization.BatchRun) {
+        UpdateOptimizerInBatchRun(this.Job.OptimizerAsBatchRun, optimizerJob);
+        executionState = ExecutionState.Stopped;
+      }
+      HiveJob child = this.ChildHiveJobs.Single(j => j.JobDto.Id == childJobId);
+      if (!optimizerJob.ComputeInParallel) {
+        child.syncJobsWithOptimizers = false;
+        child.Job = optimizerJob;
+        child.syncJobsWithOptimizers = true;
+      }
+      if (executionState == ExecutionState.Stopped) {
+        child.IsFinishedOptimizerDownloaded = true;
+      }
+      syncJobsWithOptimizers = true;
+    }
+
+    /// <summary>
+    /// Adds the runs from the optimizerJob to the batchrun and replaces the algorithm 
+    /// Sideeffect: the optimizerJob.Optimizer will be prepared (scopes are deleted and executionstate will be reset)
+    /// </summary>
+    private void UpdateOptimizerInBatchRun(BatchRun batchRun, OptimizerJob optimizerJob) {
+      if (batchRun.Algorithm == null) {
+        batchRun.Algorithm = (IAlgorithm)optimizerJob.Optimizer; // only set the first optimizer as algorithm. if every time the Algorithm would be set, the runs would be cleared each time
+      }
+      foreach (IRun run in optimizerJob.Optimizer.Runs) {
+        if (!batchRun.Runs.Contains(run))
+          batchRun.Runs.Add(run);
+      }
+    }
+
+    /// <summary>
+    /// replace the child-optimizer in the experiment
+    /// Sideeffect: the optimizerJob.Optimizer will be prepared (scopes are deleted and executionstate will be reset)
+    /// </summary>
+    private void UpdateOptimizerInExperiment(Optimization.Experiment experiment, OptimizerJob optimizerJob) {
+      if (optimizerJob.IndexInParentOptimizerList < 0)
+        throw new IndexOutOfRangeException("IndexInParentOptimizerList must be equal or greater than zero! The Job is invalid and the optimizer-tree cannot be reassembled.");
+
+      while (experiment.Optimizers.Count < optimizerJob.IndexInParentOptimizerList) {
+        experiment.Optimizers.Add(new UserDefinedAlgorithm("Placeholder")); // add dummy-entries to Optimizers so that its possible to insert the optimizerJob at the correct position
+      }
+      if (experiment.Optimizers.Count < optimizerJob.IndexInParentOptimizerList + 1) {
+        experiment.Optimizers.Add(optimizerJob.Optimizer);
+      } else {
+        // if ComputeInParallel==true, don't replace the optimizer (except it is still a Placeholder)
+        // this is because Jobs with ComputeInParallel get submitted to hive with their child-optimizers deleted
+        if (!optimizerJob.ComputeInParallel || experiment.Optimizers[optimizerJob.IndexInParentOptimizerList].Name == "Placeholder") {
+          experiment.Optimizers[optimizerJob.IndexInParentOptimizerList] = optimizerJob.Optimizer;
+        }
+      }
+    }
+
+    /// <summary>
+    /// Sets the IndexInParentOptimizerList property of the OptimizerJob
+    /// according to the position in the OptimizerList of the parentHiveJob.Job
+    /// Recursively updates all the child-jobs as well
+    /// </summary>
+    internal void SetIndexInParentOptimizerList(HiveJob parentHiveJob) {
+      if (parentHiveJob != null) {
+        if (parentHiveJob.Job.Optimizer is Optimization.Experiment) {
+          this.Job.IndexInParentOptimizerList = parentHiveJob.Job.OptimizerAsExperiment.Optimizers.IndexOf(this.Job.Optimizer);
+        } else if (parentHiveJob.Job.Optimizer is Optimization.BatchRun) {
+          this.Job.IndexInParentOptimizerList = 0;
+        } else {
+          throw new NotSupportedException("Only Experiment and BatchRuns are supported");
+        }
+      }
+      foreach (HiveJob child in childHiveJobs) {
+        child.SetIndexInParentOptimizerList(this);
+      }
+    }
+
+    public override string ToString() {
+      if (jobDto != null) {
+        return job.Name;
+      } else {
+        return base.ToString();
+      }
+    }
+
+    public void UpdateFromJobResult(JobResult jobResult) {
+      if (jobResult != null) {
+        jobDto.Id = jobResult.Id;
+        jobDto.DateCreated = jobResult.DateCreated;
+        jobDto.DateCalculated = jobResult.DateCalculated;
+        jobDto.DateFinished = jobResult.DateFinished;
+        jobDto.Exception = jobResult.Exception;
+        jobDto.Id = jobResult.Id;
+        jobDto.ExecutionTime = jobResult.ExecutionTime;
+        jobDto.State = jobResult.State;
+        // what about parentJob
+        OnJobStateChanged();
+        OnToStringChanged();
+        OnItemImageChanged();
+      }
+    }
+
+    /// <summary>
+    /// Creates a SerializedJob object containing the JobDto and the IJob-Object as byte[]
+    /// </summary>
+    /// <param name="withoutChildOptimizers">
+    ///   if true the Child-Optimizers will not be serialized (if the job contains an Experiment)
+    /// </param>
+    public SerializedJob GetAsSerializedJob(bool withoutChildOptimizers) {
+      byte[] jobByteArray;
+      if (withoutChildOptimizers && this.Job.Optimizer is Optimization.Experiment) {
+        OptimizerJob clonedJob = (OptimizerJob)this.Job.Clone(); // use a cloned job, so that the childHiveJob don't get confused
+        clonedJob.OptimizerAsExperiment.Optimizers.Clear();
+        jobByteArray = SerializedJob.Serialize(clonedJob);
+      } else if (withoutChildOptimizers && this.Job.Optimizer is Optimization.BatchRun) {
+        OptimizerJob clonedJob = (OptimizerJob)this.Job.Clone();
+        clonedJob.OptimizerAsBatchRun.Algorithm = null;
+        jobByteArray = SerializedJob.Serialize(clonedJob);
+      } else if (this.Job.Optimizer is IAlgorithm) {
+        ((IAlgorithm)this.Job.Optimizer).StoreAlgorithmInEachRun = false; // avoid storing the algorithm in runs to reduce size
+        jobByteArray = SerializedJob.Serialize(this.Job);
+      } else {
+        jobByteArray = SerializedJob.Serialize(this.Job);
+      }
+
+      UpdateRequiredPlugins();
+
+      SerializedJob serializedJob = new SerializedJob() {
+        JobInfo = jobDto,
+        SerializedJobData = jobByteArray
+      };
+
+      return serializedJob;
+    }
+
+    /// <summary>
+    /// find out which which plugins are needed for the given object
+    /// </summary>
+    private void UpdateRequiredPlugins() {
+      this.JobDto.PluginsNeeded = HivePluginInfoDto.FindPluginsNeeded(job.GetType());
+    }
+
+    #region Events
+    public event EventHandler JobDtoChanged;
+    private void OnJobDtoChanged() {
+      LogMessage("JobDtoChanged");
+      EventHandler handler = JobDtoChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public event EventHandler JobStateChanged;
+    private void OnJobStateChanged() {
+      LogMessage("JobStateChanged (State: " + this.JobDto.State + ", ExecutionTime: " + this.JobDto.ExecutionTime.ToString() + ")");
+      EventHandler handler = JobStateChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public event EventHandler JobChanged;
+    private void OnJobChanged() {
+      Job_ComputeInParallelChanged(this, EventArgs.Empty);
+      var handler = JobChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public event EventHandler IsFinishedOptimizerDownloadedChanged;
+    private void OnIsFinishedOptimizerDownloadedChanged() {
+      var handler = IsFinishedOptimizerDownloadedChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    #endregion
+
+    public void LogMessage(string message) {
+      lock (locker) {
+        if (job != null) {
+          job.Log.LogMessage(message);
+        }
+      }
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      LogMessage("I am beeing cloned");
+      HiveJob clone = (HiveJob)base.Clone(cloner);
+      clone.jobDto = (JobDto)cloner.Clone(this.jobDto);
+      clone.job = (OptimizerJob)cloner.Clone(this.job);
+      return clone;
+    }
+
+    /// <summary>
+    /// Returns a list of HiveJobs including this and all its child-jobs recursively
+    /// </summary>
+    public IEnumerable<HiveJob> GetAllHiveJobs() {
+      List<HiveJob> jobs = new List<HiveJob>();
+      jobs.Add(this);
+      foreach (HiveJob child in this.ChildHiveJobs) {
+        jobs.AddRange(child.GetAllHiveJobs());
+      }
+      return jobs;
+    }
+
+    public HiveJob GetParentByJobId(Guid jobId) {
+      if (this.ChildHiveJobs.SingleOrDefault(j => j.jobDto.Id == jobId) != null)
+        return this;
+      foreach (HiveJob child in this.childHiveJobs) {
+        HiveJob result = child.GetParentByJobId(jobId);
+        if (result != null)
+          return result;
+      }
+      return null;
+    }
+
+
+    public HiveJob GetChildByOptimizerJob(OptimizerJob optimizerJob) {
+      foreach (var child in ChildHiveJobs) {
+        if (child.Job == optimizerJob)
+          return child;
+      }
+      return null;
+    }
+
+
+    public HiveJob GetChildByOptimizer(IOptimizer optimizer) {
+      foreach (var child in ChildHiveJobs) {
+        if (child.Job.Optimizer == optimizer)
+          return child;
+      }
+      return null;
+    }
+
+    /// <summary>
+    /// Searches for an HiveJob object with the correct jobId recursively
+    /// </summary>
+    public HiveJob GetHiveJobByJobId(Guid jobId) {
+      if (this.JobDto.Id == jobId) {
+        return this;
+      } else {
+        foreach (HiveJob child in this.ChildHiveJobs) {
+          HiveJob result = child.GetHiveJobByJobId(jobId);
+          if (result != null)
+            return result;
+        }
+      }
+      return null;
+    }
+
+
+    public void RemoveByJobId(Guid jobId) {
+      IEnumerable<HiveJob> jobs = ChildHiveJobs.Where(j => j.JobDto.Id == jobId).ToList(); // if Guid.Empty needs to be removed, there could be more than one with this jobId
+      foreach (HiveJob j in jobs) {
+        this.childHiveJobs.Remove(j);
+      }
+      foreach (HiveJob child in ChildHiveJobs) {
+        child.RemoveByJobId(jobId);
+      }
+    }
+
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/HiveJobList.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/HiveJobList.cs	(revision 4423)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/HiveJobList.cs	(revision 4423)
@@ -0,0 +1,22 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+
+namespace HeuristicLab.Hive.Experiment {
+  [Item("JobItem List", "Represents a list of hive jobs.")]
+  [StorableClass]
+  public class HiveJobList : ItemList<HiveJob> {
+    public HiveJobList() : base() { }
+    public HiveJobList(int capacity) : base(capacity) { }
+    public HiveJobList(IEnumerable<HiveJob> collection) : base(collection) { }
+
+    public override Common.IDeepCloneable Clone(Common.Cloner cloner) {
+      HiveJobList clone = (HiveJobList)base.Clone(cloner);
+      return clone;
+    }
+  }
+}
Index: anches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/JobItem.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/JobItem.cs	(revision 4422)
+++ 	(revision )
@@ -1,230 +1,0 @@
-﻿using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using HeuristicLab.Core;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Hive.Contracts.BusinessObjects;
-using HeuristicLab.Hive.Contracts;
-using System.Drawing;
-using HeuristicLab.Common;
-using System.Diagnostics;
-using HeuristicLab.Optimization;
-using HeuristicLab.Hive.Contracts.ResponseObjects;
-using HeuristicLab.Hive.JobBase;
-using System.IO;
-using HeuristicLab.Persistence.Default.Xml;
-using HeuristicLab.PluginInfrastructure;
-using System.Reflection;
-using HeuristicLab.Hive.Experiment.Jobs;
-
-namespace HeuristicLab.Hive.Experiment {
-  public enum SnapshotRequestedState { Idle, Requested }
-
-  [StorableClass]
-  public class JobItem : Item {
-    private static object locker = new object();
-
-    public override Image ItemImage {
-      get {
-        if (jobDto.State == JobState.Offline) return HeuristicLab.Common.Resources.VS2008ImageLibrary.ExecutablePrepared;
-        else if (jobDto.State == JobState.Calculating) return HeuristicLab.Common.Resources.VS2008ImageLibrary.ExecutableStarted;
-        else if (jobDto.State == JobState.Aborted) return HeuristicLab.Common.Resources.VS2008ImageLibrary.ExecutableStopped;
-        else if (jobDto.State == JobState.Failed) return HeuristicLab.Common.Resources.VS2008ImageLibrary.Error;
-        else if (jobDto.State == JobState.Finished) return HeuristicLab.Common.Resources.VS2008ImageLibrary.ExecutableStopped;
-        else return HeuristicLab.Common.Resources.VS2008ImageLibrary.Event;
-      }
-    }
-
-    [Storable]
-    private JobDto jobDto;
-    public JobDto JobDto {
-      get { return jobDto; }
-      set {
-        if (jobDto != value) {
-          jobDto = value;
-          OnJobDtoChanged();
-          OnToStringChanged();
-          OnItemImageChanged();
-        }
-      }
-    }
-
-    [Storable]
-    private IJob job;
-    public IJob Job {
-      get { return job; }
-      set {
-        if (job != value) {
-          job = value;
-          IsFinalResultAvailable = job.ExecutionState == ExecutionState.Stopped;
-          OnJobChanged();
-        }
-      }
-    }
-
-    [Storable]
-    private ICollection<JobItem> childJobItems;
-    public IEnumerable<JobItem> ChildJobItems {
-      get { return childJobItems; }
-    }
-
-    [Storable]
-    private bool isFinalResultAvailable;
-    public bool IsFinalResultAvailable {
-      get { return isFinalResultAvailable; }
-      set {
-        if (isFinalResultAvailable != value) {
-          isFinalResultAvailable = value;
-          if (isFinalResultAvailable)
-            OnFinalResultAvailable();
-        }
-      }
-    }
-   
-    public JobItem() {
-      childJobItems = new List<JobItem>();
-    }
-
-    public JobItem(JobResult jobResult) : this() {
-      this.jobDto = new JobDto();
-      UpdateJob(jobResult);
-    }
-
-    public override string ToString() {
-      if (jobDto != null) {
-        return job.Name;
-      } else {
-        return base.ToString();
-      }
-    }
-
-    public void UpdateJob(JobResult jobResult) {
-      if (jobResult != null) {
-        jobDto.Id = jobResult.Id;
-        jobDto.DateCreated = jobResult.DateCreated;
-        jobDto.DateCalculated = jobResult.DateCalculated;
-        jobDto.DateFinished = jobResult.DateFinished;
-        jobDto.Exception = jobResult.Exception;
-        jobDto.Id = jobResult.Id;
-        jobDto.Percentage = jobResult.Percentage;
-        jobDto.State = jobResult.State;
-        // what about parentJob
-        OnJobStateChanged();
-        OnToStringChanged();
-        OnItemImageChanged();
-      }
-    }
-
-    public void AddChildJob(JobItem child) {
-      this.childJobItems.Add(child);
-      OnChildJobAdded();
-    }
-
-    //public IEnumerable<JobItem> GetChildJobItems() {
-    //  if (childJobItems == null)
-    //    childJobItems = CreateChildJobItems();
-    //  return childJobItems;
-    //}
-
-    //protected IEnumerable<JobItem> CreateChildJobItems() {
-    //  return (from j in Job.ChildJobs
-    //          select new JobItem() {
-    //            Job = j,
-    //            JobDto = new JobDto() {
-    //              State = JobState.Offline
-    //            }
-    //          }).ToList();
-    //}
-
-    public SerializedJob ToSerializedJob() {
-      MemoryStream memStream = new MemoryStream();
-      XmlGenerator.Serialize(job, memStream);
-      byte[] jobByteArray = memStream.ToArray();
-      memStream.Dispose();
-
-      UpdateRequiredPlugins();
-
-      this.JobDto.CoresNeeded = job.CoresNeeded;
-      this.JobDto.MemoryNeeded = job.MemoryNeeded;
-
-      SerializedJob serializedJob = new SerializedJob() {
-        JobInfo = jobDto,
-        SerializedJobData = jobByteArray
-      };
-
-      return serializedJob;
-    }
-
-    private void UpdateRequiredPlugins() {
-      // find out which which plugins are needed for the given object
-      this.JobDto.PluginsNeeded = HivePluginInfoDto.FindPluginsNeeded(job.GetType());
-    }
-   
-    public event EventHandler JobDtoChanged;
-    private void OnJobDtoChanged() {
-      LogMessage("JobDtoChanged");
-      EventHandler handler = JobDtoChanged;
-      if (handler != null) handler(this, EventArgs.Empty);
-    }
-
-    public event EventHandler JobStateChanged;
-    private void OnJobStateChanged() {
-      LogMessage("JobStateChanged (State: " + this.JobDto.State + ", Percentage: " + this.JobDto.Percentage + ")");
-      EventHandler handler = JobStateChanged;
-      if (handler != null) handler(this, EventArgs.Empty);
-    }
-    
-    public event EventHandler ChildJobAdded;
-    private void OnChildJobAdded() {
-      var handler = ChildJobAdded;
-      if (handler != null) handler(this, EventArgs.Empty);
-    }
-    
-    public event EventHandler JobChanged;
-    private void OnJobChanged() {
-      var handler = JobChanged;
-      if (handler != null) handler(this, EventArgs.Empty);
-    }
-
-    public event EventHandler FinalResultAvailable;
-    private void OnFinalResultAvailable() {
-      var handler = FinalResultAvailable;
-      if (handler != null) handler(this, EventArgs.Empty);
-    }
-
-    public void LogMessage(string message) {
-      lock (locker) {
-        if (job != null) {
-          job.Log.LogMessage(message);
-        }
-      }
-    }
-
-    public override IDeepCloneable Clone(Cloner cloner) {
-      LogMessage("I am beeing cloned");
-      JobItem clone = (JobItem)base.Clone(cloner);
-      clone.jobDto = (JobDto)cloner.Clone(this.jobDto);
-      clone.job = (IJob)cloner.Clone(this.job);
-      return clone;
-    }
-
-    public void UpdateFinalResults(IJob j) {
-      if (this.Job is OptimizerJob && j is OptimizerJob) {
-        ((OptimizerJob)this.Job).Optimizer.Runs.AddRange(((OptimizerJob)j).Optimizer.Runs);
-        IsFinalResultAvailable = true; //job.ExecutionState == ExecutionState.Stopped; //??
-      } else {
-        throw new NotSupportedException();
-      }
-    }
-
-    internal bool ReplaceChildJob(IJob job) {
-      var matches = this.childJobItems.Where(child => child.Job.InternalId == job.InternalId);
-      if (matches.Count() > 0) {
-        matches.First().job = job;
-        return true;
-      }
-      return false;
-    }
-  }
-}
Index: anches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/JobItemList.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/JobItemList.cs	(revision 4422)
+++ 	(revision )
@@ -1,22 +1,0 @@
-﻿using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using HeuristicLab.Core;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Hive.Contracts.BusinessObjects;
-
-namespace HeuristicLab.Hive.Experiment {
-  [Item("JobItem List", "Represents a list of hive jobs.")]
-  [StorableClass]
-  public class JobItemList : ItemList<JobItem> {
-    public JobItemList() : base() { }
-    public JobItemList(int capacity) : base(capacity) { }
-    public JobItemList(IEnumerable<JobItem> collection) : base(collection) { }
-
-    public override Common.IDeepCloneable Clone(Common.Cloner cloner) {
-      JobItemList clone = (JobItemList)base.Clone(cloner);
-      return clone;
-    }
-  }
-}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/JobResultPoller.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/JobResultPoller.cs	(revision 4423)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/JobResultPoller.cs	(revision 4423)
@@ -0,0 +1,117 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading;
+using HeuristicLab.Hive.Contracts;
+using HeuristicLab.Hive.Contracts.Interfaces;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+using HeuristicLab.Hive.Contracts.ResponseObjects;
+using HeuristicLab.Common;
+
+namespace HeuristicLab.Hive.Experiment {
+  internal class JobResultPoller {
+    private bool stopRequested { get; set; }
+    private AutoResetEvent waitHandle;
+    private Thread thread;
+
+    private HiveJob hiveJob;
+    public HiveJob HiveJob {
+      get { return hiveJob; }
+      set { hiveJob = value; }
+    }
+
+    private TimeSpan interval;
+    public TimeSpan Interval {
+      get { return interval; }
+      set { interval = value; }
+    }
+
+    private bool isPolling;
+    public bool IsPolling {
+      get { return isPolling; }
+      set {
+        if (isPolling != value) {
+          isPolling = value;
+          OnIsPollingChanged();
+        }
+      }
+    }
+
+    public JobResultPoller(HiveJob hiveJob, TimeSpan interval) {
+      this.isPolling = false;
+      this.hiveJob = hiveJob;
+      this.interval = interval;
+    }
+
+    public void Start() {
+      stopRequested = false;
+      thread = new Thread(RunPolling);
+      thread.Start();
+      IsPolling = true;
+    }
+
+    public void Stop() {
+      // use AutoResetEvent.Set instead if Thread.Interrupt because its much cleaner
+      stopRequested = true;
+      waitHandle.Set();
+      IsPolling = false;
+      thread = null;
+    }
+
+    public void RunPolling() {
+      try {
+        waitHandle = new AutoResetEvent(false);
+        while (!stopRequested) {
+          OnPollingStarted();
+          FetchJobResults();
+          OnPollingFinished();
+          waitHandle.WaitOne(Interval);
+        }
+        waitHandle.Close();
+      }
+      catch (Exception e) {
+        OnExceptionOccured(e);
+      }
+    }
+
+    private void FetchJobResults() {
+      using (Disposable<IClientFacade> service = ServiceLocator.Instance.StreamedClientFacadePool.GetService()) {
+        ResponseObject<JobResultList> response = service.Obj.GetChildJobResults(hiveJob.JobDto.Id, true, true);
+        if (response.StatusMessage == ResponseStatus.Ok) {
+          OnJobResultsReceived(response.Obj);
+        } else {
+          throw new JobResultPollingException(response.StatusMessage.ToString());
+        }
+      }
+    }
+
+    public event EventHandler<EventArgs<JobResultList>> JobResultsReceived;
+    private void OnJobResultsReceived(JobResultList jobResults) {
+      var handler = JobResultsReceived;
+      if (handler != null) handler(this, new EventArgs<JobResultList>(jobResults));
+    }
+
+    public event EventHandler<EventArgs<Exception>> ExceptionOccured;
+    private void OnExceptionOccured(Exception e) {
+      var handler = ExceptionOccured;
+      if (handler != null) handler(this, new EventArgs<Exception>(e));
+    }
+
+    public event EventHandler IsPollingChanged;
+    private void OnIsPollingChanged() {
+      var handler = IsPollingChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    public event EventHandler PollingStarted;
+    private void OnPollingStarted() {
+      var handler = PollingStarted;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    public event EventHandler PollingFinished;
+    private void OnPollingFinished() {
+      var handler = PollingFinished;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+  }
+}
Index: anches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/Jobs/BachRunJob.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/Jobs/BachRunJob.cs	(revision 4422)
+++ 	(revision )
@@ -1,26 +1,0 @@
-﻿using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using HeuristicLab.Hive.JobBase;
-using HeuristicLab.Optimization;
-using HeuristicLab.Core;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-
-namespace HeuristicLab.Hive.Experiment.Jobs {
-  [StorableClass]
-  public class BatchRunJob : OptimizerJob {
-    public BatchRunJob() {
-    }
-
-    public BatchRunJob(IOptimizer optimizer) : base(optimizer) { }
-
-    public override void Start() {
-      base.Start();
-    }
-
-    public override bool IsParallelizable {
-      get { return true; }
-    }
-  }
-}
Index: anches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/Jobs/ExperimentJob.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/Jobs/ExperimentJob.cs	(revision 4422)
+++ 	(revision )
@@ -1,68 +1,0 @@
-﻿using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using HeuristicLab.Hive.JobBase;
-using HeuristicLab.Optimization;
-using HeuristicLab.Core;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Hive.Contracts.BusinessObjects;
-using HeuristicLab.Hive.Contracts.Interfaces;
-using HeuristicLab.Hive.Experiment.Properties;
-
-namespace HeuristicLab.Hive.Experiment.Jobs {
-  [StorableClass]
-  public class ExperimentJob : OptimizerJob {
-    [Storable]
-    private ExecutionState executionState = ExecutionState.Stopped;
-
-    public ExperimentJob() {
-      this.ComputeInParallel = true;
-    }
-
-    public ExperimentJob(IOptimizer optimizer) : base(optimizer) {
-      this.ComputeInParallel = true;
-    }
-
-    public override ExecutionState ExecutionState {
-      get {
-        return ComputeInParallel ? executionState : base.ExecutionState;
-      }
-    }
-
-    public override void Start() {
-      if (ComputeInParallel) {
-        executionState = Core.ExecutionState.Started;
-        foreach (IJob child in this.ChildJobs) {
-          OnNewChildJob(child);
-        }
-        executionState = Core.ExecutionState.Paused;
-        OnWaitForChildJobs();
-      } else {
-        base.Start();
-      }
-    }
-
-    public override void Resume(IEnumerable<IJob> childJobs) {
-      executionState = Core.ExecutionState.Started;
-      this.childJobs = new List<IJob>(childJobs);
-      UpdateRuns();
-      executionState = Core.ExecutionState.Stopped;
-      OnJobStopped();
-    }
-
-    private void UpdateRuns() {
-      foreach (OptimizerJob optimizerJob in childJobs.Cast<OptimizerJob>()) {
-        this.optimizer.Runs.AddRange(optimizerJob.Optimizer.Runs);
-      }
-    }
-
-    public void AddChildJob(IJob job) {
-      this.childJobs.Add(job);
-    }
-
-    public override bool IsParallelizable {
-      get { return true; }
-    }
-  }
-}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/Jobs/JobList.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/Jobs/JobList.cs	(revision 4422)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/Jobs/JobList.cs	(revision 4423)
@@ -7,5 +7,5 @@
 
 namespace HeuristicLab.Hive.Experiment.Jobs {
-  [Item("IJob List", "Represents a list of hive jobs.")]
+  [Item("IJob List", "Represents a list of Hive Job Objects.")]
   [StorableClass]
   public class JobList : ItemList<IJob> {
@@ -15,5 +15,5 @@
 
     public override Common.IDeepCloneable Clone(Common.Cloner cloner) {
-      JobItemList clone = (JobItemList)base.Clone(cloner);
+      HiveJobList clone = (HiveJobList)base.Clone(cloner);
       return clone;
     }
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/Jobs/OptimizerJob.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/Jobs/OptimizerJob.cs	(revision 4422)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/Jobs/OptimizerJob.cs	(revision 4423)
@@ -1,3 +1,4 @@
 ﻿using System;
+using System.Linq;
 using System.Collections.Generic;
 using HeuristicLab.Core;
@@ -5,14 +6,10 @@
 using HeuristicLab.Optimization;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
 
 namespace HeuristicLab.Hive.Experiment.Jobs {
   [StorableClass]
   public class OptimizerJob : IJob {
-    [Storable]
-    protected Guid internalId;
-    public Guid InternalId {
-      get { return internalId; }
-    }
-    
     [Storable]
     protected IOptimizer optimizer;
@@ -20,16 +17,16 @@
       get { return optimizer; }
       set {
-        if (optimizer != null && value != optimizer) {
-          DeregisterEvents();
-        }
-        optimizer = value;
-        if (optimizer != null) {
-          RegisterEvents();
+        if (value != optimizer) {
+          if (optimizer != null) {
+            DeregisterEvents();
+          }
+          optimizer = value;
+          if (optimizer != null) {
+            RegisterEvents();
+          }
+          OnOptimizerChanged();
         }
       }
     }
-
-    [Storable]
-    protected double progress = 0.0;
 
     [Storable]
@@ -40,37 +37,32 @@
 
     [Storable]
-    protected ICollection<IJob> childJobs;
-    public IEnumerable<IJob> ChildJobs {
-      get { return childJobs; }
-    }
-
-    [Storable]
     protected bool computeInParallel;
     public bool ComputeInParallel {
       get { return computeInParallel; }
-      set { computeInParallel = value; }
-    }
-
-    [Storable]
-    protected int coresNeeded;
-    public int CoresNeeded {
-      get { return coresNeeded; }
-      set { coresNeeded = value; }
-    }
-
-    [Storable]
-    protected int memoryNeeded;
-    public int MemoryNeeded {
-      get { return memoryNeeded; }
-      set { memoryNeeded = value; }
+      set {
+        if (computeInParallel != value) {
+          computeInParallel = value;
+          OnComputeInParallelChanged();
+        }
+      }
+    }
+
+    [Storable]
+    private int indexInParentOptimizerList = -1;
+    public int IndexInParentOptimizerList {
+      get { return indexInParentOptimizerList; }
+      set { this.indexInParentOptimizerList = value; }
+    }
+
+
+    [Storable]
+    private bool collectChildJobs;
+    public bool CollectChildJobs {
+      get { return collectChildJobs; }
+      set { collectChildJobs = value; }
     }
 
     public OptimizerJob() {
-      this.internalId = Guid.NewGuid();
       this.log = new Log();
-      this.childJobs = new List<IJob>();
-      this.ComputeInParallel = false;
-      this.CoresNeeded = 1;
-      this.MemoryNeeded = 0;
     }
 
@@ -78,4 +70,12 @@
       : this() {
       this.optimizer = optimizer;
+
+      if (optimizer is Optimization.Experiment) {
+        this.ComputeInParallel = true;
+      } else if (optimizer is Optimization.BatchRun) {
+        this.ComputeInParallel = false;
+      } else {
+        this.ComputeInParallel = false;
+      }
     }
 
@@ -85,9 +85,19 @@
     }
 
+    /// <summary>
+    /// Casts the Optimizer to an Experiment. Returns null if cast was not successfull.
+    /// </summary>
+    public Optimization.Experiment OptimizerAsExperiment {
+      get { return Optimizer as Optimization.Experiment; }
+    }
+
+    /// <summary>
+    /// Casts the Optimizer to an BatchRun. Returns null if cast was not successfull.
+    /// </summary>
+    public Optimization.BatchRun OptimizerAsBatchRun {
+      get { return Optimizer as Optimization.BatchRun; }
+    }
+
     #region IJob Members
-    
-    public double Progress {
-      get { return optimizer.ExecutionState == ExecutionState.Stopped ? 1.0 : this.progress; }
-    }
 
     public virtual ExecutionState ExecutionState {
@@ -95,4 +105,8 @@
     }
 
+    public TimeSpan ExecutionTime {
+      get { return optimizer.ExecutionTime; }
+    }
+
     public virtual void Run() {
       throw new NotSupportedException();
@@ -104,5 +118,10 @@
 
     public virtual void Start() {
-      optimizer.Start();
+      if ((optimizer is Optimization.Experiment && OptimizerAsExperiment.Optimizers.Count == 0) || // experiment would not fire OnStopped if it has 0 optimizers
+          (optimizer is Optimization.BatchRun && OptimizerAsBatchRun.Algorithm == null)) { // batchrun would not fire OnStopped if algorithm == null
+        OnJobStopped();
+      } else {
+        optimizer.Start();
+      }
     }
 
@@ -112,5 +131,5 @@
 
     public virtual void Resume(IEnumerable<IJob> childJobs) {
-      throw new NotSupportedException();
+      OnJobStopped();
     }
 
@@ -122,13 +141,13 @@
 
     public event EventHandler JobFailed;
-    protected virtual void OnJobFailed(Common.EventArgs<Exception> e) {
+    protected virtual void OnJobFailed(EventArgs<Exception> e) {
       EventHandler handler = JobFailed;
       if (handler != null) handler(this, e);
     }
 
-    public event EventHandler<Common.EventArgs<IJob>> NewChildJob;
+    public event EventHandler<EventArgs<IJob>> NewChildJob;
     protected virtual void OnNewChildJob(IJob job) {
       EventHandler<Common.EventArgs<IJob>> handler = NewChildJob;
-      if (handler != null) handler(this, new Common.EventArgs<IJob>(job));
+      if (handler != null) handler(this, new EventArgs<IJob>(job));
     }
 
@@ -139,4 +158,21 @@
     }
 
+    public event EventHandler DeleteChildJobs;
+    protected virtual void OnDeleteChildJobs() {
+      EventHandler handler = DeleteChildJobs;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public event EventHandler ComputeInParallelChanged;
+    protected virtual void OnComputeInParallelChanged() {
+      EventHandler handler = ComputeInParallelChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public event EventHandler OptimizerChanged;
+    protected virtual void OnOptimizerChanged() {
+      EventHandler handler = OptimizerChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
     #endregion
 
@@ -165,12 +201,8 @@
 
     protected virtual void optimizer_ExceptionOccurred(object sender, Common.EventArgs<Exception> e) {
-      if (optimizer.ExecutionState != ExecutionState.Stopped) this.progress = 0.0;
-      else this.progress = 1.0;
       OnJobFailed(e);
     }
 
     protected virtual void optimizer_Stopped(object sender, EventArgs e) {
-      if (optimizer.ExecutionState != ExecutionState.Stopped) this.progress = 0.0;
-      else this.progress = 1.0;
       OnJobStopped();
     }
@@ -237,6 +269,14 @@
     #region IDeepCloneable Members
 
-    public Common.IDeepCloneable Clone(Common.Cloner cloner) {
-      throw new NotImplementedException();
+    public Common.IDeepCloneable Clone(Cloner cloner) {
+      OptimizerJob clone = (OptimizerJob)Activator.CreateInstance(this.GetType());
+      cloner.RegisterClonedObject(this, clone);
+      clone.Optimizer = (IOptimizer)cloner.Clone(this.Optimizer);
+      clone.log = (ILog)cloner.Clone(this.Log);
+      clone.ComputeInParallel = this.ComputeInParallel;
+      clone.IndexInParentOptimizerList = this.IndexInParentOptimizerList;
+      clone.CollectChildJobs = this.CollectChildJobs;
+      clone.RegisterEvents();
+      return clone;
     }
 
@@ -246,5 +286,5 @@
 
     public object Clone() {
-      throw new NotImplementedException();
+      return Clone(new Cloner());
     }
 
@@ -258,8 +298,9 @@
       return Name;
     }
-    
+
     public virtual bool IsParallelizable {
-      get { return false; }
-    }
+      get { return this.Optimizer is Optimization.Experiment || this.Optimizer is BatchRun; }
+    }
+
   }
 }
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/Progress/IProgress.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/Progress/IProgress.cs	(revision 4423)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/Progress/IProgress.cs	(revision 4423)
@@ -0,0 +1,17 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace HeuristicLab.Hive.Experiment {
+  public interface IProgress {
+    string Status { get; set; }
+    double ProgressValue { get; set; }
+
+    void Finish();
+
+    event EventHandler Finished;
+    event EventHandler StatusChanged;
+    event EventHandler ProgressValueChanged;
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/Progress/IProgressReporter.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/Progress/IProgressReporter.cs	(revision 4423)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/Progress/IProgressReporter.cs	(revision 4423)
@@ -0,0 +1,14 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Common;
+
+namespace HeuristicLab.Hive.Experiment {
+  public interface IProgressReporter {
+    IProgress Progress { get; }
+    bool IsProgressing { get; }
+
+    event EventHandler IsProgressingChanged;
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/Progress/Progress.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/Progress/Progress.cs	(revision 4423)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/Progress/Progress.cs	(revision 4423)
@@ -0,0 +1,64 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace HeuristicLab.Hive.Experiment {
+  public class Progress : IProgress {
+    private string status;
+    public string Status {
+      get {
+        return this.status;
+      }
+      set {
+        if (this.status != value) {
+          this.status = value;
+          OnStatusChanged();
+        }
+      }
+    }
+
+    private double progressValue;
+    public double ProgressValue {
+      get {
+        return this.progressValue;
+      }
+      set {
+        if (this.progressValue != value) {
+          this.progressValue = value;
+          OnProgressChanged();
+        }
+      }
+    }
+
+    public Progress() { }
+
+    public Progress(string status) {
+      this.Status = status;
+    }
+
+    public void Finish() {
+      OnFinished();
+    }
+
+    #region Event Handler
+    public event EventHandler Finished;
+    private void OnFinished() {
+      var handler = Finished;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public event EventHandler StatusChanged;
+    private void OnStatusChanged() {
+      var handler = StatusChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public event EventHandler ProgressValueChanged;
+    private void OnProgressChanged() {
+      var handler = ProgressValueChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    #endregion
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/ServiceLocator.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/ServiceLocator.cs	(revision 4422)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/ServiceLocator.cs	(revision 4423)
@@ -46,4 +46,21 @@
     }
 
+    public ServiceLocator() {
+      Settings.Default.SettingChanging += new System.Configuration.SettingChangingEventHandler(Default_SettingChanging);
+    }
+
+    void Default_SettingChanging(object sender, System.Configuration.SettingChangingEventArgs e) {
+      if (clientFacadePool != null) {
+        clientFacadePool.HostAddress = Settings.Default.HiveServerIp;
+        clientFacadePool.Username = Settings.Default.HiveUsername;
+        clientFacadePool.Password = Settings.Default.HivePassword;
+      }
+      if (streamedClientFacadePool != null) {
+        streamedClientFacadePool.HostAddress = Settings.Default.HiveServerIp;
+        streamedClientFacadePool.Username = Settings.Default.HiveUsername;
+        streamedClientFacadePool.Password = Settings.Default.HivePassword;
+      }
+    }
+
     internal WcfServicePool<IClientFacade> ClientFacadePool {
       get {
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/app.config
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/app.config	(revision 4422)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/app.config	(revision 4423)
@@ -66,16 +66,16 @@
     </bindings>
     <client>
-      <endpoint address="net.tcp://localhost:9001/ClientServiceStreamed" behaviorConfiguration="ClientServiceBehaviour"
+      <endpoint address="net.tcp://blade12.hpc.fh-hagenberg.at:9001/ClientServiceStreamed" behaviorConfiguration="ClientServiceBehaviour"
           binding="netTcpBinding" bindingConfiguration="ClientTcpStreamedEndpoint"
           contract="HeuristicLab.Hive.Contracts.Interfaces.IClientFacade" name="ClientTcpStreamedEndpoint">
         <identity>
-          <dns value="localhost" />
+          <dns value="blade12.hpc.fh-hagenberg.at" />
         </identity>
       </endpoint>
-      <endpoint address="http://localhost:9000/ClientService" binding="wsHttpBinding" behaviorConfiguration="ClientServiceBehaviour"
+      <endpoint address="http://blade12.hpc.fh-hagenberg.at:9000/ClientService" binding="wsHttpBinding" behaviorConfiguration="ClientServiceBehaviour"
           bindingConfiguration="ClientHttpEndpoint" contract="HeuristicLab.Hive.Contracts.Interfaces.IClientFacade"
           name="ClientHttpEndpoint">
         <identity>
-          <certificate encodedValue="AwAAAAEAAAAUAAAAJ5p7xBv8o/BZ9Lp1c1d+F13FxN8gAAAAAQAAAPIBAAAwggHuMIIBW6ADAgECAhBvZlgTCjsfjEG5QUX7yOhOMAkGBSsOAwIdBQAwFDESMBAGA1UEAxMJbG9jYWxob3N0MB4XDTEwMDgzMDA5MTMyMVoXDTM5MTIzMTIzNTk1OVowFDESMBAGA1UEAxMJbG9jYWxob3N0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCbjJrhOtSpfFz51JPvdfxMVSKqnWhfzjrZvtwpVsy8D589m3SeS6AalWwtkpPCR2C+a4GKo9e689o0+BtuOugypAWqkUhkz//XLvUp5KPNB7igY7he4ngMLp4GsWBWZdl+P8g29t5+nde1Tiv6dPzx5YgfB9lrvZzaS6TT/eNasQIDAQABo0kwRzBFBgNVHQEEPjA8gBBPTuRH17g8MfpeT/ODWdXuoRYwFDESMBAGA1UEAxMJbG9jYWxob3N0ghBvZlgTCjsfjEG5QUX7yOhOMAkGBSsOAwIdBQADgYEAUpgK4sUxAqwR8eyRK8cmyzhhN31xN8/nKPIo9cETaNvjJXL8zO7DeXCyyiBETAkfnhIChRIAmE/PjxvFdB2fOuQY3/OHrobai+G7IQ8SHF+AKdx7cJXt0h4Okny4DpPjQl4V9P2lZaG8fVXmpKhpeZ+ChA8Y/xPCDzTzLleQ/mY=" />
+          <certificate encodedValue="AwAAAAEAAAAUAAAA0FkTGjOA2/0cZmFlIwFildV5a/ogAAAAAQAAACgCAAAwggIkMIIBkaADAgECAhCcCYkXdzUDsEzY5+POfdYRMAkGBSsOAwIdBQAwJjEkMCIGA1UEAxMbYmxhZGUxMi5ocGMuZmgtaGFnZW5iZXJnLmF0MB4XDTEwMDkxNTE0MjkyNFoXDTM5MTIzMTIzNTk1OVowJjEkMCIGA1UEAxMbYmxhZGUxMi5ocGMuZmgtaGFnZW5iZXJnLmF0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDN/VsuexELvneBS+KjIT4z1oj8VwitpZJDhCVxVM1hBVAXRJ9qE0zwFwen6KWRXKMx0wZvm47CdkENO0krsqfliQRKb0hcMin+37X8u1Xk51qebV3M0kUAEpsRT6RehQD41+iGe1GmIaLksCEYaH80wPWI7F3N/tN+5svizD0sfQIDAQABo1swWTBXBgNVHQEEUDBOgBBJWfbAcVJ+egMO9eh/uP3hoSgwJjEkMCIGA1UEAxMbYmxhZGUxMi5ocGMuZmgtaGFnZW5iZXJnLmF0ghCcCYkXdzUDsEzY5+POfdYRMAkGBSsOAwIdBQADgYEApOwttaruQRFtS8SWslEDt+aKzIUnfKrJ+7U7Fml5+QT7G4+5bXnfOs5gcWKDQyyap9y3AJpjPnGaLzwb/8LwlqKXePRQvOW44O5JLwOTo3TD4ZPKANuBblD7J7TYGyXKTUQcytfQl1uOxELWNBj4IpUEbR1C/S4RmupMivLNQoA=" />
         </identity>
       </endpoint>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.JobBase/3.3/Interfaces/IJob.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.JobBase/3.3/Interfaces/IJob.cs	(revision 4422)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.JobBase/3.3/Interfaces/IJob.cs	(revision 4423)
@@ -3,17 +3,12 @@
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 using System.Collections.Generic;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Hive.JobBase {
   public interface IJob : INamedItem {
-    /// <summary>
-    /// This ID is needed to identify the object when it returns from hive
-    /// </summary>
-    Guid InternalId { get; }
+    TimeSpan ExecutionTime { get; }
 
     ExecutionState ExecutionState { get; }
-    IEnumerable<IJob> ChildJobs { get; }
-    double Progress { get; }
-    ILog Log { get; }
-
+    
     /// <summary>
     /// indicates wether it is possible to create childjobs from this job
@@ -26,15 +21,6 @@
     /// </summary>
     bool ComputeInParallel { get; set; }
+    event EventHandler ComputeInParallelChanged;
 
-    /// <summary>
-    /// Gets or sets the cores that will be needed by this job
-    /// </summary>
-    int CoresNeeded { get; set; }
-
-    /// <summary>
-    /// Gets or sets the memory that will be consumed by this job
-    /// </summary>
-    int MemoryNeeded { get; set; }
-    
     void Run();
     void Prepare();
@@ -52,7 +38,17 @@
 
     /// <summary>
-    /// This event will be thrown when the job wants to have a child-job to be computed
+    /// This event will be fired when the job wants to have a child-job to be computed
     /// </summary>
-    event EventHandler<Common.EventArgs<IJob>> NewChildJob;
+    event EventHandler<EventArgs<IJob>> NewChildJob;
+
+    /// <summary>
+    /// Will be fired when job wants all child-jobs to be deleted from hive
+    /// </summary>
+    event EventHandler DeleteChildJobs;
+    
+    /// <summary>
+    /// If this is set to true, the job should be Resumed with the child-jobs attatched instead of Started
+    /// </summary>
+    bool CollectChildJobs { get; set; }
   }
 }
Index: anches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/AddUserForm.Designer.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/AddUserForm.Designer.cs	(revision 4422)
+++ 	(revision )
@@ -1,159 +1,0 @@
-﻿#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
-
-namespace HeuristicLab.Hive.Server.ServerConsole {
-  partial class AddUserForm {
-    /// <summary>
-    /// Required designer variable.
-    /// </summary>
-    private System.ComponentModel.IContainer components = null;
-
-    /// <summary>
-    /// Clean up any resources being used.
-    /// </summary>
-    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
-    protected override void Dispose(bool disposing) {
-      if (disposing && (components != null)) {
-        components.Dispose();
-      }
-      base.Dispose(disposing);
-    }
-
-    #region Windows Form Designer generated code
-
-    /// <summary>
-    /// Required method for Designer support - do not modify
-    /// the contents of this method with the code editor.
-    /// </summary>
-    private void InitializeComponent() {
-      this.lblOne = new System.Windows.Forms.Label();
-      this.lblGroup = new System.Windows.Forms.Label();
-      this.tbOne = new System.Windows.Forms.TextBox();
-      this.cbGroups = new System.Windows.Forms.ComboBox();
-      this.btnAdd = new System.Windows.Forms.Button();
-      this.btnClose = new System.Windows.Forms.Button();
-      this.tbPwd = new System.Windows.Forms.TextBox();
-      this.lblPassword = new System.Windows.Forms.Label();
-      this.SuspendLayout();
-      // 
-      // lblOne
-      // 
-      this.lblOne.AutoSize = true;
-      this.lblOne.Location = new System.Drawing.Point(12, 14);
-      this.lblOne.Name = "lblOne";
-      this.lblOne.Size = new System.Drawing.Size(35, 13);
-      this.lblOne.TabIndex = 0;
-      this.lblOne.Text = "label1";
-      // 
-      // lblGroup
-      // 
-      this.lblGroup.AutoSize = true;
-      this.lblGroup.Location = new System.Drawing.Point(12, 71);
-      this.lblGroup.Name = "lblGroup";
-      this.lblGroup.Size = new System.Drawing.Size(35, 13);
-      this.lblGroup.TabIndex = 1;
-      this.lblGroup.Text = "label2";
-      // 
-      // tbOne
-      // 
-      this.tbOne.Location = new System.Drawing.Point(120, 7);
-      this.tbOne.Name = "tbOne";
-      this.tbOne.Size = new System.Drawing.Size(212, 20);
-      this.tbOne.TabIndex = 1;
-      // 
-      // cbGroups
-      // 
-      this.cbGroups.FormattingEnabled = true;
-      this.cbGroups.Location = new System.Drawing.Point(120, 68);
-      this.cbGroups.Name = "cbGroups";
-      this.cbGroups.Size = new System.Drawing.Size(212, 21);
-      this.cbGroups.TabIndex = 3;
-      // 
-      // btnAdd
-      // 
-      this.btnAdd.Location = new System.Drawing.Point(12, 95);
-      this.btnAdd.Name = "btnAdd";
-      this.btnAdd.Size = new System.Drawing.Size(75, 23);
-      this.btnAdd.TabIndex = 4;
-      this.btnAdd.Text = "Add";
-      this.btnAdd.UseVisualStyleBackColor = true;
-      this.btnAdd.Click += new System.EventHandler(this.BtnAdd_Click);
-      // 
-      // btnClose
-      // 
-      this.btnClose.Location = new System.Drawing.Point(257, 95);
-      this.btnClose.Name = "btnClose";
-      this.btnClose.Size = new System.Drawing.Size(75, 23);
-      this.btnClose.TabIndex = 5;
-      this.btnClose.Text = "Close";
-      this.btnClose.UseVisualStyleBackColor = true;
-      this.btnClose.Click += new System.EventHandler(this.BtnClose_Click);
-      // 
-      // tbPwd
-      // 
-      this.tbPwd.Location = new System.Drawing.Point(120, 37);
-      this.tbPwd.Name = "tbPwd";
-      this.tbPwd.Size = new System.Drawing.Size(212, 20);
-      this.tbPwd.TabIndex = 2;
-      this.tbPwd.UseSystemPasswordChar = true;
-      // 
-      // lblPassword
-      // 
-      this.lblPassword.AutoSize = true;
-      this.lblPassword.Location = new System.Drawing.Point(12, 44);
-      this.lblPassword.Name = "lblPassword";
-      this.lblPassword.Size = new System.Drawing.Size(53, 13);
-      this.lblPassword.TabIndex = 0;
-      this.lblPassword.Text = "Password";
-      // 
-      // AddUserForm
-      // 
-      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-      this.BackColor = System.Drawing.SystemColors.Control;
-      this.ClientSize = new System.Drawing.Size(344, 130);
-      this.Controls.Add(this.tbPwd);
-      this.Controls.Add(this.lblPassword);
-      this.Controls.Add(this.btnClose);
-      this.Controls.Add(this.btnAdd);
-      this.Controls.Add(this.cbGroups);
-      this.Controls.Add(this.tbOne);
-      this.Controls.Add(this.lblGroup);
-      this.Controls.Add(this.lblOne);
-      this.Name = "AddUserForm";
-      this.Text = "AddUserForm";
-      this.ResumeLayout(false);
-      this.PerformLayout();
-
-    }
-
-    #endregion
-
-    private System.Windows.Forms.Label lblOne;
-    private System.Windows.Forms.Label lblGroup;
-    private System.Windows.Forms.TextBox tbOne;
-    private System.Windows.Forms.ComboBox cbGroups;
-    private System.Windows.Forms.Button btnAdd;
-    private System.Windows.Forms.Button btnClose;
-    private System.Windows.Forms.TextBox tbPwd;
-    private System.Windows.Forms.Label lblPassword;
-  }
-}
Index: anches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/AddUserForm.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/AddUserForm.cs	(revision 4422)
+++ 	(revision )
@@ -1,111 +1,0 @@
-﻿#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.ComponentModel;
-using System.Data;
-using System.Drawing;
-using System.Linq;
-using System.Text;
-using System.Windows.Forms;
-using HeuristicLab.Hive.Contracts.Interfaces;
-using HeuristicLab.Hive.Contracts.BusinessObjects;
-using HeuristicLab.Hive.Contracts;
-
-namespace HeuristicLab.Hive.Server.ServerConsole {
-  public partial class AddUserForm : Form {
-
-    public event addDelegate addUserEvent;
-    ResponseList<UserGroup> userGroups = null;
-    IUserRoleManager userRoleManager;
-    bool group;
-
-    public AddUserForm(string addForm, bool group) {
-      this.group = group;
-      InitializeComponent();
-      this.Name = "Add " + addForm;
-
-      lblOne.Text = addForm;
-      if (group) {
-        lblOne.Text += " Group";
-      }
-
-      lblGroup.Text = addForm + " Groups";
-
-      if (addForm == "User") {
-        AddUser();
-      }
-    }
-
-    private void AddUser() {
-     userRoleManager = ServiceLocator.GetUserRoleManager();
-      userGroups = userRoleManager.GetAllUserGroups();
-      cbGroups.Items.Add("none");
-      cbGroups.SelectedIndex = 0;
-      foreach (UserGroup ug in userGroups.List) {
-        cbGroups.Items.Add(ug.Name);
-      }
-    }
-
-    private void BtnAdd_Click(object sender, EventArgs e) {
-      if (!group) {
-        if (tbOne.Text != "") {
-          User u = new User() { Name = tbOne.Text, Password = tbPwd.Text };
-          ResponseObject<User> respUser = userRoleManager.AddNewUser(u);
-          if (respUser.Success == true) {
-            if (cbGroups.SelectedIndex != 0) {
-              u = respUser.Obj;
-              foreach (UserGroup ug in userGroups.List) {
-                if (cbGroups.SelectedItem.ToString().Equals(ug.Name)) {
-                  Response resp = userRoleManager.AddUserToGroup
-                    (ug.Id, u.Id);
-                }
-              }
-            }
-          }
-        }
-      } else {
-        UserGroup ug = new UserGroup { Name = tbOne.Text };
-        ResponseObject<UserGroup> respug = userRoleManager.AddNewUserGroup(ug);
-        if (respug.Success == true) {
-          if (!cbGroups.SelectedText.Equals("none")) {
-            ug = respug.Obj;
-            foreach (UserGroup ugs in userGroups.List) {
-              if (cbGroups.SelectedText.Equals(ugs.Name)) {
-                Response resp = userRoleManager.AddUserGroupToGroup
-                  (ug.Id, ugs.Id);
-              }
-            }
-          }
-        }
-      }
-      if (addUserEvent != null) {
-        addUserEvent();
-      }
-      this.Close();
-    }
-
-    private void BtnClose_Click(object sender, EventArgs e) {
-      this.Close();
-    }
-  }
-}
Index: anches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/AddUserForm.resx
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/AddUserForm.resx	(revision 4422)
+++ 	(revision )
@@ -1,120 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<root>
-  <!-- 
-    Microsoft ResX Schema 
-    
-    Version 2.0
-    
-    The primary goals of this format is to allow a simple XML format 
-    that is mostly human readable. The generation and parsing of the 
-    various data types are done through the TypeConverter classes 
-    associated with the data types.
-    
-    Example:
-    
-    ... ado.net/XML headers & schema ...
-    <resheader name="resmimetype">text/microsoft-resx</resheader>
-    <resheader name="version">2.0</resheader>
-    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
-    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
-    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
-    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
-    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
-        <value>[base64 mime encoded serialized .NET Framework object]</value>
-    </data>
-    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
-        <comment>This is a comment</comment>
-    </data>
-                
-    There are any number of "resheader" rows that contain simple 
-    name/value pairs.
-    
-    Each data row contains a name, and value. The row also contains a 
-    type or mimetype. Type corresponds to a .NET class that support 
-    text/value conversion through the TypeConverter architecture. 
-    Classes that don't support this are serialized and stored with the 
-    mimetype set.
-    
-    The mimetype is used for serialized objects, and tells the 
-    ResXResourceReader how to depersist the object. This is currently not 
-    extensible. For a given mimetype the value must be set accordingly:
-    
-    Note - application/x-microsoft.net.object.binary.base64 is the format 
-    that the ResXResourceWriter will generate, however the reader can 
-    read any of the formats listed below.
-    
-    mimetype: application/x-microsoft.net.object.binary.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
-            : and then encoded with base64 encoding.
-    
-    mimetype: application/x-microsoft.net.object.soap.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
-            : and then encoded with base64 encoding.
-
-    mimetype: application/x-microsoft.net.object.bytearray.base64
-    value   : The object must be serialized into a byte array 
-            : using a System.ComponentModel.TypeConverter
-            : and then encoded with base64 encoding.
-    -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
-    <xsd:element name="root" msdata:IsDataSet="true">
-      <xsd:complexType>
-        <xsd:choice maxOccurs="unbounded">
-          <xsd:element name="metadata">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" />
-              </xsd:sequence>
-              <xsd:attribute name="name" use="required" type="xsd:string" />
-              <xsd:attribute name="type" type="xsd:string" />
-              <xsd:attribute name="mimetype" type="xsd:string" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="assembly">
-            <xsd:complexType>
-              <xsd:attribute name="alias" type="xsd:string" />
-              <xsd:attribute name="name" type="xsd:string" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="data">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
-              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
-              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="resheader">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" />
-            </xsd:complexType>
-          </xsd:element>
-        </xsd:choice>
-      </xsd:complexType>
-    </xsd:element>
-  </xsd:schema>
-  <resheader name="resmimetype">
-    <value>text/microsoft-resx</value>
-  </resheader>
-  <resheader name="version">
-    <value>2.0</value>
-  </resheader>
-  <resheader name="reader">
-    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-</root>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/HiveServerManagementConsole.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/HiveServerManagementConsole.cs	(revision 4422)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/HiveServerManagementConsole.cs	(revision 4423)
@@ -345,5 +345,11 @@
       foreach (ResourceDto resource in clientGroup.Resources) {
         if (resource is SlaveDto) {
-          int percentageUsage = CapacityRam(((SlaveDto)resource).NrOfCores, ((SlaveDto)resource).NrOfFreeCores);
+          int percentageUsage;
+          if (((SlaveDto)resource).NrOfCores.HasValue && ((SlaveDto)resource).NrOfFreeCores.HasValue) {
+            percentageUsage = CapacityRam(((SlaveDto)resource).NrOfCores.Value, ((SlaveDto)resource).NrOfFreeCores.Value);
+          } else {
+            percentageUsage = 0;
+          }
+
           int usage = 3;
           if ((((SlaveDto)resource).State != SlaveState.Offline) &&
@@ -427,8 +433,7 @@
 
       lblJobName.Text = job.Id.ToString();
-      if (job.Percentage != null) {
-        progressJob.Value = (int)(currentJob.Percentage * 100);
-        lblProgress.Text = (int)(currentJob.Percentage * 100) + "% calculated";
-      }
+
+      progressJob.Value = (int)(currentJob.ExecutionTime.TotalDays % 1) * progressJob.Maximum;
+      lblProgress.Text = currentJob.ExecutionTime.ToString();
 
       ListViewItem lvi = new ListViewItem();
@@ -443,9 +448,9 @@
       lvJobDetails.Items.Add(lvi);
 
-      if (job.ParentJob != null) {
+      if (job.ParentJobId != null) {
         lvi = null;
         lvi = new ListViewItem();
         lvi.Text = "Parent job:";
-        lvi.SubItems.Add(job.ParentJob.ToString());
+        lvi.SubItems.Add(job.ParentJobId.ToString());
         lvJobDetails.Items.Add(lvi);
       }
@@ -497,5 +502,10 @@
 
       if (currentSlave != null) {
-        int percentageUsage = CapacityRam(currentSlave.NrOfCores, currentSlave.NrOfFreeCores);
+        int percentageUsage;
+        if (currentSlave.NrOfCores.HasValue && currentSlave.NrOfFreeCores.HasValue) {
+          percentageUsage = CapacityRam(currentSlave.NrOfCores.Value, currentSlave.NrOfFreeCores.Value);
+        } else {
+          percentageUsage = 0;
+        }
         int usage = 3;
         if ((currentSlave.State != SlaveState.Offline) && (currentSlave.State != SlaveState.NullState)) {
@@ -807,5 +817,5 @@
             if (job.State != JobState.Offline) {
               if ((!IsEqual(job.Slave, jobold.Slave)) || (job.State != jobold.State)
-                   || (job.Percentage != jobold.Percentage)) {
+                   || (job.ExecutionTime != jobold.ExecutionTime)) {
                 change = true;
               }
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/app.config
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/app.config	(revision 4422)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/app.config	(revision 4423)
@@ -35,9 +35,9 @@
     </bindings>
     <client>
-      <endpoint address="http://localhost:9000/ServerConsoleService" behaviorConfiguration="ServerConsoleBehaviour"
+      <endpoint address="http://blade12.hpc.fh-hagenberg.at:9000/ServerConsoleService" behaviorConfiguration="ServerConsoleBehaviour"
           binding="wsHttpBinding" bindingConfiguration="ServerConsoleHttpEndpoint"
           contract="HeuristicLab.Hive.Contracts.Interfaces.IServerConsoleFacade" name="ServerConsoleHttpEndpoint">
         <identity>
-          <certificate encodedValue="AwAAAAEAAAAUAAAAJ5p7xBv8o/BZ9Lp1c1d+F13FxN8gAAAAAQAAAPIBAAAwggHuMIIBW6ADAgECAhBvZlgTCjsfjEG5QUX7yOhOMAkGBSsOAwIdBQAwFDESMBAGA1UEAxMJbG9jYWxob3N0MB4XDTEwMDgzMDA5MTMyMVoXDTM5MTIzMTIzNTk1OVowFDESMBAGA1UEAxMJbG9jYWxob3N0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCbjJrhOtSpfFz51JPvdfxMVSKqnWhfzjrZvtwpVsy8D589m3SeS6AalWwtkpPCR2C+a4GKo9e689o0+BtuOugypAWqkUhkz//XLvUp5KPNB7igY7he4ngMLp4GsWBWZdl+P8g29t5+nde1Tiv6dPzx5YgfB9lrvZzaS6TT/eNasQIDAQABo0kwRzBFBgNVHQEEPjA8gBBPTuRH17g8MfpeT/ODWdXuoRYwFDESMBAGA1UEAxMJbG9jYWxob3N0ghBvZlgTCjsfjEG5QUX7yOhOMAkGBSsOAwIdBQADgYEAUpgK4sUxAqwR8eyRK8cmyzhhN31xN8/nKPIo9cETaNvjJXL8zO7DeXCyyiBETAkfnhIChRIAmE/PjxvFdB2fOuQY3/OHrobai+G7IQ8SHF+AKdx7cJXt0h4Okny4DpPjQl4V9P2lZaG8fVXmpKhpeZ+ChA8Y/xPCDzTzLleQ/mY=" />
+          <certificate encodedValue="AwAAAAEAAAAUAAAA0FkTGjOA2/0cZmFlIwFildV5a/ogAAAAAQAAACgCAAAwggIkMIIBkaADAgECAhCcCYkXdzUDsEzY5+POfdYRMAkGBSsOAwIdBQAwJjEkMCIGA1UEAxMbYmxhZGUxMi5ocGMuZmgtaGFnZW5iZXJnLmF0MB4XDTEwMDkxNTE0MjkyNFoXDTM5MTIzMTIzNTk1OVowJjEkMCIGA1UEAxMbYmxhZGUxMi5ocGMuZmgtaGFnZW5iZXJnLmF0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDN/VsuexELvneBS+KjIT4z1oj8VwitpZJDhCVxVM1hBVAXRJ9qE0zwFwen6KWRXKMx0wZvm47CdkENO0krsqfliQRKb0hcMin+37X8u1Xk51qebV3M0kUAEpsRT6RehQD41+iGe1GmIaLksCEYaH80wPWI7F3N/tN+5svizD0sfQIDAQABo1swWTBXBgNVHQEEUDBOgBBJWfbAcVJ+egMO9eh/uP3hoSgwJjEkMCIGA1UEAxMbYmxhZGUxMi5ocGMuZmgtaGFnZW5iZXJnLmF0ghCcCYkXdzUDsEzY5+POfdYRMAkGBSsOAwIdBQADgYEApOwttaruQRFtS8SWslEDt+aKzIUnfKrJ+7U7Fml5+QT7G4+5bXnfOs5gcWKDQyyap9y3AJpjPnGaLzwb/8LwlqKXePRQvOW44O5JLwOTo3TD4ZPKANuBblD7J7TYGyXKTUQcytfQl1uOxELWNBj4IpUEbR1C/S4RmupMivLNQoA=" />
         </identity>
       </endpoint>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/Authorization/AuthorizationManager.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/Authorization/AuthorizationManager.cs	(revision 4422)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/Authorization/AuthorizationManager.cs	(revision 4423)
@@ -21,5 +21,5 @@
     }
 
-    public void AuthorizeForJobs(params Guid[] jobIds) {
+    public void AuthorizeJobs(params Guid[] jobIds) {
       if (!IsAuthorizedForJobs(jobIds)) {
         throw new SecurityException("User '" + Identity.UserName + "' is not authorized to access job (Id: " + string.Join(", ", jobIds.Select(x => x.ToString()).ToArray()) + ")");
@@ -30,4 +30,10 @@
       return DaoLocator.JobDao.IsUserAuthorizedForJobs(UserId, jobIds);
     }
+
+    public void Authorize(Guid userId) {
+      if (userId != this.UserId) {
+        throw new SecurityException("User '" + Identity.UserName + "' is not authorized to access object");
+      }
+    }
   }
 }
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/DaoLocator.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/DaoLocator.cs	(revision 4422)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/DaoLocator.cs	(revision 4423)
@@ -14,4 +14,5 @@
     [ThreadStatic] private static IPluginInfoDao pluginInfoDao;
     [ThreadStatic] private static IUptimeCalendarDao uptimeCalendarDao;
+    [ThreadStatic] private static IHiveExperimentDao hiveExperimentDao;
 
     public static ISlaveDao SlaveDao {
@@ -62,4 +63,12 @@
       }
     }
+
+    public static IHiveExperimentDao HiveExperimentDao {
+      get {
+        if (hiveExperimentDao == null)
+          hiveExperimentDao = new HiveExperimentDao();
+        return hiveExperimentDao;
+      }
+    }
   }
 }
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/DefaultScheduler.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/DefaultScheduler.cs	(revision 4422)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/DefaultScheduler.cs	(revision 4423)
@@ -40,8 +40,10 @@
             }
 
-            LinkedList<JobDto> offlineJobsForSlave = new LinkedList<JobDto>(DaoLocator.JobDao.FindFittingJobs(JobState.Offline, slave.NrOfFreeCores, slave.FreeMemory, slave.Id));
-            if (offlineJobsForSlave != null && offlineJobsForSlave.Count > 0) {
-              jobToCalculate = offlineJobsForSlave.First.Value;
-              UpdateJobAsCalculating(jobToCalculate, slave);
+            if (slave.NrOfFreeCores.HasValue && slave.FreeMemory.HasValue) {
+              LinkedList<JobDto> offlineJobsForSlave = new LinkedList<JobDto>(DaoLocator.JobDao.FindFittingJobs(JobState.Offline, slave.NrOfFreeCores.Value, slave.FreeMemory.Value, slave.Id));
+              if (offlineJobsForSlave != null && offlineJobsForSlave.Count > 0) {
+                jobToCalculate = offlineJobsForSlave.First.Value;
+                UpdateJobAsCalculating(jobToCalculate, slave);
+              }
             }
           }
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/Facades/ClientFacade.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/Facades/ClientFacade.cs	(revision 4422)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/Facades/ClientFacade.cs	(revision 4423)
@@ -62,5 +62,5 @@
     public Response RequestSnapshot(Guid jobId) {
       using (contextFactory.GetContext()) {
-        ServiceLocator.GetAuthorizationManager().AuthorizeForJobs(jobId);
+        ServiceLocator.GetAuthorizationManager().AuthorizeJobs(jobId);
         return jobManager.RequestSnapshot(jobId);
       }
@@ -71,5 +71,5 @@
     public ResponseObject<SerializedJob> GetLastSerializedResult(Guid jobId) {
       using (contextFactory.GetContext(false)) {
-        ServiceLocator.GetAuthorizationManager().AuthorizeForJobs(jobId);
+        ServiceLocator.GetAuthorizationManager().AuthorizeJobs(jobId);
         return jobManager.GetLastSerializedResult(jobId);
       }
@@ -80,5 +80,5 @@
     public ResponseObject<SerializedJob> GetSnapshotResult(Guid jobId) {
       using (contextFactory.GetContext(false)) {
-        ServiceLocator.GetAuthorizationManager().AuthorizeForJobs(jobId);
+        ServiceLocator.GetAuthorizationManager().AuthorizeJobs(jobId);
         return jobManager.GetSnapshotResult(jobId);
       }
@@ -89,5 +89,5 @@
     public ResponseObject<JobDto> GetJobById(Guid jobId) {
       using (contextFactory.GetContext(false)) {
-        ServiceLocator.GetAuthorizationManager().AuthorizeForJobs(jobId);
+        ServiceLocator.GetAuthorizationManager().AuthorizeJobs(jobId);
         return jobManager.GetJobById(jobId);
       }
@@ -98,5 +98,5 @@
     public Response AbortJob(Guid jobId) {
       using (contextFactory.GetContext()) {
-        ServiceLocator.GetAuthorizationManager().AuthorizeForJobs(jobId);
+        ServiceLocator.GetAuthorizationManager().AuthorizeJobs(jobId);
         return jobManager.AbortJob(jobId);
       }
@@ -107,5 +107,5 @@
     public ResponseObject<JobResultList> GetJobResults(IEnumerable<Guid> jobIds) {
       using (contextFactory.GetContext(false)) {
-        ServiceLocator.GetAuthorizationManager().AuthorizeForJobs(jobIds.ToArray());
+        ServiceLocator.GetAuthorizationManager().AuthorizeJobs(jobIds.ToArray());
         return jobManager.GetJobResults(jobIds);
       }
@@ -117,5 +117,5 @@
       using (contextFactory.GetContext(false)) {
         if (parentJobId.HasValue) {
-          ServiceLocator.GetAuthorizationManager().AuthorizeForJobs(parentJobId.Value);
+          ServiceLocator.GetAuthorizationManager().AuthorizeJobs(parentJobId.Value);
         } 
         // If parentJobId is null, GetChildJobResults will filter the results for the current user
@@ -123,7 +123,47 @@
       }
     }
+
+    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
+    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Client)]
+    public ResponseObject<HiveExperimentDtoList> GetHiveExperiments() {
+      using (contextFactory.GetContext(false)) {
+        return jobManager.GetHiveExperiments();
+      }
+    }
+
+    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
+    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Client)]
+    public ResponseObject<HiveExperimentDto> UpdateHiveExperiment(HiveExperimentDto hiveExperimentDto) {
+      using (contextFactory.GetContext()) {
+        if (hiveExperimentDto.UserId == Guid.Empty) {
+          hiveExperimentDto.UserId = ServiceLocator.GetAuthorizationManager().UserId;
+        } else {
+          ServiceLocator.GetAuthorizationManager().Authorize(hiveExperimentDto.UserId);
+        }
+        return jobManager.UpdateHiveExperiment(hiveExperimentDto);
+      }
+    }
+
+    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
+    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Client)]
+    public Response DeleteHiveExperiment(Guid hiveExperimentId) {
+      using (contextFactory.GetContext()) {
+        var hiveExperimentDto = DaoLocator.HiveExperimentDao.FindById(hiveExperimentId);
+        if (hiveExperimentDto != null) {
+          ServiceLocator.GetAuthorizationManager().Authorize(hiveExperimentDto.UserId);
+        }
+        return jobManager.DeleteHiveExperiment(hiveExperimentId);
+      }
+    }
+
+    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
+    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Client)]
+    public ResponseObject<JobDto> AddChildJob(Guid parentJobId, SerializedJob serializedJob) {
+      using (contextFactory.GetContext()) {
+        ServiceLocator.GetAuthorizationManager().AuthorizeJobs(parentJobId);
+        return jobManager.AddChildJob(parentJobId, serializedJob);
+      }
+    }
     #endregion
-
-
   }
 }
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/Facades/ServerConsoleFacade.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/Facades/ServerConsoleFacade.cs	(revision 4422)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/Facades/ServerConsoleFacade.cs	(revision 4423)
@@ -237,5 +237,5 @@
     [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
     public ResponseObject<JobResultList> GetChildJobResults(Guid? parentJobId, bool recursive, bool includeParent) {
-      using (contextFactory.GetContext()) {
+      using (contextFactory.GetContext(false)) {
         return jobManager.GetChildJobResults(parentJobId, recursive, includeParent);
       }
@@ -255,4 +255,33 @@
       }
     }
+
+    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
+    public ResponseObject<HiveExperimentDtoList> GetHiveExperiments() {
+      using (contextFactory.GetContext(false)) {
+        return jobManager.GetHiveExperiments();
+      }
+    }
+
+    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
+    public ResponseObject<HiveExperimentDto> UpdateHiveExperiment(HiveExperimentDto hiveExperimentDto) {
+      using (contextFactory.GetContext()) {
+        return jobManager.UpdateHiveExperiment(hiveExperimentDto);
+      }
+    }
+
+    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
+    public Response DeleteHiveExperiment(Guid hiveExperimentId) {
+      using (contextFactory.GetContext()) {
+        return jobManager.DeleteHiveExperiment(hiveExperimentId);
+      }
+    }
+
+    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
+    public Response DeleteChildJobs(Guid jobId) {
+      using (contextFactory.GetContext()) {
+        return jobManager.DeleteChildJobs(jobId);
+      }
+    }
+
   }
 }
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/Facades/SlaveFacade.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/Facades/SlaveFacade.cs	(revision 4422)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/Facades/SlaveFacade.cs	(revision 4423)
@@ -62,5 +62,5 @@
     [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Slave)]
     public ResponseHeartBeat ProcessHeartBeat(HeartBeatData hbData) {
-      using (contextFactory.GetContext()) {
+      using (contextFactory.GetContext(false)) { // due to concurrency issues with lifecycle-heartbeat do the transaction inside
         return slaveCommunicator.ProcessHeartBeat(hbData);
       }
@@ -77,8 +77,8 @@
     [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
     [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Slave)]
-    public ResponseResultReceived StoreFinishedJobResult(Guid slaveId, Guid jobId, byte[] result, double percentage, string exception) {
-      using (contextFactory.GetContext()) {
-        ServiceLocator.GetAuthorizationManager().AuthorizeForJobs(jobId);
-        return slaveCommunicator.StoreFinishedJobResult(slaveId, jobId, result, percentage, exception);
+    public ResponseResultReceived StoreFinishedJobResult(Guid slaveId, Guid jobId, byte[] result, TimeSpan executionTime, string exception) {
+      using (contextFactory.GetContext()) {
+        ServiceLocator.GetAuthorizationManager().AuthorizeJobs(jobId);
+        return slaveCommunicator.StoreFinishedJobResult(slaveId, jobId, result, executionTime, exception);
       }
     }
@@ -108,8 +108,8 @@
     [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
     [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Slave)]
-    public ResponseResultReceived ProcessSnapshot(Guid slaveId, Guid jobId, byte[] result, double percentage, string exception) {
-      using (contextFactory.GetContext()) {
-        ServiceLocator.GetAuthorizationManager().AuthorizeForJobs(jobId);
-        return slaveCommunicator.ProcessSnapshot(slaveId, jobId, result, percentage, exception);
+    public ResponseResultReceived ProcessSnapshot(Guid slaveId, Guid jobId, byte[] result, TimeSpan executionTime, string exception) {
+      using (contextFactory.GetContext()) {
+        ServiceLocator.GetAuthorizationManager().AuthorizeJobs(jobId);
+        return slaveCommunicator.ProcessSnapshot(slaveId, jobId, result, executionTime, exception);
       }
     }
@@ -136,5 +136,4 @@
       using (contextFactory.GetContext()) {
         return jobManager.AddChildJob(parentJobId, serializedJob);
-        
       }
     }
@@ -149,4 +148,5 @@
     [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Slave)]
     public Stream GetStreamedJob(Guid slaveId) {
+      ServiceLocator.GetLifecycleManager().JobsCurrentlyTransferring++;
       using (contextFactory.GetContext(false)) {
         ResponseObject<JobDto> job = null;
@@ -170,4 +170,5 @@
             stream.Dispose();
           }
+          ServiceLocator.GetLifecycleManager().JobsCurrentlyTransferring--;
         });
 
@@ -221,4 +222,13 @@
       }
     }
+
+    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
+    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Slave)]
+    public Response DeleteChildJobs(Guid jobId) {
+      using (contextFactory.GetContext()) {
+        return jobManager.DeleteChildJobs(jobId);
+      }
+    }
+
     #endregion
   }
Index: anches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/HivePermissionManager.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/HivePermissionManager.cs	(revision 4422)
+++ 	(revision )
@@ -1,58 +1,0 @@
-﻿using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using HeuristicLab.Security.Contracts.Interfaces;
-using HeuristicLab.DataAccess;
-using HeuristicLab.Security.Contracts.BusinessObjects;
-using HeuristicLab.Hive.Contracts.BusinessObjects;
-using HeuristicLab.Hive.Contracts.Interfaces;
-using HeuristicLab.Hive.Contracts;
-using HeuristicLab.Hive.Server.Core.InternalInterfaces;
-
-namespace HeuristicLab.Hive.Server.Core {
-  public class HivePermissionManager : IHivePermissionManager {
-    
-    private IPermissionManager permManager = ServiceLocator.GetPermissionManager();
-
-    private IClientManager clientManager = ServiceLocator.GetClientManager();
-
-    /// <summary>
-    /// Authenticates a user and returns a valid guid if success.
-    /// </summary>
-    /// <param name="username"></param>
-    /// <param name="password"></param>
-    /// <returns></returns>
-    public Guid Login(string username, string password) {
-      return permManager.Authenticate(username, password);
-    }
-
-    /// <summary>
-    /// Checks if a user has permission for a specified action.
-    /// </summary>
-    /// <param name="sessionID">The current session.</param>
-    /// <param name="actionID">A pre-defined action that requires permission.</param>
-    /// <param name="entityID">A resource (Job,...)</param>
-    /// <returns></returns>
-    public bool CheckPermission(Guid sessionID, Guid actionID, Guid entityId) {
-      bool hasPerm = permManager.CheckPermission(sessionID, actionID, entityId);
-      
-      if (!hasPerm) {
-        if ((actionID == PermissiveSecurityAction.Add_Job) ||
-            (actionID == PermissiveSecurityAction.Remove_Job) ||
-            (actionID == PermissiveSecurityAction.Request_Snapshot)||
-            (actionID==PermissiveSecurityAction.Abort_Job))
-          if (CheckPermissionHelper(sessionID, actionID, entityId)) return true;
-      }
-
-      return hasPerm;      
-    }
-
-    private bool CheckPermissionHelper(Guid sessionId, Guid actionId, Guid entityId) {
-      IList<ClientGroup> groups = clientManager.GetAllGroupsOfResource(entityId).Obj;
-      foreach (ClientGroup group in groups) 
-        if (CheckPermission(sessionId, actionId, group.Id)) return true;
-      return false;
-    }
-  }
-}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/InternalInterfaces/IAuthorizationManager.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/InternalInterfaces/IAuthorizationManager.cs	(revision 4422)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/InternalInterfaces/IAuthorizationManager.cs	(revision 4423)
@@ -3,5 +3,7 @@
 namespace HeuristicLab.Hive.Server.Core.InternalInterfaces {
   public interface IAuthorizationManager {
-
+    /// <summary>
+    /// Returns the UserId of the currently authenticated user
+    /// </summary>
     Guid UserId { get; }
 
@@ -11,5 +13,10 @@
     /// </summary>
     /// <exception cref="SecurityException">thrown when access denied</exception>
-    void AuthorizeForJobs(params Guid[] jobId);
+    void AuthorizeJobs(params Guid[] jobId);
+
+    /// <summary>
+    /// Compares the current UserId with the given userId and takes appropriate actions if the mismatch
+    /// </summary>
+    void Authorize(Guid userId);
   }
 }
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/JobManager.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/JobManager.cs	(revision 4422)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/JobManager.cs	(revision 4423)
@@ -50,6 +50,6 @@
       lifecycleManager = ServiceLocator.GetLifecycleManager();
 
-      lifecycleManager.RegisterStartup(new EventHandler(lifecycleManager_OnStartup));
-      lifecycleManager.RegisterShutdown(new EventHandler(lifecycleManager_OnShutdown));
+      lifecycleManager.Started += new EventHandler(lifecycleManager_Started);
+      lifecycleManager.Stopped += new EventHandler(lifecycleManager_Stopped);
     }
 
@@ -59,5 +59,9 @@
       List<JobDto> allJobs = new List<JobDto>(DaoLocator.JobDao.FindAll());
       foreach (JobDto curJob in allJobs) {
-        if (curJob.State != JobState.Calculating && curJob.State != JobState.Finished) {
+        if (curJob.State != JobState.Calculating &&
+            curJob.State != JobState.Finished &&
+            curJob.State != JobState.Aborted &&
+            curJob.State != JobState.Failed &&
+            curJob.State != JobState.WaitForChildJobs) {
           DaoLocator.JobDao.SetJobOffline(curJob);
         }
@@ -65,5 +69,5 @@
     }
 
-    private void lifecycleManager_OnStartup(object sender, EventArgs e) {
+    private void lifecycleManager_Started(object sender, EventArgs e) {
       Logger.Info("Startup Event Fired, Checking DB for consistency");
       CheckForDeadJobs();
@@ -71,5 +75,5 @@
     }
 
-    private void lifecycleManager_OnShutdown(object sender, EventArgs e) {
+    private void lifecycleManager_Stopped(object sender, EventArgs e) {
       Logger.Info("Startup Event Fired, Checking DB for consistency");
       CheckForDeadJobs();
@@ -155,6 +159,7 @@
 
       if (job != null && job.JobInfo != null) {
-        if (job.JobInfo.State != JobState.Offline) {
-          response.StatusMessage = ResponseStatus.AddNewJob_JobStateMustBeOffline;
+        // only Offline and WaitForChildJobs are allowed
+        if (job.JobInfo.State != JobState.Offline && job.JobInfo.State != JobState.WaitForChildJobs) {
+          response.StatusMessage = ResponseStatus.AddNewJob_InvalidJobState;
           return response;
         }
@@ -228,5 +233,9 @@
       response.Obj.JobInfo = job;
 
-      response.Obj.SerializedJobData = DaoLocator.JobDao.GetBinaryJobFile(jobId);
+      if (job != null) {
+        response.Obj.SerializedJobData = DaoLocator.JobDao.GetBinaryJobFile(jobId);
+      } else {
+        response.StatusMessage = ResponseStatus.GetLastSerializedResult_JobDoesNotExist;
+      }
 
       return response;
@@ -285,9 +294,4 @@
         //response.Success = true;
         response.StatusMessage = ResponseStatus.AbortJob_AbortAlreadyRequested;
-        return response; // no commit needed
-      }
-      if (job.State != JobState.Calculating && job.State != JobState.SnapshotRequested && job.State != JobState.SnapshotSent) {
-        //response.Success = false;
-        response.StatusMessage = ResponseStatus.AbortJob_JobIsNotBeeingCalculated;
         return response; // no commit needed
       }
@@ -315,5 +319,5 @@
           DateFinished = job.DateFinished,
           Exception = job.Exception,
-          Percentage = job.Percentage
+          ExecutionTime = job.ExecutionTime
         });
       }
@@ -352,10 +356,10 @@
             DateFinished = job.DateFinished,
             Exception = job.Exception,
-            Percentage = job.Percentage,
-            ParentJobId = job.ParentJob != null ? new Nullable<Guid>(job.ParentJob.Id) : null
+            ExecutionTime = job.ExecutionTime,
+            ParentJobId = job.ParentJobId
           });
         }
       }
-      
+
       response.Obj = jobResultList;
       return response;
@@ -365,5 +369,5 @@
       JobDto parentJob = DaoLocator.JobDao.FindById(parentJobId);
 
-      serializedJob.JobInfo.ParentJob = parentJob;
+      serializedJob.JobInfo.ParentJobId = parentJob.Id;
       serializedJob.JobInfo.UserId = parentJob.UserId;
       serializedJob.JobInfo.AssignedResourceIds = parentJob.AssignedResourceIds;
@@ -376,6 +380,5 @@
 
       jobDto.State = serializedJob.JobInfo.State;
-      jobDto.Percentage = serializedJob.JobInfo.Percentage;
-      
+      jobDto.ExecutionTime = serializedJob.JobInfo.ExecutionTime;
 
       DaoLocator.JobDao.SetBinaryJobFile(serializedJob.JobInfo.Id, serializedJob.SerializedJobData);
@@ -390,4 +393,50 @@
     }
 
+
+    public ResponseObject<HiveExperimentDtoList> GetHiveExperiments() {
+      ResponseObject<HiveExperimentDtoList> response = new ResponseObject<HiveExperimentDtoList>();
+      IEnumerable<HiveExperimentDto> hiveExperiments = DaoLocator.HiveExperimentDao.FindAllByUserId(ServiceLocator.GetAuthorizationManager().UserId);
+      response.Obj = new HiveExperimentDtoList(hiveExperiments);
+      response.StatusMessage = ResponseStatus.Ok;
+      return response;
+    }
+
+    public ResponseObject<HiveExperimentDto> UpdateHiveExperiment(HiveExperimentDto hiveExperimentDto) {
+      ResponseObject<HiveExperimentDto> response = new ResponseObject<HiveExperimentDto>();
+      if (hiveExperimentDto.Id == Guid.Empty) {
+        response.Obj = DaoLocator.HiveExperimentDao.Insert(hiveExperimentDto);
+      } else {
+        DaoLocator.HiveExperimentDao.Update(hiveExperimentDto);
+        response.Obj = hiveExperimentDto;
+      }
+      response.StatusMessage = ResponseStatus.Ok;
+      return response;
+    }
+
+    public Response DeleteHiveExperiment(Guid hiveExperimentId) {
+      Response response = new Response();
+      try {
+        DaoLocator.HiveExperimentDao.Delete(hiveExperimentId);
+      }
+      catch (Exception) {
+        response.StatusMessage = ResponseStatus.DeleteHiveExperiment_Failed;
+      }
+      return response;
+    }
+
+    public Response DeleteChildJobs(Guid jobId) {
+      Response response = new Response();
+      try {
+        IEnumerable<JobDto> childs = DaoLocator.JobDao.FindJobsByParentId(jobId, true);
+        foreach (JobDto childJob in childs) {
+          DaoLocator.JobDao.Delete(childJob.Id);
+        }
+      }
+      catch (Exception) {
+        response.StatusMessage = ResponseStatus.DeleteChildJobs_Failed;
+      }
+      return response;
+    }
+
     #endregion
 
@@ -420,6 +469,4 @@
 
 
-    
-
   }
 }
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/LifecycleManager.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/LifecycleManager.cs	(revision 4422)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/LifecycleManager.cs	(revision 4423)
@@ -28,51 +28,78 @@
 using System.Timers;
 using HeuristicLab.DataAccess.Interfaces;
+using HeuristicLab.Tracing;
+using System.Threading;
 
 namespace HeuristicLab.Hive.Server.Core {
-  class LifecycleManager: ILifecycleManager {
-    private static Timer timer =
-      new Timer();
+  class LifecycleManager : ILifecycleManager {
+    private AutoResetEvent waitHandle;
+    private Thread thread;
+    private bool shutdownRequested;
 
-    private static event EventHandler OnServerHeartbeat;
-    private static event EventHandler OnStartup;
-    private static event EventHandler OnShutdown;
+    private TimeSpan interval = new TimeSpan(0, 0, 10);
+    public TimeSpan Interval {
+      get { return interval; }
+      set { interval = value; }
+    }
+
+    private int jobsCurrentlyTransfering = 0;
+    public int JobsCurrentlyTransferring {
+      get { return jobsCurrentlyTransfering; }
+      set {
+        if (jobsCurrentlyTransfering != value) {
+          jobsCurrentlyTransfering = value;
+          Logger.Info("JobsCurrentlyTransfering: " + jobsCurrentlyTransfering);
+        }
+      }
+    }
 
     #region ILifecycleManager Members
 
-    public void RegisterHeartbeat(EventHandler handler) {
-      OnServerHeartbeat += handler;
-    }
-
-    public void RegisterStartup(EventHandler handler) {
-      OnStartup += handler;
-    }
-
-    public void RegisterShutdown(EventHandler handler) {
-      OnShutdown += handler;
-    }
-
-    public void Init() {
+    public void Start() {
+      Thread thread = new Thread(RunHeartbeatThread);
+      thread.Start();
       using (ServiceLocator.GetContextFactory().GetContext()) {
-        timer.Interval = new TimeSpan(0, 0, 10).TotalMilliseconds; // TODO: global constant needed
-        timer.Elapsed += new ElapsedEventHandler(timer_Elapsed);
-        timer.Start();
-
-        if (OnStartup != null)
-          OnStartup(this, null);
+        OnStarted();
       }
     }
 
-    void timer_Elapsed(object sender, ElapsedEventArgs e) {
+    private void RunHeartbeatThread() {
+      waitHandle = new AutoResetEvent(false);
+      shutdownRequested = false;
+      while (!shutdownRequested) {
+        using (ServiceLocator.GetContextFactory().GetContext(false)) {
+          OnServerHeartbeat();
+        }
+        waitHandle.WaitOne(this.Interval);
+      }
+      waitHandle.Close();
       using (ServiceLocator.GetContextFactory().GetContext()) {
-        if (OnServerHeartbeat != null)
-          OnServerHeartbeat(this, null);
+        OnStopped();
       }
     }
 
-    public void Shutdown() {
-      using (ServiceLocator.GetContextFactory().GetContext()) {
-        if (OnShutdown != null)
-          OnShutdown(this, null);
-      }
+    public void Stop() {
+      shutdownRequested = true;
+      if (waitHandle != null) waitHandle.Set();
+      if (thread != null) thread.Join();
+      thread = null;
+    }
+
+    public event EventHandler ServerHeartbeat;
+    private void OnServerHeartbeat() {
+      var handler = ServerHeartbeat;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public event EventHandler Started;
+    private void OnStarted() {
+      var handler = Started;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public event EventHandler Stopped;
+    private void OnStopped() {
+      var handler = Stopped;
+      if (handler != null) handler(this, EventArgs.Empty);
     }
 
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/Settings.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/Settings.cs	(revision 4422)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/Settings.cs	(revision 4423)
@@ -1,28 +1,25 @@
 ﻿namespace HeuristicLab.Hive.Server.Core.Properties {
-    
-    
-    // This class allows you to handle specific events on the settings class:
-    //  The SettingChanging event is raised before a setting's value is changed.
-    //  The PropertyChanged event is raised after a setting's value is changed.
-    //  The SettingsLoaded event is raised after the setting values are loaded.
-    //  The SettingsSaving event is raised before the setting values are saved.
-    public sealed partial class Settings {
-        
-        public Settings() {
-            // // To add event handlers for saving and changing settings, uncomment the lines below:
-            //
-            // this.SettingChanging += this.SettingChangingEventHandler;
-            //
-            // this.SettingsSaving += this.SettingsSavingEventHandler;
-            //
-        }
-        
-        private void SettingChangingEventHandler(object sender, System.Configuration.SettingChangingEventArgs e) {
-            // Add code to handle the SettingChangingEvent event here.
-        }
-        
-        private void SettingsSavingEventHandler(object sender, System.ComponentModel.CancelEventArgs e) {
-            // Add code to handle the SettingsSaving event here.
-        }
+  // This class allows you to handle specific events on the settings class:
+  //  The SettingChanging event is raised before a setting's value is changed.
+  //  The PropertyChanged event is raised after a setting's value is changed.
+  //  The SettingsLoaded event is raised after the setting values are loaded.
+  //  The SettingsSaving event is raised before the setting values are saved.
+  public sealed partial class Settings {
+    public Settings() {
+      // // To add event handlers for saving and changing settings, uncomment the lines below:
+      //
+      // this.SettingChanging += this.SettingChangingEventHandler;
+      //
+      // this.SettingsSaving += this.SettingsSavingEventHandler;
+      //
     }
+
+    private void SettingChangingEventHandler(object sender, System.Configuration.SettingChangingEventArgs e) {
+      // Add code to handle the SettingChangingEvent event here.
+    }
+
+    private void SettingsSavingEventHandler(object sender, System.ComponentModel.CancelEventArgs e) {
+      // Add code to handle the SettingsSaving event here.
+    }
+  }
 }
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/SlaveCommunicator.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/SlaveCommunicator.cs	(revision 4422)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/SlaveCommunicator.cs	(revision 4423)
@@ -45,18 +45,30 @@
   /// The SlaveCommunicator manages the whole communication with the slave
   /// </summary>
-  public class SlaveCommunicator : ISlaveCommunicator,
-    IInternalSlaveCommunicator {
+  public class SlaveCommunicator : ISlaveCommunicator, IInternalSlaveCommunicator {
     private static Dictionary<Guid, DateTime> lastHeartbeats = new Dictionary<Guid, DateTime>();
+
+    /// <summary>
+    /// Contains a list job JobIds which have been sent to a slave, but the slave has not yet sent 
+    /// a jobProgress of the job with a heartbeat, because he has not finished downloading/deserializing it.
+    /// The number value indicates a TimeToLive count that is decremented with each server-heartbeat.
+    /// When the number reaches zero, the jobs is assumed to be lost and is set Offline again.
+    /// </summary>
     private static Dictionary<Guid, int> newAssignedJobs = new Dictionary<Guid, int>();
+
+    /// <summary>
+    /// When a slave reconnects and he has finished results waiting it calls IsJobStillNeeded. If the finished 
+    /// result has not yet been collected from anywhere else, the job will be sent by the slave and the job state is set to Pending.
+    /// Now the job be in pending state until it is received from the reconnected slave or the TimeToLive value of this dictionary has reached zero.
+    /// </summary>
     private static Dictionary<Guid, int> pendingJobs = new Dictionary<Guid, int>();
+    private static int PENDING_TIMEOUT = 100;
 
     private static ReaderWriterLockSlim heartbeatLock = new ReaderWriterLockSlim(LockRecursionPolicy.SupportsRecursion);
 
-    //private ISessionFactory factory;
     private ILifecycleManager lifecycleManager;
     private IInternalJobManager jobManager;
     private IScheduler scheduler;
 
-    private static int PENDING_TIMEOUT = 100;
+    private static object slaveLocker = new object();
 
     /// <summary>
@@ -66,11 +78,9 @@
     /// </summary>
     public SlaveCommunicator() {
-      //factory = ServiceLocator.GetSessionFactory();
-
       lifecycleManager = ServiceLocator.GetLifecycleManager();
       jobManager = ServiceLocator.GetJobManager() as IInternalJobManager;
       scheduler = ServiceLocator.GetScheduler();
 
-      lifecycleManager.RegisterHeartbeat(new EventHandler(lifecycleManager_OnServerHeartbeat));
+      lifecycleManager.ServerHeartbeat += new EventHandler(lifecycleManager_OnServerHeartbeat);
     }
 
@@ -82,31 +92,28 @@
     /// <param name="e"></param>
     void lifecycleManager_OnServerHeartbeat(object sender, EventArgs e) {
-      Logger.Debug("Server Heartbeat ticked");
-
-      // [chn] why is transaction management done here
-      using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions { IsolationLevel = ApplicationConstants.ISOLATION_LEVEL_SCOPE })) {
-        List<SlaveDto> allSlaves = new List<SlaveDto>(DaoLocator.SlaveDao.FindAll());
-
-        foreach (SlaveDto slave in allSlaves) {
-          if (slave.State != SlaveState.Offline && slave.State != SlaveState.NullState) {
+      // this block can conflict with the heartbeats from a slave (which also updates the slave-records)
+      lock (slaveLocker) {
+        Logger.Debug("Server Heartbeat ticked");
+        List<Guid> slaveIds = DaoLocator.SlaveDao.FindAll().Select(s => s.Id).ToList();
+
+        foreach (Guid slaveId in slaveIds) {
+          using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions { IsolationLevel = ApplicationConstants.ISOLATION_LEVEL_SCOPE })) {
             heartbeatLock.EnterUpgradeableReadLock();
+            SlaveDto slave = DaoLocator.SlaveDao.FindById(slaveId);
 
             if (!lastHeartbeats.ContainsKey(slave.Id)) {
-              Logger.Info("Slave " + slave.Id +
-                              " wasn't offline but hasn't sent heartbeats - setting offline");
-              slave.State = SlaveState.Offline;
-              DaoLocator.SlaveDao.Update(slave);
-              Logger.Info("Slave " + slave.Id +
-                              " wasn't offline but hasn't sent heartbeats - Resetting all his jobs");
-              foreach (JobDto job in DaoLocator.JobDao.FindActiveJobsOfSlave(slave)) {
-                //maybe implementa n additional Watchdog? Till then, just set them offline..
-                DaoLocator.JobDao.SetJobOffline(job);
-              }
+              Logger.Info("No previous hearbeats are available for " + slave.Id + " although it is in state " + slave.State);
+
+              // add a heartbeat NOW and give the slave time to say something for HEARTBEAT_MAX_DIF
+              // otherwise alls the slaves jobs would be aborted, which is not desirable if the server has just been restarted
+              heartbeatLock.EnterWriteLock();
+              lastHeartbeats.Add(slave.Id, DateTime.Now);
+              heartbeatLock.ExitWriteLock();
             } else {
-              DateTime lastHbOfSlave = lastHeartbeats[slave.Id];
-
-              TimeSpan dif = DateTime.Now.Subtract(lastHbOfSlave);
+              DateTime lastHeartbeatOfSlave = lastHeartbeats[slave.Id];
+
+              TimeSpan diff = DateTime.Now.Subtract(lastHeartbeatOfSlave);
               // check if time between last hearbeat and now is greather than HEARTBEAT_MAX_DIF
-              if (dif.TotalSeconds > ApplicationConstants.HEARTBEAT_MAX_DIF) {
+              if (diff.TotalSeconds > ApplicationConstants.HEARTBEAT_MAX_DIF) {
                 // if slave calculated jobs, the job must be reset
                 Logger.Info("Slave timed out and is on RESET");
@@ -119,8 +126,6 @@
                 }
                 Logger.Debug("setting slave offline");
-                // slave must be set offline
                 slave.State = SlaveState.Offline;
 
-                //slaveAdapter.Update(slave);
                 DaoLocator.SlaveDao.Update(slave);
 
@@ -131,29 +136,21 @@
               }
             }
-
             heartbeatLock.ExitUpgradeableReadLock();
-          } else {
-            //TODO: RLY neccesary?
-            //HiveLogger.Info(this.ToString() + ": Slave " + slave.Id + " has wrong state: Shouldn't have offline or nullstate, has " + slave.State);
-            heartbeatLock.EnterWriteLock();
-            //HiveLogger.Info(this.ToString() + ": Slave " + slave.Id + " has wrong state: Resetting all his jobs");
-            if (lastHeartbeats.ContainsKey(slave.Id))
-              lastHeartbeats.Remove(slave.Id);
-            foreach (JobDto job in DaoLocator.JobDao.FindActiveJobsOfSlave(slave)) {
-              DaoLocator.JobDao.SetJobOffline(job);
-            }
-            heartbeatLock.ExitWriteLock();
-          }
-        }
-        CheckForPendingJobs();
-        //        DaoLocator.DestroyContext();
-        scope.Complete();
-      }
+            scope.Complete();
+          } // using
+        } // foreach
+
+        using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions { IsolationLevel = ApplicationConstants.ISOLATION_LEVEL_SCOPE })) {
+          CheckForPendingJobs();
+          scope.Complete();
+        }
+        Logger.Debug("Server Heartbeat ended");
+      } // lock
     }
 
     private void CheckForPendingJobs() {
-      IList<JobDto> pendingJobsInDB = new List<JobDto>(DaoLocator.JobDao.GetJobsByState(JobState.Pending));
-
-      foreach (JobDto currJob in pendingJobsInDB) {
+      IList<JobDto> pendingJobsInDb = new List<JobDto>(DaoLocator.JobDao.GetJobsByState(JobState.Pending));
+
+      foreach (JobDto currJob in pendingJobsInDb) {
         lock (pendingJobs) {
           if (pendingJobs.ContainsKey(currJob.Id)) {
@@ -192,8 +189,9 @@
       slave.CalendarSyncStatus = dbSlave != null ? dbSlave.CalendarSyncStatus : CalendarState.NotAllowedToFetch;
       slave.State = SlaveState.Idle;
-
-      if (dbSlave == null)
+      slave.Login = DateTime.Now;
+
+      if (dbSlave == null) {
         DaoLocator.SlaveDao.Insert(slave);
-      else {
+      } else {
         DaoLocator.SlaveDao.Update(slave);
       }
@@ -207,6 +205,5 @@
       SlaveDto slave = DaoLocator.SlaveDao.FindById(slaveId);
       if (slave == null) {
-        //response.Success = false;
-        response.StatusMessage = ResponseStatus.GetCalendar_ResourceNotFound;
+        response.StatusMessage = ResponseStatus.GetCalendar_ResourceDoesNotExist;
         return response;
       }
@@ -217,7 +214,5 @@
       if (appointments.Count() == 0) {
         response.StatusMessage = ResponseStatus.GetCalendar_NoCalendarFound;
-        //response.Success = false;
       } else {
-        //response.Success = true;
         response.Appointments = appointments;
       }
@@ -232,6 +227,5 @@
       SlaveDto slave = DaoLocator.SlaveDao.FindById(slaveId);
       if (slave == null) {
-        //response.Success = false;
-        response.StatusMessage = ResponseStatus.GetCalendar_ResourceNotFound;
+        response.StatusMessage = ResponseStatus.GetCalendar_ResourceDoesNotExist;
         return response;
       }
@@ -251,29 +245,52 @@
     /// <returns></returns>
     public ResponseHeartBeat ProcessHeartBeat(HeartBeatData heartbeatData) {
-      Logger.Debug("BEGIN Processing Heartbeat for Slave " + heartbeatData.SlaveId);
-
-      ResponseHeartBeat response = new ResponseHeartBeat();
-      response.ActionRequest = new List<MessageContainer>();
-
-      Logger.Debug("BEGIN Started Slave Fetching");
-      SlaveDto slave = DaoLocator.SlaveDao.FindById(heartbeatData.SlaveId);
-      Logger.Debug("END Finished Slave Fetching");
-
-      slave.NrOfFreeCores = heartbeatData.FreeCores;
-      slave.FreeMemory = heartbeatData.FreeMemory;
-      slave.IsAllowedToCalculate = heartbeatData.IsAllowedToCalculate;
-
-      // check if the slave is logged in
-      if (slave.State == SlaveState.Offline || slave.State == SlaveState.NullState) {
-        response.StatusMessage = ResponseStatus.ProcessHeartBeat_UserNotLoggedIn;
-        response.ActionRequest.Add(new MessageContainer(MessageContainer.MessageType.NoMessage));
-        Logger.Error("ProcessHeartBeat: Slave state null or offline: " + slave);
-        return response;
-      }
-
-      // save timestamp of this heartbeat
-      Logger.Debug("BEGIN Locking for Heartbeats");
+      lock (slaveLocker) {
+        Logger.Debug("BEGIN Processing Heartbeat for Slave " + heartbeatData.SlaveId);
+        ResponseHeartBeat response = new ResponseHeartBeat();
+        response.ActionRequest = new List<MessageContainer>();
+
+        using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions { IsolationLevel = ApplicationConstants.ISOLATION_LEVEL_SCOPE })) {
+          SlaveDto slave = UpdateSlaveData(heartbeatData);
+          SaveTimestamp(heartbeatData);
+
+          //ProcessJobProgress(heartbeatData, response);
+          response.ActionRequest = ProcessJobProgress(heartbeatData);
+
+          //check if new Cal must be loaded
+          if (slave.CalendarSyncStatus == CalendarState.Fetch || slave.CalendarSyncStatus == CalendarState.ForceFetch) {
+            response.ActionRequest.Add(new MessageContainer(MessageContainer.MessageType.FetchOrForceFetchCalendar));
+            Logger.Info("fetch or forcefetch sent");
+          }
+
+          // check if slave has a free core for a new job
+          // if true, ask scheduler for a new job for this slave
+          Logger.Debug(" BEGIN Looking for Slave Jobs");
+          if (this.IsAllowedToSendJobs() &&
+              slave.IsAllowedToCalculate &&
+              heartbeatData.FreeCores > 0 &&
+              scheduler.ExistsJobForSlave(heartbeatData)) {
+            response.ActionRequest.Add(new MessageContainer(MessageContainer.MessageType.FetchJob));
+          } else {
+            response.ActionRequest.Add(new MessageContainer(MessageContainer.MessageType.NoMessage));
+          }
+
+          DaoLocator.SlaveDao.Update(slave);
+          scope.Complete();
+        }
+        Logger.Debug(" END Processed Heartbeat for Slave " + heartbeatData.SlaveId);
+        return response;
+      }
+    }
+
+    /// <summary>
+    /// Returns true if there are enough resources to send a job
+    /// There should not be too many jobs sent simultaniously
+    /// </summary>
+    private bool IsAllowedToSendJobs() {
+      return lifecycleManager.JobsCurrentlyTransferring < ApplicationConstants.MAX_JOB_TRANSFER_COUNT;
+    }
+
+    private static void SaveTimestamp(HeartBeatData heartbeatData) {
       heartbeatLock.EnterWriteLock();
-      Logger.Debug("END Locked for Heartbeats");
       if (lastHeartbeats.ContainsKey(heartbeatData.SlaveId)) {
         lastHeartbeats[heartbeatData.SlaveId] = DateTime.Now;
@@ -282,31 +299,103 @@
       }
       heartbeatLock.ExitWriteLock();
-
-      Logger.Debug("BEGIN Processing Heartbeat Jobs");
-      ProcessJobProcess(heartbeatData, response);
-      Logger.Debug("END Processed Heartbeat Jobs");
-
-      //check if new Cal must be loaded
-      if (slave.CalendarSyncStatus == CalendarState.Fetch || slave.CalendarSyncStatus == CalendarState.ForceFetch) {
-        response.ActionRequest.Add(new MessageContainer(MessageContainer.MessageType.FetchOrForceFetchCalendar));
-        //slave.CalendarSyncStatus = CalendarState.Fetching;
-        Logger.Info("fetch or forcefetch sent");
-      }
-
-      // check if slave has a free core for a new job
-      // if true, ask scheduler for a new job for this slave
-      Logger.Debug(" BEGIN Looking for Slave Jobs");
-      if (slave.IsAllowedToCalculate && heartbeatData.FreeCores > 0 && scheduler.ExistsJobForSlave(heartbeatData)) {
-        response.ActionRequest.Add(new MessageContainer(MessageContainer.MessageType.FetchJob));
-      } else {
-        response.ActionRequest.Add(new MessageContainer(MessageContainer.MessageType.NoMessage));
-      }
-      Logger.Debug(" END Looked for Slave Jobs");
-
-      DaoLocator.SlaveDao.Update(slave);
-
-      //tx.Commit();
-      Logger.Debug(" END Processed Heartbeat for Slave " + heartbeatData.SlaveId);
-      return response;
+    }
+
+    private SlaveDto UpdateSlaveData(HeartBeatData heartbeatData) {
+      SlaveDto slave = DaoLocator.SlaveDao.FindById(heartbeatData.SlaveId);
+      if (slave == null) {
+        slave = new SlaveDto() { Id = heartbeatData.SlaveId };
+        Login(slave);
+        slave = DaoLocator.SlaveDao.FindById(heartbeatData.SlaveId);
+      }
+
+      slave.NrOfFreeCores = heartbeatData.FreeCores;
+      slave.FreeMemory = heartbeatData.FreeMemory;
+      slave.IsAllowedToCalculate = heartbeatData.IsAllowedToCalculate;
+
+      slave.State = heartbeatData.JobProgress.Count > 0 ? SlaveState.Calculating : SlaveState.Idle;
+      return slave;
+    }
+
+    private List<MessageContainer> ProcessJobProgress(HeartBeatData heartbeatData) {
+      List<MessageContainer> actions = new List<MessageContainer>();
+
+      // find all the jobs in jobProgress which are not in the database -> they are not supposed to be calculated by this slave
+      IEnumerable<Guid> jobsToAbort = GetJobsNotInDatabase(heartbeatData.SlaveId, heartbeatData.JobProgress.Keys);
+      foreach (Guid jobId in jobsToAbort) {
+        actions.Add(new MessageContainer(MessageContainer.MessageType.AbortJob, jobId));
+        heartbeatData.JobProgress.Remove(jobId);
+      }
+
+      // process all the remaining jobProgresses
+      foreach (var jobProgress in heartbeatData.JobProgress) {
+        JobDto curJob = DaoLocator.JobDao.FindById(jobProgress.Key);
+        if (curJob == null) {
+          // job does not exist in db
+          actions.Add(new MessageContainer(MessageContainer.MessageType.AbortJob, jobProgress.Key));
+          Logger.Error("Job does not exist in DB: " + jobProgress.Key);
+        } else {
+          curJob.Slave = DaoLocator.SlaveDao.GetSlaveForJob(curJob.Id);
+          if (curJob.Slave == null || curJob.Slave.Id != heartbeatData.SlaveId) {
+            // assigned slave does not match heartbeat
+            actions.Add(new MessageContainer(MessageContainer.MessageType.AbortJob, curJob.Id));
+            Logger.Error("The slave " + heartbeatData.SlaveId + " is not supposed to calculate Job: " + curJob);
+          } else {
+            // save job execution time
+            curJob.ExecutionTime = jobProgress.Value;
+
+            if (curJob.State == JobState.Aborted) {
+              // a request to abort the job has been set
+              actions.Add(new MessageContainer(MessageContainer.MessageType.AbortJob, curJob.Id));
+            } else if (curJob.State == JobState.SnapshotRequested) {
+              // a request for a snapshot has been set
+              actions.Add(new MessageContainer(MessageContainer.MessageType.RequestSnapshot, curJob.Id));
+              curJob.State = JobState.SnapshotSent;
+            }
+          }
+        }
+        DaoLocator.JobDao.Update(curJob);
+      }
+
+      var jobsOfSlave = DaoLocator.JobDao.FindActiveJobsOfSlave(DaoLocator.SlaveDao.FindById(heartbeatData.SlaveId));
+      foreach (JobDto currJob in jobsOfSlave) {
+        if (heartbeatData.JobProgress.ContainsKey(currJob.Id)) {
+          lock (newAssignedJobs) {
+            if (newAssignedJobs.ContainsKey(currJob.Id)) {
+              Logger.Info("Job is sending a heart beat, removing it from the newAssignedJobList: " + currJob);
+              newAssignedJobs.Remove(currJob.Id);
+            }
+          }
+        } else {
+          lock (newAssignedJobs) {
+            if (newAssignedJobs.ContainsKey(currJob.Id)) {
+              newAssignedJobs[currJob.Id]--;
+              Logger.Error("Job TTL Reduced by one for job: " + currJob + "and is now: " + newAssignedJobs[currJob.Id] + ". User that sucks: " + currJob.Slave);
+              if (newAssignedJobs[currJob.Id] <= 0) {
+                Logger.Error("Job TTL reached Zero, Job gets removed: " + currJob + " and set back to offline. User that sucks: " + currJob.Slave);
+
+                currJob.State = JobState.Offline;
+                DaoLocator.JobDao.Update(currJob);
+
+                actions.Add(new MessageContainer(MessageContainer.MessageType.AbortJob, currJob.Id));
+
+                newAssignedJobs.Remove(currJob.Id);
+              }
+            } else {
+              Logger.Error("Job ID wasn't with the heartbeats:  " + currJob);
+              currJob.State = JobState.Offline;
+              DaoLocator.JobDao.Update(currJob);
+            }
+          } // lock
+        }
+      }
+      return actions;
+    }
+
+    /// <summary>
+    /// Returns the jobIds of the jobs which are not assigned to this slave in the database
+    /// </summary>
+    private IEnumerable<Guid> GetJobsNotInDatabase(Guid slaveId, IEnumerable<Guid> jobIds) {
+      IEnumerable<Guid> activeJobsOfSlave = DaoLocator.JobDao.FindActiveJobsOfSlave(DaoLocator.SlaveDao.FindById(slaveId)).Select(j => j.Id);
+      return jobIds.Except(activeJobsOfSlave).ToList();
     }
 
@@ -333,92 +422,91 @@
     /// (2) state Abort results in Finished. This should be: AbortRequested, Aborted.
     /// </summary>
-    /// <param name="hbData"></param>
-    /// <param name="jobAdapter"></param>
-    /// <param name="slaveAdapter"></param>
+    /// <param name="heartbeatData"></param>
     /// <param name="response"></param>
-    private void ProcessJobProcess(HeartBeatData hbData, ResponseHeartBeat response) {
-      Logger.Debug("Started for Slave " + hbData.SlaveId);
-      List<JobDto> jobsOfSlave = new List<JobDto>(DaoLocator.JobDao.FindActiveJobsOfSlave(DaoLocator.SlaveDao.FindById(hbData.SlaveId)));
-      if (hbData.JobProgress != null && hbData.JobProgress.Count > 0) {
-        if (jobsOfSlave == null || jobsOfSlave.Count == 0) {
-          foreach (Guid jobId in hbData.JobProgress.Keys) {
-            response.ActionRequest.Add(new MessageContainer(MessageContainer.MessageType.AbortJob, jobId));
-          }
-
-          Logger.Error("There is no job calculated by this user " + hbData.SlaveId + ", advise him to abort all");
-          return;
-        }
-
-        foreach (KeyValuePair<Guid, double> jobProgress in hbData.JobProgress) {
-          JobDto curJob = DaoLocator.JobDao.FindById(jobProgress.Key);
-          if (curJob == null) {
-            response.StatusMessage = ResponseStatus.ProcessJobResult_JobDoesNotExist;
-            response.ActionRequest.Add(new MessageContainer(MessageContainer.MessageType.AbortJob, jobProgress.Key));
-            Logger.Error("Job does not exist in DB: " + jobProgress.Key);
-            return;
-          }
-          curJob.Slave = DaoLocator.SlaveDao.GetSlaveForJob(curJob.Id);
-          if (curJob.Slave == null || curJob.Slave.Id != hbData.SlaveId) {
-            response.ActionRequest.Add(new MessageContainer(MessageContainer.MessageType.AbortJob, curJob.Id));
-            Logger.Error("There is no job calculated by this user " + hbData.SlaveId + " Job: " + curJob);
-          } else if (curJob.State == JobState.Aborted) {
-            // a request to abort the job has been set
-            response.ActionRequest.Add(new MessageContainer(MessageContainer.MessageType.AbortJob, curJob.Id));
-            curJob.State = JobState.Finished;
-          } else {
-            // save job progress
-            curJob.Percentage = jobProgress.Value;
-
-            if (curJob.State == JobState.SnapshotRequested) {
-              // a request for a snapshot has been set
-              response.ActionRequest.Add(new MessageContainer(MessageContainer.MessageType.RequestSnapshot, curJob.Id));
-              curJob.State = JobState.SnapshotSent;
-            }
-          }
-          DaoLocator.JobDao.Update(curJob);
-        }
-      }
-      foreach (JobDto currJob in jobsOfSlave) {
-        bool found = false;
-        if (hbData.JobProgress != null) {
-          foreach (Guid jobId in hbData.JobProgress.Keys) {
-            if (jobId == currJob.Id) {
-              found = true;
-              break;
-            }
-          }
-        }
-        if (!found) {
-          lock (newAssignedJobs) {
-            if (newAssignedJobs.ContainsKey(currJob.Id)) {
-              newAssignedJobs[currJob.Id]--;
-              Logger.Error("Job TTL Reduced by one for job: " + currJob + "and is now: " + newAssignedJobs[currJob.Id] + ". User that sucks: " + currJob.Slave);
-              if (newAssignedJobs[currJob.Id] <= 0) {
-                Logger.Error("Job TTL reached Zero, Job gets removed: " + currJob + " and set back to offline. User that sucks: " + currJob.Slave);
-
-                currJob.State = JobState.Offline;
-                DaoLocator.JobDao.Update(currJob);
-
-                response.ActionRequest.Add(new MessageContainer(MessageContainer.MessageType.AbortJob, currJob.Id));
-
-                newAssignedJobs.Remove(currJob.Id);
-              }
-            } else {
-              Logger.Error("Job ID wasn't with the heartbeats:  " + currJob);
-              currJob.State = JobState.Offline;
-              DaoLocator.JobDao.Update(currJob);
-            }
-          } // lock
-        } else {
-          lock (newAssignedJobs) {
-
-            if (newAssignedJobs.ContainsKey(currJob.Id)) {
-              Logger.Info("Job is sending a heart beat, removing it from the newAssignedJobList: " + currJob);
-              newAssignedJobs.Remove(currJob.Id);
-            }
-          }
-        }
-      }
-    }
+    //private void ProcessJobProgress(HeartBeatData heartbeatData, ResponseHeartBeat response) {
+    //  Logger.Debug("Started for Slave " + heartbeatData.SlaveId);
+    //  List<JobDto> jobsOfSlave = new List<JobDto>(DaoLocator.JobDao.FindActiveJobsOfSlave(DaoLocator.SlaveDao.FindById(heartbeatData.SlaveId)));
+    //  if (heartbeatData.JobProgress != null && heartbeatData.JobProgress.Count > 0) {
+    //    if (jobsOfSlave == null || jobsOfSlave.Count == 0) {
+    //      foreach (Guid jobId in heartbeatData.JobProgress.Keys) {
+    //        response.ActionRequest.Add(new MessageContainer(MessageContainer.MessageType.AbortJob, jobId));
+    //      }
+
+    //      Logger.Error("There is no job calculated by this user " + heartbeatData.SlaveId + ", advise him to abort all");
+    //      return;
+    //    }
+
+    //    foreach (KeyValuePair<Guid, TimeSpan> jobProgress in heartbeatData.JobProgress) {
+    //      JobDto curJob = DaoLocator.JobDao.FindById(jobProgress.Key);
+    //      if (curJob == null) {
+    //        response.StatusMessage = ResponseStatus.ProcessJobResult_JobDoesNotExist;
+    //        response.ActionRequest.Add(new MessageContainer(MessageContainer.MessageType.AbortJob, jobProgress.Key));
+    //        Logger.Error("Job does not exist in DB: " + jobProgress.Key);
+    //        return;
+    //      }
+    //      curJob.Slave = DaoLocator.SlaveDao.GetSlaveForJob(curJob.Id);
+    //      if (curJob.Slave == null || curJob.Slave.Id != heartbeatData.SlaveId) {
+    //        response.ActionRequest.Add(new MessageContainer(MessageContainer.MessageType.AbortJob, curJob.Id));
+    //        Logger.Error("There is no job calculated by this user " + heartbeatData.SlaveId + " Job: " + curJob);
+    //      } else if (curJob.State == JobState.Aborted) {
+    //        // a request to abort the job has been set
+    //        response.ActionRequest.Add(new MessageContainer(MessageContainer.MessageType.AbortJob, curJob.Id));
+    //        curJob.State = JobState.Finished;
+    //      } else {
+    //        // save job progress
+    //        curJob.ExecutionTime = jobProgress.Value;
+
+    //        if (curJob.State == JobState.SnapshotRequested) {
+    //          // a request for a snapshot has been set
+    //          response.ActionRequest.Add(new MessageContainer(MessageContainer.MessageType.RequestSnapshot, curJob.Id));
+    //          curJob.State = JobState.SnapshotSent;
+    //        }
+    //      }
+    //      DaoLocator.JobDao.Update(curJob);
+    //    }
+    //  }
+
+    //  foreach (JobDto currJob in jobsOfSlave) {
+    //    bool found = false;
+    //    if (heartbeatData.JobProgress != null) {
+    //      foreach (Guid jobId in heartbeatData.JobProgress.Keys) {
+    //        if (jobId == currJob.Id) {
+    //          found = true;
+    //          break;
+    //        }
+    //      }
+    //    }
+
+    //    if (!found) {
+    //      lock (newAssignedJobs) {
+    //        if (newAssignedJobs.ContainsKey(currJob.Id)) {
+    //          newAssignedJobs[currJob.Id]--;
+    //          Logger.Error("Job TTL Reduced by one for job: " + currJob + "and is now: " + newAssignedJobs[currJob.Id] + ". User that sucks: " + currJob.Slave);
+    //          if (newAssignedJobs[currJob.Id] <= 0) {
+    //            Logger.Error("Job TTL reached Zero, Job gets removed: " + currJob + " and set back to offline. User that sucks: " + currJob.Slave);
+
+    //            currJob.State = JobState.Offline;
+    //            DaoLocator.JobDao.Update(currJob);
+
+    //            response.ActionRequest.Add(new MessageContainer(MessageContainer.MessageType.AbortJob, currJob.Id));
+
+    //            newAssignedJobs.Remove(currJob.Id);
+    //          }
+    //        } else {
+    //          Logger.Error("Job ID wasn't with the heartbeats:  " + currJob);
+    //          currJob.State = JobState.Offline;
+    //          DaoLocator.JobDao.Update(currJob);
+    //        }
+    //      } // lock
+    //    } else {
+    //      lock (newAssignedJobs) {
+    //        if (newAssignedJobs.ContainsKey(currJob.Id)) {
+    //          Logger.Info("Job is sending a heart beat, removing it from the newAssignedJobList: " + currJob);
+    //          newAssignedJobs.Remove(currJob.Id);
+    //        }
+    //      }
+    //    }
+    //  }
+    //}
 
     /// <summary>
@@ -466,5 +554,5 @@
       //tx = session.BeginTransaction();
 
-      ResponseResultReceived response = ProcessJobResult(result.SlaveId, result.Id, new byte[] { }, result.Percentage, result.Exception, finished);
+      ResponseResultReceived response = ProcessJobResult(result.SlaveId, result.Id, new byte[] { }, result.ExecutionTime, result.Exception, finished);
 
       if (response.StatusMessage == ResponseStatus.Ok) {
@@ -495,5 +583,5 @@
     }
 
-    private ResponseResultReceived ProcessJobResult(Guid slaveId, Guid jobId, byte[] result, double? percentage, string exception, bool finished) {
+    private ResponseResultReceived ProcessJobResult(Guid slaveId, Guid jobId, byte[] result, TimeSpan executionTime, string exception, bool finished) {
       Logger.Info("BEGIN Job received for Storage - SUB method: " + jobId);
 
@@ -511,5 +599,4 @@
 
       if (job != null && job.JobInfo == null) {
-        //response.Success = false;
         response.StatusMessage = ResponseStatus.ProcessJobResult_JobDoesNotExist;
         response.JobId = jobId;
@@ -520,5 +607,4 @@
       }
       if (job.JobInfo.State == JobState.Aborted) {
-        //response.Success = false;
         response.StatusMessage = ResponseStatus.ProcessJobResult_JobAborted;
 
@@ -529,5 +615,4 @@
       }
       if (job.JobInfo.Slave == null) {
-        //response.Success = false;
         response.StatusMessage = ResponseStatus.ProcessJobResult_JobIsNotBeeingCalculated;
         response.JobId = jobId;
@@ -562,5 +647,4 @@
       }
       if (job.JobInfo.State != JobState.Calculating && job.JobInfo.State != JobState.Pending) {
-        //response.Success = false;
         response.StatusMessage = ResponseStatus.ProcessJobResult_InvalidJobState;
         response.JobId = jobId;
@@ -571,5 +655,5 @@
         return response;
       }
-      job.JobInfo.Percentage = percentage;
+      job.JobInfo.ExecutionTime = executionTime;
 
       if (!string.IsNullOrEmpty(exception)) {
@@ -600,21 +684,10 @@
     /// these job results will be stored in the database
     /// </summary>
-    /// <param name="slaveId"></param>
-    /// <param name="jobId"></param>
-    /// <param name="result"></param>
-    /// <param name="exception"></param>
-    /// <param name="finished"></param>
-    /// <returns></returns>
-    public ResponseResultReceived StoreFinishedJobResult(Guid slaveId,
-      Guid jobId,
-      byte[] result,
-      double percentage,
-      string exception) {
-
-      return ProcessJobResult(slaveId, jobId, result, percentage, exception, true);
-    }
-
-    public ResponseResultReceived ProcessSnapshot(Guid slaveId, Guid jobId, byte[] result, double percentage, string exception) {
-      return ProcessJobResult(slaveId, jobId, result, percentage, exception, false);
+    public ResponseResultReceived StoreFinishedJobResult(Guid slaveId, Guid jobId, byte[] result, TimeSpan executionTime, string exception) {
+      return ProcessJobResult(slaveId, jobId, result, executionTime, exception, true);
+    }
+
+    public ResponseResultReceived ProcessSnapshot(Guid slaveId, Guid jobId, byte[] result, TimeSpan executionTime, string exception) {
+      return ProcessJobResult(slaveId, jobId, result, executionTime, exception, false);
     }
 
@@ -637,5 +710,4 @@
       SlaveDto slave = DaoLocator.SlaveDao.FindById(slaveId);
       if (slave == null) {
-        //response.Success = false;
         response.StatusMessage = ResponseStatus.Logout_SlaveNotRegistered;
         return response;
@@ -666,5 +738,4 @@
       JobDto job = DaoLocator.JobDao.FindById(jobId);
       if (job == null) {
-        //response.Success = false;
         response.StatusMessage = ResponseStatus.IsJobStillNeeded_JobDoesNotExist;
         Logger.Error("Job doesn't exist (anymore)! " + jobId);
@@ -672,5 +743,4 @@
       }
       if (job.State == JobState.Finished) {
-        //response.Success = true;
         response.StatusMessage = ResponseStatus.IsJobStillNeeded_JobAlreadyFinished;
         Logger.Error("already finished! " + job);
@@ -702,5 +772,4 @@
             response.List.Add(ConvertPluginDescriptorToDto(ipd));
           } else {
-            //response.Success = false;
             response.StatusMessage = ResponseStatus.GetPlugins_PluginsNotAvailable;
             return response;
@@ -722,5 +791,5 @@
       return currCachedPlugin;
     }
-    
+
     #endregion
   }
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/SlaveManager.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/SlaveManager.cs	(revision 4422)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/SlaveManager.cs	(revision 4423)
@@ -165,5 +165,5 @@
         response.Obj = new SlaveGroupDtoList();
         //response.Success = false;
-        response.StatusMessage = ResponseStatus.GetAllGroupsOfResource_ResourceNotFound;
+        response.StatusMessage = ResponseStatus.GetAllGroupsOfResource_ResourceDoesNotExist;
       }
 
@@ -180,5 +180,5 @@
       }
 
-      DaoLocator.SlaveGroupDao.Delete(slaveGroup);
+      DaoLocator.SlaveGroupDao.Delete(slaveGroup.Id);
       return response;
     }
Index: anches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/UserRoleManager.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/UserRoleManager.cs	(revision 4422)
+++ 	(revision )
@@ -1,259 +1,0 @@
-﻿#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 HeuristicLab.Hive.Contracts.Interfaces;
-using HeuristicLab.Hive.Contracts.BusinessObjects;
-using HeuristicLab.Hive.Server.Core.InternalInterfaces.DataAccess;
-using System.Resources;
-using System.Reflection;
-using HeuristicLab.Hive.Contracts;
-
-namespace HeuristicLab.Hive.Server.Core {
-  class UserRoleManager: IUserRoleManager {
-
-    IUserAdapter userAdapter;
-    IUserGroupAdapter userGroupAdapter;
-    IPermissionOwnerAdapter permissionOwnerAdapter;
-
-    public UserRoleManager() {
-      userAdapter = ServiceLocator.GetUserAdapter();
-      userGroupAdapter = ServiceLocator.GetUserGroupAdapter();
-    }
-
-    #region IUserRoleManager Members
-
-    /// <summary>
-    /// returns all users from the database
-    /// </summary>
-    /// <returns></returns>
-    public ResponseList<User> GetAllUsers() {
-      ResponseList<User> response = new ResponseList<User>();
-
-      List<User> allUsers = new List<User>(userAdapter.GetAll());
-      response.List = allUsers;
-      response.Success = true;
-      response.StatusMessage = ApplicationConstants.RESPONSE_USERROLE_GET_ALL_USERS;
-
-      return response;
-    }
-
-    /// <summary>
-    /// Adds a new user to the database
-    /// </summary>
-    /// <param name="user"></param>
-    /// <returns></returns>
-    public ResponseObject<User> AddNewUser(User user) {
-      ResponseObject<User> response = new ResponseObject<User>();
-
-      if (user.Id != 0) {
-        response.Success = false;
-        response.StatusMessage = ApplicationConstants.RESPONSE_USERROLE_ID_MUST_NOT_BE_SET;
-        return response;
-      }
-      if (userAdapter.GetByName(user.Name) != null) {
-        response.Success = false;
-        response.StatusMessage = ApplicationConstants.RESPONSE_USERROLE_USERNAME_EXISTS_ALLREADY;
-        return response;
-      }
-
-      userAdapter.Update(user);
-      response.Obj = user;
-      response.Success = true;
-      response.StatusMessage = ApplicationConstants.RESPONSE_USERROLE_USER_SUCCESSFULLY_ADDED;
-      
-      return response;
-    }
-
-    /// <summary>
-    /// returns all usergroups from the database
-    /// </summary>
-    /// <returns></returns>
-    public ResponseList<UserGroup> GetAllUserGroups() {
-      ResponseList<UserGroup> response = new ResponseList<UserGroup>();
-
-      response.List = new List<UserGroup>(userGroupAdapter.GetAll());
-      response.Success = true;
-      response.StatusMessage = ApplicationConstants.RESPONSE_USERROLE_GET_ALL_USERGROUPS;
-
-      return response;
-    }
-
-    /// <summary>
-    /// Removes a user from the database
-    /// </summary>
-    /// <param name="userId"></param>
-    /// <returns></returns>
-    public Response RemoveUser(long userId) {
-      Response response = new Response();
-      User user = userAdapter.GetById(userId);
-      if (user == null) {
-        response.Success = false;
-        response.StatusMessage = ApplicationConstants.RESPONSE_USERROLE_USER_DOESNT_EXIST;
-        return response;
-      }
-      userAdapter.Delete(user);
-      response.Success = true;
-      response.StatusMessage = ApplicationConstants.RESPONSE_USERROLE_USER_REMOVED;
-                         
-      return response;
-    }
-
-    /// <summary>
-    /// Adds a new usergroup to the database
-    /// </summary>
-    /// <param name="userGroup"></param>
-    /// <returns></returns>
-    public ResponseObject<UserGroup> AddNewUserGroup(UserGroup userGroup) {
-      ResponseObject<UserGroup> response = new ResponseObject<UserGroup>();
-      
-      if (userGroup.Id != 0) {
-        response.Success = false;
-        response.StatusMessage = ApplicationConstants.RESPONSE_USERROLE_ID_MUST_NOT_BE_SET;
-        return response;
-      }
-
-      userGroupAdapter.Update(userGroup);
-      response.Obj = userGroup;
-      response.Success = false;
-      response.StatusMessage = ApplicationConstants.RESPONSE_USERROLE_USERGROUP_ADDED;
-
-      return response;
-    }
-
-    /// <summary>
-    /// Removes a user group from the database
-    /// </summary>
-    /// <param name="groupId"></param>
-    /// <returns></returns>
-    public Response RemoveUserGroup(long groupId) {
-      Response response = new Response();
-
-      UserGroup userGroupFromDb = userGroupAdapter.GetById(groupId);
-      if (userGroupFromDb == null) {
-        response.Success = false;
-        response.StatusMessage = ApplicationConstants.RESPONSE_USERROLE_USERGROUP_DOESNT_EXIST;
-        return response;
-      }
-      userGroupAdapter.Delete(userGroupFromDb);
-      response.Success = false;
-      response.StatusMessage = ApplicationConstants.RESPONSE_USERROLE_USERGROUP_ADDED;
-
-      return response;
-    }
-
-    /// <summary>
-    /// Adds a user into a user group
-    /// </summary>
-    /// <param name="groupId"></param>
-    /// <param name="userId"></param>
-    /// <returns></returns>
-    public Response AddUserToGroup(long groupId, long userId) {
-      Response response = new Response();
-
-      User user = userAdapter.GetById(userId);
-      if (user == null) {
-        response.Success = false;
-        response.StatusMessage = ApplicationConstants.RESPONSE_USERROLE_USER_DOESNT_EXIST;
-        return response;
-      }
-
-      UserGroup userGroup = userGroupAdapter.GetById(groupId);
-      if (userGroup == null) {
-        response.Success = false;
-        response.StatusMessage = ApplicationConstants.RESPONSE_USERROLE_USERGROUP_DOESNT_EXIST;
-        return response;
-      }
-      userGroup.Members.Add(user);
-      userGroupAdapter.Update(userGroup);
-
-      response.Success = true;
-      response.StatusMessage = ApplicationConstants.RESPONSE_USERROLE_PERMISSIONOWNER_ADDED;
-
-      return response;
-    }
-
-    /// <summary>
-    /// Adds a user group to a user group
-    /// </summary>
-    /// <param name="groupId"></param>
-    /// <param name="groupToAddId"></param>
-    /// <returns></returns>
-    public Response AddUserGroupToGroup(long groupId, long groupToAddId) {
-      Response response = new Response();
-
-      UserGroup userGroup = userGroupAdapter.GetById(groupId);
-      UserGroup userGroupToAdd = userGroupAdapter.GetById(groupToAddId);
-
-      if (userGroup == null || userGroupToAdd == null) {
-        response.Success = false;
-        response.StatusMessage = ApplicationConstants.RESPONSE_USERROLE_USERGROUP_DOESNT_EXIST;
-        return response;
-      }
-      userGroup.Members.Add(userGroupToAdd);
-      response.Success = true;
-      response.StatusMessage = ApplicationConstants.RESPONSE_USERROLE_USERGROUP_ADDED_TO_USERGROUP;
-
-      return response;
-    }
-
-    /// <summary>
-    /// Removes a permission owner (user, user group) from a user group
-    /// </summary>
-    /// <param name="groupId"></param>
-    /// <param name="permissionOwnerId"></param>
-    /// <returns></returns>
-    public Response RemovePermissionOwnerFromGroup(long groupId, long permissionOwnerId) {
-      Response response = new Response();
-
-      UserGroup userGroup = userGroupAdapter.GetById(groupId);
-      if (userGroup == null) {
-        response.Success = false;
-        response.StatusMessage = ApplicationConstants.RESPONSE_USERROLE_USERGROUP_DOESNT_EXIST;
-        return response;
-      }
-      User user = userAdapter.GetById(permissionOwnerId);
-      if (user == null) {
-        response.Success = false;
-        response.StatusMessage = ApplicationConstants.RESPONSE_USERROLE_PERMISSIONOWNER_DOESNT_EXIST;
-        return response;
-      }
-      foreach (PermissionOwner permissionOwner in userGroup.Members) {
-        if (permissionOwner.Id == permissionOwnerId) {
-          userGroup.Members.Remove(permissionOwner);
-          userGroupAdapter.Update(userGroup);
-          response.Success = true;
-          response.StatusMessage = ApplicationConstants.RESPONSE_USERROLE_PERMISSIONOWNER_REMOVED;
-          return response;
-        }
-      }
-      response.Success = false;
-      response.StatusMessage = ApplicationConstants.RESPONSE_USERROLE_PERMISSIONOWNER_DOESNT_EXIST;
-      
-      return response;
-    }
-
-    #endregion
-  }
-}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/app.config
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/app.config	(revision 4422)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/app.config	(revision 4423)
@@ -3,7 +3,21 @@
   <system.diagnostics>
     <sources>
-      <source name="System.ServiceModel.MessageLogging" switchValue="Verbose,ActivityTracing">
+      <source name="System.ServiceModel.MessageLogging" switchValue="Warning, ActivityTracing">
         <listeners>
           <add type="System.Diagnostics.DefaultTraceListener" name="Default">
+            <filter type="" />
+          </add>
+          <add name="ServiceModelMessageLoggingListener">
+            <filter type="" />
+          </add>
+        </listeners>
+      </source>
+      <source name="System.ServiceModel" switchValue="Warning, ActivityTracing"
+        propagateActivity="true">
+        <listeners>
+          <add type="System.Diagnostics.DefaultTraceListener" name="Default">
+            <filter type="" />
+          </add>
+          <add name="ServiceModelTraceListener">
             <filter type="" />
           </add>
@@ -12,6 +26,12 @@
     </sources>
     <sharedListeners>
-      <add type="System.Diagnostics.EventLogTraceListener, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
-        name="EventLogTracer" traceOutputOptions="LogicalOperationStack, DateTime, Timestamp, ProcessId, ThreadId, Callstack">
+      <add initializeData="c:\ch\svn\branches\3.3-hive\sources\heuristiclab.hive\heuristiclab.hive.server.core\3.3\app_messages.svclog"
+        type="System.Diagnostics.XmlWriterTraceListener, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
+        name="ServiceModelMessageLoggingListener" traceOutputOptions="Timestamp">
+        <filter type="" />
+      </add>
+      <add initializeData="c:\ch\svn\branches\3.3-hive\sources\heuristiclab.hive\heuristiclab.hive.server.core\3.3\app_tracelog.svclog"
+        type="System.Diagnostics.XmlWriterTraceListener, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
+        name="ServiceModelTraceListener" traceOutputOptions="Timestamp">
         <filter type="" />
       </add>
@@ -78,5 +98,5 @@
             roleProviderName="AspNetSqlRoleProvider" />
           <serviceCredentials>
-            <serviceCertificate findValue="localhost" x509FindType="FindBySubjectName" />
+            <serviceCertificate findValue="blade12.hpc.fh-hagenberg.at" x509FindType="FindBySubjectName" />
             <userNameAuthentication userNamePasswordValidationMode="MembershipProvider"
               membershipProviderName="AspNetSqlMembershipProvider" />
@@ -95,6 +115,6 @@
         <host>
           <baseAddresses>
-            <add baseAddress="http://localhost:9000/SlaveService" />
-            <add baseAddress="net.tcp://localhost:9001/SlaveServiceStreamed" />
+            <add baseAddress="http://blade12.hpc.fh-hagenberg.at:9000/SlaveService" />
+            <add baseAddress="net.tcp://blade12.hpc.fh-hagenberg.at:9001/SlaveServiceStreamed" />
           </baseAddresses>
         </host>
@@ -105,5 +125,5 @@
         <host>
           <baseAddresses>
-            <add baseAddress="http://localhost:9000/ServerConsoleService" />
+            <add baseAddress="http://blade12.hpc.fh-hagenberg.at:9000/ServerConsoleService" />
           </baseAddresses>
         </host>
@@ -115,6 +135,6 @@
         <host>
           <baseAddresses>
-            <add baseAddress="net.tcp://localhost:9001/ClientServiceStreamed" />
-            <add baseAddress="http://localhost:9000/ClientService" />
+            <add baseAddress="net.tcp://blade12.hpc.fh-hagenberg.at:9001/ClientServiceStreamed" />
+            <add baseAddress="http://blade12.hpc.fh-hagenberg.at:9000/ClientService" />
           </baseAddresses>
         </host>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.DataAccess/3.3/HeuristicLab.Hive.Server.DataAccess-3.3.csproj
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.DataAccess/3.3/HeuristicLab.Hive.Server.DataAccess-3.3.csproj	(revision 4422)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.DataAccess/3.3/HeuristicLab.Hive.Server.DataAccess-3.3.csproj	(revision 4423)
@@ -87,4 +87,5 @@
   <ItemGroup>
     <Compile Include="DataAccessException.cs" />
+    <Compile Include="IHiveExperimentDao.cs" />
     <Compile Include="ISlaveConfigDao.cs" />
     <Compile Include="ISlaveDao.cs" />
Index: anches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.DataAccess/3.3/IExecutableJobAdapter.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.DataAccess/3.3/IExecutableJobAdapter.cs	(revision 4422)
+++ 	(revision )
@@ -1,43 +1,0 @@
-﻿#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 HeuristicLab.DataAccess.Interfaces;
-
-namespace HeuristicLab.Hive.Server.DataAccess {
-  public interface IExecutableJobAdapter: IDataAdapter<ExecutableJob> {
-    /// <summary>
-    /// Finds a job with the specified criterias 
-    /// </summary>
-    /// <param name="state">all jobs with the specified state</param>
-    /// <param name="cores">all jobs which require less or equal cores</param>
-    /// <param name="memory">all jobs which require less or equal memory</param>
-    /// <param name="resourceId">all jobs that can be calculated by that resource</param>
-    /// <returns></returns>
-    ICollection<ExecutableJob> FindJobs(State state,
-      int cores,
-      int memory,
-      Guid resourceId);
-  }
-}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.DataAccess/3.3/IGenericDao.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.DataAccess/3.3/IGenericDao.cs	(revision 4422)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.DataAccess/3.3/IGenericDao.cs	(revision 4423)
@@ -9,5 +9,5 @@
     TBusiness Insert(TBusiness bObj);
     
-    void Delete(TBusiness bObj);
+    void Delete(Guid id);
 
     void Update(TBusiness bObj);
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.DataAccess/3.3/IHiveExperimentDao.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.DataAccess/3.3/IHiveExperimentDao.cs	(revision 4423)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.DataAccess/3.3/IHiveExperimentDao.cs	(revision 4423)
@@ -0,0 +1,11 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+
+namespace HeuristicLab.Hive.Server.DataAccess {
+  public interface IHiveExperimentDao : IGenericDao<HiveExperimentDto> {
+    IEnumerable<HiveExperimentDto> FindAllByUserId(Guid guid);
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/BaseDao.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/BaseDao.cs	(revision 4422)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/BaseDao.cs	(revision 4423)
@@ -31,7 +31,10 @@
           conflict.Resolve(RefreshMode.KeepChanges);
         }
-        //next round!
-        CommitChanges();
-        //Context.SubmitChanges(ConflictMode.FailOnFirstConflict);
+        try {
+          Context.SubmitChanges();
+        }
+        catch {
+          Logger.Error("Could not resolve conflict!");
+        }
       }
     }
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/ContextFactory.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/ContextFactory.cs	(revision 4422)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/ContextFactory.cs	(revision 4423)
@@ -45,12 +45,12 @@
     public IDisposable GetContext(bool withTransaction) {
       lock (locker) {
-        Logger.Debug("opening transaction");
         int threadId = Thread.CurrentThread.ManagedThreadId;
 
         if (contexts.ContainsKey(threadId)) {
-          throw new DataAccessException("Context for this Thread already defined");
+          Logger.Error("ERROR: Context for this Thread already defined. Will dispose it and then create a new one.");
+          RemoveContext();
+          RemoveAndCompleteTransaction();
         }
 
-        Logger.Debug("creating context");
         DisposableHiveDataContext context = CreateContext();
         context.OnDisposing += new EventHandler(context_OnDisposing);
@@ -59,6 +59,4 @@
         if (withTransaction) {
           TransactionScope transaction = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions { IsolationLevel = ApplicationConstants.ISOLATION_LEVEL_SCOPE });
-          Logger.Debug("creating  transaction");
-
           transactions.Add(threadId, transaction);
         }
@@ -72,10 +70,11 @@
 
     void context_OnDisposing(object sender, EventArgs e) {
-      RemoveContext();
-      RemoveAndCompleteTransaction();
+      lock (locker) {
+        RemoveContext();
+        RemoveAndCompleteTransaction();
+      }
     }
 
     public void RollbackTransaction() {
-      Logger.Debug("rolling back transaction");
       int threadId = Thread.CurrentThread.ManagedThreadId;
 
@@ -86,5 +85,4 @@
     public void RemoveContext() {
       lock (locker) {
-        Logger.Debug("removing context");
         int threadId = Thread.CurrentThread.ManagedThreadId;
 
@@ -96,12 +94,16 @@
     public void RemoveAndCompleteTransaction() {
       lock (locker) {
-        Logger.Debug("completing transaction");
         int threadId = Thread.CurrentThread.ManagedThreadId;
 
         // context does not always have an associated transaction
         if (transactions.ContainsKey(threadId)) {
-          transactions[threadId].Complete();
-          transactions[threadId].Dispose();
-          transactions.Remove(threadId);
+          try {
+            transactions[threadId].Complete();
+            transactions[threadId].Dispose();
+          }
+          catch (Exception) { }
+          finally {
+            transactions.Remove(threadId);
+          }
         }
       }
@@ -110,9 +112,11 @@
     public DataContext CurrentContext {
       get {
-        int threadId = Thread.CurrentThread.ManagedThreadId;
-        if (contexts.ContainsKey(threadId)) {
-          return contexts[threadId];
-        } else {
-          return null;
+        lock (locker) {
+          int threadId = Thread.CurrentThread.ManagedThreadId;
+          if (contexts.ContainsKey(threadId)) {
+            return contexts[threadId];
+          } else {
+            return null;
+          }
         }
       }
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/HeuristicLab.Hive.Server.LINQDataAccess-3.3.csproj
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/HeuristicLab.Hive.Server.LINQDataAccess-3.3.csproj	(revision 4422)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/HeuristicLab.Hive.Server.LINQDataAccess-3.3.csproj	(revision 4423)
@@ -107,4 +107,5 @@
   <ItemGroup>
     <Compile Include="BaseDao.cs" />
+    <Compile Include="HiveExperimentDao.cs" />
     <Compile Include="SlaveConfigDao.cs" />
     <Compile Include="SlaveDao.cs" />
@@ -154,9 +155,14 @@
   </ItemGroup>
   <ItemGroup>
-    <Content Include="HiveDataContext.xml">
+    <None Include="HiveDataContext.dbml">
       <SubType>Designer</SubType>
-    </Content>
+    </None>
     <Content Include="Scripts\cleanHiveDatabase.sql" />
     <Content Include="Scripts\prepareHiveDatabase.sql" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HiveDataContext.dbml.layout">
+      <DependentUpon>HiveDataContext.dbml</DependentUpon>
+    </None>
   </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
Index: anches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/Hive.dbml
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/Hive.dbml	(revision 4422)
+++ 	(revision )
@@ -1,137 +1,0 @@
-﻿<?xml version="1.0" encoding="utf-8"?>
-<Database Name="HeuristicLab.Hive.Linq" Class="HiveDataContext" xmlns="http://schemas.microsoft.com/linqtosql/dbml/2007">
-  <Connection Mode="AppSettings" ConnectionString="Data Source=SEMTEX-PC;Initial Catalog=HeuristicLab.Hive.Linq;Integrated Security=True" SettingsObjectName="HeuristicLab.Hive.Server.LINQDataAccess.Properties.Settings" SettingsPropertyName="HeuristicLab_Hive_LinqConnectionString" Provider="System.Data.SqlClient" />
-  <Table Name="dbo.AssignedResources" Member="AssignedResources">
-    <Type Name="AssignedResource">
-      <Column Name="ResourceId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" CanBeNull="false" />
-      <Column Name="JobId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" CanBeNull="false" />
-      <Column Name="AssignedRessourcesId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" IsDbGenerated="true" CanBeNull="false" />
-      <Association Name="Resource_AssignedResource" Member="Resource" ThisKey="ResourceId" OtherKey="ResourceId" Type="Resource" IsForeignKey="true" DeleteRule="CASCADE" DeleteOnNull="true" />
-      <Association Name="Job_AssignedResource" Member="Job" ThisKey="JobId" OtherKey="JobId" Type="Job" IsForeignKey="true" DeleteRule="CASCADE" DeleteOnNull="true" />
-    </Type>
-  </Table>
-  <Table Name="dbo.UptimeStatistics" Member="UptimeStatistics">
-    <Type Name="UptimeStatistic">
-      <Column Name="UptimeStatisticsId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" IsDbGenerated="true" CanBeNull="false" />
-      <Column Name="Login" Type="System.DateTime" DbType="DateTime" CanBeNull="true" />
-      <Column Name="Logout" Type="System.DateTime" DbType="DateTime" CanBeNull="true" />
-      <Column Name="ResourceId" Type="System.Guid" DbType="UniqueIdentifier" CanBeNull="true" />
-      <Association Name="Client_UptimeStatistic" Member="Client" ThisKey="ResourceId" OtherKey="ResourceId" Type="Client" IsForeignKey="true" DeleteRule="SET NULL" />
-    </Type>
-  </Table>
-  <Table Name="dbo.ClientConfig" Member="ClientConfigs">
-    <Type Name="ClientConfig">
-      <Column Name="ClientConfigId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" IsDbGenerated="true" CanBeNull="false" />
-      <Column Name="UpDownTimeCalendar" Type="System.Xml.Linq.XElement" DbType="Xml" CanBeNull="true" UpdateCheck="Never" />
-      <Column Name="HeartBeatIntervall" Type="System.Int32" DbType="Int" CanBeNull="true" />
-      <Association Name="ClientConfig_Client" Member="Clients" ThisKey="ClientConfigId" OtherKey="ClientConfigId" Type="Client" />
-    </Type>
-  </Table>
-  <Table Name="dbo.ClientGroup" Member="ClientGroups">
-    <Type Name="ClientGroup">
-      <Column Name="ResourceId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
-      <Association Name="ClientGroup_ClientGroup_Resource" Member="ClientGroup_Resources" ThisKey="ResourceId" OtherKey="ClientGroupId" Type="ClientGroup_Resource" />
-      <Association Name="Resource_ClientGroup" Member="Resource" ThisKey="ResourceId" OtherKey="ResourceId" Type="Resource" IsForeignKey="true" DeleteRule="CASCADE" DeleteOnNull="true" />
-    </Type>
-  </Table>
-  <Table Name="dbo.ClientGroup_Resource" Member="ClientGroup_Resources">
-    <Type Name="ClientGroup_Resource">
-      <Column Name="ClientGroupId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" CanBeNull="false" />
-      <Column Name="ResourceId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" CanBeNull="false" />
-      <Column Name="ClientGroup_RessourceId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" IsDbGenerated="true" CanBeNull="false" />
-      <Association Name="ClientGroup_ClientGroup_Resource" Member="ClientGroup" ThisKey="ClientGroupId" OtherKey="ResourceId" Type="ClientGroup" IsForeignKey="true" />
-      <Association Name="Resource_ClientGroup_Resource" Member="Resource" ThisKey="ResourceId" OtherKey="ResourceId" Type="Resource" IsForeignKey="true" DeleteRule="CASCADE" DeleteOnNull="true" />
-    </Type>
-  </Table>
-  <Table Name="dbo.PluginInfo" Member="PluginInfos">
-    <Type Name="PluginInfo">
-      <Column Name="PluginId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" IsDbGenerated="true" CanBeNull="false" />
-      <Column Name="Name" Type="System.String" DbType="VarChar(MAX)" CanBeNull="true" />
-      <Column Name="Version" Type="System.String" DbType="VarChar(MAX)" CanBeNull="true" />
-      <Column Name="BuildDate" Type="System.String" DbType="VarChar(20)" CanBeNull="true" />
-      <Association Name="PluginInfo_RequiredPlugin" Member="RequiredPlugins" ThisKey="PluginId" OtherKey="PluginId" Type="RequiredPlugin" />
-    </Type>
-  </Table>
-  <Table Name="dbo.Project" Member="Projects">
-    <Type Name="Project">
-      <Column Name="ProjectId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" IsDbGenerated="true" CanBeNull="false" />
-      <Column Name="Name" Type="System.String" DbType="VarChar(MAX)" CanBeNull="true" />
-      <Association Name="Project_Job" Member="Jobs" ThisKey="ProjectId" OtherKey="ProjectId" Type="Job" />
-    </Type>
-  </Table>
-  <Table Name="dbo.RequiredPlugins" Member="RequiredPlugins">
-    <Type Name="RequiredPlugin">
-      <Column Name="JobId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" CanBeNull="false" />
-      <Column Name="PluginId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" CanBeNull="false" />
-      <Column Name="RequiredPluginId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" IsDbGenerated="true" CanBeNull="false" UpdateCheck="Never" />
-      <Association Name="PluginInfo_RequiredPlugin" Member="PluginInfo" ThisKey="PluginId" OtherKey="PluginId" Type="PluginInfo" IsForeignKey="true" DeleteRule="CASCADE" DeleteOnNull="true" />
-      <Association Name="Job_RequiredPlugin" Member="Job" ThisKey="JobId" OtherKey="JobId" Type="Job" IsForeignKey="true" />
-    </Type>
-  </Table>
-  <Table Name="dbo.Resource" Member="Resources">
-    <Type Name="Resource">
-      <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" />
-      <Association Name="Resource_ClientGroup" Member="ClientGroup" ThisKey="ResourceId" OtherKey="ResourceId" Type="ClientGroup" Cardinality="One" />
-      <Association Name="Resource_ClientGroup_Resource" Member="ClientGroup_Resources" ThisKey="ResourceId" OtherKey="ResourceId" Type="ClientGroup_Resource" />
-      <Association Name="Resource_UptimeCalendar" Member="UptimeCalendars" ThisKey="ResourceId" OtherKey="ResourceId" Type="UptimeCalendar" />
-      <Association Name="Resource_Client" Member="Client" ThisKey="ResourceId" OtherKey="ResourceId" Type="Client" Cardinality="One" />
-    </Type>
-  </Table>
-  <Table Name="dbo.Job" Member="Jobs">
-    <Type Name="Job">
-      <Column Name="JobId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" IsDbGenerated="true" CanBeNull="false" />
-      <Column Name="ParentJobId" Type="System.Guid" DbType="UniqueIdentifier" CanBeNull="true" />
-      <Column Name="JobState" Type="System.String" DbType="VarChar(MAX)" CanBeNull="true" />
-      <Column Name="ResourceId" Type="System.Guid" DbType="UniqueIdentifier" CanBeNull="true" />
-      <Column Name="Percentage" Type="System.Double" DbType="Float" CanBeNull="true" />
-      <Column Name="SerializedJob" Type="System.Data.Linq.Binary" DbType="VarBinary(MAX)" CanBeNull="true" UpdateCheck="Never" IsDelayLoaded="true" />
-      <Column Name="DateCreated" Type="System.DateTime" DbType="DateTime" CanBeNull="true" />
-      <Column Name="DateCalculated" Type="System.DateTime" DbType="DateTime" CanBeNull="true" />
-      <Column Name="DateFinished" Type="System.DateTime" DbType="DateTime" CanBeNull="true" />
-      <Column Name="Priority" Type="System.Int32" DbType="Int NOT NULL" CanBeNull="false" />
-      <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 NOT NULL" CanBeNull="false" />
-      <Column Name="MemoryNeeded" Type="System.Int32" DbType="Int NOT NULL" CanBeNull="false" />
-      <Association Name="Job_AssignedResource" Member="AssignedResources" ThisKey="JobId" OtherKey="JobId" Type="AssignedResource" />
-      <Association Name="Job_RequiredPlugin" Member="RequiredPlugins" ThisKey="JobId" OtherKey="JobId" Type="RequiredPlugin" />
-      <Association Name="Job_Job" Member="Jobs" ThisKey="JobId" OtherKey="ParentJobId" Type="Job" />
-      <Association Name="Job_Job" Member="Job1" ThisKey="ParentJobId" OtherKey="JobId" Type="Job" IsForeignKey="true" />
-      <Association Name="Project_Job" Member="Project" ThisKey="ProjectId" OtherKey="ProjectId" Type="Project" IsForeignKey="true" DeleteRule="SET NULL" />
-      <Association Name="Client_Job" Member="Client" ThisKey="ResourceId" OtherKey="ResourceId" Type="Client" IsForeignKey="true" DeleteRule="SET NULL" />
-    </Type>
-  </Table>
-  <Table Name="dbo.UptimeCalendar" Member="UptimeCalendars">
-    <Type Name="UptimeCalendar">
-      <Column Name="UptimeCalendarId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" IsDbGenerated="true" CanBeNull="false" />
-      <Column Name="ResourceId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" CanBeNull="false" />
-      <Column Name="StartDate" Type="System.DateTime" DbType="DateTime NOT NULL" CanBeNull="false" />
-      <Column Name="EndDate" Type="System.DateTime" DbType="DateTime NOT NULL" CanBeNull="false" />
-      <Column Name="AllDayEvent" Type="System.Boolean" DbType="Bit NOT NULL" CanBeNull="false" />
-      <Column Name="Recurring" Type="System.Boolean" DbType="Bit NOT NULL" CanBeNull="false" />
-      <Column Name="RecurringId" Type="System.Guid" DbType="UniqueIdentifier" CanBeNull="false" />
-      <Association Name="Resource_UptimeCalendar" Member="Resource" ThisKey="ResourceId" OtherKey="ResourceId" Type="Resource" IsForeignKey="true" DeleteRule="CASCADE" DeleteOnNull="true" />
-    </Type>
-  </Table>
-  <Table Name="dbo.Client" Member="Clients">
-    <Type Name="Client">
-      <Column Name="ResourceId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
-      <Column Name="CPUSpeed" Type="System.Int32" DbType="Int NOT NULL" CanBeNull="false" />
-      <Column Name="Memory" Type="System.Int32" DbType="Int NOT NULL" CanBeNull="false" />
-      <Column Name="Login" Type="System.DateTime" DbType="DateTime NOT NULL" CanBeNull="false" />
-      <Column Name="Status" Type="System.String" DbType="VarChar(MAX)" CanBeNull="true" />
-      <Column Name="CalendarSyncStatus" Type="System.String" DbType="VarChar(MAX)" CanBeNull="true" />
-      <Column Name="UseCalendarFromResourceId" Type="System.Guid" DbType="UniqueIdentifier" CanBeNull="true" />
-      <Column Name="ClientConfigId" Type="System.Guid" DbType="UniqueIdentifier" CanBeNull="true" />
-      <Column Name="NumberOfCores" Type="System.Int32" DbType="Int NOT NULL" CanBeNull="false" />
-      <Column Name="NumberOfFreeCores" Type="System.Int32" DbType="Int NOT NULL" CanBeNull="false" />
-      <Column Name="FreeMemory" Type="System.Int32" DbType="Int NOT NULL" CanBeNull="false" />
-      <Association Name="Client_UptimeStatistic" Member="UptimeStatistics" ThisKey="ResourceId" OtherKey="ResourceId" Type="UptimeStatistic" />
-      <Association Name="Client_Job" Member="Jobs" ThisKey="ResourceId" OtherKey="ResourceId" Type="Job" />
-      <Association Name="Resource_Client" Member="Resource" ThisKey="ResourceId" OtherKey="ResourceId" Type="Resource" IsForeignKey="true" DeleteRule="CASCADE" DeleteOnNull="true" />
-      <Association Name="ClientConfig_Client" Member="ClientConfig" ThisKey="ClientConfigId" OtherKey="ClientConfigId" Type="ClientConfig" IsForeignKey="true" DeleteRule="SET NULL" />
-    </Type>
-  </Table>
-</Database>
Index: anches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/Hive.dbml.layout
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/Hive.dbml.layout	(revision 4422)
+++ 	(revision )
@@ -1,176 +1,0 @@
-﻿<?xml version="1.0" encoding="utf-8"?>
-<ordesignerObjectsDiagram dslVersion="1.0.0.0" absoluteBounds="0, 0, 14.25, 13.625" name="DataClasses1">
-  <DataContextMoniker Name="/HiveDataContext" />
-  <nestedChildShapes>
-    <classShape Id="3bbfffd4-3ad8-4ff9-b0ff-bdddca70b322" absoluteBounds="3.5, 3.75, 2, 1.3862939453125005">
-      <DataClassMoniker Name="/HiveDataContext/AssignedResource" />
-      <nestedChildShapes>
-        <elementListCompartment Id="40e2e788-932b-41d4-9853-f4bc011a045a" absoluteBounds="3.515, 4.21, 1.9700000000000002, 0.8262939453125" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
-      </nestedChildShapes>
-    </classShape>
-    <classShape Id="93016de7-5896-4132-9db6-bc2fe38230fe" absoluteBounds="0.5, 10.125, 2, 1.5785953776041666">
-      <DataClassMoniker Name="/HiveDataContext/UptimeStatistic" />
-      <nestedChildShapes>
-        <elementListCompartment Id="c1f9c6c9-81a2-4007-8bd0-bcadb42ee3d5" absoluteBounds="0.51499999999999968, 10.585, 1.9700000000000002, 1.0185953776041665" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
-      </nestedChildShapes>
-    </classShape>
-    <classShape Id="5f1881a6-9a97-4298-a30e-bc434b948d15" absoluteBounds="3.625, 12, 2, 1.3862939453124987">
-      <DataClassMoniker Name="/HiveDataContext/ClientConfig" />
-      <nestedChildShapes>
-        <elementListCompartment Id="3dbf7375-bb24-421c-a581-712b9ba03996" absoluteBounds="3.64, 12.46, 1.9700000000000002, 0.8262939453125" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
-      </nestedChildShapes>
-    </classShape>
-    <classShape Id="fdda4acc-8a1b-47c8-95ae-5e366f019c84" absoluteBounds="6, 5, 2, 1.0016910807291666">
-      <DataClassMoniker Name="/HiveDataContext/ClientGroup" />
-      <nestedChildShapes>
-        <elementListCompartment Id="a7ba98a6-72ae-4d79-ac43-e86da625101e" absoluteBounds="6.0150000000000006, 5.46, 1.9700000000000002, 0.44169108072916669" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
-      </nestedChildShapes>
-    </classShape>
-    <classShape Id="0535d2ec-d743-4b65-a1d6-70f7af1eead3" absoluteBounds="6, 6.375, 2, 1.3862939453125005">
-      <DataClassMoniker Name="/HiveDataContext/ClientGroup_Resource" />
-      <nestedChildShapes>
-        <elementListCompartment Id="21c0b804-20b8-44c5-8ca5-27abfd546691" absoluteBounds="6.015, 6.835, 1.9700000000000002, 0.8262939453125" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
-      </nestedChildShapes>
-    </classShape>
-    <classShape Id="a054f27a-f931-4019-b8a0-500bbd926986" absoluteBounds="12, 6.375, 2, 1.5785953776041666">
-      <DataClassMoniker Name="/HiveDataContext/PluginInfo" />
-      <nestedChildShapes>
-        <elementListCompartment Id="02e6b3f0-ccab-4dba-863d-9d35e1214765" absoluteBounds="12.015, 6.835, 1.9700000000000002, 1.0185953776041665" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
-      </nestedChildShapes>
-    </classShape>
-    <classShape Id="401c6a1e-69dc-43e4-a4c6-bfc7c2130170" absoluteBounds="6.25, 10.5, 2, 1.193992513020834">
-      <DataClassMoniker Name="/HiveDataContext/Project" />
-      <nestedChildShapes>
-        <elementListCompartment Id="ca3c7af1-fbed-43b6-8624-d94da9397e73" absoluteBounds="6.265, 10.96, 1.9700000000000002, 0.63399251302083326" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
-      </nestedChildShapes>
-    </classShape>
-    <classShape Id="59a84aec-bc57-49b5-a709-71cdf7612b31" absoluteBounds="12, 8.75, 2, 1.3862939453124987">
-      <DataClassMoniker Name="/HiveDataContext/RequiredPlugin" />
-      <nestedChildShapes>
-        <elementListCompartment Id="eabd8d36-2ac8-4d59-9e58-18e1ce2c7d22" absoluteBounds="12.015, 9.21, 1.9700000000000002, 0.8262939453125" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
-      </nestedChildShapes>
-    </classShape>
-    <classShape Id="e44e8355-4290-42f0-8b46-4473e91e504b" absoluteBounds="3.375, 5.75, 2, 1.1939925130208327">
-      <DataClassMoniker Name="/HiveDataContext/Resource" />
-      <nestedChildShapes>
-        <elementListCompartment Id="822605f6-079e-4225-bd10-dc002d09045d" absoluteBounds="3.39, 6.21, 1.9700000000000002, 0.63399251302083326" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
-      </nestedChildShapes>
-    </classShape>
-    <associationConnector edgePoints="[(7 : 6.00169108072917); (7 : 6.375)]" fixedFrom="NotFixed" fixedTo="NotFixed">
-      <AssociationMoniker Name="/HiveDataContext/ClientGroup/ClientGroup_ClientGroup_Resource" />
-      <nodes>
-        <classShapeMoniker Id="fdda4acc-8a1b-47c8-95ae-5e366f019c84" />
-        <classShapeMoniker Id="0535d2ec-d743-4b65-a1d6-70f7af1eead3" />
-      </nodes>
-    </associationConnector>
-    <associationConnector edgePoints="[(13 : 7.95359537760417); (13 : 8.75)]" fixedFrom="NotFixed" fixedTo="NotFixed">
-      <AssociationMoniker Name="/HiveDataContext/PluginInfo/PluginInfo_RequiredPlugin" />
-      <nodes>
-        <classShapeMoniker Id="a054f27a-f931-4019-b8a0-500bbd926986" />
-        <classShapeMoniker Id="59a84aec-bc57-49b5-a709-71cdf7612b31" />
-      </nodes>
-    </associationConnector>
-    <associationConnector edgePoints="[(4.78125 : 5.75); (4.78125 : 5.1362939453125)]" fixedFrom="NotFixed" fixedTo="NotFixed">
-      <AssociationMoniker Name="/HiveDataContext/Resource/Resource_AssignedResource" />
-      <nodes>
-        <classShapeMoniker Id="e44e8355-4290-42f0-8b46-4473e91e504b" />
-        <classShapeMoniker Id="3bbfffd4-3ad8-4ff9-b0ff-bdddca70b322" />
-      </nodes>
-    </associationConnector>
-    <associationConnector edgePoints="[(5.375 : 5.87584554036458); (6 : 5.87584554036458)]" fixedFrom="NotFixed" fixedTo="NotFixed">
-      <AssociationMoniker Name="/HiveDataContext/Resource/Resource_ClientGroup" />
-      <nodes>
-        <classShapeMoniker Id="e44e8355-4290-42f0-8b46-4473e91e504b" />
-        <classShapeMoniker Id="fdda4acc-8a1b-47c8-95ae-5e366f019c84" />
-      </nodes>
-    </associationConnector>
-    <associationConnector edgePoints="[(5.375 : 6.65949625651042); (6 : 6.65949625651042)]" fixedFrom="NotFixed" fixedTo="NotFixed">
-      <AssociationMoniker Name="/HiveDataContext/Resource/Resource_ClientGroup_Resource" />
-      <nodes>
-        <classShapeMoniker Id="e44e8355-4290-42f0-8b46-4473e91e504b" />
-        <classShapeMoniker Id="0535d2ec-d743-4b65-a1d6-70f7af1eead3" />
-      </nodes>
-    </associationConnector>
-    <classShape Id="9af04358-a545-4e37-bb13-d249fecfa769" absoluteBounds="9, 6.5, 2, 3.5016097005208326">
-      <DataClassMoniker Name="/HiveDataContext/Job" />
-      <nestedChildShapes>
-        <elementListCompartment Id="b55e771e-4639-44c8-9d16-727b309f657d" absoluteBounds="9.015, 6.96, 1.9700000000000002, 2.941609700520833" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
-      </nestedChildShapes>
-    </classShape>
-    <associationConnector edgePoints="[(10 : 6.5); (10 : 4.34375); (5.5 : 4.34375)]" fixedFrom="NotFixed" fixedTo="NotFixed">
-      <AssociationMoniker Name="/HiveDataContext/Job/Job_AssignedResource" />
-      <nodes>
-        <classShapeMoniker Id="9af04358-a545-4e37-bb13-d249fecfa769" />
-        <classShapeMoniker Id="3bbfffd4-3ad8-4ff9-b0ff-bdddca70b322" />
-      </nodes>
-    </associationConnector>
-    <associationConnector edgePoints="[(11 : 9.37580485026042); (12 : 9.37580485026042)]" fixedFrom="NotFixed" fixedTo="NotFixed">
-      <AssociationMoniker Name="/HiveDataContext/Job/Job_RequiredPlugin" />
-      <nodes>
-        <classShapeMoniker Id="9af04358-a545-4e37-bb13-d249fecfa769" />
-        <classShapeMoniker Id="59a84aec-bc57-49b5-a709-71cdf7612b31" />
-      </nodes>
-    </associationConnector>
-    <associationConnector edgePoints="[(9.70923076923077 : 10.0016097005208); (9.70923076923077 : 10.2516097005208); (10.3046153846154 : 10.2516097005208); (10.3046153846154 : 10.0016097005208)]" fixedFrom="NotFixed" fixedTo="NotFixed">
-      <AssociationMoniker Name="/HiveDataContext/Job/Job_Job" />
-      <nodes>
-        <classShapeMoniker Id="9af04358-a545-4e37-bb13-d249fecfa769" />
-        <classShapeMoniker Id="9af04358-a545-4e37-bb13-d249fecfa769" />
-      </nodes>
-    </associationConnector>
-    <associationConnector edgePoints="[(8.25 : 11.0969962565104); (9.32336288461538 : 11.0969962565104); (9.32336288461538 : 10.0016097005208)]" fixedFrom="NotFixed" fixedTo="NotFixed">
-      <AssociationMoniker Name="/HiveDataContext/Project/Project_Job" />
-      <nodes>
-        <classShapeMoniker Id="401c6a1e-69dc-43e4-a4c6-bfc7c2130170" />
-        <classShapeMoniker Id="9af04358-a545-4e37-bb13-d249fecfa769" />
-      </nodes>
-    </associationConnector>
-    <classShape Id="9ae82b5f-6e47-4a8e-8350-f7312381bb3b" absoluteBounds="0.625, 5.125, 2, 2.1554996744791666">
-      <DataClassMoniker Name="/HiveDataContext/UptimeCalendar" />
-      <nestedChildShapes>
-        <elementListCompartment Id="7469c6a3-4cb2-41c2-82b9-6999782218dd" absoluteBounds="0.64000000000000012, 5.585, 1.9700000000000002, 1.5954996744791665" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
-      </nestedChildShapes>
-    </classShape>
-    <associationConnector edgePoints="[(3.375 : 6.34699625651042); (2.625 : 6.34699625651042)]" fixedFrom="NotFixed" fixedTo="NotFixed">
-      <AssociationMoniker Name="/HiveDataContext/Resource/Resource_UptimeCalendar" />
-      <nodes>
-        <classShapeMoniker Id="e44e8355-4290-42f0-8b46-4473e91e504b" />
-        <classShapeMoniker Id="9ae82b5f-6e47-4a8e-8350-f7312381bb3b" />
-      </nodes>
-    </associationConnector>
-    <classShape Id="51cb317e-413a-4e25-a9b6-e903322f0371" absoluteBounds="3.875, 8.25, 2, 2.9247054036458331">
-      <DataClassMoniker Name="/HiveDataContext/Client" />
-      <nestedChildShapes>
-        <elementListCompartment Id="0103eb78-0280-47ac-a748-9c6593a9640b" absoluteBounds="3.89, 8.71, 1.9700000000000002, 2.364705403645833" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
-      </nestedChildShapes>
-    </classShape>
-    <associationConnector edgePoints="[(3.875 : 10.6498527018229); (2.5 : 10.6498527018229)]" fixedFrom="NotFixed" fixedTo="NotFixed">
-      <AssociationMoniker Name="/HiveDataContext/Client/Client_UptimeStatistic" />
-      <nodes>
-        <classShapeMoniker Id="51cb317e-413a-4e25-a9b6-e903322f0371" />
-        <classShapeMoniker Id="93016de7-5896-4132-9db6-bc2fe38230fe" />
-      </nodes>
-    </associationConnector>
-    <associationConnector edgePoints="[(5.875 : 9.12580485026042); (9 : 9.12580485026042)]" fixedFrom="NotFixed" fixedTo="NotFixed">
-      <AssociationMoniker Name="/HiveDataContext/Client/Client_Job" />
-      <nodes>
-        <classShapeMoniker Id="51cb317e-413a-4e25-a9b6-e903322f0371" />
-        <classShapeMoniker Id="9af04358-a545-4e37-bb13-d249fecfa769" />
-      </nodes>
-    </associationConnector>
-    <associationConnector edgePoints="[(4.625 : 6.94399251302083); (4.625 : 8.25)]" fixedFrom="NotFixed" fixedTo="NotFixed">
-      <AssociationMoniker Name="/HiveDataContext/Resource/Resource_Client" />
-      <nodes>
-        <classShapeMoniker Id="e44e8355-4290-42f0-8b46-4473e91e504b" />
-        <classShapeMoniker Id="51cb317e-413a-4e25-a9b6-e903322f0371" />
-      </nodes>
-    </associationConnector>
-    <associationConnector edgePoints="[(4.75 : 12); (4.75 : 11.1747054036458)]" fixedFrom="NotFixed" fixedTo="NotFixed">
-      <AssociationMoniker Name="/HiveDataContext/ClientConfig/ClientConfig_Client" />
-      <nodes>
-        <classShapeMoniker Id="5f1881a6-9a97-4298-a30e-bc434b948d15" />
-        <classShapeMoniker Id="51cb317e-413a-4e25-a9b6-e903322f0371" />
-      </nodes>
-    </associationConnector>
-  </nestedChildShapes>
-</ordesignerObjectsDiagram>
Index: anches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/Hive.designer.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/Hive.designer.cs	(revision 4422)
+++ 	(revision )
@@ -1,2996 +1,0 @@
-﻿#pragma warning disable 1591
-//------------------------------------------------------------------------------
-// <auto-generated>
-//     This code was generated by a tool.
-//     Runtime Version:2.0.50727.3603
-//
-//     Changes to this file may cause incorrect behavior and will be lost if
-//     the code is regenerated.
-// </auto-generated>
-//------------------------------------------------------------------------------
-
-namespace HeuristicLab.Hive.Server.LINQDataAccess
-{
-	using System.Data.Linq;
-	using System.Data.Linq.Mapping;
-	using System.Data;
-	using System.Collections.Generic;
-	using System.Reflection;
-	using System.Linq;
-	using System.Linq.Expressions;
-	using System.ComponentModel;
-	using System;
-	
-	
-	[System.Data.Linq.Mapping.DatabaseAttribute(Name="HeuristicLab.Hive.Linq")]
-	public partial class HiveDataContext : System.Data.Linq.DataContext
-	{
-		
-		private static System.Data.Linq.Mapping.MappingSource mappingSource = new AttributeMappingSource();
-		
-    #region Extensibility Method Definitions
-    partial void OnCreated();
-    partial void InsertAssignedResource(AssignedResource instance);
-    partial void UpdateAssignedResource(AssignedResource instance);
-    partial void DeleteAssignedResource(AssignedResource instance);
-    partial void InsertUptimeStatistic(UptimeStatistic instance);
-    partial void UpdateUptimeStatistic(UptimeStatistic instance);
-    partial void DeleteUptimeStatistic(UptimeStatistic instance);
-    partial void InsertClientConfig(ClientConfig instance);
-    partial void UpdateClientConfig(ClientConfig instance);
-    partial void DeleteClientConfig(ClientConfig instance);
-    partial void InsertClientGroup(ClientGroup instance);
-    partial void UpdateClientGroup(ClientGroup instance);
-    partial void DeleteClientGroup(ClientGroup instance);
-    partial void InsertClientGroup_Resource(ClientGroup_Resource instance);
-    partial void UpdateClientGroup_Resource(ClientGroup_Resource instance);
-    partial void DeleteClientGroup_Resource(ClientGroup_Resource instance);
-    partial void InsertPluginInfo(PluginInfo instance);
-    partial void UpdatePluginInfo(PluginInfo instance);
-    partial void DeletePluginInfo(PluginInfo instance);
-    partial void InsertProject(Project instance);
-    partial void UpdateProject(Project instance);
-    partial void DeleteProject(Project instance);
-    partial void InsertRequiredPlugin(RequiredPlugin instance);
-    partial void UpdateRequiredPlugin(RequiredPlugin instance);
-    partial void DeleteRequiredPlugin(RequiredPlugin instance);
-    partial void InsertResource(Resource instance);
-    partial void UpdateResource(Resource instance);
-    partial void DeleteResource(Resource instance);
-    partial void InsertJob(Job instance);
-    partial void UpdateJob(Job instance);
-    partial void DeleteJob(Job instance);
-    partial void InsertUptimeCalendar(UptimeCalendar instance);
-    partial void UpdateUptimeCalendar(UptimeCalendar instance);
-    partial void DeleteUptimeCalendar(UptimeCalendar instance);
-    partial void InsertClient(Client instance);
-    partial void UpdateClient(Client instance);
-    partial void DeleteClient(Client instance);
-    #endregion
-		
-		public HiveDataContext() : 
-				base(global::HeuristicLab.Hive.Server.LINQDataAccess.Properties.Settings.Default.HeuristicLab_Hive_LinqConnectionString, mappingSource)
-		{
-			OnCreated();
-		}
-		
-		public HiveDataContext(string connection) : 
-				base(connection, mappingSource)
-		{
-			OnCreated();
-		}
-		
-		public HiveDataContext(System.Data.IDbConnection connection) : 
-				base(connection, mappingSource)
-		{
-			OnCreated();
-		}
-		
-		public HiveDataContext(string connection, System.Data.Linq.Mapping.MappingSource mappingSource) : 
-				base(connection, mappingSource)
-		{
-			OnCreated();
-		}
-		
-		public HiveDataContext(System.Data.IDbConnection connection, System.Data.Linq.Mapping.MappingSource mappingSource) : 
-				base(connection, mappingSource)
-		{
-			OnCreated();
-		}
-		
-		public System.Data.Linq.Table<AssignedResource> AssignedResources
-		{
-			get
-			{
-				return this.GetTable<AssignedResource>();
-			}
-		}
-		
-		public System.Data.Linq.Table<UptimeStatistic> UptimeStatistics
-		{
-			get
-			{
-				return this.GetTable<UptimeStatistic>();
-			}
-		}
-		
-		public System.Data.Linq.Table<ClientConfig> ClientConfigs
-		{
-			get
-			{
-				return this.GetTable<ClientConfig>();
-			}
-		}
-		
-		public System.Data.Linq.Table<ClientGroup> ClientGroups
-		{
-			get
-			{
-				return this.GetTable<ClientGroup>();
-			}
-		}
-		
-		public System.Data.Linq.Table<ClientGroup_Resource> ClientGroup_Resources
-		{
-			get
-			{
-				return this.GetTable<ClientGroup_Resource>();
-			}
-		}
-		
-		public System.Data.Linq.Table<PluginInfo> PluginInfos
-		{
-			get
-			{
-				return this.GetTable<PluginInfo>();
-			}
-		}
-		
-		public System.Data.Linq.Table<Project> Projects
-		{
-			get
-			{
-				return this.GetTable<Project>();
-			}
-		}
-		
-		public System.Data.Linq.Table<RequiredPlugin> RequiredPlugins
-		{
-			get
-			{
-				return this.GetTable<RequiredPlugin>();
-			}
-		}
-		
-		public System.Data.Linq.Table<Resource> Resources
-		{
-			get
-			{
-				return this.GetTable<Resource>();
-			}
-		}
-		
-		public System.Data.Linq.Table<Job> Jobs
-		{
-			get
-			{
-				return this.GetTable<Job>();
-			}
-		}
-		
-		public System.Data.Linq.Table<UptimeCalendar> UptimeCalendars
-		{
-			get
-			{
-				return this.GetTable<UptimeCalendar>();
-			}
-		}
-		
-		public System.Data.Linq.Table<Client> Clients
-		{
-			get
-			{
-				return this.GetTable<Client>();
-			}
-		}
-	}
-	
-	[Table(Name="dbo.AssignedResources")]
-	public partial class AssignedResource : INotifyPropertyChanging, INotifyPropertyChanged
-	{
-		
-		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
-		
-		private System.Guid _ResourceId;
-		
-		private System.Guid _JobId;
-		
-		private System.Guid _AssignedRessourcesId;
-		
-		private EntityRef<Resource> _Resource;
-		
-		private EntityRef<Job> _Job;
-		
-    #region Extensibility Method Definitions
-    partial void OnLoaded();
-    partial void OnValidate(System.Data.Linq.ChangeAction action);
-    partial void OnCreated();
-    partial void OnResourceIdChanging(System.Guid value);
-    partial void OnResourceIdChanged();
-    partial void OnJobIdChanging(System.Guid value);
-    partial void OnJobIdChanged();
-    partial void OnAssignedRessourcesIdChanging(System.Guid value);
-    partial void OnAssignedRessourcesIdChanged();
-    #endregion
-		
-		public AssignedResource()
-		{
-			this._Resource = default(EntityRef<Resource>);
-			this._Job = default(EntityRef<Job>);
-			OnCreated();
-		}
-		
-		[Column(Storage="_ResourceId", DbType="UniqueIdentifier NOT NULL")]
-		public System.Guid ResourceId
-		{
-			get
-			{
-				return this._ResourceId;
-			}
-			set
-			{
-				if ((this._ResourceId != value))
-				{
-					if (this._Resource.HasLoadedOrAssignedValue)
-					{
-						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
-					}
-					this.OnResourceIdChanging(value);
-					this.SendPropertyChanging();
-					this._ResourceId = value;
-					this.SendPropertyChanged("ResourceId");
-					this.OnResourceIdChanged();
-				}
-			}
-		}
-		
-		[Column(Storage="_JobId", DbType="UniqueIdentifier NOT NULL")]
-		public System.Guid JobId
-		{
-			get
-			{
-				return this._JobId;
-			}
-			set
-			{
-				if ((this._JobId != value))
-				{
-					if (this._Job.HasLoadedOrAssignedValue)
-					{
-						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
-					}
-					this.OnJobIdChanging(value);
-					this.SendPropertyChanging();
-					this._JobId = value;
-					this.SendPropertyChanged("JobId");
-					this.OnJobIdChanged();
-				}
-			}
-		}
-		
-		[Column(Storage="_AssignedRessourcesId", AutoSync=AutoSync.OnInsert, DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true, IsDbGenerated=true)]
-		public System.Guid AssignedRessourcesId
-		{
-			get
-			{
-				return this._AssignedRessourcesId;
-			}
-			set
-			{
-				if ((this._AssignedRessourcesId != value))
-				{
-					this.OnAssignedRessourcesIdChanging(value);
-					this.SendPropertyChanging();
-					this._AssignedRessourcesId = value;
-					this.SendPropertyChanged("AssignedRessourcesId");
-					this.OnAssignedRessourcesIdChanged();
-				}
-			}
-		}
-		
-		[Association(Name="Resource_AssignedResource", Storage="_Resource", ThisKey="ResourceId", OtherKey="ResourceId", IsForeignKey=true, DeleteOnNull=true, DeleteRule="CASCADE")]
-		public Resource Resource
-		{
-			get
-			{
-				return this._Resource.Entity;
-			}
-			set
-			{
-				Resource previousValue = this._Resource.Entity;
-				if (((previousValue != value) 
-							|| (this._Resource.HasLoadedOrAssignedValue == false)))
-				{
-					this.SendPropertyChanging();
-					if ((previousValue != null))
-					{
-						this._Resource.Entity = null;
-						previousValue.AssignedResources.Remove(this);
-					}
-					this._Resource.Entity = value;
-					if ((value != null))
-					{
-						value.AssignedResources.Add(this);
-						this._ResourceId = value.ResourceId;
-					}
-					else
-					{
-						this._ResourceId = default(System.Guid);
-					}
-					this.SendPropertyChanged("Resource");
-				}
-			}
-		}
-		
-		[Association(Name="Job_AssignedResource", Storage="_Job", ThisKey="JobId", OtherKey="JobId", IsForeignKey=true, DeleteOnNull=true, DeleteRule="CASCADE")]
-		public Job Job
-		{
-			get
-			{
-				return this._Job.Entity;
-			}
-			set
-			{
-				Job previousValue = this._Job.Entity;
-				if (((previousValue != value) 
-							|| (this._Job.HasLoadedOrAssignedValue == false)))
-				{
-					this.SendPropertyChanging();
-					if ((previousValue != null))
-					{
-						this._Job.Entity = null;
-						previousValue.AssignedResources.Remove(this);
-					}
-					this._Job.Entity = value;
-					if ((value != null))
-					{
-						value.AssignedResources.Add(this);
-						this._JobId = value.JobId;
-					}
-					else
-					{
-						this._JobId = default(System.Guid);
-					}
-					this.SendPropertyChanged("Job");
-				}
-			}
-		}
-		
-		public event PropertyChangingEventHandler PropertyChanging;
-		
-		public event PropertyChangedEventHandler PropertyChanged;
-		
-		protected virtual void SendPropertyChanging()
-		{
-			if ((this.PropertyChanging != null))
-			{
-				this.PropertyChanging(this, emptyChangingEventArgs);
-			}
-		}
-		
-		protected virtual void SendPropertyChanged(String propertyName)
-		{
-			if ((this.PropertyChanged != null))
-			{
-				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
-			}
-		}
-	}
-	
-	[Table(Name="dbo.UptimeStatistics")]
-	public partial class UptimeStatistic : INotifyPropertyChanging, INotifyPropertyChanged
-	{
-		
-		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
-		
-		private System.Guid _UptimeStatisticsId;
-		
-		private System.Nullable<System.DateTime> _Login;
-		
-		private System.Nullable<System.DateTime> _Logout;
-		
-		private System.Nullable<System.Guid> _ResourceId;
-		
-		private EntityRef<Client> _Client;
-		
-    #region Extensibility Method Definitions
-    partial void OnLoaded();
-    partial void OnValidate(System.Data.Linq.ChangeAction action);
-    partial void OnCreated();
-    partial void OnUptimeStatisticsIdChanging(System.Guid value);
-    partial void OnUptimeStatisticsIdChanged();
-    partial void OnLoginChanging(System.Nullable<System.DateTime> value);
-    partial void OnLoginChanged();
-    partial void OnLogoutChanging(System.Nullable<System.DateTime> value);
-    partial void OnLogoutChanged();
-    partial void OnResourceIdChanging(System.Nullable<System.Guid> value);
-    partial void OnResourceIdChanged();
-    #endregion
-		
-		public UptimeStatistic()
-		{
-			this._Client = default(EntityRef<Client>);
-			OnCreated();
-		}
-		
-		[Column(Storage="_UptimeStatisticsId", AutoSync=AutoSync.OnInsert, DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true, IsDbGenerated=true)]
-		public System.Guid UptimeStatisticsId
-		{
-			get
-			{
-				return this._UptimeStatisticsId;
-			}
-			set
-			{
-				if ((this._UptimeStatisticsId != value))
-				{
-					this.OnUptimeStatisticsIdChanging(value);
-					this.SendPropertyChanging();
-					this._UptimeStatisticsId = value;
-					this.SendPropertyChanged("UptimeStatisticsId");
-					this.OnUptimeStatisticsIdChanged();
-				}
-			}
-		}
-		
-		[Column(Storage="_Login", DbType="DateTime")]
-		public System.Nullable<System.DateTime> Login
-		{
-			get
-			{
-				return this._Login;
-			}
-			set
-			{
-				if ((this._Login != value))
-				{
-					this.OnLoginChanging(value);
-					this.SendPropertyChanging();
-					this._Login = value;
-					this.SendPropertyChanged("Login");
-					this.OnLoginChanged();
-				}
-			}
-		}
-		
-		[Column(Storage="_Logout", DbType="DateTime")]
-		public System.Nullable<System.DateTime> Logout
-		{
-			get
-			{
-				return this._Logout;
-			}
-			set
-			{
-				if ((this._Logout != value))
-				{
-					this.OnLogoutChanging(value);
-					this.SendPropertyChanging();
-					this._Logout = value;
-					this.SendPropertyChanged("Logout");
-					this.OnLogoutChanged();
-				}
-			}
-		}
-		
-		[Column(Storage="_ResourceId", DbType="UniqueIdentifier")]
-		public System.Nullable<System.Guid> ResourceId
-		{
-			get
-			{
-				return this._ResourceId;
-			}
-			set
-			{
-				if ((this._ResourceId != value))
-				{
-					if (this._Client.HasLoadedOrAssignedValue)
-					{
-						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
-					}
-					this.OnResourceIdChanging(value);
-					this.SendPropertyChanging();
-					this._ResourceId = value;
-					this.SendPropertyChanged("ResourceId");
-					this.OnResourceIdChanged();
-				}
-			}
-		}
-		
-		[Association(Name="Client_UptimeStatistic", Storage="_Client", ThisKey="ResourceId", OtherKey="ResourceId", IsForeignKey=true, DeleteRule="SET NULL")]
-		public Client Client
-		{
-			get
-			{
-				return this._Client.Entity;
-			}
-			set
-			{
-				Client previousValue = this._Client.Entity;
-				if (((previousValue != value) 
-							|| (this._Client.HasLoadedOrAssignedValue == false)))
-				{
-					this.SendPropertyChanging();
-					if ((previousValue != null))
-					{
-						this._Client.Entity = null;
-						previousValue.UptimeStatistics.Remove(this);
-					}
-					this._Client.Entity = value;
-					if ((value != null))
-					{
-						value.UptimeStatistics.Add(this);
-						this._ResourceId = value.ResourceId;
-					}
-					else
-					{
-						this._ResourceId = default(Nullable<System.Guid>);
-					}
-					this.SendPropertyChanged("Client");
-				}
-			}
-		}
-		
-		public event PropertyChangingEventHandler PropertyChanging;
-		
-		public event PropertyChangedEventHandler PropertyChanged;
-		
-		protected virtual void SendPropertyChanging()
-		{
-			if ((this.PropertyChanging != null))
-			{
-				this.PropertyChanging(this, emptyChangingEventArgs);
-			}
-		}
-		
-		protected virtual void SendPropertyChanged(String propertyName)
-		{
-			if ((this.PropertyChanged != null))
-			{
-				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
-			}
-		}
-	}
-	
-	[Table(Name="dbo.ClientConfig")]
-	public partial class ClientConfig : INotifyPropertyChanging, INotifyPropertyChanged
-	{
-		
-		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
-		
-		private System.Guid _ClientConfigId;
-		
-		private System.Xml.Linq.XElement _UpDownTimeCalendar;
-		
-		private System.Nullable<int> _HeartBeatIntervall;
-		
-		private EntitySet<Client> _Clients;
-		
-    #region Extensibility Method Definitions
-    partial void OnLoaded();
-    partial void OnValidate(System.Data.Linq.ChangeAction action);
-    partial void OnCreated();
-    partial void OnClientConfigIdChanging(System.Guid value);
-    partial void OnClientConfigIdChanged();
-    partial void OnUpDownTimeCalendarChanging(System.Xml.Linq.XElement value);
-    partial void OnUpDownTimeCalendarChanged();
-    partial void OnHeartBeatIntervallChanging(System.Nullable<int> value);
-    partial void OnHeartBeatIntervallChanged();
-    #endregion
-		
-		public ClientConfig()
-		{
-			this._Clients = new EntitySet<Client>(new Action<Client>(this.attach_Clients), new Action<Client>(this.detach_Clients));
-			OnCreated();
-		}
-		
-		[Column(Storage="_ClientConfigId", AutoSync=AutoSync.OnInsert, DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true, IsDbGenerated=true)]
-		public System.Guid ClientConfigId
-		{
-			get
-			{
-				return this._ClientConfigId;
-			}
-			set
-			{
-				if ((this._ClientConfigId != value))
-				{
-					this.OnClientConfigIdChanging(value);
-					this.SendPropertyChanging();
-					this._ClientConfigId = value;
-					this.SendPropertyChanged("ClientConfigId");
-					this.OnClientConfigIdChanged();
-				}
-			}
-		}
-		
-		[Column(Storage="_UpDownTimeCalendar", DbType="Xml", UpdateCheck=UpdateCheck.Never)]
-		public System.Xml.Linq.XElement UpDownTimeCalendar
-		{
-			get
-			{
-				return this._UpDownTimeCalendar;
-			}
-			set
-			{
-				if ((this._UpDownTimeCalendar != value))
-				{
-					this.OnUpDownTimeCalendarChanging(value);
-					this.SendPropertyChanging();
-					this._UpDownTimeCalendar = value;
-					this.SendPropertyChanged("UpDownTimeCalendar");
-					this.OnUpDownTimeCalendarChanged();
-				}
-			}
-		}
-		
-		[Column(Storage="_HeartBeatIntervall", DbType="Int")]
-		public System.Nullable<int> HeartBeatIntervall
-		{
-			get
-			{
-				return this._HeartBeatIntervall;
-			}
-			set
-			{
-				if ((this._HeartBeatIntervall != value))
-				{
-					this.OnHeartBeatIntervallChanging(value);
-					this.SendPropertyChanging();
-					this._HeartBeatIntervall = value;
-					this.SendPropertyChanged("HeartBeatIntervall");
-					this.OnHeartBeatIntervallChanged();
-				}
-			}
-		}
-		
-		[Association(Name="ClientConfig_Client", Storage="_Clients", ThisKey="ClientConfigId", OtherKey="ClientConfigId")]
-		public EntitySet<Client> Clients
-		{
-			get
-			{
-				return this._Clients;
-			}
-			set
-			{
-				this._Clients.Assign(value);
-			}
-		}
-		
-		public event PropertyChangingEventHandler PropertyChanging;
-		
-		public event PropertyChangedEventHandler PropertyChanged;
-		
-		protected virtual void SendPropertyChanging()
-		{
-			if ((this.PropertyChanging != null))
-			{
-				this.PropertyChanging(this, emptyChangingEventArgs);
-			}
-		}
-		
-		protected virtual void SendPropertyChanged(String propertyName)
-		{
-			if ((this.PropertyChanged != null))
-			{
-				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
-			}
-		}
-		
-		private void attach_Clients(Client entity)
-		{
-			this.SendPropertyChanging();
-			entity.ClientConfig = this;
-		}
-		
-		private void detach_Clients(Client entity)
-		{
-			this.SendPropertyChanging();
-			entity.ClientConfig = null;
-		}
-	}
-	
-	[Table(Name="dbo.ClientGroup")]
-	public partial class ClientGroup : INotifyPropertyChanging, INotifyPropertyChanged
-	{
-		
-		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
-		
-		private System.Guid _ResourceId;
-		
-		private EntitySet<ClientGroup_Resource> _ClientGroup_Resources;
-		
-		private EntityRef<Resource> _Resource;
-		
-    #region Extensibility Method Definitions
-    partial void OnLoaded();
-    partial void OnValidate(System.Data.Linq.ChangeAction action);
-    partial void OnCreated();
-    partial void OnResourceIdChanging(System.Guid value);
-    partial void OnResourceIdChanged();
-    #endregion
-		
-		public ClientGroup()
-		{
-			this._ClientGroup_Resources = new EntitySet<ClientGroup_Resource>(new Action<ClientGroup_Resource>(this.attach_ClientGroup_Resources), new Action<ClientGroup_Resource>(this.detach_ClientGroup_Resources));
-			this._Resource = default(EntityRef<Resource>);
-			OnCreated();
-		}
-		
-		[Column(Storage="_ResourceId", DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true)]
-		public System.Guid ResourceId
-		{
-			get
-			{
-				return this._ResourceId;
-			}
-			set
-			{
-				if ((this._ResourceId != value))
-				{
-					if (this._Resource.HasLoadedOrAssignedValue)
-					{
-						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
-					}
-					this.OnResourceIdChanging(value);
-					this.SendPropertyChanging();
-					this._ResourceId = value;
-					this.SendPropertyChanged("ResourceId");
-					this.OnResourceIdChanged();
-				}
-			}
-		}
-		
-		[Association(Name="ClientGroup_ClientGroup_Resource", Storage="_ClientGroup_Resources", ThisKey="ResourceId", OtherKey="ClientGroupId")]
-		public EntitySet<ClientGroup_Resource> ClientGroup_Resources
-		{
-			get
-			{
-				return this._ClientGroup_Resources;
-			}
-			set
-			{
-				this._ClientGroup_Resources.Assign(value);
-			}
-		}
-		
-		[Association(Name="Resource_ClientGroup", Storage="_Resource", ThisKey="ResourceId", OtherKey="ResourceId", IsForeignKey=true, DeleteOnNull=true, DeleteRule="CASCADE")]
-		public Resource Resource
-		{
-			get
-			{
-				return this._Resource.Entity;
-			}
-			set
-			{
-				Resource previousValue = this._Resource.Entity;
-				if (((previousValue != value) 
-							|| (this._Resource.HasLoadedOrAssignedValue == false)))
-				{
-					this.SendPropertyChanging();
-					if ((previousValue != null))
-					{
-						this._Resource.Entity = null;
-						previousValue.ClientGroup = null;
-					}
-					this._Resource.Entity = value;
-					if ((value != null))
-					{
-						value.ClientGroup = this;
-						this._ResourceId = value.ResourceId;
-					}
-					else
-					{
-						this._ResourceId = default(System.Guid);
-					}
-					this.SendPropertyChanged("Resource");
-				}
-			}
-		}
-		
-		public event PropertyChangingEventHandler PropertyChanging;
-		
-		public event PropertyChangedEventHandler PropertyChanged;
-		
-		protected virtual void SendPropertyChanging()
-		{
-			if ((this.PropertyChanging != null))
-			{
-				this.PropertyChanging(this, emptyChangingEventArgs);
-			}
-		}
-		
-		protected virtual void SendPropertyChanged(String propertyName)
-		{
-			if ((this.PropertyChanged != null))
-			{
-				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
-			}
-		}
-		
-		private void attach_ClientGroup_Resources(ClientGroup_Resource entity)
-		{
-			this.SendPropertyChanging();
-			entity.ClientGroup = this;
-		}
-		
-		private void detach_ClientGroup_Resources(ClientGroup_Resource entity)
-		{
-			this.SendPropertyChanging();
-			entity.ClientGroup = null;
-		}
-	}
-	
-	[Table(Name="dbo.ClientGroup_Resource")]
-	public partial class ClientGroup_Resource : INotifyPropertyChanging, INotifyPropertyChanged
-	{
-		
-		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
-		
-		private System.Guid _ClientGroupId;
-		
-		private System.Guid _ResourceId;
-		
-		private System.Guid _ClientGroup_RessourceId;
-		
-		private EntityRef<ClientGroup> _ClientGroup;
-		
-		private EntityRef<Resource> _Resource;
-		
-    #region Extensibility Method Definitions
-    partial void OnLoaded();
-    partial void OnValidate(System.Data.Linq.ChangeAction action);
-    partial void OnCreated();
-    partial void OnClientGroupIdChanging(System.Guid value);
-    partial void OnClientGroupIdChanged();
-    partial void OnResourceIdChanging(System.Guid value);
-    partial void OnResourceIdChanged();
-    partial void OnClientGroup_RessourceIdChanging(System.Guid value);
-    partial void OnClientGroup_RessourceIdChanged();
-    #endregion
-		
-		public ClientGroup_Resource()
-		{
-			this._ClientGroup = default(EntityRef<ClientGroup>);
-			this._Resource = default(EntityRef<Resource>);
-			OnCreated();
-		}
-		
-		[Column(Storage="_ClientGroupId", DbType="UniqueIdentifier NOT NULL")]
-		public System.Guid ClientGroupId
-		{
-			get
-			{
-				return this._ClientGroupId;
-			}
-			set
-			{
-				if ((this._ClientGroupId != value))
-				{
-					if (this._ClientGroup.HasLoadedOrAssignedValue)
-					{
-						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
-					}
-					this.OnClientGroupIdChanging(value);
-					this.SendPropertyChanging();
-					this._ClientGroupId = value;
-					this.SendPropertyChanged("ClientGroupId");
-					this.OnClientGroupIdChanged();
-				}
-			}
-		}
-		
-		[Column(Storage="_ResourceId", DbType="UniqueIdentifier NOT NULL")]
-		public System.Guid ResourceId
-		{
-			get
-			{
-				return this._ResourceId;
-			}
-			set
-			{
-				if ((this._ResourceId != value))
-				{
-					if (this._Resource.HasLoadedOrAssignedValue)
-					{
-						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
-					}
-					this.OnResourceIdChanging(value);
-					this.SendPropertyChanging();
-					this._ResourceId = value;
-					this.SendPropertyChanged("ResourceId");
-					this.OnResourceIdChanged();
-				}
-			}
-		}
-		
-		[Column(Storage="_ClientGroup_RessourceId", AutoSync=AutoSync.OnInsert, DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true, IsDbGenerated=true)]
-		public System.Guid ClientGroup_RessourceId
-		{
-			get
-			{
-				return this._ClientGroup_RessourceId;
-			}
-			set
-			{
-				if ((this._ClientGroup_RessourceId != value))
-				{
-					this.OnClientGroup_RessourceIdChanging(value);
-					this.SendPropertyChanging();
-					this._ClientGroup_RessourceId = value;
-					this.SendPropertyChanged("ClientGroup_RessourceId");
-					this.OnClientGroup_RessourceIdChanged();
-				}
-			}
-		}
-		
-		[Association(Name="ClientGroup_ClientGroup_Resource", Storage="_ClientGroup", ThisKey="ClientGroupId", OtherKey="ResourceId", IsForeignKey=true)]
-		public ClientGroup ClientGroup
-		{
-			get
-			{
-				return this._ClientGroup.Entity;
-			}
-			set
-			{
-				ClientGroup previousValue = this._ClientGroup.Entity;
-				if (((previousValue != value) 
-							|| (this._ClientGroup.HasLoadedOrAssignedValue == false)))
-				{
-					this.SendPropertyChanging();
-					if ((previousValue != null))
-					{
-						this._ClientGroup.Entity = null;
-						previousValue.ClientGroup_Resources.Remove(this);
-					}
-					this._ClientGroup.Entity = value;
-					if ((value != null))
-					{
-						value.ClientGroup_Resources.Add(this);
-						this._ClientGroupId = value.ResourceId;
-					}
-					else
-					{
-						this._ClientGroupId = default(System.Guid);
-					}
-					this.SendPropertyChanged("ClientGroup");
-				}
-			}
-		}
-		
-		[Association(Name="Resource_ClientGroup_Resource", Storage="_Resource", ThisKey="ResourceId", OtherKey="ResourceId", IsForeignKey=true, DeleteOnNull=true, DeleteRule="CASCADE")]
-		public Resource Resource
-		{
-			get
-			{
-				return this._Resource.Entity;
-			}
-			set
-			{
-				Resource previousValue = this._Resource.Entity;
-				if (((previousValue != value) 
-							|| (this._Resource.HasLoadedOrAssignedValue == false)))
-				{
-					this.SendPropertyChanging();
-					if ((previousValue != null))
-					{
-						this._Resource.Entity = null;
-						previousValue.ClientGroup_Resources.Remove(this);
-					}
-					this._Resource.Entity = value;
-					if ((value != null))
-					{
-						value.ClientGroup_Resources.Add(this);
-						this._ResourceId = value.ResourceId;
-					}
-					else
-					{
-						this._ResourceId = default(System.Guid);
-					}
-					this.SendPropertyChanged("Resource");
-				}
-			}
-		}
-		
-		public event PropertyChangingEventHandler PropertyChanging;
-		
-		public event PropertyChangedEventHandler PropertyChanged;
-		
-		protected virtual void SendPropertyChanging()
-		{
-			if ((this.PropertyChanging != null))
-			{
-				this.PropertyChanging(this, emptyChangingEventArgs);
-			}
-		}
-		
-		protected virtual void SendPropertyChanged(String propertyName)
-		{
-			if ((this.PropertyChanged != null))
-			{
-				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
-			}
-		}
-	}
-	
-	[Table(Name="dbo.PluginInfo")]
-	public partial class PluginInfo : INotifyPropertyChanging, INotifyPropertyChanged
-	{
-		
-		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
-		
-		private System.Guid _PluginId;
-		
-		private string _Name;
-		
-		private string _Version;
-		
-		private string _BuildDate;
-		
-		private EntitySet<RequiredPlugin> _RequiredPlugins;
-		
-    #region Extensibility Method Definitions
-    partial void OnLoaded();
-    partial void OnValidate(System.Data.Linq.ChangeAction action);
-    partial void OnCreated();
-    partial void OnPluginIdChanging(System.Guid value);
-    partial void OnPluginIdChanged();
-    partial void OnNameChanging(string value);
-    partial void OnNameChanged();
-    partial void OnVersionChanging(string value);
-    partial void OnVersionChanged();
-    partial void OnBuildDateChanging(string value);
-    partial void OnBuildDateChanged();
-    #endregion
-		
-		public PluginInfo()
-		{
-			this._RequiredPlugins = new EntitySet<RequiredPlugin>(new Action<RequiredPlugin>(this.attach_RequiredPlugins), new Action<RequiredPlugin>(this.detach_RequiredPlugins));
-			OnCreated();
-		}
-		
-		[Column(Storage="_PluginId", AutoSync=AutoSync.OnInsert, DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true, IsDbGenerated=true)]
-		public System.Guid PluginId
-		{
-			get
-			{
-				return this._PluginId;
-			}
-			set
-			{
-				if ((this._PluginId != value))
-				{
-					this.OnPluginIdChanging(value);
-					this.SendPropertyChanging();
-					this._PluginId = value;
-					this.SendPropertyChanged("PluginId");
-					this.OnPluginIdChanged();
-				}
-			}
-		}
-		
-		[Column(Storage="_Name", DbType="VarChar(MAX)")]
-		public string Name
-		{
-			get
-			{
-				return this._Name;
-			}
-			set
-			{
-				if ((this._Name != value))
-				{
-					this.OnNameChanging(value);
-					this.SendPropertyChanging();
-					this._Name = value;
-					this.SendPropertyChanged("Name");
-					this.OnNameChanged();
-				}
-			}
-		}
-		
-		[Column(Storage="_Version", DbType="VarChar(MAX)")]
-		public string Version
-		{
-			get
-			{
-				return this._Version;
-			}
-			set
-			{
-				if ((this._Version != value))
-				{
-					this.OnVersionChanging(value);
-					this.SendPropertyChanging();
-					this._Version = value;
-					this.SendPropertyChanged("Version");
-					this.OnVersionChanged();
-				}
-			}
-		}
-		
-		[Column(Storage="_BuildDate", DbType="VarChar(20)")]
-		public string BuildDate
-		{
-			get
-			{
-				return this._BuildDate;
-			}
-			set
-			{
-				if ((this._BuildDate != value))
-				{
-					this.OnBuildDateChanging(value);
-					this.SendPropertyChanging();
-					this._BuildDate = value;
-					this.SendPropertyChanged("BuildDate");
-					this.OnBuildDateChanged();
-				}
-			}
-		}
-		
-		[Association(Name="PluginInfo_RequiredPlugin", Storage="_RequiredPlugins", ThisKey="PluginId", OtherKey="PluginId")]
-		public EntitySet<RequiredPlugin> RequiredPlugins
-		{
-			get
-			{
-				return this._RequiredPlugins;
-			}
-			set
-			{
-				this._RequiredPlugins.Assign(value);
-			}
-		}
-		
-		public event PropertyChangingEventHandler PropertyChanging;
-		
-		public event PropertyChangedEventHandler PropertyChanged;
-		
-		protected virtual void SendPropertyChanging()
-		{
-			if ((this.PropertyChanging != null))
-			{
-				this.PropertyChanging(this, emptyChangingEventArgs);
-			}
-		}
-		
-		protected virtual void SendPropertyChanged(String propertyName)
-		{
-			if ((this.PropertyChanged != null))
-			{
-				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
-			}
-		}
-		
-		private void attach_RequiredPlugins(RequiredPlugin entity)
-		{
-			this.SendPropertyChanging();
-			entity.PluginInfo = this;
-		}
-		
-		private void detach_RequiredPlugins(RequiredPlugin entity)
-		{
-			this.SendPropertyChanging();
-			entity.PluginInfo = null;
-		}
-	}
-	
-	[Table(Name="dbo.Project")]
-	public partial class Project : INotifyPropertyChanging, INotifyPropertyChanged
-	{
-		
-		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
-		
-		private System.Guid _ProjectId;
-		
-		private string _Name;
-		
-		private EntitySet<Job> _Jobs;
-		
-    #region Extensibility Method Definitions
-    partial void OnLoaded();
-    partial void OnValidate(System.Data.Linq.ChangeAction action);
-    partial void OnCreated();
-    partial void OnProjectIdChanging(System.Guid value);
-    partial void OnProjectIdChanged();
-    partial void OnNameChanging(string value);
-    partial void OnNameChanged();
-    #endregion
-		
-		public Project()
-		{
-			this._Jobs = new EntitySet<Job>(new Action<Job>(this.attach_Jobs), new Action<Job>(this.detach_Jobs));
-			OnCreated();
-		}
-		
-		[Column(Storage="_ProjectId", AutoSync=AutoSync.OnInsert, DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true, IsDbGenerated=true)]
-		public System.Guid ProjectId
-		{
-			get
-			{
-				return this._ProjectId;
-			}
-			set
-			{
-				if ((this._ProjectId != value))
-				{
-					this.OnProjectIdChanging(value);
-					this.SendPropertyChanging();
-					this._ProjectId = value;
-					this.SendPropertyChanged("ProjectId");
-					this.OnProjectIdChanged();
-				}
-			}
-		}
-		
-		[Column(Storage="_Name", DbType="VarChar(MAX)")]
-		public string Name
-		{
-			get
-			{
-				return this._Name;
-			}
-			set
-			{
-				if ((this._Name != value))
-				{
-					this.OnNameChanging(value);
-					this.SendPropertyChanging();
-					this._Name = value;
-					this.SendPropertyChanged("Name");
-					this.OnNameChanged();
-				}
-			}
-		}
-		
-		[Association(Name="Project_Job", Storage="_Jobs", ThisKey="ProjectId", OtherKey="ProjectId")]
-		public EntitySet<Job> Jobs
-		{
-			get
-			{
-				return this._Jobs;
-			}
-			set
-			{
-				this._Jobs.Assign(value);
-			}
-		}
-		
-		public event PropertyChangingEventHandler PropertyChanging;
-		
-		public event PropertyChangedEventHandler PropertyChanged;
-		
-		protected virtual void SendPropertyChanging()
-		{
-			if ((this.PropertyChanging != null))
-			{
-				this.PropertyChanging(this, emptyChangingEventArgs);
-			}
-		}
-		
-		protected virtual void SendPropertyChanged(String propertyName)
-		{
-			if ((this.PropertyChanged != null))
-			{
-				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
-			}
-		}
-		
-		private void attach_Jobs(Job entity)
-		{
-			this.SendPropertyChanging();
-			entity.Project = this;
-		}
-		
-		private void detach_Jobs(Job entity)
-		{
-			this.SendPropertyChanging();
-			entity.Project = null;
-		}
-	}
-	
-	[Table(Name="dbo.RequiredPlugins")]
-	public partial class RequiredPlugin : INotifyPropertyChanging, INotifyPropertyChanged
-	{
-		
-		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
-		
-		private System.Guid _JobId;
-		
-		private System.Guid _PluginId;
-		
-		private System.Guid _RequiredPluginId;
-		
-		private EntityRef<PluginInfo> _PluginInfo;
-		
-		private EntityRef<Job> _Job;
-		
-    #region Extensibility Method Definitions
-    partial void OnLoaded();
-    partial void OnValidate(System.Data.Linq.ChangeAction action);
-    partial void OnCreated();
-    partial void OnJobIdChanging(System.Guid value);
-    partial void OnJobIdChanged();
-    partial void OnPluginIdChanging(System.Guid value);
-    partial void OnPluginIdChanged();
-    partial void OnRequiredPluginIdChanging(System.Guid value);
-    partial void OnRequiredPluginIdChanged();
-    #endregion
-		
-		public RequiredPlugin()
-		{
-			this._PluginInfo = default(EntityRef<PluginInfo>);
-			this._Job = default(EntityRef<Job>);
-			OnCreated();
-		}
-		
-		[Column(Storage="_JobId", DbType="UniqueIdentifier NOT NULL")]
-		public System.Guid JobId
-		{
-			get
-			{
-				return this._JobId;
-			}
-			set
-			{
-				if ((this._JobId != value))
-				{
-					if (this._Job.HasLoadedOrAssignedValue)
-					{
-						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
-					}
-					this.OnJobIdChanging(value);
-					this.SendPropertyChanging();
-					this._JobId = value;
-					this.SendPropertyChanged("JobId");
-					this.OnJobIdChanged();
-				}
-			}
-		}
-		
-		[Column(Storage="_PluginId", DbType="UniqueIdentifier NOT NULL")]
-		public System.Guid PluginId
-		{
-			get
-			{
-				return this._PluginId;
-			}
-			set
-			{
-				if ((this._PluginId != value))
-				{
-					if (this._PluginInfo.HasLoadedOrAssignedValue)
-					{
-						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
-					}
-					this.OnPluginIdChanging(value);
-					this.SendPropertyChanging();
-					this._PluginId = value;
-					this.SendPropertyChanged("PluginId");
-					this.OnPluginIdChanged();
-				}
-			}
-		}
-		
-		[Column(Storage="_RequiredPluginId", AutoSync=AutoSync.OnInsert, DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true, IsDbGenerated=true, UpdateCheck=UpdateCheck.Never)]
-		public System.Guid RequiredPluginId
-		{
-			get
-			{
-				return this._RequiredPluginId;
-			}
-			set
-			{
-				if ((this._RequiredPluginId != value))
-				{
-					this.OnRequiredPluginIdChanging(value);
-					this.SendPropertyChanging();
-					this._RequiredPluginId = value;
-					this.SendPropertyChanged("RequiredPluginId");
-					this.OnRequiredPluginIdChanged();
-				}
-			}
-		}
-		
-		[Association(Name="PluginInfo_RequiredPlugin", Storage="_PluginInfo", ThisKey="PluginId", OtherKey="PluginId", IsForeignKey=true, DeleteOnNull=true, DeleteRule="CASCADE")]
-		public PluginInfo PluginInfo
-		{
-			get
-			{
-				return this._PluginInfo.Entity;
-			}
-			set
-			{
-				PluginInfo previousValue = this._PluginInfo.Entity;
-				if (((previousValue != value) 
-							|| (this._PluginInfo.HasLoadedOrAssignedValue == false)))
-				{
-					this.SendPropertyChanging();
-					if ((previousValue != null))
-					{
-						this._PluginInfo.Entity = null;
-						previousValue.RequiredPlugins.Remove(this);
-					}
-					this._PluginInfo.Entity = value;
-					if ((value != null))
-					{
-						value.RequiredPlugins.Add(this);
-						this._PluginId = value.PluginId;
-					}
-					else
-					{
-						this._PluginId = default(System.Guid);
-					}
-					this.SendPropertyChanged("PluginInfo");
-				}
-			}
-		}
-		
-		[Association(Name="Job_RequiredPlugin", Storage="_Job", ThisKey="JobId", OtherKey="JobId", IsForeignKey=true)]
-		public Job Job
-		{
-			get
-			{
-				return this._Job.Entity;
-			}
-			set
-			{
-				Job previousValue = this._Job.Entity;
-				if (((previousValue != value) 
-							|| (this._Job.HasLoadedOrAssignedValue == false)))
-				{
-					this.SendPropertyChanging();
-					if ((previousValue != null))
-					{
-						this._Job.Entity = null;
-						previousValue.RequiredPlugins.Remove(this);
-					}
-					this._Job.Entity = value;
-					if ((value != null))
-					{
-						value.RequiredPlugins.Add(this);
-						this._JobId = value.JobId;
-					}
-					else
-					{
-						this._JobId = default(System.Guid);
-					}
-					this.SendPropertyChanged("Job");
-				}
-			}
-		}
-		
-		public event PropertyChangingEventHandler PropertyChanging;
-		
-		public event PropertyChangedEventHandler PropertyChanged;
-		
-		protected virtual void SendPropertyChanging()
-		{
-			if ((this.PropertyChanging != null))
-			{
-				this.PropertyChanging(this, emptyChangingEventArgs);
-			}
-		}
-		
-		protected virtual void SendPropertyChanged(String propertyName)
-		{
-			if ((this.PropertyChanged != null))
-			{
-				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
-			}
-		}
-	}
-	
-	[Table(Name="dbo.Resource")]
-	public partial class Resource : INotifyPropertyChanging, INotifyPropertyChanged
-	{
-		
-		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
-		
-		private System.Guid _ResourceId;
-		
-		private string _Name;
-		
-		private EntitySet<AssignedResource> _AssignedResources;
-		
-		private EntityRef<ClientGroup> _ClientGroup;
-		
-		private EntitySet<ClientGroup_Resource> _ClientGroup_Resources;
-		
-		private EntitySet<UptimeCalendar> _UptimeCalendars;
-		
-		private EntityRef<Client> _Client;
-		
-    #region Extensibility Method Definitions
-    partial void OnLoaded();
-    partial void OnValidate(System.Data.Linq.ChangeAction action);
-    partial void OnCreated();
-    partial void OnResourceIdChanging(System.Guid value);
-    partial void OnResourceIdChanged();
-    partial void OnNameChanging(string value);
-    partial void OnNameChanged();
-    #endregion
-		
-		public Resource()
-		{
-			this._AssignedResources = new EntitySet<AssignedResource>(new Action<AssignedResource>(this.attach_AssignedResources), new Action<AssignedResource>(this.detach_AssignedResources));
-			this._ClientGroup = default(EntityRef<ClientGroup>);
-			this._ClientGroup_Resources = new EntitySet<ClientGroup_Resource>(new Action<ClientGroup_Resource>(this.attach_ClientGroup_Resources), new Action<ClientGroup_Resource>(this.detach_ClientGroup_Resources));
-			this._UptimeCalendars = new EntitySet<UptimeCalendar>(new Action<UptimeCalendar>(this.attach_UptimeCalendars), new Action<UptimeCalendar>(this.detach_UptimeCalendars));
-			this._Client = default(EntityRef<Client>);
-			OnCreated();
-		}
-		
-		[Column(Storage="_ResourceId", AutoSync=AutoSync.OnInsert, DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true)]
-		public System.Guid ResourceId
-		{
-			get
-			{
-				return this._ResourceId;
-			}
-			set
-			{
-				if ((this._ResourceId != value))
-				{
-					this.OnResourceIdChanging(value);
-					this.SendPropertyChanging();
-					this._ResourceId = value;
-					this.SendPropertyChanged("ResourceId");
-					this.OnResourceIdChanged();
-				}
-			}
-		}
-		
-		[Column(Storage="_Name", DbType="VarChar(MAX)")]
-		public string Name
-		{
-			get
-			{
-				return this._Name;
-			}
-			set
-			{
-				if ((this._Name != value))
-				{
-					this.OnNameChanging(value);
-					this.SendPropertyChanging();
-					this._Name = value;
-					this.SendPropertyChanged("Name");
-					this.OnNameChanged();
-				}
-			}
-		}
-		
-		[Association(Name="Resource_AssignedResource", Storage="_AssignedResources", ThisKey="ResourceId", OtherKey="ResourceId")]
-		public EntitySet<AssignedResource> AssignedResources
-		{
-			get
-			{
-				return this._AssignedResources;
-			}
-			set
-			{
-				this._AssignedResources.Assign(value);
-			}
-		}
-		
-		[Association(Name="Resource_ClientGroup", Storage="_ClientGroup", ThisKey="ResourceId", OtherKey="ResourceId", IsUnique=true, IsForeignKey=false)]
-		public ClientGroup ClientGroup
-		{
-			get
-			{
-				return this._ClientGroup.Entity;
-			}
-			set
-			{
-				ClientGroup previousValue = this._ClientGroup.Entity;
-				if (((previousValue != value) 
-							|| (this._ClientGroup.HasLoadedOrAssignedValue == false)))
-				{
-					this.SendPropertyChanging();
-					if ((previousValue != null))
-					{
-						this._ClientGroup.Entity = null;
-						previousValue.Resource = null;
-					}
-					this._ClientGroup.Entity = value;
-					if ((value != null))
-					{
-						value.Resource = this;
-					}
-					this.SendPropertyChanged("ClientGroup");
-				}
-			}
-		}
-		
-		[Association(Name="Resource_ClientGroup_Resource", Storage="_ClientGroup_Resources", ThisKey="ResourceId", OtherKey="ResourceId")]
-		public EntitySet<ClientGroup_Resource> ClientGroup_Resources
-		{
-			get
-			{
-				return this._ClientGroup_Resources;
-			}
-			set
-			{
-				this._ClientGroup_Resources.Assign(value);
-			}
-		}
-		
-		[Association(Name="Resource_UptimeCalendar", Storage="_UptimeCalendars", ThisKey="ResourceId", OtherKey="ResourceId")]
-		public EntitySet<UptimeCalendar> UptimeCalendars
-		{
-			get
-			{
-				return this._UptimeCalendars;
-			}
-			set
-			{
-				this._UptimeCalendars.Assign(value);
-			}
-		}
-		
-		[Association(Name="Resource_Client", Storage="_Client", ThisKey="ResourceId", OtherKey="ResourceId", IsUnique=true, IsForeignKey=false)]
-		public Client Client
-		{
-			get
-			{
-				return this._Client.Entity;
-			}
-			set
-			{
-				Client previousValue = this._Client.Entity;
-				if (((previousValue != value) 
-							|| (this._Client.HasLoadedOrAssignedValue == false)))
-				{
-					this.SendPropertyChanging();
-					if ((previousValue != null))
-					{
-						this._Client.Entity = null;
-						previousValue.Resource = null;
-					}
-					this._Client.Entity = value;
-					if ((value != null))
-					{
-						value.Resource = this;
-					}
-					this.SendPropertyChanged("Client");
-				}
-			}
-		}
-		
-		public event PropertyChangingEventHandler PropertyChanging;
-		
-		public event PropertyChangedEventHandler PropertyChanged;
-		
-		protected virtual void SendPropertyChanging()
-		{
-			if ((this.PropertyChanging != null))
-			{
-				this.PropertyChanging(this, emptyChangingEventArgs);
-			}
-		}
-		
-		protected virtual void SendPropertyChanged(String propertyName)
-		{
-			if ((this.PropertyChanged != null))
-			{
-				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
-			}
-		}
-		
-		private void attach_AssignedResources(AssignedResource entity)
-		{
-			this.SendPropertyChanging();
-			entity.Resource = this;
-		}
-		
-		private void detach_AssignedResources(AssignedResource entity)
-		{
-			this.SendPropertyChanging();
-			entity.Resource = null;
-		}
-		
-		private void attach_ClientGroup_Resources(ClientGroup_Resource entity)
-		{
-			this.SendPropertyChanging();
-			entity.Resource = this;
-		}
-		
-		private void detach_ClientGroup_Resources(ClientGroup_Resource entity)
-		{
-			this.SendPropertyChanging();
-			entity.Resource = null;
-		}
-		
-		private void attach_UptimeCalendars(UptimeCalendar entity)
-		{
-			this.SendPropertyChanging();
-			entity.Resource = this;
-		}
-		
-		private void detach_UptimeCalendars(UptimeCalendar entity)
-		{
-			this.SendPropertyChanging();
-			entity.Resource = null;
-		}
-	}
-	
-	[Table(Name="dbo.Job")]
-	public partial class Job : INotifyPropertyChanging, INotifyPropertyChanged
-	{
-		
-		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
-		
-		private System.Guid _JobId;
-		
-		private System.Nullable<System.Guid> _ParentJobId;
-		
-		private string _JobState;
-		
-		private System.Nullable<System.Guid> _ResourceId;
-		
-		private System.Nullable<double> _Percentage;
-		
-		private System.Data.Linq.Link<System.Data.Linq.Binary> _SerializedJob;
-		
-		private System.Nullable<System.DateTime> _DateCreated;
-		
-		private System.Nullable<System.DateTime> _DateCalculated;
-		
-		private System.Nullable<System.DateTime> _DateFinished;
-		
-		private int _Priority;
-		
-		private System.Nullable<System.Guid> _ProjectId;
-		
-		private System.Nullable<System.Guid> _UserId;
-		
-		private int _CoresNeeded;
-		
-		private int _MemoryNeeded;
-		
-		private EntitySet<AssignedResource> _AssignedResources;
-		
-		private EntitySet<RequiredPlugin> _RequiredPlugins;
-		
-		private EntitySet<Job> _Jobs;
-		
-		private EntityRef<Job> _Job1;
-		
-		private EntityRef<Project> _Project;
-		
-		private EntityRef<Client> _Client;
-		
-    #region Extensibility Method Definitions
-    partial void OnLoaded();
-    partial void OnValidate(System.Data.Linq.ChangeAction action);
-    partial void OnCreated();
-    partial void OnJobIdChanging(System.Guid value);
-    partial void OnJobIdChanged();
-    partial void OnParentJobIdChanging(System.Nullable<System.Guid> value);
-    partial void OnParentJobIdChanged();
-    partial void OnJobStateChanging(string value);
-    partial void OnJobStateChanged();
-    partial void OnResourceIdChanging(System.Nullable<System.Guid> value);
-    partial void OnResourceIdChanged();
-    partial void OnPercentageChanging(System.Nullable<double> value);
-    partial void OnPercentageChanged();
-    partial void OnSerializedJobChanging(System.Data.Linq.Binary value);
-    partial void OnSerializedJobChanged();
-    partial void OnDateCreatedChanging(System.Nullable<System.DateTime> value);
-    partial void OnDateCreatedChanged();
-    partial void OnDateCalculatedChanging(System.Nullable<System.DateTime> value);
-    partial void OnDateCalculatedChanged();
-    partial void OnDateFinishedChanging(System.Nullable<System.DateTime> value);
-    partial void OnDateFinishedChanged();
-    partial void OnPriorityChanging(int value);
-    partial void OnPriorityChanged();
-    partial void OnProjectIdChanging(System.Nullable<System.Guid> value);
-    partial void OnProjectIdChanged();
-    partial void OnUserIdChanging(System.Nullable<System.Guid> value);
-    partial void OnUserIdChanged();
-    partial void OnCoresNeededChanging(int value);
-    partial void OnCoresNeededChanged();
-    partial void OnMemoryNeededChanging(int value);
-    partial void OnMemoryNeededChanged();
-    #endregion
-		
-		public Job()
-		{
-			this._AssignedResources = new EntitySet<AssignedResource>(new Action<AssignedResource>(this.attach_AssignedResources), new Action<AssignedResource>(this.detach_AssignedResources));
-			this._RequiredPlugins = new EntitySet<RequiredPlugin>(new Action<RequiredPlugin>(this.attach_RequiredPlugins), new Action<RequiredPlugin>(this.detach_RequiredPlugins));
-			this._Jobs = new EntitySet<Job>(new Action<Job>(this.attach_Jobs), new Action<Job>(this.detach_Jobs));
-			this._Job1 = default(EntityRef<Job>);
-			this._Project = default(EntityRef<Project>);
-			this._Client = default(EntityRef<Client>);
-			OnCreated();
-		}
-		
-		[Column(Storage="_JobId", AutoSync=AutoSync.OnInsert, DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true, IsDbGenerated=true)]
-		public System.Guid JobId
-		{
-			get
-			{
-				return this._JobId;
-			}
-			set
-			{
-				if ((this._JobId != value))
-				{
-					this.OnJobIdChanging(value);
-					this.SendPropertyChanging();
-					this._JobId = value;
-					this.SendPropertyChanged("JobId");
-					this.OnJobIdChanged();
-				}
-			}
-		}
-		
-		[Column(Storage="_ParentJobId", DbType="UniqueIdentifier")]
-		public System.Nullable<System.Guid> ParentJobId
-		{
-			get
-			{
-				return this._ParentJobId;
-			}
-			set
-			{
-				if ((this._ParentJobId != value))
-				{
-					if (this._Job1.HasLoadedOrAssignedValue)
-					{
-						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
-					}
-					this.OnParentJobIdChanging(value);
-					this.SendPropertyChanging();
-					this._ParentJobId = value;
-					this.SendPropertyChanged("ParentJobId");
-					this.OnParentJobIdChanged();
-				}
-			}
-		}
-		
-		[Column(Storage="_JobState", DbType="VarChar(MAX)")]
-		public string JobState
-		{
-			get
-			{
-				return this._JobState;
-			}
-			set
-			{
-				if ((this._JobState != value))
-				{
-					this.OnJobStateChanging(value);
-					this.SendPropertyChanging();
-					this._JobState = value;
-					this.SendPropertyChanged("JobState");
-					this.OnJobStateChanged();
-				}
-			}
-		}
-		
-		[Column(Storage="_ResourceId", DbType="UniqueIdentifier")]
-		public System.Nullable<System.Guid> ResourceId
-		{
-			get
-			{
-				return this._ResourceId;
-			}
-			set
-			{
-				if ((this._ResourceId != value))
-				{
-					if (this._Client.HasLoadedOrAssignedValue)
-					{
-						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
-					}
-					this.OnResourceIdChanging(value);
-					this.SendPropertyChanging();
-					this._ResourceId = value;
-					this.SendPropertyChanged("ResourceId");
-					this.OnResourceIdChanged();
-				}
-			}
-		}
-		
-		[Column(Storage="_Percentage", DbType="Float")]
-		public System.Nullable<double> Percentage
-		{
-			get
-			{
-				return this._Percentage;
-			}
-			set
-			{
-				if ((this._Percentage != value))
-				{
-					this.OnPercentageChanging(value);
-					this.SendPropertyChanging();
-					this._Percentage = value;
-					this.SendPropertyChanged("Percentage");
-					this.OnPercentageChanged();
-				}
-			}
-		}
-		
-		[Column(Storage="_SerializedJob", DbType="VarBinary(MAX)", UpdateCheck=UpdateCheck.Never)]
-		public System.Data.Linq.Binary SerializedJob
-		{
-			get
-			{
-				return this._SerializedJob.Value;
-			}
-			set
-			{
-				if ((this._SerializedJob.Value != value))
-				{
-					this.OnSerializedJobChanging(value);
-					this.SendPropertyChanging();
-					this._SerializedJob.Value = value;
-					this.SendPropertyChanged("SerializedJob");
-					this.OnSerializedJobChanged();
-				}
-			}
-		}
-		
-		[Column(Storage="_DateCreated", DbType="DateTime")]
-		public System.Nullable<System.DateTime> DateCreated
-		{
-			get
-			{
-				return this._DateCreated;
-			}
-			set
-			{
-				if ((this._DateCreated != value))
-				{
-					this.OnDateCreatedChanging(value);
-					this.SendPropertyChanging();
-					this._DateCreated = value;
-					this.SendPropertyChanged("DateCreated");
-					this.OnDateCreatedChanged();
-				}
-			}
-		}
-		
-		[Column(Storage="_DateCalculated", DbType="DateTime")]
-		public System.Nullable<System.DateTime> DateCalculated
-		{
-			get
-			{
-				return this._DateCalculated;
-			}
-			set
-			{
-				if ((this._DateCalculated != value))
-				{
-					this.OnDateCalculatedChanging(value);
-					this.SendPropertyChanging();
-					this._DateCalculated = value;
-					this.SendPropertyChanged("DateCalculated");
-					this.OnDateCalculatedChanged();
-				}
-			}
-		}
-		
-		[Column(Storage="_DateFinished", DbType="DateTime")]
-		public System.Nullable<System.DateTime> DateFinished
-		{
-			get
-			{
-				return this._DateFinished;
-			}
-			set
-			{
-				if ((this._DateFinished != value))
-				{
-					this.OnDateFinishedChanging(value);
-					this.SendPropertyChanging();
-					this._DateFinished = value;
-					this.SendPropertyChanged("DateFinished");
-					this.OnDateFinishedChanged();
-				}
-			}
-		}
-		
-		[Column(Storage="_Priority", DbType="Int NOT NULL")]
-		public int Priority
-		{
-			get
-			{
-				return this._Priority;
-			}
-			set
-			{
-				if ((this._Priority != value))
-				{
-					this.OnPriorityChanging(value);
-					this.SendPropertyChanging();
-					this._Priority = value;
-					this.SendPropertyChanged("Priority");
-					this.OnPriorityChanged();
-				}
-			}
-		}
-		
-		[Column(Storage="_ProjectId", DbType="UniqueIdentifier")]
-		public System.Nullable<System.Guid> ProjectId
-		{
-			get
-			{
-				return this._ProjectId;
-			}
-			set
-			{
-				if ((this._ProjectId != value))
-				{
-					if (this._Project.HasLoadedOrAssignedValue)
-					{
-						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
-					}
-					this.OnProjectIdChanging(value);
-					this.SendPropertyChanging();
-					this._ProjectId = value;
-					this.SendPropertyChanged("ProjectId");
-					this.OnProjectIdChanged();
-				}
-			}
-		}
-		
-		[Column(Storage="_UserId", DbType="UniqueIdentifier")]
-		public System.Nullable<System.Guid> UserId
-		{
-			get
-			{
-				return this._UserId;
-			}
-			set
-			{
-				if ((this._UserId != value))
-				{
-					this.OnUserIdChanging(value);
-					this.SendPropertyChanging();
-					this._UserId = value;
-					this.SendPropertyChanged("UserId");
-					this.OnUserIdChanged();
-				}
-			}
-		}
-		
-		[Column(Storage="_CoresNeeded", DbType="Int NOT NULL")]
-		public int CoresNeeded
-		{
-			get
-			{
-				return this._CoresNeeded;
-			}
-			set
-			{
-				if ((this._CoresNeeded != value))
-				{
-					this.OnCoresNeededChanging(value);
-					this.SendPropertyChanging();
-					this._CoresNeeded = value;
-					this.SendPropertyChanged("CoresNeeded");
-					this.OnCoresNeededChanged();
-				}
-			}
-		}
-		
-		[Column(Storage="_MemoryNeeded", DbType="Int NOT NULL")]
-		public int MemoryNeeded
-		{
-			get
-			{
-				return this._MemoryNeeded;
-			}
-			set
-			{
-				if ((this._MemoryNeeded != value))
-				{
-					this.OnMemoryNeededChanging(value);
-					this.SendPropertyChanging();
-					this._MemoryNeeded = value;
-					this.SendPropertyChanged("MemoryNeeded");
-					this.OnMemoryNeededChanged();
-				}
-			}
-		}
-		
-		[Association(Name="Job_AssignedResource", Storage="_AssignedResources", ThisKey="JobId", OtherKey="JobId")]
-		public EntitySet<AssignedResource> AssignedResources
-		{
-			get
-			{
-				return this._AssignedResources;
-			}
-			set
-			{
-				this._AssignedResources.Assign(value);
-			}
-		}
-		
-		[Association(Name="Job_RequiredPlugin", Storage="_RequiredPlugins", ThisKey="JobId", OtherKey="JobId")]
-		public EntitySet<RequiredPlugin> RequiredPlugins
-		{
-			get
-			{
-				return this._RequiredPlugins;
-			}
-			set
-			{
-				this._RequiredPlugins.Assign(value);
-			}
-		}
-		
-		[Association(Name="Job_Job", Storage="_Jobs", ThisKey="JobId", OtherKey="ParentJobId")]
-		public EntitySet<Job> Jobs
-		{
-			get
-			{
-				return this._Jobs;
-			}
-			set
-			{
-				this._Jobs.Assign(value);
-			}
-		}
-		
-		[Association(Name="Job_Job", Storage="_Job1", ThisKey="ParentJobId", OtherKey="JobId", IsForeignKey=true)]
-		public Job Job1
-		{
-			get
-			{
-				return this._Job1.Entity;
-			}
-			set
-			{
-				Job previousValue = this._Job1.Entity;
-				if (((previousValue != value) 
-							|| (this._Job1.HasLoadedOrAssignedValue == false)))
-				{
-					this.SendPropertyChanging();
-					if ((previousValue != null))
-					{
-						this._Job1.Entity = null;
-						previousValue.Jobs.Remove(this);
-					}
-					this._Job1.Entity = value;
-					if ((value != null))
-					{
-						value.Jobs.Add(this);
-						this._ParentJobId = value.JobId;
-					}
-					else
-					{
-						this._ParentJobId = default(Nullable<System.Guid>);
-					}
-					this.SendPropertyChanged("Job1");
-				}
-			}
-		}
-		
-		[Association(Name="Project_Job", Storage="_Project", ThisKey="ProjectId", OtherKey="ProjectId", IsForeignKey=true, DeleteRule="SET NULL")]
-		public Project Project
-		{
-			get
-			{
-				return this._Project.Entity;
-			}
-			set
-			{
-				Project previousValue = this._Project.Entity;
-				if (((previousValue != value) 
-							|| (this._Project.HasLoadedOrAssignedValue == false)))
-				{
-					this.SendPropertyChanging();
-					if ((previousValue != null))
-					{
-						this._Project.Entity = null;
-						previousValue.Jobs.Remove(this);
-					}
-					this._Project.Entity = value;
-					if ((value != null))
-					{
-						value.Jobs.Add(this);
-						this._ProjectId = value.ProjectId;
-					}
-					else
-					{
-						this._ProjectId = default(Nullable<System.Guid>);
-					}
-					this.SendPropertyChanged("Project");
-				}
-			}
-		}
-		
-		[Association(Name="Client_Job", Storage="_Client", ThisKey="ResourceId", OtherKey="ResourceId", IsForeignKey=true, DeleteRule="SET NULL")]
-		public Client Client
-		{
-			get
-			{
-				return this._Client.Entity;
-			}
-			set
-			{
-				Client previousValue = this._Client.Entity;
-				if (((previousValue != value) 
-							|| (this._Client.HasLoadedOrAssignedValue == false)))
-				{
-					this.SendPropertyChanging();
-					if ((previousValue != null))
-					{
-						this._Client.Entity = null;
-						previousValue.Jobs.Remove(this);
-					}
-					this._Client.Entity = value;
-					if ((value != null))
-					{
-						value.Jobs.Add(this);
-						this._ResourceId = value.ResourceId;
-					}
-					else
-					{
-						this._ResourceId = default(Nullable<System.Guid>);
-					}
-					this.SendPropertyChanged("Client");
-				}
-			}
-		}
-		
-		public event PropertyChangingEventHandler PropertyChanging;
-		
-		public event PropertyChangedEventHandler PropertyChanged;
-		
-		protected virtual void SendPropertyChanging()
-		{
-			if ((this.PropertyChanging != null))
-			{
-				this.PropertyChanging(this, emptyChangingEventArgs);
-			}
-		}
-		
-		protected virtual void SendPropertyChanged(String propertyName)
-		{
-			if ((this.PropertyChanged != null))
-			{
-				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
-			}
-		}
-		
-		private void attach_AssignedResources(AssignedResource entity)
-		{
-			this.SendPropertyChanging();
-			entity.Job = this;
-		}
-		
-		private void detach_AssignedResources(AssignedResource entity)
-		{
-			this.SendPropertyChanging();
-			entity.Job = null;
-		}
-		
-		private void attach_RequiredPlugins(RequiredPlugin entity)
-		{
-			this.SendPropertyChanging();
-			entity.Job = this;
-		}
-		
-		private void detach_RequiredPlugins(RequiredPlugin entity)
-		{
-			this.SendPropertyChanging();
-			entity.Job = null;
-		}
-		
-		private void attach_Jobs(Job entity)
-		{
-			this.SendPropertyChanging();
-			entity.Job1 = this;
-		}
-		
-		private void detach_Jobs(Job entity)
-		{
-			this.SendPropertyChanging();
-			entity.Job1 = null;
-		}
-	}
-	
-	[Table(Name="dbo.UptimeCalendar")]
-	public partial class UptimeCalendar : INotifyPropertyChanging, INotifyPropertyChanged
-	{
-		
-		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
-		
-		private System.Guid _UptimeCalendarId;
-		
-		private System.Guid _ResourceId;
-		
-		private System.DateTime _StartDate;
-		
-		private System.DateTime _EndDate;
-		
-		private bool _AllDayEvent;
-		
-		private bool _Recurring;
-		
-		private System.Guid _RecurringId;
-		
-		private EntityRef<Resource> _Resource;
-		
-    #region Extensibility Method Definitions
-    partial void OnLoaded();
-    partial void OnValidate(System.Data.Linq.ChangeAction action);
-    partial void OnCreated();
-    partial void OnUptimeCalendarIdChanging(System.Guid value);
-    partial void OnUptimeCalendarIdChanged();
-    partial void OnResourceIdChanging(System.Guid value);
-    partial void OnResourceIdChanged();
-    partial void OnStartDateChanging(System.DateTime value);
-    partial void OnStartDateChanged();
-    partial void OnEndDateChanging(System.DateTime value);
-    partial void OnEndDateChanged();
-    partial void OnAllDayEventChanging(bool value);
-    partial void OnAllDayEventChanged();
-    partial void OnRecurringChanging(bool value);
-    partial void OnRecurringChanged();
-    partial void OnRecurringIdChanging(System.Guid value);
-    partial void OnRecurringIdChanged();
-    #endregion
-		
-		public UptimeCalendar()
-		{
-			this._Resource = default(EntityRef<Resource>);
-			OnCreated();
-		}
-		
-		[Column(Storage="_UptimeCalendarId", AutoSync=AutoSync.OnInsert, DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true, IsDbGenerated=true)]
-		public System.Guid UptimeCalendarId
-		{
-			get
-			{
-				return this._UptimeCalendarId;
-			}
-			set
-			{
-				if ((this._UptimeCalendarId != value))
-				{
-					this.OnUptimeCalendarIdChanging(value);
-					this.SendPropertyChanging();
-					this._UptimeCalendarId = value;
-					this.SendPropertyChanged("UptimeCalendarId");
-					this.OnUptimeCalendarIdChanged();
-				}
-			}
-		}
-		
-		[Column(Storage="_ResourceId", DbType="UniqueIdentifier NOT NULL")]
-		public System.Guid ResourceId
-		{
-			get
-			{
-				return this._ResourceId;
-			}
-			set
-			{
-				if ((this._ResourceId != value))
-				{
-					if (this._Resource.HasLoadedOrAssignedValue)
-					{
-						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
-					}
-					this.OnResourceIdChanging(value);
-					this.SendPropertyChanging();
-					this._ResourceId = value;
-					this.SendPropertyChanged("ResourceId");
-					this.OnResourceIdChanged();
-				}
-			}
-		}
-		
-		[Column(Storage="_StartDate", DbType="DateTime NOT NULL")]
-		public System.DateTime StartDate
-		{
-			get
-			{
-				return this._StartDate;
-			}
-			set
-			{
-				if ((this._StartDate != value))
-				{
-					this.OnStartDateChanging(value);
-					this.SendPropertyChanging();
-					this._StartDate = value;
-					this.SendPropertyChanged("StartDate");
-					this.OnStartDateChanged();
-				}
-			}
-		}
-		
-		[Column(Storage="_EndDate", DbType="DateTime NOT NULL")]
-		public System.DateTime EndDate
-		{
-			get
-			{
-				return this._EndDate;
-			}
-			set
-			{
-				if ((this._EndDate != value))
-				{
-					this.OnEndDateChanging(value);
-					this.SendPropertyChanging();
-					this._EndDate = value;
-					this.SendPropertyChanged("EndDate");
-					this.OnEndDateChanged();
-				}
-			}
-		}
-		
-		[Column(Storage="_AllDayEvent", DbType="Bit NOT NULL")]
-		public bool AllDayEvent
-		{
-			get
-			{
-				return this._AllDayEvent;
-			}
-			set
-			{
-				if ((this._AllDayEvent != value))
-				{
-					this.OnAllDayEventChanging(value);
-					this.SendPropertyChanging();
-					this._AllDayEvent = value;
-					this.SendPropertyChanged("AllDayEvent");
-					this.OnAllDayEventChanged();
-				}
-			}
-		}
-		
-		[Column(Storage="_Recurring", DbType="Bit NOT NULL")]
-		public bool Recurring
-		{
-			get
-			{
-				return this._Recurring;
-			}
-			set
-			{
-				if ((this._Recurring != value))
-				{
-					this.OnRecurringChanging(value);
-					this.SendPropertyChanging();
-					this._Recurring = value;
-					this.SendPropertyChanged("Recurring");
-					this.OnRecurringChanged();
-				}
-			}
-		}
-		
-		[Column(Storage="_RecurringId", DbType="UniqueIdentifier")]
-		public System.Guid RecurringId
-		{
-			get
-			{
-				return this._RecurringId;
-			}
-			set
-			{
-				if ((this._RecurringId != value))
-				{
-					this.OnRecurringIdChanging(value);
-					this.SendPropertyChanging();
-					this._RecurringId = value;
-					this.SendPropertyChanged("RecurringId");
-					this.OnRecurringIdChanged();
-				}
-			}
-		}
-		
-		[Association(Name="Resource_UptimeCalendar", Storage="_Resource", ThisKey="ResourceId", OtherKey="ResourceId", IsForeignKey=true, DeleteOnNull=true, DeleteRule="CASCADE")]
-		public Resource Resource
-		{
-			get
-			{
-				return this._Resource.Entity;
-			}
-			set
-			{
-				Resource previousValue = this._Resource.Entity;
-				if (((previousValue != value) 
-							|| (this._Resource.HasLoadedOrAssignedValue == false)))
-				{
-					this.SendPropertyChanging();
-					if ((previousValue != null))
-					{
-						this._Resource.Entity = null;
-						previousValue.UptimeCalendars.Remove(this);
-					}
-					this._Resource.Entity = value;
-					if ((value != null))
-					{
-						value.UptimeCalendars.Add(this);
-						this._ResourceId = value.ResourceId;
-					}
-					else
-					{
-						this._ResourceId = default(System.Guid);
-					}
-					this.SendPropertyChanged("Resource");
-				}
-			}
-		}
-		
-		public event PropertyChangingEventHandler PropertyChanging;
-		
-		public event PropertyChangedEventHandler PropertyChanged;
-		
-		protected virtual void SendPropertyChanging()
-		{
-			if ((this.PropertyChanging != null))
-			{
-				this.PropertyChanging(this, emptyChangingEventArgs);
-			}
-		}
-		
-		protected virtual void SendPropertyChanged(String propertyName)
-		{
-			if ((this.PropertyChanged != null))
-			{
-				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
-			}
-		}
-	}
-	
-	[Table(Name="dbo.Client")]
-	public partial class Client : INotifyPropertyChanging, INotifyPropertyChanged
-	{
-		
-		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
-		
-		private System.Guid _ResourceId;
-		
-		private int _CPUSpeed;
-		
-		private int _Memory;
-		
-		private System.DateTime _Login;
-		
-		private string _Status;
-		
-		private string _CalendarSyncStatus;
-		
-		private System.Nullable<System.Guid> _UseCalendarFromResourceId;
-		
-		private System.Nullable<System.Guid> _ClientConfigId;
-		
-		private int _NumberOfCores;
-		
-		private int _NumberOfFreeCores;
-		
-		private int _FreeMemory;
-		
-		private EntitySet<UptimeStatistic> _UptimeStatistics;
-		
-		private EntitySet<Job> _Jobs;
-		
-		private EntityRef<Resource> _Resource;
-		
-		private EntityRef<ClientConfig> _ClientConfig;
-		
-    #region Extensibility Method Definitions
-    partial void OnLoaded();
-    partial void OnValidate(System.Data.Linq.ChangeAction action);
-    partial void OnCreated();
-    partial void OnResourceIdChanging(System.Guid value);
-    partial void OnResourceIdChanged();
-    partial void OnCPUSpeedChanging(int value);
-    partial void OnCPUSpeedChanged();
-    partial void OnMemoryChanging(int value);
-    partial void OnMemoryChanged();
-    partial void OnLoginChanging(System.DateTime value);
-    partial void OnLoginChanged();
-    partial void OnStatusChanging(string value);
-    partial void OnStatusChanged();
-    partial void OnCalendarSyncStatusChanging(string value);
-    partial void OnCalendarSyncStatusChanged();
-    partial void OnUseCalendarFromResourceIdChanging(System.Nullable<System.Guid> value);
-    partial void OnUseCalendarFromResourceIdChanged();
-    partial void OnClientConfigIdChanging(System.Nullable<System.Guid> value);
-    partial void OnClientConfigIdChanged();
-    partial void OnNumberOfCoresChanging(int value);
-    partial void OnNumberOfCoresChanged();
-    partial void OnNumberOfFreeCoresChanging(int value);
-    partial void OnNumberOfFreeCoresChanged();
-    partial void OnFreeMemoryChanging(int value);
-    partial void OnFreeMemoryChanged();
-    #endregion
-		
-		public Client()
-		{
-			this._UptimeStatistics = new EntitySet<UptimeStatistic>(new Action<UptimeStatistic>(this.attach_UptimeStatistics), new Action<UptimeStatistic>(this.detach_UptimeStatistics));
-			this._Jobs = new EntitySet<Job>(new Action<Job>(this.attach_Jobs), new Action<Job>(this.detach_Jobs));
-			this._Resource = default(EntityRef<Resource>);
-			this._ClientConfig = default(EntityRef<ClientConfig>);
-			OnCreated();
-		}
-		
-		[Column(Storage="_ResourceId", DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true)]
-		public System.Guid ResourceId
-		{
-			get
-			{
-				return this._ResourceId;
-			}
-			set
-			{
-				if ((this._ResourceId != value))
-				{
-					if (this._Resource.HasLoadedOrAssignedValue)
-					{
-						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
-					}
-					this.OnResourceIdChanging(value);
-					this.SendPropertyChanging();
-					this._ResourceId = value;
-					this.SendPropertyChanged("ResourceId");
-					this.OnResourceIdChanged();
-				}
-			}
-		}
-		
-		[Column(Storage="_CPUSpeed", DbType="Int NOT NULL")]
-		public int CPUSpeed
-		{
-			get
-			{
-				return this._CPUSpeed;
-			}
-			set
-			{
-				if ((this._CPUSpeed != value))
-				{
-					this.OnCPUSpeedChanging(value);
-					this.SendPropertyChanging();
-					this._CPUSpeed = value;
-					this.SendPropertyChanged("CPUSpeed");
-					this.OnCPUSpeedChanged();
-				}
-			}
-		}
-		
-		[Column(Storage="_Memory", DbType="Int NOT NULL")]
-		public int Memory
-		{
-			get
-			{
-				return this._Memory;
-			}
-			set
-			{
-				if ((this._Memory != value))
-				{
-					this.OnMemoryChanging(value);
-					this.SendPropertyChanging();
-					this._Memory = value;
-					this.SendPropertyChanged("Memory");
-					this.OnMemoryChanged();
-				}
-			}
-		}
-		
-		[Column(Storage="_Login", DbType="DateTime NOT NULL")]
-		public System.DateTime Login
-		{
-			get
-			{
-				return this._Login;
-			}
-			set
-			{
-				if ((this._Login != value))
-				{
-					this.OnLoginChanging(value);
-					this.SendPropertyChanging();
-					this._Login = value;
-					this.SendPropertyChanged("Login");
-					this.OnLoginChanged();
-				}
-			}
-		}
-		
-		[Column(Storage="_Status", DbType="VarChar(MAX)")]
-		public string Status
-		{
-			get
-			{
-				return this._Status;
-			}
-			set
-			{
-				if ((this._Status != value))
-				{
-					this.OnStatusChanging(value);
-					this.SendPropertyChanging();
-					this._Status = value;
-					this.SendPropertyChanged("Status");
-					this.OnStatusChanged();
-				}
-			}
-		}
-		
-		[Column(Storage="_CalendarSyncStatus", DbType="VarChar(MAX)")]
-		public string CalendarSyncStatus
-		{
-			get
-			{
-				return this._CalendarSyncStatus;
-			}
-			set
-			{
-				if ((this._CalendarSyncStatus != value))
-				{
-					this.OnCalendarSyncStatusChanging(value);
-					this.SendPropertyChanging();
-					this._CalendarSyncStatus = value;
-					this.SendPropertyChanged("CalendarSyncStatus");
-					this.OnCalendarSyncStatusChanged();
-				}
-			}
-		}
-		
-		[Column(Storage="_UseCalendarFromResourceId", DbType="UniqueIdentifier")]
-		public System.Nullable<System.Guid> UseCalendarFromResourceId
-		{
-			get
-			{
-				return this._UseCalendarFromResourceId;
-			}
-			set
-			{
-				if ((this._UseCalendarFromResourceId != value))
-				{
-					this.OnUseCalendarFromResourceIdChanging(value);
-					this.SendPropertyChanging();
-					this._UseCalendarFromResourceId = value;
-					this.SendPropertyChanged("UseCalendarFromResourceId");
-					this.OnUseCalendarFromResourceIdChanged();
-				}
-			}
-		}
-		
-		[Column(Storage="_ClientConfigId", DbType="UniqueIdentifier")]
-		public System.Nullable<System.Guid> ClientConfigId
-		{
-			get
-			{
-				return this._ClientConfigId;
-			}
-			set
-			{
-				if ((this._ClientConfigId != value))
-				{
-					if (this._ClientConfig.HasLoadedOrAssignedValue)
-					{
-						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
-					}
-					this.OnClientConfigIdChanging(value);
-					this.SendPropertyChanging();
-					this._ClientConfigId = value;
-					this.SendPropertyChanged("ClientConfigId");
-					this.OnClientConfigIdChanged();
-				}
-			}
-		}
-		
-		[Column(Storage="_NumberOfCores", DbType="Int NOT NULL")]
-		public int NumberOfCores
-		{
-			get
-			{
-				return this._NumberOfCores;
-			}
-			set
-			{
-				if ((this._NumberOfCores != value))
-				{
-					this.OnNumberOfCoresChanging(value);
-					this.SendPropertyChanging();
-					this._NumberOfCores = value;
-					this.SendPropertyChanged("NumberOfCores");
-					this.OnNumberOfCoresChanged();
-				}
-			}
-		}
-		
-		[Column(Storage="_NumberOfFreeCores", DbType="Int NOT NULL")]
-		public int NumberOfFreeCores
-		{
-			get
-			{
-				return this._NumberOfFreeCores;
-			}
-			set
-			{
-				if ((this._NumberOfFreeCores != value))
-				{
-					this.OnNumberOfFreeCoresChanging(value);
-					this.SendPropertyChanging();
-					this._NumberOfFreeCores = value;
-					this.SendPropertyChanged("NumberOfFreeCores");
-					this.OnNumberOfFreeCoresChanged();
-				}
-			}
-		}
-		
-		[Column(Storage="_FreeMemory", DbType="Int NOT NULL")]
-		public int FreeMemory
-		{
-			get
-			{
-				return this._FreeMemory;
-			}
-			set
-			{
-				if ((this._FreeMemory != value))
-				{
-					this.OnFreeMemoryChanging(value);
-					this.SendPropertyChanging();
-					this._FreeMemory = value;
-					this.SendPropertyChanged("FreeMemory");
-					this.OnFreeMemoryChanged();
-				}
-			}
-		}
-		
-		[Association(Name="Client_UptimeStatistic", Storage="_UptimeStatistics", ThisKey="ResourceId", OtherKey="ResourceId")]
-		public EntitySet<UptimeStatistic> UptimeStatistics
-		{
-			get
-			{
-				return this._UptimeStatistics;
-			}
-			set
-			{
-				this._UptimeStatistics.Assign(value);
-			}
-		}
-		
-		[Association(Name="Client_Job", Storage="_Jobs", ThisKey="ResourceId", OtherKey="ResourceId")]
-		public EntitySet<Job> Jobs
-		{
-			get
-			{
-				return this._Jobs;
-			}
-			set
-			{
-				this._Jobs.Assign(value);
-			}
-		}
-		
-		[Association(Name="Resource_Client", Storage="_Resource", ThisKey="ResourceId", OtherKey="ResourceId", IsForeignKey=true, DeleteOnNull=true, DeleteRule="CASCADE")]
-		public Resource Resource
-		{
-			get
-			{
-				return this._Resource.Entity;
-			}
-			set
-			{
-				Resource previousValue = this._Resource.Entity;
-				if (((previousValue != value) 
-							|| (this._Resource.HasLoadedOrAssignedValue == false)))
-				{
-					this.SendPropertyChanging();
-					if ((previousValue != null))
-					{
-						this._Resource.Entity = null;
-						previousValue.Client = null;
-					}
-					this._Resource.Entity = value;
-					if ((value != null))
-					{
-						value.Client = this;
-						this._ResourceId = value.ResourceId;
-					}
-					else
-					{
-						this._ResourceId = default(System.Guid);
-					}
-					this.SendPropertyChanged("Resource");
-				}
-			}
-		}
-		
-		[Association(Name="ClientConfig_Client", Storage="_ClientConfig", ThisKey="ClientConfigId", OtherKey="ClientConfigId", IsForeignKey=true, DeleteRule="SET NULL")]
-		public ClientConfig ClientConfig
-		{
-			get
-			{
-				return this._ClientConfig.Entity;
-			}
-			set
-			{
-				ClientConfig previousValue = this._ClientConfig.Entity;
-				if (((previousValue != value) 
-							|| (this._ClientConfig.HasLoadedOrAssignedValue == false)))
-				{
-					this.SendPropertyChanging();
-					if ((previousValue != null))
-					{
-						this._ClientConfig.Entity = null;
-						previousValue.Clients.Remove(this);
-					}
-					this._ClientConfig.Entity = value;
-					if ((value != null))
-					{
-						value.Clients.Add(this);
-						this._ClientConfigId = value.ClientConfigId;
-					}
-					else
-					{
-						this._ClientConfigId = default(Nullable<System.Guid>);
-					}
-					this.SendPropertyChanged("ClientConfig");
-				}
-			}
-		}
-		
-		public event PropertyChangingEventHandler PropertyChanging;
-		
-		public event PropertyChangedEventHandler PropertyChanged;
-		
-		protected virtual void SendPropertyChanging()
-		{
-			if ((this.PropertyChanging != null))
-			{
-				this.PropertyChanging(this, emptyChangingEventArgs);
-			}
-		}
-		
-		protected virtual void SendPropertyChanged(String propertyName)
-		{
-			if ((this.PropertyChanged != null))
-			{
-				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
-			}
-		}
-		
-		private void attach_UptimeStatistics(UptimeStatistic entity)
-		{
-			this.SendPropertyChanging();
-			entity.Client = this;
-		}
-		
-		private void detach_UptimeStatistics(UptimeStatistic entity)
-		{
-			this.SendPropertyChanging();
-			entity.Client = null;
-		}
-		
-		private void attach_Jobs(Job entity)
-		{
-			this.SendPropertyChanging();
-			entity.Client = this;
-		}
-		
-		private void detach_Jobs(Job entity)
-		{
-			this.SendPropertyChanging();
-			entity.Client = null;
-		}
-	}
-}
-#pragma warning restore 1591
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/HiveDataContext.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/HiveDataContext.cs	(revision 4422)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/HiveDataContext.cs	(revision 4423)
@@ -61,4 +61,7 @@
     partial void UpdateUptimeCalendar(UptimeCalendar instance);
     partial void DeleteUptimeCalendar(UptimeCalendar instance);
+    partial void InsertHiveExperiment(HiveExperiment instance);
+    partial void UpdateHiveExperiment(HiveExperiment instance);
+    partial void DeleteHiveExperiment(HiveExperiment instance);
     #endregion
 		
@@ -164,4 +167,12 @@
 			{
 				return this.GetTable<UptimeCalendar>();
+			}
+		}
+		
+		public System.Data.Linq.Table<HiveExperiment> HiveExperiments
+		{
+			get
+			{
+				return this.GetTable<HiveExperiment>();
 			}
 		}
@@ -587,5 +598,5 @@
 		}
 		
-		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_UpDownTimeCalendar", DbType="Xml", UpdateCheck=UpdateCheck.Never)]
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_UpDownTimeCalendar", DbType="Xml", CanBeNull=false, UpdateCheck=UpdateCheck.Never)]
 		public System.Xml.Linq.XElement UpDownTimeCalendar
 		{
@@ -921,5 +932,5 @@
 		}
 		
-		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Name", DbType="VarChar(MAX)")]
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Name", DbType="VarChar(MAX)", CanBeNull=false)]
 		public string Name
 		{
@@ -941,5 +952,5 @@
 		}
 		
-		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Version", DbType="VarChar(MAX)")]
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Version", DbType="VarChar(MAX)", CanBeNull=false)]
 		public string Version
 		{
@@ -961,5 +972,5 @@
 		}
 		
-		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_BuildDate", DbType="VarChar(20)")]
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_BuildDate", DbType="VarChar(20)", CanBeNull=false)]
 		public string BuildDate
 		{
@@ -1075,5 +1086,5 @@
 		}
 		
-		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Name", DbType="VarChar(MAX)")]
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Name", DbType="VarChar(MAX)", CanBeNull=false)]
 		public string Name
 		{
@@ -1394,5 +1405,5 @@
 		}
 		
-		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Name", DbType="VarChar(MAX)")]
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Name", DbType="VarChar(MAX)", CanBeNull=false)]
 		public string Name
 		{
@@ -1414,5 +1425,5 @@
 		}
 		
-		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_ResourceType", IsDiscriminator=true)]
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_ResourceType", CanBeNull=false, IsDiscriminator=true)]
 		public string ResourceType
 		{
@@ -1834,5 +1845,5 @@
 		}
 		
-		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Slave_Job", Storage="_Jobs", ThisKey="ResourceId", OtherKey="ResourceId", DeleteRule="SET NULL")]
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Slave_Job", Storage="_Jobs", ThisKey="ResourceId", OtherKey="ResourceId")]
 		public EntitySet<Job> Jobs
 		{
@@ -1963,5 +1974,5 @@
 		private System.Nullable<System.Guid> _ResourceId;
 		
-		private System.Nullable<double> _Percentage;
+		private System.Nullable<System.TimeSpan> _ExecutionTime;
 		
 		private string _Exception;
@@ -1979,5 +1990,5 @@
 		private System.Nullable<System.Guid> _ProjectId;
 		
-		private System.Nullable<System.Guid> _UserId;
+		private System.Guid _UserId;
 		
 		private int _CoresNeeded;
@@ -2009,6 +2020,6 @@
     partial void OnResourceIdChanging(System.Nullable<System.Guid> value);
     partial void OnResourceIdChanged();
-    partial void OnPercentageChanging(System.Nullable<double> value);
-    partial void OnPercentageChanged();
+    partial void OnExecutionTimeChanging(System.Nullable<System.TimeSpan> value);
+    partial void OnExecutionTimeChanged();
     partial void OnExceptionChanging(string value);
     partial void OnExceptionChanged();
@@ -2025,5 +2036,5 @@
     partial void OnProjectIdChanging(System.Nullable<System.Guid> value);
     partial void OnProjectIdChanged();
-    partial void OnUserIdChanging(System.Nullable<System.Guid> value);
+    partial void OnUserIdChanging(System.Guid value);
     partial void OnUserIdChanged();
     partial void OnCoresNeededChanging(int value);
@@ -2088,5 +2099,5 @@
 		}
 		
-		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_JobState", DbType="VarChar(MAX)")]
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_JobState", DbType="VarChar(MAX)", CanBeNull=false)]
 		public string JobState
 		{
@@ -2132,20 +2143,20 @@
 		}
 		
-		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Percentage", DbType="Float")]
-		public System.Nullable<double> Percentage
-		{
-			get
-			{
-				return this._Percentage;
-			}
-			set
-			{
-				if ((this._Percentage != value))
-				{
-					this.OnPercentageChanging(value);
-					this.SendPropertyChanging();
-					this._Percentage = value;
-					this.SendPropertyChanged("Percentage");
-					this.OnPercentageChanged();
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_ExecutionTime", DbType="Time")]
+		public System.Nullable<System.TimeSpan> ExecutionTime
+		{
+			get
+			{
+				return this._ExecutionTime;
+			}
+			set
+			{
+				if ((this._ExecutionTime != value))
+				{
+					this.OnExecutionTimeChanging(value);
+					this.SendPropertyChanging();
+					this._ExecutionTime = value;
+					this.SendPropertyChanged("ExecutionTime");
+					this.OnExecutionTimeChanged();
 				}
 			}
@@ -2172,5 +2183,5 @@
 		}
 		
-		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_SerializedJob", DbType="VarBinary(MAX)", UpdateCheck=UpdateCheck.Never)]
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_SerializedJob", DbType="VarBinary(MAX)", CanBeNull=false, UpdateCheck=UpdateCheck.Never)]
 		public System.Data.Linq.Binary SerializedJob
 		{
@@ -2297,5 +2308,5 @@
 		
 		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_UserId", DbType="UniqueIdentifier")]
-		public System.Nullable<System.Guid> UserId
+		public System.Guid UserId
 		{
 			get
@@ -2800,4 +2811,211 @@
 		}
 	}
+	
+	[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.HiveExperiment")]
+	public partial class HiveExperiment : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		private System.Guid _HiveExperimentId;
+		
+		private string _Name;
+		
+		private string _Description;
+		
+		private string _ResourceIds;
+		
+		private System.Guid _UserId;
+		
+		private System.Nullable<System.Guid> _RootJobId;
+		
+		private EntityRef<Job> _Job;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnHiveExperimentIdChanging(System.Guid value);
+    partial void OnHiveExperimentIdChanged();
+    partial void OnNameChanging(string value);
+    partial void OnNameChanged();
+    partial void OnDescriptionChanging(string value);
+    partial void OnDescriptionChanged();
+    partial void OnResourceIdsChanging(string value);
+    partial void OnResourceIdsChanged();
+    partial void OnUserIdChanging(System.Guid value);
+    partial void OnUserIdChanged();
+    partial void OnRootJobIdChanging(System.Nullable<System.Guid> value);
+    partial void OnRootJobIdChanged();
+    #endregion
+		
+		public HiveExperiment()
+		{
+			this._Job = default(EntityRef<Job>);
+			OnCreated();
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_HiveExperimentId", AutoSync=AutoSync.OnInsert, DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true, IsDbGenerated=true)]
+		public System.Guid HiveExperimentId
+		{
+			get
+			{
+				return this._HiveExperimentId;
+			}
+			set
+			{
+				if ((this._HiveExperimentId != value))
+				{
+					this.OnHiveExperimentIdChanging(value);
+					this.SendPropertyChanging();
+					this._HiveExperimentId = value;
+					this.SendPropertyChanged("HiveExperimentId");
+					this.OnHiveExperimentIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Name", DbType="VarChar(MAX)", CanBeNull=false)]
+		public string Name
+		{
+			get
+			{
+				return this._Name;
+			}
+			set
+			{
+				if ((this._Name != value))
+				{
+					this.OnNameChanging(value);
+					this.SendPropertyChanging();
+					this._Name = value;
+					this.SendPropertyChanged("Name");
+					this.OnNameChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Description", DbType="VarChar(MAX)")]
+		public string Description
+		{
+			get
+			{
+				return this._Description;
+			}
+			set
+			{
+				if ((this._Description != value))
+				{
+					this.OnDescriptionChanging(value);
+					this.SendPropertyChanging();
+					this._Description = value;
+					this.SendPropertyChanged("Description");
+					this.OnDescriptionChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_ResourceIds", DbType="VarChar(MAX)")]
+		public string ResourceIds
+		{
+			get
+			{
+				return this._ResourceIds;
+			}
+			set
+			{
+				if ((this._ResourceIds != value))
+				{
+					this.OnResourceIdsChanging(value);
+					this.SendPropertyChanging();
+					this._ResourceIds = value;
+					this.SendPropertyChanged("ResourceIds");
+					this.OnResourceIdsChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_UserId", DbType="UniqueIdentifier")]
+		public System.Guid UserId
+		{
+			get
+			{
+				return this._UserId;
+			}
+			set
+			{
+				if ((this._UserId != value))
+				{
+					this.OnUserIdChanging(value);
+					this.SendPropertyChanging();
+					this._UserId = value;
+					this.SendPropertyChanged("UserId");
+					this.OnUserIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_RootJobId", DbType="UniqueIdentifier")]
+		public System.Nullable<System.Guid> RootJobId
+		{
+			get
+			{
+				return this._RootJobId;
+			}
+			set
+			{
+				if ((this._RootJobId != value))
+				{
+					if (this._Job.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnRootJobIdChanging(value);
+					this.SendPropertyChanging();
+					this._RootJobId = value;
+					this.SendPropertyChanged("RootJobId");
+					this.OnRootJobIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Job_HiveExperiment", Storage="_Job", ThisKey="RootJobId", OtherKey="JobId", IsForeignKey=true, DeleteRule="CASCADE")]
+		public Job RootJob
+		{
+			get
+			{
+				return this._Job.Entity;
+			}
+			set
+			{
+				if ((this._Job.Entity != value))
+				{
+					this.SendPropertyChanging();
+					this._Job.Entity = value;
+					this.SendPropertyChanged("RootJob");
+				}
+			}
+		}
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		protected virtual void SendPropertyChanging()
+		{
+			if ((this.PropertyChanging != null))
+			{
+				this.PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+		
+		protected virtual void SendPropertyChanged(String propertyName)
+		{
+			if ((this.PropertyChanged != null))
+			{
+				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+	}
 }
 #pragma warning restore 1591
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/HiveDataContext.dbml
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/HiveDataContext.dbml	(revision 4423)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/HiveDataContext.dbml	(revision 4423)
@@ -0,0 +1,139 @@
+﻿<?xml version="1.0" encoding="utf-8"?><Database Name="HeuristicLab.Hive" Class="HiveDataContext" xmlns="http://schemas.microsoft.com/linqtosql/dbml/2007">
+  <Table Name="dbo.AssignedResources" Member="AssignedResources">
+    <Type Name="AssignedResource">
+      <Column Name="ResourceId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" CanBeNull="false" />
+      <Column Name="JobId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" CanBeNull="false" />
+      <Column Name="AssignedRessourcesId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" IsDbGenerated="true" CanBeNull="false" />
+      <Association Name="Resource_AssignedResource" Member="Resource" ThisKey="ResourceId" OtherKey="ResourceId" Type="Resource" IsForeignKey="true" DeleteRule="CASCADE" />
+      <Association Name="Job_AssignedResource" Member="Job" ThisKey="JobId" OtherKey="JobId" Type="Job" IsForeignKey="true" DeleteRule="CASCADE" />
+    </Type>
+  </Table>
+  <Table Name="dbo.UptimeStatistics" Member="UptimeStatistics">
+    <Type Name="UptimeStatistic">
+      <Column Name="UptimeStatisticsId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" IsDbGenerated="true" CanBeNull="false" />
+      <Column Name="Login" Type="System.DateTime" DbType="DateTime" CanBeNull="false" />
+      <Column Name="Logout" Type="System.DateTime" DbType="DateTime" CanBeNull="false" />
+      <Column Name="ResourceId" Type="System.Guid" DbType="UniqueIdentifier" CanBeNull="false" />
+      <Association Name="Slave_UptimeStatistic" Member="Slave" ThisKey="ResourceId" OtherKey="ResourceId" Type="Slave" IsForeignKey="true" DeleteRule="SET NULL" />
+    </Type>
+  </Table>
+  <Table Name="dbo.SlaveConfig" Member="SlaveConfigs">
+    <Type Name="SlaveConfig">
+      <Column Name="SlaveConfigId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" IsDbGenerated="true" CanBeNull="false" />
+      <Column Name="UpDownTimeCalendar" Type="System.Xml.Linq.XElement" DbType="Xml" CanBeNull="false" UpdateCheck="Never" />
+      <Column Name="HeartBeatIntervall" Type="System.Int32" DbType="Int" CanBeNull="true" />
+      <Association Name="SlaveConfig_Slave" Member="Slaves" ThisKey="SlaveConfigId" OtherKey="SlaveConfigId" Type="Slave" />
+    </Type>
+  </Table>
+  <Table Name="dbo.SlaveGroup_Resource" Member="SlaveGroup_Resources">
+    <Type Name="SlaveGroup_Resource">
+      <Column Name="SlaveGroup_RessourceId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" IsDbGenerated="true" CanBeNull="false" />
+      <Column Name="SlaveGroupId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" CanBeNull="false" />
+      <Column Name="ResourceId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" CanBeNull="false" />
+      <Association Name="SlaveGroup_SlaveGroup_Resource" Member="SlaveGroup" ThisKey="SlaveGroupId" OtherKey="ResourceId" Type="SlaveGroup" IsForeignKey="true" />
+      <Association Name="Resource_SlaveGroup_Resource" Member="Resource" ThisKey="ResourceId" OtherKey="ResourceId" Type="Resource" IsForeignKey="true" DeleteRule="CASCADE" />
+    </Type>
+  </Table>
+  <Table Name="dbo.PluginInfo" Member="PluginInfos">
+    <Type Name="PluginInfo">
+      <Column Name="PluginId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" IsDbGenerated="true" CanBeNull="false" />
+      <Column Name="Name" Type="System.String" DbType="VarChar(MAX)" CanBeNull="false" />
+      <Column Name="Version" Type="System.String" DbType="VarChar(MAX)" CanBeNull="false" />
+      <Column Name="BuildDate" Type="System.String" DbType="VarChar(20)" CanBeNull="false" />
+      <Association Name="PluginInfo_RequiredPlugin" Member="RequiredPlugins" ThisKey="PluginId" OtherKey="PluginId" Type="RequiredPlugin" />
+    </Type>
+  </Table>
+  <Table Name="dbo.Project" Member="Projects">
+    <Type Name="Project">
+      <Column Name="ProjectId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" IsDbGenerated="true" CanBeNull="false" />
+      <Column Name="Name" Type="System.String" DbType="VarChar(MAX)" CanBeNull="false" />
+      <Association Name="Project_Job" Member="Jobs" ThisKey="ProjectId" OtherKey="ProjectId" Type="Job" />
+    </Type>
+  </Table>
+  <Table Name="dbo.RequiredPlugins" Member="RequiredPlugins">
+    <Type Name="RequiredPlugin">
+      <Column Name="RequiredPluginId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" IsDbGenerated="true" CanBeNull="false" UpdateCheck="Never" />
+      <Column Name="JobId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" CanBeNull="false" />
+      <Column Name="PluginId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" CanBeNull="false" />
+      <Association Name="PluginInfo_RequiredPlugin" Member="PluginInfo" ThisKey="PluginId" OtherKey="PluginId" Type="PluginInfo" IsForeignKey="true" DeleteRule="CASCADE" />
+      <Association Name="Job_RequiredPlugin" Member="Job" ThisKey="JobId" OtherKey="JobId" Type="Job" IsForeignKey="true" />
+    </Type>
+  </Table>
+  <Table Name="dbo.Resource" Member="Resources">
+    <Type Name="Resource" InheritanceCode="RESOURCE">
+      <Column Name="ResourceId" AutoSync="OnInsert" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
+      <Column Name="Name" Type="System.String" DbType="VarChar(MAX)" CanBeNull="false" />
+      <Column Name="ResourceType" Type="System.String" CanBeNull="false" IsDiscriminator="true" />
+      <Association Name="Resource_AssignedResource" Member="AssignedResources" ThisKey="ResourceId" OtherKey="ResourceId" Type="AssignedResource" />
+      <Association Name="Resource_SlaveGroup_Resource" Member="SlaveGroup_Resources_Parents" ThisKey="ResourceId" OtherKey="ResourceId" Type="SlaveGroup_Resource" />
+      <Association Name="Resource_UptimeCalendar" Member="UptimeCalendars" ThisKey="ResourceId" OtherKey="ResourceId" Type="UptimeCalendar" />
+      <Type Name="Slave" InheritanceCode="Slave" IsInheritanceDefault="true">
+        <Column Name="CPUSpeed" Type="System.Int32" DbType="Int" CanBeNull="true" />
+        <Column Name="Memory" Type="System.Int32" DbType="Int" CanBeNull="true" />
+        <Column Name="Login" Type="System.DateTime" DbType="DateTime" CanBeNull="true" />
+        <Column Name="Status" Type="System.String" DbType="VarChar(MAX)" CanBeNull="true" />
+        <Column Name="CalendarSyncStatus" Type="System.String" DbType="VarChar(MAX)" CanBeNull="true" />
+        <Column Name="UseCalendarFromResourceId" Type="System.Guid" DbType="UniqueIdentifier" CanBeNull="true" />
+        <Column Name="SlaveConfigId" Type="System.Guid" DbType="UniqueIdentifier" CanBeNull="true" />
+        <Column Name="NumberOfCores" Type="System.Int32" DbType="Int" CanBeNull="true" />
+        <Column Name="NumberOfFreeCores" Type="System.Int32" DbType="Int" CanBeNull="true" />
+        <Column Name="FreeMemory" Type="System.Int32" DbType="Int" CanBeNull="true" />
+        <Column Name="IsAllowedToCalculate" Type="System.Boolean" DbType="Bit" CanBeNull="false" />
+        <Association Name="Slave_UptimeStatistic" Member="UptimeStatistics" ThisKey="ResourceId" OtherKey="ResourceId" Type="UptimeStatistic" />
+        <Association Name="Slave_Job" Member="Jobs" ThisKey="ResourceId" OtherKey="ResourceId" Type="Job" />
+        <Association Name="SlaveConfig_Slave" Member="SlaveConfig" ThisKey="SlaveConfigId" OtherKey="SlaveConfigId" Type="SlaveConfig" IsForeignKey="true" DeleteRule="SET NULL" />
+      </Type>
+      <Type Name="SlaveGroup" InheritanceCode="GROUP">
+        <Association Name="SlaveGroup_SlaveGroup_Resource" Member="SlaveGroup_Resources_Children" ThisKey="ResourceId" OtherKey="SlaveGroupId" Type="SlaveGroup_Resource" />
+      </Type>
+    </Type>
+  </Table>
+  <Table Name="dbo.Job" Member="Jobs">
+    <Type Name="Job">
+      <Column Name="JobId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" IsDbGenerated="true" CanBeNull="false" />
+      <Column Name="ParentJobId" Type="System.Guid" DbType="UniqueIdentifier" CanBeNull="true" />
+      <Column Name="JobState" Type="System.String" DbType="VarChar(MAX)" CanBeNull="false" />
+      <Column Name="ResourceId" Type="System.Guid" DbType="UniqueIdentifier" CanBeNull="true" />
+      <Column Name="ExecutionTime" Type="System.TimeSpan" DbType="Time" CanBeNull="true" />
+      <Column Name="Exception" Type="System.String" DbType="VarChar(MAX)" CanBeNull="true" />
+      <Column Name="SerializedJob" Type="System.Data.Linq.Binary" DbType="VarBinary(MAX)" CanBeNull="false" UpdateCheck="Never" IsDelayLoaded="true" />
+      <Column Name="DateCreated" Type="System.DateTime" DbType="DateTime" CanBeNull="true" />
+      <Column Name="DateCalculated" Type="System.DateTime" DbType="DateTime" CanBeNull="true" />
+      <Column Name="DateFinished" Type="System.DateTime" DbType="DateTime" CanBeNull="true" />
+      <Column Name="Priority" Type="System.Int32" DbType="Int NOT NULL" CanBeNull="false" />
+      <Column Name="ProjectId" Type="System.Guid" DbType="UniqueIdentifier" CanBeNull="true" />
+      <Column Name="UserId" Type="System.Guid" DbType="UniqueIdentifier" CanBeNull="false" />
+      <Column Name="CoresNeeded" Type="System.Int32" DbType="Int NOT NULL" CanBeNull="false" />
+      <Column Name="MemoryNeeded" Type="System.Int32" DbType="Int NOT NULL" CanBeNull="false" />
+      <Association Name="Job_AssignedResource" Member="AssignedResources" ThisKey="JobId" OtherKey="JobId" Type="AssignedResource" />
+      <Association Name="Job_RequiredPlugin" Member="RequiredPlugins" ThisKey="JobId" OtherKey="JobId" Type="RequiredPlugin" />
+      <Association Name="Job_Job" Member="Jobs" ThisKey="JobId" OtherKey="ParentJobId" Type="Job" />
+      <Association Name="Job_Job" Member="Job1" ThisKey="ParentJobId" OtherKey="JobId" Type="Job" IsForeignKey="true" />
+      <Association Name="Project_Job" Member="Project" ThisKey="ProjectId" OtherKey="ProjectId" Type="Project" IsForeignKey="true" DeleteRule="SET NULL" />
+      <Association Name="Slave_Job" Member="Slave" ThisKey="ResourceId" OtherKey="ResourceId" Type="Slave" IsForeignKey="true" DeleteRule="SET NULL" />
+    </Type>
+  </Table>
+  <Table Name="dbo.UptimeCalendar" Member="UptimeCalendars">
+    <Type Name="UptimeCalendar">
+      <Column Name="UptimeCalendarId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" IsDbGenerated="true" CanBeNull="false" />
+      <Column Name="ResourceId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" CanBeNull="false" />
+      <Column Name="StartDate" Type="System.DateTime" DbType="DateTime NOT NULL" CanBeNull="false" />
+      <Column Name="EndDate" Type="System.DateTime" DbType="DateTime NOT NULL" CanBeNull="false" />
+      <Column Name="AllDayEvent" Type="System.Boolean" DbType="Bit NOT NULL" CanBeNull="false" />
+      <Column Name="Recurring" Type="System.Boolean" DbType="Bit NOT NULL" CanBeNull="false" />
+      <Column Name="RecurringId" Type="System.Guid" DbType="UniqueIdentifier" CanBeNull="false" />
+      <Association Name="Resource_UptimeCalendar" Member="Resource" ThisKey="ResourceId" OtherKey="ResourceId" Type="Resource" IsForeignKey="true" DeleteRule="CASCADE" />
+    </Type>
+  </Table>
+  <Table Name="dbo.HiveExperiment" Member="HiveExperiments">
+    <Type Name="HiveExperiment">
+      <Column Name="HiveExperimentId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" IsDbGenerated="true" CanBeNull="false" />
+      <Column Name="Name" Type="System.String" DbType="VarChar(MAX)" CanBeNull="false" />
+      <Column Name="Description" Type="System.String" DbType="VarChar(MAX)" CanBeNull="true" />
+      <Column Name="ResourceIds" Type="System.String" DbType="VarChar(MAX)" CanBeNull="true" />
+      <Column Name="UserId" Type="System.Guid" DbType="UniqueIdentifier" CanBeNull="false" />
+      <Column Name="RootJobId" Type="System.Guid" DbType="UniqueIdentifier" CanBeNull="true" />
+      <Association Name="Job_HiveExperiment" Member="RootJob" Storage="_Job" ThisKey="RootJobId" OtherKey="JobId" Type="Job" IsForeignKey="true" DeleteRule="CASCADE" />
+    </Type>
+  </Table>
+</Database>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/HiveDataContext.dbml.layout
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/HiveDataContext.dbml.layout	(revision 4423)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/HiveDataContext.dbml.layout	(revision 4423)
@@ -0,0 +1,187 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<ordesignerObjectsDiagram dslVersion="1.0.0.0" absoluteBounds="0, 0, 17.625, 18.375" name="HiveDataContext">
+  <DataContextMoniker Name="/HiveDataContext" />
+  <nestedChildShapes>
+    <classShape Id="a929c9dc-69f4-4488-ba1c-a2342bf81d89" absoluteBounds="13, 8, 2, 1.3862939453124987">
+      <DataClassMoniker Name="/HiveDataContext/AssignedResource" />
+      <nestedChildShapes>
+        <elementListCompartment Id="8b005775-f0ee-41b0-ae10-6d1151003708" absoluteBounds="13.015, 8.46, 1.9700000000000002, 0.8262939453125" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <classShape Id="3176614f-3038-41e5-8e75-cdf99373cb3d" absoluteBounds="6.25, 8.375, 2, 1.5785953776041666">
+      <DataClassMoniker Name="/HiveDataContext/UptimeStatistic" />
+      <nestedChildShapes>
+        <elementListCompartment Id="35235ffe-b21e-49da-b58a-27423444612a" absoluteBounds="6.2650000000000006, 8.835, 1.9700000000000002, 1.0185953776041665" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <classShape Id="5d9c7dad-8113-49c9-bdfa-c64543554a7b" absoluteBounds="4, 8.5, 2, 1.3862939453125023">
+      <DataClassMoniker Name="/HiveDataContext/SlaveConfig" />
+      <nestedChildShapes>
+        <elementListCompartment Id="c2e15bc8-44cb-42af-b195-b9a30f61af28" absoluteBounds="4.0150000000000006, 8.96, 1.9700000000000002, 0.8262939453125" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <classShape Id="7edeab13-5aa7-4b63-8c5e-cae056298001" absoluteBounds="9.625, 12.375, 2, 1.3862939453125023">
+      <DataClassMoniker Name="/HiveDataContext/SlaveGroup_Resource" />
+      <nestedChildShapes>
+        <elementListCompartment Id="b84f48de-4352-4df2-a7da-ff7cbc1fe702" absoluteBounds="9.64, 12.835, 1.9700000000000002, 0.8262939453125" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <classShape Id="7d998e56-4fba-41ca-a1a8-1dcdb9068edf" absoluteBounds="9.25, 15.375, 2, 1.5785953776041666">
+      <DataClassMoniker Name="/HiveDataContext/PluginInfo" />
+      <nestedChildShapes>
+        <elementListCompartment Id="ec4ba325-6dff-4418-baad-59af81ae2024" absoluteBounds="9.265, 15.835, 1.9700000000000002, 1.0185953776041665" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <classShape Id="85f04409-b6e0-4e2f-a140-7191436a806f" absoluteBounds="6.5, 16.875, 2, 1.1939925130208309">
+      <DataClassMoniker Name="/HiveDataContext/Project" />
+      <nestedChildShapes>
+        <elementListCompartment Id="59e11457-6078-47f4-8ee6-eb2052868699" absoluteBounds="6.5150000000000006, 17.335, 1.9700000000000002, 0.63399251302083326" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <classShape Id="97b00810-fa30-457e-b484-b4e80b22f91b" absoluteBounds="12, 5.5, 2, 1.3862939453124987">
+      <DataClassMoniker Name="/HiveDataContext/RequiredPlugin" />
+      <nestedChildShapes>
+        <elementListCompartment Id="df6451e5-069e-4ca0-a909-61b8213b5047" absoluteBounds="12.015, 5.96, 1.9700000000000002, 0.8262939453125" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <classShape Id="706a4581-6daf-4e71-ae2a-87d50b27a051" absoluteBounds="12.375, 2.875, 2, 1.3862939453125005">
+      <DataClassMoniker Name="/HiveDataContext/Resource" />
+      <nestedChildShapes>
+        <elementListCompartment Id="8c24f5bf-2164-4d0f-832e-1730eb0066df" absoluteBounds="12.39, 3.335, 1.9700000000000002, 0.8262939453125" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <classShape Id="695bfc39-59f3-4e60-8644-f847964bf62c" absoluteBounds="9.25, 4.375, 2, 3.6939111328124987">
+      <DataClassMoniker Name="/HiveDataContext/Job" />
+      <nestedChildShapes>
+        <elementListCompartment Id="a6a30e11-03d1-4869-82e6-b733f4ef9974" absoluteBounds="9.265, 4.835, 1.9700000000000002, 3.1339111328125" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <classShape Id="8d5712f7-7a1a-4a89-bd4d-fd60200d3306" absoluteBounds="9.625, 9.25, 2, 2.1554996744791666">
+      <DataClassMoniker Name="/HiveDataContext/UptimeCalendar" />
+      <nestedChildShapes>
+        <elementListCompartment Id="7d8f121b-35bb-4753-a25f-3fac1562e68e" absoluteBounds="9.64, 9.71, 1.9700000000000002, 1.5954996744791665" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <classShape Id="e6f840cc-2968-4be1-b234-eef624ccacbb" absoluteBounds="6, 10.75, 2, 1.9631982421875005">
+      <DataClassMoniker Name="/HiveDataContext/HiveExperiment" />
+      <nestedChildShapes>
+        <elementListCompartment Id="0c65d4e1-256a-4a91-9a57-392f25e4de7f" absoluteBounds="6.0150000000000006, 11.21, 1.9700000000000002, 1.4031982421875" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <classShape Id="26f4edfa-91dd-4941-a058-359f89e567a8" absoluteBounds="7.75, 0.75, 2, 2.9247054036458326">
+      <DataClassMoniker Name="/HiveDataContext/Slave" />
+      <nestedChildShapes>
+        <elementListCompartment Id="1e61f36b-08dc-4df7-8594-c9dcd95c0791" absoluteBounds="7.7650000000000006, 1.21, 1.9700000000000002, 2.364705403645833" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <classShape Id="bbd91675-92f2-4a69-8429-0950008fc8a4" absoluteBounds="15.375, 5, 2, 0.80938964843749961">
+      <DataClassMoniker Name="/HiveDataContext/SlaveGroup" />
+      <nestedChildShapes>
+        <elementListCompartment Id="5a790e8f-6e2e-4bf5-bd2b-f8a82224d9d7" absoluteBounds="15.375, 5, 0.125, 0.2493896484375" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <inheritanceConnector edgePoints="[(12.375 : 3.27485270182292); (9.75 : 3.27485270182292)]" fixedFrom="NotFixed" fixedTo="NotFixed" TargetRelationshipDomainClassId="7a7fe09e-e9ef-4b01-9ff3-bde95e827b62">
+      <nodes>
+        <classShapeMoniker Id="706a4581-6daf-4e71-ae2a-87d50b27a051" />
+        <classShapeMoniker Id="26f4edfa-91dd-4941-a058-359f89e567a8" />
+      </nodes>
+    </inheritanceConnector>
+    <inheritanceConnector edgePoints="[(13.265623 : 4.2612939453125); (13.265623 : 4.625); (16.375 : 4.625); (16.375 : 5)]" fixedFrom="NotFixed" fixedTo="NotFixed" TargetRelationshipDomainClassId="7a7fe09e-e9ef-4b01-9ff3-bde95e827b62">
+      <nodes>
+        <classShapeMoniker Id="706a4581-6daf-4e71-ae2a-87d50b27a051" />
+        <classShapeMoniker Id="bbd91675-92f2-4a69-8429-0950008fc8a4" />
+      </nodes>
+    </inheritanceConnector>
+    <associationConnector edgePoints="[(14.21875 : 4.2612939453125); (14.21875 : 8)]" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/HiveDataContext/Resource/Resource_AssignedResource" />
+      <nodes>
+        <classShapeMoniker Id="706a4581-6daf-4e71-ae2a-87d50b27a051" />
+        <classShapeMoniker Id="a929c9dc-69f4-4488-ba1c-a2342bf81d89" />
+      </nodes>
+    </associationConnector>
+    <associationConnector edgePoints="[(11.25 : 7.44314447265625); (11.6666666666667 : 7.44314447265625 : JumpStart); (11.8333333333333 : 7.44314447265625 : JumpEnd); (14.6406275 : 7.44314447265625); (14.6406275 : 8)]" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/HiveDataContext/Job/Job_AssignedResource" />
+      <nodes>
+        <classShapeMoniker Id="695bfc39-59f3-4e60-8644-f847964bf62c" />
+        <classShapeMoniker Id="a929c9dc-69f4-4488-ba1c-a2342bf81d89" />
+      </nodes>
+    </associationConnector>
+    <associationConnector edgePoints="[(8 : 3.67470540364583); (8 : 8.375)]" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/HiveDataContext/Slave/Slave_UptimeStatistic" />
+      <nodes>
+        <classShapeMoniker Id="26f4edfa-91dd-4941-a058-359f89e567a8" />
+        <classShapeMoniker Id="3176614f-3038-41e5-8e75-cdf99373cb3d" />
+      </nodes>
+    </associationConnector>
+    <associationConnector edgePoints="[(16.375 : 5.8093896484375); (16.375 : 13.0681469726563); (12.5520833333333 : 13.0681469726563 : JumpStart); (12.3854166666667 : 13.0681469726563 : JumpEnd); (11.625 : 13.0681469726563)]" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/HiveDataContext/SlaveGroup/SlaveGroup_SlaveGroup_Resource" />
+      <nodes>
+        <classShapeMoniker Id="bbd91675-92f2-4a69-8429-0950008fc8a4" />
+        <classShapeMoniker Id="7edeab13-5aa7-4b63-8c5e-cae056298001" />
+      </nodes>
+    </associationConnector>
+    <associationConnector edgePoints="[(13.265623 : 4.2612939453125); (13.265623 : 5.25); (11.75 : 5.25); (11.75 : 9); (11.875 : 9); (11.875 : 12.6903214863281); (11.625 : 12.6903214863281)]" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/HiveDataContext/Resource/Resource_SlaveGroup_Resource" />
+      <nodes>
+        <classShapeMoniker Id="706a4581-6daf-4e71-ae2a-87d50b27a051" />
+        <classShapeMoniker Id="7edeab13-5aa7-4b63-8c5e-cae056298001" />
+      </nodes>
+    </associationConnector>
+    <associationConnector edgePoints="[(11.25 : 16.1642976888021); (12.46875 : 16.1642976888021); (12.46875 : 6.8862939453125)]" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/HiveDataContext/PluginInfo/PluginInfo_RequiredPlugin" />
+      <nodes>
+        <classShapeMoniker Id="7d998e56-4fba-41ca-a1a8-1dcdb9068edf" />
+        <classShapeMoniker Id="97b00810-fa30-457e-b484-b4e80b22f91b" />
+      </nodes>
+    </associationConnector>
+    <associationConnector edgePoints="[(11.25 : 6.19314697265625); (12 : 6.19314697265625)]" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/HiveDataContext/Job/Job_RequiredPlugin" />
+      <nodes>
+        <classShapeMoniker Id="695bfc39-59f3-4e60-8644-f847964bf62c" />
+        <classShapeMoniker Id="97b00810-fa30-457e-b484-b4e80b22f91b" />
+      </nodes>
+    </associationConnector>
+    <associationConnector edgePoints="[(5 : 8.5); (5 : 2.21235270182292); (7.75 : 2.21235270182292)]" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/HiveDataContext/SlaveConfig/SlaveConfig_Slave" />
+      <nodes>
+        <classShapeMoniker Id="5d9c7dad-8113-49c9-bdfa-c64543554a7b" />
+        <classShapeMoniker Id="26f4edfa-91dd-4941-a058-359f89e567a8" />
+      </nodes>
+    </associationConnector>
+    <associationConnector edgePoints="[(10.25 : 8.0689111328125); (10.25 : 8.3189111328125); (10.6930769230769 : 8.3189111328125); (10.6930769230769 : 8.0689111328125)]" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/HiveDataContext/Job/Job_Job" />
+      <nodes>
+        <classShapeMoniker Id="695bfc39-59f3-4e60-8644-f847964bf62c" />
+        <classShapeMoniker Id="695bfc39-59f3-4e60-8644-f847964bf62c" />
+      </nodes>
+    </associationConnector>
+    <associationConnector edgePoints="[(8.40625 : 16.875); (8.40625 : 6.22195556640625); (9.25 : 6.22195556640625)]" fixedFrom="Algorithm" fixedTo="Algorithm">
+      <AssociationMoniker Name="/HiveDataContext/Project/Project_Job" />
+      <nodes>
+        <classShapeMoniker Id="85f04409-b6e0-4e2f-a140-7191436a806f" />
+        <classShapeMoniker Id="695bfc39-59f3-4e60-8644-f847964bf62c" />
+      </nodes>
+    </associationConnector>
+    <associationConnector edgePoints="[(9.5 : 3.67470540364583); (9.5 : 4.375)]" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/HiveDataContext/Slave/Slave_Job" />
+      <nodes>
+        <classShapeMoniker Id="26f4edfa-91dd-4941-a058-359f89e567a8" />
+        <classShapeMoniker Id="695bfc39-59f3-4e60-8644-f847964bf62c" />
+      </nodes>
+    </associationConnector>
+    <associationConnector edgePoints="[(12.375 : 3.99924967447917); (11.46875 : 3.99924967447917); (11.46875 : 9.25)]" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/HiveDataContext/Resource/Resource_UptimeCalendar" />
+      <nodes>
+        <classShapeMoniker Id="706a4581-6daf-4e71-ae2a-87d50b27a051" />
+        <classShapeMoniker Id="8d5712f7-7a1a-4a89-bd4d-fd60200d3306" />
+      </nodes>
+    </associationConnector>
+    <associationConnector edgePoints="[(9.40625 : 8.0689111328125); (9.40625 : 11.8902498372396); (8.48958333333333 : 11.8902498372396 : JumpStart); (8.32291666666667 : 11.8902498372396 : JumpEnd); (8 : 11.8902498372396)]" fixedFrom="Algorithm" fixedTo="Algorithm">
+      <AssociationMoniker Name="/HiveDataContext/Job/Job_HiveExperiment" />
+      <nodes>
+        <classShapeMoniker Id="695bfc39-59f3-4e60-8644-f847964bf62c" />
+        <classShapeMoniker Id="e6f840cc-2968-4be1-b234-eef624ccacbb" />
+      </nodes>
+    </associationConnector>
+  </nestedChildShapes>
+</ordesignerObjectsDiagram>
Index: anches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/HiveDataContext.xml
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/HiveDataContext.xml	(revision 4422)
+++ 	(revision )
@@ -1,132 +1,0 @@
-﻿<?xml version="1.0" encoding="utf-8"?>
-<Database Name="HeuristicLab.Hive" Class="HiveDataContext" xmlns="http://schemas.microsoft.com/linqtosql/dbml/2007">
-  <Table Name="dbo.AssignedResources" Member="AssignedResources">
-    <Type Name="AssignedResource">
-      <Column Name="ResourceId" Member="ResourceId" DbType="UniqueIdentifier NOT NULL" Type="System.Guid"/>
-      <Column Name="JobId" Member="JobId" DbType="UniqueIdentifier NOT NULL" Type="System.Guid" />
-      <Column Name="AssignedRessourcesId" Member="AssignedRessourcesId" DbType="UniqueIdentifier NOT NULL" Type="System.Guid" IsPrimaryKey="true" IsDbGenerated="true" AutoSync="OnInsert" />
-      <Association Name="Resource_AssignedResource" Member="Resource" ThisKey="ResourceId" OtherKey="ResourceId" DeleteRule="CASCADE" IsForeignKey="true" Type="Resource"/>
-      <Association Name="Job_AssignedResource" Member="Job" ThisKey="JobId" OtherKey="JobId" DeleteRule="CASCADE" IsForeignKey="true" Type="Job"/>
-    </Type>
-  </Table>
-  <Table Name="dbo.UptimeStatistics" Member="UptimeStatistics">
-    <Type Name="UptimeStatistic">
-      <Column Name="UptimeStatisticsId" Member="UptimeStatisticsId" DbType="UniqueIdentifier NOT NULL" Type="System.Guid" IsPrimaryKey="true" IsDbGenerated="true" AutoSync="OnInsert" />
-      <Column Name="Login" Member="Login" DbType="DateTime" Type="System.DateTime" />
-      <Column Name="Logout" Member="Logout" DbType="DateTime" Type="System.DateTime" />
-      <Column Name="ResourceId" Member="ResourceId" DbType="UniqueIdentifier" Type="System.Guid" />
-      <Association Name="Slave_UptimeStatistic" Member="Slave" ThisKey="ResourceId" OtherKey="ResourceId" DeleteRule="SET NULL" IsForeignKey="true" Type="Slave"/>
-    </Type>
-  </Table>
-  <Table Name="dbo.SlaveConfig" Member="SlaveConfigs">
-    <Type Name="SlaveConfig">
-      <Column Name="SlaveConfigId" Member="SlaveConfigId" DbType="UniqueIdentifier NOT NULL" Type="System.Guid" IsPrimaryKey="true" IsDbGenerated="true" AutoSync="OnInsert" />
-      <Column Name="UpDownTimeCalendar" Member="UpDownTimeCalendar" DbType="Xml" UpdateCheck="Never" Type="System.Xml.Linq.XElement"/>
-      <Column Name="HeartBeatIntervall" Member="HeartBeatIntervall" DbType="Int" Type="System.Int32" CanBeNull="true"/>
-      <Association Name="SlaveConfig_Slave" Member="Slaves"  ThisKey="SlaveConfigId" OtherKey="SlaveConfigId" Type="Slave"/>
-    </Type>
-  </Table>
-
-  <Table Name="dbo.SlaveGroup_Resource" Member="SlaveGroup_Resources">
-    <Type Name="SlaveGroup_Resource">
-      <Column Name="SlaveGroup_RessourceId" Member="SlaveGroup_RessourceId" DbType="UniqueIdentifier NOT NULL" Type="System.Guid" IsPrimaryKey="true" IsDbGenerated="true" AutoSync="OnInsert"  />
-      <Column Name="SlaveGroupId" Member="SlaveGroupId" DbType="UniqueIdentifier NOT NULL" Type="System.Guid" />
-      <Column Name="ResourceId" Member="ResourceId" DbType="UniqueIdentifier NOT NULL" Type="System.Guid" />
-
-      <Association Name="SlaveGroup_SlaveGroup_Resource" Member="SlaveGroup" ThisKey="SlaveGroupId" OtherKey="ResourceId" IsForeignKey="true" Type="SlaveGroup" />
-      <Association Name="Resource_SlaveGroup_Resource" Member="Resource" ThisKey="ResourceId" OtherKey="ResourceId" DeleteRule="CASCADE" IsForeignKey="true" Type="Resource"/>
-    </Type>
-  </Table>
-  <Table Name="dbo.PluginInfo" Member="PluginInfos">
-    <Type Name="PluginInfo">
-      <Column Name="PluginId" Member="PluginId" DbType="UniqueIdentifier NOT NULL" Type="System.Guid" IsPrimaryKey="true" IsDbGenerated="true" AutoSync="OnInsert" />
-      <Column Name="Name" Member="Name" DbType="VarChar(MAX)" Type="System.String" />
-      <Column Name="Version" Member="Version" DbType="VarChar(MAX)" Type="System.String"/>
-      <Column Name="BuildDate" Member="BuildDate" DbType="VarChar(20)" Type="System.String" />
-      <Association Name="PluginInfo_RequiredPlugin" Member="RequiredPlugins" ThisKey="PluginId" OtherKey="PluginId" Type="RequiredPlugin"/>
-    </Type>
-  </Table>
-  <Table Name="dbo.Project" Member="Projects">
-    <Type Name="Project">
-      <Column Name="ProjectId" Member="ProjectId" DbType="UniqueIdentifier NOT NULL" Type="System.Guid" IsPrimaryKey="true" IsDbGenerated="true" AutoSync="OnInsert" />
-      <Column Name="Name" Member="Name" DbType="VarChar(MAX)" Type="System.String"/>
-      <Association Name="Project_Job" Member="Jobs" ThisKey="ProjectId" OtherKey="ProjectId" Type="Job" />
-    </Type>
-  </Table>
-  <Table Name="dbo.RequiredPlugins" Member="RequiredPlugins">
-    <Type Name="RequiredPlugin">
-      <Column Name="RequiredPluginId" Member="RequiredPluginId" DbType="UniqueIdentifier NOT NULL" Type="System.Guid" IsPrimaryKey="true" IsDbGenerated="true" UpdateCheck="Never" AutoSync="OnInsert" />
-      <Column Name="JobId" Member="JobId" DbType="UniqueIdentifier NOT NULL" Type="System.Guid" />
-      <Column Name="PluginId" Member="PluginId" DbType="UniqueIdentifier NOT NULL" Type="System.Guid" />
-      <Association Name="PluginInfo_RequiredPlugin" Member="PluginInfo" ThisKey="PluginId" OtherKey="PluginId" DeleteRule="CASCADE" IsForeignKey="true" Type="PluginInfo"/>
-      <Association Name="Job_RequiredPlugin" Member="Job" ThisKey="JobId" OtherKey="JobId" IsForeignKey="true" Type="Job"/>
-    </Type>
-  </Table>
-  <Table Name="dbo.Resource" Member="Resources">
-    <Type Name="Resource" InheritanceCode="RESOURCE">
-      <Column Name="ResourceId" Member="ResourceId" DbType="UniqueIdentifier NOT NULL" Type="System.Guid" IsPrimaryKey="true" AutoSync="OnInsert" />
-      <Column Name="Name" Member="Name" DbType="VarChar(MAX)" Type="System.String" />
-      <Column Name="ResourceType" Member="ResourceType" IsDiscriminator="true" Type="System.String"/>
-      <Association Name="Resource_AssignedResource" Member="AssignedResources" ThisKey="ResourceId" OtherKey="ResourceId" Type="AssignedResource"/>
-      <Association Name="Resource_SlaveGroup_Resource" Member="SlaveGroup_Resources_Parents" ThisKey="ResourceId" OtherKey="ResourceId" Type="SlaveGroup_Resource" />
-      <Association Name="Resource_UptimeCalendar" Member="UptimeCalendars" ThisKey="ResourceId" OtherKey="ResourceId" Type="UptimeCalendar" />
-      <Type Name="Slave" InheritanceCode="Slave" IsInheritanceDefault="true">
-        <Column Name="CPUSpeed" Member="CPUSpeed" DbType="Int" Type="System.Int32" CanBeNull="true"/>
-        <Column Name="Memory" Member="Memory" DbType="Int" Type="System.Int32" CanBeNull="true"/>
-        <Column Name="Login" Member="Login" DbType="DateTime" Type="System.DateTime" CanBeNull="true"/>
-        <Column Name="Status" Member="Status" DbType="VarChar(MAX)" Type="System.String" CanBeNull="true"/>
-        <Column Name="CalendarSyncStatus" Member="CalendarSyncStatus" DbType="VarChar(MAX)" Type="System.String" CanBeNull="true"/>
-        <Column Name="UseCalendarFromResourceId" Member="UseCalendarFromResourceId" DbType="UniqueIdentifier" Type="System.Guid" CanBeNull="true"/>
-        <Column Name="SlaveConfigId" Member="SlaveConfigId" DbType="UniqueIdentifier" Type="System.Guid" CanBeNull="true"/>
-        <Column Name="NumberOfCores" Member="NumberOfCores" DbType="Int" Type="System.Int32" CanBeNull="true"/>
-        <Column Name="NumberOfFreeCores" Member="NumberOfFreeCores" DbType="Int" Type="System.Int32" CanBeNull="true"/>
-        <Column Name="FreeMemory" Member="FreeMemory" DbType="Int" Type="System.Int32" CanBeNull="true"/>
-        <Column Name="IsAllowedToCalculate" Member="IsAllowedToCalculate" DbType="Bit" Type="System.Boolean"/>
-        <Association Name="Slave_UptimeStatistic" Member="UptimeStatistics" ThisKey="ResourceId" OtherKey="ResourceId" Type="UptimeStatistic"/>
-        <Association Name="Slave_Job" Member="Jobs" ThisKey="ResourceId" OtherKey="ResourceId" Type="Job" DeleteRule="SET NULL"/>
-        <Association Name="SlaveConfig_Slave" Member="SlaveConfig" ThisKey="SlaveConfigId" OtherKey="SlaveConfigId" DeleteRule="SET NULL" IsForeignKey="true" Type="SlaveConfig"/>
-      </Type>
-      <Type Name="SlaveGroup" InheritanceCode="GROUP" IsInheritanceDefault="false">
-        <Association Name="SlaveGroup_SlaveGroup_Resource" Member="SlaveGroup_Resources_Children" ThisKey="ResourceId" OtherKey="SlaveGroupId" Type="SlaveGroup_Resource" />
-      </Type>
-    </Type>
-  </Table>
-
-  <Table Name="dbo.Job" Member="Jobs">
-    <Type Name="Job">
-      <Column Name="JobId" Member="JobId" DbType="UniqueIdentifier NOT NULL" Type="System.Guid" IsPrimaryKey="true" IsDbGenerated="true" AutoSync="OnInsert" />
-      <Column Name="ParentJobId" Member="ParentJobId" DbType="UniqueIdentifier" Type="System.Guid" CanBeNull="true" />
-      <Column Name="JobState" Member="JobState" DbType="VarChar(MAX)" Type="System.String"/>
-      <Column Name="ResourceId" Member="ResourceId" DbType="UniqueIdentifier" Type="System.Guid" CanBeNull="true"/>
-      <Column Name="Percentage" Member="Percentage" DbType="Float" Type="System.Double" CanBeNull="true"/>
-      <Column Name="Exception" Member="Exception" DbType="VarChar(MAX)" Type="System.String" CanBeNull="true"/>
-      <Column Name="SerializedJob" Member="SerializedJob" DbType="VarBinary(MAX)" UpdateCheck="Never" Type="System.Data.Linq.Binary" IsDelayLoaded="true"/>
-      <Column Name="DateCreated" Member="DateCreated" DbType="DateTime" Type="System.DateTime" CanBeNull="true"/>
-      <Column Name="DateCalculated" Member="DateCalculated" DbType="DateTime" Type="System.DateTime" CanBeNull="true"/>
-      <Column Name="DateFinished" Member="DateFinished" DbType="DateTime" Type="System.DateTime" CanBeNull="true"/>
-      <Column Name="Priority" Member="Priority" DbType="Int NOT NULL" Type="System.Int32"/>
-      <Column Name="ProjectId" Member="ProjectId" DbType="UniqueIdentifier" Type="System.Guid" CanBeNull="true"/>
-      <Column Name="UserId" Member="UserId" DbType="UniqueIdentifier" Type="System.Guid" CanBeNull="true"/>
-      <Column Name="CoresNeeded" Member="CoresNeeded" DbType="Int NOT NULL" Type="System.Int32"/>
-      <Column Name="MemoryNeeded" Member="MemoryNeeded" DbType="Int NOT NULL" Type="System.Int32"/>
-      <Association Name="Job_AssignedResource" Member="AssignedResources" ThisKey="JobId" OtherKey="JobId" Type="AssignedResource"/>
-      <Association Name="Job_RequiredPlugin" Member="RequiredPlugins" ThisKey="JobId" OtherKey="JobId" Type="RequiredPlugin" />
-      <Association Name="Job_Job" Member="Jobs" ThisKey="JobId" OtherKey="ParentJobId" Type="Job"/>
-      <Association Name="Job_Job" Member="Job1" ThisKey="ParentJobId" OtherKey="JobId" IsForeignKey="true" Type="Job" />
-      <Association Name="Project_Job" Member="Project" ThisKey="ProjectId" OtherKey="ProjectId" DeleteRule="SET NULL" IsForeignKey="true" Type="Project"/>
-      <Association Name="Slave_Job" Member="Slave" ThisKey="ResourceId" OtherKey="ResourceId" DeleteRule="SET NULL" IsForeignKey="true" Type="Slave"/>
-    </Type>
-  </Table>
-  <Table Name="dbo.UptimeCalendar" Member="UptimeCalendars">
-    <Type Name="UptimeCalendar">
-      <Column Name="UptimeCalendarId" Member="UptimeCalendarId" DbType="UniqueIdentifier NOT NULL" Type="System.Guid" IsPrimaryKey="true" IsDbGenerated="true" AutoSync="OnInsert" />
-      <Column Name="ResourceId" Member="ResourceId" DbType="UniqueIdentifier NOT NULL" Type="System.Guid" />
-      <Column Name="StartDate" Member="StartDate" DbType="DateTime NOT NULL" Type="System.DateTime" />
-      <Column Name="EndDate" Member="EndDate" DbType="DateTime NOT NULL" Type="System.DateTime"/>
-      <Column Name="AllDayEvent" Member="AllDayEvent" DbType="Bit NOT NULL" Type="System.Boolean"/>
-      <Column Name="Recurring" Member="Recurring" DbType="Bit NOT NULL" Type="System.Boolean"/>
-      <Column Name="RecurringId" Member="RecurringId" DbType="UniqueIdentifier" Type="System.Guid"/>
-      <Association Name="Resource_UptimeCalendar" Member="Resource" ThisKey="ResourceId" OtherKey="ResourceId" DeleteRule="CASCADE" IsForeignKey="true" Type="Resource"/>
-    </Type>
-  </Table>
-</Database>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/HiveExperimentDao.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/HiveExperimentDao.cs	(revision 4423)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/HiveExperimentDao.cs	(revision 4423)
@@ -0,0 +1,90 @@
+﻿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 HiveExperimentDao : BaseDao<HiveExperimentDto, HiveExperiment>, IHiveExperimentDao {
+    #region IGenericDao<HiveExperimentDto> Members
+
+    HiveExperimentDto IGenericDao<HiveExperimentDto>.FindById(Guid id) {
+      return (from he in Context.HiveExperiments
+              where he.HiveExperimentId.Equals(id)
+              select EntityToDto(he, null)).SingleOrDefault();
+    }
+
+    IEnumerable<HiveExperimentDto> IGenericDao<HiveExperimentDto>.FindAll() {
+      return (from he in Context.HiveExperiments
+              select EntityToDto(he, null)).ToList();
+    }
+
+    public HiveExperimentDto Insert(HiveExperimentDto bObj) {
+      HiveExperiment he = DtoToEntity(bObj, null);
+      Context.HiveExperiments.InsertOnSubmit(he);
+      CommitChanges();
+      bObj.Id = he.HiveExperimentId;
+      return bObj;
+    }
+
+    public void Delete(Guid id) {
+      HiveExperiment he = Context.HiveExperiments.SingleOrDefault(h => h.HiveExperimentId.Equals(id));
+      Context.HiveExperiments.DeleteOnSubmit(he);
+      Context.SubmitChanges();
+    }
+
+    public void Update(HiveExperimentDto bObj) {
+      HiveExperiment he = Context.HiveExperiments.SingleOrDefault(h => h.HiveExperimentId.Equals(bObj.Id));
+      DtoToEntity(bObj, he);
+      CommitChanges();
+    }
+
+    public IEnumerable<HiveExperimentDto> FindAllByUserId(Guid userId) {
+      return (from he in Context.HiveExperiments
+                where he.UserId.Equals(userId)
+                select EntityToDto(he, null)).ToList();
+    }
+
+    #endregion
+
+    public override HiveExperiment DtoToEntity(HiveExperimentDto source, HiveExperiment target) {
+      if (source == null)
+        return null;
+      if (target == null)
+        target = new HiveExperiment();
+
+      target.HiveExperimentId = source.Id;
+      target.Name = source.Name;
+      target.Description = source.Description;
+      target.ResourceIds = source.ResourceIds;
+      target.UserId = source.UserId;
+
+      target.RootJobId = source.RootJobId;
+      //if (source.RootJobId.HasValue) {
+      //  var jobDao = new JobDao();
+      //  target.RootJob = jobDao.DtoToEntity(jobDao.FindById(source.RootJobId.Value), null);
+      //} else {
+      //  target.RootJob = null;
+      //}
+      
+      return target;
+    }
+
+    public override HiveExperimentDto EntityToDto(HiveExperiment source, HiveExperimentDto target) {
+      if (source == null)
+        return null;
+      if (target == null)
+        target = new HiveExperimentDto();
+
+      target.Id = source.HiveExperimentId;
+      target.Name = source.Name;
+      target.Description = source.Description;
+      target.ResourceIds = source.ResourceIds;
+      target.UserId = source.UserId;
+      target.RootJobId = source.RootJobId;
+
+      return target;
+    }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/JobDao.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/JobDao.cs	(revision 4422)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/JobDao.cs	(revision 4423)
@@ -81,6 +81,6 @@
     }
 
-    public void Delete(JobDto bObj) {
-      Job job = Context.Jobs.SingleOrDefault(j => j.JobId.Equals(bObj.Id));
+    public void Delete(Guid id) {
+      Job job = Context.Jobs.SingleOrDefault(j => j.JobId.Equals(id));
       Context.Jobs.DeleteOnSubmit(job);
       CommitChanges();
@@ -132,5 +132,8 @@
                     (from child in Context.Jobs
                      where child.ParentJobId == ar.Job.JobId
-                     select child.JobState == Enum.GetName(typeof(JobState), JobState.Finished)).All(x => x)
+                     select child.JobState == Enum.GetName(typeof(JobState), JobState.Finished)).All(x => x) &&
+                    (from child in Context.Jobs // avoid returning WaitForChildJobs jobs where no child-jobs exist (yet)
+                     where child.ParentJobId == ar.Job.JobId
+                     select child).Count() > 0
                   orderby ar.Job.Priority descending
                   select EntityToDto(ar.Job, null);
@@ -216,5 +219,5 @@
       target.JobId = source.Id;
 
-      target.Percentage = source.Percentage;
+      target.ExecutionTime = source.ExecutionTime;
       target.Exception = source.Exception;
 
@@ -222,8 +225,6 @@
       target.JobState = Enum.GetName(typeof(JobState), source.State);
       target.UserId = source.UserId;
-      if (source.ParentJob != null) {
-        target.ParentJobId = source.ParentJob.Id;
-      }
-
+      target.ParentJobId = source.ParentJobId;
+      
       foreach (Guid assignRessourceId in source.AssignedResourceIds) {
         if (!target.AssignedResources.Select(x => x.ResourceId).Contains(assignRessourceId)) {
@@ -251,13 +252,11 @@
 
       target.Exception = source.Exception;
-      target.Percentage = source.Percentage;
+      target.ExecutionTime = source.ExecutionTime.HasValue ? source.ExecutionTime.Value : TimeSpan.Zero;
 
       target.Priority = source.Priority;
       target.State = (JobState)Enum.Parse(typeof(JobState), source.JobState, true);
       target.UserId = source.UserId;
-
-      if (source.ParentJobId.HasValue) {
-        target.ParentJob = new JobDto() { Id = source.ParentJobId.Value };
-      }
+      target.ParentJobId = source.ParentJobId;
+      
       target.AssignedResourceIds = source.AssignedResources.Select(x => x.ResourceId).ToList();
 
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/PluginInfoDao.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/PluginInfoDao.cs	(revision 4422)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/PluginInfoDao.cs	(revision 4423)
@@ -31,6 +31,6 @@
     }
 
-    public void Delete(HivePluginInfoDto bObj) {
-      PluginInfo pi = Context.PluginInfos.SingleOrDefault(p => p.PluginId.Equals(bObj.Id));
+    public void Delete(Guid id) {
+      PluginInfo pi = Context.PluginInfos.SingleOrDefault(p => p.PluginId.Equals(id));
       Context.PluginInfos.DeleteOnSubmit(pi);      
     }
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/Scripts/UpdateContext.bat
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/Scripts/UpdateContext.bat	(revision 4422)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/Scripts/UpdateContext.bat	(revision 4423)
@@ -1,1 +1,1 @@
-sqlmetal /namespace:HeuristicLab.Hive.Server.LINQDataAccess /code:../HiveDataContext.cs /language:csharp ../HiveDataContext.xml
+sqlmetal /namespace:HeuristicLab.Hive.Server.LINQDataAccess /code:../HiveDataContext.cs /language:csharp ../HiveDataContext.dbml
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/Scripts/cleanHiveDatabase.sql
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/Scripts/cleanHiveDatabase.sql	(revision 4422)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/Scripts/cleanHiveDatabase.sql	(revision 4423)
@@ -7,3 +7,11 @@
 DELETE FROM [HeuristicLab.Hive].[dbo].SlaveGroup_Resource
 DELETE FROM [HeuristicLab.Hive].[dbo].[Resource]
+DELETE FROM [HeuristicLab.Hive].[dbo].HiveExperiment
 DELETE FROM [HeuristicLab.Hive].[dbo].Job
+
+/** only jobs & experiments **/
+DELETE FROM [HeuristicLab.Hive].[dbo].AssignedResources
+DELETE FROM [HeuristicLab.Hive].[dbo].RequiredPlugins
+DELETE FROM [HeuristicLab.Hive].[dbo].PluginInfo
+DELETE FROM [HeuristicLab.Hive].[dbo].HiveExperiment
+DELETE FROM [HeuristicLab.Hive].[dbo].Job
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/Scripts/prepareHiveDatabase.sql
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/Scripts/prepareHiveDatabase.sql	(revision 4422)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/Scripts/prepareHiveDatabase.sql	(revision 4423)
@@ -14,4 +14,5 @@
 ALTER TABLE dbo.UptimeCalendar ALTER COLUMN UptimeCalendarId DROP ROWGUIDCOL;
 ALTER TABLE dbo.UptimeStatistics ALTER COLUMN UptimeStatisticsId DROP ROWGUIDCOL;
+ALTER TABLE dbo.HiveExperiment ALTER COLUMN HiveExperimentId DROP ROWGUIDCOL;
 
 ALTER TABLE dbo.AssignedResources DROP CONSTRAINT [DF_AssignedResources_AssignedRessourcesId];
@@ -25,4 +26,5 @@
 ALTER TABLE dbo.UptimeCalendar DROP CONSTRAINT [DF_UptimeCalendar_UptimeCalendarId];
 ALTER TABLE dbo.UptimeStatistics DROP CONSTRAINT [DF_UptimeStatistics_UptimeStatisticsId];
+ALTER TABLE dbo.HiveExperiment DROP CONSTRAINT [[DF_HiveExperiment_HiveExperimentId]];
 */
 
@@ -58,4 +60,7 @@
 ALTER TABLE dbo.UptimeStatistics WITH NOCHECK ADD CONSTRAINT [DF_UptimeStatistics_UptimeStatisticsId] DEFAULT (newid()) FOR UptimeStatisticsId;
 
+ALTER TABLE dbo.HiveExperiment ALTER COLUMN HiveExperimentId ADD ROWGUIDCOL;
+ALTER TABLE dbo.HiveExperiment WITH NOCHECK ADD CONSTRAINT [DF_HiveExperiment_HiveExperimentId] DEFAULT (newid()) FOR HiveExperimentId;
+
 /* create indices */
 CREATE INDEX Index_RequiredPlugins_JobId ON RequiredPlugins(JobId);
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/SlaveConfigDao.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/SlaveConfigDao.cs	(revision 4422)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/SlaveConfigDao.cs	(revision 4423)
@@ -30,6 +30,6 @@
     }
 
-    public void Delete(SlaveConfigDto bObj) {
-      Context.SlaveConfigs.DeleteOnSubmit(Context.SlaveConfigs.SingleOrDefault(c => c.SlaveConfigId.Equals(bObj.Id)));
+    public void Delete(Guid id) {
+      Context.SlaveConfigs.DeleteOnSubmit(Context.SlaveConfigs.SingleOrDefault(c => c.SlaveConfigId.Equals(id)));
       CommitChanges();
     }
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/SlaveDao.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/SlaveDao.cs	(revision 4422)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/SlaveDao.cs	(revision 4423)
@@ -55,6 +55,6 @@
 
     //Cascading delete takes care of the rest
-    public void Delete(SlaveDto info) {
-      Resource res = Context.Resources.SingleOrDefault(c => c.ResourceId.Equals(info.Id));            
+    public void Delete(Guid id) {
+      Resource res = Context.Resources.SingleOrDefault(c => c.ResourceId.Equals(id));            
       Context.Resources.DeleteOnSubmit(res);
       CommitChanges();
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/SlaveGroupDao.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/SlaveGroupDao.cs	(revision 4422)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/SlaveGroupDao.cs	(revision 4423)
@@ -36,10 +36,10 @@
     }
 
-    public void Delete(SlaveGroupDto bObj) {
+    public void Delete(Guid id) {
       
       //Deleting all references
-      Context.SlaveGroup_Resources.DeleteAllOnSubmit(Context.SlaveGroup_Resources.Where(cg => cg.SlaveGroupId.Equals(bObj.Id)));
+      Context.SlaveGroup_Resources.DeleteAllOnSubmit(Context.SlaveGroup_Resources.Where(cg => cg.SlaveGroupId.Equals(id)));
 
-      Resource res = Context.Resources.SingleOrDefault(c => c.ResourceId.Equals(bObj.Id));
+      Resource res = Context.Resources.SingleOrDefault(c => c.ResourceId.Equals(id));
 
       Context.Resources.DeleteOnSubmit(res);
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/UptimeCalendarDao.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/UptimeCalendarDao.cs	(revision 4422)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/UptimeCalendarDao.cs	(revision 4423)
@@ -65,6 +65,6 @@
     }
 
-    public void Delete(AppointmentDto bObj) {
-      Context.UptimeCalendars.DeleteOnSubmit(Context.UptimeCalendars.SingleOrDefault(uc => uc.UptimeCalendarId.Equals(bObj.Id)));
+    public void Delete(Guid id) {
+      Context.UptimeCalendars.DeleteOnSubmit(Context.UptimeCalendars.SingleOrDefault(uc => uc.UptimeCalendarId.Equals(id)));
       CommitChanges();
     }
Index: anches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server/3.3/Copy of HeuristicLabHiveServerApplication.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server/3.3/Copy of HeuristicLabHiveServerApplication.cs	(revision 4422)
+++ 	(revision )
@@ -1,179 +1,0 @@
-﻿#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.Net;
-using System.ServiceModel;
-using System.ServiceModel.Description;
-using System.Windows.Forms;
-using HeuristicLab.Hive.Contracts;
-using HeuristicLab.Hive.Contracts.Interfaces;
-using HeuristicLab.PluginInfrastructure;
-using HeuristicLab.Hive.Server.Core;
-
-namespace HeuristicLab.Hive.Server {
-  [Application("Hive Server", "Server application for the distributed hive engine.", true)]
-  public class HeuristicLabHiveServerApplication : ApplicationBase {
-    public const string STR_SlaveCommunicator = "SlaveCommunicator";
-    public const string STR_ServerConsoleFacade = "ServerConsoleFacade";
-    public const string STR_ExecutionEngineFacade = "ExecutionEngineFacade";
-
-    private Dictionary<string, ServiceHost> runningServices = new Dictionary<string, ServiceHost>();
-    private NetTcpBinding binding = (NetTcpBinding)WcfSettings.GetBinding();
-    private NetTcpBinding streamedBinding = (NetTcpBinding)WcfSettings.GetStreamedBinding();
-
-    private enum Services {
-      SlaveCommunicator,
-      ServerConsoleFacade,
-      ExecutionEngineFacade,
-      All
-    }
-
-    private bool AddMexEndpoint(ServiceHost serviceHost) {
-      if (serviceHost != null) {
-        ServiceMetadataBehavior behavior = new ServiceMetadataBehavior();
-        serviceHost.Description.Behaviors.Add(behavior);
-
-        return serviceHost.AddServiceEndpoint(
-          typeof(IMetadataExchange),
-          MetadataExchangeBindings.CreateMexTcpBinding(),
-          "mex") != null;
-      } else
-        return false;
-    }
-
-    private Uri StartService(Services svc, IPAddress ipAddress, int port) {
-      string curServiceHost = "";
-      Uri uriTcp;
-      ISlaveFacade clientCommunicatorInstance = ApplicationManager.Manager.GetInstances<ISlaveFacade>().First();
-      IServerConsoleFacade serverConsoleInstance = ApplicationManager.Manager.GetInstances<IServerConsoleFacade>().First();
-      IExecutionEngineFacade executionEngineInstance = ApplicationManager.Manager.GetInstances<IExecutionEngineFacade>().First();
-      //SpringServiceHost serviceHost = null;
-      ServiceHost serviceHost = null;
-
-      switch (svc) {
-        case Services.SlaveCommunicator:
-          //  if (clientCommunicatorInstances.Count() > 0) {
-          uriTcp = new Uri("net.tcp://" + ipAddress + ":" + port + "/HiveServer/");
-          serviceHost = new ServiceHost(clientCommunicatorInstance.GetType(), uriTcp);
-          //serviceHost = new ServiceHost(typeof(SlaveFacade), uriTcp);
-          //serviceHost = new SpringServiceHost("clientFacade", uriTcp);
-          serviceHost.AddServiceEndpoint(typeof(ISlaveFacade), streamedBinding, STR_SlaveCommunicator);
-
-          ServiceDebugBehavior sdb = serviceHost.Description.Behaviors.Find<ServiceDebugBehavior>();
-          if (sdb == null) {
-            sdb = new ServiceDebugBehavior();
-            serviceHost.Description.Behaviors.Add(sdb);
-          }
-          sdb.IncludeExceptionDetailInFaults = true;
-
-
-
-          curServiceHost = STR_SlaveCommunicator;
-          //  }
-          break;
-        case Services.ServerConsoleFacade:
-          //  if (serverConsoleInstances.Count() > 0) {
-          uriTcp = new Uri("net.tcp://" + ipAddress + ":" + port + "/HiveServerConsole/");
-          serviceHost = new ServiceHost(serverConsoleInstance.GetType(), uriTcp);
-          //serviceHost = new SpringServiceHost("serverConsoleFacade", uriTcp);
-          serviceHost.AddServiceEndpoint(typeof(IServerConsoleFacade), binding, STR_ServerConsoleFacade);
-          curServiceHost = STR_ServerConsoleFacade;
-          //  }
-          break;
-        case Services.ExecutionEngineFacade:
-          //  if (executionEngineInstances.Count() > 0) {
-          uriTcp = new Uri("net.tcp://" + ipAddress + ":" + port + "/ExecutionEngine/");
-          serviceHost = new ServiceHost(executionEngineInstance.GetType(), uriTcp);
-          //serviceHost = new SpringServiceHost("executionEngineFacade", uriTcp);
-          serviceHost.AddServiceEndpoint(typeof(IExecutionEngineFacade), streamedBinding, STR_ExecutionEngineFacade);
-          curServiceHost = STR_ExecutionEngineFacade;
-          //  }
-          break;
-        case Services.All:
-          throw new InvalidOperationException("Not supported!");
-        default:
-          return null;
-      }
-      if (!String.IsNullOrEmpty(curServiceHost)) {
-        AddMexEndpoint(serviceHost);
-        //WcfSettings.SetServiceCertificate(serviceHost);
-        serviceHost.Open();
-        runningServices.Add(curServiceHost, serviceHost);
-        return serviceHost.BaseAddresses[0];
-      } else
-        return null;
-    }
-
-    private void StopService(Services svc) {
-      ServiceHost svcHost = null;
-      switch (svc) {
-        case Services.SlaveCommunicator:
-          runningServices.TryGetValue(STR_SlaveCommunicator, out svcHost);
-          break;
-        case Services.ServerConsoleFacade:
-          runningServices.TryGetValue(STR_ServerConsoleFacade, out svcHost);
-          break;
-        case Services.ExecutionEngineFacade:
-          runningServices.TryGetValue(STR_ExecutionEngineFacade, out svcHost);
-          break;
-        case Services.All:
-          foreach (KeyValuePair<string, ServiceHost> item in runningServices)
-            item.Value.Close();
-          return;
-        default:
-          throw new InvalidOperationException("Not supported!");
-      }
-      svcHost.Close();
-    }
-
-    public override void Run() {
-      IPAddress[] addresses = Dns.GetHostAddresses(Dns.GetHostName());
-      int index = 0;
-      if (System.Environment.OSVersion.Version.Major >= 6) {
-        for (index = addresses.Length - 1; index >= 0; index--)
-          if (addresses[index].AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
-            break;
-      }
-
-      
-
-      //Start services and record their base address
-      Dictionary<string, Uri> baseAddrDict = new Dictionary<string, Uri>();
-      baseAddrDict.Add(STR_SlaveCommunicator, StartService(Services.SlaveCommunicator, addresses[index], WcfSettings.DEFAULTPORT));
-      baseAddrDict.Add(STR_ServerConsoleFacade, StartService(Services.ServerConsoleFacade, addresses[index], WcfSettings.DEFAULTPORT));
-      baseAddrDict.Add(STR_ExecutionEngineFacade, StartService(Services.ExecutionEngineFacade, addresses[index], WcfSettings.DEFAULTPORT));
-
-      ILifecycleManager lifecycleManager = ServiceLocator.GetLifecycleManager();
-
-      lifecycleManager.Init();
-
-      Form mainForm = new MainForm(baseAddrDict);
-      Application.Run();
-
-      lifecycleManager.Shutdown();
-      
-      StopService(Services.All);
-    }
-  }
-}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server/3.3/HeuristicLabHiveServerApplication.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server/3.3/HeuristicLabHiveServerApplication.cs	(revision 4422)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server/3.3/HeuristicLabHiveServerApplication.cs	(revision 4423)
@@ -45,8 +45,9 @@
 
         lifecycleManager = ServiceLocator.GetLifecycleManager();
-        lifecycleManager.Init();
+        lifecycleManager.Start();
 
         Form mainForm = new MainForm(GetBaseAddresses());
         Application.Run();
+        
       } finally {
         foreach (ServiceHost host in serviceHosts.Values) {
@@ -55,5 +56,5 @@
         }
         if (lifecycleManager != null)
-          lifecycleManager.Shutdown();
+          lifecycleManager.Stop();
       }
     }
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/HeuristicLab.Hive.Slave.Communication-3.3.csproj
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/HeuristicLab.Hive.Slave.Communication-3.3.csproj	(revision 4422)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/HeuristicLab.Hive.Slave.Communication-3.3.csproj	(revision 4423)
@@ -142,33 +142,33 @@
       <LastGenOutput>Settings.Designer.cs</LastGenOutput>
     </None>
-    <None Include="Service References\SlaveFacade\Arrays.xsd">
-      <SubType>Designer</SubType>
-    </None>
-    <None Include="Service References\SlaveFacade\HeuristicLab.DataAccess.xsd">
-      <SubType>Designer</SubType>
-    </None>
-    <None Include="Service References\SlaveFacade\HeuristicLab.Hive.Contracts.BusinessObjects.xsd">
-      <SubType>Designer</SubType>
-    </None>
-    <None Include="Service References\SlaveFacade\HeuristicLab.Hive.Contracts.ResponseObjects.xsd">
-      <SubType>Designer</SubType>
-    </None>
-    <None Include="Service References\SlaveFacade\HeuristicLab.Hive.Contracts.xsd">
-      <SubType>Designer</SubType>
-    </None>
-    <None Include="Service References\SlaveFacade\HeuristicLab.PluginInfrastructure.xsd">
-      <SubType>Designer</SubType>
-    </None>
-    <None Include="Service References\SlaveFacade\Message.xsd">
-      <SubType>Designer</SubType>
-    </None>
-    <None Include="Service References\SlaveFacade\service.wsdl" />
-    <None Include="Service References\SlaveFacade\service.xsd">
-      <SubType>Designer</SubType>
-    </None>
-    <None Include="Service References\SlaveFacade\service1.xsd">
-      <SubType>Designer</SubType>
-    </None>
-    <None Include="Service References\SlaveFacade\System.xsd">
+    <None Include="Service References\SlaveFacade\Arrays1.xsd">
+      <SubType>Designer</SubType>
+    </None>
+    <None Include="Service References\SlaveFacade\HeuristicLab.DataAccess1.xsd">
+      <SubType>Designer</SubType>
+    </None>
+    <None Include="Service References\SlaveFacade\HeuristicLab.Hive.Contracts.BusinessObjects1.xsd">
+      <SubType>Designer</SubType>
+    </None>
+    <None Include="Service References\SlaveFacade\HeuristicLab.Hive.Contracts.ResponseObjects1.xsd">
+      <SubType>Designer</SubType>
+    </None>
+    <None Include="Service References\SlaveFacade\HeuristicLab.Hive.Contracts1.xsd">
+      <SubType>Designer</SubType>
+    </None>
+    <None Include="Service References\SlaveFacade\HeuristicLab.PluginInfrastructure1.xsd">
+      <SubType>Designer</SubType>
+    </None>
+    <None Include="Service References\SlaveFacade\Message1.xsd">
+      <SubType>Designer</SubType>
+    </None>
+    <None Include="Service References\SlaveFacade\service1.wsdl" />
+    <None Include="Service References\SlaveFacade\service2.xsd">
+      <SubType>Designer</SubType>
+    </None>
+    <None Include="Service References\SlaveFacade\service21.xsd">
+      <SubType>Designer</SubType>
+    </None>
+    <None Include="Service References\SlaveFacade\System1.xsd">
       <SubType>Designer</SubType>
     </None>
Index: anches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveFacade/Arrays.xsd
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveFacade/Arrays.xsd	(revision 4422)
+++ 	(revision )
@@ -1,28 +1,0 @@
-﻿<?xml version="1.0" encoding="utf-8"?>
-<xs:schema xmlns:ser="http://schemas.microsoft.com/2003/10/Serialization/" 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:import namespace="http://schemas.microsoft.com/2003/10/Serialization/" />
-  <xs:complexType name="ArrayOfKeyValueOfguiddouble">
-    <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="KeyValueOfguiddouble">
-        <xs:complexType>
-          <xs:sequence>
-            <xs:element name="Key" type="ser:guid" />
-            <xs:element name="Value" type="xs:double" />
-          </xs:sequence>
-        </xs:complexType>
-      </xs:element>
-    </xs:sequence>
-  </xs:complexType>
-  <xs:element name="ArrayOfKeyValueOfguiddouble" nillable="true" type="tns:ArrayOfKeyValueOfguiddouble" />
-  <xs:complexType name="ArrayOfguid">
-    <xs:sequence>
-      <xs:element minOccurs="0" maxOccurs="unbounded" name="guid" type="ser:guid" />
-    </xs:sequence>
-  </xs:complexType>
-  <xs:element name="ArrayOfguid" nillable="true" type="tns:ArrayOfguid" />
-</xs:schema>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveFacade/Arrays1.xsd
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveFacade/Arrays1.xsd	(revision 4423)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveFacade/Arrays1.xsd	(revision 4423)
@@ -0,0 +1,28 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:ser="http://schemas.microsoft.com/2003/10/Serialization/" 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:import namespace="http://schemas.microsoft.com/2003/10/Serialization/" />
+  <xs:complexType name="ArrayOfKeyValueOfguidduration">
+    <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="KeyValueOfguidduration">
+        <xs:complexType>
+          <xs:sequence>
+            <xs:element name="Key" type="ser:guid" />
+            <xs:element name="Value" type="ser:duration" />
+          </xs:sequence>
+        </xs:complexType>
+      </xs:element>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="ArrayOfKeyValueOfguidduration" nillable="true" type="tns:ArrayOfKeyValueOfguidduration" />
+  <xs:complexType name="ArrayOfguid">
+    <xs:sequence>
+      <xs:element minOccurs="0" maxOccurs="unbounded" name="guid" type="ser:guid" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="ArrayOfguid" nillable="true" type="tns:ArrayOfguid" />
+</xs:schema>
Index: anches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveFacade/HeuristicLab.DataAccess.xsd
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveFacade/HeuristicLab.DataAccess.xsd	(revision 4422)
+++ 	(revision )
@@ -1,10 +1,0 @@
-﻿<?xml version="1.0" encoding="utf-8"?>
-<xs:schema xmlns:ser="http://schemas.microsoft.com/2003/10/Serialization/" 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:import namespace="http://schemas.microsoft.com/2003/10/Serialization/" />
-  <xs:complexType name="PersistableObject">
-    <xs:sequence>
-      <xs:element minOccurs="0" name="Id" type="ser:guid" />
-    </xs:sequence>
-  </xs:complexType>
-  <xs:element name="PersistableObject" nillable="true" type="tns:PersistableObject" />
-</xs:schema>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveFacade/HeuristicLab.DataAccess1.xsd
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveFacade/HeuristicLab.DataAccess1.xsd	(revision 4423)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveFacade/HeuristicLab.DataAccess1.xsd	(revision 4423)
@@ -0,0 +1,10 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:ser="http://schemas.microsoft.com/2003/10/Serialization/" 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:import namespace="http://schemas.microsoft.com/2003/10/Serialization/" />
+  <xs:complexType name="PersistableObject">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="Id" type="ser:guid" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="PersistableObject" nillable="true" type="tns:PersistableObject" />
+</xs:schema>
Index: anches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveFacade/HeuristicLab.Hive.Contracts.BusinessObjects.xsd
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveFacade/HeuristicLab.Hive.Contracts.BusinessObjects.xsd	(revision 4422)
+++ 	(revision )
@@ -1,206 +1,0 @@
-﻿<?xml version="1.0" encoding="utf-8"?>
-<xs:schema xmlns:ser="http://schemas.microsoft.com/2003/10/Serialization/" xmlns:tns="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.BusinessObjects" 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.datacontract.org/2004/07/HeuristicLab.DataAccess" />
-  <xs:import namespace="http://schemas.microsoft.com/2003/10/Serialization/Arrays" />
-  <xs:import namespace="http://schemas.microsoft.com/2003/10/Serialization/" />
-  <xs:import namespace="http://schemas.datacontract.org/2004/07/System" />
-  <xs:complexType name="SlaveDto">
-    <xs:complexContent mixed="false">
-      <xs:extension base="tns:ResourceDto">
-        <xs:sequence>
-          <xs:element minOccurs="0" name="CalendarSyncStatus" type="tns:CalendarState" />
-          <xs:element minOccurs="0" name="Config" nillable="true" type="tns:SlaveConfigDto" />
-          <xs:element minOccurs="0" name="CpuSpeedPerCore" nillable="true" type="xs:int" />
-          <xs:element minOccurs="0" name="FreeMemory" type="xs:int" />
-          <xs:element minOccurs="0" name="IsAllowedToCalculate" type="xs:boolean" />
-          <xs:element minOccurs="0" name="Login" nillable="true" type="xs:dateTime" />
-          <xs:element minOccurs="0" name="Memory" type="xs:int" />
-          <xs:element minOccurs="0" name="NrOfCores" type="xs:int" />
-          <xs:element minOccurs="0" name="NrOfFreeCores" type="xs:int" />
-          <xs:element minOccurs="0" name="State" type="tns:SlaveState" />
-        </xs:sequence>
-      </xs:extension>
-    </xs:complexContent>
-  </xs:complexType>
-  <xs:element name="SlaveDto" nillable="true" type="tns:SlaveDto" />
-  <xs:complexType name="ResourceDto">
-    <xs:complexContent mixed="false">
-      <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" />
-        </xs:sequence>
-      </xs:extension>
-    </xs:complexContent>
-  </xs:complexType>
-  <xs:element name="ResourceDto" nillable="true" type="tns:ResourceDto" />
-  <xs:simpleType name="CalendarState">
-    <xs:restriction base="xs:string">
-      <xs:enumeration value="Fetch" />
-      <xs:enumeration value="ForceFetch" />
-      <xs:enumeration value="Fetching" />
-      <xs:enumeration value="Fetched" />
-      <xs:enumeration value="NotAllowedToFetch" />
-    </xs:restriction>
-  </xs:simpleType>
-  <xs:element name="CalendarState" nillable="true" type="tns:CalendarState" />
-  <xs:complexType name="SlaveConfigDto">
-    <xs:complexContent mixed="false">
-      <xs:extension xmlns:q2="http://schemas.datacontract.org/2004/07/HeuristicLab.DataAccess" base="q2:PersistableObject">
-        <xs:sequence>
-          <xs:element minOccurs="0" name="HeartBeatIntervall" nillable="true" type="xs:int" />
-          <xs:element minOccurs="0" name="UpDownTimeCalendar" nillable="true" type="xs:string" />
-        </xs:sequence>
-      </xs:extension>
-    </xs:complexContent>
-  </xs:complexType>
-  <xs:element name="SlaveConfigDto" nillable="true" type="tns:SlaveConfigDto" />
-  <xs:simpleType name="SlaveState">
-    <xs:restriction base="xs:string">
-      <xs:enumeration value="NullState" />
-      <xs:enumeration value="Idle" />
-      <xs:enumeration value="Calculating" />
-      <xs:enumeration value="Offline" />
-    </xs:restriction>
-  </xs:simpleType>
-  <xs:element name="SlaveState" nillable="true" type="tns:SlaveState" />
-  <xs:complexType name="HeartBeatData">
-    <xs:sequence>
-      <xs:element minOccurs="0" name="FreeCores" type="xs:int" />
-      <xs:element minOccurs="0" name="FreeMemory" type="xs:int" />
-      <xs:element minOccurs="0" name="IsAllowedToCalculate" type="xs:boolean" />
-      <xs:element xmlns:q3="http://schemas.microsoft.com/2003/10/Serialization/Arrays" minOccurs="0" name="JobProgress" nillable="true" type="q3:ArrayOfKeyValueOfguiddouble" />
-      <xs:element minOccurs="0" name="SlaveId" type="ser:guid" />
-    </xs:sequence>
-  </xs:complexType>
-  <xs:element name="HeartBeatData" nillable="true" type="tns:HeartBeatData" />
-  <xs:complexType name="JobDto">
-    <xs:complexContent mixed="false">
-      <xs:extension xmlns:q4="http://schemas.datacontract.org/2004/07/HeuristicLab.DataAccess" base="q4:PersistableObject">
-        <xs:sequence>
-          <xs:element xmlns:q5="http://schemas.microsoft.com/2003/10/Serialization/Arrays" minOccurs="0" name="AssignedResourceIds" nillable="true" type="q5:ArrayOfguid" />
-          <xs:element minOccurs="0" name="CoresNeeded" type="xs:int" />
-          <xs:element minOccurs="0" name="DateCalculated" nillable="true" type="xs:dateTime" />
-          <xs:element minOccurs="0" name="DateCreated" nillable="true" type="xs:dateTime" />
-          <xs:element minOccurs="0" name="DateFinished" nillable="true" type="xs:dateTime" />
-          <xs:element minOccurs="0" name="Exception" nillable="true" type="xs:string" />
-          <xs:element minOccurs="0" name="MemoryNeeded" type="xs:int" />
-          <xs:element minOccurs="0" name="ParentJob" nillable="true" type="tns:JobDto" />
-          <xs:element minOccurs="0" name="Percentage" nillable="true" type="xs:double" />
-          <xs:element minOccurs="0" name="PluginsNeeded" nillable="true" type="tns:ArrayOfHivePluginInfoDto" />
-          <xs:element minOccurs="0" name="Priority" type="xs:int" />
-          <xs:element minOccurs="0" name="Project" nillable="true" type="tns:ProjectDto" />
-          <xs:element minOccurs="0" name="Slave" nillable="true" type="tns:SlaveDto" />
-          <xs:element minOccurs="0" name="State" type="tns:JobState" />
-          <xs:element minOccurs="0" name="UserId" nillable="true" type="ser:guid" />
-        </xs:sequence>
-      </xs:extension>
-    </xs:complexContent>
-  </xs:complexType>
-  <xs:element name="JobDto" nillable="true" type="tns:JobDto" />
-  <xs:complexType name="ArrayOfHivePluginInfoDto">
-    <xs:sequence>
-      <xs:element minOccurs="0" maxOccurs="unbounded" name="HivePluginInfoDto" nillable="true" type="tns:HivePluginInfoDto" />
-    </xs:sequence>
-  </xs:complexType>
-  <xs:element name="ArrayOfHivePluginInfoDto" nillable="true" type="tns:ArrayOfHivePluginInfoDto" />
-  <xs:complexType name="HivePluginInfoDto">
-    <xs:complexContent mixed="false">
-      <xs:extension xmlns:q6="http://schemas.datacontract.org/2004/07/HeuristicLab.DataAccess" base="q6:PersistableObject">
-        <xs:sequence>
-          <xs:element minOccurs="0" name="Name" nillable="true" type="xs:string" />
-          <xs:element minOccurs="0" name="Update" type="xs:boolean" />
-          <xs:element xmlns:q7="http://schemas.datacontract.org/2004/07/System" minOccurs="0" name="Version" nillable="true" type="q7:Version" />
-        </xs:sequence>
-      </xs:extension>
-    </xs:complexContent>
-  </xs:complexType>
-  <xs:element name="HivePluginInfoDto" nillable="true" type="tns:HivePluginInfoDto" />
-  <xs:complexType name="ProjectDto">
-    <xs:complexContent mixed="false">
-      <xs:extension xmlns:q8="http://schemas.datacontract.org/2004/07/HeuristicLab.DataAccess" base="q8:PersistableObject">
-        <xs:sequence>
-          <xs:element minOccurs="0" name="Name" nillable="true" type="xs:string" />
-        </xs:sequence>
-      </xs:extension>
-    </xs:complexContent>
-  </xs:complexType>
-  <xs:element name="ProjectDto" nillable="true" type="tns:ProjectDto" />
-  <xs:simpleType name="JobState">
-    <xs:restriction base="xs:string">
-      <xs:enumeration value="Calculating" />
-      <xs:enumeration value="Offline" />
-      <xs:enumeration value="Finished" />
-      <xs:enumeration value="Aborted" />
-      <xs:enumeration value="SnapshotRequested" />
-      <xs:enumeration value="SnapshotSent" />
-      <xs:enumeration value="Pending" />
-      <xs:enumeration value="Failed" />
-      <xs:enumeration value="WaitForChildJobs" />
-    </xs:restriction>
-  </xs:simpleType>
-  <xs:element name="JobState" nillable="true" type="tns:JobState" />
-  <xs:complexType name="ArrayOfHivePluginFile">
-    <xs:sequence>
-      <xs:element minOccurs="0" maxOccurs="unbounded" name="HivePluginFile" nillable="true" type="tns:HivePluginFile" />
-    </xs:sequence>
-  </xs:complexType>
-  <xs:element name="ArrayOfHivePluginFile" nillable="true" type="tns:ArrayOfHivePluginFile" />
-  <xs:complexType name="HivePluginFile">
-    <xs:sequence>
-      <xs:element minOccurs="0" name="BinaryFile" nillable="true" type="xs:base64Binary" />
-      <xs:element minOccurs="0" name="Name" nillable="true" type="xs:string" />
-    </xs:sequence>
-  </xs:complexType>
-  <xs:element name="HivePluginFile" nillable="true" type="tns:HivePluginFile" />
-  <xs:complexType name="ArrayOfAppointmentDto">
-    <xs:sequence>
-      <xs:element minOccurs="0" maxOccurs="unbounded" name="AppointmentDto" nillable="true" type="tns:AppointmentDto" />
-    </xs:sequence>
-  </xs:complexType>
-  <xs:element name="ArrayOfAppointmentDto" nillable="true" type="tns:ArrayOfAppointmentDto" />
-  <xs:complexType name="AppointmentDto">
-    <xs:complexContent mixed="false">
-      <xs:extension xmlns:q9="http://schemas.datacontract.org/2004/07/HeuristicLab.DataAccess" base="q9:PersistableObject">
-        <xs:sequence>
-          <xs:element minOccurs="0" name="AllDayEvent" type="xs:boolean" />
-          <xs:element minOccurs="0" name="EndDate" type="xs:dateTime" />
-          <xs:element minOccurs="0" name="Recurring" type="xs:boolean" />
-          <xs:element minOccurs="0" name="RecurringId" type="ser:guid" />
-          <xs:element minOccurs="0" name="ResourceId" type="ser:guid" />
-          <xs:element minOccurs="0" name="StartDate" type="xs:dateTime" />
-        </xs:sequence>
-      </xs:extension>
-    </xs:complexContent>
-  </xs:complexType>
-  <xs:element name="AppointmentDto" nillable="true" type="tns:AppointmentDto" />
-  <xs:complexType name="SerializedJob">
-    <xs:sequence>
-      <xs:element minOccurs="0" name="JobInfo" nillable="true" type="tns:JobDto" />
-      <xs:element minOccurs="0" name="SerializedJobData" nillable="true" type="xs:base64Binary" />
-    </xs:sequence>
-  </xs:complexType>
-  <xs:element name="SerializedJob" nillable="true" type="tns:SerializedJob" />
-  <xs:complexType name="ArrayOfJobResult">
-    <xs:sequence>
-      <xs:element minOccurs="0" maxOccurs="unbounded" name="JobResult" nillable="true" type="tns:JobResult" />
-    </xs:sequence>
-  </xs:complexType>
-  <xs:element name="ArrayOfJobResult" nillable="true" type="tns:ArrayOfJobResult" />
-  <xs:complexType name="JobResult">
-    <xs:complexContent mixed="false">
-      <xs:extension xmlns:q10="http://schemas.datacontract.org/2004/07/HeuristicLab.DataAccess" base="q10:PersistableObject">
-        <xs:sequence>
-          <xs:element minOccurs="0" name="DateCalculated" nillable="true" type="xs:dateTime" />
-          <xs:element minOccurs="0" name="DateCreated" nillable="true" type="xs:dateTime" />
-          <xs:element minOccurs="0" name="DateFinished" nillable="true" type="xs:dateTime" />
-          <xs:element minOccurs="0" name="Exception" nillable="true" type="xs:string" />
-          <xs:element minOccurs="0" name="ParentJobId" nillable="true" type="ser:guid" />
-          <xs:element minOccurs="0" name="Percentage" nillable="true" type="xs:double" />
-          <xs:element minOccurs="0" name="SlaveId" type="ser:guid" />
-          <xs:element minOccurs="0" name="State" type="tns:JobState" />
-        </xs:sequence>
-      </xs:extension>
-    </xs:complexContent>
-  </xs:complexType>
-  <xs:element name="JobResult" nillable="true" type="tns:JobResult" />
-</xs:schema>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveFacade/HeuristicLab.Hive.Contracts.BusinessObjects1.xsd
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveFacade/HeuristicLab.Hive.Contracts.BusinessObjects1.xsd	(revision 4423)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveFacade/HeuristicLab.Hive.Contracts.BusinessObjects1.xsd	(revision 4423)
@@ -0,0 +1,206 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:ser="http://schemas.microsoft.com/2003/10/Serialization/" xmlns:tns="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.BusinessObjects" 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.datacontract.org/2004/07/HeuristicLab.DataAccess" />
+  <xs:import namespace="http://schemas.microsoft.com/2003/10/Serialization/Arrays" />
+  <xs:import namespace="http://schemas.microsoft.com/2003/10/Serialization/" />
+  <xs:import namespace="http://schemas.datacontract.org/2004/07/System" />
+  <xs:complexType name="SlaveDto">
+    <xs:complexContent mixed="false">
+      <xs:extension base="tns:ResourceDto">
+        <xs:sequence>
+          <xs:element minOccurs="0" name="CalendarSyncStatus" type="tns:CalendarState" />
+          <xs:element minOccurs="0" name="Config" nillable="true" type="tns:SlaveConfigDto" />
+          <xs:element minOccurs="0" name="CpuSpeedPerCore" nillable="true" type="xs:int" />
+          <xs:element minOccurs="0" name="FreeMemory" nillable="true" type="xs:int" />
+          <xs:element minOccurs="0" name="IsAllowedToCalculate" type="xs:boolean" />
+          <xs:element minOccurs="0" name="Login" nillable="true" type="xs:dateTime" />
+          <xs:element minOccurs="0" name="Memory" nillable="true" type="xs:int" />
+          <xs:element minOccurs="0" name="NrOfCores" nillable="true" type="xs:int" />
+          <xs:element minOccurs="0" name="NrOfFreeCores" nillable="true" type="xs:int" />
+          <xs:element minOccurs="0" name="State" type="tns:SlaveState" />
+        </xs:sequence>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:element name="SlaveDto" nillable="true" type="tns:SlaveDto" />
+  <xs:complexType name="ResourceDto">
+    <xs:complexContent mixed="false">
+      <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" />
+        </xs:sequence>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:element name="ResourceDto" nillable="true" type="tns:ResourceDto" />
+  <xs:simpleType name="CalendarState">
+    <xs:restriction base="xs:string">
+      <xs:enumeration value="Fetch" />
+      <xs:enumeration value="ForceFetch" />
+      <xs:enumeration value="Fetching" />
+      <xs:enumeration value="Fetched" />
+      <xs:enumeration value="NotAllowedToFetch" />
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:element name="CalendarState" nillable="true" type="tns:CalendarState" />
+  <xs:complexType name="SlaveConfigDto">
+    <xs:complexContent mixed="false">
+      <xs:extension xmlns:q2="http://schemas.datacontract.org/2004/07/HeuristicLab.DataAccess" base="q2:PersistableObject">
+        <xs:sequence>
+          <xs:element minOccurs="0" name="HeartBeatIntervall" nillable="true" type="xs:int" />
+          <xs:element minOccurs="0" name="UpDownTimeCalendar" nillable="true" type="xs:string" />
+        </xs:sequence>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:element name="SlaveConfigDto" nillable="true" type="tns:SlaveConfigDto" />
+  <xs:simpleType name="SlaveState">
+    <xs:restriction base="xs:string">
+      <xs:enumeration value="NullState" />
+      <xs:enumeration value="Idle" />
+      <xs:enumeration value="Calculating" />
+      <xs:enumeration value="Offline" />
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:element name="SlaveState" nillable="true" type="tns:SlaveState" />
+  <xs:complexType name="HeartBeatData">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="FreeCores" type="xs:int" />
+      <xs:element minOccurs="0" name="FreeMemory" type="xs:int" />
+      <xs:element minOccurs="0" name="IsAllowedToCalculate" type="xs:boolean" />
+      <xs:element xmlns:q3="http://schemas.microsoft.com/2003/10/Serialization/Arrays" minOccurs="0" name="JobProgress" nillable="true" type="q3:ArrayOfKeyValueOfguidduration" />
+      <xs:element minOccurs="0" name="SlaveId" type="ser:guid" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="HeartBeatData" nillable="true" type="tns:HeartBeatData" />
+  <xs:complexType name="JobDto">
+    <xs:complexContent mixed="false">
+      <xs:extension xmlns:q4="http://schemas.datacontract.org/2004/07/HeuristicLab.DataAccess" base="q4:PersistableObject">
+        <xs:sequence>
+          <xs:element xmlns:q5="http://schemas.microsoft.com/2003/10/Serialization/Arrays" minOccurs="0" name="AssignedResourceIds" nillable="true" type="q5:ArrayOfguid" />
+          <xs:element minOccurs="0" name="CoresNeeded" type="xs:int" />
+          <xs:element minOccurs="0" name="DateCalculated" nillable="true" type="xs:dateTime" />
+          <xs:element minOccurs="0" name="DateCreated" nillable="true" type="xs:dateTime" />
+          <xs:element minOccurs="0" name="DateFinished" nillable="true" type="xs:dateTime" />
+          <xs:element minOccurs="0" name="Exception" nillable="true" type="xs:string" />
+          <xs:element minOccurs="0" name="ExecutionTime" type="ser:duration" />
+          <xs:element minOccurs="0" name="MemoryNeeded" type="xs:int" />
+          <xs:element minOccurs="0" name="ParentJobId" nillable="true" type="ser:guid" />
+          <xs:element minOccurs="0" name="PluginsNeeded" nillable="true" type="tns:ArrayOfHivePluginInfoDto" />
+          <xs:element minOccurs="0" name="Priority" type="xs:int" />
+          <xs:element minOccurs="0" name="Project" nillable="true" type="tns:ProjectDto" />
+          <xs:element minOccurs="0" name="Slave" nillable="true" type="tns:SlaveDto" />
+          <xs:element minOccurs="0" name="State" type="tns:JobState" />
+          <xs:element minOccurs="0" name="UserId" type="ser:guid" />
+        </xs:sequence>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:element name="JobDto" nillable="true" type="tns:JobDto" />
+  <xs:complexType name="ArrayOfHivePluginInfoDto">
+    <xs:sequence>
+      <xs:element minOccurs="0" maxOccurs="unbounded" name="HivePluginInfoDto" nillable="true" type="tns:HivePluginInfoDto" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="ArrayOfHivePluginInfoDto" nillable="true" type="tns:ArrayOfHivePluginInfoDto" />
+  <xs:complexType name="HivePluginInfoDto">
+    <xs:complexContent mixed="false">
+      <xs:extension xmlns:q6="http://schemas.datacontract.org/2004/07/HeuristicLab.DataAccess" base="q6:PersistableObject">
+        <xs:sequence>
+          <xs:element minOccurs="0" name="Name" nillable="true" type="xs:string" />
+          <xs:element minOccurs="0" name="Update" type="xs:boolean" />
+          <xs:element xmlns:q7="http://schemas.datacontract.org/2004/07/System" minOccurs="0" name="Version" nillable="true" type="q7:Version" />
+        </xs:sequence>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:element name="HivePluginInfoDto" nillable="true" type="tns:HivePluginInfoDto" />
+  <xs:complexType name="ProjectDto">
+    <xs:complexContent mixed="false">
+      <xs:extension xmlns:q8="http://schemas.datacontract.org/2004/07/HeuristicLab.DataAccess" base="q8:PersistableObject">
+        <xs:sequence>
+          <xs:element minOccurs="0" name="Name" nillable="true" type="xs:string" />
+        </xs:sequence>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:element name="ProjectDto" nillable="true" type="tns:ProjectDto" />
+  <xs:simpleType name="JobState">
+    <xs:restriction base="xs:string">
+      <xs:enumeration value="Calculating" />
+      <xs:enumeration value="Offline" />
+      <xs:enumeration value="Finished" />
+      <xs:enumeration value="Aborted" />
+      <xs:enumeration value="SnapshotRequested" />
+      <xs:enumeration value="SnapshotSent" />
+      <xs:enumeration value="Pending" />
+      <xs:enumeration value="Failed" />
+      <xs:enumeration value="WaitForChildJobs" />
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:element name="JobState" nillable="true" type="tns:JobState" />
+  <xs:complexType name="ArrayOfHivePluginFile">
+    <xs:sequence>
+      <xs:element minOccurs="0" maxOccurs="unbounded" name="HivePluginFile" nillable="true" type="tns:HivePluginFile" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="ArrayOfHivePluginFile" nillable="true" type="tns:ArrayOfHivePluginFile" />
+  <xs:complexType name="HivePluginFile">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="BinaryFile" nillable="true" type="xs:base64Binary" />
+      <xs:element minOccurs="0" name="Name" nillable="true" type="xs:string" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="HivePluginFile" nillable="true" type="tns:HivePluginFile" />
+  <xs:complexType name="ArrayOfAppointmentDto">
+    <xs:sequence>
+      <xs:element minOccurs="0" maxOccurs="unbounded" name="AppointmentDto" nillable="true" type="tns:AppointmentDto" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="ArrayOfAppointmentDto" nillable="true" type="tns:ArrayOfAppointmentDto" />
+  <xs:complexType name="AppointmentDto">
+    <xs:complexContent mixed="false">
+      <xs:extension xmlns:q9="http://schemas.datacontract.org/2004/07/HeuristicLab.DataAccess" base="q9:PersistableObject">
+        <xs:sequence>
+          <xs:element minOccurs="0" name="AllDayEvent" type="xs:boolean" />
+          <xs:element minOccurs="0" name="EndDate" type="xs:dateTime" />
+          <xs:element minOccurs="0" name="Recurring" type="xs:boolean" />
+          <xs:element minOccurs="0" name="RecurringId" type="ser:guid" />
+          <xs:element minOccurs="0" name="ResourceId" type="ser:guid" />
+          <xs:element minOccurs="0" name="StartDate" type="xs:dateTime" />
+        </xs:sequence>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:element name="AppointmentDto" nillable="true" type="tns:AppointmentDto" />
+  <xs:complexType name="SerializedJob">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="JobInfo" nillable="true" type="tns:JobDto" />
+      <xs:element minOccurs="0" name="SerializedJobData" nillable="true" type="xs:base64Binary" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="SerializedJob" nillable="true" type="tns:SerializedJob" />
+  <xs:complexType name="ArrayOfJobResult">
+    <xs:sequence>
+      <xs:element minOccurs="0" maxOccurs="unbounded" name="JobResult" nillable="true" type="tns:JobResult" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="ArrayOfJobResult" nillable="true" type="tns:ArrayOfJobResult" />
+  <xs:complexType name="JobResult">
+    <xs:complexContent mixed="false">
+      <xs:extension xmlns:q10="http://schemas.datacontract.org/2004/07/HeuristicLab.DataAccess" base="q10:PersistableObject">
+        <xs:sequence>
+          <xs:element minOccurs="0" name="DateCalculated" nillable="true" type="xs:dateTime" />
+          <xs:element minOccurs="0" name="DateCreated" nillable="true" type="xs:dateTime" />
+          <xs:element minOccurs="0" name="DateFinished" nillable="true" type="xs:dateTime" />
+          <xs:element minOccurs="0" name="Exception" nillable="true" type="xs:string" />
+          <xs:element minOccurs="0" name="ExecutionTime" type="ser:duration" />
+          <xs:element minOccurs="0" name="ParentJobId" nillable="true" type="ser:guid" />
+          <xs:element minOccurs="0" name="SlaveId" type="ser:guid" />
+          <xs:element minOccurs="0" name="State" type="tns:JobState" />
+        </xs:sequence>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:element name="JobResult" nillable="true" type="tns:JobResult" />
+</xs:schema>
Index: anches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveFacade/HeuristicLab.Hive.Contracts.ResponseObjects.xsd
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveFacade/HeuristicLab.Hive.Contracts.ResponseObjects.xsd	(revision 4422)
+++ 	(revision )
@@ -1,79 +1,0 @@
-﻿<?xml version="1.0" encoding="utf-8"?>
-<xs:schema xmlns:ser="http://schemas.microsoft.com/2003/10/Serialization/" xmlns:tns="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.ResponseObjects" elementFormDefault="qualified" targetNamespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.ResponseObjects" xmlns:xs="http://www.w3.org/2001/XMLSchema">
-  <xs:import namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts" />
-  <xs:import namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.BusinessObjects" />
-  <xs:import namespace="http://schemas.microsoft.com/2003/10/Serialization/" />
-  <xs:import namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.PluginInfrastructure" />
-  <xs:complexType name="Response">
-    <xs:sequence>
-      <xs:element xmlns:q1="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts" minOccurs="0" name="StatusMessage" type="q1:ResponseStatus" />
-    </xs:sequence>
-  </xs:complexType>
-  <xs:element name="Response" nillable="true" type="tns:Response" />
-  <xs:complexType name="ResponseHeartBeat">
-    <xs:complexContent mixed="false">
-      <xs:extension base="tns:Response">
-        <xs:sequence>
-          <xs:element xmlns:q2="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts" minOccurs="0" name="ActionRequest" nillable="true" type="q2:ArrayOfMessageContainer" />
-        </xs:sequence>
-      </xs:extension>
-    </xs:complexContent>
-  </xs:complexType>
-  <xs:element name="ResponseHeartBeat" nillable="true" type="tns:ResponseHeartBeat" />
-  <xs:complexType name="ResponseObjectOfJobDtoZAa7YIsz">
-    <xs:annotation>
-      <xs:appinfo>
-        <GenericType Name="ResponseObjectOf{0}{#}" Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.ResponseObjects" xmlns="http://schemas.microsoft.com/2003/10/Serialization/">
-          <GenericParameter Name="JobDto" Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.BusinessObjects" />
-        </GenericType>
-      </xs:appinfo>
-    </xs:annotation>
-    <xs:complexContent mixed="false">
-      <xs:extension base="tns:Response">
-        <xs:sequence>
-          <xs:element xmlns:q3="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.BusinessObjects" minOccurs="0" name="Obj" nillable="true" type="q3:JobDto" />
-        </xs:sequence>
-      </xs:extension>
-    </xs:complexContent>
-  </xs:complexType>
-  <xs:element name="ResponseObjectOfJobDtoZAa7YIsz" nillable="true" type="tns:ResponseObjectOfJobDtoZAa7YIsz" />
-  <xs:complexType name="ResponseResultReceived">
-    <xs:complexContent mixed="false">
-      <xs:extension base="tns:Response">
-        <xs:sequence>
-          <xs:element minOccurs="0" name="Finished" type="xs:boolean" />
-          <xs:element minOccurs="0" name="JobId" type="ser:guid" />
-        </xs:sequence>
-      </xs:extension>
-    </xs:complexContent>
-  </xs:complexType>
-  <xs:element name="ResponseResultReceived" nillable="true" type="tns:ResponseResultReceived" />
-  <xs:complexType name="ResponseListOfCachedHivePluginInfoDtoZMwZop09">
-    <xs:annotation>
-      <xs:appinfo>
-        <GenericType Name="ResponseListOf{0}{#}" Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.ResponseObjects" xmlns="http://schemas.microsoft.com/2003/10/Serialization/">
-          <GenericParameter Name="CachedHivePluginInfoDto" Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.PluginInfrastructure" />
-        </GenericType>
-      </xs:appinfo>
-    </xs:annotation>
-    <xs:complexContent mixed="false">
-      <xs:extension base="tns:Response">
-        <xs:sequence>
-          <xs:element xmlns:q4="http://schemas.datacontract.org/2004/07/HeuristicLab.PluginInfrastructure" minOccurs="0" name="List" nillable="true" type="q4:ArrayOfCachedHivePluginInfoDto" />
-        </xs:sequence>
-      </xs:extension>
-    </xs:complexContent>
-  </xs:complexType>
-  <xs:element name="ResponseListOfCachedHivePluginInfoDtoZMwZop09" nillable="true" type="tns:ResponseListOfCachedHivePluginInfoDtoZMwZop09" />
-  <xs:complexType name="ResponseCalendar">
-    <xs:complexContent mixed="false">
-      <xs:extension base="tns:Response">
-        <xs:sequence>
-          <xs:element xmlns:q5="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.BusinessObjects" minOccurs="0" name="Appointments" nillable="true" type="q5:ArrayOfAppointmentDto" />
-          <xs:element minOccurs="0" name="ForceFetch" type="xs:boolean" />
-        </xs:sequence>
-      </xs:extension>
-    </xs:complexContent>
-  </xs:complexType>
-  <xs:element name="ResponseCalendar" nillable="true" type="tns:ResponseCalendar" />
-</xs:schema>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveFacade/HeuristicLab.Hive.Contracts.ResponseObjects1.xsd
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveFacade/HeuristicLab.Hive.Contracts.ResponseObjects1.xsd	(revision 4423)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveFacade/HeuristicLab.Hive.Contracts.ResponseObjects1.xsd	(revision 4423)
@@ -0,0 +1,79 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:ser="http://schemas.microsoft.com/2003/10/Serialization/" xmlns:tns="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.ResponseObjects" elementFormDefault="qualified" targetNamespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.ResponseObjects" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:import namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts" />
+  <xs:import namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.BusinessObjects" />
+  <xs:import namespace="http://schemas.microsoft.com/2003/10/Serialization/" />
+  <xs:import namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.PluginInfrastructure" />
+  <xs:complexType name="Response">
+    <xs:sequence>
+      <xs:element xmlns:q1="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts" minOccurs="0" name="StatusMessage" type="q1:ResponseStatus" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="Response" nillable="true" type="tns:Response" />
+  <xs:complexType name="ResponseHeartBeat">
+    <xs:complexContent mixed="false">
+      <xs:extension base="tns:Response">
+        <xs:sequence>
+          <xs:element xmlns:q2="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts" minOccurs="0" name="ActionRequest" nillable="true" type="q2:ArrayOfMessageContainer" />
+        </xs:sequence>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:element name="ResponseHeartBeat" nillable="true" type="tns:ResponseHeartBeat" />
+  <xs:complexType name="ResponseObjectOfJobDtoZAa7YIsz">
+    <xs:annotation>
+      <xs:appinfo>
+        <GenericType Name="ResponseObjectOf{0}{#}" Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.ResponseObjects" xmlns="http://schemas.microsoft.com/2003/10/Serialization/">
+          <GenericParameter Name="JobDto" Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.BusinessObjects" />
+        </GenericType>
+      </xs:appinfo>
+    </xs:annotation>
+    <xs:complexContent mixed="false">
+      <xs:extension base="tns:Response">
+        <xs:sequence>
+          <xs:element xmlns:q3="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.BusinessObjects" minOccurs="0" name="Obj" nillable="true" type="q3:JobDto" />
+        </xs:sequence>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:element name="ResponseObjectOfJobDtoZAa7YIsz" nillable="true" type="tns:ResponseObjectOfJobDtoZAa7YIsz" />
+  <xs:complexType name="ResponseResultReceived">
+    <xs:complexContent mixed="false">
+      <xs:extension base="tns:Response">
+        <xs:sequence>
+          <xs:element minOccurs="0" name="Finished" type="xs:boolean" />
+          <xs:element minOccurs="0" name="JobId" type="ser:guid" />
+        </xs:sequence>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:element name="ResponseResultReceived" nillable="true" type="tns:ResponseResultReceived" />
+  <xs:complexType name="ResponseListOfCachedHivePluginInfoDtoZMwZop09">
+    <xs:annotation>
+      <xs:appinfo>
+        <GenericType Name="ResponseListOf{0}{#}" Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.ResponseObjects" xmlns="http://schemas.microsoft.com/2003/10/Serialization/">
+          <GenericParameter Name="CachedHivePluginInfoDto" Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.PluginInfrastructure" />
+        </GenericType>
+      </xs:appinfo>
+    </xs:annotation>
+    <xs:complexContent mixed="false">
+      <xs:extension base="tns:Response">
+        <xs:sequence>
+          <xs:element xmlns:q4="http://schemas.datacontract.org/2004/07/HeuristicLab.PluginInfrastructure" minOccurs="0" name="List" nillable="true" type="q4:ArrayOfCachedHivePluginInfoDto" />
+        </xs:sequence>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:element name="ResponseListOfCachedHivePluginInfoDtoZMwZop09" nillable="true" type="tns:ResponseListOfCachedHivePluginInfoDtoZMwZop09" />
+  <xs:complexType name="ResponseCalendar">
+    <xs:complexContent mixed="false">
+      <xs:extension base="tns:Response">
+        <xs:sequence>
+          <xs:element xmlns:q5="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.BusinessObjects" minOccurs="0" name="Appointments" nillable="true" type="q5:ArrayOfAppointmentDto" />
+          <xs:element minOccurs="0" name="ForceFetch" type="xs:boolean" />
+        </xs:sequence>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:element name="ResponseCalendar" nillable="true" type="tns:ResponseCalendar" />
+</xs:schema>
Index: anches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveFacade/HeuristicLab.Hive.Contracts.xsd
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveFacade/HeuristicLab.Hive.Contracts.xsd	(revision 4422)
+++ 	(revision )
@@ -1,74 +1,0 @@
-﻿<?xml version="1.0" encoding="utf-8"?>
-<xs:schema xmlns:ser="http://schemas.microsoft.com/2003/10/Serialization/" xmlns:tns="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts" elementFormDefault="qualified" targetNamespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts" xmlns:xs="http://www.w3.org/2001/XMLSchema">
-  <xs:import namespace="http://schemas.microsoft.com/2003/10/Serialization/" />
-  <xs:simpleType name="ResponseStatus">
-    <xs:restriction base="xs:string">
-      <xs:enumeration value="Ok" />
-      <xs:enumeration value="RequestSnapshot_JobIsNotBeeingCalculated" />
-      <xs:enumeration value="RequestSnapshot_SnapshotAlreadyRequested" />
-      <xs:enumeration value="GetJobById_JobDoesNotExist" />
-      <xs:enumeration value="GetJobByIdWithDetails_JobDoesNotExist" />
-      <xs:enumeration value="AddNewJob_JobStateMustBeOffline" />
-      <xs:enumeration value="AddNewJob_JobIdMustNotBeSet" />
-      <xs:enumeration value="AddNewJob_JobNull" />
-      <xs:enumeration value="RemoveJob_JobDoesNotExist" />
-      <xs:enumeration value="GetSnapshotResult_JobResultNotYetThere" />
-      <xs:enumeration value="AbortJob_JobDoesNotExist" />
-      <xs:enumeration value="AbortJob_AbortAlreadyRequested" />
-      <xs:enumeration value="AbortJob_JobIsNotBeeingCalculated" />
-      <xs:enumeration value="GetCalendar_ResourceNotFound" />
-      <xs:enumeration value="GetCalendar_NoCalendarFound" />
-      <xs:enumeration value="SetCalendarStatus_ResourceNotFound" />
-      <xs:enumeration value="ProcessHeartBeat_UserNotLoggedIn" />
-      <xs:enumeration value="GetJob_NoJobsAvailable" />
-      <xs:enumeration value="ProcessJobResult_JobDoesNotExist" />
-      <xs:enumeration value="ProcessJobResult_JobAborted" />
-      <xs:enumeration value="ProcessJobResult_JobIsNotBeeingCalculated" />
-      <xs:enumeration value="ProcessJobResult_WrongSlaveForJob" />
-      <xs:enumeration value="ProcessJobResult_InvalidJobState" />
-      <xs:enumeration value="Login_LoginFaild" />
-      <xs:enumeration value="Logout_SlaveNotRegistered" />
-      <xs:enumeration value="IsJobStillNeeded_JobDoesNotExist" />
-      <xs:enumeration value="IsJobStillNeeded_JobAlreadyFinished" />
-      <xs:enumeration value="GetPlugins_PluginsNotAvailable" />
-      <xs:enumeration value="AddSlaveGroup_SlaveIdMustNotBeSet" />
-      <xs:enumeration value="AddResourceToGroup_SlaveGroupDoesNotExist" />
-      <xs:enumeration value="DeleteResourceFromGroup_SlaveGroupDoesNotExist" />
-      <xs:enumeration value="GetAllGroupsOfResource_ResourceNotFound" />
-      <xs:enumeration value="DeleteSlaveGroup_SlaveGroupDoesNotExist" />
-    </xs:restriction>
-  </xs:simpleType>
-  <xs:element name="ResponseStatus" nillable="true" type="tns:ResponseStatus" />
-  <xs:complexType name="ArrayOfMessageContainer">
-    <xs:sequence>
-      <xs:element minOccurs="0" maxOccurs="unbounded" name="MessageContainer" nillable="true" type="tns:MessageContainer" />
-    </xs:sequence>
-  </xs:complexType>
-  <xs:element name="ArrayOfMessageContainer" nillable="true" type="tns:ArrayOfMessageContainer" />
-  <xs:complexType name="MessageContainer">
-    <xs:sequence>
-      <xs:element name="_x003C_JobId_x003E_k__BackingField" type="ser:guid" />
-      <xs:element name="_x003C_Message_x003E_k__BackingField" type="tns:MessageContainer.MessageType" />
-    </xs:sequence>
-  </xs:complexType>
-  <xs:element name="MessageContainer" nillable="true" type="tns:MessageContainer" />
-  <xs:simpleType name="MessageContainer.MessageType">
-    <xs:restriction base="xs:string">
-      <xs:enumeration value="FetchJob" />
-      <xs:enumeration value="AbortJob" />
-      <xs:enumeration value="JobAborted" />
-      <xs:enumeration value="RequestSnapshot" />
-      <xs:enumeration value="FinishedJob" />
-      <xs:enumeration value="NoMessage" />
-      <xs:enumeration value="SnapshotReady" />
-      <xs:enumeration value="Shutdown" />
-      <xs:enumeration value="JobFailed" />
-      <xs:enumeration value="UptimeLimitDisconnect" />
-      <xs:enumeration value="FetchOrForceFetchCalendar" />
-      <xs:enumeration value="AddChildJob" />
-      <xs:enumeration value="PauseJob" />
-      <xs:enumeration value="GetChildJobs" />
-    </xs:restriction>
-  </xs:simpleType>
-  <xs:element name="MessageContainer.MessageType" nillable="true" type="tns:MessageContainer.MessageType" />
-</xs:schema>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveFacade/HeuristicLab.Hive.Contracts1.xsd
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveFacade/HeuristicLab.Hive.Contracts1.xsd	(revision 4423)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveFacade/HeuristicLab.Hive.Contracts1.xsd	(revision 4423)
@@ -0,0 +1,78 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:ser="http://schemas.microsoft.com/2003/10/Serialization/" xmlns:tns="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts" elementFormDefault="qualified" targetNamespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:import namespace="http://schemas.microsoft.com/2003/10/Serialization/" />
+  <xs:simpleType name="ResponseStatus">
+    <xs:restriction base="xs:string">
+      <xs:enumeration value="Ok" />
+      <xs:enumeration value="RequestSnapshot_JobIsNotBeeingCalculated" />
+      <xs:enumeration value="RequestSnapshot_SnapshotAlreadyRequested" />
+      <xs:enumeration value="GetJobById_JobDoesNotExist" />
+      <xs:enumeration value="GetJobByIdWithDetails_JobDoesNotExist" />
+      <xs:enumeration value="AddNewJob_InvalidJobState" />
+      <xs:enumeration value="AddNewJob_JobIdMustNotBeSet" />
+      <xs:enumeration value="AddNewJob_JobNull" />
+      <xs:enumeration value="RemoveJob_JobDoesNotExist" />
+      <xs:enumeration value="GetSnapshotResult_JobResultNotYetThere" />
+      <xs:enumeration value="AbortJob_JobDoesNotExist" />
+      <xs:enumeration value="AbortJob_AbortAlreadyRequested" />
+      <xs:enumeration value="AbortJob_JobIsNotBeeingCalculated" />
+      <xs:enumeration value="GetCalendar_ResourceDoesNotExist" />
+      <xs:enumeration value="GetCalendar_NoCalendarFound" />
+      <xs:enumeration value="SetCalendarStatus_ResourceDoesNotExist" />
+      <xs:enumeration value="ProcessHeartBeat_UserNotLoggedIn" />
+      <xs:enumeration value="GetJob_NoJobsAvailable" />
+      <xs:enumeration value="ProcessJobResult_JobDoesNotExist" />
+      <xs:enumeration value="ProcessJobResult_JobAborted" />
+      <xs:enumeration value="ProcessJobResult_JobIsNotBeeingCalculated" />
+      <xs:enumeration value="ProcessJobResult_WrongSlaveForJob" />
+      <xs:enumeration value="ProcessJobResult_InvalidJobState" />
+      <xs:enumeration value="Login_LoginFaild" />
+      <xs:enumeration value="Logout_SlaveNotRegistered" />
+      <xs:enumeration value="IsJobStillNeeded_JobDoesNotExist" />
+      <xs:enumeration value="IsJobStillNeeded_JobAlreadyFinished" />
+      <xs:enumeration value="GetPlugins_PluginsNotAvailable" />
+      <xs:enumeration value="AddSlaveGroup_SlaveIdMustNotBeSet" />
+      <xs:enumeration value="AddResourceToGroup_SlaveGroupDoesNotExist" />
+      <xs:enumeration value="DeleteResourceFromGroup_SlaveGroupDoesNotExist" />
+      <xs:enumeration value="GetAllGroupsOfResource_ResourceDoesNotExist" />
+      <xs:enumeration value="DeleteSlaveGroup_SlaveGroupDoesNotExist" />
+      <xs:enumeration value="GetLastSerializedResult_JobDoesNotExist" />
+      <xs:enumeration value="DeleteHiveExperiment_Failed" />
+      <xs:enumeration value="DeleteChildJobs_Failed" />
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:element name="ResponseStatus" nillable="true" type="tns:ResponseStatus" />
+  <xs:complexType name="ArrayOfMessageContainer">
+    <xs:sequence>
+      <xs:element minOccurs="0" maxOccurs="unbounded" name="MessageContainer" nillable="true" type="tns:MessageContainer" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="ArrayOfMessageContainer" nillable="true" type="tns:ArrayOfMessageContainer" />
+  <xs:complexType name="MessageContainer">
+    <xs:sequence>
+      <xs:element name="_x003C_JobId_x003E_k__BackingField" type="ser:guid" />
+      <xs:element name="_x003C_Message_x003E_k__BackingField" type="tns:MessageContainer.MessageType" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="MessageContainer" nillable="true" type="tns:MessageContainer" />
+  <xs:simpleType name="MessageContainer.MessageType">
+    <xs:restriction base="xs:string">
+      <xs:enumeration value="FetchJob" />
+      <xs:enumeration value="AbortJob" />
+      <xs:enumeration value="JobAborted" />
+      <xs:enumeration value="RequestSnapshot" />
+      <xs:enumeration value="FinishedJob" />
+      <xs:enumeration value="NoMessage" />
+      <xs:enumeration value="SnapshotReady" />
+      <xs:enumeration value="Shutdown" />
+      <xs:enumeration value="JobFailed" />
+      <xs:enumeration value="UptimeLimitDisconnect" />
+      <xs:enumeration value="FetchOrForceFetchCalendar" />
+      <xs:enumeration value="AddChildJob" />
+      <xs:enumeration value="PauseJob" />
+      <xs:enumeration value="GetChildJobs" />
+      <xs:enumeration value="DeleteChildJobs" />
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:element name="MessageContainer.MessageType" nillable="true" type="tns:MessageContainer.MessageType" />
+</xs:schema>
Index: anches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveFacade/HeuristicLab.PluginInfrastructure.xsd
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveFacade/HeuristicLab.PluginInfrastructure.xsd	(revision 4422)
+++ 	(revision )
@@ -1,20 +1,0 @@
-﻿<?xml version="1.0" encoding="utf-8"?>
-<xs:schema xmlns:tns="http://schemas.datacontract.org/2004/07/HeuristicLab.PluginInfrastructure" elementFormDefault="qualified" targetNamespace="http://schemas.datacontract.org/2004/07/HeuristicLab.PluginInfrastructure" xmlns:xs="http://www.w3.org/2001/XMLSchema">
-  <xs:import namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.BusinessObjects" />
-  <xs:complexType name="ArrayOfCachedHivePluginInfoDto">
-    <xs:sequence>
-      <xs:element minOccurs="0" maxOccurs="unbounded" name="CachedHivePluginInfoDto" nillable="true" type="tns:CachedHivePluginInfoDto" />
-    </xs:sequence>
-  </xs:complexType>
-  <xs:element name="ArrayOfCachedHivePluginInfoDto" nillable="true" type="tns:ArrayOfCachedHivePluginInfoDto" />
-  <xs:complexType name="CachedHivePluginInfoDto">
-    <xs:complexContent mixed="false">
-      <xs:extension xmlns:q1="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.BusinessObjects" base="q1:HivePluginInfoDto">
-        <xs:sequence>
-          <xs:element minOccurs="0" name="PluginFiles" nillable="true" type="q1:ArrayOfHivePluginFile" />
-        </xs:sequence>
-      </xs:extension>
-    </xs:complexContent>
-  </xs:complexType>
-  <xs:element name="CachedHivePluginInfoDto" nillable="true" type="tns:CachedHivePluginInfoDto" />
-</xs:schema>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveFacade/HeuristicLab.PluginInfrastructure1.xsd
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveFacade/HeuristicLab.PluginInfrastructure1.xsd	(revision 4423)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveFacade/HeuristicLab.PluginInfrastructure1.xsd	(revision 4423)
@@ -0,0 +1,20 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:tns="http://schemas.datacontract.org/2004/07/HeuristicLab.PluginInfrastructure" elementFormDefault="qualified" targetNamespace="http://schemas.datacontract.org/2004/07/HeuristicLab.PluginInfrastructure" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:import namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.BusinessObjects" />
+  <xs:complexType name="ArrayOfCachedHivePluginInfoDto">
+    <xs:sequence>
+      <xs:element minOccurs="0" maxOccurs="unbounded" name="CachedHivePluginInfoDto" nillable="true" type="tns:CachedHivePluginInfoDto" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="ArrayOfCachedHivePluginInfoDto" nillable="true" type="tns:ArrayOfCachedHivePluginInfoDto" />
+  <xs:complexType name="CachedHivePluginInfoDto">
+    <xs:complexContent mixed="false">
+      <xs:extension xmlns:q1="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.BusinessObjects" base="q1:HivePluginInfoDto">
+        <xs:sequence>
+          <xs:element minOccurs="0" name="PluginFiles" nillable="true" type="q1:ArrayOfHivePluginFile" />
+        </xs:sequence>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:element name="CachedHivePluginInfoDto" nillable="true" type="tns:CachedHivePluginInfoDto" />
+</xs:schema>
Index: anches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveFacade/Message.xsd
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveFacade/Message.xsd	(revision 4422)
+++ 	(revision )
@@ -1,6 +1,0 @@
-﻿<?xml version="1.0" encoding="utf-8"?>
-<xs:schema xmlns:tns="http://schemas.microsoft.com/Message" elementFormDefault="qualified" targetNamespace="http://schemas.microsoft.com/Message" xmlns:xs="http://www.w3.org/2001/XMLSchema">
-  <xs:simpleType name="StreamBody">
-    <xs:restriction base="xs:base64Binary" />
-  </xs:simpleType>
-</xs:schema>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveFacade/Message1.xsd
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveFacade/Message1.xsd	(revision 4423)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveFacade/Message1.xsd	(revision 4423)
@@ -0,0 +1,6 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:tns="http://schemas.microsoft.com/Message" elementFormDefault="qualified" targetNamespace="http://schemas.microsoft.com/Message" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:simpleType name="StreamBody">
+    <xs:restriction base="xs:base64Binary" />
+  </xs:simpleType>
+</xs:schema>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveFacade/Reference.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveFacade/Reference.cs	(revision 4422)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveFacade/Reference.cs	(revision 4423)
@@ -46,16 +46,16 @@
         
         [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/ISlaveCommunicator/StoreFinishedJobResult", ReplyAction="http://tempuri.org/ISlaveCommunicator/StoreFinishedJobResultResponse")]
-        HeuristicLab.Hive.Contracts.ResponseObjects.ResponseResultReceived StoreFinishedJobResult(System.Guid clientId, System.Guid jobId, byte[] result, double percentage, string exception);
+        HeuristicLab.Hive.Contracts.ResponseObjects.ResponseResultReceived StoreFinishedJobResult(System.Guid clientId, System.Guid jobId, byte[] result, System.TimeSpan executionTime, string exception);
         
         [System.ServiceModel.OperationContractAttribute(AsyncPattern=true, Action="http://tempuri.org/ISlaveCommunicator/StoreFinishedJobResult", ReplyAction="http://tempuri.org/ISlaveCommunicator/StoreFinishedJobResultResponse")]
-        System.IAsyncResult BeginStoreFinishedJobResult(System.Guid clientId, System.Guid jobId, byte[] result, double percentage, string exception, System.AsyncCallback callback, object asyncState);
+        System.IAsyncResult BeginStoreFinishedJobResult(System.Guid clientId, System.Guid jobId, byte[] result, System.TimeSpan executionTime, string exception, System.AsyncCallback callback, object asyncState);
         
         HeuristicLab.Hive.Contracts.ResponseObjects.ResponseResultReceived EndStoreFinishedJobResult(System.IAsyncResult result);
         
         [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/ISlaveCommunicator/ProcessSnapshot", ReplyAction="http://tempuri.org/ISlaveCommunicator/ProcessSnapshotResponse")]
-        HeuristicLab.Hive.Contracts.ResponseObjects.ResponseResultReceived ProcessSnapshot(System.Guid clientId, System.Guid jobId, byte[] result, double percentage, string exception);
+        HeuristicLab.Hive.Contracts.ResponseObjects.ResponseResultReceived ProcessSnapshot(System.Guid clientId, System.Guid jobId, byte[] result, System.TimeSpan executionTime, string exception);
         
         [System.ServiceModel.OperationContractAttribute(AsyncPattern=true, Action="http://tempuri.org/ISlaveCommunicator/ProcessSnapshot", ReplyAction="http://tempuri.org/ISlaveCommunicator/ProcessSnapshotResponse")]
-        System.IAsyncResult BeginProcessSnapshot(System.Guid clientId, System.Guid jobId, byte[] result, double percentage, string exception, System.AsyncCallback callback, object asyncState);
+        System.IAsyncResult BeginProcessSnapshot(System.Guid clientId, System.Guid jobId, byte[] result, System.TimeSpan executionTime, string exception, System.AsyncCallback callback, object asyncState);
         
         HeuristicLab.Hive.Contracts.ResponseObjects.ResponseResultReceived EndProcessSnapshot(System.IAsyncResult result);
@@ -179,4 +179,17 @@
         
         HeuristicLab.Hive.Contracts.BusinessObjects.SerializedJob EndGetLastSerializedResult(System.IAsyncResult result);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/ISlaveFacade/DeleteChildJobs", ReplyAction="http://tempuri.org/ISlaveFacade/DeleteChildJobsResponse")]
+        [System.ServiceModel.ServiceKnownTypeAttribute(typeof(HeuristicLab.Hive.Contracts.ResponseObjects.ResponseHeartBeat))]
+        [System.ServiceModel.ServiceKnownTypeAttribute(typeof(HeuristicLab.Hive.Contracts.ResponseObjects.ResponseObject<HeuristicLab.Hive.Contracts.BusinessObjects.JobDto>))]
+        [System.ServiceModel.ServiceKnownTypeAttribute(typeof(HeuristicLab.Hive.Contracts.ResponseObjects.ResponseResultReceived))]
+        [System.ServiceModel.ServiceKnownTypeAttribute(typeof(HeuristicLab.Hive.Contracts.ResponseObjects.ResponseList<HeuristicLab.PluginInfrastructure.CachedHivePluginInfoDto>))]
+        [System.ServiceModel.ServiceKnownTypeAttribute(typeof(HeuristicLab.Hive.Contracts.ResponseObjects.ResponseCalendar))]
+        HeuristicLab.Hive.Contracts.ResponseObjects.Response DeleteChildJobs(System.Guid jobId);
+        
+        [System.ServiceModel.OperationContractAttribute(AsyncPattern=true, Action="http://tempuri.org/ISlaveFacade/DeleteChildJobs", ReplyAction="http://tempuri.org/ISlaveFacade/DeleteChildJobsResponse")]
+        System.IAsyncResult BeginDeleteChildJobs(System.Guid jobId, System.AsyncCallback callback, object asyncState);
+        
+        HeuristicLab.Hive.Contracts.ResponseObjects.Response EndDeleteChildJobs(System.IAsyncResult result);
     }
     
@@ -529,4 +542,23 @@
     [System.Diagnostics.DebuggerStepThroughAttribute()]
     [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+    public partial class DeleteChildJobsCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
+        
+        private object[] results;
+        
+        public DeleteChildJobsCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : 
+                base(exception, cancelled, userState) {
+            this.results = results;
+        }
+        
+        public HeuristicLab.Hive.Contracts.ResponseObjects.Response Result {
+            get {
+                base.RaiseExceptionIfNecessary();
+                return ((HeuristicLab.Hive.Contracts.ResponseObjects.Response)(this.results[0]));
+            }
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
     public partial class SlaveFacadeClient : System.ServiceModel.ClientBase<HeuristicLab.Hive.Slave.Communication.SlaveFacade.ISlaveFacade>, HeuristicLab.Hive.Slave.Communication.SlaveFacade.ISlaveFacade {
         
@@ -638,4 +670,10 @@
         
         private System.Threading.SendOrPostCallback onGetLastSerializedResultCompletedDelegate;
+        
+        private BeginOperationDelegate onBeginDeleteChildJobsDelegate;
+        
+        private EndOperationDelegate onEndDeleteChildJobsDelegate;
+        
+        private System.Threading.SendOrPostCallback onDeleteChildJobsCompletedDelegate;
         
         public SlaveFacadeClient() {
@@ -693,4 +731,6 @@
         
         public event System.EventHandler<GetLastSerializedResultCompletedEventArgs> GetLastSerializedResultCompleted;
+        
+        public event System.EventHandler<DeleteChildJobsCompletedEventArgs> DeleteChildJobsCompleted;
         
         public HeuristicLab.Hive.Contracts.ResponseObjects.Response Login(HeuristicLab.Hive.Contracts.BusinessObjects.SlaveDto slave) {
@@ -844,11 +884,11 @@
         }
         
-        public HeuristicLab.Hive.Contracts.ResponseObjects.ResponseResultReceived StoreFinishedJobResult(System.Guid clientId, System.Guid jobId, byte[] result, double percentage, string exception) {
-            return base.Channel.StoreFinishedJobResult(clientId, jobId, result, percentage, exception);
-        }
-        
-        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
-        public System.IAsyncResult BeginStoreFinishedJobResult(System.Guid clientId, System.Guid jobId, byte[] result, double percentage, string exception, System.AsyncCallback callback, object asyncState) {
-            return base.Channel.BeginStoreFinishedJobResult(clientId, jobId, result, percentage, exception, callback, asyncState);
+        public HeuristicLab.Hive.Contracts.ResponseObjects.ResponseResultReceived StoreFinishedJobResult(System.Guid clientId, System.Guid jobId, byte[] result, System.TimeSpan executionTime, string exception) {
+            return base.Channel.StoreFinishedJobResult(clientId, jobId, result, executionTime, exception);
+        }
+        
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+        public System.IAsyncResult BeginStoreFinishedJobResult(System.Guid clientId, System.Guid jobId, byte[] result, System.TimeSpan executionTime, string exception, System.AsyncCallback callback, object asyncState) {
+            return base.Channel.BeginStoreFinishedJobResult(clientId, jobId, result, executionTime, exception, callback, asyncState);
         }
         
@@ -862,7 +902,7 @@
             System.Guid jobId = ((System.Guid)(inValues[1]));
             byte[] result = ((byte[])(inValues[2]));
-            double percentage = ((double)(inValues[3]));
+            System.TimeSpan executionTime = ((System.TimeSpan)(inValues[3]));
             string exception = ((string)(inValues[4]));
-            return this.BeginStoreFinishedJobResult(clientId, jobId, result, percentage, exception, callback, asyncState);
+            return this.BeginStoreFinishedJobResult(clientId, jobId, result, executionTime, exception, callback, asyncState);
         }
         
@@ -880,9 +920,9 @@
         }
         
-        public void StoreFinishedJobResultAsync(System.Guid clientId, System.Guid jobId, byte[] result, double percentage, string exception) {
-            this.StoreFinishedJobResultAsync(clientId, jobId, result, percentage, exception, null);
-        }
-        
-        public void StoreFinishedJobResultAsync(System.Guid clientId, System.Guid jobId, byte[] result, double percentage, string exception, object userState) {
+        public void StoreFinishedJobResultAsync(System.Guid clientId, System.Guid jobId, byte[] result, System.TimeSpan executionTime, string exception) {
+            this.StoreFinishedJobResultAsync(clientId, jobId, result, executionTime, exception, null);
+        }
+        
+        public void StoreFinishedJobResultAsync(System.Guid clientId, System.Guid jobId, byte[] result, System.TimeSpan executionTime, string exception, object userState) {
             if ((this.onBeginStoreFinishedJobResultDelegate == null)) {
                 this.onBeginStoreFinishedJobResultDelegate = new BeginOperationDelegate(this.OnBeginStoreFinishedJobResult);
@@ -898,15 +938,15 @@
                         jobId,
                         result,
-                        percentage,
+                        executionTime,
                         exception}, this.onEndStoreFinishedJobResultDelegate, this.onStoreFinishedJobResultCompletedDelegate, userState);
         }
         
-        public HeuristicLab.Hive.Contracts.ResponseObjects.ResponseResultReceived ProcessSnapshot(System.Guid clientId, System.Guid jobId, byte[] result, double percentage, string exception) {
-            return base.Channel.ProcessSnapshot(clientId, jobId, result, percentage, exception);
-        }
-        
-        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
-        public System.IAsyncResult BeginProcessSnapshot(System.Guid clientId, System.Guid jobId, byte[] result, double percentage, string exception, System.AsyncCallback callback, object asyncState) {
-            return base.Channel.BeginProcessSnapshot(clientId, jobId, result, percentage, exception, callback, asyncState);
+        public HeuristicLab.Hive.Contracts.ResponseObjects.ResponseResultReceived ProcessSnapshot(System.Guid clientId, System.Guid jobId, byte[] result, System.TimeSpan executionTime, string exception) {
+            return base.Channel.ProcessSnapshot(clientId, jobId, result, executionTime, exception);
+        }
+        
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+        public System.IAsyncResult BeginProcessSnapshot(System.Guid clientId, System.Guid jobId, byte[] result, System.TimeSpan executionTime, string exception, System.AsyncCallback callback, object asyncState) {
+            return base.Channel.BeginProcessSnapshot(clientId, jobId, result, executionTime, exception, callback, asyncState);
         }
         
@@ -920,7 +960,7 @@
             System.Guid jobId = ((System.Guid)(inValues[1]));
             byte[] result = ((byte[])(inValues[2]));
-            double percentage = ((double)(inValues[3]));
+            System.TimeSpan executionTime = ((System.TimeSpan)(inValues[3]));
             string exception = ((string)(inValues[4]));
-            return this.BeginProcessSnapshot(clientId, jobId, result, percentage, exception, callback, asyncState);
+            return this.BeginProcessSnapshot(clientId, jobId, result, executionTime, exception, callback, asyncState);
         }
         
@@ -938,9 +978,9 @@
         }
         
-        public void ProcessSnapshotAsync(System.Guid clientId, System.Guid jobId, byte[] result, double percentage, string exception) {
-            this.ProcessSnapshotAsync(clientId, jobId, result, percentage, exception, null);
-        }
-        
-        public void ProcessSnapshotAsync(System.Guid clientId, System.Guid jobId, byte[] result, double percentage, string exception, object userState) {
+        public void ProcessSnapshotAsync(System.Guid clientId, System.Guid jobId, byte[] result, System.TimeSpan executionTime, string exception) {
+            this.ProcessSnapshotAsync(clientId, jobId, result, executionTime, exception, null);
+        }
+        
+        public void ProcessSnapshotAsync(System.Guid clientId, System.Guid jobId, byte[] result, System.TimeSpan executionTime, string exception, object userState) {
             if ((this.onBeginProcessSnapshotDelegate == null)) {
                 this.onBeginProcessSnapshotDelegate = new BeginOperationDelegate(this.OnBeginProcessSnapshot);
@@ -956,5 +996,5 @@
                         jobId,
                         result,
-                        percentage,
+                        executionTime,
                         exception}, this.onEndProcessSnapshotDelegate, this.onProcessSnapshotCompletedDelegate, userState);
         }
@@ -1617,4 +1657,54 @@
                         jobId}, this.onEndGetLastSerializedResultDelegate, this.onGetLastSerializedResultCompletedDelegate, userState);
         }
+        
+        public HeuristicLab.Hive.Contracts.ResponseObjects.Response DeleteChildJobs(System.Guid jobId) {
+            return base.Channel.DeleteChildJobs(jobId);
+        }
+        
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+        public System.IAsyncResult BeginDeleteChildJobs(System.Guid jobId, System.AsyncCallback callback, object asyncState) {
+            return base.Channel.BeginDeleteChildJobs(jobId, callback, asyncState);
+        }
+        
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+        public HeuristicLab.Hive.Contracts.ResponseObjects.Response EndDeleteChildJobs(System.IAsyncResult result) {
+            return base.Channel.EndDeleteChildJobs(result);
+        }
+        
+        private System.IAsyncResult OnBeginDeleteChildJobs(object[] inValues, System.AsyncCallback callback, object asyncState) {
+            System.Guid jobId = ((System.Guid)(inValues[0]));
+            return this.BeginDeleteChildJobs(jobId, callback, asyncState);
+        }
+        
+        private object[] OnEndDeleteChildJobs(System.IAsyncResult result) {
+            HeuristicLab.Hive.Contracts.ResponseObjects.Response retVal = this.EndDeleteChildJobs(result);
+            return new object[] {
+                    retVal};
+        }
+        
+        private void OnDeleteChildJobsCompleted(object state) {
+            if ((this.DeleteChildJobsCompleted != null)) {
+                InvokeAsyncCompletedEventArgs e = ((InvokeAsyncCompletedEventArgs)(state));
+                this.DeleteChildJobsCompleted(this, new DeleteChildJobsCompletedEventArgs(e.Results, e.Error, e.Cancelled, e.UserState));
+            }
+        }
+        
+        public void DeleteChildJobsAsync(System.Guid jobId) {
+            this.DeleteChildJobsAsync(jobId, null);
+        }
+        
+        public void DeleteChildJobsAsync(System.Guid jobId, object userState) {
+            if ((this.onBeginDeleteChildJobsDelegate == null)) {
+                this.onBeginDeleteChildJobsDelegate = new BeginOperationDelegate(this.OnBeginDeleteChildJobs);
+            }
+            if ((this.onEndDeleteChildJobsDelegate == null)) {
+                this.onEndDeleteChildJobsDelegate = new EndOperationDelegate(this.OnEndDeleteChildJobs);
+            }
+            if ((this.onDeleteChildJobsCompletedDelegate == null)) {
+                this.onDeleteChildJobsCompletedDelegate = new System.Threading.SendOrPostCallback(this.OnDeleteChildJobsCompleted);
+            }
+            base.InvokeAsync(this.onBeginDeleteChildJobsDelegate, new object[] {
+                        jobId}, this.onEndDeleteChildJobsDelegate, this.onDeleteChildJobsCompletedDelegate, userState);
+        }
     }
 }
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveFacade/Reference.svcmap
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveFacade/Reference.svcmap	(revision 4422)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveFacade/Reference.svcmap	(revision 4423)
@@ -19,18 +19,18 @@
   </ClientOptions>
   <MetadataSources>
-    <MetadataSource Address="http://localhost:9000/SlaveService/mex" Protocol="mex" SourceId="1" />
+    <MetadataSource Address="http://blade12.hpc.fh-hagenberg.at:9000/SlaveService/mex" Protocol="mex" SourceId="1" />
   </MetadataSources>
   <Metadata>
-    <MetadataFile FileName="service.wsdl" MetadataType="Wsdl" ID="dcf9b8de-fa8b-4a06-918e-78a8745e2302" SourceId="1" SourceUrl="http://localhost:9000/SlaveService/mex" />
-    <MetadataFile FileName="service.xsd" MetadataType="Schema" ID="9faa3ead-f748-4382-89b5-59c6b7f8fd9f" SourceId="1" SourceUrl="http://localhost:9000/SlaveService/mex" />
-    <MetadataFile FileName="service1.xsd" MetadataType="Schema" ID="6c39d767-dc42-4385-bf62-da3598ad90d7" SourceId="1" SourceUrl="http://localhost:9000/SlaveService/mex" />
-    <MetadataFile FileName="HeuristicLab.Hive.Contracts.BusinessObjects.xsd" MetadataType="Schema" ID="32fd4d95-00f1-4e54-a309-e3a757038728" SourceId="1" SourceUrl="http://localhost:9000/SlaveService/mex" />
-    <MetadataFile FileName="HeuristicLab.DataAccess.xsd" MetadataType="Schema" ID="7132388d-ae5d-42f6-852b-2efef1734b5f" SourceId="1" SourceUrl="http://localhost:9000/SlaveService/mex" />
-    <MetadataFile FileName="HeuristicLab.Hive.Contracts.ResponseObjects.xsd" MetadataType="Schema" ID="23f0123d-4cb9-4dc0-bb56-3f96933c2019" SourceId="1" SourceUrl="http://localhost:9000/SlaveService/mex" />
-    <MetadataFile FileName="HeuristicLab.Hive.Contracts.xsd" MetadataType="Schema" ID="43cac61f-a998-40b2-bb22-de5bd6c549db" SourceId="1" SourceUrl="http://localhost:9000/SlaveService/mex" />
-    <MetadataFile FileName="Arrays.xsd" MetadataType="Schema" ID="994dcbb5-effa-481c-84cf-788a8ba6bb46" SourceId="1" SourceUrl="http://localhost:9000/SlaveService/mex" />
-    <MetadataFile FileName="System.xsd" MetadataType="Schema" ID="c73812f0-bba6-41c6-b2c0-e186ab8c5827" SourceId="1" SourceUrl="http://localhost:9000/SlaveService/mex" />
-    <MetadataFile FileName="HeuristicLab.PluginInfrastructure.xsd" MetadataType="Schema" ID="22532107-63f9-484c-b5ab-d16f632a8f21" SourceId="1" SourceUrl="http://localhost:9000/SlaveService/mex" />
-    <MetadataFile FileName="Message.xsd" MetadataType="Schema" ID="e12260d0-b856-4848-8dc2-8946cd4e4635" SourceId="1" SourceUrl="http://localhost:9000/SlaveService/mex" />
+    <MetadataFile FileName="service1.wsdl" MetadataType="Wsdl" ID="3378e28e-2f1b-4274-bfdf-1922e827f71e" SourceId="1" SourceUrl="http://blade12.hpc.fh-hagenberg.at:9000/SlaveService/mex" />
+    <MetadataFile FileName="service2.xsd" MetadataType="Schema" ID="7efebd30-71c7-4f82-baae-cba867e54784" SourceId="1" SourceUrl="http://blade12.hpc.fh-hagenberg.at:9000/SlaveService/mex" />
+    <MetadataFile FileName="service21.xsd" MetadataType="Schema" ID="a5a5daf6-1f78-42a7-9d88-3339354d4de6" SourceId="1" SourceUrl="http://blade12.hpc.fh-hagenberg.at:9000/SlaveService/mex" />
+    <MetadataFile FileName="HeuristicLab.Hive.Contracts.BusinessObjects1.xsd" MetadataType="Schema" ID="03898186-dcc3-4c45-b304-f25deefab2d7" SourceId="1" SourceUrl="http://blade12.hpc.fh-hagenberg.at:9000/SlaveService/mex" />
+    <MetadataFile FileName="HeuristicLab.DataAccess1.xsd" MetadataType="Schema" ID="62186c45-7323-4efd-9496-a95072980415" SourceId="1" SourceUrl="http://blade12.hpc.fh-hagenberg.at:9000/SlaveService/mex" />
+    <MetadataFile FileName="HeuristicLab.Hive.Contracts.ResponseObjects1.xsd" MetadataType="Schema" ID="bdc88c01-4660-4912-abf0-9a3a921ece0d" SourceId="1" SourceUrl="http://blade12.hpc.fh-hagenberg.at:9000/SlaveService/mex" />
+    <MetadataFile FileName="HeuristicLab.Hive.Contracts1.xsd" MetadataType="Schema" ID="76d8dcc5-4911-4e88-8144-c661c29f8c8e" SourceId="1" SourceUrl="http://blade12.hpc.fh-hagenberg.at:9000/SlaveService/mex" />
+    <MetadataFile FileName="Arrays1.xsd" MetadataType="Schema" ID="9f205a9d-36bb-48d2-b0a1-1fe218e963c8" SourceId="1" SourceUrl="http://blade12.hpc.fh-hagenberg.at:9000/SlaveService/mex" />
+    <MetadataFile FileName="System1.xsd" MetadataType="Schema" ID="2738facc-921c-49ee-8403-d40bb6bab3bd" SourceId="1" SourceUrl="http://blade12.hpc.fh-hagenberg.at:9000/SlaveService/mex" />
+    <MetadataFile FileName="HeuristicLab.PluginInfrastructure1.xsd" MetadataType="Schema" ID="1cee4177-2a7a-4ab4-8d62-c6bfbb8e1f27" SourceId="1" SourceUrl="http://blade12.hpc.fh-hagenberg.at:9000/SlaveService/mex" />
+    <MetadataFile FileName="Message1.xsd" MetadataType="Schema" ID="df11619f-40b0-4bd9-90e7-e543e63e2abf" SourceId="1" SourceUrl="http://blade12.hpc.fh-hagenberg.at:9000/SlaveService/mex" />
   </Metadata>
   <Extensions>
Index: anches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveFacade/System.xsd
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveFacade/System.xsd	(revision 4422)
+++ 	(revision )
@@ -1,12 +1,0 @@
-﻿<?xml version="1.0" encoding="utf-8"?>
-<xs:schema xmlns:tns="http://schemas.datacontract.org/2004/07/System" elementFormDefault="qualified" targetNamespace="http://schemas.datacontract.org/2004/07/System" xmlns:xs="http://www.w3.org/2001/XMLSchema">
-  <xs:complexType name="Version">
-    <xs:sequence>
-      <xs:element name="_Build" type="xs:int" />
-      <xs:element name="_Major" type="xs:int" />
-      <xs:element name="_Minor" type="xs:int" />
-      <xs:element name="_Revision" type="xs:int" />
-    </xs:sequence>
-  </xs:complexType>
-  <xs:element name="Version" nillable="true" type="tns:Version" />
-</xs:schema>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveFacade/System1.xsd
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveFacade/System1.xsd	(revision 4423)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveFacade/System1.xsd	(revision 4423)
@@ -0,0 +1,12 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:tns="http://schemas.datacontract.org/2004/07/System" elementFormDefault="qualified" targetNamespace="http://schemas.datacontract.org/2004/07/System" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:complexType name="Version">
+    <xs:sequence>
+      <xs:element name="_Build" type="xs:int" />
+      <xs:element name="_Major" type="xs:int" />
+      <xs:element name="_Minor" type="xs:int" />
+      <xs:element name="_Revision" type="xs:int" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="Version" nillable="true" type="tns:Version" />
+</xs:schema>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveFacade/configuration.svcinfo
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveFacade/configuration.svcinfo	(revision 4422)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveFacade/configuration.svcinfo	(revision 4423)
@@ -7,6 +7,6 @@
   </bindings>
   <endpoints>
-    <endpoint normalizedDigest="&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-16&quot;?&gt;&lt;Data address=&quot;http://localhost:9000/SlaveService&quot; binding=&quot;wsHttpBinding&quot; bindingConfiguration=&quot;SlaveHttpEndpoint&quot; contract=&quot;SlaveFacade.ISlaveFacade&quot; name=&quot;SlaveHttpEndpoint&quot;&gt;&lt;identity&gt;&lt;certificate encodedValue=&quot;AwAAAAEAAAAUAAAAJ5p7xBv8o/BZ9Lp1c1d+F13FxN8gAAAAAQAAAPIBAAAwggHuMIIBW6ADAgECAhBvZlgTCjsfjEG5QUX7yOhOMAkGBSsOAwIdBQAwFDESMBAGA1UEAxMJbG9jYWxob3N0MB4XDTEwMDgzMDA5MTMyMVoXDTM5MTIzMTIzNTk1OVowFDESMBAGA1UEAxMJbG9jYWxob3N0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCbjJrhOtSpfFz51JPvdfxMVSKqnWhfzjrZvtwpVsy8D589m3SeS6AalWwtkpPCR2C+a4GKo9e689o0+BtuOugypAWqkUhkz//XLvUp5KPNB7igY7he4ngMLp4GsWBWZdl+P8g29t5+nde1Tiv6dPzx5YgfB9lrvZzaS6TT/eNasQIDAQABo0kwRzBFBgNVHQEEPjA8gBBPTuRH17g8MfpeT/ODWdXuoRYwFDESMBAGA1UEAxMJbG9jYWxob3N0ghBvZlgTCjsfjEG5QUX7yOhOMAkGBSsOAwIdBQADgYEAUpgK4sUxAqwR8eyRK8cmyzhhN31xN8/nKPIo9cETaNvjJXL8zO7DeXCyyiBETAkfnhIChRIAmE/PjxvFdB2fOuQY3/OHrobai+G7IQ8SHF+AKdx7cJXt0h4Okny4DpPjQl4V9P2lZaG8fVXmpKhpeZ+ChA8Y/xPCDzTzLleQ/mY=&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;http://localhost:9000/SlaveService&quot; binding=&quot;wsHttpBinding&quot; bindingConfiguration=&quot;SlaveHttpEndpoint&quot; contract=&quot;SlaveFacade.ISlaveFacade&quot; name=&quot;SlaveHttpEndpoint&quot;&gt;&lt;identity&gt;&lt;certificate encodedValue=&quot;AwAAAAEAAAAUAAAAJ5p7xBv8o/BZ9Lp1c1d+F13FxN8gAAAAAQAAAPIBAAAwggHuMIIBW6ADAgECAhBvZlgTCjsfjEG5QUX7yOhOMAkGBSsOAwIdBQAwFDESMBAGA1UEAxMJbG9jYWxob3N0MB4XDTEwMDgzMDA5MTMyMVoXDTM5MTIzMTIzNTk1OVowFDESMBAGA1UEAxMJbG9jYWxob3N0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCbjJrhOtSpfFz51JPvdfxMVSKqnWhfzjrZvtwpVsy8D589m3SeS6AalWwtkpPCR2C+a4GKo9e689o0+BtuOugypAWqkUhkz//XLvUp5KPNB7igY7he4ngMLp4GsWBWZdl+P8g29t5+nde1Tiv6dPzx5YgfB9lrvZzaS6TT/eNasQIDAQABo0kwRzBFBgNVHQEEPjA8gBBPTuRH17g8MfpeT/ODWdXuoRYwFDESMBAGA1UEAxMJbG9jYWxob3N0ghBvZlgTCjsfjEG5QUX7yOhOMAkGBSsOAwIdBQADgYEAUpgK4sUxAqwR8eyRK8cmyzhhN31xN8/nKPIo9cETaNvjJXL8zO7DeXCyyiBETAkfnhIChRIAmE/PjxvFdB2fOuQY3/OHrobai+G7IQ8SHF+AKdx7cJXt0h4Okny4DpPjQl4V9P2lZaG8fVXmpKhpeZ+ChA8Y/xPCDzTzLleQ/mY=&quot; /&gt;&lt;/identity&gt;&lt;/Data&gt;" contractName="SlaveFacade.ISlaveFacade" name="SlaveHttpEndpoint" />
-    <endpoint normalizedDigest="&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-16&quot;?&gt;&lt;Data address=&quot;net.tcp://localhost:9001/SlaveServiceStreamed&quot; binding=&quot;netTcpBinding&quot; bindingConfiguration=&quot;SlaveTcpStreamedEndpoint&quot; contract=&quot;SlaveFacade.ISlaveFacade&quot; name=&quot;SlaveTcpStreamedEndpoint&quot;&gt;&lt;identity&gt;&lt;dns value=&quot;localhost&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://localhost:9001/SlaveServiceStreamed&quot; binding=&quot;netTcpBinding&quot; bindingConfiguration=&quot;SlaveTcpStreamedEndpoint&quot; contract=&quot;SlaveFacade.ISlaveFacade&quot; name=&quot;SlaveTcpStreamedEndpoint&quot;&gt;&lt;identity&gt;&lt;dns value=&quot;localhost&quot; /&gt;&lt;/identity&gt;&lt;/Data&gt;" contractName="SlaveFacade.ISlaveFacade" name="SlaveTcpStreamedEndpoint" />
+    <endpoint normalizedDigest="&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-16&quot;?&gt;&lt;Data address=&quot;http://localhost:9000/SlaveService&quot; binding=&quot;wsHttpBinding&quot; bindingConfiguration=&quot;SlaveHttpEndpoint&quot; contract=&quot;SlaveFacade.ISlaveFacade&quot; name=&quot;SlaveHttpEndpoint&quot;&gt;&lt;identity&gt;&lt;certificate encodedValue=&quot;AwAAAAEAAAAUAAAA0FkTGjOA2/0cZmFlIwFildV5a/ogAAAAAQAAACgCAAAwggIkMIIBkaADAgECAhCcCYkXdzUDsEzY5+POfdYRMAkGBSsOAwIdBQAwJjEkMCIGA1UEAxMbYmxhZGUxMi5ocGMuZmgtaGFnZW5iZXJnLmF0MB4XDTEwMDkxNTE0MjkyNFoXDTM5MTIzMTIzNTk1OVowJjEkMCIGA1UEAxMbYmxhZGUxMi5ocGMuZmgtaGFnZW5iZXJnLmF0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDN/VsuexELvneBS+KjIT4z1oj8VwitpZJDhCVxVM1hBVAXRJ9qE0zwFwen6KWRXKMx0wZvm47CdkENO0krsqfliQRKb0hcMin+37X8u1Xk51qebV3M0kUAEpsRT6RehQD41+iGe1GmIaLksCEYaH80wPWI7F3N/tN+5svizD0sfQIDAQABo1swWTBXBgNVHQEEUDBOgBBJWfbAcVJ+egMO9eh/uP3hoSgwJjEkMCIGA1UEAxMbYmxhZGUxMi5ocGMuZmgtaGFnZW5iZXJnLmF0ghCcCYkXdzUDsEzY5+POfdYRMAkGBSsOAwIdBQADgYEApOwttaruQRFtS8SWslEDt+aKzIUnfKrJ+7U7Fml5+QT7G4+5bXnfOs5gcWKDQyyap9y3AJpjPnGaLzwb/8LwlqKXePRQvOW44O5JLwOTo3TD4ZPKANuBblD7J7TYGyXKTUQcytfQl1uOxELWNBj4IpUEbR1C/S4RmupMivLNQoA=&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;http://localhost:9000/SlaveService&quot; binding=&quot;wsHttpBinding&quot; bindingConfiguration=&quot;SlaveHttpEndpoint&quot; contract=&quot;SlaveFacade.ISlaveFacade&quot; name=&quot;SlaveHttpEndpoint&quot;&gt;&lt;identity&gt;&lt;certificate encodedValue=&quot;AwAAAAEAAAAUAAAA0FkTGjOA2/0cZmFlIwFildV5a/ogAAAAAQAAACgCAAAwggIkMIIBkaADAgECAhCcCYkXdzUDsEzY5+POfdYRMAkGBSsOAwIdBQAwJjEkMCIGA1UEAxMbYmxhZGUxMi5ocGMuZmgtaGFnZW5iZXJnLmF0MB4XDTEwMDkxNTE0MjkyNFoXDTM5MTIzMTIzNTk1OVowJjEkMCIGA1UEAxMbYmxhZGUxMi5ocGMuZmgtaGFnZW5iZXJnLmF0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDN/VsuexELvneBS+KjIT4z1oj8VwitpZJDhCVxVM1hBVAXRJ9qE0zwFwen6KWRXKMx0wZvm47CdkENO0krsqfliQRKb0hcMin+37X8u1Xk51qebV3M0kUAEpsRT6RehQD41+iGe1GmIaLksCEYaH80wPWI7F3N/tN+5svizD0sfQIDAQABo1swWTBXBgNVHQEEUDBOgBBJWfbAcVJ+egMO9eh/uP3hoSgwJjEkMCIGA1UEAxMbYmxhZGUxMi5ocGMuZmgtaGFnZW5iZXJnLmF0ghCcCYkXdzUDsEzY5+POfdYRMAkGBSsOAwIdBQADgYEApOwttaruQRFtS8SWslEDt+aKzIUnfKrJ+7U7Fml5+QT7G4+5bXnfOs5gcWKDQyyap9y3AJpjPnGaLzwb/8LwlqKXePRQvOW44O5JLwOTo3TD4ZPKANuBblD7J7TYGyXKTUQcytfQl1uOxELWNBj4IpUEbR1C/S4RmupMivLNQoA=&quot; /&gt;&lt;/identity&gt;&lt;/Data&gt;" contractName="SlaveFacade.ISlaveFacade" name="SlaveHttpEndpoint" />
+    <endpoint normalizedDigest="&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-16&quot;?&gt;&lt;Data address=&quot;net.tcp://localhost:9001/SlaveServiceStreamed&quot; binding=&quot;netTcpBinding&quot; bindingConfiguration=&quot;SlaveTcpStreamedEndpoint&quot; contract=&quot;SlaveFacade.ISlaveFacade&quot; name=&quot;SlaveTcpStreamedEndpoint&quot;&gt;&lt;identity&gt;&lt;dns value=&quot;blade12.hpc.fh-hagenberg.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://localhost:9001/SlaveServiceStreamed&quot; binding=&quot;netTcpBinding&quot; bindingConfiguration=&quot;SlaveTcpStreamedEndpoint&quot; contract=&quot;SlaveFacade.ISlaveFacade&quot; name=&quot;SlaveTcpStreamedEndpoint&quot;&gt;&lt;identity&gt;&lt;dns value=&quot;blade12.hpc.fh-hagenberg.at&quot; /&gt;&lt;/identity&gt;&lt;/Data&gt;" contractName="SlaveFacade.ISlaveFacade" name="SlaveTcpStreamedEndpoint" />
   </endpoints>
 </configurationSnapshot>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveFacade/configuration91.svcinfo
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveFacade/configuration91.svcinfo	(revision 4422)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveFacade/configuration91.svcinfo	(revision 4423)
@@ -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="mdvHGx1cXH30EVgYx7zLInxCjgQ=">
+<SavedWcfConfigurationInformation xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Version="9.1" CheckSum="ygqZSplkq9BrCLSoyj2N2bTZgNE=">
   <bindingConfigurations>
     <bindingConfiguration bindingType="netTcpBinding" name="SlaveTcpStreamedEndpoint">
@@ -297,5 +297,5 @@
         </property>
         <property path="/identity/certificate/encodedValue" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-          <serializedValue>AwAAAAEAAAAUAAAAJ5p7xBv8o/BZ9Lp1c1d+F13FxN8gAAAAAQAAAPIBAAAwggHuMIIBW6ADAgECAhBvZlgTCjsfjEG5QUX7yOhOMAkGBSsOAwIdBQAwFDESMBAGA1UEAxMJbG9jYWxob3N0MB4XDTEwMDgzMDA5MTMyMVoXDTM5MTIzMTIzNTk1OVowFDESMBAGA1UEAxMJbG9jYWxob3N0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCbjJrhOtSpfFz51JPvdfxMVSKqnWhfzjrZvtwpVsy8D589m3SeS6AalWwtkpPCR2C+a4GKo9e689o0+BtuOugypAWqkUhkz//XLvUp5KPNB7igY7he4ngMLp4GsWBWZdl+P8g29t5+nde1Tiv6dPzx5YgfB9lrvZzaS6TT/eNasQIDAQABo0kwRzBFBgNVHQEEPjA8gBBPTuRH17g8MfpeT/ODWdXuoRYwFDESMBAGA1UEAxMJbG9jYWxob3N0ghBvZlgTCjsfjEG5QUX7yOhOMAkGBSsOAwIdBQADgYEAUpgK4sUxAqwR8eyRK8cmyzhhN31xN8/nKPIo9cETaNvjJXL8zO7DeXCyyiBETAkfnhIChRIAmE/PjxvFdB2fOuQY3/OHrobai+G7IQ8SHF+AKdx7cJXt0h4Okny4DpPjQl4V9P2lZaG8fVXmpKhpeZ+ChA8Y/xPCDzTzLleQ/mY=</serializedValue>
+          <serializedValue>AwAAAAEAAAAUAAAA0FkTGjOA2/0cZmFlIwFildV5a/ogAAAAAQAAACgCAAAwggIkMIIBkaADAgECAhCcCYkXdzUDsEzY5+POfdYRMAkGBSsOAwIdBQAwJjEkMCIGA1UEAxMbYmxhZGUxMi5ocGMuZmgtaGFnZW5iZXJnLmF0MB4XDTEwMDkxNTE0MjkyNFoXDTM5MTIzMTIzNTk1OVowJjEkMCIGA1UEAxMbYmxhZGUxMi5ocGMuZmgtaGFnZW5iZXJnLmF0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDN/VsuexELvneBS+KjIT4z1oj8VwitpZJDhCVxVM1hBVAXRJ9qE0zwFwen6KWRXKMx0wZvm47CdkENO0krsqfliQRKb0hcMin+37X8u1Xk51qebV3M0kUAEpsRT6RehQD41+iGe1GmIaLksCEYaH80wPWI7F3N/tN+5svizD0sfQIDAQABo1swWTBXBgNVHQEEUDBOgBBJWfbAcVJ+egMO9eh/uP3hoSgwJjEkMCIGA1UEAxMbYmxhZGUxMi5ocGMuZmgtaGFnZW5iZXJnLmF0ghCcCYkXdzUDsEzY5+POfdYRMAkGBSsOAwIdBQADgYEApOwttaruQRFtS8SWslEDt+aKzIUnfKrJ+7U7Fml5+QT7G4+5bXnfOs5gcWKDQyyap9y3AJpjPnGaLzwb/8LwlqKXePRQvOW44O5JLwOTo3TD4ZPKANuBblD7J7TYGyXKTUQcytfQl1uOxELWNBj4IpUEbR1C/S4RmupMivLNQoA=</serializedValue>
         </property>
         <property path="/identity/certificateReference" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.CertificateReferenceElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
@@ -370,5 +370,5 @@
         </property>
         <property path="/identity/dns/value" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-          <serializedValue>localhost</serializedValue>
+          <serializedValue>blade12.hpc.fh-hagenberg.at</serializedValue>
         </property>
         <property path="/identity/rsa" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.RsaElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
Index: anches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveFacade/service.wsdl
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveFacade/service.wsdl	(revision 4422)
+++ 	(revision )
@@ -1,1483 +1,0 @@
-﻿<?xml version="1.0" encoding="utf-8"?>
-<wsdl:definitions xmlns:wsap="http://schemas.xmlsoap.org/ws/2004/08/addressing/policy" xmlns:wsa10="http://www.w3.org/2005/08/addressing" xmlns:tns="http://tempuri.org/" xmlns:msc="http://schemas.microsoft.com/ws/2005/12/wsdl/contract" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="SlaveFacade" targetNamespace="http://tempuri.org/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
-  <wsp:Policy wsu:Id="SlaveHttpEndpoint_policy">
-    <wsp:ExactlyOne>
-      <wsp:All>
-        <sp:SymmetricBinding xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
-          <wsp:Policy>
-            <sp:ProtectionToken>
-              <wsp:Policy>
-                <sp:SecureConversationToken sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient">
-                  <wsp:Policy>
-                    <sp:RequireDerivedKeys />
-                    <sp:BootstrapPolicy>
-                      <wsp:Policy>
-                        <sp:SignedParts>
-                          <sp:Body />
-                          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
-                          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
-                          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
-                          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
-                          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
-                          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
-                          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
-                        </sp:SignedParts>
-                        <sp:EncryptedParts>
-                          <sp:Body />
-                        </sp:EncryptedParts>
-                        <sp:SymmetricBinding>
-                          <wsp:Policy>
-                            <sp:ProtectionToken>
-                              <wsp:Policy>
-                                <mssp:SslContextToken sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient" xmlns:mssp="http://schemas.microsoft.com/ws/2005/07/securitypolicy">
-                                  <wsp:Policy>
-                                    <sp:RequireDerivedKeys />
-                                  </wsp:Policy>
-                                </mssp:SslContextToken>
-                              </wsp:Policy>
-                            </sp:ProtectionToken>
-                            <sp:AlgorithmSuite>
-                              <wsp:Policy>
-                                <sp:Basic256 />
-                              </wsp:Policy>
-                            </sp:AlgorithmSuite>
-                            <sp:Layout>
-                              <wsp:Policy>
-                                <sp:Strict />
-                              </wsp:Policy>
-                            </sp:Layout>
-                            <sp:IncludeTimestamp />
-                            <sp:EncryptSignature />
-                            <sp:OnlySignEntireHeadersAndBody />
-                          </wsp:Policy>
-                        </sp:SymmetricBinding>
-                        <sp:SignedSupportingTokens>
-                          <wsp:Policy>
-                            <sp:UsernameToken sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient">
-                              <wsp:Policy>
-                                <sp:WssUsernameToken10 />
-                              </wsp:Policy>
-                            </sp:UsernameToken>
-                          </wsp:Policy>
-                        </sp:SignedSupportingTokens>
-                        <sp:Wss11>
-                          <wsp:Policy />
-                        </sp:Wss11>
-                        <sp:Trust10>
-                          <wsp:Policy>
-                            <sp:MustSupportIssuedTokens />
-                            <sp:RequireClientEntropy />
-                            <sp:RequireServerEntropy />
-                          </wsp:Policy>
-                        </sp:Trust10>
-                      </wsp:Policy>
-                    </sp:BootstrapPolicy>
-                  </wsp:Policy>
-                </sp:SecureConversationToken>
-              </wsp:Policy>
-            </sp:ProtectionToken>
-            <sp:AlgorithmSuite>
-              <wsp:Policy>
-                <sp:Basic256 />
-              </wsp:Policy>
-            </sp:AlgorithmSuite>
-            <sp:Layout>
-              <wsp:Policy>
-                <sp:Strict />
-              </wsp:Policy>
-            </sp:Layout>
-            <sp:IncludeTimestamp />
-            <sp:EncryptSignature />
-            <sp:OnlySignEntireHeadersAndBody />
-          </wsp:Policy>
-        </sp:SymmetricBinding>
-        <sp:Wss11 xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
-          <wsp:Policy />
-        </sp:Wss11>
-        <sp:Trust10 xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
-          <wsp:Policy>
-            <sp:MustSupportIssuedTokens />
-            <sp:RequireClientEntropy />
-            <sp:RequireServerEntropy />
-          </wsp:Policy>
-        </sp:Trust10>
-        <wsaw:UsingAddressing />
-      </wsp:All>
-    </wsp:ExactlyOne>
-  </wsp:Policy>
-  <wsp:Policy wsu:Id="SlaveHttpEndpoint_Login_Input_policy">
-    <wsp:ExactlyOne>
-      <wsp:All>
-        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
-          <sp:Body />
-          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
-        </sp:SignedParts>
-        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
-          <sp:Body />
-        </sp:EncryptedParts>
-      </wsp:All>
-    </wsp:ExactlyOne>
-  </wsp:Policy>
-  <wsp:Policy wsu:Id="SlaveHttpEndpoint_Login_output_policy">
-    <wsp:ExactlyOne>
-      <wsp:All>
-        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
-          <sp:Body />
-          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
-        </sp:SignedParts>
-        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
-          <sp:Body />
-        </sp:EncryptedParts>
-      </wsp:All>
-    </wsp:ExactlyOne>
-  </wsp:Policy>
-  <wsp:Policy wsu:Id="SlaveHttpEndpoint_ProcessHeartBeat_Input_policy">
-    <wsp:ExactlyOne>
-      <wsp:All>
-        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
-          <sp:Body />
-          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
-        </sp:SignedParts>
-        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
-          <sp:Body />
-        </sp:EncryptedParts>
-      </wsp:All>
-    </wsp:ExactlyOne>
-  </wsp:Policy>
-  <wsp:Policy wsu:Id="SlaveHttpEndpoint_ProcessHeartBeat_output_policy">
-    <wsp:ExactlyOne>
-      <wsp:All>
-        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
-          <sp:Body />
-          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
-        </sp:SignedParts>
-        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
-          <sp:Body />
-        </sp:EncryptedParts>
-      </wsp:All>
-    </wsp:ExactlyOne>
-  </wsp:Policy>
-  <wsp:Policy wsu:Id="SlaveHttpEndpoint_GetJob_Input_policy">
-    <wsp:ExactlyOne>
-      <wsp:All>
-        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
-          <sp:Body />
-          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
-        </sp:SignedParts>
-        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
-          <sp:Body />
-        </sp:EncryptedParts>
-      </wsp:All>
-    </wsp:ExactlyOne>
-  </wsp:Policy>
-  <wsp:Policy wsu:Id="SlaveHttpEndpoint_GetJob_output_policy">
-    <wsp:ExactlyOne>
-      <wsp:All>
-        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
-          <sp:Body />
-          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
-        </sp:SignedParts>
-        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
-          <sp:Body />
-        </sp:EncryptedParts>
-      </wsp:All>
-    </wsp:ExactlyOne>
-  </wsp:Policy>
-  <wsp:Policy wsu:Id="SlaveHttpEndpoint_StoreFinishedJobResult_Input_policy">
-    <wsp:ExactlyOne>
-      <wsp:All>
-        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
-          <sp:Body />
-          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
-        </sp:SignedParts>
-        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
-          <sp:Body />
-        </sp:EncryptedParts>
-      </wsp:All>
-    </wsp:ExactlyOne>
-  </wsp:Policy>
-  <wsp:Policy wsu:Id="SlaveHttpEndpoint_StoreFinishedJobResult_output_policy">
-    <wsp:ExactlyOne>
-      <wsp:All>
-        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
-          <sp:Body />
-          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
-        </sp:SignedParts>
-        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
-          <sp:Body />
-        </sp:EncryptedParts>
-      </wsp:All>
-    </wsp:ExactlyOne>
-  </wsp:Policy>
-  <wsp:Policy wsu:Id="SlaveHttpEndpoint_ProcessSnapshot_Input_policy">
-    <wsp:ExactlyOne>
-      <wsp:All>
-        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
-          <sp:Body />
-          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
-        </sp:SignedParts>
-        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
-          <sp:Body />
-        </sp:EncryptedParts>
-      </wsp:All>
-    </wsp:ExactlyOne>
-  </wsp:Policy>
-  <wsp:Policy wsu:Id="SlaveHttpEndpoint_ProcessSnapshot_output_policy">
-    <wsp:ExactlyOne>
-      <wsp:All>
-        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
-          <sp:Body />
-          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
-        </sp:SignedParts>
-        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
-          <sp:Body />
-        </sp:EncryptedParts>
-      </wsp:All>
-    </wsp:ExactlyOne>
-  </wsp:Policy>
-  <wsp:Policy wsu:Id="SlaveHttpEndpoint_Logout_Input_policy">
-    <wsp:ExactlyOne>
-      <wsp:All>
-        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
-          <sp:Body />
-          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
-        </sp:SignedParts>
-        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
-          <sp:Body />
-        </sp:EncryptedParts>
-      </wsp:All>
-    </wsp:ExactlyOne>
-  </wsp:Policy>
-  <wsp:Policy wsu:Id="SlaveHttpEndpoint_Logout_output_policy">
-    <wsp:ExactlyOne>
-      <wsp:All>
-        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
-          <sp:Body />
-          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
-        </sp:SignedParts>
-        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
-          <sp:Body />
-        </sp:EncryptedParts>
-      </wsp:All>
-    </wsp:ExactlyOne>
-  </wsp:Policy>
-  <wsp:Policy wsu:Id="SlaveHttpEndpoint_IsJobStillNeeded_Input_policy">
-    <wsp:ExactlyOne>
-      <wsp:All>
-        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
-          <sp:Body />
-          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
-        </sp:SignedParts>
-        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
-          <sp:Body />
-        </sp:EncryptedParts>
-      </wsp:All>
-    </wsp:ExactlyOne>
-  </wsp:Policy>
-  <wsp:Policy wsu:Id="SlaveHttpEndpoint_IsJobStillNeeded_output_policy">
-    <wsp:ExactlyOne>
-      <wsp:All>
-        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
-          <sp:Body />
-          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
-        </sp:SignedParts>
-        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
-          <sp:Body />
-        </sp:EncryptedParts>
-      </wsp:All>
-    </wsp:ExactlyOne>
-  </wsp:Policy>
-  <wsp:Policy wsu:Id="SlaveHttpEndpoint_GetPlugins_Input_policy">
-    <wsp:ExactlyOne>
-      <wsp:All>
-        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
-          <sp:Body />
-          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
-        </sp:SignedParts>
-        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
-          <sp:Body />
-        </sp:EncryptedParts>
-      </wsp:All>
-    </wsp:ExactlyOne>
-  </wsp:Policy>
-  <wsp:Policy wsu:Id="SlaveHttpEndpoint_GetPlugins_output_policy">
-    <wsp:ExactlyOne>
-      <wsp:All>
-        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
-          <sp:Body />
-          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
-        </sp:SignedParts>
-        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
-          <sp:Body />
-        </sp:EncryptedParts>
-      </wsp:All>
-    </wsp:ExactlyOne>
-  </wsp:Policy>
-  <wsp:Policy wsu:Id="SlaveHttpEndpoint_GetCalendar_Input_policy">
-    <wsp:ExactlyOne>
-      <wsp:All>
-        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
-          <sp:Body />
-          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
-        </sp:SignedParts>
-        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
-          <sp:Body />
-        </sp:EncryptedParts>
-      </wsp:All>
-    </wsp:ExactlyOne>
-  </wsp:Policy>
-  <wsp:Policy wsu:Id="SlaveHttpEndpoint_GetCalendar_output_policy">
-    <wsp:ExactlyOne>
-      <wsp:All>
-        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
-          <sp:Body />
-          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
-        </sp:SignedParts>
-        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
-          <sp:Body />
-        </sp:EncryptedParts>
-      </wsp:All>
-    </wsp:ExactlyOne>
-  </wsp:Policy>
-  <wsp:Policy wsu:Id="SlaveHttpEndpoint_SetCalendarStatus_Input_policy">
-    <wsp:ExactlyOne>
-      <wsp:All>
-        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
-          <sp:Body />
-          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
-        </sp:SignedParts>
-        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
-          <sp:Body />
-        </sp:EncryptedParts>
-      </wsp:All>
-    </wsp:ExactlyOne>
-  </wsp:Policy>
-  <wsp:Policy wsu:Id="SlaveHttpEndpoint_SetCalendarStatus_output_policy">
-    <wsp:ExactlyOne>
-      <wsp:All>
-        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
-          <sp:Body />
-          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
-        </sp:SignedParts>
-        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
-          <sp:Body />
-        </sp:EncryptedParts>
-      </wsp:All>
-    </wsp:ExactlyOne>
-  </wsp:Policy>
-  <wsp:Policy wsu:Id="SlaveHttpEndpoint_GetStreamedJob_Input_policy">
-    <wsp:ExactlyOne>
-      <wsp:All>
-        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
-          <sp:Body />
-          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
-        </sp:SignedParts>
-        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
-          <sp:Body />
-        </sp:EncryptedParts>
-      </wsp:All>
-    </wsp:ExactlyOne>
-  </wsp:Policy>
-  <wsp:Policy wsu:Id="SlaveHttpEndpoint_GetStreamedJob_output_policy">
-    <wsp:ExactlyOne>
-      <wsp:All>
-        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
-          <sp:Body />
-          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
-        </sp:SignedParts>
-        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
-          <sp:Body />
-        </sp:EncryptedParts>
-      </wsp:All>
-    </wsp:ExactlyOne>
-  </wsp:Policy>
-  <wsp:Policy wsu:Id="SlaveHttpEndpoint_GetStreamedPlugins_Input_policy">
-    <wsp:ExactlyOne>
-      <wsp:All>
-        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
-          <sp:Body />
-          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
-        </sp:SignedParts>
-        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
-          <sp:Body />
-        </sp:EncryptedParts>
-      </wsp:All>
-    </wsp:ExactlyOne>
-  </wsp:Policy>
-  <wsp:Policy wsu:Id="SlaveHttpEndpoint_GetStreamedPlugins_output_policy">
-    <wsp:ExactlyOne>
-      <wsp:All>
-        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
-          <sp:Body />
-          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
-        </sp:SignedParts>
-        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
-          <sp:Body />
-        </sp:EncryptedParts>
-      </wsp:All>
-    </wsp:ExactlyOne>
-  </wsp:Policy>
-  <wsp:Policy wsu:Id="SlaveHttpEndpoint_StoreFinishedJobResultStreamed_Input_policy">
-    <wsp:ExactlyOne>
-      <wsp:All>
-        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
-          <sp:Body />
-          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
-        </sp:SignedParts>
-        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
-          <sp:Body />
-        </sp:EncryptedParts>
-      </wsp:All>
-    </wsp:ExactlyOne>
-  </wsp:Policy>
-  <wsp:Policy wsu:Id="SlaveHttpEndpoint_StoreFinishedJobResultStreamed_output_policy">
-    <wsp:ExactlyOne>
-      <wsp:All>
-        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
-          <sp:Body />
-          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
-        </sp:SignedParts>
-        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
-          <sp:Body />
-        </sp:EncryptedParts>
-      </wsp:All>
-    </wsp:ExactlyOne>
-  </wsp:Policy>
-  <wsp:Policy wsu:Id="SlaveHttpEndpoint_ProcessSnapshotStreamed_Input_policy">
-    <wsp:ExactlyOne>
-      <wsp:All>
-        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
-          <sp:Body />
-          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
-        </sp:SignedParts>
-        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
-          <sp:Body />
-        </sp:EncryptedParts>
-      </wsp:All>
-    </wsp:ExactlyOne>
-  </wsp:Policy>
-  <wsp:Policy wsu:Id="SlaveHttpEndpoint_ProcessSnapshotStreamed_output_policy">
-    <wsp:ExactlyOne>
-      <wsp:All>
-        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
-          <sp:Body />
-          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
-        </sp:SignedParts>
-        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
-          <sp:Body />
-        </sp:EncryptedParts>
-      </wsp:All>
-    </wsp:ExactlyOne>
-  </wsp:Policy>
-  <wsp:Policy wsu:Id="SlaveHttpEndpoint_AddChildJob_Input_policy">
-    <wsp:ExactlyOne>
-      <wsp:All>
-        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
-          <sp:Body />
-          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
-        </sp:SignedParts>
-        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
-          <sp:Body />
-        </sp:EncryptedParts>
-      </wsp:All>
-    </wsp:ExactlyOne>
-  </wsp:Policy>
-  <wsp:Policy wsu:Id="SlaveHttpEndpoint_AddChildJob_output_policy">
-    <wsp:ExactlyOne>
-      <wsp:All>
-        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
-          <sp:Body />
-          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
-        </sp:SignedParts>
-        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
-          <sp:Body />
-        </sp:EncryptedParts>
-      </wsp:All>
-    </wsp:ExactlyOne>
-  </wsp:Policy>
-  <wsp:Policy wsu:Id="SlaveHttpEndpoint_PauseJob_Input_policy">
-    <wsp:ExactlyOne>
-      <wsp:All>
-        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
-          <sp:Body />
-          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
-        </sp:SignedParts>
-        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
-          <sp:Body />
-        </sp:EncryptedParts>
-      </wsp:All>
-    </wsp:ExactlyOne>
-  </wsp:Policy>
-  <wsp:Policy wsu:Id="SlaveHttpEndpoint_PauseJob_output_policy">
-    <wsp:ExactlyOne>
-      <wsp:All>
-        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
-          <sp:Body />
-          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
-        </sp:SignedParts>
-        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
-          <sp:Body />
-        </sp:EncryptedParts>
-      </wsp:All>
-    </wsp:ExactlyOne>
-  </wsp:Policy>
-  <wsp:Policy wsu:Id="SlaveHttpEndpoint_GetChildJobResults_Input_policy">
-    <wsp:ExactlyOne>
-      <wsp:All>
-        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
-          <sp:Body />
-          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
-        </sp:SignedParts>
-        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
-          <sp:Body />
-        </sp:EncryptedParts>
-      </wsp:All>
-    </wsp:ExactlyOne>
-  </wsp:Policy>
-  <wsp:Policy wsu:Id="SlaveHttpEndpoint_GetChildJobResults_output_policy">
-    <wsp:ExactlyOne>
-      <wsp:All>
-        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
-          <sp:Body />
-          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
-        </sp:SignedParts>
-        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
-          <sp:Body />
-        </sp:EncryptedParts>
-      </wsp:All>
-    </wsp:ExactlyOne>
-  </wsp:Policy>
-  <wsp:Policy wsu:Id="SlaveHttpEndpoint_GetLastSerializedResult_Input_policy">
-    <wsp:ExactlyOne>
-      <wsp:All>
-        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
-          <sp:Body />
-          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
-        </sp:SignedParts>
-        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
-          <sp:Body />
-        </sp:EncryptedParts>
-      </wsp:All>
-    </wsp:ExactlyOne>
-  </wsp:Policy>
-  <wsp:Policy wsu:Id="SlaveHttpEndpoint_GetLastSerializedResult_output_policy">
-    <wsp:ExactlyOne>
-      <wsp:All>
-        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
-          <sp:Body />
-          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
-          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
-        </sp:SignedParts>
-        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
-          <sp:Body />
-        </sp:EncryptedParts>
-      </wsp:All>
-    </wsp:ExactlyOne>
-  </wsp:Policy>
-  <wsp:Policy wsu:Id="SlaveTcpStreamedEndpoint_policy">
-    <wsp:ExactlyOne>
-      <wsp:All>
-        <msb:BinaryEncoding xmlns:msb="http://schemas.microsoft.com/ws/06/2004/mspolicy/netbinary1" />
-        <sp:TransportBinding xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
-          <wsp:Policy>
-            <sp:TransportToken>
-              <wsp:Policy>
-                <msf:SslTransportSecurity xmlns:msf="http://schemas.microsoft.com/ws/2006/05/framing/policy" />
-              </wsp:Policy>
-            </sp:TransportToken>
-            <sp:AlgorithmSuite>
-              <wsp:Policy>
-                <sp:Basic256 />
-              </wsp:Policy>
-            </sp:AlgorithmSuite>
-            <sp:Layout>
-              <wsp:Policy>
-                <sp:Strict />
-              </wsp:Policy>
-            </sp:Layout>
-            <sp:IncludeTimestamp />
-          </wsp:Policy>
-        </sp:TransportBinding>
-        <sp:EndorsingSupportingTokens xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
-          <wsp:Policy>
-            <sp:SecureConversationToken sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient">
-              <wsp:Policy>
-                <sp:BootstrapPolicy>
-                  <wsp:Policy>
-                    <sp:SignedParts>
-                      <sp:Body />
-                      <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
-                      <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
-                      <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
-                      <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
-                      <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
-                      <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
-                      <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
-                    </sp:SignedParts>
-                    <sp:EncryptedParts>
-                      <sp:Body />
-                    </sp:EncryptedParts>
-                    <sp:TransportBinding>
-                      <wsp:Policy>
-                        <sp:TransportToken>
-                          <wsp:Policy>
-                            <msf:SslTransportSecurity xmlns:msf="http://schemas.microsoft.com/ws/2006/05/framing/policy" />
-                          </wsp:Policy>
-                        </sp:TransportToken>
-                        <sp:AlgorithmSuite>
-                          <wsp:Policy>
-                            <sp:Basic256 />
-                          </wsp:Policy>
-                        </sp:AlgorithmSuite>
-                        <sp:Layout>
-                          <wsp:Policy>
-                            <sp:Strict />
-                          </wsp:Policy>
-                        </sp:Layout>
-                        <sp:IncludeTimestamp />
-                      </wsp:Policy>
-                    </sp:TransportBinding>
-                    <sp:SignedSupportingTokens>
-                      <wsp:Policy>
-                        <sp:UsernameToken sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient">
-                          <wsp:Policy>
-                            <sp:WssUsernameToken10 />
-                          </wsp:Policy>
-                        </sp:UsernameToken>
-                      </wsp:Policy>
-                    </sp:SignedSupportingTokens>
-                    <sp:Wss11>
-                      <wsp:Policy />
-                    </sp:Wss11>
-                    <sp:Trust10>
-                      <wsp:Policy>
-                        <sp:MustSupportIssuedTokens />
-                        <sp:RequireClientEntropy />
-                        <sp:RequireServerEntropy />
-                      </wsp:Policy>
-                    </sp:Trust10>
-                  </wsp:Policy>
-                </sp:BootstrapPolicy>
-              </wsp:Policy>
-            </sp:SecureConversationToken>
-          </wsp:Policy>
-        </sp:EndorsingSupportingTokens>
-        <sp:Wss11 xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
-          <wsp:Policy />
-        </sp:Wss11>
-        <sp:Trust10 xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
-          <wsp:Policy>
-            <sp:MustSupportIssuedTokens />
-            <sp:RequireClientEntropy />
-            <sp:RequireServerEntropy />
-          </wsp:Policy>
-        </sp:Trust10>
-        <msf:Streamed xmlns:msf="http://schemas.microsoft.com/ws/2006/05/framing/policy" />
-        <wsaw:UsingAddressing />
-      </wsp:All>
-    </wsp:ExactlyOne>
-  </wsp:Policy>
-  <wsdl:types>
-    <xsd:schema targetNamespace="http://tempuri.org/Imports">
-      <xsd:import namespace="http://tempuri.org/" />
-      <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.ResponseObjects" />
-      <xsd:import namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts" />
-      <xsd:import namespace="http://schemas.microsoft.com/2003/10/Serialization/Arrays" />
-      <xsd:import namespace="http://schemas.datacontract.org/2004/07/System" />
-      <xsd:import namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.PluginInfrastructure" />
-      <xsd:import namespace="http://schemas.microsoft.com/Message" />
-    </xsd:schema>
-  </wsdl:types>
-  <wsdl:message name="ISlaveFacade_Login_InputMessage">
-    <wsdl:part name="parameters" element="tns:Login" />
-  </wsdl:message>
-  <wsdl:message name="ISlaveFacade_Login_OutputMessage">
-    <wsdl:part name="parameters" element="tns:LoginResponse" />
-  </wsdl:message>
-  <wsdl:message name="ISlaveFacade_ProcessHeartBeat_InputMessage">
-    <wsdl:part name="parameters" element="tns:ProcessHeartBeat" />
-  </wsdl:message>
-  <wsdl:message name="ISlaveFacade_ProcessHeartBeat_OutputMessage">
-    <wsdl:part name="parameters" element="tns:ProcessHeartBeatResponse" />
-  </wsdl:message>
-  <wsdl:message name="ISlaveFacade_GetJob_InputMessage">
-    <wsdl:part name="parameters" element="tns:GetJob" />
-  </wsdl:message>
-  <wsdl:message name="ISlaveFacade_GetJob_OutputMessage">
-    <wsdl:part name="parameters" element="tns:GetJobResponse" />
-  </wsdl:message>
-  <wsdl:message name="ISlaveFacade_StoreFinishedJobResult_InputMessage">
-    <wsdl:part name="parameters" element="tns:StoreFinishedJobResult" />
-  </wsdl:message>
-  <wsdl:message name="ISlaveFacade_StoreFinishedJobResult_OutputMessage">
-    <wsdl:part name="parameters" element="tns:StoreFinishedJobResultResponse" />
-  </wsdl:message>
-  <wsdl:message name="ISlaveFacade_ProcessSnapshot_InputMessage">
-    <wsdl:part name="parameters" element="tns:ProcessSnapshot" />
-  </wsdl:message>
-  <wsdl:message name="ISlaveFacade_ProcessSnapshot_OutputMessage">
-    <wsdl:part name="parameters" element="tns:ProcessSnapshotResponse" />
-  </wsdl:message>
-  <wsdl:message name="ISlaveFacade_Logout_InputMessage">
-    <wsdl:part name="parameters" element="tns:Logout" />
-  </wsdl:message>
-  <wsdl:message name="ISlaveFacade_Logout_OutputMessage">
-    <wsdl:part name="parameters" element="tns:LogoutResponse" />
-  </wsdl:message>
-  <wsdl:message name="ISlaveFacade_IsJobStillNeeded_InputMessage">
-    <wsdl:part name="parameters" element="tns:IsJobStillNeeded" />
-  </wsdl:message>
-  <wsdl:message name="ISlaveFacade_IsJobStillNeeded_OutputMessage">
-    <wsdl:part name="parameters" element="tns:IsJobStillNeededResponse" />
-  </wsdl:message>
-  <wsdl:message name="ISlaveFacade_GetPlugins_InputMessage">
-    <wsdl:part name="parameters" element="tns:GetPlugins" />
-  </wsdl:message>
-  <wsdl:message name="ISlaveFacade_GetPlugins_OutputMessage">
-    <wsdl:part name="parameters" element="tns:GetPluginsResponse" />
-  </wsdl:message>
-  <wsdl:message name="ISlaveFacade_GetCalendar_InputMessage">
-    <wsdl:part name="parameters" element="tns:GetCalendar" />
-  </wsdl:message>
-  <wsdl:message name="ISlaveFacade_GetCalendar_OutputMessage">
-    <wsdl:part name="parameters" element="tns:GetCalendarResponse" />
-  </wsdl:message>
-  <wsdl:message name="ISlaveFacade_SetCalendarStatus_InputMessage">
-    <wsdl:part name="parameters" element="tns:SetCalendarStatus" />
-  </wsdl:message>
-  <wsdl:message name="ISlaveFacade_SetCalendarStatus_OutputMessage">
-    <wsdl:part name="parameters" element="tns:SetCalendarStatusResponse" />
-  </wsdl:message>
-  <wsdl:message name="ISlaveFacade_GetStreamedJob_InputMessage">
-    <wsdl:part name="parameters" element="tns:GetStreamedJob" />
-  </wsdl:message>
-  <wsdl:message name="ISlaveFacade_GetStreamedJob_OutputMessage">
-    <wsdl:part name="parameters" element="tns:GetStreamedJobResponse" />
-  </wsdl:message>
-  <wsdl:message name="ISlaveFacade_GetStreamedPlugins_InputMessage">
-    <wsdl:part name="parameters" element="tns:GetStreamedPlugins" />
-  </wsdl:message>
-  <wsdl:message name="ISlaveFacade_GetStreamedPlugins_OutputMessage">
-    <wsdl:part name="parameters" element="tns:GetStreamedPluginsResponse" />
-  </wsdl:message>
-  <wsdl:message name="ISlaveFacade_StoreFinishedJobResultStreamed_InputMessage">
-    <wsdl:part name="parameters" element="tns:StoreFinishedJobResultStreamed" />
-  </wsdl:message>
-  <wsdl:message name="ISlaveFacade_StoreFinishedJobResultStreamed_OutputMessage">
-    <wsdl:part name="parameters" element="tns:StoreFinishedJobResultStreamedResponse" />
-  </wsdl:message>
-  <wsdl:message name="ISlaveFacade_ProcessSnapshotStreamed_InputMessage">
-    <wsdl:part name="parameters" element="tns:ProcessSnapshotStreamed" />
-  </wsdl:message>
-  <wsdl:message name="ISlaveFacade_ProcessSnapshotStreamed_OutputMessage">
-    <wsdl:part name="parameters" element="tns:ProcessSnapshotStreamedResponse" />
-  </wsdl:message>
-  <wsdl:message name="ISlaveFacade_AddChildJob_InputMessage">
-    <wsdl:part name="parameters" element="tns:AddChildJob" />
-  </wsdl:message>
-  <wsdl:message name="ISlaveFacade_AddChildJob_OutputMessage">
-    <wsdl:part name="parameters" element="tns:AddChildJobResponse" />
-  </wsdl:message>
-  <wsdl:message name="ISlaveFacade_PauseJob_InputMessage">
-    <wsdl:part name="parameters" element="tns:PauseJob" />
-  </wsdl:message>
-  <wsdl:message name="ISlaveFacade_PauseJob_OutputMessage">
-    <wsdl:part name="parameters" element="tns:PauseJobResponse" />
-  </wsdl:message>
-  <wsdl:message name="ISlaveFacade_GetChildJobResults_InputMessage">
-    <wsdl:part name="parameters" element="tns:GetChildJobResults" />
-  </wsdl:message>
-  <wsdl:message name="ISlaveFacade_GetChildJobResults_OutputMessage">
-    <wsdl:part name="parameters" element="tns:GetChildJobResultsResponse" />
-  </wsdl:message>
-  <wsdl:message name="ISlaveFacade_GetLastSerializedResult_InputMessage">
-    <wsdl:part name="parameters" element="tns:GetLastSerializedResult" />
-  </wsdl:message>
-  <wsdl:message name="ISlaveFacade_GetLastSerializedResult_OutputMessage">
-    <wsdl:part name="parameters" element="tns:GetLastSerializedResultResponse" />
-  </wsdl:message>
-  <wsdl:portType name="ISlaveFacade">
-    <wsdl:operation name="Login">
-      <wsdl:input wsaw:Action="http://tempuri.org/ISlaveCommunicator/Login" message="tns:ISlaveFacade_Login_InputMessage" />
-      <wsdl:output wsaw:Action="http://tempuri.org/ISlaveCommunicator/LoginResponse" message="tns:ISlaveFacade_Login_OutputMessage" />
-    </wsdl:operation>
-    <wsdl:operation name="ProcessHeartBeat">
-      <wsdl:input wsaw:Action="http://tempuri.org/ISlaveCommunicator/ProcessHeartBeat" message="tns:ISlaveFacade_ProcessHeartBeat_InputMessage" />
-      <wsdl:output wsaw:Action="http://tempuri.org/ISlaveCommunicator/ProcessHeartBeatResponse" message="tns:ISlaveFacade_ProcessHeartBeat_OutputMessage" />
-    </wsdl:operation>
-    <wsdl:operation name="GetJob">
-      <wsdl:input wsaw:Action="http://tempuri.org/ISlaveCommunicator/GetJob" message="tns:ISlaveFacade_GetJob_InputMessage" />
-      <wsdl:output wsaw:Action="http://tempuri.org/ISlaveCommunicator/GetJobResponse" message="tns:ISlaveFacade_GetJob_OutputMessage" />
-    </wsdl:operation>
-    <wsdl:operation name="StoreFinishedJobResult">
-      <wsdl:input wsaw:Action="http://tempuri.org/ISlaveCommunicator/StoreFinishedJobResult" message="tns:ISlaveFacade_StoreFinishedJobResult_InputMessage" />
-      <wsdl:output wsaw:Action="http://tempuri.org/ISlaveCommunicator/StoreFinishedJobResultResponse" message="tns:ISlaveFacade_StoreFinishedJobResult_OutputMessage" />
-    </wsdl:operation>
-    <wsdl:operation name="ProcessSnapshot">
-      <wsdl:input wsaw:Action="http://tempuri.org/ISlaveCommunicator/ProcessSnapshot" message="tns:ISlaveFacade_ProcessSnapshot_InputMessage" />
-      <wsdl:output wsaw:Action="http://tempuri.org/ISlaveCommunicator/ProcessSnapshotResponse" message="tns:ISlaveFacade_ProcessSnapshot_OutputMessage" />
-    </wsdl:operation>
-    <wsdl:operation name="Logout">
-      <wsdl:input wsaw:Action="http://tempuri.org/ISlaveCommunicator/Logout" message="tns:ISlaveFacade_Logout_InputMessage" />
-      <wsdl:output wsaw:Action="http://tempuri.org/ISlaveCommunicator/LogoutResponse" message="tns:ISlaveFacade_Logout_OutputMessage" />
-    </wsdl:operation>
-    <wsdl:operation name="IsJobStillNeeded">
-      <wsdl:input wsaw:Action="http://tempuri.org/ISlaveCommunicator/IsJobStillNeeded" message="tns:ISlaveFacade_IsJobStillNeeded_InputMessage" />
-      <wsdl:output wsaw:Action="http://tempuri.org/ISlaveCommunicator/IsJobStillNeededResponse" message="tns:ISlaveFacade_IsJobStillNeeded_OutputMessage" />
-    </wsdl:operation>
-    <wsdl:operation name="GetPlugins">
-      <wsdl:input wsaw:Action="http://tempuri.org/ISlaveCommunicator/GetPlugins" message="tns:ISlaveFacade_GetPlugins_InputMessage" />
-      <wsdl:output wsaw:Action="http://tempuri.org/ISlaveCommunicator/GetPluginsResponse" message="tns:ISlaveFacade_GetPlugins_OutputMessage" />
-    </wsdl:operation>
-    <wsdl:operation name="GetCalendar">
-      <wsdl:input wsaw:Action="http://tempuri.org/ISlaveCommunicator/GetCalendar" message="tns:ISlaveFacade_GetCalendar_InputMessage" />
-      <wsdl:output wsaw:Action="http://tempuri.org/ISlaveCommunicator/GetCalendarResponse" message="tns:ISlaveFacade_GetCalendar_OutputMessage" />
-    </wsdl:operation>
-    <wsdl:operation name="SetCalendarStatus">
-      <wsdl:input wsaw:Action="http://tempuri.org/ISlaveCommunicator/SetCalendarStatus" message="tns:ISlaveFacade_SetCalendarStatus_InputMessage" />
-      <wsdl:output wsaw:Action="http://tempuri.org/ISlaveCommunicator/SetCalendarStatusResponse" message="tns:ISlaveFacade_SetCalendarStatus_OutputMessage" />
-    </wsdl:operation>
-    <wsdl:operation name="GetStreamedJob">
-      <wsdl:input wsaw:Action="http://tempuri.org/ISlaveFacade/GetStreamedJob" message="tns:ISlaveFacade_GetStreamedJob_InputMessage" />
-      <wsdl:output wsaw:Action="http://tempuri.org/ISlaveFacade/GetStreamedJobResponse" message="tns:ISlaveFacade_GetStreamedJob_OutputMessage" />
-    </wsdl:operation>
-    <wsdl:operation name="GetStreamedPlugins">
-      <wsdl:input wsaw:Action="http://tempuri.org/ISlaveFacade/GetStreamedPlugins" message="tns:ISlaveFacade_GetStreamedPlugins_InputMessage" />
-      <wsdl:output wsaw:Action="http://tempuri.org/ISlaveFacade/GetStreamedPluginsResponse" message="tns:ISlaveFacade_GetStreamedPlugins_OutputMessage" />
-    </wsdl:operation>
-    <wsdl:operation name="StoreFinishedJobResultStreamed">
-      <wsdl:input wsaw:Action="http://tempuri.org/ISlaveFacade/StoreFinishedJobResultStreamed" message="tns:ISlaveFacade_StoreFinishedJobResultStreamed_InputMessage" />
-      <wsdl:output wsaw:Action="http://tempuri.org/ISlaveFacade/StoreFinishedJobResultStreamedResponse" message="tns:ISlaveFacade_StoreFinishedJobResultStreamed_OutputMessage" />
-    </wsdl:operation>
-    <wsdl:operation name="ProcessSnapshotStreamed">
-      <wsdl:input wsaw:Action="http://tempuri.org/ISlaveFacade/ProcessSnapshotStreamed" message="tns:ISlaveFacade_ProcessSnapshotStreamed_InputMessage" />
-      <wsdl:output wsaw:Action="http://tempuri.org/ISlaveFacade/ProcessSnapshotStreamedResponse" message="tns:ISlaveFacade_ProcessSnapshotStreamed_OutputMessage" />
-    </wsdl:operation>
-    <wsdl:operation name="AddChildJob">
-      <wsdl:input wsaw:Action="http://tempuri.org/ISlaveFacade/AddChildJob" message="tns:ISlaveFacade_AddChildJob_InputMessage" />
-      <wsdl:output wsaw:Action="http://tempuri.org/ISlaveFacade/AddChildJobResponse" message="tns:ISlaveFacade_AddChildJob_OutputMessage" />
-    </wsdl:operation>
-    <wsdl:operation name="PauseJob">
-      <wsdl:input wsaw:Action="http://tempuri.org/ISlaveFacade/PauseJob" message="tns:ISlaveFacade_PauseJob_InputMessage" />
-      <wsdl:output wsaw:Action="http://tempuri.org/ISlaveFacade/PauseJobResponse" message="tns:ISlaveFacade_PauseJob_OutputMessage" />
-    </wsdl:operation>
-    <wsdl:operation name="GetChildJobResults">
-      <wsdl:input wsaw:Action="http://tempuri.org/ISlaveFacade/GetChildJobResults" message="tns:ISlaveFacade_GetChildJobResults_InputMessage" />
-      <wsdl:output wsaw:Action="http://tempuri.org/ISlaveFacade/GetChildJobResultsResponse" message="tns:ISlaveFacade_GetChildJobResults_OutputMessage" />
-    </wsdl:operation>
-    <wsdl:operation name="GetLastSerializedResult">
-      <wsdl:input wsaw:Action="http://tempuri.org/ISlaveFacade/GetLastSerializedResult" message="tns:ISlaveFacade_GetLastSerializedResult_InputMessage" />
-      <wsdl:output wsaw:Action="http://tempuri.org/ISlaveFacade/GetLastSerializedResultResponse" message="tns:ISlaveFacade_GetLastSerializedResult_OutputMessage" />
-    </wsdl:operation>
-  </wsdl:portType>
-  <wsdl:binding name="SlaveHttpEndpoint" type="tns:ISlaveFacade">
-    <wsp:PolicyReference URI="#SlaveHttpEndpoint_policy" />
-    <soap12:binding transport="http://schemas.xmlsoap.org/soap/http" />
-    <wsdl:operation name="Login">
-      <soap12:operation soapAction="http://tempuri.org/ISlaveCommunicator/Login" style="document" />
-      <wsdl:input>
-        <wsp:PolicyReference URI="#SlaveHttpEndpoint_Login_Input_policy" />
-        <soap12:body use="literal" />
-      </wsdl:input>
-      <wsdl:output>
-        <wsp:PolicyReference URI="#SlaveHttpEndpoint_Login_output_policy" />
-        <soap12:body use="literal" />
-      </wsdl:output>
-    </wsdl:operation>
-    <wsdl:operation name="ProcessHeartBeat">
-      <soap12:operation soapAction="http://tempuri.org/ISlaveCommunicator/ProcessHeartBeat" style="document" />
-      <wsdl:input>
-        <wsp:PolicyReference URI="#SlaveHttpEndpoint_ProcessHeartBeat_Input_policy" />
-        <soap12:body use="literal" />
-      </wsdl:input>
-      <wsdl:output>
-        <wsp:PolicyReference URI="#SlaveHttpEndpoint_ProcessHeartBeat_output_policy" />
-        <soap12:body use="literal" />
-      </wsdl:output>
-    </wsdl:operation>
-    <wsdl:operation name="GetJob">
-      <soap12:operation soapAction="http://tempuri.org/ISlaveCommunicator/GetJob" style="document" />
-      <wsdl:input>
-        <wsp:PolicyReference URI="#SlaveHttpEndpoint_GetJob_Input_policy" />
-        <soap12:body use="literal" />
-      </wsdl:input>
-      <wsdl:output>
-        <wsp:PolicyReference URI="#SlaveHttpEndpoint_GetJob_output_policy" />
-        <soap12:body use="literal" />
-      </wsdl:output>
-    </wsdl:operation>
-    <wsdl:operation name="StoreFinishedJobResult">
-      <soap12:operation soapAction="http://tempuri.org/ISlaveCommunicator/StoreFinishedJobResult" style="document" />
-      <wsdl:input>
-        <wsp:PolicyReference URI="#SlaveHttpEndpoint_StoreFinishedJobResult_Input_policy" />
-        <soap12:body use="literal" />
-      </wsdl:input>
-      <wsdl:output>
-        <wsp:PolicyReference URI="#SlaveHttpEndpoint_StoreFinishedJobResult_output_policy" />
-        <soap12:body use="literal" />
-      </wsdl:output>
-    </wsdl:operation>
-    <wsdl:operation name="ProcessSnapshot">
-      <soap12:operation soapAction="http://tempuri.org/ISlaveCommunicator/ProcessSnapshot" style="document" />
-      <wsdl:input>
-        <wsp:PolicyReference URI="#SlaveHttpEndpoint_ProcessSnapshot_Input_policy" />
-        <soap12:body use="literal" />
-      </wsdl:input>
-      <wsdl:output>
-        <wsp:PolicyReference URI="#SlaveHttpEndpoint_ProcessSnapshot_output_policy" />
-        <soap12:body use="literal" />
-      </wsdl:output>
-    </wsdl:operation>
-    <wsdl:operation name="Logout">
-      <soap12:operation soapAction="http://tempuri.org/ISlaveCommunicator/Logout" style="document" />
-      <wsdl:input>
-        <wsp:PolicyReference URI="#SlaveHttpEndpoint_Logout_Input_policy" />
-        <soap12:body use="literal" />
-      </wsdl:input>
-      <wsdl:output>
-        <wsp:PolicyReference URI="#SlaveHttpEndpoint_Logout_output_policy" />
-        <soap12:body use="literal" />
-      </wsdl:output>
-    </wsdl:operation>
-    <wsdl:operation name="IsJobStillNeeded">
-      <soap12:operation soapAction="http://tempuri.org/ISlaveCommunicator/IsJobStillNeeded" style="document" />
-      <wsdl:input>
-        <wsp:PolicyReference URI="#SlaveHttpEndpoint_IsJobStillNeeded_Input_policy" />
-        <soap12:body use="literal" />
-      </wsdl:input>
-      <wsdl:output>
-        <wsp:PolicyReference URI="#SlaveHttpEndpoint_IsJobStillNeeded_output_policy" />
-        <soap12:body use="literal" />
-      </wsdl:output>
-    </wsdl:operation>
-    <wsdl:operation name="GetPlugins">
-      <soap12:operation soapAction="http://tempuri.org/ISlaveCommunicator/GetPlugins" style="document" />
-      <wsdl:input>
-        <wsp:PolicyReference URI="#SlaveHttpEndpoint_GetPlugins_Input_policy" />
-        <soap12:body use="literal" />
-      </wsdl:input>
-      <wsdl:output>
-        <wsp:PolicyReference URI="#SlaveHttpEndpoint_GetPlugins_output_policy" />
-        <soap12:body use="literal" />
-      </wsdl:output>
-    </wsdl:operation>
-    <wsdl:operation name="GetCalendar">
-      <soap12:operation soapAction="http://tempuri.org/ISlaveCommunicator/GetCalendar" style="document" />
-      <wsdl:input>
-        <wsp:PolicyReference URI="#SlaveHttpEndpoint_GetCalendar_Input_policy" />
-        <soap12:body use="literal" />
-      </wsdl:input>
-      <wsdl:output>
-        <wsp:PolicyReference URI="#SlaveHttpEndpoint_GetCalendar_output_policy" />
-        <soap12:body use="literal" />
-      </wsdl:output>
-    </wsdl:operation>
-    <wsdl:operation name="SetCalendarStatus">
-      <soap12:operation soapAction="http://tempuri.org/ISlaveCommunicator/SetCalendarStatus" style="document" />
-      <wsdl:input>
-        <wsp:PolicyReference URI="#SlaveHttpEndpoint_SetCalendarStatus_Input_policy" />
-        <soap12:body use="literal" />
-      </wsdl:input>
-      <wsdl:output>
-        <wsp:PolicyReference URI="#SlaveHttpEndpoint_SetCalendarStatus_output_policy" />
-        <soap12:body use="literal" />
-      </wsdl:output>
-    </wsdl:operation>
-    <wsdl:operation name="GetStreamedJob">
-      <soap12:operation soapAction="http://tempuri.org/ISlaveFacade/GetStreamedJob" style="document" />
-      <wsdl:input>
-        <wsp:PolicyReference URI="#SlaveHttpEndpoint_GetStreamedJob_Input_policy" />
-        <soap12:body use="literal" />
-      </wsdl:input>
-      <wsdl:output>
-        <wsp:PolicyReference URI="#SlaveHttpEndpoint_GetStreamedJob_output_policy" />
-        <soap12:body use="literal" />
-      </wsdl:output>
-    </wsdl:operation>
-    <wsdl:operation name="GetStreamedPlugins">
-      <soap12:operation soapAction="http://tempuri.org/ISlaveFacade/GetStreamedPlugins" style="document" />
-      <wsdl:input>
-        <wsp:PolicyReference URI="#SlaveHttpEndpoint_GetStreamedPlugins_Input_policy" />
-        <soap12:body use="literal" />
-      </wsdl:input>
-      <wsdl:output>
-        <wsp:PolicyReference URI="#SlaveHttpEndpoint_GetStreamedPlugins_output_policy" />
-        <soap12:body use="literal" />
-      </wsdl:output>
-    </wsdl:operation>
-    <wsdl:operation name="StoreFinishedJobResultStreamed">
-      <soap12:operation soapAction="http://tempuri.org/ISlaveFacade/StoreFinishedJobResultStreamed" style="document" />
-      <wsdl:input>
-        <wsp:PolicyReference URI="#SlaveHttpEndpoint_StoreFinishedJobResultStreamed_Input_policy" />
-        <soap12:body use="literal" />
-      </wsdl:input>
-      <wsdl:output>
-        <wsp:PolicyReference URI="#SlaveHttpEndpoint_StoreFinishedJobResultStreamed_output_policy" />
-        <soap12:body use="literal" />
-      </wsdl:output>
-    </wsdl:operation>
-    <wsdl:operation name="ProcessSnapshotStreamed">
-      <soap12:operation soapAction="http://tempuri.org/ISlaveFacade/ProcessSnapshotStreamed" style="document" />
-      <wsdl:input>
-        <wsp:PolicyReference URI="#SlaveHttpEndpoint_ProcessSnapshotStreamed_Input_policy" />
-        <soap12:body use="literal" />
-      </wsdl:input>
-      <wsdl:output>
-        <wsp:PolicyReference URI="#SlaveHttpEndpoint_ProcessSnapshotStreamed_output_policy" />
-        <soap12:body use="literal" />
-      </wsdl:output>
-    </wsdl:operation>
-    <wsdl:operation name="AddChildJob">
-      <soap12:operation soapAction="http://tempuri.org/ISlaveFacade/AddChildJob" style="document" />
-      <wsdl:input>
-        <wsp:PolicyReference URI="#SlaveHttpEndpoint_AddChildJob_Input_policy" />
-        <soap12:body use="literal" />
-      </wsdl:input>
-      <wsdl:output>
-        <wsp:PolicyReference URI="#SlaveHttpEndpoint_AddChildJob_output_policy" />
-        <soap12:body use="literal" />
-      </wsdl:output>
-    </wsdl:operation>
-    <wsdl:operation name="PauseJob">
-      <soap12:operation soapAction="http://tempuri.org/ISlaveFacade/PauseJob" style="document" />
-      <wsdl:input>
-        <wsp:PolicyReference URI="#SlaveHttpEndpoint_PauseJob_Input_policy" />
-        <soap12:body use="literal" />
-      </wsdl:input>
-      <wsdl:output>
-        <wsp:PolicyReference URI="#SlaveHttpEndpoint_PauseJob_output_policy" />
-        <soap12:body use="literal" />
-      </wsdl:output>
-    </wsdl:operation>
-    <wsdl:operation name="GetChildJobResults">
-      <soap12:operation soapAction="http://tempuri.org/ISlaveFacade/GetChildJobResults" style="document" />
-      <wsdl:input>
-        <wsp:PolicyReference URI="#SlaveHttpEndpoint_GetChildJobResults_Input_policy" />
-        <soap12:body use="literal" />
-      </wsdl:input>
-      <wsdl:output>
-        <wsp:PolicyReference URI="#SlaveHttpEndpoint_GetChildJobResults_output_policy" />
-        <soap12:body use="literal" />
-      </wsdl:output>
-    </wsdl:operation>
-    <wsdl:operation name="GetLastSerializedResult">
-      <soap12:operation soapAction="http://tempuri.org/ISlaveFacade/GetLastSerializedResult" style="document" />
-      <wsdl:input>
-        <wsp:PolicyReference URI="#SlaveHttpEndpoint_GetLastSerializedResult_Input_policy" />
-        <soap12:body use="literal" />
-      </wsdl:input>
-      <wsdl:output>
-        <wsp:PolicyReference URI="#SlaveHttpEndpoint_GetLastSerializedResult_output_policy" />
-        <soap12:body use="literal" />
-      </wsdl:output>
-    </wsdl:operation>
-  </wsdl:binding>
-  <wsdl:binding name="SlaveTcpStreamedEndpoint" type="tns:ISlaveFacade">
-    <wsp:PolicyReference URI="#SlaveTcpStreamedEndpoint_policy" />
-    <soap12:binding transport="http://schemas.microsoft.com/soap/tcp" />
-    <wsdl:operation name="Login">
-      <soap12:operation soapAction="http://tempuri.org/ISlaveCommunicator/Login" style="document" />
-      <wsdl:input>
-        <soap12:body use="literal" />
-      </wsdl:input>
-      <wsdl:output>
-        <soap12:body use="literal" />
-      </wsdl:output>
-    </wsdl:operation>
-    <wsdl:operation name="ProcessHeartBeat">
-      <soap12:operation soapAction="http://tempuri.org/ISlaveCommunicator/ProcessHeartBeat" style="document" />
-      <wsdl:input>
-        <soap12:body use="literal" />
-      </wsdl:input>
-      <wsdl:output>
-        <soap12:body use="literal" />
-      </wsdl:output>
-    </wsdl:operation>
-    <wsdl:operation name="GetJob">
-      <soap12:operation soapAction="http://tempuri.org/ISlaveCommunicator/GetJob" style="document" />
-      <wsdl:input>
-        <soap12:body use="literal" />
-      </wsdl:input>
-      <wsdl:output>
-        <soap12:body use="literal" />
-      </wsdl:output>
-    </wsdl:operation>
-    <wsdl:operation name="StoreFinishedJobResult">
-      <soap12:operation soapAction="http://tempuri.org/ISlaveCommunicator/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/ISlaveCommunicator/ProcessSnapshot" style="document" />
-      <wsdl:input>
-        <soap12:body use="literal" />
-      </wsdl:input>
-      <wsdl:output>
-        <soap12:body use="literal" />
-      </wsdl:output>
-    </wsdl:operation>
-    <wsdl:operation name="Logout">
-      <soap12:operation soapAction="http://tempuri.org/ISlaveCommunicator/Logout" style="document" />
-      <wsdl:input>
-        <soap12:body use="literal" />
-      </wsdl:input>
-      <wsdl:output>
-        <soap12:body use="literal" />
-      </wsdl:output>
-    </wsdl:operation>
-    <wsdl:operation name="IsJobStillNeeded">
-      <soap12:operation soapAction="http://tempuri.org/ISlaveCommunicator/IsJobStillNeeded" style="document" />
-      <wsdl:input>
-        <soap12:body use="literal" />
-      </wsdl:input>
-      <wsdl:output>
-        <soap12:body use="literal" />
-      </wsdl:output>
-    </wsdl:operation>
-    <wsdl:operation name="GetPlugins">
-      <soap12:operation soapAction="http://tempuri.org/ISlaveCommunicator/GetPlugins" style="document" />
-      <wsdl:input>
-        <soap12:body use="literal" />
-      </wsdl:input>
-      <wsdl:output>
-        <soap12:body use="literal" />
-      </wsdl:output>
-    </wsdl:operation>
-    <wsdl:operation name="GetCalendar">
-      <soap12:operation soapAction="http://tempuri.org/ISlaveCommunicator/GetCalendar" style="document" />
-      <wsdl:input>
-        <soap12:body use="literal" />
-      </wsdl:input>
-      <wsdl:output>
-        <soap12:body use="literal" />
-      </wsdl:output>
-    </wsdl:operation>
-    <wsdl:operation name="SetCalendarStatus">
-      <soap12:operation soapAction="http://tempuri.org/ISlaveCommunicator/SetCalendarStatus" style="document" />
-      <wsdl:input>
-        <soap12:body use="literal" />
-      </wsdl:input>
-      <wsdl:output>
-        <soap12:body use="literal" />
-      </wsdl:output>
-    </wsdl:operation>
-    <wsdl:operation name="GetStreamedJob">
-      <soap12:operation soapAction="http://tempuri.org/ISlaveFacade/GetStreamedJob" style="document" />
-      <wsdl:input>
-        <soap12:body use="literal" />
-      </wsdl:input>
-      <wsdl:output>
-        <soap12:body use="literal" />
-      </wsdl:output>
-    </wsdl:operation>
-    <wsdl:operation name="GetStreamedPlugins">
-      <soap12:operation soapAction="http://tempuri.org/ISlaveFacade/GetStreamedPlugins" style="document" />
-      <wsdl:input>
-        <soap12:body use="literal" />
-      </wsdl:input>
-      <wsdl:output>
-        <soap12:body use="literal" />
-      </wsdl:output>
-    </wsdl:operation>
-    <wsdl:operation name="StoreFinishedJobResultStreamed">
-      <soap12:operation soapAction="http://tempuri.org/ISlaveFacade/StoreFinishedJobResultStreamed" style="document" />
-      <wsdl:input>
-        <soap12:body use="literal" />
-      </wsdl:input>
-      <wsdl:output>
-        <soap12:body use="literal" />
-      </wsdl:output>
-    </wsdl:operation>
-    <wsdl:operation name="ProcessSnapshotStreamed">
-      <soap12:operation soapAction="http://tempuri.org/ISlaveFacade/ProcessSnapshotStreamed" style="document" />
-      <wsdl:input>
-        <soap12:body use="literal" />
-      </wsdl:input>
-      <wsdl:output>
-        <soap12:body use="literal" />
-      </wsdl:output>
-    </wsdl:operation>
-    <wsdl:operation name="AddChildJob">
-      <soap12:operation soapAction="http://tempuri.org/ISlaveFacade/AddChildJob" style="document" />
-      <wsdl:input>
-        <soap12:body use="literal" />
-      </wsdl:input>
-      <wsdl:output>
-        <soap12:body use="literal" />
-      </wsdl:output>
-    </wsdl:operation>
-    <wsdl:operation name="PauseJob">
-      <soap12:operation soapAction="http://tempuri.org/ISlaveFacade/PauseJob" style="document" />
-      <wsdl:input>
-        <soap12:body use="literal" />
-      </wsdl:input>
-      <wsdl:output>
-        <soap12:body use="literal" />
-      </wsdl:output>
-    </wsdl:operation>
-    <wsdl:operation name="GetChildJobResults">
-      <soap12:operation soapAction="http://tempuri.org/ISlaveFacade/GetChildJobResults" style="document" />
-      <wsdl:input>
-        <soap12:body use="literal" />
-      </wsdl:input>
-      <wsdl:output>
-        <soap12:body use="literal" />
-      </wsdl:output>
-    </wsdl:operation>
-    <wsdl:operation name="GetLastSerializedResult">
-      <soap12:operation soapAction="http://tempuri.org/ISlaveFacade/GetLastSerializedResult" 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="SlaveFacade">
-    <wsdl:port name="SlaveHttpEndpoint" binding="tns:SlaveHttpEndpoint">
-      <soap12:address location="http://localhost:9000/SlaveService" />
-      <wsa10:EndpointReference>
-        <wsa10:Address>http://localhost:9000/SlaveService</wsa10:Address>
-        <Identity xmlns="http://schemas.xmlsoap.org/ws/2006/02/addressingidentity">
-          <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
-            <X509Data>
-              <X509Certificate>MIIB7jCCAVugAwIBAgIQb2ZYEwo7H4xBuUFF+8joTjAJBgUrDgMCHQUAMBQxEjAQBgNVBAMTCWxvY2FsaG9zdDAeFw0xMDA4MzAwOTEzMjFaFw0zOTEyMzEyMzU5NTlaMBQxEjAQBgNVBAMTCWxvY2FsaG9zdDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAm4ya4TrUqXxc+dST73X8TFUiqp1oX8462b7cKVbMvA+fPZt0nkugGpVsLZKTwkdgvmuBiqPXuvPaNPgbbjroMqQFqpFIZM//1y71KeSjzQe4oGO4XuJ4DC6eBrFgVmXZfj/INvbefp3XtU4r+nT88eWIHwfZa72c2kuk0/3jWrECAwEAAaNJMEcwRQYDVR0BBD4wPIAQT07kR9e4PDH6Xk/zg1nV7qEWMBQxEjAQBgNVBAMTCWxvY2FsaG9zdIIQb2ZYEwo7H4xBuUFF+8joTjAJBgUrDgMCHQUAA4GBAFKYCuLFMQKsEfHskSvHJss4YTd9cTfP5yjyKPXBE2jb4yVy/Mzuw3lwssogREwJH54SAoUSAJhPz48bxXQdnzrkGN/zh66G2ovhuyEPEhxfgCnce3CV7dIeDpJ8uA6T40JeFfT9pWWhvH1V5qSoaXmfgoQPGP8Twg808y5XkP5m</X509Certificate>
-            </X509Data>
-          </KeyInfo>
-        </Identity>
-      </wsa10:EndpointReference>
-    </wsdl:port>
-    <wsdl:port name="SlaveTcpStreamedEndpoint" binding="tns:SlaveTcpStreamedEndpoint">
-      <soap12:address location="net.tcp://localhost:9001/SlaveServiceStreamed" />
-      <wsa10:EndpointReference>
-        <wsa10:Address>net.tcp://localhost:9001/SlaveServiceStreamed</wsa10:Address>
-        <Identity xmlns="http://schemas.xmlsoap.org/ws/2006/02/addressingidentity">
-          <Dns>localhost</Dns>
-        </Identity>
-      </wsa10:EndpointReference>
-    </wsdl:port>
-  </wsdl:service>
-</wsdl:definitions>
Index: anches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveFacade/service.xsd
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveFacade/service.xsd	(revision 4422)
+++ 	(revision )
@@ -1,271 +1,0 @@
-﻿<?xml version="1.0" encoding="utf-8"?>
-<xs:schema xmlns:tns="http://tempuri.org/" elementFormDefault="qualified" targetNamespace="http://tempuri.org/" xmlns:xs="http://www.w3.org/2001/XMLSchema">
-  <xs:import namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.BusinessObjects" />
-  <xs:import namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.ResponseObjects" />
-  <xs:import namespace="http://schemas.microsoft.com/2003/10/Serialization/" />
-  <xs:import namespace="http://schemas.microsoft.com/Message" />
-  <xs:element name="Login">
-    <xs:complexType>
-      <xs:sequence>
-        <xs:element xmlns:q1="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.BusinessObjects" minOccurs="0" name="slave" nillable="true" type="q1:SlaveDto" />
-      </xs:sequence>
-    </xs:complexType>
-  </xs:element>
-  <xs:element name="LoginResponse">
-    <xs:complexType>
-      <xs:sequence>
-        <xs:element xmlns:q2="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.ResponseObjects" minOccurs="0" name="LoginResult" nillable="true" type="q2:Response" />
-      </xs:sequence>
-    </xs:complexType>
-  </xs:element>
-  <xs:element name="ProcessHeartBeat">
-    <xs:complexType>
-      <xs:sequence>
-        <xs:element xmlns:q3="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.BusinessObjects" minOccurs="0" name="hbData" nillable="true" type="q3:HeartBeatData" />
-      </xs:sequence>
-    </xs:complexType>
-  </xs:element>
-  <xs:element name="ProcessHeartBeatResponse">
-    <xs:complexType>
-      <xs:sequence>
-        <xs:element xmlns:q4="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.ResponseObjects" minOccurs="0" name="ProcessHeartBeatResult" nillable="true" type="q4:ResponseHeartBeat" />
-      </xs:sequence>
-    </xs:complexType>
-  </xs:element>
-  <xs:element name="GetJob">
-    <xs:complexType>
-      <xs:sequence>
-        <xs:element xmlns:q5="http://schemas.microsoft.com/2003/10/Serialization/" minOccurs="0" name="clientId" type="q5:guid" />
-      </xs:sequence>
-    </xs:complexType>
-  </xs:element>
-  <xs:element name="GetJobResponse">
-    <xs:complexType>
-      <xs:sequence>
-        <xs:element xmlns:q6="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.ResponseObjects" minOccurs="0" name="GetJobResult" nillable="true" type="q6:ResponseObjectOfJobDtoZAa7YIsz" />
-      </xs:sequence>
-    </xs:complexType>
-  </xs:element>
-  <xs:element name="StoreFinishedJobResult">
-    <xs:complexType>
-      <xs:sequence>
-        <xs:element xmlns:q7="http://schemas.microsoft.com/2003/10/Serialization/" minOccurs="0" name="clientId" type="q7:guid" />
-        <xs:element xmlns:q8="http://schemas.microsoft.com/2003/10/Serialization/" minOccurs="0" name="jobId" type="q8:guid" />
-        <xs:element minOccurs="0" name="result" nillable="true" type="xs:base64Binary" />
-        <xs:element minOccurs="0" name="percentage" type="xs:double" />
-        <xs:element minOccurs="0" name="exception" nillable="true" type="xs:string" />
-      </xs:sequence>
-    </xs:complexType>
-  </xs:element>
-  <xs:element name="StoreFinishedJobResultResponse">
-    <xs:complexType>
-      <xs:sequence>
-        <xs:element xmlns:q9="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.ResponseObjects" 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 xmlns:q11="http://schemas.microsoft.com/2003/10/Serialization/" minOccurs="0" name="jobId" type="q11:guid" />
-        <xs:element minOccurs="0" name="result" nillable="true" type="xs:base64Binary" />
-        <xs:element minOccurs="0" name="percentage" type="xs:double" />
-        <xs:element minOccurs="0" name="exception" nillable="true" type="xs:string" />
-      </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.ResponseObjects" minOccurs="0" name="ProcessSnapshotResult" nillable="true" type="q12:ResponseResultReceived" />
-      </xs:sequence>
-    </xs:complexType>
-  </xs:element>
-  <xs:element name="Logout">
-    <xs:complexType>
-      <xs:sequence>
-        <xs:element xmlns:q13="http://schemas.microsoft.com/2003/10/Serialization/" minOccurs="0" name="clientId" type="q13:guid" />
-      </xs:sequence>
-    </xs:complexType>
-  </xs:element>
-  <xs:element name="LogoutResponse">
-    <xs:complexType>
-      <xs:sequence>
-        <xs:element xmlns:q14="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.ResponseObjects" 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 xmlns:q15="http://schemas.microsoft.com/2003/10/Serialization/" minOccurs="0" name="jobId" type="q15:guid" />
-      </xs:sequence>
-    </xs:complexType>
-  </xs:element>
-  <xs:element name="IsJobStillNeededResponse">
-    <xs:complexType>
-      <xs:sequence>
-        <xs:element xmlns:q16="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.ResponseObjects" minOccurs="0" name="IsJobStillNeededResult" nillable="true" type="q16:Response" />
-      </xs:sequence>
-    </xs:complexType>
-  </xs:element>
-  <xs:element name="GetPlugins">
-    <xs:complexType>
-      <xs:sequence>
-        <xs:element xmlns:q17="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.BusinessObjects" minOccurs="0" name="pluginList" nillable="true" type="q17:ArrayOfHivePluginInfoDto" />
-      </xs:sequence>
-    </xs:complexType>
-  </xs:element>
-  <xs:element name="GetPluginsResponse">
-    <xs:complexType>
-      <xs:sequence>
-        <xs:element xmlns:q18="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.ResponseObjects" minOccurs="0" name="GetPluginsResult" nillable="true" type="q18:ResponseListOfCachedHivePluginInfoDtoZMwZop09" />
-      </xs:sequence>
-    </xs:complexType>
-  </xs:element>
-  <xs:element name="GetCalendar">
-    <xs:complexType>
-      <xs:sequence>
-        <xs:element xmlns:q19="http://schemas.microsoft.com/2003/10/Serialization/" minOccurs="0" name="clientId" type="q19:guid" />
-      </xs:sequence>
-    </xs:complexType>
-  </xs:element>
-  <xs:element name="GetCalendarResponse">
-    <xs:complexType>
-      <xs:sequence>
-        <xs:element xmlns:q20="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.ResponseObjects" minOccurs="0" name="GetCalendarResult" nillable="true" type="q20:ResponseCalendar" />
-      </xs:sequence>
-    </xs:complexType>
-  </xs:element>
-  <xs:element name="SetCalendarStatus">
-    <xs:complexType>
-      <xs:sequence>
-        <xs:element xmlns:q21="http://schemas.microsoft.com/2003/10/Serialization/" minOccurs="0" name="clientId" type="q21:guid" />
-        <xs:element xmlns:q22="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.BusinessObjects" minOccurs="0" name="state" type="q22:CalendarState" />
-      </xs:sequence>
-    </xs:complexType>
-  </xs:element>
-  <xs:element name="SetCalendarStatusResponse">
-    <xs:complexType>
-      <xs:sequence>
-        <xs:element xmlns:q23="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.ResponseObjects" minOccurs="0" name="SetCalendarStatusResult" nillable="true" type="q23:Response" />
-      </xs:sequence>
-    </xs:complexType>
-  </xs:element>
-  <xs:element name="GetStreamedJob">
-    <xs:complexType>
-      <xs:sequence>
-        <xs:element xmlns:q24="http://schemas.microsoft.com/2003/10/Serialization/" minOccurs="0" name="clientId" type="q24:guid" />
-      </xs:sequence>
-    </xs:complexType>
-  </xs:element>
-  <xs:element name="GetStreamedJobResponse">
-    <xs:complexType>
-      <xs:sequence>
-        <xs:element xmlns:q25="http://schemas.microsoft.com/Message" name="GetStreamedJobResult" type="q25:StreamBody" />
-      </xs:sequence>
-    </xs:complexType>
-  </xs:element>
-  <xs:element name="GetStreamedPlugins">
-    <xs:complexType>
-      <xs:sequence>
-        <xs:element xmlns:q26="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.BusinessObjects" minOccurs="0" name="pluginList" nillable="true" type="q26:ArrayOfHivePluginInfoDto" />
-      </xs:sequence>
-    </xs:complexType>
-  </xs:element>
-  <xs:element name="GetStreamedPluginsResponse">
-    <xs:complexType>
-      <xs:sequence>
-        <xs:element xmlns:q27="http://schemas.microsoft.com/Message" name="GetStreamedPluginsResult" type="q27:StreamBody" />
-      </xs:sequence>
-    </xs:complexType>
-  </xs:element>
-  <xs:element name="StoreFinishedJobResultStreamed">
-    <xs:complexType>
-      <xs:sequence>
-        <xs:element xmlns:q28="http://schemas.microsoft.com/Message" name="stream" type="q28:StreamBody" />
-      </xs:sequence>
-    </xs:complexType>
-  </xs:element>
-  <xs:element name="StoreFinishedJobResultStreamedResponse">
-    <xs:complexType>
-      <xs:sequence>
-        <xs:element xmlns:q29="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.ResponseObjects" minOccurs="0" name="StoreFinishedJobResultStreamedResult" nillable="true" type="q29:ResponseResultReceived" />
-      </xs:sequence>
-    </xs:complexType>
-  </xs:element>
-  <xs:element name="ProcessSnapshotStreamed">
-    <xs:complexType>
-      <xs:sequence>
-        <xs:element xmlns:q30="http://schemas.microsoft.com/Message" name="stream" type="q30:StreamBody" />
-      </xs:sequence>
-    </xs:complexType>
-  </xs:element>
-  <xs:element name="ProcessSnapshotStreamedResponse">
-    <xs:complexType>
-      <xs:sequence>
-        <xs:element xmlns:q31="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.ResponseObjects" minOccurs="0" name="ProcessSnapshotStreamedResult" nillable="true" type="q31:ResponseResultReceived" />
-      </xs:sequence>
-    </xs:complexType>
-  </xs:element>
-  <xs:element name="AddChildJob">
-    <xs:complexType>
-      <xs:sequence>
-        <xs:element xmlns:q32="http://schemas.microsoft.com/2003/10/Serialization/" minOccurs="0" name="parentJobId" type="q32:guid" />
-        <xs:element xmlns:q33="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.BusinessObjects" minOccurs="0" name="serializedJob" nillable="true" type="q33:SerializedJob" />
-      </xs:sequence>
-    </xs:complexType>
-  </xs:element>
-  <xs:element name="AddChildJobResponse">
-    <xs:complexType>
-      <xs:sequence>
-        <xs:element xmlns:q34="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.ResponseObjects" minOccurs="0" name="AddChildJobResult" nillable="true" type="q34:ResponseObjectOfJobDtoZAa7YIsz" />
-      </xs:sequence>
-    </xs:complexType>
-  </xs:element>
-  <xs:element name="PauseJob">
-    <xs:complexType>
-      <xs:sequence>
-        <xs:element xmlns:q35="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.BusinessObjects" minOccurs="0" name="serializedJob" nillable="true" type="q35:SerializedJob" />
-      </xs:sequence>
-    </xs:complexType>
-  </xs:element>
-  <xs:element name="PauseJobResponse">
-    <xs:complexType>
-      <xs:sequence>
-        <xs:element xmlns:q36="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.ResponseObjects" minOccurs="0" name="PauseJobResult" nillable="true" type="q36:ResponseObjectOfJobDtoZAa7YIsz" />
-      </xs:sequence>
-    </xs:complexType>
-  </xs:element>
-  <xs:element name="GetChildJobResults">
-    <xs:complexType>
-      <xs:sequence>
-        <xs:element xmlns:q37="http://schemas.microsoft.com/2003/10/Serialization/" minOccurs="0" name="parentJobId" nillable="true" type="q37:guid" />
-        <xs:element minOccurs="0" name="recursive" type="xs:boolean" />
-        <xs:element minOccurs="0" name="includeParent" type="xs:boolean" />
-      </xs:sequence>
-    </xs:complexType>
-  </xs:element>
-  <xs:element name="GetChildJobResultsResponse">
-    <xs:complexType>
-      <xs:sequence>
-        <xs:element xmlns:q38="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.BusinessObjects" minOccurs="0" name="GetChildJobResultsResult" nillable="true" type="q38:ArrayOfJobResult" />
-      </xs:sequence>
-    </xs:complexType>
-  </xs:element>
-  <xs:element name="GetLastSerializedResult">
-    <xs:complexType>
-      <xs:sequence>
-        <xs:element xmlns:q39="http://schemas.microsoft.com/2003/10/Serialization/" minOccurs="0" name="jobId" type="q39:guid" />
-      </xs:sequence>
-    </xs:complexType>
-  </xs:element>
-  <xs:element name="GetLastSerializedResultResponse">
-    <xs:complexType>
-      <xs:sequence>
-        <xs:element xmlns:q40="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.BusinessObjects" minOccurs="0" name="GetLastSerializedResultResult" nillable="true" type="q40:SerializedJob" />
-      </xs:sequence>
-    </xs:complexType>
-  </xs:element>
-</xs:schema>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveFacade/service1.wsdl
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveFacade/service1.wsdl	(revision 4423)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveFacade/service1.wsdl	(revision 4423)
@@ -0,0 +1,1574 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<wsdl:definitions xmlns:wsap="http://schemas.xmlsoap.org/ws/2004/08/addressing/policy" xmlns:wsa10="http://www.w3.org/2005/08/addressing" xmlns:tns="http://tempuri.org/" xmlns:msc="http://schemas.microsoft.com/ws/2005/12/wsdl/contract" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="SlaveFacade" targetNamespace="http://tempuri.org/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
+  <wsp:Policy wsu:Id="SlaveHttpEndpoint_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SymmetricBinding xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <wsp:Policy>
+            <sp:ProtectionToken>
+              <wsp:Policy>
+                <sp:SecureConversationToken sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient">
+                  <wsp:Policy>
+                    <sp:RequireDerivedKeys />
+                    <sp:BootstrapPolicy>
+                      <wsp:Policy>
+                        <sp:SignedParts>
+                          <sp:Body />
+                          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+                          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+                          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+                          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+                          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+                          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+                          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+                        </sp:SignedParts>
+                        <sp:EncryptedParts>
+                          <sp:Body />
+                        </sp:EncryptedParts>
+                        <sp:SymmetricBinding>
+                          <wsp:Policy>
+                            <sp:ProtectionToken>
+                              <wsp:Policy>
+                                <mssp:SslContextToken sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient" xmlns:mssp="http://schemas.microsoft.com/ws/2005/07/securitypolicy">
+                                  <wsp:Policy>
+                                    <sp:RequireDerivedKeys />
+                                  </wsp:Policy>
+                                </mssp:SslContextToken>
+                              </wsp:Policy>
+                            </sp:ProtectionToken>
+                            <sp:AlgorithmSuite>
+                              <wsp:Policy>
+                                <sp:Basic256 />
+                              </wsp:Policy>
+                            </sp:AlgorithmSuite>
+                            <sp:Layout>
+                              <wsp:Policy>
+                                <sp:Strict />
+                              </wsp:Policy>
+                            </sp:Layout>
+                            <sp:IncludeTimestamp />
+                            <sp:EncryptSignature />
+                            <sp:OnlySignEntireHeadersAndBody />
+                          </wsp:Policy>
+                        </sp:SymmetricBinding>
+                        <sp:SignedSupportingTokens>
+                          <wsp:Policy>
+                            <sp:UsernameToken sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient">
+                              <wsp:Policy>
+                                <sp:WssUsernameToken10 />
+                              </wsp:Policy>
+                            </sp:UsernameToken>
+                          </wsp:Policy>
+                        </sp:SignedSupportingTokens>
+                        <sp:Wss11>
+                          <wsp:Policy>
+                            <sp:MustSupportRefKeyIdentifier />
+                            <sp:MustSupportRefIssuerSerial />
+                            <sp:MustSupportRefThumbprint />
+                            <sp:MustSupportRefEncryptedKey />
+                          </wsp:Policy>
+                        </sp:Wss11>
+                        <sp:Trust10>
+                          <wsp:Policy>
+                            <sp:MustSupportIssuedTokens />
+                            <sp:RequireClientEntropy />
+                            <sp:RequireServerEntropy />
+                          </wsp:Policy>
+                        </sp:Trust10>
+                      </wsp:Policy>
+                    </sp:BootstrapPolicy>
+                  </wsp:Policy>
+                </sp:SecureConversationToken>
+              </wsp:Policy>
+            </sp:ProtectionToken>
+            <sp:AlgorithmSuite>
+              <wsp:Policy>
+                <sp:Basic256 />
+              </wsp:Policy>
+            </sp:AlgorithmSuite>
+            <sp:Layout>
+              <wsp:Policy>
+                <sp:Strict />
+              </wsp:Policy>
+            </sp:Layout>
+            <sp:IncludeTimestamp />
+            <sp:EncryptSignature />
+            <sp:OnlySignEntireHeadersAndBody />
+          </wsp:Policy>
+        </sp:SymmetricBinding>
+        <sp:Wss11 xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <wsp:Policy>
+            <sp:MustSupportRefKeyIdentifier />
+            <sp:MustSupportRefIssuerSerial />
+            <sp:MustSupportRefThumbprint />
+            <sp:MustSupportRefEncryptedKey />
+          </wsp:Policy>
+        </sp:Wss11>
+        <sp:Trust10 xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <wsp:Policy>
+            <sp:MustSupportIssuedTokens />
+            <sp:RequireClientEntropy />
+            <sp:RequireServerEntropy />
+          </wsp:Policy>
+        </sp:Trust10>
+        <wsaw:UsingAddressing />
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="SlaveHttpEndpoint_Login_Input_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="SlaveHttpEndpoint_Login_output_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="SlaveHttpEndpoint_ProcessHeartBeat_Input_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="SlaveHttpEndpoint_ProcessHeartBeat_output_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="SlaveHttpEndpoint_GetJob_Input_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="SlaveHttpEndpoint_GetJob_output_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="SlaveHttpEndpoint_StoreFinishedJobResult_Input_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="SlaveHttpEndpoint_StoreFinishedJobResult_output_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="SlaveHttpEndpoint_ProcessSnapshot_Input_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="SlaveHttpEndpoint_ProcessSnapshot_output_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="SlaveHttpEndpoint_Logout_Input_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="SlaveHttpEndpoint_Logout_output_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="SlaveHttpEndpoint_IsJobStillNeeded_Input_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="SlaveHttpEndpoint_IsJobStillNeeded_output_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="SlaveHttpEndpoint_GetPlugins_Input_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="SlaveHttpEndpoint_GetPlugins_output_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="SlaveHttpEndpoint_GetCalendar_Input_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="SlaveHttpEndpoint_GetCalendar_output_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="SlaveHttpEndpoint_SetCalendarStatus_Input_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="SlaveHttpEndpoint_SetCalendarStatus_output_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="SlaveHttpEndpoint_GetStreamedJob_Input_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="SlaveHttpEndpoint_GetStreamedJob_output_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="SlaveHttpEndpoint_GetStreamedPlugins_Input_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="SlaveHttpEndpoint_GetStreamedPlugins_output_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="SlaveHttpEndpoint_StoreFinishedJobResultStreamed_Input_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="SlaveHttpEndpoint_StoreFinishedJobResultStreamed_output_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="SlaveHttpEndpoint_ProcessSnapshotStreamed_Input_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="SlaveHttpEndpoint_ProcessSnapshotStreamed_output_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="SlaveHttpEndpoint_AddChildJob_Input_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="SlaveHttpEndpoint_AddChildJob_output_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="SlaveHttpEndpoint_PauseJob_Input_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="SlaveHttpEndpoint_PauseJob_output_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="SlaveHttpEndpoint_GetChildJobResults_Input_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="SlaveHttpEndpoint_GetChildJobResults_output_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="SlaveHttpEndpoint_GetLastSerializedResult_Input_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="SlaveHttpEndpoint_GetLastSerializedResult_output_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="SlaveHttpEndpoint_DeleteChildJobs_Input_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="SlaveHttpEndpoint_DeleteChildJobs_output_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="SlaveTcpStreamedEndpoint_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <msb:BinaryEncoding xmlns:msb="http://schemas.microsoft.com/ws/06/2004/mspolicy/netbinary1" />
+        <sp:TransportBinding xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <wsp:Policy>
+            <sp:TransportToken>
+              <wsp:Policy>
+                <msf:SslTransportSecurity xmlns:msf="http://schemas.microsoft.com/ws/2006/05/framing/policy" />
+              </wsp:Policy>
+            </sp:TransportToken>
+            <sp:AlgorithmSuite>
+              <wsp:Policy>
+                <sp:Basic256 />
+              </wsp:Policy>
+            </sp:AlgorithmSuite>
+            <sp:Layout>
+              <wsp:Policy>
+                <sp:Strict />
+              </wsp:Policy>
+            </sp:Layout>
+            <sp:IncludeTimestamp />
+          </wsp:Policy>
+        </sp:TransportBinding>
+        <sp:EndorsingSupportingTokens xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <wsp:Policy>
+            <sp:SecureConversationToken sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient">
+              <wsp:Policy>
+                <sp:BootstrapPolicy>
+                  <wsp:Policy>
+                    <sp:SignedParts>
+                      <sp:Body />
+                      <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+                      <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+                      <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+                      <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+                      <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+                      <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+                      <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+                    </sp:SignedParts>
+                    <sp:EncryptedParts>
+                      <sp:Body />
+                    </sp:EncryptedParts>
+                    <sp:TransportBinding>
+                      <wsp:Policy>
+                        <sp:TransportToken>
+                          <wsp:Policy>
+                            <msf:SslTransportSecurity xmlns:msf="http://schemas.microsoft.com/ws/2006/05/framing/policy" />
+                          </wsp:Policy>
+                        </sp:TransportToken>
+                        <sp:AlgorithmSuite>
+                          <wsp:Policy>
+                            <sp:Basic256 />
+                          </wsp:Policy>
+                        </sp:AlgorithmSuite>
+                        <sp:Layout>
+                          <wsp:Policy>
+                            <sp:Strict />
+                          </wsp:Policy>
+                        </sp:Layout>
+                        <sp:IncludeTimestamp />
+                      </wsp:Policy>
+                    </sp:TransportBinding>
+                    <sp:SignedSupportingTokens>
+                      <wsp:Policy>
+                        <sp:UsernameToken sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient">
+                          <wsp:Policy>
+                            <sp:WssUsernameToken10 />
+                          </wsp:Policy>
+                        </sp:UsernameToken>
+                      </wsp:Policy>
+                    </sp:SignedSupportingTokens>
+                    <sp:Wss11>
+                      <wsp:Policy>
+                        <sp:MustSupportRefKeyIdentifier />
+                        <sp:MustSupportRefIssuerSerial />
+                        <sp:MustSupportRefThumbprint />
+                        <sp:MustSupportRefEncryptedKey />
+                      </wsp:Policy>
+                    </sp:Wss11>
+                    <sp:Trust10>
+                      <wsp:Policy>
+                        <sp:MustSupportIssuedTokens />
+                        <sp:RequireClientEntropy />
+                        <sp:RequireServerEntropy />
+                      </wsp:Policy>
+                    </sp:Trust10>
+                  </wsp:Policy>
+                </sp:BootstrapPolicy>
+              </wsp:Policy>
+            </sp:SecureConversationToken>
+            <sp:SignedParts>
+              <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+            </sp:SignedParts>
+          </wsp:Policy>
+        </sp:EndorsingSupportingTokens>
+        <sp:Wss11 xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <wsp:Policy>
+            <sp:MustSupportRefKeyIdentifier />
+            <sp:MustSupportRefIssuerSerial />
+            <sp:MustSupportRefThumbprint />
+            <sp:MustSupportRefEncryptedKey />
+          </wsp:Policy>
+        </sp:Wss11>
+        <sp:Trust10 xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <wsp:Policy>
+            <sp:MustSupportIssuedTokens />
+            <sp:RequireClientEntropy />
+            <sp:RequireServerEntropy />
+          </wsp:Policy>
+        </sp:Trust10>
+        <msf:Streamed xmlns:msf="http://schemas.microsoft.com/ws/2006/05/framing/policy" />
+        <wsaw:UsingAddressing />
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsdl:types>
+    <xsd:schema targetNamespace="http://tempuri.org/Imports">
+      <xsd:import namespace="http://tempuri.org/" />
+      <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.ResponseObjects" />
+      <xsd:import namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts" />
+      <xsd:import namespace="http://schemas.microsoft.com/2003/10/Serialization/Arrays" />
+      <xsd:import namespace="http://schemas.datacontract.org/2004/07/System" />
+      <xsd:import namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.PluginInfrastructure" />
+      <xsd:import namespace="http://schemas.microsoft.com/Message" />
+    </xsd:schema>
+  </wsdl:types>
+  <wsdl:message name="ISlaveFacade_Login_InputMessage">
+    <wsdl:part name="parameters" element="tns:Login" />
+  </wsdl:message>
+  <wsdl:message name="ISlaveFacade_Login_OutputMessage">
+    <wsdl:part name="parameters" element="tns:LoginResponse" />
+  </wsdl:message>
+  <wsdl:message name="ISlaveFacade_ProcessHeartBeat_InputMessage">
+    <wsdl:part name="parameters" element="tns:ProcessHeartBeat" />
+  </wsdl:message>
+  <wsdl:message name="ISlaveFacade_ProcessHeartBeat_OutputMessage">
+    <wsdl:part name="parameters" element="tns:ProcessHeartBeatResponse" />
+  </wsdl:message>
+  <wsdl:message name="ISlaveFacade_GetJob_InputMessage">
+    <wsdl:part name="parameters" element="tns:GetJob" />
+  </wsdl:message>
+  <wsdl:message name="ISlaveFacade_GetJob_OutputMessage">
+    <wsdl:part name="parameters" element="tns:GetJobResponse" />
+  </wsdl:message>
+  <wsdl:message name="ISlaveFacade_StoreFinishedJobResult_InputMessage">
+    <wsdl:part name="parameters" element="tns:StoreFinishedJobResult" />
+  </wsdl:message>
+  <wsdl:message name="ISlaveFacade_StoreFinishedJobResult_OutputMessage">
+    <wsdl:part name="parameters" element="tns:StoreFinishedJobResultResponse" />
+  </wsdl:message>
+  <wsdl:message name="ISlaveFacade_ProcessSnapshot_InputMessage">
+    <wsdl:part name="parameters" element="tns:ProcessSnapshot" />
+  </wsdl:message>
+  <wsdl:message name="ISlaveFacade_ProcessSnapshot_OutputMessage">
+    <wsdl:part name="parameters" element="tns:ProcessSnapshotResponse" />
+  </wsdl:message>
+  <wsdl:message name="ISlaveFacade_Logout_InputMessage">
+    <wsdl:part name="parameters" element="tns:Logout" />
+  </wsdl:message>
+  <wsdl:message name="ISlaveFacade_Logout_OutputMessage">
+    <wsdl:part name="parameters" element="tns:LogoutResponse" />
+  </wsdl:message>
+  <wsdl:message name="ISlaveFacade_IsJobStillNeeded_InputMessage">
+    <wsdl:part name="parameters" element="tns:IsJobStillNeeded" />
+  </wsdl:message>
+  <wsdl:message name="ISlaveFacade_IsJobStillNeeded_OutputMessage">
+    <wsdl:part name="parameters" element="tns:IsJobStillNeededResponse" />
+  </wsdl:message>
+  <wsdl:message name="ISlaveFacade_GetPlugins_InputMessage">
+    <wsdl:part name="parameters" element="tns:GetPlugins" />
+  </wsdl:message>
+  <wsdl:message name="ISlaveFacade_GetPlugins_OutputMessage">
+    <wsdl:part name="parameters" element="tns:GetPluginsResponse" />
+  </wsdl:message>
+  <wsdl:message name="ISlaveFacade_GetCalendar_InputMessage">
+    <wsdl:part name="parameters" element="tns:GetCalendar" />
+  </wsdl:message>
+  <wsdl:message name="ISlaveFacade_GetCalendar_OutputMessage">
+    <wsdl:part name="parameters" element="tns:GetCalendarResponse" />
+  </wsdl:message>
+  <wsdl:message name="ISlaveFacade_SetCalendarStatus_InputMessage">
+    <wsdl:part name="parameters" element="tns:SetCalendarStatus" />
+  </wsdl:message>
+  <wsdl:message name="ISlaveFacade_SetCalendarStatus_OutputMessage">
+    <wsdl:part name="parameters" element="tns:SetCalendarStatusResponse" />
+  </wsdl:message>
+  <wsdl:message name="ISlaveFacade_GetStreamedJob_InputMessage">
+    <wsdl:part name="parameters" element="tns:GetStreamedJob" />
+  </wsdl:message>
+  <wsdl:message name="ISlaveFacade_GetStreamedJob_OutputMessage">
+    <wsdl:part name="parameters" element="tns:GetStreamedJobResponse" />
+  </wsdl:message>
+  <wsdl:message name="ISlaveFacade_GetStreamedPlugins_InputMessage">
+    <wsdl:part name="parameters" element="tns:GetStreamedPlugins" />
+  </wsdl:message>
+  <wsdl:message name="ISlaveFacade_GetStreamedPlugins_OutputMessage">
+    <wsdl:part name="parameters" element="tns:GetStreamedPluginsResponse" />
+  </wsdl:message>
+  <wsdl:message name="ISlaveFacade_StoreFinishedJobResultStreamed_InputMessage">
+    <wsdl:part name="parameters" element="tns:StoreFinishedJobResultStreamed" />
+  </wsdl:message>
+  <wsdl:message name="ISlaveFacade_StoreFinishedJobResultStreamed_OutputMessage">
+    <wsdl:part name="parameters" element="tns:StoreFinishedJobResultStreamedResponse" />
+  </wsdl:message>
+  <wsdl:message name="ISlaveFacade_ProcessSnapshotStreamed_InputMessage">
+    <wsdl:part name="parameters" element="tns:ProcessSnapshotStreamed" />
+  </wsdl:message>
+  <wsdl:message name="ISlaveFacade_ProcessSnapshotStreamed_OutputMessage">
+    <wsdl:part name="parameters" element="tns:ProcessSnapshotStreamedResponse" />
+  </wsdl:message>
+  <wsdl:message name="ISlaveFacade_AddChildJob_InputMessage">
+    <wsdl:part name="parameters" element="tns:AddChildJob" />
+  </wsdl:message>
+  <wsdl:message name="ISlaveFacade_AddChildJob_OutputMessage">
+    <wsdl:part name="parameters" element="tns:AddChildJobResponse" />
+  </wsdl:message>
+  <wsdl:message name="ISlaveFacade_PauseJob_InputMessage">
+    <wsdl:part name="parameters" element="tns:PauseJob" />
+  </wsdl:message>
+  <wsdl:message name="ISlaveFacade_PauseJob_OutputMessage">
+    <wsdl:part name="parameters" element="tns:PauseJobResponse" />
+  </wsdl:message>
+  <wsdl:message name="ISlaveFacade_GetChildJobResults_InputMessage">
+    <wsdl:part name="parameters" element="tns:GetChildJobResults" />
+  </wsdl:message>
+  <wsdl:message name="ISlaveFacade_GetChildJobResults_OutputMessage">
+    <wsdl:part name="parameters" element="tns:GetChildJobResultsResponse" />
+  </wsdl:message>
+  <wsdl:message name="ISlaveFacade_GetLastSerializedResult_InputMessage">
+    <wsdl:part name="parameters" element="tns:GetLastSerializedResult" />
+  </wsdl:message>
+  <wsdl:message name="ISlaveFacade_GetLastSerializedResult_OutputMessage">
+    <wsdl:part name="parameters" element="tns:GetLastSerializedResultResponse" />
+  </wsdl:message>
+  <wsdl:message name="ISlaveFacade_DeleteChildJobs_InputMessage">
+    <wsdl:part name="parameters" element="tns:DeleteChildJobs" />
+  </wsdl:message>
+  <wsdl:message name="ISlaveFacade_DeleteChildJobs_OutputMessage">
+    <wsdl:part name="parameters" element="tns:DeleteChildJobsResponse" />
+  </wsdl:message>
+  <wsdl:portType name="ISlaveFacade">
+    <wsdl:operation name="Login">
+      <wsdl:input wsaw:Action="http://tempuri.org/ISlaveCommunicator/Login" message="tns:ISlaveFacade_Login_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/ISlaveCommunicator/LoginResponse" message="tns:ISlaveFacade_Login_OutputMessage" />
+    </wsdl:operation>
+    <wsdl:operation name="ProcessHeartBeat">
+      <wsdl:input wsaw:Action="http://tempuri.org/ISlaveCommunicator/ProcessHeartBeat" message="tns:ISlaveFacade_ProcessHeartBeat_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/ISlaveCommunicator/ProcessHeartBeatResponse" message="tns:ISlaveFacade_ProcessHeartBeat_OutputMessage" />
+    </wsdl:operation>
+    <wsdl:operation name="GetJob">
+      <wsdl:input wsaw:Action="http://tempuri.org/ISlaveCommunicator/GetJob" message="tns:ISlaveFacade_GetJob_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/ISlaveCommunicator/GetJobResponse" message="tns:ISlaveFacade_GetJob_OutputMessage" />
+    </wsdl:operation>
+    <wsdl:operation name="StoreFinishedJobResult">
+      <wsdl:input wsaw:Action="http://tempuri.org/ISlaveCommunicator/StoreFinishedJobResult" message="tns:ISlaveFacade_StoreFinishedJobResult_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/ISlaveCommunicator/StoreFinishedJobResultResponse" message="tns:ISlaveFacade_StoreFinishedJobResult_OutputMessage" />
+    </wsdl:operation>
+    <wsdl:operation name="ProcessSnapshot">
+      <wsdl:input wsaw:Action="http://tempuri.org/ISlaveCommunicator/ProcessSnapshot" message="tns:ISlaveFacade_ProcessSnapshot_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/ISlaveCommunicator/ProcessSnapshotResponse" message="tns:ISlaveFacade_ProcessSnapshot_OutputMessage" />
+    </wsdl:operation>
+    <wsdl:operation name="Logout">
+      <wsdl:input wsaw:Action="http://tempuri.org/ISlaveCommunicator/Logout" message="tns:ISlaveFacade_Logout_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/ISlaveCommunicator/LogoutResponse" message="tns:ISlaveFacade_Logout_OutputMessage" />
+    </wsdl:operation>
+    <wsdl:operation name="IsJobStillNeeded">
+      <wsdl:input wsaw:Action="http://tempuri.org/ISlaveCommunicator/IsJobStillNeeded" message="tns:ISlaveFacade_IsJobStillNeeded_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/ISlaveCommunicator/IsJobStillNeededResponse" message="tns:ISlaveFacade_IsJobStillNeeded_OutputMessage" />
+    </wsdl:operation>
+    <wsdl:operation name="GetPlugins">
+      <wsdl:input wsaw:Action="http://tempuri.org/ISlaveCommunicator/GetPlugins" message="tns:ISlaveFacade_GetPlugins_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/ISlaveCommunicator/GetPluginsResponse" message="tns:ISlaveFacade_GetPlugins_OutputMessage" />
+    </wsdl:operation>
+    <wsdl:operation name="GetCalendar">
+      <wsdl:input wsaw:Action="http://tempuri.org/ISlaveCommunicator/GetCalendar" message="tns:ISlaveFacade_GetCalendar_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/ISlaveCommunicator/GetCalendarResponse" message="tns:ISlaveFacade_GetCalendar_OutputMessage" />
+    </wsdl:operation>
+    <wsdl:operation name="SetCalendarStatus">
+      <wsdl:input wsaw:Action="http://tempuri.org/ISlaveCommunicator/SetCalendarStatus" message="tns:ISlaveFacade_SetCalendarStatus_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/ISlaveCommunicator/SetCalendarStatusResponse" message="tns:ISlaveFacade_SetCalendarStatus_OutputMessage" />
+    </wsdl:operation>
+    <wsdl:operation name="GetStreamedJob">
+      <wsdl:input wsaw:Action="http://tempuri.org/ISlaveFacade/GetStreamedJob" message="tns:ISlaveFacade_GetStreamedJob_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/ISlaveFacade/GetStreamedJobResponse" message="tns:ISlaveFacade_GetStreamedJob_OutputMessage" />
+    </wsdl:operation>
+    <wsdl:operation name="GetStreamedPlugins">
+      <wsdl:input wsaw:Action="http://tempuri.org/ISlaveFacade/GetStreamedPlugins" message="tns:ISlaveFacade_GetStreamedPlugins_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/ISlaveFacade/GetStreamedPluginsResponse" message="tns:ISlaveFacade_GetStreamedPlugins_OutputMessage" />
+    </wsdl:operation>
+    <wsdl:operation name="StoreFinishedJobResultStreamed">
+      <wsdl:input wsaw:Action="http://tempuri.org/ISlaveFacade/StoreFinishedJobResultStreamed" message="tns:ISlaveFacade_StoreFinishedJobResultStreamed_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/ISlaveFacade/StoreFinishedJobResultStreamedResponse" message="tns:ISlaveFacade_StoreFinishedJobResultStreamed_OutputMessage" />
+    </wsdl:operation>
+    <wsdl:operation name="ProcessSnapshotStreamed">
+      <wsdl:input wsaw:Action="http://tempuri.org/ISlaveFacade/ProcessSnapshotStreamed" message="tns:ISlaveFacade_ProcessSnapshotStreamed_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/ISlaveFacade/ProcessSnapshotStreamedResponse" message="tns:ISlaveFacade_ProcessSnapshotStreamed_OutputMessage" />
+    </wsdl:operation>
+    <wsdl:operation name="AddChildJob">
+      <wsdl:input wsaw:Action="http://tempuri.org/ISlaveFacade/AddChildJob" message="tns:ISlaveFacade_AddChildJob_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/ISlaveFacade/AddChildJobResponse" message="tns:ISlaveFacade_AddChildJob_OutputMessage" />
+    </wsdl:operation>
+    <wsdl:operation name="PauseJob">
+      <wsdl:input wsaw:Action="http://tempuri.org/ISlaveFacade/PauseJob" message="tns:ISlaveFacade_PauseJob_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/ISlaveFacade/PauseJobResponse" message="tns:ISlaveFacade_PauseJob_OutputMessage" />
+    </wsdl:operation>
+    <wsdl:operation name="GetChildJobResults">
+      <wsdl:input wsaw:Action="http://tempuri.org/ISlaveFacade/GetChildJobResults" message="tns:ISlaveFacade_GetChildJobResults_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/ISlaveFacade/GetChildJobResultsResponse" message="tns:ISlaveFacade_GetChildJobResults_OutputMessage" />
+    </wsdl:operation>
+    <wsdl:operation name="GetLastSerializedResult">
+      <wsdl:input wsaw:Action="http://tempuri.org/ISlaveFacade/GetLastSerializedResult" message="tns:ISlaveFacade_GetLastSerializedResult_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/ISlaveFacade/GetLastSerializedResultResponse" message="tns:ISlaveFacade_GetLastSerializedResult_OutputMessage" />
+    </wsdl:operation>
+    <wsdl:operation name="DeleteChildJobs">
+      <wsdl:input wsaw:Action="http://tempuri.org/ISlaveFacade/DeleteChildJobs" message="tns:ISlaveFacade_DeleteChildJobs_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/ISlaveFacade/DeleteChildJobsResponse" message="tns:ISlaveFacade_DeleteChildJobs_OutputMessage" />
+    </wsdl:operation>
+  </wsdl:portType>
+  <wsdl:binding name="SlaveHttpEndpoint" type="tns:ISlaveFacade">
+    <wsp:PolicyReference URI="#SlaveHttpEndpoint_policy" />
+    <soap12:binding transport="http://schemas.xmlsoap.org/soap/http" />
+    <wsdl:operation name="Login">
+      <soap12:operation soapAction="http://tempuri.org/ISlaveCommunicator/Login" style="document" />
+      <wsdl:input>
+        <wsp:PolicyReference URI="#SlaveHttpEndpoint_Login_Input_policy" />
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <wsp:PolicyReference URI="#SlaveHttpEndpoint_Login_output_policy" />
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="ProcessHeartBeat">
+      <soap12:operation soapAction="http://tempuri.org/ISlaveCommunicator/ProcessHeartBeat" style="document" />
+      <wsdl:input>
+        <wsp:PolicyReference URI="#SlaveHttpEndpoint_ProcessHeartBeat_Input_policy" />
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <wsp:PolicyReference URI="#SlaveHttpEndpoint_ProcessHeartBeat_output_policy" />
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="GetJob">
+      <soap12:operation soapAction="http://tempuri.org/ISlaveCommunicator/GetJob" style="document" />
+      <wsdl:input>
+        <wsp:PolicyReference URI="#SlaveHttpEndpoint_GetJob_Input_policy" />
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <wsp:PolicyReference URI="#SlaveHttpEndpoint_GetJob_output_policy" />
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="StoreFinishedJobResult">
+      <soap12:operation soapAction="http://tempuri.org/ISlaveCommunicator/StoreFinishedJobResult" style="document" />
+      <wsdl:input>
+        <wsp:PolicyReference URI="#SlaveHttpEndpoint_StoreFinishedJobResult_Input_policy" />
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <wsp:PolicyReference URI="#SlaveHttpEndpoint_StoreFinishedJobResult_output_policy" />
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="ProcessSnapshot">
+      <soap12:operation soapAction="http://tempuri.org/ISlaveCommunicator/ProcessSnapshot" style="document" />
+      <wsdl:input>
+        <wsp:PolicyReference URI="#SlaveHttpEndpoint_ProcessSnapshot_Input_policy" />
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <wsp:PolicyReference URI="#SlaveHttpEndpoint_ProcessSnapshot_output_policy" />
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="Logout">
+      <soap12:operation soapAction="http://tempuri.org/ISlaveCommunicator/Logout" style="document" />
+      <wsdl:input>
+        <wsp:PolicyReference URI="#SlaveHttpEndpoint_Logout_Input_policy" />
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <wsp:PolicyReference URI="#SlaveHttpEndpoint_Logout_output_policy" />
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="IsJobStillNeeded">
+      <soap12:operation soapAction="http://tempuri.org/ISlaveCommunicator/IsJobStillNeeded" style="document" />
+      <wsdl:input>
+        <wsp:PolicyReference URI="#SlaveHttpEndpoint_IsJobStillNeeded_Input_policy" />
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <wsp:PolicyReference URI="#SlaveHttpEndpoint_IsJobStillNeeded_output_policy" />
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="GetPlugins">
+      <soap12:operation soapAction="http://tempuri.org/ISlaveCommunicator/GetPlugins" style="document" />
+      <wsdl:input>
+        <wsp:PolicyReference URI="#SlaveHttpEndpoint_GetPlugins_Input_policy" />
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <wsp:PolicyReference URI="#SlaveHttpEndpoint_GetPlugins_output_policy" />
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="GetCalendar">
+      <soap12:operation soapAction="http://tempuri.org/ISlaveCommunicator/GetCalendar" style="document" />
+      <wsdl:input>
+        <wsp:PolicyReference URI="#SlaveHttpEndpoint_GetCalendar_Input_policy" />
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <wsp:PolicyReference URI="#SlaveHttpEndpoint_GetCalendar_output_policy" />
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="SetCalendarStatus">
+      <soap12:operation soapAction="http://tempuri.org/ISlaveCommunicator/SetCalendarStatus" style="document" />
+      <wsdl:input>
+        <wsp:PolicyReference URI="#SlaveHttpEndpoint_SetCalendarStatus_Input_policy" />
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <wsp:PolicyReference URI="#SlaveHttpEndpoint_SetCalendarStatus_output_policy" />
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="GetStreamedJob">
+      <soap12:operation soapAction="http://tempuri.org/ISlaveFacade/GetStreamedJob" style="document" />
+      <wsdl:input>
+        <wsp:PolicyReference URI="#SlaveHttpEndpoint_GetStreamedJob_Input_policy" />
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <wsp:PolicyReference URI="#SlaveHttpEndpoint_GetStreamedJob_output_policy" />
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="GetStreamedPlugins">
+      <soap12:operation soapAction="http://tempuri.org/ISlaveFacade/GetStreamedPlugins" style="document" />
+      <wsdl:input>
+        <wsp:PolicyReference URI="#SlaveHttpEndpoint_GetStreamedPlugins_Input_policy" />
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <wsp:PolicyReference URI="#SlaveHttpEndpoint_GetStreamedPlugins_output_policy" />
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="StoreFinishedJobResultStreamed">
+      <soap12:operation soapAction="http://tempuri.org/ISlaveFacade/StoreFinishedJobResultStreamed" style="document" />
+      <wsdl:input>
+        <wsp:PolicyReference URI="#SlaveHttpEndpoint_StoreFinishedJobResultStreamed_Input_policy" />
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <wsp:PolicyReference URI="#SlaveHttpEndpoint_StoreFinishedJobResultStreamed_output_policy" />
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="ProcessSnapshotStreamed">
+      <soap12:operation soapAction="http://tempuri.org/ISlaveFacade/ProcessSnapshotStreamed" style="document" />
+      <wsdl:input>
+        <wsp:PolicyReference URI="#SlaveHttpEndpoint_ProcessSnapshotStreamed_Input_policy" />
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <wsp:PolicyReference URI="#SlaveHttpEndpoint_ProcessSnapshotStreamed_output_policy" />
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="AddChildJob">
+      <soap12:operation soapAction="http://tempuri.org/ISlaveFacade/AddChildJob" style="document" />
+      <wsdl:input>
+        <wsp:PolicyReference URI="#SlaveHttpEndpoint_AddChildJob_Input_policy" />
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <wsp:PolicyReference URI="#SlaveHttpEndpoint_AddChildJob_output_policy" />
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="PauseJob">
+      <soap12:operation soapAction="http://tempuri.org/ISlaveFacade/PauseJob" style="document" />
+      <wsdl:input>
+        <wsp:PolicyReference URI="#SlaveHttpEndpoint_PauseJob_Input_policy" />
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <wsp:PolicyReference URI="#SlaveHttpEndpoint_PauseJob_output_policy" />
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="GetChildJobResults">
+      <soap12:operation soapAction="http://tempuri.org/ISlaveFacade/GetChildJobResults" style="document" />
+      <wsdl:input>
+        <wsp:PolicyReference URI="#SlaveHttpEndpoint_GetChildJobResults_Input_policy" />
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <wsp:PolicyReference URI="#SlaveHttpEndpoint_GetChildJobResults_output_policy" />
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="GetLastSerializedResult">
+      <soap12:operation soapAction="http://tempuri.org/ISlaveFacade/GetLastSerializedResult" style="document" />
+      <wsdl:input>
+        <wsp:PolicyReference URI="#SlaveHttpEndpoint_GetLastSerializedResult_Input_policy" />
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <wsp:PolicyReference URI="#SlaveHttpEndpoint_GetLastSerializedResult_output_policy" />
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="DeleteChildJobs">
+      <soap12:operation soapAction="http://tempuri.org/ISlaveFacade/DeleteChildJobs" style="document" />
+      <wsdl:input>
+        <wsp:PolicyReference URI="#SlaveHttpEndpoint_DeleteChildJobs_Input_policy" />
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <wsp:PolicyReference URI="#SlaveHttpEndpoint_DeleteChildJobs_output_policy" />
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+  </wsdl:binding>
+  <wsdl:binding name="SlaveTcpStreamedEndpoint" type="tns:ISlaveFacade">
+    <wsp:PolicyReference URI="#SlaveTcpStreamedEndpoint_policy" />
+    <soap12:binding transport="http://schemas.microsoft.com/soap/tcp" />
+    <wsdl:operation name="Login">
+      <soap12:operation soapAction="http://tempuri.org/ISlaveCommunicator/Login" style="document" />
+      <wsdl:input>
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="ProcessHeartBeat">
+      <soap12:operation soapAction="http://tempuri.org/ISlaveCommunicator/ProcessHeartBeat" style="document" />
+      <wsdl:input>
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="GetJob">
+      <soap12:operation soapAction="http://tempuri.org/ISlaveCommunicator/GetJob" style="document" />
+      <wsdl:input>
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="StoreFinishedJobResult">
+      <soap12:operation soapAction="http://tempuri.org/ISlaveCommunicator/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/ISlaveCommunicator/ProcessSnapshot" style="document" />
+      <wsdl:input>
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="Logout">
+      <soap12:operation soapAction="http://tempuri.org/ISlaveCommunicator/Logout" style="document" />
+      <wsdl:input>
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="IsJobStillNeeded">
+      <soap12:operation soapAction="http://tempuri.org/ISlaveCommunicator/IsJobStillNeeded" style="document" />
+      <wsdl:input>
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="GetPlugins">
+      <soap12:operation soapAction="http://tempuri.org/ISlaveCommunicator/GetPlugins" style="document" />
+      <wsdl:input>
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="GetCalendar">
+      <soap12:operation soapAction="http://tempuri.org/ISlaveCommunicator/GetCalendar" style="document" />
+      <wsdl:input>
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="SetCalendarStatus">
+      <soap12:operation soapAction="http://tempuri.org/ISlaveCommunicator/SetCalendarStatus" style="document" />
+      <wsdl:input>
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="GetStreamedJob">
+      <soap12:operation soapAction="http://tempuri.org/ISlaveFacade/GetStreamedJob" style="document" />
+      <wsdl:input>
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="GetStreamedPlugins">
+      <soap12:operation soapAction="http://tempuri.org/ISlaveFacade/GetStreamedPlugins" style="document" />
+      <wsdl:input>
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="StoreFinishedJobResultStreamed">
+      <soap12:operation soapAction="http://tempuri.org/ISlaveFacade/StoreFinishedJobResultStreamed" style="document" />
+      <wsdl:input>
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="ProcessSnapshotStreamed">
+      <soap12:operation soapAction="http://tempuri.org/ISlaveFacade/ProcessSnapshotStreamed" style="document" />
+      <wsdl:input>
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="AddChildJob">
+      <soap12:operation soapAction="http://tempuri.org/ISlaveFacade/AddChildJob" style="document" />
+      <wsdl:input>
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="PauseJob">
+      <soap12:operation soapAction="http://tempuri.org/ISlaveFacade/PauseJob" style="document" />
+      <wsdl:input>
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="GetChildJobResults">
+      <soap12:operation soapAction="http://tempuri.org/ISlaveFacade/GetChildJobResults" style="document" />
+      <wsdl:input>
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="GetLastSerializedResult">
+      <soap12:operation soapAction="http://tempuri.org/ISlaveFacade/GetLastSerializedResult" style="document" />
+      <wsdl:input>
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="DeleteChildJobs">
+      <soap12:operation soapAction="http://tempuri.org/ISlaveFacade/DeleteChildJobs" 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="SlaveFacade">
+    <wsdl:port name="SlaveHttpEndpoint" binding="tns:SlaveHttpEndpoint">
+      <soap12:address location="http://localhost:9000/SlaveService" />
+      <wsa10:EndpointReference>
+        <wsa10:Address>http://localhost:9000/SlaveService</wsa10:Address>
+        <Identity xmlns="http://schemas.xmlsoap.org/ws/2006/02/addressingidentity">
+          <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
+            <X509Data>
+              <X509Certificate>MIICJDCCAZGgAwIBAgIQnAmJF3c1A7BM2Ofjzn3WETAJBgUrDgMCHQUAMCYxJDAiBgNVBAMTG2JsYWRlMTIuaHBjLmZoLWhhZ2VuYmVyZy5hdDAeFw0xMDA5MTUxNDI5MjRaFw0zOTEyMzEyMzU5NTlaMCYxJDAiBgNVBAMTG2JsYWRlMTIuaHBjLmZoLWhhZ2VuYmVyZy5hdDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAzf1bLnsRC753gUvioyE+M9aI/FcIraWSQ4QlcVTNYQVQF0SfahNM8BcHp+ilkVyjMdMGb5uOwnZBDTtJK7Kn5YkESm9IXDIp/t+1/LtV5Odanm1dzNJFABKbEU+kXoUA+NfohntRpiGi5LAhGGh/NMD1iOxdzf7TfubL4sw9LH0CAwEAAaNbMFkwVwYDVR0BBFAwToAQSVn2wHFSfnoDDvXof7j94aEoMCYxJDAiBgNVBAMTG2JsYWRlMTIuaHBjLmZoLWhhZ2VuYmVyZy5hdIIQnAmJF3c1A7BM2Ofjzn3WETAJBgUrDgMCHQUAA4GBAKTsLbWq7kERbUvElrJRA7fmisyFJ3yqyfu1OxZpefkE+xuPuW153zrOYHFig0MsmqfctwCaYz5xmi88G//C8Jail3j0ULzluODuSS8Dk6N0w+GTygDbgW5Q+ye02Bslyk1EHMrX0JdbjsRC1jQY+CKVBG0dQv0uEZrqTIryzUKA</X509Certificate>
+            </X509Data>
+          </KeyInfo>
+        </Identity>
+      </wsa10:EndpointReference>
+    </wsdl:port>
+    <wsdl:port name="SlaveTcpStreamedEndpoint" binding="tns:SlaveTcpStreamedEndpoint">
+      <soap12:address location="net.tcp://localhost:9001/SlaveServiceStreamed" />
+      <wsa10:EndpointReference>
+        <wsa10:Address>net.tcp://localhost:9001/SlaveServiceStreamed</wsa10:Address>
+        <Identity xmlns="http://schemas.xmlsoap.org/ws/2006/02/addressingidentity">
+          <Dns>blade12.hpc.fh-hagenberg.at</Dns>
+        </Identity>
+      </wsa10:EndpointReference>
+    </wsdl:port>
+  </wsdl:service>
+</wsdl:definitions>
Index: anches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveFacade/service1.xsd
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveFacade/service1.xsd	(revision 4422)
+++ 	(revision )
@@ -1,42 +1,0 @@
-﻿<?xml version="1.0" encoding="utf-8"?>
-<xs:schema xmlns:tns="http://schemas.microsoft.com/2003/10/Serialization/" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://schemas.microsoft.com/2003/10/Serialization/" xmlns:xs="http://www.w3.org/2001/XMLSchema">
-  <xs:element name="anyType" nillable="true" type="xs:anyType" />
-  <xs:element name="anyURI" nillable="true" type="xs:anyURI" />
-  <xs:element name="base64Binary" nillable="true" type="xs:base64Binary" />
-  <xs:element name="boolean" nillable="true" type="xs:boolean" />
-  <xs:element name="byte" nillable="true" type="xs:byte" />
-  <xs:element name="dateTime" nillable="true" type="xs:dateTime" />
-  <xs:element name="decimal" nillable="true" type="xs:decimal" />
-  <xs:element name="double" nillable="true" type="xs:double" />
-  <xs:element name="float" nillable="true" type="xs:float" />
-  <xs:element name="int" nillable="true" type="xs:int" />
-  <xs:element name="long" nillable="true" type="xs:long" />
-  <xs:element name="QName" nillable="true" type="xs:QName" />
-  <xs:element name="short" nillable="true" type="xs:short" />
-  <xs:element name="string" nillable="true" type="xs:string" />
-  <xs:element name="unsignedByte" nillable="true" type="xs:unsignedByte" />
-  <xs:element name="unsignedInt" nillable="true" type="xs:unsignedInt" />
-  <xs:element name="unsignedLong" nillable="true" type="xs:unsignedLong" />
-  <xs:element name="unsignedShort" nillable="true" type="xs:unsignedShort" />
-  <xs:element name="char" nillable="true" type="tns:char" />
-  <xs:simpleType name="char">
-    <xs:restriction base="xs:int" />
-  </xs:simpleType>
-  <xs:element name="duration" nillable="true" type="tns:duration" />
-  <xs:simpleType name="duration">
-    <xs:restriction base="xs:duration">
-      <xs:pattern value="\-?P(\d*D)?(T(\d*H)?(\d*M)?(\d*(\.\d*)?S)?)?" />
-      <xs:minInclusive value="-P10675199DT2H48M5.4775808S" />
-      <xs:maxInclusive value="P10675199DT2H48M5.4775807S" />
-    </xs:restriction>
-  </xs:simpleType>
-  <xs:element name="guid" nillable="true" type="tns:guid" />
-  <xs:simpleType name="guid">
-    <xs:restriction base="xs:string">
-      <xs:pattern value="[\da-fA-F]{8}-[\da-fA-F]{4}-[\da-fA-F]{4}-[\da-fA-F]{4}-[\da-fA-F]{12}" />
-    </xs:restriction>
-  </xs:simpleType>
-  <xs:attribute name="FactoryType" type="xs:QName" />
-  <xs:attribute name="Id" type="xs:ID" />
-  <xs:attribute name="Ref" type="xs:IDREF" />
-</xs:schema>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveFacade/service2.xsd
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveFacade/service2.xsd	(revision 4423)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveFacade/service2.xsd	(revision 4423)
@@ -0,0 +1,285 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:tns="http://tempuri.org/" elementFormDefault="qualified" targetNamespace="http://tempuri.org/" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:import namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.BusinessObjects" />
+  <xs:import namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.ResponseObjects" />
+  <xs:import namespace="http://schemas.microsoft.com/2003/10/Serialization/" />
+  <xs:import namespace="http://schemas.microsoft.com/Message" />
+  <xs:element name="Login">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q1="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.BusinessObjects" minOccurs="0" name="slave" nillable="true" type="q1:SlaveDto" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="LoginResponse">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q2="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.ResponseObjects" minOccurs="0" name="LoginResult" nillable="true" type="q2:Response" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="ProcessHeartBeat">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q3="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.BusinessObjects" minOccurs="0" name="hbData" nillable="true" type="q3:HeartBeatData" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="ProcessHeartBeatResponse">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q4="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.ResponseObjects" minOccurs="0" name="ProcessHeartBeatResult" nillable="true" type="q4:ResponseHeartBeat" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="GetJob">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q5="http://schemas.microsoft.com/2003/10/Serialization/" minOccurs="0" name="clientId" type="q5:guid" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="GetJobResponse">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q6="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.ResponseObjects" minOccurs="0" name="GetJobResult" nillable="true" type="q6:ResponseObjectOfJobDtoZAa7YIsz" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="StoreFinishedJobResult">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q7="http://schemas.microsoft.com/2003/10/Serialization/" minOccurs="0" name="clientId" type="q7:guid" />
+        <xs:element xmlns:q8="http://schemas.microsoft.com/2003/10/Serialization/" minOccurs="0" name="jobId" type="q8:guid" />
+        <xs:element minOccurs="0" name="result" nillable="true" type="xs:base64Binary" />
+        <xs:element xmlns:q9="http://schemas.microsoft.com/2003/10/Serialization/" minOccurs="0" name="executionTime" type="q9:duration" />
+        <xs:element minOccurs="0" name="exception" nillable="true" type="xs:string" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="StoreFinishedJobResultResponse">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q10="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.ResponseObjects" minOccurs="0" name="StoreFinishedJobResultResult" nillable="true" type="q10:ResponseResultReceived" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="ProcessSnapshot">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q11="http://schemas.microsoft.com/2003/10/Serialization/" minOccurs="0" name="clientId" type="q11:guid" />
+        <xs:element xmlns:q12="http://schemas.microsoft.com/2003/10/Serialization/" minOccurs="0" name="jobId" type="q12:guid" />
+        <xs:element minOccurs="0" name="result" nillable="true" type="xs:base64Binary" />
+        <xs:element xmlns:q13="http://schemas.microsoft.com/2003/10/Serialization/" minOccurs="0" name="executionTime" type="q13:duration" />
+        <xs:element minOccurs="0" name="exception" nillable="true" type="xs:string" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="ProcessSnapshotResponse">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q14="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.ResponseObjects" minOccurs="0" name="ProcessSnapshotResult" nillable="true" type="q14:ResponseResultReceived" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="Logout">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q15="http://schemas.microsoft.com/2003/10/Serialization/" minOccurs="0" name="clientId" type="q15:guid" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="LogoutResponse">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q16="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.ResponseObjects" minOccurs="0" name="LogoutResult" nillable="true" type="q16:Response" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="IsJobStillNeeded">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q17="http://schemas.microsoft.com/2003/10/Serialization/" minOccurs="0" name="jobId" type="q17:guid" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="IsJobStillNeededResponse">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q18="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.ResponseObjects" minOccurs="0" name="IsJobStillNeededResult" nillable="true" type="q18:Response" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="GetPlugins">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q19="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.BusinessObjects" minOccurs="0" name="pluginList" nillable="true" type="q19:ArrayOfHivePluginInfoDto" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="GetPluginsResponse">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q20="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.ResponseObjects" minOccurs="0" name="GetPluginsResult" nillable="true" type="q20:ResponseListOfCachedHivePluginInfoDtoZMwZop09" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="GetCalendar">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q21="http://schemas.microsoft.com/2003/10/Serialization/" minOccurs="0" name="clientId" type="q21:guid" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="GetCalendarResponse">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q22="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.ResponseObjects" minOccurs="0" name="GetCalendarResult" nillable="true" type="q22:ResponseCalendar" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="SetCalendarStatus">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q23="http://schemas.microsoft.com/2003/10/Serialization/" minOccurs="0" name="clientId" type="q23:guid" />
+        <xs:element xmlns:q24="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.BusinessObjects" minOccurs="0" name="state" type="q24:CalendarState" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="SetCalendarStatusResponse">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q25="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.ResponseObjects" minOccurs="0" name="SetCalendarStatusResult" nillable="true" type="q25:Response" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="GetStreamedJob">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q26="http://schemas.microsoft.com/2003/10/Serialization/" minOccurs="0" name="clientId" type="q26:guid" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="GetStreamedJobResponse">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q27="http://schemas.microsoft.com/Message" name="GetStreamedJobResult" type="q27:StreamBody" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="GetStreamedPlugins">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q28="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.BusinessObjects" minOccurs="0" name="pluginList" nillable="true" type="q28:ArrayOfHivePluginInfoDto" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="GetStreamedPluginsResponse">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q29="http://schemas.microsoft.com/Message" name="GetStreamedPluginsResult" type="q29:StreamBody" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="StoreFinishedJobResultStreamed">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q30="http://schemas.microsoft.com/Message" name="stream" type="q30:StreamBody" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="StoreFinishedJobResultStreamedResponse">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q31="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.ResponseObjects" minOccurs="0" name="StoreFinishedJobResultStreamedResult" nillable="true" type="q31:ResponseResultReceived" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="ProcessSnapshotStreamed">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q32="http://schemas.microsoft.com/Message" name="stream" type="q32:StreamBody" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="ProcessSnapshotStreamedResponse">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q33="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.ResponseObjects" minOccurs="0" name="ProcessSnapshotStreamedResult" nillable="true" type="q33:ResponseResultReceived" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="AddChildJob">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q34="http://schemas.microsoft.com/2003/10/Serialization/" minOccurs="0" name="parentJobId" type="q34:guid" />
+        <xs:element xmlns:q35="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.BusinessObjects" minOccurs="0" name="serializedJob" nillable="true" type="q35:SerializedJob" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="AddChildJobResponse">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q36="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.ResponseObjects" minOccurs="0" name="AddChildJobResult" nillable="true" type="q36:ResponseObjectOfJobDtoZAa7YIsz" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="PauseJob">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q37="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.BusinessObjects" minOccurs="0" name="serializedJob" nillable="true" type="q37:SerializedJob" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="PauseJobResponse">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q38="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.ResponseObjects" minOccurs="0" name="PauseJobResult" nillable="true" type="q38:ResponseObjectOfJobDtoZAa7YIsz" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="GetChildJobResults">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q39="http://schemas.microsoft.com/2003/10/Serialization/" minOccurs="0" name="parentJobId" nillable="true" type="q39:guid" />
+        <xs:element minOccurs="0" name="recursive" type="xs:boolean" />
+        <xs:element minOccurs="0" name="includeParent" type="xs:boolean" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="GetChildJobResultsResponse">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q40="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.BusinessObjects" minOccurs="0" name="GetChildJobResultsResult" nillable="true" type="q40:ArrayOfJobResult" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="GetLastSerializedResult">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q41="http://schemas.microsoft.com/2003/10/Serialization/" minOccurs="0" name="jobId" type="q41:guid" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="GetLastSerializedResultResponse">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q42="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.BusinessObjects" minOccurs="0" name="GetLastSerializedResultResult" nillable="true" type="q42:SerializedJob" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="DeleteChildJobs">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q43="http://schemas.microsoft.com/2003/10/Serialization/" minOccurs="0" name="jobId" type="q43:guid" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="DeleteChildJobsResponse">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q44="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.ResponseObjects" minOccurs="0" name="DeleteChildJobsResult" nillable="true" type="q44:Response" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+</xs:schema>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveFacade/service21.xsd
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveFacade/service21.xsd	(revision 4423)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveFacade/service21.xsd	(revision 4423)
@@ -0,0 +1,42 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:tns="http://schemas.microsoft.com/2003/10/Serialization/" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://schemas.microsoft.com/2003/10/Serialization/" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:element name="anyType" nillable="true" type="xs:anyType" />
+  <xs:element name="anyURI" nillable="true" type="xs:anyURI" />
+  <xs:element name="base64Binary" nillable="true" type="xs:base64Binary" />
+  <xs:element name="boolean" nillable="true" type="xs:boolean" />
+  <xs:element name="byte" nillable="true" type="xs:byte" />
+  <xs:element name="dateTime" nillable="true" type="xs:dateTime" />
+  <xs:element name="decimal" nillable="true" type="xs:decimal" />
+  <xs:element name="double" nillable="true" type="xs:double" />
+  <xs:element name="float" nillable="true" type="xs:float" />
+  <xs:element name="int" nillable="true" type="xs:int" />
+  <xs:element name="long" nillable="true" type="xs:long" />
+  <xs:element name="QName" nillable="true" type="xs:QName" />
+  <xs:element name="short" nillable="true" type="xs:short" />
+  <xs:element name="string" nillable="true" type="xs:string" />
+  <xs:element name="unsignedByte" nillable="true" type="xs:unsignedByte" />
+  <xs:element name="unsignedInt" nillable="true" type="xs:unsignedInt" />
+  <xs:element name="unsignedLong" nillable="true" type="xs:unsignedLong" />
+  <xs:element name="unsignedShort" nillable="true" type="xs:unsignedShort" />
+  <xs:element name="char" nillable="true" type="tns:char" />
+  <xs:simpleType name="char">
+    <xs:restriction base="xs:int" />
+  </xs:simpleType>
+  <xs:element name="duration" nillable="true" type="tns:duration" />
+  <xs:simpleType name="duration">
+    <xs:restriction base="xs:duration">
+      <xs:pattern value="\-?P(\d*D)?(T(\d*H)?(\d*M)?(\d*(\.\d*)?S)?)?" />
+      <xs:minInclusive value="-P10675199DT2H48M5.4775808S" />
+      <xs:maxInclusive value="P10675199DT2H48M5.4775807S" />
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:element name="guid" nillable="true" type="tns:guid" />
+  <xs:simpleType name="guid">
+    <xs:restriction base="xs:string">
+      <xs:pattern value="[\da-fA-F]{8}-[\da-fA-F]{4}-[\da-fA-F]{4}-[\da-fA-F]{4}-[\da-fA-F]{12}" />
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:attribute name="FactoryType" type="xs:QName" />
+  <xs:attribute name="Id" type="xs:ID" />
+  <xs:attribute name="Ref" type="xs:IDREF" />
+</xs:schema>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/ServiceLocator.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/ServiceLocator.cs	(revision 4422)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/ServiceLocator.cs	(revision 4423)
@@ -39,7 +39,33 @@
     }
 
+    private string hostAddress;
     internal string HostAddress {
-      get;
-      set;
+      get {
+        return hostAddress;
+      }
+      set {
+        if (hostAddress != value) {
+          hostAddress = value;
+          if (slaveFacadePool != null)
+            slaveFacadePool.HostAddress = value;
+          if (streamedSlaveFacadePool != null)
+            streamedSlaveFacadePool.HostAddress = value;
+        }
+      }
+    }
+
+    public ServiceLocator() {
+      Settings.Default.SettingChanging += new System.Configuration.SettingChangingEventHandler(Default_SettingChanging);
+    }
+
+    void Default_SettingChanging(object sender, System.Configuration.SettingChangingEventArgs e) {
+      if (slaveFacadePool != null) {
+        slaveFacadePool.Username = Settings.Default.HiveUsername;
+        slaveFacadePool.Password = Settings.Default.HivePassword;
+      }
+      if (streamedSlaveFacadePool != null) {
+        streamedSlaveFacadePool.Username = Settings.Default.HiveUsername;
+        streamedSlaveFacadePool.Password = Settings.Default.HivePassword;
+      }
     }
 
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/WcfService.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/WcfService.cs	(revision 4422)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/WcfService.cs	(revision 4423)
@@ -32,4 +32,5 @@
 using HeuristicLab.PluginInfrastructure;
 using HeuristicLab.Tracing;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Hive.Slave.Communication {
@@ -56,5 +57,4 @@
     public DateTime ConnectedSince { get; private set; }
     public NetworkEnum.WcfConnState ConnState { get; private set; }
-    public bool LoggedIn { get; set; }
 
     private string serverIp;
@@ -64,13 +64,13 @@
         if (serverIp != value) {
           serverIp = value;
-          if (ServerChanged != null)
-            ServerChanged(this, new EventArgs());
-        }
-      }
-    }
-
-    public event EventHandler ConnectionRestored;
-    public event EventHandler ServerChanged;
+        }
+      }
+    }
+
     public event EventHandler Connected;
+    public void OnConnected() {
+      var handler = Connected;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
 
     /// <summary>
@@ -79,5 +79,4 @@
     private WcfService() {
       ConnState = NetworkEnum.WcfConnState.Disconnected;
-      LoggedIn = false;
     }
 
@@ -85,8 +84,7 @@
     /// Connects with the Server, registers the events and fires the Connected (and quiet possibly the ConnectionRestored) Event.
     /// </summary>
-    public void Connect() {
+    public void Connect(SlaveDto slaveInfo) {
       ServiceLocator.Instance.HostAddress = ServerIp;
-      ServiceLocator.Instance.SlaveFacadePool.ExceptionOccured += new EventHandler<HeuristicLab.Common.EventArgs<Exception>>(ClientFacadePool_ExceptionOccured);
-      ServiceLocator.Instance.StreamedSlaveFacadePool.ExceptionOccured += new EventHandler<HeuristicLab.Common.EventArgs<Exception>>(ClientFacadePool_ExceptionOccured);
+      RegisterServiceEvents();
       using (Disposable<SlaveFacade.ISlaveFacade> service = ServiceLocator.Instance.StreamedSlaveFacadePool.GetService()) {
         try {
@@ -98,11 +96,6 @@
           ConnState = NetworkEnum.WcfConnState.Connected;
           ConnectedSince = DateTime.Now;
-
-          if (Connected != null) {
-            Connected(this, new EventArgs());
-          }
-          if (ConnState == NetworkEnum.WcfConnState.Failed) {
-            ConnectionRestored(this, new EventArgs());
-          }
+          service.Obj.Login(slaveInfo);
+          OnConnected();
         }
         catch (Exception ex) {
@@ -112,5 +105,16 @@
     }
 
-    void ClientFacadePool_ExceptionOccured(object sender, HeuristicLab.Common.EventArgs<Exception> e) {
+    private void RegisterServiceEvents() {
+      ServiceLocator.Instance.SlaveFacadePool.ExceptionOccured += new EventHandler<HeuristicLab.Common.EventArgs<Exception>>(ClientFacadePool_ExceptionOccured);
+      ServiceLocator.Instance.StreamedSlaveFacadePool.ExceptionOccured += new EventHandler<HeuristicLab.Common.EventArgs<Exception>>(ClientFacadePool_ExceptionOccured);
+    }
+
+    private void DeregisterServiceEvents() {
+      ServiceLocator.Instance.SlaveFacadePool.ExceptionOccured -= new EventHandler<HeuristicLab.Common.EventArgs<Exception>>(ClientFacadePool_ExceptionOccured);
+      ServiceLocator.Instance.StreamedSlaveFacadePool.ExceptionOccured -= new EventHandler<HeuristicLab.Common.EventArgs<Exception>>(ClientFacadePool_ExceptionOccured);
+    }
+
+    void ClientFacadePool_ExceptionOccured(object sender, EventArgs<Exception> e) {
+      HandleNetworkError(e.Value);
       Logger.Error("An exception occured in the WCF-Communication: " + e.Value.ToString());
     }
@@ -121,5 +125,5 @@
     public void Disconnect() {
       ConnState = NetworkEnum.WcfConnState.Disconnected;
-      LoggedIn = false;
+      DeregisterServiceEvents();
     }
 
@@ -130,5 +134,5 @@
     private void HandleNetworkError(Exception e) {
       ConnState = NetworkEnum.WcfConnState.Failed;
-      LoggedIn = false;
+      DeregisterServiceEvents();
       Logger.Error("Network exception occurred: " + e);
     }
@@ -137,24 +141,23 @@
     /// Methods for the Server Login
     /// </summary>
-    public void Login(SlaveDto slaveInfo) {
-      using (Disposable<SlaveFacade.ISlaveFacade> service = ServiceLocator.Instance.SlaveFacadePool.GetService()) {
-        try {
-          if (ConnState == NetworkEnum.WcfConnState.Connected) {
-            Logger.Debug("STARTED: Login Sync");
-            Response res = service.Obj.Login(slaveInfo);
-            if (res.StatusMessage != ResponseStatus.Ok) {
-              Logger.Error("FAILED: Login Failed! " + res.StatusMessage);
-              throw new Exception(res.StatusMessage.ToString());
-            } else {
-              Logger.Info("ENDED: Login succeeded" + res.StatusMessage);
-              LoggedIn = true;
-            }
-          }
-        }
-        catch (Exception e) {
-          HandleNetworkError(e);
-        }
-      }
-    }
+    //public void Login(SlaveDto slaveInfo) {
+    //  try {
+    //    using (Disposable<SlaveFacade.ISlaveFacade> service = ServiceLocator.Instance.SlaveFacadePool.GetService()) {
+    //      if (ConnState == NetworkEnum.WcfConnState.Connected) {
+    //        Logger.Debug("STARTED: Login Sync");
+    //        Response res = service.Obj.Login(slaveInfo);
+    //        if (res.StatusMessage != ResponseStatus.Ok) {
+    //          Logger.Error("FAILED: Login Failed! " + res.StatusMessage);
+    //          throw new Exception(res.StatusMessage.ToString());
+    //        } else {
+    //          Logger.Info("ENDED: Login succeeded" + res.StatusMessage);
+    //        }
+    //      }
+    //    }
+    //  }
+    //  catch (Exception e) {
+    //    OnExceptionOccured(e);
+    //  }
+    //}
 
     /// <summary>
@@ -164,49 +167,50 @@
     public event System.EventHandler<GetJobCompletedEventArgs> GetJobCompleted;
     public void GetJobAsync(Guid guid) {
-      if (LoggedIn) {
-        Disposable<SlaveFacade.ISlaveFacade> service = ServiceLocator.Instance.StreamedSlaveFacadePool.GetService();
-        Logger.Debug("STARTED: Fetching of Jobs from Server for Slave");
-        service.Obj.BeginGetStreamedJob(guid, (ar => {
+      Disposable<SlaveFacade.ISlaveFacade> service = ServiceLocator.Instance.StreamedSlaveFacadePool.GetService();
+      Logger.Debug("STARTED: Fetching of Jobs from Server for Slave");
+      service.Obj.BeginGetStreamedJob(guid, (ar => {
+        Stream stream = null;
+        MemoryStream memStream = null;
+        try {
           if (ar.IsCompleted) {
-            Stream stream = null;
-            MemoryStream memStream = null;
-            try {
-              Logger.Debug("ENDED: Fetching of Jobs from Server for Slave");
-              stream = service.Obj.EndGetStreamedJob(ar);
-
-              //first deserialize the response
-              BinaryFormatter formatter = new BinaryFormatter();
-              ResponseObject<JobDto> response = (ResponseObject<JobDto>)formatter.Deserialize(stream);
-
-              //second deserialize the BLOB
-              memStream = new MemoryStream();
-
-              byte[] buffer = new byte[3024];
-              int read = 0;
-              while ((read = stream.Read(buffer, 0, buffer.Length)) > 0) {
-                memStream.Write(buffer, 0, read);
-              }
-
-              memStream.Close();
-
-              GetJobCompletedEventArgs completedEventArgs = new GetJobCompletedEventArgs(new object[] { response, memStream.GetBuffer() }, null, !ar.IsCompleted, ar.AsyncState);
-              GetJobCompleted(this, completedEventArgs);
+            Logger.Debug("ENDED: Fetching of Jobs from Server for Slave");
+            stream = service.Obj.EndGetStreamedJob(ar);
+
+            //first deserialize the response
+            BinaryFormatter formatter = new BinaryFormatter();
+            ResponseObject<JobDto> response = (ResponseObject<JobDto>)formatter.Deserialize(stream);
+
+            //second deserialize the BLOB
+            memStream = new MemoryStream();
+
+            byte[] buffer = new byte[3024];
+            int read = 0;
+            while ((read = stream.Read(buffer, 0, buffer.Length)) > 0) {
+              memStream.Write(buffer, 0, read);
             }
-            catch (Exception ex) {
-              Logger.Error(ex);
-            }
-            finally {
-              if (stream != null)
-                stream.Dispose();
-
-              if (memStream != null)
-                memStream.Dispose();
-
-              service.Dispose();
-            }
-          } else
+
+            memStream.Close();
+
+            GetJobCompletedEventArgs completedEventArgs = new GetJobCompletedEventArgs(new object[] { response, memStream.GetBuffer() }, null, !ar.IsCompleted, ar.AsyncState);
+            GetJobCompleted(this, completedEventArgs);
+
+          } else {
             HandleNetworkError(new FaultException("GetJobAsync did not complete"));
-        }), null);
-      }
+          }
+        }
+        catch (Exception e) {
+          OnExceptionOccured(e);
+        }
+        finally {
+          if (stream != null)
+            stream.Dispose();
+
+          if (memStream != null)
+            memStream.Dispose();
+
+          try { service.Dispose(); }
+          catch (Exception e) { OnExceptionOccured(e); }
+        }
+      }), null);
     }
 
@@ -218,34 +222,36 @@
     #region SendJobResults
     public event System.EventHandler<StoreFinishedJobResultCompletedEventArgs> GetFinishedJobResultCompleted;
-    public void GetFinishedJobResultAsync(Guid clientId, Guid jobId, byte[] result, double percentage, Exception exception, bool finished) {
-      if (LoggedIn) {
-        Disposable<SlaveFacade.ISlaveFacade> service = ServiceLocator.Instance.StreamedSlaveFacadePool.GetService();
-        Logger.Debug("STARTED: Sending back the finished job results");
-        Logger.Debug("Building stream");
-        Stream stream = GetStreamedJobResult(clientId, jobId, result, percentage, exception);
-        Logger.Debug("Builded stream");
-        Logger.Debug("Making the call");
-        
-        service.Obj.BeginStoreFinishedJobResultStreamed(stream, (ar => {
-          try {
-            Logger.Debug("Finished storing the job");
-            if (stream != null)
-              stream.Dispose();
-
-            if (ar.IsCompleted) {
-              var res = service.Obj.EndStoreFinishedJobResultStreamed(ar);
-              StoreFinishedJobResultCompletedEventArgs args = new StoreFinishedJobResultCompletedEventArgs(new object[] { res }, null, false, null);
-              Logger.Debug("calling the Finished Job Event");
-              GetFinishedJobResultCompleted(this, args);
-              Logger.Debug("ENDED: Sending back the finished job results");
-            } else {
-              HandleNetworkError(new FaultException("GetFinishedJobResultAsync did not complete"));
-            }
+    public void GetFinishedJobResultAsync(Guid clientId, Guid jobId, byte[] result, TimeSpan executionTime, string exception, bool finished) {
+      Disposable<SlaveFacade.ISlaveFacade> service = ServiceLocator.Instance.StreamedSlaveFacadePool.GetService();
+      Logger.Debug("STARTED: Sending back the finished job results");
+      Logger.Debug("Building stream");
+      Stream stream = GetStreamedJobResult(clientId, jobId, result, executionTime, exception);
+      Logger.Debug("Builded stream");
+      Logger.Debug("Making the call");
+
+      service.Obj.BeginStoreFinishedJobResultStreamed(stream, (ar => {
+        try {
+          Logger.Debug("Finished storing the job");
+          if (stream != null)
+            stream.Dispose();
+
+          if (ar.IsCompleted) {
+            var res = service.Obj.EndStoreFinishedJobResultStreamed(ar);
+            StoreFinishedJobResultCompletedEventArgs args = new StoreFinishedJobResultCompletedEventArgs(new object[] { res }, null, false, null);
+            Logger.Debug("calling the Finished Job Event");
+            GetFinishedJobResultCompleted(this, args);
+            Logger.Debug("ENDED: Sending back the finished job results");
+          } else {
+            HandleNetworkError(new FaultException("GetFinishedJobResultAsync did not complete"));
           }
-          finally {
-            service.Dispose();
-          }
-        }), null);
-      }
+        }
+        catch (Exception e) {
+          OnExceptionOccured(e);
+        }
+        finally {
+          try { service.Dispose(); }
+          catch (Exception e) { OnExceptionOccured(e); }
+        }
+      }), null);
     }
 
@@ -254,27 +260,29 @@
     #region Processsnapshots
     public event System.EventHandler<ProcessSnapshotCompletedEventArgs> ProcessSnapshotCompleted;
-    public void ProcessSnapshotAsync(Guid clientId, Guid jobId, byte[] result, double percentage, Exception exception, bool finished) {
-      if (LoggedIn) {
-        Disposable<SlaveFacade.ISlaveFacade> service = ServiceLocator.Instance.StreamedSlaveFacadePool.GetService();
-
-        Stream stream = GetStreamedJobResult(clientId, jobId, result, percentage, exception);
-        service.Obj.BeginProcessSnapshotStreamed(stream, (ar => {
-          try {
-            if (stream != null)
-              stream.Dispose();
-
-            if (ar.IsCompleted) {
-              var res = service.Obj.EndStoreFinishedJobResultStreamed(ar);
-              ProcessSnapshotCompletedEventArgs args = new ProcessSnapshotCompletedEventArgs(new object[] { res }, null, false, null);
-              ProcessSnapshotCompleted(this, args);
-            } else {
-              HandleNetworkError(new FaultException("ProcessSnapshotAsync did not complete"));
-            }
+    public void ProcessSnapshotAsync(Guid clientId, Guid jobId, byte[] result, TimeSpan executionTime, string exception, bool finished) {
+      Disposable<SlaveFacade.ISlaveFacade> service = ServiceLocator.Instance.StreamedSlaveFacadePool.GetService();
+
+      Stream stream = GetStreamedJobResult(clientId, jobId, result, executionTime, exception);
+      service.Obj.BeginProcessSnapshotStreamed(stream, (ar => {
+        try {
+          if (stream != null)
+            stream.Dispose();
+
+          if (ar.IsCompleted) {
+            var res = service.Obj.EndStoreFinishedJobResultStreamed(ar);
+            ProcessSnapshotCompletedEventArgs args = new ProcessSnapshotCompletedEventArgs(new object[] { res }, null, false, null);
+            ProcessSnapshotCompleted(this, args);
+          } else {
+            HandleNetworkError(new FaultException("ProcessSnapshotAsync did not complete"));
           }
-          finally {
-            service.Dispose();
-          }
-        }), null);
-      }
+        }
+        catch (Exception e) {
+          OnExceptionOccured(e);
+        }
+        finally {
+          try { service.Dispose(); }
+          catch (Exception e) { OnExceptionOccured(e); }
+        }
+      }), null);
     }
 
@@ -286,19 +294,15 @@
     #region Heartbeat
 
-    public event System.EventHandler<ProcessHeartBeatCompletedEventArgs> ProcessHeartBeatCompleted;
+    public event EventHandler<ProcessHeartBeatCompletedEventArgs> ProcessHeartBeatCompleted;
     public void ProcessHeartBeatSync(HeartBeatData hbd) {
-      if (LoggedIn) {
-        using (Disposable<SlaveFacade.ISlaveFacade> service = ServiceLocator.Instance.StreamedSlaveFacadePool.GetService()) {
-          Logger.Debug("STARTING: sending heartbeat");
-          var res = service.Obj.ProcessHeartBeat(hbd);
-
-          if (res.StatusMessage == ResponseStatus.Ok) {
-            ProcessHeartBeatCompleted(this, new ProcessHeartBeatCompletedEventArgs(new object[] { res }, null, false, null));
-            Logger.Debug("ENDED: sending heartbeats");
-          } else if (res.StatusMessage == ResponseStatus.ProcessHeartBeat_UserNotLoggedIn) {
-            LoggedIn = false;
-          } else {
-            Logger.Error("FAILED: sending heartbeats: " + res.StatusMessage.ToString());
-          }
+      using (Disposable<SlaveFacade.ISlaveFacade> service = ServiceLocator.Instance.StreamedSlaveFacadePool.GetService()) {
+        Logger.Debug("STARTING: sending heartbeat");
+        var res = service.Obj.ProcessHeartBeat(hbd);
+
+        if (res.StatusMessage == ResponseStatus.Ok) {
+          ProcessHeartBeatCompleted(this, new ProcessHeartBeatCompletedEventArgs(new object[] { res }, null, false, null));
+          Logger.Debug("ENDED: sending heartbeats");
+        } else {
+          Logger.Error("FAILED: sending heartbeats: " + res.StatusMessage.ToString());
         }
       }
@@ -310,10 +314,10 @@
     /// Send back finished and Stored Job Results
     /// </summary>
-    private Stream GetStreamedJobResult(Guid clientId, Guid jobId, byte[] result, double percentage, Exception exception) {
+    private Stream GetStreamedJobResult(Guid clientId, Guid jobId, byte[] result, TimeSpan executionTime, string exception) {
       JobResult jobResult = new JobResult();
       jobResult.SlaveId = clientId;
       jobResult.Id = jobId;
-      jobResult.Percentage = percentage;
-      jobResult.Exception = exception != null ? exception.Message : "";
+      jobResult.ExecutionTime = executionTime;
+      jobResult.Exception = exception;
 
       MultiStream stream = new MultiStream();
@@ -329,7 +333,7 @@
     }
 
-    public ResponseResultReceived StoreFinishedJobResultsSync(Guid clientId, Guid jobId, byte[] result, double percentage, Exception exception, bool finished) {
+    public ResponseResultReceived StoreFinishedJobResultsSync(Guid clientId, Guid jobId, byte[] result, TimeSpan executionTime, string exception, bool finished) {
       using (Disposable<SlaveFacade.ISlaveFacade> service = ServiceLocator.Instance.StreamedSlaveFacadePool.GetService()) {
-        ResponseResultReceived res = service.Obj.StoreFinishedJobResultStreamed(GetStreamedJobResult(clientId, jobId, result, percentage, exception));
+        ResponseResultReceived res = service.Obj.StoreFinishedJobResultStreamed(GetStreamedJobResult(clientId, jobId, result, executionTime, exception));
         return res;
       }
@@ -346,17 +350,17 @@
       }
       catch (Exception e) {
-        HandleNetworkError(e);
-        return null;
-      }
-    }
-
-    public ResponseResultReceived ProcessSnapshotSync(Guid clientId, Guid jobId, byte[] result, double percentage, Exception exception) {
-      try {
-        using (Disposable<SlaveFacade.ISlaveFacade> service = ServiceLocator.Instance.StreamedSlaveFacadePool.GetService()) {
-          return service.Obj.ProcessSnapshotStreamed(GetStreamedJobResult(clientId, jobId, result, percentage, exception));
-        }
-      }
-      catch (Exception e) {
-        HandleNetworkError(e);
+        OnExceptionOccured(e);
+        return null;
+      }
+    }
+
+    public ResponseResultReceived ProcessSnapshotSync(Guid clientId, Guid jobId, byte[] result, TimeSpan executionTime, string exception) {
+      try {
+        using (Disposable<SlaveFacade.ISlaveFacade> service = ServiceLocator.Instance.StreamedSlaveFacadePool.GetService()) {
+          return service.Obj.ProcessSnapshotStreamed(GetStreamedJobResult(clientId, jobId, result, executionTime, exception));
+        }
+      }
+      catch (Exception e) {
+        OnExceptionOccured(e);
         return null;
       }
@@ -380,5 +384,5 @@
       }
       catch (Exception e) {
-        HandleNetworkError(e);
+        OnExceptionOccured(e);
         return null;
       }
@@ -394,5 +398,5 @@
       }
       catch (Exception e) {
-        HandleNetworkError(e);
+        OnExceptionOccured(e);
       }
     }
@@ -408,5 +412,5 @@
       }
       catch (Exception e) {
-        HandleNetworkError(e);
+        OnExceptionOccured(e);
         return null;
       }
@@ -423,5 +427,5 @@
       }
       catch (Exception e) {
-        HandleNetworkError(e);
+        OnExceptionOccured(e);
         return null;
       }
@@ -438,5 +442,5 @@
       }
       catch (Exception e) {
-        HandleNetworkError(e);
+        OnExceptionOccured(e);
         return null;
       }
@@ -453,5 +457,5 @@
       }
       catch (Exception e) {
-        HandleNetworkError(e);
+        OnExceptionOccured(e);
         return null;
       }
@@ -475,7 +479,25 @@
       }
       catch (Exception e) {
-        HandleNetworkError(e);
-        return null;
-      }
+        OnExceptionOccured(e);
+        return null;
+      }
+    }
+
+    public void DeleteChildJobs(Guid jobId) {
+      try {
+        using (Disposable<SlaveFacade.ISlaveFacade> service = ServiceLocator.Instance.StreamedSlaveFacadePool.GetService()) {
+          service.Obj.DeleteChildJobs(jobId);
+        }
+      }
+      catch (Exception e) {
+        OnExceptionOccured(e);
+      }
+    }
+
+    public event EventHandler<EventArgs<Exception>> ExceptionOccured;
+    private void OnExceptionOccured(Exception e) {
+      Logger.Error("Error: " + e.ToString());
+      var handler = ExceptionOccured;
+      if (handler != null) handler(this, new EventArgs<Exception>(e));
     }
   }
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/app.config
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/app.config	(revision 4422)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/app.config	(revision 4423)
@@ -14,6 +14,6 @@
           hostNameComparisonMode="StrongWildcard" listenBacklog="10" maxBufferPoolSize="524288"
           maxBufferSize="65536" maxConnections="10" maxReceivedMessageSize="104857600">
-          <readerQuotas maxDepth="32" maxStringContentLength="104857600" maxArrayLength="104857600"
-            maxBytesPerRead="4096" maxNameTableCharCount="16384" />
+          <readerQuotas maxDepth="32" maxStringContentLength="104857600"
+            maxArrayLength="104857600" maxBytesPerRead="4096" maxNameTableCharCount="16384" />
           <reliableSession ordered="true" inactivityTimeout="00:10:00"
             enabled="false" />
@@ -28,5 +28,5 @@
           receiveTimeout="00:10:00" sendTimeout="00:01:00" bypassProxyOnLocal="false"
           transactionFlow="false" hostNameComparisonMode="StrongWildcard"
-          maxBufferPoolSize="524288" maxReceivedMessageSize="104857600" messageEncoding="Text"
+          maxBufferPoolSize="524288" maxReceivedMessageSize="65536" messageEncoding="Text"
           textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false">
           <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
@@ -44,16 +44,16 @@
     </bindings>
     <client>
-      <endpoint address="http://localhost:9000/SlaveService" binding="wsHttpBinding" behaviorConfiguration="SlaveServiceBehaviour"
+      <endpoint address="http://blade12.hpc.fh-hagenberg.at:9000/SlaveService" binding="wsHttpBinding" behaviorConfiguration="SlaveServiceBehaviour"
         bindingConfiguration="SlaveHttpEndpoint" contract="SlaveFacade.ISlaveFacade"
         name="SlaveHttpEndpoint">
         <identity>
-          <certificate encodedValue="AwAAAAEAAAAUAAAAJ5p7xBv8o/BZ9Lp1c1d+F13FxN8gAAAAAQAAAPIBAAAwggHuMIIBW6ADAgECAhBvZlgTCjsfjEG5QUX7yOhOMAkGBSsOAwIdBQAwFDESMBAGA1UEAxMJbG9jYWxob3N0MB4XDTEwMDgzMDA5MTMyMVoXDTM5MTIzMTIzNTk1OVowFDESMBAGA1UEAxMJbG9jYWxob3N0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCbjJrhOtSpfFz51JPvdfxMVSKqnWhfzjrZvtwpVsy8D589m3SeS6AalWwtkpPCR2C+a4GKo9e689o0+BtuOugypAWqkUhkz//XLvUp5KPNB7igY7he4ngMLp4GsWBWZdl+P8g29t5+nde1Tiv6dPzx5YgfB9lrvZzaS6TT/eNasQIDAQABo0kwRzBFBgNVHQEEPjA8gBBPTuRH17g8MfpeT/ODWdXuoRYwFDESMBAGA1UEAxMJbG9jYWxob3N0ghBvZlgTCjsfjEG5QUX7yOhOMAkGBSsOAwIdBQADgYEAUpgK4sUxAqwR8eyRK8cmyzhhN31xN8/nKPIo9cETaNvjJXL8zO7DeXCyyiBETAkfnhIChRIAmE/PjxvFdB2fOuQY3/OHrobai+G7IQ8SHF+AKdx7cJXt0h4Okny4DpPjQl4V9P2lZaG8fVXmpKhpeZ+ChA8Y/xPCDzTzLleQ/mY=" />
+          <certificate encodedValue="AwAAAAEAAAAUAAAA0FkTGjOA2/0cZmFlIwFildV5a/ogAAAAAQAAACgCAAAwggIkMIIBkaADAgECAhCcCYkXdzUDsEzY5+POfdYRMAkGBSsOAwIdBQAwJjEkMCIGA1UEAxMbYmxhZGUxMi5ocGMuZmgtaGFnZW5iZXJnLmF0MB4XDTEwMDkxNTE0MjkyNFoXDTM5MTIzMTIzNTk1OVowJjEkMCIGA1UEAxMbYmxhZGUxMi5ocGMuZmgtaGFnZW5iZXJnLmF0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDN/VsuexELvneBS+KjIT4z1oj8VwitpZJDhCVxVM1hBVAXRJ9qE0zwFwen6KWRXKMx0wZvm47CdkENO0krsqfliQRKb0hcMin+37X8u1Xk51qebV3M0kUAEpsRT6RehQD41+iGe1GmIaLksCEYaH80wPWI7F3N/tN+5svizD0sfQIDAQABo1swWTBXBgNVHQEEUDBOgBBJWfbAcVJ+egMO9eh/uP3hoSgwJjEkMCIGA1UEAxMbYmxhZGUxMi5ocGMuZmgtaGFnZW5iZXJnLmF0ghCcCYkXdzUDsEzY5+POfdYRMAkGBSsOAwIdBQADgYEApOwttaruQRFtS8SWslEDt+aKzIUnfKrJ+7U7Fml5+QT7G4+5bXnfOs5gcWKDQyyap9y3AJpjPnGaLzwb/8LwlqKXePRQvOW44O5JLwOTo3TD4ZPKANuBblD7J7TYGyXKTUQcytfQl1uOxELWNBj4IpUEbR1C/S4RmupMivLNQoA=" />
         </identity>
       </endpoint>
-      <endpoint address="net.tcp://localhost:9001/SlaveServiceStreamed" behaviorConfiguration="SlaveServiceBehaviour"
+      <endpoint address="net.tcp://blade12.hpc.fh-hagenberg.at:9001/SlaveServiceStreamed" behaviorConfiguration="SlaveServiceBehaviour"
         binding="netTcpBinding" bindingConfiguration="SlaveTcpStreamedEndpoint"
         contract="SlaveFacade.ISlaveFacade" name="SlaveTcpStreamedEndpoint">
         <identity>
-          <dns value="localhost" />
+          <dns value="blade12.hpc.fh-hagenberg.at" />
         </identity>
       </endpoint>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/HiveSlaveConsole.designer.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/HiveSlaveConsole.designer.cs	(revision 4422)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/HiveSlaveConsole.designer.cs	(revision 4423)
@@ -46,7 +46,7 @@
     private void InitializeComponent() {
       this.components = new System.ComponentModel.Container();
-      Calendar.DrawTool drawTool2 = new Calendar.DrawTool();
+      HeuristicLab.Calendar.DrawTool drawTool1 = new HeuristicLab.Calendar.DrawTool();
       System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(HiveSlaveConsole));
-      this.dvOnline = new Calendar.DayView();
+      this.dvOnline = new HeuristicLab.Calendar.DayView();
       this.tcClientConsole = new System.Windows.Forms.TabControl();
       this.tpConnection = new System.Windows.Forms.TabPage();
@@ -57,10 +57,9 @@
       this.tbIPAdress = new System.Windows.Forms.TextBox();
       this.lbServerIPCaption = new System.Windows.Forms.Label();
-      this.lbPortCaption = new System.Windows.Forms.Label();
       this.gbJobCommon = new System.Windows.Forms.GroupBox();
       this.lvJobDetail = new System.Windows.Forms.ListView();
-      this.chJobId = new System.Windows.Forms.ColumnHeader();
-      this.chSince = new System.Windows.Forms.ColumnHeader();
-      this.chProgress = new System.Windows.Forms.ColumnHeader();
+      this.chJobId = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+      this.chSince = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+      this.chProgress = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
       this.gbCommon = new System.Windows.Forms.GroupBox();
       this.pbGraph = new System.Windows.Forms.PictureBox();
@@ -80,4 +79,5 @@
       this.txtLog = new System.Windows.Forms.TextBox();
       this.tabPage2 = new System.Windows.Forms.TabPage();
+      this.btnUpdateCalender = new System.Windows.Forms.Button();
       this.btnSaveCal = new System.Windows.Forms.Button();
       this.groupBox1 = new System.Windows.Forms.GroupBox();
@@ -95,5 +95,4 @@
       this.pictureBox1 = new System.Windows.Forms.PictureBox();
       this.ilEventLog = new System.Windows.Forms.ImageList(this.components);
-      this.btnUpdateCalender = new System.Windows.Forms.Button();
       this.tcClientConsole.SuspendLayout();
       this.tpConnection.SuspendLayout();
@@ -110,9 +109,9 @@
       // dvOnline
       // 
-      drawTool2.DayView = this.dvOnline;
-      this.dvOnline.ActiveTool = drawTool2;
+      drawTool1.DayView = this.dvOnline;
+      this.dvOnline.ActiveTool = drawTool1;
       this.dvOnline.AmPmDisplay = false;
-      this.dvOnline.AppointmentDuration = Calendar.AppointmentSlotDuration.SixtyMinutes;
-      this.dvOnline.AppointmentHeightMode = Calendar.AppHeightDrawMode.TrueHeightAll;
+      this.dvOnline.AppointmentDuration = HeuristicLab.Calendar.AppointmentSlotDuration.SixtyMinutes;
+      this.dvOnline.AppointmentHeightMode = HeuristicLab.Calendar.AppHeightDrawMode.TrueHeightAll;
       this.dvOnline.DayHeadersHeight = 15;
       this.dvOnline.DaysToShow = 7;
@@ -168,5 +167,4 @@
       this.gbServerConnection.Controls.Add(this.tbIPAdress);
       this.gbServerConnection.Controls.Add(this.lbServerIPCaption);
-      this.gbServerConnection.Controls.Add(this.lbPortCaption);
       this.gbServerConnection.Location = new System.Drawing.Point(346, 6);
       this.gbServerConnection.Name = "gbServerConnection";
@@ -222,13 +220,4 @@
       this.lbServerIPCaption.TabIndex = 0;
       this.lbServerIPCaption.Text = "IP address:";
-      // 
-      // lbPortCaption
-      // 
-      this.lbPortCaption.AutoSize = true;
-      this.lbPortCaption.Location = new System.Drawing.Point(48, 62);
-      this.lbPortCaption.Name = "lbPortCaption";
-      this.lbPortCaption.Size = new System.Drawing.Size(29, 13);
-      this.lbPortCaption.TabIndex = 1;
-      this.lbPortCaption.Text = "Port:";
       // 
       // gbJobCommon
@@ -446,4 +435,14 @@
       this.tabPage2.UseVisualStyleBackColor = true;
       // 
+      // btnUpdateCalender
+      // 
+      this.btnUpdateCalender.Location = new System.Drawing.Point(633, 136);
+      this.btnUpdateCalender.Name = "btnUpdateCalender";
+      this.btnUpdateCalender.Size = new System.Drawing.Size(199, 26);
+      this.btnUpdateCalender.TabIndex = 42;
+      this.btnUpdateCalender.Text = "Update Calender";
+      this.btnUpdateCalender.UseVisualStyleBackColor = true;
+      this.btnUpdateCalender.Click += new System.EventHandler(this.btnUpdateCalender_Click);
+      // 
       // btnSaveCal
       // 
@@ -594,15 +593,5 @@
       this.ilEventLog.Images.SetKeyName(1, "Error.png");
       // 
-      // btnUpdateCalender
-      // 
-      this.btnUpdateCalender.Location = new System.Drawing.Point(633, 136);
-      this.btnUpdateCalender.Name = "btnUpdateCalender";
-      this.btnUpdateCalender.Size = new System.Drawing.Size(199, 26);
-      this.btnUpdateCalender.TabIndex = 42;
-      this.btnUpdateCalender.Text = "Update Calender";
-      this.btnUpdateCalender.UseVisualStyleBackColor = true;
-      this.btnUpdateCalender.Click += new System.EventHandler(this.btnUpdateCalender_Click);
-      // 
-      // HiveClientConsole
+      // HiveSlaveConsole
       // 
       this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
@@ -614,5 +603,5 @@
       this.MaximizeBox = false;
       this.MinimizeBox = false;
-      this.Name = "HiveClientConsole";
+      this.Name = "HiveSlaveConsole";
       this.Text = "Client Console (loading...)";
       this.tcClientConsole.ResumeLayout(false);
@@ -666,5 +655,4 @@
     private System.Windows.Forms.TextBox tbIPAdress;
     private System.Windows.Forms.Label lbServerIPCaption;
-    private System.Windows.Forms.Label lbPortCaption;
     private System.Windows.Forms.GroupBox groupBox1;
     private System.Windows.Forms.Button btCreate;
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/HiveSlaveConsole.resx
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/HiveSlaveConsole.resx	(revision 4422)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/HiveSlaveConsole.resx	(revision 4423)
@@ -123,51 +123,51 @@
   <data name="ilEventLog.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
     <value>
-        AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
         LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
-        ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAABI
-        CgAAAk1TRnQBSQFMAgEBAgEAAQwBAAEMAQABEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA
-        AwABEAMAAQEBAAEgBgABECoAAUICNAF0AWQCEwHxAy8B/wFgAh8B1AEfAh4BLCwAAUICNAF0AWQCEwHx
-        Ay8B/wFgAh8B1AEfAh4BLKQAAV8CEgHyAZMBgQEvAf8BvwGBAS8B/wG9AYEBLwH/AboBgQEvAf8BuAGB
-        AS8B/wG2AYEBLwH/AWMBTAEvAf8BOwIyAWUcAAFfAhIB8gIvAaQB/wIvAdYB/wIvAdQB/wIvAdIB/wIv
-        AdAB/wIvAc4B/wIvAWoB/wE7AjIBZZgAATkBNQEvAf8BxwGBAS8B/wHDAYEBLwH/AbEBgQEvAf8BsQGB
-        AS8B/wGxAYEBLwH/AbEBgQEvAf8BswGBAS8B/wG2AYEBLwH/AbQBgQEvAf8BYgIXAeQUAAIvAToB/wIv
-        AdwB/wIvAdkB/wIvAcoB/wIvAcoB/wIvAcoB/wIvAcoB/wIvAcsB/wIvAc4B/wIvAcwB/wFiAhcB5JAA
-        Ay8B/wHLAYEBLwH/AbsBgQEvAf8BtgGBAS8B/wG2AYEBLwH/Ae4B3AHEBf8BvgGBAUwB/wG2AYEBLwH/
-        AbYBgQEvAf8BtgGBAS8B/wG0AYEBLwH/AUgCNAGGDAADLwH/Ai8B4AH/Ai8B0gH/Ai8BzgH/AlwB1gH/
-        Ai8BzgH/Ai8BzgH/Ai8BzgH/AjIBzgH/Ai8BzgH/Ai8BzgH/Ai8BzAH/AUgCNAGGiAABKwIoAUIB0AGG
-        AS8B/wHHAYEBLwH/AboBgQEvAf8BugGBAS8B/wG6AYEBLwH/AdABnAGBBf8BugGBAS8B/wG6AYEBLwH/
-        AboBgQEvAf8BugGBAS8B/wG2AYEBLwH/AYEBXgEvAf8IAAErAigBQgIvAeQB/wIvAdwB/wIvAdIB/wKf
-        Ae0F/wJ1Ad4B/wIvAdIB/wL0Af0F/wIyAdIB/wIvAdIB/wIvAc4B/wIvAYEB/4gAAy8B/wHSAYkBLwH/
-        Ab8BgQEvAf8BvwGBAS8B/wG/AYEBLwH/Ab8BgQEvAf8B0wGfAYEF/wG/AYEBLwH/Ab8BgQEvAf8BvwGB
-        AS8B/wG/AYEBLwH/Ab4BgQEvAf8BtgGBAS8B/wE1Ai8BVwQAAy8B/wIvAeUB/wIvAdYB/wIvAdYN/wL1
-        Af0J/wLiAfoB/wIvAdYB/wIvAdUB/wIvAc4B/wE1Ai8BV4QAAXcBXwEvAf8B1AGMAS8B/wHEAYEBLwH/
-        AcQBgQEvAf8BxAGBAS8B/wHEAYEBLwH/AdcBpAGBBf8BxAGBAS8B/wHEAYEBLwH/AcQBgQEvAf8BxAGB
-        AS8B/wHEAYEBLwH/AbgBgQEvAf8BZAIUAewEAAIvAX0B/wIvAegB/wIvAdoB/wIvAdoB/wIvAdoR/wLi
-        AfoB/wIvAdoB/wIvAdoB/wIvAdoB/wIvAdAB/wFkAhQB7IQAAYEBdAEvAf8B1wGOAS8B/wHJAYEBLwH/
-        AckBgQEvAf8ByQGBAS8B/wHJAYEBLwn/AckBgQEvAf8ByQGBAS8B/wHJAYEBLwH/AckBgQEvAf8ByQGB
-        AS8B/wG6AYEBLwH/Ay8B/wQAAi8BgQH/Ai8B6QH/Ai8B3gH/Ai8B3gH/Ai8B3gH/AvQB/Q3/AnUB5wH/
-        Ai8B3gH/Ai8B3gH/Ai8B3gH/Ai8B0gH/Ay8B/4QAAYEBZQEvAf8B2QGRAS8B/wHOAYMBLwH/Ac4BgwEv
-        Af8BzgGDAS8B/wHOAYMBLwH/Ac4BgwEvAf8B1wGcAWAB/wHOAYMBLwH/Ac4BgwEvAf8BzgGDAS8B/wHO
-        AYMBLwH/Ac4BgwEvAf8BvQGBAS8B/wFiAhcB+QQAAS8BNAGBAf8CLwHsAf8CLwHiAf8CLwHiAf8C9AH9
-        Ff8CdQHqAf8CLwHiAf8CLwHiAf8CLwHUAf8BYgIXAfmEAAEyATABLwH/AdsBlAEvAf8B0gGJAS8B/wHS
-        AYkBLwH/AdIBiQEvAf8B0gGJAS8B/wHSAYkBLwH/AesBywGQAf8B0gGJAS8B/wHSAYkBLwH/AdIBiQEv
-        Af8B0gGJAS8B/wHEAYEBLwH/Ab8BgQEvAf8BUAIyAZsEAAIvATIB/wIvAe0B/wIvAeYB/wIvAeUB/wL9
-        Af4F/wLiAfwB/wIvAeUJ/wKBAfEB/wIvAeUB/wIvAdoB/wIvAdYB/wFQAjIBm4QAAVYCLQGyAd4BmAEv
-        Af8B2wGUAS8B/wHXAY4BLwH/AdcBjgEvAf8B1wGOAS8B/wH7AfYB6wX/AdcBjgEvAf8B1wGOAS8B/wHX
-        AY4BLwH/AdYBjQEvAf8BxAGBAS8B/wGpAYEBLwH/CAABVgItAbIBLwE5Ae8B/wIvAe0B/wIvAekB/wIv
-        AekB/wLhAfwB/wIvAekB/wIvAekB/wIvAekB/wKBAfMB/wIvAekB/wIvAegB/wIvAdoB/wEvATcBnQH/
-        jAABaQFOAS8B/wHdAZcBLwH/AdsBlAEvAf8B2wGUAS8B/wHbAZQBLwH/AdsBlAEvAf8B3AGXATUB/wHb
-        AZQBLwH/AdsBlAEvAf8B1QGMAS8B/wHJAYEBLwH/AdEBiAEvAf8BKwIiAfwMAAIvAWMB/wIvAe8B/wIv
-        Ae0B/wIvAe0B/wIvAe0B/wIvAe0B/wIvAe0B/wIvAe0B/wIvAe0B/wIvAegB/wIvAd4B/wEvAUIB4gH/
-        ASsCIgH8jAABGAIXASEBkAGBAS8B/wHfAZkBLwH/AdsBlAEvAf8B2QGRAS8B/wHYAZABLwH/AdgBkAEv
-        Af8B0wGKAS8B/wHQAYYBLwH/Ac4BgwEvAf8B2gGSAS8B/wE6ATUBLwH/EAABGAIXASECLwGHAf8BLwE1
-        AfEB/wIvAe0B/wIvAewB/wIvAesB/wIvAesB/wIvAeYB/wIvAeQB/wIvAeIB/wEvAUwB5gH/Ai8BOQH/
-        lAADEAEWAVQBRgEvAf8B0gGJAS8B/wHiAZ0BLwH/AdkBkQEvAf8B1wGOAS8B/wHVAYwBLwH/AeEBmwEv
-        Af8BzgGEAS8B/wFQAjAB/hgAAxABFgIvAVMB/wEvATUB0wH/AS8BRgH0Af8CLwHsAf8CLwHpAf8BLwEw
-        AegB/wEvAU4B8AH/Ai8BzAH/AVACMAH+oAABRQI0AX0DLwH/AYEBZwEvAf8CgQEvAf8BYQFSAS8B/wFQ
-        AjAB/gMTARokAAFFAjQBfQMvAf8CLwGBAf8CLwGBAf8CLwFjAf8BUAIwAf4DEwEa/wCRAAFCAU0BPgcA
-        AT4DAAEoAwABQAMAARADAAEBAQABAQUAAYAXAAP/AQAB/AEfAfwBHwQAAfABBwHwAQcEAAHgAQMB4AED
-        BAABwAEBAcABAQQAAYABAQGAAQEEAAGAAQABgAUAAYABAAGABQABgAEAAYAFAAGAAQABgAUAAYABAAGA
-        BQABgAEBAYABAQQAAcABAQHAAQEEAAHAAQMBwAEDBAAB4AEHAeABBwQAAfgBDwH4AQ8EAAT/BAAL
+        ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAA4
+        CgAAAk1TRnQBSQFMAgEBAgEAARQBAAEUAQABEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA
+        AwABEAMAAQEBAAEgBgABECoAAUICPwF0AWQCHAHxAy4B/wFgAjMB1AMfASwsAAFCAj8BdAFkAhwB8QMu
+        Af8BYAIzAdQDHwEspAABXgIZAfIBkwGBAS4B/wG/AYEBLgH/Ab0BgQEuAf8BugGBAS4B/wG4AYEBLgH/
+        AbYBgQEuAf8BYgFLAS4B/wE7AjoBZRwAAV4CGQHyAi4BpAH/Ai4B1gH/Ai4B1AH/Ai4B0gH/Ai4B0AH/
+        Ai4BzgH/Ai4BaQH/ATsCOgFlmAABOAE0AS4B/wHHAYEBLgH/AcMBgQEuAf8BsQGBAS4B/wGxAYEBLgH/
+        AbEBgQEuAf8BsQGBAS4B/wGzAYEBLgH/AbYBgQEuAf8BtAGBAS4B/wFhAiYB5BQAAi4BOQH/Ai4B3AH/
+        Ai4B2QH/Ai4BygH/Ai4BygH/Ai4BygH/Ai4BygH/Ai4BywH/Ai4BzgH/Ai4BzAH/AWECJgHkkAADLgH/
+        AcsBgQEuAf8BuwGBAS4B/wG2AYEBLgH/AbYBgQEuAf8B7gHcAcQF/wG+AYEBSwH/AbYBgQEuAf8BtgGB
+        AS4B/wG2AYEBLgH/AbQBgQEuAf8BSAJCAYYMAAMuAf8CLgHgAf8CLgHSAf8CLgHOAf8CWwHWAf8CLgHO
+        Af8CLgHOAf8CLgHOAf8CMQHOAf8CLgHOAf8CLgHOAf8CLgHMAf8BSAJCAYaIAAMrAUIB0AGGAS4B/wHH
+        AYEBLgH/AboBgQEuAf8BugGBAS4B/wG6AYEBLgH/AdABnAGBBf8BugGBAS4B/wG6AYEBLgH/AboBgQEu
+        Af8BugGBAS4B/wG2AYEBLgH/AYEBXQEuAf8IAAMrAUICLgHkAf8CLgHcAf8CLgHSAf8CnwHtBf8CdAHe
+        Af8CLgHSAf8C9AH9Bf8CMQHSAf8CLgHSAf8CLgHOAf8CLgGBAf+IAAMuAf8B0gGJAS4B/wG/AYEBLgH/
+        Ab8BgQEuAf8BvwGBAS4B/wG/AYEBLgH/AdMBnwGBBf8BvwGBAS4B/wG/AYEBLgH/Ab8BgQEuAf8BvwGB
+        AS4B/wG+AYEBLgH/AbYBgQEuAf8DNQFXBAADLgH/Ai4B5QH/Ai4B1gH/Ai4B1g3/AvUB/Qn/AuIB+gH/
+        Ai4B1gH/Ai4B1QH/Ai4BzgH/AzUBV4QAAXYBXgEuAf8B1AGMAS4B/wHEAYEBLgH/AcQBgQEuAf8BxAGB
+        AS4B/wHEAYEBLgH/AdcBpAGBBf8BxAGBAS4B/wHEAYEBLgH/AcQBgQEuAf8BxAGBAS4B/wHEAYEBLgH/
+        AbgBgQEuAf8BZAIgAewEAAIuAXwB/wIuAegB/wIuAdoB/wIuAdoB/wIuAdoR/wLiAfoB/wIuAdoB/wIu
+        AdoB/wIuAdoB/wIuAdAB/wFkAiAB7IQAAYEBcwEuAf8B1wGOAS4B/wHJAYEBLgH/AckBgQEuAf8ByQGB
+        AS4B/wHJAYEBLgn/AckBgQEuAf8ByQGBAS4B/wHJAYEBLgH/AckBgQEuAf8ByQGBAS4B/wG6AYEBLgH/
+        Ay4B/wQAAi4BgQH/Ai4B6QH/Ai4B3gH/Ai4B3gH/Ai4B3gH/AvQB/Q3/AnQB5wH/Ai4B3gH/Ai4B3gH/
+        Ai4B3gH/Ai4B0gH/Ay4B/4QAAYEBZAEuAf8B2QGRAS4B/wHOAYMBLgH/Ac4BgwEuAf8BzgGDAS4B/wHO
+        AYMBLgH/Ac4BgwEuAf8B1wGcAV8B/wHOAYMBLgH/Ac4BgwEuAf8BzgGDAS4B/wHOAYMBLgH/Ac4BgwEu
+        Af8BvQGBAS4B/wFiAhkB+QQAAS4BMwGBAf8CLgHsAf8CLgHiAf8CLgHiAf8C9AH9Ff8CdAHqAf8CLgHi
+        Af8CLgHiAf8CLgHUAf8BYgIZAfmEAAExAS8BLgH/AdsBlAEuAf8B0gGJAS4B/wHSAYkBLgH/AdIBiQEu
+        Af8B0gGJAS4B/wHSAYkBLgH/AesBywGQAf8B0gGJAS4B/wHSAYkBLgH/AdIBiQEuAf8B0gGJAS4B/wHE
+        AYEBLgH/Ab8BgQEuAf8BUAJEAZsEAAIuATEB/wIuAe0B/wIuAeYB/wIuAeUB/wL9Af4F/wLiAfwB/wIu
+        AeUJ/wKBAfEB/wIuAeUB/wIuAdoB/wIuAdYB/wFQAkQBm4QAAVUCQgGyAd4BmAEuAf8B2wGUAS4B/wHX
+        AY4BLgH/AdcBjgEuAf8B1wGOAS4B/wH7AfYB6wX/AdcBjgEuAf8B1wGOAS4B/wHXAY4BLgH/AdYBjQEu
+        Af8BxAGBAS4B/wGpAYEBLgH/CAABVQJCAbIBLgE4Ae8B/wIuAe0B/wIuAekB/wIuAekB/wLhAfwB/wIu
+        AekB/wIuAekB/wIuAekB/wKBAfMB/wIuAekB/wIuAegB/wIuAdoB/wEuATYBnQH/jAABaAFNAS4B/wHd
+        AZcBLgH/AdsBlAEuAf8B2wGUAS4B/wHbAZQBLgH/AdsBlAEuAf8B3AGXATQB/wHbAZQBLgH/AdsBlAEu
+        Af8B1QGMAS4B/wHJAYEBLgH/AdEBiAEuAf8BKwIjAfwMAAIuAWIB/wIuAe8B/wIuAe0B/wIuAe0B/wIu
+        Ae0B/wIuAe0B/wIuAe0B/wIuAe0B/wIuAe0B/wIuAegB/wIuAd4B/wEuAUEB4gH/ASsCIwH8jAADGAEh
+        AZABgQEuAf8B3wGZAS4B/wHbAZQBLgH/AdkBkQEuAf8B2AGQAS4B/wHYAZABLgH/AdMBigEuAf8B0AGG
+        AS4B/wHOAYMBLgH/AdoBkgEuAf8BOQE0AS4B/xAAAxgBIQIuAYcB/wEuATQB8QH/Ai4B7QH/Ai4B7AH/
+        Ai4B6wH/Ai4B6wH/Ai4B5gH/Ai4B5AH/Ai4B4gH/AS4BSwHmAf8CLgE4Af+UAAMQARYBUwFFAS4B/wHS
+        AYkBLgH/AeIBnQEuAf8B2QGRAS4B/wHXAY4BLgH/AdUBjAEuAf8B4QGbAS4B/wHOAYQBLgH/AVACMAH+
+        GAADEAEWAi4BUgH/AS4BNAHTAf8BLgFFAfQB/wIuAewB/wIuAekB/wEuAS8B6AH/AS4BTQHwAf8CLgHM
+        Af8BUAIwAf6gAAFFAkEBfQMuAf8BgQFmAS4B/wKBAS4B/wFgAVEBLgH/AVACMAH+AxMBGiQAAUUCQQF9
+        Ay4B/wIuAYEB/wIuAYEB/wIuAWIB/wFQAjAB/gMTARr/AJEAAUIBTQE+BwABPgMAASgDAAFAAwABEAMA
+        AQEBAAEBBQABgBcAA/8BAAH8AR8B/AEfBAAB8AEHAfABBwQAAeABAwHgAQMEAAHAAQEBwAEBBAABgAEB
+        AYABAQQAAYABAAGABQABgAEAAYAFAAGAAQABgAUAAYABAAGABQABgAEAAYAFAAGAAQEBgAEBBAABwAEB
+        AcABAQQAAcABAwHAAQMEAAHgAQcB4AEHBAAB+AEPAfgBDwQABP8EAAs=
 </value>
   </data>
Index: anches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/ServerProxy.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/ServerProxy.cs	(revision 4422)
+++ 	(revision )
@@ -1,551 +1,0 @@
-﻿using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-
-namespace HeuristicLab.Hive.Client.Console {
-  [System.Diagnostics.DebuggerStepThroughAttribute()]
-  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")]
-  [System.Runtime.Serialization.DataContractAttribute(Name = "StatusCommons", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Client.Core.ClientConso" +
-      "leService")]
-  public partial class StatusCommons : object, System.Runtime.Serialization.IExtensibleDataObject {
-
-    private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
-
-    private System.Guid ClientGuidk__BackingFieldField;
-
-    private System.DateTime ConnectedSincek__BackingFieldField;
-
-    private int JobsAbortedk__BackingFieldField;
-
-    private int JobsDonek__BackingFieldField;
-
-    private int JobsFetchedk__BackingFieldField;
-
-    private HeuristicLab.Hive.Client.Core.ClientConsoleService.JobStatus[] Jobsk__BackingFieldField;
-
-    private HeuristicLab.Hive.Client.Common.NetworkEnumWcfConnState Statusk__BackingFieldField;
-
-    public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
-      get {
-        return this.extensionDataField;
-      }
-      set {
-        this.extensionDataField = value;
-      }
-    }
-
-    [System.Runtime.Serialization.DataMemberAttribute(Name = "<ClientGuid>k__BackingField", IsRequired = true)]
-    public System.Guid ClientGuidk__BackingField {
-      get {
-        return this.ClientGuidk__BackingFieldField;
-      }
-      set {
-        this.ClientGuidk__BackingFieldField = value;
-      }
-    }
-
-    [System.Runtime.Serialization.DataMemberAttribute(Name = "<ConnectedSince>k__BackingField", IsRequired = true)]
-    public System.DateTime ConnectedSincek__BackingField {
-      get {
-        return this.ConnectedSincek__BackingFieldField;
-      }
-      set {
-        this.ConnectedSincek__BackingFieldField = value;
-      }
-    }
-
-    [System.Runtime.Serialization.DataMemberAttribute(Name = "<JobsAborted>k__BackingField", IsRequired = true)]
-    public int JobsAbortedk__BackingField {
-      get {
-        return this.JobsAbortedk__BackingFieldField;
-      }
-      set {
-        this.JobsAbortedk__BackingFieldField = value;
-      }
-    }
-
-    [System.Runtime.Serialization.DataMemberAttribute(Name = "<JobsDone>k__BackingField", IsRequired = true)]
-    public int JobsDonek__BackingField {
-      get {
-        return this.JobsDonek__BackingFieldField;
-      }
-      set {
-        this.JobsDonek__BackingFieldField = value;
-      }
-    }
-
-    [System.Runtime.Serialization.DataMemberAttribute(Name = "<JobsFetched>k__BackingField", IsRequired = true)]
-    public int JobsFetchedk__BackingField {
-      get {
-        return this.JobsFetchedk__BackingFieldField;
-      }
-      set {
-        this.JobsFetchedk__BackingFieldField = value;
-      }
-    }
-
-    [System.Runtime.Serialization.DataMemberAttribute(Name = "<Jobs>k__BackingField", IsRequired = true)]
-    public HeuristicLab.Hive.Client.Core.ClientConsoleService.JobStatus[] Jobsk__BackingField {
-      get {
-        return this.Jobsk__BackingFieldField;
-      }
-      set {
-        this.Jobsk__BackingFieldField = value;
-      }
-    }
-
-    [System.Runtime.Serialization.DataMemberAttribute(Name = "<Status>k__BackingField", IsRequired = true)]
-    public HeuristicLab.Hive.Client.Common.NetworkEnumWcfConnState Statusk__BackingField {
-      get {
-        return this.Statusk__BackingFieldField;
-      }
-      set {
-        this.Statusk__BackingFieldField = value;
-      }
-    }
-  }
-
-  [System.Diagnostics.DebuggerStepThroughAttribute()]
-  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")]
-  [System.Runtime.Serialization.DataContractAttribute(Name = "JobStatus", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Client.Core.ClientConso" +
-      "leService")]
-  public partial class JobStatus : object, System.Runtime.Serialization.IExtensibleDataObject {
-
-    private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
-
-    private long JobIdk__BackingFieldField;
-
-    private double Progressk__BackingFieldField;
-
-    private System.DateTime Sincek__BackingFieldField;
-
-    public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
-      get {
-        return this.extensionDataField;
-      }
-      set {
-        this.extensionDataField = value;
-      }
-    }
-
-    [System.Runtime.Serialization.DataMemberAttribute(Name = "<JobId>k__BackingField", IsRequired = true)]
-    public long JobIdk__BackingField {
-      get {
-        return this.JobIdk__BackingFieldField;
-      }
-      set {
-        this.JobIdk__BackingFieldField = value;
-      }
-    }
-
-    [System.Runtime.Serialization.DataMemberAttribute(Name = "<Progress>k__BackingField", IsRequired = true)]
-    public double Progressk__BackingField {
-      get {
-        return this.Progressk__BackingFieldField;
-      }
-      set {
-        this.Progressk__BackingFieldField = value;
-      }
-    }
-
-    [System.Runtime.Serialization.DataMemberAttribute(Name = "<Since>k__BackingField", IsRequired = true)]
-    public System.DateTime Sincek__BackingField {
-      get {
-        return this.Sincek__BackingFieldField;
-      }
-      set {
-        this.Sincek__BackingFieldField = value;
-      }
-    }
-  }
-
-  [System.Diagnostics.DebuggerStepThroughAttribute()]
-  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")]
-  [System.Runtime.Serialization.DataContractAttribute(Name = "ConnectionContainer", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Client.Core.ClientConso" +
-      "leService")]
-  public partial class ConnectionContainer : object, System.Runtime.Serialization.IExtensibleDataObject {
-
-    private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
-
-    private string IPAdressk__BackingFieldField;
-
-    private int Portk__BackingFieldField;
-
-    public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
-      get {
-        return this.extensionDataField;
-      }
-      set {
-        this.extensionDataField = value;
-      }
-    }
-
-    [System.Runtime.Serialization.DataMemberAttribute(Name = "<IPAdress>k__BackingField", IsRequired = true)]
-    public string IPAdressk__BackingField {
-      get {
-        return this.IPAdressk__BackingFieldField;
-      }
-      set {
-        this.IPAdressk__BackingFieldField = value;
-      }
-    }
-
-    [System.Runtime.Serialization.DataMemberAttribute(Name = "<Port>k__BackingField", IsRequired = true)]
-    public int Portk__BackingField {
-      get {
-        return this.Portk__BackingFieldField;
-      }
-      set {
-        this.Portk__BackingFieldField = value;
-      }
-    }
-  }
-}
-namespace HeuristicLab.Hive.Client.Common {
-  using System.Runtime.Serialization;
-
-
-  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")]
-  [System.Runtime.Serialization.DataContractAttribute(Name = "NetworkEnum.WcfConnState", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Client.Common")]
-  public enum NetworkEnumWcfConnState : int {
-
-    [System.Runtime.Serialization.EnumMemberAttribute()]
-    Connected = 0,
-
-    [System.Runtime.Serialization.EnumMemberAttribute()]
-    Disconnected = 1,
-
-    [System.Runtime.Serialization.EnumMemberAttribute()]
-    Failed = 2,
-  }
-}
-
-
-[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
-[System.ServiceModel.ServiceContractAttribute(ConfigurationName = "IClientConsoleCommunicator")]
-public interface IClientConsoleCommunicator {
-
-  [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IClientConsoleCommunicator/GetStatusInfos", ReplyAction = "http://tempuri.org/IClientConsoleCommunicator/GetStatusInfosResponse")]
-  HeuristicLab.Hive.Client.Core.ClientConsoleService.StatusCommons GetStatusInfos();
-
-  [System.ServiceModel.OperationContractAttribute(AsyncPattern = true, Action = "http://tempuri.org/IClientConsoleCommunicator/GetStatusInfos", ReplyAction = "http://tempuri.org/IClientConsoleCommunicator/GetStatusInfosResponse")]
-  System.IAsyncResult BeginGetStatusInfos(System.AsyncCallback callback, object asyncState);
-
-  HeuristicLab.Hive.Client.Core.ClientConsoleService.StatusCommons EndGetStatusInfos(System.IAsyncResult result);
-
-  [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IClientConsoleCommunicator/GetConnection", ReplyAction = "http://tempuri.org/IClientConsoleCommunicator/GetConnectionResponse")]
-  HeuristicLab.Hive.Client.Core.ClientConsoleService.ConnectionContainer GetConnection();
-
-  [System.ServiceModel.OperationContractAttribute(AsyncPattern = true, Action = "http://tempuri.org/IClientConsoleCommunicator/GetConnection", ReplyAction = "http://tempuri.org/IClientConsoleCommunicator/GetConnectionResponse")]
-  System.IAsyncResult BeginGetConnection(System.AsyncCallback callback, object asyncState);
-
-  HeuristicLab.Hive.Client.Core.ClientConsoleService.ConnectionContainer EndGetConnection(System.IAsyncResult result);
-
-  [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IClientConsoleCommunicator/SetConnection", ReplyAction = "http://tempuri.org/IClientConsoleCommunicator/SetConnectionResponse")]
-  void SetConnection(HeuristicLab.Hive.Client.Core.ClientConsoleService.ConnectionContainer container);
-
-  [System.ServiceModel.OperationContractAttribute(AsyncPattern = true, Action = "http://tempuri.org/IClientConsoleCommunicator/SetConnection", ReplyAction = "http://tempuri.org/IClientConsoleCommunicator/SetConnectionResponse")]
-  System.IAsyncResult BeginSetConnection(HeuristicLab.Hive.Client.Core.ClientConsoleService.ConnectionContainer container, System.AsyncCallback callback, object asyncState);
-
-  void EndSetConnection(System.IAsyncResult result);
-
-  [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IClientConsoleCommunicator/Disconnect", ReplyAction = "http://tempuri.org/IClientConsoleCommunicator/DisconnectResponse")]
-  void Disconnect();
-
-  [System.ServiceModel.OperationContractAttribute(AsyncPattern = true, Action = "http://tempuri.org/IClientConsoleCommunicator/Disconnect", ReplyAction = "http://tempuri.org/IClientConsoleCommunicator/DisconnectResponse")]
-  System.IAsyncResult BeginDisconnect(System.AsyncCallback callback, object asyncState);
-
-  void EndDisconnect(System.IAsyncResult result);
-}
-
-[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
-public interface IClientConsoleCommunicatorChannel : IClientConsoleCommunicator, System.ServiceModel.IClientChannel {
-}
-
-[System.Diagnostics.DebuggerStepThroughAttribute()]
-[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
-public partial class GetStatusInfosCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
-
-  private object[] results;
-
-  public GetStatusInfosCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) :
-    base(exception, cancelled, userState) {
-    this.results = results;
-  }
-
-  public HeuristicLab.Hive.Client.Core.ClientConsoleService.StatusCommons Result {
-    get {
-      base.RaiseExceptionIfNecessary();
-      return ((HeuristicLab.Hive.Client.Core.ClientConsoleService.StatusCommons)(this.results[0]));
-    }
-  }
-}
-
-[System.Diagnostics.DebuggerStepThroughAttribute()]
-[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
-public partial class GetConnectionCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
-
-  private object[] results;
-
-  public GetConnectionCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) :
-    base(exception, cancelled, userState) {
-    this.results = results;
-  }
-
-  public HeuristicLab.Hive.Client.Core.ClientConsoleService.ConnectionContainer Result {
-    get {
-      base.RaiseExceptionIfNecessary();
-      return ((HeuristicLab.Hive.Client.Core.ClientConsoleService.ConnectionContainer)(this.results[0]));
-    }
-  }
-}
-
-[System.Diagnostics.DebuggerStepThroughAttribute()]
-[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
-public partial class ClientConsoleCommunicatorClient : System.ServiceModel.ClientBase<IClientConsoleCommunicator>, IClientConsoleCommunicator {
-
-  private BeginOperationDelegate onBeginGetStatusInfosDelegate;
-
-  private EndOperationDelegate onEndGetStatusInfosDelegate;
-
-  private System.Threading.SendOrPostCallback onGetStatusInfosCompletedDelegate;
-
-  private BeginOperationDelegate onBeginGetConnectionDelegate;
-
-  private EndOperationDelegate onEndGetConnectionDelegate;
-
-  private System.Threading.SendOrPostCallback onGetConnectionCompletedDelegate;
-
-  private BeginOperationDelegate onBeginSetConnectionDelegate;
-
-  private EndOperationDelegate onEndSetConnectionDelegate;
-
-  private System.Threading.SendOrPostCallback onSetConnectionCompletedDelegate;
-
-  private BeginOperationDelegate onBeginDisconnectDelegate;
-
-  private EndOperationDelegate onEndDisconnectDelegate;
-
-  private System.Threading.SendOrPostCallback onDisconnectCompletedDelegate;
-
-  public ClientConsoleCommunicatorClient() {
-  }
-
-  public ClientConsoleCommunicatorClient(string endpointConfigurationName) :
-    base(endpointConfigurationName) {
-  }
-
-  public ClientConsoleCommunicatorClient(string endpointConfigurationName, string remoteAddress) :
-    base(endpointConfigurationName, remoteAddress) {
-  }
-
-  public ClientConsoleCommunicatorClient(string endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) :
-    base(endpointConfigurationName, remoteAddress) {
-  }
-
-  public ClientConsoleCommunicatorClient(System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress) :
-    base(binding, remoteAddress) {
-  }
-
-  public event System.EventHandler<GetStatusInfosCompletedEventArgs> GetStatusInfosCompleted;
-
-  public event System.EventHandler<GetConnectionCompletedEventArgs> GetConnectionCompleted;
-
-  public event System.EventHandler<System.ComponentModel.AsyncCompletedEventArgs> SetConnectionCompleted;
-
-  public event System.EventHandler<System.ComponentModel.AsyncCompletedEventArgs> DisconnectCompleted;
-
-  public HeuristicLab.Hive.Client.Core.ClientConsoleService.StatusCommons GetStatusInfos() {
-    return base.Channel.GetStatusInfos();
-  }
-
-  [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
-  public System.IAsyncResult BeginGetStatusInfos(System.AsyncCallback callback, object asyncState) {
-    return base.Channel.BeginGetStatusInfos(callback, asyncState);
-  }
-
-  [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
-  public HeuristicLab.Hive.Client.Core.ClientConsoleService.StatusCommons EndGetStatusInfos(System.IAsyncResult result) {
-    return base.Channel.EndGetStatusInfos(result);
-  }
-
-  private System.IAsyncResult OnBeginGetStatusInfos(object[] inValues, System.AsyncCallback callback, object asyncState) {
-    return this.BeginGetStatusInfos(callback, asyncState);
-  }
-
-  private object[] OnEndGetStatusInfos(System.IAsyncResult result) {
-    HeuristicLab.Hive.Client.Core.ClientConsoleService.StatusCommons retVal = this.EndGetStatusInfos(result);
-    return new object[] {
-                retVal};
-  }
-
-  private void OnGetStatusInfosCompleted(object state) {
-    if ((this.GetStatusInfosCompleted != null)) {
-      InvokeAsyncCompletedEventArgs e = ((InvokeAsyncCompletedEventArgs)(state));
-      this.GetStatusInfosCompleted(this, new GetStatusInfosCompletedEventArgs(e.Results, e.Error, e.Cancelled, e.UserState));
-    }
-  }
-
-  public void GetStatusInfosAsync() {
-    this.GetStatusInfosAsync(null);
-  }
-
-  public void GetStatusInfosAsync(object userState) {
-    if ((this.onBeginGetStatusInfosDelegate == null)) {
-      this.onBeginGetStatusInfosDelegate = new BeginOperationDelegate(this.OnBeginGetStatusInfos);
-    }
-    if ((this.onEndGetStatusInfosDelegate == null)) {
-      this.onEndGetStatusInfosDelegate = new EndOperationDelegate(this.OnEndGetStatusInfos);
-    }
-    if ((this.onGetStatusInfosCompletedDelegate == null)) {
-      this.onGetStatusInfosCompletedDelegate = new System.Threading.SendOrPostCallback(this.OnGetStatusInfosCompleted);
-    }
-    base.InvokeAsync(this.onBeginGetStatusInfosDelegate, null, this.onEndGetStatusInfosDelegate, this.onGetStatusInfosCompletedDelegate, userState);
-  }
-
-  public HeuristicLab.Hive.Client.Core.ClientConsoleService.ConnectionContainer GetConnection() {
-    return base.Channel.GetConnection();
-  }
-
-  [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
-  public System.IAsyncResult BeginGetConnection(System.AsyncCallback callback, object asyncState) {
-    return base.Channel.BeginGetConnection(callback, asyncState);
-  }
-
-  [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
-  public HeuristicLab.Hive.Client.Core.ClientConsoleService.ConnectionContainer EndGetConnection(System.IAsyncResult result) {
-    return base.Channel.EndGetConnection(result);
-  }
-
-  private System.IAsyncResult OnBeginGetConnection(object[] inValues, System.AsyncCallback callback, object asyncState) {
-    return this.BeginGetConnection(callback, asyncState);
-  }
-
-  private object[] OnEndGetConnection(System.IAsyncResult result) {
-    HeuristicLab.Hive.Client.Core.ClientConsoleService.ConnectionContainer retVal = this.EndGetConnection(result);
-    return new object[] {
-                retVal};
-  }
-
-  private void OnGetConnectionCompleted(object state) {
-    if ((this.GetConnectionCompleted != null)) {
-      InvokeAsyncCompletedEventArgs e = ((InvokeAsyncCompletedEventArgs)(state));
-      this.GetConnectionCompleted(this, new GetConnectionCompletedEventArgs(e.Results, e.Error, e.Cancelled, e.UserState));
-    }
-  }
-
-  public void GetConnectionAsync() {
-    this.GetConnectionAsync(null);
-  }
-
-  public void GetConnectionAsync(object userState) {
-    if ((this.onBeginGetConnectionDelegate == null)) {
-      this.onBeginGetConnectionDelegate = new BeginOperationDelegate(this.OnBeginGetConnection);
-    }
-    if ((this.onEndGetConnectionDelegate == null)) {
-      this.onEndGetConnectionDelegate = new EndOperationDelegate(this.OnEndGetConnection);
-    }
-    if ((this.onGetConnectionCompletedDelegate == null)) {
-      this.onGetConnectionCompletedDelegate = new System.Threading.SendOrPostCallback(this.OnGetConnectionCompleted);
-    }
-    base.InvokeAsync(this.onBeginGetConnectionDelegate, null, this.onEndGetConnectionDelegate, this.onGetConnectionCompletedDelegate, userState);
-  }
-
-  public void SetConnection(HeuristicLab.Hive.Client.Core.ClientConsoleService.ConnectionContainer container) {
-    base.Channel.SetConnection(container);
-  }
-
-  [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
-  public System.IAsyncResult BeginSetConnection(HeuristicLab.Hive.Client.Core.ClientConsoleService.ConnectionContainer container, System.AsyncCallback callback, object asyncState) {
-    return base.Channel.BeginSetConnection(container, callback, asyncState);
-  }
-
-  [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
-  public void EndSetConnection(System.IAsyncResult result) {
-    base.Channel.EndSetConnection(result);
-  }
-
-  private System.IAsyncResult OnBeginSetConnection(object[] inValues, System.AsyncCallback callback, object asyncState) {
-    HeuristicLab.Hive.Client.Core.ClientConsoleService.ConnectionContainer container = ((HeuristicLab.Hive.Client.Core.ClientConsoleService.ConnectionContainer)(inValues[0]));
-    return this.BeginSetConnection(container, callback, asyncState);
-  }
-
-  private object[] OnEndSetConnection(System.IAsyncResult result) {
-    this.EndSetConnection(result);
-    return null;
-  }
-
-  private void OnSetConnectionCompleted(object state) {
-    if ((this.SetConnectionCompleted != null)) {
-      InvokeAsyncCompletedEventArgs e = ((InvokeAsyncCompletedEventArgs)(state));
-      this.SetConnectionCompleted(this, new System.ComponentModel.AsyncCompletedEventArgs(e.Error, e.Cancelled, e.UserState));
-    }
-  }
-
-  public void SetConnectionAsync(HeuristicLab.Hive.Client.Core.ClientConsoleService.ConnectionContainer container) {
-    this.SetConnectionAsync(container, null);
-  }
-
-  public void SetConnectionAsync(HeuristicLab.Hive.Client.Core.ClientConsoleService.ConnectionContainer container, object userState) {
-    if ((this.onBeginSetConnectionDelegate == null)) {
-      this.onBeginSetConnectionDelegate = new BeginOperationDelegate(this.OnBeginSetConnection);
-    }
-    if ((this.onEndSetConnectionDelegate == null)) {
-      this.onEndSetConnectionDelegate = new EndOperationDelegate(this.OnEndSetConnection);
-    }
-    if ((this.onSetConnectionCompletedDelegate == null)) {
-      this.onSetConnectionCompletedDelegate = new System.Threading.SendOrPostCallback(this.OnSetConnectionCompleted);
-    }
-    base.InvokeAsync(this.onBeginSetConnectionDelegate, new object[] {
-                    container}, this.onEndSetConnectionDelegate, this.onSetConnectionCompletedDelegate, userState);
-  }
-
-  public void Disconnect() {
-    base.Channel.Disconnect();
-  }
-
-  [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
-  public System.IAsyncResult BeginDisconnect(System.AsyncCallback callback, object asyncState) {
-    return base.Channel.BeginDisconnect(callback, asyncState);
-  }
-
-  [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
-  public void EndDisconnect(System.IAsyncResult result) {
-    base.Channel.EndDisconnect(result);
-  }
-
-  private System.IAsyncResult OnBeginDisconnect(object[] inValues, System.AsyncCallback callback, object asyncState) {
-    return this.BeginDisconnect(callback, asyncState);
-  }
-
-  private object[] OnEndDisconnect(System.IAsyncResult result) {
-    this.EndDisconnect(result);
-    return null;
-  }
-
-  private void OnDisconnectCompleted(object state) {
-    if ((this.DisconnectCompleted != null)) {
-      InvokeAsyncCompletedEventArgs e = ((InvokeAsyncCompletedEventArgs)(state));
-      this.DisconnectCompleted(this, new System.ComponentModel.AsyncCompletedEventArgs(e.Error, e.Cancelled, e.UserState));
-    }
-  }
-
-  public void DisconnectAsync() {
-    this.DisconnectAsync(null);
-  }
-
-  public void DisconnectAsync(object userState) {
-    if ((this.onBeginDisconnectDelegate == null)) {
-      this.onBeginDisconnectDelegate = new BeginOperationDelegate(this.OnBeginDisconnect);
-    }
-    if ((this.onEndDisconnectDelegate == null)) {
-      this.onEndDisconnectDelegate = new EndOperationDelegate(this.OnEndDisconnect);
-    }
-    if ((this.onDisconnectCompletedDelegate == null)) {
-      this.onDisconnectCompletedDelegate = new System.Threading.SendOrPostCallback(this.OnDisconnectCompleted);
-    }
-    base.InvokeAsync(this.onBeginDisconnectDelegate, null, this.onEndDisconnectDelegate, this.onDisconnectCompletedDelegate, userState);
-  }
-
-}
Index: anches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/ServiceLocator.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/ServiceLocator.cs	(revision 4422)
+++ 	(revision )
@@ -1,23 +1,0 @@
-﻿using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.ServiceModel;
-//using HeuristicLab.Hive.Client.ClientConsole;
-
-namespace HeuristicLab.Hive.Client.Console {
-  public class ServiceLocator {
-    private static ClientConsoleCommunicatorClient proxy = null;
-
-    public static ClientConsoleCommunicatorClient ClientConsoleCommunicatorClient() {
-      if (proxy == null) {
-        proxy = new ClientConsoleCommunicatorClient(
-          new NetTcpBinding(),
-          new EndpointAddress("net.tcp://127.0.0.1:8000/ClientConsole/ClientConsoleCommunicator")
-          );
-      }
-
-      return proxy;
-    }
-  }
-}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/ConfigurationManager/ConfigManager.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/ConfigurationManager/ConfigManager.cs	(revision 4422)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/ConfigurationManager/ConfigManager.cs	(revision 4423)
@@ -107,6 +107,6 @@
       st.ConnectedSince = WcfService.Instance.ConnectedSince;
 
-      st.TotalCores = hardwareInfo.NrOfCores;
-      st.FreeCores = hardwareInfo.NrOfCores - GetUsedCores();
+      st.TotalCores = hardwareInfo.NrOfCores.HasValue ? hardwareInfo.NrOfCores.Value : 0;
+      st.FreeCores = hardwareInfo.NrOfCores.HasValue ? hardwareInfo.NrOfCores.Value - GetUsedCores() : 0;
 
       st.JobsAborted = SlaveStatusInfo.JobsAborted;
@@ -120,5 +120,5 @@
         foreach (KeyValuePair<Guid, Executor> kvp in engines) {
           Executor e = kvp.Value;
-          st.Jobs.Add(new JobStatus { JobId = e.JobId, Progress = e.Progress, Since = e.CreationTime });
+          st.Jobs.Add(new JobStatus { JobId = e.JobId, ExecutionTime = e.ExecutionTime, Since = e.CreationTime });
         }
       }
@@ -126,12 +126,11 @@
     }
 
-    public Dictionary<Guid, double> GetProgressOfAllJobs() {
-      Dictionary<Guid, double> prog = new Dictionary<Guid, double>();
+    public Dictionary<Guid, TimeSpan> GetExecutionTimeOfAllJobs() {
+      Dictionary<Guid, TimeSpan> prog = new Dictionary<Guid, TimeSpan>();
       Dictionary<Guid, Executor> engines = Core.ExecutionEngines;
       lock (engines) {
         foreach (KeyValuePair<Guid, Executor> kvp in engines) {
           Executor e = kvp.Value;
-          //if (!e.JobIsFinished) 
-          prog[e.JobId] = e.Progress;
+          prog[e.JobId] = e.ExecutionTime;
         }
       }
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/Core.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/Core.cs	(revision 4422)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/Core.cs	(revision 4423)
@@ -36,4 +36,5 @@
 using HeuristicLab.Hive.Slave.ExecutionEngine;
 using HeuristicLab.Tracing;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Hive.Slave.Core {
@@ -44,4 +45,11 @@
     public static bool abortRequested { get; set; }
 
+    private Dictionary<Guid, Executor> engines = new Dictionary<Guid, Executor>();
+    private Dictionary<Guid, AppDomain> appDomains = new Dictionary<Guid, AppDomain>();
+    private Dictionary<Guid, JobDto> jobs = new Dictionary<Guid, JobDto>();
+
+    private WcfService wcfService;
+    private HeartbeatManager heartbeatManager;
+
     private bool currentlyFetching;
     private bool CurrentlyFetching {
@@ -55,10 +63,11 @@
     }
 
-    private Dictionary<Guid, Executor> engines = new Dictionary<Guid, Executor>();
-    private Dictionary<Guid, AppDomain> appDomains = new Dictionary<Guid, AppDomain>();
-    private Dictionary<Guid, JobDto> jobs = new Dictionary<Guid, JobDto>();
-
-    private WcfService wcfService;
-    private HeartbeatManager beat;
+    public Dictionary<Guid, Executor> ExecutionEngines {
+      get { return engines; }
+    }
+
+    internal Dictionary<Guid, JobDto> Jobs {
+      get { return jobs; }
+    }
 
     /// <summary>
@@ -70,5 +79,5 @@
       SlaveConsoleServer server = new SlaveConsoleServer();
       server.Start();
-      
+
       ConfigManager manager = ConfigManager.Instance;
       manager.Core = this;
@@ -95,6 +104,6 @@
     private void StartHeartbeats() {
       //Initialize the heartbeat
-      beat = new HeartbeatManager { Interval = new TimeSpan(0, 0, 10) };
-      beat.StartHeartbeat();
+      heartbeatManager = new HeartbeatManager { Interval = new TimeSpan(0, 0, 10) };
+      heartbeatManager.StartHeartbeat();
     }
 
@@ -111,6 +120,4 @@
       wcfService.GetFinishedJobResultCompleted += new EventHandler<StoreFinishedJobResultCompletedEventArgs>(wcfService_StoreFinishedJobResultCompleted);
       wcfService.ProcessSnapshotCompleted += new EventHandler<ProcessSnapshotCompletedEventArgs>(wcfService_ProcessSnapshotCompleted);
-      wcfService.ConnectionRestored += new EventHandler(wcfService_ConnectionRestored);
-      //wcfService.ServerChanged += new EventHandler(wcfService_ServerChanged);
       wcfService.Connected += new EventHandler(wcfService_Connected);
     }
@@ -120,6 +127,4 @@
       wcfService.GetFinishedJobResultCompleted -= new EventHandler<StoreFinishedJobResultCompletedEventArgs>(wcfService_StoreFinishedJobResultCompleted);
       wcfService.ProcessSnapshotCompleted -= new EventHandler<ProcessSnapshotCompletedEventArgs>(wcfService_ProcessSnapshotCompleted);
-      wcfService.ConnectionRestored -= new EventHandler(wcfService_ConnectionRestored);
-      //wcfService.ServerChanged -= new EventHandler(wcfService_ServerChanged);
       wcfService.Connected -= new EventHandler(wcfService_Connected);
     }
@@ -135,5 +140,10 @@
         case MessageContainer.MessageType.AbortJob:
           if (engines.ContainsKey(container.JobId))
-            engines[container.JobId].Abort();
+            try {
+              engines[container.JobId].Abort();
+            }
+            catch (AppDomainUnloadedException) {
+              // appdomain already unloaded. Finishing job probably ongoing
+            }
           else
             Logger.Error("AbortJob: Engine doesn't exist");
@@ -156,5 +166,5 @@
         //Snapshot is ready and can be sent back to the Server
         case MessageContainer.MessageType.SnapshotReady:
-          ThreadPool.QueueUserWorkItem(new WaitCallback(GetSnapshot), container.JobId);
+          GetSnapshot(container.JobId);
           break;
 
@@ -168,15 +178,12 @@
           break;
 
-
         //A Job has finished and can be sent back to the server
         case MessageContainer.MessageType.FinishedJob:
-          ThreadPool.QueueUserWorkItem(new WaitCallback(GetFinishedJob), container.JobId);
-          break;
-
+          SendFinishedJob(container.JobId);
+          break;
 
         //When the timeslice is up
         case MessageContainer.MessageType.UptimeLimitDisconnect:
           Logger.Info("Uptime Limit reached, storing jobs and sending them back");
-
           ShutdownRunningJobsAndSubmitSnapshots();
           break;
@@ -201,5 +208,5 @@
           Logger.Debug("Stopping heartbeat");
           abortRequested = true;
-          beat.StopHeartBeat();
+          heartbeatManager.StopHeartBeat();
           Logger.Debug("Logging out");
           WcfService.Instance.Logout(ConfigManager.Instance.GetClientInfo().Id);
@@ -216,6 +223,9 @@
 
         case MessageContainer.MessageType.GetChildJobs:
-          // send the job back to hive
           GetChildJobs((MessageContainerWithCallback<SerializedJobList>)container);
+          break;
+
+        case MessageContainer.MessageType.DeleteChildJobs:
+          wcfService.DeleteChildJobs(container.JobId);
           break;
       }
@@ -224,8 +234,12 @@
     private void GetChildJobs(MessageContainerWithCallback<SerializedJobList> mc) {
       ResponseObject<SerializedJobList> response = wcfService.GetChildJobs(mc.JobId);
-      if (response.StatusMessage != ResponseStatus.Ok) {
-        Logger.Error("GetChildJobs failed: " + response.StatusMessage);
+      if (response != null && response.StatusMessage == ResponseStatus.Ok) {
+        mc.Callback(response.Obj);
       } else {
-        mc.Callback(response.Obj);
+        if (response != null) {
+          Logger.Error(string.Format("GetChildJobs failed: {0}", response.StatusMessage));
+        } else {
+          Logger.Error("GetChildJobs failed.");
+        }
       }
     }
@@ -234,5 +248,5 @@
       ResponseObject<JobDto> response = wcfService.PauseJob(mc.SerializedJob);
       KillAppDomain(mc.JobId);
-      if (response.StatusMessage != ResponseStatus.Ok) {
+      if (response == null || response.StatusMessage != ResponseStatus.Ok) {
         Logger.Error("PauseJob failed: " + response.StatusMessage);
       }
@@ -241,5 +255,5 @@
     private ResponseObject<JobDto> AddChildJob(MessageContainerWithJob mc) {
       ResponseObject<JobDto> response = wcfService.AddChildJob(mc.JobId, mc.SerializedJob);
-      if (response.StatusMessage != ResponseStatus.Ok) {
+      if (response == null || response.StatusMessage != ResponseStatus.Ok) {
         Logger.Error("AddChildJob failed: " + response.StatusMessage);
       }
@@ -267,8 +281,8 @@
     /// </summary>
     /// <param name="jobId"></param>
-    private void GetFinishedJob(object jobId) {
-      Guid jId = (Guid)jobId;
-      Logger.Info("Getting the finished job with id: " + jId);
+    private void SendFinishedJob(object jobId) {
       try {
+        Guid jId = (Guid)jobId;
+        Logger.Info("Getting the finished job with id: " + jId);
         if (!engines.ContainsKey(jId)) {
           Logger.Info("Engine doesn't exist");
@@ -278,47 +292,49 @@
         byte[] sJob = engines[jId].GetFinishedJob();
 
-        if (WcfService.Instance.LoggedIn) {
+        try {
           Logger.Info("Sending the finished job with id: " + jId);
-          wcfService.GetFinishedJobResultAsync(ConfigManager.Instance.GetClientInfo().Id, jId, sJob, 1.0, engines[jId].CurrentException, true);
+          wcfService.GetFinishedJobResultAsync(ConfigManager.Instance.GetClientInfo().Id, jId, sJob, engines[jId].ExecutionTime, engines[jId].CurrentException, true);
+        }
+        catch (Exception e) {
+          Logger.Info("Transmitting to server failed. Storing the finished job with id: " + jId + " to hdd (" + e.ToString() + ")");
+          JobStorageManager.PersistObjectToDisc(wcfService.ServerIp, 0, jId, sJob); // [chn] Port is not unique anymore (since we need two ports for http and net.tcp-streaming). also the port is now specified only in app.config. use port 0 for the moment
+        }
+        finally {
+          KillAppDomain(jId); // kill app-domain in every case
+        }
+      }
+      catch (Exception e) {
+        OnExceptionOccured(e);
+      }
+    }
+
+    private void GetSnapshot(object jobId) {
+      try {
+        Logger.Info("Fetching a snapshot for job " + jobId);
+        Guid jId = (Guid)jobId;
+        byte[] obj = engines[jId].GetSnapshot();
+        wcfService.ProcessSnapshotSync(ConfigManager.Instance.GetClientInfo().Id, jId, obj, engines[jId].ExecutionTime, null);
+
+        //Uptime Limit reached, now is a good time to destroy this jobs.
+        Logger.Debug("Checking if uptime limit is reached");
+        if (!UptimeManager.Instance.IsAllowedToCalculate()) {
+          Logger.Debug("Uptime limit reached");
+          Logger.Debug("Killing Appdomain");
+          KillAppDomain(jId);
+          //Still anything running?  
+          if (engines.Count == 0) {
+            Logger.Info("All jobs snapshotted and sent back, disconnecting");
+            WcfService.Instance.Disconnect();
+          } else {
+            Logger.Debug("There are still active Jobs in the Field, not disconnecting");
+          }
         } else {
-          Logger.Info("Storing the finished job with id: " + jId + " to hdd");
-          JobStorageManager.PersistObjectToDisc(wcfService.ServerIp, 0, jId, sJob); // [chn] Port is not unique anymore (since we need two ports for http and net.tcp-streaming). also the port is now specified only in app.config. use port 0 for the moment
-          KillAppDomain(jId);
-        }
-      }
-      catch (InvalidStateException ise) {
-        Logger.Error("Invalid State while Snapshoting:", ise);
-      }
-    }
-
-    private void GetSnapshot(object jobId) {
-      Logger.Info("Fetching a snapshot for job " + jobId);
-      Guid jId = (Guid)jobId;
-      byte[] obj = engines[jId].GetSnapshot();
-      Logger.Debug("BEGIN: Sending snapshot sync");
-      wcfService.ProcessSnapshotSync(ConfigManager.Instance.GetClientInfo().Id,
-        jId,
-        obj,
-        engines[jId].Progress,
-        null);
-      Logger.Debug("END: Sended snapshot sync");
-      //Uptime Limit reached, now is a good time to destroy this jobs.
-      Logger.Debug("Checking if uptime limit is reached");
-      if (!UptimeManager.Instance.IsAllowedToCalculate()) {
-        Logger.Debug("Uptime limit reached");
-        Logger.Debug("Killing Appdomain");
-        KillAppDomain(jId);
-        //Still anything running?  
-        if (engines.Count == 0) {
-          Logger.Info("All jobs snapshotted and sent back, disconnecting");
-          WcfService.Instance.Disconnect();
-        } else {
-          Logger.Debug("There are still active Jobs in the Field, not disconnecting");
-        }
-
-      } else {
-        Logger.Debug("Restarting the job" + jobId);
-        engines[jId].StartOnlyJob();
-        Logger.Info("Restarted the job" + jobId);
+          Logger.Debug("Restarting the job" + jobId);
+          engines[jId].StartOnlyJob();
+          Logger.Info("Restarted the job" + jobId);
+        }
+      }
+      catch (Exception e) {
+        OnExceptionOccured(e);
       }
     }
@@ -349,13 +365,9 @@
       if (e.Result.StatusMessage != ResponseStatus.GetJob_NoJobsAvailable) {
         Logger.Info("Received new job with id " + e.Result.Obj.Id);
-        bool sandboxed = false;
         Logger.Debug("Fetching plugins for job " + e.Result.Obj.Id);
         try {
-
           PluginCache.Instance.PreparePlugins(e.Result.Obj.PluginsNeeded);
           PluginCache.Instance.CopyPluginsForJob(e.Result.Obj.PluginsNeeded, e.Result.Obj.Id);
 
-          //        foreach (CachedHivePluginInfoDto plugininfo in PluginCache.Instance.GetPlugins(e.Result.Job.PluginsNeeded))
-          //        files.AddRange(plugininfo.PluginFiles);
           Logger.Debug("Plugins fetched for job " + e.Result.Obj.Id);
           String pluginDir = Path.Combine(PluginCache.Instance.PluginRepositoryDir, e.Result.Obj.Id.ToString());
@@ -375,10 +387,9 @@
               engine.Start(e.Data);
               engines.Add(e.Result.Obj.Id, engine);
-
               SlaveStatusInfo.JobsFetched++;
               Logger.Info("Increment FetchedJobs to:" + SlaveStatusInfo.JobsFetched);
             }
           }
-          beat.InterruptHeartBeatThread();
+          heartbeatManager.AwakeHeartBeatThread();
         }
         catch (Exception exception) {
@@ -387,5 +398,5 @@
           CurrentlyFetching = false;
           KillAppDomain(e.Result.Obj.Id);
-          wcfService.StoreFinishedJobResultsSync(ConfigManager.Instance.GetClientInfo().Id, e.Result.Obj.Id, new byte[] { }, 1, exception, true);
+          wcfService.StoreFinishedJobResultsSync(ConfigManager.Instance.GetClientInfo().Id, e.Result.Obj.Id, new byte[] { }, e.Result.Obj.ExecutionTime, exception.ToString(), true);
         }
       } else {
@@ -406,5 +417,5 @@
         SlaveStatusInfo.JobsProcessed++;
         Logger.Info("Increased ProcessedJobs to:" + SlaveStatusInfo.JobsProcessed);
-        beat.InterruptHeartBeatThread();
+        heartbeatManager.AwakeHeartBeatThread();
       } else {
         Logger.Error("Sending of job " + e.Result.JobId + " failed, job has been wasted. Message: " + e.Result.StatusMessage);
@@ -433,12 +444,8 @@
         FetchCalendarFromServer();
       }
-      //if the fetching from the server failed - still set the client online... maybe we get 
-      //a result within the next few heartbeats      
-      //if (!UptimeManager.Instance.CalendarAvailable || UptimeManager.Instance.IsOnline()) {
       Logger.Info("CalendarAvailable is " + UptimeManager.Instance.CalendarAvailable + " and IsOnline is: " + UptimeManager.Instance.IsAllowedToCalculate());
-      Logger.Info("Setting client online");
-      wcfService.Login(ConfigManager.Instance.GetClientInfo());
+      CurrentlyFetching = false;
+      CheckRunningAppDomains();
       JobStorageManager.CheckAndSubmitJobsFromDisc();
-      CurrentlyFetching = false;
     }
 
@@ -459,12 +466,9 @@
     }
 
-    //this is a little bit tricky - 
-    void wcfService_ConnectionRestored(object sender, EventArgs e) {
-      Logger.Info("Reconnected to old server - checking currently running appdomains");
-
+    private void CheckRunningAppDomains() {
       foreach (KeyValuePair<Guid, Executor> execKVP in engines) {
         if (execKVP.Value.ExecutionState != ExecutionState.Started && execKVP.Value.CurrentMessage == MessageContainer.MessageType.NoMessage) {
           Logger.Info("Checking for JobId: " + execKVP.Value.JobId);
-          Thread finThread = new Thread(new ParameterizedThreadStart(GetFinishedJob));
+          Thread finThread = new Thread(new ParameterizedThreadStart(SendFinishedJob));
           finThread.Start(execKVP.Value.JobId);
         }
@@ -474,10 +478,9 @@
     #endregion
 
-    public Dictionary<Guid, Executor> ExecutionEngines {
-      get { return engines; }
-    }
-
-    internal Dictionary<Guid, JobDto> Jobs {
-      get { return jobs; }
+    public event EventHandler<EventArgs<Exception>> ExceptionOccured;
+    private void OnExceptionOccured(Exception e) {
+      Logger.Error("Error: " + e.ToString());
+      var handler = ExceptionOccured;
+      if (handler != null) handler(this, new EventArgs<Exception>(e));
     }
 
@@ -498,5 +501,20 @@
           if (appDomains.ContainsKey(id)) {
             appDomains[id].UnhandledException -= new UnhandledExceptionEventHandler(appDomain_UnhandledException);
-            AppDomain.Unload(appDomains[id]);
+
+            int repeat = 5;
+            while (repeat > 0) {
+              try {
+                AppDomain.Unload(appDomains[id]);
+                repeat = 0;
+              }
+              catch (CannotUnloadAppDomainException) {
+                Logger.Error("Could not unload AppDomain, will try again in 1 sec.");
+                Thread.Sleep(1000);
+                repeat--;
+                if (repeat == 0) {
+                  throw; // rethrow and let app crash
+                }
+              }
+            }
             appDomains.Remove(id);
           }
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/HeartbeatManager.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/HeartbeatManager.cs	(revision 4422)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/HeartbeatManager.cs	(revision 4423)
@@ -34,4 +34,5 @@
 using System.Threading;
 using HeuristicLab.Hive.Slave.Communication.SlaveFacade;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Hive.Slave.Core {
@@ -40,15 +41,11 @@
   /// </summary>
   public class HeartbeatManager {
-
-    private bool offline;
-
+    private static object locker = new object();
     public TimeSpan Interval { get; set; }
-
     private Thread heartBeatThread;
-
-    private static object locker = new object();
+    private AutoResetEvent waitHandle;
 
     public HeartbeatManager() {
-      Interval = new TimeSpan(0,0,10);
+      Interval = new TimeSpan(0, 0, 10);
     }
 
@@ -68,73 +65,65 @@
     /// </summary>
     public void StartHeartbeat() {
+      this.waitHandle = new AutoResetEvent(true);
       wcfService = WcfService.Instance;
       wcfService.ProcessHeartBeatCompleted += new EventHandler<ProcessHeartBeatCompletedEventArgs>(wcfService_ProcessHeartBeatCompleted);
       abortThreadPending = false;
-      heartBeatThread = GetHeartBeatThread();
+      heartBeatThread = new Thread(RunHeartBeatThread);
       heartBeatThread.Start();
     }
 
-    private Thread GetHeartBeatThread() {
-      return new Thread(() => {
-        while (!abortThreadPending) {
-          try {
-            lock (locker) {
-              if (wcfService.ConnState != NetworkEnum.WcfConnState.Connected) {
-                wcfService.Connect(); // Login happens automatically upon successufl connection
-              }
-              if (!wcfService.LoggedIn) {
-                wcfService.Login(ConfigManager.Instance.GetClientInfo()); // if login faild previously try again
+    /// <summary>
+    /// Stop the heartbeat
+    /// </summary>
+    public void StopHeartBeat() {
+      abortThreadPending = true;
+      waitHandle.Set();
+      heartBeatThread.Join();
+    }
+    
+    /// <summary>
+    /// use this method to singalize there is work to do (to avoid the waiting period if its clear that actions are required)
+    /// </summary>
+    public void AwakeHeartBeatThread() {
+      waitHandle.Set();
+    }
+
+    private void RunHeartBeatThread() {
+      while (!abortThreadPending) {
+        try {
+          lock (locker) {
+            if (wcfService.ConnState != NetworkEnum.WcfConnState.Connected) {
+              wcfService.Connect(ConfigManager.Instance.GetClientInfo()); // Login happens automatically upon successufl connection
+            }
+            if(wcfService.ConnState == NetworkEnum.WcfConnState.Connected) {
+              SlaveDto info = ConfigManager.Instance.GetClientInfo();
+
+              HeartBeatData heartBeatData = new HeartBeatData {
+                SlaveId = info.Id,
+                FreeCores = info.NrOfCores.HasValue ? info.NrOfCores.Value - ConfigManager.Instance.GetUsedCores() : 0,
+                FreeMemory = GetFreeMemory(),
+                JobProgress = ConfigManager.Instance.GetExecutionTimeOfAllJobs(),
+                IsAllowedToCalculate = UptimeManager.Instance.IsAllowedToCalculate() && UptimeManager.Instance.CalendarAvailable
+              };
+
+              if (!heartBeatData.IsAllowedToCalculate) {
+                // stop all running jobs and send snapshots to server
+                MessageQueue.GetInstance().AddMessage(MessageContainer.MessageType.UptimeLimitDisconnect);
               }
 
-              if (wcfService.LoggedIn) {
-                SlaveDto info = ConfigManager.Instance.GetClientInfo();
-
-                HeartBeatData heartBeatData = new HeartBeatData {
-                  SlaveId = info.Id,
-                  FreeCores = info.NrOfCores - ConfigManager.Instance.GetUsedCores(),
-                  FreeMemory = GetFreeMemory(),
-                  JobProgress = ConfigManager.Instance.GetProgressOfAllJobs(),
-                  IsAllowedToCalculate = UptimeManager.Instance.IsAllowedToCalculate() && UptimeManager.Instance.CalendarAvailable
-                };
-
-                if (!heartBeatData.IsAllowedToCalculate) {
-                  // stop all running jobs and send snapshots to server
-                  MessageQueue.GetInstance().AddMessage(MessageContainer.MessageType.UptimeLimitDisconnect);
-                }
-
-                Logger.Debug("Sending Heartbeat: " + heartBeatData);
-                wcfService.ProcessHeartBeatSync(heartBeatData);                
-              }
-
-            } // lock
-          }
-          catch (Exception e) {
-            Logger.Error("Heartbeat Thread failed badly: " + e.Message);
-          }
-
-          try {
-            heartBeatThreadIsSleepingLock.EnterWriteLock();
-            heartBeatThreadIsSleeping = true;
-            heartBeatThreadIsSleepingLock.ExitWriteLock();
-
-            Thread.Sleep(Interval);
-
-            heartBeatThreadIsSleepingLock.EnterWriteLock();
-            heartBeatThreadIsSleeping = false;
-            heartBeatThreadIsSleepingLock.ExitWriteLock();
-          }
-          catch (ThreadInterruptedException e) {
-            Logger.Debug("Heartbeat sleep interrupted");
-          }
-        } // while
-        abortThreadPending = false;
-        Logger.Debug("Heartbeat thread stopped");
-      });
-    }
-
-    private int GetFreeMemory() {
-      PerformanceCounter counter = new PerformanceCounter("Memory", "Available Bytes", true);
-      int mb = (int)(counter.NextValue() / 1024 / 1024);
-      return mb;
+              Logger.Debug("Sending Heartbeat: " + heartBeatData);
+              wcfService.ProcessHeartBeatSync(heartBeatData);
+            }
+          } // lock
+        }
+        catch (Exception e) {
+          Logger.Error("Heartbeat Thread failed badly: " + e.Message);
+          OnExceptionOccured(e);
+        }
+        waitHandle.WaitOne(this.Interval);
+      } // while
+      waitHandle.Close();
+      abortThreadPending = false;
+      Logger.Debug("Heartbeat thread stopped");
     }
 
@@ -144,25 +133,19 @@
     }
 
-    public void StopHeartBeat() {
-      abortThreadPending = true;
-      heartBeatThread.Interrupt();
-      heartBeatThread.Join();
+    #region Eventhandler
+    public event EventHandler<EventArgs<Exception>> ExceptionOccured;
+    private void OnExceptionOccured(Exception e) {
+      var handler = ExceptionOccured;
+      if (handler != null) handler(this, new EventArgs<Exception>(e));
     }
+    #endregion
 
-    /// <summary>
-    /// use this method to singalize there is work to do (to avoid the waiting period if its clear that actions are required)
-    /// </summary>
-    public void InterruptHeartBeatThread() {
-      // deal with ReadWriteLock to avoid interrupting the thread while it is in SleepOrWait due to another reason (like waiting for a resource in a lock-statement)
-      heartBeatThreadIsSleepingLock.EnterReadLock();
-      Debug.WriteLine("InterruptHeartBeatThread");
-      if (heartBeatThreadIsSleeping) {
-        Debug.WriteLine("will interrupt heartbeatthread");
-        heartBeatThread.Interrupt();
-      } else {
-        Debug.WriteLine("will not interrupt heartbeatthread");
-      }
-      heartBeatThreadIsSleepingLock.ExitReadLock();
+    #region Helpers
+    private int GetFreeMemory() {
+      PerformanceCounter counter = new PerformanceCounter("Memory", "Available Bytes", true);
+      int mb = (int)(counter.NextValue() / 1024 / 1024);
+      return mb;
     }
+    #endregion
   }
 }
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/JobStorage/JobStorageManager.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/JobStorage/JobStorageManager.cs	(revision 4422)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/JobStorage/JobStorageManager.cs	(revision 4423)
@@ -45,5 +45,5 @@
     public static void CheckAndSubmitJobsFromDisc() {
       for (int index = storedJobsList.Count; index > 0; index--) {
-        if (WcfService.Instance.LoggedIn && (storedJobsList[index - 1].ServerIP == WcfService.Instance.ServerIp)) {
+        if (storedJobsList[index - 1].ServerIP == WcfService.Instance.ServerIp) {
           String filename = storedJobsList[index - 1].ServerIP + "." + storedJobsList[index - 1].ServerPort + "." + storedJobsList[index - 1].JobID.ToString();
           Logger.Info("Sending stored job " + storedJobsList[index - 1].JobID + " to the server");
@@ -51,5 +51,5 @@
             byte[] job = File.ReadAllBytes(path + filename + ".dat");
             if (WcfService.Instance.IsJobStillNeeded(storedJobsList[index - 1].JobID).StatusMessage == ResponseStatus.Ok) {
-              ResponseResultReceived res = WcfService.Instance.StoreFinishedJobResultsSync(ConfigManager.Instance.GetClientInfo().Id, storedJobsList[index - 1].JobID, job, 1.00, null, true);
+              ResponseResultReceived res = WcfService.Instance.StoreFinishedJobResultsSync(ConfigManager.Instance.GetClientInfo().Id, storedJobsList[index - 1].JobID, job, TimeSpan.Zero, null, true); // unfortunately we do not have the correct ExecutionTime since we would need to unzip the job for that
               Logger.Info("Sending of job " + storedJobsList[index - 1].JobID + " done");
             }
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/SlaveConsoleService/SlaveConsoleCommunicator.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/SlaveConsoleService/SlaveConsoleCommunicator.cs	(revision 4422)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/SlaveConsoleService/SlaveConsoleCommunicator.cs	(revision 4423)
@@ -20,11 +20,6 @@
     public void SetConnection(ConnectionContainer container) {
       ConfigManager.Instance.SetServerIP(container);
-      //WcfService.Instance.Connect(container.IPAdress);
       WcfService.Instance.ServerIp = container.IPAdress;
     }
-
-    //public void Disconnect() {
-    //  WcfService.Instance.Disconnect();
-    //}   
 
     public ConnectionContainer GetCurrentConnection() {
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/SlaveConsoleService/TransferObjects/JobStatus.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/SlaveConsoleService/TransferObjects/JobStatus.cs	(revision 4422)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/SlaveConsoleService/TransferObjects/JobStatus.cs	(revision 4423)
@@ -43,5 +43,5 @@
     /// </summary>
     [DataMember]
-    public double Progress { get; set; }
+    public TimeSpan ExecutionTime { get; set; }
   }
 }
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.ExecutionEngine/3.3/Executor.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.ExecutionEngine/3.3/Executor.cs	(revision 4422)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.ExecutionEngine/3.3/Executor.cs	(revision 4423)
@@ -39,5 +39,15 @@
     public IJob Job { get; set; }
     public MessageContainer.MessageType CurrentMessage { get; set; }
-    public Exception CurrentException { get; set; }
+
+    private Exception currentException;
+    public String CurrentException {
+      get {
+        if (currentException != null) {
+          return currentException.ToString();
+        } else {
+          return string.Empty;
+        }
+      }
+    }
     public MessageQueue Queue { get; set; }
 
@@ -50,7 +60,7 @@
     }
 
-    public double Progress {
+    public TimeSpan ExecutionTime {
       get {
-        return Job.Progress;
+        return Job.ExecutionTime;
       }
     }
@@ -58,33 +68,76 @@
     public DateTime CreationTime { get; set; }
 
+    /// <summary>
+    /// 
+    /// </summary>
+    /// <param name="serializedJob"></param>
+    /// <param name="collectChildJobs">if true, all child-jobs are downloaded and the job will be resumed.</param>
     public void Start(byte[] serializedJob) {
-      CreationTime = DateTime.Now;
-      Job = DeserializeJobObject(serializedJob);
-
+      try {
+        CreationTime = DateTime.Now;
+        Job = SerializedJob.Deserialize<IJob>(serializedJob);
+
+        RegisterJobEvents();
+
+        if (Job.CollectChildJobs) {
+          Queue.AddMessage(new MessageContainerWithCallback<SerializedJobList>(MessageContainer.MessageType.GetChildJobs, JobId,
+            (childjobs) => {
+              Job.Resume(childjobs.Select(j => SerializedJob.Deserialize<IJob>(j.SerializedJobData)));
+            }
+          ));
+        } else {
+          Job.Prepare();
+          Job.Start();
+        }
+      }
+      catch (OutOfMemoryException e) {
+        JobIsFinished = true;
+        this.currentException = e;
+        Queue.AddMessage(new MessageContainer(MessageContainer.MessageType.JobFailed, JobId));
+      }
+    }
+
+    public void StartOnlyJob() {
+      try {
+        Job.Start();
+      }
+      catch (OutOfMemoryException e) {
+        JobIsFinished = true;
+        this.currentException = e;
+        Queue.AddMessage(new MessageContainer(MessageContainer.MessageType.JobFailed, JobId));
+      }
+    }
+
+    public void Abort() {
+      CurrentMessage = MessageContainer.MessageType.AbortJob;
+      if ((ExecutionState == ExecutionState.Started) || (ExecutionState == ExecutionState.Paused)) {
+        Job.Stop();
+      }
+    }
+
+    private void RegisterJobEvents() {
       Job.JobStopped += new EventHandler(Job_JobStopped);
       Job.JobFailed += new EventHandler(Job_JobFailed);
       Job.NewChildJob += new EventHandler<EventArgs<IJob>>(Job_NewChildJob);
       Job.WaitForChildJobs += new EventHandler(Job_WaitForChildJobs);
-
-      if (Job.ExecutionState == Core.ExecutionState.Paused) {
-        Queue.AddMessage(new MessageContainerWithCallback<SerializedJobList>(MessageContainer.MessageType.GetChildJobs, JobId,
-          (childjobs) => {
-            Job.Resume(childjobs.Select(j => DeserializeJobObject(j.SerializedJobData)));
-          }
-        ));
-      } else {
-        Job.Prepare();
-        Job.Start();
-      }
-    }
-
-    void Job_NewChildJob(object sender, EventArgs<IJob> e) {
-      byte[] jobByteArray = SerializeJobObject(e.Value);
+      Job.DeleteChildJobs += new EventHandler(Job_DeleteChildJobs);
+    }
+
+    private void DeregisterJobEvents() {
+      Job.JobStopped -= new EventHandler(Job_JobStopped);
+      Job.JobFailed -= new EventHandler(Job_JobFailed);
+      Job.NewChildJob -= new EventHandler<EventArgs<IJob>>(Job_NewChildJob);
+      Job.WaitForChildJobs -= new EventHandler(Job_WaitForChildJobs);
+      Job.DeleteChildJobs -= new EventHandler(Job_DeleteChildJobs);
+    }
+
+    private void Job_NewChildJob(object sender, EventArgs<IJob> e) {
+      byte[] jobByteArray = SerializedJob.Serialize(e.Value);
 
       SerializedJob serializedJob = new SerializedJob() {
         JobInfo = new JobDto() {
           State = JobState.Offline,
-          CoresNeeded = e.Value.CoresNeeded,
-          MemoryNeeded = e.Value.MemoryNeeded,
+          CoresNeeded = 1,
+          MemoryNeeded = 0,
           PluginsNeeded = HivePluginInfoDto.FindPluginsNeeded(e.Value.GetType()),
         },
@@ -95,7 +148,8 @@
     }
 
-    void Job_WaitForChildJobs(object sender, EventArgs e) {
+    private void Job_WaitForChildJobs(object sender, EventArgs e) {
       // Pause the job and send it back to the hive. The server will awake it when all child-jobs are finished
-      byte[] jobByteArray = SerializeJobObject(Job);
+      this.Job.CollectChildJobs = true;
+      byte[] jobByteArray = SerializedJob.Serialize(Job);
 
       SerializedJob serializedJob = new SerializedJob() {
@@ -111,22 +165,15 @@
     }
 
-    void Job_JobFailed(object sender, EventArgs e) {
+    private void Job_DeleteChildJobs(object sender, EventArgs e) {
+      Queue.AddMessage(new MessageContainer(MessageContainer.MessageType.DeleteChildJobs, this.JobId));
+    }
+
+    private void Job_JobFailed(object sender, EventArgs e) {
       HeuristicLab.Common.EventArgs<Exception> ex = (HeuristicLab.Common.EventArgs<Exception>)e;
-      CurrentException = ex.Value;
+      currentException = ex.Value;
       Queue.AddMessage(new MessageContainer(MessageContainer.MessageType.FinishedJob, JobId));
     }
 
-    public void StartOnlyJob() {
-      Job.Start();
-    }
-
-    public void Abort() {
-      CurrentMessage = MessageContainer.MessageType.AbortJob;
-      if (Job.ExecutionState != Core.ExecutionState.Stopped) {
-        Job.Stop();
-      }
-    }
-
-    void Job_JobStopped(object sender, EventArgs e) {
+    private void Job_JobStopped(object sender, EventArgs e) {
       if (CurrentMessage == MessageContainer.MessageType.NoMessage) {
         Queue.AddMessage(new MessageContainer(MessageContainer.MessageType.FinishedJob, JobId));
@@ -147,5 +194,5 @@
         CurrentMessage = MessageContainer.MessageType.NoMessage;
         // Pack the whole job inside an xml document
-        byte[] job = SerializeJobObject(Job);
+        byte[] job = SerializedJob.Serialize(Job);
         // Restart the job
         // Return the Snapshot
@@ -159,5 +206,5 @@
         throw new InvalidStateException("Job is still running");
       } else {
-        byte[] jobArr = SerializeJobObject(Job);
+        byte[] jobArr = SerializedJob.Serialize(Job);
         return jobArr;
       }
@@ -169,21 +216,6 @@
     }
 
-    private byte[] SerializeJobObject(IJob job) {
-      MemoryStream memStream = new MemoryStream();
-      XmlGenerator.Serialize(job, memStream);
-      byte[] jobByteArray = memStream.ToArray();
-      memStream.Dispose();
-      return jobByteArray;
-    }
-
-    private IJob DeserializeJobObject(byte[] sjob) {
-      MemoryStream memStream = new MemoryStream(sjob);
-      IJob job = XmlParser.Deserialize<IJob>(memStream);
-      memStream.Dispose();
-      return job;
-    }
-
     private void RestoreJobObject(byte[] sjob) {
-      Job = DeserializeJobObject(sjob);
+      Job = SerializedJob.Deserialize<IJob>(sjob);
     }
 
@@ -191,5 +223,4 @@
       CurrentMessage = MessageContainer.MessageType.NoMessage;
       JobIsFinished = false;
-      //Job = new TestJob();
     }
 
@@ -197,6 +228,5 @@
 
     public void Dispose() {
-      Job.JobFailed -= new EventHandler(Job_JobFailed);
-      Job.JobFailed -= new EventHandler(Job_JobStopped);
+      DeregisterJobEvents();
       Queue = null;
       Job = null;
@@ -204,4 +234,5 @@
 
     #endregion
+
   }
 }
