Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive.New/HeuristicLab.Clients.Hive/3.3/Exceptions/ServiceClientFactoryException.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive.New/HeuristicLab.Clients.Hive/3.3/Exceptions/ServiceClientFactoryException.cs	(revision 4796)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive.New/HeuristicLab.Clients.Hive/3.3/Exceptions/ServiceClientFactoryException.cs	(revision 4796)
@@ -0,0 +1,28 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+
+namespace HeuristicLab.Clients.Hive {
+  public class ServiceClientFactoryException : Exception {
+    public ServiceClientFactoryException(string message) : base(message) { }
+  }
+}
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive.New/HeuristicLab.Clients.Hive/3.3/HeuristicLab.Clients.Hive-3.3.csproj
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive.New/HeuristicLab.Clients.Hive/3.3/HeuristicLab.Clients.Hive-3.3.csproj	(revision 4795)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive.New/HeuristicLab.Clients.Hive/3.3/HeuristicLab.Clients.Hive-3.3.csproj	(revision 4796)
@@ -88,5 +88,5 @@
     <Compile Include="PersistenceUtil.cs" />
     <Compile Include="ServiceClients\ServiceClientFactory.cs" />
-    <Compile Include="ServiceClients\ServiceClientFactoryException.cs" />
+    <Compile Include="Exceptions\ServiceClientFactoryException.cs" />
     <Compile Include="ServiceLocator.cs" />
     <Compile Include="Properties\Settings.Designer.cs">
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive.New/HeuristicLab.Clients.Hive/3.3/HiveExperiment/HiveClient.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive.New/HeuristicLab.Clients.Hive/3.3/HiveExperiment/HiveClient.cs	(revision 4795)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive.New/HeuristicLab.Clients.Hive/3.3/HiveExperiment/HiveClient.cs	(revision 4796)
@@ -31,4 +31,5 @@
   using DT = HeuristicLab.Services.Hive.Common.DataTransfer;
   using HeuristicLab.Common;
+  using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 
   [Item("Hive Client", "Connects to Hive and lists all submitted experiments by the current user.")]
@@ -67,4 +68,13 @@
     }
 
+    public HiveClient() { }
+    protected HiveClient(HiveClient original, Cloner cloner)
+      : base(original, cloner) {
+      this.hiveExperiments = cloner.Clone(original.hiveExperiments);
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new HiveClient(this, cloner);
+    }
+
     private void RegisterHiveExperimentsEvent() {
       if (hiveExperiments != null) {
@@ -77,14 +87,4 @@
         hiveExperiments.ItemsRemoved -= new CollectionItemsChangedEventHandler<IndexedItem<HiveExperimentClient>>(hiveExperiments_ItemsRemoved);
       }
-    }
-
-    public HiveClient() {
-      
-    }
-
-    public override IDeepCloneable Clone(Cloner cloner) {
-      HiveClient clone = (HiveClient)base.Clone(cloner);
-      clone.hiveExperiments = (ItemList<HiveExperimentClient>)cloner.Clone(this.hiveExperiments);
-      return clone;
     }
 
@@ -135,5 +135,5 @@
       if (handler != null) handler(this, EventArgs.Empty);
     }
