Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Calendar/3.3/Properties/AssemblyInfo.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Calendar/3.3/Properties/AssemblyInfo.cs	(revision 4754)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Calendar/3.3/Properties/AssemblyInfo.cs	(revision 4755)
@@ -58,3 +58,3 @@
 // [assembly: AssemblyVersion("1.0.*")]
 [assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.0.4750")]
+[assembly: AssemblyFileVersion("3.3.0.4751")]
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.DataAccess/3.3/PersistableObject.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.DataAccess/3.3/PersistableObject.cs	(revision 4754)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.DataAccess/3.3/PersistableObject.cs	(revision 4755)
@@ -30,13 +30,22 @@
   [DataContract]
   [Serializable]
-  public class PersistableObject: IPersistableObject, IDeepCloneable {
-
-    public PersistableObject() { }
-
-    public PersistableObject(bool deserializing) { }
-
+  public class PersistableObject : IDeepCloneable, IPersistableObject {
     [Storable]
     [DataMember]
     public Guid Id { get; set; }
+
+    public PersistableObject() { }
+    [StorableConstructor]
+    public PersistableObject(bool deserializing) { }
+    protected PersistableObject(PersistableObject original, Cloner cloner) {
+      cloner.RegisterClonedObject(original, this);
+      this.Id = original.Id;
+    }
+    public virtual IDeepCloneable Clone(Cloner cloner) {
+      return new PersistableObject(this, cloner);
+    }
+    public object Clone() {
+      return Clone(new Cloner());
+    }
 
     public override bool Equals(object obj) {
@@ -55,15 +64,4 @@
       return this.Id.GetHashCode();
     }
-
-    public virtual IDeepCloneable Clone(Cloner cloner) {
-      PersistableObject clone = (PersistableObject)Activator.CreateInstance(this.GetType(), true);
-      cloner.RegisterClonedObject(this, clone);
-      clone.Id = this.Id;
-      return clone;
-    }
-
-    public object Clone() {
-      return Clone(new Cloner());
-    }
   }
 }
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/AppointmentDto.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/AppointmentDto.cs	(revision 4754)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/AppointmentDto.cs	(revision 4755)
@@ -24,10 +24,11 @@
 using HeuristicLab.DataAccess;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Hive.Contracts.BusinessObjects {
-  
+
   [StorableClass]
   [DataContract]
-  public class AppointmentDto: PersistableObject {
+  public class AppointmentDto : PersistableObject {
     [Storable]
     [DataMember]
@@ -49,13 +50,18 @@
     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;
+    public AppointmentDto() { }
+    [StorableConstructor]
+    protected AppointmentDto(bool deserializing) : base(deserializing) { }
+    protected AppointmentDto(AppointmentDto original, Cloner cloner)
+      : base(original, cloner) {
+      this.AllDayEvent = original.AllDayEvent;
+      this.EndDate = original.EndDate;
+      this.Recurring = original.Recurring;
+      this.RecurringId = original.RecurringId;
+      this.ResourceId = original.ResourceId;
+      this.StartDate = original.StartDate;
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new AppointmentDto(this, cloner);
     }
   }
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/CachedHivePluginInfoDto.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/CachedHivePluginInfoDto.cs	(revision 4754)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/CachedHivePluginInfoDto.cs	(revision 4755)
@@ -26,4 +26,5 @@
 using HeuristicLab.Hive.Contracts.BusinessObjects;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.PluginInfrastructure {
@@ -32,5 +33,5 @@
   [Serializable]
   public class CachedHivePluginInfoDto : HivePluginInfoDto {
-    
+
     /// <summary>
     /// stores the plugin files in a list of byte arrays
@@ -43,10 +44,12 @@
       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;
+    [StorableConstructor]
+    protected CachedHivePluginInfoDto(bool deserializing) : base(deserializing) { }
+    protected CachedHivePluginInfoDto(CachedHivePluginInfoDto original, Cloner cloner)
+      : base(original, cloner) {
+      this.PluginFiles = (original.PluginFiles.Select(x => cloner.Clone(x))).ToList();
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new CachedHivePluginInfoDto(this, cloner);
     }
   }
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/HiveExperimentDto.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/HiveExperimentDto.cs	(revision 4754)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/HiveExperimentDto.cs	(revision 4755)
@@ -48,20 +48,22 @@
     public Guid? RootJobId { get; set; }
 
+    public HiveExperimentDto() { }
+    [StorableConstructor]
+    protected HiveExperimentDto(bool deserializing) : base(deserializing) { }
+    protected HiveExperimentDto(HiveExperimentDto original, Cloner cloner)
+      : base(original, cloner) {
+        this.Name = original.Name;
+        this.Description = original.Description;
+        this.ResourceIds = original.ResourceIds;
+        this.RootJobId = original.RootJobId;
+        this.UserId = original.UserId;
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new HiveExperimentDto(this, cloner);
+    }
+
     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/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/HiveExperimentDtoList.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/HiveExperimentDtoList.cs	(revision 4754)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/HiveExperimentDtoList.cs	(revision 4755)
@@ -33,18 +33,16 @@
       this.list = new List<HiveExperimentDto>(collection);
     }
-
     [StorableConstructor]
     protected HiveExperimentDtoList(bool deserializing) : base(deserializing) { }
-
+    protected HiveExperimentDtoList(HiveExperimentDtoList original, Cloner cloner) {
+      cloner.RegisterClonedObject(original, this);
+      this.list = (original.Select(x => (HiveExperimentDto)cloner.Clone(x))).ToList();
+    }
+    public virtual IDeepCloneable Clone(Cloner cloner) {
+      return new HiveExperimentDtoList(this, cloner);
+    }
     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/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/HivePluginFile.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/HivePluginFile.cs	(revision 4754)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/HivePluginFile.cs	(revision 4755)
@@ -35,22 +35,24 @@
     [Storable]
     [DataMember]
-    public String Name { get; set; }  
+    public String Name { get; set; }
 
+    public HivePluginFile() { }
     public HivePluginFile(byte[] binaryFile, String name) {
       BinaryFile = binaryFile;
       Name = name;
     }
-
+    [StorableConstructor]
+    protected HivePluginFile(bool deserializing) { }
+    protected HivePluginFile(HivePluginFile original, Cloner cloner) {
+      cloner.RegisterClonedObject(original, this);
+      this.Name = original.Name;
+      if (original.BinaryFile != null) {
+        this.BinaryFile = new byte[original.BinaryFile.Length];
+        Array.Copy(original.BinaryFile, this.BinaryFile, original.BinaryFile.Length);
+      }
+    }
     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;
+      return new HivePluginFile(this, cloner);
     }
-
     public object Clone() {
       return Clone(new Cloner());
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/HivePluginInfoDto.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/HivePluginInfoDto.cs	(revision 4754)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/HivePluginInfoDto.cs	(revision 4755)
@@ -27,4 +27,5 @@
 using HeuristicLab.Hive.JobBase;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Hive.Contracts.BusinessObjects {
@@ -49,6 +50,15 @@
 
     public HivePluginInfoDto() { }
-
+    [StorableConstructor]
     public HivePluginInfoDto(bool deserializing) : base(deserializing) { }
+    protected HivePluginInfoDto(HivePluginInfoDto original, Cloner cloner)
+      : base(original, cloner) {
+      this.Name = original.Name;
+      this.Version = (Version)original.Version.Clone();
+      this.Update = original.Update;
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new HivePluginInfoDto(this, cloner);
+    }
 
     [StorableHook(HookType.BeforeSerialization)]
@@ -60,12 +70,4 @@
     private void AfterDeserialization() {
       this.Version = new Version(storableVersion);
-    }
-
-    public override Common.IDeepCloneable Clone(Common.Cloner cloner) {
-      HivePluginInfoDto clone = (HivePluginInfoDto) base.Clone(cloner);
-      clone.Name = this.Name;
-      clone.Version = (Version)this.Version.Clone();
-      clone.Update = this.Update;
-      return clone;
     }
 
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/JobDto.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/JobDto.cs	(revision 4754)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/JobDto.cs	(revision 4755)
@@ -89,26 +89,28 @@
       AssignedResourceIds = new List<Guid>();
     }
-
+    [StorableConstructor]
+    protected JobDto(bool deserializing) : base(deserializing) { }
+    protected JobDto(JobDto original, Cloner cloner)
+      : base(original, cloner) {
+      this.Id = original.Id;
+      this.AssignedResourceIds = new List<Guid>(original.AssignedResourceIds);
+      this.Slave = cloner.Clone(original.Slave);
+      this.CoresNeeded = original.CoresNeeded;
+      this.DateCalculated = original.DateCalculated;
+      this.DateCreated = original.DateCreated;
+      this.DateFinished = original.DateFinished;
+      this.Exception = original.Exception;
+      this.Id = original.Id;
+      this.MemoryNeeded = original.MemoryNeeded;
+      this.ParentJobId = original.ParentJobId;
+      this.ExecutionTime = original.ExecutionTime;
+      this.PluginsNeeded = (original.PluginsNeeded.Select(x => cloner.Clone(x))).ToList();
+      this.Priority = original.Priority;
+      this.Project = cloner.Clone(original.Project);
+      this.State = original.State;
+      this.UserId = original.UserId;
+    }
     public override IDeepCloneable Clone(Cloner cloner) {
-      JobDto clone = (JobDto)base.Clone(cloner);
-      clone.Id = this.Id;
-      clone.AssignedResourceIds = new List<Guid>(this.AssignedResourceIds);
-      clone.Slave = (SlaveDto)cloner.Clone(this.Slave);
-      clone.CoresNeeded = this.CoresNeeded;
-      clone.DateCalculated = this.DateCalculated;
-      clone.DateCreated = this.DateCreated;
-      clone.DateFinished = this.DateFinished;
-      clone.Exception = this.Exception;
-      clone.Id = this.Id;
-      clone.MemoryNeeded = this.MemoryNeeded;
-      clone.ParentJobId = this.ParentJobId;
-      clone.ExecutionTime = this.ExecutionTime;
-      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;
+      return new JobDto(this, cloner);
     }
   }
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/JobResult.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/JobResult.cs	(revision 4754)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/JobResult.cs	(revision 4755)
@@ -24,4 +24,5 @@
 using HeuristicLab.DataAccess;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Hive.Contracts.BusinessObjects {
@@ -56,16 +57,22 @@
     public Guid? ParentJobId { get; set; }
 
-    public override Common.IDeepCloneable Clone(Common.Cloner cloner) {
-      JobResult clone = (JobResult) base.Clone(cloner);
-      clone.SlaveId = this.SlaveId;
-      clone.DateCreated = this.DateCreated;
-      clone.DateCalculated = this.DateCalculated;
-      clone.DateFinished = this.DateFinished;
-      clone.Exception = this.Exception;
-      clone.ExecutionTime = this.ExecutionTime;
-      clone.State = this.State;
-      clone.ParentJobId = this.ParentJobId;
-      return clone;
+    public JobResult() { }
+    [StorableConstructor]
+    protected JobResult(bool deserializing) : base(deserializing) { }
+    protected JobResult(JobResult original, Cloner cloner)
+      : base(original, cloner) {
+      this.SlaveId = original.SlaveId;
+      this.DateCreated = original.DateCreated;
+      this.DateCalculated = original.DateCalculated;
+      this.DateFinished = original.DateFinished;
+      this.Exception = original.Exception;
+      this.ExecutionTime = original.ExecutionTime;
+      this.State = original.State;
+      this.ParentJobId = original.ParentJobId;
     }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new JobResult(this, cloner);
+    }
+
   }
 }
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/JobResultList.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/JobResultList.cs	(revision 4754)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/JobResultList.cs	(revision 4755)
@@ -33,18 +33,18 @@
       this.list = new List<JobResult>(collection);
     }
