Index: branches/OKB/HeuristicLab.Clients.OKB-3.3/HeuristicLab.Clients.OKB-3.3.csproj
===================================================================
--- branches/OKB/HeuristicLab.Clients.OKB-3.3/HeuristicLab.Clients.OKB-3.3.csproj	(revision 4591)
+++ branches/OKB/HeuristicLab.Clients.OKB-3.3/HeuristicLab.Clients.OKB-3.3.csproj	(revision 4918)
@@ -39,28 +39,43 @@
   </PropertyGroup>
   <ItemGroup>
-    <Reference Include="HeuristicLab.Clients.Common-3.3">
-      <HintPath>..\..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Clients.Common-3.3.dll</HintPath>
-    </Reference>
-    <Reference Include="HeuristicLab.Collections-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL" />
-    <Reference Include="HeuristicLab.Common-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL" />
-    <Reference Include="HeuristicLab.Common.Resources-3.3, Version=3.2.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL" />
-    <Reference Include="HeuristicLab.Core-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL" />
-    <Reference Include="HeuristicLab.Core.Views-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL" />
-    <Reference Include="HeuristicLab.Data-3.3">
-      <HintPath>..\..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Data-3.3.dll</HintPath>
-    </Reference>
-    <Reference Include="HeuristicLab.MainForm-3.3">
-      <HintPath>..\..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.MainForm-3.3.dll</HintPath>
-    </Reference>
-    <Reference Include="HeuristicLab.MainForm.WindowsForms-3.3">
-      <HintPath>..\..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.MainForm.WindowsForms-3.3.dll</HintPath>
-    </Reference>
-    <Reference Include="HeuristicLab.Optimization-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL" />
-    <Reference Include="HeuristicLab.Optimizer-3.3">
-      <HintPath>..\..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Optimizer-3.3.dll</HintPath>
-    </Reference>
-    <Reference Include="HeuristicLab.Persistence-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL" />
-    <Reference Include="HeuristicLab.PluginInfrastructure-3.3">
-      <HintPath>..\..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.PluginInfrastructure-3.3.dll</HintPath>
+    <Reference Include="HeuristicLab.Clients.Common-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <HintPath>..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Clients.Common-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Collections-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <HintPath>..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Collections-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Common-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <HintPath>..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Common-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Common.Resources-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Common.Resources-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Core-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <HintPath>..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Core-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Core.Views-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <HintPath>..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Core.Views-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Data-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <HintPath>..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Data-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.MainForm-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <HintPath>..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.MainForm-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.MainForm.WindowsForms-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <HintPath>..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.MainForm.WindowsForms-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Optimization-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <HintPath>..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Optimization-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Optimizer-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <HintPath>..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Optimizer-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Persistence-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <HintPath>..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Persistence-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.PluginInfrastructure-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <HintPath>..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.PluginInfrastructure-3.3.dll</HintPath>
     </Reference>
     <Reference Include="System" />
Index: branches/OKB/HeuristicLab.Clients.OKB-3.3/OKBClient.cs
===================================================================
--- branches/OKB/HeuristicLab.Clients.OKB-3.3/OKBClient.cs	(revision 4591)
+++ branches/OKB/HeuristicLab.Clients.OKB-3.3/OKBClient.cs	(revision 4918)
@@ -373,6 +373,5 @@
             parameters.Add(p);
           }
-          AlgorithmParameterValue value = null;
-          // TODO
+          AlgorithmParameterValue value = CreateAlgorithmParameterValue(param.Value);
           value.AlgorithmParameterId = p.Id;
           value.DataTypeId = ConvertToDataType(param.Value.GetType()).Id;
@@ -383,22 +382,75 @@
       }
       return values;