-    
+
     void hiveExperiments_ItemsRemoved(object sender, Collections.CollectionItemsChangedEventArgs<Collections.IndexedItem<HiveExperimentClient>> e) {
       if (!currentlyUpdating) {
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive.New/HeuristicLab.Clients.Hive/3.3/HiveExperiment/HiveExperimentClient.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive.New/HeuristicLab.Clients.Hive/3.3/HiveExperiment/HiveExperimentClient.cs	(revision 4795)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive.New/HeuristicLab.Clients.Hive/3.3/HiveExperiment/HiveExperimentClient.cs	(revision 4796)
@@ -113,4 +113,5 @@
     private JobResultPoller jobResultPoller;
 
+
     public HiveExperimentClient()
       : base(itemName, itemDescription) {
@@ -120,9 +121,21 @@
       InitTimer();
     }
-
     public HiveExperimentClient(DT.HiveExperiment hiveExperimentDto)
       : this() {
       UpdateFromDto(hiveExperimentDto);
     }
+    protected HiveExperimentClient(HiveExperimentClient original, Cloner cloner)
+      : base(original, cloner) {
+      this.resourceIds = original.resourceIds;
+      this.executionState = original.executionState;
+      this.executionTime = original.executionTime;
+      this.log = cloner.Clone(original.log);
+      this.lastUpdateTime = original.lastUpdateTime;
+      this.rootJobId = original.rootJobId;
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new HiveExperimentClient(this, cloner);
+    }
+
 
     public void UpdateFromDto(DT.HiveExperiment hiveExperimentDto) {
@@ -142,16 +155,4 @@
         RootJobId = this.rootJobId
       };
-    }
-
-    public override IDeepCloneable Clone(Cloner cloner) {
-      LogMessage("I am beeing cloned");
-      HiveExperimentClient clone = (HiveExperimentClient)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;
     }
 
@@ -417,5 +418,5 @@
       }
       if (HiveJob != null) {
-        jobResultPoller = new JobResultPoller(HiveJob, ApplicationConstants.RESULT_POLLING_INTERVAL);
+        jobResultPoller = new JobResultPoller(HiveJob, ApplicationConstants.ResultPollingInterval);
         RegisterResultPollingEvents();
       }
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive.New/HeuristicLab.Clients.Hive/3.3/HiveExperiment/HiveJobClient.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive.New/HeuristicLab.Clients.Hive/3.3/HiveExperiment/HiveJobClient.cs	(revision 4795)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive.New/HeuristicLab.Clients.Hive/3.3/HiveExperiment/HiveJobClient.cs	(revision 4796)
@@ -33,5 +33,5 @@
 
 namespace HeuristicLab.Clients.Hive {
-  [StorableClass]
+
   public class HiveJob : Item {
     private static object locker = new object();
@@ -53,5 +53,4 @@
     }
 
-    [Storable]
     private Job job;
     public Job Job {
@@ -67,5 +66,4 @@
     }
 
-    [Storable]
     private OptimizerJob optimizerJob;
     public OptimizerJob OptimizerJob {
@@ -87,5 +85,4 @@
     }
 
-    [Storable]
     private ItemList<HiveJob> childHiveJobs;
     public ReadOnlyItemList<HiveJob> ChildHiveJobs {
@@ -93,5 +90,4 @@
     }
 
-    [Storable]
     private bool isFinishedOptimizerDownloaded;
     public bool IsFinishedOptimizerDownloaded {
@@ -105,5 +101,4 @@
     }
 
-    [Storable]
     private bool syncJobsWithOptimizers = true;
 
@@ -138,5 +133,5 @@
     public HiveJob(IOptimizer optimizer)
       : this() {
-        this.OptimizerJob = new OptimizerJob(optimizer);
+      this.OptimizerJob = new OptimizerJob(optimizer);
     }
 
@@ -147,4 +142,13 @@
       this.OptimizerJob = PersistenceUtil.Deserialize<OptimizerJob>(serializedJob.Data);
       this.syncJobsWithOptimizers = true;
+    }
+
+    protected HiveJob(HiveJob original, Cloner cloner)
+      : base(original, cloner) {
+      this.Job = cloner.Clone(original.job);
+      this.OptimizerJob = cloner.Clone(original.OptimizerJob);
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new HiveJob(this, cloner);
     }
 
@@ -212,5 +216,5 @@
       }
     }
-        
+
     void batchRun_AlgorithmChanged(object sender, EventArgs e) {
       if (syncJobsWithOptimizers) {
@@ -484,12 +488,4 @@
     }
 
-    public override IDeepCloneable Clone(Cloner cloner) {
-      LogMessage("I am beeing cloned");
-      HiveJob clone = (HiveJob)base.Clone(cloner);
-      clone.job = (Job)cloner.Clone(this.job);
-      clone.optimizerJob = (OptimizerJob)cloner.Clone(this.optimizerJob);
-      return clone;
-    }
-
     /// <summary>
     /// Returns a list of HiveJobs including this and all its child-jobs recursively
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive.New/HeuristicLab.Clients.Hive/3.3/Jobs/OptimizerJob.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive.New/HeuristicLab.Clients.Hive/3.3/Jobs/OptimizerJob.cs	(revision 4795)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive.New/HeuristicLab.Clients.Hive/3.3/Jobs/OptimizerJob.cs	(revision 4796)
@@ -29,6 +29,7 @@
 
 namespace HeuristicLab.Clients.Hive.Jobs {
+  [Item("Optimizer Job", "Represents Job which executes a IOptimizer object.")]
   [StorableClass]
-  public class OptimizerJob : IJob {
+  public class OptimizerJob : DeepCloneable, IJob {
     [Storable]
     protected IOptimizer optimizer;
@@ -70,5 +71,4 @@
     }
 
-
     [Storable]
     private bool collectChildJobs;
@@ -81,5 +81,4 @@
       this.log = new Log();
     }
-
     public OptimizerJob(IOptimizer optimizer)
       : this() {
@@ -93,4 +92,18 @@
         this.ComputeInParallel = false;
       }
+    }
+    [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);
     }
 
