Index: branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/AppointmentDto.cs
===================================================================
--- branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/AppointmentDto.cs	(revision 4121)
+++ branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/AppointmentDto.cs	(revision 4133)
@@ -5,21 +5,40 @@
 using System.Runtime.Serialization;
 using HeuristicLab.DataAccess;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 
 namespace HeuristicLab.Hive.Contracts.BusinessObjects {
   
+  [StorableClass]
   [DataContract]
   public class AppointmentDto: PersistableObject {
+    [Storable]
     [DataMember]
     public DateTime StartDate { get; set; }
+    [Storable]
     [DataMember]
     public DateTime EndDate { get; set; }
+    [Storable]
     [DataMember]
     public bool AllDayEvent { get; set; }
+    [Storable]
     [DataMember]
     public bool Recurring { get; set; }
+    [Storable]
     [DataMember]
     public Guid RecurringId { get; set; }
+    [Storable]
     [DataMember]
     public Guid ResourceId { get; set; }
+
+    public override Common.IDeepCloneable Clone(Common.Cloner cloner) {
+      AppointmentDto clone = (AppointmentDto)base.Clone(cloner);
+      clone.AllDayEvent = this.AllDayEvent;
+      clone.EndDate = this.EndDate;
+      clone.Recurring = this.Recurring;
+      clone.RecurringId = this.RecurringId;
+      clone.ResourceId = this.ResourceId;
+      clone.StartDate = this.StartDate;
+      return clone;
+    }
   }
 }
Index: branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/CachedHivePluginInfoDto.cs
===================================================================
--- branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/CachedHivePluginInfoDto.cs	(revision 4121)
+++ branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/CachedHivePluginInfoDto.cs	(revision 4133)
@@ -23,9 +23,12 @@
 using System.Collections.Generic;
 using System.Text;
+using System.Linq;
 using HeuristicLab.Hive.Contracts.BusinessObjects;
 using System.Runtime.Serialization;
 using HeuristicLab.PluginInfrastructure.Manager;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 
 namespace HeuristicLab.PluginInfrastructure {
+  [StorableClass]
   [DataContract]
   [Serializable]
@@ -35,4 +38,5 @@
     /// stores the plugin files in a list of byte arrays
     /// </summary>
+    [Storable]
     [DataMember]
     public List<HivePluginFile> PluginFiles { get; set; }
@@ -41,4 +45,11 @@
       PluginFiles = new List<HivePluginFile>();
     }
+
+    public override Common.IDeepCloneable Clone(Common.Cloner cloner) {
+      CachedHivePluginInfoDto clone = (CachedHivePluginInfoDto) base.Clone(cloner);
+      clone.PluginFiles = (from p in this.PluginFiles
+                          select (HivePluginFile)cloner.Clone(p)).ToList();
+      return clone;
+    }
   }
 }
Index: branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/ClientConfigDto.cs
===================================================================
--- branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/ClientConfigDto.cs	(revision 4121)
+++ branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/ClientConfigDto.cs	(revision 4133)
@@ -26,14 +26,25 @@
 using System.Runtime.Serialization;
 using HeuristicLab.DataAccess;
+using HeuristicLab.Common;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 
 namespace HeuristicLab.Hive.Contracts.BusinessObjects {
-
+  [StorableClass]
   [DataContract]
   [Serializable]
-  public class ClientConfigDto : PersistableObject {
+  public class ClientConfigDto : PersistableObject, IDeepCloneable {
+    [Storable]
     [DataMember]
     public String UpDownTimeCalendar { get; set; }
+    [Storable]
     [DataMember]
     public int? HeartBeatIntervall { get; set; }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      ClientConfigDto clone = (ClientConfigDto)base.Clone(cloner);
+      clone.UpDownTimeCalendar = this.UpDownTimeCalendar;
+      clone.HeartBeatIntervall = this.HeartBeatIntervall;
+      return clone;
+    }
   }
 }
Index: branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/ClientDto.cs
===================================================================
--- branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/ClientDto.cs	(revision 4121)
+++ branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/ClientDto.cs	(revision 4133)
@@ -25,4 +25,6 @@
 using System.Text;
 using System.Runtime.Serialization;