+    }
+    private AlgorithmParameterValue CreateAlgorithmParameterValue(IItem item) {
+      if (item is BoolValue) {
+        AlgorithmParameterBoolValue value = new AlgorithmParameterBoolValue();
+        value.Value = ((BoolValue)item).Value;
+        return value;
+      } else if (item is DoubleValue) {
+        AlgorithmParameterFloatValue value = new AlgorithmParameterFloatValue();
+        value.Value = ((DoubleValue)item).Value;
+        return value;
+      } else if (item is IntValue) {
+        AlgorithmParameterIntValue value = new AlgorithmParameterIntValue();
+        value.Value = ((IntValue)item).Value;
+        return value;
+      } else if (item is StringValue) {
+        AlgorithmParameterStringValue value = new AlgorithmParameterStringValue();
+        value.Value = ((StringValue)item).Value;
+        return value;
+      } else {
+        AlgorithmParameterBlobValue value = new AlgorithmParameterBlobValue();
+        value.Value = null;
+        return value;
+      }
     }
     private List<ProblemParameterValue> CollectProblemParamterValues(long problemId, ItemCollection<ProblemParameter> parameters, IParameterizedItem item, string prefix) {
       List<ProblemParameterValue> values = new List<ProblemParameterValue>();
       foreach (IValueParameter param in item.Parameters.OfType<IValueParameter>()) {
-        if (param.GetsCollected && (param.Value != null) && (parameters.FirstOrDefault(x => x.Name == prefix + param.Name) == null)) {
-          ProblemParameter p = new ProblemParameter();
-          p.Name = prefix + param.Name;
-          p.Alias = prefix + param.Name;
-          p.Description = param.Description;
-          p.ProblemId = problemId;
-          p.DataTypeId = ConvertToDataType(param.DataType).Id;
-          p.Store();
-          parameters.Add(p);
-        }
+        if (param.GetsCollected && (param.Value != null)) {
+          ProblemParameter p = parameters.FirstOrDefault(x => x.Name == prefix + param.Name);
+          if (p == null) {
+            p = new ProblemParameter();
+            p.Name = prefix + param.Name;
+            p.Alias = prefix + param.Name;
+            p.Description = param.Description;
+            p.ProblemId = problemId;
+            p.DataTypeId = ConvertToDataType(param.DataType).Id;
+            p.Store();
+            parameters.Add(p);
+          }
+          ProblemParameterValue value = CreateProblemParameterValue(param.Value);
+          value.ProblemParameterId = p.Id;
+          value.DataTypeId = ConvertToDataType(param.Value.GetType()).Id;
+        }
+
         if (param.Value is IParameterizedItem)
           values.AddRange(CollectProblemParamterValues(problemId, parameters, (IParameterizedItem)param.Value, (string.IsNullOrEmpty(prefix) ? param.Name : prefix + param.Name) + "."));
       }
       return values;
+    }
+    private ProblemParameterValue CreateProblemParameterValue(IItem item) {
+      if (item is BoolValue) {
+        ProblemParameterBoolValue value = new ProblemParameterBoolValue();
+        value.Value = ((BoolValue)item).Value;
+        return value;
+      } else if (item is DoubleValue) {
+        ProblemParameterFloatValue value = new ProblemParameterFloatValue();
+        value.Value = ((DoubleValue)item).Value;
+        return value;
+      } else if (item is IntValue) {
+        ProblemParameterIntValue value = new ProblemParameterIntValue();
+        value.Value = ((IntValue)item).Value;
+        return value;
+      } else if (item is StringValue) {
+        ProblemParameterStringValue value = new ProblemParameterStringValue();
+        value.Value = ((StringValue)item).Value;
+        return value;
+      } else {
+        ProblemParameterBlobValue value = new ProblemParameterBlobValue();
+        value.Value = null;
+        return value;
+      }
     }
     private List<ResultValue> CollectResultValues(long algorithmId, ItemCollection<Result> results, IAlgorithm algorithm) {
@@ -418,4 +470,27 @@
       return values;
     }
+    private ResultValue CreateResiötValue(IItem item) {
+      if (item is BoolValue) {
+        ResultBoolValue value = new ResultBoolValue();
+        value.Value = ((BoolValue)item).Value;
+        return value;
+      } else if (item is DoubleValue) {
+        ResultFloatValue value = new ResultFloatValue();
+        value.Value = ((DoubleValue)item).Value;
+        return value;
+      } else if (item is IntValue) {
+        ResultIntValue value = new ResultIntValue();
+        value.Value = ((IntValue)item).Value;
+        return value;
+      } else if (item is StringValue) {
+        ResultStringValue value = new ResultStringValue();
+        value.Value = ((StringValue)item).Value;
+        return value;
+      } else {
+        ResultBlobValue value = new ResultBlobValue();
+        value.Value = null;
+        return value;
+      }
+    }
     #endregion
 
Index: branches/OKB/HeuristicLab.Clients.OKB-3.3/OKBExperiment.cs
===================================================================
--- branches/OKB/HeuristicLab.Clients.OKB-3.3/OKBExperiment.cs	(revision 4591)
+++ branches/OKB/HeuristicLab.Clients.OKB-3.3/OKBExperiment.cs	(revision 4918)
@@ -148,4 +148,14 @@
     #endregion
 