@@ -310,28 +323,4 @@
     #endregion
 
-    #region IDeepCloneable Members
-
-    public 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());
-    }
-
-    #endregion
-
     /// <summary>
     /// Gets the string representation of the current instance in the format: <c>Name: [null|Value]</c>.
Index: anches/HeuristicLab.Hive/sources/HeuristicLab.Hive.New/HeuristicLab.Clients.Hive/3.3/ServiceClients/ServiceClientFactoryException.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive.New/HeuristicLab.Clients.Hive/3.3/ServiceClients/ServiceClientFactoryException.cs	(revision 4795)
+++ 	(revision )
@@ -1,28 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System;
-
-namespace HeuristicLab.Clients.Hive {
-  public class ServiceClientFactoryException : Exception {
-    public ServiceClientFactoryException(string message) : base(message) { }
-  }
-}
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive.New/HeuristicLab.Services.Hive.Common/3.3/ApplicationConstants.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive.New/HeuristicLab.Services.Hive.Common/3.3/ApplicationConstants.cs	(revision 4795)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive.New/HeuristicLab.Services.Hive.Common/3.3/ApplicationConstants.cs	(revision 4796)
@@ -26,24 +26,24 @@
   public class ApplicationConstants {
 
-    public static System.Data.IsolationLevel ISOLATION_LEVEL = IsolationLevel.ReadUncommitted;
+    public static System.Data.IsolationLevel IsolationLevel = IsolationLevel.ReadUncommitted;
 
     /// <summary>
     /// ReadUncommitted to minimize deadlocks. 
     /// </summary>
-    public static System.Transactions.IsolationLevel ISOLATION_LEVEL_SCOPE = System.Transactions.IsolationLevel.ReadUncommitted;
+    public static System.Transactions.IsolationLevel IsolationLevelScope = System.Transactions.IsolationLevel.ReadUncommitted;
 
-    public static int HEARTBEAT_TIMEOUT = 120; // value in seconds
+    public static int HeartbeatTimeout = 120; // value in seconds
     
-    public static int JOB_TIME_TO_LIVE = 5;
+    public static int JobTimeToLive = 5;
 
     /// <summary>
     /// Interval in which the HL.HiveExperiment will poll results from server
     /// </summary>
-    public static TimeSpan RESULT_POLLING_INTERVAL = new TimeSpan(0, 0, 5);
+    public static TimeSpan ResultPollingInterval = new TimeSpan(0, 0, 5);
 
     /// <summary>
     /// Maximum number of jobs that the server should send/receive simultaniously
     /// </summary>
-    public static int MAX_JOB_TRANSFER_COUNT = 6;
+    public static int MaxJobTransferCount = 6;
   }
 }
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive.New/HeuristicLab.Services.Hive.Common/3.3/DataTransfer/Appointment.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive.New/HeuristicLab.Services.Hive.Common/3.3/DataTransfer/Appointment.cs	(revision 4795)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive.New/HeuristicLab.Services.Hive.Common/3.3/DataTransfer/Appointment.cs	(revision 4796)
@@ -40,13 +40,14 @@
     public Guid ResourceId { get; set; }
 
