Index: branches/OKB/HeuristicLab.Clients.OKB-3.3/OKBClient.cs
===================================================================
--- branches/OKB/HeuristicLab.Clients.OKB-3.3/OKBClient.cs	(revision 4558)
+++ branches/OKB/HeuristicLab.Clients.OKB-3.3/OKBClient.cs	(revision 4559)
@@ -27,4 +27,5 @@
 using HeuristicLab.Common;
 using HeuristicLab.Core;
+using HeuristicLab.Optimization;
 using HeuristicLab.PluginInfrastructure;
 
@@ -157,4 +158,7 @@
       }
     }
+    public bool Store(long algorithmId, long probleId, Run run) {
+      return true;
+    }
     #endregion
 
Index: branches/OKB/HeuristicLab.Clients.OKB-3.3/OKBExperiment.cs
===================================================================
--- branches/OKB/HeuristicLab.Clients.OKB-3.3/OKBExperiment.cs	(revision 4558)
+++ branches/OKB/HeuristicLab.Clients.OKB-3.3/OKBExperiment.cs	(revision 4559)
@@ -277,4 +277,5 @@
         Algorithm.Started += new EventHandler(algorithm_Started);
         Algorithm.Stopped += new EventHandler(algorithm_Stopped);
+        Algorithm.Runs.ItemsAdded += new Collections.CollectionItemsChangedEventHandler<IRun>(Runs_ItemsAdded);
       }
     }
@@ -289,4 +290,5 @@
         Algorithm.Started -= new EventHandler(algorithm_Started);
         Algorithm.Stopped -= new EventHandler(algorithm_Stopped);
+        Algorithm.Runs.ItemsAdded -= new Collections.CollectionItemsChangedEventHandler<IRun>(Runs_ItemsAdded);
       }
     }
@@ -314,4 +316,13 @@
     private void algorithm_Stopped(object sender, EventArgs e) {
       OnStopped();
+    }
+    private void Runs_ItemsAdded(object sender, Collections.CollectionItemsChangedEventArgs<IRun> e) {
+      try {
+        foreach (Run run in e.Items)
+          OKBClient.Instance.Store(AlgorithmId, ProblemId, run);
+      }
+      catch (Exception ex) {
+        OnExceptionOccurred(ex);
+      }
     }
     #endregion
Index: branches/OKB/HeuristicLab.Services.OKB.DataTransfer/3.3/AlgorithmParameter.cs
===================================================================
--- branches/OKB/HeuristicLab.Services.OKB.DataTransfer/3.3/AlgorithmParameter.cs	(revision 4559)
+++ branches/OKB/HeuristicLab.Services.OKB.DataTransfer/3.3/AlgorithmParameter.cs	(revision 4559)
@@ -0,0 +1,34 @@
+﻿#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.Runtime.Serialization;
+
+namespace HeuristicLab.Services.OKB.DataTransfer {
+  [DataContract]
+  public class AlgorithmParameter : NamedOKBItem {
+    [DataMember]
+    public string Alias { get; set; }
+    [DataMember]
+    public long AlgorithmId { get; set; }
+    [DataMember]
+    public long DataTypeId { get; set; }
+  }
+}
Index: branches/OKB/HeuristicLab.Services.OKB.DataTransfer/3.3/Experiment.cs
===================================================================
--- branches/OKB/HeuristicLab.Services.OKB.DataTransfer/3.3/Experiment.cs	(revision 4559)
+++ branches/OKB/HeuristicLab.Services.OKB.DataTransfer/3.3/Experiment.cs	(revision 4559)
@@ -0,0 +1,32 @@
+﻿#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.Runtime.Serialization;
+
+namespace HeuristicLab.Services.OKB.DataTransfer {
+  [DataContract]
+  public class Experiment : OKBItem {
+    [DataMember]
+    public long AlgorithmId { get; set; }
+    [DataMember]
+    public long ProblemId { get; set; }
+  }
+}
Index: branches/OKB/HeuristicLab.Services.OKB.DataTransfer/3.3/HeuristicLab.Services.OKB.DataTransfer-3.3.csproj
===================================================================
--- branches/OKB/HeuristicLab.Services.OKB.DataTransfer/3.3/HeuristicLab.Services.OKB.DataTransfer-3.3.csproj	(revision 4558)
+++ branches/OKB/HeuristicLab.Services.OKB.DataTransfer/3.3/HeuristicLab.Services.OKB.DataTransfer-3.3.csproj	(revision 4559)
@@ -51,4 +51,9 @@
     <Compile Include="Algorithm.cs" />
     <Compile Include="AlgorithmData.cs" />
