Index: /stable/HeuristicLab.Clients.OKB.Views/3.3/HeuristicLab.Clients.OKB.Views-3.3.csproj
===================================================================
--- /stable/HeuristicLab.Clients.OKB.Views/3.3/HeuristicLab.Clients.OKB.Views-3.3.csproj	(revision 15081)
+++ /stable/HeuristicLab.Clients.OKB.Views/3.3/HeuristicLab.Clients.OKB.Views-3.3.csproj	(revision 15082)
@@ -286,4 +286,10 @@
       <DependentUpon>OKBRunView.cs</DependentUpon>
     </Compile>
+    <Compile Include="RunCreation\Views\SingleObjectiveOKBSolutionView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="RunCreation\Views\SingleObjectiveOKBSolutionView.Designer.cs">
+      <DependentUpon>SingleObjectiveOKBSolutionView.cs</DependentUpon>
+    </Compile>
     <None Include="Plugin.cs.frame" />
     <None Include="Properties\AssemblyInfo.cs.frame" />
Index: /stable/HeuristicLab.Clients.OKB.Views/3.3/RunCreation/Views/OKBProblemView.Designer.cs
===================================================================
--- /stable/HeuristicLab.Clients.OKB.Views/3.3/RunCreation/Views/OKBProblemView.Designer.cs	(revision 15081)
+++ /stable/HeuristicLab.Clients.OKB.Views/3.3/RunCreation/Views/OKBProblemView.Designer.cs	(revision 15082)
@@ -52,13 +52,18 @@
       this.parametersTabPage = new System.Windows.Forms.TabPage();
       this.parameterCollectionView = new HeuristicLab.Core.Views.ParameterCollectionView();
+      this.solutionsTabPage = new System.Windows.Forms.TabPage();
       this.flaAnalysisTabPage = new System.Windows.Forms.TabPage();
+      this.flaSplitContainer = new System.Windows.Forms.SplitContainer();
       this.calculateButton = new System.Windows.Forms.Button();
-      this.flaSplitContainer = new System.Windows.Forms.SplitContainer();
       this.characteristicsMatrixView = new HeuristicLab.Data.Views.StringConvertibleMatrixView();
       this.uploadCharacteristicsButton = new System.Windows.Forms.Button();
       this.downloadCharacteristicsButton = new System.Windows.Forms.Button();
+      this.solutionsViewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
+      this.refreshSolutionsButton = new System.Windows.Forms.Button();
+      this.uploadSolutionsButton = new System.Windows.Forms.Button();
       ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
       this.tabControl.SuspendLayout();
       this.parametersTabPage.SuspendLayout();
+      this.solutionsTabPage.SuspendLayout();
       this.flaAnalysisTabPage.SuspendLayout();
       ((System.ComponentModel.ISupportInitialize)(this.flaSplitContainer)).BeginInit();
@@ -135,4 +140,5 @@
             | System.Windows.Forms.AnchorStyles.Right)));
       this.tabControl.Controls.Add(this.parametersTabPage);
+      this.tabControl.Controls.Add(this.solutionsTabPage);
       this.tabControl.Controls.Add(this.flaAnalysisTabPage);
       this.tabControl.Location = new System.Drawing.Point(6, 53);
@@ -148,5 +154,5 @@
       this.parametersTabPage.Name = "parametersTabPage";
       this.parametersTabPage.Padding = new System.Windows.Forms.Padding(3);
-      this.parametersTabPage.Size = new System.Drawing.Size(692, 314);
+      this.parametersTabPage.Size = new System.Drawing.Size(728, 447);
       this.parametersTabPage.TabIndex = 0;
       this.parametersTabPage.Text = "Parameters";
@@ -163,6 +169,19 @@
       this.parameterCollectionView.ReadOnly = true;
       this.parameterCollectionView.ShowDetails = true;
-      this.parameterCollectionView.Size = new System.Drawing.Size(686, 308);
+      this.parameterCollectionView.Size = new System.Drawing.Size(722, 441);
       this.parameterCollectionView.TabIndex = 8;
+      // 
+      // solutionsTabPage
+      // 
+      this.solutionsTabPage.Controls.Add(this.uploadSolutionsButton);
+      this.solutionsTabPage.Controls.Add(this.refreshSolutionsButton);
+      this.solutionsTabPage.Controls.Add(this.solutionsViewHost);
+      this.solutionsTabPage.Location = new System.Drawing.Point(4, 22);
+      this.solutionsTabPage.Name = "solutionsTabPage";
+      this.solutionsTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.solutionsTabPage.Size = new System.Drawing.Size(728, 447);
+      this.solutionsTabPage.TabIndex = 3;
+      this.solutionsTabPage.Text = "Solutions";
+      this.solutionsTabPage.UseVisualStyleBackColor = true;
       // 
       // flaAnalysisTabPage
@@ -177,4 +196,24 @@
       this.flaAnalysisTabPage.UseVisualStyleBackColor = true;
       // 
+      // flaSplitContainer
+      // 
+      this.flaSplitContainer.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.flaSplitContainer.FixedPanel = System.Windows.Forms.FixedPanel.Panel2;
+      this.flaSplitContainer.Location = new System.Drawing.Point(3, 3);
+      this.flaSplitContainer.Name = "flaSplitContainer";
+      // 
+      // flaSplitContainer.Panel1
+      // 
+      this.flaSplitContainer.Panel1.Controls.Add(this.calculateButton);
+      // 
+      // flaSplitContainer.Panel2
+      // 
+      this.flaSplitContainer.Panel2.Controls.Add(this.characteristicsMatrixView);
+      this.flaSplitContainer.Panel2.Controls.Add(this.uploadCharacteristicsButton);
+      this.flaSplitContainer.Panel2.Controls.Add(this.downloadCharacteristicsButton);
+      this.flaSplitContainer.Size = new System.Drawing.Size(722, 441);
+      this.flaSplitContainer.SplitterDistance = 363;
+      this.flaSplitContainer.TabIndex = 7;
+      // 
       // calculateButton
       // 
@@ -186,24 +225,4 @@
       this.calculateButton.UseVisualStyleBackColor = true;
       this.calculateButton.Click += new System.EventHandler(this.calculateButton_Click);
-      // 
-      // flaSplitContainer
-      // 
-      this.flaSplitContainer.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.flaSplitContainer.FixedPanel = System.Windows.Forms.FixedPanel.Panel2;
-      this.flaSplitContainer.Location = new System.Drawing.Point(3, 3);
-      this.flaSplitContainer.Name = "flaSplitContainer";
-      // 
-      // flaSplitContainer.Panel1
-      // 
-      this.flaSplitContainer.Panel1.Controls.Add(this.calculateButton);
-      // 
-      // flaSplitContainer.Panel2
-      // 
-      this.flaSplitContainer.Panel2.Controls.Add(this.characteristicsMatrixView);
-      this.flaSplitContainer.Panel2.Controls.Add(this.uploadCharacteristicsButton);
-      this.flaSplitContainer.Panel2.Controls.Add(this.downloadCharacteristicsButton);
-      this.flaSplitContainer.Size = new System.Drawing.Size(722, 441);
-      this.flaSplitContainer.SplitterDistance = 363;
-      this.flaSplitContainer.TabIndex = 7;
       // 
       // characteristicsMatrixView
@@ -241,4 +260,40 @@
       this.downloadCharacteristicsButton.UseVisualStyleBackColor = true;
       this.downloadCharacteristicsButton.Click += new System.EventHandler(this.downloadCharacteristicsButton_Click);
+      // 
+      // solutionsViewHost
+      // 
+      this.solutionsViewHost.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
+            | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+      this.solutionsViewHost.Caption = "View";
+      this.solutionsViewHost.Content = null;
+      this.solutionsViewHost.Enabled = false;
+      this.solutionsViewHost.Location = new System.Drawing.Point(0, 35);
+      this.solutionsViewHost.Name = "solutionsViewHost";
+      this.solutionsViewHost.ReadOnly = false;
+      this.solutionsViewHost.Size = new System.Drawing.Size(728, 412);
+      this.solutionsViewHost.TabIndex = 0;
+      this.solutionsViewHost.ViewsLabelVisible = true;
+      this.solutionsViewHost.ViewType = null;
+      // 
+      // refreshSolutionsButton
+      // 
+      this.refreshSolutionsButton.Location = new System.Drawing.Point(6, 6);
+      this.refreshSolutionsButton.Name = "refreshSolutionsButton";
+      this.refreshSolutionsButton.Size = new System.Drawing.Size(26, 23);
+      this.refreshSolutionsButton.TabIndex = 1;
+      this.refreshSolutionsButton.Text = "Refresh";
+      this.refreshSolutionsButton.UseVisualStyleBackColor = true;
+      this.refreshSolutionsButton.Click += new System.EventHandler(this.refreshSolutionsButton_Click);
+      // 
+      // uploadSolutionsButton
+      // 
+      this.uploadSolutionsButton.Location = new System.Drawing.Point(38, 6);
+      this.uploadSolutionsButton.Name = "uploadSolutionsButton";
+      this.uploadSolutionsButton.Size = new System.Drawing.Size(26, 23);
+      this.uploadSolutionsButton.TabIndex = 1;
+      this.uploadSolutionsButton.Text = "Upload";
+      this.uploadSolutionsButton.UseVisualStyleBackColor = true;
+      this.uploadSolutionsButton.Click += new System.EventHandler(this.uploadSolutionsButton_Click);
       // 
       // OKBProblemView
@@ -264,4 +319,5 @@
       this.tabControl.ResumeLayout(false);
       this.parametersTabPage.ResumeLayout(false);
+      this.solutionsTabPage.ResumeLayout(false);
       this.flaAnalysisTabPage.ResumeLayout(false);
       this.flaSplitContainer.Panel1.ResumeLayout(false);
@@ -289,4 +345,8 @@
     private System.Windows.Forms.Button uploadCharacteristicsButton;
     private System.Windows.Forms.Button downloadCharacteristicsButton;
+    private System.Windows.Forms.TabPage solutionsTabPage;
+    private MainForm.WindowsForms.ViewHost solutionsViewHost;
+    private System.Windows.Forms.Button uploadSolutionsButton;
+    private System.Windows.Forms.Button refreshSolutionsButton;
 
 
Index: /stable/HeuristicLab.Clients.OKB.Views/3.3/RunCreation/Views/OKBProblemView.cs
===================================================================
--- /stable/HeuristicLab.Clients.OKB.Views/3.3/RunCreation/Views/OKBProblemView.cs	(revision 15081)
+++ /stable/HeuristicLab.Clients.OKB.Views/3.3/RunCreation/Views/OKBProblemView.cs	(revision 15082)
@@ -73,4 +73,8 @@
       uploadCharacteristicsButton.Text = string.Empty;
       uploadCharacteristicsButton.Image = VSImageLibrary.PublishToWeb;
+      refreshSolutionsButton.Text = string.Empty;
+      refreshSolutionsButton.Image = VSImageLibrary.Refresh;
+      uploadSolutionsButton.Text = string.Empty;
+      uploadSolutionsButton.Image = VSImageLibrary.PublishToWeb;
     }
 
@@ -93,4 +97,13 @@
       base.RegisterContentEvents();
       Content.ProblemChanged += new EventHandler(Content_ProblemChanged);
+      Content.Solutions.ItemsAdded += SolutionsOnChanged;
+      Content.Solutions.ItemsReplaced += SolutionsOnChanged;
+      Content.Solutions.ItemsRemoved += SolutionsOnChanged;
+      Content.Solutions.CollectionReset += SolutionsOnChanged;
+    }
+
+    private void SolutionsOnChanged(object sender, EventArgs e) {
+      if (InvokeRequired) { Invoke((Action<object, EventArgs>)SolutionsOnChanged, sender, e); return; }
+      SetEnabledStateOfControls();
     }
 
@@ -100,7 +113,9 @@
         problemComboBox.SelectedIndex = -1;
         parameterCollectionView.Content = null;
+        solutionsViewHost.Content = null;
       } else {
         problemComboBox.SelectedItem = RunCreationClient.Instance.Problems.FirstOrDefault(x => x.Id == Content.ProblemId);
         parameterCollectionView.Content = Content.Parameters;
+        solutionsViewHost.Content = Content.Solutions;
       }
       UpdateCharacteristicCalculators();
@@ -118,4 +133,6 @@
         && characteristicsMatrixView.Content != null && characteristicsMatrixView.Content.Rows > 0;
       calculateButton.Enabled = Content != null && Content.ProblemId != -1 && !Locked && !ReadOnly && calculatorList.CheckedItems.Any();
+      refreshSolutionsButton.Enabled = Content != null && !ReadOnly && !Locked && Content.ProblemId != -1;
+      uploadSolutionsButton.Enabled = Content != null && !ReadOnly && !Locked && Content.ProblemId != -1 && Content.Solutions.Any(x => x.SolutionId == -1);
     }
 
@@ -183,5 +200,5 @@
     }
     private void downloadCharacteristicsButton_Click(object sender, EventArgs e) {
-      var values = RunCreationClient.GetCharacteristicValues(Content.ProblemId).ToList();
+      var values = RunCreationClient.Instance.GetCharacteristicValues(Content.ProblemId).ToList();
       var content = new StringMatrix(values.Count, 3);
       for (var i = 0; i < values.Count; i++) {
@@ -204,5 +221,5 @@
       }
       try {
-        RunCreationClient.SetCharacteristicValues(Content.ProblemId, values);
+        RunCreationClient.Instance.SetCharacteristicValues(Content.ProblemId, values);
       } catch (Exception ex) { ErrorHandling.ShowErrorDialog(ex); }
     }
@@ -217,37 +234,40 @@
       }
       var matrix = (characteristicsMatrixView.Content as StringMatrix) ?? (new StringMatrix(results.Count, 3));
-      for (var i = 0; i < matrix.Rows; i++) {
-        Value r;
-        if (results.TryGetValue(matrix[i, 0], out r)) {
-          matrix[i, 1] = r.GetValue();
-          matrix[i, 2] = r.GetType().Name;
-          results.Remove(matrix[i, 0]);
+      try {
+        for (var i = 0; i < matrix.Rows; i++) {
+          Value r;
+          if (results.TryGetValue(matrix[i, 0], out r)) {
+            matrix[i, 1] = r.GetValue();
+            matrix[i, 2] = r.GetType().Name;
+            results.Remove(matrix[i, 0]);
+          }
         }
-      }
-      if (results.Count == 0) return;
-      var resultsList = results.ToList();
-      var counter = resultsList.Count - 1;
-      for (var i = 0; i < matrix.Rows; i++) {
-        if (string.IsNullOrEmpty(matrix[i, 0])) {
-          matrix[i, 0] = resultsList[counter].Key;
-          matrix[i, 1] = resultsList[counter].Value.GetValue();
-          matrix[i, 2] = resultsList[counter].Value.GetType().Name;
-          resultsList.RemoveAt(counter);
-          counter--;
-          if (counter < 0) return;
+        if (results.Count == 0) return;
+        var resultsList = results.ToList();
+        var counter = resultsList.Count - 1;
+        for (var i = 0; i < matrix.Rows; i++) {
+          if (string.IsNullOrEmpty(matrix[i, 0])) {
+            matrix[i, 0] = resultsList[counter].Key;
+            matrix[i, 1] = resultsList[counter].Value.GetValue();
+            matrix[i, 2] = resultsList[counter].Value.GetType().Name;
+            resultsList.RemoveAt(counter);
+            counter--;
+            if (counter < 0) return;
+          }
         }
-      }
-      if (counter >= 0) {
-        ((IStringConvertibleMatrix)matrix).Rows += counter + 1;
-        for (var i = matrix.Rows - 1; counter >= 0; i--) {
-          matrix[i, 0] = resultsList[0].Key;
-          matrix[i, 1] = resultsList[0].Value.GetValue();
-          matrix[i, 2] = resultsList[0].Value.GetType().Name;
-          resultsList.RemoveAt(0);
-          counter--;
+        if (counter >= 0) {
+          ((IStringConvertibleMatrix)matrix).Rows += counter + 1;
+          for (var i = matrix.Rows - 1; counter >= 0; i--) {
+            matrix[i, 0] = resultsList[0].Key;
+            matrix[i, 1] = resultsList[0].Value.GetValue();
+            matrix[i, 2] = resultsList[0].Value.GetType().Name;
+            resultsList.RemoveAt(0);
+            counter--;
+          }
         }
-      }
-      characteristicsMatrixView.Content = matrix;
-      SetEnabledStateOfControls();
+      } finally {
+        characteristicsMatrixView.Content = matrix;
+        SetEnabledStateOfControls();
+      }
     }
     #endregion
@@ -261,4 +281,14 @@
     #endregion
 
+    private void refreshSolutionsButton_Click(object sender, EventArgs e) {
+      Content.RefreshSolutions();
+    }
+
+    private void uploadSolutionsButton_Click(object sender, EventArgs e) {
+      foreach (var solution in Content.Solutions.Where(x => x.SolutionId == -1))
+        solution.Upload();
+      SetEnabledStateOfControls();
+    }
+
   }
 }