+    protected Appointment(Appointment 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) {
-      Appointment clone = (Appointment)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;
+      return new Appointment(this, cloner);
     }
   }
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive.New/HeuristicLab.Services.Hive.Common/3.3/DataTransfer/HiveExperiment.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive.New/HeuristicLab.Services.Hive.Common/3.3/DataTransfer/HiveExperiment.cs	(revision 4795)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive.New/HeuristicLab.Services.Hive.Common/3.3/DataTransfer/HiveExperiment.cs	(revision 4796)
@@ -25,5 +25,4 @@
 
 namespace HeuristicLab.Services.Hive.Common.DataTransfer {
-
   [DataContract]
   [Serializable]
@@ -34,14 +33,16 @@
     public Guid? RootJobId { get; set; }
 
+    public HiveExperiment() { }
+    protected HiveExperiment(HiveExperiment original, Cloner cloner) : base(original, cloner) {
+      this.RootJobId = original.RootJobId;
+      this.UserId = original.UserId;
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new HiveExperiment(this, cloner);
+    }
+
     public override string ToString() {
       return base.ToString() + "Name: " + Name + ", Description: " + Description;
     }
-    
-    public override IDeepCloneable Clone(Cloner cloner) {
-      var clone = (HiveExperiment)base.Clone(cloner);
-      clone.RootJobId = this.RootJobId;
-      clone.UserId = this.UserId;
-      return clone;
-    }
   }
 }
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive.New/HeuristicLab.Services.Hive.Common/3.3/DataTransfer/HiveItem.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive.New/HeuristicLab.Services.Hive.Common/3.3/DataTransfer/HiveItem.cs	(revision 4795)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive.New/HeuristicLab.Services.Hive.Common/3.3/DataTransfer/HiveItem.cs	(revision 4796)
@@ -5,4 +5,5 @@
 using System.Runtime.Serialization;
 using HeuristicLab.Common;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 
 namespace HeuristicLab.Services.Hive.Common.DataTransfer {
@@ -13,8 +14,7 @@
     public Guid Id { get; set; }
 
-    public virtual IDeepCloneable Clone(Cloner cloner) {
-      HiveItem clone = (HiveItem)base.Clone(cloner);
-      clone.Id = this.Id;
-      return clone;
+    public HiveItem() { }
+    protected HiveItem(HiveItem original, Cloner cloner) : base(original, cloner) {
+      this.Id = original.Id;
     }
   }
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive.New/HeuristicLab.Services.Hive.Common/3.3/DataTransfer/HiveItemBase.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive.New/HeuristicLab.Services.Hive.Common/3.3/DataTransfer/HiveItemBase.cs	(revision 4795)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive.New/HeuristicLab.Services.Hive.Common/3.3/DataTransfer/HiveItemBase.cs	(revision 4796)
@@ -5,18 +5,12 @@
 using HeuristicLab.Common;
 using System.Runtime.Serialization;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 
 namespace HeuristicLab.Services.Hive.Common.DataTransfer {
   [DataContract]
   [Serializable]
-  public class HiveItemBase : IDeepCloneable {
-    public virtual IDeepCloneable Clone(Cloner cloner) {
-      HiveItem clone = (HiveItem)Activator.CreateInstance(this.GetType(), true);
-      cloner.RegisterClonedObject(this, clone);
-      return clone;
-    }
-
-    public object Clone() {
-      return Clone(new Cloner());
-    }
+  public abstract class HiveItemBase : DeepCloneable {
+    protected HiveItemBase() { }
+    protected HiveItemBase(HiveItemBase original, Cloner cloner) : base(original, cloner) { }
   }
 }
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive.New/HeuristicLab.Services.Hive.Common/3.3/DataTransfer/HivePlugin.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive.New/HeuristicLab.Services.Hive.Common/3.3/DataTransfer/HivePlugin.cs	(revision 4795)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive.New/HeuristicLab.Services.Hive.Common/3.3/DataTransfer/HivePlugin.cs	(revision 4796)
@@ -35,9 +35,11 @@
     public bool Update { get; set; }
 
+    public HivePlugin() { }
+    protected HivePlugin(HivePlugin original, Cloner cloner) : base(original, cloner) {
+      this.Version = original.Version;
+      this.Update = original.Update;
+    }
     public override IDeepCloneable Clone(Cloner cloner) {
-      var clone = (HivePlugin)base.Clone(cloner);
-      clone.Version = this.Version;
-      clone.Update = this.Update;
-      return clone;
+      return new HivePlugin(this, cloner);
     }
   }
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive.New/HeuristicLab.Services.Hive.Common/3.3/DataTransfer/HivePluginData.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive.New/HeuristicLab.Services.Hive.Common/3.3/DataTransfer/HivePluginData.cs	(revision 4795)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive.New/HeuristicLab.Services.Hive.Common/3.3/DataTransfer/HivePluginData.cs	(revision 4796)
@@ -35,9 +35,10 @@
       Name = name;
     }
