Index: /trunk/sources/HeuristicLab.Services.OKB/3.3/RunCreation/Convert.cs
===================================================================
--- /trunk/sources/HeuristicLab.Services.OKB/3.3/RunCreation/Convert.cs	(revision 13682)
+++ /trunk/sources/HeuristicLab.Services.OKB/3.3/RunCreation/Convert.cs	(revision 13683)
@@ -46,5 +46,6 @@
         ProblemId = source.ProblemId.Value,
         RunId = source.RunId,
-        Quality = source.Quality
+        Quality = source.Quality,
+        DataType = ToDto(source.DataType)
       };
     }
@@ -175,7 +176,7 @@
     }
 
-    private static DA.DataType ToEntity(DT.DataType source, DA.OKBDataContext okb) {
-      if (source == null) return null;
-      var entity = okb.DataTypes.Where(x => (x.Name == source.Name) && (x.TypeName == source.TypeName)).FirstOrDefault();
+    public static DA.DataType ToEntity(DT.DataType source, DA.OKBDataContext okb) {
+      if (source == null) return null;
+      var entity = okb.DataTypes.FirstOrDefault(x => (x.Name == source.Name) && (x.TypeName == source.TypeName));
       if (entity == null)
         entity = new DA.DataType() { Id = 0, Name = source.Name, TypeName = source.TypeName };
@@ -185,5 +186,5 @@
     private static DA.ValueName ToEntity(string name, DA.ValueNameCategory category, DA.ValueNameType type, DA.OKBDataContext okb) {
       if (string.IsNullOrEmpty(name)) return null;
-      var entity = okb.ValueNames.Where(x => (x.Name == name) && (x.Category == category) && (x.Type == type)).FirstOrDefault();
+      var entity = okb.ValueNames.FirstOrDefault(x => (x.Name == name) && (x.Category == category) && (x.Type == type));
       if (entity == null)
         entity = new DA.ValueName() { Id = 0, Name = name, Category = category, Type = type };
@@ -198,9 +199,9 @@
       }
 
-      var cachedBinaryData = binCache.Where(x => x.Hash.SequenceEqual(hash)).FirstOrDefault();
+      var cachedBinaryData = binCache.FirstOrDefault(x => x.Hash.SequenceEqual(hash));
       if (cachedBinaryData != null)
         return cachedBinaryData;
 
-      var entity = okb.BinaryDatas.Where(x => x.Hash.Equals(hash)).FirstOrDefault();
+      var entity = okb.BinaryDatas.FirstOrDefault(x => x.Hash.Equals(hash));
       if (entity == null) {
         entity = new DA.BinaryData() { Id = 0, Data = data, Hash = hash };
@@ -210,4 +211,26 @@
       return entity;
     }
+
+    public static DA.SingleObjectiveSolution ToEntity(DT.SingleObjectiveSolution source, byte[] data, DA.OKBDataContext okb) {
+      var sol = okb.SingleObjectiveSolutions.SingleOrDefault(x => x.Id == source.Id) ?? new DA.SingleObjectiveSolution() {
+        ProblemId = source.ProblemId,
+        RunId = source.RunId,
+        Quality = source.Quality
+      };
+      if (source.DataType != null) {
+        sol.DataType = ToEntity(source.DataType, okb);
+      }
+      if (data != null && data.Length > 0) {
+        byte[] hash;
+        using (var sha1 = SHA1.Create()) {
+          hash = sha1.ComputeHash(data);
+        }
+        sol.BinaryData = new DA.BinaryData() {
+          Data = data,
+          Hash = hash
+        };
+      }
+      return sol;
+    }
     #endregion
   }
Index: /trunk/sources/HeuristicLab.Services.OKB/3.3/RunCreation/DataTransfer/Solution.cs
===================================================================
--- /trunk/sources/HeuristicLab.Services.OKB/3.3/RunCreation/DataTransfer/Solution.cs	(revision 13682)
+++ /trunk/sources/HeuristicLab.Services.OKB/3.3/RunCreation/DataTransfer/Solution.cs	(revision 13683)
@@ -20,10 +20,5 @@
 #endregion
 
-using System;
-using System.Collections.Generic;
-using System.Linq;
 using System.Runtime.Serialization;
-using System.Text;
-using System.Threading.Tasks;
 
 namespace HeuristicLab.Services.OKB.RunCreation.DataTransfer {
@@ -37,4 +32,6 @@
     [DataMember]
     public long? RunId { get; set; }
+    [DataMember]
+    public DataType DataType { get; set; }
   }
 }
Index: /trunk/sources/HeuristicLab.Services.OKB/3.3/RunCreation/IRunCreationService.cs
===================================================================
--- /trunk/sources/HeuristicLab.Services.OKB/3.3/RunCreation/IRunCreationService.cs	(revision 13682)
+++ /trunk/sources/HeuristicLab.Services.OKB/3.3/RunCreation/IRunCreationService.cs	(revision 13683)
@@ -20,8 +20,8 @@
 #endregion
 
+using HeuristicLab.Services.OKB.RunCreation.DataTransfer;
 using System.Collections.Generic;
 using System.Net.Security;
 using System.ServiceModel;
-using HeuristicLab.Services.OKB.RunCreation.DataTransfer;
 
 namespace HeuristicLab.Services.OKB.RunCreation {
@@ -52,4 +52,8 @@
 
     [OperationContract]
+    [FaultContract(typeof(MissingProblem))]
+    void AddSolution(Solution solution, byte[] data);
+
+    [OperationContract]
     void AddRun(Run run);
 
Index: /trunk/sources/HeuristicLab.Services.OKB/3.3/RunCreation/RunCreationService.cs
===================================================================
--- /trunk/sources/HeuristicLab.Services.OKB/3.3/RunCreation/RunCreationService.cs	(revision 13682)
+++ /trunk/sources/HeuristicLab.Services.OKB/3.3/RunCreation/RunCreationService.cs	(revision 13683)
@@ -20,4 +20,6 @@
 #endregion
 
+using HeuristicLab.Services.Access;
+using HeuristicLab.Services.OKB.DataAccess;
 using System;
 using System.Collections.Generic;
@@ -25,6 +27,4 @@
 using System.Linq;
 using System.ServiceModel;
-using HeuristicLab.Services.Access;
-using HeuristicLab.Services.OKB.DataAccess;
 
 namespace HeuristicLab.Services.OKB.RunCreation {
@@ -165,4 +165,17 @@
             return null;
           }
+        }
+      }
+    }
+
+    public void AddSolution(DataTransfer.Solution solution, byte[] data) {
+      roleVerifier.AuthenticateForAnyRole(OKBRoles.OKBAdministrator, OKBRoles.OKBUser);
+
+      using (OKBDataContext okb = new OKBDataContext()) {
+        var soSolution = solution as DataTransfer.SingleObjectiveSolution;
+        if (soSolution != null) {
+          DataAccess.SingleObjectiveSolution entity = Convert.ToEntity(soSolution, data, okb);
+          okb.SingleObjectiveSolutions.InsertOnSubmit(entity);
+          okb.SubmitChanges();
         }
       }