+using HeuristicLab.Common;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
                                    
 namespace HeuristicLab.Hive.Contracts.BusinessObjects {
@@ -31,23 +33,33 @@
   public enum CalendarState { Fetch, ForceFetch, Fetching, Fetched, NotAllowedToFetch };
 
+  [StorableClass]
   [DataContract]
   [Serializable]
   public class ClientDto : ResourceDto {
+    [Storable]
     [DataMember]
     public int NrOfCores { get; set; }
+    [Storable]
     [DataMember]
     public int NrOfFreeCores { get; set; }
+    [Storable]
     [DataMember]
     public int? CpuSpeedPerCore { get; set; }
+    [Storable]
     [DataMember]
     public int Memory { get; set; }
+    [Storable]
     [DataMember]
     public int FreeMemory { get; set; }
+    [Storable]
     [DataMember]
     public DateTime? Login { get; set; }
+    [Storable]
     [DataMember]
     public State State { get; set; }
+    [Storable]
     [DataMember]
     public CalendarState CalendarSyncStatus { get; set; }
+    [Storable]
     [DataMember]
     public ClientConfigDto Config { get; set; }
@@ -56,4 +68,18 @@
       return base.ToString() + ", NrOfCores: " + NrOfCores + ", NrOfFreeCores " + NrOfFreeCores + ", Login: " + Login + ", State: " + State;
     }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      ClientDto clone = (ClientDto)base.Clone(cloner);
+      clone.CalendarSyncStatus = this.CalendarSyncStatus;
+      clone.Config = (ClientConfigDto)cloner.Clone(this.Config);
+      clone.CpuSpeedPerCore = this.CpuSpeedPerCore;
+      clone.FreeMemory = this.FreeMemory;
+      clone.Login = this.Login;
+      clone.Memory = this.Memory;
+      clone.NrOfCores = this.NrOfCores;
+      clone.NrOfFreeCores = this.NrOfFreeCores;
+      clone.State = this.State;
+      return clone;
+    }
   }
 }
Index: branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/ClientGroupDto.cs
===================================================================
--- branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/ClientGroupDto.cs	(revision 4121)
+++ branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/ClientGroupDto.cs	(revision 4133)
@@ -25,9 +25,12 @@
 using System.Text;
 using System.Runtime.Serialization;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 
 namespace HeuristicLab.Hive.Contracts.BusinessObjects {
 
+  [StorableClass]
   [DataContract]
   public class ClientGroupDto : ResourceDto {
+    [Storable]
     [DataMember]
     public List<ResourceDto> Resources { get; set; }
@@ -36,4 +39,11 @@
       Resources = new List<ResourceDto>();
     }
+
+    public override Common.IDeepCloneable Clone(Common.Cloner cloner) {
+      ClientGroupDto clone = (ClientGroupDto) base.Clone(cloner);
+      clone.Resources = (from r in this.Resources
+                        select (ResourceDto)cloner.Clone(r)).ToList();
+      return clone;
+    }
   }
 }
Index: branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/ClientGroupDtoList.cs
===================================================================
--- branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/ClientGroupDtoList.cs	(revision 4133)
+++ branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/ClientGroupDtoList.cs	(revision 4133)
@@ -0,0 +1,31 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Collections;
+using HeuristicLab.Common;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Hive.Contracts.BusinessObjects {
+  public class ClientGroupDtoList : ObservableList<ClientGroupDto>, IDeepCloneable {
+
+    public ClientGroupDtoList() { }
+    public ClientGroupDtoList(IEnumerable<ClientGroupDto> collection) {
+      this.list = new List<ClientGroupDto>(collection);
+    }
+
+    [StorableConstructor]
+    protected ClientGroupDtoList(bool deserializing) : base(deserializing) { }
+
+    public object Clone() {
+      return Clone(new Cloner());
+    }
+
+    public virtual IDeepCloneable Clone(Cloner cloner) {
+      ClientGroupDtoList clone = (ClientGroupDtoList)Activator.CreateInstance(this.GetType());
+      cloner.RegisterClonedObject(this, clone);
+      clone.list = (this.Select(x => (ClientGroupDto)cloner.Clone(x))).ToList();
+      return clone;
+    }
+  }
+}
Index: branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/HivePluginFile.cs
===================================================================
--- branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/HivePluginFile.cs	(revision 4121)
+++ branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/HivePluginFile.cs	(revision 4133)
@@ -4,11 +4,16 @@
 using System.Text;
 using System.Runtime.Serialization;