-
     [StorableConstructor]
     protected JobResultList(bool deserializing) : base(deserializing) { }
-
+    protected JobResultList(JobResultList original, Cloner cloner) {
+      cloner.RegisterClonedObject(original, this);
+      this.list = (original.Select(x => cloner.Clone(x))).ToList();
+    }
+    public virtual IDeepCloneable Clone(Cloner cloner) {
+      return new JobResultList(this, cloner);
+    }
     public object Clone() {
       return Clone(new Cloner());
     }
 
-    public virtual IDeepCloneable Clone(Cloner cloner) {
-      JobResultList clone = (JobResultList)Activator.CreateInstance(this.GetType());
-      cloner.RegisterClonedObject(this, clone);
-      clone.list = (this.Select(x => (JobResult)cloner.Clone(x))).ToList();
-      return clone;
-    }
+
   }
 }
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/ProjectDto.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/ProjectDto.cs	(revision 4754)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/ProjectDto.cs	(revision 4755)
@@ -24,4 +24,5 @@
 using HeuristicLab.DataAccess;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Hive.Contracts.BusinessObjects {
@@ -34,8 +35,13 @@
     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;
+    public ProjectDto() { }
+    [StorableConstructor]
+    protected ProjectDto(bool deserializing) : base(deserializing) { }
+    protected ProjectDto(ProjectDto original, Cloner cloner)
+      : base(original, cloner) {
+      this.Name = original.Name;
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new ProjectDto(this, cloner);
     }
   }
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/ResourceDto.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/ResourceDto.cs	(revision 4754)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/ResourceDto.cs	(revision 4755)
@@ -35,13 +35,18 @@
     public string Name { get; set; }
 
+    public ResourceDto() { }
+    [StorableConstructor]
+    protected ResourceDto(bool deserializing) : base(deserializing) { }
+    protected ResourceDto(ResourceDto original, Cloner cloner)
+      : base(original, cloner) {
+      this.Name = original.Name;
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new ResourceDto(this, cloner);
+    }
+
     public override string ToString() {
       return Id + " " + Name;
     }
-
-    public virtual IDeepCloneable Clone(Cloner cloner) {
-      ResourceDto clone = (ResourceDto)base.Clone(cloner);
-      clone.Name = this.Name;
-      return clone;
-    }
   }
 }
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/SerializedJob.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/SerializedJob.cs	(revision 4754)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/SerializedJob.cs	(revision 4755)
@@ -39,13 +39,16 @@
     public byte[] SerializedJobData { get; set; }
 
+    public SerializedJob() { }
+    [StorableConstructor]
+    protected SerializedJob(bool deserializing) { }
+    protected SerializedJob(SerializedJob original, Cloner cloner) {
+      cloner.RegisterClonedObject(original, this);
+      this.JobInfo = cloner.Clone(original.JobInfo);
+      this.SerializedJobData = new byte[this.SerializedJobData.Length];
+      Array.Copy(original.SerializedJobData, this.SerializedJobData, original.SerializedJobData.Length);
+    }
     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;
+      return new SerializedJob(this, cloner);
     }
-
     public object Clone() {
       return Clone(new Cloner());
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/SerializedJobList.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/SerializedJobList.cs	(revision 4754)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/SerializedJobList.cs	(revision 4755)
@@ -35,18 +35,16 @@
       this.list = new List<SerializedJob>(collection);
     }