-
+    public HivePluginData() { }
+    protected HivePluginData(HivePluginData original, Cloner cloner) : base(original, cloner) {
+      if (original.Data != null) this.Data = new byte[original.Data.Length]; Array.Copy(original.Data, this.Data, original.Data.Length);
+    }
     public override IDeepCloneable Clone(Cloner cloner) {
-      var clone = (HivePluginData)base.Clone(cloner);
-      if (this.Data != null) clone.Data = new byte[this.Data.Length]; Array.Copy(this.Data, clone.Data, this.Data.Length);
-      return clone;
+      return new HivePluginData(this, cloner);
     }
   }
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive.New/HeuristicLab.Services.Hive.Common/3.3/DataTransfer/Job.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive.New/HeuristicLab.Services.Hive.Common/3.3/DataTransfer/Job.cs	(revision 4795)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive.New/HeuristicLab.Services.Hive.Common/3.3/DataTransfer/Job.cs	(revision 4796)
@@ -41,20 +41,18 @@
     public Guid? ProjectId { get; set; }
 
-    public override string ToString() {
-      return base.ToString() + "State: " + JobState + ", [SlaveId : " + SlaveId + " ] , DateCreated: " + DateCreated + ", DateCalculated: " + DateCalculated +
-        "Priority: " + Priority + ", CoresNeeded: " + CoresNeeded;
+    public Job() { }
+    protected Job(Job original, Cloner cloner) : base(original, cloner) {
+      this.UserId = original.UserId;
+      this.Priority = original.Priority;
+      this.CoresNeeded = original.CoresNeeded;
+      this.MemoryNeeded = original.MemoryNeeded;
+      this.ProjectId = original.ProjectId;
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new Job(this, cloner);
     }
 
-    public Job() {
-    }
-
-    public override IDeepCloneable Clone(Cloner cloner) {
-      var clone = (Job)base.Clone(cloner);
-      clone.UserId = this.UserId;
-      clone.Priority = this.Priority;
-      clone.CoresNeeded = this.CoresNeeded;
-      clone.MemoryNeeded = this.MemoryNeeded;
-      clone.ProjectId = this.ProjectId;
-      return clone;
+    public override string ToString() {
+      return string.Format("State: {0}, SlaveId: {1}, DateCreated: {2}, DateCalculated: {3}, CoresNeeded: {4}, MemoryNeeded: {5}", JobState, SlaveId, DateCreated, DateCalculated, CoresNeeded, MemoryNeeded);
     }
   }
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive.New/HeuristicLab.Services.Hive.Common/3.3/DataTransfer/JobData.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive.New/HeuristicLab.Services.Hive.Common/3.3/DataTransfer/JobData.cs	(revision 4795)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive.New/HeuristicLab.Services.Hive.Common/3.3/DataTransfer/JobData.cs	(revision 4796)
@@ -34,8 +34,10 @@
     public byte[] Data { get; set; }
 
+    public JobData() { }
+    protected JobData(JobData original, Cloner cloner) : base(original, cloner) {
+      if (original.Data != null) this.Data = new byte[original.Data.Length]; Array.Copy(original.Data, this.Data, original.Data.Length);
+    }
     public override IDeepCloneable Clone(Cloner cloner) {
-      var clone = (JobData)base.Clone(cloner);
-      if (this.Data != null) clone.Data = new byte[this.Data.Length]; Array.Copy(this.Data, clone.Data, this.Data.Length);
-      return clone;
+      return new JobData(this, cloner);
     }
   }
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive.New/HeuristicLab.Services.Hive.Common/3.3/DataTransfer/LightweightJob.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive.New/HeuristicLab.Services.Hive.Common/3.3/DataTransfer/LightweightJob.cs	(revision 4795)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive.New/HeuristicLab.Services.Hive.Common/3.3/DataTransfer/LightweightJob.cs	(revision 4796)
@@ -48,5 +48,4 @@
       JobState = DataTransfer.JobState.Offline;
     }