+using HeuristicLab.Common;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 
 namespace HeuristicLab.Hive.Contracts.BusinessObjects {
+  [StorableClass]
   [Serializable]
   [DataContract]
-  public class HivePluginFile {
+  public class HivePluginFile : IDeepCloneable {
+    [Storable]
     [DataMember]
     public byte[] BinaryFile { get; set; }
+    [Storable]
     [DataMember]
     public String Name { get; set; }  
@@ -18,4 +23,19 @@
       Name = name;
     }
+
+    public virtual IDeepCloneable Clone(Cloner cloner) {
+      HivePluginFile clone = (HivePluginFile)Activator.CreateInstance(this.GetType(), true);
+      cloner.RegisterClonedObject(this, clone);
+      clone.Name = this.Name;
+      if (this.BinaryFile != null) {
+        clone.BinaryFile = new byte[this.BinaryFile.Length];
+        Array.Copy(this.BinaryFile, clone.BinaryFile, this.BinaryFile.Length);
+      }
+      return clone;
+    }
+
+    public object Clone() {
+      return Clone(new Cloner());
+    }
   }
 }
Index: branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/HivePluginInfoDto.cs
===================================================================
--- branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/HivePluginInfoDto.cs	(revision 4121)
+++ branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/HivePluginInfoDto.cs	(revision 4133)
@@ -27,10 +27,12 @@
 using HeuristicLab.DataAccess;
 using HeuristicLab.PluginInfrastructure;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 
 namespace HeuristicLab.Hive.Contracts.BusinessObjects {
-
+  [StorableClass]
   [DataContract]
   [Serializable]
   public class HivePluginInfoDto : PersistableObject {
+    [Storable]
     [DataMember]
     public String Name { get; set; }
@@ -39,4 +41,29 @@
     public Version Version { get; set; }
 
+    // helper-variable to be able to persist version
+    [Storable]
+    private string storableVersion;
+
+    public HivePluginInfoDto() { }
+
+    public HivePluginInfoDto(bool deserializing) : base(deserializing) { }
+
+    [StorableHook(HookType.BeforeSerialization)]
+    private void BeforeSerialization() {
+      this.storableVersion = Version.ToString();
+    }
+
+    [StorableHook(HookType.AfterDeserialization)]
+    private void AfterDeserialization() {
+      int[] parts = this.storableVersion.Split('.').Select(s => int.Parse(s)).ToArray();
+      this.Version = new Version(parts[0], parts[1], parts[2], parts[3]);
+    }
+
+    public override Common.IDeepCloneable Clone(Common.Cloner cloner) {
+      HivePluginInfoDto clone = (HivePluginInfoDto) base.Clone(cloner);
+      clone.Name = this.Name;
+      clone.Version = (Version)this.Version.Clone();
+      return clone;
+    }
   }
 }
Index: branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/JobDto.cs
===================================================================
--- branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/JobDto.cs	(revision 4121)
+++ branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/JobDto.cs	(revision 4133)
@@ -25,38 +25,55 @@
 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 JobDto : PersistableObject {
+    [Storable]
     [DataMember]
     public State State { get; set; }
+    [Storable]
     [DataMember]
     public Guid UserId { get; set; }
+    [Storable]
     [DataMember]
     public ClientDto Client { get; set; }
+    [Storable]
     [DataMember]
     public JobDto ParentJob { get; set; }
+    [Storable]
     [DataMember]
     public double? Percentage { get; set; }
+    [Storable]
     [DataMember]
     public DateTime? DateCreated { get; set; }
+    [Storable]
     [DataMember]
     public DateTime? DateCalculated { get; set; }
+    [Storable]
     [DataMember]
     public DateTime? DateFinished { get; set; }
+    [Storable]
     [DataMember]
     public int Priority { get; set; }
+    [Storable]
     [DataMember]
     public int CoresNeeded { get; set; }
+    [Storable]
     [DataMember]
     public int MemoryNeeded { get; set; }
+    [Storable]
     [DataMember]
     public List<HivePluginInfoDto> PluginsNeeded { get; set; }
+    [Storable]
     [DataMember]
     public List<Guid> AssignedResourceIds { get; set; }
+    [Storable]
     [DataMember]
     public ProjectDto Project { get; set; }
@@ -71,4 +88,26 @@
       AssignedResourceIds = new List<Guid>();
     }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      JobDto clone = (JobDto)base.Clone(cloner);