-
     [StorableConstructor]
     protected SerializedJobList(bool deserializing) : base(deserializing) { }
-
+    protected SerializedJobList(SerializedJobList original, Cloner cloner) {
+      cloner.RegisterClonedObject(original, this);
+      this.list = (original.Select(x => cloner.Clone(x))).ToList();
+    }
+    public virtual IDeepCloneable Clone(Cloner cloner) {
+      return new SerializedJobList(this, cloner);
+    }
     public object Clone() {
       return Clone(new Cloner());
     }
-
-    public virtual IDeepCloneable Clone(Cloner cloner) {
-      SerializedJobList clone = (SerializedJobList)Activator.CreateInstance(this.GetType());
-      cloner.RegisterClonedObject(this, clone);
-      clone.list = (this.Select(x => (SerializedJob)cloner.Clone(x))).ToList();
-      return clone;
-    }
   }
 }
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/SlaveConfigDto.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/SlaveConfigDto.cs	(revision 4754)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/SlaveConfigDto.cs	(revision 4755)
@@ -30,5 +30,5 @@
   [DataContract]
   [Serializable]
-  public class SlaveConfigDto : PersistableObject, IDeepCloneable {
+  public class SlaveConfigDto : PersistableObject {
     [Storable]
     [DataMember]
@@ -38,9 +38,14 @@
     public int? HeartBeatIntervall { get; set; }
 
+    public SlaveConfigDto() { }
+    [StorableConstructor]
+    protected SlaveConfigDto(bool deserializing) : base(deserializing) { }
+    protected SlaveConfigDto(SlaveConfigDto original, Cloner cloner)
+      : base(original, cloner) {
+      this.UpDownTimeCalendar = original.UpDownTimeCalendar;
+      this.HeartBeatIntervall = original.HeartBeatIntervall;
+    }
     public override IDeepCloneable Clone(Cloner cloner) {
-      SlaveConfigDto clone = (SlaveConfigDto)base.Clone(cloner);
-      clone.UpDownTimeCalendar = this.UpDownTimeCalendar;
-      clone.HeartBeatIntervall = this.HeartBeatIntervall;
-      return clone;
+      return new SlaveConfigDto(this, cloner);
     }
   }
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/SlaveDto.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/SlaveDto.cs	(revision 4754)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/SlaveDto.cs	(revision 4755)
@@ -61,22 +61,27 @@
     public bool IsAllowedToCalculate { get; set; }
 
+    public SlaveDto() { }
+    [StorableConstructor]
+    protected SlaveDto(bool deserializing) : base(deserializing) { }
+    protected SlaveDto(SlaveDto original, Cloner cloner)
+      : base(original, cloner) {
+      this.CalendarSyncStatus = original.CalendarSyncStatus;
+      this.Config = cloner.Clone(original.Config);
+      this.CpuSpeedPerCore = original.CpuSpeedPerCore;
+      this.FreeMemory = original.FreeMemory;
+      this.Login = original.Login;
+      this.Memory = original.Memory;
+      this.NrOfCores = original.NrOfCores;
+      this.NrOfFreeCores = original.NrOfFreeCores;
+      this.State = original.State;
+      this.IsAllowedToCalculate = original.IsAllowedToCalculate;
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new SlaveDto(this, cloner);
+    }
+
     public override string ToString() {
       return base.ToString() + ", NrOfCores: " + NrOfCores + ", NrOfFreeCores " + NrOfFreeCores + ", Login: " + Login + ", State: " + State;
     }
-
-    public override IDeepCloneable Clone(Cloner cloner) {
-      SlaveDto clone = (SlaveDto)base.Clone(cloner);
-      clone.CalendarSyncStatus = this.CalendarSyncStatus;
-      clone.Config = (SlaveConfigDto)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;
-      clone.IsAllowedToCalculate = this.IsAllowedToCalculate;
-      return clone;
-    }
   }
 }
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/SlaveGroupDto.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/SlaveGroupDto.cs	(revision 4754)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/SlaveGroupDto.cs	(revision 4755)
@@ -24,4 +24,5 @@
 using System.Runtime.Serialization;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Hive.Contracts.BusinessObjects {
@@ -37,10 +38,12 @@
       Resources = new List<ResourceDto>();
     }
-
-    public override Common.IDeepCloneable Clone(Common.Cloner cloner) {
-      SlaveGroupDto clone = (SlaveGroupDto) base.Clone(cloner);
-      clone.Resources = (from r in this.Resources
-                        select (ResourceDto)cloner.Clone(r)).ToList();
-      return clone;
+    [StorableConstructor]
+    protected SlaveGroupDto(bool deserializing) : base(deserializing) { }
+    protected SlaveGroupDto(SlaveGroupDto original, Cloner cloner)
+      : base(original, cloner) {
+      this.Resources = (original.Resources.Select(x => cloner.Clone(x))).ToList();
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new SlaveGroupDto(this, cloner);
     }
   }
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/SlaveGroupDtoList.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/SlaveGroupDtoList.cs	(revision 4754)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/SlaveGroupDtoList.cs	(revision 4755)
@@ -36,18 +36,16 @@
       this.list = new List<SlaveGroupDto>(collection);
     }
-
     [StorableConstructor]
     protected SlaveGroupDtoList(bool deserializing) : base(deserializing) { }
-
+    protected SlaveGroupDtoList(SlaveGroupDtoList original, Cloner cloner) {
+      cloner.RegisterClonedObject(original, this);
+      this.list = (this.Select(x => cloner.Clone(x))).ToList();
+    }
+    public virtual IDeepCloneable Clone(Cloner cloner) {
+      return new SlaveGroupDtoList(this, cloner);
+    }
     public object Clone() {
       return Clone(new Cloner());
     }