+    <Compile Include="AlgorithmParameter.cs" />
+    <Compile Include="Run.cs" />
+    <Compile Include="Experiment.cs" />
+    <Compile Include="Result.cs" />
+    <Compile Include="ProblemParameter.cs" />
     <Compile Include="ProblemData.cs" />
     <Compile Include="Problem.cs" />
Index: branches/OKB/HeuristicLab.Services.OKB.DataTransfer/3.3/ProblemParameter.cs
===================================================================
--- branches/OKB/HeuristicLab.Services.OKB.DataTransfer/3.3/ProblemParameter.cs	(revision 4559)
+++ branches/OKB/HeuristicLab.Services.OKB.DataTransfer/3.3/ProblemParameter.cs	(revision 4559)
@@ -0,0 +1,34 @@
+﻿#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.Runtime.Serialization;
+
+namespace HeuristicLab.Services.OKB.DataTransfer {
+  [DataContract]
+  public class ProblemParameter : NamedOKBItem {
+    [DataMember]
+    public string Alias { get; set; }
+    [DataMember]
+    public long ProblemId { get; set; }
+    [DataMember]
+    public long DataTypeId { get; set; }
+  }
+}
Index: branches/OKB/HeuristicLab.Services.OKB.DataTransfer/3.3/Result.cs
===================================================================
--- branches/OKB/HeuristicLab.Services.OKB.DataTransfer/3.3/Result.cs	(revision 4559)
+++ branches/OKB/HeuristicLab.Services.OKB.DataTransfer/3.3/Result.cs	(revision 4559)
@@ -0,0 +1,34 @@
+﻿#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.Runtime.Serialization;
+
+namespace HeuristicLab.Services.OKB.DataTransfer {
+  [DataContract]
+  public class Result : NamedOKBItem {
+    [DataMember]
+    public string Alias { get; set; }
+    [DataMember]
+    public long AlgorithmId { get; set; }
+    [DataMember]
+    public long DataTypeId { get; set; }
+  }
+}
Index: branches/OKB/HeuristicLab.Services.OKB.DataTransfer/3.3/Run.cs
===================================================================
--- branches/OKB/HeuristicLab.Services.OKB.DataTransfer/3.3/Run.cs	(revision 4559)
+++ branches/OKB/HeuristicLab.Services.OKB.DataTransfer/3.3/Run.cs	(revision 4559)
@@ -0,0 +1,39 @@
+﻿#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.Runtime.Serialization;
+
+namespace HeuristicLab.Services.OKB.DataTransfer {
+  [DataContract]
+  public class Run : OKBItem {
+    [DataMember]
+    public int RandomSeed { get; set; }
+    [DataMember]
+    public DateTime? FinishedDate { get; set; }
+    [DataMember]
+    public long ExperimentId { get; set; }
+    [DataMember]
+    public Guid UserId { get; set; }
+    [DataMember]
+    public Guid ClientId { get; set; }
+  }
+}
Index: branches/OKB/HeuristicLab.Services.OKB/3.3/Convert.cs
===================================================================
--- branches/OKB/HeuristicLab.Services.OKB/3.3/Convert.cs	(revision 4558)
+++ branches/OKB/HeuristicLab.Services.OKB/3.3/Convert.cs	(revision 4559)
@@ -101,4 +101,19 @@
     #endregion
 