Index: /stable/HeuristicLab.Clients.OKB.Views/3.3/RunCreation/Views/SingleObjectiveOKBSolutionView.Designer.cs
===================================================================
--- /stable/HeuristicLab.Clients.OKB.Views/3.3/RunCreation/Views/SingleObjectiveOKBSolutionView.Designer.cs	(revision 15082)
+++ /stable/HeuristicLab.Clients.OKB.Views/3.3/RunCreation/Views/SingleObjectiveOKBSolutionView.Designer.cs	(revision 15082)
@@ -0,0 +1,148 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2016 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
+
+namespace HeuristicLab.Clients.OKB.RunCreation.Views {
+  partial class SingleObjectiveOKBSolutionView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.refreshButton = new System.Windows.Forms.Button();
+      this.uploadButton = new System.Windows.Forms.Button();
+      this.solutionGroupBox = new System.Windows.Forms.GroupBox();
+      this.qualityTextBox = new System.Windows.Forms.TextBox();
+      this.qualityLabel = new System.Windows.Forms.Label();
+      this.solutionViewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
+      this.solutionGroupBox.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // refreshButton
+      // 
+      this.refreshButton.Location = new System.Drawing.Point(3, 3);
+      this.refreshButton.Name = "refreshButton";
+      this.refreshButton.Size = new System.Drawing.Size(26, 23);
+      this.refreshButton.TabIndex = 0;
+      this.refreshButton.Text = "Refresh";
+      this.refreshButton.UseVisualStyleBackColor = true;
+      this.refreshButton.Click += new System.EventHandler(this.refreshButton_Click);
+      // 
+      // uploadButton
+      // 
+      this.uploadButton.Location = new System.Drawing.Point(35, 3);
+      this.uploadButton.Name = "uploadButton";
+      this.uploadButton.Size = new System.Drawing.Size(26, 23);
+      this.uploadButton.TabIndex = 0;
+      this.uploadButton.Text = "Upload";
+      this.uploadButton.UseVisualStyleBackColor = true;
+      this.uploadButton.Click += new System.EventHandler(this.uploadButton_Click);
+      // 
+      // solutionGroupBox
+      // 
+      this.solutionGroupBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
+            | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+      this.solutionGroupBox.Controls.Add(this.solutionViewHost);
+      this.solutionGroupBox.Controls.Add(this.qualityTextBox);
+      this.solutionGroupBox.Controls.Add(this.qualityLabel);
+      this.solutionGroupBox.Location = new System.Drawing.Point(3, 32);
+      this.solutionGroupBox.Name = "solutionGroupBox";
+      this.solutionGroupBox.Size = new System.Drawing.Size(703, 452);
+      this.solutionGroupBox.TabIndex = 3;
+      this.solutionGroupBox.TabStop = false;
+      this.solutionGroupBox.Text = "Solution";
+      // 
+      // qualityTextBox
+      // 
+      this.qualityTextBox.Location = new System.Drawing.Point(58, 19);
+      this.qualityTextBox.Name = "qualityTextBox";
+      this.qualityTextBox.ReadOnly = true;
+      this.qualityTextBox.Size = new System.Drawing.Size(229, 20);
+      this.qualityTextBox.TabIndex = 4;
+      // 
+      // qualityLabel
+      // 
+      this.qualityLabel.AutoSize = true;
+      this.qualityLabel.Location = new System.Drawing.Point(10, 22);
+      this.qualityLabel.Name = "qualityLabel";
+      this.qualityLabel.Size = new System.Drawing.Size(42, 13);
+      this.qualityLabel.TabIndex = 3;
+      this.qualityLabel.Text = "Quality:";
+      // 
+      // solutionViewHost
+      // 
+      this.solutionViewHost.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
+            | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+      this.solutionViewHost.Caption = "View";
+      this.solutionViewHost.Content = null;
+      this.solutionViewHost.Enabled = false;
+      this.solutionViewHost.Location = new System.Drawing.Point(6, 45);
+      this.solutionViewHost.Name = "solutionViewHost";
+      this.solutionViewHost.ReadOnly = false;
+      this.solutionViewHost.Size = new System.Drawing.Size(691, 401);
+      this.solutionViewHost.TabIndex = 5;
+      this.solutionViewHost.ViewsLabelVisible = true;
+      this.solutionViewHost.ViewType = null;
+      // 
+      // SingleObjectiveOKBSolutionView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.solutionGroupBox);
+      this.Controls.Add(this.uploadButton);
+      this.Controls.Add(this.refreshButton);
+      this.Name = "SingleObjectiveOKBSolutionView";
+      this.Size = new System.Drawing.Size(709, 487);
+      this.solutionGroupBox.ResumeLayout(false);
+      this.solutionGroupBox.PerformLayout();
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Button refreshButton;
+    private System.Windows.Forms.Button uploadButton;
+    private System.Windows.Forms.GroupBox solutionGroupBox;
+    private MainForm.WindowsForms.ViewHost solutionViewHost;
+    private System.Windows.Forms.TextBox qualityTextBox;
+    private System.Windows.Forms.Label qualityLabel;
+  }
+}
Index: /stable/HeuristicLab.Clients.OKB.Views/3.3/RunCreation/Views/SingleObjectiveOKBSolutionView.cs
===================================================================
--- /stable/HeuristicLab.Clients.OKB.Views/3.3/RunCreation/Views/SingleObjectiveOKBSolutionView.cs	(revision 15082)
+++ /stable/HeuristicLab.Clients.OKB.Views/3.3/RunCreation/Views/SingleObjectiveOKBSolutionView.cs	(revision 15082)
@@ -0,0 +1,93 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2016 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 HeuristicLab.Common.Resources;
+using HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
+using System;
+using System.Globalization;
+
+namespace HeuristicLab.Clients.OKB.RunCreation.Views {
+  [View("OKB Solution View (single-objective)")]
+  [Content(typeof(SingleObjectiveOKBSolution), IsDefaultView = true)]
+  public partial class SingleObjectiveOKBSolutionView : ItemView {
+
+    public new SingleObjectiveOKBSolution Content {
+      get { return (SingleObjectiveOKBSolution)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public SingleObjectiveOKBSolutionView() {
+      InitializeComponent();
+      refreshButton.Text = string.Empty;
+      refreshButton.Image = VSImageLibrary.Refresh;
+      uploadButton.Text = string.Empty;
+      uploadButton.Image = VSImageLibrary.PublishToWeb;
+    }
+
+    protected override void RegisterContentEvents() {
+      base.RegisterContentEvents();
+      Content.QualityChanged += ContentOnQualityChanged;
+      Content.SolutionChanged += ContentOnSolutionChanged;
+    }
+
+    protected override void DeregisterContentEvents() {
+      base.DeregisterContentEvents();
+      Content.QualityChanged -= ContentOnQualityChanged;
+      Content.SolutionChanged -= ContentOnSolutionChanged;
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      if (Content == null) {
+        qualityTextBox.Text = string.Empty;
+        solutionViewHost.Content = null;
+      } else {
+        qualityTextBox.Text = Content.Quality.ToString(CultureInfo.CurrentCulture.NumberFormat);
+        solutionViewHost.Content = Content.Solution;
+      }
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      refreshButton.Enabled = Content != null & !Locked && !ReadOnly && Content.SolutionId != -1;
+      uploadButton.Enabled = Content != null && !Locked && !ReadOnly && Content.SolutionId == -1;
+    }
+
+    private void ContentOnSolutionChanged(object sender, EventArgs eventArgs) {
+      solutionViewHost.Content = Content.Solution;
+    }
+
+    private void ContentOnQualityChanged(object sender, EventArgs eventArgs) {
+      qualityTextBox.Text = Content.Quality.ToString(CultureInfo.CurrentCulture.NumberFormat);
+    }
+
+    private void refreshButton_Click(object sender, System.EventArgs e) {
+      Content.Download(Content.SolutionId);
+      SetEnabledStateOfControls();
+    }
+
+    private void uploadButton_Click(object sender, System.EventArgs e) {
+      Content.Upload();
+      SetEnabledStateOfControls();
+    }
+  }
+}
Index: /stable/HeuristicLab.Clients.OKB/3.3/HeuristicLab.Clients.OKB-3.3.csproj
===================================================================
--- /stable/HeuristicLab.Clients.OKB/3.3/HeuristicLab.Clients.OKB-3.3.csproj	(revision 15081)
+++ /stable/HeuristicLab.Clients.OKB/3.3/HeuristicLab.Clients.OKB-3.3.csproj	(revision 15082)
@@ -114,4 +114,5 @@
     <Compile Include="Administration\ServiceClient\ProblemClass.cs" />
     <Compile Include="OKBRoles.cs" />
+    <Compile Include="RunCreation\OKBSolution.cs" />
     <Compile Include="Plugin.cs" />
     <Compile Include="Query\QueryClient.cs" />
@@ -156,4 +157,5 @@
     <Compile Include="RunCreation\OKBProblem.cs" />
     <Compile Include="RunCreation\OKBRun.cs" />
+    <Compile Include="RunCreation\SingleObjectiveOKBSolution.cs" />
     <Compile Include="RunCreation\RunCreationClient.cs" />
     <Compile Include="RunCreation\ServiceClient\Algorithm.cs" />
Index: /stable/HeuristicLab.Clients.OKB/3.3/RunCreation/OKBAlgorithm.cs
===================================================================
--- /stable/HeuristicLab.Clients.OKB/3.3/RunCreation/OKBAlgorithm.cs	(revision 15081)
+++ /stable/HeuristicLab.Clients.OKB/3.3/RunCreation/OKBAlgorithm.cs	(revision 15082)
@@ -20,9 +20,4 @@
 #endregion
 
-using System;
-using System.Collections.Generic;
-using System.Drawing;
-using System.IO;
-using System.Linq;
 using HeuristicLab.Clients.Access;
 using HeuristicLab.Collections;
@@ -32,4 +27,9 @@
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 using HeuristicLab.Persistence.Default.Xml;
+using System;
+using System.Collections.Generic;
+using System.Drawing;
+using System.IO;
+using System.Linq;
 
 namespace HeuristicLab.Clients.OKB.RunCreation {
@@ -222,5 +222,5 @@
       if (this.algorithmId != algorithmId) {
         IAlgorithm algorithm;
-        byte[] algorithmData = RunCreationClient.GetAlgorithmData(algorithmId);
+        byte[] algorithmData = RunCreationClient.Instance.GetAlgorithmData(algorithmId);
         using (MemoryStream stream = new MemoryStream(algorithmData)) {
           algorithm = XmlParser.Deserialize<IAlgorithm>(stream);
Index: /stable/HeuristicLab.Clients.OKB/3.3/RunCreation/OKBProblem.cs
===================================================================
--- /stable/HeuristicLab.Clients.OKB/3.3/RunCreation/OKBProblem.cs	(revision 15081)
+++ /stable/HeuristicLab.Clients.OKB/3.3/RunCreation/OKBProblem.cs	(revision 15082)
@@ -20,8 +20,4 @@
 #endregion
 
-using System;
-using System.Collections.Generic;
-using System.Drawing;
-using System.IO;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
@@ -29,4 +25,9 @@
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 using HeuristicLab.Persistence.Default.Xml;
+using System;
+using System.Collections.Generic;
+using System.Drawing;
+using System.IO;
+using System.Linq;
 
 namespace HeuristicLab.Clients.OKB.RunCreation {
@@ -63,7 +64,15 @@
             OnOperatorsChanged();
             OnReset();
+
+            solutions.Clear();
           }
         }
       }
+    }
+
+    [Storable]
+    private ItemList<OKBSolution> solutions; 
+    public ItemList<OKBSolution> Solutions {
+      get { return solutions; }
     }
 
@@ -135,4 +144,5 @@
       problemId = original.problemId;
       problem = cloner.Clone(original.problem);
+      solutions = cloner.Clone(original.solutions);
       RegisterProblemEvents();
     }
@@ -142,4 +152,5 @@
       problemId = -1;
       problem = initialProblem;
+      solutions = new ItemList<OKBSolution>();
       RegisterProblemEvents();
     }
@@ -148,5 +159,5 @@
       if (this.problemId != problemId) {
         IHeuristicOptimizationProblem problem;
-        byte[] problemData = RunCreationClient.GetProblemData(problemId);
+        byte[] problemData = RunCreationClient.Instance.GetProblemData(problemId);
         using (MemoryStream stream = new MemoryStream(problemData)) {
           problem = XmlParser.Deserialize<IHeuristicOptimizationProblem>(stream);
@@ -157,4 +168,12 @@
         }
       }
+    }
+
+    public void RefreshSolutions() {
+      if (ProblemId != -1) {
+        var sols = RunCreationClient.Instance.GetSolutions(ProblemId).Select(OKBSolution.Convert).ToList();
+        foreach (var sol in sols) sol.DownloadData();
+        Solutions.Replace(sols);
+      } else Solutions.Clear();
     }
 