-
-    public virtual IDeepCloneable Clone(Cloner cloner) {
-      SlaveGroupDtoList clone = (SlaveGroupDtoList)Activator.CreateInstance(this.GetType());
-      cloner.RegisterClonedObject(this, clone);
-      clone.list = (this.Select(x => (SlaveGroupDto)cloner.Clone(x))).ToList();
-      return clone;
-    }
   }
 }
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/UpTimeStatisticsDto.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/UpTimeStatisticsDto.cs	(revision 4754)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/UpTimeStatisticsDto.cs	(revision 4755)
@@ -24,4 +24,5 @@
 using HeuristicLab.DataAccess;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Hive.Contracts.BusinessObjects {
@@ -40,10 +41,15 @@
     public DateTime Logout { get; set; }
 
-    public override Common.IDeepCloneable Clone(Common.Cloner cloner) {
-      UpTimeStatisticsDto clone = (UpTimeStatisticsDto) base.Clone(cloner);
-      clone.Slave = (SlaveDto)cloner.Clone(this.Slave);
-      clone.Login = this.Login;
-      clone.Logout = this.Logout;
-      return clone;
+    public UpTimeStatisticsDto() { }
+    [StorableConstructor]
+    protected UpTimeStatisticsDto(bool deserializing) : base(deserializing) { }
+    protected UpTimeStatisticsDto(UpTimeStatisticsDto original, Cloner cloner)
+      : base(original, cloner) {
+      this.Slave = cloner.Clone(original.Slave);
+      this.Login = original.Login;
+      this.Logout = original.Logout;
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new UpTimeStatisticsDto(this, cloner);
     }
   }
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/HiveRoles.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/HiveRoles.cs	(revision 4754)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/HiveRoles.cs	(revision 4755)
@@ -23,7 +23,7 @@
 namespace HeuristicLab.Hive.Contracts {
   public static class HiveRoles {
-    public const string Administrator = "Hive.Administrator";
-    public const string Slave = "Hive.Slave";
-    public const string Client = "Hive.Client";
+    public const string Administrator = "Hive Administrator";
+    public const string Slave = "Hive Slave";
+    public const string User = "Hive User";
   }
 }
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/MessageContainer.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/MessageContainer.cs	(revision 4754)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/MessageContainer.cs	(revision 4755)
@@ -32,5 +32,4 @@
   [Serializable]
   public class MessageContainer : IDeepCloneable {
-
     public enum MessageType {
       FetchJob, AbortJob, JobAborted, RequestSnapshot, FinishedJob, NoMessage, SnapshotReady, Shutdown, JobFailed, UptimeLimitDisconnect,
@@ -46,22 +45,23 @@
     public Guid JobId { get; set; }
 
+    public MessageContainer() { }
     public MessageContainer(MessageType message) {
       Message = message;
       JobId = Guid.Empty;
     }
-
     public MessageContainer(MessageType message, Guid jobId) {
       Message = message;
       JobId = jobId;
     }
-
+    [StorableConstructor]
+    protected MessageContainer(bool deserializing) { }
+    protected MessageContainer(MessageContainer original, Cloner cloner) {
+      cloner.RegisterClonedObject(original, this);
+      this.Message = original.Message;
+      this.JobId = original.JobId;
+    }
     public virtual IDeepCloneable Clone(Cloner cloner) {
-      MessageContainer clone = (MessageContainer)Activator.CreateInstance(this.GetType(), true);
-      cloner.RegisterClonedObject(this, clone);
-      clone.Message = this.Message;
-      clone.JobId = this.JobId;
-      return clone;
+      return new MessageContainer(this, cloner);
     }
-
     public object Clone() {
       return Clone(new Cloner());
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/MessageContainerWithCallback.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/MessageContainerWithCallback.cs	(revision 4754)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/MessageContainerWithCallback.cs	(revision 4755)
@@ -28,17 +28,20 @@
   [Serializable]
   public class MessageContainerWithCallback<CallbackParameterType> : MessageContainer {
-
     [Storable]
     public Action<CallbackParameterType> Callback;
 
+    public MessageContainerWithCallback() { }
     public MessageContainerWithCallback(MessageType message, Guid parentJobId, Action<CallbackParameterType> callback)
       : base(message, parentJobId) {
-        this.Callback = callback;
+      this.Callback = callback;
     }
-
+    [StorableConstructor]
+    protected MessageContainerWithCallback(bool deserializing) : base(deserializing) { }
+    protected MessageContainerWithCallback(MessageContainerWithCallback<CallbackParameterType> original, Cloner cloner)
+      : base(original, cloner) {
+      this.Callback = original.Callback;
+    }
     public override IDeepCloneable Clone(Cloner cloner) {
-      MessageContainerWithJob clone = (MessageContainerWithJob)base.Clone(cloner);
-
-      return clone;
+      return new MessageContainerWithCallback<CallbackParameterType>(this, cloner);
     }
   }
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/MessageContainerWithJob.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/MessageContainerWithJob.cs	(revision 4754)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/MessageContainerWithJob.cs	(revision 4755)
@@ -29,17 +29,20 @@
   [Serializable]
   public class MessageContainerWithJob : MessageContainer {
-
     [Storable]
     public SerializedJob SerializedJob { get; set; }
-    
+
+    public MessageContainerWithJob() { }
     public MessageContainerWithJob(MessageType message, Guid parentJobId, SerializedJob serializedJob)
       : base(message, parentJobId) {
         this.SerializedJob = serializedJob;
     }
-
+    [StorableConstructor]
+    protected MessageContainerWithJob(bool deserializing) : base(deserializing) { }
+    protected MessageContainerWithJob(MessageContainerWithJob original, Cloner cloner)
+      : base(original, cloner) {
+      this.SerializedJob = cloner.Clone(original.SerializedJob);
+    }
     public override IDeepCloneable Clone(Cloner cloner) {
-      MessageContainerWithJob clone = (MessageContainerWithJob)base.Clone(cloner);
-      clone.SerializedJob = (SerializedJob)cloner.Clone(this.SerializedJob);
-      return clone;
+      return new MessageContainerWithJob(this, cloner);
     }
   }
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/ResponseObjects/Response.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/ResponseObjects/Response.cs	(revision 4754)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/ResponseObjects/Response.cs	(revision 4755)
@@ -40,15 +40,13 @@
       StatusMessage = ResponseStatus.Ok;
     }
-
     [StorableConstructor]
     protected Response(bool deserializing) { }
-
+    protected Response(Response original, Cloner cloner) {
+      cloner.RegisterClonedObject(original, this);
+      this.StatusMessage = original.StatusMessage;
+    }
     public virtual IDeepCloneable Clone(Cloner cloner) {
-      Response clone = (Response)Activator.CreateInstance(this.GetType(), true);
-      cloner.RegisterClonedObject(this, clone);
-      clone.StatusMessage = this.StatusMessage;
-      return clone;
+      return new Response(this, cloner);
     }
-
     public object Clone() {
       return Clone(new Cloner());
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/ResponseObjects/ResponseCalendar.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/ResponseObjects/ResponseCalendar.cs	(revision 4754)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/ResponseObjects/ResponseCalendar.cs	(revision 4755)
@@ -26,4 +26,5 @@
 using HeuristicLab.Hive.Contracts.BusinessObjects;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Hive.Contracts.ResponseObjects {
@@ -39,10 +40,16 @@
     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;
+    public ResponseCalendar() {
+      this.Appointments = new List<AppointmentDto>();
+    }
+    [StorableConstructor]
+    protected ResponseCalendar(bool deserializing) : base(deserializing) { }
+    protected ResponseCalendar(ResponseCalendar original, Cloner cloner)
+      : base(original, cloner) {
+      this.Appointments = (original.Appointments.Select(x => cloner.Clone(x))).ToList();
+      this.ForceFetch = original.ForceFetch;
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new ResponseCalendar(this, cloner);
     }
   }
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/ResponseObjects/ResponseHeartBeat.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/ResponseObjects/ResponseHeartBeat.cs	(revision 4754)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/ResponseObjects/ResponseHeartBeat.cs	(revision 4755)
@@ -25,8 +25,7 @@
 using System.Runtime.Serialization;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Hive.Contracts.ResponseObjects {
-
-
   /// <summary>
   /// Response Heartbeat class
@@ -41,9 +40,15 @@
     public List<MessageContainer> ActionRequest { get; set; }
 
-    public override Common.IDeepCloneable Clone(Common.Cloner cloner) {
-      ResponseHeartBeat clone = (ResponseHeartBeat) base.Clone(cloner);
-      clone.ActionRequest = (from ar in this.ActionRequest
-                            select (MessageContainer) cloner.Clone(ar)).ToList();
-      return clone;
+    public ResponseHeartBeat() {
+      this.ActionRequest = new List<MessageContainer>();
+    }
+    [StorableConstructor]
+    protected ResponseHeartBeat(bool deserializing) : base(deserializing) { }
+    protected ResponseHeartBeat(ResponseHeartBeat original, Cloner cloner)
+      : base(original, cloner) {
+      this.ActionRequest = (original.ActionRequest.Select(x => cloner.Clone(x))).ToList();
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new ResponseHeartBeat(this, cloner);
     }
   }
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/ResponseObjects/ResponseList.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/ResponseObjects/ResponseList.cs	(revision 4754)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/ResponseObjects/ResponseList.cs	(revision 4755)
@@ -31,15 +31,20 @@
   [DataContract]
   [Serializable]
-  public class ResponseList<T> : Response 
-    where T : IDeepCloneable {
+  public class ResponseList<T> : Response where T : class, 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;
+    public ResponseList() {
+      this.List = new List<T>();
+    }
+    [StorableConstructor]
+    protected ResponseList(bool deserializing) : base(deserializing) { }
+    protected ResponseList(ResponseList<T> original, Cloner cloner)
+      : base(original, cloner) {
+      this.List = (original.List.Select(x => cloner.Clone(x))).ToList();
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new ResponseList<T>(this, cloner);
     }
   }
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/ResponseObjects/ResponseObject.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/ResponseObjects/ResponseObject.cs	(revision 4754)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/ResponseObjects/ResponseObject.cs	(revision 4755)
@@ -29,14 +29,18 @@
   [DataContract]
   [Serializable]
-  public class ResponseObject<T> : Response
-    where T : IDeepCloneable {
+  public class ResponseObject<T> : Response where T : class, 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;
+    public ResponseObject() { }
+    [StorableConstructor]
+    protected ResponseObject(bool deserializing) : base(deserializing) { }
+    protected ResponseObject(ResponseObject<T> original, Cloner cloner)
+      : base(original, cloner) {
+        this.Obj = cloner.Clone(original.Obj);
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new ResponseObject<T>(this, cloner);
     }
   }
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/ResponseObjects/ResponseResultReceived.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/ResponseObjects/ResponseResultReceived.cs	(revision 4754)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/ResponseObjects/ResponseResultReceived.cs	(revision 4755)
@@ -23,4 +23,5 @@
 using System.Runtime.Serialization;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Hive.Contracts.ResponseObjects {
@@ -36,9 +37,14 @@
     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;
+    public ResponseResultReceived() { }
+    [StorableConstructor]
+    protected ResponseResultReceived(bool deserializing) : base(deserializing) { }
+    protected ResponseResultReceived(ResponseResultReceived original, Cloner cloner)
+      : base(original, cloner) {
+      this.Finished = original.Finished;
+      this.JobId = original.JobId;
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new ResponseResultReceived(this, cloner);
     }
   }
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/WcfServicePool.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/WcfServicePool.cs	(revision 4754)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/WcfServicePool.cs	(revision 4755)
@@ -67,9 +67,11 @@
     private int requestCount = 0;
 
-    public WcfServicePool(string hostAddress, string username, string password, string endpointName) {
-      this.hostAddress = hostAddress;
+    public WcfServicePool(string username, string password, string endpointName) {
       this.username = username;
       this.password = password;
       this.endpointName = endpointName;
+    }
+    public WcfServicePool(string hostAddress, string username, string password, string endpointName) : this(username, password, endpointName) {
+      this.hostAddress = hostAddress;
     }
 
@@ -89,5 +91,7 @@
       if (factory == null) {
         factory = new ChannelFactory<T>(endpointName);
-        WcfSettings.SetEndpointAddress(factory.Endpoint, hostAddress);
+        if (!string.IsNullOrEmpty(hostAddress)) {
+          WcfSettings.SetEndpointAddress(factory.Endpoint, hostAddress);
+        }
 
         factory.Credentials.UserName.UserName = username;
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/ConnectionSetupView.Designer.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/ConnectionSetupView.Designer.cs	(revision 4754)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/ConnectionSetupView.Designer.cs	(revision 4755)
@@ -46,6 +46,4 @@
       this.components = new System.ComponentModel.Container();
       System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ConnectionSetupView));
-      this.urlTextBox = new System.Windows.Forms.TextBox();
-      this.urlLabel = new System.Windows.Forms.Label();
       this.userLabel = new System.Windows.Forms.Label();
       this.userTextBox = new System.Windows.Forms.TextBox();
@@ -55,32 +53,11 @@
       this.savePasswordCheckbox = new System.Windows.Forms.CheckBox();
       this.cancelButton = new System.Windows.Forms.Button();
-      this.groupBox1 = new System.Windows.Forms.GroupBox();
       this.toolTip = new System.Windows.Forms.ToolTip(this.components);
-      this.groupBox1.SuspendLayout();
       this.SuspendLayout();
-      // 
-      // urlTextBox
-      // 
-      this.urlTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
-                  | System.Windows.Forms.AnchorStyles.Right)));
-      this.urlTextBox.Location = new System.Drawing.Point(125, 15);
-      this.urlTextBox.Name = "urlTextBox";
-      this.urlTextBox.Size = new System.Drawing.Size(351, 20);
-      this.urlTextBox.TabIndex = 0;
-      this.toolTip.SetToolTip(this.urlTextBox, "URL of HeuristicLab Plugin Deployment Service");
-      // 
-      // urlLabel
-      // 
-      this.urlLabel.AutoSize = true;
-      this.urlLabel.Location = new System.Drawing.Point(12, 18);
-      this.urlLabel.Name = "urlLabel";
-      this.urlLabel.Size = new System.Drawing.Size(107, 13);
-      this.urlLabel.TabIndex = 1;
-      this.urlLabel.Text = "&Hive Server Address:";
       // 
       // userLabel
       // 
       this.userLabel.AutoSize = true;
-      this.userLabel.Location = new System.Drawing.Point(6, 22);
+      this.userLabel.Location = new System.Drawing.Point(3, 6);
       this.userLabel.Name = "userLabel";
       this.userLabel.Size = new System.Drawing.Size(58, 13);
@@ -92,7 +69,7 @@
       this.userTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
                   | System.Windows.Forms.AnchorStyles.Right)));