+    [StorableConstructor]
+    private OKBExperiment(bool deserializing) : base(deserializing) { }
+    private OKBExperiment(OKBExperiment original, Cloner cloner)
+      : base(original, cloner) {
+      algorithmId = original.algorithmId;
+      algorithm = cloner.Clone(original.algorithm);
+      problemId = original.problemId;
+      problem = cloner.Clone(original.problem);
+      RegisterAlgorithmEvents();
+    }
     public OKBExperiment()
       : base() {
@@ -153,10 +163,12 @@
       description = ItemDescription;
     }
-    [StorableConstructor]
-    private OKBExperiment(bool deserializing) : base(deserializing) { }
 
     [StorableHook(HookType.AfterDeserialization)]
-    private void Initialize() {
+    private void AfterDeserialization() {
       RegisterAlgorithmEvents();
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new OKBExperiment(this, cloner);
     }
 
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);
     }
   }
Index: branches/OKB/HeuristicLab.Clients.OKB-3.3/app.config
===================================================================
--- branches/OKB/HeuristicLab.Clients.OKB-3.3/app.config	(revision 4591)
+++ branches/OKB/HeuristicLab.Clients.OKB-3.3/app.config	(revision 4918)
@@ -10,5 +10,5 @@
                     messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"
                     allowCookies="false">
-                    <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
+                    <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="200000000"
                         maxBytesPerRead="4096" maxNameTableCharCount="16384" />
                     <reliableSession ordered="true" inactivityTimeout="00:10:00"
Index: branches/OKB/HeuristicLab.Services.OKB.DataTransfer/3.3/AlgorithmParameterValue.cs
===================================================================
--- branches/OKB/HeuristicLab.Services.OKB.DataTransfer/3.3/AlgorithmParameterValue.cs	(revision 4591)
+++ branches/OKB/HeuristicLab.Services.OKB.DataTransfer/3.3/AlgorithmParameterValue.cs	(revision 4918)
@@ -24,4 +24,9 @@
 namespace HeuristicLab.Services.OKB.DataTransfer {
   [DataContract]
+  [KnownType(typeof(AlgorithmParameterBlobValue))]
+  [KnownType(typeof(AlgorithmParameterBoolValue))]
+  [KnownType(typeof(AlgorithmParameterFloatValue))]
+  [KnownType(typeof(AlgorithmParameterIntValue))]
+  [KnownType(typeof(AlgorithmParameterStringValue))]
   public abstract class AlgorithmParameterValue {
     [DataMember]
Index: branches/OKB/HeuristicLab.Services.OKB.DataTransfer/3.3/ProblemParameterValue.cs
===================================================================
--- branches/OKB/HeuristicLab.Services.OKB.DataTransfer/3.3/ProblemParameterValue.cs	(revision 4591)
+++ branches/OKB/HeuristicLab.Services.OKB.DataTransfer/3.3/ProblemParameterValue.cs	(revision 4918)
@@ -24,4 +24,9 @@
 namespace HeuristicLab.Services.OKB.DataTransfer {
   [DataContract]
+  [KnownType(typeof(ProblemParameterBlobValue))]
+  [KnownType(typeof(ProblemParameterBoolValue))]
+  [KnownType(typeof(ProblemParameterFloatValue))]
+  [KnownType(typeof(ProblemParameterIntValue))]
+  [KnownType(typeof(ProblemParameterStringValue))]
   public abstract class ProblemParameterValue {
     [DataMember]
Index: branches/OKB/HeuristicLab.Services.OKB.DataTransfer/3.3/ResultValue.cs
===================================================================
--- branches/OKB/HeuristicLab.Services.OKB.DataTransfer/3.3/ResultValue.cs	(revision 4591)
+++ branches/OKB/HeuristicLab.Services.OKB.DataTransfer/3.3/ResultValue.cs	(revision 4918)
@@ -24,4 +24,9 @@
 namespace HeuristicLab.Services.OKB.DataTransfer {
   [DataContract]
+  [KnownType(typeof(ResultBlobValue))]
+  [KnownType(typeof(ResultBoolValue))]
+  [KnownType(typeof(ResultFloatValue))]
+  [KnownType(typeof(ResultIntValue))]
+  [KnownType(typeof(ResultStringValue))]
   public abstract class ResultValue {
     [DataMember]