-
     public LightweightJob(Job job) {
       this.SlaveId = job.SlaveId;
@@ -59,16 +58,16 @@
       this.ParentJobId = job.ParentJobId;
     }
-
+    protected LightweightJob(LightweightJob original, Cloner cloner) : base(original, cloner) {
+      this.SlaveId = original.SlaveId;
+      this.JobState = original.JobState;
+      this.ExecutionTime = original.ExecutionTime;
+      this.Exception = original.Exception;
+      this.DateCreated = original.DateCreated;
+      this.DateCalculated = original.DateCalculated;
+      this.DateFinished = original.DateFinished;
+      this.ParentJobId = original.ParentJobId;
+    }
     public override IDeepCloneable Clone(Cloner cloner) {
-      var clone = (LightweightJob)base.Clone(cloner);
-      clone.SlaveId = this.SlaveId;
-      clone.JobState = this.JobState;
-      clone.ExecutionTime = this.ExecutionTime;
-      clone.Exception = this.Exception;
-      clone.DateCreated = this.DateCreated;
-      clone.DateCalculated = this.DateCalculated;
-      clone.DateFinished = this.DateFinished;
-      clone.ParentJobId = this.ParentJobId;
-      return clone;
+      return new LightweightJob(this, cloner);
     }
   }
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive.New/HeuristicLab.Services.Hive.Common/3.3/DataTransfer/NamedHiveItem.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive.New/HeuristicLab.Services.Hive.Common/3.3/DataTransfer/NamedHiveItem.cs	(revision 4795)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive.New/HeuristicLab.Services.Hive.Common/3.3/DataTransfer/NamedHiveItem.cs	(revision 4796)
@@ -14,9 +14,8 @@
     public string Description { get; set; }
 
-    public override IDeepCloneable Clone(Cloner cloner) {
-      var clone = (NamedHiveItem)base.Clone(cloner);
-      clone.Name = this.Name;
-      clone.Description = this.Description;
-      return clone;
+    protected NamedHiveItem() { }
+    protected NamedHiveItem(NamedHiveItem original, Cloner cloner) : base(original, cloner) {
+      this.Name = original.Name;
+      this.Description = original.Description;
     }
   }
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive.New/HeuristicLab.Services.Hive.Common/3.3/DataTransfer/Project.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive.New/HeuristicLab.Services.Hive.Common/3.3/DataTransfer/Project.cs	(revision 4795)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive.New/HeuristicLab.Services.Hive.Common/3.3/DataTransfer/Project.cs	(revision 4796)
@@ -22,4 +22,5 @@
 using System;
 using System.Runtime.Serialization;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Services.Hive.Common.DataTransfer {
@@ -27,4 +28,10 @@
   [Serializable]
   public class Project : NamedHiveItem {
+
+    public Project() { }
+    protected Project(Project original, Cloner cloner) : base(original, cloner) { }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new Project(this, cloner);
+    }
   }
 }
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive.New/HeuristicLab.Services.Hive.Common/3.3/DataTransfer/Resource.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive.New/HeuristicLab.Services.Hive.Common/3.3/DataTransfer/Resource.cs	(revision 4795)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive.New/HeuristicLab.Services.Hive.Common/3.3/DataTransfer/Resource.cs	(revision 4796)
@@ -29,4 +29,9 @@
   public class Resource : NamedHiveItem {
 
+    public Resource() { }
+    protected Resource(Resource original, Cloner cloner) : base(original, cloner) { }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new Resource(this, cloner);
+    }
   }
 }
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive.New/HeuristicLab.Services.Hive.Common/3.3/DataTransfer/Slave.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive.New/HeuristicLab.Services.Hive.Common/3.3/DataTransfer/Slave.cs	(revision 4795)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive.New/HeuristicLab.Services.Hive.Common/3.3/DataTransfer/Slave.cs	(revision 4796)
@@ -50,21 +50,21 @@
       SlaveState = DataTransfer.SlaveState.Idle;
     }