-      this.userTextBox.Location = new System.Drawing.Point(94, 19);
+      this.userTextBox.Location = new System.Drawing.Point(91, 3);
       this.userTextBox.Name = "userTextBox";
-      this.userTextBox.Size = new System.Drawing.Size(155, 20);
+      this.userTextBox.Size = new System.Drawing.Size(189, 20);
       this.userTextBox.TabIndex = 0;
       this.toolTip.SetToolTip(this.userTextBox, "Username used to connect to the HeuristicLab plugin deployment service");
@@ -101,5 +78,5 @@
       // 
       this.passwordLabel.AutoSize = true;
-      this.passwordLabel.Location = new System.Drawing.Point(6, 48);
+      this.passwordLabel.Location = new System.Drawing.Point(3, 32);
       this.passwordLabel.Name = "passwordLabel";
       this.passwordLabel.Size = new System.Drawing.Size(56, 13);
@@ -111,7 +88,7 @@
       this.passwordTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
                   | System.Windows.Forms.AnchorStyles.Right)));
-      this.passwordTextBox.Location = new System.Drawing.Point(94, 45);
+      this.passwordTextBox.Location = new System.Drawing.Point(91, 29);
       this.passwordTextBox.Name = "passwordTextBox";
-      this.passwordTextBox.Size = new System.Drawing.Size(155, 20);
+      this.passwordTextBox.Size = new System.Drawing.Size(189, 20);
       this.passwordTextBox.TabIndex = 1;
       this.toolTip.SetToolTip(this.passwordTextBox, "Passwort used to connect to the HeuristicLab plugin deployment service");
@@ -121,5 +98,5 @@
       // 
       this.applyButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
-      this.applyButton.Location = new System.Drawing.Point(320, 148);
+      this.applyButton.Location = new System.Drawing.Point(124, 79);
       this.applyButton.Name = "applyButton";
       this.applyButton.Size = new System.Drawing.Size(75, 23);