+      clone.Id = this.Id;
+      clone.AssignedResourceIds = new List<Guid>(this.AssignedResourceIds);
+      clone.Client = (ClientDto)cloner.Clone(this.Client);
+      clone.CoresNeeded = this.CoresNeeded;
+      clone.DateCalculated = this.DateCalculated;
+      clone.DateCreated = this.DateCreated;
+      clone.DateFinished = this.DateFinished;
+      clone.Id = this.Id;
+      clone.MemoryNeeded = this.MemoryNeeded;
+      clone.ParentJob = (JobDto)cloner.Clone(this.ParentJob);
+      clone.Percentage = this.Percentage;
+      clone.PluginsNeeded = (from p in this.PluginsNeeded
+                             select (HivePluginInfoDto)cloner.Clone(p)).ToList();
+      clone.Priority = this.Priority;
+      clone.Project = (ProjectDto)cloner.Clone(this.Project);
+      clone.State = this.State;
+      clone.UserId = this.UserId;
+      return clone;
+    }
   }
 }
Index: branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/JobResult.cs
===================================================================
--- branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/JobResult.cs	(revision 4121)
+++ branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/JobResult.cs	(revision 4133)
@@ -26,22 +26,44 @@
 using System.Runtime.Serialization;
 using HeuristicLab.DataAccess;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 
 namespace HeuristicLab.Hive.Contracts.BusinessObjects {
 
+  // [chn] Where are those JobResults used? would it make sense to use it instead of JobDto for querying Job-Status? Probably yes
+  // ask gradinger
+  [StorableClass]
   [DataContract]
   [Serializable]
   public class JobResult : PersistableObject {
+    [Storable]
     [DataMember]
     public Guid JobId { get; set; }
+    [Storable]
     [DataMember]
     public double Percentage { get; set; }
+    [Storable]
     [DataMember]
     public DateTime Timestamp { get; set; }
+    [Storable]
     [DataMember]
     public Guid ClientId { get; set; }
+    [Storable]
     [DataMember]
     public Exception Exception { get; set; }
+    [Storable]
     [DataMember]
     public DateTime DateFinished { get; set; }
+
+    public override Common.IDeepCloneable Clone(Common.Cloner cloner) {
+      JobResult clone = (JobResult) base.Clone(cloner);
+      clone.ClientId = this.ClientId;
+      clone.DateFinished = this.DateFinished;
+      throw new NotImplementedException("Exception kann nicht serialisiert werden, deshalb irgendwie wrappen... oder nur message (+stacktrace, ...?) speichern");
+      clone.Exception = this.Exception;
+      clone.JobId = this.JobId;
+      clone.Percentage = this.Percentage;
+      clone.Timestamp = this.Timestamp;
+      return clone;
+    }
   }
 }
Index: branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/ProjectDto.cs
===================================================================
--- branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/ProjectDto.cs	(revision 4121)
+++ branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/ProjectDto.cs	(revision 4133)
@@ -27,12 +27,20 @@
 using HeuristicLab.DataAccess;
 using HeuristicLab.PluginInfrastructure;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 
 namespace HeuristicLab.Hive.Contracts.BusinessObjects {
-
+  [StorableClass]
   [DataContract]
   [Serializable]
   public class ProjectDto : PersistableObject {
+    [Storable]
     [DataMember]
     public String Name { get; set; }
+
+    public override Common.IDeepCloneable Clone(Common.Cloner cloner) {
+      ProjectDto clone = (ProjectDto) base.Clone(cloner);
+      clone.Name = this.Name;
+      return clone;
+    }
   }
 }
Index: branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/ResourceDto.cs
===================================================================
--- branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/ResourceDto.cs	(revision 4121)
+++ branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/ResourceDto.cs	(revision 4133)
@@ -26,10 +26,13 @@
 using System.Runtime.Serialization;
 using HeuristicLab.DataAccess;
