Index: branches/OKB/HeuristicLab.Clients.OKB-3.3/ServiceClients/Algorithm.cs
===================================================================
--- branches/OKB/HeuristicLab.Clients.OKB-3.3/ServiceClients/Algorithm.cs	(revision 4591)
+++ branches/OKB/HeuristicLab.Clients.OKB-3.3/ServiceClients/Algorithm.cs	(revision 4918)
@@ -26,4 +26,9 @@
   [Item("Algorithm", "An OKB algorithm.")]
   public partial class Algorithm {
+    protected Algorithm(Algorithm original, Cloner cloner)
+      : base(original, cloner) {
+      PlatformId = original.PlatformId;
+      AlgorithmClassId = original.AlgorithmClassId;
+    }
     public Algorithm() {
       Name = "New Algorithm";
@@ -33,8 +38,5 @@
 
     public override IDeepCloneable Clone(Cloner cloner) {
-      Algorithm clone = (Algorithm)base.Clone(cloner);
-      clone.PlatformId = PlatformId;
-      clone.AlgorithmClassId = AlgorithmClassId;
-      return clone;
+      return new Algorithm(this, cloner);
     }
   }
Index: branches/OKB/HeuristicLab.Clients.OKB-3.3/ServiceClients/AlgorithmClass.cs
===================================================================
--- branches/OKB/HeuristicLab.Clients.OKB-3.3/ServiceClients/AlgorithmClass.cs	(revision 4591)
+++ branches/OKB/HeuristicLab.Clients.OKB-3.3/ServiceClients/AlgorithmClass.cs	(revision 4918)
@@ -20,4 +20,5 @@
 #endregion
 
+using HeuristicLab.Common;
 using HeuristicLab.Core;
 
@@ -25,7 +26,12 @@
   [Item("AlgorithmClass", "An OKB algorithm class.")]
   public partial class AlgorithmClass {
+    protected AlgorithmClass(AlgorithmClass original, Cloner cloner) : base(original, cloner) { }
     public AlgorithmClass() {
       Name = "New Algorithm Class";
     }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new AlgorithmClass(this, cloner);
+    }
   }
 }