Index: /stable/HeuristicLab.Clients.OKB/3.3/RunCreation/OKBSolution.cs
===================================================================
--- /stable/HeuristicLab.Clients.OKB/3.3/RunCreation/OKBSolution.cs	(revision 15082)
+++ /stable/HeuristicLab.Clients.OKB/3.3/RunCreation/OKBSolution.cs	(revision 15082)
@@ -0,0 +1,90 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2016 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 HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using System;
+
+namespace HeuristicLab.Clients.OKB.RunCreation {
+  [Item("OKB Solution", "")]
+  [StorableClass]
+  public abstract class OKBSolution : Item {
+    [Storable]
+    private long problemId;
+    public long ProblemId {
+      get { return problemId; }
+      protected set { problemId = value; }
+    }
+
+    [Storable]
+    private long solutionId;
+    public long SolutionId {
+      get { return solutionId; }
+      protected set { solutionId = value; }
+    }
+    
+    [Storable]
+    private IItem solution;
+    public IItem Solution {
+      get { return solution; }
+      set {
+        if (solution == value) return;
+        solution = value;
+        OnSolutionChanged();
+      }
+    }
+
+    [StorableConstructor]
+    protected OKBSolution(bool deserializing) : base(deserializing) { }
+    protected OKBSolution(OKBSolution original, Cloner cloner)
+      : base(original, cloner) {
+      problemId = original.problemId;
+      solutionId = original.solutionId;
+      solution = cloner.Clone(original.solution);
+    }
+    protected OKBSolution(long problemId) {
+      this.problemId = problemId;
+      solutionId = -1;
+      solution = null;
+    }
+    protected OKBSolution(Solution sol) {
+      problemId = sol.ProblemId;
+      solutionId = sol.Id;
+    }
+
+    public abstract void Download(long solutionId);
+    public abstract void DownloadData();
+
+    public abstract void Upload();
+
+    public static OKBSolution Convert(Solution solution) {
+      if (solution is SingleObjectiveSolution) return new SingleObjectiveOKBSolution(solution);
+      throw new ArgumentException("Unknown solution type", "solution");
+    }
+
+    public event EventHandler SolutionChanged;
+    private void OnSolutionChanged() {
+      var handler = SolutionChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+  }
+}
Index: /stable/HeuristicLab.Clients.OKB/3.3/RunCreation/RunCreationClient.cs
===================================================================
--- /stable/HeuristicLab.Clients.OKB/3.3/RunCreation/RunCreationClient.cs	(revision 15081)
+++ /stable/HeuristicLab.Clients.OKB/3.3/RunCreation/RunCreationClient.cs	(revision 15082)
@@ -20,8 +20,4 @@
 #endregion
 
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Linq;
 using HeuristicLab.Clients.Common;
 using HeuristicLab.Common;
@@ -29,4 +25,8 @@
 using HeuristicLab.Data;
 using HeuristicLab.Persistence.Default.Xml;
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
 
 namespace HeuristicLab.Clients.OKB.RunCreation {
@@ -86,5 +86,5 @@
 
     #region Algorithm Methods
-    public static byte[] GetAlgorithmData(long algorithmId) {
+    public byte[] GetAlgorithmData(long algorithmId) {
       return CallRunCreationService<byte[]>(s => s.GetAlgorithmData(algorithmId));
     }
@@ -92,6 +92,28 @@
 
     #region Problem Methods
-    public static byte[] GetProblemData(long problemId) {
+    public byte[] GetProblemData(long problemId) {
       return CallRunCreationService<byte[]>(s => s.GetProblemData(problemId));
+    }
+    #endregion
+
+    #region Solution Methods
+    public IEnumerable<Solution> GetSolutions(long problemId) {
+      return CallRunCreationService(s => s.GetSolutions(problemId));
+    }
+
+    public Solution GetSolution(long solutionId) {
+      return CallRunCreationService(s => s.GetSolution(solutionId));
+    }
+
+    public byte[] GetSolutionData(long solutionId) {
+      return CallRunCreationService(s => s.GetSolutionData(solutionId));
+    }
+
+    public long AddSolution(Solution solution, byte[] data) {
+      return CallRunCreationService(s => s.AddSolution(solution, data));
+    }
+
+    public void DeleteSolution(Solution solution) {
+      CallRunCreationService(s => s.DeleteSolution(solution));
     }
     #endregion
@@ -104,13 +126,13 @@
 
     #region Characteristic Methods
-    public static IEnumerable<Value> GetCharacteristicValues(long problemId) {
+    public IEnumerable<Value> GetCharacteristicValues(long problemId) {
       return CallRunCreationService(s => s.GetCharacteristicValues(problemId));
     }
 
-    public static void SetCharacteristicValue(long problemId, Value v) {
+    public void SetCharacteristicValue(long problemId, Value v) {
       CallRunCreationService(s => s.SetCharacteristicValue(problemId, v));
     }
 
-    public static void SetCharacteristicValues(long problemId, IEnumerable<Value> values) {
+    public void SetCharacteristicValues(long problemId, IEnumerable<Value> values) {
       CallRunCreationService(s => s.SetCharacteristicValues(problemId, values.ToList()));
     }
@@ -208,5 +230,5 @@
 
     #region Helpers
-    private static void CallRunCreationService(Action<IRunCreationService> call) {
+    private void CallRunCreationService(Action<IRunCreationService> call) {
       RunCreationServiceClient client = ClientFactory.CreateClient<RunCreationServiceClient, IRunCreationService>();
       try {
@@ -220,5 +242,5 @@
       }
     }
-    private static T CallRunCreationService<T>(Func<IRunCreationService, T> call) {
+    private T CallRunCreationService<T>(Func<IRunCreationService, T> call) {
       RunCreationServiceClient client = ClientFactory.CreateClient<RunCreationServiceClient, IRunCreationService>();
       try {
Index: /stable/HeuristicLab.Clients.OKB/3.3/RunCreation/ServiceClient/RunCreationServiceClient.cs
===================================================================
--- /stable/HeuristicLab.Clients.OKB/3.3/RunCreation/ServiceClient/RunCreationServiceClient.cs	(revision 15081)
+++ /stable/HeuristicLab.Clients.OKB/3.3/RunCreation/ServiceClient/RunCreationServiceClient.cs	(revision 15082)
@@ -2,5 +2,5 @@
 // <auto-generated>
 //     This code was generated by a tool.
-//     Runtime Version:4.0.30319.34209
+//     Runtime Version:4.0.30319.42000
 //
 //     Changes to this file may cause incorrect behavior and will be lost if
@@ -9,1010 +9,1513 @@
 //------------------------------------------------------------------------------
 
-namespace HeuristicLab.Clients.OKB.RunCreation {
-
-
-  [System.Diagnostics.DebuggerStepThroughAttribute()]
-  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
-  [System.Runtime.Serialization.DataContractAttribute(Name = "Algorithm", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.RunCreation.Dat" +
-      "aTransfer")]
-  public partial class Algorithm : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
-
-    private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
-
-    private HeuristicLab.Clients.OKB.RunCreation.AlgorithmClass AlgorithmClassField;
-
-    private HeuristicLab.Clients.OKB.RunCreation.DataType DataTypeField;
-
-    private string DescriptionField;
-
-    private long IdField;
-
-    private string NameField;
-
-    public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
-      get {
-        return this.extensionDataField;
-      }
-      set {
-        this.extensionDataField = value;
-      }
-    }
-
-    [System.Runtime.Serialization.DataMemberAttribute()]
-    public HeuristicLab.Clients.OKB.RunCreation.AlgorithmClass AlgorithmClass {
-      get {
-        return this.AlgorithmClassField;
-      }
-      set {
-        if ((object.ReferenceEquals(this.AlgorithmClassField, value) != true)) {
-          this.AlgorithmClassField = value;
-          this.RaisePropertyChanged("AlgorithmClass");
-        }
-      }
-    }
-
-    [System.Runtime.Serialization.DataMemberAttribute()]
-    public HeuristicLab.Clients.OKB.RunCreation.DataType DataType {
-      get {
-        return this.DataTypeField;
-      }
-      set {
-        if ((object.ReferenceEquals(this.DataTypeField, value) != true)) {
-          this.DataTypeField = value;
-          this.RaisePropertyChanged("DataType");
-        }
-      }
-    }
-
-    [System.Runtime.Serialization.DataMemberAttribute()]
-    public string Description {
-      get {
-        return this.DescriptionField;
-      }
-      set {
-        if ((object.ReferenceEquals(this.DescriptionField, value) != true)) {
-          this.DescriptionField = value;
-          this.RaisePropertyChanged("Description");
-        }
-      }
-    }
-
-    [System.Runtime.Serialization.DataMemberAttribute()]
-    public long Id {
-      get {
-        return this.IdField;
-      }
-      set {
-        if ((this.IdField.Equals(value) != true)) {
-          this.IdField = value;
-          this.RaisePropertyChanged("Id");
-        }
-      }
-    }
-
-    [System.Runtime.Serialization.DataMemberAttribute()]
-    public string Name {
-      get {
-        return this.NameField;
-      }
-      set {
-        if ((object.ReferenceEquals(this.NameField, value) != true)) {
-          this.NameField = value;
-          this.RaisePropertyChanged("Name");
-        }
-      }
-    }
-
-    public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
-
-    protected void RaisePropertyChanged(string propertyName) {
-      System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
-      if ((propertyChanged != null)) {
-        propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
-      }
-    }
-  }
-
-  [System.Diagnostics.DebuggerStepThroughAttribute()]
-  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
-  [System.Runtime.Serialization.DataContractAttribute(Name = "AlgorithmClass", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.RunCreation.Dat" +
-      "aTransfer")]
-  public partial class AlgorithmClass : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
-
-    private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
-
-    private string DescriptionField;
-
-    private string NameField;
-
-    public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
-      get {
-        return this.extensionDataField;
-      }
-      set {
-        this.extensionDataField = value;
-      }
-    }
-
-    [System.Runtime.Serialization.DataMemberAttribute()]
-    public string Description {
-      get {
-        return this.DescriptionField;
-      }
-      set {
-        if ((object.ReferenceEquals(this.DescriptionField, value) != true)) {
-          this.DescriptionField = value;
-          this.RaisePropertyChanged("Description");
-        }
-      }
-    }
-
-    [System.Runtime.Serialization.DataMemberAttribute()]
-    public string Name {
-      get {
-        return this.NameField;
-      }
-      set {
-        if ((object.ReferenceEquals(this.NameField, value) != true)) {
-          this.NameField = value;
-          this.RaisePropertyChanged("Name");
-        }
-      }
-    }
-
-    public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
-
-    protected void RaisePropertyChanged(string propertyName) {
-      System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
-      if ((propertyChanged != null)) {
-        propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
-      }
-    }
-  }
-
-  [System.Diagnostics.DebuggerStepThroughAttribute()]
-  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
-  [System.Runtime.Serialization.DataContractAttribute(Name = "DataType", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.RunCreation.Dat" +
-      "aTransfer")]
-  public partial class DataType : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
-
-    private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
-
-    private string NameField;
-
-    private string TypeNameField;
-
-    public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
-      get {
-        return this.extensionDataField;
-      }
-      set {
-        this.extensionDataField = value;
-      }
-    }
-
-    [System.Runtime.Serialization.DataMemberAttribute()]
-    public string Name {
-      get {
-        return this.NameField;
-      }
-      set {
-        if ((object.ReferenceEquals(this.NameField, value) != true)) {
-          this.NameField = value;
-          this.RaisePropertyChanged("Name");
-        }
-      }
-    }
-
-    [System.Runtime.Serialization.DataMemberAttribute()]
-    public string TypeName {
-      get {
-        return this.TypeNameField;
-      }
-      set {
-        if ((object.ReferenceEquals(this.TypeNameField, value) != true)) {
-          this.TypeNameField = value;
-          this.RaisePropertyChanged("TypeName");
-        }
-      }
-    }
-
-    public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
-
-    protected void RaisePropertyChanged(string propertyName) {
-      System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
-      if ((propertyChanged != null)) {
-        propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
-      }
-    }
-  }
-
-  [System.Diagnostics.DebuggerStepThroughAttribute()]
-  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
-  [System.Runtime.Serialization.DataContractAttribute(Name = "Problem", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.RunCreation.Dat" +
-      "aTransfer")]
-  public partial class Problem : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
-
-    private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
-
-    private HeuristicLab.Clients.OKB.RunCreation.DataType DataTypeField;
-
-    private string DescriptionField;
-
-    private long IdField;
-
-    private string NameField;
-
-    private HeuristicLab.Clients.OKB.RunCreation.ProblemClass ProblemClassField;
-
-    public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
-      get {
-        return this.extensionDataField;
-      }
-      set {
-        this.extensionDataField = value;
-      }
-    }
-
-    [System.Runtime.Serialization.DataMemberAttribute()]
-    public HeuristicLab.Clients.OKB.RunCreation.DataType DataType {
-      get {
-        return this.DataTypeField;
-      }
-      set {
-        if ((object.ReferenceEquals(this.DataTypeField, value) != true)) {
-          this.DataTypeField = value;
-          this.RaisePropertyChanged("DataType");
-        }
-      }
-    }
-
-    [System.Runtime.Serialization.DataMemberAttribute()]
-    public string Description {
-      get {
-        return this.DescriptionField;
-      }
-      set {
-        if ((object.ReferenceEquals(this.DescriptionField, value) != true)) {
-          this.DescriptionField = value;
-          this.RaisePropertyChanged("Description");
-        }
-      }
-    }
-
-    [System.Runtime.Serialization.DataMemberAttribute()]
-    public long Id {
-      get {
-        return this.IdField;
-      }
-      set {
-        if ((this.IdField.Equals(value) != true)) {
-          this.IdField = value;
-          this.RaisePropertyChanged("Id");
-        }
-      }
-    }
-
-    [System.Runtime.Serialization.DataMemberAttribute()]
-    public string Name {
-      get {
-        return this.NameField;
-      }
-      set {
-        if ((object.ReferenceEquals(this.NameField, value) != true)) {
-          this.NameField = value;
-          this.RaisePropertyChanged("Name");
-        }
-      }
-    }
-
-    [System.Runtime.Serialization.DataMemberAttribute()]
-    public HeuristicLab.Clients.OKB.RunCreation.ProblemClass ProblemClass {
-      get {
-        return this.ProblemClassField;
-      }
-      set {
-        if ((object.ReferenceEquals(this.ProblemClassField, value) != true)) {
-          this.ProblemClassField = value;
-          this.RaisePropertyChanged("ProblemClass");
-        }
-      }
-    }
-
-    public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
-
-    protected void RaisePropertyChanged(string propertyName) {
-      System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
-      if ((propertyChanged != null)) {
-        propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
-      }
-    }
-  }
-
-  [System.Diagnostics.DebuggerStepThroughAttribute()]
-  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
-  [System.Runtime.Serialization.DataContractAttribute(Name = "ProblemClass", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.RunCreation.Dat" +
-      "aTransfer")]
-  public partial class ProblemClass : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
-
-    private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
-
-    private string DescriptionField;
-
-    private string NameField;
-
-    public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
-      get {
-        return this.extensionDataField;
-      }
-      set {
-        this.extensionDataField = value;
-      }
-    }
-
-    [System.Runtime.Serialization.DataMemberAttribute()]
-    public string Description {
-      get {
-        return this.DescriptionField;
-      }
-      set {
-        if ((object.ReferenceEquals(this.DescriptionField, value) != true)) {
-          this.DescriptionField = value;
-          this.RaisePropertyChanged("Description");
-        }
-      }
-    }
-
-    [System.Runtime.Serialization.DataMemberAttribute()]
-    public string Name {
-      get {
-        return this.NameField;
-      }
-      set {
-        if ((object.ReferenceEquals(this.NameField, value) != true)) {
-          this.NameField = value;
-          this.RaisePropertyChanged("Name");
-        }
-      }
-    }
-
-    public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
-
-    protected void RaisePropertyChanged(string propertyName) {
-      System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
-      if ((propertyChanged != null)) {
-        propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
-      }
-    }
-  }
-
-  [System.Diagnostics.DebuggerStepThroughAttribute()]
-  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
-  [System.Runtime.Serialization.DataContractAttribute(Name = "Run", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.RunCreation.Dat" +
-      "aTransfer")]
-  public partial class Run : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
-
-    private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
-
-    private long AlgorithmIdField;
-
-    private System.Guid ClientIdField;
-
-    private System.DateTime CreatedDateField;
-
-    private System.Collections.Generic.List<HeuristicLab.Clients.OKB.RunCreation.Value> ParameterValuesField;
-
-    private long ProblemIdField;
-
-    private System.Collections.Generic.List<HeuristicLab.Clients.OKB.RunCreation.Value> ResultValuesField;
-
-    private System.Guid UserIdField;
-
-    public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
-      get {
-        return this.extensionDataField;
-      }
-      set {
-        this.extensionDataField = value;
-      }
-    }
-
-    [System.Runtime.Serialization.DataMemberAttribute()]
-    public long AlgorithmId {
-      get {
-        return this.AlgorithmIdField;
-      }
-      set {
-        if ((this.AlgorithmIdField.Equals(value) != true)) {
-          this.AlgorithmIdField = value;
-          this.RaisePropertyChanged("AlgorithmId");
-        }
-      }
-    }
-
-    [System.Runtime.Serialization.DataMemberAttribute()]
-    public System.Guid ClientId {
-      get {
-        return this.ClientIdField;
-      }
-      set {
-        if ((this.ClientIdField.Equals(value) != true)) {
-          this.ClientIdField = value;
-          this.RaisePropertyChanged("ClientId");
-        }
-      }
-    }
-
-    [System.Runtime.Serialization.DataMemberAttribute()]
-    public System.DateTime CreatedDate {
-      get {
-        return this.CreatedDateField;
-      }
-      set {
-        if ((this.CreatedDateField.Equals(value) != true)) {
-          this.CreatedDateField = value;
-          this.RaisePropertyChanged("CreatedDate");
-        }
-      }
-    }
-
-    [System.Runtime.Serialization.DataMemberAttribute()]
-    public System.Collections.Generic.List<HeuristicLab.Clients.OKB.RunCreation.Value> ParameterValues {
-      get {
-        return this.ParameterValuesField;
-      }
-      set {
-        if ((object.ReferenceEquals(this.ParameterValuesField, value) != true)) {
-          this.ParameterValuesField = value;
-          this.RaisePropertyChanged("ParameterValues");
-        }
-      }
-    }
-
-    [System.Runtime.Serialization.DataMemberAttribute()]
-    public long ProblemId {
-      get {
-        return this.ProblemIdField;
-      }
-      set {
-        if ((this.ProblemIdField.Equals(value) != true)) {
-          this.ProblemIdField = value;
-          this.RaisePropertyChanged("ProblemId");
-        }
-      }
-    }
-
-    [System.Runtime.Serialization.DataMemberAttribute()]
-    public System.Collections.Generic.List<HeuristicLab.Clients.OKB.RunCreation.Value> ResultValues {
-      get {
-        return this.ResultValuesField;
-      }
-      set {
-        if ((object.ReferenceEquals(this.ResultValuesField, value) != true)) {
-          this.ResultValuesField = value;
-          this.RaisePropertyChanged("ResultValues");
-        }
-      }
-    }
-
-    [System.Runtime.Serialization.DataMemberAttribute()]
-    public System.Guid UserId {
-      get {
-        return this.UserIdField;
-      }
-      set {
-        if ((this.UserIdField.Equals(value) != true)) {
-          this.UserIdField = value;
-          this.RaisePropertyChanged("UserId");
-        }
-      }
-    }
-
-    public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
-
-    protected void RaisePropertyChanged(string propertyName) {
-      System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
-      if ((propertyChanged != null)) {
-        propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
-      }
-    }
-  }
-
-  [System.Diagnostics.DebuggerStepThroughAttribute()]
-  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
-  [System.Runtime.Serialization.DataContractAttribute(Name = "Value", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.RunCreation.Dat" +
-      "aTransfer")]
-  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.RunCreation.BoolValue))]
-  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.RunCreation.LongValue))]
-  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.RunCreation.TimeSpanValue))]
-  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.RunCreation.IntValue))]
-  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.RunCreation.FloatValue))]
-  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.RunCreation.DoubleValue))]
-  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.RunCreation.StringValue))]
-  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.RunCreation.BinaryValue))]
-  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.RunCreation.PercentValue))]
-  public partial class Value : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
-
-    private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
-
-    private HeuristicLab.Clients.OKB.RunCreation.DataType DataTypeField;
-
-    private string NameField;
-
-    public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
-      get {
-        return this.extensionDataField;
-      }
-      set {
-        this.extensionDataField = value;
-      }
-    }
-
-    [System.Runtime.Serialization.DataMemberAttribute()]
-    public HeuristicLab.Clients.OKB.RunCreation.DataType DataType {
-      get {
-        return this.DataTypeField;
-      }
-      set {
-        if ((object.ReferenceEquals(this.DataTypeField, value) != true)) {
-          this.DataTypeField = value;
-          this.RaisePropertyChanged("DataType");
-        }
-      }
-    }
-
-    [System.Runtime.Serialization.DataMemberAttribute()]
-    public string Name {
-      get {
-        return this.NameField;
-      }
-      set {
-        if ((object.ReferenceEquals(this.NameField, value) != true)) {
-          this.NameField = value;
-          this.RaisePropertyChanged("Name");
-        }
-      }
-    }
-
-    public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
-
-    protected void RaisePropertyChanged(string propertyName) {
-      System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
-      if ((propertyChanged != null)) {
-        propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
-      }
-    }
-  }
-
-  [System.Diagnostics.DebuggerStepThroughAttribute()]
-  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
-  [System.Runtime.Serialization.DataContractAttribute(Name = "BoolValue", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.RunCreation.Dat" +
-      "aTransfer")]
-  public partial class BoolValue : HeuristicLab.Clients.OKB.RunCreation.Value {
-
-    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 = "LongValue", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.RunCreation.Dat" +
-      "aTransfer")]
-  public partial class LongValue : HeuristicLab.Clients.OKB.RunCreation.Value {
-
-    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 = "TimeSpanValue", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.RunCreation.Dat" +
-      "aTransfer")]
-  public partial class TimeSpanValue : HeuristicLab.Clients.OKB.RunCreation.Value {
-
-    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 = "IntValue", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.RunCreation.Dat" +
-      "aTransfer")]
-  public partial class IntValue : HeuristicLab.Clients.OKB.RunCreation.Value {
-
-    private int ValueField;
-
-    [System.Runtime.Serialization.DataMemberAttribute()]
-    public int 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 = "FloatValue", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.RunCreation.Dat" +
-      "aTransfer")]
-  public partial class FloatValue : HeuristicLab.Clients.OKB.RunCreation.Value {
-
-    private float ValueField;
-
-    [System.Runtime.Serialization.DataMemberAttribute()]
-    public float 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 = "DoubleValue", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.RunCreation.Dat" +
-      "aTransfer")]
-  public partial class DoubleValue : HeuristicLab.Clients.OKB.RunCreation.Value {
-
-    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 = "StringValue", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.RunCreation.Dat" +
-      "aTransfer")]
-  public partial class StringValue : HeuristicLab.Clients.OKB.RunCreation.Value {
-
-    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 = "BinaryValue", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.RunCreation.Dat" +
-      "aTransfer")]
-  public partial class BinaryValue : HeuristicLab.Clients.OKB.RunCreation.Value {
-
-    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 = "PercentValue", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.RunCreation.Dat" +
-      "aTransfer")]
-  public partial class PercentValue : HeuristicLab.Clients.OKB.RunCreation.Value {
-
-    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 = "MissingProblem", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.RunCreation")]
-  public partial class MissingProblem : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
-
-    private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
-
-    private string MessageField;
-
-    public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
-      get {
-        return this.extensionDataField;
-      }
-      set {
-        this.extensionDataField = value;
-      }
-    }
-
-    [System.Runtime.Serialization.DataMemberAttribute()]
-    public string Message {
-      get {
-        return this.MessageField;
-      }
-      set {
-        if ((object.ReferenceEquals(this.MessageField, value) != true)) {
-          this.MessageField = value;
-          this.RaisePropertyChanged("Message");
-        }
-      }
-    }
-
-    public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
-
-    protected void RaisePropertyChanged(string propertyName) {
-      System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
-      if ((propertyChanged != null)) {
-        propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
-      }
-    }
-  }
-
-  [System.Diagnostics.DebuggerStepThroughAttribute()]
-  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
-  [System.Runtime.Serialization.DataContractAttribute(Name = "UnknownCharacteristicType", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.RunCreation")]
-  public partial class UnknownCharacteristicType : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
-
-    private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
-
-    private string MessageField;
-
-    public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
-      get {
-        return this.extensionDataField;
-      }
-      set {
-        this.extensionDataField = value;
-      }
-    }
-
-    [System.Runtime.Serialization.DataMemberAttribute()]
-    public string Message {
-      get {
-        return this.MessageField;
-      }
-      set {
-        if ((object.ReferenceEquals(this.MessageField, value) != true)) {
-          this.MessageField = value;
-          this.RaisePropertyChanged("Message");
-        }
-      }
-    }
-
-    public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
-
-    protected void RaisePropertyChanged(string propertyName) {
-      System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
-      if ((propertyChanged != null)) {
-        propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
-      }
-    }
-  }
-
-  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
-  [System.ServiceModel.ServiceContractAttribute(ConfigurationName = "HeuristicLab.Clients.OKB.RunCreation.IRunCreationService")]
-  public interface IRunCreationService {
-
-    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IRunCreationService/GetAlgorithms", ReplyAction = "http://tempuri.org/IRunCreationService/GetAlgorithmsResponse")]
-    System.Collections.Generic.List<HeuristicLab.Clients.OKB.RunCreation.Algorithm> GetAlgorithms(string platformName);
-
-    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IRunCreationService/GetAlgorithms", ReplyAction = "http://tempuri.org/IRunCreationService/GetAlgorithmsResponse")]
-    System.Threading.Tasks.Task<System.Collections.Generic.List<HeuristicLab.Clients.OKB.RunCreation.Algorithm>> GetAlgorithmsAsync(string platformName);
-
-    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IRunCreationService/GetAlgorithmData", ReplyAction = "http://tempuri.org/IRunCreationService/GetAlgorithmDataResponse")]
-    byte[] GetAlgorithmData(long algorithmId);
-
-    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IRunCreationService/GetAlgorithmData", ReplyAction = "http://tempuri.org/IRunCreationService/GetAlgorithmDataResponse")]
-    System.Threading.Tasks.Task<byte[]> GetAlgorithmDataAsync(long algorithmId);
-
-    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IRunCreationService/GetProblems", ReplyAction = "http://tempuri.org/IRunCreationService/GetProblemsResponse")]
-    System.Collections.Generic.List<HeuristicLab.Clients.OKB.RunCreation.Problem> GetProblems(string platformName);
-
-    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IRunCreationService/GetProblems", ReplyAction = "http://tempuri.org/IRunCreationService/GetProblemsResponse")]
-    System.Threading.Tasks.Task<System.Collections.Generic.List<HeuristicLab.Clients.OKB.RunCreation.Problem>> GetProblemsAsync(string platformName);
-
-    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IRunCreationService/GetProblemData", ReplyAction = "http://tempuri.org/IRunCreationService/GetProblemDataResponse")]
-    byte[] GetProblemData(long problemId);
-
-    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IRunCreationService/GetProblemData", ReplyAction = "http://tempuri.org/IRunCreationService/GetProblemDataResponse")]
-    System.Threading.Tasks.Task<byte[]> GetProblemDataAsync(long problemId);
-
-    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IRunCreationService/AddRun", ReplyAction = "http://tempuri.org/IRunCreationService/AddRunResponse")]
-    void AddRun(HeuristicLab.Clients.OKB.RunCreation.Run run);
-
-    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IRunCreationService/AddRun", ReplyAction = "http://tempuri.org/IRunCreationService/AddRunResponse")]
-    System.Threading.Tasks.Task AddRunAsync(HeuristicLab.Clients.OKB.RunCreation.Run run);
-
-    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IRunCreationService/GetCharacteristicValues", ReplyAction = "http://tempuri.org/IRunCreationService/GetCharacteristicValuesResponse")]
-    System.Collections.Generic.List<HeuristicLab.Clients.OKB.RunCreation.Value> GetCharacteristicValues(long problemId);
-
-    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IRunCreationService/GetCharacteristicValues", ReplyAction = "http://tempuri.org/IRunCreationService/GetCharacteristicValuesResponse")]
-    System.Threading.Tasks.Task<System.Collections.Generic.List<HeuristicLab.Clients.OKB.RunCreation.Value>> GetCharacteristicValuesAsync(long problemId);
-
-    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IRunCreationService/SetCharacteristicValue", ReplyAction = "http://tempuri.org/IRunCreationService/SetCharacteristicValueResponse")]
-    [System.ServiceModel.FaultContractAttribute(typeof(HeuristicLab.Clients.OKB.RunCreation.MissingProblem), Action = "http://tempuri.org/IRunCreationService/SetCharacteristicValueMissingProblemFault", Name = "MissingProblem", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.RunCreation")]
-    [System.ServiceModel.FaultContractAttribute(typeof(HeuristicLab.Clients.OKB.RunCreation.UnknownCharacteristicType), Action = "http://tempuri.org/IRunCreationService/SetCharacteristicValueUnknownCharacteristi" +
-        "cTypeFault", Name = "UnknownCharacteristicType", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.RunCreation")]
-    void SetCharacteristicValue(long problemId, HeuristicLab.Clients.OKB.RunCreation.Value value);
-
-    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IRunCreationService/SetCharacteristicValue", ReplyAction = "http://tempuri.org/IRunCreationService/SetCharacteristicValueResponse")]
-    System.Threading.Tasks.Task SetCharacteristicValueAsync(long problemId, HeuristicLab.Clients.OKB.RunCreation.Value value);
-
-    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IRunCreationService/SetCharacteristicValues", ReplyAction = "http://tempuri.org/IRunCreationService/SetCharacteristicValuesResponse")]
-    [System.ServiceModel.FaultContractAttribute(typeof(HeuristicLab.Clients.OKB.RunCreation.MissingProblem), Action = "http://tempuri.org/IRunCreationService/SetCharacteristicValuesMissingProblemFault" +
-        "", Name = "MissingProblem", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.RunCreation")]
-    [System.ServiceModel.FaultContractAttribute(typeof(HeuristicLab.Clients.OKB.RunCreation.UnknownCharacteristicType), Action = "http://tempuri.org/IRunCreationService/SetCharacteristicValuesUnknownCharacterist" +
-        "icTypeFault", Name = "UnknownCharacteristicType", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.RunCreation")]
-    void SetCharacteristicValues(long problemId, System.Collections.Generic.List<HeuristicLab.Clients.OKB.RunCreation.Value> values);
-
-    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IRunCreationService/SetCharacteristicValues", ReplyAction = "http://tempuri.org/IRunCreationService/SetCharacteristicValuesResponse")]
-    System.Threading.Tasks.Task SetCharacteristicValuesAsync(long problemId, System.Collections.Generic.List<HeuristicLab.Clients.OKB.RunCreation.Value> values);
-  }
-
-  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
-  public interface IRunCreationServiceChannel : HeuristicLab.Clients.OKB.RunCreation.IRunCreationService, System.ServiceModel.IClientChannel {
-  }
-
-  [System.Diagnostics.DebuggerStepThroughAttribute()]
-  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
-  public partial class RunCreationServiceClient : System.ServiceModel.ClientBase<HeuristicLab.Clients.OKB.RunCreation.IRunCreationService>, HeuristicLab.Clients.OKB.RunCreation.IRunCreationService {
-
-    public RunCreationServiceClient() {
-    }
-
-    public RunCreationServiceClient(string endpointConfigurationName) :
-      base(endpointConfigurationName) {
-    }
-
-    public RunCreationServiceClient(string endpointConfigurationName, string remoteAddress) :
-      base(endpointConfigurationName, remoteAddress) {
-    }
-
-    public RunCreationServiceClient(string endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) :
-      base(endpointConfigurationName, remoteAddress) {
-    }
-
-    public RunCreationServiceClient(System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress) :
-      base(binding, remoteAddress) {
-    }
-
-    public System.Collections.Generic.List<HeuristicLab.Clients.OKB.RunCreation.Algorithm> GetAlgorithms(string platformName) {
-      return base.Channel.GetAlgorithms(platformName);
-    }
-
-    public System.Threading.Tasks.Task<System.Collections.Generic.List<HeuristicLab.Clients.OKB.RunCreation.Algorithm>> GetAlgorithmsAsync(string platformName) {
-      return base.Channel.GetAlgorithmsAsync(platformName);
-    }
-
-    public byte[] GetAlgorithmData(long algorithmId) {
-      return base.Channel.GetAlgorithmData(algorithmId);
-    }
-
-    public System.Threading.Tasks.Task<byte[]> GetAlgorithmDataAsync(long algorithmId) {
-      return base.Channel.GetAlgorithmDataAsync(algorithmId);
-    }
-
-    public System.Collections.Generic.List<HeuristicLab.Clients.OKB.RunCreation.Problem> GetProblems(string platformName) {
-      return base.Channel.GetProblems(platformName);
-    }
-
-    public System.Threading.Tasks.Task<System.Collections.Generic.List<HeuristicLab.Clients.OKB.RunCreation.Problem>> GetProblemsAsync(string platformName) {
-      return base.Channel.GetProblemsAsync(platformName);
-    }
-
-    public byte[] GetProblemData(long problemId) {
-      return base.Channel.GetProblemData(problemId);
-    }
-
-    public System.Threading.Tasks.Task<byte[]> GetProblemDataAsync(long problemId) {
-      return base.Channel.GetProblemDataAsync(problemId);
-    }
-
-    public void AddRun(HeuristicLab.Clients.OKB.RunCreation.Run run) {
-      base.Channel.AddRun(run);
-    }
-
-    public System.Threading.Tasks.Task AddRunAsync(HeuristicLab.Clients.OKB.RunCreation.Run run) {
-      return base.Channel.AddRunAsync(run);
-    }
-
-    public System.Collections.Generic.List<HeuristicLab.Clients.OKB.RunCreation.Value> GetCharacteristicValues(long problemId) {
-      return base.Channel.GetCharacteristicValues(problemId);
-    }
-
-    public System.Threading.Tasks.Task<System.Collections.Generic.List<HeuristicLab.Clients.OKB.RunCreation.Value>> GetCharacteristicValuesAsync(long problemId) {
-      return base.Channel.GetCharacteristicValuesAsync(problemId);
-    }
-
-    public void SetCharacteristicValue(long problemId, HeuristicLab.Clients.OKB.RunCreation.Value value) {
-      base.Channel.SetCharacteristicValue(problemId, value);
-    }
-
-    public System.Threading.Tasks.Task SetCharacteristicValueAsync(long problemId, HeuristicLab.Clients.OKB.RunCreation.Value value) {
-      return base.Channel.SetCharacteristicValueAsync(problemId, value);
-    }
-
-    public void SetCharacteristicValues(long problemId, System.Collections.Generic.List<HeuristicLab.Clients.OKB.RunCreation.Value> values) {
-      base.Channel.SetCharacteristicValues(problemId, values);
-    }
-
-    public System.Threading.Tasks.Task SetCharacteristicValuesAsync(long problemId, System.Collections.Generic.List<HeuristicLab.Clients.OKB.RunCreation.Value> values) {
-      return base.Channel.SetCharacteristicValuesAsync(problemId, values);
-    }
-  }
+namespace HeuristicLab.Clients.OKB.RunCreation
+{
+    using System.Runtime.Serialization;
+    
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="Algorithm", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.RunCreation.Dat" +
+        "aTransfer")]
+    public partial class Algorithm : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged
+    {
+        
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        private HeuristicLab.Clients.OKB.RunCreation.AlgorithmClass AlgorithmClassField;
+        
+        private HeuristicLab.Clients.OKB.RunCreation.DataType DataTypeField;
+        
+        private string DescriptionField;
+        
+        private long IdField;
+        
+        private string NameField;
+        
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData
+        {
+            get
+            {
+                return this.extensionDataField;
+            }
+            set
+            {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public HeuristicLab.Clients.OKB.RunCreation.AlgorithmClass AlgorithmClass
+        {
+            get
+            {
+                return this.AlgorithmClassField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.AlgorithmClassField, value) != true))
+                {
+                    this.AlgorithmClassField = value;
+                    this.RaisePropertyChanged("AlgorithmClass");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public HeuristicLab.Clients.OKB.RunCreation.DataType DataType
+        {
+            get
+            {
+                return this.DataTypeField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.DataTypeField, value) != true))
+                {
+                    this.DataTypeField = value;
+                    this.RaisePropertyChanged("DataType");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public string Description
+        {
+            get
+            {
+                return this.DescriptionField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.DescriptionField, value) != true))
+                {
+                    this.DescriptionField = value;
+                    this.RaisePropertyChanged("Description");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public long Id
+        {
+            get
+            {
+                return this.IdField;
+            }
+            set
+            {
+                if ((this.IdField.Equals(value) != true))
+                {
+                    this.IdField = value;
+                    this.RaisePropertyChanged("Id");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public string Name
+        {
+            get
+            {
+                return this.NameField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.NameField, value) != true))
+                {
+                    this.NameField = value;
+                    this.RaisePropertyChanged("Name");
+                }
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        protected void RaisePropertyChanged(string propertyName)
+        {
+            System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
+            if ((propertyChanged != null))
+            {
+                propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="AlgorithmClass", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.RunCreation.Dat" +
+        "aTransfer")]
+    public partial class AlgorithmClass : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged
+    {
+        
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        private string DescriptionField;
+        
+        private string NameField;
+        
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData
+        {
+            get
+            {
+                return this.extensionDataField;
+            }
+            set
+            {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public string Description
+        {
+            get
+            {
+                return this.DescriptionField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.DescriptionField, value) != true))
+                {
+                    this.DescriptionField = value;
+                    this.RaisePropertyChanged("Description");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public string Name
+        {
+            get
+            {
+                return this.NameField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.NameField, value) != true))
+                {
+                    this.NameField = value;
+                    this.RaisePropertyChanged("Name");
+                }
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        protected void RaisePropertyChanged(string propertyName)
+        {
+            System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
+            if ((propertyChanged != null))
+            {
+                propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="DataType", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.RunCreation.Dat" +
+        "aTransfer")]
+    public partial class DataType : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged
+    {
+        
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        private string NameField;
+        
+        private string TypeNameField;
+        
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData
+        {
+            get
+            {
+                return this.extensionDataField;
+            }
+            set
+            {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public string Name
+        {
+            get
+            {
+                return this.NameField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.NameField, value) != true))
+                {
+                    this.NameField = value;
+                    this.RaisePropertyChanged("Name");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public string TypeName
+        {
+            get
+            {
+                return this.TypeNameField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.TypeNameField, value) != true))
+                {
+                    this.TypeNameField = value;
+                    this.RaisePropertyChanged("TypeName");
+                }
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        protected void RaisePropertyChanged(string propertyName)
+        {
+            System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
+            if ((propertyChanged != null))
+            {
+                propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="Problem", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.RunCreation.Dat" +
+        "aTransfer")]
+    public partial class Problem : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged
+    {
+        
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        private HeuristicLab.Clients.OKB.RunCreation.DataType DataTypeField;
+        
+        private string DescriptionField;
+        
+        private long IdField;
+        
+        private string NameField;
+        
+        private HeuristicLab.Clients.OKB.RunCreation.ProblemClass ProblemClassField;
+        
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData
+        {
+            get
+            {
+                return this.extensionDataField;
+            }
+            set
+            {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public HeuristicLab.Clients.OKB.RunCreation.DataType DataType
+        {
+            get
+            {
+                return this.DataTypeField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.DataTypeField, value) != true))
+                {
+                    this.DataTypeField = value;
+                    this.RaisePropertyChanged("DataType");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public string Description
+        {
+            get
+            {
+                return this.DescriptionField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.DescriptionField, value) != true))
+                {
+                    this.DescriptionField = value;
+                    this.RaisePropertyChanged("Description");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public long Id
+        {
+            get
+            {
+                return this.IdField;
+            }
+            set
+            {
+                if ((this.IdField.Equals(value) != true))
+                {
+                    this.IdField = value;
+                    this.RaisePropertyChanged("Id");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public string Name
+        {
+            get
+            {
+                return this.NameField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.NameField, value) != true))
+                {
+                    this.NameField = value;
+                    this.RaisePropertyChanged("Name");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public HeuristicLab.Clients.OKB.RunCreation.ProblemClass ProblemClass
+        {
+            get
+            {
+                return this.ProblemClassField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.ProblemClassField, value) != true))
+                {
+                    this.ProblemClassField = value;
+                    this.RaisePropertyChanged("ProblemClass");
+                }
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        protected void RaisePropertyChanged(string propertyName)
+        {
+            System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
+            if ((propertyChanged != null))
+            {
+                propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="ProblemClass", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.RunCreation.Dat" +
+        "aTransfer")]
+    public partial class ProblemClass : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged
+    {
+        
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        private string DescriptionField;
+        
+        private string NameField;
+        
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData
+        {
+            get
+            {
+                return this.extensionDataField;
+            }
+            set
+            {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public string Description
+        {
+            get
+            {
+                return this.DescriptionField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.DescriptionField, value) != true))
+                {
+                    this.DescriptionField = value;
+                    this.RaisePropertyChanged("Description");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public string Name
+        {
+            get
+            {
+                return this.NameField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.NameField, value) != true))
+                {
+                    this.NameField = value;
+                    this.RaisePropertyChanged("Name");
+                }
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        protected void RaisePropertyChanged(string propertyName)
+        {
+            System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
+            if ((propertyChanged != null))
+            {
+                propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="Solution", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.RunCreation.Dat" +
+        "aTransfer")]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.RunCreation.SingleObjectiveSolution))]
+    public partial class Solution : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged
+    {
+        
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        private HeuristicLab.Clients.OKB.RunCreation.DataType DataTypeField;
+        
+        private long IdField;
+        
+        private long ProblemIdField;
+        
+        private System.Nullable<long> RunIdField;
+        
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData
+        {
+            get
+            {
+                return this.extensionDataField;
+            }
+            set
+            {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public HeuristicLab.Clients.OKB.RunCreation.DataType DataType
+        {
+            get
+            {
+                return this.DataTypeField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.DataTypeField, value) != true))
+                {
+                    this.DataTypeField = value;
+                    this.RaisePropertyChanged("DataType");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public long Id
+        {
+            get
+            {
+                return this.IdField;
+            }
+            set
+            {
+                if ((this.IdField.Equals(value) != true))
+                {
+                    this.IdField = value;
+                    this.RaisePropertyChanged("Id");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public long ProblemId
+        {
+            get
+            {
+                return this.ProblemIdField;
+            }
+            set
+            {
+                if ((this.ProblemIdField.Equals(value) != true))
+                {
+                    this.ProblemIdField = value;
+                    this.RaisePropertyChanged("ProblemId");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public System.Nullable<long> RunId
+        {
+            get
+            {
+                return this.RunIdField;
+            }
+            set
+            {
+                if ((this.RunIdField.Equals(value) != true))
+                {
+                    this.RunIdField = value;
+                    this.RaisePropertyChanged("RunId");
+                }
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        protected void RaisePropertyChanged(string propertyName)
+        {
+            System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
+            if ((propertyChanged != null))
+            {
+                propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="SingleObjectiveSolution", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.RunCreation.Dat" +
+        "aTransfer")]
+    public partial class SingleObjectiveSolution : HeuristicLab.Clients.OKB.RunCreation.Solution
+    {
+        
+        private double QualityField;
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public double Quality
+        {
+            get
+            {
+                return this.QualityField;
+            }
+            set
+            {
+                if ((this.QualityField.Equals(value) != true))
+                {
+                    this.QualityField = value;
+                    this.RaisePropertyChanged("Quality");
+                }
+            }
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="Run", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.RunCreation.Dat" +
+        "aTransfer")]
+    public partial class Run : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged
+    {
+        
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        private long AlgorithmIdField;
+        
+        private System.Guid ClientIdField;
+        
+        private System.DateTime CreatedDateField;
+        
+        private System.Collections.Generic.List<HeuristicLab.Clients.OKB.RunCreation.Value> ParameterValuesField;
+        
+        private long ProblemIdField;
+        
+        private System.Collections.Generic.List<HeuristicLab.Clients.OKB.RunCreation.Value> ResultValuesField;
+        
+        private System.Guid UserIdField;
+        
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData
+        {
+            get
+            {
+                return this.extensionDataField;
+            }
+            set
+            {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public long AlgorithmId
+        {
+            get
+            {
+                return this.AlgorithmIdField;
+            }
+            set
+            {
+                if ((this.AlgorithmIdField.Equals(value) != true))
+                {
+                    this.AlgorithmIdField = value;
+                    this.RaisePropertyChanged("AlgorithmId");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public System.Guid ClientId
+        {
+            get
+            {
+                return this.ClientIdField;
+            }
+            set
+            {
+                if ((this.ClientIdField.Equals(value) != true))
+                {
+                    this.ClientIdField = value;
+                    this.RaisePropertyChanged("ClientId");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public System.DateTime CreatedDate
+        {
+            get
+            {
+                return this.CreatedDateField;
+            }
+            set
+            {
+                if ((this.CreatedDateField.Equals(value) != true))
+                {
+                    this.CreatedDateField = value;
+                    this.RaisePropertyChanged("CreatedDate");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public System.Collections.Generic.List<HeuristicLab.Clients.OKB.RunCreation.Value> ParameterValues
+        {
+            get
+            {
+                return this.ParameterValuesField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.ParameterValuesField, value) != true))
+                {
+                    this.ParameterValuesField = value;
+                    this.RaisePropertyChanged("ParameterValues");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public long ProblemId
+        {
+            get
+            {
+                return this.ProblemIdField;
+            }
+            set
+            {
+                if ((this.ProblemIdField.Equals(value) != true))
+                {
+                    this.ProblemIdField = value;
+                    this.RaisePropertyChanged("ProblemId");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public System.Collections.Generic.List<HeuristicLab.Clients.OKB.RunCreation.Value> ResultValues
+        {
+            get
+            {
+                return this.ResultValuesField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.ResultValuesField, value) != true))
+                {
+                    this.ResultValuesField = value;
+                    this.RaisePropertyChanged("ResultValues");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public System.Guid UserId
+        {
+            get
+            {
+                return this.UserIdField;
+            }
+            set
+            {
+                if ((this.UserIdField.Equals(value) != true))
+                {
+                    this.UserIdField = value;
+                    this.RaisePropertyChanged("UserId");
+                }
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        protected void RaisePropertyChanged(string propertyName)
+        {
+            System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
+            if ((propertyChanged != null))
+            {
+                propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="Value", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.RunCreation.Dat" +
+        "aTransfer")]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.RunCreation.BoolValue))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.RunCreation.LongValue))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.RunCreation.TimeSpanValue))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.RunCreation.DoubleValue))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.RunCreation.PercentValue))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.RunCreation.FloatValue))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.RunCreation.IntValue))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.RunCreation.StringValue))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.RunCreation.BinaryValue))]
+    public partial class Value : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged
+    {
+        
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        private HeuristicLab.Clients.OKB.RunCreation.DataType DataTypeField;
+        
+        private string NameField;
+        
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData
+        {
+            get
+            {
+                return this.extensionDataField;
+            }
+            set
+            {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public HeuristicLab.Clients.OKB.RunCreation.DataType DataType
+        {
+            get
+            {
+                return this.DataTypeField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.DataTypeField, value) != true))
+                {
+                    this.DataTypeField = value;
+                    this.RaisePropertyChanged("DataType");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public string Name
+        {
+            get
+            {
+                return this.NameField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.NameField, value) != true))
+                {
+                    this.NameField = value;
+                    this.RaisePropertyChanged("Name");
+                }
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        protected void RaisePropertyChanged(string propertyName)
+        {
+            System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
+            if ((propertyChanged != null))
+            {
+                propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="BoolValue", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.RunCreation.Dat" +
+        "aTransfer")]
+    public partial class BoolValue : HeuristicLab.Clients.OKB.RunCreation.Value
+    {
+        
+        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="LongValue", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.RunCreation.Dat" +
+        "aTransfer")]
+    public partial class LongValue : HeuristicLab.Clients.OKB.RunCreation.Value
+    {
+        
+        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="TimeSpanValue", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.RunCreation.Dat" +
+        "aTransfer")]
+    public partial class TimeSpanValue : HeuristicLab.Clients.OKB.RunCreation.Value
+    {
+        
+        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="DoubleValue", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.RunCreation.Dat" +
+        "aTransfer")]
+    public partial class DoubleValue : HeuristicLab.Clients.OKB.RunCreation.Value
+    {
+        
+        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="PercentValue", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.RunCreation.Dat" +
+        "aTransfer")]
+    public partial class PercentValue : HeuristicLab.Clients.OKB.RunCreation.Value
+    {
+        
+        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="FloatValue", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.RunCreation.Dat" +
+        "aTransfer")]
+    public partial class FloatValue : HeuristicLab.Clients.OKB.RunCreation.Value
+    {
+        
+        private float ValueField;
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public float 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="IntValue", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.RunCreation.Dat" +
+        "aTransfer")]
+    public partial class IntValue : HeuristicLab.Clients.OKB.RunCreation.Value
+    {
+        
+        private int ValueField;
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int 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="StringValue", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.RunCreation.Dat" +
+        "aTransfer")]
+    public partial class StringValue : HeuristicLab.Clients.OKB.RunCreation.Value
+    {
+        
+        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="BinaryValue", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.RunCreation.Dat" +
+        "aTransfer")]
+    public partial class BinaryValue : HeuristicLab.Clients.OKB.RunCreation.Value
+    {
+        
+        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="MissingProblem", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.RunCreation")]
+    public partial class MissingProblem : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged
+    {
+        
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        private string MessageField;
+        
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData
+        {
+            get
+            {
+                return this.extensionDataField;
+            }
+            set
+            {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public string Message
+        {
+            get
+            {
+                return this.MessageField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.MessageField, value) != true))
+                {
+                    this.MessageField = value;
+                    this.RaisePropertyChanged("Message");
+                }
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        protected void RaisePropertyChanged(string propertyName)
+        {
+            System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
+            if ((propertyChanged != null))
+            {
+                propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="MissingSolution", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.RunCreation")]
+    public partial class MissingSolution : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged
+    {
+        
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        private string MessageField;
+        
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData
+        {
+            get
+            {
+                return this.extensionDataField;
+            }
+            set
+            {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public string Message
+        {
+            get
+            {
+                return this.MessageField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.MessageField, value) != true))
+                {
+                    this.MessageField = value;
+                    this.RaisePropertyChanged("Message");
+                }
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        protected void RaisePropertyChanged(string propertyName)
+        {
+            System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
+            if ((propertyChanged != null))
+            {
+                propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="UnknownCharacteristicType", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.RunCreation")]
+    public partial class UnknownCharacteristicType : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged
+    {
+        
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        private string MessageField;
+        
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData
+        {
+            get
+            {
+                return this.extensionDataField;
+            }
+            set
+            {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public string Message
+        {
+            get
+            {
+                return this.MessageField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.MessageField, value) != true))
+                {
+                    this.MessageField = value;
+                    this.RaisePropertyChanged("Message");
+                }
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        protected void RaisePropertyChanged(string propertyName)
+        {
+            System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
+            if ((propertyChanged != null))
+            {
+                propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+    }
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+    [System.ServiceModel.ServiceContractAttribute(ConfigurationName="HeuristicLab.Clients.OKB.RunCreation.IRunCreationService")]
+    public interface IRunCreationService
+    {
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IRunCreationService/GetAlgorithms", ReplyAction="http://tempuri.org/IRunCreationService/GetAlgorithmsResponse")]
+        System.Collections.Generic.List<HeuristicLab.Clients.OKB.RunCreation.Algorithm> GetAlgorithms(string platformName);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IRunCreationService/GetAlgorithms", ReplyAction="http://tempuri.org/IRunCreationService/GetAlgorithmsResponse")]
+        System.Threading.Tasks.Task<System.Collections.Generic.List<HeuristicLab.Clients.OKB.RunCreation.Algorithm>> GetAlgorithmsAsync(string platformName);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IRunCreationService/GetAlgorithmData", ReplyAction="http://tempuri.org/IRunCreationService/GetAlgorithmDataResponse")]
+        byte[] GetAlgorithmData(long algorithmId);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IRunCreationService/GetAlgorithmData", ReplyAction="http://tempuri.org/IRunCreationService/GetAlgorithmDataResponse")]
+        System.Threading.Tasks.Task<byte[]> GetAlgorithmDataAsync(long algorithmId);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IRunCreationService/GetProblems", ReplyAction="http://tempuri.org/IRunCreationService/GetProblemsResponse")]
+        System.Collections.Generic.List<HeuristicLab.Clients.OKB.RunCreation.Problem> GetProblems(string platformName);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IRunCreationService/GetProblems", ReplyAction="http://tempuri.org/IRunCreationService/GetProblemsResponse")]
+        System.Threading.Tasks.Task<System.Collections.Generic.List<HeuristicLab.Clients.OKB.RunCreation.Problem>> GetProblemsAsync(string platformName);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IRunCreationService/GetProblemData", ReplyAction="http://tempuri.org/IRunCreationService/GetProblemDataResponse")]
+        byte[] GetProblemData(long problemId);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IRunCreationService/GetProblemData", ReplyAction="http://tempuri.org/IRunCreationService/GetProblemDataResponse")]
+        System.Threading.Tasks.Task<byte[]> GetProblemDataAsync(long problemId);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IRunCreationService/GetSolutions", ReplyAction="http://tempuri.org/IRunCreationService/GetSolutionsResponse")]
+        [System.ServiceModel.FaultContractAttribute(typeof(HeuristicLab.Clients.OKB.RunCreation.MissingProblem), Action="http://tempuri.org/IRunCreationService/GetSolutionsMissingProblemFault", Name="MissingProblem", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.RunCreation")]
+        System.Collections.Generic.List<HeuristicLab.Clients.OKB.RunCreation.Solution> GetSolutions(long problemId);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IRunCreationService/GetSolutions", ReplyAction="http://tempuri.org/IRunCreationService/GetSolutionsResponse")]
+        System.Threading.Tasks.Task<System.Collections.Generic.List<HeuristicLab.Clients.OKB.RunCreation.Solution>> GetSolutionsAsync(long problemId);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IRunCreationService/GetSolution", ReplyAction="http://tempuri.org/IRunCreationService/GetSolutionResponse")]
+        HeuristicLab.Clients.OKB.RunCreation.Solution GetSolution(long solutionId);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IRunCreationService/GetSolution", ReplyAction="http://tempuri.org/IRunCreationService/GetSolutionResponse")]
+        System.Threading.Tasks.Task<HeuristicLab.Clients.OKB.RunCreation.Solution> GetSolutionAsync(long solutionId);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IRunCreationService/GetSolutionData", ReplyAction="http://tempuri.org/IRunCreationService/GetSolutionDataResponse")]
+        [System.ServiceModel.FaultContractAttribute(typeof(HeuristicLab.Clients.OKB.RunCreation.MissingSolution), Action="http://tempuri.org/IRunCreationService/GetSolutionDataMissingSolutionFault", Name="MissingSolution", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.RunCreation")]
+        byte[] GetSolutionData(long solutionId);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IRunCreationService/GetSolutionData", ReplyAction="http://tempuri.org/IRunCreationService/GetSolutionDataResponse")]
+        System.Threading.Tasks.Task<byte[]> GetSolutionDataAsync(long solutionId);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IRunCreationService/AddSolution", ReplyAction="http://tempuri.org/IRunCreationService/AddSolutionResponse")]
+        long AddSolution(HeuristicLab.Clients.OKB.RunCreation.Solution solution, byte[] data);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IRunCreationService/AddSolution", ReplyAction="http://tempuri.org/IRunCreationService/AddSolutionResponse")]
+        System.Threading.Tasks.Task<long> AddSolutionAsync(HeuristicLab.Clients.OKB.RunCreation.Solution solution, byte[] data);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IRunCreationService/DeleteSolution", ReplyAction="http://tempuri.org/IRunCreationService/DeleteSolutionResponse")]
+        void DeleteSolution(HeuristicLab.Clients.OKB.RunCreation.Solution solution);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IRunCreationService/DeleteSolution", ReplyAction="http://tempuri.org/IRunCreationService/DeleteSolutionResponse")]
+        System.Threading.Tasks.Task DeleteSolutionAsync(HeuristicLab.Clients.OKB.RunCreation.Solution solution);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IRunCreationService/AddRun", ReplyAction="http://tempuri.org/IRunCreationService/AddRunResponse")]
+        void AddRun(HeuristicLab.Clients.OKB.RunCreation.Run run);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IRunCreationService/AddRun", ReplyAction="http://tempuri.org/IRunCreationService/AddRunResponse")]
+        System.Threading.Tasks.Task AddRunAsync(HeuristicLab.Clients.OKB.RunCreation.Run run);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IRunCreationService/GetCharacteristicValues", ReplyAction="http://tempuri.org/IRunCreationService/GetCharacteristicValuesResponse")]
+        System.Collections.Generic.List<HeuristicLab.Clients.OKB.RunCreation.Value> GetCharacteristicValues(long problemId);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IRunCreationService/GetCharacteristicValues", ReplyAction="http://tempuri.org/IRunCreationService/GetCharacteristicValuesResponse")]
+        System.Threading.Tasks.Task<System.Collections.Generic.List<HeuristicLab.Clients.OKB.RunCreation.Value>> GetCharacteristicValuesAsync(long problemId);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IRunCreationService/SetCharacteristicValue", ReplyAction="http://tempuri.org/IRunCreationService/SetCharacteristicValueResponse")]
+        [System.ServiceModel.FaultContractAttribute(typeof(HeuristicLab.Clients.OKB.RunCreation.MissingProblem), Action="http://tempuri.org/IRunCreationService/SetCharacteristicValueMissingProblemFault", Name="MissingProblem", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.RunCreation")]
+        [System.ServiceModel.FaultContractAttribute(typeof(HeuristicLab.Clients.OKB.RunCreation.UnknownCharacteristicType), Action="http://tempuri.org/IRunCreationService/SetCharacteristicValueUnknownCharacteristi" +
+            "cTypeFault", Name="UnknownCharacteristicType", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.RunCreation")]
+        void SetCharacteristicValue(long problemId, HeuristicLab.Clients.OKB.RunCreation.Value value);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IRunCreationService/SetCharacteristicValue", ReplyAction="http://tempuri.org/IRunCreationService/SetCharacteristicValueResponse")]
+        System.Threading.Tasks.Task SetCharacteristicValueAsync(long problemId, HeuristicLab.Clients.OKB.RunCreation.Value value);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IRunCreationService/SetCharacteristicValues", ReplyAction="http://tempuri.org/IRunCreationService/SetCharacteristicValuesResponse")]
+        [System.ServiceModel.FaultContractAttribute(typeof(HeuristicLab.Clients.OKB.RunCreation.UnknownCharacteristicType), Action="http://tempuri.org/IRunCreationService/SetCharacteristicValuesUnknownCharacterist" +
+            "icTypeFault", Name="UnknownCharacteristicType", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.RunCreation")]
+        [System.ServiceModel.FaultContractAttribute(typeof(HeuristicLab.Clients.OKB.RunCreation.MissingProblem), Action="http://tempuri.org/IRunCreationService/SetCharacteristicValuesMissingProblemFault" +
+            "", Name="MissingProblem", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.RunCreation")]
+        void SetCharacteristicValues(long problemId, System.Collections.Generic.List<HeuristicLab.Clients.OKB.RunCreation.Value> values);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IRunCreationService/SetCharacteristicValues", ReplyAction="http://tempuri.org/IRunCreationService/SetCharacteristicValuesResponse")]
+        System.Threading.Tasks.Task SetCharacteristicValuesAsync(long problemId, System.Collections.Generic.List<HeuristicLab.Clients.OKB.RunCreation.Value> values);
+    }
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+    public interface IRunCreationServiceChannel : HeuristicLab.Clients.OKB.RunCreation.IRunCreationService, System.ServiceModel.IClientChannel
+    {
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+    public partial class RunCreationServiceClient : System.ServiceModel.ClientBase<HeuristicLab.Clients.OKB.RunCreation.IRunCreationService>, HeuristicLab.Clients.OKB.RunCreation.IRunCreationService
+    {
+        
+        public RunCreationServiceClient()
+        {
+        }
+        
+        public RunCreationServiceClient(string endpointConfigurationName) : 
+                base(endpointConfigurationName)
+        {
+        }
+        
+        public RunCreationServiceClient(string endpointConfigurationName, string remoteAddress) : 
+                base(endpointConfigurationName, remoteAddress)
+        {
+        }
+        
+        public RunCreationServiceClient(string endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) : 
+                base(endpointConfigurationName, remoteAddress)
+        {
+        }
+        
+        public RunCreationServiceClient(System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress) : 
+                base(binding, remoteAddress)
+        {
+        }
+        
+        public System.Collections.Generic.List<HeuristicLab.Clients.OKB.RunCreation.Algorithm> GetAlgorithms(string platformName)
+        {
+            return base.Channel.GetAlgorithms(platformName);
+        }
+        
+        public System.Threading.Tasks.Task<System.Collections.Generic.List<HeuristicLab.Clients.OKB.RunCreation.Algorithm>> GetAlgorithmsAsync(string platformName)
+        {
+            return base.Channel.GetAlgorithmsAsync(platformName);
+        }
+        
+        public byte[] GetAlgorithmData(long algorithmId)
+        {
+            return base.Channel.GetAlgorithmData(algorithmId);
+        }
+        
+        public System.Threading.Tasks.Task<byte[]> GetAlgorithmDataAsync(long algorithmId)
+        {
+            return base.Channel.GetAlgorithmDataAsync(algorithmId);
+        }
+        
+        public System.Collections.Generic.List<HeuristicLab.Clients.OKB.RunCreation.Problem> GetProblems(string platformName)
+        {
+            return base.Channel.GetProblems(platformName);
+        }
+        
+        public System.Threading.Tasks.Task<System.Collections.Generic.List<HeuristicLab.Clients.OKB.RunCreation.Problem>> GetProblemsAsync(string platformName)
+        {
+            return base.Channel.GetProblemsAsync(platformName);
+        }
+        
+        public byte[] GetProblemData(long problemId)
+        {
+            return base.Channel.GetProblemData(problemId);
+        }
+        
+        public System.Threading.Tasks.Task<byte[]> GetProblemDataAsync(long problemId)
+        {
+            return base.Channel.GetProblemDataAsync(problemId);
+        }
+        
+        public System.Collections.Generic.List<HeuristicLab.Clients.OKB.RunCreation.Solution> GetSolutions(long problemId)
+        {
+            return base.Channel.GetSolutions(problemId);
+        }
+        
+        public System.Threading.Tasks.Task<System.Collections.Generic.List<HeuristicLab.Clients.OKB.RunCreation.Solution>> GetSolutionsAsync(long problemId)
+        {
+            return base.Channel.GetSolutionsAsync(problemId);
+        }
+        
+        public HeuristicLab.Clients.OKB.RunCreation.Solution GetSolution(long solutionId)
+        {
+            return base.Channel.GetSolution(solutionId);
+        }
+        
+        public System.Threading.Tasks.Task<HeuristicLab.Clients.OKB.RunCreation.Solution> GetSolutionAsync(long solutionId)
+        {
+            return base.Channel.GetSolutionAsync(solutionId);
+        }
+        
+        public byte[] GetSolutionData(long solutionId)
+        {
+            return base.Channel.GetSolutionData(solutionId);
+        }
+        
+        public System.Threading.Tasks.Task<byte[]> GetSolutionDataAsync(long solutionId)
+        {
+            return base.Channel.GetSolutionDataAsync(solutionId);
+        }
+        
+        public long AddSolution(HeuristicLab.Clients.OKB.RunCreation.Solution solution, byte[] data)
+        {
+            return base.Channel.AddSolution(solution, data);
+        }
+        
+        public System.Threading.Tasks.Task<long> AddSolutionAsync(HeuristicLab.Clients.OKB.RunCreation.Solution solution, byte[] data)
+        {
+            return base.Channel.AddSolutionAsync(solution, data);
+        }
+        
+        public void DeleteSolution(HeuristicLab.Clients.OKB.RunCreation.Solution solution)
+        {
+            base.Channel.DeleteSolution(solution);
+        }
+        
+        public System.Threading.Tasks.Task DeleteSolutionAsync(HeuristicLab.Clients.OKB.RunCreation.Solution solution)
+        {
+            return base.Channel.DeleteSolutionAsync(solution);
+        }
+        
+        public void AddRun(HeuristicLab.Clients.OKB.RunCreation.Run run)
+        {
+            base.Channel.AddRun(run);
+        }
+        
+        public System.Threading.Tasks.Task AddRunAsync(HeuristicLab.Clients.OKB.RunCreation.Run run)
+        {
+            return base.Channel.AddRunAsync(run);
+        }
+        
+        public System.Collections.Generic.List<HeuristicLab.Clients.OKB.RunCreation.Value> GetCharacteristicValues(long problemId)
+        {
+            return base.Channel.GetCharacteristicValues(problemId);
+        }
+        
+        public System.Threading.Tasks.Task<System.Collections.Generic.List<HeuristicLab.Clients.OKB.RunCreation.Value>> GetCharacteristicValuesAsync(long problemId)
+        {
+            return base.Channel.GetCharacteristicValuesAsync(problemId);
+        }
+        
+        public void SetCharacteristicValue(long problemId, HeuristicLab.Clients.OKB.RunCreation.Value value)
+        {
+            base.Channel.SetCharacteristicValue(problemId, value);
+        }
+        
+        public System.Threading.Tasks.Task SetCharacteristicValueAsync(long problemId, HeuristicLab.Clients.OKB.RunCreation.Value value)
+        {
+            return base.Channel.SetCharacteristicValueAsync(problemId, value);
+        }
+        
+        public void SetCharacteristicValues(long problemId, System.Collections.Generic.List<HeuristicLab.Clients.OKB.RunCreation.Value> values)
+        {
+            base.Channel.SetCharacteristicValues(problemId, values);
+        }
+        
+        public System.Threading.Tasks.Task SetCharacteristicValuesAsync(long problemId, System.Collections.Generic.List<HeuristicLab.Clients.OKB.RunCreation.Value> values)
+        {
+            return base.Channel.SetCharacteristicValuesAsync(problemId, values);
+        }
+    }
 }
Index: /stable/HeuristicLab.Clients.OKB/3.3/RunCreation/SingleObjectiveOKBSolution.cs
===================================================================
--- /stable/HeuristicLab.Clients.OKB/3.3/RunCreation/SingleObjectiveOKBSolution.cs	(revision 15082)
+++ /stable/HeuristicLab.Clients.OKB/3.3/RunCreation/SingleObjectiveOKBSolution.cs	(revision 15082)
@@ -0,0 +1,105 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2016 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 HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Persistence.Default.Xml;
+using System;
+using System.IO;
+
+namespace HeuristicLab.Clients.OKB.RunCreation {
+  [Item("OKB Solution (single-objective)", "")]
+  [StorableClass]
+  public sealed class SingleObjectiveOKBSolution : OKBSolution {
+    [Storable]
+    private double quality;
+    public double Quality {
+      get { return quality; }
+      set {
+        if (quality == value) return;
+        quality = value;
+        OnQualityChanged();
+      }
+    }
+
+    [StorableConstructor]
+    private SingleObjectiveOKBSolution(bool deserializing) : base(deserializing) { }
+    private SingleObjectiveOKBSolution(SingleObjectiveOKBSolution original, Cloner cloner)
+      : base(original, cloner) {
+      quality = original.quality;
+    }
+    public SingleObjectiveOKBSolution(long problemId) : base(problemId) {
+      quality = double.NaN;
+    }
+    public SingleObjectiveOKBSolution(Solution solution) : base(solution) {
+      var soSolution = solution as SingleObjectiveSolution;
+      if (soSolution == null) throw new ArgumentException("Solution is not of type SingleObjectiveSolution", "solution");
+      Quality = soSolution.Quality;
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new SingleObjectiveOKBSolution(this, cloner);
+    }
+
+    public override void Download(long solutionId) {
+      if (SolutionId == solutionId) return;
+      byte[] solutionData = RunCreationClient.Instance.GetSolutionData(solutionId);
+      using (var stream = new MemoryStream(solutionData)) {
+        Solution = XmlParser.Deserialize<IItem>(stream);
+        SolutionId = solutionId;
+      }
+      var sol = RunCreationClient.Instance.GetSolution(solutionId);
+      ProblemId = sol.ProblemId;
+      var soSol = sol as SingleObjectiveSolution;
+      if (soSol == null) throw new InvalidOperationException(string.Format("Solution with id {0} is not a single-objective solution.", solutionId));
+      Quality = soSol.Quality;
+    }
+
+    public override void DownloadData() {
+      using (var stream = new MemoryStream(RunCreationClient.Instance.GetSolutionData(SolutionId))) {
+        Solution = XmlParser.Deserialize<IItem>(stream);
+      }
+    }
+
+    public override void Upload() {
+      if (SolutionId != -1) throw new InvalidOperationException("Solution exists already.");
+      using (var stream = new MemoryStream()) {
+        if (Solution != null) XmlGenerator.Serialize(Solution, stream);
+        SolutionId = RunCreationClient.Instance.AddSolution(
+          new SingleObjectiveSolution() {
+            ProblemId = ProblemId,
+            Quality = Quality,
+            DataType = Solution != null ? new DataType() {
+              Name = Solution.GetType().Name,
+              TypeName = Solution.GetType().FullName
+            } : null
+          }, stream.ToArray());
+      }
+    }
+
+    public event EventHandler QualityChanged;
+    private void OnQualityChanged() {
+      var handler = QualityChanged;
+      if  (handler != null) handler(this, EventArgs.Empty);
+    }
+  }
+}
Index: /stable/HeuristicLab.Services.OKB.DataAccess/3.3/OKB.dbml
===================================================================
--- /stable/HeuristicLab.Services.OKB.DataAccess/3.3/OKB.dbml	(revision 15081)
+++ /stable/HeuristicLab.Services.OKB.DataAccess/3.3/OKB.dbml	(revision 15082)
@@ -49,4 +49,5 @@
       <Association Name="DataType_Value" Member="Values" ThisKey="Id" OtherKey="DataTypeId" Type="Value" />
       <Association Name="DataType_CharacteristicValue" Member="CharacteristicValues" ThisKey="Id" OtherKey="DataTypeId" Type="CharacteristicValue" />
+      <Association Name="DataType_SingleObjectiveSolution" Member="SingleObjectiveSolutions" ThisKey="Id" OtherKey="DataTypeId" Type="SingleObjectiveSolution" />
     </Type>
   </Table>
@@ -89,4 +90,5 @@
       <Association Name="Problem_Run" Member="Runs" ThisKey="Id" OtherKey="ProblemId" Type="Run" />
       <Association Name="Problem_CharacteristicValue" Member="CharacteristicValues" ThisKey="Id" OtherKey="ProblemId" Type="CharacteristicValue" />
+      <Association Name="Problem_SingleObjectiveSolution" Member="SingleObjectiveSolutions" ThisKey="Id" OtherKey="ProblemId" Type="SingleObjectiveSolution" />
       <Association Name="DataType_Problem" Member="DataType" ThisKey="DataTypeId" OtherKey="Id" Type="DataType" IsForeignKey="true" />
       <Association Name="Platform_Problem" Member="Platform" ThisKey="PlatformId" OtherKey="Id" Type="Platform" IsForeignKey="true" />
@@ -103,4 +105,5 @@
       <Association Name="BinaryData_Problem" Member="Problems" ThisKey="Id" OtherKey="BinaryDataId" Type="Problem" />
       <Association Name="BinaryData_Value" Member="Values" ThisKey="Id" OtherKey="BinaryDataId" Type="Value" />
+      <Association Name="BinaryData_SingleObjectiveSolution" Member="SingleObjectiveSolutions" ThisKey="Id" OtherKey="BinaryDataId" Type="SingleObjectiveSolution" />
     </Type>
   </Table>
@@ -114,4 +117,5 @@
       <Column Name="ClientId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" CanBeNull="false" />
       <Association Name="Run_Value" Member="Values" ThisKey="Id" OtherKey="RunId" Type="Value" />
+      <Association Name="Run_SingleObjectiveSolution" Member="SingleObjectiveSolutions" ThisKey="Id" OtherKey="RunId" Type="SingleObjectiveSolution" />
       <Association Name="Algorithm_Run" Member="Algorithm" ThisKey="AlgorithmId" OtherKey="Id" Type="Algorithm" IsForeignKey="true" />
       <Association Name="Problem_Run" Member="Problem" ThisKey="ProblemId" OtherKey="Id" Type="Problem" IsForeignKey="true" />
@@ -162,3 +166,17 @@
     </Type>
   </Table>
+  <Table Name="dbo.SingleObjectiveSolution" Member="SingleObjectiveSolutions">
+    <Type Name="SingleObjectiveSolution">
+      <Column Name="Id" Type="System.Int64" DbType="BigInt NOT NULL IDENTITY" IsPrimaryKey="true" IsDbGenerated="true" CanBeNull="false" />
+      <Column Name="ProblemId" Type="System.Int64" DbType="BigInt" CanBeNull="true" />
+      <Column Name="BinaryDataId" Type="System.Int64" DbType="BigInt" CanBeNull="true" />
+      <Column Name="RunId" Type="System.Int64" DbType="BigInt" CanBeNull="true" />
+      <Column Name="Quality" Type="System.Double" DbType="Float" CanBeNull="false" />
+      <Column Name="DataTypeId" Type="System.Int64" DbType="BigInt" CanBeNull="true" />
+      <Association Name="Problem_SingleObjectiveSolution" Member="Problem" ThisKey="ProblemId" OtherKey="Id" Type="Problem" IsForeignKey="true" />
+      <Association Name="BinaryData_SingleObjectiveSolution" Member="BinaryData" ThisKey="BinaryDataId" OtherKey="Id" Type="BinaryData" IsForeignKey="true" />
+      <Association Name="Run_SingleObjectiveSolution" Member="Run" ThisKey="RunId" OtherKey="Id" Type="Run" IsForeignKey="true" />
+      <Association Name="DataType_SingleObjectiveSolution" Member="DataType" ThisKey="DataTypeId" OtherKey="Id" Type="DataType" IsForeignKey="true" />
+    </Type>
+  </Table>
 </Database>
Index: /stable/HeuristicLab.Services.OKB.DataAccess/3.3/OKB.dbml.layout
===================================================================
--- /stable/HeuristicLab.Services.OKB.DataAccess/3.3/OKB.dbml.layout	(revision 15081)
+++ /stable/HeuristicLab.Services.OKB.DataAccess/3.3/OKB.dbml.layout	(revision 15082)
@@ -1,55 +1,55 @@
 ﻿<?xml version="1.0" encoding="utf-8"?>
-<ordesignerObjectsDiagram dslVersion="1.0.0.0" absoluteBounds="0, 0, 15.75, 11.25" name="OKB">
+<ordesignerObjectsDiagram dslVersion="1.0.0.0" absoluteBounds="0, 0, 15.75, 11.125" name="OKB">
   <DataContextMoniker Name="/OKBDataContext" />
   <nestedChildShapes>
-    <classShape Id="ec288562-8ef9-46b8-a2dc-a471fec7afb8" absoluteBounds="0.5, 0.5, 2, 1.3862939453125">
+    <classShape Id="ec288562-8ef9-46b8-a2dc-a471fec7afb8" absoluteBounds="0.5, 0.5, 2, 1.26050048828125">
       <DataClassMoniker Name="/OKBDataContext/AlgorithmClass" />
       <nestedChildShapes>
-        <elementListCompartment Id="fbed452c-662c-42d5-b89f-2b122b63aecc" absoluteBounds="0.51500000000000012, 0.96, 1.9700000000000002, 0.8262939453125" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
-      </nestedChildShapes>
-    </classShape>
-    <classShape Id="018aceac-7bd0-4fdd-8cca-d219aa08a5b5" absoluteBounds="13.5, 0.5, 2, 1.3862939453125">
+        <elementListCompartment Id="fbed452c-662c-42d5-b89f-2b122b63aecc" absoluteBounds="0.51500000000000012, 0.96, 1.9700000000000002, 0.70050048828125" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <classShape Id="018aceac-7bd0-4fdd-8cca-d219aa08a5b5" absoluteBounds="13.5, 0.5, 2, 1.26050048828125">
       <DataClassMoniker Name="/OKBDataContext/ProblemClass" />
       <nestedChildShapes>
-        <elementListCompartment Id="2958536f-012b-4eb7-8bc7-453edcda1493" absoluteBounds="13.515, 0.96, 1.9700000000000002, 0.8262939453125" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
-      </nestedChildShapes>
-    </classShape>
-    <classShape Id="aa997e47-0162-4fc2-aa8d-e237c50c46fe" absoluteBounds="0.5, 2.125, 2, 1.1939925130208331">
+        <elementListCompartment Id="2958536f-012b-4eb7-8bc7-453edcda1493" absoluteBounds="13.515, 0.96, 1.9700000000000002, 0.70050048828125" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <classShape Id="aa997e47-0162-4fc2-aa8d-e237c50c46fe" absoluteBounds="0.5, 2.125, 2, 1.0961531575520831">
       <DataClassMoniker Name="/OKBDataContext/AlgorithmUser" />
       <nestedChildShapes>
-        <elementListCompartment Id="f81c31a9-84c5-40b1-b817-6dccbe77227d" absoluteBounds="0.51500000000000057, 2.5850000000000009, 1.9700000000000002, 0.63399251302083326" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
-      </nestedChildShapes>
-    </classShape>
-    <classShape Id="8d911be4-13c4-4abd-85de-4f93f280dd50" absoluteBounds="13.5, 2.125, 2, 1.1939925130208331">
+        <elementListCompartment Id="f81c31a9-84c5-40b1-b817-6dccbe77227d" absoluteBounds="0.51500000000000057, 2.5850000000000009, 1.9700000000000002, 0.53615315755208326" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <classShape Id="8d911be4-13c4-4abd-85de-4f93f280dd50" absoluteBounds="13.5, 2.125, 2, 1.0961531575520831">
       <DataClassMoniker Name="/OKBDataContext/ProblemUser" />
       <nestedChildShapes>
-        <elementListCompartment Id="bdf4bd9d-405f-4582-99ff-036459c86748" absoluteBounds="13.515, 2.5850000000000009, 1.9700000000000002, 0.63399251302083326" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
-      </nestedChildShapes>
-    </classShape>
-    <classShape Id="42a9e8c0-3168-43f0-a31f-54d1558bd4c2" absoluteBounds="7, 0.5, 2, 1.3862939453125">
+        <elementListCompartment Id="bdf4bd9d-405f-4582-99ff-036459c86748" absoluteBounds="13.515, 2.5850000000000009, 1.9700000000000002, 0.53615315755208326" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <classShape Id="42a9e8c0-3168-43f0-a31f-54d1558bd4c2" absoluteBounds="7, 0.5, 2, 1.26050048828125">
       <DataClassMoniker Name="/OKBDataContext/Platform" />
       <nestedChildShapes>
-        <elementListCompartment Id="83ab4fa2-80aa-4c36-9596-bc4d9a0c6daf" absoluteBounds="7.0150000000000006, 0.96, 1.9700000000000002, 0.8262939453125" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
-      </nestedChildShapes>
-    </classShape>
-    <classShape Id="34f5a12b-f109-4606-baf8-6ddfde7c1b34" absoluteBounds="7, 2.125, 2, 1.3862939453125">
+        <elementListCompartment Id="83ab4fa2-80aa-4c36-9596-bc4d9a0c6daf" absoluteBounds="7.0150000000000006, 0.96, 1.9700000000000002, 0.70050048828125" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <classShape Id="34f5a12b-f109-4606-baf8-6ddfde7c1b34" absoluteBounds="7, 2.125, 2, 1.26050048828125">
       <DataClassMoniker Name="/OKBDataContext/DataType" />
       <nestedChildShapes>
-        <elementListCompartment Id="1dacac40-e283-48e9-a98d-dddbc6b4fd48" absoluteBounds="7.0150000000000006, 2.585, 1.9700000000000002, 0.8262939453125" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
-      </nestedChildShapes>
-    </classShape>
-    <classShape Id="c75911bf-ae6d-421c-9219-e027c3059390" absoluteBounds="3.5, 4, 2, 1.5785953776041666">
+        <elementListCompartment Id="1dacac40-e283-48e9-a98d-dddbc6b4fd48" absoluteBounds="7.0150000000000006, 2.585, 1.9700000000000002, 0.70050048828125" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <classShape Id="c75911bf-ae6d-421c-9219-e027c3059390" absoluteBounds="3.5, 4, 2, 1.4248478190104166">
       <DataClassMoniker Name="/OKBDataContext/ValueName" />
       <nestedChildShapes>
-        <elementListCompartment Id="5aadda7d-ee09-475a-a2d1-e153615911b4" absoluteBounds="3.5149999999999997, 4.46, 1.9700000000000002, 1.0185953776041665" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
-      </nestedChildShapes>
-    </classShape>
-    <classShape Id="be37de9e-465a-4d06-9dd6-3c3f7f1f07fa" absoluteBounds="2.75, 0.5, 2, 2.1554996744791666">
+        <elementListCompartment Id="5aadda7d-ee09-475a-a2d1-e153615911b4" absoluteBounds="3.5149999999999997, 4.46, 1.9700000000000002, 0.86484781901041663" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <classShape Id="be37de9e-465a-4d06-9dd6-3c3f7f1f07fa" absoluteBounds="2.75, 0.5, 2, 1.9178898111979166">
       <DataClassMoniker Name="/OKBDataContext/Algorithm" />
       <nestedChildShapes>
-        <elementListCompartment Id="5d0e5084-c74f-469d-bb56-da81ce2ce8d4" absoluteBounds="2.7650000000000006, 0.96, 1.9700000000000002, 1.5954996744791665" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
-      </nestedChildShapes>
-    </classShape>
-    <associationConnector edgePoints="[(2.75 : 2.39024983723958); (2.5 : 2.39024983723958)]" fixedFrom="NotFixed" fixedTo="NotFixed">
+        <elementListCompartment Id="5d0e5084-c74f-469d-bb56-da81ce2ce8d4" absoluteBounds="2.7650000000000006, 0.96, 1.9700000000000002, 1.3578898111979165" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <associationConnector edgePoints="[(2.75 : 2.21452838459845); (2.62712 : 2.21452838459845); (2.62712 : 2.32099938104692); (2.5 : 2.32099938104692)]" fixedFrom="Caller" fixedTo="Caller">
       <AssociationMoniker Name="/OKBDataContext/Algorithm/Algorithm_AlgorithmUser" />
       <nodes>
@@ -58,5 +58,5 @@
       </nodes>
     </associationConnector>
-    <associationConnector edgePoints="[(2.5 : 1.19314697265625); (2.75 : 1.19314697265625)]" fixedFrom="NotFixed" fixedTo="NotFixed">
+    <associationConnector edgePoints="[(2.5 : 0.916972452799479); (2.75 : 0.916972452799479)]" fixedFrom="Algorithm" fixedTo="Algorithm">
       <AssociationMoniker Name="/OKBDataContext/AlgorithmClass/AlgorithmClass_Algorithm" />
       <nodes>
@@ -65,5 +65,5 @@
       </nodes>
     </associationConnector>
-    <associationConnector edgePoints="[(7 : 2.39024983723958); (4.75 : 2.39024983723958)]" fixedFrom="NotFixed" fixedTo="NotFixed">
+    <associationConnector edgePoints="[(7 : 2.90169564973958); (3.75 : 2.90169564973958); (3.75 : 2.41788981119792)]" fixedFrom="Algorithm" fixedTo="Algorithm">
       <AssociationMoniker Name="/OKBDataContext/DataType/DataType_Algorithm" />
       <nodes>
@@ -72,5 +72,5 @@
       </nodes>
     </associationConnector>
-    <associationConnector edgePoints="[(7 : 1.19314697265625); (4.75 : 1.19314697265625)]" fixedFrom="NotFixed" fixedTo="NotFixed">
+    <associationConnector edgePoints="[(7 : 1.13025024414063); (4.75 : 1.13025024414063)]" fixedFrom="Algorithm" fixedTo="Algorithm">
       <AssociationMoniker Name="/OKBDataContext/Platform/Platform_Algorithm" />
       <nodes>
@@ -79,8 +79,8 @@
       </nodes>
     </associationConnector>
-    <classShape Id="f197afc9-8f2b-4dae-b87e-43c2c87796bb" absoluteBounds="11.25, 0.5, 2, 2.1554996744791666">
+    <classShape Id="f197afc9-8f2b-4dae-b87e-43c2c87796bb" absoluteBounds="11.25, 0.5, 2, 1.9178898111979166">
       <DataClassMoniker Name="/OKBDataContext/Problem" />
       <nestedChildShapes>
-        <elementListCompartment Id="9feb3034-0748-47df-aa82-41b7c3e8cdbd" absoluteBounds="11.265, 0.96, 1.9700000000000002, 1.5954996744791665" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+        <elementListCompartment Id="9feb3034-0748-47df-aa82-41b7c3e8cdbd" absoluteBounds="11.265, 0.96, 1.9700000000000002, 1.3578898111979165" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
       </nestedChildShapes>
     </classShape>
@@ -113,11 +113,11 @@
       </nodes>
     </associationConnector>
-    <classShape Id="c2a69525-596c-4c58-a8cb-cb8c616f52d1" absoluteBounds="7, 9.625, 2, 1.3862939453125">
+    <classShape Id="c2a69525-596c-4c58-a8cb-cb8c616f52d1" absoluteBounds="7, 9.625, 2, 1.2605004882812505">
       <DataClassMoniker Name="/OKBDataContext/BinaryData" />
       <nestedChildShapes>
-        <elementListCompartment Id="d8ba4b42-b034-4f4d-88c6-ccc998db2567" absoluteBounds="7.0150000000000006, 10.085, 1.9700000000000002, 0.8262939453125" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
-      </nestedChildShapes>
-    </classShape>
-    <associationConnector edgePoints="[(7 : 10.3181469726562); (2.98333686713063 : 10.3181469726562); (2.98333686713063 : 2.65549967447917)]" fixedFrom="NotFixed" fixedTo="NotFixed">
+        <elementListCompartment Id="d8ba4b42-b034-4f4d-88c6-ccc998db2567" absoluteBounds="7.0150000000000006, 10.085, 1.9700000000000002, 0.70050048828125" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <associationConnector edgePoints="[(7 : 10.2552502441406); (3.09375 : 10.2552502441406); (3.09375 : 2.41788981119792)]" fixedFrom="Algorithm" fixedTo="Algorithm">
       <AssociationMoniker Name="/OKBDataContext/BinaryData/BinaryData_Algorithm" />
       <nodes>
@@ -126,5 +126,5 @@
       </nodes>
     </associationConnector>
-    <associationConnector edgePoints="[(9 : 10.3181469726562); (13.0131477507419 : 10.3181469726562); (13.0131477507419 : 2.65549967447917)]" fixedFrom="NotFixed" fixedTo="NotFixed">
+    <associationConnector edgePoints="[(9 : 9.94921858039234); (12.9483480024624 : 9.94921858039234); (12.9483480024624 : 2.41788981119792)]" fixedFrom="Caller" fixedTo="Caller">
       <AssociationMoniker Name="/OKBDataContext/BinaryData/BinaryData_Problem" />
       <nodes>
@@ -133,11 +133,11 @@
       </nodes>
     </associationConnector>
-    <classShape Id="65934fe9-4206-4d20-971b-1afacf645311" absoluteBounds="5.75, 7.25, 2, 1.9631982421875005">
+    <classShape Id="65934fe9-4206-4d20-971b-1afacf645311" absoluteBounds="5.75, 7.25, 2, 1.7535424804687505">
       <DataClassMoniker Name="/OKBDataContext/Run" />
       <nestedChildShapes>
-        <elementListCompartment Id="14f0104d-03c2-4aec-9a4d-faeaaa1d8947" absoluteBounds="5.7650000000000006, 7.7100000000000009, 1.9700000000000002, 1.4031982421875" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
-      </nestedChildShapes>
-    </classShape>
-    <associationConnector edgePoints="[(3.24167093356531 : 2.65549967447917); (3.24167093356531 : 8.23159912109375); (5.75 : 8.23159912109375)]" fixedFrom="NotFixed" fixedTo="NotFixed">
+        <elementListCompartment Id="14f0104d-03c2-4aec-9a4d-faeaaa1d8947" absoluteBounds="5.7650000000000006, 7.7100000000000009, 1.9700000000000002, 1.19354248046875" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <associationConnector edgePoints="[(3.2968775 : 2.41788981119792); (3.2968775 : 8.12677124023438); (5.75 : 8.12677124023438)]" fixedFrom="Algorithm" fixedTo="Algorithm">
       <AssociationMoniker Name="/OKBDataContext/Algorithm/Algorithm_Run" />
       <nodes>
@@ -146,5 +146,5 @@
       </nodes>
     </associationConnector>
-    <associationConnector edgePoints="[(12.7565713753709 : 2.65549967447917); (12.7565713753709 : 8.23159912109375); (8.13243692318721 : 8.23159912109375 : JumpStart); (7.96577025652055 : 8.23159912109375 : JumpEnd); (7.75 : 8.23159912109375)]" fixedFrom="NotFixed" fixedTo="NotFixed">
+    <associationConnector edgePoints="[(12.7603838147602 : 2.41788981119792); (12.7603838147602 : 7.49340240799753); (8.13243692318721 : 7.49340240799753 : JumpStart); (7.96577025652055 : 7.49340240799753 : JumpEnd); (7.75 : 7.49340240799753)]" fixedFrom="Caller" fixedTo="Caller">
       <AssociationMoniker Name="/OKBDataContext/Problem/Problem_Run" />
       <nodes>
@@ -153,11 +153,11 @@
       </nodes>
     </associationConnector>
-    <classShape Id="7d592fcd-d7a9-4ad0-a69f-9d29b97d9995" absoluteBounds="5.75, 4, 2, 2.9247054036458331">
+    <classShape Id="7d592fcd-d7a9-4ad0-a69f-9d29b97d9995" absoluteBounds="5.75, 4, 2, 2.5752791341145826">
       <DataClassMoniker Name="/OKBDataContext/Value" />
       <nestedChildShapes>
-        <elementListCompartment Id="89ad14d6-7946-43fe-af7c-59ce9fbe1d96" absoluteBounds="5.7650000000000006, 4.46, 1.9700000000000002, 2.364705403645833" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
-      </nestedChildShapes>
-    </classShape>
-    <associationConnector edgePoints="[(8.04910358985388 : 9.625); (8.04910358985388 : 5.45496831242535); (7.75 : 5.45496831242535)]" manuallyRouted="true" fixedFrom="NotFixed" fixedTo="NotFixed">
+        <elementListCompartment Id="89ad14d6-7946-43fe-af7c-59ce9fbe1d96" absoluteBounds="5.7650000000000006, 4.46, 1.9700000000000002, 2.015279134114583" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <associationConnector edgePoints="[(8.04910358985388 : 9.625); (8.04910358985388 : 5.45496831242535); (7.75 : 5.45496831242535)]" manuallyRouted="true" fixedFrom="Algorithm" fixedTo="Algorithm">
       <AssociationMoniker Name="/OKBDataContext/BinaryData/BinaryData_Value" />
       <nodes>
@@ -173,5 +173,5 @@
       </nodes>
     </associationConnector>
-    <associationConnector edgePoints="[(6.72310950465391 : 7.25); (6.72027766059957 : 6.92470540364583)]" manuallyRouted="true" fixedFrom="NotFixed" fixedTo="NotFixed">
+    <associationConnector edgePoints="[(6.72310950465391 : 7.25); (6.71723573886188 : 6.57527913411458)]" manuallyRouted="true" fixedFrom="Algorithm" fixedTo="Algorithm">
       <AssociationMoniker Name="/OKBDataContext/Run/Run_Value" />
       <nodes>
@@ -187,14 +187,14 @@
       </nodes>
     </associationConnector>
-    <classShape Id="7fb3c838-3d13-4b45-9912-1b5733a61110" absoluteBounds="10.5, 4, 2, 1.3862939453125">
+    <classShape Id="7fb3c838-3d13-4b45-9912-1b5733a61110" absoluteBounds="10.5, 4, 2, 1.2605004882812496">
       <DataClassMoniker Name="/OKBDataContext/Characteristic" />
       <nestedChildShapes>
-        <elementListCompartment Id="861faa11-366e-46d5-8fcb-1cef297d1920" absoluteBounds="10.515, 4.46, 1.9700000000000002, 0.8262939453125" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
-      </nestedChildShapes>
-    </classShape>
-    <classShape Id="78f1d8c1-299d-46f8-90b5-e79d3904a0e6" absoluteBounds="8.25, 4, 2, 2.7324039713541666">
+        <elementListCompartment Id="861faa11-366e-46d5-8fcb-1cef297d1920" absoluteBounds="10.515, 4.46, 1.9700000000000002, 0.70050048828125" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <classShape Id="78f1d8c1-299d-46f8-90b5-e79d3904a0e6" absoluteBounds="8.25, 4, 2, 2.4109318033854166">
       <DataClassMoniker Name="/OKBDataContext/CharacteristicValue" />
       <nestedChildShapes>
-        <elementListCompartment Id="c197bfb3-c90d-42e4-91a8-17775b4cc933" absoluteBounds="8.265, 4.46, 1.9700000000000002, 2.1724039713541665" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+        <elementListCompartment Id="c197bfb3-c90d-42e4-91a8-17775b4cc933" absoluteBounds="8.265, 4.46, 1.9700000000000002, 1.8509318033854165" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
       </nestedChildShapes>
     </classShape>
@@ -206,5 +206,5 @@
       </nodes>
     </associationConnector>
-    <associationConnector edgePoints="[(8.68784173221247 : 3.5112939453125); (8.68784173221247 : 4)]" fixedFrom="NotFixed" fixedTo="NotFixed">
+    <associationConnector edgePoints="[(8.43436125277367 : 3.38550048828125); (8.43436125277367 : 4)]" fixedFrom="Caller" fixedTo="Algorithm">
       <AssociationMoniker Name="/OKBDataContext/DataType/DataType_CharacteristicValue" />
       <nodes>
@@ -213,9 +213,43 @@
       </nodes>
     </associationConnector>
-    <associationConnector edgePoints="[(11.8118610455891 : 2.65549967447917); (11.8118610455891 : 3.0432292702094); (9.62689159819655 : 3.0432292702094); (9.62689159819655 : 4)]" manuallyRouted="true" fixedFrom="NotFixed" fixedTo="NotFixed">
+    <associationConnector edgePoints="[(11.8118610455891 : 2.41788981119792); (11.8118610455891 : 3.0432292702094); (9.62689159819655 : 3.0432292702094); (9.62689159819655 : 4)]" manuallyRouted="true" fixedFrom="Algorithm" fixedTo="Algorithm">
       <AssociationMoniker Name="/OKBDataContext/Problem/Problem_CharacteristicValue" />
       <nodes>
         <classShapeMoniker Id="f197afc9-8f2b-4dae-b87e-43c2c87796bb" />
         <classShapeMoniker Id="78f1d8c1-299d-46f8-90b5-e79d3904a0e6" />
+      </nodes>
+    </associationConnector>
+    <classShape Id="fe9ab60f-6e76-4363-ac1d-3e5711f402cd" absoluteBounds="13.5, 3.75, 2, 1.7535424804687496">
+      <DataClassMoniker Name="/OKBDataContext/SingleObjectiveSolution" />
+      <nestedChildShapes>
+        <elementListCompartment Id="a283b96a-8121-4153-9c1c-8ebbbbe99f2c" absoluteBounds="13.515, 4.2100000000000009, 1.9700000000000002, 1.19354248046875" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <associationConnector edgePoints="[(13.1361579720891 : 2.41788981119792); (13.1361579720891 : 3.45); (13.8726600840611 : 3.45); (13.8726600840611 : 3.75)]" fixedFrom="Caller" fixedTo="Caller">
+      <AssociationMoniker Name="/OKBDataContext/Problem/Problem_SingleObjectiveSolution" />
+      <nodes>
+        <classShapeMoniker Id="f197afc9-8f2b-4dae-b87e-43c2c87796bb" />
+        <classShapeMoniker Id="fe9ab60f-6e76-4363-ac1d-3e5711f402cd" />
+      </nodes>
+    </associationConnector>
+    <associationConnector edgePoints="[(9 : 10.3033576284925); (14.510357295819 : 10.3033576284925); (14.510357295819 : 5.50354248046875)]" fixedFrom="Caller" fixedTo="Caller">
+      <AssociationMoniker Name="/OKBDataContext/BinaryData/BinaryData_SingleObjectiveSolution" />
+      <nodes>
+        <classShapeMoniker Id="c2a69525-596c-4c58-a8cb-cb8c616f52d1" />
+        <classShapeMoniker Id="fe9ab60f-6e76-4363-ac1d-3e5711f402cd" />
+      </nodes>
+    </associationConnector>
+    <associationConnector edgePoints="[(7.75 : 8.27972494423314); (7.96577025652055 : 8.27972494423314 : JumpStart); (8.13243692318721 : 8.27972494423314 : JumpEnd); (12.865014669129 : 8.27972494423314 : JumpStart); (13.0316813357957 : 8.27972494423314 : JumpEnd); (13.9739261479095 : 8.27972494423314); (13.9739261479095 : 5.50354248046875)]" fixedFrom="Algorithm" fixedTo="Algorithm">
+      <AssociationMoniker Name="/OKBDataContext/Run/Run_SingleObjectiveSolution" />
+      <nodes>
+        <classShapeMoniker Id="65934fe9-4206-4d20-971b-1afacf645311" />
+        <classShapeMoniker Id="fe9ab60f-6e76-4363-ac1d-3e5711f402cd" />
+      </nodes>
+    </associationConnector>
+    <associationConnector edgePoints="[(8.77843010499566 : 3.38550048828125); (8.77843010499566 : 3.77510427976719); (9.54355826486322 : 3.77510427976719 : JumpStart); (9.71022493152988 : 3.77510427976719 : JumpEnd); (12.6770504814268 : 3.77510427976719 : JumpStart); (12.8437171480935 : 3.77510427976719 : JumpEnd); (12.865014669129 : 3.77510427976719 : JumpStart); (13.0316813357957 : 3.77510427976719 : JumpEnd); (13.2521618458221 : 3.77510427976719); (13.2521618458221 : 4.08899946616712); (13.5 : 4.08899946616712)]" manuallyRouted="true" fixedFrom="Caller" fixedTo="Caller">
+      <AssociationMoniker Name="/OKBDataContext/DataType/DataType_SingleObjectiveSolution" />
+      <nodes>
+        <classShapeMoniker Id="34f5a12b-f109-4606-baf8-6ddfde7c1b34" />
+        <classShapeMoniker Id="fe9ab60f-6e76-4363-ac1d-3e5711f402cd" />
       </nodes>
     </associationConnector>
Index: /stable/HeuristicLab.Services.OKB.DataAccess/3.3/OKB.designer.cs
===================================================================
--- /stable/HeuristicLab.Services.OKB.DataAccess/3.3/OKB.designer.cs	(revision 15081)
+++ /stable/HeuristicLab.Services.OKB.DataAccess/3.3/OKB.designer.cs	(revision 15082)
@@ -73,4 +73,7 @@
     partial void UpdateCharacteristicValue(CharacteristicValue instance);
     partial void DeleteCharacteristicValue(CharacteristicValue instance);
+    partial void InsertSingleObjectiveSolution(SingleObjectiveSolution instance);
+    partial void UpdateSingleObjectiveSolution(SingleObjectiveSolution instance);
+    partial void DeleteSingleObjectiveSolution(SingleObjectiveSolution instance);
     #endregion
 		
@@ -214,4 +217,12 @@
 			{
 				return this.GetTable<CharacteristicValue>();
+			}
+		}
+		
+		public System.Data.Linq.Table<SingleObjectiveSolution> SingleObjectiveSolutions
+		{
+			get
+			{
+				return this.GetTable<SingleObjectiveSolution>();
 			}
 		}
@@ -934,4 +945,6 @@
 		private EntitySet<CharacteristicValue> _CharacteristicValues;
 		
+		private EntitySet<SingleObjectiveSolution> _SingleObjectiveSolutions;
+		
     #region Extensibility Method Definitions
     partial void OnLoaded();
@@ -952,4 +965,5 @@
 			this._Values = new EntitySet<Value>(new Action<Value>(this.attach_Values), new Action<Value>(this.detach_Values));
 			this._CharacteristicValues = new EntitySet<CharacteristicValue>(new Action<CharacteristicValue>(this.attach_CharacteristicValues), new Action<CharacteristicValue>(this.detach_CharacteristicValues));
+			this._SingleObjectiveSolutions = new EntitySet<SingleObjectiveSolution>(new Action<SingleObjectiveSolution>(this.attach_SingleObjectiveSolutions), new Action<SingleObjectiveSolution>(this.detach_SingleObjectiveSolutions));
 			OnCreated();
 		}
@@ -1067,4 +1081,17 @@
 		}
 		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="DataType_SingleObjectiveSolution", Storage="_SingleObjectiveSolutions", ThisKey="Id", OtherKey="DataTypeId")]
+		public EntitySet<SingleObjectiveSolution> SingleObjectiveSolutions
+		{
+			get
+			{
+				return this._SingleObjectiveSolutions;
+			}
+			set
+			{
+				this._SingleObjectiveSolutions.Assign(value);
+			}
+		}
+		
 		public event PropertyChangingEventHandler PropertyChanging;
 		
@@ -1130,4 +1157,16 @@
 		
 		private void detach_CharacteristicValues(CharacteristicValue entity)
+		{
+			this.SendPropertyChanging();
+			entity.DataType = null;
+		}
+		
+		private void attach_SingleObjectiveSolutions(SingleObjectiveSolution entity)
+		{
+			this.SendPropertyChanging();
+			entity.DataType = this;
+		}
+		
+		private void detach_SingleObjectiveSolutions(SingleObjectiveSolution entity)
 		{
 			this.SendPropertyChanging();
@@ -1750,4 +1789,6 @@
 		private EntitySet<CharacteristicValue> _CharacteristicValues;
 		
+		private EntitySet<SingleObjectiveSolution> _SingleObjectiveSolutions;
+		
 		private EntityRef<DataType> _DataType;
 		
@@ -1783,4 +1824,5 @@
 			this._Runs = new EntitySet<Run>(new Action<Run>(this.attach_Runs), new Action<Run>(this.detach_Runs));
 			this._CharacteristicValues = new EntitySet<CharacteristicValue>(new Action<CharacteristicValue>(this.attach_CharacteristicValues), new Action<CharacteristicValue>(this.detach_CharacteristicValues));
+			this._SingleObjectiveSolutions = new EntitySet<SingleObjectiveSolution>(new Action<SingleObjectiveSolution>(this.attach_SingleObjectiveSolutions), new Action<SingleObjectiveSolution>(this.detach_SingleObjectiveSolutions));
 			this._DataType = default(EntityRef<DataType>);
 			this._Platform = default(EntityRef<Platform>);
@@ -1985,4 +2027,17 @@
 		}
 		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Problem_SingleObjectiveSolution", Storage="_SingleObjectiveSolutions", ThisKey="Id", OtherKey="ProblemId")]
+		public EntitySet<SingleObjectiveSolution> SingleObjectiveSolutions
+		{
+			get
+			{
+				return this._SingleObjectiveSolutions;
+			}
+			set
+			{
+				this._SingleObjectiveSolutions.Assign(value);
+			}
+		}
+		
 		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="DataType_Problem", Storage="_DataType", ThisKey="DataTypeId", OtherKey="Id", IsForeignKey=true)]
 		public DataType DataType
@@ -2172,4 +2227,16 @@
 		
 		private void detach_CharacteristicValues(CharacteristicValue entity)
+		{
+			this.SendPropertyChanging();
+			entity.Problem = null;
+		}
+		
+		private void attach_SingleObjectiveSolutions(SingleObjectiveSolution entity)
+		{
+			this.SendPropertyChanging();
+			entity.Problem = this;
+		}
+		
+		private void detach_SingleObjectiveSolutions(SingleObjectiveSolution entity)
 		{
 			this.SendPropertyChanging();
@@ -2195,4 +2262,6 @@
 		
 		private EntitySet<Value> _Values;
+		
+		private EntitySet<SingleObjectiveSolution> _SingleObjectiveSolutions;
 		
     #region Extensibility Method Definitions
@@ -2213,4 +2282,5 @@
 			this._Problems = new EntitySet<Problem>(new Action<Problem>(this.attach_Problems), new Action<Problem>(this.detach_Problems));
 			this._Values = new EntitySet<Value>(new Action<Value>(this.attach_Values), new Action<Value>(this.detach_Values));
+			this._SingleObjectiveSolutions = new EntitySet<SingleObjectiveSolution>(new Action<SingleObjectiveSolution>(this.attach_SingleObjectiveSolutions), new Action<SingleObjectiveSolution>(this.detach_SingleObjectiveSolutions));
 			OnCreated();
 		}
@@ -2315,4 +2385,17 @@
 		}
 		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="BinaryData_SingleObjectiveSolution", Storage="_SingleObjectiveSolutions", ThisKey="Id", OtherKey="BinaryDataId")]
+		public EntitySet<SingleObjectiveSolution> SingleObjectiveSolutions
+		{
+			get
+			{
+				return this._SingleObjectiveSolutions;
+			}
+			set
+			{
+				this._SingleObjectiveSolutions.Assign(value);
+			}
+		}
+		
 		public event PropertyChangingEventHandler PropertyChanging;
 		
@@ -2366,4 +2449,16 @@
 		
 		private void detach_Values(Value entity)
+		{
+			this.SendPropertyChanging();
+			entity.BinaryData = null;
+		}
+		
+		private void attach_SingleObjectiveSolutions(SingleObjectiveSolution entity)
+		{
+			this.SendPropertyChanging();
+			entity.BinaryData = this;
+		}
+		
+		private void detach_SingleObjectiveSolutions(SingleObjectiveSolution entity)
 		{
 			this.SendPropertyChanging();
@@ -2391,4 +2486,6 @@
 		
 		private EntitySet<Value> _Values;
+		
+		private EntitySet<SingleObjectiveSolution> _SingleObjectiveSolutions;
 		
 		private EntityRef<Algorithm> _Algorithm;
@@ -2417,4 +2514,5 @@
 		{
 			this._Values = new EntitySet<Value>(new Action<Value>(this.attach_Values), new Action<Value>(this.detach_Values));
+			this._SingleObjectiveSolutions = new EntitySet<SingleObjectiveSolution>(new Action<SingleObjectiveSolution>(this.attach_SingleObjectiveSolutions), new Action<SingleObjectiveSolution>(this.detach_SingleObjectiveSolutions));
 			this._Algorithm = default(EntityRef<Algorithm>);
 			this._Problem = default(EntityRef<Problem>);
@@ -2563,4 +2661,17 @@
 		}
 		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Run_SingleObjectiveSolution", Storage="_SingleObjectiveSolutions", ThisKey="Id", OtherKey="RunId")]
+		public EntitySet<SingleObjectiveSolution> SingleObjectiveSolutions
+		{
+			get
+			{
+				return this._SingleObjectiveSolutions;
+			}
+			set
+			{
+				this._SingleObjectiveSolutions.Assign(value);
+			}
+		}
+		
 		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Algorithm_Run", Storage="_Algorithm", ThisKey="AlgorithmId", OtherKey="Id", IsForeignKey=true)]
 		public Algorithm Algorithm
@@ -2658,4 +2769,16 @@
 		
 		private void detach_Values(Value entity)
+		{
+			this.SendPropertyChanging();
+			entity.Run = null;
+		}
+		
+		private void attach_SingleObjectiveSolutions(SingleObjectiveSolution entity)
+		{
+			this.SendPropertyChanging();
+			entity.Run = this;
+		}
+		
+		private void detach_SingleObjectiveSolutions(SingleObjectiveSolution entity)
 		{
 			this.SendPropertyChanging();
@@ -3668,4 +3791,350 @@
 		}
 	}
+	
+	[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.SingleObjectiveSolution")]
+	public partial class SingleObjectiveSolution : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		private long _Id;
+		
+		private System.Nullable<long> _ProblemId;
+		
+		private System.Nullable<long> _BinaryDataId;
+		
+		private System.Nullable<long> _RunId;
+		
+		private double _Quality;
+		
+		private System.Nullable<long> _DataTypeId;
+		
+		private EntityRef<Problem> _Problem;
+		
+		private EntityRef<BinaryData> _BinaryData;
+		
+		private EntityRef<Run> _Run;
+		
+		private EntityRef<DataType> _DataType;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnIdChanging(long value);
+    partial void OnIdChanged();
+    partial void OnProblemIdChanging(System.Nullable<long> value);
+    partial void OnProblemIdChanged();
+    partial void OnBinaryDataIdChanging(System.Nullable<long> value);
+    partial void OnBinaryDataIdChanged();
+    partial void OnRunIdChanging(System.Nullable<long> value);
+    partial void OnRunIdChanged();
+    partial void OnQualityChanging(double value);
+    partial void OnQualityChanged();
+    partial void OnDataTypeIdChanging(System.Nullable<long> value);
+    partial void OnDataTypeIdChanged();
+    #endregion
+		
+		public SingleObjectiveSolution()
+		{
+			this._Problem = default(EntityRef<Problem>);
+			this._BinaryData = default(EntityRef<BinaryData>);
+			this._Run = default(EntityRef<Run>);
+			this._DataType = default(EntityRef<DataType>);
+			OnCreated();
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Id", AutoSync=AutoSync.OnInsert, DbType="BigInt NOT NULL IDENTITY", IsPrimaryKey=true, IsDbGenerated=true)]
+		public long Id
+		{
+			get
+			{
+				return this._Id;
+			}
+			set
+			{
+				if ((this._Id != value))
+				{
+					this.OnIdChanging(value);
+					this.SendPropertyChanging();
+					this._Id = value;
+					this.SendPropertyChanged("Id");
+					this.OnIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_ProblemId", DbType="BigInt")]
+		public System.Nullable<long> ProblemId
+		{
+			get
+			{
+				return this._ProblemId;
+			}
+			set
+			{
+				if ((this._ProblemId != value))
+				{
+					if (this._Problem.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnProblemIdChanging(value);
+					this.SendPropertyChanging();
+					this._ProblemId = value;
+					this.SendPropertyChanged("ProblemId");
+					this.OnProblemIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_BinaryDataId", DbType="BigInt")]
+		public System.Nullable<long> BinaryDataId
+		{
+			get
+			{
+				return this._BinaryDataId;
+			}
+			set
+			{
+				if ((this._BinaryDataId != value))
+				{
+					if (this._BinaryData.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnBinaryDataIdChanging(value);
+					this.SendPropertyChanging();
+					this._BinaryDataId = value;
+					this.SendPropertyChanged("BinaryDataId");
+					this.OnBinaryDataIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_RunId", DbType="BigInt")]
+		public System.Nullable<long> RunId
+		{
+			get
+			{
+				return this._RunId;
+			}
+			set
+			{
+				if ((this._RunId != value))
+				{
+					if (this._Run.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnRunIdChanging(value);
+					this.SendPropertyChanging();
+					this._RunId = value;
+					this.SendPropertyChanged("RunId");
+					this.OnRunIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Quality", DbType="Float")]
+		public double Quality
+		{
+			get
+			{
+				return this._Quality;
+			}
+			set
+			{
+				if ((this._Quality != value))
+				{
+					this.OnQualityChanging(value);
+					this.SendPropertyChanging();
+					this._Quality = value;
+					this.SendPropertyChanged("Quality");
+					this.OnQualityChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_DataTypeId", DbType="BigInt")]
+		public System.Nullable<long> DataTypeId
+		{
+			get
+			{
+				return this._DataTypeId;
+			}
+			set
+			{
+				if ((this._DataTypeId != value))
+				{
+					if (this._DataType.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnDataTypeIdChanging(value);
+					this.SendPropertyChanging();
+					this._DataTypeId = value;
+					this.SendPropertyChanged("DataTypeId");
+					this.OnDataTypeIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Problem_SingleObjectiveSolution", Storage="_Problem", ThisKey="ProblemId", OtherKey="Id", IsForeignKey=true)]
+		public Problem Problem
+		{
+			get
+			{
+				return this._Problem.Entity;
+			}
+			set
+			{
+				Problem previousValue = this._Problem.Entity;
+				if (((previousValue != value) 
+							|| (this._Problem.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._Problem.Entity = null;
+						previousValue.SingleObjectiveSolutions.Remove(this);
+					}
+					this._Problem.Entity = value;
+					if ((value != null))
+					{
+						value.SingleObjectiveSolutions.Add(this);
+						this._ProblemId = value.Id;
+					}
+					else
+					{
+						this._ProblemId = default(Nullable<long>);
+					}
+					this.SendPropertyChanged("Problem");
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="BinaryData_SingleObjectiveSolution", Storage="_BinaryData", ThisKey="BinaryDataId", OtherKey="Id", IsForeignKey=true)]
+		public BinaryData BinaryData
+		{
+			get
+			{
+				return this._BinaryData.Entity;
+			}
+			set
+			{
+				BinaryData previousValue = this._BinaryData.Entity;
+				if (((previousValue != value) 
+							|| (this._BinaryData.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._BinaryData.Entity = null;
+						previousValue.SingleObjectiveSolutions.Remove(this);
+					}
+					this._BinaryData.Entity = value;
+					if ((value != null))
+					{
+						value.SingleObjectiveSolutions.Add(this);
+						this._BinaryDataId = value.Id;
+					}
+					else
+					{
+						this._BinaryDataId = default(Nullable<long>);
+					}
+					this.SendPropertyChanged("BinaryData");
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Run_SingleObjectiveSolution", Storage="_Run", ThisKey="RunId", OtherKey="Id", IsForeignKey=true)]
+		public Run Run
+		{
+			get
+			{
+				return this._Run.Entity;
+			}
+			set
+			{
+				Run previousValue = this._Run.Entity;
+				if (((previousValue != value) 
+							|| (this._Run.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._Run.Entity = null;
+						previousValue.SingleObjectiveSolutions.Remove(this);
+					}
+					this._Run.Entity = value;
+					if ((value != null))
+					{
+						value.SingleObjectiveSolutions.Add(this);
+						this._RunId = value.Id;
+					}
+					else
+					{
+						this._RunId = default(Nullable<long>);
+					}
+					this.SendPropertyChanged("Run");
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="DataType_SingleObjectiveSolution", Storage="_DataType", ThisKey="DataTypeId", OtherKey="Id", IsForeignKey=true)]
+		public DataType DataType
+		{
+			get
+			{
+				return this._DataType.Entity;
+			}
+			set
+			{
+				DataType previousValue = this._DataType.Entity;
+				if (((previousValue != value) 
+							|| (this._DataType.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._DataType.Entity = null;
+						previousValue.SingleObjectiveSolutions.Remove(this);
+					}
+					this._DataType.Entity = value;
+					if ((value != null))
+					{
+						value.SingleObjectiveSolutions.Add(this);
+						this._DataTypeId = value.Id;
+					}
+					else
+					{
+						this._DataTypeId = default(Nullable<long>);
+					}
+					this.SendPropertyChanged("DataType");
+				}
+			}
+		}
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		protected virtual void SendPropertyChanging()
+		{
+			if ((this.PropertyChanging != null))
+			{
+				this.PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+		
+		protected virtual void SendPropertyChanged(String propertyName)
+		{
+			if ((this.PropertyChanged != null))
+			{
+				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+	}
 }
 #pragma warning restore 1591
Index: /stable/HeuristicLab.Services.OKB/3.3/HeuristicLab.Services.OKB-3.3.csproj
===================================================================
--- /stable/HeuristicLab.Services.OKB/3.3/HeuristicLab.Services.OKB-3.3.csproj	(revision 15081)
+++ /stable/HeuristicLab.Services.OKB/3.3/HeuristicLab.Services.OKB-3.3.csproj	(revision 15082)
@@ -283,4 +283,6 @@
     <Compile Include="RunCreation\DataTransfer\BinaryValue.cs" />
     <Compile Include="RunCreation\DataTransfer\BoolValue.cs" />
+    <Compile Include="RunCreation\DataTransfer\SingleObjectiveSolution.cs" />
+    <Compile Include="RunCreation\DataTransfer\Solution.cs" />
     <Compile Include="RunCreation\DataTransfer\TimeSpanValue.cs" />
     <Compile Include="RunCreation\DataTransfer\PercentValue.cs" />
@@ -295,4 +297,5 @@
     <Compile Include="RunCreation\DataTransfer\StringValue.cs" />
     <Compile Include="RunCreation\DataTransfer\Value.cs" />
+    <Compile Include="RunCreation\MissingSolution.cs" />
     <Compile Include="RunCreation\MissingProblem.cs" />
     <Compile Include="RunCreation\RunCreationService.cs" />
Index: /stable/HeuristicLab.Services.OKB/3.3/RunCreation/Convert.cs
===================================================================
--- /stable/HeuristicLab.Services.OKB/3.3/RunCreation/Convert.cs	(revision 15081)
+++ /stable/HeuristicLab.Services.OKB/3.3/RunCreation/Convert.cs	(revision 15082)
@@ -38,4 +38,15 @@
       if (source == null) return null;
       return new DT.Problem { Id = source.Id, Name = source.Name, Description = source.Description, ProblemClass = Convert.ToDto(source.ProblemClass), DataType = Convert.ToDto(source.DataType) };
+    }
+
+    public static DT.SingleObjectiveSolution ToDto(DA.SingleObjectiveSolution source) {
+      if (source == null) return null;
+      return new DT.SingleObjectiveSolution() {
+        Id = source.Id,
+        ProblemId = source.ProblemId.Value,
+        RunId = source.RunId,
+        Quality = source.Quality,
+        DataType = ToDto(source.DataType)
+      };
     }
 
@@ -165,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 };
@@ -175,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 };
@@ -188,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 };
@@ -200,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: /stable/HeuristicLab.Services.OKB/3.3/RunCreation/DataTransfer/SingleObjectiveSolution.cs
===================================================================
--- /stable/HeuristicLab.Services.OKB/3.3/RunCreation/DataTransfer/SingleObjectiveSolution.cs	(revision 15082)
+++ /stable/HeuristicLab.Services.OKB/3.3/RunCreation/DataTransfer/SingleObjectiveSolution.cs	(revision 15082)
@@ -0,0 +1,35 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2016 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.Collections.Generic;
+using System.Linq;
+using System.Runtime.Serialization;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HeuristicLab.Services.OKB.RunCreation.DataTransfer {
+  [DataContract]
+  public class SingleObjectiveSolution : Solution {
+    [DataMember]
+    public double Quality { get; set; }
+  }
+}
Index: /stable/HeuristicLab.Services.OKB/3.3/RunCreation/DataTransfer/Solution.cs
===================================================================
--- /stable/HeuristicLab.Services.OKB/3.3/RunCreation/DataTransfer/Solution.cs	(revision 15082)
+++ /stable/HeuristicLab.Services.OKB/3.3/RunCreation/DataTransfer/Solution.cs	(revision 15082)
@@ -0,0 +1,37 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2016 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.RunCreation.DataTransfer {
+  [DataContract]
+  [KnownType(typeof(SingleObjectiveSolution))]
+  public class Solution {
+    [DataMember]
+    public long Id { get; set; }
+    [DataMember]
+    public long ProblemId { get; set; }
+    [DataMember]
+    public long? RunId { get; set; }
+    [DataMember]
+    public DataType DataType { get; set; }
+  }
+}
Index: /stable/HeuristicLab.Services.OKB/3.3/RunCreation/IRunCreationService.cs
===================================================================
--- /stable/HeuristicLab.Services.OKB/3.3/RunCreation/IRunCreationService.cs	(revision 15081)
+++ /stable/HeuristicLab.Services.OKB/3.3/RunCreation/IRunCreationService.cs	(revision 15082)
@@ -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 {
@@ -44,4 +44,21 @@
 
     [OperationContract]
+    [FaultContract(typeof(MissingProblem))]
+    IEnumerable<Solution> GetSolutions(long problemId);
+
+    [OperationContract]
+    Solution GetSolution(long solutionId);
+
+    [OperationContract]
+    [FaultContract(typeof(MissingSolution))]
+    byte[] GetSolutionData(long solutionId);
+
+    [OperationContract]
+    long AddSolution(Solution solution, byte[] data);
+
+    [OperationContract]
+    void DeleteSolution(Solution solution);
+
+    [OperationContract]
     void AddRun(Run run);
 
Index: /stable/HeuristicLab.Services.OKB/3.3/RunCreation/MissingProblem.cs
===================================================================
--- /stable/HeuristicLab.Services.OKB/3.3/RunCreation/MissingProblem.cs	(revision 15081)
+++ /stable/HeuristicLab.Services.OKB/3.3/RunCreation/MissingProblem.cs	(revision 15082)
@@ -28,6 +28,6 @@
     public string Message { get; set; }
 
-    public MissingProblem(string message, params object[] c) {
-      Message = string.Format(message, c);
+    public MissingProblem(long problemId) {
+      Message = string.Format("Problem with id {0} cannot be found", problemId);
     }
   }
Index: /stable/HeuristicLab.Services.OKB/3.3/RunCreation/MissingSolution.cs
===================================================================
--- /stable/HeuristicLab.Services.OKB/3.3/RunCreation/MissingSolution.cs	(revision 15082)
+++ /stable/HeuristicLab.Services.OKB/3.3/RunCreation/MissingSolution.cs	(revision 15082)
@@ -0,0 +1,34 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2016 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.RunCreation {
+  [DataContract]
+  public class MissingSolution {
+    [DataMember]
+    public string Message { get; set; }
+
+    public MissingSolution(long solutionId) {
+      Message = string.Format("Solution with id {0} cannot be found", solutionId);
+    }
+  }
+}
Index: /stable/HeuristicLab.Services.OKB/3.3/RunCreation/RunCreationService.cs
===================================================================
--- /stable/HeuristicLab.Services.OKB/3.3/RunCreation/RunCreationService.cs	(revision 15081)
+++ /stable/HeuristicLab.Services.OKB/3.3/RunCreation/RunCreationService.cs	(revision 15082)
@@ -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 {
@@ -127,4 +127,92 @@
     }
 
+    public IEnumerable<DataTransfer.Solution> GetSolutions(long problemId) {
+      roleVerifier.AuthenticateForAnyRole(OKBRoles.OKBAdministrator, OKBRoles.OKBUser);
+
+      using (OKBDataContext okb = new OKBDataContext()) {
+        var problem = okb.Problems.SingleOrDefault(x => x.Id == problemId);
+        if (problem == null) throw new FaultException<MissingProblem>(new MissingProblem(problemId));
+        // TODO: In case of multi-objective problems one has to check whether it contains single- or multi-objective problems
+        var result = problem.SingleObjectiveSolutions.Select(x => Convert.ToDto(x)).ToList();
+        if (roleVerifier.IsInRole(OKBRoles.OKBAdministrator)) {
+          return result;
+        } else {
+          var problemUsers = okb.ProblemUsers.Where(x => x.ProblemId == problemId).ToList();
+          if (problemUsers.Count == 0 || userManager.VerifyUser(userManager.CurrentUserId, problemUsers.Select(y => y.UserGroupId).ToList())) {
+            return result;
+          } else {
+            return null;
+          }
+        }
+      }
+    }
+
+    public DataTransfer.Solution GetSolution(long solutionId) {
+      roleVerifier.AuthenticateForAnyRole(OKBRoles.OKBAdministrator, OKBRoles.OKBUser);
+
+      using (OKBDataContext okb = new OKBDataContext()) {
+        // TODO: In case of multi-objective problems one has to check whether it contains single- or multi-objective problems
+        var result = Convert.ToDto(okb.SingleObjectiveSolutions.SingleOrDefault(x => x.Id == solutionId));
+        if (roleVerifier.IsInRole(OKBRoles.OKBAdministrator)) {
+          return result;
+        } else {
+          var problemUsers = okb.ProblemUsers.Where(x => x.ProblemId == result.ProblemId).ToList();
+          if (problemUsers.Count == 0 || userManager.VerifyUser(userManager.CurrentUserId, problemUsers.Select(y => y.UserGroupId).ToList())) {
+            return result;
+          } else {
+            return null;
+          }
+        }
+      }
+    }
+
+    public byte[] GetSolutionData(long solutionId) {
+      roleVerifier.AuthenticateForAnyRole(OKBRoles.OKBAdministrator, OKBRoles.OKBUser);
+
+      using (OKBDataContext okb = new OKBDataContext()) {
+        var solution = okb.SingleObjectiveSolutions.SingleOrDefault(x => x.Id == solutionId);
+        if (solution == null) throw new FaultException<MissingSolution>(new MissingSolution(solutionId));
+
+        var result = solution.BinaryData.Data.ToArray();
+        if (roleVerifier.IsInRole(OKBRoles.OKBAdministrator)) {
+          return result;
+        } else {
+          var problemUsers = okb.ProblemUsers.Where(x => x.ProblemId == solution.ProblemId).ToList();
+          if (problemUsers.Count == 0 || userManager.VerifyUser(userManager.CurrentUserId, problemUsers.Select(y => y.UserGroupId).ToList())) {
+            return result;
+          } else {
+            return null;
+          }
+        }
+      }
+    }
+
+    public long 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();
+          return entity.Id;
+        }
+      }
+      throw new FaultException(new FaultReason("The solution could not be added."));
+    }
+
+    public void DeleteSolution(DataTransfer.Solution solution) {
+      roleVerifier.AuthenticateForAnyRole(OKBRoles.OKBAdministrator, OKBRoles.OKBUser);
+
+      using (OKBDataContext okb = new OKBDataContext()) {
+        var soSolution = solution as DataTransfer.SingleObjectiveSolution;
+        if (soSolution != null) {
+          okb.SingleObjectiveSolutions.DeleteOnSubmit(okb.SingleObjectiveSolutions.Single(x => x.Id == soSolution.Id));
+          okb.SubmitChanges();
+        }
+      }
+    }
+
     public void AddRun(DataTransfer.Run run) {
       roleVerifier.AuthenticateForAnyRole(OKBRoles.OKBAdministrator, OKBRoles.OKBUser);
@@ -150,5 +238,5 @@
       using (OKBDataContext okb = new OKBDataContext()) {
         var problem = okb.Problems.SingleOrDefault(x => x.Id == problemId);
-        if (problem == null) throw new FaultException<MissingProblem>(new MissingProblem("Problem with id {0} cannot be found", problemId));
+        if (problem == null) throw new FaultException<MissingProblem>(new MissingProblem(problemId));
 
         DoSetCharacteristicValue(okb, problem, value);
@@ -162,5 +250,5 @@
       using (OKBDataContext okb = new OKBDataContext()) {
         var problem = okb.Problems.SingleOrDefault(x => x.Id == problemId);
-        if (problem == null) throw new FaultException<MissingProblem>(new MissingProblem("Problem with id {0} cannot be found", problemId));
+        if (problem == null) throw new FaultException<MissingProblem>(new MissingProblem(problemId));
 
         foreach (var v in values) {