+using HeuristicLab.Common;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 
 namespace HeuristicLab.Hive.Contracts.BusinessObjects {
-
+  [StorableClass]
   [DataContract]
   [Serializable]
-  public class ResourceDto : PersistableObject {
+  public class ResourceDto : PersistableObject, IDeepCloneable {
+    [Storable]
     [DataMember]
     public string Name { get; set; }
@@ -38,4 +41,10 @@
       return Id + " " + Name;
     }
+
+    public virtual IDeepCloneable Clone(Cloner cloner) {
+      ResourceDto clone = (ResourceDto)base.Clone(cloner);
+      clone.Name = this.Name;
+      return clone;
+    }
   }
 }
Index: branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/SerializedJob.cs
===================================================================
--- branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/SerializedJob.cs	(revision 4121)
+++ branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/SerializedJob.cs	(revision 4133)
@@ -25,14 +25,31 @@
 using System.Text;
 using System.Runtime.Serialization;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Hive.Contracts.BusinessObjects {
+  [StorableClass]
   [DataContract]
   [Serializable]
-  public class SerializedJob {
+  public class SerializedJob : IDeepCloneable {
+    [Storable]
     [DataMember]
     public JobDto JobInfo { get; set; }
-    
+    [Storable]
     [DataMember]
     public byte[] SerializedJobData { get; set; }
+
+    public virtual IDeepCloneable Clone(Cloner cloner) {
+      SerializedJob clone = (SerializedJob)Activator.CreateInstance(this.GetType(), true);
+      cloner.RegisterClonedObject(this, clone);
+      clone.JobInfo = (JobDto)cloner.Clone(this.JobInfo);
+      clone.SerializedJobData = new byte[this.SerializedJobData.Length];
+      Array.Copy(this.SerializedJobData, clone.SerializedJobData, this.SerializedJobData.Length);
+      return clone;
+    }
+
+    public object Clone() {
+      return Clone(new Cloner());
+    }
   }
 }
Index: branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/SerializedJobResult.cs
===================================================================
--- branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/SerializedJobResult.cs	(revision 4121)
+++ branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/SerializedJobResult.cs	(revision 4133)
@@ -25,14 +25,31 @@
 using System.Text;
 using System.Runtime.Serialization;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Hive.Contracts.BusinessObjects {
+  [StorableClass]
   [DataContract]
   [Serializable]
-  public class SerializedJobResult {
+  public class SerializedJobResult : IDeepCloneable {
+    [Storable]
     [DataMember]
     public JobResult JobResult { get; set; }
-
+    [Storable]
     [DataMember]
     public byte[] SerializedJobResultData { get; set; }
+
+    public virtual IDeepCloneable Clone(Cloner cloner) {
+      SerializedJobResult clone = (SerializedJobResult)Activator.CreateInstance(this.GetType(), true);
+      cloner.RegisterClonedObject(this, clone);
+      clone.JobResult = (JobResult)cloner.Clone(this.JobResult);
+      clone.SerializedJobResultData = new byte[this.SerializedJobResultData.Length];
+      Array.Copy(this.SerializedJobResultData, clone.SerializedJobResultData, this.SerializedJobResultData.Length);
+      return clone;
+    }
+
+    public object Clone() {
+      return Clone(new Cloner());
+    }
   }
 }
Index: branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/UpTimeStatisticsDto.cs
===================================================================
--- branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/UpTimeStatisticsDto.cs	(revision 4121)
+++ branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/UpTimeStatisticsDto.cs	(revision 4133)
@@ -26,16 +26,28 @@
 using System.Runtime.Serialization;
 using HeuristicLab.DataAccess;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 
 namespace HeuristicLab.Hive.Contracts.BusinessObjects {
 
+  [StorableClass]
   [DataContract]
   public class UpTimeStatisticsDto : PersistableObject {
+    [Storable]
     [DataMember]
     public ClientDto Client { get; set; }
+    [Storable]
     [DataMember]
     public DateTime Login { get; set; }
+    [Storable]
     [DataMember]
     public DateTime Logout { get; set; }
 
+    public override Common.IDeepCloneable Clone(Common.Cloner cloner) {
+      UpTimeStatisticsDto clone = (UpTimeStatisticsDto) base.Clone(cloner);
+      clone.Client = (ClientDto)cloner.Clone(this.Client);
+      clone.Login = this.Login;
+      clone.Logout = this.Logout;
+      return clone;
+    }
   }
 }
Index: branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/HeuristicLab.Hive.Contracts-3.3.csproj
===================================================================
--- branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/HeuristicLab.Hive.Contracts-3.3.csproj	(revision 4121)
+++ branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/HeuristicLab.Hive.Contracts-3.3.csproj	(revision 4133)
@@ -76,4 +76,16 @@
   </PropertyGroup>
   <ItemGroup>
+    <Reference Include="HeuristicLab.Collections-3.3">
+      <HintPath>..\..\..\..\..\..\..\..\..\Programme\HeuristicLab 3.3\HeuristicLab.Collections-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Common-3.3">
+      <HintPath>..\..\HeuristicLab.Hive.JobBase\3.3\bin\Debug\HeuristicLab.Common-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Core-3.3">
+      <HintPath>..\..\..\..\..\..\..\..\..\Programme\HeuristicLab 3.3\HeuristicLab.Core-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Persistence-3.3">
+      <HintPath>..\..\..\..\..\..\..\..\..\Programme\HeuristicLab 3.3\HeuristicLab.Persistence-3.3.dll</HintPath>
+    </Reference>
     <Reference Include="HeuristicLab.PluginInfrastructure-3.3">
       <HintPath>..\..\..\..\..\..\..\..\..\Programme\HeuristicLab 3.3\HeuristicLab.PluginInfrastructure-3.3.dll</HintPath>
@@ -119,4 +131,5 @@
     <Compile Include="BusinessObjects\ClientDto.cs" />
     <Compile Include="BusinessObjects\ClientConfigDto.cs" />
+    <Compile Include="BusinessObjects\ClientGroupDtoList.cs" />
     <Compile Include="RecurrentEvent.cs" />
     <Compile Include="ResponseCalendar.cs" />
Index: branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/Interfaces/IClientManager.cs
===================================================================
--- branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/Interfaces/IClientManager.cs	(revision 4121)
+++ branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/Interfaces/IClientManager.cs	(revision 4133)
@@ -41,5 +41,5 @@
     ResponseList<ClientGroupDto> GetAllClientGroups();
     [OperationContract]
-    ResponseObject<List<ClientGroupDto>> GetAllGroupsOfResource(Guid resourceId);
+    ResponseObject<ClientGroupDtoList> GetAllGroupsOfResource(Guid resourceId);
     [OperationContract]
     ResponseObject<ClientGroupDto> AddClientGroup(ClientGroupDto clientGroup);
Index: branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/MessageContainer.cs
===================================================================
--- branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/MessageContainer.cs	(revision 4121)
+++ branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/MessageContainer.cs	(revision 4133)
@@ -24,4 +24,6 @@
 using System.Linq;
 using System.Text;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Hive.Contracts {
@@ -30,6 +32,7 @@
   /// the actual message itself and the JobId, refered by the message
   /// </summary>
+  [StorableClass]
   [Serializable]
-  public class MessageContainer {
+  public class MessageContainer : IDeepCloneable {
 
     public enum MessageType { FetchJob, AbortJob, JobAborted, RequestSnapshot, FinishedJob, NoMessage, SnapshotReady, Shutdown, JobFailed, UptimeLimitDisconnect,
@@ -37,5 +40,7 @@
     };
 
+    [Storable]
     public MessageType Message { get; set; }
+    [Storable]
     public Guid JobId { get; set; }
 
@@ -44,4 +49,5 @@
       JobId = Guid.Empty;
     }
+
     public MessageContainer(MessageType message, Guid jobId) {
       Message = message;
@@ -49,4 +55,15 @@
     }
 
+    public virtual IDeepCloneable Clone(Cloner cloner) {
+      MessageContainer clone = (MessageContainer)Activator.CreateInstance(this.GetType(), true);
+      cloner.RegisterClonedObject(this, clone);
+      //clone.StatusMessage = this.StatusMessage;
+      //clone.Success = this.Success;
+      return clone;
+    }
+
+    public object Clone() {
+      return Clone(new Cloner());
+    }
   }
 }
Index: branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/Response.cs
===================================================================
--- branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/Response.cs	(revision 4121)
+++ branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/Response.cs	(revision 4133)
@@ -25,4 +25,6 @@
 using System.Text;
 using System.Runtime.Serialization;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Hive.Contracts {
@@ -30,11 +32,26 @@
   /// Server response class
   /// </summary>
+  [StorableClass]
   [DataContract]
   [Serializable]
-  public class Response {
+  public class Response : IDeepCloneable {
+    [Storable]
     [DataMember]
     public bool Success { get; set; }
+    [Storable]
     [DataMember]
-    public string StatusMessage { get; set; } 
+    public string StatusMessage { get; set; }
+
+    public virtual IDeepCloneable Clone(Cloner cloner) {
+      Response clone = (Response)Activator.CreateInstance(this.GetType(), true);
+      cloner.RegisterClonedObject(this, clone);
+      clone.StatusMessage = this.StatusMessage;
+      clone.Success = this.Success;
+      return clone;
+    }
+
+    public object Clone() {
+      return Clone(new Cloner());
+    }
   }
 }
Index: branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/ResponseCalendar.cs
===================================================================
--- branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/ResponseCalendar.cs	(revision 4121)
+++ branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/ResponseCalendar.cs	(revision 4133)
@@ -5,11 +5,23 @@
 using System.Runtime.Serialization;
 using HeuristicLab.Hive.Contracts.BusinessObjects;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 
 namespace HeuristicLab.Hive.Contracts {
-  public class ResponseCalendar: Response {
+  [StorableClass]
+  public class ResponseCalendar : Response {
+    [Storable]
     [DataMember]
     public bool ForceFetch { get; set; }
+    [Storable]
     [DataMember]
     public IEnumerable<AppointmentDto> Appointments { get; set; }
+
+    public override Common.IDeepCloneable Clone(Common.Cloner cloner) {
+      ResponseCalendar clone = (ResponseCalendar) base.Clone(cloner);
+      clone.Appointments = (from a in this.Appointments
+                           select (AppointmentDto)cloner.Clone(a)).ToList();
+      clone.ForceFetch = this.ForceFetch;
+      return clone;
+    }
   }
 }
Index: branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/ResponseHB.cs
===================================================================
--- branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/ResponseHB.cs	(revision 4121)
+++ branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/ResponseHB.cs	(revision 4133)
@@ -25,4 +25,5 @@
 using System.Text;
 using System.Runtime.Serialization;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 
 namespace HeuristicLab.Hive.Contracts {
@@ -33,8 +34,17 @@
   /// Return value to hearbeats sent by the client
   /// </summary>
+  [StorableClass]
   [DataContract]
   public class ResponseHB : Response {
+    [Storable]
     [DataMember]
     public List<MessageContainer> ActionRequest { get; set; }
+
+    public override Common.IDeepCloneable Clone(Common.Cloner cloner) {
+      ResponseHB clone = (ResponseHB) base.Clone(cloner);
+      clone.ActionRequest = (from ar in this.ActionRequest
+                            select (MessageContainer) cloner.Clone(ar)).ToList();
+      return clone;
+    }
   }
 }
Index: branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/ResponseJob.cs
===================================================================
--- branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/ResponseJob.cs	(revision 4121)
+++ branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/ResponseJob.cs	(revision 4133)
@@ -26,4 +26,5 @@
 using HeuristicLab.Hive.Contracts.BusinessObjects;
 using System.Runtime.Serialization;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 
 namespace HeuristicLab.Hive.Contracts {
@@ -33,9 +34,17 @@
   /// If a client pulls a Job from the server he gets a ResponseJob as answer
   /// </summary>
+  [StorableClass]
   [DataContract]
   [Serializable]
   public class ResponseJob : Response {
+    [Storable]
     [DataMember]
     public JobDto Job { get; set; }
+
+    public override Common.IDeepCloneable Clone(Common.Cloner cloner) {
+      ResponseJob clone = (ResponseJob) base.Clone(cloner);
+      clone.Job = (JobDto)cloner.Clone(this.Job);
+      return clone;
+    }
   }
 }
Index: branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/ResponseList.cs
===================================================================
--- branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/ResponseList.cs	(revision 4121)
+++ branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/ResponseList.cs	(revision 4133)
@@ -27,12 +27,22 @@
 using System.ServiceModel;
 using HeuristicLab.Hive.Contracts.BusinessObjects;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Hive.Contracts {
-
+  [StorableClass]
   [DataContract]
-  public class ResponseList<T> : Response {
+  public class ResponseList<T> : Response 
+    where T : IDeepCloneable {
+    [Storable]
     [DataMember]
     public IList<T> List { get; set; }
 
+    public override Common.IDeepCloneable Clone(Common.Cloner cloner) {
+      ResponseList<T> clone = (ResponseList<T>)base.Clone(cloner);
+      clone.List = (from elem in List
+                   select (T)cloner.Clone(elem)).ToList();
+      return clone;
+    }
   }
 }
Index: branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/ResponseObject.cs
===================================================================
--- branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/ResponseObject.cs	(revision 4121)
+++ branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/ResponseObject.cs	(revision 4133)
@@ -25,12 +25,21 @@
 using System.Text;
 using System.Runtime.Serialization;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Hive.Contracts {
-
+  [StorableClass]
   [DataContract]
-  public class ResponseObject<T> : Response {
+  public class ResponseObject<T> : Response
+    where T : IDeepCloneable {
+    [Storable]
     [DataMember]
     public T Obj { get; set; }
 
+    public override Common.IDeepCloneable Clone(Common.Cloner cloner) {
+      ResponseObject<T> clone = (ResponseObject<T>)base.Clone(cloner);
+      clone.Obj = (T)cloner.Clone(this.Obj);
+      return clone;
+    }
   }
 }
Index: branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/ResponsePlugin.cs
===================================================================
--- branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/ResponsePlugin.cs	(revision 4121)
+++ branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/ResponsePlugin.cs	(revision 4133)
@@ -5,16 +5,25 @@
 using System.Runtime.Serialization;
 using HeuristicLab.PluginInfrastructure;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 
 namespace HeuristicLab.Hive.Contracts {
-
+  [StorableClass]
   [DataContract]
   [Serializable]
   public class ResponsePlugin : Response {
+    [Storable]
+    [DataMember]
+    public List<CachedHivePluginInfoDto> Plugins { get; set; }
+
     public ResponsePlugin() {
       Plugins = new List<CachedHivePluginInfoDto>();
     }
 
-    [DataMember]
-    public List<CachedHivePluginInfoDto> Plugins { get; set; }
+    public override Common.IDeepCloneable Clone(Common.Cloner cloner) {
+      ResponsePlugin clone = (ResponsePlugin) base.Clone(cloner);
+      clone.Plugins = (from p in Plugins
+                       select (CachedHivePluginInfoDto)cloner.Clone(p)).ToList();
+      return clone;
+    }
   }
 }
Index: branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/ResponseResultReceived.cs
===================================================================
--- branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/ResponseResultReceived.cs	(revision 4121)
+++ branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/ResponseResultReceived.cs	(revision 4133)
@@ -26,12 +26,23 @@
 using System.Runtime.Serialization;
 using HeuristicLab.Hive.Contracts.BusinessObjects;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 
 namespace HeuristicLab.Hive.Contracts {
+  [StorableClass]
   [DataContract]
   public class ResponseResultReceived : Response {
+    [Storable]
     [DataMember]
     public Guid JobId { get; set; }
+    [Storable]
     [DataMember]
-    public bool finished { get; set; }
+    public bool Finished { get; set; }
+
+    public override Common.IDeepCloneable Clone(Common.Cloner cloner) {
+      ResponseResultReceived clone = (ResponseResultReceived) base.Clone(cloner);
+      clone.Finished = this.Finished;
+      clone.JobId = this.JobId;
+      return clone;
+    }
   }
 }
Index: branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/ResponseSerializedJob.cs
===================================================================
--- branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/ResponseSerializedJob.cs	(revision 4121)
+++ branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/ResponseSerializedJob.cs	(revision 4133)
@@ -26,4 +26,5 @@
 using HeuristicLab.Hive.Contracts.BusinessObjects;
 using System.Runtime.Serialization;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 
 namespace HeuristicLab.Hive.Contracts {
@@ -33,9 +34,17 @@
   /// If a client pulls a Job from the server he gets a ResponseJob as answer
   /// </summary>
+  [StorableClass]
   [DataContract]
   [Serializable]
   public class ResponseSerializedJob : Response {
+    [Storable]
     [DataMember]
     public SerializedJob Job { get; set; }
+
+    public override Common.IDeepCloneable Clone(Common.Cloner cloner) {
+      ResponseSerializedJob clone = (ResponseSerializedJob) base.Clone(cloner);
+      clone.Job = (SerializedJob)cloner.Clone(this.Job);
+      return clone;
+    }
   }
 }