+    #region AlgorithmParameter
+    public static DT.AlgorithmParameter ToDto(DA.AlgorithmParameter source) {
+      if (source == null) return null;
+      return new DT.AlgorithmParameter { Id = source.Id, Name = source.Name, Description = source.Description, Alias = source.Alias, AlgorithmId = source.AlgorithmId, DataTypeId = source.DataTypeId };
+    }
+    public static DA.AlgorithmParameter ToEntity(DT.AlgorithmParameter source) {
+      if (source == null) return null;
+      return new DA.AlgorithmParameter { Id = source.Id, Name = source.Name, Description = source.Description, Alias = source.Alias, AlgorithmId = source.AlgorithmId, DataTypeId = source.DataTypeId };
+    }
+    public static void ToEntity(DT.AlgorithmParameter source, DA.AlgorithmParameter target) {
+      if ((source != null) && (target != null))
+        target.Id = source.Id; target.Name = source.Name; target.Description = source.Description; target.Alias = source.Alias; target.AlgorithmId = source.AlgorithmId; target.DataTypeId = source.DataTypeId;
+    }
+    #endregion
+
     #region ProblemClass
     public static DT.ProblemClass ToDto(DA.ProblemClass source) {
@@ -116,5 +131,5 @@
     #endregion
 
-    #region Algorithm
+    #region Problem
     public static DT.Problem ToDto(DA.Problem source) {
       if (source == null) return null;
@@ -145,4 +160,65 @@
     }
     #endregion
+
+    #region ProblemParameter
+    public static DT.ProblemParameter ToDto(DA.ProblemParameter source) {
+      if (source == null) return null;
+      return new DT.ProblemParameter { Id = source.Id, Name = source.Name, Description = source.Description, Alias = source.Alias, ProblemId = source.ProblemId, DataTypeId = source.DataTypeId };
+    }
+    public static DA.ProblemParameter ToEntity(DT.ProblemParameter source) {
+      if (source == null) return null;
+      return new DA.ProblemParameter { Id = source.Id, Name = source.Name, Description = source.Description, Alias = source.Alias, ProblemId = source.ProblemId, DataTypeId = source.DataTypeId };
+    }
+    public static void ToEntity(DT.ProblemParameter source, DA.ProblemParameter target) {
+      if ((source != null) && (target != null))
+        target.Id = source.Id; target.Name = source.Name; target.Description = source.Description; target.Alias = source.Alias; target.ProblemId = source.ProblemId; target.DataTypeId = source.DataTypeId;
+    }
+    #endregion
+
+    #region Result
+    public static DT.Result ToDto(DA.Result source) {
+      if (source == null) return null;
+      return new DT.Result { Id = source.Id, Name = source.Name, Description = source.Description, Alias = source.Alias, AlgorithmId = source.AlgorithmId, DataTypeId = source.DataTypeId };
+    }
+    public static DA.Result ToEntity(DT.Result source) {
+      if (source == null) return null;
+      return new DA.Result { Id = source.Id, Name = source.Name, Description = source.Description, Alias = source.Alias, AlgorithmId = source.AlgorithmId, DataTypeId = source.DataTypeId };
+    }
+    public static void ToEntity(DT.Result source, DA.Result target) {
+      if ((source != null) && (target != null))
+        target.Id = source.Id; target.Name = source.Name; target.Description = source.Description; target.Alias = source.Alias; target.AlgorithmId = source.AlgorithmId; target.DataTypeId = source.DataTypeId;
+    }
+    #endregion
+
+    #region Experiment
+    public static DT.Experiment ToDto(DA.Experiment source) {
+      if (source == null) return null;
+      return new DT.Experiment { Id = source.Id, AlgorithmId = source.AlgorithmId, ProblemId = source.ProblemId };
+    }
+    public static DA.Experiment ToEntity(DT.Experiment source) {
+      if (source == null) return null;
+      return new DA.Experiment { Id = source.Id, AlgorithmId = source.AlgorithmId, ProblemId = source.ProblemId };
+    }
+    public static void ToEntity(DT.Experiment source, DA.Experiment target) {
+      if ((source != null) && (target != null))
+        target.Id = source.Id; target.AlgorithmId = source.AlgorithmId; target.ProblemId = source.ProblemId;
+    }
+    #endregion
+
+    #region Run
+    public static DT.Run ToDto(DA.Run source) {
+      if (source == null) return null;
+      return new DT.Run { Id = source.Id, RandomSeed = source.RandomSeed, FinishedDate = source.FinishedDate, ExperimentId = source.ExperimentId, UserId = source.UserId, ClientId = source.ClientId };
+    }
+    public static DA.Run ToEntity(DT.Run source) {
+      if (source == null) return null;
+      return new DA.Run { Id = source.Id, RandomSeed = source.RandomSeed, FinishedDate = source.FinishedDate, ExperimentId = source.ExperimentId, UserId = source.UserId, ClientId = source.ClientId };
+    }
+    public static void ToEntity(DT.Run source, DA.Run target) {
+      if ((source != null) && (target != null))
+        target.Id = source.Id; target.RandomSeed = source.RandomSeed; target.FinishedDate = source.FinishedDate; target.ExperimentId = source.ExperimentId; target.UserId = source.UserId; target.ClientId = source.ClientId;
+
+    }
+    #endregion
   }
 }