+    protected Slave(Slave original, Cloner cloner) : base(original, cloner) {
+      this.Cores = original.Cores;
+      this.FreeCores = original.FreeCores;
+      this.CpuSpeed = original.CpuSpeed;
+      this.Memory = original.Memory;
+      this.FreeMemory = original.FreeMemory;
+      this.SlaveState = original.SlaveState;
+      this.CalendarSyncState = original.CalendarSyncState;
+      this.SlaveConfigId = original.SlaveConfigId;
+      this.IsAllowedToCalculate = original.IsAllowedToCalculate;
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new Slave(this, cloner);
+    }
 
     public override string ToString() {
-      return base.ToString() + ", NrOfCores: " + Cores + ", NrOfFreeCores " + FreeCores + ", State: " + SlaveState;
-    }
-
-    public override IDeepCloneable Clone(Cloner cloner) {
-      var clone = (Slave)base.Clone(cloner);
-      clone.Cores = this.Cores;
-      clone.FreeCores = this.FreeCores;
-      clone.CpuSpeed = this.CpuSpeed;
-      clone.Memory = this.Memory;
-      clone.FreeMemory = this.FreeMemory;
-      clone.SlaveState = this.SlaveState;
-      clone.CalendarSyncState = this.CalendarSyncState;
-      clone.SlaveConfigId = this.SlaveConfigId;
-      clone.IsAllowedToCalculate = this.IsAllowedToCalculate;
-      return clone;
+      return string.Format("Cores: {0}, FreeCores: {1}", Cores, FreeCores);
     }
   }
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive.New/HeuristicLab.Services.Hive.Common/3.3/DataTransfer/SlaveConfig.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive.New/HeuristicLab.Services.Hive.Common/3.3/DataTransfer/SlaveConfig.cs	(revision 4795)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive.New/HeuristicLab.Services.Hive.Common/3.3/DataTransfer/SlaveConfig.cs	(revision 4796)
@@ -33,9 +33,11 @@
     public int? HeartBeatIntervall { get; set; }
 
+    public SlaveConfig() { }
+    protected SlaveConfig(SlaveConfig original, Cloner cloner) : base(original, cloner) {
+      this.UpDownTimeCalendar = original.UpDownTimeCalendar;
+      this.HeartBeatIntervall = original.HeartBeatIntervall;
+    }
     public override IDeepCloneable Clone(Cloner cloner) {
-      var clone = (SlaveConfig)base.Clone(cloner);
-      clone.UpDownTimeCalendar = this.UpDownTimeCalendar;
-      clone.HeartBeatIntervall = this.HeartBeatIntervall;
-      return clone;
+      return new SlaveConfig(this, cloner);
     }
   }
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive.New/HeuristicLab.Services.Hive.Common/3.3/DataTransfer/SlaveGroup.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive.New/HeuristicLab.Services.Hive.Common/3.3/DataTransfer/SlaveGroup.cs	(revision 4795)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive.New/HeuristicLab.Services.Hive.Common/3.3/DataTransfer/SlaveGroup.cs	(revision 4796)
@@ -37,10 +37,10 @@
       ChildResourcesIds = new List<Guid>();
     }
-
+    protected SlaveGroup(SlaveGroup original, Cloner cloner) : base(original, cloner) {
+      this.ChildResourcesIds = new List<Guid>(original.ChildResourcesIds);
+      this.ParentResourcesIds = new List<Guid>(original.ParentResourcesIds);
+    }
     public override IDeepCloneable Clone(Cloner cloner) {
-      var clone = (SlaveGroup)base.Clone(cloner);
-      clone.ChildResourcesIds = new List<Guid>(this.ChildResourcesIds);
-      clone.ParentResourcesIds = new List<Guid>(this.ParentResourcesIds);
-      return clone;
+      return new SlaveGroup(this, cloner);
     }
   }
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive.New/HeuristicLab.Services.Hive.Common/3.3/DataTransfer/UpTimeStatistics.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive.New/HeuristicLab.Services.Hive.Common/3.3/DataTransfer/UpTimeStatistics.cs	(revision 4795)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive.New/HeuristicLab.Services.Hive.Common/3.3/DataTransfer/UpTimeStatistics.cs	(revision 4796)
@@ -34,10 +34,12 @@
     public DateTime Logout { get; set; }
 