@@ -134,5 +111,5 @@
       this.savePasswordCheckbox.AutoSize = true;
       this.savePasswordCheckbox.CheckAlign = System.Drawing.ContentAlignment.MiddleRight;
-      this.savePasswordCheckbox.Location = new System.Drawing.Point(6, 71);
+      this.savePasswordCheckbox.Location = new System.Drawing.Point(3, 55);
       this.savePasswordCheckbox.Name = "savePasswordCheckbox";
       this.savePasswordCheckbox.Size = new System.Drawing.Size(103, 17);
@@ -146,5 +123,5 @@
       this.cancelButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
       this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel;
-      this.cancelButton.Location = new System.Drawing.Point(401, 148);
+      this.cancelButton.Location = new System.Drawing.Point(205, 79);
       this.cancelButton.Name = "cancelButton";
       this.cancelButton.Size = new System.Drawing.Size(75, 23);
@@ -155,18 +132,4 @@
       this.cancelButton.Click += new System.EventHandler(this.cancelButton_Click);
       // 
-      // groupBox1
-      // 
-      this.groupBox1.Controls.Add(this.userTextBox);
-      this.groupBox1.Controls.Add(this.userLabel);
-      this.groupBox1.Controls.Add(this.savePasswordCheckbox);
-      this.groupBox1.Controls.Add(this.passwordTextBox);
-      this.groupBox1.Controls.Add(this.passwordLabel);
-      this.groupBox1.Location = new System.Drawing.Point(12, 41);
-      this.groupBox1.Name = "groupBox1";
-      this.groupBox1.Size = new System.Drawing.Size(255, 96);
-      this.groupBox1.TabIndex = 1;
-      this.groupBox1.TabStop = false;
-      this.groupBox1.Text = "User Credentials";
-      // 
       // ConnectionSetupView
       // 
@@ -175,10 +138,12 @@
       this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
       this.CancelButton = this.cancelButton;
-      this.ClientSize = new System.Drawing.Size(488, 183);
-      this.Controls.Add(this.groupBox1);
+      this.ClientSize = new System.Drawing.Size(292, 114);
+      this.Controls.Add(this.userTextBox);
+      this.Controls.Add(this.userLabel);
       this.Controls.Add(this.cancelButton);
+      this.Controls.Add(this.savePasswordCheckbox);
+      this.Controls.Add(this.passwordTextBox);
       this.Controls.Add(this.applyButton);
-      this.Controls.Add(this.urlLabel);
-      this.Controls.Add(this.urlTextBox);
+      this.Controls.Add(this.passwordLabel);
       this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
       this.MaximizeBox = false;
@@ -189,6 +154,4 @@
       this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
       this.Text = "Edit Hive Connection Settings";
-      this.groupBox1.ResumeLayout(false);
-      this.groupBox1.PerformLayout();
       this.ResumeLayout(false);
       this.PerformLayout();
@@ -198,6 +161,4 @@
     #endregion
 
-    private System.Windows.Forms.TextBox urlTextBox;
-    private System.Windows.Forms.Label urlLabel;
     private System.Windows.Forms.Label userLabel;
     private System.Windows.Forms.TextBox userTextBox;
@@ -207,5 +168,4 @@
     private System.Windows.Forms.CheckBox savePasswordCheckbox;
     private System.Windows.Forms.Button cancelButton;
-    private System.Windows.Forms.GroupBox groupBox1;
     private System.Windows.Forms.ToolTip toolTip;
   }
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/ConnectionSetupView.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/ConnectionSetupView.cs	(revision 4754)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/ConnectionSetupView.cs	(revision 4755)
@@ -28,5 +28,4 @@
       InitializeComponent();
 
-      urlTextBox.Text = HeuristicLab.Hive.Experiment.Properties.Settings.Default.HiveServerIp;
       userTextBox.Text = HeuristicLab.Hive.Experiment.Properties.Settings.Default.HiveUsername;
       passwordTextBox.Text = HeuristicLab.Hive.Experiment.Properties.Settings.Default.HivePassword;
@@ -35,5 +34,4 @@
 
     private void applyButton_Click(object sender, EventArgs e) {
-      HeuristicLab.Hive.Experiment.Properties.Settings.Default.HiveServerIp = urlTextBox.Text;
       if (!savePasswordCheckbox.Checked) {
         // make sure we don't save username or password
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/HiveClient.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/HiveClient.cs	(revision 4754)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/HiveClient.cs	(revision 4755)
@@ -28,4 +28,5 @@
 using HeuristicLab.Hive.Contracts.Interfaces;
 using HeuristicLab.Hive.Contracts.ResponseObjects;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Hive.Experiment {
@@ -85,10 +86,11 @@
       this.log = new Log();
     }
-
-    public override Common.IDeepCloneable Clone(Common.Cloner cloner) {
-      HiveClient clone = (HiveClient)base.Clone(cloner);
-      clone.log = (ILog)cloner.Clone(this.log);
-      clone.hiveExperiments = (HiveExperimentList)cloner.Clone(this.hiveExperiments);
-      return clone;
+    protected HiveClient(HiveClient original, Cloner cloner)
+      : base(original, cloner) {
+      this.log = cloner.Clone(original.Log);
+      this.HiveExperiments = cloner.Clone(original.HiveExperiments);
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new HiveClient(this, cloner);
     }
 
@@ -146,5 +148,5 @@
       if (handler != null) handler(this, EventArgs.Empty);
     }
-    
+
     void hiveExperiments_ItemsRemoved(object sender, Collections.CollectionItemsChangedEventArgs<Collections.IndexedItem<HiveExperiment>> e) {
       if (!currentlyUpdating) {
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/HiveExperiment.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/HiveExperiment.cs	(revision 4754)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/HiveExperiment.cs	(revision 4755)
@@ -44,4 +44,9 @@
     private System.Timers.Timer timer;
 
+    private JobResultPoller jobResultPoller;
+    private Guid? rootJobId;
+    private DateTime lastUpdateTime;
+
+    #region Properties
     private Guid hiveExperimentId;
     public Guid HiveExperimentId {
@@ -67,7 +72,5 @@
       get { return log; }
     }
-
-    private DateTime lastUpdateTime;
-
+    
     private string resourceIds;
     public string ResourceIds {
@@ -80,7 +83,5 @@
       }
     }
-
-    private Guid? rootJobId;
-
+    
     private bool isPollingResults;
     public bool IsPollingResults {
@@ -109,6 +110,5 @@
       get { return progress; }
     }
-    
-    private JobResultPoller jobResultPoller;
+    #endregion
 
     public HiveExperiment()
@@ -118,8 +118,19 @@
       InitTimer();
     }
-
     public HiveExperiment(HiveExperimentDto hiveExperimentDto)
       : this() {
       UpdateFromDto(hiveExperimentDto);
+    }
+    protected HiveExperiment(HiveExperiment original, Cloner cloner)
+      : base(original, cloner) {
+      this.ResourceIds = original.resourceIds;
+      this.ExecutionState = original.executionState;
+      this.ExecutionTime = original.executionTime;
+      this.log = cloner.Clone(log);
+      this.lastUpdateTime = original.lastUpdateTime;
+      this.rootJobId = original.rootJobId;
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new HiveExperiment(this, cloner);
     }
 
@@ -140,16 +151,4 @@
         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;
     }
 
@@ -310,5 +309,5 @@
     public void Stop() {
       using (Disposable<IClientFacade> service = ServiceLocator.Instance.StreamedClientFacadePool.GetService()) {
-        foreach(HiveJob hj in HiveJob.GetAllHiveJobs()) {
+        foreach (HiveJob hj in HiveJob.GetAllHiveJobs()) {
           service.Obj.AbortJob(hj.JobDto.Id);
         }
@@ -591,5 +590,5 @@
         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
+        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);
       }
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/HiveExperimentList.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/HiveExperimentList.cs	(revision 4754)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/HiveExperimentList.cs	(revision 4755)
@@ -23,4 +23,5 @@
 using HeuristicLab.Core;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Hive.Experiment {
@@ -32,7 +33,11 @@
     public HiveExperimentList(IEnumerable<HiveExperiment> collection) : base(collection) { }
 
-    public override Common.IDeepCloneable Clone(Common.Cloner cloner) {
-      HiveExperiment clone = (HiveExperiment)base.Clone(cloner);
-      return clone;
+    [StorableConstructor]
+    protected HiveExperimentList(bool deserializing) : base(deserializing) { }
+    protected HiveExperimentList(HiveExperimentList original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new HiveExperimentList(this, cloner);
     }
   }
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/HiveJob.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/HiveJob.cs	(revision 4754)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/HiveJob.cs	(revision 4755)
@@ -119,15 +119,12 @@
       syncJobsWithOptimizers = true;
     }
-
     public HiveJob(JobDto jobDto)
       : this() {
       this.JobDto = jobDto;
     }
-
     public HiveJob(JobResult jobResult)
       : this() {
       UpdateFromJobResult(jobResult);
     }
-
     public HiveJob(OptimizerJob optimizerJob, bool autoCreateChildHiveJobs)
       : this() {
@@ -136,10 +133,8 @@
       this.syncJobsWithOptimizers = true;
     }
-
     public HiveJob(IOptimizer optimizer)
       : this() {
       this.Job = new OptimizerJob(optimizer);
     }
-
     public HiveJob(SerializedJob serializedJob, bool autoCreateChildHiveJobs)
       : this() {
@@ -148,4 +143,14 @@
       this.Job = SerializedJob.Deserialize<OptimizerJob>(serializedJob.SerializedJobData);
       this.syncJobsWithOptimizers = true;
+    }
+    [StorableConstructor]
+    protected HiveJob(bool deserializing) : base(deserializing) { }
+    protected HiveJob(HiveJob original, Cloner cloner)
+      : base(original, cloner) {
+      this.JobDto = cloner.Clone(original.jobDto);
+      this.Job = cloner.Clone(original.job);
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new HiveJob(this, cloner);
     }
 
@@ -213,5 +218,5 @@
       }
     }