Index: branches/OKB/HeuristicLab.Clients.OKB-3.3/ServiceClients/AlgorithmParameter.cs
===================================================================
--- branches/OKB/HeuristicLab.Clients.OKB-3.3/ServiceClients/AlgorithmParameter.cs	(revision 4591)
+++ branches/OKB/HeuristicLab.Clients.OKB-3.3/ServiceClients/AlgorithmParameter.cs	(revision 4918)
@@ -26,4 +26,10 @@
   [Item("AlgorithmParameter", "An OKB algorithm parameter.")]
   public partial class AlgorithmParameter {
+    protected AlgorithmParameter(AlgorithmParameter original, Cloner cloner)
+      : base(original, cloner) {
+      Alias = original.Alias;
+      AlgorithmId = original.AlgorithmId;
+      DataTypeId = original.DataTypeId;
+    }
     public AlgorithmParameter() {
       Name = "New AlgorithmParameter";
@@ -34,9 +40,5 @@
 
     public override IDeepCloneable Clone(Cloner cloner) {
-      AlgorithmParameter clone = (AlgorithmParameter)base.Clone(cloner);
-      clone.Alias = Alias;
-      clone.AlgorithmId = AlgorithmId;
-      clone.DataTypeId = DataTypeId;
-      return clone;
+      return new AlgorithmParameter(this, cloner);
     }
   }
Index: branches/OKB/HeuristicLab.Clients.OKB-3.3/ServiceClients/DataType.cs
===================================================================
--- branches/OKB/HeuristicLab.Clients.OKB-3.3/ServiceClients/DataType.cs	(revision 4591)
+++ branches/OKB/HeuristicLab.Clients.OKB-3.3/ServiceClients/DataType.cs	(revision 4918)
@@ -26,4 +26,10 @@
   [Item("DataType", "An OKB data type.")]
   public partial class DataType {
+    protected DataType(DataType original, Cloner cloner)
+      : base(original, cloner) {
+      Name = original.Name;
+      SqlName = original.SqlName;
+      PlatformId = original.PlatformId;
+    }
     public DataType() {
       Name = "New Data Type";
@@ -33,9 +39,5 @@
 
     public override IDeepCloneable Clone(Cloner cloner) {
-      DataType clone = (DataType)base.Clone(cloner);
-      clone.Name = Name;
-      clone.SqlName = SqlName;
-      clone.PlatformId = PlatformId;
-      return clone;
+      return new DataType(this, cloner);
     }
 
Index: branches/OKB/HeuristicLab.Clients.OKB-3.3/ServiceClients/NamedOKBItem.cs
===================================================================
--- branches/OKB/HeuristicLab.Clients.OKB-3.3/ServiceClients/NamedOKBItem.cs	(revision 4591)
+++ branches/OKB/HeuristicLab.Clients.OKB-3.3/ServiceClients/NamedOKBItem.cs	(revision 4918)
@@ -27,9 +27,16 @@
   [Item("NamedOKBItem", "Base class for all named OKB items.")]
   public partial class NamedOKBItem : INamedOKBItem {
+    protected NamedOKBItem(NamedOKBItem original, Cloner cloner)
+      : base(original, cloner) {
+      Name = original.Name;
+      Description = original.Description;
+    }
+    public NamedOKBItem() {
+      Name = "New Item";
+      Description = string.Empty;
+    }
+
     public override IDeepCloneable Clone(Cloner cloner) {
-      NamedOKBItem clone = (NamedOKBItem)base.Clone(cloner);
-      clone.Name = Name;
-      clone.Description = Description;
-      return clone;
+      return new NamedOKBItem(this, cloner);
     }
 
Index: branches/OKB/HeuristicLab.Clients.OKB-3.3/ServiceClients/OKBItem.cs
===================================================================
--- branches/OKB/HeuristicLab.Clients.OKB-3.3/ServiceClients/OKBItem.cs	(revision 4591)
+++ branches/OKB/HeuristicLab.Clients.OKB-3.3/ServiceClients/OKBItem.cs	(revision 4918)
@@ -62,4 +62,8 @@
     }
 
+    protected OKBItem(OKBItem original, Cloner cloner) {
+      cloner.RegisterClonedObject(original, this);
+      modified = true;
+    }
     protected OKBItem() {
       modified = true;
@@ -75,7 +79,5 @@
     }
     public virtual IDeepCloneable Clone(Cloner cloner) {
-      OKBItem clone = (OKBItem)Activator.CreateInstance(this.GetType(), true);
-      cloner.RegisterClonedObject(this, clone);
-      return clone;
+      return new OKBItem(this, cloner);
     }
 
Index: branches/OKB/HeuristicLab.Clients.OKB-3.3/ServiceClients/OKBServiceClient.cs
===================================================================
--- branches/OKB/HeuristicLab.Clients.OKB-3.3/ServiceClients/OKBServiceClient.cs	(revision 4591)
+++ branches/OKB/HeuristicLab.Clients.OKB-3.3/ServiceClients/OKBServiceClient.cs	(revision 4918)
@@ -56,4 +56,5 @@
 
     public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+
   }
 
@@ -561,4 +562,9 @@
   [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
   [System.Runtime.Serialization.DataContractAttribute(Name = "AlgorithmParameterValue", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataTransfer")]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.AlgorithmParameterFloatValue))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.AlgorithmParameterStringValue))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.AlgorithmParameterBlobValue))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.AlgorithmParameterIntValue))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.AlgorithmParameterBoolValue))]
   public partial class AlgorithmParameterValue : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
 
@@ -632,4 +638,9 @@
   [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
   [System.Runtime.Serialization.DataContractAttribute(Name = "ProblemParameterValue", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataTransfer")]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.ProblemParameterFloatValue))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.ProblemParameterIntValue))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.ProblemParameterBlobValue))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.ProblemParameterBoolValue))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.ProblemParameterStringValue))]
   public partial class ProblemParameterValue : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
 
@@ -702,5 +713,220 @@
   [System.Diagnostics.DebuggerStepThroughAttribute()]
   [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "AlgorithmParameterFloatValue", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataTransfer")]
+  public partial class AlgorithmParameterFloatValue : HeuristicLab.Clients.OKB.AlgorithmParameterValue {
+
+    private double ValueField;
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public double Value {
+      get {
+        return this.ValueField;
+      }
+      set {
+        if ((this.ValueField.Equals(value) != true)) {
+          this.ValueField = value;
+          this.RaisePropertyChanged("Value");
+        }
+      }
+    }
+  }
+
+  [System.Diagnostics.DebuggerStepThroughAttribute()]
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "AlgorithmParameterStringValue", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataTransfer")]
+  public partial class AlgorithmParameterStringValue : HeuristicLab.Clients.OKB.AlgorithmParameterValue {
+
+    private string ValueField;
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public string Value {
+      get {
+        return this.ValueField;
+      }
+      set {
+        if ((object.ReferenceEquals(this.ValueField, value) != true)) {
+          this.ValueField = value;
+          this.RaisePropertyChanged("Value");
+        }
+      }
+    }
+  }
+
+  [System.Diagnostics.DebuggerStepThroughAttribute()]
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "AlgorithmParameterBlobValue", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataTransfer")]
+  public partial class AlgorithmParameterBlobValue : HeuristicLab.Clients.OKB.AlgorithmParameterValue {
+
+    private byte[] ValueField;
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public byte[] Value {
+      get {
+        return this.ValueField;
+      }
+      set {
+        if ((object.ReferenceEquals(this.ValueField, value) != true)) {
+          this.ValueField = value;
+          this.RaisePropertyChanged("Value");
+        }
+      }
+    }
+  }
+
+  [System.Diagnostics.DebuggerStepThroughAttribute()]
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "AlgorithmParameterIntValue", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataTransfer")]
+  public partial class AlgorithmParameterIntValue : HeuristicLab.Clients.OKB.AlgorithmParameterValue {
+
+    private long ValueField;
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public long Value {
+      get {
+        return this.ValueField;
+      }
+      set {
+        if ((this.ValueField.Equals(value) != true)) {
+          this.ValueField = value;
+          this.RaisePropertyChanged("Value");
+        }
+      }
+    }
+  }
+
+  [System.Diagnostics.DebuggerStepThroughAttribute()]
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "AlgorithmParameterBoolValue", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataTransfer")]
+  public partial class AlgorithmParameterBoolValue : HeuristicLab.Clients.OKB.AlgorithmParameterValue {
+
+    private bool ValueField;
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public bool Value {
+      get {
+        return this.ValueField;
+      }
+      set {
+        if ((this.ValueField.Equals(value) != true)) {
+          this.ValueField = value;
+          this.RaisePropertyChanged("Value");
+        }
+      }
+    }
+  }
+
+  [System.Diagnostics.DebuggerStepThroughAttribute()]
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "ProblemParameterFloatValue", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataTransfer")]
+  public partial class ProblemParameterFloatValue : HeuristicLab.Clients.OKB.ProblemParameterValue {
+
+    private double ValueField;
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public double Value {
+      get {
+        return this.ValueField;
+      }
+      set {
+        if ((this.ValueField.Equals(value) != true)) {
+          this.ValueField = value;
+          this.RaisePropertyChanged("Value");
+        }
+      }
+    }
+  }
+
+  [System.Diagnostics.DebuggerStepThroughAttribute()]
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "ProblemParameterIntValue", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataTransfer")]
+  public partial class ProblemParameterIntValue : HeuristicLab.Clients.OKB.ProblemParameterValue {
+
+    private long ValueField;
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public long Value {
+      get {
+        return this.ValueField;
+      }
+      set {
+        if ((this.ValueField.Equals(value) != true)) {
+          this.ValueField = value;
+          this.RaisePropertyChanged("Value");
+        }
+      }
+    }
+  }
+
+  [System.Diagnostics.DebuggerStepThroughAttribute()]
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "ProblemParameterBlobValue", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataTransfer")]
+  public partial class ProblemParameterBlobValue : HeuristicLab.Clients.OKB.ProblemParameterValue {
+
+    private byte[] ValueField;
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public byte[] Value {
+      get {
+        return this.ValueField;
+      }
+      set {
+        if ((object.ReferenceEquals(this.ValueField, value) != true)) {
+          this.ValueField = value;
+          this.RaisePropertyChanged("Value");
+        }
+      }
+    }
+  }
+
+  [System.Diagnostics.DebuggerStepThroughAttribute()]
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "ProblemParameterBoolValue", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataTransfer")]
+  public partial class ProblemParameterBoolValue : HeuristicLab.Clients.OKB.ProblemParameterValue {
+
+    private bool ValueField;
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public bool Value {
+      get {
+        return this.ValueField;
+      }
+      set {
+        if ((this.ValueField.Equals(value) != true)) {
+          this.ValueField = value;
+          this.RaisePropertyChanged("Value");
+        }
+      }
+    }
+  }
+
+  [System.Diagnostics.DebuggerStepThroughAttribute()]
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "ProblemParameterStringValue", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataTransfer")]
+  public partial class ProblemParameterStringValue : HeuristicLab.Clients.OKB.ProblemParameterValue {
+
+    private string ValueField;
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public string Value {
+      get {
+        return this.ValueField;
+      }
+      set {
+        if ((object.ReferenceEquals(this.ValueField, value) != true)) {
+          this.ValueField = value;
+          this.RaisePropertyChanged("Value");
+        }
+      }
+    }
+  }
+
+  [System.Diagnostics.DebuggerStepThroughAttribute()]
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
   [System.Runtime.Serialization.DataContractAttribute(Name = "ResultValue", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataTransfer")]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.ResultBlobValue))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.ResultBoolValue))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.ResultStringValue))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.ResultIntValue))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.ResultFloatValue))]
   public partial class ResultValue : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
 
@@ -773,4 +999,109 @@
   [System.Diagnostics.DebuggerStepThroughAttribute()]
   [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "ResultBlobValue", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataTransfer")]
+  public partial class ResultBlobValue : HeuristicLab.Clients.OKB.ResultValue {
+
+    private byte[] ValueField;
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public byte[] Value {
+      get {
+        return this.ValueField;
+      }
+      set {
+        if ((object.ReferenceEquals(this.ValueField, value) != true)) {
+          this.ValueField = value;
+          this.RaisePropertyChanged("Value");
+        }
+      }
+    }
+  }
+
+  [System.Diagnostics.DebuggerStepThroughAttribute()]
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "ResultBoolValue", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataTransfer")]
+  public partial class ResultBoolValue : HeuristicLab.Clients.OKB.ResultValue {
+
+    private bool ValueField;
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public bool Value {
+      get {
+        return this.ValueField;
+      }
+      set {
+        if ((this.ValueField.Equals(value) != true)) {
+          this.ValueField = value;
+          this.RaisePropertyChanged("Value");
+        }
+      }
+    }
+  }
+
+  [System.Diagnostics.DebuggerStepThroughAttribute()]
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "ResultStringValue", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataTransfer")]
+  public partial class ResultStringValue : HeuristicLab.Clients.OKB.ResultValue {
+
+    private string ValueField;
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public string Value {
+      get {
+        return this.ValueField;
+      }
+      set {
+        if ((object.ReferenceEquals(this.ValueField, value) != true)) {
+          this.ValueField = value;
+          this.RaisePropertyChanged("Value");
+        }
+      }
+    }
+  }
+
+  [System.Diagnostics.DebuggerStepThroughAttribute()]
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "ResultIntValue", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataTransfer")]
+  public partial class ResultIntValue : HeuristicLab.Clients.OKB.ResultValue {
+
+    private long ValueField;
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public long Value {
+      get {
+        return this.ValueField;
+      }
+      set {
+        if ((this.ValueField.Equals(value) != true)) {
+          this.ValueField = value;
+          this.RaisePropertyChanged("Value");
+        }
+      }
+    }
+  }
+
+  [System.Diagnostics.DebuggerStepThroughAttribute()]
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "ResultFloatValue", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataTransfer")]
+  public partial class ResultFloatValue : HeuristicLab.Clients.OKB.ResultValue {
+
+    private double ValueField;
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public double Value {
+      get {
+        return this.ValueField;
+      }
+      set {
+        if ((this.ValueField.Equals(value) != true)) {
+          this.ValueField = value;
+          this.RaisePropertyChanged("Value");
+        }
+      }
+    }
+  }
+
+  [System.Diagnostics.DebuggerStepThroughAttribute()]
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
   [System.Runtime.Serialization.DataContractAttribute(Name = "ProblemData", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataTransfer")]
   public partial class ProblemData : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
Index: branches/OKB/HeuristicLab.Clients.OKB-3.3/ServiceClients/Platform.cs
===================================================================
--- branches/OKB/HeuristicLab.Clients.OKB-3.3/ServiceClients/Platform.cs	(revision 4591)
+++ branches/OKB/HeuristicLab.Clients.OKB-3.3/ServiceClients/Platform.cs	(revision 4918)
@@ -20,4 +20,5 @@
 #endregion
 
+using HeuristicLab.Common;
 using HeuristicLab.Core;
 
@@ -25,7 +26,12 @@
   [Item("Platform", "An OKB platform.")]
   public partial class Platform {
+    protected Platform(Platform original, Cloner cloner) : base(original, cloner) { }
     public Platform() {
       Name = "New Platform";
     }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new Platform(this, cloner);
+    }
   }
 }
Index: branches/OKB/HeuristicLab.Clients.OKB-3.3/ServiceClients/Problem.cs
===================================================================
--- branches/OKB/HeuristicLab.Clients.OKB-3.3/ServiceClients/Problem.cs	(revision 4591)
+++ branches/OKB/HeuristicLab.Clients.OKB-3.3/ServiceClients/Problem.cs	(revision 4918)
@@ -26,4 +26,9 @@
   [Item("Problem", "An OKB problem.")]
   public partial class Problem {
+    protected Problem(Problem original, Cloner cloner)
+      : base(original, cloner) {
+      PlatformId = original.PlatformId;
+      ProblemClassId = original.ProblemClassId;
+    }
     public Problem() {
       Name = "New Problem";
@@ -33,8 +38,5 @@
 
     public override IDeepCloneable Clone(Cloner cloner) {
-      Problem clone = (Problem)base.Clone(cloner);
-      clone.PlatformId = PlatformId;
-      clone.ProblemClassId = ProblemClassId;
-      return clone;
+      return new Problem(this, cloner);
     }
   }
Index: branches/OKB/HeuristicLab.Clients.OKB-3.3/ServiceClients/ProblemClass.cs
===================================================================
--- branches/OKB/HeuristicLab.Clients.OKB-3.3/ServiceClients/ProblemClass.cs	(revision 4591)
+++ branches/OKB/HeuristicLab.Clients.OKB-3.3/ServiceClients/ProblemClass.cs	(revision 4918)
@@ -20,4 +20,5 @@
 #endregion
 
+using HeuristicLab.Common;
 using HeuristicLab.Core;
 
@@ -25,7 +26,12 @@
   [Item("ProblemClass", "An OKB problem class.")]
   public partial class ProblemClass {
+    protected ProblemClass(ProblemClass original, Cloner cloner) : base(original, cloner) { }
     public ProblemClass() {
       Name = "New Problem Class";
     }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new ProblemClass(this, cloner);
+    }
   }
 }
Index: branches/OKB/HeuristicLab.Clients.OKB-3.3/ServiceClients/ProblemParameter.cs
===================================================================
--- branches/OKB/HeuristicLab.Clients.OKB-3.3/ServiceClients/ProblemParameter.cs	(revision 4591)
+++ branches/OKB/HeuristicLab.Clients.OKB-3.3/ServiceClients/ProblemParameter.cs	(revision 4918)
@@ -26,4 +26,10 @@
   [Item("ProblemParameter", "An OKB problem parameter.")]
   public partial class ProblemParameter {
+    protected ProblemParameter(ProblemParameter original, Cloner cloner)
+      : base(original, cloner) {
+      Alias = original.Alias;
+      ProblemId = original.ProblemId;
+      DataTypeId = original.DataTypeId;
+    }
     public ProblemParameter() {
       Name = "New ProblemParameter";
@@ -34,9 +40,5 @@
 
     public override IDeepCloneable Clone(Cloner cloner) {
-      ProblemParameter clone = (ProblemParameter)base.Clone(cloner);
-      clone.Alias = Alias;
-      clone.ProblemId = ProblemId;
-      clone.DataTypeId = DataTypeId;
-      return clone;
+      return new ProblemParameter(this, cloner);
     }
   }
Index: branches/OKB/HeuristicLab.Clients.OKB-3.3/ServiceClients/Result.cs
===================================================================
--- branches/OKB/HeuristicLab.Clients.OKB-3.3/ServiceClients/Result.cs	(revision 4591)
+++ branches/OKB/HeuristicLab.Clients.OKB-3.3/ServiceClients/Result.cs	(revision 4918)
@@ -26,4 +26,10 @@
   [Item("Result", "An OKB result.")]
   public partial class Result {
+    protected Result(Result original, Cloner cloner)
+      : base(original, cloner) {
+      Alias = original.Alias;
+      AlgorithmId = original.AlgorithmId;
+      DataTypeId = original.DataTypeId;
+    }
     public Result() {
       Name = "New Result";
@@ -34,9 +40,5 @@
 
     public override IDeepCloneable Clone(Cloner cloner) {
-      Result clone = (Result)base.Clone(cloner);
-      clone.Alias = Alias;
-      clone.AlgorithmId = AlgorithmId;
-      clone.DataTypeId = DataTypeId;
-      return clone;
+      return new Result(this, cloner);
     }
   }