+    public UpTimeStatistics() { }
+    protected UpTimeStatistics(UpTimeStatistics original, Cloner cloner) : base(original, cloner) {
+      this.SlaveId = original.SlaveId;
+      this.Login = original.Login;
+      this.Logout = original.Logout;
+    }
     public override IDeepCloneable Clone(Cloner cloner) {
-      var clone = (UpTimeStatistics)base.Clone(cloner);
-      clone.SlaveId = this.SlaveId;
-      clone.Login = this.Login;
-      clone.Logout = this.Logout;
-      return clone;
+      return new UpTimeStatistics(this, cloner);
     }
   }
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive.New/HeuristicLab.Services.Hive.Common/3.3/MessageContainer.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive.New/HeuristicLab.Services.Hive.Common/3.3/MessageContainer.cs	(revision 4795)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive.New/HeuristicLab.Services.Hive.Common/3.3/MessageContainer.cs	(revision 4796)
@@ -31,5 +31,5 @@
   [StorableClass]
   [Serializable]
-  public class MessageContainer : IDeepCloneable {
+  public class MessageContainer : DeepCloneable {
 
     public enum MessageType {
@@ -60,24 +60,19 @@
     public Guid JobId { get; set; }
 
+    protected MessageContainer() { }
     public MessageContainer(MessageType message) {
       Message = message;
       JobId = Guid.Empty;
     }
-
     public MessageContainer(MessageType message, Guid jobId) {
       Message = message;
       JobId = 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;
+    protected MessageContainer(MessageContainer original, Cloner cloner) : base(original, cloner) {
+      this.Message = original.Message;
+      this.JobId = original.JobId;
     }
-
-    public object Clone() {
-      return Clone(new Cloner());
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new MessageContainer(this, cloner);
     }
   }
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive.New/HeuristicLab.Services.Hive.DataAccess/3.3/HeuristicLab.Services.Hive.DataAccess-3.3.csproj
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive.New/HeuristicLab.Services.Hive.DataAccess/3.3/HeuristicLab.Services.Hive.DataAccess-3.3.csproj	(revision 4795)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive.New/HeuristicLab.Services.Hive.DataAccess/3.3/HeuristicLab.Services.Hive.DataAccess-3.3.csproj	(revision 4796)
@@ -72,5 +72,4 @@
       <DependentUpon>HiveDataContext.dbml</DependentUpon>
     </Compile>
-    <Compile Include="Interfaces\IContextFactory.cs" />
     <Compile Include="Interfaces\IHiveDao.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
Index: anches/HeuristicLab.Hive/sources/HeuristicLab.Hive.New/HeuristicLab.Services.Hive.DataAccess/3.3/Interfaces/IContextFactory.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive.New/HeuristicLab.Services.Hive.DataAccess/3.3/Interfaces/IContextFactory.cs	(revision 4795)
+++ 	(revision )
@@ -1,44 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System;
-using System.Data.Linq;
-
-namespace HeuristicLab.Services.Hive.DataAccess {
-  public interface IContextFactory<T> where T : DataContext {
-    /// <summary>
-    /// Uses transaction by default.
-    /// The caller of this Method is resposible for disposing the Context!
-    /// </summary>
-    /// <returns></returns>
-    IDisposable GetContext();
-
-    IDisposable GetContext(bool withTransaction);
-
-    T CurrentContext { get; }
-
-    void RollbackTransaction();
-
-    void RemoveContext();
-
-    void RemoveAndCompleteTransaction();
-  }
-}
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive.New/HeuristicLab.Services.Hive.DataAccess/3.3/TransactionManager.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive.New/HeuristicLab.Services.Hive.DataAccess/3.3/TransactionManager.cs	(revision 4795)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive.New/HeuristicLab.Services.Hive.DataAccess/3.3/TransactionManager.cs	(revision 4796)
@@ -10,5 +10,5 @@
   public class TransactionManager {
     public Disposable<TransactionScope> OpenTransaction() {
-      TransactionScope transaction = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions { IsolationLevel = ApplicationConstants.ISOLATION_LEVEL_SCOPE });
+      TransactionScope transaction = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions { IsolationLevel = ApplicationConstants.IsolationLevelScope });
       var disposable = new Disposable<TransactionScope>(transaction);
       disposable.Disposing += disposable_Disposing;