-        
+
     void batchRun_AlgorithmChanged(object sender, EventArgs e) {
       if (syncJobsWithOptimizers) {
@@ -226,5 +231,5 @@
       }
     }
-    
+
     void Job_ToStringChanged(object sender, EventArgs e) {
       this.OnToStringChanged();
@@ -484,12 +489,4 @@
     }
 
-    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
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/HiveJobList.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/HiveJobList.cs	(revision 4754)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/HiveJobList.cs	(revision 4755)
@@ -23,4 +23,5 @@
 using HeuristicLab.Core;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Hive.Experiment {
@@ -32,7 +33,11 @@
     public HiveJobList(IEnumerable<HiveJob> collection) : base(collection) { }
 
-    public override Common.IDeepCloneable Clone(Common.Cloner cloner) {
-      HiveJobList clone = (HiveJobList)base.Clone(cloner);
-      return clone;
+    [StorableConstructor]
+    protected HiveJobList(bool deserializing) : base(deserializing) { }
+    protected HiveJobList(HiveJobList original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new HiveJobList(this, cloner);
     }
   }
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/Jobs/JobList.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/Jobs/JobList.cs	(revision 4754)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/Jobs/JobList.cs	(revision 4755)
@@ -24,4 +24,5 @@
 using HeuristicLab.Hive.JobBase;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Hive.Experiment.Jobs {
@@ -33,7 +34,11 @@
     public JobList(IEnumerable<IJob> collection) : base(collection) { }
 
-    public override Common.IDeepCloneable Clone(Common.Cloner cloner) {
-      HiveJobList clone = (HiveJobList)base.Clone(cloner);
-      return clone;
+    [StorableConstructor]
+    protected JobList(bool deserializing) : base(deserializing) { }
+    protected JobList(JobList original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new JobList(this, cloner);
     }
   }
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/Jobs/OptimizerJob.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/Jobs/OptimizerJob.cs	(revision 4754)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/Jobs/OptimizerJob.cs	(revision 4755)
@@ -31,5 +31,5 @@
   [Item("Optimizer Job", "Represents Job which executes a IOptimizer object.")]
   [StorableClass]
-  public class OptimizerJob : IJob {
+  public class OptimizerJob : DeepCloneable, IJob {
     [Storable]
     protected IOptimizer optimizer;
@@ -82,5 +82,4 @@
       this.log = new Log();
     }
-
     public OptimizerJob(IOptimizer optimizer)
       : this() {
@@ -95,5 +94,21 @@
       }
     }
-
+    [StorableConstructor]
+    protected OptimizerJob(bool deserializing) { }
+    protected OptimizerJob(OptimizerJob original, Cloner cloner)
+      : base(original, cloner) {
+      this.Optimizer = cloner.Clone(original.Optimizer);
+      this.log = cloner.Clone(original.Log);
+      this.ComputeInParallel = original.ComputeInParallel;
+      this.IndexInParentOptimizerList = original.IndexInParentOptimizerList;
+      this.CollectChildJobs = original.CollectChildJobs;
+      this.RegisterEvents();
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new OptimizerJob(this, cloner);
+    }
+    public object Clone() {
+      return Clone(new Cloner());
+    }
     [StorableHook(HookType.AfterDeserialization)]
     protected virtual void AfterDeserialization() {
@@ -267,5 +282,5 @@
     protected virtual void OnDescriptionChanged() {
       var handler = DescriptionChanged;
-      if(handler != null) handler(this, EventArgs.Empty);
+      if (handler != null) handler(this, EventArgs.Empty);
     }
     public event EventHandler ItemImageChanged;
@@ -307,28 +322,4 @@
     public Version ItemVersion {
       get { return optimizer.ItemVersion; }
-    }
-
-    #endregion
-
-    #region IDeepCloneable Members
-
-    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;
-    }
-
-    #endregion
-
-    #region ICloneable Members
-
-    public object Clone() {
-      return Clone(new Cloner());
     }
 
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/Properties/Settings.Designer.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/Properties/Settings.Designer.cs	(revision 4754)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/Properties/Settings.Designer.cs	(revision 4755)
@@ -26,5 +26,5 @@
         [global::System.Configuration.UserScopedSettingAttribute()]
         [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-        [global::System.Configuration.DefaultSettingValueAttribute("MyGroup")]
+        [global::System.Configuration.DefaultSettingValueAttribute("HEAL")]
         public string ResourceIds {
             get {
@@ -38,17 +38,5 @@
         [global::System.Configuration.UserScopedSettingAttribute()]
         [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-        [global::System.Configuration.DefaultSettingValueAttribute("localhost")]
-        public string HiveServerIp {
-            get {
-                return ((string)(this["HiveServerIp"]));
-            }
-            set {
-                this["HiveServerIp"] = value;
-            }
-        }
-        
-        [global::System.Configuration.UserScopedSettingAttribute()]
-        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-        [global::System.Configuration.DefaultSettingValueAttribute("cneumueller")]
+        [global::System.Configuration.DefaultSettingValueAttribute("cneumuel")]
         public string HiveUsername {
             get {
@@ -62,5 +50,5 @@
         [global::System.Configuration.UserScopedSettingAttribute()]
         [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-        [global::System.Configuration.DefaultSettingValueAttribute("cneumueller")]
+        [global::System.Configuration.DefaultSettingValueAttribute("")]
         public string HivePassword {
             get {
@@ -71,16 +59,4 @@
             }
         }
-        
-        [global::System.Configuration.UserScopedSettingAttribute()]
-        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-        [global::System.Configuration.DefaultSettingValueAttribute("9000")]
-        public string HiveServerPort {
-            get {
-                return ((string)(this["HiveServerPort"]));
-            }
-            set {
-                this["HiveServerPort"] = value;
-            }
-        }
     }
 }
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/Properties/Settings.settings
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/Properties/Settings.settings	(revision 4754)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/Properties/Settings.settings	(revision 4755)
@@ -4,17 +4,11 @@
   <Settings>
     <Setting Name="ResourceIds" Type="System.String" Scope="User">
-      <Value Profile="(Default)">MyGroup</Value>
-    </Setting>
-    <Setting Name="HiveServerIp" Type="System.String" Scope="User">
-      <Value Profile="(Default)">localhost</Value>
+      <Value Profile="(Default)">HEAL</Value>
     </Setting>
     <Setting Name="HiveUsername" Type="System.String" Scope="User">
-      <Value Profile="(Default)">cneumueller</Value>
+      <Value Profile="(Default)">cneumuel</Value>
     </Setting>
     <Setting Name="HivePassword" Type="System.String" Scope="User">
-      <Value Profile="(Default)">cneumueller</Value>
-    </Setting>
-    <Setting Name="HiveServerPort" Type="System.String" Scope="User">
-      <Value Profile="(Default)">9000</Value>
+      <Value Profile="(Default)" />
     </Setting>
   </Settings>
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/ServiceLocator.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/ServiceLocator.cs	(revision 4754)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/ServiceLocator.cs	(revision 4755)
@@ -45,10 +45,8 @@
     internal 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;
@@ -59,5 +57,5 @@
       get {
         if (clientFacadePool == null) {
-          clientFacadePool = new WcfServicePool<IClientFacade>(Settings.Default.HiveServerIp, Settings.Default.HiveUsername, Settings.Default.HivePassword, "ClientHttpEndpoint");
+          clientFacadePool = new WcfServicePool<IClientFacade>(Settings.Default.HiveUsername, Settings.Default.HivePassword, "ClientHttpEndpoint");
         }
         return clientFacadePool;
@@ -68,5 +66,5 @@
       get {
         if (streamedClientFacadePool == null) {
-          streamedClientFacadePool = new WcfServicePool<IClientFacade>(Settings.Default.HiveServerIp, Settings.Default.HiveUsername, Settings.Default.HivePassword, "ClientTcpStreamedEndpoint");
+          streamedClientFacadePool = new WcfServicePool<IClientFacade>(Settings.Default.HiveUsername, Settings.Default.HivePassword, "ClientTcpStreamedEndpoint");
         }
         return streamedClientFacadePool;
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/app.config
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/app.config	(revision 4754)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/app.config	(revision 4755)
@@ -9,17 +9,11 @@
     <HeuristicLab.Hive.Experiment.Properties.Settings>
       <setting name="ResourceIds" serializeAs="String">
-        <value>MyGroup</value>
-      </setting>
-      <setting name="HiveServerIp" serializeAs="String">
-        <value>localhost</value>
+        <value>HEAL</value>
       </setting>
       <setting name="HiveUsername" serializeAs="String">
-        <value>cneumueller</value>
+        <value>cneumuel</value>
       </setting>
       <setting name="HivePassword" serializeAs="String">
-        <value>cneumueller</value>
-      </setting>
-      <setting name="HiveServerPort" serializeAs="String">
-        <value>9000</value>
+        <value />
       </setting>
     </HeuristicLab.Hive.Experiment.Properties.Settings>
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/Facades/ClientFacade.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/Facades/ClientFacade.cs	(revision 4754)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/Facades/ClientFacade.cs	(revision 4755)
@@ -42,5 +42,5 @@
 
     [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
-    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Client)]
+    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.User)]
     public ResponseObject<JobDto> AddJob(SerializedJob job) {
       using (contextFactory.GetContext()) {
@@ -50,5 +50,5 @@
 
     [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
-    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Client)]
+    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.User)]
     public ResponseObject<JobDto> AddJobWithGroupStrings(SerializedJob job, IEnumerable<string> resources) {
       using (contextFactory.GetContext()) {
@@ -58,5 +58,5 @@
 
     [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
-    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Client)]
+    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.User)]
     public Response RequestSnapshot(Guid jobId) {
       using (contextFactory.GetContext()) {
@@ -67,5 +67,5 @@
 
     [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
-    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Client)]
+    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.User)]
     public ResponseObject<SerializedJob> GetLastSerializedResult(Guid jobId) {
       using (contextFactory.GetContext(false)) {
@@ -76,5 +76,5 @@
 
     [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
-    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Client)]
+    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.User)]
     public ResponseObject<SerializedJob> GetSnapshotResult(Guid jobId) {
       using (contextFactory.GetContext(false)) {
@@ -85,5 +85,5 @@
 
     [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
-    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Client)]
+    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.User)]
     public ResponseObject<JobDto> GetJobById(Guid jobId) {
       using (contextFactory.GetContext(false)) {
@@ -94,5 +94,5 @@
 
     [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
-    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Client)]
+    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.User)]
     public Response AbortJob(Guid jobId) {
       using (contextFactory.GetContext()) {
@@ -103,5 +103,5 @@
 
     [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
-    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Client)]
+    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.User)]
     public ResponseObject<JobResultList> GetJobResults(IEnumerable<Guid> jobIds) {
       using (contextFactory.GetContext(false)) {
@@ -112,5 +112,5 @@
 
     [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
-    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Client)]
+    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.User)]
     public ResponseObject<JobResultList> GetChildJobResults(Guid? parentJobId, bool recursive, bool includeParent) {
       using (contextFactory.GetContext(false)) {
@@ -124,5 +124,5 @@
 
     [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
-    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Client)]
+    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.User)]
     public ResponseObject<HiveExperimentDtoList> GetHiveExperiments() {
       using (contextFactory.GetContext(false)) {
@@ -132,5 +132,5 @@
 
     [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
-    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Client)]
+    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.User)]
     public ResponseObject<HiveExperimentDto> UpdateHiveExperiment(HiveExperimentDto hiveExperimentDto) {
       using (contextFactory.GetContext()) {
@@ -145,5 +145,5 @@
 
     [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
-    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Client)]
+    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.User)]
     public Response DeleteHiveExperiment(Guid hiveExperimentId) {
       using (contextFactory.GetContext()) {
@@ -157,5 +157,5 @@
 
     [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
-    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Client)]
+    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.User)]
     public ResponseObject<JobDto> AddChildJob(Guid parentJobId, SerializedJob serializedJob) {
       using (contextFactory.GetContext()) {
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HiveWeb/App_Code/HiveServerModule.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HiveWeb/App_Code/HiveServerModule.cs	(revision 4754)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HiveWeb/App_Code/HiveServerModule.cs	(revision 4755)
@@ -24,5 +24,5 @@
     public void Dispose() {
       lock (locker) {
-        lifecycleManager.Stop();
+        if(lifecycleManager != null) lifecycleManager.Stop();
       }
     }
