Index: /branches/OKB (trunk integration)/HeuristicLab.AvalonDock/HeuristicLab.AvalonDock-1.2.2691.0.csproj
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.AvalonDock/HeuristicLab.AvalonDock-1.2.2691.0.csproj	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.AvalonDock/HeuristicLab.AvalonDock-1.2.2691.0.csproj	(revision 5296)
@@ -0,0 +1,162 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{D86DEAB6-61EA-4008-B2AB-8D8CD5665023}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.AvalonDock</RootNamespace>
+    <AssemblyName>HeuristicLab.AvalonDock-1.2.2691.0</AssemblyName>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <StartupObject>
+    </StartupObject>
+    <FileUpgradeFlags>
+    </FileUpgradeFlags>
+    <OldToolsVersion>3.5</OldToolsVersion>
+    <UpgradeBackupLocation />
+    <PublishUrl>publish\</PublishUrl>
+    <Install>true</Install>
+    <InstallFrom>Disk</InstallFrom>
+    <UpdateEnabled>false</UpdateEnabled>
+    <UpdateMode>Foreground</UpdateMode>
+    <UpdateInterval>7</UpdateInterval>
+    <UpdateIntervalUnits>Days</UpdateIntervalUnits>
+    <UpdatePeriodically>false</UpdatePeriodically>
+    <UpdateRequired>false</UpdateRequired>
+    <MapFileExtensions>true</MapFileExtensions>
+    <ApplicationRevision>0</ApplicationRevision>
+    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
+    <IsWebBootstrapper>false</IsWebBootstrapper>
+    <UseApplicationTrust>false</UseApplicationTrust>
+    <BootstrapperEnabled>true</BootstrapperEnabled>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="HeuristicLab.PluginInfrastructure-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.PluginInfrastructure-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Core">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Xml.Linq">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data.DataSetExtensions">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="HeuristicLabAvalonDockPlugin.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <None Include="Properties\AssemblyInfo.frame" />
+  </ItemGroup>
+  <ItemGroup>
+    <Content Include="AvalonDock.dll">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="UpdateLocalInstallation.cmd" />
+  </ItemGroup>
+  <ItemGroup>
+    <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
+      <Install>false</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.5 SP1</ProductName>
+      <Install>true</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
+      <Visible>False</Visible>
+      <ProductName>Windows Installer 3.1</ProductName>
+      <Install>true</Install>
+    </BootstrapperPackage>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+    <PostBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call UpdateLocalInstallation.cmd</PostBuildEvent>
+  </PropertyGroup>
+</Project>
Index: /branches/OKB (trunk integration)/HeuristicLab.AvalonDock/HeuristicLabAvalonDockPlugin.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.AvalonDock/HeuristicLabAvalonDockPlugin.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.AvalonDock/HeuristicLabAvalonDockPlugin.cs	(revision 5296)
@@ -0,0 +1,9 @@
+﻿using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.AvalonDock {
+
+  [Plugin("HeuristicLab.AvalonDock", "1.2.2691.0")]
+  [PluginFile("HeuristicLab.AvalonDock-1.2.2691.0.dll", PluginFileType.Assembly)]
+  [PluginFile("AvalonDock.dll", PluginFileType.Assembly)]
+  public class HeuristicLabAvalonDockPlugin : PluginBase {}
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.AvalonDock/Properties/AssemblyInfo.frame
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.AvalonDock/Properties/AssemblyInfo.frame	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.AvalonDock/Properties/AssemblyInfo.frame	(revision 5296)
@@ -0,0 +1,37 @@
+﻿using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using HeuristicLab.PluginInfrastructure;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.AvalonDock")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab.AvalonDock")]
+[assembly: AssemblyCopyright("Copyright ©  2010")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components.  If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("5c614020-2350-472e-876d-8b701db167ab")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.2.2691.$WCREV$")]
+[assembly: AssemblyFileVersion("1.2.2691.$WCREV$")]
Index: /branches/OKB (trunk integration)/HeuristicLab.AvalonDock/UpdateLocalInstallation.cmd
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.AvalonDock/UpdateLocalInstallation.cmd	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.AvalonDock/UpdateLocalInstallation.cmd	(revision 5296)
@@ -0,0 +1,5 @@
+SET target=C:\Program Files\HeuristicLab 3.3
+
+echo Copying AvalonDock
+copy "%ProjectDir%\%Outdir%\HeuristicLab.AvalonDock-1.2.2691.0.dll" "%target%"
+copy "%ProjectDir%\%Outdir%\AvalonDock.dll" "%target%"
Index: /branches/OKB (trunk integration)/HeuristicLab.BackgroundProcessing/HeuristicLab.BackgroundProcessing-3.3.csproj
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.BackgroundProcessing/HeuristicLab.BackgroundProcessing-3.3.csproj	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.BackgroundProcessing/HeuristicLab.BackgroundProcessing-3.3.csproj	(revision 5296)
@@ -0,0 +1,169 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{589BECAE-69B0-4EB1-8C06-C073531762B7}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.BackgroundProcessing</RootNamespace>
+    <AssemblyName>HeuristicLab.BackgroundProcessing-3.3</AssemblyName>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+    <FileUpgradeFlags>
+    </FileUpgradeFlags>
+    <OldToolsVersion>3.5</OldToolsVersion>
+    <UpgradeBackupLocation />
+    <PublishUrl>publish\</PublishUrl>
+    <Install>true</Install>
+    <InstallFrom>Disk</InstallFrom>
+    <UpdateEnabled>false</UpdateEnabled>
+    <UpdateMode>Foreground</UpdateMode>
+    <UpdateInterval>7</UpdateInterval>
+    <UpdateIntervalUnits>Days</UpdateIntervalUnits>
+    <UpdatePeriodically>false</UpdatePeriodically>
+    <UpdateRequired>false</UpdateRequired>
+    <MapFileExtensions>true</MapFileExtensions>
+    <ApplicationRevision>0</ApplicationRevision>
+    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
+    <IsWebBootstrapper>false</IsWebBootstrapper>
+    <UseApplicationTrust>false</UseApplicationTrust>
+    <BootstrapperEnabled>true</BootstrapperEnabled>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="HeuristicLab.PluginInfrastructure-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.PluginInfrastructure-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Core">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Xml.Linq">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data.DataSetExtensions">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+    <Reference Include="WindowsBase">
+      <RequiredTargetFramework>3.0</RequiredTargetFramework>
+    </Reference>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLabBackgroundProcessingPlugin.cs.frame" />
+    <Compile Include="HeuristicLabBackgroundProcessingPlugin.cs" />
+    <Compile Include="ObservableEnumerable.cs" />
+    <Compile Include="ObservableBackgroundWorker.cs">
+      <SubType>Component</SubType>
+    </Compile>
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <None Include="Properties\AssemblyInfo.frame" />
+    <Compile Include="WorkerMonitor.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+    <None Include="UpdateLocalInstallation.cmd" />
+  </ItemGroup>
+  <ItemGroup>
+    <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
+      <Install>false</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.5 SP1</ProductName>
+      <Install>true</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
+      <Visible>False</Visible>
+      <ProductName>Windows Installer 3.1</ProductName>
+      <Install>true</Install>
+    </BootstrapperPackage>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <PropertyGroup>
+    <PostBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+set TargetPath=$(TargetPath)
+
+call UpdateLocalInstallation.cmd</PostBuildEvent>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+SubWCRev "%25ProjectDir%25\" "%25ProjectDir%25\Properties\AssemblyInfo.frame" "%25ProjectDir%25\Properties\AssemblyInfo.cs"
+SubWCRev "%25ProjectDir%25\" "%25ProjectDir%25\HeuristicLabBackgroundProcessingPlugin.cs.frame" "%25ProjectDir%25\HeuristicLabBackgroundProcessingPlugin.cs"</PreBuildEvent>
+  </PropertyGroup>
+</Project>
Index: /branches/OKB (trunk integration)/HeuristicLab.BackgroundProcessing/HeuristicLabBackgroundProcessingPlugin.cs.frame
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.BackgroundProcessing/HeuristicLabBackgroundProcessingPlugin.cs.frame	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.BackgroundProcessing/HeuristicLabBackgroundProcessingPlugin.cs.frame	(revision 5296)
@@ -0,0 +1,7 @@
+﻿using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.BackgroundProcessing {
+  [Plugin("HeuristicLab.BackgroundProcessing", "3.3")]
+  [PluginFile("HeuristicLab.BackgroundProcessing-3.3.dll", PluginFileType.Assembly)]
+  public class HeuristicLabBackgroundProcessingPlugin : PluginBase { }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.BackgroundProcessing/ObservableBackgroundWorker.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.BackgroundProcessing/ObservableBackgroundWorker.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.BackgroundProcessing/ObservableBackgroundWorker.cs	(revision 5296)
@@ -0,0 +1,99 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.ComponentModel;
+using System.Threading;
+using System.Collections.ObjectModel;
+
+namespace HeuristicLab.BackgroundProcessing {
+  /// <summary>
+  /// Extends the BackgroundWorker to make it easier to follow progress and automatically
+  /// registers with the WorkerMonitor.
+  /// </summary>
+  public class ObservableBackgroundWorker : BackgroundWorker, INotifyPropertyChanged {
+
+    private string name;
+    public string Name {
+      get {
+        return name;
+      }
+      set {
+        if (value == name)
+          return;
+        name = value;
+        OnPropertyChanged("Name");
+      }    
+    }
+
+    public int Progress { get; private set; }
+
+    /// <summary>
+    /// Indicate whether the worker is actually doing something. In contrast
+    /// to IsBusy this shows that the worker is about to execute or leave DoWork
+    /// while IsBusy shows wheter the worker has been "started" with this.RunWorkerAsync.
+    /// </summary>
+    public bool IsRunning { get; private set; }
+
+    /// <summary>
+    /// Notification about worker has actually started working i.e.
+    /// has been assigned a ThreadPool thread.
+    /// </summary>
+    public event EventHandler WorkerStarted;
+
+    /// <summary>
+    /// Unsynchronized version of RunWorkerCompleted so you don't
+    /// have to wait for the GUI thread to be notified.
+    /// </summary>
+    public event EventHandler WorkerStopped;
+
+    public event PropertyChangedEventHandler PropertyChanged;
+
+    public ObservableBackgroundWorker(string name, WorkerMonitor monitor) {
+      Name = name;
+      monitor.RegisterWorker(this);
+      IsRunning = false;
+    }
+
+    public ObservableBackgroundWorker(string name) : this(name, WorkerMonitor.Default) { }
+
+    protected override void OnProgressChanged(ProgressChangedEventArgs e) {
+      Progress = e.ProgressPercentage;
+      base.OnProgressChanged(e);
+      OnPropertyChanged("Progress");
+    }
+
+    protected override void OnDoWork(DoWorkEventArgs e) {
+      IsRunning = true;
+      try {
+        OnPropertyChanged("IsRunning");
+        OnWorkerStarted();
+        base.OnDoWork(e);
+      } finally {
+        IsRunning = false;
+        OnWorkerStopped();
+        OnPropertyChanged("IsRunning");
+      }
+    }
+
+    protected void OnWorkerStarted() {
+      if (WorkerStarted != null)
+        WorkerStarted(this, new EventArgs());
+    }
+
+    protected void OnWorkerStopped() {
+      if (WorkerStopped != null)
+        WorkerStopped(this, new EventArgs());
+    }
+
+    protected void OnPropertyChanged(string name) {
+      if (PropertyChanged != null)
+        PropertyChanged(this, new PropertyChangedEventArgs(name));
+    }
+
+    public new void CancelAsync() {
+      base.CancelAsync();
+      OnPropertyChanged("CancellationPending");
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.BackgroundProcessing/ObservableEnumerable.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.BackgroundProcessing/ObservableEnumerable.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.BackgroundProcessing/ObservableEnumerable.cs	(revision 5296)
@@ -0,0 +1,13 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Collections.Specialized;
+using System.Collections;
+
+namespace HeuristicLab.BackgroundProcessing {
+  /// <summary>
+  /// Combines <code>IEnumerable&gt;T&lt;"/></code> and <code>INotifyCollectionChanged</code> into
+  /// a single interface.
+  /// </summary>
+  /// <typeparam name="T"></typeparam>
+  public interface IObservableEnumerable<T> : IEnumerable<T>, INotifyCollectionChanged { }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.BackgroundProcessing/Properties/AssemblyInfo.frame
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.BackgroundProcessing/Properties/AssemblyInfo.frame	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.BackgroundProcessing/Properties/AssemblyInfo.frame	(revision 5296)
@@ -0,0 +1,52 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 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.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using HeuristicLab.PluginInfrastructure;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.BackgroundProcessing")]
+[assembly: AssemblyDescription("General facitlities for running and monitoring background tasks.")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2009 HEAL")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+[assembly: AssemblyVersion("3.3.0.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.0.$WCREV$")]
Index: /branches/OKB (trunk integration)/HeuristicLab.BackgroundProcessing/UpdateLocalInstallation.cmd
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.BackgroundProcessing/UpdateLocalInstallation.cmd	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.BackgroundProcessing/UpdateLocalInstallation.cmd	(revision 5296)
@@ -0,0 +1,4 @@
+SET target=C:\Program Files\HeuristicLab 3.3
+
+echo Copying Background Processing
+copy "%ProjectDir%\%Outdir%\HeuristicLab.BackgroundProcessing-3.3.dll" "%target%"
Index: /branches/OKB (trunk integration)/HeuristicLab.BackgroundProcessing/WorkerMonitor.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.BackgroundProcessing/WorkerMonitor.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.BackgroundProcessing/WorkerMonitor.cs	(revision 5296)
@@ -0,0 +1,140 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.ComponentModel;
+using System.Threading;
+using System.Collections.ObjectModel;
+using System.Collections.Specialized;
+using System.Collections;
+
+namespace HeuristicLab.BackgroundProcessing {
+  /// <summary>
+  /// Provides a list of all currently running or pending ObservableBackgroundWorkers.
+  /// </summary>
+  public class WorkerMonitor : IObservableEnumerable<ObservableBackgroundWorker> {
+
+    public static WorkerMonitor Default = new WorkerMonitor();
+
+    /// <summary>
+    /// Report all unhandled exceptions during background worker execution.
+    /// These exceptions are the same as reported by the RunWorkerCompleted but wrapped
+    /// in an additional exception containing the worker name as message and the original
+    /// exception as inner exception.
+    /// </summary>
+    public event ThreadExceptionEventHandler BackgroundWorkerException;
+    public event NotifyCollectionChangedEventHandler CollectionChanged;
+
+    private List<ObservableBackgroundWorker> BackgroundWorkers;
+    private ReaderWriterLockSlim workerLock;
+
+    public WorkerMonitor() {
+      BackgroundWorkers = new List<ObservableBackgroundWorker>();
+      workerLock = new ReaderWriterLockSlim(LockRecursionPolicy.NoRecursion);
+    }
+
+    internal void RegisterWorker(ObservableBackgroundWorker worker) {
+      worker.RunWorkerCompleted += worker_RunWorkerCompleted;
+      worker.WorkerStopped += worker_WorkerStopped;
+      try {
+        workerLock.EnterUpgradeableReadLock();
+        try {
+          workerLock.EnterWriteLock();
+          BackgroundWorkers.Add(worker);
+        } finally {
+          workerLock.ExitWriteLock();
+        }
+        int index = BackgroundWorkers.Count - 1;
+        OnCollectionChanged(new NotifyCollectionChangedEventArgs(
+          NotifyCollectionChangedAction.Add, worker, index));
+      } finally {
+        workerLock.ExitUpgradeableReadLock();
+      }
+    }
+
+    void worker_WorkerStopped(object sender, EventArgs e) {
+      ObservableBackgroundWorker worker = sender as ObservableBackgroundWorker;
+      try {
+        workerLock.EnterUpgradeableReadLock();
+        int index = BackgroundWorkers.IndexOf(worker);
+        try {
+          workerLock.EnterWriteLock();
+          BackgroundWorkers.RemoveAt(index);
+        } finally {
+          workerLock.ExitWriteLock();
+        }
+        OnCollectionChanged(new NotifyCollectionChangedEventArgs(
+          NotifyCollectionChangedAction.Remove, worker, index));
+      } finally {
+        workerLock.ExitUpgradeableReadLock();
+      }
+    }
+
+    private void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) {
+      ObservableBackgroundWorker worker = sender as ObservableBackgroundWorker;
+      if (e.Error != null) {
+        OnThreadException(new Exception(worker.Name, e.Error));
+      }
+    }
+
+    protected void OnThreadException(Exception x) {
+      if (BackgroundWorkerException != null)
+        BackgroundWorkerException(this, new ThreadExceptionEventArgs(x));
+    }
+
+    public IEnumerator<ObservableBackgroundWorker> GetEnumerator() {
+      try {
+        workerLock.EnterReadLock();
+        IList<ObservableBackgroundWorker> copy = BackgroundWorkers.ToList();
+        return copy.GetEnumerator();
+      } finally {
+        workerLock.ExitReadLock();
+      }
+    }
+
+    IEnumerator IEnumerable.GetEnumerator() {
+      return GetEnumerator();
+    }
+
+    protected void OnCollectionChanged(NotifyCollectionChangedEventArgs args) {
+      if (CollectionChanged != null)
+        CollectionChanged(this, args);
+    }
+
+    public void CancelAllAsync() {
+      CancelAllAsync(null, null);
+    }
+
+    public void CancelAllAsync(WaitCallback callback, object state) {
+      ThreadPool.QueueUserWorkItem(_ => {
+        List<ObservableBackgroundWorker> cancelableWorkers = GetCancelableWorkers();
+        lock (cancelableWorkers) {
+          foreach (var worker in cancelableWorkers.ToList()) {
+            worker.WorkerStopped += (sender, args) => {
+              lock (cancelableWorkers) {
+                cancelableWorkers.Remove((ObservableBackgroundWorker)sender);
+                Monitor.Pulse(cancelableWorkers);
+              }
+            };
+            worker.CancelAsync();
+            if (!worker.IsRunning)
+              cancelableWorkers.Remove(worker);
+          }
+          while (cancelableWorkers.Count > 0)
+            Monitor.Wait(cancelableWorkers);
+        }
+        if (callback != null)
+          callback(state);
+      });
+    }
+
+    private List<ObservableBackgroundWorker> GetCancelableWorkers() {
+      try {
+        workerLock.EnterReadLock();
+        return BackgroundWorkers.Where(w => w.WorkerSupportsCancellation).ToList();
+      } finally {
+        workerLock.ExitReadLock();
+      }
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/AdministratorMenuItem.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/AdministratorMenuItem.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/AdministratorMenuItem.cs	(revision 5296)
@@ -0,0 +1,42 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Collections.Generic;
+using HeuristicLab.MainForm;
+using HeuristicLab.Optimizer;
+
+namespace HeuristicLab.Clients.OKB {
+  internal class AdministratorMenuItem : HeuristicLab.MainForm.WindowsForms.MenuItem, IOptimizerUserInterfaceItemProvider {
+    public override string Name {
+      get { return "&Administrator"; }
+    }
+    public override IEnumerable<string> Structure {
+      get { return new string[] { "&Services", "&OKB" }; }
+    }
+    public override int Position {
+      get { return 4210; }
+    }
+
+    public override void Execute() {
+      MainFormManager.MainForm.ShowContent(OKBClient.Instance);
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/HeuristicLab.Clients.OKB-3.3.csproj
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/HeuristicLab.Clients.OKB-3.3.csproj	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/HeuristicLab.Clients.OKB-3.3.csproj	(revision 5296)
@@ -0,0 +1,425 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>8.0.30703</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{73857A9C-9706-4B72-8D9C-210B5B6A5691}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Clients.OKB</RootNamespace>
+    <AssemblyName>HeuristicLab.Clients.OKB-3.3</AssemblyName>
+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <TargetFrameworkProfile />
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup>
+    <SignAssembly>true</SignAssembly>
+  </PropertyGroup>
+  <PropertyGroup>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="HeuristicLab.Clients.Common-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <HintPath>..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Clients.Common-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Collections-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <HintPath>..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Collections-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Common-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <HintPath>..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Common-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Common.Resources-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Common.Resources-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Core-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <HintPath>..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Core-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Core.Views-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <HintPath>..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Core.Views-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Data-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <HintPath>..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Data-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.MainForm-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <HintPath>..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.MainForm-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.MainForm.WindowsForms-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <HintPath>..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.MainForm.WindowsForms-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Optimization-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <HintPath>..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Optimization-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Optimization.Views-3.3">
+      <HintPath>..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Optimization.Views-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Optimizer-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <HintPath>..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Optimizer-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Persistence-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <HintPath>..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Persistence-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.PluginInfrastructure-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <HintPath>..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.PluginInfrastructure-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Runtime.Serialization" />
+    <Reference Include="System.ServiceModel" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="AdministratorMenuItem.cs" />
+    <Compile Include="QueryMenuItem.cs" />
+    <Compile Include="OKBClient.cs" />
+    <Compile Include="OKBExperiment.cs" />
+    <Compile Include="HeuristicLabClientsOKBPlugin.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="ServiceClients\Algorithm.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="ServiceClients\AlgorithmClass.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="ServiceClients\AuthenticationServiceClient.cs" />
+    <Compile Include="ServiceClients\AlgorithmData.cs" />
+    <Compile Include="ServiceClients\AlgorithmParameter.cs" />
+    <Compile Include="ServiceClients\AndFilter.cs" />
+    <Compile Include="ServiceClients\SetComparisonStringAvailableValuesFilter.cs" />
+    <Compile Include="ServiceClients\NameSetComparisonStringAvailableValuesFilter.cs" />
+    <Compile Include="ServiceClients\OrFilter.cs" />
+    <Compile Include="ServiceClients\OrdinalComparisonDateTimeFilter.cs" />
+    <Compile Include="ServiceClients\OrdinalComparisonLongFilter.cs" />
+    <Compile Include="ServiceClients\SetComparisonStringFilter.cs" />
+    <Compile Include="ServiceClients\NameSetComparisonStringFilter.cs" />
+    <Compile Include="ServiceClients\NameOrdinalComparisonLongFilter.cs" />
+    <Compile Include="ServiceClients\NameOrdinalComparisonDoubleFilter.cs" />
+    <Compile Include="ServiceClients\NameEqualityComparisonByteArrayFilter.cs" />
+    <Compile Include="ServiceClients\NameEqualityComparisonBoolFilter.cs" />
+    <Compile Include="ServiceClients\Filter.cs" />
+    <Compile Include="ServiceClients\Run.cs" />
+    <Compile Include="ServiceClients\Experiment.cs" />
+    <Compile Include="ServiceClients\Result.cs" />
+    <Compile Include="ServiceClients\ProblemParameter.cs" />
+    <Compile Include="ServiceClients\OKBServiceClient.cs" />
+    <Compile Include="ServiceClients\ProblemData.cs" />
+    <Compile Include="ServiceClients\Problem.cs" />
+    <Compile Include="ServiceClients\ProblemClass.cs" />
+    <Compile Include="ServiceClients\DataType.cs" />
+    <Compile Include="ServiceClients\NamedOKBItem.cs" />
+    <Compile Include="ServiceClients\Platform.cs" />
+    <Compile Include="ServiceClients\INamedOKBItem.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="ServiceClients\IOKBItem.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="ServiceClients\OKBItem.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Views\AdministratorView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Views\AdministratorView.Designer.cs">
+      <DependentUpon>AdministratorView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Views\AlgorithmClassCollectionView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Views\AlgorithmClassCollectionView.Designer.cs">
+      <DependentUpon>AlgorithmClassCollectionView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Views\AlgorithmCollectionView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Views\AlgorithmCollectionView.Designer.cs">
+      <DependentUpon>AlgorithmCollectionView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Views\AlgorithmView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Views\AlgorithmView.Designer.cs">
+      <DependentUpon>AlgorithmView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Views\AlgorithmDataView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Views\AlgorithmDataView.Designer.cs">
+      <DependentUpon>AlgorithmDataView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Views\AlgorithmParameterCollectionView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Views\AlgorithmParameterCollectionView.Designer.cs">
+      <DependentUpon>AlgorithmParameterCollectionView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Views\AlgorithmParameterView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Views\AlgorithmParameterView.Designer.cs">
+      <DependentUpon>AlgorithmParameterView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Views\AndFilterView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Views\AndFilterView.Designer.cs">
+      <DependentUpon>AndFilterView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Views\SetComparisonStringAvailableValuesFilterView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Views\SetComparisonStringAvailableValuesFilterView.Designer.cs">
+      <DependentUpon>SetComparisonStringAvailableValuesFilterView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Views\NameSetComparisonStringAvailableValuesFilterView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Views\NameSetComparisonStringAvailableValuesFilterView.Designer.cs">
+      <DependentUpon>NameSetComparisonStringAvailableValuesFilterView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Views\OrFilterView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Views\OrFilterView.Designer.cs">
+      <DependentUpon>OrFilterView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Views\CombinedFilterView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Views\CombinedFilterView.Designer.cs">
+      <DependentUpon>CombinedFilterView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Views\NameSetComparisonStringFilterView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Views\NameSetComparisonStringFilterView.Designer.cs">
+      <DependentUpon>NameSetComparisonStringFilterView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Views\NameOrdinalComparisonLongFilterView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Views\NameOrdinalComparisonLongFilterView.Designer.cs">
+      <DependentUpon>NameOrdinalComparisonLongFilterView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Views\NameEqualityComparisonBoolFilterView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Views\NameEqualityComparisonBoolFilterView.Designer.cs">
+      <DependentUpon>NameEqualityComparisonBoolFilterView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Views\SetComparisonStringFilterView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Views\SetComparisonStringFilterView.Designer.cs">
+      <DependentUpon>SetComparisonStringFilterView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Views\SetComparisonFilterView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Views\SetComparisonFilterView.Designer.cs">
+      <DependentUpon>SetComparisonFilterView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Views\OrdinalComparisonLongFilterView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Views\OrdinalComparisonLongFilterView.Designer.cs">
+      <DependentUpon>OrdinalComparisonLongFilterView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Views\NameOrdinalComparisonDoubleFilterView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Views\NameOrdinalComparisonDoubleFilterView.Designer.cs">
+      <DependentUpon>NameOrdinalComparisonDoubleFilterView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Views\OrdinalComparisonFilterView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Views\OrdinalComparisonFilterView.Designer.cs">
+      <DependentUpon>OrdinalComparisonFilterView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Views\EqualityComparisonFilterView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Views\EqualityComparisonFilterView.Designer.cs">
+      <DependentUpon>EqualityComparisonFilterView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Views\FilterView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Views\FilterView.Designer.cs">
+      <DependentUpon>FilterView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Views\QueryView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Views\QueryView.Designer.cs">
+      <DependentUpon>QueryView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Views\RunView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Views\RunView.Designer.cs">
+      <DependentUpon>RunView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Views\ExperimentView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Views\ExperimentView.Designer.cs">
+      <DependentUpon>ExperimentView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Views\RunCollectionView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Views\RunCollectionView.Designer.cs">
+      <DependentUpon>RunCollectionView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Views\ExperimentCollectionView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Views\ExperimentCollectionView.Designer.cs">
+      <DependentUpon>ExperimentCollectionView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Views\ProblemParameterView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Views\ProblemParameterView.Designer.cs">
+      <DependentUpon>ProblemParameterView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Views\ResultView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Views\ResultView.Designer.cs">
+      <DependentUpon>ResultView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Views\ResultCollectionView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Views\ResultCollectionView.Designer.cs">
+      <DependentUpon>ResultCollectionView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Views\ProblemParameterCollectionView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Views\ProblemParameterCollectionView.Designer.cs">
+      <DependentUpon>ProblemParameterCollectionView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Views\OKBExperimentView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Views\OKBExperimentView.Designer.cs">
+      <DependentUpon>OKBExperimentView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Views\ProblemDataView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Views\ProblemDataView.Designer.cs">
+      <DependentUpon>ProblemDataView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Views\ProblemView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Views\ProblemView.Designer.cs">
+      <DependentUpon>ProblemView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Views\ProblemCollectionView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Views\ProblemCollectionView.Designer.cs">
+      <DependentUpon>ProblemCollectionView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Views\ProblemClassCollectionView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Views\ProblemClassCollectionView.Designer.cs">
+      <DependentUpon>ProblemClassCollectionView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Views\DataTypeView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Views\DataTypeView.Designer.cs">
+      <DependentUpon>DataTypeView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Views\DataTypeCollectionView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Views\DataTypeCollectionView.Designer.cs">
+      <DependentUpon>DataTypeCollectionView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Views\PlatformCollectionView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Views\PlatformCollectionView.Designer.cs">
+      <DependentUpon>PlatformCollectionView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Views\OKBItemView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Views\OKBItemView.Designer.cs">
+      <DependentUpon>OKBItemView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Views\NamedOKBItemView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Views\NamedOKBItemView.Designer.cs">
+      <DependentUpon>NamedOKBItemView.cs</DependentUpon>
+    </Compile>
+    <None Include="app.config" />
+    <None Include="Properties\AssemblyInfo.frame" />
+    <None Include="ServiceClients\GenerateServiceClients.cmd" />
+    <None Include="UpdateLocalInstallation.cmd" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+    <None Include="HeuristicLabClientsOKBPlugin.cs.frame" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <PropertyGroup>
+    <PostBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+set TargetPath=$(TargetPath)
+
+call UpdateLocalInstallation.cmd</PostBuildEvent>
+  </PropertyGroup>
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+SubWCRev "%25ProjectDir%25\" "%25ProjectDir%25\Properties\AssemblyInfo.frame" "%25ProjectDir%25\Properties\AssemblyInfo.cs"
+SubWCRev "%25ProjectDir%25\" "%25ProjectDir%25\HeuristicLabClientsOKBPlugin.cs.frame" "%25ProjectDir%25\HeuristicLabClientsOKBPlugin.cs"</PreBuildEvent>
+  </PropertyGroup>
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/HeuristicLabClientsOKBPlugin.cs.frame
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/HeuristicLabClientsOKBPlugin.cs.frame	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/HeuristicLabClientsOKBPlugin.cs.frame	(revision 5296)
@@ -0,0 +1,45 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Clients.OKB {
+  /// <summary>
+  /// Plugin class for HeuristicLab.Clients.OKB plugin.
+  /// </summary>
+  [Plugin("HeuristicLab.Clients.OKB", "3.3.0.$WCREV$")]
+  [PluginFile("HeuristicLab.Clients.OKB-3.3.dll", PluginFileType.Assembly)]  
+  [PluginDependency("HeuristicLab.Clients.Common", "3.3")]
+  [PluginDependency("HeuristicLab.Collections", "3.3")]
+  [PluginDependency("HeuristicLab.Common", "3.3")]
+  [PluginDependency("HeuristicLab.Common.Resources", "3.3")]
+  [PluginDependency("HeuristicLab.Core", "3.3")]
+  [PluginDependency("HeuristicLab.Core.Views", "3.3")]
+  [PluginDependency("HeuristicLab.Data", "3.3")]
+  [PluginDependency("HeuristicLab.MainForm", "3.3")]
+  [PluginDependency("HeuristicLab.MainForm.WindowsForms", "3.3")]
+  [PluginDependency("HeuristicLab.Optimization", "3.3")]
+  [PluginDependency("HeuristicLab.Optimization.Views", "3.3")]
+  [PluginDependency("HeuristicLab.Optimizer", "3.3")]
+  [PluginDependency("HeuristicLab.Persistence", "3.3")]
+  public class HeuristicLabClientsOKBPlugin : PluginBase {
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/OKBClient.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/OKBClient.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/OKBClient.cs	(revision 5296)
@@ -0,0 +1,859 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using HeuristicLab.Clients.Common;
+using HeuristicLab.Collections;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Optimization;
+using HeuristicLab.Persistence.Default.Xml;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Clients.OKB {
+  [Item("OKBClient", "Client for accessing the OKB.")]
+  public sealed class OKBClient : IContent {
+    private static OKBClient instance;
+    public static OKBClient Instance {
+      get {
+        if (instance == null) instance = new OKBClient();
+        return instance;
+      }
+    }
+
+    #region Properties
+    private ItemCollection<Platform> platforms;
+    public ItemCollection<Platform> Platforms {
+      get { return platforms; }
+    }
+    private ItemCollection<DataType> dataTypes;
+    public ItemCollection<DataType> DataTypes {
+      get { return dataTypes; }
+    }
+    private IEnumerable<User> users;
+    public IEnumerable<User> Users {
+      get { return users; }
+    }
+    private ItemCollection<AlgorithmClass> algorithmClasses;
+    public ItemCollection<AlgorithmClass> AlgorithmClasses {
+      get { return algorithmClasses; }
+    }
+    private ItemCollection<Algorithm> algorithms;
+    public ItemCollection<Algorithm> Algorithms {
+      get { return algorithms; }
+    }
+    private ItemCollection<ProblemClass> problemClasses;
+    public ItemCollection<ProblemClass> ProblemClasses {
+      get { return problemClasses; }
+    }
+    private ItemCollection<Problem> problems;
+    public ItemCollection<Problem> Problems {
+      get { return problems; }
+    }
+    #endregion
+
+    private OKBClient() {
+      platforms = new ItemCollection<Platform>();
+      platforms.ItemsRemoved += new CollectionItemsChangedEventHandler<Platform>(platforms_ItemsRemoved);
+      dataTypes = new ItemCollection<DataType>();
+      dataTypes.ItemsRemoved += new CollectionItemsChangedEventHandler<DataType>(dataTypes_ItemsRemoved);
+      algorithmClasses = new ItemCollection<AlgorithmClass>();
+      algorithmClasses.ItemsRemoved += new CollectionItemsChangedEventHandler<AlgorithmClass>(algorithmClasses_ItemsRemoved);
+      algorithms = new ItemCollection<Algorithm>();
+      algorithms.ItemsRemoved += new CollectionItemsChangedEventHandler<Algorithm>(algorithms_ItemsRemoved);
+      problemClasses = new ItemCollection<ProblemClass>();
+      problemClasses.ItemsRemoved += new CollectionItemsChangedEventHandler<ProblemClass>(problemClasses_ItemsRemoved);
+      problems = new ItemCollection<Problem>();
+      problems.ItemsRemoved += new CollectionItemsChangedEventHandler<Problem>(problems_ItemsRemoved);
+    }
+
+    #region Refresh
+    public void Refresh() {
+      OnRefreshing();
+
+      platforms.Clear();
+      dataTypes.Clear();
+      algorithmClasses.Clear();
+      algorithms.Clear();
+      problemClasses.Clear();
+      problems.Clear();
+
+      var call = new Func<Exception>(delegate() {
+        try {
+          platforms.AddRange(CallAdminService<List<Platform>>(s => s.GetPlatforms()).OrderBy(x => x.Name));
+          dataTypes.AddRange(CallAdminService<List<DataType>>(s => s.GetDataTypes()).OrderBy(x => x.Name));
+          users = CallAuthenticationService<List<User>>(s => s.GetUsers()).OrderBy(x => x.Name);
+          algorithmClasses.AddRange(CallAdminService<List<AlgorithmClass>>(s => s.GetAlgorithmClasses()).OrderBy(x => x.Name));
+          algorithms.AddRange(CallAdminService<List<Algorithm>>(s => s.GetAlgorithms()).OrderBy(x => x.Name));
+          problemClasses.AddRange(CallAdminService<List<ProblemClass>>(s => s.GetProblemClasses()).OrderBy(x => x.Name));
+          problems.AddRange(CallAdminService<List<Problem>>(s => s.GetProblems()).OrderBy(x => x.Name));
+          return null;
+        }
+        catch (Exception ex) {
+          return ex;
+        }
+      });
+      call.BeginInvoke(delegate(IAsyncResult result) {
+        Exception ex = call.EndInvoke(result);
+        if (ex != null) ErrorHandling.ShowErrorDialog("Refresh failed.", ex);
+        OnRefreshed();
+      }, null);
+    }
+    #endregion
+
+    #region Store
+    public bool Store(IOKBItem item) {
+      try {
+        if (item.Id == 0) {
+          if (item is Platform)
+            item.Id = CallAdminService<long>(s => s.AddPlatform((Platform)item));
+          else if (item is DataType)
+            item.Id = CallAdminService<long>(s => s.AddDataType((DataType)item));
+          else if (item is AlgorithmClass)
+            item.Id = CallAdminService<long>(s => s.AddAlgorithmClass((AlgorithmClass)item));
+          else if (item is Algorithm)
+            item.Id = CallAdminService<long>(s => s.AddAlgorithm((Algorithm)item));
+          else if (item is AlgorithmParameter)
+            item.Id = CallAdminService<long>(s => s.AddAlgorithmParameter((AlgorithmParameter)item));
+          else if (item is ProblemClass)
+            item.Id = CallAdminService<long>(s => s.AddProblemClass((ProblemClass)item));
+          else if (item is Problem)
+            item.Id = CallAdminService<long>(s => s.AddProblem((Problem)item));
+          else if (item is ProblemParameter)
+            item.Id = CallAdminService<long>(s => s.AddProblemParameter((ProblemParameter)item));
+          else if (item is Result)
+            item.Id = CallAdminService<long>(s => s.AddResult((Result)item));
+          else if (item is Experiment)
+            item.Id = CallAdminService<long>(s => s.AddExperiment((Experiment)item));
+          else if (item is Run)
+            item.Id = CallAdminService<long>(s => s.AddRun((Run)item));
+        } else {
+          if (item is Platform)
+            CallAdminService(s => s.UpdatePlatform((Platform)item));
+          else if (item is DataType)
+            CallAdminService(s => s.UpdateDataType((DataType)item));
+          else if (item is AlgorithmClass)
+            CallAdminService(s => s.UpdateAlgorithmClass((AlgorithmClass)item));
+          else if (item is Algorithm)
+            CallAdminService(s => s.UpdateAlgorithm((Algorithm)item));
+          else if (item is AlgorithmParameter)
+            CallAdminService(s => s.UpdateAlgorithmParameter((AlgorithmParameter)item));
+          else if (item is ProblemClass)
+            CallAdminService(s => s.UpdateProblemClass((ProblemClass)item));
+          else if (item is Problem)
+            CallAdminService(s => s.UpdateProblem((Problem)item));
+          else if (item is ProblemParameter)
+            CallAdminService(s => s.UpdateProblemParameter((ProblemParameter)item));
+          else if (item is Result)
+            CallAdminService(s => s.UpdateResult((Result)item));
+          else if (item is Experiment)
+            item.Id = CallAdminService<long>(s => s.AddExperiment((Experiment)item));
+          else if (item is Run)
+            item.Id = CallAdminService<long>(s => s.AddRun((Run)item));
+        }
+        return true;
+      }
+      catch (Exception ex) {
+        ErrorHandling.ShowErrorDialog("Store failed.", ex);
+        return false;
+      }
+    }
+    #endregion
+
+    #region DataType Methods
+    public DataType ConvertToDataType(Type type) {
+      DataType dataType = DataTypes.FirstOrDefault(x => x.TypeName == type.AssemblyQualifiedName);
+      if (dataType == null) {
+        dataType = new DataType();
+        dataType.Name = type.Name;
+        dataType.TypeName = type.AssemblyQualifiedName;
+        dataType.PlatformId = Platforms.FirstOrDefault(x => x.Name == "HeuristicLab 3.3").Id;
+
+        if (typeof(BoolValue).IsAssignableFrom(type))
+          dataType.SqlName = "bit";
+        else if (typeof(IntValue).IsAssignableFrom(type))
+          dataType.SqlName = "bigint";
+        else if (typeof(DoubleValue).IsAssignableFrom(type))
+          dataType.SqlName = "float";
+        else if (typeof(StringValue).IsAssignableFrom(type) || typeof(IStringConvertibleValue).IsAssignableFrom(type))
+          dataType.SqlName = "nvarchar";
+        else
+          dataType.SqlName = "varbinary";
+
+        dataType.Store();
+        DataTypes.Add(dataType);
+      }
+      return dataType;
+    }
+    #endregion
+
+    #region Algorithm Methods
+    public List<Guid> GetAlgorithmUsers(long algorithmId) {
+      try {
+        return CallAdminService<List<Guid>>(s => s.GetAlgorithmUsers(algorithmId));
+      }
+      catch (Exception ex) {
+        ErrorHandling.ShowErrorDialog("Refresh authorized algorithm users failed.", ex);
+        return null;
+      }
+    }
+    public bool UpdateAlgorithmUsers(long algorithmId, List<Guid> users) {
+      try {
+        CallAdminService(s => s.UpdateAlgorithmUsers(algorithmId, users));
+        return true;
+      }
+      catch (Exception ex) {
+        ErrorHandling.ShowErrorDialog("Update authorized algorithm users failed.", ex);
+        return false;
+      }
+    }
+    public AlgorithmData GetAlgorithmData(long algorithmId) {
+      try {
+        return CallAdminService<AlgorithmData>(s => s.GetAlgorithmData(algorithmId));
+      }
+      catch (Exception ex) {
+        ErrorHandling.ShowErrorDialog("Refresh algorithm data failed.", ex);
+        return null;
+      }
+    }
+    public bool UpdateAlgorithmData(AlgorithmData algorithmData) {
+      try {
+        CallAdminService(s => s.UpdateAlgorithmData(algorithmData));
+        return true;
+      }
+      catch (Exception ex) {
+        ErrorHandling.ShowErrorDialog("Update algorithm data failed.", ex);
+        return false;
+      }
+    }
+    #endregion
+
+    #region Problem Methods
+    public List<Guid> GetProblemUsers(long problemId) {
+      try {
+        return CallAdminService<List<Guid>>(s => s.GetProblemUsers(problemId));
+      }
+      catch (Exception ex) {
+        ErrorHandling.ShowErrorDialog("Refresh authorized problem users failed.", ex);
+        return null;
+      }
+    }
+    public bool UpdateProblemUsers(long problemId, List<Guid> users) {
+      try {
+        CallAdminService(s => s.UpdateProblemUsers(problemId, users));
+        return true;
+      }
+      catch (Exception ex) {
+        ErrorHandling.ShowErrorDialog("Update authorized problem users failed.", ex);
+        return false;
+      }
+    }
+    public ProblemData GetProblemData(long problemId) {
+      try {
+        return CallAdminService<ProblemData>(s => s.GetProblemData(problemId));
+      }
+      catch (Exception ex) {
+        ErrorHandling.ShowErrorDialog("Refresh problem data failed.", ex);
+        return null;
+      }
+    }
+    public bool UpdateProblemData(ProblemData problemData) {
+      try {
+        CallAdminService(s => s.UpdateProblemData(problemData));
+        return true;
+      }
+      catch (Exception ex) {
+        ErrorHandling.ShowErrorDialog("Update problem data failed.", ex);
+        return false;
+      }
+    }
+    #endregion
+
+    #region AlgorithmParameter Methods
+    public AlgorithmParameter GetAlgorithmParameter(long id) {
+      try {
+        return CallAdminService<AlgorithmParameter>(s => s.GetAlgorithmParameter(id));
+      }
+      catch (Exception ex) {
+        ErrorHandling.ShowErrorDialog("Refresh algorithm parameter failed.", ex);
+        return null;
+      }
+    }
+    public ItemCollection<AlgorithmParameter> GetAlgorithmParameters(long algorithmId) {
+      try {
+        ItemCollection<AlgorithmParameter> parameters = new ItemCollection<AlgorithmParameter>();
+        parameters.AddRange(CallAdminService<List<AlgorithmParameter>>(s => s.GetAlgorithmParameters(algorithmId)).OrderBy(x => x.Name));
+        return parameters;
+      }
+      catch (Exception ex) {
+        ErrorHandling.ShowErrorDialog("Refresh algorithm parameters failed.", ex);
+        return null;
+      }
+    }
+    #endregion
+
+    #region ProblemParameter Methods
+    public ProblemParameter GetProblemParameter(long id) {
+      try {
+        return CallAdminService<ProblemParameter>(s => s.GetProblemParameter(id));
+      }
+      catch (Exception ex) {
+        ErrorHandling.ShowErrorDialog("Refresh problem parameter failed.", ex);
+        return null;
+      }
+    }
+    public ItemCollection<ProblemParameter> GetProblemParameters(long problemId) {
+      try {
+        ItemCollection<ProblemParameter> parameters = new ItemCollection<ProblemParameter>();
+        parameters.AddRange(CallAdminService<List<ProblemParameter>>(s => s.GetProblemParameters(problemId)).OrderBy(x => x.Name));
+        return parameters;
+      }
+      catch (Exception ex) {
+        ErrorHandling.ShowErrorDialog("Refresh problem parameters failed.", ex);
+        return null;
+      }
+    }
+    #endregion
+
+    #region Result Methods
+    public Result GetResult(long id) {
+      try {
+        return CallAdminService<Result>(s => s.GetResult(id));
+      }
+      catch (Exception ex) {
+        ErrorHandling.ShowErrorDialog("Refresh result failed.", ex);
+        return null;
+      }
+    }
+    public ItemCollection<Result> GetResults(long algorithmId) {
+      try {
+        ItemCollection<Result> results = new ItemCollection<Result>();
+        results.AddRange(CallAdminService<List<Result>>(s => s.GetResults(algorithmId)).OrderBy(x => x.Name));
+        return results;
+      }
+      catch (Exception ex) {
+        ErrorHandling.ShowErrorDialog("Refresh results failed.", ex);
+        return null;
+      }
+    }
+    #endregion
+
+    #region Experiment Methods
+    public Experiment GetExperiment(long id) {
+      try {
+        return CallAdminService<Experiment>(s => s.GetExperiment(id));
+      }
+      catch (Exception ex) {
+        ErrorHandling.ShowErrorDialog("Refresh experiment failed.", ex);
+        return null;
+      }
+    }
+    public ItemCollection<Experiment> GetExperiments(long algorithmId, long problemId) {
+      try {
+        ItemCollection<Experiment> experiments = new ItemCollection<Experiment>();
+        experiments.AddRange(CallAdminService<List<Experiment>>(s => s.GetExperiments(algorithmId, problemId)));
+        experiments.ItemsRemoved += new CollectionItemsChangedEventHandler<Experiment>(experiments_ItemsRemoved);
+        return experiments;
+      }
+      catch (Exception ex) {
+        ErrorHandling.ShowErrorDialog("Refresh experiments failed.", ex);
+        return null;
+      }
+    }
+    #endregion
+
+    #region Run Methods
+    public ItemCollection<Run> GetRuns(long experimentId) {
+      try {
+        ItemCollection<Run> runs = new ItemCollection<Run>();
+        runs.AddRange(CallAdminService<List<Run>>(s => s.GetRuns(experimentId)).OrderByDescending(x => x.CreatedDate));
+        runs.ItemsRemoved += new CollectionItemsChangedEventHandler<Run>(runs_ItemsRemoved);
+        return runs;
+      }
+      catch (Exception ex) {
+        ErrorHandling.ShowErrorDialog("Refresh runs failed.", ex);
+        return null;
+      }
+    }
+    public bool AddRun(long algorithmId, long problemId, IAlgorithm algorithm) {
+      try {
+        IProblem problem = algorithm.Problem;
+
+        ItemCollection<AlgorithmParameter> algorithmParameters = GetAlgorithmParameters(algorithmId);
+        List<AlgorithmParameterValue> algorithmParameterValues = CollectAlgorithmParameterValues(algorithmId, algorithmParameters, algorithm, "");
+        ItemCollection<ProblemParameter> problemParameters = GetProblemParameters(problemId);
+        List<ProblemParameterValue> problemParameterValues = CollectProblemParamterValues(problemId, problemParameters, problem, "");
+        ItemCollection<Result> results = GetResults(algorithmId);
+        List<ResultValue> resultValues = CollectResultValues(algorithmId, results, algorithm);
+
+        Experiment exp = new Experiment();
+        exp.AlgorithmId = algorithmId;
+        exp.ProblemId = problemId;
+        exp.AlgorithmParameterValues = algorithmParameterValues;
+        exp.ProblemParameterValues = problemParameterValues;
+        exp.Store();
+
+        Run r = new Run();
+        r.ExperimentId = exp.Id;
+        r.ClientId = Guid.NewGuid();
+        r.CreatedDate = DateTime.Now;
+        r.RandomSeed = ((IntValue)((IValueParameter)algorithm.Parameters["Seed"]).Value).Value;
+        r.ResultValues = resultValues;
+        r.Store();
+
+        return true;
+      }
+      catch (Exception ex) {
+        ErrorHandling.ShowErrorDialog("Store run failed.", ex);
+        return false;
+      }
+    }
+
+    private List<AlgorithmParameterValue> CollectAlgorithmParameterValues(long algorithmId, ItemCollection<AlgorithmParameter> parameters, IParameterizedItem item, string prefix) {
+      List<AlgorithmParameterValue> values = new List<AlgorithmParameterValue>();
+      foreach (IValueParameter param in item.Parameters.OfType<IValueParameter>()) {
+        if (param.GetsCollected && (param.Value != null) && (param.Name != "Seed")) {
+          AlgorithmParameter p = parameters.FirstOrDefault(x => x.Name == prefix + param.Name);
+          if (p == null) {
+            p = new AlgorithmParameter();
+            p.Name = prefix + param.Name;
+            p.Alias = prefix + param.Name;
+            p.Description = param.Description;
+            p.AlgorithmId = algorithmId;
+            p.DataTypeId = ConvertToDataType(param.DataType).Id;
+            p.Store();
+            parameters.Add(p);
+          }
+          AlgorithmParameterValue value = CreateAlgorithmParameterValue(param.Value);
+          value.AlgorithmParameterId = p.Id;
+          value.DataTypeId = ConvertToDataType(param.Value.GetType()).Id;
+          values.Add(value);
+        }
+
+        if (param.Value is IParameterizedItem)
+          values.AddRange(CollectAlgorithmParameterValues(algorithmId, parameters, (IParameterizedItem)param.Value, (string.IsNullOrEmpty(prefix) ? param.Name : prefix + param.Name) + "."));
+      }
+      return values;
+    }
+    private AlgorithmParameterValue CreateAlgorithmParameterValue(IItem item) {
+      if (item is BoolValue) {
+        AlgorithmParameterBoolValue value = new AlgorithmParameterBoolValue();
+        value.Value = ((BoolValue)item).Value;
+        return value;
+      } else if (item is DoubleValue) {
+        AlgorithmParameterFloatValue value = new AlgorithmParameterFloatValue();
+        value.Value = ((DoubleValue)item).Value;
+        return value;
+      } else if (item is IntValue) {
+        AlgorithmParameterIntValue value = new AlgorithmParameterIntValue();
+        value.Value = ((IntValue)item).Value;
+        return value;
+      } else if (item is StringValue) {
+        AlgorithmParameterStringValue value = new AlgorithmParameterStringValue();
+        value.Value = ((StringValue)item).Value;
+        return value;
+      } else {
+        AlgorithmParameterBlobValue value = new AlgorithmParameterBlobValue();
+        try {
+          using (MemoryStream stream = new MemoryStream()) {
+            XmlGenerator.Serialize(item, stream);
+            stream.Close();
+            value.Value = stream.ToArray();
+          }
+        }
+        catch (Exception ex) {
+          ErrorHandling.ShowErrorDialog(ex);
+        }
+        return value;
+      }
+    }
+    private List<ProblemParameterValue> CollectProblemParamterValues(long problemId, ItemCollection<ProblemParameter> parameters, IParameterizedItem item, string prefix) {
+      List<ProblemParameterValue> values = new List<ProblemParameterValue>();
+      foreach (IValueParameter param in item.Parameters.OfType<IValueParameter>()) {
+        if (param.GetsCollected && (param.Value != null)) {
+          ProblemParameter p = parameters.FirstOrDefault(x => x.Name == prefix + param.Name);
+          if (p == null) {
+            p = new ProblemParameter();
+            p.Name = prefix + param.Name;
+            p.Alias = prefix + param.Name;
+            p.Description = param.Description;
+            p.ProblemId = problemId;
+            p.DataTypeId = ConvertToDataType(param.DataType).Id;
+            p.Store();
+            parameters.Add(p);
+          }
+          ProblemParameterValue value = CreateProblemParameterValue(param.Value);
+          value.ProblemParameterId = p.Id;
+          value.DataTypeId = ConvertToDataType(param.Value.GetType()).Id;
+          values.Add(value);
+        }
+
+        if (param.Value is IParameterizedItem)
+          values.AddRange(CollectProblemParamterValues(problemId, parameters, (IParameterizedItem)param.Value, (string.IsNullOrEmpty(prefix) ? param.Name : prefix + param.Name) + "."));
+      }
+      return values;
+    }
+    private ProblemParameterValue CreateProblemParameterValue(IItem item) {
+      if (item is BoolValue) {
+        ProblemParameterBoolValue value = new ProblemParameterBoolValue();
+        value.Value = ((BoolValue)item).Value;
+        return value;
+      } else if (item is DoubleValue) {
+        ProblemParameterFloatValue value = new ProblemParameterFloatValue();
+        value.Value = ((DoubleValue)item).Value;
+        return value;
+      } else if (item is IntValue) {
+        ProblemParameterIntValue value = new ProblemParameterIntValue();
+        value.Value = ((IntValue)item).Value;
+        return value;
+      } else if (item is StringValue) {
+        ProblemParameterStringValue value = new ProblemParameterStringValue();
+        value.Value = ((StringValue)item).Value;
+        return value;
+      } else {
+        ProblemParameterBlobValue value = new ProblemParameterBlobValue();
+        try {
+          using (MemoryStream stream = new MemoryStream()) {
+            XmlGenerator.Serialize(item, stream);
+            stream.Close();
+            value.Value = stream.ToArray();
+          }
+        }
+        catch (Exception ex) {
+          ErrorHandling.ShowErrorDialog(ex);
+        }
+        return value;
+      }
+    }
+    private List<ResultValue> CollectResultValues(long algorithmId, ItemCollection<Result> results, IAlgorithm algorithm) {
+      List<ResultValue> values = new List<ResultValue>();
+      foreach (IResult result in algorithm.Results) {
+        if (result.Value != null) {
+          Result r = results.FirstOrDefault(x => x.Name == result.Name);
+          if (r == null) {
+            r = new Result();
+            r.Name = result.Name;
+            r.Alias = result.Name;
+            r.Description = result.Description;
+            r.AlgorithmId = algorithmId;
+            r.DataTypeId = ConvertToDataType(result.DataType).Id;
+            r.Store();
+            results.Add(r);
+          }
+          ResultValue value = CreateResultValue(result.Value);
+          value.ResultId = r.Id;
+          value.DataTypeId = ConvertToDataType(result.Value.GetType()).Id;
+          values.Add(value);
+        }
+      }
+      return values;
+    }
+    private ResultValue CreateResultValue(IItem item) {
+      if (item is BoolValue) {
+        ResultBoolValue value = new ResultBoolValue();
+        value.Value = ((BoolValue)item).Value;
+        return value;
+      } else if (item is DoubleValue) {
+        ResultFloatValue value = new ResultFloatValue();
+        value.Value = ((DoubleValue)item).Value;
+        return value;
+      } else if (item is IntValue) {
+        ResultIntValue value = new ResultIntValue();
+        value.Value = ((IntValue)item).Value;
+        return value;
+      } else if (item is StringValue) {
+        ResultStringValue value = new ResultStringValue();
+        value.Value = ((StringValue)item).Value;
+        return value;
+      } else {
+        ResultBlobValue value = new ResultBlobValue();
+        try {
+          using (MemoryStream stream = new MemoryStream()) {
+            XmlGenerator.Serialize(item, stream);
+            stream.Close();
+            value.Value = stream.ToArray();
+          }
+        }
+        catch (Exception ex) {
+          ErrorHandling.ShowErrorDialog(ex);
+        }
+        return value;
+      }
+    }
+    public RunCollection ConvertOKBRunsToOptimizationRuns(IItemCollection<Run> runs) {
+      RunCollection runCollection = new RunCollection();
+      foreach (Run run in runs) {
+        Optimization.Run r = new Optimization.Run();
+        foreach (ResultValue resultValue in run.ResultValues) {
+          Result result = GetResult(resultValue.ResultId);
+          if (resultValue is ResultBlobValue) {
+            IItem item = null;
+            using (MemoryStream stream = new MemoryStream(((ResultBlobValue)resultValue).Value)) {
+              try {
+                item = XmlParser.Deserialize<IItem>(stream);
+              }
+              catch (Exception ex) {
+                ErrorHandling.ShowErrorDialog(ex);
+              }
+              stream.Close();
+            }
+            r.Results.Add(result.Name, item);
+          } else if (resultValue is ResultBoolValue) {
+            r.Results.Add(result.Name, new BoolValue(((ResultBoolValue)resultValue).Value));
+          } else if (resultValue is ResultFloatValue) {
+            r.Results.Add(result.Name, new DoubleValue(((ResultFloatValue)resultValue).Value));
+          } else if (resultValue is ResultIntValue) {
+            r.Results.Add(result.Name, new IntValue((int)((ResultIntValue)resultValue).Value));
+          } else if (resultValue is ResultStringValue) {
+            r.Results.Add(result.Name, new StringValue(((ResultStringValue)resultValue).Value));
+          }
+        }
+
+        Experiment exp = GetExperiment(run.ExperimentId);
+        foreach (AlgorithmParameterValue algorithmParameterValue in exp.AlgorithmParameterValues) {
+          AlgorithmParameter algorithmParameter = GetAlgorithmParameter(algorithmParameterValue.AlgorithmParameterId);
+          if (algorithmParameterValue is AlgorithmParameterBlobValue) {
+            IItem item = null;
+            using (MemoryStream stream = new MemoryStream(((AlgorithmParameterBlobValue)algorithmParameterValue).Value)) {
+              try {
+                item = XmlParser.Deserialize<IItem>(stream);
+              }
+              catch (Exception ex) {
+                ErrorHandling.ShowErrorDialog(ex);
+              }
+              stream.Close();
+            }
+            r.Parameters.Add(algorithmParameter.Name, item);
+          } else if (algorithmParameterValue is AlgorithmParameterBoolValue) {
+            r.Parameters.Add(algorithmParameter.Name, new BoolValue(((AlgorithmParameterBoolValue)algorithmParameterValue).Value));
+          } else if (algorithmParameterValue is AlgorithmParameterFloatValue) {
+            r.Parameters.Add(algorithmParameter.Name, new DoubleValue(((AlgorithmParameterFloatValue)algorithmParameterValue).Value));
+          } else if (algorithmParameterValue is AlgorithmParameterIntValue) {
+            r.Parameters.Add(algorithmParameter.Name, new IntValue((int)((AlgorithmParameterIntValue)algorithmParameterValue).Value));
+          } else if (algorithmParameterValue is AlgorithmParameterStringValue) {
+            r.Parameters.Add(algorithmParameter.Name, new StringValue(((AlgorithmParameterStringValue)algorithmParameterValue).Value));
+          }
+        }
+        foreach (ProblemParameterValue problemParameterValue in exp.ProblemParameterValues) {
+          ProblemParameter problemParameter = GetProblemParameter(problemParameterValue.ProblemParameterId);
+          if (problemParameterValue is ProblemParameterBlobValue) {
+            IItem item = null;
+            using (MemoryStream stream = new MemoryStream(((ProblemParameterBlobValue)problemParameterValue).Value)) {
+              try {
+                item = XmlParser.Deserialize<IItem>(stream);
+              }
+              catch (Exception ex) {
+                ErrorHandling.ShowErrorDialog(ex);
+              }
+              stream.Close();
+            }
+            r.Parameters.Add(problemParameter.Name, item);
+          } else if (problemParameterValue is ProblemParameterBoolValue) {
+            r.Parameters.Add(problemParameter.Name, new BoolValue(((ProblemParameterBoolValue)problemParameterValue).Value));
+          } else if (problemParameterValue is ProblemParameterFloatValue) {
+            r.Parameters.Add(problemParameter.Name, new DoubleValue(((ProblemParameterFloatValue)problemParameterValue).Value));
+          } else if (problemParameterValue is ProblemParameterIntValue) {
+            r.Parameters.Add(problemParameter.Name, new IntValue((int)((ProblemParameterIntValue)problemParameterValue).Value));
+          } else if (problemParameterValue is ProblemParameterStringValue) {
+            r.Parameters.Add(problemParameter.Name, new StringValue(((ProblemParameterStringValue)problemParameterValue).Value));
+          }
+        }
+        runCollection.Add(r);
+      }
+      return runCollection;
+    }
+    #endregion
+
+    #region Query Methods
+    private IEnumerable<Filter> filters;
+    public IEnumerable<Filter> GetFilters(bool refresh) {
+      if (refresh || (filters == null)) {
+        try {
+          filters = CallAdminService<List<Filter>>(s => s.GetFilters());
+        }
+        catch (Exception ex) {
+          ErrorHandling.ShowErrorDialog("Refresh filters.", ex);
+          return null;
+        }
+      }
+      return filters;
+    }
+    public IEnumerable<Filter> GetFilters() {
+      return GetFilters(false);
+    }
+    public long QueryNumberOfRuns(Filter filter) {
+      try {
+        return CallAdminService<long>(x => x.QueryNumberOfRuns(filter));
+      }
+      catch (Exception ex) {
+        ErrorHandling.ShowErrorDialog("Refresh runs failed.", ex);
+        return -1;
+      }
+    }
+    public ItemCollection<Run> QueryRuns(Filter filter) {
+      try {
+        ItemCollection<Run> runs = new ItemCollection<Run>();
+        runs.AddRange(CallAdminService<List<Run>>(s => s.QueryRuns(filter)).OrderByDescending(x => x.CreatedDate));
+        return runs;
+      }
+      catch (Exception ex) {
+        ErrorHandling.ShowErrorDialog("Refresh runs failed.", ex);
+        return null;
+      }
+    }
+    #endregion
+
+    #region Events
+    public event EventHandler Refreshing;
+    private void OnRefreshing() {
+      EventHandler handler = Refreshing;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    public event EventHandler Refreshed;
+    private void OnRefreshed() {
+      EventHandler handler = Refreshed;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    private void platforms_ItemsRemoved(object sender, CollectionItemsChangedEventArgs<Platform> e) {
+      try {
+        foreach (Platform p in e.Items)
+          CallAdminService(s => s.DeletePlatform(p.Id));
+      }
+      catch (Exception ex) {
+        ErrorHandling.ShowErrorDialog("Delete failed.", ex);
+      }
+    }
+    private void dataTypes_ItemsRemoved(object sender, CollectionItemsChangedEventArgs<DataType> e) {
+      try {
+        foreach (DataType d in e.Items)
+          CallAdminService(s => s.DeleteDataType(d.Id));
+      }
+      catch (Exception ex) {
+        ErrorHandling.ShowErrorDialog("Delete failed.", ex);
+      }
+    }
+    private void algorithmClasses_ItemsRemoved(object sender, CollectionItemsChangedEventArgs<AlgorithmClass> e) {
+      try {
+        foreach (AlgorithmClass a in e.Items)
+          CallAdminService(s => s.DeleteAlgorithmClass(a.Id));
+      }
+      catch (Exception ex) {
+        ErrorHandling.ShowErrorDialog("Delete failed.", ex);
+      }
+    }
+    private void algorithms_ItemsRemoved(object sender, CollectionItemsChangedEventArgs<Algorithm> e) {
+      try {
+        foreach (Algorithm a in e.Items)
+          CallAdminService(s => s.DeleteAlgorithm(a.Id));
+      }
+      catch (Exception ex) {
+        ErrorHandling.ShowErrorDialog("Delete failed.", ex);
+      }
+    }
+    private void problemClasses_ItemsRemoved(object sender, CollectionItemsChangedEventArgs<ProblemClass> e) {
+      try {
+        foreach (ProblemClass p in e.Items)
+          CallAdminService(s => s.DeleteProblemClass(p.Id));
+      }
+      catch (Exception ex) {
+        ErrorHandling.ShowErrorDialog("Delete failed.", ex);
+      }
+    }
+    private void problems_ItemsRemoved(object sender, CollectionItemsChangedEventArgs<Problem> e) {
+      try {
+        foreach (Problem p in e.Items)
+          CallAdminService(s => s.DeleteProblem(p.Id));
+      }
+      catch (Exception ex) {
+        ErrorHandling.ShowErrorDialog("Delete failed.", ex);
+      }
+    }
+    private void experiments_ItemsRemoved(object sender, CollectionItemsChangedEventArgs<Experiment> e) {
+      try {
+        foreach (Experiment exp in e.Items)
+          CallAdminService(s => s.DeleteExperiment(exp.Id));
+      }
+      catch (Exception ex) {
+        ErrorHandling.ShowErrorDialog("Delete failed.", ex);
+      }
+    }
+    private void runs_ItemsRemoved(object sender, CollectionItemsChangedEventArgs<Run> e) {
+      try {
+        foreach (Run r in e.Items)
+          CallAdminService(s => s.DeleteRun(r.Id));
+      }
+      catch (Exception ex) {
+        ErrorHandling.ShowErrorDialog("Delete failed.", ex);
+      }
+    }
+    #endregion
+
+    #region Helpers
+    private void CallAdminService(Action<IOKBService> call) {
+      OKBServiceClient client = ClientFactory.CreateClient<OKBServiceClient, IOKBService>();
+      try {
+        call(client);
+      }
+      finally {
+        try {
+          client.Close();
+        }
+        catch (Exception) {
+          client.Abort();
+        }
+      }
+    }
+    private T CallAdminService<T>(Func<IOKBService, T> call) {
+      OKBServiceClient client = ClientFactory.CreateClient<OKBServiceClient, IOKBService>();
+      try {
+        return call(client);
+      }
+      finally {
+        try {
+          client.Close();
+        }
+        catch (Exception) {
+          client.Abort();
+        }
+      }
+    }
+    private T CallAuthenticationService<T>(Func<IAuthenticationService, T> call) {
+      AuthenticationServiceClient client = ClientFactory.CreateClient<AuthenticationServiceClient, IAuthenticationService>();
+      try {
+        return call(client);
+      }
+      finally {
+        try {
+          client.Close();
+        }
+        catch (Exception) {
+          client.Abort();
+        }
+      }
+    }
+    #endregion
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/OKBExperiment.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/OKBExperiment.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/OKBExperiment.cs	(revision 5296)
@@ -0,0 +1,339 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Drawing;
+using System.IO;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Optimization;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Persistence.Default.Xml;
+
+namespace HeuristicLab.Clients.OKB {
+  [Item("OKB Experiment", "...")]
+  [Creatable("OKB")]
+  [StorableClass]
+  public sealed class OKBExperiment : NamedItem, IOptimizer, IStorableContent {
+    public string Filename { get; set; }
+
+    public override Image ItemImage {
+      get {
+        if (Algorithm != null) return Algorithm.ItemImage;
+        else return HeuristicLab.Common.Resources.VSImageLibrary.Event;
+      }
+    }
+
+    private long algorithmId;
+    public long AlgorithmId {
+      get { return algorithmId; }
+      private set {
+        if (algorithmId != value) {
+          algorithmId = value;
+          OnAlgorithmIdChanged();
+        }
+      }
+    }
+    private IAlgorithm algorithm;
+    private IAlgorithm Algorithm {
+      get { return algorithm; }
+      set {
+        DeregisterAlgorithmEvents();
+        algorithm = value;
+        RegisterAlgorithmEvents();
+        if ((algorithm != null) && (problem != null)) {
+          algorithm.Problem = problem;
+          algorithm.Prepare(true);
+        }
+      }
+    }
+    private long problemId;
+    public long ProblemId {
+      get { return problemId; }
+      private set {
+        if (problemId != value) {
+          problemId = value;
+          OnProblemIdChanged();
+        }
+      }
+    }
+    private IProblem problem;
+    private IProblem Problem {
+      get { return problem; }
+      set {
+        problem = value;
+        if ((algorithm != null) && (problem != null)) {
+          algorithm.Problem = problem;
+          algorithm.Prepare(true);
+        }
+      }
+    }
+
+    public ExecutionState ExecutionState {
+      get {
+        if ((Algorithm != null) && (Problem != null)) return Algorithm.ExecutionState;
+        else return ExecutionState.Stopped;
+      }
+    }
+    public TimeSpan ExecutionTime {
+      get {
+        if (Algorithm != null) return Algorithm.ExecutionTime;
+        else return TimeSpan.Zero;
+      }
+    }
+    public IKeyedItemCollection<string, IParameter> AlgorithmParameters {
+      get {
+        if (Algorithm != null) return Algorithm.Parameters;
+        else return null;
+      }
+    }
+    public IKeyedItemCollection<string, IParameter> ProblemParameters {
+      get {
+        if (Problem != null) return Problem.Parameters;
+        else return null;
+      }
+    }
+    public ResultCollection Results {
+      get {
+        if (Algorithm != null) return Algorithm.Results;
+        else return null;
+      }
+    }
+    public RunCollection Runs {
+      get {
+        if (Algorithm != null) return Algorithm.Runs;
+        else return null;
+      }
+    }
+
+    #region Persistence Properties
+    [Storable(Name = "AlgorithmId")]
+    private long AlgorithmIdPersistence {
+      get { return algorithmId; }
+      set { algorithmId = value; }
+    }
+    [Storable(Name = "Algorithm")]
+    private IAlgorithm AlgorithmPersistence {
+      get { return Algorithm; }
+      set { Algorithm = value; }
+    }
+    [Storable(Name = "ProblemId")]
+    private long ProblemIdPersistence {
+      get { return problemId; }
+      set { problemId = value; }
+    }
+    [Storable(Name = "Problem")]
+    private IProblem ProblemPersistence {
+      get { return Problem; }
+      set { Problem = value; }
+    }
+    #endregion
+
+    [StorableConstructor]
+    private OKBExperiment(bool deserializing) : base(deserializing) { }
+    private OKBExperiment(OKBExperiment original, Cloner cloner)
+      : base(original, cloner) {
+      algorithmId = original.algorithmId;
+      algorithm = cloner.Clone(original.algorithm);
+      problemId = original.problemId;
+      problem = cloner.Clone(original.problem);
+      RegisterAlgorithmEvents();
+    }
+    public OKBExperiment()
+      : base() {
+      name = ItemName;
+      description = ItemDescription;
+    }
+
+    [StorableHook(HookType.AfterDeserialization)]
+    private void AfterDeserialization() {
+      RegisterAlgorithmEvents();
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new OKBExperiment(this, cloner);
+    }
+
+    public void Load(Algorithm algorithm) {
+      if (algorithm == null) {
+        Algorithm = null;
+        AlgorithmId = 0;
+      } else {
+        try {
+          if (AlgorithmId != algorithm.Id) {
+            AlgorithmData algorithmData = OKBClient.Instance.GetAlgorithmData(algorithm.Id);
+            using (MemoryStream stream = new MemoryStream(algorithmData.Data)) {
+              Algorithm = XmlParser.Deserialize<IAlgorithm>(stream);
+              Algorithm.StoreAlgorithmInEachRun = true;
+            }
+          }
+          AlgorithmId = algorithm.Id;
+        }
+        catch (Exception ex) {
+          Algorithm = null;
+          AlgorithmId = 0;
+          OnExceptionOccurred(ex);
+        }
+      }
+    }
+    public void Load(Problem problem) {
+      if (problem == null) {
+        Problem = null;
+        ProblemId = 0;
+      } else {
+        try {
+          if (ProblemId != problem.Id) {
+            ProblemData problemData = OKBClient.Instance.GetProblemData(problem.Id);
+            using (MemoryStream stream = new MemoryStream(problemData.Data)) {
+              Problem = XmlParser.Deserialize<IProblem>(stream);
+            }
+          }
+          ProblemId = problem.Id;
+        }
+        catch (Exception ex) {
+          Problem = null;
+          ProblemId = 0;
+          OnExceptionOccurred(ex);
+        }
+      }
+    }
+
+    public void Prepare(bool clearRuns) {
+      if (Algorithm != null) Algorithm.Prepare(clearRuns);
+    }
+    public void Prepare() {
+      if (Algorithm != null) Algorithm.Prepare();
+    }
+    public void Start() {
+      if (Algorithm != null) Algorithm.Start();
+    }
+    public void Pause() {
+      if (Algorithm != null) Algorithm.Pause();
+    }
+    public void Stop() {
+      if (Algorithm != null) Algorithm.Stop();
+    }
+
+    #region Events
+    public event EventHandler AlgorithmIdChanged;
+    private void OnAlgorithmIdChanged() {
+      EventHandler handler = AlgorithmIdChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    public event EventHandler ProblemIdChanged;
+    private void OnProblemIdChanged() {
+      EventHandler handler = ProblemIdChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    public event EventHandler<EventArgs<Exception>> ExceptionOccurred;
+    private void OnExceptionOccurred(Exception exception) {
+      EventHandler<EventArgs<Exception>> handler = ExceptionOccurred;
+      if (handler != null) handler(this, new EventArgs<Exception>(exception));
+    }
+    public event EventHandler ExecutionStateChanged;
+    private void OnExecutionStateChanged() {
+      EventHandler handler = ExecutionStateChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    public event EventHandler ExecutionTimeChanged;
+    private void OnExecutionTimeChanged() {
+      EventHandler handler = ExecutionTimeChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    public event EventHandler Prepared;
+    private void OnPrepared() {
+      EventHandler handler = Prepared;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    public event EventHandler Started;
+    private void OnStarted() {
+      EventHandler handler = Started;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    public event EventHandler Paused;
+    private void OnPaused() {
+      EventHandler handler = Paused;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    public event EventHandler Stopped;
+    private void OnStopped() {
+      EventHandler handler = Stopped;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    private void RegisterAlgorithmEvents() {
+      if (Algorithm != null) {
+        Algorithm.ExceptionOccurred += new EventHandler<EventArgs<Exception>>(algorithm_ExceptionOccurred);
+        Algorithm.ExecutionStateChanged += new EventHandler(algorithm_ExecutionStateChanged);
+        Algorithm.ExecutionTimeChanged += new EventHandler(algorithm_ExecutionTimeChanged);
+        Algorithm.ItemImageChanged += new EventHandler(algorithm_ItemImageChanged);
+        Algorithm.Paused += new EventHandler(algorithm_Paused);
+        Algorithm.Prepared += new EventHandler(algorithm_Prepared);
+        Algorithm.Started += new EventHandler(algorithm_Started);
+        Algorithm.Stopped += new EventHandler(algorithm_Stopped);
+      }
+    }
+    private void DeregisterAlgorithmEvents() {
+      if (Algorithm != null) {
+        Algorithm.ExceptionOccurred -= new EventHandler<EventArgs<Exception>>(algorithm_ExceptionOccurred);
+        Algorithm.ExecutionStateChanged -= new EventHandler(algorithm_ExecutionStateChanged);
+        Algorithm.ExecutionTimeChanged -= new EventHandler(algorithm_ExecutionTimeChanged);
+        Algorithm.ItemImageChanged -= new EventHandler(algorithm_ItemImageChanged);
+        Algorithm.Paused -= new EventHandler(algorithm_Paused);
+        Algorithm.Prepared -= new EventHandler(algorithm_Prepared);
+        Algorithm.Started -= new EventHandler(algorithm_Started);
+        Algorithm.Stopped -= new EventHandler(algorithm_Stopped);
+      }
+    }
+    private void algorithm_ExceptionOccurred(object sender, EventArgs<Exception> e) {
+      OnExceptionOccurred(e.Value);
+    }
+    private void algorithm_ExecutionStateChanged(object sender, EventArgs e) {
+      OnExecutionStateChanged();
+    }
+    private void algorithm_ExecutionTimeChanged(object sender, EventArgs e) {
+      OnExecutionTimeChanged();
+    }
+    private void algorithm_ItemImageChanged(object sender, EventArgs e) {
+      OnItemImageChanged();
+    }
+    private void algorithm_Paused(object sender, EventArgs e) {
+      OnPaused();
+    }
+    private void algorithm_Prepared(object sender, EventArgs e) {
+      OnPrepared();
+    }
+    private void algorithm_Started(object sender, EventArgs e) {
+      OnStarted();
+    }
+    private void algorithm_Stopped(object sender, EventArgs e) {
+      OnStopped();
+
+      try {
+        OKBClient.Instance.AddRun(AlgorithmId, ProblemId, algorithm);
+      }
+      catch (Exception ex) {
+        OnExceptionOccurred(ex);
+      }
+    }
+    #endregion
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Properties/AssemblyInfo.frame
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Properties/AssemblyInfo.frame	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Properties/AssemblyInfo.frame	(revision 5296)
@@ -0,0 +1,57 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.Clients.OKB")]
+[assembly: AssemblyDescription("HeuristicLab OKB client")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2010 HEAL")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("c96a50ef-5429-4de8-81b2-552b19adb36f")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers 
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("3.3.0.0")]
+[assembly: AssemblyFileVersion("3.3.0.$WCREV$")]
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/QueryMenuItem.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/QueryMenuItem.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/QueryMenuItem.cs	(revision 5296)
@@ -0,0 +1,42 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Collections.Generic;
+using HeuristicLab.Optimizer;
+
+namespace HeuristicLab.Clients.OKB {
+  internal class QueryMenuItem : HeuristicLab.MainForm.WindowsForms.MenuItem, IOptimizerUserInterfaceItemProvider {
+    public override string Name {
+      get { return "&Query"; }
+    }
+    public override IEnumerable<string> Structure {
+      get { return new string[] { "&Services", "&OKB" }; }
+    }
+    public override int Position {
+      get { return 4220; }
+    }
+
+    public override void Execute() {
+      QueryView view = new QueryView();
+      view.Show();
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/Algorithm.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/Algorithm.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/Algorithm.cs	(revision 5296)
@@ -0,0 +1,43 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Clients.OKB {
+  [Item("Algorithm", "An OKB algorithm.")]
+  public partial class Algorithm {
+    protected Algorithm(Algorithm original, Cloner cloner)
+      : base(original, cloner) {
+      PlatformId = original.PlatformId;
+      AlgorithmClassId = original.AlgorithmClassId;
+    }
+    public Algorithm() {
+      Name = "New Algorithm";
+      PlatformId = 1;
+      AlgorithmClassId = 1;
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new Algorithm(this, cloner);
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/AlgorithmClass.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/AlgorithmClass.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/AlgorithmClass.cs	(revision 5296)
@@ -0,0 +1,37 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Clients.OKB {
+  [Item("AlgorithmClass", "An OKB algorithm class.")]
+  public partial class AlgorithmClass {
+    protected AlgorithmClass(AlgorithmClass original, Cloner cloner) : base(original, cloner) { }
+    public AlgorithmClass() {
+      Name = "New Algorithm Class";
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new AlgorithmClass(this, cloner);
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/AlgorithmData.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/AlgorithmData.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/AlgorithmData.cs	(revision 5296)
@@ -0,0 +1,31 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Common;
+
+namespace HeuristicLab.Clients.OKB {
+  public partial class AlgorithmData : IContent {
+    public AlgorithmData() {
+      Data = new byte[0];
+      DataTypeId = 1;
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/AlgorithmParameter.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/AlgorithmParameter.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/AlgorithmParameter.cs	(revision 5296)
@@ -0,0 +1,45 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Clients.OKB {
+  [Item("AlgorithmParameter", "An OKB algorithm parameter.")]
+  public partial class AlgorithmParameter {
+    protected AlgorithmParameter(AlgorithmParameter original, Cloner cloner)
+      : base(original, cloner) {
+      Alias = original.Alias;
+      AlgorithmId = original.AlgorithmId;
+      DataTypeId = original.DataTypeId;
+    }
+    public AlgorithmParameter() {
+      Name = "New AlgorithmParameter";
+      Alias = Name;
+      AlgorithmId = 0;
+      DataTypeId = 1;
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new AlgorithmParameter(this, cloner);
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/AndFilter.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/AndFilter.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/AndFilter.cs	(revision 5296)
@@ -0,0 +1,30 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Linq;
+
+namespace HeuristicLab.Clients.OKB {
+  public partial class AndFilter {
+    public override Filter Clone() {
+      return new AndFilter() { FilterTypeName = FilterTypeName, Label = Label, Filters = Filters.Select(x => x.Clone()).ToList() };
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/AuthenticationServiceClient.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/AuthenticationServiceClient.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/AuthenticationServiceClient.cs	(revision 5296)
@@ -0,0 +1,142 @@
+﻿//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.1
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HeuristicLab.Clients.OKB
+{
+    using System.Runtime.Serialization;
+    
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="User", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataTransfer")]
+    public partial class User : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged
+    {
+        
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        private System.Guid IdField;
+        
+        private string NameField;
+        
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData
+        {
+            get
+            {
+                return this.extensionDataField;
+            }
+            set
+            {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public System.Guid 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.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+    [System.ServiceModel.ServiceContractAttribute(ConfigurationName="HeuristicLab.Clients.OKB.IAuthenticationService")]
+    public interface IAuthenticationService
+    {
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAuthenticationService/GetUser", ReplyAction="http://tempuri.org/IAuthenticationService/GetUserResponse")]
+        HeuristicLab.Clients.OKB.User GetUser(System.Guid id);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAuthenticationService/GetUsers", ReplyAction="http://tempuri.org/IAuthenticationService/GetUsersResponse")]
+        System.Collections.Generic.List<HeuristicLab.Clients.OKB.User> GetUsers();
+    }
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+    public interface IAuthenticationServiceChannel : HeuristicLab.Clients.OKB.IAuthenticationService, System.ServiceModel.IClientChannel
+    {
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+    public partial class AuthenticationServiceClient : System.ServiceModel.ClientBase<HeuristicLab.Clients.OKB.IAuthenticationService>, HeuristicLab.Clients.OKB.IAuthenticationService
+    {
+        
+        public AuthenticationServiceClient()
+        {
+        }
+        
+        public AuthenticationServiceClient(string endpointConfigurationName) : 
+                base(endpointConfigurationName)
+        {
+        }
+        
+        public AuthenticationServiceClient(string endpointConfigurationName, string remoteAddress) : 
+                base(endpointConfigurationName, remoteAddress)
+        {
+        }
+        
+        public AuthenticationServiceClient(string endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) : 
+                base(endpointConfigurationName, remoteAddress)
+        {
+        }
+        
+        public AuthenticationServiceClient(System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress) : 
+                base(binding, remoteAddress)
+        {
+        }
+        
+        public HeuristicLab.Clients.OKB.User GetUser(System.Guid id)
+        {
+            return base.Channel.GetUser(id);
+        }
+        
+        public System.Collections.Generic.List<HeuristicLab.Clients.OKB.User> GetUsers()
+        {
+            return base.Channel.GetUsers();
+        }
+    }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/DataType.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/DataType.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/DataType.cs	(revision 5296)
@@ -0,0 +1,56 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using System.ComponentModel;
+
+namespace HeuristicLab.Clients.OKB {
+  [Item("DataType", "An OKB data type.")]
+  public partial class DataType {
+    protected DataType(DataType original, Cloner cloner)
+      : base(original, cloner) {
+      Name = original.Name;
+      TypeName = original.TypeName;
+      SqlName = original.SqlName;
+      PlatformId = original.PlatformId;
+    }
+    public DataType() {
+      Name = "New Data Type";
+      SqlName = "varbinary";
+      PlatformId = 1;
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new DataType(this, cloner);
+    }
+
+    public override string ToString() {
+      return Name + " (" + TypeName + ")";
+    }
+
+    protected override void OnPropertyChanged(PropertyChangedEventArgs e) {
+      base.OnPropertyChanged(e);
+      if ((e.PropertyName == "Name") || (e.PropertyName == "TypeName"))
+        OnToStringChanged();
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/Experiment.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/Experiment.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/Experiment.cs	(revision 5296)
@@ -0,0 +1,39 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Clients.OKB {
+  [Item("Experiment", "An OKB experiment.")]
+  public partial class Experiment {
+    protected Experiment(Experiment original, Cloner cloner)
+      : base(original, cloner) {
+      AlgorithmId = original.AlgorithmId;
+      ProblemId = original.ProblemId;
+    }
+    public Experiment() { }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new Experiment(this, cloner);
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/Filter.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/Filter.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/Filter.cs	(revision 5296)
@@ -0,0 +1,31 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using HeuristicLab.Common;
+
+namespace HeuristicLab.Clients.OKB {
+  public partial class Filter : IContent {
+    public virtual Filter Clone() {
+      throw new NotImplementedException("Clone not implemented in Filter. Override in derived classes.");
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/GenerateServiceClients.cmd
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/GenerateServiceClients.cmd	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/GenerateServiceClients.cmd	(revision 5296)
@@ -0,0 +1,53 @@
+echo off
+
+echo.
+echo *******************************************************************************************
+echo Generating OKBService client
+echo.
+
+REM If app.config should be generated, use option "/config:..\app.config" instead of "/noConfig".
+
+svcutil.exe ^
+  http://localhost:8732/Design_Time_Addresses/OKB-3.3/OKBService/mex ^
+  /out:OKBServiceClient ^
+  /namespace:*,HeuristicLab.Clients.OKB ^
+  /collectionType:System.Collections.Generic.List`1 ^
+  /targetClientVersion:Version35 ^
+  /enableDataBinding ^
+  /noConfig
+
+echo.
+echo ---------------------------------------------------------------------------------------
+echo !!! ATTENTION !!! ATTENTION !!! ATTENTION !!! ATTENTION !!! ATTENTION !!! ATTENTION !!!
+echo.
+echo Following modifications have to be done manually in generated data contracts:
+echo  * Remove method "protected void RaisePropertyChanged(string propertyName)" in OKBItem
+echo.
+echo !!! ATTENTION !!! ATTENTION !!! ATTENTION !!! ATTENTION !!! ATTENTION !!! ATTENTION !!!
+echo ---------------------------------------------------------------------------------------
+echo.
+echo Generation of OKBService client finished.
+echo *******************************************************************************************
+echo.
+echo.
+echo *******************************************************************************************
+echo Generating AuthenticationService client
+echo.
+
+REM If app.config should be generated, use options "/config:..\app.config" and "/mergeConfig" instead of "/noConfig".
+
+svcutil.exe ^
+  http://localhost:8732/Design_Time_Addresses/OKB-3.3/AuthenticationService/mex ^
+  /out:AuthenticationServiceClient ^
+  /namespace:*,HeuristicLab.Clients.OKB ^
+  /collectionType:System.Collections.Generic.List`1 ^
+  /targetClientVersion:Version35 ^
+  /enableDataBinding ^
+  /noConfig
+
+echo.
+echo Generation of AuthenticationService client finished.
+echo *******************************************************************************************
+echo.
+
+pause
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/INamedOKBItem.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/INamedOKBItem.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/INamedOKBItem.cs	(revision 5296)
@@ -0,0 +1,27 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Clients.OKB {
+  public interface INamedOKBItem : IOKBItem {
+    string Name { get; set; }
+    string Description { get; set; }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/IOKBItem.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/IOKBItem.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/IOKBItem.cs	(revision 5296)
@@ -0,0 +1,35 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.ComponentModel;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Clients.OKB {
+  public interface IOKBItem : IItem, INotifyPropertyChanged {
+    long Id { get; set; }
+    bool Modified { get; }
+
+    void Store();
+
+    event EventHandler ModifiedChanged;
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/NameEqualityComparisonBoolFilter.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/NameEqualityComparisonBoolFilter.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/NameEqualityComparisonBoolFilter.cs	(revision 5296)
@@ -0,0 +1,31 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using HeuristicLab.Common;
+
+namespace HeuristicLab.Clients.OKB {
+  public partial class NameEqualityComparisonBoolFilter {
+    public override Filter Clone() {
+      return new NameEqualityComparisonBoolFilter() { FilterTypeName = FilterTypeName, Label = Label, Name = Name, Comparison = Comparison, Value = Value };
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/NameEqualityComparisonByteArrayFilter.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/NameEqualityComparisonByteArrayFilter.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/NameEqualityComparisonByteArrayFilter.cs	(revision 5296)
@@ -0,0 +1,29 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+
+namespace HeuristicLab.Clients.OKB {
+  public partial class NameEqualityComparisonByteArrayFilter {
+    public override Filter Clone() {
+      return new NameEqualityComparisonByteArrayFilter() { FilterTypeName = FilterTypeName, Label = Label, Name = Name, Comparison = Comparison, Value = Value };
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/NameOrdinalComparisonDoubleFilter.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/NameOrdinalComparisonDoubleFilter.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/NameOrdinalComparisonDoubleFilter.cs	(revision 5296)
@@ -0,0 +1,29 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+
+namespace HeuristicLab.Clients.OKB {
+  public partial class NameOrdinalComparisonDoubleFilter {
+    public override Filter Clone() {
+      return new NameOrdinalComparisonDoubleFilter() { FilterTypeName = FilterTypeName, Label = Label, Name = Name, Comparison = Comparison, Value = Value };
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/NameOrdinalComparisonLongFilter.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/NameOrdinalComparisonLongFilter.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/NameOrdinalComparisonLongFilter.cs	(revision 5296)
@@ -0,0 +1,29 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+
+namespace HeuristicLab.Clients.OKB {
+  public partial class NameOrdinalComparisonLongFilter {
+    public override Filter Clone() {
+      return new NameOrdinalComparisonLongFilter() { FilterTypeName = FilterTypeName, Label = Label, Name = Name, Comparison = Comparison, Value = Value };
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/NameSetComparisonStringAvailableValuesFilter.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/NameSetComparisonStringAvailableValuesFilter.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/NameSetComparisonStringAvailableValuesFilter.cs	(revision 5296)
@@ -0,0 +1,30 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+
+using System.Collections.Generic;
+namespace HeuristicLab.Clients.OKB {
+  public partial class NameSetComparisonStringAvailableValuesFilter {
+    public override Filter Clone() {
+      return new NameSetComparisonStringAvailableValuesFilter() { FilterTypeName = FilterTypeName, Label = Label, Name = Name, Comparison = Comparison, Value = Value, AvailableValues = new List<string>(AvailableValues) };
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/NameSetComparisonStringFilter.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/NameSetComparisonStringFilter.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/NameSetComparisonStringFilter.cs	(revision 5296)
@@ -0,0 +1,29 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+
+namespace HeuristicLab.Clients.OKB {
+  public partial class NameSetComparisonStringFilter {
+    public override Filter Clone() {
+      return new NameSetComparisonStringFilter() { FilterTypeName = FilterTypeName, Label = Label, Name = Name, Comparison = Comparison, Value = Value };
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/NamedOKBItem.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/NamedOKBItem.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/NamedOKBItem.cs	(revision 5296)
@@ -0,0 +1,53 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.ComponentModel;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Clients.OKB {
+  [Item("NamedOKBItem", "Base class for all named OKB items.")]
+  public partial class NamedOKBItem : INamedOKBItem {
+    protected NamedOKBItem(NamedOKBItem original, Cloner cloner)
+      : base(original, cloner) {
+      Name = original.Name;
+      Description = original.Description;
+    }
+    public NamedOKBItem() {
+      Name = "New Item";
+      Description = string.Empty;
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new NamedOKBItem(this, cloner);
+    }
+
+    public override string ToString() {
+      return Name;
+    }
+
+    protected override void OnPropertyChanged(PropertyChangedEventArgs e) {
+      base.OnPropertyChanged(e);
+      if (e.PropertyName == "Name")
+        OnToStringChanged();
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/OKBItem.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/OKBItem.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/OKBItem.cs	(revision 5296)
@@ -0,0 +1,119 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.ComponentModel;
+using System.Drawing;
+using System.Runtime.Serialization;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Clients.OKB {
+  [Item("OKBItem", "Base class for all OKB items.")]
+  public partial class OKBItem : IOKBItem {
+    public virtual string ItemName {
+      get { return ItemAttribute.GetName(this.GetType()); }
+    }
+    public virtual string ItemDescription {
+      get { return ItemAttribute.GetDescription(this.GetType()); }
+    }
+    public Version ItemVersion {
+      get { return ItemAttribute.GetVersion(this.GetType()); }
+    }
+    public virtual Image ItemImage {
+      get {
+        if (Modified)
+          return HeuristicLab.Common.Resources.VSImageLibrary.DatabaseModified;
+        else
+          return HeuristicLab.Common.Resources.VSImageLibrary.Database;
+      }
+    }
+
+    private bool modified;
+    public bool Modified {
+      get { return modified; }
+      private set {
+        if (value != modified) {
+          modified = value;
+          OnModifiedChanged();
+          RaisePropertyChanged("Modified");
+          OnItemImageChanged();
+          RaisePropertyChanged("ItemImage");
+        }
+      }
+    }
+
+    protected OKBItem(OKBItem original, Cloner cloner) {
+      cloner.RegisterClonedObject(original, this);
+      modified = true;
+    }
+    protected OKBItem() {
+      modified = true;
+    }
+
+    [OnDeserialized]
+    private void OnDeserialized(StreamingContext context) {
+      modified = false;
+    }
+
+    public object Clone() {
+      return Clone(new Cloner());
+    }
+    public virtual IDeepCloneable Clone(Cloner cloner) {
+      return new OKBItem(this, cloner);
+    }
+
+    public override string ToString() {
+      return ItemName;
+    }
+
+    public void Store() {
+      if (OKBClient.Instance.Store(this))
+        Modified = false;
+    }
+
+    protected void RaisePropertyChanged(string propertyName) {
+      OnPropertyChanged(new PropertyChangedEventArgs(propertyName));
+      if ((propertyName != "Id") && (propertyName != "Modified") && (propertyName != "ItemImage")) {
+        Modified = true;
+      }
+    }
+    protected virtual void OnPropertyChanged(PropertyChangedEventArgs e) {
+      PropertyChangedEventHandler handler = PropertyChanged;
+      if (handler != null) handler(this, e);
+    }
+    public event EventHandler ModifiedChanged;
+    protected virtual void OnModifiedChanged() {
+      EventHandler handler = ModifiedChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    public event EventHandler ItemImageChanged;
+    protected virtual void OnItemImageChanged() {
+      EventHandler handler = ItemImageChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    public event EventHandler ToStringChanged;
+    protected virtual void OnToStringChanged() {
+      EventHandler handler = ToStringChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/OKBServiceClient.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/OKBServiceClient.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/OKBServiceClient.cs	(revision 5296)
@@ -0,0 +1,2258 @@
+﻿//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.1
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HeuristicLab.Clients.OKB {
+
+
+  [System.Diagnostics.DebuggerStepThroughAttribute()]
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "OKBItem", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataTransfer")]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Experiment))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Run))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.DataType))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.NamedOKBItem))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.AlgorithmParameter))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.ProblemClass))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Problem))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.ProblemParameter))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Platform))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.AlgorithmClass))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Algorithm))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Result))]
+  public partial class OKBItem : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+
+    private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+
+    private long IdField;
+
+    public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+      get {
+        return this.extensionDataField;
+      }
+      set {
+        this.extensionDataField = value;
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public long Id {
+      get {
+        return this.IdField;
+      }
+      set {
+        if ((this.IdField.Equals(value) != true)) {
+          this.IdField = value;
+          this.RaisePropertyChanged("Id");
+        }
+      }
+    }
+
+    public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+  }
+
+  [System.Diagnostics.DebuggerStepThroughAttribute()]
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "Experiment", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataTransfer")]
+  public partial class Experiment : HeuristicLab.Clients.OKB.OKBItem {
+
+    private long AlgorithmIdField;
+
+    private System.Collections.Generic.List<HeuristicLab.Clients.OKB.AlgorithmParameterValue> AlgorithmParameterValuesField;
+
+    private long ProblemIdField;
+
+    private System.Collections.Generic.List<HeuristicLab.Clients.OKB.ProblemParameterValue> ProblemParameterValuesField;
+
+    [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.Collections.Generic.List<HeuristicLab.Clients.OKB.AlgorithmParameterValue> AlgorithmParameterValues {
+      get {
+        return this.AlgorithmParameterValuesField;
+      }
+      set {
+        if ((object.ReferenceEquals(this.AlgorithmParameterValuesField, value) != true)) {
+          this.AlgorithmParameterValuesField = value;
+          this.RaisePropertyChanged("AlgorithmParameterValues");
+        }
+      }
+    }
+
+    [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.ProblemParameterValue> ProblemParameterValues {
+      get {
+        return this.ProblemParameterValuesField;
+      }
+      set {
+        if ((object.ReferenceEquals(this.ProblemParameterValuesField, value) != true)) {
+          this.ProblemParameterValuesField = value;
+          this.RaisePropertyChanged("ProblemParameterValues");
+        }
+      }
+    }
+  }
+
+  [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.DataTransfer")]
+  public partial class Run : HeuristicLab.Clients.OKB.OKBItem {
+
+    private System.Guid ClientIdField;
+
+    private System.DateTime CreatedDateField;
+
+    private long ExperimentIdField;
+
+    private long RandomSeedField;
+
+    private System.Collections.Generic.List<HeuristicLab.Clients.OKB.ResultValue> ResultValuesField;
+
+    private System.Guid UserIdField;
+
+    [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 long ExperimentId {
+      get {
+        return this.ExperimentIdField;
+      }
+      set {
+        if ((this.ExperimentIdField.Equals(value) != true)) {
+          this.ExperimentIdField = value;
+          this.RaisePropertyChanged("ExperimentId");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public long RandomSeed {
+      get {
+        return this.RandomSeedField;
+      }
+      set {
+        if ((this.RandomSeedField.Equals(value) != true)) {
+          this.RandomSeedField = value;
+          this.RaisePropertyChanged("RandomSeed");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public System.Collections.Generic.List<HeuristicLab.Clients.OKB.ResultValue> 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");
+        }
+      }
+    }
+  }
+
+  [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.DataTransfer")]
+  public partial class DataType : HeuristicLab.Clients.OKB.OKBItem {
+
+    private string NameField;
+
+    private long PlatformIdField;
+
+    private string SqlNameField;
+
+    private string TypeNameField;
+
+    [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 long PlatformId {
+      get {
+        return this.PlatformIdField;
+      }
+      set {
+        if ((this.PlatformIdField.Equals(value) != true)) {
+          this.PlatformIdField = value;
+          this.RaisePropertyChanged("PlatformId");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public string SqlName {
+      get {
+        return this.SqlNameField;
+      }
+      set {
+        if ((object.ReferenceEquals(this.SqlNameField, value) != true)) {
+          this.SqlNameField = value;
+          this.RaisePropertyChanged("SqlName");
+        }
+      }
+    }
+
+    [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");
+        }
+      }
+    }
+  }
+
+  [System.Diagnostics.DebuggerStepThroughAttribute()]
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "NamedOKBItem", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataTransfer")]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.AlgorithmParameter))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.ProblemClass))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Problem))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.ProblemParameter))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Platform))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.AlgorithmClass))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Algorithm))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Result))]
+  public partial class NamedOKBItem : HeuristicLab.Clients.OKB.OKBItem {
+
+    private string DescriptionField;
+
+    private string NameField;
+
+    [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");
+        }
+      }
+    }
+  }
+
+  [System.Diagnostics.DebuggerStepThroughAttribute()]
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "AlgorithmParameter", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataTransfer")]
+  public partial class AlgorithmParameter : HeuristicLab.Clients.OKB.NamedOKBItem {
+
+    private long AlgorithmIdField;
+
+    private string AliasField;
+
+    private long DataTypeIdField;
+
+    [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 string Alias {
+      get {
+        return this.AliasField;
+      }
+      set {
+        if ((object.ReferenceEquals(this.AliasField, value) != true)) {
+          this.AliasField = value;
+          this.RaisePropertyChanged("Alias");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public long DataTypeId {
+      get {
+        return this.DataTypeIdField;
+      }
+      set {
+        if ((this.DataTypeIdField.Equals(value) != true)) {
+          this.DataTypeIdField = value;
+          this.RaisePropertyChanged("DataTypeId");
+        }
+      }
+    }
+  }
+
+  [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.DataTransfer")]
+  public partial class ProblemClass : HeuristicLab.Clients.OKB.NamedOKBItem {
+  }
+
+  [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.DataTransfer")]
+  public partial class Problem : HeuristicLab.Clients.OKB.NamedOKBItem {
+
+    private long PlatformIdField;
+
+    private long ProblemClassIdField;
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public long PlatformId {
+      get {
+        return this.PlatformIdField;
+      }
+      set {
+        if ((this.PlatformIdField.Equals(value) != true)) {
+          this.PlatformIdField = value;
+          this.RaisePropertyChanged("PlatformId");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public long ProblemClassId {
+      get {
+        return this.ProblemClassIdField;
+      }
+      set {
+        if ((this.ProblemClassIdField.Equals(value) != true)) {
+          this.ProblemClassIdField = value;
+          this.RaisePropertyChanged("ProblemClassId");
+        }
+      }
+    }
+  }
+
+  [System.Diagnostics.DebuggerStepThroughAttribute()]
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "ProblemParameter", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataTransfer")]
+  public partial class ProblemParameter : HeuristicLab.Clients.OKB.NamedOKBItem {
+
+    private string AliasField;
+
+    private long DataTypeIdField;
+
+    private long ProblemIdField;
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public string Alias {
+      get {
+        return this.AliasField;
+      }
+      set {
+        if ((object.ReferenceEquals(this.AliasField, value) != true)) {
+          this.AliasField = value;
+          this.RaisePropertyChanged("Alias");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public long DataTypeId {
+      get {
+        return this.DataTypeIdField;
+      }
+      set {
+        if ((this.DataTypeIdField.Equals(value) != true)) {
+          this.DataTypeIdField = value;
+          this.RaisePropertyChanged("DataTypeId");
+        }
+      }
+    }
+
+    [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.Diagnostics.DebuggerStepThroughAttribute()]
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "Platform", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataTransfer")]
+  public partial class Platform : HeuristicLab.Clients.OKB.NamedOKBItem {
+  }
+
+  [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.DataTransfer")]
+  public partial class AlgorithmClass : HeuristicLab.Clients.OKB.NamedOKBItem {
+  }
+
+  [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.DataTransfer")]
+  public partial class Algorithm : HeuristicLab.Clients.OKB.NamedOKBItem {
+
+    private long AlgorithmClassIdField;
+
+    private long PlatformIdField;
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public long AlgorithmClassId {
+      get {
+        return this.AlgorithmClassIdField;
+      }
+      set {
+        if ((this.AlgorithmClassIdField.Equals(value) != true)) {
+          this.AlgorithmClassIdField = value;
+          this.RaisePropertyChanged("AlgorithmClassId");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public long PlatformId {
+      get {
+        return this.PlatformIdField;
+      }
+      set {
+        if ((this.PlatformIdField.Equals(value) != true)) {
+          this.PlatformIdField = value;
+          this.RaisePropertyChanged("PlatformId");
+        }
+      }
+    }
+  }
+
+  [System.Diagnostics.DebuggerStepThroughAttribute()]
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "Result", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataTransfer")]
+  public partial class Result : HeuristicLab.Clients.OKB.NamedOKBItem {
+
+    private long AlgorithmIdField;
+
+    private string AliasField;
+
+    private long DataTypeIdField;
+
+    [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 string Alias {
+      get {
+        return this.AliasField;
+      }
+      set {
+        if ((object.ReferenceEquals(this.AliasField, value) != true)) {
+          this.AliasField = value;
+          this.RaisePropertyChanged("Alias");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public long DataTypeId {
+      get {
+        return this.DataTypeIdField;
+      }
+      set {
+        if ((this.DataTypeIdField.Equals(value) != true)) {
+          this.DataTypeIdField = value;
+          this.RaisePropertyChanged("DataTypeId");
+        }
+      }
+    }
+  }
+
+  [System.Diagnostics.DebuggerStepThroughAttribute()]
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "AlgorithmParameterValue", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataTransfer")]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.AlgorithmParameterBoolValue))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.AlgorithmParameterBlobValue))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.AlgorithmParameterStringValue))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.AlgorithmParameterFloatValue))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.AlgorithmParameterIntValue))]
+  public partial class AlgorithmParameterValue : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+
+    private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+
+    private long AlgorithmParameterIdField;
+
+    private long DataTypeIdField;
+
+    private long ExperimentIdField;
+
+    public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+      get {
+        return this.extensionDataField;
+      }
+      set {
+        this.extensionDataField = value;
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public long AlgorithmParameterId {
+      get {
+        return this.AlgorithmParameterIdField;
+      }
+      set {
+        if ((this.AlgorithmParameterIdField.Equals(value) != true)) {
+          this.AlgorithmParameterIdField = value;
+          this.RaisePropertyChanged("AlgorithmParameterId");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public long DataTypeId {
+      get {
+        return this.DataTypeIdField;
+      }
+      set {
+        if ((this.DataTypeIdField.Equals(value) != true)) {
+          this.DataTypeIdField = value;
+          this.RaisePropertyChanged("DataTypeId");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public long ExperimentId {
+      get {
+        return this.ExperimentIdField;
+      }
+      set {
+        if ((this.ExperimentIdField.Equals(value) != true)) {
+          this.ExperimentIdField = value;
+          this.RaisePropertyChanged("ExperimentId");
+        }
+      }
+    }
+
+    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 = "ProblemParameterValue", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataTransfer")]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.ProblemParameterBoolValue))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.ProblemParameterBlobValue))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.ProblemParameterFloatValue))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.ProblemParameterStringValue))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.ProblemParameterIntValue))]
+  public partial class ProblemParameterValue : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+
+    private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+
+    private long DataTypeIdField;
+
+    private long ExperimentIdField;
+
+    private long ProblemParameterIdField;
+
+    public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+      get {
+        return this.extensionDataField;
+      }
+      set {
+        this.extensionDataField = value;
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public long DataTypeId {
+      get {
+        return this.DataTypeIdField;
+      }
+      set {
+        if ((this.DataTypeIdField.Equals(value) != true)) {
+          this.DataTypeIdField = value;
+          this.RaisePropertyChanged("DataTypeId");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public long ExperimentId {
+      get {
+        return this.ExperimentIdField;
+      }
+      set {
+        if ((this.ExperimentIdField.Equals(value) != true)) {
+          this.ExperimentIdField = value;
+          this.RaisePropertyChanged("ExperimentId");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public long ProblemParameterId {
+      get {
+        return this.ProblemParameterIdField;
+      }
+      set {
+        if ((this.ProblemParameterIdField.Equals(value) != true)) {
+          this.ProblemParameterIdField = value;
+          this.RaisePropertyChanged("ProblemParameterId");
+        }
+      }
+    }
+
+    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 = "AlgorithmParameterBoolValue", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataTransfer")]
+  public partial class AlgorithmParameterBoolValue : HeuristicLab.Clients.OKB.AlgorithmParameterValue {
+
+    private bool ValueField;
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public bool Value {
+      get {
+        return this.ValueField;
+      }
+      set {
+        if ((this.ValueField.Equals(value) != true)) {
+          this.ValueField = value;
+          this.RaisePropertyChanged("Value");
+        }
+      }
+    }
+  }
+
+  [System.Diagnostics.DebuggerStepThroughAttribute()]
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "AlgorithmParameterBlobValue", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataTransfer")]
+  public partial class AlgorithmParameterBlobValue : HeuristicLab.Clients.OKB.AlgorithmParameterValue {
+
+    private byte[] ValueField;
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public byte[] Value {
+      get {
+        return this.ValueField;
+      }
+      set {
+        if ((object.ReferenceEquals(this.ValueField, value) != true)) {
+          this.ValueField = value;
+          this.RaisePropertyChanged("Value");
+        }
+      }
+    }
+  }
+
+  [System.Diagnostics.DebuggerStepThroughAttribute()]
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "AlgorithmParameterStringValue", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataTransfer")]
+  public partial class AlgorithmParameterStringValue : HeuristicLab.Clients.OKB.AlgorithmParameterValue {
+
+    private string ValueField;
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public string Value {
+      get {
+        return this.ValueField;
+      }
+      set {
+        if ((object.ReferenceEquals(this.ValueField, value) != true)) {
+          this.ValueField = value;
+          this.RaisePropertyChanged("Value");
+        }
+      }
+    }
+  }
+
+  [System.Diagnostics.DebuggerStepThroughAttribute()]
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "AlgorithmParameterFloatValue", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataTransfer")]
+  public partial class AlgorithmParameterFloatValue : HeuristicLab.Clients.OKB.AlgorithmParameterValue {
+
+    private double ValueField;
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public double Value {
+      get {
+        return this.ValueField;
+      }
+      set {
+        if ((this.ValueField.Equals(value) != true)) {
+          this.ValueField = value;
+          this.RaisePropertyChanged("Value");
+        }
+      }
+    }
+  }
+
+  [System.Diagnostics.DebuggerStepThroughAttribute()]
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "AlgorithmParameterIntValue", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataTransfer")]
+  public partial class AlgorithmParameterIntValue : HeuristicLab.Clients.OKB.AlgorithmParameterValue {
+
+    private long ValueField;
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public long Value {
+      get {
+        return this.ValueField;
+      }
+      set {
+        if ((this.ValueField.Equals(value) != true)) {
+          this.ValueField = value;
+          this.RaisePropertyChanged("Value");
+        }
+      }
+    }
+  }
+
+  [System.Diagnostics.DebuggerStepThroughAttribute()]
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "ProblemParameterBoolValue", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataTransfer")]
+  public partial class ProblemParameterBoolValue : HeuristicLab.Clients.OKB.ProblemParameterValue {
+
+    private bool ValueField;
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public bool Value {
+      get {
+        return this.ValueField;
+      }
+      set {
+        if ((this.ValueField.Equals(value) != true)) {
+          this.ValueField = value;
+          this.RaisePropertyChanged("Value");
+        }
+      }
+    }
+  }
+
+  [System.Diagnostics.DebuggerStepThroughAttribute()]
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "ProblemParameterBlobValue", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataTransfer")]
+  public partial class ProblemParameterBlobValue : HeuristicLab.Clients.OKB.ProblemParameterValue {
+
+    private byte[] ValueField;
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public byte[] Value {
+      get {
+        return this.ValueField;
+      }
+      set {
+        if ((object.ReferenceEquals(this.ValueField, value) != true)) {
+          this.ValueField = value;
+          this.RaisePropertyChanged("Value");
+        }
+      }
+    }
+  }
+
+  [System.Diagnostics.DebuggerStepThroughAttribute()]
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "ProblemParameterFloatValue", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataTransfer")]
+  public partial class ProblemParameterFloatValue : HeuristicLab.Clients.OKB.ProblemParameterValue {
+
+    private double ValueField;
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public double Value {
+      get {
+        return this.ValueField;
+      }
+      set {
+        if ((this.ValueField.Equals(value) != true)) {
+          this.ValueField = value;
+          this.RaisePropertyChanged("Value");
+        }
+      }
+    }
+  }
+
+  [System.Diagnostics.DebuggerStepThroughAttribute()]
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "ProblemParameterStringValue", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataTransfer")]
+  public partial class ProblemParameterStringValue : HeuristicLab.Clients.OKB.ProblemParameterValue {
+
+    private string ValueField;
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public string Value {
+      get {
+        return this.ValueField;
+      }
+      set {
+        if ((object.ReferenceEquals(this.ValueField, value) != true)) {
+          this.ValueField = value;
+          this.RaisePropertyChanged("Value");
+        }
+      }
+    }
+  }
+
+  [System.Diagnostics.DebuggerStepThroughAttribute()]
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "ProblemParameterIntValue", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataTransfer")]
+  public partial class ProblemParameterIntValue : HeuristicLab.Clients.OKB.ProblemParameterValue {
+
+    private long ValueField;
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public long Value {
+      get {
+        return this.ValueField;
+      }
+      set {
+        if ((this.ValueField.Equals(value) != true)) {
+          this.ValueField = value;
+          this.RaisePropertyChanged("Value");
+        }
+      }
+    }
+  }
+
+  [System.Diagnostics.DebuggerStepThroughAttribute()]
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "ResultValue", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataTransfer")]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.ResultStringValue))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.ResultFloatValue))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.ResultBlobValue))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.ResultBoolValue))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.ResultIntValue))]
+  public partial class ResultValue : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+
+    private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+
+    private long DataTypeIdField;
+
+    private long ResultIdField;
+
+    private long RunIdField;
+
+    public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+      get {
+        return this.extensionDataField;
+      }
+      set {
+        this.extensionDataField = value;
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public long DataTypeId {
+      get {
+        return this.DataTypeIdField;
+      }
+      set {
+        if ((this.DataTypeIdField.Equals(value) != true)) {
+          this.DataTypeIdField = value;
+          this.RaisePropertyChanged("DataTypeId");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public long ResultId {
+      get {
+        return this.ResultIdField;
+      }
+      set {
+        if ((this.ResultIdField.Equals(value) != true)) {
+          this.ResultIdField = value;
+          this.RaisePropertyChanged("ResultId");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public 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 = "ResultStringValue", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataTransfer")]
+  public partial class ResultStringValue : HeuristicLab.Clients.OKB.ResultValue {
+
+    private string ValueField;
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public string Value {
+      get {
+        return this.ValueField;
+      }
+      set {
+        if ((object.ReferenceEquals(this.ValueField, value) != true)) {
+          this.ValueField = value;
+          this.RaisePropertyChanged("Value");
+        }
+      }
+    }
+  }
+
+  [System.Diagnostics.DebuggerStepThroughAttribute()]
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "ResultFloatValue", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataTransfer")]
+  public partial class ResultFloatValue : HeuristicLab.Clients.OKB.ResultValue {
+
+    private double ValueField;
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public double Value {
+      get {
+        return this.ValueField;
+      }
+      set {
+        if ((this.ValueField.Equals(value) != true)) {
+          this.ValueField = value;
+          this.RaisePropertyChanged("Value");
+        }
+      }
+    }
+  }
+
+  [System.Diagnostics.DebuggerStepThroughAttribute()]
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "ResultBlobValue", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataTransfer")]
+  public partial class ResultBlobValue : HeuristicLab.Clients.OKB.ResultValue {
+
+    private byte[] ValueField;
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public byte[] Value {
+      get {
+        return this.ValueField;
+      }
+      set {
+        if ((object.ReferenceEquals(this.ValueField, value) != true)) {
+          this.ValueField = value;
+          this.RaisePropertyChanged("Value");
+        }
+      }
+    }
+  }
+
+  [System.Diagnostics.DebuggerStepThroughAttribute()]
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "ResultBoolValue", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataTransfer")]
+  public partial class ResultBoolValue : HeuristicLab.Clients.OKB.ResultValue {
+
+    private bool ValueField;
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public bool Value {
+      get {
+        return this.ValueField;
+      }
+      set {
+        if ((this.ValueField.Equals(value) != true)) {
+          this.ValueField = value;
+          this.RaisePropertyChanged("Value");
+        }
+      }
+    }
+  }
+
+  [System.Diagnostics.DebuggerStepThroughAttribute()]
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "ResultIntValue", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataTransfer")]
+  public partial class ResultIntValue : HeuristicLab.Clients.OKB.ResultValue {
+
+    private long ValueField;
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public long Value {
+      get {
+        return this.ValueField;
+      }
+      set {
+        if ((this.ValueField.Equals(value) != true)) {
+          this.ValueField = value;
+          this.RaisePropertyChanged("Value");
+        }
+      }
+    }
+  }
+
+  [System.Diagnostics.DebuggerStepThroughAttribute()]
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "Filter", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataTransfer")]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.SetComparisonFilter))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.NameSetComparisonStringFilter))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.NameSetComparisonStringAvailableValuesFilter))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.SetComparisonStringFilter))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.SetComparisonStringAvailableValuesFilter))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.EqualityComparisonFilter))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.NameEqualityComparisonByteArrayFilter))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.NameEqualityComparisonBoolFilter))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.OrdinalComparisonFilter))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.NameOrdinalComparisonDoubleFilter))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.OrdinalComparisonDateTimeFilter))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.NameOrdinalComparisonLongFilter))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.OrdinalComparisonLongFilter))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.CombinedFilter))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.OrFilter))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.AndFilter))]
+  public partial class Filter : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+
+    private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+
+    private string FilterTypeNameField;
+
+    private string LabelField;
+
+    public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+      get {
+        return this.extensionDataField;
+      }
+      set {
+        this.extensionDataField = value;
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public string FilterTypeName {
+      get {
+        return this.FilterTypeNameField;
+      }
+      set {
+        if ((object.ReferenceEquals(this.FilterTypeNameField, value) != true)) {
+          this.FilterTypeNameField = value;
+          this.RaisePropertyChanged("FilterTypeName");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public string Label {
+      get {
+        return this.LabelField;
+      }
+      set {
+        if ((object.ReferenceEquals(this.LabelField, value) != true)) {
+          this.LabelField = value;
+          this.RaisePropertyChanged("Label");
+        }
+      }
+    }
+
+    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 = "SetComparisonFilter", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataTransfer")]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.NameSetComparisonStringFilter))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.NameSetComparisonStringAvailableValuesFilter))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.SetComparisonStringFilter))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.SetComparisonStringAvailableValuesFilter))]
+  public partial class SetComparisonFilter : HeuristicLab.Clients.OKB.Filter {
+
+    private HeuristicLab.Clients.OKB.SetComparison ComparisonField;
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public HeuristicLab.Clients.OKB.SetComparison Comparison {
+      get {
+        return this.ComparisonField;
+      }
+      set {
+        if ((this.ComparisonField.Equals(value) != true)) {
+          this.ComparisonField = value;
+          this.RaisePropertyChanged("Comparison");
+        }
+      }
+    }
+  }
+
+  [System.Diagnostics.DebuggerStepThroughAttribute()]
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "NameSetComparisonStringFilter", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataTransfer")]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.NameSetComparisonStringAvailableValuesFilter))]
+  public partial class NameSetComparisonStringFilter : HeuristicLab.Clients.OKB.SetComparisonFilter {
+
+    private string NameField;
+
+    private string ValueField;
+
+    [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 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 = "NameSetComparisonStringAvailableValuesFilter", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataTransfer")]
+  public partial class NameSetComparisonStringAvailableValuesFilter : HeuristicLab.Clients.OKB.NameSetComparisonStringFilter {
+
+    private System.Collections.Generic.List<string> AvailableValuesField;
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public System.Collections.Generic.List<string> AvailableValues {
+      get {
+        return this.AvailableValuesField;
+      }
+      set {
+        if ((object.ReferenceEquals(this.AvailableValuesField, value) != true)) {
+          this.AvailableValuesField = value;
+          this.RaisePropertyChanged("AvailableValues");
+        }
+      }
+    }
+  }
+
+  [System.Diagnostics.DebuggerStepThroughAttribute()]
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "SetComparisonStringFilter", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataTransfer")]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.SetComparisonStringAvailableValuesFilter))]
+  public partial class SetComparisonStringFilter : HeuristicLab.Clients.OKB.SetComparisonFilter {
+
+    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 = "SetComparisonStringAvailableValuesFilter", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataTransfer")]
+  public partial class SetComparisonStringAvailableValuesFilter : HeuristicLab.Clients.OKB.SetComparisonStringFilter {
+
+    private System.Collections.Generic.List<string> AvailableValuesField;
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public System.Collections.Generic.List<string> AvailableValues {
+      get {
+        return this.AvailableValuesField;
+      }
+      set {
+        if ((object.ReferenceEquals(this.AvailableValuesField, value) != true)) {
+          this.AvailableValuesField = value;
+          this.RaisePropertyChanged("AvailableValues");
+        }
+      }
+    }
+  }
+
+  [System.Diagnostics.DebuggerStepThroughAttribute()]
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "EqualityComparisonFilter", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataTransfer")]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.NameEqualityComparisonByteArrayFilter))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.NameEqualityComparisonBoolFilter))]
+  public partial class EqualityComparisonFilter : HeuristicLab.Clients.OKB.Filter {
+
+    private HeuristicLab.Clients.OKB.EqualityComparison ComparisonField;
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public HeuristicLab.Clients.OKB.EqualityComparison Comparison {
+      get {
+        return this.ComparisonField;
+      }
+      set {
+        if ((this.ComparisonField.Equals(value) != true)) {
+          this.ComparisonField = value;
+          this.RaisePropertyChanged("Comparison");
+        }
+      }
+    }
+  }
+
+  [System.Diagnostics.DebuggerStepThroughAttribute()]
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "NameEqualityComparisonByteArrayFilter", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataTransfer")]
+  public partial class NameEqualityComparisonByteArrayFilter : HeuristicLab.Clients.OKB.EqualityComparisonFilter {
+
+    private string NameField;
+
+    private byte[] ValueField;
+
+    [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 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 = "NameEqualityComparisonBoolFilter", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataTransfer")]
+  public partial class NameEqualityComparisonBoolFilter : HeuristicLab.Clients.OKB.EqualityComparisonFilter {
+
+    private string NameField;
+
+    private bool ValueField;
+
+    [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 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 = "OrdinalComparisonFilter", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataTransfer")]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.NameOrdinalComparisonDoubleFilter))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.OrdinalComparisonDateTimeFilter))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.NameOrdinalComparisonLongFilter))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.OrdinalComparisonLongFilter))]
+  public partial class OrdinalComparisonFilter : HeuristicLab.Clients.OKB.Filter {
+
+    private HeuristicLab.Clients.OKB.OrdinalComparison ComparisonField;
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public HeuristicLab.Clients.OKB.OrdinalComparison Comparison {
+      get {
+        return this.ComparisonField;
+      }
+      set {
+        if ((this.ComparisonField.Equals(value) != true)) {
+          this.ComparisonField = value;
+          this.RaisePropertyChanged("Comparison");
+        }
+      }
+    }
+  }
+
+  [System.Diagnostics.DebuggerStepThroughAttribute()]
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "NameOrdinalComparisonDoubleFilter", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataTransfer")]
+  public partial class NameOrdinalComparisonDoubleFilter : HeuristicLab.Clients.OKB.OrdinalComparisonFilter {
+
+    private string NameField;
+
+    private double ValueField;
+
+    [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 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 = "OrdinalComparisonDateTimeFilter", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataTransfer")]
+  public partial class OrdinalComparisonDateTimeFilter : HeuristicLab.Clients.OKB.OrdinalComparisonFilter {
+
+    private System.DateTime ValueField;
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public System.DateTime 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 = "NameOrdinalComparisonLongFilter", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataTransfer")]
+  public partial class NameOrdinalComparisonLongFilter : HeuristicLab.Clients.OKB.OrdinalComparisonFilter {
+
+    private string NameField;
+
+    private long ValueField;
+
+    [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 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 = "OrdinalComparisonLongFilter", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataTransfer")]
+  public partial class OrdinalComparisonLongFilter : HeuristicLab.Clients.OKB.OrdinalComparisonFilter {
+
+    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 = "CombinedFilter", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataTransfer")]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.OrFilter))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.AndFilter))]
+  public partial class CombinedFilter : HeuristicLab.Clients.OKB.Filter {
+
+    private System.Collections.Generic.List<HeuristicLab.Clients.OKB.Filter> FiltersField;
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public System.Collections.Generic.List<HeuristicLab.Clients.OKB.Filter> Filters {
+      get {
+        return this.FiltersField;
+      }
+      set {
+        if ((object.ReferenceEquals(this.FiltersField, value) != true)) {
+          this.FiltersField = value;
+          this.RaisePropertyChanged("Filters");
+        }
+      }
+    }
+  }
+
+  [System.Diagnostics.DebuggerStepThroughAttribute()]
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "OrFilter", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataTransfer")]
+  public partial class OrFilter : HeuristicLab.Clients.OKB.CombinedFilter {
+  }
+
+  [System.Diagnostics.DebuggerStepThroughAttribute()]
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "AndFilter", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataTransfer")]
+  public partial class AndFilter : HeuristicLab.Clients.OKB.CombinedFilter {
+  }
+
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "SetComparison", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataTransfer")]
+  public enum SetComparison : int {
+
+    [System.Runtime.Serialization.EnumMemberAttribute()]
+    Equal = 0,
+
+    [System.Runtime.Serialization.EnumMemberAttribute()]
+    NotEqual = 1,
+
+    [System.Runtime.Serialization.EnumMemberAttribute()]
+    Contains = 2,
+
+    [System.Runtime.Serialization.EnumMemberAttribute()]
+    NotContains = 3,
+  }
+
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "EqualityComparison", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataTransfer")]
+  public enum EqualityComparison : int {
+
+    [System.Runtime.Serialization.EnumMemberAttribute()]
+    Equal = 0,
+
+    [System.Runtime.Serialization.EnumMemberAttribute()]
+    NotEqual = 1,
+  }
+
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "OrdinalComparison", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataTransfer")]
+  public enum OrdinalComparison : int {
+
+    [System.Runtime.Serialization.EnumMemberAttribute()]
+    Less = 0,
+
+    [System.Runtime.Serialization.EnumMemberAttribute()]
+    LessOrEqual = 1,
+
+    [System.Runtime.Serialization.EnumMemberAttribute()]
+    Equal = 2,
+
+    [System.Runtime.Serialization.EnumMemberAttribute()]
+    GreaterOrEqual = 3,
+
+    [System.Runtime.Serialization.EnumMemberAttribute()]
+    Greater = 4,
+
+    [System.Runtime.Serialization.EnumMemberAttribute()]
+    NotEqual = 5,
+  }
+
+  [System.Diagnostics.DebuggerStepThroughAttribute()]
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "ProblemData", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataTransfer")]
+  public partial class ProblemData : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+
+    private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+
+    private byte[] DataField;
+
+    private long DataTypeIdField;
+
+    private long ProblemIdField;
+
+    public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+      get {
+        return this.extensionDataField;
+      }
+      set {
+        this.extensionDataField = value;
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public byte[] Data {
+      get {
+        return this.DataField;
+      }
+      set {
+        if ((object.ReferenceEquals(this.DataField, value) != true)) {
+          this.DataField = value;
+          this.RaisePropertyChanged("Data");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public long DataTypeId {
+      get {
+        return this.DataTypeIdField;
+      }
+      set {
+        if ((this.DataTypeIdField.Equals(value) != true)) {
+          this.DataTypeIdField = value;
+          this.RaisePropertyChanged("DataTypeId");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public long ProblemId {
+      get {
+        return this.ProblemIdField;
+      }
+      set {
+        if ((this.ProblemIdField.Equals(value) != true)) {
+          this.ProblemIdField = value;
+          this.RaisePropertyChanged("ProblemId");
+        }
+      }
+    }
+
+    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 = "AlgorithmData", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataTransfer")]
+  public partial class AlgorithmData : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+
+    private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+
+    private long AlgorithmIdField;
+
+    private byte[] DataField;
+
+    private long DataTypeIdField;
+
+    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 byte[] Data {
+      get {
+        return this.DataField;
+      }
+      set {
+        if ((object.ReferenceEquals(this.DataField, value) != true)) {
+          this.DataField = value;
+          this.RaisePropertyChanged("Data");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public long DataTypeId {
+      get {
+        return this.DataTypeIdField;
+      }
+      set {
+        if ((this.DataTypeIdField.Equals(value) != true)) {
+          this.DataTypeIdField = value;
+          this.RaisePropertyChanged("DataTypeId");
+        }
+      }
+    }
+
+    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.IOKBService")]
+  public interface IOKBService {
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IOKBService/AddResult", ReplyAction = "http://tempuri.org/IOKBService/AddResultResponse")]
+    long AddResult(HeuristicLab.Clients.OKB.Result dto);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IOKBService/UpdateResult", ReplyAction = "http://tempuri.org/IOKBService/UpdateResultResponse")]
+    void UpdateResult(HeuristicLab.Clients.OKB.Result dto);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IOKBService/DeleteResult", ReplyAction = "http://tempuri.org/IOKBService/DeleteResultResponse")]
+    void DeleteResult(long id);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IOKBService/GetExperiment", ReplyAction = "http://tempuri.org/IOKBService/GetExperimentResponse")]
+    HeuristicLab.Clients.OKB.Experiment GetExperiment(long id);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IOKBService/GetExperiments", ReplyAction = "http://tempuri.org/IOKBService/GetExperimentsResponse")]
+    System.Collections.Generic.List<HeuristicLab.Clients.OKB.Experiment> GetExperiments(long algorithmId, long problemId);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IOKBService/AddExperiment", ReplyAction = "http://tempuri.org/IOKBService/AddExperimentResponse")]
+    long AddExperiment(HeuristicLab.Clients.OKB.Experiment dto);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IOKBService/DeleteExperiment", ReplyAction = "http://tempuri.org/IOKBService/DeleteExperimentResponse")]
+    void DeleteExperiment(long id);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IOKBService/GetRun", ReplyAction = "http://tempuri.org/IOKBService/GetRunResponse")]
+    HeuristicLab.Clients.OKB.Run GetRun(long id);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IOKBService/GetRuns", ReplyAction = "http://tempuri.org/IOKBService/GetRunsResponse")]
+    System.Collections.Generic.List<HeuristicLab.Clients.OKB.Run> GetRuns(long experimentId);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IOKBService/AddRun", ReplyAction = "http://tempuri.org/IOKBService/AddRunResponse")]
+    long AddRun(HeuristicLab.Clients.OKB.Run dto);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IOKBService/DeleteRun", ReplyAction = "http://tempuri.org/IOKBService/DeleteRunResponse")]
+    void DeleteRun(long id);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IOKBService/GetFilters", ReplyAction = "http://tempuri.org/IOKBService/GetFiltersResponse")]
+    System.Collections.Generic.List<HeuristicLab.Clients.OKB.Filter> GetFilters();
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IOKBService/QueryNumberOfRuns", ReplyAction = "http://tempuri.org/IOKBService/QueryNumberOfRunsResponse")]
+    long QueryNumberOfRuns(HeuristicLab.Clients.OKB.Filter filter);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IOKBService/QueryRuns", ReplyAction = "http://tempuri.org/IOKBService/QueryRunsResponse")]
+    System.Collections.Generic.List<HeuristicLab.Clients.OKB.Run> QueryRuns(HeuristicLab.Clients.OKB.Filter filter);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IOKBService/GetAlgorithmParameters", ReplyAction = "http://tempuri.org/IOKBService/GetAlgorithmParametersResponse")]
+    System.Collections.Generic.List<HeuristicLab.Clients.OKB.AlgorithmParameter> GetAlgorithmParameters(long algorithmId);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IOKBService/AddAlgorithmParameter", ReplyAction = "http://tempuri.org/IOKBService/AddAlgorithmParameterResponse")]
+    long AddAlgorithmParameter(HeuristicLab.Clients.OKB.AlgorithmParameter dto);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IOKBService/UpdateAlgorithmParameter", ReplyAction = "http://tempuri.org/IOKBService/UpdateAlgorithmParameterResponse")]
+    void UpdateAlgorithmParameter(HeuristicLab.Clients.OKB.AlgorithmParameter dto);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IOKBService/DeleteAlgorithmParameter", ReplyAction = "http://tempuri.org/IOKBService/DeleteAlgorithmParameterResponse")]
+    void DeleteAlgorithmParameter(long id);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IOKBService/GetProblemClass", ReplyAction = "http://tempuri.org/IOKBService/GetProblemClassResponse")]
+    HeuristicLab.Clients.OKB.ProblemClass GetProblemClass(long id);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IOKBService/GetProblemClasses", ReplyAction = "http://tempuri.org/IOKBService/GetProblemClassesResponse")]
+    System.Collections.Generic.List<HeuristicLab.Clients.OKB.ProblemClass> GetProblemClasses();
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IOKBService/AddProblemClass", ReplyAction = "http://tempuri.org/IOKBService/AddProblemClassResponse")]
+    long AddProblemClass(HeuristicLab.Clients.OKB.ProblemClass dto);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IOKBService/UpdateProblemClass", ReplyAction = "http://tempuri.org/IOKBService/UpdateProblemClassResponse")]
+    void UpdateProblemClass(HeuristicLab.Clients.OKB.ProblemClass dto);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IOKBService/DeleteProblemClass", ReplyAction = "http://tempuri.org/IOKBService/DeleteProblemClassResponse")]
+    void DeleteProblemClass(long id);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IOKBService/GetProblem", ReplyAction = "http://tempuri.org/IOKBService/GetProblemResponse")]
+    HeuristicLab.Clients.OKB.Problem GetProblem(long id);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IOKBService/GetProblems", ReplyAction = "http://tempuri.org/IOKBService/GetProblemsResponse")]
+    System.Collections.Generic.List<HeuristicLab.Clients.OKB.Problem> GetProblems();
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IOKBService/AddProblem", ReplyAction = "http://tempuri.org/IOKBService/AddProblemResponse")]
+    long AddProblem(HeuristicLab.Clients.OKB.Problem dto);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IOKBService/UpdateProblem", ReplyAction = "http://tempuri.org/IOKBService/UpdateProblemResponse")]
+    void UpdateProblem(HeuristicLab.Clients.OKB.Problem dto);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IOKBService/DeleteProblem", ReplyAction = "http://tempuri.org/IOKBService/DeleteProblemResponse")]
+    void DeleteProblem(long id);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IOKBService/GetProblemUsers", ReplyAction = "http://tempuri.org/IOKBService/GetProblemUsersResponse")]
+    System.Collections.Generic.List<System.Guid> GetProblemUsers(long problemId);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IOKBService/UpdateProblemUsers", ReplyAction = "http://tempuri.org/IOKBService/UpdateProblemUsersResponse")]
+    void UpdateProblemUsers(long problemId, System.Collections.Generic.List<System.Guid> users);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IOKBService/GetProblemData", ReplyAction = "http://tempuri.org/IOKBService/GetProblemDataResponse")]
+    HeuristicLab.Clients.OKB.ProblemData GetProblemData(long problemId);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IOKBService/UpdateProblemData", ReplyAction = "http://tempuri.org/IOKBService/UpdateProblemDataResponse")]
+    void UpdateProblemData(HeuristicLab.Clients.OKB.ProblemData dto);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IOKBService/GetProblemParameter", ReplyAction = "http://tempuri.org/IOKBService/GetProblemParameterResponse")]
+    HeuristicLab.Clients.OKB.ProblemParameter GetProblemParameter(long id);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IOKBService/GetProblemParameters", ReplyAction = "http://tempuri.org/IOKBService/GetProblemParametersResponse")]
+    System.Collections.Generic.List<HeuristicLab.Clients.OKB.ProblemParameter> GetProblemParameters(long problemId);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IOKBService/AddProblemParameter", ReplyAction = "http://tempuri.org/IOKBService/AddProblemParameterResponse")]
+    long AddProblemParameter(HeuristicLab.Clients.OKB.ProblemParameter dto);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IOKBService/UpdateProblemParameter", ReplyAction = "http://tempuri.org/IOKBService/UpdateProblemParameterResponse")]
+    void UpdateProblemParameter(HeuristicLab.Clients.OKB.ProblemParameter dto);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IOKBService/DeleteProblemParameter", ReplyAction = "http://tempuri.org/IOKBService/DeleteProblemParameterResponse")]
+    void DeleteProblemParameter(long id);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IOKBService/GetResult", ReplyAction = "http://tempuri.org/IOKBService/GetResultResponse")]
+    HeuristicLab.Clients.OKB.Result GetResult(long id);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IOKBService/GetResults", ReplyAction = "http://tempuri.org/IOKBService/GetResultsResponse")]
+    System.Collections.Generic.List<HeuristicLab.Clients.OKB.Result> GetResults(long algorithmId);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IOKBService/GetPlatform", ReplyAction = "http://tempuri.org/IOKBService/GetPlatformResponse")]
+    HeuristicLab.Clients.OKB.Platform GetPlatform(long id);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IOKBService/GetPlatforms", ReplyAction = "http://tempuri.org/IOKBService/GetPlatformsResponse")]
+    System.Collections.Generic.List<HeuristicLab.Clients.OKB.Platform> GetPlatforms();
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IOKBService/AddPlatform", ReplyAction = "http://tempuri.org/IOKBService/AddPlatformResponse")]
+    long AddPlatform(HeuristicLab.Clients.OKB.Platform dto);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IOKBService/UpdatePlatform", ReplyAction = "http://tempuri.org/IOKBService/UpdatePlatformResponse")]
+    void UpdatePlatform(HeuristicLab.Clients.OKB.Platform dto);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IOKBService/DeletePlatform", ReplyAction = "http://tempuri.org/IOKBService/DeletePlatformResponse")]
+    void DeletePlatform(long id);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IOKBService/GetDataType", ReplyAction = "http://tempuri.org/IOKBService/GetDataTypeResponse")]
+    HeuristicLab.Clients.OKB.DataType GetDataType(long id);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IOKBService/GetDataTypes", ReplyAction = "http://tempuri.org/IOKBService/GetDataTypesResponse")]
+    System.Collections.Generic.List<HeuristicLab.Clients.OKB.DataType> GetDataTypes();
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IOKBService/AddDataType", ReplyAction = "http://tempuri.org/IOKBService/AddDataTypeResponse")]
+    long AddDataType(HeuristicLab.Clients.OKB.DataType dto);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IOKBService/UpdateDataType", ReplyAction = "http://tempuri.org/IOKBService/UpdateDataTypeResponse")]
+    void UpdateDataType(HeuristicLab.Clients.OKB.DataType dto);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IOKBService/DeleteDataType", ReplyAction = "http://tempuri.org/IOKBService/DeleteDataTypeResponse")]
+    void DeleteDataType(long id);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IOKBService/GetAlgorithmClass", ReplyAction = "http://tempuri.org/IOKBService/GetAlgorithmClassResponse")]
+    HeuristicLab.Clients.OKB.AlgorithmClass GetAlgorithmClass(long id);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IOKBService/GetAlgorithmClasses", ReplyAction = "http://tempuri.org/IOKBService/GetAlgorithmClassesResponse")]
+    System.Collections.Generic.List<HeuristicLab.Clients.OKB.AlgorithmClass> GetAlgorithmClasses();
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IOKBService/AddAlgorithmClass", ReplyAction = "http://tempuri.org/IOKBService/AddAlgorithmClassResponse")]
+    long AddAlgorithmClass(HeuristicLab.Clients.OKB.AlgorithmClass dto);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IOKBService/UpdateAlgorithmClass", ReplyAction = "http://tempuri.org/IOKBService/UpdateAlgorithmClassResponse")]
+    void UpdateAlgorithmClass(HeuristicLab.Clients.OKB.AlgorithmClass dto);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IOKBService/DeleteAlgorithmClass", ReplyAction = "http://tempuri.org/IOKBService/DeleteAlgorithmClassResponse")]
+    void DeleteAlgorithmClass(long id);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IOKBService/GetAlgorithm", ReplyAction = "http://tempuri.org/IOKBService/GetAlgorithmResponse")]
+    HeuristicLab.Clients.OKB.Algorithm GetAlgorithm(long id);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IOKBService/GetAlgorithms", ReplyAction = "http://tempuri.org/IOKBService/GetAlgorithmsResponse")]
+    System.Collections.Generic.List<HeuristicLab.Clients.OKB.Algorithm> GetAlgorithms();
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IOKBService/AddAlgorithm", ReplyAction = "http://tempuri.org/IOKBService/AddAlgorithmResponse")]
+    long AddAlgorithm(HeuristicLab.Clients.OKB.Algorithm dto);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IOKBService/UpdateAlgorithm", ReplyAction = "http://tempuri.org/IOKBService/UpdateAlgorithmResponse")]
+    void UpdateAlgorithm(HeuristicLab.Clients.OKB.Algorithm dto);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IOKBService/DeleteAlgorithm", ReplyAction = "http://tempuri.org/IOKBService/DeleteAlgorithmResponse")]
+    void DeleteAlgorithm(long id);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IOKBService/GetAlgorithmUsers", ReplyAction = "http://tempuri.org/IOKBService/GetAlgorithmUsersResponse")]
+    System.Collections.Generic.List<System.Guid> GetAlgorithmUsers(long algorithmId);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IOKBService/UpdateAlgorithmUsers", ReplyAction = "http://tempuri.org/IOKBService/UpdateAlgorithmUsersResponse")]
+    void UpdateAlgorithmUsers(long algorithmId, System.Collections.Generic.List<System.Guid> users);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IOKBService/GetAlgorithmData", ReplyAction = "http://tempuri.org/IOKBService/GetAlgorithmDataResponse")]
+    HeuristicLab.Clients.OKB.AlgorithmData GetAlgorithmData(long algorithmId);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IOKBService/UpdateAlgorithmData", ReplyAction = "http://tempuri.org/IOKBService/UpdateAlgorithmDataResponse")]
+    void UpdateAlgorithmData(HeuristicLab.Clients.OKB.AlgorithmData dto);
+
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IOKBService/GetAlgorithmParameter", ReplyAction = "http://tempuri.org/IOKBService/GetAlgorithmParameterResponse")]
+    HeuristicLab.Clients.OKB.AlgorithmParameter GetAlgorithmParameter(long id);
+  }
+
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+  public interface IOKBServiceChannel : HeuristicLab.Clients.OKB.IOKBService, System.ServiceModel.IClientChannel {
+  }
+
+  [System.Diagnostics.DebuggerStepThroughAttribute()]
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+  public partial class OKBServiceClient : System.ServiceModel.ClientBase<HeuristicLab.Clients.OKB.IOKBService>, HeuristicLab.Clients.OKB.IOKBService {
+
+    public OKBServiceClient() {
+    }
+
+    public OKBServiceClient(string endpointConfigurationName) :
+      base(endpointConfigurationName) {
+    }
+
+    public OKBServiceClient(string endpointConfigurationName, string remoteAddress) :
+      base(endpointConfigurationName, remoteAddress) {
+    }
+
+    public OKBServiceClient(string endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) :
+      base(endpointConfigurationName, remoteAddress) {
+    }
+
+    public OKBServiceClient(System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress) :
+      base(binding, remoteAddress) {
+    }
+
+    public long AddResult(HeuristicLab.Clients.OKB.Result dto) {
+      return base.Channel.AddResult(dto);
+    }
+
+    public void UpdateResult(HeuristicLab.Clients.OKB.Result dto) {
+      base.Channel.UpdateResult(dto);
+    }
+
+    public void DeleteResult(long id) {
+      base.Channel.DeleteResult(id);
+    }
+
+    public HeuristicLab.Clients.OKB.Experiment GetExperiment(long id) {
+      return base.Channel.GetExperiment(id);
+    }
+
+    public System.Collections.Generic.List<HeuristicLab.Clients.OKB.Experiment> GetExperiments(long algorithmId, long problemId) {
+      return base.Channel.GetExperiments(algorithmId, problemId);
+    }
+
+    public long AddExperiment(HeuristicLab.Clients.OKB.Experiment dto) {
+      return base.Channel.AddExperiment(dto);
+    }
+
+    public void DeleteExperiment(long id) {
+      base.Channel.DeleteExperiment(id);
+    }
+
+    public HeuristicLab.Clients.OKB.Run GetRun(long id) {
+      return base.Channel.GetRun(id);
+    }
+
+    public System.Collections.Generic.List<HeuristicLab.Clients.OKB.Run> GetRuns(long experimentId) {
+      return base.Channel.GetRuns(experimentId);
+    }
+
+    public long AddRun(HeuristicLab.Clients.OKB.Run dto) {
+      return base.Channel.AddRun(dto);
+    }
+
+    public void DeleteRun(long id) {
+      base.Channel.DeleteRun(id);
+    }
+
+    public System.Collections.Generic.List<HeuristicLab.Clients.OKB.Filter> GetFilters() {
+      return base.Channel.GetFilters();
+    }
+
+    public long QueryNumberOfRuns(HeuristicLab.Clients.OKB.Filter filter) {
+      return base.Channel.QueryNumberOfRuns(filter);
+    }
+
+    public System.Collections.Generic.List<HeuristicLab.Clients.OKB.Run> QueryRuns(HeuristicLab.Clients.OKB.Filter filter) {
+      return base.Channel.QueryRuns(filter);
+    }
+
+    public System.Collections.Generic.List<HeuristicLab.Clients.OKB.AlgorithmParameter> GetAlgorithmParameters(long algorithmId) {
+      return base.Channel.GetAlgorithmParameters(algorithmId);
+    }
+
+    public long AddAlgorithmParameter(HeuristicLab.Clients.OKB.AlgorithmParameter dto) {
+      return base.Channel.AddAlgorithmParameter(dto);
+    }
+
+    public void UpdateAlgorithmParameter(HeuristicLab.Clients.OKB.AlgorithmParameter dto) {
+      base.Channel.UpdateAlgorithmParameter(dto);
+    }
+
+    public void DeleteAlgorithmParameter(long id) {
+      base.Channel.DeleteAlgorithmParameter(id);
+    }
+
+    public HeuristicLab.Clients.OKB.ProblemClass GetProblemClass(long id) {
+      return base.Channel.GetProblemClass(id);
+    }
+
+    public System.Collections.Generic.List<HeuristicLab.Clients.OKB.ProblemClass> GetProblemClasses() {
+      return base.Channel.GetProblemClasses();
+    }
+
+    public long AddProblemClass(HeuristicLab.Clients.OKB.ProblemClass dto) {
+      return base.Channel.AddProblemClass(dto);
+    }
+
+    public void UpdateProblemClass(HeuristicLab.Clients.OKB.ProblemClass dto) {
+      base.Channel.UpdateProblemClass(dto);
+    }
+
+    public void DeleteProblemClass(long id) {
+      base.Channel.DeleteProblemClass(id);
+    }
+
+    public HeuristicLab.Clients.OKB.Problem GetProblem(long id) {
+      return base.Channel.GetProblem(id);
+    }
+
+    public System.Collections.Generic.List<HeuristicLab.Clients.OKB.Problem> GetProblems() {
+      return base.Channel.GetProblems();
+    }
+
+    public long AddProblem(HeuristicLab.Clients.OKB.Problem dto) {
+      return base.Channel.AddProblem(dto);
+    }
+
+    public void UpdateProblem(HeuristicLab.Clients.OKB.Problem dto) {
+      base.Channel.UpdateProblem(dto);
+    }
+
+    public void DeleteProblem(long id) {
+      base.Channel.DeleteProblem(id);
+    }
+
+    public System.Collections.Generic.List<System.Guid> GetProblemUsers(long problemId) {
+      return base.Channel.GetProblemUsers(problemId);
+    }
+
+    public void UpdateProblemUsers(long problemId, System.Collections.Generic.List<System.Guid> users) {
+      base.Channel.UpdateProblemUsers(problemId, users);
+    }
+
+    public HeuristicLab.Clients.OKB.ProblemData GetProblemData(long problemId) {
+      return base.Channel.GetProblemData(problemId);
+    }
+
+    public void UpdateProblemData(HeuristicLab.Clients.OKB.ProblemData dto) {
+      base.Channel.UpdateProblemData(dto);
+    }
+
+    public HeuristicLab.Clients.OKB.ProblemParameter GetProblemParameter(long id) {
+      return base.Channel.GetProblemParameter(id);
+    }
+
+    public System.Collections.Generic.List<HeuristicLab.Clients.OKB.ProblemParameter> GetProblemParameters(long problemId) {
+      return base.Channel.GetProblemParameters(problemId);
+    }
+
+    public long AddProblemParameter(HeuristicLab.Clients.OKB.ProblemParameter dto) {
+      return base.Channel.AddProblemParameter(dto);
+    }
+
+    public void UpdateProblemParameter(HeuristicLab.Clients.OKB.ProblemParameter dto) {
+      base.Channel.UpdateProblemParameter(dto);
+    }
+
+    public void DeleteProblemParameter(long id) {
+      base.Channel.DeleteProblemParameter(id);
+    }
+
+    public HeuristicLab.Clients.OKB.Result GetResult(long id) {
+      return base.Channel.GetResult(id);
+    }
+
+    public System.Collections.Generic.List<HeuristicLab.Clients.OKB.Result> GetResults(long algorithmId) {
+      return base.Channel.GetResults(algorithmId);
+    }
+
+    public HeuristicLab.Clients.OKB.Platform GetPlatform(long id) {
+      return base.Channel.GetPlatform(id);
+    }
+
+    public System.Collections.Generic.List<HeuristicLab.Clients.OKB.Platform> GetPlatforms() {
+      return base.Channel.GetPlatforms();
+    }
+
+    public long AddPlatform(HeuristicLab.Clients.OKB.Platform dto) {
+      return base.Channel.AddPlatform(dto);
+    }
+
+    public void UpdatePlatform(HeuristicLab.Clients.OKB.Platform dto) {
+      base.Channel.UpdatePlatform(dto);
+    }
+
+    public void DeletePlatform(long id) {
+      base.Channel.DeletePlatform(id);
+    }
+
+    public HeuristicLab.Clients.OKB.DataType GetDataType(long id) {
+      return base.Channel.GetDataType(id);
+    }
+
+    public System.Collections.Generic.List<HeuristicLab.Clients.OKB.DataType> GetDataTypes() {
+      return base.Channel.GetDataTypes();
+    }
+
+    public long AddDataType(HeuristicLab.Clients.OKB.DataType dto) {
+      return base.Channel.AddDataType(dto);
+    }
+
+    public void UpdateDataType(HeuristicLab.Clients.OKB.DataType dto) {
+      base.Channel.UpdateDataType(dto);
+    }
+
+    public void DeleteDataType(long id) {
+      base.Channel.DeleteDataType(id);
+    }
+
+    public HeuristicLab.Clients.OKB.AlgorithmClass GetAlgorithmClass(long id) {
+      return base.Channel.GetAlgorithmClass(id);
+    }
+
+    public System.Collections.Generic.List<HeuristicLab.Clients.OKB.AlgorithmClass> GetAlgorithmClasses() {
+      return base.Channel.GetAlgorithmClasses();
+    }
+
+    public long AddAlgorithmClass(HeuristicLab.Clients.OKB.AlgorithmClass dto) {
+      return base.Channel.AddAlgorithmClass(dto);
+    }
+
+    public void UpdateAlgorithmClass(HeuristicLab.Clients.OKB.AlgorithmClass dto) {
+      base.Channel.UpdateAlgorithmClass(dto);
+    }
+
+    public void DeleteAlgorithmClass(long id) {
+      base.Channel.DeleteAlgorithmClass(id);
+    }
+
+    public HeuristicLab.Clients.OKB.Algorithm GetAlgorithm(long id) {
+      return base.Channel.GetAlgorithm(id);
+    }
+
+    public System.Collections.Generic.List<HeuristicLab.Clients.OKB.Algorithm> GetAlgorithms() {
+      return base.Channel.GetAlgorithms();
+    }
+
+    public long AddAlgorithm(HeuristicLab.Clients.OKB.Algorithm dto) {
+      return base.Channel.AddAlgorithm(dto);
+    }
+
+    public void UpdateAlgorithm(HeuristicLab.Clients.OKB.Algorithm dto) {
+      base.Channel.UpdateAlgorithm(dto);
+    }
+
+    public void DeleteAlgorithm(long id) {
+      base.Channel.DeleteAlgorithm(id);
+    }
+
+    public System.Collections.Generic.List<System.Guid> GetAlgorithmUsers(long algorithmId) {
+      return base.Channel.GetAlgorithmUsers(algorithmId);
+    }
+
+    public void UpdateAlgorithmUsers(long algorithmId, System.Collections.Generic.List<System.Guid> users) {
+      base.Channel.UpdateAlgorithmUsers(algorithmId, users);
+    }
+
+    public HeuristicLab.Clients.OKB.AlgorithmData GetAlgorithmData(long algorithmId) {
+      return base.Channel.GetAlgorithmData(algorithmId);
+    }
+
+    public void UpdateAlgorithmData(HeuristicLab.Clients.OKB.AlgorithmData dto) {
+      base.Channel.UpdateAlgorithmData(dto);
+    }
+
+    public HeuristicLab.Clients.OKB.AlgorithmParameter GetAlgorithmParameter(long id) {
+      return base.Channel.GetAlgorithmParameter(id);
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/OrFilter.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/OrFilter.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/OrFilter.cs	(revision 5296)
@@ -0,0 +1,30 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Linq;
+
+namespace HeuristicLab.Clients.OKB {
+  public partial class OrFilter {
+    public override Filter Clone() {
+      return new OrFilter() { FilterTypeName = FilterTypeName, Label = Label, Filters = Filters.Select(x => x.Clone()).ToList() };
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/OrdinalComparisonDateTimeFilter.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/OrdinalComparisonDateTimeFilter.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/OrdinalComparisonDateTimeFilter.cs	(revision 5296)
@@ -0,0 +1,29 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+
+namespace HeuristicLab.Clients.OKB {
+  public partial class OrdinalComparisonDateTimeFilter {
+    public override Filter Clone() {
+      return new OrdinalComparisonDateTimeFilter() { FilterTypeName = FilterTypeName, Label = Label, Comparison = Comparison, Value = Value };
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/OrdinalComparisonLongFilter.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/OrdinalComparisonLongFilter.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/OrdinalComparisonLongFilter.cs	(revision 5296)
@@ -0,0 +1,29 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+
+namespace HeuristicLab.Clients.OKB {
+  public partial class OrdinalComparisonLongFilter {
+    public override Filter Clone() {
+      return new OrdinalComparisonLongFilter() { FilterTypeName = FilterTypeName, Label = Label, Comparison = Comparison, Value = Value };
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/Platform.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/Platform.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/Platform.cs	(revision 5296)
@@ -0,0 +1,37 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Clients.OKB {
+  [Item("Platform", "An OKB platform.")]
+  public partial class Platform {
+    protected Platform(Platform original, Cloner cloner) : base(original, cloner) { }
+    public Platform() {
+      Name = "New Platform";
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new Platform(this, cloner);
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/Problem.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/Problem.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/Problem.cs	(revision 5296)
@@ -0,0 +1,43 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Clients.OKB {
+  [Item("Problem", "An OKB problem.")]
+  public partial class Problem {
+    protected Problem(Problem original, Cloner cloner)
+      : base(original, cloner) {
+      PlatformId = original.PlatformId;
+      ProblemClassId = original.ProblemClassId;
+    }
+    public Problem() {
+      Name = "New Problem";
+      PlatformId = 1;
+      ProblemClassId = 1;
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new Problem(this, cloner);
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/ProblemClass.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/ProblemClass.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/ProblemClass.cs	(revision 5296)
@@ -0,0 +1,37 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Clients.OKB {
+  [Item("ProblemClass", "An OKB problem class.")]
+  public partial class ProblemClass {
+    protected ProblemClass(ProblemClass original, Cloner cloner) : base(original, cloner) { }
+    public ProblemClass() {
+      Name = "New Problem Class";
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new ProblemClass(this, cloner);
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/ProblemData.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/ProblemData.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/ProblemData.cs	(revision 5296)
@@ -0,0 +1,31 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Common;
+
+namespace HeuristicLab.Clients.OKB {
+  public partial class ProblemData : IContent {
+    public ProblemData() {
+      Data = new byte[0];
+      DataTypeId = 1;
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/ProblemParameter.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/ProblemParameter.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/ProblemParameter.cs	(revision 5296)
@@ -0,0 +1,45 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Clients.OKB {
+  [Item("ProblemParameter", "An OKB problem parameter.")]
+  public partial class ProblemParameter {
+    protected ProblemParameter(ProblemParameter original, Cloner cloner)
+      : base(original, cloner) {
+      Alias = original.Alias;
+      ProblemId = original.ProblemId;
+      DataTypeId = original.DataTypeId;
+    }
+    public ProblemParameter() {
+      Name = "New ProblemParameter";
+      Alias = Name;
+      ProblemId = 0;
+      DataTypeId = 1;
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new ProblemParameter(this, cloner);
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/Result.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/Result.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/Result.cs	(revision 5296)
@@ -0,0 +1,45 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Clients.OKB {
+  [Item("Result", "An OKB result.")]
+  public partial class Result {
+    protected Result(Result original, Cloner cloner)
+      : base(original, cloner) {
+      Alias = original.Alias;
+      AlgorithmId = original.AlgorithmId;
+      DataTypeId = original.DataTypeId;
+    }
+    public Result() {
+      Name = "New Result";
+      Alias = Name;
+      AlgorithmId = 0;
+      DataTypeId = 1;
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new Result(this, cloner);
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/Run.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/Run.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/Run.cs	(revision 5296)
@@ -0,0 +1,53 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using System.ComponentModel;
+
+namespace HeuristicLab.Clients.OKB {
+  [Item("Run", "An OKB run.")]
+  public partial class Run {
+    protected Run(Run original, Cloner cloner)
+      : base(original, cloner) {
+      ExperimentId = original.ExperimentId;
+      RandomSeed = original.RandomSeed;
+      CreatedDate = original.CreatedDate;
+      UserId = original.UserId;
+      ClientId = original.ClientId;
+    }
+    public Run() { }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new Run(this, cloner);
+    }
+
+    public override string ToString() {
+      return ItemName + " (" + CreatedDate.ToString() + ")";
+    }
+
+    protected override void OnPropertyChanged(PropertyChangedEventArgs e) {
+      base.OnPropertyChanged(e);
+      if (e.PropertyName == "CreatedDate")
+        OnToStringChanged();
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/SetComparisonStringAvailableValuesFilter.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/SetComparisonStringAvailableValuesFilter.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/SetComparisonStringAvailableValuesFilter.cs	(revision 5296)
@@ -0,0 +1,30 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+
+using System.Collections.Generic;
+namespace HeuristicLab.Clients.OKB {
+  public partial class SetComparisonStringAvailableValuesFilter {
+    public override Filter Clone() {
+      return new SetComparisonStringAvailableValuesFilter() { FilterTypeName = FilterTypeName, Label = Label, Comparison = Comparison, Value = Value, AvailableValues = new List<string>(AvailableValues) };
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/SetComparisonStringFilter.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/SetComparisonStringFilter.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/ServiceClients/SetComparisonStringFilter.cs	(revision 5296)
@@ -0,0 +1,29 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+
+namespace HeuristicLab.Clients.OKB {
+  public partial class SetComparisonStringFilter {
+    public override Filter Clone() {
+      return new SetComparisonStringFilter() { FilterTypeName = FilterTypeName, Label = Label, Comparison = Comparison, Value = Value };
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/UpdateLocalInstallation.cmd
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/UpdateLocalInstallation.cmd	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/UpdateLocalInstallation.cmd	(revision 5296)
@@ -0,0 +1,6 @@
+set target=C:\Program Files\HeuristicLab 3.3
+
+echo Copying OKB Client Assembly
+copy "%SolutionDir%\HeuristicLab.Clients.OKB-3.3\%Outdir%\HeuristicLab.Clients.OKB-3.3.dll" "%target%"
+echo ---------------------------
+"%SolutionDir%ConfigMerger.exe" "%SolutionDir%\HeuristicLab.Clients.OKB-3.3\%Outdir%\HeuristicLab.Clients.OKB-3.3.dll.config" "%target%\HeuristicLab 3.3.exe.config"
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/AdministratorView.Designer.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/AdministratorView.Designer.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/AdministratorView.Designer.cs	(revision 5296)
@@ -0,0 +1,280 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Clients.OKB {
+  partial class AdministratorView {
+    /// <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) {
+        if (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.components = new System.ComponentModel.Container();
+      this.tabControl = new System.Windows.Forms.TabControl();
+      this.platformsTabPage = new System.Windows.Forms.TabPage();
+      this.platformCollectionView = new HeuristicLab.Clients.OKB.PlatformCollectionView();
+      this.dataTypesTabPage = new System.Windows.Forms.TabPage();
+      this.dataTypeCollectionView = new HeuristicLab.Clients.OKB.DataTypeCollectionView();
+      this.algorithmClassesTabPage = new System.Windows.Forms.TabPage();
+      this.algorithmClassCollectionView = new HeuristicLab.Clients.OKB.AlgorithmClassCollectionView();
+      this.algorithmsTabPage = new System.Windows.Forms.TabPage();
+      this.algorithmCollectionView = new HeuristicLab.Clients.OKB.AlgorithmCollectionView();
+      this.problemClassesTabPage = new System.Windows.Forms.TabPage();
+      this.problemsTabPage = new System.Windows.Forms.TabPage();
+      this.refreshButton = new System.Windows.Forms.Button();
+      this.toolTip = new System.Windows.Forms.ToolTip(this.components);
+      this.problemClassCollectionView = new HeuristicLab.Clients.OKB.ProblemClassCollectionView();
+      this.problemCollectionView = new HeuristicLab.Clients.OKB.ProblemCollectionView();
+      this.tabControl.SuspendLayout();
+      this.platformsTabPage.SuspendLayout();
+      this.dataTypesTabPage.SuspendLayout();
+      this.algorithmClassesTabPage.SuspendLayout();
+      this.algorithmsTabPage.SuspendLayout();
+      this.problemClassesTabPage.SuspendLayout();
+      this.problemsTabPage.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // tabControl
+      // 
+      this.tabControl.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.tabControl.Controls.Add(this.platformsTabPage);
+      this.tabControl.Controls.Add(this.dataTypesTabPage);
+      this.tabControl.Controls.Add(this.algorithmClassesTabPage);
+      this.tabControl.Controls.Add(this.algorithmsTabPage);
+      this.tabControl.Controls.Add(this.problemClassesTabPage);
+      this.tabControl.Controls.Add(this.problemsTabPage);
+      this.tabControl.Location = new System.Drawing.Point(0, 29);
+      this.tabControl.Name = "tabControl";
+      this.tabControl.SelectedIndex = 0;
+      this.tabControl.Size = new System.Drawing.Size(727, 406);
+      this.tabControl.TabIndex = 1;
+      // 
+      // platformsTabPage
+      // 
+      this.platformsTabPage.Controls.Add(this.platformCollectionView);
+      this.platformsTabPage.Location = new System.Drawing.Point(4, 22);
+      this.platformsTabPage.Name = "platformsTabPage";
+      this.platformsTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.platformsTabPage.Size = new System.Drawing.Size(719, 380);
+      this.platformsTabPage.TabIndex = 2;
+      this.platformsTabPage.Text = "Platforms";
+      this.platformsTabPage.UseVisualStyleBackColor = true;
+      // 
+      // platformCollectionView
+      // 
+      this.platformCollectionView.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.platformCollectionView.Caption = "PlatformCollection View";
+      this.platformCollectionView.Content = null;
+      this.platformCollectionView.Location = new System.Drawing.Point(3, 3);
+      this.platformCollectionView.Name = "platformCollectionView";
+      this.platformCollectionView.ReadOnly = false;
+      this.platformCollectionView.Size = new System.Drawing.Size(713, 374);
+      this.platformCollectionView.TabIndex = 0;
+      // 
+      // dataTypesTabPage
+      // 
+      this.dataTypesTabPage.Controls.Add(this.dataTypeCollectionView);
+      this.dataTypesTabPage.Location = new System.Drawing.Point(4, 22);
+      this.dataTypesTabPage.Name = "dataTypesTabPage";
+      this.dataTypesTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.dataTypesTabPage.Size = new System.Drawing.Size(719, 380);
+      this.dataTypesTabPage.TabIndex = 3;
+      this.dataTypesTabPage.Text = "Data Types";
+      this.dataTypesTabPage.UseVisualStyleBackColor = true;
+      // 
+      // dataTypeCollectionView
+      // 
+      this.dataTypeCollectionView.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.dataTypeCollectionView.Caption = "DataTypeCollection View";
+      this.dataTypeCollectionView.Content = null;
+      this.dataTypeCollectionView.Location = new System.Drawing.Point(3, 3);
+      this.dataTypeCollectionView.Name = "dataTypeCollectionView";
+      this.dataTypeCollectionView.ReadOnly = false;
+      this.dataTypeCollectionView.Size = new System.Drawing.Size(713, 374);
+      this.dataTypeCollectionView.TabIndex = 0;
+      // 
+      // algorithmClassesTabPage
+      // 
+      this.algorithmClassesTabPage.Controls.Add(this.algorithmClassCollectionView);
+      this.algorithmClassesTabPage.Location = new System.Drawing.Point(4, 22);
+      this.algorithmClassesTabPage.Name = "algorithmClassesTabPage";
+      this.algorithmClassesTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.algorithmClassesTabPage.Size = new System.Drawing.Size(719, 380);
+      this.algorithmClassesTabPage.TabIndex = 0;
+      this.algorithmClassesTabPage.Text = "Algorithm Classes";
+      this.algorithmClassesTabPage.UseVisualStyleBackColor = true;
+      // 
+      // algorithmClassCollectionView
+      // 
+      this.algorithmClassCollectionView.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.algorithmClassCollectionView.Caption = "AlgorithmClassCollection View";
+      this.algorithmClassCollectionView.Content = null;
+      this.algorithmClassCollectionView.Location = new System.Drawing.Point(3, 3);
+      this.algorithmClassCollectionView.Name = "algorithmClassCollectionView";
+      this.algorithmClassCollectionView.ReadOnly = false;
+      this.algorithmClassCollectionView.Size = new System.Drawing.Size(713, 374);
+      this.algorithmClassCollectionView.TabIndex = 0;
+      // 
+      // algorithmsTabPage
+      // 
+      this.algorithmsTabPage.Controls.Add(this.algorithmCollectionView);
+      this.algorithmsTabPage.Location = new System.Drawing.Point(4, 22);
+      this.algorithmsTabPage.Name = "algorithmsTabPage";
+      this.algorithmsTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.algorithmsTabPage.Size = new System.Drawing.Size(719, 380);
+      this.algorithmsTabPage.TabIndex = 1;
+      this.algorithmsTabPage.Text = "Algorithms";
+      this.algorithmsTabPage.UseVisualStyleBackColor = true;
+      // 
+      // algorithmCollectionView
+      // 
+      this.algorithmCollectionView.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.algorithmCollectionView.Caption = "AlgorithmCollection View";
+      this.algorithmCollectionView.Content = null;
+      this.algorithmCollectionView.Location = new System.Drawing.Point(3, 3);
+      this.algorithmCollectionView.Name = "algorithmCollectionView";
+      this.algorithmCollectionView.ReadOnly = false;
+      this.algorithmCollectionView.Size = new System.Drawing.Size(713, 374);
+      this.algorithmCollectionView.TabIndex = 0;
+      // 
+      // problemClassesTabPage
+      // 
+      this.problemClassesTabPage.Controls.Add(this.problemClassCollectionView);
+      this.problemClassesTabPage.Location = new System.Drawing.Point(4, 22);
+      this.problemClassesTabPage.Name = "problemClassesTabPage";
+      this.problemClassesTabPage.Size = new System.Drawing.Size(719, 380);
+      this.problemClassesTabPage.TabIndex = 4;
+      this.problemClassesTabPage.Text = "Problem Classes";
+      this.problemClassesTabPage.UseVisualStyleBackColor = true;
+      // 
+      // problemsTabPage
+      // 
+      this.problemsTabPage.Controls.Add(this.problemCollectionView);
+      this.problemsTabPage.Location = new System.Drawing.Point(4, 22);
+      this.problemsTabPage.Name = "problemsTabPage";
+      this.problemsTabPage.Size = new System.Drawing.Size(719, 380);
+      this.problemsTabPage.TabIndex = 5;
+      this.problemsTabPage.Text = "Problems";
+      this.problemsTabPage.UseVisualStyleBackColor = true;
+      // 
+      // refreshButton
+      // 
+      this.refreshButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.Refresh;
+      this.refreshButton.Location = new System.Drawing.Point(0, 0);
+      this.refreshButton.Name = "refreshButton";
+      this.refreshButton.Size = new System.Drawing.Size(24, 24);
+      this.refreshButton.TabIndex = 0;
+      this.toolTip.SetToolTip(this.refreshButton, "Refresh Data");
+      this.refreshButton.UseVisualStyleBackColor = true;
+      this.refreshButton.Click += new System.EventHandler(this.refreshButton_Click);
+      // 
+      // problemClassCollectionView
+      // 
+      this.problemClassCollectionView.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.problemClassCollectionView.Caption = "ProblemClassCollection View";
+      this.problemClassCollectionView.Content = null;
+      this.problemClassCollectionView.Location = new System.Drawing.Point(3, 3);
+      this.problemClassCollectionView.Name = "problemClassCollectionView";
+      this.problemClassCollectionView.ReadOnly = false;
+      this.problemClassCollectionView.Size = new System.Drawing.Size(713, 374);
+      this.problemClassCollectionView.TabIndex = 0;
+      // 
+      // problemCollectionView
+      // 
+      this.problemCollectionView.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.problemCollectionView.Caption = "ProblemCollection View";
+      this.problemCollectionView.Content = null;
+      this.problemCollectionView.Location = new System.Drawing.Point(3, 3);
+      this.problemCollectionView.Name = "problemCollectionView";
+      this.problemCollectionView.ReadOnly = false;
+      this.problemCollectionView.Size = new System.Drawing.Size(713, 374);
+      this.problemCollectionView.TabIndex = 0;
+      // 
+      // AdministratorView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.tabControl);
+      this.Controls.Add(this.refreshButton);
+      this.Name = "AdministratorView";
+      this.Size = new System.Drawing.Size(727, 435);
+      this.tabControl.ResumeLayout(false);
+      this.platformsTabPage.ResumeLayout(false);
+      this.dataTypesTabPage.ResumeLayout(false);
+      this.algorithmClassesTabPage.ResumeLayout(false);
+      this.algorithmsTabPage.ResumeLayout(false);
+      this.problemClassesTabPage.ResumeLayout(false);
+      this.problemsTabPage.ResumeLayout(false);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.TabControl tabControl;
+    private System.Windows.Forms.TabPage algorithmClassesTabPage;
+    private System.Windows.Forms.TabPage algorithmsTabPage;
+    private System.Windows.Forms.Button refreshButton;
+    private AlgorithmClassCollectionView algorithmClassCollectionView;
+    private AlgorithmCollectionView algorithmCollectionView;
+    private System.Windows.Forms.ToolTip toolTip;
+    private System.Windows.Forms.TabPage platformsTabPage;
+    private PlatformCollectionView platformCollectionView;
+    private System.Windows.Forms.TabPage dataTypesTabPage;
+    private DataTypeCollectionView dataTypeCollectionView;
+    private System.Windows.Forms.TabPage problemClassesTabPage;
+    private System.Windows.Forms.TabPage problemsTabPage;
+    private ProblemClassCollectionView problemClassCollectionView;
+    private ProblemCollectionView problemCollectionView;
+
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/AdministratorView.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/AdministratorView.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/AdministratorView.cs	(revision 5296)
@@ -0,0 +1,111 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Windows.Forms;
+using HeuristicLab.MainForm;
+using HeuristicLab.MainForm.WindowsForms;
+
+namespace HeuristicLab.Clients.OKB {
+  [View("OKB Administrator")]
+  [Content(typeof(OKBClient), true)]
+  public sealed partial class AdministratorView : AsynchronousContentView {
+    public new OKBClient Content {
+      get { return (OKBClient)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public AdministratorView() {
+      InitializeComponent();
+    }
+
+    protected override void DeregisterContentEvents() {
+      Content.Refreshing -= new EventHandler(Content_Refreshing);
+      Content.Refreshed -= new EventHandler(Content_Refreshed);
+      base.DeregisterContentEvents();
+    }
+
+    protected override void RegisterContentEvents() {
+      base.RegisterContentEvents();
+      Content.Refreshing += new EventHandler(Content_Refreshing);
+      Content.Refreshed += new EventHandler(Content_Refreshed);
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      if (Content == null) {
+        platformCollectionView.Content = null;
+        dataTypeCollectionView.Content = null;
+        algorithmClassCollectionView.Content = null;
+        algorithmCollectionView.Content = null;
+        problemClassCollectionView.Content = null;
+        problemCollectionView.Content = null;
+      } else {
+        platformCollectionView.Content = Content.Platforms;
+        dataTypeCollectionView.Content = Content.DataTypes;
+        algorithmClassCollectionView.Content = Content.AlgorithmClasses;
+        algorithmCollectionView.Content = Content.Algorithms;
+        problemClassCollectionView.Content = Content.ProblemClasses;
+        problemCollectionView.Content = Content.Problems;
+      }
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      refreshButton.Enabled = Content != null;
+      platformCollectionView.Enabled = Content != null;
+      dataTypeCollectionView.Enabled = Content != null;
+      algorithmClassCollectionView.Enabled = Content != null;
+      algorithmCollectionView.Enabled = Content != null;
+      problemClassCollectionView.Enabled = Content != null;
+      problemCollectionView.Enabled = Content != null;
+    }
+
+    private void Content_Refreshing(object sender, EventArgs e) {
+      if (InvokeRequired) {
+        Invoke(new EventHandler(Content_Refreshing), sender, e);
+      } else {
+        Cursor = Cursors.AppStarting;
+        refreshButton.Enabled = false;
+        tabControl.Enabled = false;
+      }
+    }
+    private void Content_Refreshed(object sender, EventArgs e) {
+      if (InvokeRequired) {
+        Invoke(new EventHandler(Content_Refreshed), sender, e);
+      } else {
+        platformCollectionView.Content = Content.Platforms;
+        dataTypeCollectionView.Content = Content.DataTypes;
+        algorithmClassCollectionView.Content = Content.AlgorithmClasses;
+        algorithmCollectionView.Content = Content.Algorithms;
+        problemClassCollectionView.Content = Content.ProblemClasses;
+        problemCollectionView.Content = Content.Problems;
+        refreshButton.Enabled = true;
+        tabControl.Enabled = true;
+        Cursor = Cursors.Default;
+      }
+    }
+
+    private void refreshButton_Click(object sender, EventArgs e) {
+      Content.Refresh();
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/AlgorithmClassCollectionView.Designer.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/AlgorithmClassCollectionView.Designer.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/AlgorithmClassCollectionView.Designer.cs	(revision 5296)
@@ -0,0 +1,53 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Clients.OKB {
+  partial class AlgorithmClassCollectionView {
+    /// <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) {
+        if (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() {
+      components = new System.ComponentModel.Container();
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+    }
+
+    #endregion
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/AlgorithmClassCollectionView.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/AlgorithmClassCollectionView.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/AlgorithmClassCollectionView.cs	(revision 5296)
@@ -0,0 +1,40 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Windows.Forms;
+using HeuristicLab.Core;
+using HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
+
+namespace HeuristicLab.Clients.OKB {
+  [View("AlgorithmClassCollection View")]
+  [Content(typeof(IItemCollection<AlgorithmClass>), true)]
+  public partial class AlgorithmClassCollectionView : ItemCollectionView<AlgorithmClass> {
+    public AlgorithmClassCollectionView() {
+      InitializeComponent();
+      itemsGroupBox.Text = "Algorithm Classes";
+    }
+
+    protected override AlgorithmClass CreateItem() {
+      return new AlgorithmClass();
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/AlgorithmCollectionView.Designer.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/AlgorithmCollectionView.Designer.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/AlgorithmCollectionView.Designer.cs	(revision 5296)
@@ -0,0 +1,53 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Clients.OKB {
+  partial class AlgorithmCollectionView {
+    /// <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) {
+        if (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() {
+      components = new System.ComponentModel.Container();
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+    }
+
+    #endregion
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/AlgorithmCollectionView.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/AlgorithmCollectionView.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/AlgorithmCollectionView.cs	(revision 5296)
@@ -0,0 +1,40 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Windows.Forms;
+using HeuristicLab.Core;
+using HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
+
+namespace HeuristicLab.Clients.OKB {
+  [View("AlgorithmCollection View")]
+  [Content(typeof(IItemCollection<Algorithm>), true)]
+  public partial class AlgorithmCollectionView : ItemCollectionView<Algorithm> {
+    public AlgorithmCollectionView() {
+      InitializeComponent();
+      itemsGroupBox.Text = "Algorithms";
+    }
+
+    protected override Algorithm CreateItem() {
+      return new Algorithm();
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/AlgorithmDataView.Designer.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/AlgorithmDataView.Designer.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/AlgorithmDataView.Designer.cs	(revision 5296)
@@ -0,0 +1,254 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Clients.OKB {
+  partial class AlgorithmDataView {
+    /// <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) {
+        if (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.components = new System.ComponentModel.Container();
+      this.openFileDialog = new System.Windows.Forms.OpenFileDialog();
+      this.saveFileDialog = new System.Windows.Forms.SaveFileDialog();
+      this.groupBox = new System.Windows.Forms.GroupBox();
+      this.noViewAvailableLabel = new System.Windows.Forms.Label();
+      this.viewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
+      this.dataTypeComboBox = new System.Windows.Forms.ComboBox();
+      this.newDataButton = new System.Windows.Forms.Button();
+      this.saveFileButton = new System.Windows.Forms.Button();
+      this.openFileButton = new System.Windows.Forms.Button();
+      this.fileTextBox = new System.Windows.Forms.TextBox();
+      this.refreshDataButton = new System.Windows.Forms.Button();
+      this.storeDataButton = new System.Windows.Forms.Button();
+      this.dataTypeLabel = new System.Windows.Forms.Label();
+      this.fileLabel = new System.Windows.Forms.Label();
+      this.toolTip = new System.Windows.Forms.ToolTip(this.components);
+      this.groupBox.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // openFileDialog
+      // 
+      this.openFileDialog.FileName = "data";
+      this.openFileDialog.Filter = "All Files (*.*)|*.*";
+      this.openFileDialog.Title = "Load Algorithm Data";
+      // 
+      // saveFileDialog
+      // 
+      this.saveFileDialog.FileName = "data";
+      this.saveFileDialog.Filter = "All Files (*.*)|*.*";
+      this.saveFileDialog.Title = "Save Algorithm Data";
+      // 
+      // groupBox
+      // 
+      this.groupBox.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.groupBox.Controls.Add(this.noViewAvailableLabel);
+      this.groupBox.Controls.Add(this.viewHost);
+      this.groupBox.Location = new System.Drawing.Point(0, 83);
+      this.groupBox.Name = "groupBox";
+      this.groupBox.Size = new System.Drawing.Size(633, 371);
+      this.groupBox.TabIndex = 19;
+      this.groupBox.TabStop = false;
+      this.groupBox.Text = "Data:";
+      // 
+      // noViewAvailableLabel
+      // 
+      this.noViewAvailableLabel.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.noViewAvailableLabel.AutoSize = true;
+      this.noViewAvailableLabel.Location = new System.Drawing.Point(269, 179);
+      this.noViewAvailableLabel.Name = "noViewAvailableLabel";
+      this.noViewAvailableLabel.Size = new System.Drawing.Size(94, 13);
+      this.noViewAvailableLabel.TabIndex = 1;
+      this.noViewAvailableLabel.Text = "No view available.";
+      this.noViewAvailableLabel.Visible = false;
+      // 
+      // viewHost
+      // 
+      this.viewHost.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.viewHost.Caption = "View";
+      this.viewHost.Content = null;
+      this.viewHost.Enabled = true;
+      this.viewHost.Location = new System.Drawing.Point(6, 19);
+      this.viewHost.Name = "viewHost";
+      this.viewHost.ReadOnly = false;
+      this.viewHost.Size = new System.Drawing.Size(621, 346);
+      this.viewHost.TabIndex = 0;
+      this.viewHost.ViewType = null;
+      // 
+      // dataTypeComboBox
+      // 
+      this.dataTypeComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.dataTypeComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+      this.dataTypeComboBox.FormattingEnabled = true;
+      this.dataTypeComboBox.Location = new System.Drawing.Point(66, 30);
+      this.dataTypeComboBox.Name = "dataTypeComboBox";
+      this.dataTypeComboBox.Size = new System.Drawing.Size(567, 21);
+      this.dataTypeComboBox.TabIndex = 16;
+      this.dataTypeComboBox.SelectedIndexChanged += new System.EventHandler(this.dataTypeComboBox_SelectedIndexChanged);
+      // 
+      // newDataButton
+      // 
+      this.newDataButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.NewDocument;
+      this.newDataButton.Location = new System.Drawing.Point(90, 0);
+      this.newDataButton.Name = "newDataButton";
+      this.newDataButton.Size = new System.Drawing.Size(24, 24);
+      this.newDataButton.TabIndex = 12;
+      this.toolTip.SetToolTip(this.newDataButton, "Create New Algorithm Data");
+      this.newDataButton.UseVisualStyleBackColor = true;
+      this.newDataButton.Click += new System.EventHandler(this.newDataButton_Click);
+      // 
+      // saveFileButton
+      // 
+      this.saveFileButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.Save;
+      this.saveFileButton.Location = new System.Drawing.Point(150, 0);
+      this.saveFileButton.Name = "saveFileButton";
+      this.saveFileButton.Size = new System.Drawing.Size(24, 24);
+      this.saveFileButton.TabIndex = 14;
+      this.toolTip.SetToolTip(this.saveFileButton, "Save Algorithm Data into File");
+      this.saveFileButton.UseVisualStyleBackColor = true;
+      this.saveFileButton.Click += new System.EventHandler(this.saveFileButton_Click);
+      // 
+      // openFileButton
+      // 
+      this.openFileButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.Open;
+      this.openFileButton.Location = new System.Drawing.Point(120, 0);
+      this.openFileButton.Name = "openFileButton";
+      this.openFileButton.Size = new System.Drawing.Size(24, 24);
+      this.openFileButton.TabIndex = 13;
+      this.toolTip.SetToolTip(this.openFileButton, "Load Algorithm Data from File");
+      this.openFileButton.UseVisualStyleBackColor = true;
+      this.openFileButton.Click += new System.EventHandler(this.openFileButton_Click);
+      // 
+      // fileTextBox
+      // 
+      this.fileTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.fileTextBox.Location = new System.Drawing.Point(66, 57);
+      this.fileTextBox.Name = "fileTextBox";
+      this.fileTextBox.ReadOnly = true;
+      this.fileTextBox.Size = new System.Drawing.Size(567, 20);
+      this.fileTextBox.TabIndex = 18;
+      // 
+      // refreshDataButton
+      // 
+      this.refreshDataButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.Refresh;
+      this.refreshDataButton.Location = new System.Drawing.Point(0, 0);
+      this.refreshDataButton.Name = "refreshDataButton";
+      this.refreshDataButton.Size = new System.Drawing.Size(24, 24);
+      this.refreshDataButton.TabIndex = 10;
+      this.toolTip.SetToolTip(this.refreshDataButton, "Refresh Algorithm Data from OKB");
+      this.refreshDataButton.UseVisualStyleBackColor = true;
+      this.refreshDataButton.Click += new System.EventHandler(this.refreshDataButton_Click);
+      // 
+      // storeDataButton
+      // 
+      this.storeDataButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.PublishToWeb;
+      this.storeDataButton.Location = new System.Drawing.Point(30, 0);
+      this.storeDataButton.Name = "storeDataButton";
+      this.storeDataButton.Size = new System.Drawing.Size(24, 24);
+      this.storeDataButton.TabIndex = 11;
+      this.toolTip.SetToolTip(this.storeDataButton, "Store Algorithm Data in OKB");
+      this.storeDataButton.UseVisualStyleBackColor = true;
+      this.storeDataButton.Click += new System.EventHandler(this.storeDataButton_Click);
+      // 
+      // dataTypeLabel
+      // 
+      this.dataTypeLabel.AutoSize = true;
+      this.dataTypeLabel.Location = new System.Drawing.Point(3, 33);
+      this.dataTypeLabel.Name = "dataTypeLabel";
+      this.dataTypeLabel.Size = new System.Drawing.Size(57, 13);
+      this.dataTypeLabel.TabIndex = 15;
+      this.dataTypeLabel.Text = "&DataType:";
+      // 
+      // fileLabel
+      // 
+      this.fileLabel.AutoSize = true;
+      this.fileLabel.Location = new System.Drawing.Point(3, 60);
+      this.fileLabel.Name = "fileLabel";
+      this.fileLabel.Size = new System.Drawing.Size(26, 13);
+      this.fileLabel.TabIndex = 17;
+      this.fileLabel.Text = "&File:";
+      // 
+      // AlgorithmDataView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.Controls.Add(this.groupBox);
+      this.Controls.Add(this.dataTypeComboBox);
+      this.Controls.Add(this.newDataButton);
+      this.Controls.Add(this.saveFileButton);
+      this.Controls.Add(this.openFileButton);
+      this.Controls.Add(this.fileTextBox);
+      this.Controls.Add(this.refreshDataButton);
+      this.Controls.Add(this.storeDataButton);
+      this.Controls.Add(this.dataTypeLabel);
+      this.Controls.Add(this.fileLabel);
+      this.Name = "AlgorithmDataView";
+      this.Size = new System.Drawing.Size(633, 454);
+      this.groupBox.ResumeLayout(false);
+      this.groupBox.PerformLayout();
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.ToolTip toolTip;
+    private System.Windows.Forms.OpenFileDialog openFileDialog;
+    private System.Windows.Forms.SaveFileDialog saveFileDialog;
+    private System.Windows.Forms.GroupBox groupBox;
+    private System.Windows.Forms.Label noViewAvailableLabel;
+    private MainForm.WindowsForms.ViewHost viewHost;
+    private System.Windows.Forms.ComboBox dataTypeComboBox;
+    private System.Windows.Forms.Button newDataButton;
+    private System.Windows.Forms.Button saveFileButton;
+    private System.Windows.Forms.Button openFileButton;
+    private System.Windows.Forms.TextBox fileTextBox;
+    private System.Windows.Forms.Button refreshDataButton;
+    private System.Windows.Forms.Button storeDataButton;
+    private System.Windows.Forms.Label dataTypeLabel;
+    private System.Windows.Forms.Label fileLabel;
+
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/AlgorithmDataView.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/AlgorithmDataView.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/AlgorithmDataView.cs	(revision 5296)
@@ -0,0 +1,247 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.IO;
+using System.Linq;
+using System.Windows.Forms;
+using HeuristicLab.Common;
+using HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
+using HeuristicLab.MainForm.WindowsForms;
+using HeuristicLab.Optimization;
+using HeuristicLab.Persistence.Default.Xml;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Clients.OKB {
+  [View("AlgorithmData View")]
+  [Content(typeof(AlgorithmData), true)]
+  public partial class AlgorithmDataView : AsynchronousContentView {
+    private List<DataType> dataTypeComboBoxValues;
+
+    private long algorithmId;
+    public long AlgorithmId {
+      get { return algorithmId; }
+      set {
+        algorithmId = value;
+        if (Content != null) {
+          Content.AlgorithmId = value;
+          SetEnabledStateOfControls();
+        }
+      }
+    }
+
+    public new AlgorithmData Content {
+      get { return (AlgorithmData)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public AlgorithmDataView() {
+      InitializeComponent();
+    }
+
+    protected override void OnInitialized(System.EventArgs e) {
+      base.OnInitialized(e);
+      dataTypeComboBoxValues = OKBClient.Instance.DataTypes.ToList();
+      dataTypeComboBox.DataSource = dataTypeComboBoxValues;
+      dataTypeComboBox.SelectedIndex = -1;
+    }
+
+    protected override void DeregisterContentEvents() {
+      Content.PropertyChanged -= new PropertyChangedEventHandler(Content_PropertyChanged);
+      base.DeregisterContentEvents();
+    }
+    protected override void RegisterContentEvents() {
+      base.RegisterContentEvents();
+      Content.PropertyChanged += new PropertyChangedEventHandler(Content_PropertyChanged);
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      if (Content == null) {
+        dataTypeComboBox.SelectedIndex = -1;
+        viewHost.Content = null;
+        noViewAvailableLabel.Visible = false;
+      } else {
+        dataTypeComboBox.SelectedItem = dataTypeComboBoxValues.FirstOrDefault(d => d.Id == Content.DataTypeId);
+
+        using (MemoryStream stream = new MemoryStream(Content.Data)) {
+          try {
+            viewHost.Content = XmlParser.Deserialize<IContent>(stream);
+            noViewAvailableLabel.Visible = false;
+          }
+          catch (Exception) {
+            viewHost.Content = null;
+            noViewAvailableLabel.Visible = true;
+          }
+          stream.Close();
+        }
+      }
+      fileTextBox.Text = "-";
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      newDataButton.Enabled = !ReadOnly;
+      openFileButton.Enabled = !ReadOnly;
+      saveFileButton.Enabled = (Content != null) && (((Content.Data != null) && (Content.Data.Length != 0)) || (viewHost.Content != null));
+      storeDataButton.Enabled = saveFileButton.Enabled && (Content.AlgorithmId != 0) && !ReadOnly;
+      dataTypeComboBox.Enabled = Content != null && viewHost.Content == null && !ReadOnly;
+      fileTextBox.Enabled = Content != null;
+      groupBox.Enabled = Content != null;
+    }
+
+    private void Content_PropertyChanged(object sender, PropertyChangedEventArgs e) {
+      switch (e.PropertyName) {
+        case "DataTypeId":
+          dataTypeComboBox.SelectedItem = dataTypeComboBoxValues.FirstOrDefault(d => d.Id == Content.DataTypeId);
+          break;
+      }
+    }
+
+    private void refreshDataButton_Click(object sender, EventArgs e) {
+      BeginAsyncCall();
+      var call = new Action(delegate() {
+        AlgorithmData data = OKBClient.Instance.GetAlgorithmData(AlgorithmId);
+        Content = data;
+      });
+      call.BeginInvoke(delegate(IAsyncResult result) {
+        call.EndInvoke(result);
+        EndAsyncCall();
+      }, null);
+    }
+    private void storeDataButton_Click(object sender, EventArgs e) {
+      if (viewHost.Content != null) {
+        try {
+          using (MemoryStream stream = new MemoryStream()) {
+            IAlgorithm algorithm = viewHost.Content as IAlgorithm;
+            algorithm.Prepare(true);
+            XmlGenerator.Serialize(algorithm, stream);
+            stream.Close();
+            Content.Data = stream.ToArray();
+          }
+        }
+        catch (Exception ex) {
+          ErrorHandling.ShowErrorDialog(this, ex);
+        }
+      }
+      OKBClient.Instance.UpdateAlgorithmData(Content);
+    }
+    private void newDataButton_Click(object sender, EventArgs e) {
+      using (TypeSelectorDialog dialog = new TypeSelectorDialog()) {
+        dialog.Caption = "Select Algorithm";
+        dialog.TypeSelector.Caption = "Available Algorithms";
+        dialog.TypeSelector.Configure(typeof(IAlgorithm), false, true);
+        if (dialog.ShowDialog(this) == DialogResult.OK) {
+          try {
+            if (Content == null) Content = new AlgorithmData { AlgorithmId = AlgorithmId };
+            viewHost.Content = (IContent)dialog.TypeSelector.CreateInstanceOfSelectedType();
+            DataType dataType = OKBClient.Instance.ConvertToDataType(viewHost.Content.GetType());
+            dataTypeComboBoxValues = OKBClient.Instance.DataTypes.OrderBy(d => d.Name).ToList();
+            dataTypeComboBox.DataSource = dataTypeComboBoxValues;
+            dataTypeComboBox.SelectedItem = dataType;
+            fileTextBox.Text = "-";
+            noViewAvailableLabel.Visible = false;
+            SetEnabledStateOfControls();
+          }
+          catch (Exception ex) {
+            ErrorHandling.ShowErrorDialog(this, ex);
+          }
+        }
+      }
+    }
+    private void openFileButton_Click(object sender, EventArgs e) {
+      if (openFileDialog.ShowDialog(this) == DialogResult.OK) {
+        try {
+          if (Content == null) Content = new AlgorithmData { AlgorithmId = AlgorithmId };
+          IAlgorithm algorithm = null;
+          try {
+            algorithm = XmlParser.Deserialize<IAlgorithm>(openFileDialog.FileName);
+          }
+          catch (Exception) { }
+
+          if (algorithm != null) {
+            viewHost.Content = algorithm;
+            noViewAvailableLabel.Visible = false;
+            DataType dataType = OKBClient.Instance.ConvertToDataType(viewHost.Content.GetType());
+            dataTypeComboBoxValues = OKBClient.Instance.DataTypes.OrderBy(d => d.Name).ToList();
+            dataTypeComboBox.DataSource = dataTypeComboBoxValues;
+            dataTypeComboBox.SelectedItem = dataType;
+          } else {
+            viewHost.Content = null;
+            noViewAvailableLabel.Visible = true;
+            using (FileStream stream = new FileStream(openFileDialog.FileName, FileMode.Open, FileAccess.Read)) {
+              byte[] bytes = new byte[stream.Length];
+              stream.Read(bytes, 0, bytes.Length);
+              stream.Close();
+              Content.Data = bytes;
+            }
+          }
+          fileTextBox.Text = openFileDialog.FileName;
+          SetEnabledStateOfControls();
+        }
+        catch (Exception ex) {
+          ErrorHandling.ShowErrorDialog(this, ex);
+        }
+      }
+    }
+    private void saveFileButton_Click(object sender, EventArgs e) {
+      if (saveFileDialog.ShowDialog(this) == DialogResult.OK) {
+        try {
+          if (viewHost.Content != null) {
+            XmlGenerator.Serialize(viewHost.Content, saveFileDialog.FileName);
+          } else {
+            using (FileStream stream = new FileStream(saveFileDialog.FileName, FileMode.Create, FileAccess.Write)) {
+              stream.Write(Content.Data, 0, Content.Data.Length);
+              stream.Close();
+            }
+          }
+          fileTextBox.Text = saveFileDialog.FileName;
+        }
+        catch (Exception ex) {
+          ErrorHandling.ShowErrorDialog(this, ex);
+        }
+      }
+    }
+    private void dataTypeComboBox_SelectedIndexChanged(object sender, EventArgs e) {
+      if (Content != null) Content.DataTypeId = ((DataType)dataTypeComboBox.SelectedItem).Id;
+    }
+
+    private void BeginAsyncCall() {
+      if (InvokeRequired)
+        Invoke(new Action(BeginAsyncCall));
+      else {
+        Cursor = Cursors.AppStarting;
+        Enabled = false;
+      }
+    }
+    private void EndAsyncCall() {
+      if (InvokeRequired)
+        Invoke(new Action(EndAsyncCall));
+      else {
+        Cursor = Cursors.Default;
+        Enabled = true;
+      }
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/AlgorithmParameterCollectionView.Designer.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/AlgorithmParameterCollectionView.Designer.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/AlgorithmParameterCollectionView.Designer.cs	(revision 5296)
@@ -0,0 +1,53 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Clients.OKB {
+  partial class AlgorithmParameterCollectionView {
+    /// <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) {
+        if (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() {
+      components = new System.ComponentModel.Container();
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+    }
+
+    #endregion
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/AlgorithmParameterCollectionView.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/AlgorithmParameterCollectionView.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/AlgorithmParameterCollectionView.cs	(revision 5296)
@@ -0,0 +1,40 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Windows.Forms;
+using HeuristicLab.Core;
+using HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
+
+namespace HeuristicLab.Clients.OKB {
+  [View("AlgorithmParameterCollection View")]
+  [Content(typeof(IItemCollection<AlgorithmParameter>), true)]
+  public partial class AlgorithmParameterCollectionView : ItemCollectionView<AlgorithmParameter> {
+    public AlgorithmParameterCollectionView() {
+      InitializeComponent();
+      itemsGroupBox.Text = "Algorithm Parameters";
+    }
+
+    protected override AlgorithmParameter CreateItem() {
+      return new AlgorithmParameter();
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/AlgorithmParameterView.Designer.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/AlgorithmParameterView.Designer.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/AlgorithmParameterView.Designer.cs	(revision 5296)
@@ -0,0 +1,129 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Clients.OKB {
+  partial class AlgorithmParameterView {
+    /// <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) {
+        if (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.aliasLabel = new System.Windows.Forms.Label();
+      this.aliasTextBox = new System.Windows.Forms.TextBox();
+      this.dataTypeLabel = new System.Windows.Forms.Label();
+      this.dataTypeComboBox = new System.Windows.Forms.ComboBox();
+      this.SuspendLayout();
+      // 
+      // storeButton
+      // 
+      this.toolTip.SetToolTip(this.storeButton, "Store Data");
+      // 
+      // aliasLabel
+      // 
+      this.aliasLabel.AutoSize = true;
+      this.aliasLabel.Location = new System.Drawing.Point(3, 84);
+      this.aliasLabel.Name = "aliasLabel";
+      this.aliasLabel.Size = new System.Drawing.Size(32, 13);
+      this.aliasLabel.TabIndex = 5;
+      this.aliasLabel.Text = "Alias:";
+      // 
+      // aliasTextBox
+      // 
+      this.aliasTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.aliasTextBox.Location = new System.Drawing.Point(72, 81);
+      this.aliasTextBox.Name = "aliasTextBox";
+      this.aliasTextBox.Size = new System.Drawing.Size(278, 20);
+      this.aliasTextBox.TabIndex = 6;
+      this.aliasTextBox.TextChanged += new System.EventHandler(this.aliasTextBox_TextChanged);
+      this.aliasTextBox.KeyDown += new System.Windows.Forms.KeyEventHandler(this.aliasTextBox_KeyDown);
+      // 
+      // dataTypeLabel
+      // 
+      this.dataTypeLabel.AutoSize = true;
+      this.dataTypeLabel.Location = new System.Drawing.Point(3, 110);
+      this.dataTypeLabel.Name = "dataTypeLabel";
+      this.dataTypeLabel.Size = new System.Drawing.Size(60, 13);
+      this.dataTypeLabel.TabIndex = 7;
+      this.dataTypeLabel.Text = "Data Type:";
+      // 
+      // dataTypeComboBox
+      // 
+      this.dataTypeComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.dataTypeComboBox.FormattingEnabled = true;
+      this.dataTypeComboBox.Location = new System.Drawing.Point(72, 107);
+      this.dataTypeComboBox.Name = "dataTypeComboBox";
+      this.dataTypeComboBox.Size = new System.Drawing.Size(278, 21);
+      this.dataTypeComboBox.TabIndex = 8;
+      this.dataTypeComboBox.SelectedIndexChanged += new System.EventHandler(this.dataTypeComboBox_SelectedIndexChanged);
+      // 
+      // AlgorithmParameterView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.aliasTextBox);
+      this.Controls.Add(this.aliasLabel);
+      this.Controls.Add(this.dataTypeComboBox);
+      this.Controls.Add(this.dataTypeLabel);
+      this.Name = "AlgorithmParameterView";
+      this.Size = new System.Drawing.Size(350, 147);
+      this.Controls.SetChildIndex(this.dataTypeLabel, 0);
+      this.Controls.SetChildIndex(this.dataTypeComboBox, 0);
+      this.Controls.SetChildIndex(this.aliasLabel, 0);
+      this.Controls.SetChildIndex(this.aliasTextBox, 0);
+      this.Controls.SetChildIndex(this.storeButton, 0);
+      this.Controls.SetChildIndex(this.nameTextBox, 0);
+      this.Controls.SetChildIndex(this.nameLabel, 0);
+      this.Controls.SetChildIndex(this.descriptionLabel, 0);
+      this.Controls.SetChildIndex(this.descriptionTextBox, 0);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Label aliasLabel;
+    private System.Windows.Forms.TextBox aliasTextBox;
+    private System.Windows.Forms.Label dataTypeLabel;
+    private System.Windows.Forms.ComboBox dataTypeComboBox;
+
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/AlgorithmParameterView.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/AlgorithmParameterView.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/AlgorithmParameterView.cs	(revision 5296)
@@ -0,0 +1,97 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Windows.Forms;
+using HeuristicLab.MainForm;
+using HeuristicLab.MainForm.WindowsForms;
+
+namespace HeuristicLab.Clients.OKB {
+  [View("AlgorithmParameter View")]
+  [Content(typeof(AlgorithmParameter), true)]
+  public partial class AlgorithmParameterView : NamedOKBItemView {
+    private List<DataType> dataTypeComboBoxValues;
+
+    public new AlgorithmParameter Content {
+      get { return (AlgorithmParameter)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public AlgorithmParameterView() {
+      InitializeComponent();
+    }
+
+    protected override void OnInitialized(System.EventArgs e) {
+      base.OnInitialized(e);
+      dataTypeComboBoxValues = OKBClient.Instance.DataTypes.ToList();
+      dataTypeComboBox.DataSource = dataTypeComboBoxValues;
+      dataTypeComboBox.SelectedIndex = -1;
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      if (Content == null) {
+        aliasTextBox.Text = string.Empty;
+        dataTypeComboBox.SelectedIndex = -1;
+      } else {
+        aliasTextBox.Text = Content.Alias;
+        dataTypeComboBox.SelectedItem = dataTypeComboBoxValues.FirstOrDefault(d => d.Id == Content.DataTypeId);
+      }
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      aliasTextBox.Enabled = Content != null;
+      aliasTextBox.ReadOnly = ReadOnly;
+      dataTypeComboBox.Enabled = Content != null && !ReadOnly;
+    }
+
+    protected override void OnContentPropertyChanged(string propertyName) {
+      switch (propertyName) {
+        case "Alias":
+          aliasTextBox.Text = Content.Alias;
+          break;
+        case "DataTypeId":
+          dataTypeComboBox.SelectedItem = dataTypeComboBoxValues.FirstOrDefault(d => d.Id == Content.DataTypeId);
+          break;
+      }
+    }
+
+    protected virtual void aliasTextBox_KeyDown(object sender, KeyEventArgs e) {
+      if ((e.KeyCode == Keys.Enter) || (e.KeyCode == Keys.Return))
+        aliasLabel.Focus();  // set focus on label to validate data
+      if (e.KeyCode == Keys.Escape) {
+        aliasTextBox.Text = Content.Alias;
+        aliasLabel.Focus();  // set focus on label to validate data
+      }
+    }
+    protected virtual void aliasTextBox_TextChanged(object sender, EventArgs e) {
+      if (aliasTextBox.Text != Content.Alias)
+        Content.Alias = aliasTextBox.Text;
+    }
+
+    private void dataTypeComboBox_SelectedIndexChanged(object sender, EventArgs e) {
+      if (Content != null) Content.DataTypeId = ((DataType)dataTypeComboBox.SelectedItem).Id;
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/AlgorithmView.Designer.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/AlgorithmView.Designer.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/AlgorithmView.Designer.cs	(revision 5296)
@@ -0,0 +1,381 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Clients.OKB {
+  partial class AlgorithmView {
+    /// <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) {
+        if (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.platformLabel = new System.Windows.Forms.Label();
+      this.platformComboBox = new System.Windows.Forms.ComboBox();
+      this.algorithmClassLabel = new System.Windows.Forms.Label();
+      this.algorithmClassComboBox = new System.Windows.Forms.ComboBox();
+      this.usersListBox = new System.Windows.Forms.ListBox();
+      this.tabControl = new System.Windows.Forms.TabControl();
+      this.usersTabPage = new System.Windows.Forms.TabPage();
+      this.storeUsersButton = new System.Windows.Forms.Button();
+      this.refreshUsersButton = new System.Windows.Forms.Button();
+      this.dataTabPage = new System.Windows.Forms.TabPage();
+      this.algorithmDataView = new HeuristicLab.Clients.OKB.AlgorithmDataView();
+      this.parametersTabPage = new System.Windows.Forms.TabPage();
+      this.algorithmParameterCollectionView = new HeuristicLab.Clients.OKB.AlgorithmParameterCollectionView();
+      this.refreshParametersButton = new System.Windows.Forms.Button();
+      this.resultsTabPage = new System.Windows.Forms.TabPage();
+      this.resultCollectionView = new HeuristicLab.Clients.OKB.ResultCollectionView();
+      this.refreshResultsButton = new System.Windows.Forms.Button();
+      this.experimentsTabPage = new System.Windows.Forms.TabPage();
+      this.refreshExperimentsButton = new System.Windows.Forms.Button();
+      this.experimentCollectionView = new HeuristicLab.Clients.OKB.ExperimentCollectionView();
+      this.tabControl.SuspendLayout();
+      this.usersTabPage.SuspendLayout();
+      this.dataTabPage.SuspendLayout();
+      this.parametersTabPage.SuspendLayout();
+      this.resultsTabPage.SuspendLayout();
+      this.experimentsTabPage.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // nameTextBox
+      // 
+      this.nameTextBox.Location = new System.Drawing.Point(90, 29);
+      this.nameTextBox.Size = new System.Drawing.Size(543, 20);
+      // 
+      // descriptionTextBox
+      // 
+      this.descriptionTextBox.Location = new System.Drawing.Point(90, 55);
+      this.descriptionTextBox.Size = new System.Drawing.Size(543, 20);
+      // 
+      // storeButton
+      // 
+      this.toolTip.SetToolTip(this.storeButton, "Store Data");
+      // 
+      // platformLabel
+      // 
+      this.platformLabel.AutoSize = true;
+      this.platformLabel.Location = new System.Drawing.Point(3, 84);
+      this.platformLabel.Name = "platformLabel";
+      this.platformLabel.Size = new System.Drawing.Size(48, 13);
+      this.platformLabel.TabIndex = 5;
+      this.platformLabel.Text = "&Platform:";
+      // 
+      // platformComboBox
+      // 
+      this.platformComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.platformComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+      this.platformComboBox.FormattingEnabled = true;
+      this.platformComboBox.Location = new System.Drawing.Point(90, 81);
+      this.platformComboBox.Name = "platformComboBox";
+      this.platformComboBox.Size = new System.Drawing.Size(543, 21);
+      this.platformComboBox.TabIndex = 6;
+      this.platformComboBox.SelectedValueChanged += new System.EventHandler(this.platformComboBox_SelectedValueChanged);
+      // 
+      // algorithmClassLabel
+      // 
+      this.algorithmClassLabel.AutoSize = true;
+      this.algorithmClassLabel.Location = new System.Drawing.Point(3, 111);
+      this.algorithmClassLabel.Name = "algorithmClassLabel";
+      this.algorithmClassLabel.Size = new System.Drawing.Size(81, 13);
+      this.algorithmClassLabel.TabIndex = 7;
+      this.algorithmClassLabel.Text = "&Algorithm Class:";
+      // 
+      // algorithmClassComboBox
+      // 
+      this.algorithmClassComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.algorithmClassComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+      this.algorithmClassComboBox.FormattingEnabled = true;
+      this.algorithmClassComboBox.Location = new System.Drawing.Point(90, 108);
+      this.algorithmClassComboBox.Name = "algorithmClassComboBox";
+      this.algorithmClassComboBox.Size = new System.Drawing.Size(543, 21);
+      this.algorithmClassComboBox.TabIndex = 8;
+      this.algorithmClassComboBox.SelectedValueChanged += new System.EventHandler(this.algorithmClassComboBox_SelectedValueChanged);
+      // 
+      // usersListBox
+      // 
+      this.usersListBox.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.usersListBox.Enabled = false;
+      this.usersListBox.FormattingEnabled = true;
+      this.usersListBox.Location = new System.Drawing.Point(6, 36);
+      this.usersListBox.Name = "usersListBox";
+      this.usersListBox.SelectionMode = System.Windows.Forms.SelectionMode.MultiSimple;
+      this.usersListBox.Size = new System.Drawing.Size(613, 225);
+      this.usersListBox.TabIndex = 2;
+      this.usersListBox.SelectedIndexChanged += new System.EventHandler(this.usersListBox_SelectedIndexChanged);
+      // 
+      // tabControl
+      // 
+      this.tabControl.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.tabControl.Controls.Add(this.usersTabPage);
+      this.tabControl.Controls.Add(this.dataTabPage);
+      this.tabControl.Controls.Add(this.parametersTabPage);
+      this.tabControl.Controls.Add(this.resultsTabPage);
+      this.tabControl.Controls.Add(this.experimentsTabPage);
+      this.tabControl.Location = new System.Drawing.Point(0, 162);
+      this.tabControl.Name = "tabControl";
+      this.tabControl.SelectedIndex = 0;
+      this.tabControl.Size = new System.Drawing.Size(633, 292);
+      this.tabControl.TabIndex = 9;
+      // 
+      // usersTabPage
+      // 
+      this.usersTabPage.Controls.Add(this.storeUsersButton);
+      this.usersTabPage.Controls.Add(this.refreshUsersButton);
+      this.usersTabPage.Controls.Add(this.usersListBox);
+      this.usersTabPage.Location = new System.Drawing.Point(4, 22);
+      this.usersTabPage.Name = "usersTabPage";
+      this.usersTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.usersTabPage.Size = new System.Drawing.Size(625, 266);
+      this.usersTabPage.TabIndex = 0;
+      this.usersTabPage.Text = "Authorized Users";
+      this.usersTabPage.UseVisualStyleBackColor = true;
+      // 
+      // storeUsersButton
+      // 
+      this.storeUsersButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.PublishToWeb;
+      this.storeUsersButton.Location = new System.Drawing.Point(36, 6);
+      this.storeUsersButton.Name = "storeUsersButton";
+      this.storeUsersButton.Size = new System.Drawing.Size(24, 24);
+      this.storeUsersButton.TabIndex = 1;
+      this.toolTip.SetToolTip(this.storeUsersButton, "Store Authorized Users");
+      this.storeUsersButton.UseVisualStyleBackColor = true;
+      this.storeUsersButton.Click += new System.EventHandler(this.storeUsersButton_Click);
+      // 
+      // refreshUsersButton
+      // 
+      this.refreshUsersButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.Refresh;
+      this.refreshUsersButton.Location = new System.Drawing.Point(6, 6);
+      this.refreshUsersButton.Name = "refreshUsersButton";
+      this.refreshUsersButton.Size = new System.Drawing.Size(24, 24);
+      this.refreshUsersButton.TabIndex = 0;
+      this.toolTip.SetToolTip(this.refreshUsersButton, "Refresh Authorized Users");
+      this.refreshUsersButton.UseVisualStyleBackColor = true;
+      this.refreshUsersButton.Click += new System.EventHandler(this.refreshUsersButton_Click);
+      // 
+      // dataTabPage
+      // 
+      this.dataTabPage.Controls.Add(this.algorithmDataView);
+      this.dataTabPage.Location = new System.Drawing.Point(4, 22);
+      this.dataTabPage.Name = "dataTabPage";
+      this.dataTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.dataTabPage.Size = new System.Drawing.Size(625, 266);
+      this.dataTabPage.TabIndex = 1;
+      this.dataTabPage.Text = "Platform-Specific Algorithm Data";
+      this.dataTabPage.UseVisualStyleBackColor = true;
+      // 
+      // algorithmDataView
+      // 
+      this.algorithmDataView.AlgorithmId = ((long)(0));
+      this.algorithmDataView.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.algorithmDataView.Caption = "AlgorithmData View";
+      this.algorithmDataView.Content = null;
+      this.algorithmDataView.Location = new System.Drawing.Point(6, 6);
+      this.algorithmDataView.Name = "algorithmDataView";
+      this.algorithmDataView.ReadOnly = false;
+      this.algorithmDataView.Size = new System.Drawing.Size(613, 254);
+      this.algorithmDataView.TabIndex = 0;
+      // 
+      // parametersTabPage
+      // 
+      this.parametersTabPage.Controls.Add(this.algorithmParameterCollectionView);
+      this.parametersTabPage.Controls.Add(this.refreshParametersButton);
+      this.parametersTabPage.Location = new System.Drawing.Point(4, 22);
+      this.parametersTabPage.Name = "parametersTabPage";
+      this.parametersTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.parametersTabPage.Size = new System.Drawing.Size(625, 266);
+      this.parametersTabPage.TabIndex = 2;
+      this.parametersTabPage.Text = "Parameters";
+      this.parametersTabPage.UseVisualStyleBackColor = true;
+      // 
+      // algorithmParameterCollectionView
+      // 
+      this.algorithmParameterCollectionView.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.algorithmParameterCollectionView.Caption = "AlgorithmParameterCollection View";
+      this.algorithmParameterCollectionView.Content = null;
+      this.algorithmParameterCollectionView.Location = new System.Drawing.Point(6, 36);
+      this.algorithmParameterCollectionView.Name = "algorithmParameterCollectionView";
+      this.algorithmParameterCollectionView.ReadOnly = false;
+      this.algorithmParameterCollectionView.Size = new System.Drawing.Size(613, 224);
+      this.algorithmParameterCollectionView.TabIndex = 1;
+      // 
+      // refreshParametersButton
+      // 
+      this.refreshParametersButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.Refresh;
+      this.refreshParametersButton.Location = new System.Drawing.Point(6, 6);
+      this.refreshParametersButton.Name = "refreshParametersButton";
+      this.refreshParametersButton.Size = new System.Drawing.Size(24, 24);
+      this.refreshParametersButton.TabIndex = 0;
+      this.refreshParametersButton.UseVisualStyleBackColor = true;
+      this.refreshParametersButton.Click += new System.EventHandler(this.refreshParametersButton_Click);
+      // 
+      // resultsTabPage
+      // 
+      this.resultsTabPage.Controls.Add(this.resultCollectionView);
+      this.resultsTabPage.Controls.Add(this.refreshResultsButton);
+      this.resultsTabPage.Location = new System.Drawing.Point(4, 22);
+      this.resultsTabPage.Name = "resultsTabPage";
+      this.resultsTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.resultsTabPage.Size = new System.Drawing.Size(625, 266);
+      this.resultsTabPage.TabIndex = 3;
+      this.resultsTabPage.Text = "Results";
+      this.resultsTabPage.UseVisualStyleBackColor = true;
+      // 
+      // resultCollectionView
+      // 
+      this.resultCollectionView.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.resultCollectionView.Caption = "ResultCollection View";
+      this.resultCollectionView.Content = null;
+      this.resultCollectionView.Location = new System.Drawing.Point(6, 36);
+      this.resultCollectionView.Name = "resultCollectionView";
+      this.resultCollectionView.ReadOnly = false;
+      this.resultCollectionView.Size = new System.Drawing.Size(613, 224);
+      this.resultCollectionView.TabIndex = 1;
+      // 
+      // refreshResultsButton
+      // 
+      this.refreshResultsButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.Refresh;
+      this.refreshResultsButton.Location = new System.Drawing.Point(6, 6);
+      this.refreshResultsButton.Name = "refreshResultsButton";
+      this.refreshResultsButton.Size = new System.Drawing.Size(24, 24);
+      this.refreshResultsButton.TabIndex = 0;
+      this.refreshResultsButton.UseVisualStyleBackColor = true;
+      this.refreshResultsButton.Click += new System.EventHandler(this.refreshResultsButton_Click);
+      // 
+      // experimentsTabPage
+      // 
+      this.experimentsTabPage.Controls.Add(this.experimentCollectionView);
+      this.experimentsTabPage.Controls.Add(this.refreshExperimentsButton);
+      this.experimentsTabPage.Location = new System.Drawing.Point(4, 22);
+      this.experimentsTabPage.Name = "experimentsTabPage";
+      this.experimentsTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.experimentsTabPage.Size = new System.Drawing.Size(625, 266);
+      this.experimentsTabPage.TabIndex = 4;
+      this.experimentsTabPage.Text = "Experiments";
+      this.experimentsTabPage.UseVisualStyleBackColor = true;
+      // 
+      // refreshExperimentsButton
+      // 
+      this.refreshExperimentsButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.Refresh;
+      this.refreshExperimentsButton.Location = new System.Drawing.Point(6, 6);
+      this.refreshExperimentsButton.Name = "refreshExperimentsButton";
+      this.refreshExperimentsButton.Size = new System.Drawing.Size(24, 24);
+      this.refreshExperimentsButton.TabIndex = 0;
+      this.refreshExperimentsButton.UseVisualStyleBackColor = true;
+      this.refreshExperimentsButton.Click += new System.EventHandler(this.refreshExperimentsButton_Click);
+      // 
+      // experimentCollectionView
+      // 
+      this.experimentCollectionView.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.experimentCollectionView.Caption = "ExperimentCollection View";
+      this.experimentCollectionView.Content = null;
+      this.experimentCollectionView.Location = new System.Drawing.Point(6, 36);
+      this.experimentCollectionView.Name = "experimentCollectionView";
+      this.experimentCollectionView.ReadOnly = false;
+      this.experimentCollectionView.Size = new System.Drawing.Size(613, 224);
+      this.experimentCollectionView.TabIndex = 1;
+      // 
+      // AlgorithmView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.Controls.Add(this.tabControl);
+      this.Controls.Add(this.platformComboBox);
+      this.Controls.Add(this.platformLabel);
+      this.Controls.Add(this.algorithmClassComboBox);
+      this.Controls.Add(this.algorithmClassLabel);
+      this.Name = "AlgorithmView";
+      this.Size = new System.Drawing.Size(633, 454);
+      this.Controls.SetChildIndex(this.algorithmClassLabel, 0);
+      this.Controls.SetChildIndex(this.algorithmClassComboBox, 0);
+      this.Controls.SetChildIndex(this.platformLabel, 0);
+      this.Controls.SetChildIndex(this.platformComboBox, 0);
+      this.Controls.SetChildIndex(this.tabControl, 0);
+      this.Controls.SetChildIndex(this.storeButton, 0);
+      this.Controls.SetChildIndex(this.nameTextBox, 0);
+      this.Controls.SetChildIndex(this.nameLabel, 0);
+      this.Controls.SetChildIndex(this.descriptionLabel, 0);
+      this.Controls.SetChildIndex(this.descriptionTextBox, 0);
+      this.tabControl.ResumeLayout(false);
+      this.usersTabPage.ResumeLayout(false);
+      this.dataTabPage.ResumeLayout(false);
+      this.parametersTabPage.ResumeLayout(false);
+      this.resultsTabPage.ResumeLayout(false);
+      this.experimentsTabPage.ResumeLayout(false);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Label platformLabel;
+    private System.Windows.Forms.ComboBox platformComboBox;
+    private System.Windows.Forms.Label algorithmClassLabel;
+    private System.Windows.Forms.ComboBox algorithmClassComboBox;
+    private System.Windows.Forms.ListBox usersListBox;
+    private System.Windows.Forms.TabControl tabControl;
+    private System.Windows.Forms.TabPage usersTabPage;
+    private System.Windows.Forms.Button storeUsersButton;
+    private System.Windows.Forms.Button refreshUsersButton;
+    private System.Windows.Forms.TabPage dataTabPage;
+    private AlgorithmDataView algorithmDataView;
+    private System.Windows.Forms.TabPage parametersTabPage;
+    private System.Windows.Forms.TabPage resultsTabPage;
+    private AlgorithmParameterCollectionView algorithmParameterCollectionView;
+    private System.Windows.Forms.Button refreshParametersButton;
+    private System.Windows.Forms.Button refreshResultsButton;
+    private System.Windows.Forms.TabPage experimentsTabPage;
+    private ResultCollectionView resultCollectionView;
+    private ExperimentCollectionView experimentCollectionView;
+    private System.Windows.Forms.Button refreshExperimentsButton;
+
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/AlgorithmView.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/AlgorithmView.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/AlgorithmView.cs	(revision 5296)
@@ -0,0 +1,138 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Windows.Forms;
+using HeuristicLab.MainForm;
+using HeuristicLab.MainForm.WindowsForms;
+
+namespace HeuristicLab.Clients.OKB {
+  [View("Algorithm View")]
+  [Content(typeof(Algorithm), true)]
+  public partial class AlgorithmView : NamedOKBItemView {
+    private List<Platform> platformComboBoxValues;
+    private List<AlgorithmClass> algorithmClassComboBoxValues;
+
+    public new Algorithm Content {
+      get { return (Algorithm)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public AlgorithmView() {
+      InitializeComponent();
+    }
+
+    protected override void OnInitialized(System.EventArgs e) {
+      base.OnInitialized(e);
+      platformComboBoxValues = OKBClient.Instance.Platforms.ToList();
+      platformComboBox.DataSource = platformComboBoxValues;
+      algorithmClassComboBoxValues = OKBClient.Instance.AlgorithmClasses.ToList();
+      algorithmClassComboBox.DataSource = algorithmClassComboBoxValues;
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      if (Content == null) {
+        platformComboBox.SelectedIndex = -1;
+        algorithmClassComboBox.SelectedIndex = -1;
+        algorithmDataView.AlgorithmId = 0;
+      } else {
+        platformComboBox.SelectedItem = platformComboBoxValues.FirstOrDefault(p => p.Id == Content.PlatformId);
+        algorithmClassComboBox.SelectedItem = algorithmClassComboBoxValues.FirstOrDefault(a => a.Id == Content.AlgorithmClassId);
+        algorithmDataView.AlgorithmId = Content.Id;
+      }
+      usersListBox.DataSource = null;
+      algorithmDataView.Content = null;
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      platformComboBox.Enabled = (Content != null) && !ReadOnly;
+      algorithmClassComboBox.Enabled = (Content != null) && !ReadOnly;
+      refreshUsersButton.Enabled = Content != null;
+      storeUsersButton.Enabled = (usersListBox.DataSource != null) && !ReadOnly;
+      usersListBox.Enabled = (usersListBox.DataSource != null) && !ReadOnly;
+      algorithmDataView.Enabled = Content != null;
+    }
+
+    protected override void OnContentPropertyChanged(string propertyName) {
+      switch (propertyName) {
+        case "Id":
+          algorithmDataView.AlgorithmId = Content.Id;
+          break;
+        case "PlatformId":
+          platformComboBox.SelectedItem = platformComboBoxValues.FirstOrDefault(p => p.Id == Content.PlatformId);
+          break;
+        case "AlgorithmClassId":
+          algorithmClassComboBox.SelectedItem = algorithmClassComboBoxValues.FirstOrDefault(a => a.Id == Content.AlgorithmClassId);
+          break;
+      }
+    }
+
+    private void platformComboBox_SelectedValueChanged(object sender, System.EventArgs e) {
+      if (Content != null) {
+        Platform selected = platformComboBox.SelectedItem as Platform;
+        if (selected != null) Content.PlatformId = selected.Id;
+      }
+    }
+    private void algorithmClassComboBox_SelectedValueChanged(object sender, System.EventArgs e) {
+      if (Content != null) {
+        AlgorithmClass selected = algorithmClassComboBox.SelectedItem as AlgorithmClass;
+        if (selected != null) Content.AlgorithmClassId = selected.Id;
+      }
+    }
+
+    private void refreshUsersButton_Click(object sender, System.EventArgs e) {
+      List<Guid> ids = OKBClient.Instance.GetAlgorithmUsers(Content.Id);
+      if (ids != null) {
+        List<User> users = OKBClient.Instance.Users.ToList();
+        usersListBox.DataSource = users;
+        usersListBox.DisplayMember = "Name";
+        usersListBox.SelectedItems.Clear();
+        foreach (Guid id in ids)
+          usersListBox.SelectedItems.Add(users.First(u => u.Id == id));
+        usersListBox.Enabled = !ReadOnly;
+        storeUsersButton.Enabled = false;
+      }
+    }
+    private void storeUsersButton_Click(object sender, System.EventArgs e) {
+      if (OKBClient.Instance.UpdateAlgorithmUsers(Content.Id, usersListBox.SelectedItems.Cast<User>().Select(u => u.Id).ToList()))
+        storeUsersButton.Enabled = false;
+    }
+    private void usersListBox_SelectedIndexChanged(object sender, EventArgs e) {
+      storeUsersButton.Enabled = !ReadOnly;
+    }
+
+    private void refreshParametersButton_Click(object sender, EventArgs e) {
+      algorithmParameterCollectionView.Content = OKBClient.Instance.GetAlgorithmParameters(Content.Id);
+    }
+
+    private void refreshResultsButton_Click(object sender, EventArgs e) {
+      resultCollectionView.Content = OKBClient.Instance.GetResults(Content.Id);
+    }
+
+    private void refreshExperimentsButton_Click(object sender, EventArgs e) {
+      experimentCollectionView.Content = OKBClient.Instance.GetExperiments(Content.Id, 0);
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/AndFilterView.Designer.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/AndFilterView.Designer.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/AndFilterView.Designer.cs	(revision 5296)
@@ -0,0 +1,65 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Clients.OKB {
+  partial class AndFilterView {
+    /// <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) {
+        if (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.SuspendLayout();
+      // 
+      // AndFilterView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Name = "AndFilterView";
+      this.Size = new System.Drawing.Size(727, 327);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+
+
+
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/AndFilterView.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/AndFilterView.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/AndFilterView.cs	(revision 5296)
@@ -0,0 +1,42 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Windows.Forms;
+using HeuristicLab.MainForm;
+using HeuristicLab.MainForm.WindowsForms;
+
+namespace HeuristicLab.Clients.OKB {
+  [View("AndFilter View")]
+  [Content(typeof(AndFilter), true)]
+  public partial class AndFilterView : CombinedFilterView {
+    public new AndFilter Content {
+      get { return (AndFilter)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public AndFilterView() {
+      InitializeComponent();
+      string nl = Environment.NewLine;
+      label.Text = "A" + nl + "N" + nl + "D";
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/CombinedFilterView.Designer.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/CombinedFilterView.Designer.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/CombinedFilterView.Designer.cs	(revision 5296)
@@ -0,0 +1,131 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Clients.OKB {
+  partial class CombinedFilterView {
+    /// <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) {
+        if (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() {
+      System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(CombinedFilterView));
+      this.tableLayoutPanel = new System.Windows.Forms.TableLayoutPanel();
+      this.filtersComboBox = new System.Windows.Forms.ComboBox();
+      this.addButton = new System.Windows.Forms.Button();
+      this.label = new System.Windows.Forms.Label();
+      this.tableLayoutPanel.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // tableLayoutPanel
+      // 
+      this.tableLayoutPanel.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.tableLayoutPanel.ColumnCount = 2;
+      this.tableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
+      this.tableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
+      this.tableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 20F));
+      this.tableLayoutPanel.Controls.Add(this.filtersComboBox, 1, 0);
+      this.tableLayoutPanel.Controls.Add(this.addButton, 0, 0);
+      this.tableLayoutPanel.Location = new System.Drawing.Point(21, 0);
+      this.tableLayoutPanel.Name = "tableLayoutPanel";
+      this.tableLayoutPanel.RowCount = 1;
+      this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle());
+      this.tableLayoutPanel.Size = new System.Drawing.Size(706, 327);
+      this.tableLayoutPanel.TabIndex = 1;
+      // 
+      // filtersComboBox
+      // 
+      this.filtersComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.filtersComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+      this.filtersComboBox.FormattingEnabled = true;
+      this.filtersComboBox.Location = new System.Drawing.Point(33, 4);
+      this.filtersComboBox.Margin = new System.Windows.Forms.Padding(3, 4, 3, 3);
+      this.filtersComboBox.Name = "filtersComboBox";
+      this.filtersComboBox.Size = new System.Drawing.Size(670, 21);
+      this.filtersComboBox.TabIndex = 1;
+      // 
+      // addButton
+      // 
+      this.addButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+      this.addButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.Add;
+      this.addButton.Location = new System.Drawing.Point(3, 3);
+      this.addButton.Name = "addButton";
+      this.addButton.Size = new System.Drawing.Size(24, 24);
+      this.addButton.TabIndex = 0;
+      this.addButton.UseVisualStyleBackColor = true;
+      this.addButton.Click += new System.EventHandler(this.addButton_Click);
+      // 
+      // label
+      // 
+      this.label.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)));
+      this.label.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+      this.label.Location = new System.Drawing.Point(3, 0);
+      this.label.Name = "label";
+      this.label.Size = new System.Drawing.Size(20, 327);
+      this.label.TabIndex = 0;
+      this.label.Text = "L\r\nA\r\nB\r\nE\r\nL\r\n";
+      this.label.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+      // 
+      // CombinedFilterView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.tableLayoutPanel);
+      this.Controls.Add(this.label);
+      this.Name = "CombinedFilterView";
+      this.Size = new System.Drawing.Size(727, 327);
+      this.tableLayoutPanel.ResumeLayout(false);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    protected System.Windows.Forms.TableLayoutPanel tableLayoutPanel;
+    protected System.Windows.Forms.Button addButton;
+    protected System.Windows.Forms.ComboBox filtersComboBox;
+    protected System.Windows.Forms.Label label;
+
+
+
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/CombinedFilterView.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/CombinedFilterView.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/CombinedFilterView.cs	(revision 5296)
@@ -0,0 +1,131 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Collections.Generic;
+using System.Windows.Forms;
+using HeuristicLab.MainForm;
+using HeuristicLab.MainForm.WindowsForms;
+
+namespace HeuristicLab.Clients.OKB {
+  [View("CombinedFilter View")]
+  [Content(typeof(CombinedFilter), true)]
+  public partial class CombinedFilterView : AsynchronousContentView {
+    public new CombinedFilter Content {
+      get { return (CombinedFilter)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public CombinedFilterView() {
+      InitializeComponent();
+    }
+
+    protected override void OnInitialized(System.EventArgs e) {
+      base.OnInitialized(e);
+      IEnumerable<Filter> availableFilters = OKBClient.Instance.GetFilters();
+      filtersComboBox.DataSource = availableFilters;
+      filtersComboBox.DisplayMember = "Label";
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      RemoveFilters();
+      if (Content != null) {
+        foreach (Filter filter in Content.Filters)
+          AddFilter(filter);
+      }
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      addButton.Enabled = Content != null && !ReadOnly && filtersComboBox.SelectedIndex != -1;
+      filtersComboBox.Enabled = Content != null && !ReadOnly && filtersComboBox.Items.Count > 0;
+      tableLayoutPanel.Enabled = Content != null && !ReadOnly;
+    }
+
+    private void AddFilter(Filter filter) {
+      Content.Filters.Add(filter);
+      int rowIndex = Content.Filters.Count;
+
+      tableLayoutPanel.SuspendLayout();
+      tableLayoutPanel.RowCount++;
+      tableLayoutPanel.RowStyles.Add(new RowStyle(SizeType.AutoSize));
+
+      Button removeButton = new Button();
+      removeButton.Size = new System.Drawing.Size(24, 24);
+      removeButton.Anchor = AnchorStyles.Top | AnchorStyles.Right;
+      removeButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.Remove;
+      removeButton.Tag = filter;
+      removeButton.Click += new System.EventHandler(removeButton_Click);
+      tableLayoutPanel.Controls.Add(removeButton, 0, rowIndex);
+
+      ContentView filterView = (ContentView)MainFormManager.CreateDefaultView(filter.GetType());
+      filterView.Content = filter;
+      filterView.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
+      tableLayoutPanel.Controls.Add(filterView, 1, rowIndex);
+
+      tableLayoutPanel.ResumeLayout();
+    }
+    private void RemoveFilter(Filter filter) {
+      int rowIndex = Content.Filters.IndexOf(filter) + 1;
+      Content.Filters.Remove(filter);
+
+      tableLayoutPanel.SuspendLayout();
+      Control removeButton = tableLayoutPanel.GetControlFromPosition(0, rowIndex);
+      Control filterView = tableLayoutPanel.GetControlFromPosition(1, rowIndex);
+      tableLayoutPanel.Controls.Remove(removeButton);
+      removeButton.Dispose();
+      tableLayoutPanel.Controls.Remove(filterView);
+      filterView.Dispose();
+
+      for (int i = rowIndex + 1; i < tableLayoutPanel.RowCount; i++) {
+        tableLayoutPanel.SetRow(tableLayoutPanel.GetControlFromPosition(0, i), i - 1);
+        tableLayoutPanel.SetRow(tableLayoutPanel.GetControlFromPosition(1, i), i - 1);
+      }
+
+      tableLayoutPanel.RowCount--;
+      tableLayoutPanel.RowStyles.RemoveAt(rowIndex);
+      tableLayoutPanel.ResumeLayout();
+    }
+    private void RemoveFilters() {
+      tableLayoutPanel.SuspendLayout();
+      for (int i = tableLayoutPanel.RowCount - 1; i > 0; i--) {
+        Control removeButton = tableLayoutPanel.GetControlFromPosition(0, i);
+        Control filterView = tableLayoutPanel.GetControlFromPosition(1, i);
+        tableLayoutPanel.Controls.Remove(removeButton);
+        removeButton.Dispose();
+        tableLayoutPanel.Controls.Remove(filterView);
+        filterView.Dispose();
+        tableLayoutPanel.RowCount--;
+        tableLayoutPanel.RowStyles.RemoveAt(i);
+      }
+      tableLayoutPanel.ResumeLayout();
+    }
+
+    private void addButton_Click(object sender, System.EventArgs e) {
+      Filter filter = filtersComboBox.SelectedItem as Filter;
+      if (filter != null) AddFilter(filter.Clone());
+    }
+    private void removeButton_Click(object sender, System.EventArgs e) {
+      Filter filter = ((Button)sender).Tag as Filter;
+      if (filter != null) RemoveFilter(filter);
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/DataTypeCollectionView.Designer.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/DataTypeCollectionView.Designer.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/DataTypeCollectionView.Designer.cs	(revision 5296)
@@ -0,0 +1,53 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Clients.OKB {
+  partial class DataTypeCollectionView {
+    /// <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) {
+        if (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() {
+      components = new System.ComponentModel.Container();
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+    }
+
+    #endregion
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/DataTypeCollectionView.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/DataTypeCollectionView.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/DataTypeCollectionView.cs	(revision 5296)
@@ -0,0 +1,40 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Windows.Forms;
+using HeuristicLab.Core;
+using HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
+
+namespace HeuristicLab.Clients.OKB {
+  [View("DataTypeCollection View")]
+  [Content(typeof(IItemCollection<DataType>), true)]
+  public partial class DataTypeCollectionView : ItemCollectionView<DataType> {
+    public DataTypeCollectionView() {
+      InitializeComponent();
+      itemsGroupBox.Text = "Data Types";
+    }
+
+    protected override DataType CreateItem() {
+      return new DataType();
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/DataTypeView.Designer.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/DataTypeView.Designer.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/DataTypeView.Designer.cs	(revision 5296)
@@ -0,0 +1,188 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Clients.OKB {
+  partial class DataTypeView {
+    /// <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) {
+        if (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.nameLabel = new System.Windows.Forms.Label();
+      this.nameTextBox = new System.Windows.Forms.TextBox();
+      this.sqlNameLabel = new System.Windows.Forms.Label();
+      this.platformLabel = new System.Windows.Forms.Label();
+      this.platformComboBox = new System.Windows.Forms.ComboBox();
+      this.sqlNameComboBox = new System.Windows.Forms.ComboBox();
+      this.typeNameTextBox = new System.Windows.Forms.TextBox();
+      this.typeNameLabel = new System.Windows.Forms.Label();
+      this.SuspendLayout();
+      // 
+      // storeButton
+      // 
+      this.toolTip.SetToolTip(this.storeButton, "Store Data");
+      // 
+      // nameLabel
+      // 
+      this.nameLabel.AutoSize = true;
+      this.nameLabel.Location = new System.Drawing.Point(3, 32);
+      this.nameLabel.Name = "nameLabel";
+      this.nameLabel.Size = new System.Drawing.Size(38, 13);
+      this.nameLabel.TabIndex = 1;
+      this.nameLabel.Text = "&Name:";
+      // 
+      // nameTextBox
+      // 
+      this.nameTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.nameTextBox.Location = new System.Drawing.Point(74, 29);
+      this.nameTextBox.Name = "nameTextBox";
+      this.nameTextBox.Size = new System.Drawing.Size(276, 20);
+      this.nameTextBox.TabIndex = 2;
+      this.nameTextBox.TextChanged += new System.EventHandler(this.nameTextBox_TextChanged);
+      this.nameTextBox.KeyDown += new System.Windows.Forms.KeyEventHandler(this.nameTextBox_KeyDown);
+      // 
+      // sqlNameLabel
+      // 
+      this.sqlNameLabel.AutoSize = true;
+      this.sqlNameLabel.Location = new System.Drawing.Point(3, 84);
+      this.sqlNameLabel.Name = "sqlNameLabel";
+      this.sqlNameLabel.Size = new System.Drawing.Size(62, 13);
+      this.sqlNameLabel.TabIndex = 5;
+      this.sqlNameLabel.Text = "&SQL Name:";
+      // 
+      // platformLabel
+      // 
+      this.platformLabel.AutoSize = true;
+      this.platformLabel.Location = new System.Drawing.Point(3, 111);
+      this.platformLabel.Name = "platformLabel";
+      this.platformLabel.Size = new System.Drawing.Size(48, 13);
+      this.platformLabel.TabIndex = 7;
+      this.platformLabel.Text = "&Platform:";
+      // 
+      // platformComboBox
+      // 
+      this.platformComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.platformComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+      this.platformComboBox.FormattingEnabled = true;
+      this.platformComboBox.Location = new System.Drawing.Point(74, 108);
+      this.platformComboBox.Name = "platformComboBox";
+      this.platformComboBox.Size = new System.Drawing.Size(276, 21);
+      this.platformComboBox.TabIndex = 8;
+      this.platformComboBox.SelectedValueChanged += new System.EventHandler(this.platformComboBox_SelectedValueChanged);
+      // 
+      // sqlNameComboBox
+      // 
+      this.sqlNameComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.sqlNameComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+      this.sqlNameComboBox.FormattingEnabled = true;
+      this.sqlNameComboBox.Items.AddRange(new object[] {
+            "bigint",
+            "bit",
+            "float",
+            "nvarchar",
+            "varbinary"});
+      this.sqlNameComboBox.Location = new System.Drawing.Point(74, 81);
+      this.sqlNameComboBox.Name = "sqlNameComboBox";
+      this.sqlNameComboBox.Size = new System.Drawing.Size(276, 21);
+      this.sqlNameComboBox.TabIndex = 6;
+      this.sqlNameComboBox.SelectedValueChanged += new System.EventHandler(this.sqlNameComboBox_SelectedValueChanged);
+      // 
+      // typeNameTextBox
+      // 
+      this.typeNameTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.typeNameTextBox.Location = new System.Drawing.Point(74, 55);
+      this.typeNameTextBox.Name = "typeNameTextBox";
+      this.typeNameTextBox.Size = new System.Drawing.Size(279, 20);
+      this.typeNameTextBox.TabIndex = 4;
+      this.typeNameTextBox.TextChanged += new System.EventHandler(this.typeNameTextBox_TextChanged);
+      this.typeNameTextBox.KeyDown += new System.Windows.Forms.KeyEventHandler(this.typeNameTextBox_KeyDown);
+      // 
+      // typeNameLabel
+      // 
+      this.typeNameLabel.AutoSize = true;
+      this.typeNameLabel.Location = new System.Drawing.Point(3, 58);
+      this.typeNameLabel.Name = "typeNameLabel";
+      this.typeNameLabel.Size = new System.Drawing.Size(65, 13);
+      this.typeNameLabel.TabIndex = 3;
+      this.typeNameLabel.Text = "&Type Name:";
+      // 
+      // DataTypeView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.sqlNameComboBox);
+      this.Controls.Add(this.platformComboBox);
+      this.Controls.Add(this.platformLabel);
+      this.Controls.Add(this.sqlNameLabel);
+      this.Controls.Add(this.typeNameLabel);
+      this.Controls.Add(this.nameLabel);
+      this.Controls.Add(this.typeNameTextBox);
+      this.Controls.Add(this.nameTextBox);
+      this.Name = "DataTypeView";
+      this.Size = new System.Drawing.Size(350, 143);
+      this.Controls.SetChildIndex(this.storeButton, 0);
+      this.Controls.SetChildIndex(this.nameTextBox, 0);
+      this.Controls.SetChildIndex(this.typeNameTextBox, 0);
+      this.Controls.SetChildIndex(this.nameLabel, 0);
+      this.Controls.SetChildIndex(this.typeNameLabel, 0);
+      this.Controls.SetChildIndex(this.sqlNameLabel, 0);
+      this.Controls.SetChildIndex(this.platformLabel, 0);
+      this.Controls.SetChildIndex(this.platformComboBox, 0);
+      this.Controls.SetChildIndex(this.sqlNameComboBox, 0);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.TextBox nameTextBox;
+    private System.Windows.Forms.Label nameLabel;
+    private System.Windows.Forms.Label sqlNameLabel;
+    private System.Windows.Forms.Label platformLabel;
+    private System.Windows.Forms.ComboBox platformComboBox;
+    private System.Windows.Forms.ComboBox sqlNameComboBox;
+    private System.Windows.Forms.TextBox typeNameTextBox;
+    private System.Windows.Forms.Label typeNameLabel;
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/DataTypeView.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/DataTypeView.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/DataTypeView.cs	(revision 5296)
@@ -0,0 +1,134 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Windows.Forms;
+using HeuristicLab.MainForm;
+using HeuristicLab.MainForm.WindowsForms;
+
+namespace HeuristicLab.Clients.OKB {
+  [View("DataType View")]
+  [Content(typeof(DataType), true)]
+  public partial class DataTypeView : OKBItemView {
+    private List<Platform> platformComboBoxValues;
+
+    public new DataType Content {
+      get { return (DataType)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public DataTypeView() {
+      InitializeComponent();
+    }
+
+    protected override void OnInitialized(System.EventArgs e) {
+      base.OnInitialized(e);
+      platformComboBoxValues = OKBClient.Instance.Platforms.ToList();
+      platformComboBox.DataSource = platformComboBoxValues;
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      if (Content == null) {
+        nameTextBox.Text = string.Empty;
+        typeNameTextBox.Text = string.Empty;
+        sqlNameComboBox.SelectedIndex = -1;
+        platformComboBox.SelectedIndex = -1;
+        if (ViewAttribute.HasViewAttribute(this.GetType()))
+          this.Caption = ViewAttribute.GetViewName(this.GetType());
+        else
+          this.Caption = "DataType View";
+      } else {
+        nameTextBox.Text = Content.Name;
+        typeNameTextBox.Text = Content.TypeName;
+        sqlNameComboBox.Text = Content.SqlName;
+        platformComboBox.SelectedItem = platformComboBoxValues.FirstOrDefault(p => p.Id == Content.PlatformId);
+        Caption = Content.Name;
+      }
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      nameTextBox.Enabled = Content != null;
+      nameTextBox.ReadOnly = ReadOnly;
+      typeNameTextBox.Enabled = Content != null;
+      typeNameTextBox.ReadOnly = ReadOnly;
+      sqlNameComboBox.Enabled = (Content != null) && !ReadOnly;
+      platformComboBox.Enabled = (Content != null) && !ReadOnly;
+    }
+
+    protected override void OnContentPropertyChanged(string propertyName) {
+      switch (propertyName) {
+        case "Name":
+          nameTextBox.Text = Content.Name;
+          Caption = Content.Name;
+          break;
+        case "TypeName":
+          typeNameTextBox.Text = Content.Name;
+          break;
+        case "SqlName":
+          sqlNameComboBox.Text = Content.SqlName;
+          break;
+        case "PlatformId":
+          platformComboBox.SelectedItem = platformComboBoxValues.FirstOrDefault(p => p.Id == Content.PlatformId);
+          break;
+      }
+    }
+
+    private void nameTextBox_KeyDown(object sender, KeyEventArgs e) {
+      if ((e.KeyCode == Keys.Enter) || (e.KeyCode == Keys.Return))
+        nameLabel.Focus();  // set focus on label to validate data
+      if (e.KeyCode == Keys.Escape) {
+        nameTextBox.Text = Content.Name;
+        nameLabel.Focus();  // set focus on label to validate data
+      }
+    }
+    private void nameTextBox_TextChanged(object sender, EventArgs e) {
+      if (nameTextBox.Text != Content.Name)
+        Content.Name = nameTextBox.Text;
+    }
+    private void typeNameTextBox_KeyDown(object sender, KeyEventArgs e) {
+      if ((e.KeyCode == Keys.Enter) || (e.KeyCode == Keys.Return))
+        typeNameLabel.Focus();  // set focus on label to validate data
+      if (e.KeyCode == Keys.Escape) {
+        typeNameTextBox.Text = Content.TypeName;
+        typeNameLabel.Focus();  // set focus on label to validate data
+      }
+    }
+    private void typeNameTextBox_TextChanged(object sender, EventArgs e) {
+      if (typeNameTextBox.Text != Content.TypeName)
+        Content.TypeName = typeNameTextBox.Text;
+    }
+    private void sqlNameComboBox_SelectedValueChanged(object sender, EventArgs e) {
+      if (sqlNameComboBox.Text != Content.SqlName) {
+        Content.SqlName = sqlNameComboBox.Text;
+      }
+    }
+    private void platformComboBox_SelectedValueChanged(object sender, System.EventArgs e) {
+      if (Content != null) {
+        Platform selected = platformComboBox.SelectedItem as Platform;
+        if (selected != null) Content.PlatformId = selected.Id;
+      }
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/EqualityComparisonFilterView.Designer.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/EqualityComparisonFilterView.Designer.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/EqualityComparisonFilterView.Designer.cs	(revision 5296)
@@ -0,0 +1,88 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Clients.OKB {
+  partial class EqualityComparisonFilterView {
+    /// <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) {
+        if (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.comparisonComboBox = new System.Windows.Forms.ComboBox();
+      this.SuspendLayout();
+      // 
+      // label
+      // 
+      this.label.Location = new System.Drawing.Point(3, 8);
+      // 
+      // comparisonComboBox
+      // 
+      this.comparisonComboBox.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.comparisonComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+      this.comparisonComboBox.FormattingEnabled = true;
+      this.comparisonComboBox.Items.AddRange(new object[] {
+            "=",
+            "<>"});
+      this.comparisonComboBox.Location = new System.Drawing.Point(254, 8);
+      this.comparisonComboBox.Name = "comparisonComboBox";
+      this.comparisonComboBox.Size = new System.Drawing.Size(104, 21);
+      this.comparisonComboBox.TabIndex = 1;
+      this.comparisonComboBox.SelectedIndexChanged += new System.EventHandler(this.comparisonComboBox_SelectedIndexChanged);
+      // 
+      // EqualityComparisonFilterView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.comparisonComboBox);
+      this.Name = "EqualityComparisonFilterView";
+      this.Size = new System.Drawing.Size(516, 36);
+      this.Controls.SetChildIndex(this.comparisonComboBox, 0);
+      this.Controls.SetChildIndex(this.label, 0);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    protected System.Windows.Forms.ComboBox comparisonComboBox;
+
+
+
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/EqualityComparisonFilterView.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/EqualityComparisonFilterView.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/EqualityComparisonFilterView.cs	(revision 5296)
@@ -0,0 +1,63 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Windows.Forms;
+using HeuristicLab.MainForm;
+using HeuristicLab.MainForm.WindowsForms;
+
+namespace HeuristicLab.Clients.OKB {
+  [View("EqualityComparisonFilter View")]
+  public partial class EqualityComparisonFilterView : FilterView {
+    public new EqualityComparisonFilter Content {
+      get { return (EqualityComparisonFilter)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public EqualityComparisonFilterView() {
+      InitializeComponent();
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      comparisonComboBox.SelectedIndex = -1;
+      if (Content != null) {
+        if (Content.Comparison == EqualityComparison.Equal)
+          comparisonComboBox.SelectedItem = "=";
+        else if (Content.Comparison == EqualityComparison.NotEqual)
+          comparisonComboBox.SelectedItem = "<>";
+      }
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      comparisonComboBox.Enabled = Content != null && !ReadOnly;
+    }
+
+    private void comparisonComboBox_SelectedIndexChanged(object sender, System.EventArgs e) {
+      if (Content != null) {
+        if (comparisonComboBox.SelectedItem == "=")
+          Content.Comparison = EqualityComparison.Equal;
+        else if (comparisonComboBox.SelectedItem == "<>")
+          Content.Comparison = EqualityComparison.NotEqual;
+      }
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/ExperimentCollectionView.Designer.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/ExperimentCollectionView.Designer.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/ExperimentCollectionView.Designer.cs	(revision 5296)
@@ -0,0 +1,53 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Clients.OKB {
+  partial class ExperimentCollectionView {
+    /// <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) {
+        if (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() {
+      components = new System.ComponentModel.Container();
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+    }
+
+    #endregion
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/ExperimentCollectionView.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/ExperimentCollectionView.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/ExperimentCollectionView.cs	(revision 5296)
@@ -0,0 +1,40 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Windows.Forms;
+using HeuristicLab.Core;
+using HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
+
+namespace HeuristicLab.Clients.OKB {
+  [View("ExperimentCollection View")]
+  [Content(typeof(IItemCollection<Experiment>), true)]
+  public partial class ExperimentCollectionView : ItemCollectionView<Experiment> {
+    public ExperimentCollectionView() {
+      InitializeComponent();
+      itemsGroupBox.Text = "Experiments";
+    }
+
+    protected override Experiment CreateItem() {
+      return new Experiment();
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/ExperimentView.Designer.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/ExperimentView.Designer.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/ExperimentView.Designer.cs	(revision 5296)
@@ -0,0 +1,245 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Clients.OKB {
+  partial class ExperimentView {
+    /// <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) {
+        if (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.components = new System.ComponentModel.Container();
+      System.Windows.Forms.ListViewGroup listViewGroup1 = new System.Windows.Forms.ListViewGroup("Algorithm Parameters", System.Windows.Forms.HorizontalAlignment.Left);
+      System.Windows.Forms.ListViewGroup listViewGroup2 = new System.Windows.Forms.ListViewGroup("Problem Parameters", System.Windows.Forms.HorizontalAlignment.Left);
+      this.algorithmLabel = new System.Windows.Forms.Label();
+      this.algorithmTextBox = new System.Windows.Forms.TextBox();
+      this.toolTip = new System.Windows.Forms.ToolTip(this.components);
+      this.problemLabel = new System.Windows.Forms.Label();
+      this.problemTextBox = new System.Windows.Forms.TextBox();
+      this.tabControl = new System.Windows.Forms.TabControl();
+      this.parametersTabPage = new System.Windows.Forms.TabPage();
+      this.parametersListView = new System.Windows.Forms.ListView();
+      this.nameColumnHeader = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+      this.valueColumnHeader = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+      this.imageList = new System.Windows.Forms.ImageList(this.components);
+      this.runsTabPage = new System.Windows.Forms.TabPage();
+      this.runCollectionView = new HeuristicLab.Clients.OKB.RunCollectionView();
+      this.refreshRunsButton = new System.Windows.Forms.Button();
+      this.tabControl.SuspendLayout();
+      this.parametersTabPage.SuspendLayout();
+      this.runsTabPage.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // algorithmLabel
+      // 
+      this.algorithmLabel.AutoSize = true;
+      this.algorithmLabel.Location = new System.Drawing.Point(3, 3);
+      this.algorithmLabel.Name = "algorithmLabel";
+      this.algorithmLabel.Size = new System.Drawing.Size(53, 13);
+      this.algorithmLabel.TabIndex = 0;
+      this.algorithmLabel.Text = "Algorithm:";
+      // 
+      // algorithmTextBox
+      // 
+      this.algorithmTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.algorithmTextBox.Location = new System.Drawing.Point(62, 0);
+      this.algorithmTextBox.Name = "algorithmTextBox";
+      this.algorithmTextBox.ReadOnly = true;
+      this.algorithmTextBox.Size = new System.Drawing.Size(451, 20);
+      this.algorithmTextBox.TabIndex = 1;
+      // 
+      // problemLabel
+      // 
+      this.problemLabel.AutoSize = true;
+      this.problemLabel.Location = new System.Drawing.Point(3, 29);
+      this.problemLabel.Name = "problemLabel";
+      this.problemLabel.Size = new System.Drawing.Size(48, 13);
+      this.problemLabel.TabIndex = 2;
+      this.problemLabel.Text = "Problem:";
+      // 
+      // problemTextBox
+      // 
+      this.problemTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.problemTextBox.Location = new System.Drawing.Point(62, 26);
+      this.problemTextBox.Name = "problemTextBox";
+      this.problemTextBox.ReadOnly = true;
+      this.problemTextBox.Size = new System.Drawing.Size(451, 20);
+      this.problemTextBox.TabIndex = 3;
+      // 
+      // tabControl
+      // 
+      this.tabControl.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.tabControl.Controls.Add(this.parametersTabPage);
+      this.tabControl.Controls.Add(this.runsTabPage);
+      this.tabControl.Location = new System.Drawing.Point(0, 52);
+      this.tabControl.Name = "tabControl";
+      this.tabControl.SelectedIndex = 0;
+      this.tabControl.Size = new System.Drawing.Size(513, 302);
+      this.tabControl.TabIndex = 4;
+      // 
+      // parametersTabPage
+      // 
+      this.parametersTabPage.Controls.Add(this.parametersListView);
+      this.parametersTabPage.Location = new System.Drawing.Point(4, 22);
+      this.parametersTabPage.Name = "parametersTabPage";
+      this.parametersTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.parametersTabPage.Size = new System.Drawing.Size(505, 276);
+      this.parametersTabPage.TabIndex = 0;
+      this.parametersTabPage.Text = "Parameters";
+      this.parametersTabPage.UseVisualStyleBackColor = true;
+      // 
+      // parametersListView
+      // 
+      this.parametersListView.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.parametersListView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
+            this.nameColumnHeader,
+            this.valueColumnHeader});
+      this.parametersListView.FullRowSelect = true;
+      listViewGroup1.Header = "Algorithm Parameters";
+      listViewGroup1.Name = "algorithmParametersGroup";
+      listViewGroup2.Header = "Problem Parameters";
+      listViewGroup2.Name = "problemParametersGroup";
+      this.parametersListView.Groups.AddRange(new System.Windows.Forms.ListViewGroup[] {
+            listViewGroup1,
+            listViewGroup2});
+      this.parametersListView.HideSelection = false;
+      this.parametersListView.Location = new System.Drawing.Point(6, 6);
+      this.parametersListView.MultiSelect = false;
+      this.parametersListView.Name = "parametersListView";
+      this.parametersListView.ShowItemToolTips = true;
+      this.parametersListView.Size = new System.Drawing.Size(493, 264);
+      this.parametersListView.SmallImageList = this.imageList;
+      this.parametersListView.Sorting = System.Windows.Forms.SortOrder.Ascending;
+      this.parametersListView.TabIndex = 0;
+      this.parametersListView.UseCompatibleStateImageBehavior = false;
+      this.parametersListView.View = System.Windows.Forms.View.Details;
+      // 
+      // nameColumnHeader
+      // 
+      this.nameColumnHeader.Text = "Name";
+      // 
+      // valueColumnHeader
+      // 
+      this.valueColumnHeader.Text = "Value";
+      // 
+      // imageList
+      // 
+      this.imageList.ColorDepth = System.Windows.Forms.ColorDepth.Depth8Bit;
+      this.imageList.ImageSize = new System.Drawing.Size(16, 16);
+      this.imageList.TransparentColor = System.Drawing.Color.Transparent;
+      // 
+      // runsTabPage
+      // 
+      this.runsTabPage.Controls.Add(this.runCollectionView);
+      this.runsTabPage.Controls.Add(this.refreshRunsButton);
+      this.runsTabPage.Location = new System.Drawing.Point(4, 22);
+      this.runsTabPage.Name = "runsTabPage";
+      this.runsTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.runsTabPage.Size = new System.Drawing.Size(505, 276);
+      this.runsTabPage.TabIndex = 1;
+      this.runsTabPage.Text = "Runs";
+      this.runsTabPage.UseVisualStyleBackColor = true;
+      // 
+      // runCollectionView
+      // 
+      this.runCollectionView.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.runCollectionView.Caption = "RunCollection View";
+      this.runCollectionView.Content = null;
+      this.runCollectionView.Location = new System.Drawing.Point(6, 36);
+      this.runCollectionView.Name = "runCollectionView";
+      this.runCollectionView.ReadOnly = false;
+      this.runCollectionView.Size = new System.Drawing.Size(493, 234);
+      this.runCollectionView.TabIndex = 1;
+      // 
+      // refreshRunsButton
+      // 
+      this.refreshRunsButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.Refresh;
+      this.refreshRunsButton.Location = new System.Drawing.Point(6, 6);
+      this.refreshRunsButton.Name = "refreshRunsButton";
+      this.refreshRunsButton.Size = new System.Drawing.Size(24, 24);
+      this.refreshRunsButton.TabIndex = 0;
+      this.refreshRunsButton.UseVisualStyleBackColor = true;
+      this.refreshRunsButton.Click += new System.EventHandler(this.refreshRunsButton_Click);
+      // 
+      // ExperimentView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.tabControl);
+      this.Controls.Add(this.problemTextBox);
+      this.Controls.Add(this.algorithmTextBox);
+      this.Controls.Add(this.problemLabel);
+      this.Controls.Add(this.algorithmLabel);
+      this.Name = "ExperimentView";
+      this.Size = new System.Drawing.Size(513, 354);
+      this.tabControl.ResumeLayout(false);
+      this.parametersTabPage.ResumeLayout(false);
+      this.runsTabPage.ResumeLayout(false);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Label algorithmLabel;
+    private System.Windows.Forms.TextBox algorithmTextBox;
+    private System.Windows.Forms.ToolTip toolTip;
+    private System.Windows.Forms.Label problemLabel;
+    private System.Windows.Forms.TextBox problemTextBox;
+    private System.Windows.Forms.TabControl tabControl;
+    private System.Windows.Forms.TabPage parametersTabPage;
+    private System.Windows.Forms.TabPage runsTabPage;
+    private RunCollectionView runCollectionView;
+    private System.Windows.Forms.Button refreshRunsButton;
+    private System.Windows.Forms.ListView parametersListView;
+    private System.Windows.Forms.ColumnHeader nameColumnHeader;
+    private System.Windows.Forms.ColumnHeader valueColumnHeader;
+    private System.Windows.Forms.ImageList imageList;
+
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/ExperimentView.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/ExperimentView.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/ExperimentView.cs	(revision 5296)
@@ -0,0 +1,122 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Linq;
+using System.Windows.Forms;
+using HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
+using HeuristicLab.MainForm.WindowsForms;
+
+namespace HeuristicLab.Clients.OKB {
+  [View("Experiment View")]
+  [Content(typeof(Experiment), true)]
+  public partial class ExperimentView : ItemView {
+    public new Experiment Content {
+      get { return (Experiment)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public ExperimentView() {
+      InitializeComponent();
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      runCollectionView.Content = null;
+      if (Content == null) {
+        algorithmTextBox.Text = string.Empty;
+        toolTip.SetToolTip(algorithmTextBox, string.Empty);
+        problemTextBox.Text = string.Empty;
+        toolTip.SetToolTip(problemTextBox, string.Empty);
+      } else {
+        Algorithm algorithm = OKBClient.Instance.Algorithms.FirstOrDefault(x => x.Id == Content.AlgorithmId);
+        algorithmTextBox.Text = algorithm == null ? string.Empty : algorithm.Name;
+        toolTip.SetToolTip(algorithmTextBox, algorithm == null ? string.Empty : algorithm.Description);
+        Problem problem = OKBClient.Instance.Problems.FirstOrDefault(x => x.Id == Content.ProblemId);
+        problemTextBox.Text = problem == null ? string.Empty : problem.Name;
+        toolTip.SetToolTip(problemTextBox, problem == null ? string.Empty : problem.Description);
+      }
+      FillParametersListView();
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      algorithmTextBox.Enabled = Content != null;
+      problemTextBox.Enabled = Content != null;
+      parametersListView.Enabled = Content != null;
+      refreshRunsButton.Enabled = Content != null;
+    }
+
+    private void FillParametersListView() {
+      parametersListView.Items.Clear();
+      parametersListView.SmallImageList.Images.Clear();
+      if (Content != null) {
+        foreach (AlgorithmParameterValue parameterValue in Content.AlgorithmParameterValues) {
+          AlgorithmParameter parameter = OKBClient.Instance.GetAlgorithmParameter(parameterValue.AlgorithmParameterId);
+          ListViewItem item = new ListViewItem(parameter.Name);
+          item.ToolTipText = parameter.Description;
+          if (parameterValue is AlgorithmParameterBoolValue) {
+            item.SubItems.Add(((AlgorithmParameterBoolValue)parameterValue).Value.ToString());
+          } else if (parameterValue is AlgorithmParameterIntValue) {
+            item.SubItems.Add(((AlgorithmParameterIntValue)parameterValue).Value.ToString());
+          } else if (parameterValue is AlgorithmParameterFloatValue) {
+            item.SubItems.Add(((AlgorithmParameterFloatValue)parameterValue).Value.ToString());
+          } else if (parameterValue is AlgorithmParameterStringValue) {
+            item.SubItems.Add(((AlgorithmParameterStringValue)parameterValue).Value);
+          } else if (parameterValue is AlgorithmParameterBlobValue) {
+            DataType dataType = OKBClient.Instance.DataTypes.FirstOrDefault(x => x.Id == parameterValue.DataTypeId);
+            item.SubItems.Add(dataType == null ? "-" : dataType.Name);
+          }
+          item.Group = parametersListView.Groups["algorithmParametersGroup"];
+          parametersListView.Items.Add(item);
+        }
+        foreach (ProblemParameterValue parameterValue in Content.ProblemParameterValues) {
+          ProblemParameter parameter = OKBClient.Instance.GetProblemParameter(parameterValue.ProblemParameterId);
+          ListViewItem item = new ListViewItem(parameter.Name);
+          item.ToolTipText = parameter.Description;
+          if (parameterValue is ProblemParameterBoolValue) {
+            item.SubItems.Add(((ProblemParameterBoolValue)parameterValue).Value.ToString());
+          } else if (parameterValue is ProblemParameterIntValue) {
+            item.SubItems.Add(((ProblemParameterIntValue)parameterValue).Value.ToString());
+          } else if (parameterValue is ProblemParameterFloatValue) {
+            item.SubItems.Add(((ProblemParameterFloatValue)parameterValue).Value.ToString());
+          } else if (parameterValue is ProblemParameterStringValue) {
+            item.SubItems.Add(((ProblemParameterStringValue)parameterValue).Value);
+          } else if (parameterValue is ProblemParameterBlobValue) {
+            DataType dataType = OKBClient.Instance.DataTypes.FirstOrDefault(x => x.Id == parameterValue.DataTypeId);
+            item.SubItems.Add(dataType == null ? "-" : dataType.Name);
+          }
+          item.Group = parametersListView.Groups["problemParametersGroup"];
+          parametersListView.Items.Add(item);
+        }
+
+        if (parametersListView.Items.Count > 0) {
+          for (int i = 0; i < parametersListView.Columns.Count; i++)
+            parametersListView.Columns[i].AutoResize(ColumnHeaderAutoResizeStyle.ColumnContent);
+        }
+      }
+    }
+
+    private void refreshRunsButton_Click(object sender, System.EventArgs e) {
+      runCollectionView.Content = OKBClient.Instance.GetRuns(Content.Id);
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/FilterView.Designer.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/FilterView.Designer.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/FilterView.Designer.cs	(revision 5296)
@@ -0,0 +1,77 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Clients.OKB {
+  partial class FilterView {
+    /// <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) {
+        if (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.label = new System.Windows.Forms.Label();
+      this.SuspendLayout();
+      // 
+      // label
+      // 
+      this.label.Anchor = System.Windows.Forms.AnchorStyles.Left;
+      this.label.Location = new System.Drawing.Point(3, 11);
+      this.label.Name = "label";
+      this.label.Size = new System.Drawing.Size(245, 20);
+      this.label.TabIndex = 0;
+      this.label.Text = "Label";
+      this.label.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+      // 
+      // FilterView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.label);
+      this.Name = "FilterView";
+      this.Size = new System.Drawing.Size(586, 42);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    protected System.Windows.Forms.Label label;
+
+
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/FilterView.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/FilterView.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/FilterView.cs	(revision 5296)
@@ -0,0 +1,49 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Windows.Forms;
+using HeuristicLab.MainForm;
+using HeuristicLab.MainForm.WindowsForms;
+
+namespace HeuristicLab.Clients.OKB {
+  [View("Filter View")]
+  [Content(typeof(Filter), true)]
+  public partial class FilterView : AsynchronousContentView {
+    public new Filter Content {
+      get { return (Filter)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public FilterView() {
+      InitializeComponent();
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      label.Text = Content == null ? string.Empty : Content.Label;
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      label.Enabled = Content != null;
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/NameEqualityComparisonBoolFilterView.Designer.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/NameEqualityComparisonBoolFilterView.Designer.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/NameEqualityComparisonBoolFilterView.Designer.cs	(revision 5296)
@@ -0,0 +1,94 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Clients.OKB {
+  partial class NameEqualityComparisonBoolFilterView {
+    /// <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) {
+        if (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.valueComboBox = new System.Windows.Forms.ComboBox();
+      this.SuspendLayout();
+      // 
+      // comparisonComboBox
+      // 
+      this.comparisonComboBox.Location = new System.Drawing.Point(211, 8);
+      this.comparisonComboBox.Size = new System.Drawing.Size(94, 21);
+      // 
+      // label
+      // 
+      this.label.Size = new System.Drawing.Size(202, 20);
+      // 
+      // valueComboBox
+      // 
+      this.valueComboBox.Anchor = System.Windows.Forms.AnchorStyles.Right;
+      this.valueComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+      this.valueComboBox.FormattingEnabled = true;
+      this.valueComboBox.Items.AddRange(new object[] {
+            "true",
+            "false"});
+      this.valueComboBox.Location = new System.Drawing.Point(422, 8);
+      this.valueComboBox.Name = "valueComboBox";
+      this.valueComboBox.Size = new System.Drawing.Size(94, 21);
+      this.valueComboBox.TabIndex = 2;
+      this.valueComboBox.SelectedIndexChanged += new System.EventHandler(this.valueComboBox_SelectedIndexChanged);
+      // 
+      // NameEqualityComparisonBoolFilterView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.valueComboBox);
+      this.Name = "NameEqualityComparisonBoolFilterView";
+      this.Controls.SetChildIndex(this.label, 0);
+      this.Controls.SetChildIndex(this.comparisonComboBox, 0);
+      this.Controls.SetChildIndex(this.valueComboBox, 0);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.ComboBox valueComboBox;
+
+
+
+
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/NameEqualityComparisonBoolFilterView.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/NameEqualityComparisonBoolFilterView.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/NameEqualityComparisonBoolFilterView.cs	(revision 5296)
@@ -0,0 +1,58 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Windows.Forms;
+using HeuristicLab.MainForm;
+using HeuristicLab.MainForm.WindowsForms;
+
+namespace HeuristicLab.Clients.OKB {
+  [View("NameEqualityComparisonBoolFilter View")]
+  [Content(typeof(NameEqualityComparisonBoolFilter), true)]
+  public partial class NameEqualityComparisonBoolFilterView : EqualityComparisonFilterView {
+    public new NameEqualityComparisonBoolFilter Content {
+      get { return (NameEqualityComparisonBoolFilter)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public NameEqualityComparisonBoolFilterView() {
+      InitializeComponent();
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      valueComboBox.SelectedIndex = -1;
+      if (Content != null) {
+        valueComboBox.SelectedItem = Content.Value ? "true" : "false";
+      }
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      valueComboBox.Enabled = Content != null && !ReadOnly;
+    }
+
+    private void valueComboBox_SelectedIndexChanged(object sender, System.EventArgs e) {
+      if (Content != null) {
+        Content.Value = valueComboBox.SelectedItem == "true" ? true : false;
+      }
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/NameOrdinalComparisonDoubleFilterView.Designer.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/NameOrdinalComparisonDoubleFilterView.Designer.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/NameOrdinalComparisonDoubleFilterView.Designer.cs	(revision 5296)
@@ -0,0 +1,103 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Clients.OKB {
+  partial class NameOrdinalComparisonDoubleFilterView {
+    /// <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) {
+        if (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.components = new System.ComponentModel.Container();
+      this.valueTextBox = new System.Windows.Forms.TextBox();
+      this.errorProvider = new System.Windows.Forms.ErrorProvider(this.components);
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
+      this.SuspendLayout();
+      // 
+      // comparisonComboBox
+      // 
+      this.comparisonComboBox.Location = new System.Drawing.Point(211, 8);
+      this.comparisonComboBox.Size = new System.Drawing.Size(94, 21);
+      // 
+      // label
+      // 
+      this.label.Size = new System.Drawing.Size(202, 20);
+      // 
+      // valueTextBox
+      // 
+      this.valueTextBox.Anchor = System.Windows.Forms.AnchorStyles.Right;
+      this.valueTextBox.Location = new System.Drawing.Point(367, 8);
+      this.valueTextBox.Name = "valueTextBox";
+      this.valueTextBox.Size = new System.Drawing.Size(149, 20);
+      this.valueTextBox.TabIndex = 2;
+      this.valueTextBox.KeyDown += new System.Windows.Forms.KeyEventHandler(this.valueTextBox_KeyDown);
+      this.valueTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.valueTextBox_Validating);
+      this.valueTextBox.Validated += new System.EventHandler(this.valueTextBox_Validated);
+      // 
+      // errorProvider
+      // 
+      this.errorProvider.BlinkStyle = System.Windows.Forms.ErrorBlinkStyle.NeverBlink;
+      this.errorProvider.ContainerControl = this;
+      // 
+      // NameOrdinalComparisonDoubleFilterView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.valueTextBox);
+      this.Name = "NameOrdinalComparisonDoubleFilterView";
+      this.Controls.SetChildIndex(this.valueTextBox, 0);
+      this.Controls.SetChildIndex(this.comparisonComboBox, 0);
+      this.Controls.SetChildIndex(this.label, 0);
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.TextBox valueTextBox;
+    private System.Windows.Forms.ErrorProvider errorProvider;
+
+
+
+
+
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/NameOrdinalComparisonDoubleFilterView.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/NameOrdinalComparisonDoubleFilterView.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/NameOrdinalComparisonDoubleFilterView.cs	(revision 5296)
@@ -0,0 +1,75 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Windows.Forms;
+using HeuristicLab.MainForm;
+using HeuristicLab.MainForm.WindowsForms;
+
+namespace HeuristicLab.Clients.OKB {
+  [View("NameOrdinalComparisonDoubleFilter View")]
+  [Content(typeof(NameOrdinalComparisonDoubleFilter), true)]
+  public partial class NameOrdinalComparisonDoubleFilterView : OrdinalComparisonFilterView {
+    public new NameOrdinalComparisonDoubleFilter Content {
+      get { return (NameOrdinalComparisonDoubleFilter)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public NameOrdinalComparisonDoubleFilterView() {
+      InitializeComponent();
+      errorProvider.SetIconAlignment(valueTextBox, ErrorIconAlignment.MiddleLeft);
+      errorProvider.SetIconPadding(valueTextBox, 2);
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      valueTextBox.Text = Content == null ? string.Empty : Content.Value.ToString();
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      valueTextBox.Enabled = Content != null;
+      valueTextBox.ReadOnly = ReadOnly;
+    }
+
+    private void valueTextBox_KeyDown(object sender, KeyEventArgs e) {
+      if ((e.KeyCode == Keys.Enter) || (e.KeyCode == Keys.Return))
+        label.Focus();  // set focus on label to validate data
+      if (e.KeyCode == Keys.Escape) {
+        valueTextBox.Text = Content.Value.ToString();
+        label.Focus();  // set focus on label to validate data
+      }
+    }
+    private void valueTextBox_Validating(object sender, System.ComponentModel.CancelEventArgs e) {
+      double val;
+      if (!double.TryParse(valueTextBox.Text, out val)) {
+        e.Cancel = true;
+        errorProvider.SetError(valueTextBox, "Invalid Double Value");
+        valueTextBox.SelectAll();
+      }
+    }
+    private void valueTextBox_Validated(object sender, System.EventArgs e) {
+      if (Content != null) {
+        Content.Value = double.Parse(valueTextBox.Text);
+        errorProvider.SetError(valueTextBox, string.Empty);
+      }
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/NameOrdinalComparisonLongFilterView.Designer.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/NameOrdinalComparisonLongFilterView.Designer.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/NameOrdinalComparisonLongFilterView.Designer.cs	(revision 5296)
@@ -0,0 +1,103 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Clients.OKB {
+  partial class NameOrdinalComparisonLongFilterView {
+    /// <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) {
+        if (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.components = new System.ComponentModel.Container();
+      this.valueTextBox = new System.Windows.Forms.TextBox();
+      this.errorProvider = new System.Windows.Forms.ErrorProvider(this.components);
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
+      this.SuspendLayout();
+      // 
+      // comparisonComboBox
+      // 
+      this.comparisonComboBox.Location = new System.Drawing.Point(211, 8);
+      this.comparisonComboBox.Size = new System.Drawing.Size(94, 21);
+      // 
+      // label
+      // 
+      this.label.Size = new System.Drawing.Size(202, 20);
+      // 
+      // valueTextBox
+      // 
+      this.valueTextBox.Anchor = System.Windows.Forms.AnchorStyles.Right;
+      this.valueTextBox.Location = new System.Drawing.Point(367, 8);
+      this.valueTextBox.Name = "valueTextBox";
+      this.valueTextBox.Size = new System.Drawing.Size(149, 20);
+      this.valueTextBox.TabIndex = 2;
+      this.valueTextBox.KeyDown += new System.Windows.Forms.KeyEventHandler(this.valueTextBox_KeyDown);
+      this.valueTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.valueTextBox_Validating);
+      this.valueTextBox.Validated += new System.EventHandler(this.valueTextBox_Validated);
+      // 
+      // errorProvider
+      // 
+      this.errorProvider.BlinkStyle = System.Windows.Forms.ErrorBlinkStyle.NeverBlink;
+      this.errorProvider.ContainerControl = this;
+      // 
+      // NameOrdinalComparisonLongFilterView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.valueTextBox);
+      this.Name = "NameOrdinalComparisonLongFilterView";
+      this.Controls.SetChildIndex(this.valueTextBox, 0);
+      this.Controls.SetChildIndex(this.comparisonComboBox, 0);
+      this.Controls.SetChildIndex(this.label, 0);
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.TextBox valueTextBox;
+    private System.Windows.Forms.ErrorProvider errorProvider;
+
+
+
+
+
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/NameOrdinalComparisonLongFilterView.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/NameOrdinalComparisonLongFilterView.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/NameOrdinalComparisonLongFilterView.cs	(revision 5296)
@@ -0,0 +1,75 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Windows.Forms;
+using HeuristicLab.MainForm;
+using HeuristicLab.MainForm.WindowsForms;
+
+namespace HeuristicLab.Clients.OKB {
+  [View("NameOrdinalComparisonLongFilter View")]
+  [Content(typeof(NameOrdinalComparisonLongFilter), true)]
+  public partial class NameOrdinalComparisonLongFilterView : OrdinalComparisonFilterView {
+    public new NameOrdinalComparisonLongFilter Content {
+      get { return (NameOrdinalComparisonLongFilter)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public NameOrdinalComparisonLongFilterView() {
+      InitializeComponent();
+      errorProvider.SetIconAlignment(valueTextBox, ErrorIconAlignment.MiddleLeft);
+      errorProvider.SetIconPadding(valueTextBox, 2);
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      valueTextBox.Text = Content == null ? string.Empty : Content.Value.ToString();
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      valueTextBox.Enabled = Content != null;
+      valueTextBox.ReadOnly = ReadOnly;
+    }
+
+    private void valueTextBox_KeyDown(object sender, KeyEventArgs e) {
+      if ((e.KeyCode == Keys.Enter) || (e.KeyCode == Keys.Return))
+        label.Focus();  // set focus on label to validate data
+      if (e.KeyCode == Keys.Escape) {
+        valueTextBox.Text = Content.Value.ToString();
+        label.Focus();  // set focus on label to validate data
+      }
+    }
+    private void valueTextBox_Validating(object sender, System.ComponentModel.CancelEventArgs e) {
+      long val;
+      if (!long.TryParse(valueTextBox.Text, out val)) {
+        e.Cancel = true;
+        errorProvider.SetError(valueTextBox, "Invalid Long Value");
+        valueTextBox.SelectAll();
+      }
+    }
+    private void valueTextBox_Validated(object sender, System.EventArgs e) {
+      if (Content != null) {
+        Content.Value = long.Parse(valueTextBox.Text);
+        errorProvider.SetError(valueTextBox, string.Empty);
+      }
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/NameSetComparisonStringAvailableValuesFilterView.Designer.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/NameSetComparisonStringAvailableValuesFilterView.Designer.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/NameSetComparisonStringAvailableValuesFilterView.Designer.cs	(revision 5296)
@@ -0,0 +1,93 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Clients.OKB {
+  partial class NameSetComparisonStringAvailableValuesFilterView {
+    /// <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) {
+        if (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.valueComboBox = new System.Windows.Forms.ComboBox();
+      this.SuspendLayout();
+      // 
+      // comparisonComboBox
+      // 
+      this.comparisonComboBox.Location = new System.Drawing.Point(211, 8);
+      this.comparisonComboBox.Size = new System.Drawing.Size(94, 21);
+      // 
+      // label
+      // 
+      this.label.Size = new System.Drawing.Size(202, 20);
+      // 
+      // valueComboBox
+      // 
+      this.valueComboBox.Anchor = System.Windows.Forms.AnchorStyles.Right;
+      this.valueComboBox.FormattingEnabled = true;
+      this.valueComboBox.Location = new System.Drawing.Point(357, 8);
+      this.valueComboBox.MaxDropDownItems = 32;
+      this.valueComboBox.Name = "valueComboBox";
+      this.valueComboBox.Size = new System.Drawing.Size(159, 21);
+      this.valueComboBox.TabIndex = 2;
+      this.valueComboBox.Validated += new System.EventHandler(this.valueComboBox_Validated);
+      // 
+      // NameSetComparisonStringAvailableValuesFilterView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.valueComboBox);
+      this.Name = "NameSetComparisonStringAvailableValuesFilterView";
+      this.Controls.SetChildIndex(this.valueComboBox, 0);
+      this.Controls.SetChildIndex(this.comparisonComboBox, 0);
+      this.Controls.SetChildIndex(this.label, 0);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.ComboBox valueComboBox;
+
+
+
+
+
+
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/NameSetComparisonStringAvailableValuesFilterView.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/NameSetComparisonStringAvailableValuesFilterView.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/NameSetComparisonStringAvailableValuesFilterView.cs	(revision 5296)
@@ -0,0 +1,65 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Windows.Forms;
+using HeuristicLab.MainForm;
+using HeuristicLab.MainForm.WindowsForms;
+
+namespace HeuristicLab.Clients.OKB {
+  [View("NameSetComparisonStringAvailableValuesFilter View")]
+  [Content(typeof(NameSetComparisonStringAvailableValuesFilter), true)]
+  public partial class NameSetComparisonStringAvailableValuesFilterView : SetComparisonFilterView {
+    public new NameSetComparisonStringAvailableValuesFilter Content {
+      get { return (NameSetComparisonStringAvailableValuesFilter)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public NameSetComparisonStringAvailableValuesFilterView() {
+      InitializeComponent();
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      valueComboBox.DataSource = Content == null ? null : Content.AvailableValues;
+      valueComboBox.Text = Content == null ? string.Empty : Content.Value;
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      valueComboBox.Enabled = Content != null && !ReadOnly;
+    }
+
+    private void valueTextBox_KeyDown(object sender, KeyEventArgs e) {
+      if ((e.KeyCode == Keys.Enter) || (e.KeyCode == Keys.Return))
+        label.Focus();  // set focus on label to validate data
+      if (e.KeyCode == Keys.Escape) {
+        valueComboBox.Text = Content.Value;
+        label.Focus();  // set focus on label to validate data
+      }
+    }
+    private void valueComboBox_Validated(object sender, System.EventArgs e) {
+      if (Content != null) {
+        Content.Value = valueComboBox.Text;
+      }
+
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/NameSetComparisonStringFilterView.Designer.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/NameSetComparisonStringFilterView.Designer.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/NameSetComparisonStringFilterView.Designer.cs	(revision 5296)
@@ -0,0 +1,92 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Clients.OKB {
+  partial class NameSetComparisonStringFilterView {
+    /// <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) {
+        if (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.valueTextBox = new System.Windows.Forms.TextBox();
+      this.SuspendLayout();
+      // 
+      // comparisonComboBox
+      // 
+      this.comparisonComboBox.Location = new System.Drawing.Point(211, 8);
+      this.comparisonComboBox.Size = new System.Drawing.Size(94, 21);
+      // 
+      // label
+      // 
+      this.label.Size = new System.Drawing.Size(202, 20);
+      // 
+      // valueTextBox
+      // 
+      this.valueTextBox.Anchor = System.Windows.Forms.AnchorStyles.Right;
+      this.valueTextBox.Location = new System.Drawing.Point(367, 8);
+      this.valueTextBox.Name = "valueTextBox";
+      this.valueTextBox.Size = new System.Drawing.Size(149, 20);
+      this.valueTextBox.TabIndex = 2;
+      this.valueTextBox.KeyDown += new System.Windows.Forms.KeyEventHandler(this.valueTextBox_KeyDown);
+      this.valueTextBox.Validated += new System.EventHandler(this.valueTextBox_Validated);
+      // 
+      // NameSetComparisonStringFilterView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.valueTextBox);
+      this.Name = "NameSetComparisonStringFilterView";
+      this.Controls.SetChildIndex(this.valueTextBox, 0);
+      this.Controls.SetChildIndex(this.comparisonComboBox, 0);
+      this.Controls.SetChildIndex(this.label, 0);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.TextBox valueTextBox;
+
+
+
+
+
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/NameSetComparisonStringFilterView.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/NameSetComparisonStringFilterView.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/NameSetComparisonStringFilterView.cs	(revision 5296)
@@ -0,0 +1,64 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Windows.Forms;
+using HeuristicLab.MainForm;
+using HeuristicLab.MainForm.WindowsForms;
+
+namespace HeuristicLab.Clients.OKB {
+  [View("NameSetComparisonStringFilter View")]
+  [Content(typeof(NameSetComparisonStringFilter), true)]
+  public partial class NameSetComparisonStringFilterView : SetComparisonFilterView {
+    public new NameSetComparisonStringFilter Content {
+      get { return (NameSetComparisonStringFilter)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public NameSetComparisonStringFilterView() {
+      InitializeComponent();
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      valueTextBox.Text = Content == null ? string.Empty : Content.Value;
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      valueTextBox.Enabled = Content != null;
+      valueTextBox.ReadOnly = ReadOnly;
+    }
+
+    private void valueTextBox_KeyDown(object sender, KeyEventArgs e) {
+      if ((e.KeyCode == Keys.Enter) || (e.KeyCode == Keys.Return))
+        label.Focus();  // set focus on label to validate data
+      if (e.KeyCode == Keys.Escape) {
+        valueTextBox.Text = Content.Value;
+        label.Focus();  // set focus on label to validate data
+      }
+    }
+    private void valueTextBox_Validated(object sender, System.EventArgs e) {
+      if (Content != null) {
+        Content.Value = valueTextBox.Text;
+      }
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/NamedOKBItemView.Designer.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/NamedOKBItemView.Designer.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/NamedOKBItemView.Designer.cs	(revision 5296)
@@ -0,0 +1,125 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Clients.OKB {
+  partial class NamedOKBItemView {
+    /// <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) {
+        if (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.nameLabel = new System.Windows.Forms.Label();
+      this.nameTextBox = new System.Windows.Forms.TextBox();
+      this.descriptionLabel = new System.Windows.Forms.Label();
+      this.descriptionTextBox = new System.Windows.Forms.TextBox();
+      this.SuspendLayout();
+      // 
+      // storeButton
+      // 
+      this.toolTip.SetToolTip(this.storeButton, "Store Data");
+      // 
+      // nameLabel
+      // 
+      this.nameLabel.AutoSize = true;
+      this.nameLabel.Location = new System.Drawing.Point(3, 32);
+      this.nameLabel.Name = "nameLabel";
+      this.nameLabel.Size = new System.Drawing.Size(38, 13);
+      this.nameLabel.TabIndex = 1;
+      this.nameLabel.Text = "&Name:";
+      // 
+      // nameTextBox
+      // 
+      this.nameTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.nameTextBox.Location = new System.Drawing.Point(72, 29);
+      this.nameTextBox.Name = "nameTextBox";
+      this.nameTextBox.Size = new System.Drawing.Size(278, 20);
+      this.nameTextBox.TabIndex = 2;
+      this.nameTextBox.TextChanged += new System.EventHandler(this.nameTextBox_TextChanged);
+      this.nameTextBox.KeyDown += new System.Windows.Forms.KeyEventHandler(this.nameTextBox_KeyDown);
+      // 
+      // descriptionLabel
+      // 
+      this.descriptionLabel.AutoSize = true;
+      this.descriptionLabel.Location = new System.Drawing.Point(3, 58);
+      this.descriptionLabel.Name = "descriptionLabel";
+      this.descriptionLabel.Size = new System.Drawing.Size(63, 13);
+      this.descriptionLabel.TabIndex = 3;
+      this.descriptionLabel.Text = "&Description:";
+      // 
+      // descriptionTextBox
+      // 
+      this.descriptionTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.descriptionTextBox.Location = new System.Drawing.Point(72, 55);
+      this.descriptionTextBox.Name = "descriptionTextBox";
+      this.descriptionTextBox.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
+      this.descriptionTextBox.Size = new System.Drawing.Size(278, 20);
+      this.descriptionTextBox.TabIndex = 4;
+      this.descriptionTextBox.TextChanged += new System.EventHandler(this.descriptionTextBox_TextChanged);
+      this.descriptionTextBox.DoubleClick += new System.EventHandler(this.descriptionTextBox_DoubleClick);
+      // 
+      // NamedOKBItemView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.descriptionTextBox);
+      this.Controls.Add(this.descriptionLabel);
+      this.Controls.Add(this.nameLabel);
+      this.Controls.Add(this.nameTextBox);
+      this.Name = "NamedOKBItemView";
+      this.Size = new System.Drawing.Size(350, 93);
+      this.Controls.SetChildIndex(this.storeButton, 0);
+      this.Controls.SetChildIndex(this.nameTextBox, 0);
+      this.Controls.SetChildIndex(this.nameLabel, 0);
+      this.Controls.SetChildIndex(this.descriptionLabel, 0);
+      this.Controls.SetChildIndex(this.descriptionTextBox, 0);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    protected System.Windows.Forms.TextBox nameTextBox;
+    protected System.Windows.Forms.Label nameLabel;
+    protected System.Windows.Forms.Label descriptionLabel;
+    protected System.Windows.Forms.TextBox descriptionTextBox;
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/NamedOKBItemView.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/NamedOKBItemView.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/NamedOKBItemView.cs	(revision 5296)
@@ -0,0 +1,105 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Windows.Forms;
+using HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
+using HeuristicLab.MainForm.WindowsForms;
+
+namespace HeuristicLab.Clients.OKB {
+  [View("NamedOKBItem View")]
+  [Content(typeof(NamedOKBItem), true)]
+  [Content(typeof(INamedOKBItem), false)]
+  public partial class NamedOKBItemView : OKBItemView {
+    public new INamedOKBItem Content {
+      get { return (INamedOKBItem)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public NamedOKBItemView() {
+      InitializeComponent();
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      if (Content == null) {
+        nameTextBox.Text = string.Empty;
+        descriptionTextBox.Text = string.Empty;
+        toolTip.SetToolTip(descriptionTextBox, string.Empty);
+        if (ViewAttribute.HasViewAttribute(this.GetType()))
+          this.Caption = ViewAttribute.GetViewName(this.GetType());
+        else
+          this.Caption = "NamedEntity View";
+      } else {
+        nameTextBox.Text = Content.Name;
+        descriptionTextBox.Text = Content.Description;
+        toolTip.SetToolTip(descriptionTextBox, Content.Description);
+        Caption = Content.Name;
+      }
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      nameTextBox.Enabled = Content != null;
+      nameTextBox.ReadOnly = ReadOnly;
+      descriptionTextBox.Enabled = Content != null;
+      descriptionTextBox.ReadOnly = ReadOnly;
+    }
+
+    protected override void OnContentPropertyChanged(string propertyName) {
+      switch (propertyName) {
+        case "Name":
+          nameTextBox.Text = Content.Name;
+          Caption = Content.Name;
+          break;
+        case "Description":
+          descriptionTextBox.Text = Content.Description;
+          toolTip.SetToolTip(descriptionTextBox, Content.Description);
+          break;
+      }
+    }
+
+    protected virtual void nameTextBox_KeyDown(object sender, KeyEventArgs e) {
+      if ((e.KeyCode == Keys.Enter) || (e.KeyCode == Keys.Return))
+        nameLabel.Focus();  // set focus on label to validate data
+      if (e.KeyCode == Keys.Escape) {
+        nameTextBox.Text = Content.Name;
+        nameLabel.Focus();  // set focus on label to validate data
+      }
+    }
+    protected virtual void nameTextBox_TextChanged(object sender, EventArgs e) {
+      if (nameTextBox.Text != Content.Name)
+        Content.Name = nameTextBox.Text;
+    }
+    protected virtual void descriptionTextBox_TextChanged(object sender, EventArgs e) {
+      if (descriptionTextBox.Text != Content.Description)
+        Content.Description = descriptionTextBox.Text;
+    }
+
+    protected void descriptionTextBox_DoubleClick(object sender, EventArgs e) {
+      using (TextDialog dialog = new TextDialog("Description of " + Content.Name, descriptionTextBox.Text, ReadOnly)) {
+        if (dialog.ShowDialog(this) == DialogResult.OK)
+          Content.Description = dialog.Content;
+      }
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/OKBExperimentView.Designer.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/OKBExperimentView.Designer.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/OKBExperimentView.Designer.cs	(revision 5296)
@@ -0,0 +1,385 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Clients.OKB {
+  partial class OKBExperimentView {
+    /// <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) {
+        if (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.algorithmLabel = new System.Windows.Forms.Label();
+      this.problemLabel = new System.Windows.Forms.Label();
+      this.algorithmComboBox = new System.Windows.Forms.ComboBox();
+      this.problemComboBox = new System.Windows.Forms.ComboBox();
+      this.refreshButton = new System.Windows.Forms.Button();
+      this.startButton = new System.Windows.Forms.Button();
+      this.pauseButton = new System.Windows.Forms.Button();
+      this.stopButton = new System.Windows.Forms.Button();
+      this.prepareButton = new System.Windows.Forms.Button();
+      this.executionTimeLabel = new System.Windows.Forms.Label();
+      this.executionTimeTextBox = new System.Windows.Forms.TextBox();
+      this.tabControl = new System.Windows.Forms.TabControl();
+      this.problemParametersTabPage = new System.Windows.Forms.TabPage();
+      this.algorithmParametersTabPage = new System.Windows.Forms.TabPage();
+      this.resultsTabPage = new System.Windows.Forms.TabPage();
+      this.runsTabPage = new System.Windows.Forms.TabPage();
+      this.problemParametersViewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
+      this.algorithmParametersViewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
+      this.resultsViewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
+      this.runsViewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
+      this.tabControl.SuspendLayout();
+      this.problemParametersTabPage.SuspendLayout();
+      this.algorithmParametersTabPage.SuspendLayout();
+      this.resultsTabPage.SuspendLayout();
+      this.runsTabPage.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // nameTextBox
+      // 
+      this.errorProvider.SetIconAlignment(this.nameTextBox, System.Windows.Forms.ErrorIconAlignment.MiddleLeft);
+      this.errorProvider.SetIconPadding(this.nameTextBox, 2);
+      this.nameTextBox.Size = new System.Drawing.Size(638, 20);
+      // 
+      // descriptionTextBox
+      // 
+      this.descriptionTextBox.Size = new System.Drawing.Size(638, 20);
+      // 
+      // algorithmLabel
+      // 
+      this.algorithmLabel.AutoSize = true;
+      this.algorithmLabel.Location = new System.Drawing.Point(3, 111);
+      this.algorithmLabel.Name = "algorithmLabel";
+      this.algorithmLabel.Size = new System.Drawing.Size(53, 13);
+      this.algorithmLabel.TabIndex = 5;
+      this.algorithmLabel.Text = "&Algorithm:";
+      // 
+      // problemLabel
+      // 
+      this.problemLabel.AutoSize = true;
+      this.problemLabel.Location = new System.Drawing.Point(3, 138);
+      this.problemLabel.Name = "problemLabel";
+      this.problemLabel.Size = new System.Drawing.Size(48, 13);
+      this.problemLabel.TabIndex = 7;
+      this.problemLabel.Text = "&Problem:";
+      // 
+      // algorithmComboBox
+      // 
+      this.algorithmComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.algorithmComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+      this.algorithmComboBox.FormattingEnabled = true;
+      this.algorithmComboBox.Location = new System.Drawing.Point(72, 108);
+      this.algorithmComboBox.Name = "algorithmComboBox";
+      this.algorithmComboBox.Size = new System.Drawing.Size(638, 21);
+      this.algorithmComboBox.TabIndex = 6;
+      this.algorithmComboBox.SelectedValueChanged += new System.EventHandler(this.algorithmComboBox_SelectedValueChanged);
+      // 
+      // problemComboBox
+      // 
+      this.problemComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.problemComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+      this.problemComboBox.FormattingEnabled = true;
+      this.problemComboBox.Location = new System.Drawing.Point(72, 135);
+      this.problemComboBox.Name = "problemComboBox";
+      this.problemComboBox.Size = new System.Drawing.Size(638, 21);
+      this.problemComboBox.TabIndex = 8;
+      this.problemComboBox.SelectedValueChanged += new System.EventHandler(this.problemComboBox_SelectedValueChanged);
+      // 
+      // refreshButton
+      // 
+      this.refreshButton.Location = new System.Drawing.Point(0, 79);
+      this.refreshButton.Name = "refreshButton";
+      this.refreshButton.Size = new System.Drawing.Size(75, 23);
+      this.refreshButton.TabIndex = 4;
+      this.refreshButton.Text = "&Refresh";
+      this.refreshButton.UseVisualStyleBackColor = true;
+      this.refreshButton.Click += new System.EventHandler(this.refreshButton_Click);
+      // 
+      // startButton
+      // 
+      this.startButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.startButton.Location = new System.Drawing.Point(81, 476);
+      this.startButton.Name = "startButton";
+      this.startButton.Size = new System.Drawing.Size(75, 23);
+      this.startButton.TabIndex = 11;
+      this.startButton.Text = "Start";
+      this.startButton.UseVisualStyleBackColor = true;
+      this.startButton.Click += new System.EventHandler(this.startButton_Click);
+      // 
+      // pauseButton
+      // 
+      this.pauseButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.pauseButton.Location = new System.Drawing.Point(162, 476);
+      this.pauseButton.Name = "pauseButton";
+      this.pauseButton.Size = new System.Drawing.Size(75, 23);
+      this.pauseButton.TabIndex = 12;
+      this.pauseButton.Text = "Pause";
+      this.pauseButton.UseVisualStyleBackColor = true;
+      this.pauseButton.Click += new System.EventHandler(this.pauseButton_Click);
+      // 
+      // stopButton
+      // 
+      this.stopButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.stopButton.Location = new System.Drawing.Point(243, 476);
+      this.stopButton.Name = "stopButton";
+      this.stopButton.Size = new System.Drawing.Size(75, 23);
+      this.stopButton.TabIndex = 13;
+      this.stopButton.Text = "Stop";
+      this.stopButton.UseVisualStyleBackColor = true;
+      this.stopButton.Click += new System.EventHandler(this.stopButton_Click);
+      // 
+      // prepareButton
+      // 
+      this.prepareButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.prepareButton.Location = new System.Drawing.Point(0, 476);
+      this.prepareButton.Name = "prepareButton";
+      this.prepareButton.Size = new System.Drawing.Size(75, 23);
+      this.prepareButton.TabIndex = 10;
+      this.prepareButton.Text = "Prepare";
+      this.prepareButton.UseVisualStyleBackColor = true;
+      this.prepareButton.Click += new System.EventHandler(this.prepareButton_Click);
+      // 
+      // executionTimeLabel
+      // 
+      this.executionTimeLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+      this.executionTimeLabel.AutoSize = true;
+      this.executionTimeLabel.Location = new System.Drawing.Point(476, 482);
+      this.executionTimeLabel.Name = "executionTimeLabel";
+      this.executionTimeLabel.Size = new System.Drawing.Size(83, 13);
+      this.executionTimeLabel.TabIndex = 14;
+      this.executionTimeLabel.Text = "&Execution Time:";
+      // 
+      // executionTimeTextBox
+      // 
+      this.executionTimeTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+      this.executionTimeTextBox.Location = new System.Drawing.Point(565, 479);
+      this.executionTimeTextBox.Name = "executionTimeTextBox";
+      this.executionTimeTextBox.ReadOnly = true;
+      this.executionTimeTextBox.Size = new System.Drawing.Size(145, 20);
+      this.executionTimeTextBox.TabIndex = 15;
+      // 
+      // tabControl
+      // 
+      this.tabControl.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.tabControl.Controls.Add(this.problemParametersTabPage);
+      this.tabControl.Controls.Add(this.algorithmParametersTabPage);
+      this.tabControl.Controls.Add(this.resultsTabPage);
+      this.tabControl.Controls.Add(this.runsTabPage);
+      this.tabControl.Location = new System.Drawing.Point(0, 162);
+      this.tabControl.Name = "tabControl";
+      this.tabControl.SelectedIndex = 0;
+      this.tabControl.Size = new System.Drawing.Size(710, 308);
+      this.tabControl.TabIndex = 9;
+      // 
+      // problemParametersTabPage
+      // 
+      this.problemParametersTabPage.Controls.Add(this.problemParametersViewHost);
+      this.problemParametersTabPage.Location = new System.Drawing.Point(4, 22);
+      this.problemParametersTabPage.Name = "problemParametersTabPage";
+      this.problemParametersTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.problemParametersTabPage.Size = new System.Drawing.Size(702, 282);
+      this.problemParametersTabPage.TabIndex = 0;
+      this.problemParametersTabPage.Text = "Problem Parameters";
+      this.problemParametersTabPage.UseVisualStyleBackColor = true;
+      // 
+      // algorithmParametersTabPage
+      // 
+      this.algorithmParametersTabPage.Controls.Add(this.algorithmParametersViewHost);
+      this.algorithmParametersTabPage.Location = new System.Drawing.Point(4, 22);
+      this.algorithmParametersTabPage.Name = "algorithmParametersTabPage";
+      this.algorithmParametersTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.algorithmParametersTabPage.Size = new System.Drawing.Size(702, 282);
+      this.algorithmParametersTabPage.TabIndex = 1;
+      this.algorithmParametersTabPage.Text = "Algorithm Parameters";
+      this.algorithmParametersTabPage.UseVisualStyleBackColor = true;
+      // 
+      // resultsTabPage
+      // 
+      this.resultsTabPage.Controls.Add(this.resultsViewHost);
+      this.resultsTabPage.Location = new System.Drawing.Point(4, 22);
+      this.resultsTabPage.Name = "resultsTabPage";
+      this.resultsTabPage.Size = new System.Drawing.Size(702, 282);
+      this.resultsTabPage.TabIndex = 2;
+      this.resultsTabPage.Text = "Results";
+      this.resultsTabPage.UseVisualStyleBackColor = true;
+      // 
+      // runsTabPage
+      // 
+      this.runsTabPage.Controls.Add(this.runsViewHost);
+      this.runsTabPage.Location = new System.Drawing.Point(4, 22);
+      this.runsTabPage.Name = "runsTabPage";
+      this.runsTabPage.Size = new System.Drawing.Size(702, 282);
+      this.runsTabPage.TabIndex = 3;
+      this.runsTabPage.Text = "Runs";
+      this.runsTabPage.UseVisualStyleBackColor = true;
+      // 
+      // problemParametersViewHost
+      // 
+      this.problemParametersViewHost.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.problemParametersViewHost.Caption = "View";
+      this.problemParametersViewHost.Content = null;
+      this.problemParametersViewHost.Location = new System.Drawing.Point(6, 6);
+      this.problemParametersViewHost.Name = "problemParametersViewHost";
+      this.problemParametersViewHost.ReadOnly = false;
+      this.problemParametersViewHost.Size = new System.Drawing.Size(690, 270);
+      this.problemParametersViewHost.TabIndex = 0;
+      this.problemParametersViewHost.ViewType = null;
+      // 
+      // algorithmParametersViewHost
+      // 
+      this.algorithmParametersViewHost.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.algorithmParametersViewHost.Caption = "View";
+      this.algorithmParametersViewHost.Content = null;
+      this.algorithmParametersViewHost.Location = new System.Drawing.Point(6, 6);
+      this.algorithmParametersViewHost.Name = "algorithmParametersViewHost";
+      this.algorithmParametersViewHost.ReadOnly = false;
+      this.algorithmParametersViewHost.Size = new System.Drawing.Size(690, 270);
+      this.algorithmParametersViewHost.TabIndex = 1;
+      this.algorithmParametersViewHost.ViewType = null;
+      // 
+      // resultsViewHost
+      // 
+      this.resultsViewHost.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.resultsViewHost.Caption = "View";
+      this.resultsViewHost.Content = null;
+      this.resultsViewHost.Location = new System.Drawing.Point(6, 6);
+      this.resultsViewHost.Name = "resultsViewHost";
+      this.resultsViewHost.ReadOnly = false;
+      this.resultsViewHost.Size = new System.Drawing.Size(690, 270);
+      this.resultsViewHost.TabIndex = 1;
+      this.resultsViewHost.ViewType = null;
+      // 
+      // runsViewHost
+      // 
+      this.runsViewHost.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.runsViewHost.Caption = "View";
+      this.runsViewHost.Content = null;
+      this.runsViewHost.Location = new System.Drawing.Point(6, 6);
+      this.runsViewHost.Name = "runsViewHost";
+      this.runsViewHost.ReadOnly = false;
+      this.runsViewHost.Size = new System.Drawing.Size(690, 270);
+      this.runsViewHost.TabIndex = 1;
+      this.runsViewHost.ViewType = null;
+      // 
+      // OKBExperimentView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.algorithmComboBox);
+      this.Controls.Add(this.problemComboBox);
+      this.Controls.Add(this.algorithmLabel);
+      this.Controls.Add(this.problemLabel);
+      this.Controls.Add(this.tabControl);
+      this.Controls.Add(this.refreshButton);
+      this.Controls.Add(this.prepareButton);
+      this.Controls.Add(this.startButton);
+      this.Controls.Add(this.executionTimeTextBox);
+      this.Controls.Add(this.pauseButton);
+      this.Controls.Add(this.stopButton);
+      this.Controls.Add(this.executionTimeLabel);
+      this.Name = "OKBExperimentView";
+      this.Size = new System.Drawing.Size(710, 499);
+      this.Controls.SetChildIndex(this.executionTimeLabel, 0);
+      this.Controls.SetChildIndex(this.stopButton, 0);
+      this.Controls.SetChildIndex(this.pauseButton, 0);
+      this.Controls.SetChildIndex(this.executionTimeTextBox, 0);
+      this.Controls.SetChildIndex(this.startButton, 0);
+      this.Controls.SetChildIndex(this.prepareButton, 0);
+      this.Controls.SetChildIndex(this.refreshButton, 0);
+      this.Controls.SetChildIndex(this.tabControl, 0);
+      this.Controls.SetChildIndex(this.problemLabel, 0);
+      this.Controls.SetChildIndex(this.algorithmLabel, 0);
+      this.Controls.SetChildIndex(this.problemComboBox, 0);
+      this.Controls.SetChildIndex(this.algorithmComboBox, 0);
+      this.Controls.SetChildIndex(this.nameLabel, 0);
+      this.Controls.SetChildIndex(this.descriptionLabel, 0);
+      this.Controls.SetChildIndex(this.nameTextBox, 0);
+      this.Controls.SetChildIndex(this.descriptionTextBox, 0);
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
+      this.tabControl.ResumeLayout(false);
+      this.problemParametersTabPage.ResumeLayout(false);
+      this.algorithmParametersTabPage.ResumeLayout(false);
+      this.resultsTabPage.ResumeLayout(false);
+      this.runsTabPage.ResumeLayout(false);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Label algorithmLabel;
+    private System.Windows.Forms.Label problemLabel;
+    private System.Windows.Forms.ComboBox algorithmComboBox;
+    private System.Windows.Forms.ComboBox problemComboBox;
+    private System.Windows.Forms.Button refreshButton;
+    private System.Windows.Forms.Button startButton;
+    private System.Windows.Forms.Button pauseButton;
+    private System.Windows.Forms.Button stopButton;
+    private System.Windows.Forms.Button prepareButton;
+    private System.Windows.Forms.Label executionTimeLabel;
+    private System.Windows.Forms.TextBox executionTimeTextBox;
+    private System.Windows.Forms.TabControl tabControl;
+    private System.Windows.Forms.TabPage problemParametersTabPage;
+    private System.Windows.Forms.TabPage algorithmParametersTabPage;
+    private MainForm.WindowsForms.ViewHost problemParametersViewHost;
+    private MainForm.WindowsForms.ViewHost algorithmParametersViewHost;
+    private System.Windows.Forms.TabPage resultsTabPage;
+    private MainForm.WindowsForms.ViewHost resultsViewHost;
+    private System.Windows.Forms.TabPage runsTabPage;
+    private MainForm.WindowsForms.ViewHost runsViewHost;
+
+
+
+
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/OKBExperimentView.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/OKBExperimentView.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/OKBExperimentView.cs	(revision 5296)
@@ -0,0 +1,257 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Linq;
+using System.Windows.Forms;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
+using HeuristicLab.MainForm.WindowsForms;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Clients.OKB {
+  [View("OKBItem View")]
+  [Content(typeof(OKBExperiment), true)]
+  public sealed partial class OKBExperimentView : NamedItemView {
+    public new OKBExperiment Content {
+      get { return (OKBExperiment)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public OKBExperimentView() {
+      InitializeComponent();
+    }
+
+    protected override void OnInitialized(System.EventArgs e) {
+      base.OnInitialized(e);
+      OKBClient.Instance.Refreshing += new EventHandler(OKBClient_Refreshing);
+      OKBClient.Instance.Refreshed += new EventHandler(OKBClient_Refreshed);
+      PopulateComboBoxes();
+    }
+
+    protected override void DeregisterContentEvents() {
+      Content.AlgorithmIdChanged -= new EventHandler(Content_AlgorithmIdChanged);
+      Content.ProblemIdChanged -= new EventHandler(Content_ProblemIdChanged);
+      Content.ExceptionOccurred -= new EventHandler<EventArgs<Exception>>(Content_ExceptionOccurred);
+      Content.ExecutionStateChanged -= new EventHandler(Content_ExecutionStateChanged);
+      Content.ExecutionTimeChanged -= new EventHandler(Content_ExecutionTimeChanged);
+      Content.Prepared -= new EventHandler(Content_Prepared);
+      Content.Started -= new EventHandler(Content_Started);
+      Content.Paused -= new EventHandler(Content_Paused);
+      Content.Stopped -= new EventHandler(Content_Stopped);
+      base.DeregisterContentEvents();
+    }
+    protected override void RegisterContentEvents() {
+      base.RegisterContentEvents();
+      Content.AlgorithmIdChanged += new EventHandler(Content_AlgorithmIdChanged);
+      Content.ProblemIdChanged += new EventHandler(Content_ProblemIdChanged);
+      Content.ExceptionOccurred += new EventHandler<EventArgs<Exception>>(Content_ExceptionOccurred);
+      Content.ExecutionStateChanged += new EventHandler(Content_ExecutionStateChanged);
+      Content.ExecutionTimeChanged += new EventHandler(Content_ExecutionTimeChanged);
+      Content.Prepared += new EventHandler(Content_Prepared);
+      Content.Started += new EventHandler(Content_Started);
+      Content.Paused += new EventHandler(Content_Paused);
+      Content.Stopped += new EventHandler(Content_Stopped);
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      if (Content == null) {
+        algorithmComboBox.SelectedIndex = -1;
+        problemComboBox.SelectedIndex = -1;
+        problemParametersViewHost.Content = null;
+        algorithmParametersViewHost.Content = null;
+        resultsViewHost.Content = null;
+        runsViewHost.Content = null;
+        executionTimeTextBox.Text = "-";
+      } else {
+        algorithmComboBox.SelectedItem = OKBClient.Instance.Algorithms.FirstOrDefault(x => x.Id == Content.AlgorithmId);
+        problemComboBox.SelectedItem = OKBClient.Instance.Problems.FirstOrDefault(x => x.Id == Content.ProblemId);
+        problemParametersViewHost.Content = Content.ProblemParameters;
+        algorithmParametersViewHost.Content = Content.AlgorithmParameters;
+        resultsViewHost.Content = Content.Results;
+        runsViewHost.Content = Content.Runs;
+        executionTimeTextBox.Text = Content.ExecutionTime.ToString();
+      }
+    }
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      algorithmComboBox.Enabled = (Content != null) && !ReadOnly && !Locked && (algorithmComboBox.Items.Count > 0);
+      problemComboBox.Enabled = (Content != null) && !ReadOnly && !Locked && (problemComboBox.Items.Count > 0);
+      tabControl.Enabled = Content != null;
+      executionTimeTextBox.Enabled = Content != null;
+      SetEnabledStateOfExecutableButtons();
+    }
+
+    private void PopulateComboBoxes() {
+      algorithmComboBox.DataSource = null;
+      problemComboBox.DataSource = null;
+      Platform platform = OKBClient.Instance.Platforms.FirstOrDefault(x => x.Name == "HeuristicLab 3.3");
+      if (platform != null) {
+        algorithmComboBox.DataSource = OKBClient.Instance.Algorithms.Where(x => x.PlatformId == platform.Id).ToList();
+        algorithmComboBox.DisplayMember = "Name";
+        problemComboBox.DataSource = OKBClient.Instance.Problems.Where(x => x.PlatformId == platform.Id).ToList();
+        problemComboBox.DisplayMember = "Name";
+      }
+    }
+
+    protected override void OnClosed(FormClosedEventArgs e) {
+      if ((Content != null) && (Content.ExecutionState == ExecutionState.Started)) Content.Stop();
+      OKBClient.Instance.Refreshing -= new EventHandler(OKBClient_Refreshing);
+      OKBClient.Instance.Refreshed -= new EventHandler(OKBClient_Refreshed);
+      base.OnClosed(e);
+    }
+
+    private void OKBClient_Refreshing(object sender, EventArgs e) {
+      if (InvokeRequired) {
+        Invoke(new EventHandler(OKBClient_Refreshing), sender, e);
+      } else {
+        Cursor = Cursors.AppStarting;
+        algorithmComboBox.Enabled = problemComboBox.Enabled = tabControl.Enabled = prepareButton.Enabled = startButton.Enabled = pauseButton.Enabled = stopButton.Enabled = executionTimeTextBox.Enabled = false;
+      }
+    }
+    private void OKBClient_Refreshed(object sender, EventArgs e) {
+      if (InvokeRequired) {
+        Invoke(new EventHandler(OKBClient_Refreshed), sender, e);
+      } else {
+        PopulateComboBoxes();
+        SetEnabledStateOfControls();
+        Cursor = Cursors.Default;
+      }
+    }
+
+    #region Content Events
+    private void Content_AlgorithmIdChanged(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(Content_AlgorithmIdChanged), sender, e);
+      else {
+        algorithmComboBox.SelectedItem = OKBClient.Instance.Algorithms.FirstOrDefault(x => x.Id == Content.AlgorithmId);
+        algorithmParametersViewHost.Content = Content.AlgorithmParameters;
+        resultsViewHost.Content = Content.Results;
+        runsViewHost.Content = Content.Runs;
+        executionTimeTextBox.Text = Content.ExecutionTime.ToString();
+        SetEnabledStateOfExecutableButtons();
+      }
+    }
+    private void Content_ProblemIdChanged(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(Content_ProblemIdChanged), sender, e);
+      else {
+        problemComboBox.SelectedItem = OKBClient.Instance.Problems.FirstOrDefault(x => x.Id == Content.ProblemId);
+        problemParametersViewHost.Content = Content.ProblemParameters;
+        SetEnabledStateOfExecutableButtons();
+      }
+    }
+    private void Content_ExceptionOccurred(object sender, EventArgs<Exception> e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler<EventArgs<Exception>>(Content_ExceptionOccurred), sender, e);
+      else
+        ErrorHandling.ShowErrorDialog(this, e.Value);
+    }
+    private void Content_ExecutionStateChanged(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(Content_ExecutionStateChanged), sender, e);
+      else
+        startButton.Enabled = pauseButton.Enabled = stopButton.Enabled = prepareButton.Enabled = false;
+    }
+    private void Content_ExecutionTimeChanged(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(Content_ExecutionTimeChanged), sender, e);
+      else
+        executionTimeTextBox.Text = Content == null ? "-" : Content.ExecutionTime.ToString();
+    }
+    private void Content_Prepared(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(Content_Prepared), sender, e);
+      else {
+        resultsViewHost.Content = Content.Results;
+        ReadOnly = Locked = false;
+        SetEnabledStateOfExecutableButtons();
+      }
+    }
+    private void Content_Started(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(Content_Started), sender, e);
+      else {
+        ReadOnly = Locked = true;
+        SetEnabledStateOfExecutableButtons();
+      }
+    }
+    private void Content_Paused(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(Content_Paused), sender, e);
+      else {
+        ReadOnly = Locked = false;
+        SetEnabledStateOfExecutableButtons();
+      }
+    }
+    private void Content_Stopped(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(Content_Stopped), sender, e);
+      else {
+        ReadOnly = Locked = false;
+        SetEnabledStateOfExecutableButtons();
+      }
+    }
+    #endregion
+
+    #region Control Events
+    private void refreshButton_Click(object sender, System.EventArgs e) {
+      OKBClient.Instance.Refresh();
+    }
+    private void algorithmComboBox_SelectedValueChanged(object sender, System.EventArgs e) {
+      Algorithm algorithm = algorithmComboBox.SelectedValue as Algorithm;
+      if (Content != null) Content.Load(algorithm);
+    }
+    private void problemComboBox_SelectedValueChanged(object sender, System.EventArgs e) {
+      Problem problem = problemComboBox.SelectedValue as Problem;
+      if (Content != null) Content.Load(problem);
+    }
+    private void prepareButton_Click(object sender, EventArgs e) {
+      Content.Prepare(false);
+    }
+    private void startButton_Click(object sender, EventArgs e) {
+      Content.Start();
+    }
+    private void pauseButton_Click(object sender, EventArgs e) {
+      Content.Pause();
+    }
+    private void stopButton_Click(object sender, EventArgs e) {
+      Content.Stop();
+    }
+    #endregion
+
+    #region Helpers
+    private void SetEnabledStateOfExecutableButtons() {
+      if ((Content == null) || (Content.AlgorithmId == 0) || (Content.ProblemId == 0)) {
+        startButton.Enabled = pauseButton.Enabled = stopButton.Enabled = prepareButton.Enabled = false;
+      } else {
+        startButton.Enabled = (Content.ExecutionState == ExecutionState.Prepared) || (Content.ExecutionState == ExecutionState.Paused);
+        pauseButton.Enabled = Content.ExecutionState == ExecutionState.Started;
+        stopButton.Enabled = (Content.ExecutionState == ExecutionState.Started) || (Content.ExecutionState == ExecutionState.Paused);
+        prepareButton.Enabled = Content.ExecutionState != ExecutionState.Started;
+      }
+    }
+    #endregion
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/OKBItemView.Designer.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/OKBItemView.Designer.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/OKBItemView.Designer.cs	(revision 5296)
@@ -0,0 +1,82 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Clients.OKB {
+  partial class OKBItemView {
+    /// <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) {
+        if (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.components = new System.ComponentModel.Container();
+      this.storeButton = new System.Windows.Forms.Button();
+      this.toolTip = new System.Windows.Forms.ToolTip(this.components);
+      this.SuspendLayout();
+      // 
+      // storeButton
+      // 
+      this.storeButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.PublishToWeb;
+      this.storeButton.Location = new System.Drawing.Point(0, 0);
+      this.storeButton.Name = "storeButton";
+      this.storeButton.Size = new System.Drawing.Size(24, 24);
+      this.storeButton.TabIndex = 0;
+      this.toolTip.SetToolTip(this.storeButton, "Store Data");
+      this.storeButton.UseVisualStyleBackColor = true;
+      this.storeButton.Click += new System.EventHandler(this.storeButton_Click);
+      // 
+      // OKBItemView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.storeButton);
+      this.Name = "OKBItemView";
+      this.Size = new System.Drawing.Size(354, 308);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    protected System.Windows.Forms.Button storeButton;
+    protected System.Windows.Forms.ToolTip toolTip;
+
+
+
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/OKBItemView.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/OKBItemView.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/OKBItemView.cs	(revision 5296)
@@ -0,0 +1,78 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.ComponentModel;
+using System.Windows.Forms;
+using HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
+using HeuristicLab.MainForm.WindowsForms;
+
+namespace HeuristicLab.Clients.OKB {
+  [View("OKBItem View")]
+  [Content(typeof(OKBItem), true)]
+  [Content(typeof(IOKBItem), false)]
+  public partial class OKBItemView : ItemView {
+    public new IOKBItem Content {
+      get { return (IOKBItem)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public OKBItemView() {
+      InitializeComponent();
+    }
+
+    protected override void DeregisterContentEvents() {
+      Content.PropertyChanged -= new PropertyChangedEventHandler(Content_PropertyChanged);
+      Content.ModifiedChanged -= new EventHandler(Content_ModifiedChanged);
+      base.DeregisterContentEvents();
+    }
+    protected override void RegisterContentEvents() {
+      base.RegisterContentEvents();
+      Content.PropertyChanged += new PropertyChangedEventHandler(Content_PropertyChanged);
+      Content.ModifiedChanged += new EventHandler(Content_ModifiedChanged);
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      storeButton.Enabled = (Content != null) && !ReadOnly && Content.Modified;
+    }
+
+    private void Content_PropertyChanged(object sender, PropertyChangedEventArgs e) {
+      if (InvokeRequired)
+        Invoke(new PropertyChangedEventHandler(Content_PropertyChanged), sender, e);
+      else {
+        OnContentPropertyChanged(e.PropertyName);
+      }
+    }
+    protected virtual void OnContentPropertyChanged(string propertyName) { }
+    protected virtual void Content_ModifiedChanged(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(Content_ModifiedChanged), sender, e);
+      else
+        SetEnabledStateOfControls();
+    }
+
+    protected virtual void storeButton_Click(object sender, EventArgs e) {
+      Content.Store();
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/OrFilterView.Designer.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/OrFilterView.Designer.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/OrFilterView.Designer.cs	(revision 5296)
@@ -0,0 +1,65 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Clients.OKB {
+  partial class OrFilterView {
+    /// <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) {
+        if (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.SuspendLayout();
+      // 
+      // OrFilterView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Name = "OrFilterView";
+      this.Size = new System.Drawing.Size(727, 327);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+
+
+
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/OrFilterView.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/OrFilterView.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/OrFilterView.cs	(revision 5296)
@@ -0,0 +1,42 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Windows.Forms;
+using HeuristicLab.MainForm;
+using HeuristicLab.MainForm.WindowsForms;
+
+namespace HeuristicLab.Clients.OKB {
+  [View("OrFilter View")]
+  [Content(typeof(OrFilter), true)]
+  public partial class OrFilterView : CombinedFilterView {
+    public new OrFilter Content {
+      get { return (OrFilter)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public OrFilterView() {
+      InitializeComponent();
+      string nl = Environment.NewLine;
+      label.Text = "O" + nl + "R";
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/OrdinalComparisonFilterView.Designer.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/OrdinalComparisonFilterView.Designer.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/OrdinalComparisonFilterView.Designer.cs	(revision 5296)
@@ -0,0 +1,92 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Clients.OKB {
+  partial class OrdinalComparisonFilterView {
+    /// <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) {
+        if (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.comparisonComboBox = new System.Windows.Forms.ComboBox();
+      this.SuspendLayout();
+      // 
+      // label
+      // 
+      this.label.Location = new System.Drawing.Point(3, 8);
+      // 
+      // comparisonComboBox
+      // 
+      this.comparisonComboBox.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.comparisonComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+      this.comparisonComboBox.FormattingEnabled = true;
+      this.comparisonComboBox.Items.AddRange(new object[] {
+            "<",
+            "<=",
+            "=",
+            ">=",
+            ">",
+            "<>"});
+      this.comparisonComboBox.Location = new System.Drawing.Point(254, 8);
+      this.comparisonComboBox.Name = "comparisonComboBox";
+      this.comparisonComboBox.Size = new System.Drawing.Size(104, 21);
+      this.comparisonComboBox.TabIndex = 1;
+      this.comparisonComboBox.SelectedIndexChanged += new System.EventHandler(this.comparisonComboBox_SelectedIndexChanged);
+      // 
+      // OrdinalComparisonFilterView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.comparisonComboBox);
+      this.Name = "OrdinalComparisonFilterView";
+      this.Size = new System.Drawing.Size(516, 36);
+      this.Controls.SetChildIndex(this.comparisonComboBox, 0);
+      this.Controls.SetChildIndex(this.label, 0);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    protected System.Windows.Forms.ComboBox comparisonComboBox;
+
+
+
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/OrdinalComparisonFilterView.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/OrdinalComparisonFilterView.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/OrdinalComparisonFilterView.cs	(revision 5296)
@@ -0,0 +1,80 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Windows.Forms;
+using HeuristicLab.MainForm;
+using HeuristicLab.MainForm.WindowsForms;
+
+namespace HeuristicLab.Clients.OKB {
+  [View("OrdinalComparisonFilter View")]
+  [Content(typeof(OrdinalComparisonFilter), true)]
+  public partial class OrdinalComparisonFilterView : FilterView {
+    public new OrdinalComparisonFilter Content {
+      get { return (OrdinalComparisonFilter)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public OrdinalComparisonFilterView() {
+      InitializeComponent();
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      comparisonComboBox.SelectedIndex = -1;
+      if (Content != null) {
+        if (Content.Comparison == OrdinalComparison.Less)
+          comparisonComboBox.SelectedItem = "<";
+        else if (Content.Comparison == OrdinalComparison.LessOrEqual)
+          comparisonComboBox.SelectedItem = "<=";
+        else if (Content.Comparison == OrdinalComparison.Equal)
+          comparisonComboBox.SelectedItem = "=";
+        else if (Content.Comparison == OrdinalComparison.GreaterOrEqual)
+          comparisonComboBox.SelectedItem = ">=";
+        else if (Content.Comparison == OrdinalComparison.Greater)
+          comparisonComboBox.SelectedItem = ">";
+        else if (Content.Comparison == OrdinalComparison.NotEqual)
+          comparisonComboBox.SelectedItem = "<>";
+      }
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      comparisonComboBox.Enabled = Content != null && !ReadOnly;
+    }
+
+    private void comparisonComboBox_SelectedIndexChanged(object sender, System.EventArgs e) {
+      if (Content != null) {
+        if (comparisonComboBox.SelectedItem == "<")
+          Content.Comparison = OrdinalComparison.Less;
+        else if (comparisonComboBox.SelectedItem == "<=")
+          Content.Comparison = OrdinalComparison.LessOrEqual;
+        else if (comparisonComboBox.SelectedItem == "=")
+          Content.Comparison = OrdinalComparison.Equal;
+        else if (comparisonComboBox.SelectedItem == ">=")
+          Content.Comparison = OrdinalComparison.GreaterOrEqual;
+        else if (comparisonComboBox.SelectedItem == ">")
+          Content.Comparison = OrdinalComparison.Greater;
+        else if (comparisonComboBox.SelectedItem == "<>")
+          Content.Comparison = OrdinalComparison.NotEqual;
+      }
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/OrdinalComparisonLongFilterView.Designer.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/OrdinalComparisonLongFilterView.Designer.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/OrdinalComparisonLongFilterView.Designer.cs	(revision 5296)
@@ -0,0 +1,103 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Clients.OKB {
+  partial class OrdinalComparisonLongFilterView {
+    /// <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) {
+        if (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.components = new System.ComponentModel.Container();
+      this.valueTextBox = new System.Windows.Forms.TextBox();
+      this.errorProvider = new System.Windows.Forms.ErrorProvider(this.components);
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
+      this.SuspendLayout();
+      // 
+      // comparisonComboBox
+      // 
+      this.comparisonComboBox.Location = new System.Drawing.Point(211, 8);
+      this.comparisonComboBox.Size = new System.Drawing.Size(94, 21);
+      // 
+      // label
+      // 
+      this.label.Size = new System.Drawing.Size(202, 20);
+      // 
+      // valueTextBox
+      // 
+      this.valueTextBox.Anchor = System.Windows.Forms.AnchorStyles.Right;
+      this.valueTextBox.Location = new System.Drawing.Point(367, 8);
+      this.valueTextBox.Name = "valueTextBox";
+      this.valueTextBox.Size = new System.Drawing.Size(149, 20);
+      this.valueTextBox.TabIndex = 2;
+      this.valueTextBox.KeyDown += new System.Windows.Forms.KeyEventHandler(this.valueTextBox_KeyDown);
+      this.valueTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.valueTextBox_Validating);
+      this.valueTextBox.Validated += new System.EventHandler(this.valueTextBox_Validated);
+      // 
+      // errorProvider
+      // 
+      this.errorProvider.BlinkStyle = System.Windows.Forms.ErrorBlinkStyle.NeverBlink;
+      this.errorProvider.ContainerControl = this;
+      // 
+      // OrdinalComparisonLongFilterView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.valueTextBox);
+      this.Name = "OrdinalComparisonLongFilterView";
+      this.Controls.SetChildIndex(this.valueTextBox, 0);
+      this.Controls.SetChildIndex(this.comparisonComboBox, 0);
+      this.Controls.SetChildIndex(this.label, 0);
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.TextBox valueTextBox;
+    private System.Windows.Forms.ErrorProvider errorProvider;
+
+
+
+
+
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/OrdinalComparisonLongFilterView.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/OrdinalComparisonLongFilterView.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/OrdinalComparisonLongFilterView.cs	(revision 5296)
@@ -0,0 +1,75 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Windows.Forms;
+using HeuristicLab.MainForm;
+using HeuristicLab.MainForm.WindowsForms;
+
+namespace HeuristicLab.Clients.OKB {
+  [View("OrdinalComparisonLongFilter View")]
+  [Content(typeof(OrdinalComparisonLongFilter), true)]
+  public partial class OrdinalComparisonLongFilterView : OrdinalComparisonFilterView {
+    public new OrdinalComparisonLongFilter Content {
+      get { return (OrdinalComparisonLongFilter)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public OrdinalComparisonLongFilterView() {
+      InitializeComponent();
+      errorProvider.SetIconAlignment(valueTextBox, ErrorIconAlignment.MiddleLeft);
+      errorProvider.SetIconPadding(valueTextBox, 2);
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      valueTextBox.Text = Content == null ? string.Empty : Content.Value.ToString();
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      valueTextBox.Enabled = Content != null;
+      valueTextBox.ReadOnly = ReadOnly;
+    }
+
+    private void valueTextBox_KeyDown(object sender, KeyEventArgs e) {
+      if ((e.KeyCode == Keys.Enter) || (e.KeyCode == Keys.Return))
+        label.Focus();  // set focus on label to validate data
+      if (e.KeyCode == Keys.Escape) {
+        valueTextBox.Text = Content.Value.ToString();
+        label.Focus();  // set focus on label to validate data
+      }
+    }
+    private void valueTextBox_Validating(object sender, System.ComponentModel.CancelEventArgs e) {
+      long val;
+      if (!long.TryParse(valueTextBox.Text, out val)) {
+        e.Cancel = true;
+        errorProvider.SetError(valueTextBox, "Invalid Long Value");
+        valueTextBox.SelectAll();
+      }
+    }
+    private void valueTextBox_Validated(object sender, System.EventArgs e) {
+      if (Content != null) {
+        Content.Value = long.Parse(valueTextBox.Text);
+        errorProvider.SetError(valueTextBox, string.Empty);
+      }
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/PlatformCollectionView.Designer.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/PlatformCollectionView.Designer.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/PlatformCollectionView.Designer.cs	(revision 5296)
@@ -0,0 +1,53 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Clients.OKB {
+  partial class PlatformCollectionView {
+    /// <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) {
+        if (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() {
+      components = new System.ComponentModel.Container();
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+    }
+
+    #endregion
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/PlatformCollectionView.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/PlatformCollectionView.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/PlatformCollectionView.cs	(revision 5296)
@@ -0,0 +1,40 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Windows.Forms;
+using HeuristicLab.Core;
+using HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
+
+namespace HeuristicLab.Clients.OKB {
+  [View("PlatformCollection View")]
+  [Content(typeof(IItemCollection<Platform>), true)]
+  public partial class PlatformCollectionView : ItemCollectionView<Platform> {
+    public PlatformCollectionView() {
+      InitializeComponent();
+      itemsGroupBox.Text = "Platforms";
+    }
+
+    protected override Platform CreateItem() {
+      return new Platform();
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/ProblemClassCollectionView.Designer.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/ProblemClassCollectionView.Designer.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/ProblemClassCollectionView.Designer.cs	(revision 5296)
@@ -0,0 +1,53 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Clients.OKB {
+  partial class ProblemClassCollectionView {
+    /// <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) {
+        if (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() {
+      components = new System.ComponentModel.Container();
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+    }
+
+    #endregion
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/ProblemClassCollectionView.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/ProblemClassCollectionView.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/ProblemClassCollectionView.cs	(revision 5296)
@@ -0,0 +1,40 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Windows.Forms;
+using HeuristicLab.Core;
+using HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
+
+namespace HeuristicLab.Clients.OKB {
+  [View("ProblemClassCollection View")]
+  [Content(typeof(IItemCollection<ProblemClass>), true)]
+  public partial class ProblemClassCollectionView : ItemCollectionView<ProblemClass> {
+    public ProblemClassCollectionView() {
+      InitializeComponent();
+      itemsGroupBox.Text = "Problem Classes";
+    }
+
+    protected override ProblemClass CreateItem() {
+      return new ProblemClass();
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/ProblemCollectionView.Designer.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/ProblemCollectionView.Designer.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/ProblemCollectionView.Designer.cs	(revision 5296)
@@ -0,0 +1,53 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Clients.OKB {
+  partial class ProblemCollectionView {
+    /// <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) {
+        if (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() {
+      components = new System.ComponentModel.Container();
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+    }
+
+    #endregion
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/ProblemCollectionView.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/ProblemCollectionView.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/ProblemCollectionView.cs	(revision 5296)
@@ -0,0 +1,40 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Windows.Forms;
+using HeuristicLab.Core;
+using HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
+
+namespace HeuristicLab.Clients.OKB {
+  [View("ProblemCollection View")]
+  [Content(typeof(IItemCollection<Problem>), true)]
+  public partial class ProblemCollectionView : ItemCollectionView<Problem> {
+    public ProblemCollectionView() {
+      InitializeComponent();
+      itemsGroupBox.Text = "Problems";
+    }
+
+    protected override Problem CreateItem() {
+      return new Problem();
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/ProblemDataView.Designer.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/ProblemDataView.Designer.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/ProblemDataView.Designer.cs	(revision 5296)
@@ -0,0 +1,254 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Clients.OKB {
+  partial class ProblemDataView {
+    /// <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) {
+        if (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.components = new System.ComponentModel.Container();
+      this.openFileDialog = new System.Windows.Forms.OpenFileDialog();
+      this.saveFileDialog = new System.Windows.Forms.SaveFileDialog();
+      this.groupBox = new System.Windows.Forms.GroupBox();
+      this.noViewAvailableLabel = new System.Windows.Forms.Label();
+      this.viewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
+      this.dataTypeComboBox = new System.Windows.Forms.ComboBox();
+      this.newDataButton = new System.Windows.Forms.Button();
+      this.saveFileButton = new System.Windows.Forms.Button();
+      this.openFileButton = new System.Windows.Forms.Button();
+      this.fileTextBox = new System.Windows.Forms.TextBox();
+      this.refreshDataButton = new System.Windows.Forms.Button();
+      this.storeDataButton = new System.Windows.Forms.Button();
+      this.dataTypeLabel = new System.Windows.Forms.Label();
+      this.fileLabel = new System.Windows.Forms.Label();
+      this.toolTip = new System.Windows.Forms.ToolTip(this.components);
+      this.groupBox.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // openFileDialog
+      // 
+      this.openFileDialog.FileName = "data";
+      this.openFileDialog.Filter = "All Files (*.*)|*.*";
+      this.openFileDialog.Title = "Load Problem Data";
+      // 
+      // saveFileDialog
+      // 
+      this.saveFileDialog.FileName = "data";
+      this.saveFileDialog.Filter = "All Files (*.*)|*.*";
+      this.saveFileDialog.Title = "Save Problem Data";
+      // 
+      // groupBox
+      // 
+      this.groupBox.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.groupBox.Controls.Add(this.noViewAvailableLabel);
+      this.groupBox.Controls.Add(this.viewHost);
+      this.groupBox.Location = new System.Drawing.Point(0, 83);
+      this.groupBox.Name = "groupBox";
+      this.groupBox.Size = new System.Drawing.Size(633, 371);
+      this.groupBox.TabIndex = 19;
+      this.groupBox.TabStop = false;
+      this.groupBox.Text = "Data:";
+      // 
+      // noViewAvailableLabel
+      // 
+      this.noViewAvailableLabel.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.noViewAvailableLabel.AutoSize = true;
+      this.noViewAvailableLabel.Location = new System.Drawing.Point(269, 179);
+      this.noViewAvailableLabel.Name = "noViewAvailableLabel";
+      this.noViewAvailableLabel.Size = new System.Drawing.Size(94, 13);
+      this.noViewAvailableLabel.TabIndex = 1;
+      this.noViewAvailableLabel.Text = "No view available.";
+      this.noViewAvailableLabel.Visible = false;
+      // 
+      // viewHost
+      // 
+      this.viewHost.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.viewHost.Caption = "View";
+      this.viewHost.Content = null;
+      this.viewHost.Enabled = true;
+      this.viewHost.Location = new System.Drawing.Point(6, 19);
+      this.viewHost.Name = "viewHost";
+      this.viewHost.ReadOnly = false;
+      this.viewHost.Size = new System.Drawing.Size(621, 346);
+      this.viewHost.TabIndex = 0;
+      this.viewHost.ViewType = null;
+      // 
+      // dataTypeComboBox
+      // 
+      this.dataTypeComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.dataTypeComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+      this.dataTypeComboBox.FormattingEnabled = true;
+      this.dataTypeComboBox.Location = new System.Drawing.Point(66, 30);
+      this.dataTypeComboBox.Name = "dataTypeComboBox";
+      this.dataTypeComboBox.Size = new System.Drawing.Size(567, 21);
+      this.dataTypeComboBox.TabIndex = 16;
+      this.dataTypeComboBox.SelectedIndexChanged += new System.EventHandler(this.dataTypeComboBox_SelectedIndexChanged);
+      // 
+      // newDataButton
+      // 
+      this.newDataButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.NewDocument;
+      this.newDataButton.Location = new System.Drawing.Point(90, 0);
+      this.newDataButton.Name = "newDataButton";
+      this.newDataButton.Size = new System.Drawing.Size(24, 24);
+      this.newDataButton.TabIndex = 12;
+      this.toolTip.SetToolTip(this.newDataButton, "Create New Problem Data");
+      this.newDataButton.UseVisualStyleBackColor = true;
+      this.newDataButton.Click += new System.EventHandler(this.newDataButton_Click);
+      // 
+      // saveFileButton
+      // 
+      this.saveFileButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.Save;
+      this.saveFileButton.Location = new System.Drawing.Point(150, 0);
+      this.saveFileButton.Name = "saveFileButton";
+      this.saveFileButton.Size = new System.Drawing.Size(24, 24);
+      this.saveFileButton.TabIndex = 14;
+      this.toolTip.SetToolTip(this.saveFileButton, "Save Problem Data into File");
+      this.saveFileButton.UseVisualStyleBackColor = true;
+      this.saveFileButton.Click += new System.EventHandler(this.saveFileButton_Click);
+      // 
+      // openFileButton
+      // 
+      this.openFileButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.Open;
+      this.openFileButton.Location = new System.Drawing.Point(120, 0);
+      this.openFileButton.Name = "openFileButton";
+      this.openFileButton.Size = new System.Drawing.Size(24, 24);
+      this.openFileButton.TabIndex = 13;
+      this.toolTip.SetToolTip(this.openFileButton, "Load Problem Data from File");
+      this.openFileButton.UseVisualStyleBackColor = true;
+      this.openFileButton.Click += new System.EventHandler(this.openFileButton_Click);
+      // 
+      // fileTextBox
+      // 
+      this.fileTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.fileTextBox.Location = new System.Drawing.Point(66, 57);
+      this.fileTextBox.Name = "fileTextBox";
+      this.fileTextBox.ReadOnly = true;
+      this.fileTextBox.Size = new System.Drawing.Size(567, 20);
+      this.fileTextBox.TabIndex = 18;
+      // 
+      // refreshDataButton
+      // 
+      this.refreshDataButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.Refresh;
+      this.refreshDataButton.Location = new System.Drawing.Point(0, 0);
+      this.refreshDataButton.Name = "refreshDataButton";
+      this.refreshDataButton.Size = new System.Drawing.Size(24, 24);
+      this.refreshDataButton.TabIndex = 10;
+      this.toolTip.SetToolTip(this.refreshDataButton, "Refresh Problem Data from OKB");
+      this.refreshDataButton.UseVisualStyleBackColor = true;
+      this.refreshDataButton.Click += new System.EventHandler(this.refreshDataButton_Click);
+      // 
+      // storeDataButton
+      // 
+      this.storeDataButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.PublishToWeb;
+      this.storeDataButton.Location = new System.Drawing.Point(30, 0);
+      this.storeDataButton.Name = "storeDataButton";
+      this.storeDataButton.Size = new System.Drawing.Size(24, 24);
+      this.storeDataButton.TabIndex = 11;
+      this.toolTip.SetToolTip(this.storeDataButton, "Store Problem Data in OKB");
+      this.storeDataButton.UseVisualStyleBackColor = true;
+      this.storeDataButton.Click += new System.EventHandler(this.storeDataButton_Click);
+      // 
+      // dataTypeLabel
+      // 
+      this.dataTypeLabel.AutoSize = true;
+      this.dataTypeLabel.Location = new System.Drawing.Point(3, 33);
+      this.dataTypeLabel.Name = "dataTypeLabel";
+      this.dataTypeLabel.Size = new System.Drawing.Size(57, 13);
+      this.dataTypeLabel.TabIndex = 15;
+      this.dataTypeLabel.Text = "&DataType:";
+      // 
+      // fileLabel
+      // 
+      this.fileLabel.AutoSize = true;
+      this.fileLabel.Location = new System.Drawing.Point(3, 60);
+      this.fileLabel.Name = "fileLabel";
+      this.fileLabel.Size = new System.Drawing.Size(26, 13);
+      this.fileLabel.TabIndex = 17;
+      this.fileLabel.Text = "&File:";
+      // 
+      // ProblemDataView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.Controls.Add(this.groupBox);
+      this.Controls.Add(this.dataTypeComboBox);
+      this.Controls.Add(this.newDataButton);
+      this.Controls.Add(this.saveFileButton);
+      this.Controls.Add(this.openFileButton);
+      this.Controls.Add(this.fileTextBox);
+      this.Controls.Add(this.refreshDataButton);
+      this.Controls.Add(this.storeDataButton);
+      this.Controls.Add(this.dataTypeLabel);
+      this.Controls.Add(this.fileLabel);
+      this.Name = "ProblemDataView";
+      this.Size = new System.Drawing.Size(633, 454);
+      this.groupBox.ResumeLayout(false);
+      this.groupBox.PerformLayout();
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.ToolTip toolTip;
+    private System.Windows.Forms.OpenFileDialog openFileDialog;
+    private System.Windows.Forms.SaveFileDialog saveFileDialog;
+    private System.Windows.Forms.GroupBox groupBox;
+    private System.Windows.Forms.Label noViewAvailableLabel;
+    private MainForm.WindowsForms.ViewHost viewHost;
+    private System.Windows.Forms.ComboBox dataTypeComboBox;
+    private System.Windows.Forms.Button newDataButton;
+    private System.Windows.Forms.Button saveFileButton;
+    private System.Windows.Forms.Button openFileButton;
+    private System.Windows.Forms.TextBox fileTextBox;
+    private System.Windows.Forms.Button refreshDataButton;
+    private System.Windows.Forms.Button storeDataButton;
+    private System.Windows.Forms.Label dataTypeLabel;
+    private System.Windows.Forms.Label fileLabel;
+
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/ProblemDataView.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/ProblemDataView.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/ProblemDataView.cs	(revision 5296)
@@ -0,0 +1,246 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.IO;
+using System.Linq;
+using System.Windows.Forms;
+using HeuristicLab.Common;
+using HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
+using HeuristicLab.MainForm.WindowsForms;
+using HeuristicLab.Optimization;
+using HeuristicLab.Persistence.Default.Xml;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Clients.OKB {
+  [View("ProblemData View")]
+  [Content(typeof(ProblemData), true)]
+  public partial class ProblemDataView : AsynchronousContentView {
+    private List<DataType> dataTypeComboBoxValues;
+
+    private long problemId;
+    public long ProblemId {
+      get { return problemId; }
+      set {
+        problemId = value;
+        if (Content != null) {
+          Content.ProblemId = value;
+          SetEnabledStateOfControls();
+        }
+      }
+    }
+
+    public new ProblemData Content {
+      get { return (ProblemData)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public ProblemDataView() {
+      InitializeComponent();
+    }
+
+    protected override void OnInitialized(System.EventArgs e) {
+      base.OnInitialized(e);
+      dataTypeComboBoxValues = OKBClient.Instance.DataTypes.ToList();
+      dataTypeComboBox.DataSource = dataTypeComboBoxValues;
+      dataTypeComboBox.SelectedIndex = -1;
+    }
+
+    protected override void DeregisterContentEvents() {
+      Content.PropertyChanged -= new PropertyChangedEventHandler(Content_PropertyChanged);
+      base.DeregisterContentEvents();
+    }
+    protected override void RegisterContentEvents() {
+      base.RegisterContentEvents();
+      Content.PropertyChanged += new PropertyChangedEventHandler(Content_PropertyChanged);
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      if (Content == null) {
+        dataTypeComboBox.SelectedIndex = -1;
+        viewHost.Content = null;
+        noViewAvailableLabel.Visible = false;
+      } else {
+        dataTypeComboBox.SelectedItem = dataTypeComboBoxValues.FirstOrDefault(d => d.Id == Content.DataTypeId);
+
+        using (MemoryStream stream = new MemoryStream(Content.Data)) {
+          try {
+            viewHost.Content = XmlParser.Deserialize<IContent>(stream);
+            noViewAvailableLabel.Visible = false;
+          }
+          catch (Exception) {
+            viewHost.Content = null;
+            noViewAvailableLabel.Visible = true;
+          }
+          stream.Close();
+        }
+      }
+      fileTextBox.Text = "-";
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      newDataButton.Enabled = !ReadOnly;
+      openFileButton.Enabled = !ReadOnly;
+      saveFileButton.Enabled = (Content != null) && (((Content.Data != null) && (Content.Data.Length != 0)) || (viewHost.Content != null));
+      storeDataButton.Enabled = saveFileButton.Enabled && (Content.ProblemId != 0) && !ReadOnly;
+      dataTypeComboBox.Enabled = Content != null && viewHost.Content == null && !ReadOnly;
+      fileTextBox.Enabled = Content != null;
+      groupBox.Enabled = Content != null;
+    }
+
+    private void Content_PropertyChanged(object sender, PropertyChangedEventArgs e) {
+      switch (e.PropertyName) {
+        case "DataTypeId":
+          dataTypeComboBox.SelectedItem = dataTypeComboBoxValues.FirstOrDefault(d => d.Id == Content.DataTypeId);
+          break;
+      }
+    }
+
+    private void refreshDataButton_Click(object sender, EventArgs e) {
+      BeginAsyncCall();
+      var call = new Action(delegate() {
+        ProblemData data = OKBClient.Instance.GetProblemData(ProblemId);
+        Content = data;
+      });
+      call.BeginInvoke(delegate(IAsyncResult result) {
+        call.EndInvoke(result);
+        EndAsyncCall();
+      }, null);
+    }
+    private void storeDataButton_Click(object sender, EventArgs e) {
+      if (viewHost.Content != null) {
+        try {
+          using (MemoryStream stream = new MemoryStream()) {
+            IProblem problem = viewHost.Content as IProblem;
+            XmlGenerator.Serialize(problem, stream);
+            stream.Close();
+            Content.Data = stream.ToArray();
+          }
+        }
+        catch (Exception ex) {
+          ErrorHandling.ShowErrorDialog(this, ex);
+        }
+      }
+      OKBClient.Instance.UpdateProblemData(Content);
+    }
+    private void newDataButton_Click(object sender, EventArgs e) {
+      using (TypeSelectorDialog dialog = new TypeSelectorDialog()) {
+        dialog.Caption = "Select Problem";
+        dialog.TypeSelector.Caption = "Available Problems";
+        dialog.TypeSelector.Configure(typeof(IProblem), false, true);
+        if (dialog.ShowDialog(this) == DialogResult.OK) {
+          try {
+            if (Content == null) Content = new ProblemData { ProblemId = ProblemId };
+            viewHost.Content = (IContent)dialog.TypeSelector.CreateInstanceOfSelectedType();
+            DataType dataType = OKBClient.Instance.ConvertToDataType(viewHost.Content.GetType());
+            dataTypeComboBoxValues = OKBClient.Instance.DataTypes.OrderBy(d => d.Name).ToList();
+            dataTypeComboBox.DataSource = dataTypeComboBoxValues;
+            dataTypeComboBox.SelectedItem = dataType;
+            fileTextBox.Text = "-";
+            noViewAvailableLabel.Visible = false;
+            SetEnabledStateOfControls();
+          }
+          catch (Exception ex) {
+            ErrorHandling.ShowErrorDialog(this, ex);
+          }
+        }
+      }
+    }
+    private void openFileButton_Click(object sender, EventArgs e) {
+      if (openFileDialog.ShowDialog(this) == DialogResult.OK) {
+        try {
+          if (Content == null) Content = new ProblemData { ProblemId = ProblemId };
+          IProblem problem = null;
+          try {
+            problem = XmlParser.Deserialize<IProblem>(openFileDialog.FileName);
+          }
+          catch (Exception) { }
+
+          if (problem != null) {
+            viewHost.Content = problem;
+            noViewAvailableLabel.Visible = false;
+            DataType dataType = OKBClient.Instance.ConvertToDataType(viewHost.Content.GetType());
+            dataTypeComboBoxValues = OKBClient.Instance.DataTypes.OrderBy(d => d.Name).ToList();
+            dataTypeComboBox.DataSource = dataTypeComboBoxValues;
+            dataTypeComboBox.SelectedItem = dataType;
+          } else {
+            viewHost.Content = null;
+            noViewAvailableLabel.Visible = true;
+            using (FileStream stream = new FileStream(openFileDialog.FileName, FileMode.Open, FileAccess.Read)) {
+              byte[] bytes = new byte[stream.Length];
+              stream.Read(bytes, 0, bytes.Length);
+              stream.Close();
+              Content.Data = bytes;
+            }
+          }
+          fileTextBox.Text = openFileDialog.FileName;
+          SetEnabledStateOfControls();
+        }
+        catch (Exception ex) {
+          ErrorHandling.ShowErrorDialog(this, ex);
+        }
+      }
+    }
+    private void saveFileButton_Click(object sender, EventArgs e) {
+      if (saveFileDialog.ShowDialog(this) == DialogResult.OK) {
+        try {
+          if (viewHost.Content != null) {
+            XmlGenerator.Serialize(viewHost.Content, saveFileDialog.FileName);
+          } else {
+            using (FileStream stream = new FileStream(saveFileDialog.FileName, FileMode.Create, FileAccess.Write)) {
+              stream.Write(Content.Data, 0, Content.Data.Length);
+              stream.Close();
+            }
+          }
+          fileTextBox.Text = saveFileDialog.FileName;
+        }
+        catch (Exception ex) {
+          ErrorHandling.ShowErrorDialog(this, ex);
+        }
+      }
+    }
+    private void dataTypeComboBox_SelectedIndexChanged(object sender, EventArgs e) {
+      if (Content != null) Content.DataTypeId = ((DataType)dataTypeComboBox.SelectedItem).Id;
+    }
+
+    private void BeginAsyncCall() {
+      if (InvokeRequired)
+        Invoke(new Action(BeginAsyncCall));
+      else {
+        Cursor = Cursors.AppStarting;
+        Enabled = false;
+      }
+    }
+    private void EndAsyncCall() {
+      if (InvokeRequired)
+        Invoke(new Action(EndAsyncCall));
+      else {
+        Cursor = Cursors.Default;
+        Enabled = true;
+      }
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/ProblemParameterCollectionView.Designer.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/ProblemParameterCollectionView.Designer.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/ProblemParameterCollectionView.Designer.cs	(revision 5296)
@@ -0,0 +1,53 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Clients.OKB {
+  partial class ProblemParameterCollectionView {
+    /// <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) {
+        if (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() {
+      components = new System.ComponentModel.Container();
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+    }
+
+    #endregion
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/ProblemParameterCollectionView.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/ProblemParameterCollectionView.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/ProblemParameterCollectionView.cs	(revision 5296)
@@ -0,0 +1,40 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Windows.Forms;
+using HeuristicLab.Core;
+using HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
+
+namespace HeuristicLab.Clients.OKB {
+  [View("ProblemParameterCollection View")]
+  [Content(typeof(IItemCollection<ProblemParameter>), true)]
+  public partial class ProblemParameterCollectionView : ItemCollectionView<ProblemParameter> {
+    public ProblemParameterCollectionView() {
+      InitializeComponent();
+      itemsGroupBox.Text = "Problem Parameters";
+    }
+
+    protected override ProblemParameter CreateItem() {
+      return new ProblemParameter();
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/ProblemParameterView.Designer.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/ProblemParameterView.Designer.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/ProblemParameterView.Designer.cs	(revision 5296)
@@ -0,0 +1,129 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Clients.OKB {
+  partial class ProblemParameterView {
+    /// <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) {
+        if (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.aliasLabel = new System.Windows.Forms.Label();
+      this.aliasTextBox = new System.Windows.Forms.TextBox();
+      this.dataTypeLabel = new System.Windows.Forms.Label();
+      this.dataTypeComboBox = new System.Windows.Forms.ComboBox();
+      this.SuspendLayout();
+      // 
+      // storeButton
+      // 
+      this.toolTip.SetToolTip(this.storeButton, "Store Data");
+      // 
+      // aliasLabel
+      // 
+      this.aliasLabel.AutoSize = true;
+      this.aliasLabel.Location = new System.Drawing.Point(3, 84);
+      this.aliasLabel.Name = "aliasLabel";
+      this.aliasLabel.Size = new System.Drawing.Size(32, 13);
+      this.aliasLabel.TabIndex = 5;
+      this.aliasLabel.Text = "Alias:";
+      // 
+      // aliasTextBox
+      // 
+      this.aliasTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.aliasTextBox.Location = new System.Drawing.Point(72, 81);
+      this.aliasTextBox.Name = "aliasTextBox";
+      this.aliasTextBox.Size = new System.Drawing.Size(278, 20);
+      this.aliasTextBox.TabIndex = 6;
+      this.aliasTextBox.TextChanged += new System.EventHandler(this.aliasTextBox_TextChanged);
+      this.aliasTextBox.KeyDown += new System.Windows.Forms.KeyEventHandler(this.aliasTextBox_KeyDown);
+      // 
+      // dataTypeLabel
+      // 
+      this.dataTypeLabel.AutoSize = true;
+      this.dataTypeLabel.Location = new System.Drawing.Point(3, 110);
+      this.dataTypeLabel.Name = "dataTypeLabel";
+      this.dataTypeLabel.Size = new System.Drawing.Size(60, 13);
+      this.dataTypeLabel.TabIndex = 7;
+      this.dataTypeLabel.Text = "Data Type:";
+      // 
+      // dataTypeComboBox
+      // 
+      this.dataTypeComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.dataTypeComboBox.FormattingEnabled = true;
+      this.dataTypeComboBox.Location = new System.Drawing.Point(72, 107);
+      this.dataTypeComboBox.Name = "dataTypeComboBox";
+      this.dataTypeComboBox.Size = new System.Drawing.Size(278, 21);
+      this.dataTypeComboBox.TabIndex = 8;
+      this.dataTypeComboBox.SelectedIndexChanged += new System.EventHandler(this.dataTypeComboBox_SelectedIndexChanged);
+      // 
+      // ProblemParameterView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.aliasTextBox);
+      this.Controls.Add(this.aliasLabel);
+      this.Controls.Add(this.dataTypeComboBox);
+      this.Controls.Add(this.dataTypeLabel);
+      this.Name = "ProblemParameterView";
+      this.Size = new System.Drawing.Size(350, 147);
+      this.Controls.SetChildIndex(this.dataTypeLabel, 0);
+      this.Controls.SetChildIndex(this.dataTypeComboBox, 0);
+      this.Controls.SetChildIndex(this.aliasLabel, 0);
+      this.Controls.SetChildIndex(this.aliasTextBox, 0);
+      this.Controls.SetChildIndex(this.storeButton, 0);
+      this.Controls.SetChildIndex(this.nameTextBox, 0);
+      this.Controls.SetChildIndex(this.nameLabel, 0);
+      this.Controls.SetChildIndex(this.descriptionLabel, 0);
+      this.Controls.SetChildIndex(this.descriptionTextBox, 0);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Label aliasLabel;
+    private System.Windows.Forms.TextBox aliasTextBox;
+    private System.Windows.Forms.Label dataTypeLabel;
+    private System.Windows.Forms.ComboBox dataTypeComboBox;
+
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/ProblemParameterView.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/ProblemParameterView.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/ProblemParameterView.cs	(revision 5296)
@@ -0,0 +1,97 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Windows.Forms;
+using HeuristicLab.MainForm;
+using HeuristicLab.MainForm.WindowsForms;
+
+namespace HeuristicLab.Clients.OKB {
+  [View("ProblemParameter View")]
+  [Content(typeof(ProblemParameter), true)]
+  public partial class ProblemParameterView : NamedOKBItemView {
+    private List<DataType> dataTypeComboBoxValues;
+
+    public new ProblemParameter Content {
+      get { return (ProblemParameter)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public ProblemParameterView() {
+      InitializeComponent();
+    }
+
+    protected override void OnInitialized(System.EventArgs e) {
+      base.OnInitialized(e);
+      dataTypeComboBoxValues = OKBClient.Instance.DataTypes.ToList();
+      dataTypeComboBox.DataSource = dataTypeComboBoxValues;
+      dataTypeComboBox.SelectedIndex = -1;
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      if (Content == null) {
+        aliasTextBox.Text = string.Empty;
+        dataTypeComboBox.SelectedIndex = -1;
+      } else {
+        aliasTextBox.Text = Content.Alias;
+        dataTypeComboBox.SelectedItem = dataTypeComboBoxValues.FirstOrDefault(d => d.Id == Content.DataTypeId);
+      }
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      aliasTextBox.Enabled = Content != null;
+      aliasTextBox.ReadOnly = ReadOnly;
+      dataTypeComboBox.Enabled = Content != null && !ReadOnly;
+    }
+
+    protected override void OnContentPropertyChanged(string propertyName) {
+      switch (propertyName) {
+        case "Alias":
+          aliasTextBox.Text = Content.Alias;
+          break;
+        case "DataTypeId":
+          dataTypeComboBox.SelectedItem = dataTypeComboBoxValues.FirstOrDefault(d => d.Id == Content.DataTypeId);
+          break;
+      }
+    }
+
+    protected virtual void aliasTextBox_KeyDown(object sender, KeyEventArgs e) {
+      if ((e.KeyCode == Keys.Enter) || (e.KeyCode == Keys.Return))
+        aliasLabel.Focus();  // set focus on label to validate data
+      if (e.KeyCode == Keys.Escape) {
+        aliasTextBox.Text = Content.Alias;
+        aliasLabel.Focus();  // set focus on label to validate data
+      }
+    }
+    protected virtual void aliasTextBox_TextChanged(object sender, EventArgs e) {
+      if (aliasTextBox.Text != Content.Alias)
+        Content.Alias = aliasTextBox.Text;
+    }
+
+    private void dataTypeComboBox_SelectedIndexChanged(object sender, EventArgs e) {
+      if (Content != null) Content.DataTypeId = ((DataType)dataTypeComboBox.SelectedItem).Id;
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/ProblemView.Designer.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/ProblemView.Designer.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/ProblemView.Designer.cs	(revision 5296)
@@ -0,0 +1,249 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Clients.OKB {
+  partial class ProblemView {
+    /// <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) {
+        if (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.platformLabel = new System.Windows.Forms.Label();
+      this.platformComboBox = new System.Windows.Forms.ComboBox();
+      this.problemClassLabel = new System.Windows.Forms.Label();
+      this.problemClassComboBox = new System.Windows.Forms.ComboBox();
+      this.usersListBox = new System.Windows.Forms.ListBox();
+      this.tabControl = new System.Windows.Forms.TabControl();
+      this.usersTabPage = new System.Windows.Forms.TabPage();
+      this.storeUsersButton = new System.Windows.Forms.Button();
+      this.refreshUsersButton = new System.Windows.Forms.Button();
+      this.dataTabPage = new System.Windows.Forms.TabPage();
+      this.problemDataView = new HeuristicLab.Clients.OKB.ProblemDataView();
+      this.tabControl.SuspendLayout();
+      this.usersTabPage.SuspendLayout();
+      this.dataTabPage.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // nameTextBox
+      // 
+      this.nameTextBox.Location = new System.Drawing.Point(90, 29);
+      this.nameTextBox.Size = new System.Drawing.Size(543, 20);
+      // 
+      // descriptionTextBox
+      // 
+      this.descriptionTextBox.Location = new System.Drawing.Point(90, 55);
+      this.descriptionTextBox.Size = new System.Drawing.Size(543, 20);
+      // 
+      // storeButton
+      // 
+      this.toolTip.SetToolTip(this.storeButton, "Store Data");
+      // 
+      // platformLabel
+      // 
+      this.platformLabel.AutoSize = true;
+      this.platformLabel.Location = new System.Drawing.Point(3, 84);
+      this.platformLabel.Name = "platformLabel";
+      this.platformLabel.Size = new System.Drawing.Size(48, 13);
+      this.platformLabel.TabIndex = 5;
+      this.platformLabel.Text = "&Platform:";
+      // 
+      // platformComboBox
+      // 
+      this.platformComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.platformComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+      this.platformComboBox.FormattingEnabled = true;
+      this.platformComboBox.Location = new System.Drawing.Point(90, 81);
+      this.platformComboBox.Name = "platformComboBox";
+      this.platformComboBox.Size = new System.Drawing.Size(543, 21);
+      this.platformComboBox.TabIndex = 6;
+      this.platformComboBox.SelectedValueChanged += new System.EventHandler(this.platformComboBox_SelectedValueChanged);
+      // 
+      // problemClassLabel
+      // 
+      this.problemClassLabel.AutoSize = true;
+      this.problemClassLabel.Location = new System.Drawing.Point(3, 111);
+      this.problemClassLabel.Name = "problemClassLabel";
+      this.problemClassLabel.Size = new System.Drawing.Size(81, 13);
+      this.problemClassLabel.TabIndex = 7;
+      this.problemClassLabel.Text = "&Problem Class:";
+      // 
+      // problemClassComboBox
+      // 
+      this.problemClassComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.problemClassComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+      this.problemClassComboBox.FormattingEnabled = true;
+      this.problemClassComboBox.Location = new System.Drawing.Point(90, 108);
+      this.problemClassComboBox.Name = "problemClassComboBox";
+      this.problemClassComboBox.Size = new System.Drawing.Size(543, 21);
+      this.problemClassComboBox.TabIndex = 8;
+      this.problemClassComboBox.SelectedValueChanged += new System.EventHandler(this.problemClassComboBox_SelectedValueChanged);
+      // 
+      // usersListBox
+      // 
+      this.usersListBox.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.usersListBox.Enabled = false;
+      this.usersListBox.FormattingEnabled = true;
+      this.usersListBox.Location = new System.Drawing.Point(6, 36);
+      this.usersListBox.Name = "usersListBox";
+      this.usersListBox.SelectionMode = System.Windows.Forms.SelectionMode.MultiSimple;
+      this.usersListBox.Size = new System.Drawing.Size(613, 225);
+      this.usersListBox.TabIndex = 2;
+      this.usersListBox.SelectedIndexChanged += new System.EventHandler(this.usersListBox_SelectedIndexChanged);
+      // 
+      // tabControl
+      // 
+      this.tabControl.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.tabControl.Controls.Add(this.usersTabPage);
+      this.tabControl.Controls.Add(this.dataTabPage);
+      this.tabControl.Location = new System.Drawing.Point(0, 162);
+      this.tabControl.Name = "tabControl";
+      this.tabControl.SelectedIndex = 0;
+      this.tabControl.Size = new System.Drawing.Size(633, 292);
+      this.tabControl.TabIndex = 9;
+      // 
+      // usersTabPage
+      // 
+      this.usersTabPage.Controls.Add(this.storeUsersButton);
+      this.usersTabPage.Controls.Add(this.refreshUsersButton);
+      this.usersTabPage.Controls.Add(this.usersListBox);
+      this.usersTabPage.Location = new System.Drawing.Point(4, 22);
+      this.usersTabPage.Name = "usersTabPage";
+      this.usersTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.usersTabPage.Size = new System.Drawing.Size(625, 266);
+      this.usersTabPage.TabIndex = 0;
+      this.usersTabPage.Text = "Authorized Users";
+      this.usersTabPage.UseVisualStyleBackColor = true;
+      // 
+      // storeUsersButton
+      // 
+      this.storeUsersButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.PublishToWeb;
+      this.storeUsersButton.Location = new System.Drawing.Point(36, 6);
+      this.storeUsersButton.Name = "storeUsersButton";
+      this.storeUsersButton.Size = new System.Drawing.Size(24, 24);
+      this.storeUsersButton.TabIndex = 1;
+      this.toolTip.SetToolTip(this.storeUsersButton, "Store Authorized Users");
+      this.storeUsersButton.UseVisualStyleBackColor = true;
+      this.storeUsersButton.Click += new System.EventHandler(this.storeUsersButton_Click);
+      // 
+      // refreshUsersButton
+      // 
+      this.refreshUsersButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.Refresh;
+      this.refreshUsersButton.Location = new System.Drawing.Point(6, 6);
+      this.refreshUsersButton.Name = "refreshUsersButton";
+      this.refreshUsersButton.Size = new System.Drawing.Size(24, 24);
+      this.refreshUsersButton.TabIndex = 0;
+      this.toolTip.SetToolTip(this.refreshUsersButton, "Refresh Authorized Users");
+      this.refreshUsersButton.UseVisualStyleBackColor = true;
+      this.refreshUsersButton.Click += new System.EventHandler(this.refreshUsersButton_Click);
+      // 
+      // dataTabPage
+      // 
+      this.dataTabPage.Controls.Add(this.problemDataView);
+      this.dataTabPage.Location = new System.Drawing.Point(4, 22);
+      this.dataTabPage.Name = "dataTabPage";
+      this.dataTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.dataTabPage.Size = new System.Drawing.Size(625, 266);
+      this.dataTabPage.TabIndex = 1;
+      this.dataTabPage.Text = "Platform-Specific Problem Data";
+      this.dataTabPage.UseVisualStyleBackColor = true;
+      // 
+      // problemDataView
+      // 
+      this.problemDataView.ProblemId = ((long)(0));
+      this.problemDataView.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.problemDataView.Caption = "ProblemData View";
+      this.problemDataView.Content = null;
+      this.problemDataView.Location = new System.Drawing.Point(6, 6);
+      this.problemDataView.Name = "problemDataView";
+      this.problemDataView.ReadOnly = false;
+      this.problemDataView.Size = new System.Drawing.Size(613, 254);
+      this.problemDataView.TabIndex = 0;
+      // 
+      // ProblemView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.Controls.Add(this.tabControl);
+      this.Controls.Add(this.platformComboBox);
+      this.Controls.Add(this.platformLabel);
+      this.Controls.Add(this.problemClassComboBox);
+      this.Controls.Add(this.problemClassLabel);
+      this.Name = "ProblemView";
+      this.Size = new System.Drawing.Size(633, 454);
+      this.Controls.SetChildIndex(this.problemClassLabel, 0);
+      this.Controls.SetChildIndex(this.problemClassComboBox, 0);
+      this.Controls.SetChildIndex(this.platformLabel, 0);
+      this.Controls.SetChildIndex(this.platformComboBox, 0);
+      this.Controls.SetChildIndex(this.tabControl, 0);
+      this.Controls.SetChildIndex(this.storeButton, 0);
+      this.Controls.SetChildIndex(this.nameTextBox, 0);
+      this.Controls.SetChildIndex(this.nameLabel, 0);
+      this.Controls.SetChildIndex(this.descriptionLabel, 0);
+      this.Controls.SetChildIndex(this.descriptionTextBox, 0);
+      this.tabControl.ResumeLayout(false);
+      this.usersTabPage.ResumeLayout(false);
+      this.dataTabPage.ResumeLayout(false);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Label platformLabel;
+    private System.Windows.Forms.ComboBox platformComboBox;
+    private System.Windows.Forms.Label problemClassLabel;
+    private System.Windows.Forms.ComboBox problemClassComboBox;
+    private System.Windows.Forms.ListBox usersListBox;
+    private System.Windows.Forms.TabControl tabControl;
+    private System.Windows.Forms.TabPage usersTabPage;
+    private System.Windows.Forms.Button storeUsersButton;
+    private System.Windows.Forms.Button refreshUsersButton;
+    private System.Windows.Forms.TabPage dataTabPage;
+    private ProblemDataView problemDataView;
+
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/ProblemView.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/ProblemView.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/ProblemView.cs	(revision 5296)
@@ -0,0 +1,126 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Windows.Forms;
+using HeuristicLab.MainForm;
+using HeuristicLab.MainForm.WindowsForms;
+
+namespace HeuristicLab.Clients.OKB {
+  [View("Problem View")]
+  [Content(typeof(Problem), true)]
+  public partial class ProblemView : NamedOKBItemView {
+    private List<Platform> platformComboBoxValues;
+    private List<ProblemClass> problemClassComboBoxValues;
+
+    public new Problem Content {
+      get { return (Problem)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public ProblemView() {
+      InitializeComponent();
+    }
+
+    protected override void OnInitialized(System.EventArgs e) {
+      base.OnInitialized(e);
+      platformComboBoxValues = OKBClient.Instance.Platforms.ToList();
+      platformComboBox.DataSource = platformComboBoxValues;
+      problemClassComboBoxValues = OKBClient.Instance.ProblemClasses.ToList();
+      problemClassComboBox.DataSource = problemClassComboBoxValues;
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      if (Content == null) {
+        platformComboBox.SelectedIndex = -1;
+        problemClassComboBox.SelectedIndex = -1;
+        problemDataView.ProblemId = 0;
+      } else {
+        platformComboBox.SelectedItem = platformComboBoxValues.FirstOrDefault(p => p.Id == Content.PlatformId);
+        problemClassComboBox.SelectedItem = problemClassComboBoxValues.FirstOrDefault(a => a.Id == Content.ProblemClassId);
+        problemDataView.ProblemId = Content.Id;
+      }
+      usersListBox.DataSource = null;
+      problemDataView.Content = null;
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      platformComboBox.Enabled = (Content != null) && !ReadOnly;
+      problemClassComboBox.Enabled = (Content != null) && !ReadOnly;
+      refreshUsersButton.Enabled = Content != null;
+      storeUsersButton.Enabled = (usersListBox.DataSource != null) && !ReadOnly;
+      usersListBox.Enabled = (usersListBox.DataSource != null) && !ReadOnly;
+      problemDataView.Enabled = Content != null;
+    }
+
+    protected override void OnContentPropertyChanged(string propertyName) {
+      switch (propertyName) {
+        case "Id":
+          problemDataView.ProblemId = Content.Id;
+          break;
+        case "PlatformId":
+          platformComboBox.SelectedItem = platformComboBoxValues.FirstOrDefault(p => p.Id == Content.PlatformId);
+          break;
+        case "ProblemClassId":
+          problemClassComboBox.SelectedItem = problemClassComboBoxValues.FirstOrDefault(a => a.Id == Content.ProblemClassId);
+          break;
+      }
+    }
+
+    private void platformComboBox_SelectedValueChanged(object sender, System.EventArgs e) {
+      if (Content != null) {
+        Platform selected = platformComboBox.SelectedItem as Platform;
+        if (selected != null) Content.PlatformId = selected.Id;
+      }
+    }
+    private void problemClassComboBox_SelectedValueChanged(object sender, System.EventArgs e) {
+      if (Content != null) {
+        ProblemClass selected = problemClassComboBox.SelectedItem as ProblemClass;
+        if (selected != null) Content.ProblemClassId = selected.Id;
+      }
+    }
+
+    private void refreshUsersButton_Click(object sender, System.EventArgs e) {
+      List<Guid> ids = OKBClient.Instance.GetProblemUsers(Content.Id);
+      if (ids != null) {
+        List<User> users = OKBClient.Instance.Users.ToList();
+        usersListBox.DataSource = users;
+        usersListBox.DisplayMember = "Name";
+        usersListBox.SelectedItems.Clear();
+        foreach (Guid id in ids)
+          usersListBox.SelectedItems.Add(users.First(u => u.Id == id));
+        usersListBox.Enabled = !ReadOnly;
+        storeUsersButton.Enabled = false;
+      }
+    }
+    private void storeUsersButton_Click(object sender, System.EventArgs e) {
+      if (OKBClient.Instance.UpdateProblemUsers(Content.Id, usersListBox.SelectedItems.Cast<User>().Select(u => u.Id).ToList()))
+        storeUsersButton.Enabled = false;
+    }
+    private void usersListBox_SelectedIndexChanged(object sender, EventArgs e) {
+      storeUsersButton.Enabled = !ReadOnly;
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/QueryView.Designer.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/QueryView.Designer.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/QueryView.Designer.cs	(revision 5296)
@@ -0,0 +1,198 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Clients.OKB {
+  partial class QueryView {
+    /// <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) {
+        if (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.components = new System.ComponentModel.Container();
+      this.refreshResultsButton = new System.Windows.Forms.Button();
+      this.toolTip = new System.Windows.Forms.ToolTip(this.components);
+      this.showRunsButton = new System.Windows.Forms.Button();
+      this.runCollectionView = new HeuristicLab.Clients.OKB.RunCollectionView();
+      this.splitContainer = new System.Windows.Forms.SplitContainer();
+      this.filtersGroupBox = new System.Windows.Forms.GroupBox();
+      this.resultsGroupBox = new System.Windows.Forms.GroupBox();
+      this.nrOfRunsButton = new System.Windows.Forms.Button();
+      this.filterPanel = new System.Windows.Forms.Panel();
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).BeginInit();
+      this.splitContainer.Panel1.SuspendLayout();
+      this.splitContainer.Panel2.SuspendLayout();
+      this.splitContainer.SuspendLayout();
+      this.filtersGroupBox.SuspendLayout();
+      this.resultsGroupBox.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // refreshResultsButton
+      // 
+      this.refreshResultsButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.Refresh;
+      this.refreshResultsButton.Location = new System.Drawing.Point(6, 19);
+      this.refreshResultsButton.Name = "refreshResultsButton";
+      this.refreshResultsButton.Size = new System.Drawing.Size(24, 24);
+      this.refreshResultsButton.TabIndex = 0;
+      this.toolTip.SetToolTip(this.refreshResultsButton, "Refresh Results");
+      this.refreshResultsButton.UseVisualStyleBackColor = true;
+      this.refreshResultsButton.Click += new System.EventHandler(this.refreshResultsButton_Click);
+      // 
+      // showRunsButton
+      // 
+      this.showRunsButton.Location = new System.Drawing.Point(36, 19);
+      this.showRunsButton.Name = "showRunsButton";
+      this.showRunsButton.Size = new System.Drawing.Size(75, 24);
+      this.showRunsButton.TabIndex = 1;
+      this.showRunsButton.Text = "&Show Runs";
+      this.showRunsButton.UseVisualStyleBackColor = true;
+      this.showRunsButton.Click += new System.EventHandler(this.showRunsButton_Click);
+      // 
+      // runCollectionView
+      // 
+      this.runCollectionView.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.runCollectionView.Caption = "RunCollection View";
+      this.runCollectionView.Content = null;
+      this.runCollectionView.Location = new System.Drawing.Point(6, 49);
+      this.runCollectionView.Name = "runCollectionView";
+      this.runCollectionView.ReadOnly = false;
+      this.runCollectionView.Size = new System.Drawing.Size(722, 156);
+      this.runCollectionView.TabIndex = 2;
+      // 
+      // splitContainer
+      // 
+      this.splitContainer.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.splitContainer.Location = new System.Drawing.Point(0, 0);
+      this.splitContainer.Name = "splitContainer";
+      this.splitContainer.Orientation = System.Windows.Forms.Orientation.Horizontal;
+      // 
+      // splitContainer.Panel1
+      // 
+      this.splitContainer.Panel1.Controls.Add(this.filtersGroupBox);
+      // 
+      // splitContainer.Panel2
+      // 
+      this.splitContainer.Panel2.Controls.Add(this.resultsGroupBox);
+      this.splitContainer.Size = new System.Drawing.Size(734, 435);
+      this.splitContainer.SplitterDistance = 217;
+      this.splitContainer.TabIndex = 0;
+      // 
+      // filtersGroupBox
+      // 
+      this.filtersGroupBox.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.filtersGroupBox.Controls.Add(this.filterPanel);
+      this.filtersGroupBox.Location = new System.Drawing.Point(0, 0);
+      this.filtersGroupBox.Name = "filtersGroupBox";
+      this.filtersGroupBox.Size = new System.Drawing.Size(734, 214);
+      this.filtersGroupBox.TabIndex = 0;
+      this.filtersGroupBox.TabStop = false;
+      this.filtersGroupBox.Text = "Filters";
+      // 
+      // resultsGroupBox
+      // 
+      this.resultsGroupBox.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.resultsGroupBox.Controls.Add(this.nrOfRunsButton);
+      this.resultsGroupBox.Controls.Add(this.refreshResultsButton);
+      this.resultsGroupBox.Controls.Add(this.runCollectionView);
+      this.resultsGroupBox.Controls.Add(this.showRunsButton);
+      this.resultsGroupBox.Location = new System.Drawing.Point(0, 3);
+      this.resultsGroupBox.Name = "resultsGroupBox";
+      this.resultsGroupBox.Size = new System.Drawing.Size(734, 211);
+      this.resultsGroupBox.TabIndex = 0;
+      this.resultsGroupBox.TabStop = false;
+      this.resultsGroupBox.Text = "Results";
+      // 
+      // nrOfRunsButton
+      // 
+      this.nrOfRunsButton.Location = new System.Drawing.Point(117, 19);
+      this.nrOfRunsButton.Name = "nrOfRunsButton";
+      this.nrOfRunsButton.Size = new System.Drawing.Size(75, 23);
+      this.nrOfRunsButton.TabIndex = 3;
+      this.nrOfRunsButton.Text = "No. of Runs";
+      this.nrOfRunsButton.UseVisualStyleBackColor = true;
+      this.nrOfRunsButton.Click += new System.EventHandler(this.nrOfRunsButton_Click);
+      // 
+      // filterPanel
+      // 
+      this.filterPanel.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.filterPanel.Location = new System.Drawing.Point(6, 19);
+      this.filterPanel.Name = "filterPanel";
+      this.filterPanel.Size = new System.Drawing.Size(722, 189);
+      this.filterPanel.TabIndex = 0;
+      // 
+      // QueryView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.splitContainer);
+      this.Name = "QueryView";
+      this.Size = new System.Drawing.Size(734, 435);
+      this.splitContainer.Panel1.ResumeLayout(false);
+      this.splitContainer.Panel2.ResumeLayout(false);
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).EndInit();
+      this.splitContainer.ResumeLayout(false);
+      this.filtersGroupBox.ResumeLayout(false);
+      this.resultsGroupBox.ResumeLayout(false);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Button refreshResultsButton;
+    private System.Windows.Forms.ToolTip toolTip;
+    private RunCollectionView runCollectionView;
+    private System.Windows.Forms.Button showRunsButton;
+    private System.Windows.Forms.SplitContainer splitContainer;
+    private System.Windows.Forms.GroupBox filtersGroupBox;
+    private System.Windows.Forms.GroupBox resultsGroupBox;
+    private System.Windows.Forms.Button nrOfRunsButton;
+    private System.Windows.Forms.Panel filterPanel;
+
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/QueryView.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/QueryView.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/QueryView.cs	(revision 5296)
@@ -0,0 +1,89 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Linq;
+using System.Windows.Forms;
+using HeuristicLab.MainForm;
+using HeuristicLab.MainForm.WindowsForms;
+
+namespace HeuristicLab.Clients.OKB {
+  [View("OKB Query")]
+  [Content(typeof(OKBClient), false)]
+  public sealed partial class QueryView : HeuristicLab.MainForm.WindowsForms.View {
+    private AndFilterView andFilterView;
+
+    public QueryView() {
+      InitializeComponent();
+    }
+
+    protected override void OnInitialized(EventArgs e) {
+      base.OnInitialized(e);
+      this.Cursor = Cursors.AppStarting;
+
+      Func<AndFilter> func = () => {
+        return OKBClient.Instance.GetFilters().OfType<AndFilter>().FirstOrDefault();
+      };
+
+      func.BeginInvoke((IAsyncResult result) => {
+        AndFilter filter = func.EndInvoke(result);
+        if (InvokeRequired) Invoke(new Action<AndFilter>(FinishedLoadingAndFilter), filter);
+        else FinishedLoadingAndFilter(filter);
+      }, null);
+    }
+
+    private void FinishedLoadingAndFilter(AndFilter filter) {
+      if (filter != null) {
+        andFilterView = (AndFilterView)MainFormManager.CreateView(typeof(AndFilterView));
+        andFilterView.Content = (AndFilter)filter.Clone();
+        Control control = (Control)andFilterView;
+        control.Dock = DockStyle.Fill;
+        filterPanel.Controls.Add(control);
+      }
+      this.Cursor = Cursors.Default;
+      SetEnabledStateOfControls();
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      resultsGroupBox.Enabled = andFilterView != null;
+      showRunsButton.Enabled = (runCollectionView.Content != null) && (runCollectionView.Content.Count > 0);
+    }
+
+    private void refreshResultsButton_Click(object sender, EventArgs e) {
+      DateTime start = DateTime.Now;
+      runCollectionView.Content = OKBClient.Instance.QueryRuns(andFilterView.Content);
+      MessageBox.Show((DateTime.Now - start).ToString());
+      SetEnabledStateOfControls();
+    }
+
+    private void showRunsButton_Click(object sender, EventArgs e) {
+      DateTime start = DateTime.Now;
+      MainFormManager.MainForm.ShowContent(OKBClient.Instance.ConvertOKBRunsToOptimizationRuns(runCollectionView.Content));
+      MessageBox.Show((DateTime.Now - start).ToString());
+    }
+
+    private void nrOfRunsButton_Click(object sender, EventArgs e) {
+      long runs = OKBClient.Instance.QueryNumberOfRuns(andFilterView.Content);
+      MessageBox.Show(runs.ToString());
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/ResultCollectionView.Designer.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/ResultCollectionView.Designer.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/ResultCollectionView.Designer.cs	(revision 5296)
@@ -0,0 +1,53 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Clients.OKB {
+  partial class ResultCollectionView {
+    /// <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) {
+        if (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() {
+      components = new System.ComponentModel.Container();
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+    }
+
+    #endregion
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/ResultCollectionView.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/ResultCollectionView.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/ResultCollectionView.cs	(revision 5296)
@@ -0,0 +1,40 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Windows.Forms;
+using HeuristicLab.Core;
+using HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
+
+namespace HeuristicLab.Clients.OKB {
+  [View("ResultCollection View")]
+  [Content(typeof(IItemCollection<Result>), true)]
+  public partial class ResultCollectionView : ItemCollectionView<Result> {
+    public ResultCollectionView() {
+      InitializeComponent();
+      itemsGroupBox.Text = "Results";
+    }
+
+    protected override Result CreateItem() {
+      return new Result();
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/ResultView.Designer.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/ResultView.Designer.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/ResultView.Designer.cs	(revision 5296)
@@ -0,0 +1,129 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Clients.OKB {
+  partial class ResultView {
+    /// <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) {
+        if (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.aliasLabel = new System.Windows.Forms.Label();
+      this.aliasTextBox = new System.Windows.Forms.TextBox();
+      this.dataTypeLabel = new System.Windows.Forms.Label();
+      this.dataTypeComboBox = new System.Windows.Forms.ComboBox();
+      this.SuspendLayout();
+      // 
+      // storeButton
+      // 
+      this.toolTip.SetToolTip(this.storeButton, "Store Data");
+      // 
+      // aliasLabel
+      // 
+      this.aliasLabel.AutoSize = true;
+      this.aliasLabel.Location = new System.Drawing.Point(3, 84);
+      this.aliasLabel.Name = "aliasLabel";
+      this.aliasLabel.Size = new System.Drawing.Size(32, 13);
+      this.aliasLabel.TabIndex = 5;
+      this.aliasLabel.Text = "Alias:";
+      // 
+      // aliasTextBox
+      // 
+      this.aliasTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.aliasTextBox.Location = new System.Drawing.Point(72, 81);
+      this.aliasTextBox.Name = "aliasTextBox";
+      this.aliasTextBox.Size = new System.Drawing.Size(278, 20);
+      this.aliasTextBox.TabIndex = 6;
+      this.aliasTextBox.TextChanged += new System.EventHandler(this.aliasTextBox_TextChanged);
+      this.aliasTextBox.KeyDown += new System.Windows.Forms.KeyEventHandler(this.aliasTextBox_KeyDown);
+      // 
+      // dataTypeLabel
+      // 
+      this.dataTypeLabel.AutoSize = true;
+      this.dataTypeLabel.Location = new System.Drawing.Point(3, 110);
+      this.dataTypeLabel.Name = "dataTypeLabel";
+      this.dataTypeLabel.Size = new System.Drawing.Size(60, 13);
+      this.dataTypeLabel.TabIndex = 7;
+      this.dataTypeLabel.Text = "Data Type:";
+      // 
+      // dataTypeComboBox
+      // 
+      this.dataTypeComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.dataTypeComboBox.FormattingEnabled = true;
+      this.dataTypeComboBox.Location = new System.Drawing.Point(72, 107);
+      this.dataTypeComboBox.Name = "dataTypeComboBox";
+      this.dataTypeComboBox.Size = new System.Drawing.Size(278, 21);
+      this.dataTypeComboBox.TabIndex = 8;
+      this.dataTypeComboBox.SelectedIndexChanged += new System.EventHandler(this.dataTypeComboBox_SelectedIndexChanged);
+      // 
+      // ResultView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.aliasTextBox);
+      this.Controls.Add(this.aliasLabel);
+      this.Controls.Add(this.dataTypeComboBox);
+      this.Controls.Add(this.dataTypeLabel);
+      this.Name = "ResultView";
+      this.Size = new System.Drawing.Size(350, 147);
+      this.Controls.SetChildIndex(this.dataTypeLabel, 0);
+      this.Controls.SetChildIndex(this.dataTypeComboBox, 0);
+      this.Controls.SetChildIndex(this.aliasLabel, 0);
+      this.Controls.SetChildIndex(this.aliasTextBox, 0);
+      this.Controls.SetChildIndex(this.storeButton, 0);
+      this.Controls.SetChildIndex(this.nameTextBox, 0);
+      this.Controls.SetChildIndex(this.nameLabel, 0);
+      this.Controls.SetChildIndex(this.descriptionLabel, 0);
+      this.Controls.SetChildIndex(this.descriptionTextBox, 0);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Label aliasLabel;
+    private System.Windows.Forms.TextBox aliasTextBox;
+    private System.Windows.Forms.Label dataTypeLabel;
+    private System.Windows.Forms.ComboBox dataTypeComboBox;
+
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/ResultView.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/ResultView.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/ResultView.cs	(revision 5296)
@@ -0,0 +1,97 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Windows.Forms;
+using HeuristicLab.MainForm;
+using HeuristicLab.MainForm.WindowsForms;
+
+namespace HeuristicLab.Clients.OKB {
+  [View("Result View")]
+  [Content(typeof(Result), true)]
+  public partial class ResultView : NamedOKBItemView {
+    private List<DataType> dataTypeComboBoxValues;
+
+    public new Result Content {
+      get { return (Result)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public ResultView() {
+      InitializeComponent();
+    }
+
+    protected override void OnInitialized(System.EventArgs e) {
+      base.OnInitialized(e);
+      dataTypeComboBoxValues = OKBClient.Instance.DataTypes.ToList();
+      dataTypeComboBox.DataSource = dataTypeComboBoxValues;
+      dataTypeComboBox.SelectedIndex = -1;
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      if (Content == null) {
+        aliasTextBox.Text = string.Empty;
+        dataTypeComboBox.SelectedIndex = -1;
+      } else {
+        aliasTextBox.Text = Content.Alias;
+        dataTypeComboBox.SelectedItem = dataTypeComboBoxValues.FirstOrDefault(d => d.Id == Content.DataTypeId);
+      }
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      aliasTextBox.Enabled = Content != null;
+      aliasTextBox.ReadOnly = ReadOnly;
+      dataTypeComboBox.Enabled = Content != null && !ReadOnly;
+    }
+
+    protected override void OnContentPropertyChanged(string propertyName) {
+      switch (propertyName) {
+        case "Alias":
+          aliasTextBox.Text = Content.Alias;
+          break;
+        case "DataTypeId":
+          dataTypeComboBox.SelectedItem = dataTypeComboBoxValues.FirstOrDefault(d => d.Id == Content.DataTypeId);
+          break;
+      }
+    }
+
+    protected virtual void aliasTextBox_KeyDown(object sender, KeyEventArgs e) {
+      if ((e.KeyCode == Keys.Enter) || (e.KeyCode == Keys.Return))
+        aliasLabel.Focus();  // set focus on label to validate data
+      if (e.KeyCode == Keys.Escape) {
+        aliasTextBox.Text = Content.Alias;
+        aliasLabel.Focus();  // set focus on label to validate data
+      }
+    }
+    protected virtual void aliasTextBox_TextChanged(object sender, EventArgs e) {
+      if (aliasTextBox.Text != Content.Alias)
+        Content.Alias = aliasTextBox.Text;
+    }
+
+    private void dataTypeComboBox_SelectedIndexChanged(object sender, EventArgs e) {
+      if (Content != null) Content.DataTypeId = ((DataType)dataTypeComboBox.SelectedItem).Id;
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/RunCollectionView.Designer.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/RunCollectionView.Designer.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/RunCollectionView.Designer.cs	(revision 5296)
@@ -0,0 +1,53 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Clients.OKB {
+  partial class RunCollectionView {
+    /// <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) {
+        if (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() {
+      components = new System.ComponentModel.Container();
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+    }
+
+    #endregion
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/RunCollectionView.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/RunCollectionView.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/RunCollectionView.cs	(revision 5296)
@@ -0,0 +1,40 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Windows.Forms;
+using HeuristicLab.Core;
+using HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
+
+namespace HeuristicLab.Clients.OKB {
+  [View("RunCollection View")]
+  [Content(typeof(IItemCollection<Run>), true)]
+  public partial class RunCollectionView : ItemCollectionView<Run> {
+    public RunCollectionView() {
+      InitializeComponent();
+      itemsGroupBox.Text = "Runs";
+    }
+
+    protected override Run CreateItem() {
+      return new Run();
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/RunView.Designer.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/RunView.Designer.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/RunView.Designer.cs	(revision 5296)
@@ -0,0 +1,228 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Clients.OKB {
+  partial class RunView {
+    /// <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) {
+        if (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.components = new System.ComponentModel.Container();
+      this.randomSeedLabel = new System.Windows.Forms.Label();
+      this.randomSeedTextBox = new System.Windows.Forms.TextBox();
+      this.createdDateLabel = new System.Windows.Forms.Label();
+      this.createdDateTextBox = new System.Windows.Forms.TextBox();
+      this.resultsListView = new System.Windows.Forms.ListView();
+      this.nameColumnHeader = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+      this.valueColumnHeader = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+      this.imageList = new System.Windows.Forms.ImageList(this.components);
+      this.resultsGroupBox = new System.Windows.Forms.GroupBox();
+      this.userLabel = new System.Windows.Forms.Label();
+      this.clientLabel = new System.Windows.Forms.Label();
+      this.userTextBox = new System.Windows.Forms.TextBox();
+      this.clientTextBox = new System.Windows.Forms.TextBox();
+      this.resultsGroupBox.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // randomSeedLabel
+      // 
+      this.randomSeedLabel.AutoSize = true;
+      this.randomSeedLabel.Location = new System.Drawing.Point(3, 3);
+      this.randomSeedLabel.Name = "randomSeedLabel";
+      this.randomSeedLabel.Size = new System.Drawing.Size(78, 13);
+      this.randomSeedLabel.TabIndex = 0;
+      this.randomSeedLabel.Text = "Random Seed:";
+      // 
+      // randomSeedTextBox
+      // 
+      this.randomSeedTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.randomSeedTextBox.Location = new System.Drawing.Point(87, 0);
+      this.randomSeedTextBox.Name = "randomSeedTextBox";
+      this.randomSeedTextBox.ReadOnly = true;
+      this.randomSeedTextBox.Size = new System.Drawing.Size(426, 20);
+      this.randomSeedTextBox.TabIndex = 1;
+      // 
+      // createdDateLabel
+      // 
+      this.createdDateLabel.AutoSize = true;
+      this.createdDateLabel.Location = new System.Drawing.Point(3, 29);
+      this.createdDateLabel.Name = "createdDateLabel";
+      this.createdDateLabel.Size = new System.Drawing.Size(75, 13);
+      this.createdDateLabel.TabIndex = 2;
+      this.createdDateLabel.Text = "Created Date:";
+      // 
+      // createdDateTextBox
+      // 
+      this.createdDateTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.createdDateTextBox.Location = new System.Drawing.Point(87, 26);
+      this.createdDateTextBox.Name = "createdDateTextBox";
+      this.createdDateTextBox.ReadOnly = true;
+      this.createdDateTextBox.Size = new System.Drawing.Size(426, 20);
+      this.createdDateTextBox.TabIndex = 3;
+      // 
+      // resultsListView
+      // 
+      this.resultsListView.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.resultsListView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
+            this.nameColumnHeader,
+            this.valueColumnHeader});
+      this.resultsListView.FullRowSelect = true;
+      this.resultsListView.HideSelection = false;
+      this.resultsListView.Location = new System.Drawing.Point(6, 19);
+      this.resultsListView.MultiSelect = false;
+      this.resultsListView.Name = "resultsListView";
+      this.resultsListView.ShowGroups = false;
+      this.resultsListView.ShowItemToolTips = true;
+      this.resultsListView.Size = new System.Drawing.Size(501, 225);
+      this.resultsListView.SmallImageList = this.imageList;
+      this.resultsListView.Sorting = System.Windows.Forms.SortOrder.Ascending;
+      this.resultsListView.TabIndex = 0;
+      this.resultsListView.UseCompatibleStateImageBehavior = false;
+      this.resultsListView.View = System.Windows.Forms.View.Details;
+      this.resultsListView.DoubleClick += new System.EventHandler(this.resultsListView_DoubleClick);
+      // 
+      // nameColumnHeader
+      // 
+      this.nameColumnHeader.Text = "Name";
+      // 
+      // valueColumnHeader
+      // 
+      this.valueColumnHeader.Text = "Value";
+      // 
+      // imageList
+      // 
+      this.imageList.ColorDepth = System.Windows.Forms.ColorDepth.Depth8Bit;
+      this.imageList.ImageSize = new System.Drawing.Size(16, 16);
+      this.imageList.TransparentColor = System.Drawing.Color.Transparent;
+      // 
+      // resultsGroupBox
+      // 
+      this.resultsGroupBox.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.resultsGroupBox.Controls.Add(this.resultsListView);
+      this.resultsGroupBox.Location = new System.Drawing.Point(0, 104);
+      this.resultsGroupBox.Name = "resultsGroupBox";
+      this.resultsGroupBox.Size = new System.Drawing.Size(513, 250);
+      this.resultsGroupBox.TabIndex = 8;
+      this.resultsGroupBox.TabStop = false;
+      this.resultsGroupBox.Text = "Results";
+      // 
+      // userLabel
+      // 
+      this.userLabel.AutoSize = true;
+      this.userLabel.Location = new System.Drawing.Point(3, 55);
+      this.userLabel.Name = "userLabel";
+      this.userLabel.Size = new System.Drawing.Size(32, 13);
+      this.userLabel.TabIndex = 4;
+      this.userLabel.Text = "User:";
+      // 
+      // clientLabel
+      // 
+      this.clientLabel.AutoSize = true;
+      this.clientLabel.Location = new System.Drawing.Point(3, 81);
+      this.clientLabel.Name = "clientLabel";
+      this.clientLabel.Size = new System.Drawing.Size(36, 13);
+      this.clientLabel.TabIndex = 6;
+      this.clientLabel.Text = "Client:";
+      // 
+      // userTextBox
+      // 
+      this.userTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.userTextBox.Location = new System.Drawing.Point(87, 52);
+      this.userTextBox.Name = "userTextBox";
+      this.userTextBox.ReadOnly = true;
+      this.userTextBox.Size = new System.Drawing.Size(426, 20);
+      this.userTextBox.TabIndex = 5;
+      // 
+      // clientTextBox
+      // 
+      this.clientTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.clientTextBox.Location = new System.Drawing.Point(87, 78);
+      this.clientTextBox.Name = "clientTextBox";
+      this.clientTextBox.ReadOnly = true;
+      this.clientTextBox.Size = new System.Drawing.Size(426, 20);
+      this.clientTextBox.TabIndex = 7;
+      // 
+      // RunView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.resultsGroupBox);
+      this.Controls.Add(this.clientTextBox);
+      this.Controls.Add(this.userTextBox);
+      this.Controls.Add(this.createdDateTextBox);
+      this.Controls.Add(this.randomSeedTextBox);
+      this.Controls.Add(this.clientLabel);
+      this.Controls.Add(this.userLabel);
+      this.Controls.Add(this.createdDateLabel);
+      this.Controls.Add(this.randomSeedLabel);
+      this.Name = "RunView";
+      this.Size = new System.Drawing.Size(513, 354);
+      this.resultsGroupBox.ResumeLayout(false);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Label randomSeedLabel;
+    private System.Windows.Forms.TextBox randomSeedTextBox;
+    private System.Windows.Forms.Label createdDateLabel;
+    private System.Windows.Forms.TextBox createdDateTextBox;
+    private System.Windows.Forms.ListView resultsListView;
+    private System.Windows.Forms.ColumnHeader nameColumnHeader;
+    private System.Windows.Forms.ColumnHeader valueColumnHeader;
+    private System.Windows.Forms.ImageList imageList;
+    private System.Windows.Forms.GroupBox resultsGroupBox;
+    private System.Windows.Forms.Label userLabel;
+    private System.Windows.Forms.Label clientLabel;
+    private System.Windows.Forms.TextBox userTextBox;
+    private System.Windows.Forms.TextBox clientTextBox;
+
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/RunView.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/RunView.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/RunView.cs	(revision 5296)
@@ -0,0 +1,119 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.IO;
+using System.Linq;
+using System.Windows.Forms;
+using HeuristicLab.Common;
+using HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
+using HeuristicLab.MainForm.WindowsForms;
+using HeuristicLab.Persistence.Default.Xml;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Clients.OKB {
+  [View("Run View")]
+  [Content(typeof(Run), true)]
+  public partial class RunView : ItemView {
+    public new Run Content {
+      get { return (Run)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public RunView() {
+      InitializeComponent();
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      if (Content == null) {
+        randomSeedTextBox.Text = string.Empty;
+        createdDateTextBox.Text = string.Empty;
+        userTextBox.Text = string.Empty;
+        clientTextBox.Text = string.Empty;
+      } else {
+        randomSeedTextBox.Text = Content.RandomSeed.ToString();
+        createdDateTextBox.Text = Content.CreatedDate.ToString();
+        userTextBox.Text = Content.UserId.ToString();
+        clientTextBox.Text = Content.ClientId.ToString();
+      }
+      FillResultsListView();
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      randomSeedTextBox.Enabled = Content != null;
+      createdDateTextBox.Enabled = Content != null;
+      userTextBox.Enabled = Content != null;
+      clientTextBox.Enabled = Content != null;
+      resultsGroupBox.Enabled = Content != null;
+    }
+
+    private void FillResultsListView() {
+      resultsListView.Items.Clear();
+      resultsListView.SmallImageList.Images.Clear();
+      if (Content != null) {
+        foreach (ResultValue resultValue in Content.ResultValues) {
+          Result result = OKBClient.Instance.GetResult(resultValue.ResultId);
+          ListViewItem item = new ListViewItem(result.Name);
+          item.ToolTipText = result.Description;
+          if (resultValue is ResultBoolValue) {
+            item.SubItems.Add(((ResultBoolValue)resultValue).Value.ToString());
+          } else if (resultValue is ResultIntValue) {
+            item.SubItems.Add(((ResultIntValue)resultValue).Value.ToString());
+          } else if (resultValue is ResultFloatValue) {
+            item.SubItems.Add(((ResultFloatValue)resultValue).Value.ToString());
+          } else if (resultValue is ResultStringValue) {
+            item.SubItems.Add(((ResultStringValue)resultValue).Value);
+          } else if (resultValue is ResultBlobValue) {
+            DataType dataType = OKBClient.Instance.DataTypes.FirstOrDefault(x => x.Id == resultValue.DataTypeId);
+            item.SubItems.Add(dataType == null ? "-" : dataType.Name);
+            item.Tag = resultValue;
+          }
+          resultsListView.Items.Add(item);
+        }
+
+        if (resultsListView.Items.Count > 0) {
+          for (int i = 0; i < resultsListView.Columns.Count; i++)
+            resultsListView.Columns[i].AutoResize(ColumnHeaderAutoResizeStyle.ColumnContent);
+        }
+      }
+    }
+
+    private void resultsListView_DoubleClick(object sender, System.EventArgs e) {
+      if ((resultsListView.SelectedItems.Count == 1) && (resultsListView.SelectedItems[0].Tag != null)) {
+        ResultBlobValue value = resultsListView.SelectedItems[0].Tag as ResultBlobValue;
+        if (value != null) {
+          using (MemoryStream stream = new MemoryStream(value.Value)) {
+            try {
+              MainFormManager.MainForm.ShowContent(XmlParser.Deserialize<IContent>(stream));
+            }
+            catch (Exception ex) {
+              ErrorHandling.ShowErrorDialog(ex);
+            }
+            stream.Close();
+          }
+        }
+      }
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/SetComparisonFilterView.Designer.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/SetComparisonFilterView.Designer.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/SetComparisonFilterView.Designer.cs	(revision 5296)
@@ -0,0 +1,90 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Clients.OKB {
+  partial class SetComparisonFilterView {
+    /// <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) {
+        if (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.comparisonComboBox = new System.Windows.Forms.ComboBox();
+      this.SuspendLayout();
+      // 
+      // label
+      // 
+      this.label.Location = new System.Drawing.Point(3, 8);
+      // 
+      // comparisonComboBox
+      // 
+      this.comparisonComboBox.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.comparisonComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+      this.comparisonComboBox.FormattingEnabled = true;
+      this.comparisonComboBox.Items.AddRange(new object[] {
+            "=",
+            "<>",
+            "contains",
+            "not contains"});
+      this.comparisonComboBox.Location = new System.Drawing.Point(254, 8);
+      this.comparisonComboBox.Name = "comparisonComboBox";
+      this.comparisonComboBox.Size = new System.Drawing.Size(104, 21);
+      this.comparisonComboBox.TabIndex = 1;
+      this.comparisonComboBox.SelectedIndexChanged += new System.EventHandler(this.comparisonComboBox_SelectedIndexChanged);
+      // 
+      // SetComparisonFilterView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.comparisonComboBox);
+      this.Name = "SetComparisonFilterView";
+      this.Size = new System.Drawing.Size(516, 36);
+      this.Controls.SetChildIndex(this.comparisonComboBox, 0);
+      this.Controls.SetChildIndex(this.label, 0);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    protected System.Windows.Forms.ComboBox comparisonComboBox;
+
+
+
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/SetComparisonFilterView.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/SetComparisonFilterView.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/SetComparisonFilterView.cs	(revision 5296)
@@ -0,0 +1,72 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Windows.Forms;
+using HeuristicLab.MainForm;
+using HeuristicLab.MainForm.WindowsForms;
+
+namespace HeuristicLab.Clients.OKB {
+  [View("SetComparisonFilter View")]
+  [Content(typeof(SetComparisonFilter), true)]
+  public partial class SetComparisonFilterView : FilterView {
+    public new SetComparisonFilter Content {
+      get { return (SetComparisonFilter)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public SetComparisonFilterView() {
+      InitializeComponent();
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      comparisonComboBox.SelectedIndex = -1;
+      if (Content != null) {
+        if (Content.Comparison == SetComparison.Equal)
+          comparisonComboBox.SelectedItem = "=";
+        else if (Content.Comparison == SetComparison.NotEqual)
+          comparisonComboBox.SelectedItem = "<>";
+        else if (Content.Comparison == SetComparison.Contains)
+          comparisonComboBox.SelectedItem = "contains";
+        else if (Content.Comparison == SetComparison.NotContains)
+          comparisonComboBox.SelectedItem = "not contains";
+      }
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      comparisonComboBox.Enabled = Content != null && !ReadOnly;
+    }
+
+    private void comparisonComboBox_SelectedIndexChanged(object sender, System.EventArgs e) {
+      if (Content != null) {
+        if (comparisonComboBox.SelectedItem == "=")
+          Content.Comparison = SetComparison.Equal;
+        else if (comparisonComboBox.SelectedItem == "<>")
+          Content.Comparison = SetComparison.NotEqual;
+        else if (comparisonComboBox.SelectedItem == "contains")
+          Content.Comparison = SetComparison.Contains;
+        else if (comparisonComboBox.SelectedItem == "not contains")
+          Content.Comparison = SetComparison.NotContains;
+      }
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/SetComparisonStringAvailableValuesFilterView.Designer.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/SetComparisonStringAvailableValuesFilterView.Designer.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/SetComparisonStringAvailableValuesFilterView.Designer.cs	(revision 5296)
@@ -0,0 +1,93 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Clients.OKB {
+  partial class SetComparisonStringAvailableValuesFilterView {
+    /// <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) {
+        if (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.valueComboBox = new System.Windows.Forms.ComboBox();
+      this.SuspendLayout();
+      // 
+      // comparisonComboBox
+      // 
+      this.comparisonComboBox.Location = new System.Drawing.Point(211, 8);
+      this.comparisonComboBox.Size = new System.Drawing.Size(94, 21);
+      // 
+      // label
+      // 
+      this.label.Size = new System.Drawing.Size(202, 20);
+      // 
+      // valueComboBox
+      // 
+      this.valueComboBox.Anchor = System.Windows.Forms.AnchorStyles.Right;
+      this.valueComboBox.FormattingEnabled = true;
+      this.valueComboBox.Location = new System.Drawing.Point(357, 8);
+      this.valueComboBox.MaxDropDownItems = 32;
+      this.valueComboBox.Name = "valueComboBox";
+      this.valueComboBox.Size = new System.Drawing.Size(159, 21);
+      this.valueComboBox.TabIndex = 2;
+      this.valueComboBox.Validated += new System.EventHandler(this.valueComboBox_Validated);
+      // 
+      // SetComparisonStringAvailableValuesFilterView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.valueComboBox);
+      this.Name = "SetComparisonStringAvailableValuesFilterView";
+      this.Controls.SetChildIndex(this.valueComboBox, 0);
+      this.Controls.SetChildIndex(this.comparisonComboBox, 0);
+      this.Controls.SetChildIndex(this.label, 0);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.ComboBox valueComboBox;
+
+
+
+
+
+
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/SetComparisonStringAvailableValuesFilterView.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/SetComparisonStringAvailableValuesFilterView.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/SetComparisonStringAvailableValuesFilterView.cs	(revision 5296)
@@ -0,0 +1,65 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Windows.Forms;
+using HeuristicLab.MainForm;
+using HeuristicLab.MainForm.WindowsForms;
+
+namespace HeuristicLab.Clients.OKB {
+  [View("SetComparisonStringAvailableValuesFilter View")]
+  [Content(typeof(SetComparisonStringAvailableValuesFilter), true)]
+  public partial class SetComparisonStringAvailableValuesFilterView : SetComparisonFilterView {
+    public new SetComparisonStringAvailableValuesFilter Content {
+      get { return (SetComparisonStringAvailableValuesFilter)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public SetComparisonStringAvailableValuesFilterView() {
+      InitializeComponent();
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      valueComboBox.DataSource = Content == null ? null : Content.AvailableValues;
+      valueComboBox.Text = Content == null ? string.Empty : Content.Value;
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      valueComboBox.Enabled = Content != null && !ReadOnly;
+    }
+
+    private void valueTextBox_KeyDown(object sender, KeyEventArgs e) {
+      if ((e.KeyCode == Keys.Enter) || (e.KeyCode == Keys.Return))
+        label.Focus();  // set focus on label to validate data
+      if (e.KeyCode == Keys.Escape) {
+        valueComboBox.Text = Content.Value;
+        label.Focus();  // set focus on label to validate data
+      }
+    }
+    private void valueComboBox_Validated(object sender, System.EventArgs e) {
+      if (Content != null) {
+        Content.Value = valueComboBox.Text;
+      }
+
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/SetComparisonStringFilterView.Designer.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/SetComparisonStringFilterView.Designer.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/SetComparisonStringFilterView.Designer.cs	(revision 5296)
@@ -0,0 +1,92 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Clients.OKB {
+  partial class SetComparisonStringFilterView {
+    /// <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) {
+        if (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.valueTextBox = new System.Windows.Forms.TextBox();
+      this.SuspendLayout();
+      // 
+      // comparisonComboBox
+      // 
+      this.comparisonComboBox.Location = new System.Drawing.Point(211, 8);
+      this.comparisonComboBox.Size = new System.Drawing.Size(94, 21);
+      // 
+      // label
+      // 
+      this.label.Size = new System.Drawing.Size(202, 20);
+      // 
+      // valueTextBox
+      // 
+      this.valueTextBox.Anchor = System.Windows.Forms.AnchorStyles.Right;
+      this.valueTextBox.Location = new System.Drawing.Point(367, 8);
+      this.valueTextBox.Name = "valueTextBox";
+      this.valueTextBox.Size = new System.Drawing.Size(149, 20);
+      this.valueTextBox.TabIndex = 2;
+      this.valueTextBox.KeyDown += new System.Windows.Forms.KeyEventHandler(this.valueTextBox_KeyDown);
+      this.valueTextBox.Validated += new System.EventHandler(this.valueTextBox_Validated);
+      // 
+      // SetComparisonStringFilterView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.valueTextBox);
+      this.Name = "SetComparisonStringFilterView";
+      this.Controls.SetChildIndex(this.valueTextBox, 0);
+      this.Controls.SetChildIndex(this.comparisonComboBox, 0);
+      this.Controls.SetChildIndex(this.label, 0);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.TextBox valueTextBox;
+
+
+
+
+
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/SetComparisonStringFilterView.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/SetComparisonStringFilterView.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/Views/SetComparisonStringFilterView.cs	(revision 5296)
@@ -0,0 +1,64 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Windows.Forms;
+using HeuristicLab.MainForm;
+using HeuristicLab.MainForm.WindowsForms;
+
+namespace HeuristicLab.Clients.OKB {
+  [View("SetComparisonStringFilter View")]
+  [Content(typeof(SetComparisonStringFilter), true)]
+  public partial class SetComparisonStringFilterView : SetComparisonFilterView {
+    public new SetComparisonStringFilter Content {
+      get { return (SetComparisonStringFilter)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public SetComparisonStringFilterView() {
+      InitializeComponent();
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      valueTextBox.Text = Content == null ? string.Empty : Content.Value;
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      valueTextBox.Enabled = Content != null;
+      valueTextBox.ReadOnly = ReadOnly;
+    }
+
+    private void valueTextBox_KeyDown(object sender, KeyEventArgs e) {
+      if ((e.KeyCode == Keys.Enter) || (e.KeyCode == Keys.Return))
+        label.Focus();  // set focus on label to validate data
+      if (e.KeyCode == Keys.Escape) {
+        valueTextBox.Text = Content.Value;
+        label.Focus();  // set focus on label to validate data
+      }
+    }
+    private void valueTextBox_Validated(object sender, System.EventArgs e) {
+      if (Content != null) {
+        Content.Value = valueTextBox.Text;
+      }
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/app.config
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/app.config	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Clients.OKB-3.3/app.config	(revision 5296)
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+  <system.serviceModel>
+    <behaviors>
+      <endpointBehaviors>
+        <behavior name="DefaultEndpointBehavior">
+          <dataContractSerializer maxItemsInObjectGraph="200000000"/>
+        </behavior>
+      </endpointBehaviors>
+    </behaviors>
+    <bindings>
+      <wsHttpBinding>
+        <binding name="WSHttpBinding_IOKBService" closeTimeout="00:01:00"
+            openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
+            bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
+            maxBufferPoolSize="524288" maxReceivedMessageSize="200000000"
+            messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"
+            allowCookies="false">
+          <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="200000000"
+              maxBytesPerRead="4096" maxNameTableCharCount="16384" />
+          <reliableSession ordered="true" inactivityTimeout="00:10:00"
+              enabled="false" />
+          <security mode="Message">
+            <transport clientCredentialType="Windows" proxyCredentialType="None"
+                realm="" />
+            <message clientCredentialType="UserName" negotiateServiceCredential="true"
+                algorithmSuite="Default" />
+          </security>
+        </binding>
+        <binding name="WSHttpBinding_IAuthenticationService" closeTimeout="00:01:00"
+            openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
+            bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
+            maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
+            messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"
+            allowCookies="false">
+          <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
+              maxBytesPerRead="4096" maxNameTableCharCount="16384" />
+          <reliableSession ordered="true" inactivityTimeout="00:10:00"
+              enabled="false" />
+          <security mode="Message">
+            <transport clientCredentialType="Windows" proxyCredentialType="None"
+                realm="" />
+            <message clientCredentialType="UserName" negotiateServiceCredential="true"
+                algorithmSuite="Default" />
+          </security>
+        </binding>
+      </wsHttpBinding>
+    </bindings>
+    <client>
+      <endpoint address="http://localhost:8732/Design_Time_Addresses/OKB-3.3/OKBService"
+          binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IOKBService"
+          contract="HeuristicLab.Clients.OKB.IOKBService" name="WSHttpBinding_IOKBService"
+          behaviorConfiguration="DefaultEndpointBehavior">
+        <identity>
+          <certificate encodedValue="AwAAAAEAAAAUAAAAD/AlkYJw/OUhl6D/9w8mjJBh39kgAAAAAQAAAPIBAAAwggHuMIIBW6ADAgECAhAdEzTisaf2sEZxrqYZfYtCMAkGBSsOAwIdBQAwFDESMBAGA1UEAxMJbG9jYWxob3N0MB4XDTEwMDgyMDIyMzIwOFoXDTM5MTIzMTIzNTk1OVowFDESMBAGA1UEAxMJbG9jYWxob3N0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDPkfCSLRX8/4F+Z4ys43yZ4MMzjB44cMakPz4Nri+mEB5n2z/0GFatCYzkI2f/nniWqVrBYjHkjsZy2EZioHu4wa99c1XEGJnFNDuNn6ESkfEyhyF4+OqKGnpK9HNrw7OWMuqn2oOh0iFd9fl6FTAm+Y0p3LP+38BuYzpCniqqdwIDAQABo0kwRzBFBgNVHQEEPjA8gBDvi8Rgio9v+mr58TiAvqF5oRYwFDESMBAGA1UEAxMJbG9jYWxob3N0ghAdEzTisaf2sEZxrqYZfYtCMAkGBSsOAwIdBQADgYEANdGlvHKeUptfNu9I0wgA5qjmVB+JDldOAkrfM0R+4IcVQ06y5K7P07uxQAV7+rhnDLgLyFJunUHgzbfjsjFy7vjwtoieXA5j0AYlm4AHR7dHt4HVgkIMYt8XOCqMw5jjFX91xJ89tC7mM9zYR48N9T5QSeMGo+f+JzybeLWxnNs=" />
+        </identity>
+      </endpoint>
+      <endpoint address="http://localhost:8732/Design_Time_Addresses/OKB-3.3/AuthenticationService"
+          binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IAuthenticationService"
+          contract="HeuristicLab.Clients.OKB.IAuthenticationService"
+          name="WSHttpBinding_IAuthenticationService">
+        <identity>
+          <certificate encodedValue="AwAAAAEAAAAUAAAAD/AlkYJw/OUhl6D/9w8mjJBh39kgAAAAAQAAAPIBAAAwggHuMIIBW6ADAgECAhAdEzTisaf2sEZxrqYZfYtCMAkGBSsOAwIdBQAwFDESMBAGA1UEAxMJbG9jYWxob3N0MB4XDTEwMDgyMDIyMzIwOFoXDTM5MTIzMTIzNTk1OVowFDESMBAGA1UEAxMJbG9jYWxob3N0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDPkfCSLRX8/4F+Z4ys43yZ4MMzjB44cMakPz4Nri+mEB5n2z/0GFatCYzkI2f/nniWqVrBYjHkjsZy2EZioHu4wa99c1XEGJnFNDuNn6ESkfEyhyF4+OqKGnpK9HNrw7OWMuqn2oOh0iFd9fl6FTAm+Y0p3LP+38BuYzpCniqqdwIDAQABo0kwRzBFBgNVHQEEPjA8gBDvi8Rgio9v+mr58TiAvqF5oRYwFDESMBAGA1UEAxMJbG9jYWxob3N0ghAdEzTisaf2sEZxrqYZfYtCMAkGBSsOAwIdBQADgYEANdGlvHKeUptfNu9I0wgA5qjmVB+JDldOAkrfM0R+4IcVQ06y5K7P07uxQAV7+rhnDLgLyFJunUHgzbfjsjFy7vjwtoieXA5j0AYlm4AHR7dHt4HVgkIMYt8XOCqMw5jjFX91xJ89tC7mM9zYR48N9T5QSeMGo+f+JzybeLWxnNs=" />
+        </identity>
+      </endpoint>
+    </client>
+  </system.serviceModel>
+</configuration>
Index: /branches/OKB (trunk integration)/HeuristicLab.MainForm.WPF/DispatchedView.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.MainForm.WPF/DispatchedView.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.MainForm.WPF/DispatchedView.cs	(revision 5296)
@@ -0,0 +1,61 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Collections.ObjectModel;
+using System.Collections.Specialized;
+using System.Threading;
+using System.Collections;
+using System.ComponentModel;
+using System.Windows.Threading;
+
+namespace HeuristicLab.BackgroundProcessing {
+  /// <summary>
+  /// Takes an <code>ObservableEnumerable</code> and transfers all events to the
+  /// specified Dispatcher. It also keeps a cache of the collection to ensure
+  /// the Dispatcher sees a consistent state.
+  /// </summary>
+  /// <typeparam name="T"></typeparam>
+  public class DispatchedView<T> : IObservableEnumerable<T> {
+    private List<T> cache;
+    private IObservableEnumerable<T> source;
+    private Dispatcher Dispatcher;
+    private DispatcherPriority Priority;
+
+    public event NotifyCollectionChangedEventHandler CollectionChanged;
+
+    public DispatchedView(IObservableEnumerable<T> source, Dispatcher dispatcher, DispatcherPriority priority) {
+      cache = source.ToList();
+      source.CollectionChanged += source_CollectionChanged;
+      this.source = source;
+      Dispatcher = dispatcher;
+      Priority = priority;
+    }
+
+    void source_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e) {
+      Dispatcher.BeginInvoke(new Action(() => {
+        if (e.Action == NotifyCollectionChangedAction.Add) {
+          cache.InsertRange(e.NewStartingIndex, e.NewItems.Cast<T>());
+        } else if (e.Action == NotifyCollectionChangedAction.Remove) {
+          cache.RemoveRange(e.OldStartingIndex, e.OldItems.Count);
+        } else {
+          cache = source.ToList();
+        }
+        OnCollectionChanged(e);
+      }), Priority, null);
+    }
+
+    protected void OnCollectionChanged(NotifyCollectionChangedEventArgs args) {
+      if (CollectionChanged != null)
+        CollectionChanged(this, args);
+    }
+
+    public IEnumerator<T> GetEnumerator() {
+      return cache.GetEnumerator();
+    }
+
+    IEnumerator IEnumerable.GetEnumerator() {
+      return GetEnumerator();
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.MainForm.WPF/HeuristicLab.MainForm.WPF-3.3.csproj
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.MainForm.WPF/HeuristicLab.MainForm.WPF-3.3.csproj	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.MainForm.WPF/HeuristicLab.MainForm.WPF-3.3.csproj	(revision 5296)
@@ -0,0 +1,222 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{1DBC4D60-0064-4A53-B48C-63D144A67B07}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.MainForm.WPF</RootNamespace>
+    <AssemblyName>HeuristicLab.MainForm.WPF-3.3</AssemblyName>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <RunPostBuildEvent>Always</RunPostBuildEvent>
+    <FileUpgradeFlags>
+    </FileUpgradeFlags>
+    <OldToolsVersion>3.5</OldToolsVersion>
+    <UpgradeBackupLocation />
+    <PublishUrl>publish\</PublishUrl>
+    <Install>true</Install>
+    <InstallFrom>Disk</InstallFrom>
+    <UpdateEnabled>false</UpdateEnabled>
+    <UpdateMode>Foreground</UpdateMode>
+    <UpdateInterval>7</UpdateInterval>
+    <UpdateIntervalUnits>Days</UpdateIntervalUnits>
+    <UpdatePeriodically>false</UpdatePeriodically>
+    <UpdateRequired>false</UpdateRequired>
+    <MapFileExtensions>true</MapFileExtensions>
+    <ApplicationRevision>0</ApplicationRevision>
+    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
+    <IsWebBootstrapper>false</IsWebBootstrapper>
+    <UseApplicationTrust>false</UseApplicationTrust>
+    <BootstrapperEnabled>true</BootstrapperEnabled>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="AvalonDock, Version=1.2.2691.0, Culture=neutral, PublicKeyToken=85a1e0ada7ec13e4, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\HeuristicLab.AvalonDock\AvalonDock.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Common-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Common-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Core-3.3, Version=3.3.0.2474, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=x86">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Core-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.MainForm-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.MainForm-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Persistence-3.3, Version=3.3.0.2106, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=x86">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Persistence-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.PluginInfrastructure-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.PluginInfrastructure-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="PresentationCore">
+      <RequiredTargetFramework>3.0</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="PresentationFramework">
+      <RequiredTargetFramework>3.0</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Core">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.ServiceModel">
+      <RequiredTargetFramework>3.0</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml.Linq">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+    <Reference Include="WindowsBase">
+      <RequiredTargetFramework>3.0</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="WindowsFormsIntegration">
+      <RequiredTargetFramework>3.0</RequiredTargetFramework>
+    </Reference>
+  </ItemGroup>
+  <ItemGroup>
+    <Page Include="OperationBarPanel.xaml">
+      <SubType>Designer</SubType>
+      <Generator>MSBuild:Compile</Generator>
+      <Generator>MSBuild:Compile</Generator>
+      <SubType>Designer</SubType>
+    </Page>
+    <None Include="HeuristicLabMainFormWPFPlugin.cs.frame" />
+    <Compile Include="ImageConverter.cs" />
+    <Compile Include="OperationBarPanel.xaml.cs" />
+    <Compile Include="IAutoView.cs" />
+    <Compile Include="NativeMethods.cs" />
+    <None Include="Properties\AssemblyInfo.frame" />
+    <Compile Include="WPFMainFormBase.cs" />
+    <Compile Include="DispatchedView.cs" />
+    <Compile Include="HeuristicLabMainFormWPFPlugin.cs" />
+    <Compile Include="WPFMenuItem.cs" />
+    <Compile Include="NotConverter.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="WPFToolBarItem.cs" />
+    <Compile Include="WPFUserInterfaceItem.cs" />
+    <Compile Include="WPFView.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="UpdateLocalInstallation.cmd" />
+  </ItemGroup>
+  <ItemGroup>
+    <Resource Include="Images\Lambda.png" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\HeuristicLab.AvalonDock\HeuristicLab.AvalonDock-1.2.2691.0.csproj">
+      <Project>{D86DEAB6-61EA-4008-B2AB-8D8CD5665023}</Project>
+      <Name>HeuristicLab.AvalonDock-1.2.2691.0</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.BackgroundProcessing\HeuristicLab.BackgroundProcessing-3.3.csproj">
+      <Project>{589BECAE-69B0-4EB1-8C06-C073531762B7}</Project>
+      <Name>HeuristicLab.BackgroundProcessing-3.3</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
+      <Install>false</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.5 SP1</ProductName>
+      <Install>true</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
+      <Visible>False</Visible>
+      <ProductName>Windows Installer 3.1</ProductName>
+      <Install>true</Install>
+    </BootstrapperPackage>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+SubWCRev "%25ProjectDir%25\" "%25ProjectDir%25\Properties\AssemblyInfo.frame" "%25ProjectDir%25\Properties\AssemblyInfo.cs"
+SubWCRev "%25ProjectDir%25\" "%25ProjectDir%25\HeuristicLabMainFormWPFPlugin.cs.frame" "%25ProjectDir%25\HeuristicLabMainFormWPFPlugin.cs"</PreBuildEvent>
+    <PostBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call UpdateLocalInstallation.cmd</PostBuildEvent>
+  </PropertyGroup>
+</Project>
Index: /branches/OKB (trunk integration)/HeuristicLab.MainForm.WPF/HeuristicLabMainFormWPFPlugin.cs.frame
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.MainForm.WPF/HeuristicLabMainFormWPFPlugin.cs.frame	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.MainForm.WPF/HeuristicLabMainFormWPFPlugin.cs.frame	(revision 5296)
@@ -0,0 +1,13 @@
+﻿using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.OKB.Cockpit {
+
+  [Plugin("HeuristicLab.MainForm.WPF", "3.3.0.$WCREV$")]
+  [PluginFile("HeuristicLab.MainForm.WPF-3.3.dll", PluginFileType.Assembly)]
+  [PluginDependency("HeuristicLab.AvalonDock", "1.2.2691.0")]
+  [PluginDependency("HeuristicLab.Core", "3.3")]
+  [PluginDependency("HeuristicLab.Persistence", "3.3")]
+  [PluginDependency("HeuristicLab.BackgroundProcessing", "3.3")]
+  [PluginDependency("HeuristicLab.MainForm", "3.3")]
+  public class HeuristicLabOkbCockpitPlugin : PluginBase {}
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.MainForm.WPF/IAutoView.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.MainForm.WPF/IAutoView.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.MainForm.WPF/IAutoView.cs	(revision 5296)
@@ -0,0 +1,8 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace HeuristicLab.MainForm.WPF {
+  public interface IAutoView : IView { }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.MainForm.WPF/ImageConverter.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.MainForm.WPF/ImageConverter.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.MainForm.WPF/ImageConverter.cs	(revision 5296)
@@ -0,0 +1,29 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Windows.Media.Imaging;
+using System.Windows;
+using System.Windows.Controls;
+using System.ComponentModel;
+
+namespace HeuristicLab.MainForm.WPF {
+  internal static class ImageConverter {
+    public static Image Win32Image2WPFImage(System.Drawing.Image image) {
+      if (image == null)
+        return null;
+      System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap(image);
+      IntPtr hBitmap = bitmap.GetHbitmap();
+      BitmapSource source = null;
+      try {
+        source = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(
+          hBitmap, IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions());
+        return new Image() { Source = source };
+      } catch (Win32Exception) {
+        return null;
+      } finally {
+        NativeMethods.DeleteObject(hBitmap);
+      }
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.MainForm.WPF/NativeMethods.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.MainForm.WPF/NativeMethods.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.MainForm.WPF/NativeMethods.cs	(revision 5296)
@@ -0,0 +1,14 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Runtime.InteropServices;
+
+namespace HeuristicLab.MainForm.WPF {
+  internal static class NativeMethods {
+
+    [DllImport("gdi32.dll")]
+    [return: MarshalAs(UnmanagedType.Bool)]
+    internal static extern bool DeleteObject(IntPtr hObject);
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.MainForm.WPF/NotConverter.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.MainForm.WPF/NotConverter.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.MainForm.WPF/NotConverter.cs	(revision 5296)
@@ -0,0 +1,30 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Windows.Data;
+using System.Globalization;
+
+namespace HeuristicLab.MainForm.WPF {
+
+  public class AndNotConverter : IMultiValueConverter {
+    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) {
+      if (values.Length == 2 && values[0] is bool && values[1] is bool && targetType == typeof(bool))
+        return (bool)values[0] && !(bool)values[1];
+      return null;
+    }
+
+    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) {
+      throw new NotImplementedException();
+    }
+  }
+
+  public class NotConverter : IValueConverter {
+    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) {
+      return !(bool)value;
+    }
+    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) {
+      return !(bool)value;
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.MainForm.WPF/OperationBarPanel.xaml
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.MainForm.WPF/OperationBarPanel.xaml	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.MainForm.WPF/OperationBarPanel.xaml	(revision 5296)
@@ -0,0 +1,39 @@
+﻿<StatusBar xmlns="http://schemas.microsoft.com/netfx/2007/xaml/presentation"
+           xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+           xmlns:src="clr-namespace:HeuristicLab.MainForm.WPF"
+           x:Class="HeuristicLab.MainForm.WPF.OperationBarPanel">
+  <StatusBar.Resources>
+    <src:AndNotConverter x:Key="AndNotConverter"/>
+  </StatusBar.Resources>
+  <StatusBar.ItemsPanel>
+    <ItemsPanelTemplate>
+      <UniformGrid Rows="1" Margin="0 -5 0 -5"/>
+    </ItemsPanelTemplate>
+  </StatusBar.ItemsPanel>
+  <StatusBar.ItemTemplate>
+    <DataTemplate DataType="src:ObservableBackgroundWorker">
+      <Button Tag="{Binding}"
+            Padding="1 -2 1 -2"
+            IsEnabled="{Binding Path=IsRunning}">
+        <Grid>
+          <ProgressBar Value="{Binding Path=Progress, Mode=OneWay}"
+                     Margin="-3 0 -3 0"
+                     MinWidth="10">
+            <ProgressBar.IsIndeterminate>
+              <MultiBinding Converter="{StaticResource AndNotConverter}">
+                <Binding Path="IsRunning"/>
+                <Binding Path="WorkerReportsProgress"/>
+              </MultiBinding>
+            </ProgressBar.IsIndeterminate>
+          </ProgressBar>
+          <TextBlock Name="Name" Margin="3 1 3 1" Text="{Binding Name}"/>
+        </Grid>
+      </Button>
+      <DataTemplate.Triggers>
+        <DataTrigger Binding="{Binding CancellationPending}" Value="true">
+          <Setter TargetName="Name" Property="Run.TextDecorations" Value="Strikethrough"/>
+        </DataTrigger>
+      </DataTemplate.Triggers>
+    </DataTemplate>
+  </StatusBar.ItemTemplate>
+</StatusBar>
Index: /branches/OKB (trunk integration)/HeuristicLab.MainForm.WPF/OperationBarPanel.xaml.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.MainForm.WPF/OperationBarPanel.xaml.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.MainForm.WPF/OperationBarPanel.xaml.cs	(revision 5296)
@@ -0,0 +1,13 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Windows.Controls.Primitives;
+
+namespace HeuristicLab.MainForm.WPF {
+  public partial class OperationBarPanel : StatusBar {
+    public OperationBarPanel() {
+      InitializeComponent();
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.MainForm.WPF/Properties/AssemblyInfo.frame
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.MainForm.WPF/Properties/AssemblyInfo.frame	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.MainForm.WPF/Properties/AssemblyInfo.frame	(revision 5296)
@@ -0,0 +1,37 @@
+﻿using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using HeuristicLab.PluginInfrastructure;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.MainForm.WPF")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("Microsoft")]
+[assembly: AssemblyProduct("HeuristicLab.MainForm.WPF")]
+[assembly: AssemblyCopyright("Copyright © Microsoft 2009")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components.  If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("0776b6b2-7d40-4561-9f05-4403bb6414b3")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("3.3.0.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.0.$WCREV$")]
Index: /branches/OKB (trunk integration)/HeuristicLab.MainForm.WPF/UpdateLocalInstallation.cmd
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.MainForm.WPF/UpdateLocalInstallation.cmd	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.MainForm.WPF/UpdateLocalInstallation.cmd	(revision 5296)
@@ -0,0 +1,4 @@
+SET target=C:\Program Files\HeuristicLab 3.3
+
+echo Copying WPF MainForm Assembly
+copy "%ProjectDir%\%Outdir%\HeuristicLab.MainForm.WPF-3.3.dll" "%target%"
Index: /branches/OKB (trunk integration)/HeuristicLab.MainForm.WPF/WPFMainFormBase.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.MainForm.WPF/WPFMainFormBase.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.MainForm.WPF/WPFMainFormBase.cs	(revision 5296)
@@ -0,0 +1,509 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Windows;
+using HeuristicLab.PluginInfrastructure;
+using System.Windows.Controls;
+using AvalonDock;
+using System.Windows.Media.Imaging;
+using System.Reflection;
+using System.Windows.Media;
+using HeuristicLab.BackgroundProcessing;
+using System.Threading;
+using System.Windows.Threading;
+using System.ComponentModel;
+using System.Windows.Input;
+using System.Windows.Controls.Primitives;
+using HeuristicLab.Core;
+using System.Windows.Forms.Integration;
+using HeuristicLab.Common;
+
+namespace HeuristicLab.MainForm.WPF {  
+
+  public abstract class WPFMainFormBase : Window, IMainForm, IControlManager {
+
+    public static readonly Size ToolBarImageSize = new Size(20, 20);
+    public abstract Type UserInterfaceItemType { get; }
+
+    public WPFMainFormBase() {
+      InitializeComponent();
+      InstallExceptionHandlers();
+      InitializeBackgroundWorkerMonitoring();
+      BuildRootMenu();
+      BuildViewsMenu();
+      BuildToolBar();
+      Messages.Items.Clear();
+      DockingManager.PropertyChanged += (sender, args) => {
+        if (args.PropertyName == "ActiveDocument")
+          OnActiveDocumentChanged();
+      };
+      MainFormManager.RegisterMainForm(this);
+      ControlManager.RegisterManager(this);
+    }
+
+    public void ShowControl(object control) {
+      object content = null;
+      string name = "Control";
+      if (control is HeuristicLab.MainForm.IView) {
+        content = control;
+        name = ((HeuristicLab.MainForm.IView)control).Caption;
+      }
+      ShowObjectAsView(content, name);
+    }
+
+    public IContentView ShowContent(IContent content) {
+      throw new NotImplementedException();
+    }
+
+    public IContentView ShowContent(IContent content, Type viewType) {
+      throw new NotImplementedException();
+    }
+
+    #region GUI
+
+    private DockPanel Panel = new DockPanel();
+    private Menu Menu = new Menu();
+    private ToolBar ToolBar = new ToolBar();
+    private StatusBar StatusBar = new StatusBar();
+    private StatusBar BackgroundWorkers = new OperationBarPanel();
+    private StatusBar Messages = new StatusBar();
+    private DocumentPane DocumentPane = new DocumentPane();
+    private DockingManager DockingManager = new DockingManager() {
+      MinHeight = 50,
+    };
+
+    protected void InitializeComponent() {
+      StatusBar.Items.Add("OKB Cockpit");
+      StatusBar.Items.Add(new Separator());
+      StatusBar.Items.Add("Operations:");
+      StatusBar.Items.Add(BackgroundWorkers);
+      StatusBar.Items.Add(new Separator());
+      StatusBar.Items.Add(Messages);
+      StatusBar.AddHandler(Button.ClickEvent, new RoutedEventHandler(OperationAborted));
+      Menu.SetValue(DockPanel.DockProperty, Dock.Top);
+      ToolBar.SetValue(DockPanel.DockProperty, Dock.Top);
+      StatusBar.SetValue(DockPanel.DockProperty, Dock.Bottom);
+      DockingManager.Content = DocumentPane;
+      Panel.Children.Add(Menu);
+      Panel.Children.Add(ToolBar);
+      Panel.Children.Add(StatusBar);
+      Panel.Children.Add(DockingManager);
+      Content = Panel;
+      Title = "WPF Main Window";
+    }
+
+    #endregion
+
+    #region fallback exception handling
+
+    private void InstallExceptionHandlers() {
+      AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
+      Dispatcher.UnhandledException += Dispatcher_UnhandledException;
+      WorkerMonitor.Default.BackgroundWorkerException += WorkerMonitor_BackgroundWorkerException;
+    }
+
+    private void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) {
+      Exception x = e.ExceptionObject as Exception;
+      if (x != null)
+        ShowException("Unhandled application domain exception", x);
+    }
+
+    private void Dispatcher_UnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e) {
+      ShowException("Unhandled dispatcher exception", e.Exception);
+    }
+
+    private void WorkerMonitor_BackgroundWorkerException(object sender, ThreadExceptionEventArgs e) {
+      ShowException(String.Format("'{0}' raised async exception", e.Exception.Message), e.Exception.InnerException);
+    }
+
+    protected void ShowException(string message, Exception e) {
+      Dispatcher.BeginInvoke(new Action(() => {
+        MessageBox.Show(this,
+          String.Format("{0}:\n{1}", message, e.ToString()),
+          Title, MessageBoxButton.OK, MessageBoxImage.Error);
+      }), DispatcherPriority.SystemIdle);
+    }
+
+    #endregion
+
+    #region view discovery
+
+    private void BuildViewsMenu() {
+      MenuItem viewsMenu = new MenuItem() { Header = "Views" };
+      Menu.Items.Add(viewsMenu);
+      foreach (Type viewType in ApplicationManager.Manager
+          .GetTypes(UserInterfaceItemType)
+          .Where(t => t.GetInterface(typeof(IAutoView).FullName) != null)) {
+        viewsMenu.Items.Add(CreateViewsMenuEntry(viewType));
+      }
+    }
+
+    private MenuItem CreateViewsMenuEntry(Type viewType) {
+      MenuItem item = new MenuItem() { Header = viewType.Name };
+      item.Click += (sender, args) => {
+        ShowView((IView)Activator.CreateInstance(viewType, true));
+      };
+      return item;
+    }
+
+    #endregion
+
+    #region menu discovery
+
+    private void BuildRootMenu() {
+      foreach (Type menuItemType in
+          ApplicationManager.Manager
+          .GetTypes(UserInterfaceItemType)
+          .Where(t => t.GetInterface(typeof(IMenuItem).FullName) != null)) {
+        IMenuItem item = (IMenuItem)Activator.CreateInstance(menuItemType, true);
+        AddMenuItem(Menu.Items, item, item.Structure.GetEnumerator());
+      }
+    }
+
+    private void AddMenuItem(ItemCollection items, IMenuItem newItem, IEnumerator<string> structure) {
+      if (structure.MoveNext()) {
+        string name = structure.Current;
+        MenuItem parent = items.Cast<MenuItem>().SingleOrDefault(i => i.Header as string == name);
+        if (parent == null) {
+          parent = new MenuItem() { Header = name, Tag = newItem };
+          InsertSortedMenuItem(items, parent);
+        }
+        AddMenuItem(parent.Items, newItem, structure);
+      } else {
+        MenuItem item = new MenuItem() { Header = newItem.Name, Tag = newItem };
+        item.Click += (s, a) => newItem.Execute();
+        if (newItem.Image != null)
+          item.Icon = newItem.Image;
+        WPFMenuItem wpfItem = newItem as WPFMenuItem;
+        if (wpfItem != null) {
+          wpfItem.MenuItem = item;
+          item.IsEnabled = wpfItem.IsEnabled;
+          wpfItem.IsEnabledChanged += (s, a) => item.IsEnabled = wpfItem.IsEnabled;
+        }
+        InsertSortedMenuItem(items, item);
+      }
+    }
+
+    private static void InsertSortedMenuItem(ItemCollection items, MenuItem menuItem) {
+      IMenuItem newItem = menuItem.Tag as IMenuItem;
+      if (newItem == null) {
+        items.Add(menuItem);
+      } else {
+        int index = 0;
+        while (index < items.Count) {
+          MenuItem it = items[index] as MenuItem;
+          if (it == null) break;
+          IMenuItem item = it.Tag as IMenuItem;
+          if (item == null) break;
+          if (newItem.Position < item.Position) break;
+          index++;
+        }
+        items.Insert(index, menuItem);
+      }
+    }
+
+    #endregion
+
+    #region tool bar discovery
+
+    private void BuildToolBar() {
+      foreach (Type itemType in
+          ApplicationManager.Manager
+          .GetTypes(UserInterfaceItemType)
+          .Where(t => t.GetInterface(typeof(IToolBarItem).FullName) != null)) {
+        IToolBarItem item = (IToolBarItem)Activator.CreateInstance(itemType, true);
+        StackPanel visualItem = new StackPanel() { Orientation = Orientation.Vertical };
+        Image image =
+          ImageConverter.Win32Image2WPFImage(item.Image) ??
+          new Image() {
+            Source = new BitmapImage(new Uri(
+              "pack://application:,,,/" +
+              Assembly.GetExecutingAssembly().GetName().Name +
+              ";component/Images/Lambda.png"))
+          };
+        image.Width = ToolBarImageSize.Width;
+        image.Height = ToolBarImageSize.Height;
+        image.Stretch = Stretch.UniformToFill;
+        visualItem.Children.Add(image);
+        visualItem.Children.Add(new TextBlock() { Text = item.Name });
+        Button b = new Button() { Content = visualItem };
+        b.Click += (s, a) => item.Execute();
+        WPFToolBarItem wpfItem = item as WPFToolBarItem;
+        if (wpfItem != null) {
+          b.IsEnabled = wpfItem.IsEnabled;
+          if (wpfItem.IsVisible)
+            b.Visibility = Visibility.Visible;
+          else
+            b.Visibility = Visibility.Collapsed;
+          wpfItem.IsEnabledChanged += (s, a) => b.IsEnabled = wpfItem.IsEnabled;
+          wpfItem.IsVisibleChanged += (s, a) => {
+            if (wpfItem.IsVisible)
+              b.Visibility = Visibility.Visible;
+            else
+              b.Visibility = Visibility.Collapsed;
+          };
+        }
+        ToolBar.Items.Add(b);
+      }
+    }
+
+    #endregion
+
+    #region Background Worker Monitoring
+
+    private void InitializeBackgroundWorkerMonitoring() {
+      var BackgroundWorkerView = new DispatchedView<ObservableBackgroundWorker>(
+        WorkerMonitor.Default, Dispatcher, DispatcherPriority.SystemIdle);
+      BackgroundWorkers.ItemsSource = BackgroundWorkerView;
+      BackgroundWorkerView.CollectionChanged += (sender, args) => {
+        if (args.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Add) {
+          if (Cursor != Cursors.AppStarting)
+            Cursor = Cursors.AppStarting;
+        } else {
+          bool active = BackgroundWorkerView.Count() > 0;
+          if (active && Cursor == Cursors.Arrow) {
+            Cursor = Cursors.AppStarting;
+          } else if (!active && Cursor == Cursors.AppStarting) {
+            Cursor = Cursors.Arrow;
+          }
+        }
+      };
+    }
+
+    protected void OperationAborted(object sender, RoutedEventArgs args) {
+      Button button = args.OriginalSource as Button;
+      if (button == null) return;
+      ObservableBackgroundWorker worker = button.Tag as ObservableBackgroundWorker;
+      if (worker == null) return;
+      if (worker.WorkerSupportsCancellation &&
+        MessageBox.Show(this,
+          String.Format("Do you want to cancel the background execution of '{0}'?", worker.Name), Title,
+          MessageBoxButton.YesNo, MessageBoxImage.Question) ==
+          MessageBoxResult.Yes)
+        worker.CancelAsync();
+      args.Handled = true;
+    }
+
+    protected override void OnClosing(CancelEventArgs e) {
+      base.OnClosing(e);
+      if (WorkerMonitor.Default.Count() > 0) {
+        var result = MessageBox.Show(
+          this,
+          "You have tasks running in the background. Do you want to signal and wait for their termination?",
+          Title,
+          MessageBoxButton.YesNoCancel,
+          MessageBoxImage.Warning);
+        if (result == MessageBoxResult.Cancel || result == MessageBoxResult.None)
+          e.Cancel = true;
+        else if (result == MessageBoxResult.Yes)
+          WorkerMonitor.Default.CancelAllAsync();
+        Thread.Sleep(0);
+      }
+    }
+
+    protected override void OnClosed(EventArgs e) {
+      AppDomain.CurrentDomain.UnhandledException -= CurrentDomain_UnhandledException;
+      Dispatcher.UnhandledException -= Dispatcher_UnhandledException;
+      WorkerMonitor.Default.BackgroundWorkerException += WorkerMonitor_BackgroundWorkerException;
+      base.OnClosed(e);
+    }
+
+    #endregion
+
+    #region Status Messages
+
+    class Message : IStatusMessage {
+
+      public string Text { get; set; }
+      public Action HideAction { get; set; }
+
+      public override string ToString() {
+        return Text;
+      }
+
+      public void Hide() {
+        HideAction();
+      }
+    }
+
+    public interface IStatusMessage {
+      string Text { get; }
+      void Hide();
+    }
+
+    public IStatusMessage ShowMessage(string message, TimeSpan duration) {
+      Message m = new Message() { Text = message };
+      DispatcherTimer timer = new DispatcherTimer() { Interval = duration };
+      Action hideAction = () => {
+        Messages.Items.Remove(m);
+        timer.Stop();
+      };
+      m.HideAction = hideAction;
+      Messages.Items.Add(m);
+      if (duration != TimeSpan.Zero) {
+        timer.Tick += (sender, args) => {
+          hideAction();
+        };
+        timer.Start();
+      }
+      return m;
+    }
+
+    #endregion
+
+    #region View management
+
+    public event EventHandler<ViewEventArgs> ViewClosed;
+    public event EventHandler<ViewShownEventArgs> ViewShown;
+    public event EventHandler<ViewEventArgs> ViewHidden;
+
+    protected void OnViewClosed(IView view) {
+      EventHandler<ViewEventArgs> handler = ViewClosed;
+      if (handler != null)
+        handler(this, new ViewEventArgs(view));
+    }
+
+    protected void OnViewShown(IView view, bool firstTimeShown) {
+      EventHandler<ViewShownEventArgs> handler = ViewShown;
+      if (handler != null)
+        handler(this, new ViewShownEventArgs(view, firstTimeShown));
+    }
+
+    protected void OnViewHidden(IView view) {
+      EventHandler<ViewEventArgs> handler = ViewHidden;
+      if (handler != null)
+        handler(this, new ViewEventArgs(view));
+    }
+
+    public IEnumerable<IView> Views {
+      get {
+        return DockingManager.DockableContents
+          .Select(c => c.Content)
+          .Where(c => c is IView)
+          .Cast<IView>().AsEnumerable();
+      }
+    }
+
+    public IView ActiveView {
+      get {
+        return DockingManager.ActiveContent as IView;
+      }
+    }
+
+    protected void OnActiveDocumentChanged() {
+      EventHandler handler = ActiveViewChanged;
+      if (handler != null)
+        handler(null, EventArgs.Empty);
+    }
+
+    public event EventHandler ActiveViewChanged;
+
+    private void ShowObjectAsView(object o, string name) {
+      if (o as System.Windows.Forms.Control != null) {
+        o = new WindowsFormsHost() { Child = (System.Windows.Forms.Control)o };
+      }
+      var content = new DockableContent() {
+        Content = o,
+        Title = name,
+        HideOnClose = false,
+      };
+      DocumentPane.Items.Add(content);
+      DocumentPane.SelectedItem = content;
+    }
+
+    public DockableContent AddView(IView view) {
+      try {
+        DockableContent content = new DockableContent() {
+          Content = view,
+          Title = view.Caption,
+          HideOnClose = true, // to enable capturing of state change events
+        };
+        content.StateChanged += (s, a) => {
+          if (a == DockableContentState.Hidden) {
+            OnViewClosed(view);
+            content.HideOnClose = false;
+            // HideOnClose moves content to _hiddenContents private member.
+            // To remove it from there, we have to show the content again
+            // to move it back into an accessible container and remove
+            // it from there.
+            Dispatcher.BeginInvoke(new Action(() => {
+              DockingManager.Show(content);
+              content.ContainerPane.Items.Remove(content);
+            }));
+          } else {
+            OnViewShown(view, false);
+          }
+        };
+        DocumentPane.Items.Add(content);
+        DocumentPane.SelectedItem = content;
+        OnViewShown(view, true);
+        return content;
+      } catch (Exception x) {
+        MessageBox.Show(this,
+          String.Format("Could not add view '{0}':\n{1}", view.Caption, x.ToString()),
+          Title,
+          MessageBoxButton.OK, MessageBoxImage.Exclamation);
+        return null;
+      }
+    }
+
+    /// <summary>
+    /// Show existing view or create new one. Return true if this is the first time shown.
+    /// </summary>    
+    public bool ShowView(IView view) {
+      DockableContent content = GetContent(view);
+      if (content == null) {
+        content = AddView(view);
+        return true;
+      } else {
+        DockingManager.Show(content);
+        content.ContainerPane.SelectedItem = content;
+        OnViewShown(view, false);
+        return false;
+      }
+    }
+
+    public void HideView(IView view) {
+      DockableContent content = GetContent(view);
+      if (content != null)
+        DockingManager.Hide(content);
+      OnViewHidden(view);
+    }
+
+    public void CloseView(IView view) {
+      DockableContent content = GetContent(view);
+      content.ContainerPane.Items.Remove(content);
+      OnViewClosed(view);
+    }
+
+    public void CloseAllViews() {
+      foreach (var viewContainer in DockingManager.DockableContents.Where(c => c.Content is IView)) {
+        viewContainer.ContainerPane.Items.Remove(viewContainer);
+        OnViewClosed(viewContainer.Content as IView);
+      }
+    }
+
+    private DockableContent GetContent(IView view) {
+      DockableContent content =
+        DockingManager
+        .DockableContents
+        .SingleOrDefault(c => c.Content as IView == view);
+      return content;
+    }
+
+    #endregion
+
+    #region IMainForm
+
+    public event EventHandler Changed;
+
+    protected void OnChanged() {
+      EventHandler handler = Changed;
+      if (handler != null)
+        handler(this, EventArgs.Empty);
+    }
+
+    #endregion
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.MainForm.WPF/WPFMenuItem.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.MainForm.WPF/WPFMenuItem.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.MainForm.WPF/WPFMenuItem.cs	(revision 5296)
@@ -0,0 +1,34 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Windows.Controls;
+using System.Windows;
+
+namespace HeuristicLab.MainForm.WPF {
+
+  public abstract class WPFMenuItem : WPFUserInterfaceItem {
+        
+    private MenuItem menuItem;
+    public MenuItem MenuItem {
+      get {
+        return menuItem;
+      }
+      set {
+        if (value == menuItem)
+          return;
+        menuItem = value;
+        OnWPFMenuItemChanged();
+      }
+    }
+
+    public event EventHandler MenuItemChanged;
+
+    protected void OnWPFMenuItemChanged() {
+      EventHandler handler = MenuItemChanged;
+      if (handler != null)
+        handler(this, EventArgs.Empty);        
+    }    
+    
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.MainForm.WPF/WPFToolBarItem.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.MainForm.WPF/WPFToolBarItem.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.MainForm.WPF/WPFToolBarItem.cs	(revision 5296)
@@ -0,0 +1,32 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Windows.Controls;
+
+namespace HeuristicLab.MainForm.WPF {
+  public abstract class WPFToolBarItem : WPFUserInterfaceItem, IToolBarItem {
+            
+    private bool isVisible = true;
+    public bool IsVisible {
+      get {
+        return isVisible;
+      }
+      set {
+        if (value == isVisible)
+          return;
+        isVisible = value;
+        OnIsVisibleChanged();
+      }
+    }
+
+    public event EventHandler IsVisibleChanged;
+
+    protected void OnIsVisibleChanged() {
+      EventHandler handler = IsVisibleChanged;
+      if (handler != null)
+        handler(this, EventArgs.Empty);
+    }          
+
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.MainForm.WPF/WPFUserInterfaceItem.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.MainForm.WPF/WPFUserInterfaceItem.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.MainForm.WPF/WPFUserInterfaceItem.cs	(revision 5296)
@@ -0,0 +1,32 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Drawing;
+
+namespace HeuristicLab.MainForm.WPF {
+  public abstract class WPFUserInterfaceItem : ActionUserInterfaceItem {
+
+    private bool isEnabled = true;
+    public bool IsEnabled {
+      get {
+        return isEnabled;
+      }
+      set {
+        if (value == isEnabled)
+          return;
+        isEnabled = value;
+        OnIsEnabledChanged();
+      }
+    }
+
+    public event EventHandler IsEnabledChanged;
+
+    protected void OnIsEnabledChanged() {
+      EventHandler handler = IsEnabledChanged;
+      if (handler != null)
+        handler(this, EventArgs.Empty);
+    }
+    
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.MainForm.WPF/WPFView.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.MainForm.WPF/WPFView.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.MainForm.WPF/WPFView.cs	(revision 5296)
@@ -0,0 +1,77 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Windows.Controls;
+
+namespace HeuristicLab.MainForm.WPF {
+
+  public abstract class WPFView : UserControl, IView {    
+
+    private string caption = "WPF View";
+    public string Caption {
+      get {
+        return caption;
+      }
+      set {
+        if (value == caption) return;
+        if (value == null) throw new ArgumentNullException("View caption cannot be null");
+        caption = value;
+        OnCaptionChanged();
+      }
+    }
+    public event EventHandler CaptionChanged;
+    protected void OnCaptionChanged() {
+      EventHandler handler = CaptionChanged;
+      if (handler != null)
+        handler(this, EventArgs.Empty);
+    }    
+
+    public event EventHandler Changed;
+
+    protected void OnChanged() {
+      EventHandler handler = Changed;
+      if (handler != null)
+        handler(this, EventArgs.Empty);
+    }
+
+    public virtual void Close() {
+      MainFormManager.GetMainForm<WPFMainFormBase>().CloseView(this);
+      IsShown = false;
+    }
+
+    public void Hide() {
+      MainFormManager.GetMainForm<WPFMainFormBase>().HideView(this);
+      IsShown = false;
+    }
+    
+    public bool IsShown { get; protected set; }
+
+    private bool readOnly = false;
+    public bool ReadOnly {
+      get {
+        return readOnly;
+      }
+      set {
+        if (value == readOnly) return;
+        readOnly = value;
+        OnReadOnlyChanged();
+      }
+    }
+    public event EventHandler ReadOnlyChanged;
+    protected void OnReadOnlyChanged() {
+      EventHandler handler = ReadOnlyChanged;
+      if (handler != null)
+        handler(this, EventArgs.Empty);
+    }
+
+    protected abstract void OnFirstTimeShown();
+
+    public void Show() {
+      if (MainFormManager.GetMainForm<WPFMainFormBase>().ShowView(this))
+        OnFirstTimeShown();
+      IsShown = true;
+    }
+    
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/AlgorithmContainer.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/AlgorithmContainer.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/AlgorithmContainer.cs	(revision 5296)
@@ -0,0 +1,113 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Optimization;
+using HeuristicLab.Data;
+using HeuristicLab.Collections;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common.Resources;
+using HeuristicLab.Common;
+
+namespace HeuristicLab.OKB.AlgorithmHost {
+
+  [Item("Algorithm Container", "Encapsulates algorithm & parameters for storing in the OKB")]  
+  [StorableClass]
+  public class AlgorithmContainer : ParameterizedNamedItemContainer {
+
+    public AlgorithmContainer() {
+      ResultMapping = new ObservableDictionary<string, string>();
+    }
+
+    [StorableConstructor]
+    public AlgorithmContainer(bool deserializing) : base(deserializing) { }
+
+    public IAlgorithm Algorithm {
+      get { return (IAlgorithm)Item; }
+      set { Item = value; }
+    }
+
+    public override Type ItemType { get { return typeof(IAlgorithm); } }
+
+    public override string ItemName { get { return "AlgorithmContainer"; } }
+    public override string ItemDescription { get { return "Container for algorithms to be stored in the OKB"; } }
+
+
+    [Storable]
+    public ObservableDictionary<string, string> ResultMapping { get; private set; }
+
+    private ResultCollection results;
+
+    public override void InitializeMapping() {
+      base.InitializeMapping();
+      Results_CollectionReset(this, new CollectionItemsChangedEventArgs<IResult>(Enumerable.Empty<IResult>()));
+    }
+
+    protected override void RegisterItemEvents() {
+      base.RegisterItemEvents();
+      Algorithm.Prepared += new EventHandler(Algorithm_Prepared);
+      RegisterResultEvents();
+    }
+
+    protected override void DeregisterItemEvents() {
+      base.DeregisterItemEvents();
+      Algorithm.Prepared -= new EventHandler(Algorithm_Prepared);
+      DeregisterResultEvents();
+    }
+
+    private void RegisterResultEvents() {
+      results = Algorithm.Results;
+      results.CollectionReset += new CollectionItemsChangedEventHandler<IResult>(Results_CollectionReset);
+      results.ItemsAdded += new CollectionItemsChangedEventHandler<IResult>(Results_ItemsAdded);
+      results.ItemsRemoved += new CollectionItemsChangedEventHandler<IResult>(Results_ItemsRemoved);
+    }
+
+    private void DeregisterResultEvents() {
+      if (results == null) return;
+      results.CollectionReset -= new CollectionItemsChangedEventHandler<IResult>(Results_CollectionReset);
+      results.ItemsAdded -= new CollectionItemsChangedEventHandler<IResult>(Results_ItemsAdded);
+      results.ItemsRemoved -= new CollectionItemsChangedEventHandler<IResult>(Results_ItemsRemoved);
+    }
+
+    void Algorithm_Prepared(object sender, EventArgs e) {
+      DeregisterResultEvents();
+      RegisterResultEvents();
+    }
+
+    void Results_ItemsRemoved(object sender, CollectionItemsChangedEventArgs<IResult> e) {
+      foreach (var result in e.OldItems) {
+        ResultMapping.Remove(result.Name);
+      }
+    }
+
+    void Results_ItemsAdded(object sender, CollectionItemsChangedEventArgs<IResult> e) {
+      foreach (var result in e.Items) {
+        ResultMapping.Add(result.Name, null);
+      }
+    }
+
+    void Results_CollectionReset(object sender, CollectionItemsChangedEventArgs<IResult> e) {
+      ResultMapping.Clear();
+      foreach (Result r in Algorithm.Results) {
+        ResultMapping.Add(r.Name, null);
+      }
+    }
+
+    public override HeuristicLab.Common.IDeepCloneable Clone(Cloner cloner) {
+      AlgorithmContainer clone = (AlgorithmContainer)base.Clone(cloner);
+      clone.ResultMapping = new ObservableDictionary<string, string>();
+      foreach (var item in ResultMapping) {
+        clone.ResultMapping.Add(item.Key, item.Value);
+      }
+      return clone;
+    }
+
+    public void Strip() {
+      DeregisterItemEvents();
+      DeregisterResultEvents();
+      try { Algorithm.Prepare(true); } catch (Exception) { }
+      try { Algorithm.Problem = null; } catch (Exception) { }
+    }
+  }
+} 
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/AlgorithmContainerView.Designer.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/AlgorithmContainerView.Designer.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/AlgorithmContainerView.Designer.cs	(revision 5296)
@@ -0,0 +1,107 @@
+﻿namespace HeuristicLab.OKB.AlgorithmHost {
+  partial class AlgorithmContainerView {
+    /// <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 Windows Form 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() {
+      System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AlgorithmContainerView));
+      this.resultMappingPage = new System.Windows.Forms.TabPage();
+      this.resultMappingView = new HeuristicLab.OKB.AlgorithmHost.MappingView();
+      this.stripButton = new System.Windows.Forms.Button();
+      this.tabControl.SuspendLayout();
+      this.resultMappingPage.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // tabControl
+      // 
+      this.tabControl.Controls.Add(this.resultMappingPage);
+      this.tabControl.Controls.SetChildIndex(this.resultMappingPage, 0);
+      // 
+      // openItemButton
+      // 
+      this.toolTip.SetToolTip(this.openItemButton, "Open Item");
+      // 
+      // progressBar
+      // 
+      this.progressBar.Location = new System.Drawing.Point(63, 229);
+      this.progressBar.Size = new System.Drawing.Size(338, 24);
+      // 
+      // refreshButton
+      // 
+      this.refreshButton.Location = new System.Drawing.Point(33, 229);
+      // 
+      // resultMappingPage
+      // 
+      this.resultMappingPage.Controls.Add(this.resultMappingView);
+      this.resultMappingPage.Location = new System.Drawing.Point(4, 22);
+      this.resultMappingPage.Name = "resultMappingPage";
+      this.resultMappingPage.Padding = new System.Windows.Forms.Padding(3);
+      this.resultMappingPage.Size = new System.Drawing.Size(396, 197);
+      this.resultMappingPage.TabIndex = 2;
+      this.resultMappingPage.Text = "Result Mapping";
+      this.resultMappingPage.UseVisualStyleBackColor = true;
+      // 
+      // resultMappingView
+      // 
+      this.resultMappingView.Caption = "Mapping View";
+      this.resultMappingView.Content = null;
+      this.resultMappingView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.resultMappingView.Location = new System.Drawing.Point(3, 3);
+      this.resultMappingView.Name = "resultMappingView";
+      this.resultMappingView.ReadOnly = false;
+      this.resultMappingView.Size = new System.Drawing.Size(390, 191);
+      this.resultMappingView.TabIndex = 0;
+      // 
+      // stripButton
+      // 
+      this.stripButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.stripButton.Image = ((System.Drawing.Image)(resources.GetObject("stripButton.Image")));
+      this.stripButton.Location = new System.Drawing.Point(3, 229);
+      this.stripButton.Name = "stripButton";
+      this.stripButton.Size = new System.Drawing.Size(24, 24);
+      this.stripButton.TabIndex = 3;
+      this.toolTip.SetToolTip(this.stripButton, "Strip algorithm for shipping");
+      this.stripButton.UseVisualStyleBackColor = true;
+      this.stripButton.Click += new System.EventHandler(this.stripButton_Click);
+      // 
+      // AlgorithmContainerView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.Controls.Add(this.stripButton);
+      this.Name = "AlgorithmContainerView";
+      this.Controls.SetChildIndex(this.refreshButton, 0);
+      this.Controls.SetChildIndex(this.stripButton, 0);
+      this.Controls.SetChildIndex(this.progressBar, 0);
+      this.Controls.SetChildIndex(this.tabControl, 0);
+      this.tabControl.ResumeLayout(false);
+      this.resultMappingPage.ResumeLayout(false);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.TabPage resultMappingPage;
+    private MappingView resultMappingView;
+    private System.Windows.Forms.Button stripButton;
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/AlgorithmContainerView.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/AlgorithmContainerView.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/AlgorithmContainerView.cs	(revision 5296)
@@ -0,0 +1,76 @@
+﻿using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Text;
+using System.Linq;
+using System.Windows.Forms;
+using HeuristicLab.OKB.Client;
+using HeuristicLab.MainForm;
+
+namespace HeuristicLab.OKB.AlgorithmHost {
+
+  [ViewAttribute("AlgorithmContainer View")]
+  [Content(typeof(AlgorithmContainer), true)]
+  public partial class AlgorithmContainerView : ParameterizedNamedItemContainerView {
+
+    private Mapping resultMapping;
+
+    public AlgorithmContainerView() {
+      resultMapping = new Mapping();
+      InitializeComponent();
+    }
+
+    public new AlgorithmContainer Content {
+      get { return (AlgorithmContainer)base.Content; }
+      set { base.Content = value; }
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      if (Content == null) {
+        resultMapping.Map = null;
+      } else {
+        resultMapping.Map = Content.ResultMapping;
+        resultMappingView.Content = resultMapping;
+      }
+    }
+
+    private DataTable backgroundLoadedResults = null;
+
+    protected override void backgroundWorker_DoWork(object sender, DoWorkEventArgs e) {
+      backgroundWorker.ReportProgress(0);
+      var client = ClientFactory.Create<OKBTables.TableServiceClient, OKBTables.ITableService>();
+      int count;
+      DataTable results = client.PrepareDataTable(out count, "Result");
+      results.BeginLoadData();
+      DataTable newRows;
+      do {
+        newRows = client.GetNextRows(100);
+        results.Merge(newRows);
+      } while (newRows != null && newRows.Rows.Count > 0);
+      client.FinishFetchingRows();
+      client.Close();
+      results.EndLoadData();
+      backgroundLoadedResults = results;
+      base.backgroundWorker_DoWork(sender, e);
+    }
+
+    protected override void backgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) {
+      base.backgroundWorker_RunWorkerCompleted(sender, e);
+      resultMappingView.Enabled = false;
+      if (backgroundLoadedParameters != null) {
+        resultMapping.Values.Clear();
+        resultMapping.Values.Add(null);
+        resultMapping.Values.AddRange(backgroundLoadedResults.Rows.Cast<DataRow>().Select(r => (string)r["Name"]));
+        resultMappingView.Enabled = true;
+      }
+    }
+
+    private void stripButton_Click(object sender, EventArgs e) {
+      Content.Strip();
+      this.Enabled = false;
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/AlgorithmContainerView.resx
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/AlgorithmContainerView.resx	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/AlgorithmContainerView.resx	(revision 5296)
@@ -0,0 +1,144 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="toolTip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>174, 17</value>
+  </metadata>
+  <metadata name="backgroundWorker.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="stripButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEQAA
+        CxEBf2RfkQAAAlRJREFUOE+lk+lLVFEYxuu/6UOE5IfKFkiJkJSiXMjEUUtN0solxTLJrflghq1TaWbj
+        mg4hOeNuw7iUe+bMuIVEYpBNaoy51Dj315wbqXeSCLrwfjmc5/c8z8u5W4Et//UJwMYZGTBFfZgwM2Hu
+        5W1PG10tz2nQFVFTnBfgflc233ho6TPGTFr7WZodx2m3Is33INlamB0t5UnBZQrzkg+7QxSAsaEuFm0W
+        pqyN3MiIJTdFRVbiKaa7c5jpyyAnKcSlVyZWAAY7DEhfe8lMCCElym+XuHzptK9n2cPrSONppMUc/Tug
+        XV8KtkaSI0TSdafyB2qk0UQSVD6bAzr0Wg9j7WOan92jvqKAOm0+tdo8dIVqqotyqdRkUXb/GtrbVykp
+        uCLG47eBXKG1RsPCVBPMmeSRvhhxfm5l9VMTjo8GnDPNa+fTw9XcyY5fSyIDGipv/RKPJuE0x+MYjGal
+        O4zF9kCWX7kWN5aM03IBx5uzvHsRQPq540pAnfYmzJpYHY7jx8AZll+H0l3uiyp4Oy+rI9fEK70qxnR+
+        pEb7KwGir2Rr43tfJEtdJ1kwHiMscBuR4Xtds092FuLFjiBGKnxIDF9fslxBV6SW+y51BmNv82e+3keG
+        uYvtrX6YS7w4H+qtTFClycYxrcfecoQ5/UG+mU5QdTeAiLA9FKoPyc5CPG/wZujRTuJCDigB5ZpMpvq1
+        DBfvxvJ0P++bI5hsCJUXJjqL2MJZiA25O4gN8voD4JmfHoM6VSVPjuv5Zl4MlrctFiY6i9jCWYhdo3wH
+        m/1l/3r2Ey4iunsWz150AAAAAElFTkSuQmCC
+</value>
+  </data>
+</root>
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/AlgorithmHost.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/AlgorithmHost.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/AlgorithmHost.cs	(revision 5296)
@@ -0,0 +1,582 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.IO;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Collections;
+using HeuristicLab.Common;
+using HeuristicLab.Common.Resources;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.OKB.Client;
+using HeuristicLab.Optimization;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Persistence.Default.Xml;
+
+namespace HeuristicLab.OKB.AlgorithmHost {
+
+  [Item("OKB Algorithm Host", "Load, run and submit values from and to the OKB")]
+  [Creatable("Optimization Knowledge Base")]
+  [StorableClass]
+  public class AlgorithmHost : NamedItem, IAlgorithm {
+
+    public override System.Drawing.Image ItemImage {
+      get {
+        if (ExecutionState == ExecutionState.Prepared) return VS2008ImageLibrary.ExecutablePrepared;
+        else if (ExecutionState == ExecutionState.Started) return VS2008ImageLibrary.ExecutableStarted;
+        else if (ExecutionState == ExecutionState.Paused) return VS2008ImageLibrary.ExecutablePaused;
+        else if (ExecutionState == ExecutionState.Stopped) return VS2008ImageLibrary.ExecutableStopped;
+        else return VS2008ImageLibrary.Event;
+      }
+    }
+
+    [Storable]
+    private IAlgorithm algorithm;
+    public IAlgorithm Algorithm {
+      get { return algorithm; }
+      protected set {
+        if (algorithm != value) {
+          if (algorithm != null)
+            DeregisterAlgorithmEvents();
+          algorithm = value;
+          if (algorithm != null) {
+            algorithm.Problem = problem;
+            RegisterAlgorithmEvents();
+          }
+          OnAlgorithmChanged();
+          Prepare();
+        }
+      }
+    }
+    public event EventHandler AlgorithmChanged;
+
+    #region constructors
+    public AlgorithmHost() {
+      name = ItemName;
+      description = ItemDescription;
+      executionState = ExecutionState.Stopped;
+      executionTime = TimeSpan.Zero;
+      Runs = new RunCollection();
+    }
+
+    public AlgorithmHost(string name)
+      : base(name) {
+      description = ItemDescription;
+      executionState = ExecutionState.Stopped;
+      executionTime = TimeSpan.Zero;
+      Runs = new RunCollection();
+    }
+
+    public AlgorithmHost(string name, string description)
+      : base(name, description) {
+      executionState = ExecutionState.Stopped;
+      executionTime = TimeSpan.Zero;
+      Runs = new RunCollection();
+    }
+
+    [StorableConstructor]
+    private AlgorithmHost(bool deserializing)
+      : base(deserializing) {
+    }
+    #endregion
+
+    #region Persistence
+    [StorableHook(HookType.AfterDeserialization)]
+    private void Initialize() {
+      if (algorithm != null) RegisterAlgorithmEvents();
+      if (runs != null) RegisterRunsEvents();
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      if (ExecutionState == ExecutionState.Started)
+        throw new InvalidOperationException("Clone not allowed while algorithm host is running");
+      AlgorithmHost clone = (AlgorithmHost)base.Clone(cloner);
+      clone.executionState = executionState;
+      clone.executionTime = executionTime;
+      clone.algorithm = (IAlgorithm)cloner.Clone(algorithm);
+      clone.runs = (RunCollection)cloner.Clone(runs);
+      clone.Initialize();
+      return clone;
+    }
+    #endregion
+
+    #region OKB connection
+
+    public OKBRunner.StarterKit StarterKit { get; set; }
+
+    public OKBRunner.StarterKit DownloadStarerKit() {
+      OKBRunner.RunnerServiceClient client =
+        ClientFactory.Create<OKBRunner.RunnerServiceClient, OKBRunner.IRunnerService>();
+      client.Login(Environment.MachineName);
+      OKBRunner.StarterKit starterKit = client.GetStarterKit("HL 3.3");
+      client.Logout();
+      client.Close();
+      return starterKit;
+    }
+
+    private ObservableDictionary<string, string> algorithmParameterMapping;
+    private ObservableDictionary<string, string> resultMapping;
+
+    private OKBRunner.Algorithm okbAlgorithm;
+    public OKBRunner.Algorithm OKBAlgorithm {
+      get {
+        return okbAlgorithm;
+      }
+      internal set {
+        if (value == okbAlgorithm) return;
+        LoadAlgorithm(value.Id);
+        okbAlgorithm = value;
+      }
+    }
+
+    private ObservableDictionary<string, string> problemParameterMapping;
+    private OKBRunner.Problem okbProblem;
+    public OKBRunner.Problem OKBProblem {
+      get {
+        return okbProblem;
+      }
+      internal set {
+        if (value == okbProblem) return;
+        LoadProblem(value.Id);
+        okbProblem = value;
+      }
+    }
+
+    private void LoadAlgorithm(int id) {
+      AlgorithmContainer algorithmContainer;
+      using (var stream = new MemoryStream()) {
+        Load(stream, OKBData.EntityType.Algorithm, id);
+        stream.Seek(0, SeekOrigin.Begin);
+        algorithmContainer = XmlParser.Deserialize<AlgorithmContainer>(stream);
+      }
+      Algorithm = algorithmContainer.Algorithm;
+      algorithmParameterMapping = algorithmContainer.ParameterMapping;
+      resultMapping = algorithmContainer.ResultMapping;
+    }
+
+    private void LoadProblem(int id) {
+      ProblemContainer problemContainer;
+      using (var stream = new MemoryStream()) {
+        Load(stream, OKBData.EntityType.Problem, id);
+        stream.Seek(0, SeekOrigin.Begin);
+        problemContainer = XmlParser.Deserialize<ProblemContainer>(stream);
+      }
+      SetProblem(problemContainer.Problem, true);
+      problemParameterMapping = problemContainer.ParameterMapping;
+    }
+
+    private void Load(Stream stream, OKBData.EntityType type, int id) {
+      OKBData.DataServiceClient client = ClientFactory
+       .Create<OKBData.DataServiceClient, OKBData.IDataService>();
+      int total = client.Request(type, id);
+      for (int length = 1; length > 0; ) {
+        byte[] buffer = client.GetNextChunk(100);
+        stream.Write(buffer, 0, buffer.Length);
+        length = buffer.Length;
+      }
+      stream.Flush();
+    }
+
+    public OKBRunner.ExperimentKit PrepareSubmission(IRun run) {
+      OKBRunner.ExperimentKit experimentKit = PrepareExperiment();
+      Debug.Assert(run.Algorithm.Name == Algorithm.Name, "run algorithm must match current algorithm");
+      Debug.Assert(run.Algorithm.Problem.Name == Problem.Name, "run problem must match current problem");
+      SetParameters(run, experimentKit);
+      SetResults(run, experimentKit);
+      return experimentKit;
+    }
+
+    public void SubmitRun(OKBRunner.ExperimentKit experimentKit) {
+      var client = ClientFactory.Create<OKBRunner.RunnerServiceClient, OKBRunner.IRunnerService>();
+      client.Login(Environment.MachineName);
+      client.AddRun(experimentKit.Algorithm, experimentKit.Problem, StarterKit.Projects.First());
+      client.Logout();
+      client.Close();
+    }
+
+    public static string FormatSubmission(OKBRunner.ExperimentKit experimentKit) {
+      StringBuilder sb = new StringBuilder();
+      sb.Append(experimentKit.Algorithm.Name).Append("@").AppendLine(experimentKit.Problem.Name);
+      sb.AppendLine("Parameters:");
+      foreach (var p in experimentKit.Algorithm.Algorithm_Parameters.Select(ap => ap.Parameter)) {
+        sb.Append(p.Name).Append(": ");
+        if (p.IntParameterValues != null && p.IntParameterValues.Count > 0)
+          sb.Append(p.IntParameterValues[0].Value).AppendLine();
+        else if (p.FloatParameterValues != null && p.FloatParameterValues.Count > 0)
+          sb.Append(p.FloatParameterValues[0].Value).AppendLine();
+        else if (p.CharParameterValues != null && p.CharParameterValues.Count > 0)
+          sb.AppendLine(p.CharParameterValues[0].Value);
+        else if (p.OperatorParameterValues != null && p.OperatorParameterValues.Count > 0)
+          sb.Append('<').Append(p.OperatorParameterValues[0].DataType.ClrName).AppendLine(">");
+        else
+          sb.AppendLine("???");
+      }
+      sb.AppendLine("Results:");
+      foreach (var r in experimentKit.Algorithm.Algorithm_Results.Select(ar => ar.Result)) {
+        sb.Append(r.Name).Append(": ");
+        if (r.IntResultValues != null && r.IntResultValues.Count > 0) {
+          sb.Append(r.IntResultValues[0].Value).AppendLine();
+        } else if (r.FloatResultValues != null && r.FloatResultValues.Count > 0) {
+          sb.Append(r.FloatResultValues[0].Value).AppendLine();
+        } else if (r.CharResultValues != null && r.CharResultValues.Count > 0) {
+          sb.AppendLine(r.CharResultValues[0].Value);
+        } else if (r.BlobResultValues != null && r.BlobResultValues.Count > 0) {
+          sb.Append("byte[").Append(r.BlobResultValues[0].Value.Bytes.Length).AppendLine("]");
+        } else
+          sb.AppendLine("???");
+      }
+      return sb.ToString();
+    }
+
+    private void SetResults(IRun run, OKBRunner.ExperimentKit experimentKit) {
+      var results = experimentKit.Algorithm.Algorithm_Results.Select(ar => ar.Result).ToList();
+      experimentKit.Algorithm.Algorithm_Results.Clear();
+      foreach (var r in results) {
+        if (resultMapping.ContainsValue(r.Name)) {
+          var rm = resultMapping.Single(kvp => kvp.Value == r.Name);
+          if (run.Results.ContainsKey(rm.Key))
+            experimentKit.Algorithm.AddResultValue(r.Name, run.Results[rm.Key]);
+        }
+      }
+    }
+
+    private void SetParameters(IRun run, OKBRunner.ExperimentKit experimentKit) {
+      var algorithmParameters = experimentKit.Algorithm.Algorithm_Parameters.Select(ap => ap.Parameter).ToList();
+      var problemParameters = experimentKit.Problem.Problem_Parameters.Select(pp => pp.Parameter).ToList();
+      experimentKit.Algorithm.Algorithm_Parameters.Clear();
+      foreach (var p in algorithmParameters) {
+        if (algorithmParameterMapping.ContainsValue(p.Name)) {
+          var pm = algorithmParameterMapping.Single(kvp => kvp.Value == p.Name);
+          if (run.Algorithm.Parameters.ContainsKey(pm.Key)) {
+            experimentKit.Algorithm.AddParameterValue(p.Name, run.Algorithm.Parameters[pm.Key].ActualValue);
+          }
+        }
+      }
+
+      foreach (var p in problemParameters) {
+        if (problemParameterMapping.ContainsValue(p.Name)) {
+          var pm = problemParameterMapping.Single(kvp => kvp.Value == p.Name);
+          if (run.Algorithm.Problem.Parameters.ContainsKey(pm.Key)) {
+            experimentKit.Algorithm.AddParameterValue(p.Name, run.Algorithm.Problem.Parameters[pm.Key].ActualValue);
+          }
+        }
+      }
+    }
+
+    private OKBRunner.ExperimentKit PrepareExperiment() {
+      OKBRunner.RunnerServiceClient client =
+        ClientFactory.Create<OKBRunner.RunnerServiceClient, OKBRunner.IRunnerService>();
+      client.Login(Environment.MachineName);
+      OKBRunner.ExperimentKit experimentKit = client.PrepareExperiment(OKBAlgorithm, OKBProblem);
+      client.Logout();
+      client.Close();
+      return experimentKit;
+    }
+    #endregion
+
+    #region IAlgorithm Members
+
+    public void CollectResultValues(IDictionary<string, IItem> values) {
+      if (algorithm != null)
+        algorithm.CollectResultValues(values);
+    }
+
+    public bool HasOKBProblem { get; protected set; }
+    private IProblem problem;
+    public IProblem Problem {
+      get { return problem; }
+      set { SetProblem(value, false); }
+    }
+    protected void SetProblem(IProblem value, bool isOkbProblem) {
+      HasOKBProblem = isOkbProblem;
+      if (value == problem) return;
+      problem = value;
+      if (algorithm != null)
+        algorithm.Problem = value;
+      OnProblemChanged();
+    }
+
+    public event EventHandler ProblemChanged;
+    protected virtual void OnProblemChanged() {
+      EventHandler handler = ProblemChanged;
+      if (handler != null)
+        handler(this, EventArgs.Empty);
+    }
+
+
+    public Type ProblemType {
+      get { return algorithm != null ? algorithm.ProblemType : typeof(IProblem); }
+    }
+
+    public ResultCollection Results {
+      get { return algorithm != null ? algorithm.Results : null; }
+    }
+
+    public bool StoreAlgorithmInEachRun {
+      get { return algorithm.StoreAlgorithmInEachRun; }
+      set {
+        if (value != algorithm.StoreAlgorithmInEachRun) {
+          algorithm.StoreAlgorithmInEachRun = value;
+          OnStoreAlgorithmInEachRunChanged();
+        }
+      }
+    }
+
+    public event EventHandler StoreAlgorithmInEachRunChanged;
+    protected virtual void OnStoreAlgorithmInEachRunChanged() {
+      EventHandler handler = StoreAlgorithmInEachRunChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    #endregion
+
+    #region IParameterizedItem Members
+
+    public void CollectParameterValues(IDictionary<string, IItem> values) {
+      if (algorithm != null)
+        algorithm.CollectParameterValues(values);
+    }
+
+    public IKeyedItemCollection<string, IParameter> Parameters {
+      get { return algorithm != null ? algorithm.Parameters : null; }
+    }
+
+    public IKeyedItemCollection<string, IParameter> ProblemParameters {
+      get { return Problem != null ? Problem.Parameters : null; }
+    }
+
+    #endregion
+
+    #region IOptimizer Members
+
+    public void Prepare(bool clearRuns) {
+      if ((ExecutionState != ExecutionState.Prepared) && (ExecutionState != ExecutionState.Paused) && (ExecutionState != ExecutionState.Stopped))
+        throw new InvalidOperationException(string.Format("Prepare not allowed in execution state \"{0}\".", ExecutionState));
+      if (Algorithm != null) {
+        if (clearRuns) runs.Clear();
+        Algorithm.Prepare(clearRuns);
+      }
+    }
+
+
+    [Storable]
+    private RunCollection runs;
+    public RunCollection Runs {
+      get { return runs; }
+      private set {
+        if (value == null) throw new ArgumentNullException();
+        if (runs != value) {
+          if (runs != null) DeregisterRunsEvents();
+          runs = value;
+          if (runs != null) RegisterRunsEvents();
+        }
+      }
+    }
+
+    #endregion
+
+    #region IExecutable Members
+
+    public event EventHandler<EventArgs<Exception>> ExceptionOccurred;
+
+    [Storable]
+    private ExecutionState executionState;
+    public ExecutionState ExecutionState {
+      get { return executionState; }
+      private set {
+        if (executionState != value) {
+          executionState = value;
+          OnExecutionStateChanged();
+          OnItemImageChanged();
+        }
+      }
+    }
+
+    public event EventHandler ExecutionStateChanged;
+
+    [Storable]
+    private TimeSpan executionTime;
+    public TimeSpan ExecutionTime {
+      get {
+        if ((Algorithm != null) && (Algorithm.ExecutionState != ExecutionState.Stopped))
+          return executionTime + Algorithm.ExecutionTime;
+        else
+          return executionTime;
+      }
+      private set {
+        executionTime = value;
+        OnExecutionTimeChanged();
+      }
+    }
+
+    public event EventHandler ExecutionTimeChanged;
+
+    public void Pause() {
+      if (ExecutionState != ExecutionState.Started)
+        throw new InvalidOperationException(string.Format("Pause not allowed in execution state \"{0}\".", ExecutionState));
+      if ((Algorithm != null) && (Algorithm.ExecutionState == ExecutionState.Started))
+        Algorithm.Pause();
+    }
+
+    public event EventHandler Paused;
+
+    public void Prepare() {
+      Prepare(false);
+    }
+
+    public event EventHandler Prepared;
+
+    public void Start() {
+      if ((ExecutionState != ExecutionState.Prepared) && (ExecutionState != ExecutionState.Paused))
+        throw new InvalidOperationException(string.Format("Start not allowed in execution state \"{0}\".", ExecutionState));
+      if (Algorithm != null) Algorithm.Start();
+    }
+
+    public event EventHandler Started;
+
+    public void Stop() {
+      if ((ExecutionState != ExecutionState.Started) && (ExecutionState != ExecutionState.Paused))
+        throw new InvalidOperationException(string.Format("Stop not allowed in execution state \"{0}\".", ExecutionState));
+      if ((Algorithm != null) &&
+          ((Algorithm.ExecutionState == ExecutionState.Started) || (Algorithm.ExecutionState == ExecutionState.Paused)))
+        Algorithm.Stop();
+    }
+
+    public event EventHandler Stopped;
+
+    #endregion
+
+    #region events
+    private void OnExecutionStateChanged() {
+      EventHandler handler = ExecutionStateChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    private void OnExecutionTimeChanged() {
+      EventHandler handler = ExecutionTimeChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    private void OnAlgorithmChanged() {
+      EventHandler handler = AlgorithmChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    private void OnPrepared() {
+      ExecutionState = ExecutionState.Prepared;
+      EventHandler handler = Prepared;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    private void OnStarted() {
+      ExecutionState = ExecutionState.Started;
+      EventHandler handler = Started;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    private void OnPaused() {
+      ExecutionState = ExecutionState.Paused;
+      EventHandler handler = Paused;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    private void OnStopped() {
+      ExecutionState = ExecutionState.Stopped;
+      EventHandler handler = Stopped;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    private void OnExceptionOccurred(Exception exception) {
+      EventHandler<EventArgs<Exception>> handler = ExceptionOccurred;
+      if (handler != null) handler(this, new EventArgs<Exception>(exception));
+    }
+    private void RegisterAlgorithmEvents() {
+      algorithm.ExceptionOccurred += new EventHandler<EventArgs<Exception>>(Algorithm_ExceptionOccurred);
+      algorithm.ExecutionTimeChanged += new EventHandler(Algorithm_ExecutionTimeChanged);
+      algorithm.Paused += new EventHandler(Algorithm_Paused);
+      algorithm.Prepared += new EventHandler(Algorithm_Prepared);
+      algorithm.Started += new EventHandler(Algorithm_Started);
+      algorithm.Stopped += new EventHandler(Algorithm_Stopped);
+      algorithm.Runs.CollectionReset += new CollectionItemsChangedEventHandler<IRun>(Algorithm_Runs_CollectionReset);
+      algorithm.Runs.ItemsAdded += new CollectionItemsChangedEventHandler<IRun>(Algorithm_Runs_ItemsAdded);
+      algorithm.Runs.ItemsRemoved += new CollectionItemsChangedEventHandler<IRun>(Algorithm_Runs_ItemsRemoved);
+      algorithm.ProblemChanged += new EventHandler(Algorithm_ProblemChanged);
+    }
+
+    private void DeregisterAlgorithmEvents() {
+      algorithm.ExceptionOccurred -= new EventHandler<EventArgs<Exception>>(Algorithm_ExceptionOccurred);
+      algorithm.ExecutionTimeChanged -= new EventHandler(Algorithm_ExecutionTimeChanged);
+      algorithm.Paused -= new EventHandler(Algorithm_Paused);
+      algorithm.Prepared -= new EventHandler(Algorithm_Prepared);
+      algorithm.Started -= new EventHandler(Algorithm_Started);
+      algorithm.Stopped -= new EventHandler(Algorithm_Stopped);
+      algorithm.Runs.CollectionReset -= new CollectionItemsChangedEventHandler<IRun>(Algorithm_Runs_CollectionReset);
+      algorithm.Runs.ItemsAdded -= new CollectionItemsChangedEventHandler<IRun>(Algorithm_Runs_ItemsAdded);
+      algorithm.Runs.ItemsRemoved -= new CollectionItemsChangedEventHandler<IRun>(Algorithm_Runs_ItemsRemoved);
+      algorithm.ProblemChanged -= new EventHandler(Algorithm_ProblemChanged);
+    }
+    private void Algorithm_ExceptionOccurred(object sender, EventArgs<Exception> e) {
+      OnExceptionOccurred(e.Value);
+    }
+    private void Algorithm_ExecutionTimeChanged(object sender, EventArgs e) {
+      OnExecutionTimeChanged();
+    }
+    private void Algorithm_Paused(object sender, EventArgs e) {
+      OnPaused();
+    }
+    private void Algorithm_Prepared(object sender, EventArgs e) {
+      OnPrepared();
+    }
+    private void Algorithm_Started(object sender, EventArgs e) {
+      if (ExecutionState != ExecutionState.Started)
+        OnStarted();
+    }
+    private void Algorithm_Stopped(object sender, EventArgs e) {
+      ExecutionTime = Algorithm.ExecutionTime;
+      OnStopped();
+    }
+    private void Algorithm_Runs_CollectionReset(object sender, CollectionItemsChangedEventArgs<IRun> e) {
+      Runs.RemoveRange(e.OldItems);
+      Runs.AddRange(e.Items);
+    }
+    private void Algorithm_Runs_ItemsAdded(object sender, CollectionItemsChangedEventArgs<IRun> e) {
+      Runs.AddRange(e.Items);
+    }
+    private void Algorithm_Runs_ItemsRemoved(object sender, CollectionItemsChangedEventArgs<IRun> e) {
+      Runs.RemoveRange(e.Items);
+    }
+    void Algorithm_ProblemChanged(object sender, EventArgs e) {
+      if (Algorithm.Problem == Problem)
+        return;
+      Problem = Algorithm.Problem;
+    }
+
+    private void RegisterRunsEvents() {
+      runs.CollectionReset += new CollectionItemsChangedEventHandler<IRun>(Runs_CollectionReset);
+      runs.ItemsRemoved += new CollectionItemsChangedEventHandler<IRun>(Runs_ItemsRemoved);
+    }
+    private void DeregisterRunsEvents() {
+      runs.CollectionReset -= new CollectionItemsChangedEventHandler<IRun>(Runs_CollectionReset);
+      runs.ItemsRemoved -= new CollectionItemsChangedEventHandler<IRun>(Runs_ItemsRemoved);
+    }
+    private void Runs_CollectionReset(object sender, CollectionItemsChangedEventArgs<IRun> e) {
+      foreach (IRun run in e.OldItems) {
+        IItem item;
+        run.Results.TryGetValue("Execution Time", out item);
+        TimeSpanValue executionTime = item as TimeSpanValue;
+        if (executionTime != null) ExecutionTime -= executionTime.Value;
+      }
+      if (Algorithm != null) Algorithm.Runs.RemoveRange(e.OldItems);
+      foreach (IRun run in e.Items) {
+        IItem item;
+        run.Results.TryGetValue("Execution Time", out item);
+        TimeSpanValue executionTime = item as TimeSpanValue;
+        if (executionTime != null) ExecutionTime += executionTime.Value;
+      }
+    }
+    private void Runs_ItemsRemoved(object sender, CollectionItemsChangedEventArgs<IRun> e) {
+      foreach (IRun run in e.Items) {
+        IItem item;
+        run.Results.TryGetValue("Execution Time", out item);
+        TimeSpanValue executionTime = item as TimeSpanValue;
+        if (executionTime != null) ExecutionTime -= executionTime.Value;
+      }
+      if (Algorithm != null) Algorithm.Runs.RemoveRange(e.Items);
+    }
+    #endregion
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/AlgorithmHostView.Designer.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/AlgorithmHostView.Designer.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/AlgorithmHostView.Designer.cs	(revision 5296)
@@ -0,0 +1,473 @@
+﻿using HeuristicLab.Optimization.Views;
+namespace HeuristicLab.OKB.AlgorithmHost {
+  partial class AlgorithmHostView {
+    /// <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) {
+        if (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() {
+      System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AlgorithmHostView));
+      this.tabControl = new System.Windows.Forms.TabControl();
+      this.okbTabPage = new System.Windows.Forms.TabPage();
+      this.problemLabel = new System.Windows.Forms.Label();
+      this.algorithmLabel = new System.Windows.Forms.Label();
+      this.viewProblemButton = new System.Windows.Forms.Button();
+      this.viewAlgorithmButton = new System.Windows.Forms.Button();
+      this.connectButton = new System.Windows.Forms.Button();
+      this.progressBar = new System.Windows.Forms.ProgressBar();
+      this.statusStrip = new System.Windows.Forms.StatusStrip();
+      this.openAlgorithmButton = new System.Windows.Forms.Button();
+      this.openProblemButton = new System.Windows.Forms.Button();
+      this.algorithmParametersTabPage = new System.Windows.Forms.TabPage();
+      this.algorithmParameterCollectionView = new HeuristicLab.Core.Views.ParameterCollectionView();
+      this.problemParametersTabPage = new System.Windows.Forms.TabPage();
+      this.problemParameterCollectionView = new HeuristicLab.Core.Views.ParameterCollectionView();
+      this.resultsTabPage = new System.Windows.Forms.TabPage();
+      this.resultsView = new HeuristicLab.Optimization.Views.ResultCollectionView();
+      this.runsTabPage = new System.Windows.Forms.TabPage();
+      this.submitButton = new System.Windows.Forms.Button();
+      this.runsView = new HeuristicLab.Optimization.Views.RunCollectionView();
+      this.startButton = new System.Windows.Forms.Button();
+      this.pauseButton = new System.Windows.Forms.Button();
+      this.resetButton = new System.Windows.Forms.Button();
+      this.executionTimeLabel = new System.Windows.Forms.Label();
+      this.executionTimeTextBox = new System.Windows.Forms.TextBox();
+      this.openFileDialog = new System.Windows.Forms.OpenFileDialog();
+      this.stopButton = new System.Windows.Forms.Button();
+      this.autoSubmitCheckBox = new System.Windows.Forms.CheckBox();
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
+      this.tabControl.SuspendLayout();
+      this.okbTabPage.SuspendLayout();
+      this.algorithmParametersTabPage.SuspendLayout();
+      this.problemParametersTabPage.SuspendLayout();
+      this.resultsTabPage.SuspendLayout();
+      this.runsTabPage.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // nameTextBox
+      // 
+      this.errorProvider.SetIconAlignment(this.nameTextBox, System.Windows.Forms.ErrorIconAlignment.MiddleLeft);
+      this.errorProvider.SetIconPadding(this.nameTextBox, 2);
+      this.nameTextBox.Size = new System.Drawing.Size(568, 20);
+      // 
+      // descriptionTextBox
+      // 
+      this.descriptionTextBox.Size = new System.Drawing.Size(568, 20);
+      // 
+      // tabControl
+      // 
+      this.tabControl.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.tabControl.Controls.Add(this.okbTabPage);
+      this.tabControl.Controls.Add(this.algorithmParametersTabPage);
+      this.tabControl.Controls.Add(this.problemParametersTabPage);
+      this.tabControl.Controls.Add(this.resultsTabPage);
+      this.tabControl.Controls.Add(this.runsTabPage);
+      this.tabControl.Location = new System.Drawing.Point(3, 52);
+      this.tabControl.Name = "tabControl";
+      this.tabControl.SelectedIndex = 0;
+      this.tabControl.Size = new System.Drawing.Size(634, 398);
+      this.tabControl.TabIndex = 4;
+      // 
+      // okbTabPage
+      // 
+      this.okbTabPage.Controls.Add(this.problemLabel);
+      this.okbTabPage.Controls.Add(this.algorithmLabel);
+      this.okbTabPage.Controls.Add(this.viewProblemButton);
+      this.okbTabPage.Controls.Add(this.viewAlgorithmButton);
+      this.okbTabPage.Controls.Add(this.connectButton);
+      this.okbTabPage.Controls.Add(this.progressBar);
+      this.okbTabPage.Controls.Add(this.statusStrip);
+      this.okbTabPage.Controls.Add(this.openAlgorithmButton);
+      this.okbTabPage.Controls.Add(this.openProblemButton);
+      this.okbTabPage.Location = new System.Drawing.Point(4, 22);
+      this.okbTabPage.Name = "okbTabPage";
+      this.okbTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.okbTabPage.Size = new System.Drawing.Size(626, 372);
+      this.okbTabPage.TabIndex = 6;
+      this.okbTabPage.Text = "OKB";
+      this.okbTabPage.UseVisualStyleBackColor = true;
+      // 
+      // problemLabel
+      // 
+      this.problemLabel.AutoSize = true;
+      this.problemLabel.Location = new System.Drawing.Point(6, 72);
+      this.problemLabel.Name = "problemLabel";
+      this.problemLabel.Size = new System.Drawing.Size(45, 13);
+      this.problemLabel.TabIndex = 19;
+      this.problemLabel.Text = "Problem";
+      // 
+      // algorithmLabel
+      // 
+      this.algorithmLabel.AutoSize = true;
+      this.algorithmLabel.Location = new System.Drawing.Point(6, 42);
+      this.algorithmLabel.Name = "algorithmLabel";
+      this.algorithmLabel.Size = new System.Drawing.Size(50, 13);
+      this.algorithmLabel.TabIndex = 18;
+      this.algorithmLabel.Text = "Algorithm";
+      // 
+      // viewProblemButton
+      // 
+      this.viewProblemButton.Image = ((System.Drawing.Image)(resources.GetObject("viewProblemButton.Image")));
+      this.viewProblemButton.Location = new System.Drawing.Point(92, 66);
+      this.viewProblemButton.Name = "viewProblemButton";
+      this.viewProblemButton.Size = new System.Drawing.Size(24, 24);
+      this.viewProblemButton.TabIndex = 17;
+      this.viewProblemButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText;
+      this.toolTip.SetToolTip(this.viewProblemButton, "View Problem");
+      this.viewProblemButton.UseVisualStyleBackColor = true;
+      this.viewProblemButton.Click += new System.EventHandler(this.viewProblemButton_Click);
+      // 
+      // viewAlgorithmButton
+      // 
+      this.viewAlgorithmButton.Image = ((System.Drawing.Image)(resources.GetObject("viewAlgorithmButton.Image")));
+      this.viewAlgorithmButton.Location = new System.Drawing.Point(92, 36);
+      this.viewAlgorithmButton.Name = "viewAlgorithmButton";
+      this.viewAlgorithmButton.Size = new System.Drawing.Size(24, 24);
+      this.viewAlgorithmButton.TabIndex = 16;
+      this.viewAlgorithmButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText;
+      this.toolTip.SetToolTip(this.viewAlgorithmButton, "View Algorithm");
+      this.viewAlgorithmButton.UseVisualStyleBackColor = true;
+      this.viewAlgorithmButton.Click += new System.EventHandler(this.viewAlgorithmButton_Click);
+      // 
+      // connectButton
+      // 
+      this.connectButton.Image = ((System.Drawing.Image)(resources.GetObject("connectButton.Image")));
+      this.connectButton.Location = new System.Drawing.Point(6, 6);
+      this.connectButton.Name = "connectButton";
+      this.connectButton.Size = new System.Drawing.Size(24, 24);
+      this.connectButton.TabIndex = 13;
+      this.connectButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText;
+      this.toolTip.SetToolTip(this.connectButton, "Connect to the OKB and (re)download starter kit");
+      this.connectButton.UseVisualStyleBackColor = true;
+      this.connectButton.Click += new System.EventHandler(this.connectButton_Click);
+      // 
+      // progressBar
+      // 
+      this.progressBar.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.progressBar.Location = new System.Drawing.Point(36, 6);
+      this.progressBar.MarqueeAnimationSpeed = 1;
+      this.progressBar.Name = "progressBar";
+      this.progressBar.Size = new System.Drawing.Size(584, 23);
+      this.progressBar.Style = System.Windows.Forms.ProgressBarStyle.Marquee;
+      this.progressBar.TabIndex = 15;
+      this.progressBar.Visible = false;
+      // 
+      // statusStrip
+      // 
+      this.statusStrip.Location = new System.Drawing.Point(3, 347);
+      this.statusStrip.Name = "statusStrip";
+      this.statusStrip.Size = new System.Drawing.Size(620, 22);
+      this.statusStrip.TabIndex = 14;
+      this.statusStrip.Text = "statusStrip";
+      // 
+      // openAlgorithmButton
+      // 
+      this.openAlgorithmButton.Image = ((System.Drawing.Image)(resources.GetObject("openAlgorithmButton.Image")));
+      this.openAlgorithmButton.Location = new System.Drawing.Point(62, 36);
+      this.openAlgorithmButton.Name = "openAlgorithmButton";
+      this.openAlgorithmButton.Size = new System.Drawing.Size(24, 24);
+      this.openAlgorithmButton.TabIndex = 2;
+      this.openAlgorithmButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText;
+      this.toolTip.SetToolTip(this.openAlgorithmButton, "Open Algorithm");
+      this.openAlgorithmButton.UseVisualStyleBackColor = true;
+      this.openAlgorithmButton.Click += new System.EventHandler(this.openAlgorithmButton_Click);
+      // 
+      // openProblemButton
+      // 
+      this.openProblemButton.Image = ((System.Drawing.Image)(resources.GetObject("openProblemButton.Image")));
+      this.openProblemButton.Location = new System.Drawing.Point(62, 66);
+      this.openProblemButton.Name = "openProblemButton";
+      this.openProblemButton.Size = new System.Drawing.Size(24, 24);
+      this.openProblemButton.TabIndex = 1;
+      this.openProblemButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText;
+      this.toolTip.SetToolTip(this.openProblemButton, "Open Problem");
+      this.openProblemButton.UseVisualStyleBackColor = true;
+      this.openProblemButton.Click += new System.EventHandler(this.openProblemButton_Click);
+      // 
+      // algorithmParametersTabPage
+      // 
+      this.algorithmParametersTabPage.Controls.Add(this.algorithmParameterCollectionView);
+      this.algorithmParametersTabPage.Location = new System.Drawing.Point(4, 22);
+      this.algorithmParametersTabPage.Name = "algorithmParametersTabPage";
+      this.algorithmParametersTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.algorithmParametersTabPage.Size = new System.Drawing.Size(626, 372);
+      this.algorithmParametersTabPage.TabIndex = 1;
+      this.algorithmParametersTabPage.Text = "Algorithm Parameters";
+      this.algorithmParametersTabPage.UseVisualStyleBackColor = true;
+      // 
+      // algorithmParameterCollectionView
+      // 
+      this.algorithmParameterCollectionView.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.algorithmParameterCollectionView.Caption = "ParameterCollection View";
+      this.algorithmParameterCollectionView.Content = null;
+      this.algorithmParameterCollectionView.Location = new System.Drawing.Point(6, 6);
+      this.algorithmParameterCollectionView.Name = "algorithmParameterCollectionView";
+      this.algorithmParameterCollectionView.ReadOnly = false;
+      this.algorithmParameterCollectionView.Size = new System.Drawing.Size(614, 360);
+      this.algorithmParameterCollectionView.TabIndex = 0;
+      // 
+      // problemParametersTabPage
+      // 
+      this.problemParametersTabPage.Controls.Add(this.problemParameterCollectionView);
+      this.problemParametersTabPage.Location = new System.Drawing.Point(4, 22);
+      this.problemParametersTabPage.Name = "problemParametersTabPage";
+      this.problemParametersTabPage.Size = new System.Drawing.Size(626, 372);
+      this.problemParametersTabPage.TabIndex = 5;
+      this.problemParametersTabPage.Text = "Problem Parameters";
+      this.problemParametersTabPage.UseVisualStyleBackColor = true;
+      // 
+      // problemParameterCollectionView
+      // 
+      this.problemParameterCollectionView.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.problemParameterCollectionView.Caption = "ParameterCollection View";
+      this.problemParameterCollectionView.Content = null;
+      this.problemParameterCollectionView.Location = new System.Drawing.Point(6, 6);
+      this.problemParameterCollectionView.Name = "problemParameterCollectionView";
+      this.problemParameterCollectionView.ReadOnly = false;
+      this.problemParameterCollectionView.Size = new System.Drawing.Size(614, 360);
+      this.problemParameterCollectionView.TabIndex = 0;
+      // 
+      // resultsTabPage
+      // 
+      this.resultsTabPage.Controls.Add(this.resultsView);
+      this.resultsTabPage.Location = new System.Drawing.Point(4, 22);
+      this.resultsTabPage.Name = "resultsTabPage";
+      this.resultsTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.resultsTabPage.Size = new System.Drawing.Size(626, 372);
+      this.resultsTabPage.TabIndex = 2;
+      this.resultsTabPage.Text = "Results";
+      this.resultsTabPage.UseVisualStyleBackColor = true;
+      // 
+      // resultsView
+      // 
+      this.resultsView.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.resultsView.Caption = "ResultCollection View";
+      this.resultsView.Content = null;
+      this.resultsView.Location = new System.Drawing.Point(6, 6);
+      this.resultsView.Name = "resultsView";
+      this.resultsView.ReadOnly = true;
+      this.resultsView.Size = new System.Drawing.Size(614, 360);
+      this.resultsView.TabIndex = 0;
+      // 
+      // runsTabPage
+      // 
+      this.runsTabPage.Controls.Add(this.autoSubmitCheckBox);
+      this.runsTabPage.Controls.Add(this.submitButton);
+      this.runsTabPage.Controls.Add(this.runsView);
+      this.runsTabPage.Location = new System.Drawing.Point(4, 22);
+      this.runsTabPage.Name = "runsTabPage";
+      this.runsTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.runsTabPage.Size = new System.Drawing.Size(626, 372);
+      this.runsTabPage.TabIndex = 3;
+      this.runsTabPage.Text = "Runs";
+      this.runsTabPage.UseVisualStyleBackColor = true;
+      // 
+      // submitButton
+      // 
+      this.submitButton.Enabled = false;
+      this.submitButton.Image = ((System.Drawing.Image)(resources.GetObject("submitButton.Image")));
+      this.submitButton.Location = new System.Drawing.Point(6, 6);
+      this.submitButton.Name = "submitButton";
+      this.submitButton.Size = new System.Drawing.Size(64, 24);
+      this.submitButton.TabIndex = 2;
+      this.submitButton.Text = "&Submit";
+      this.submitButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText;
+      this.toolTip.SetToolTip(this.submitButton, "Submit runs to the OKB");
+      this.submitButton.UseVisualStyleBackColor = true;
+      this.submitButton.Click += new System.EventHandler(this.submitButton_Click);
+      // 
+      // runsView
+      // 
+      this.runsView.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.runsView.Caption = "RunCollection View";
+      this.runsView.Content = null;
+      this.runsView.Location = new System.Drawing.Point(6, 36);
+      this.runsView.Name = "runsView";
+      this.runsView.ReadOnly = false;
+      this.runsView.Size = new System.Drawing.Size(614, 330);
+      this.runsView.TabIndex = 0;
+      // 
+      // startButton
+      // 
+      this.startButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.startButton.Image = ((System.Drawing.Image)(resources.GetObject("startButton.Image")));
+      this.startButton.Location = new System.Drawing.Point(3, 453);
+      this.startButton.Name = "startButton";
+      this.startButton.Size = new System.Drawing.Size(24, 24);
+      this.startButton.TabIndex = 5;
+      this.toolTip.SetToolTip(this.startButton, "Start/Resume Algorithm");
+      this.startButton.UseVisualStyleBackColor = true;
+      this.startButton.Click += new System.EventHandler(this.startButton_Click);
+      // 
+      // pauseButton
+      // 
+      this.pauseButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.pauseButton.Image = ((System.Drawing.Image)(resources.GetObject("pauseButton.Image")));
+      this.pauseButton.Location = new System.Drawing.Point(33, 453);
+      this.pauseButton.Name = "pauseButton";
+      this.pauseButton.Size = new System.Drawing.Size(24, 24);
+      this.pauseButton.TabIndex = 6;
+      this.toolTip.SetToolTip(this.pauseButton, "Pause Algorithm");
+      this.pauseButton.UseVisualStyleBackColor = true;
+      this.pauseButton.Click += new System.EventHandler(this.pauseButton_Click);
+      // 
+      // resetButton
+      // 
+      this.resetButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.resetButton.Image = ((System.Drawing.Image)(resources.GetObject("resetButton.Image")));
+      this.resetButton.Location = new System.Drawing.Point(93, 453);
+      this.resetButton.Name = "resetButton";
+      this.resetButton.Size = new System.Drawing.Size(24, 24);
+      this.resetButton.TabIndex = 8;
+      this.toolTip.SetToolTip(this.resetButton, "Reset Algorithm");
+      this.resetButton.UseVisualStyleBackColor = true;
+      this.resetButton.Click += new System.EventHandler(this.resetButton_Click);
+      // 
+      // executionTimeLabel
+      // 
+      this.executionTimeLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+      this.executionTimeLabel.AutoSize = true;
+      this.executionTimeLabel.Location = new System.Drawing.Point(411, 459);
+      this.executionTimeLabel.Name = "executionTimeLabel";
+      this.executionTimeLabel.Size = new System.Drawing.Size(83, 13);
+      this.executionTimeLabel.TabIndex = 9;
+      this.executionTimeLabel.Text = "&Execution Time:";
+      // 
+      // executionTimeTextBox
+      // 
+      this.executionTimeTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+      this.executionTimeTextBox.Location = new System.Drawing.Point(500, 456);
+      this.executionTimeTextBox.Name = "executionTimeTextBox";
+      this.executionTimeTextBox.ReadOnly = true;
+      this.executionTimeTextBox.Size = new System.Drawing.Size(137, 20);
+      this.executionTimeTextBox.TabIndex = 10;
+      // 
+      // openFileDialog
+      // 
+      this.openFileDialog.DefaultExt = "hl";
+      this.openFileDialog.FileName = "Problem";
+      this.openFileDialog.Filter = "HeuristicLab Files|*.hl|All Files|*.*";
+      this.openFileDialog.Title = "Open Problem";
+      // 
+      // stopButton
+      // 
+      this.stopButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.stopButton.Image = ((System.Drawing.Image)(resources.GetObject("stopButton.Image")));
+      this.stopButton.Location = new System.Drawing.Point(63, 453);
+      this.stopButton.Name = "stopButton";
+      this.stopButton.Size = new System.Drawing.Size(24, 24);
+      this.stopButton.TabIndex = 7;
+      this.toolTip.SetToolTip(this.stopButton, "Stop Algorithm");
+      this.stopButton.UseVisualStyleBackColor = true;
+      this.stopButton.Click += new System.EventHandler(this.stopButton_Click);
+      // 
+      // autoSubmitCheckBox
+      // 
+      this.autoSubmitCheckBox.AutoSize = true;
+      this.autoSubmitCheckBox.Location = new System.Drawing.Point(76, 11);
+      this.autoSubmitCheckBox.Name = "autoSubmitCheckBox";
+      this.autoSubmitCheckBox.Size = new System.Drawing.Size(83, 17);
+      this.autoSubmitCheckBox.TabIndex = 3;
+      this.autoSubmitCheckBox.Text = "&Auto Submit";
+      this.toolTip.SetToolTip(this.autoSubmitCheckBox, "Automatically submit new runs to the OKB without confirmation");
+      this.autoSubmitCheckBox.UseVisualStyleBackColor = true;
+      // 
+      // AlgorithmHostView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.tabControl);
+      this.Controls.Add(this.startButton);
+      this.Controls.Add(this.pauseButton);
+      this.Controls.Add(this.stopButton);
+      this.Controls.Add(this.executionTimeTextBox);
+      this.Controls.Add(this.executionTimeLabel);
+      this.Controls.Add(this.resetButton);
+      this.Name = "AlgorithmHostView";
+      this.Size = new System.Drawing.Size(640, 480);
+      this.Controls.SetChildIndex(this.resetButton, 0);
+      this.Controls.SetChildIndex(this.executionTimeLabel, 0);
+      this.Controls.SetChildIndex(this.executionTimeTextBox, 0);
+      this.Controls.SetChildIndex(this.stopButton, 0);
+      this.Controls.SetChildIndex(this.pauseButton, 0);
+      this.Controls.SetChildIndex(this.startButton, 0);
+      this.Controls.SetChildIndex(this.tabControl, 0);
+      this.Controls.SetChildIndex(this.nameLabel, 0);
+      this.Controls.SetChildIndex(this.descriptionLabel, 0);
+      this.Controls.SetChildIndex(this.nameTextBox, 0);
+      this.Controls.SetChildIndex(this.descriptionTextBox, 0);
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
+      this.tabControl.ResumeLayout(false);
+      this.okbTabPage.ResumeLayout(false);
+      this.okbTabPage.PerformLayout();
+      this.algorithmParametersTabPage.ResumeLayout(false);
+      this.problemParametersTabPage.ResumeLayout(false);
+      this.resultsTabPage.ResumeLayout(false);
+      this.runsTabPage.ResumeLayout(false);
+      this.runsTabPage.PerformLayout();
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    protected System.Windows.Forms.TabControl tabControl;
+    protected System.Windows.Forms.TabPage algorithmParametersTabPage;
+    protected HeuristicLab.Core.Views.ParameterCollectionView algorithmParameterCollectionView;
+    protected System.Windows.Forms.Button openProblemButton;
+    protected System.Windows.Forms.Button startButton;
+    protected System.Windows.Forms.Button pauseButton;
+    protected System.Windows.Forms.Button resetButton;
+    protected System.Windows.Forms.Label executionTimeLabel;
+    protected System.Windows.Forms.TextBox executionTimeTextBox;
+    protected System.Windows.Forms.OpenFileDialog openFileDialog;
+    protected System.Windows.Forms.TabPage resultsTabPage;
+    protected HeuristicLab.Optimization.Views.ResultCollectionView resultsView;
+    protected System.Windows.Forms.Button stopButton;
+    protected System.Windows.Forms.TabPage runsTabPage;
+    protected RunCollectionView runsView;
+    protected System.Windows.Forms.Button openAlgorithmButton;
+    private System.Windows.Forms.Button connectButton;
+    private System.Windows.Forms.StatusStrip statusStrip;
+    private System.Windows.Forms.ProgressBar progressBar;
+    private System.Windows.Forms.TabPage problemParametersTabPage;
+    private HeuristicLab.Core.Views.ParameterCollectionView problemParameterCollectionView;
+    private System.Windows.Forms.Button submitButton;
+    private System.Windows.Forms.TabPage okbTabPage;
+    private System.Windows.Forms.Label problemLabel;
+    private System.Windows.Forms.Label algorithmLabel;
+    private System.Windows.Forms.Button viewProblemButton;
+    private System.Windows.Forms.Button viewAlgorithmButton;
+    private System.Windows.Forms.CheckBox autoSubmitCheckBox;
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/AlgorithmHostView.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/AlgorithmHostView.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/AlgorithmHostView.cs	(revision 5296)
@@ -0,0 +1,376 @@
+﻿using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Text;
+using System.Linq;
+using System.Windows.Forms;
+using HeuristicLab.Optimization.Views;
+using HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.PluginInfrastructure;
+using HeuristicLab.Optimization;
+using HeuristicLab.Common.Resources;
+using System.Collections.Specialized;
+using System.Threading;
+using HeuristicLab.BackgroundProcessing;
+using HeuristicLab.Collections;
+
+namespace HeuristicLab.OKB.AlgorithmHost {
+
+  [View("OKB Algorithm Host View")]
+  [Content(typeof(AlgorithmHost), true)]
+  public partial class AlgorithmHostView : NamedItemView {
+
+    protected WorkerMonitor workerMonitor;
+
+    public new AlgorithmHost Content {
+      get { return (AlgorithmHost)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public AlgorithmHostView() {
+      InitializeComponent();
+      workerMonitor = new WorkerMonitor();
+      workerMonitor.BackgroundWorkerException += new ThreadExceptionEventHandler(workerMonitor_BackgroundWorkerException);
+      workerMonitor.CollectionChanged += new NotifyCollectionChangedEventHandler(workerMonitor_CollectionChanged);
+    }
+
+    void workerMonitor_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e) {
+      if (InvokeRequired) {
+        Invoke(new NotifyCollectionChangedEventHandler(workerMonitor_CollectionChanged), sender, e);
+      } else {
+        switch (e.Action) {
+          case NotifyCollectionChangedAction.Add:
+            string name = ((ObservableBackgroundWorker)e.NewItems[0]).Name;
+            statusStrip.Items.Add(new ToolStripStatusLabel(name) {
+              Name = name,
+              BorderSides = ToolStripStatusLabelBorderSides.Left,
+              BorderStyle = Border3DStyle.Etched,
+            });
+            break;
+          case NotifyCollectionChangedAction.Remove:
+            statusStrip.Items.RemoveByKey(((ObservableBackgroundWorker)e.OldItems[0]).Name);
+            break;
+        }
+        progressBar.Visible = statusStrip.Items.Count > 0;
+        if (statusStrip.Items.Count > 0) {
+          okbTabPage.Text = "OKB*";
+        } else {
+          okbTabPage.Text = "OKB";
+        }
+      }
+    }
+
+    void workerMonitor_BackgroundWorkerException(object sender, ThreadExceptionEventArgs e) {
+      if (InvokeRequired) {
+        Invoke(new ThreadExceptionEventHandler(workerMonitor_BackgroundWorkerException), sender, e);
+      } else {
+        ErrorHandling.ShowErrorDialog(this, "Uncaught asynchronous exception", e.Exception);
+      }
+    }
+
+    protected override void OnInitialized(EventArgs e) {
+      // Set order of tab pages according to z order.
+      // NOTE: This is required due to a bug in the VS designer.
+      List<Control> tabPages = new List<Control>();
+      for (int i = 0; i < tabControl.Controls.Count; i++) {
+        tabPages.Add(tabControl.Controls[i]);
+      }
+      tabControl.Controls.Clear();
+      foreach (Control control in tabPages)
+        tabControl.Controls.Add(control);
+
+      runsView.ItemsListView.SelectedIndexChanged += new EventHandler(ItemsListView_SelectedIndexChanged);
+      base.OnInitialized(e);
+    }
+
+    void ItemsListView_SelectedIndexChanged(object sender, EventArgs e) {
+      submitButton.Enabled = runsView.ItemsListView.SelectedIndices.Count > 0;
+    }
+
+    protected override void DeregisterContentEvents() {
+      Content.ExceptionOccurred -= new EventHandler<EventArgs<Exception>>(Content_ExceptionOccurred);
+      Content.ExecutionStateChanged -= new EventHandler(Content_ExecutionStateChanged);
+      Content.ExecutionTimeChanged -= new EventHandler(Content_ExecutionTimeChanged);
+      Content.Prepared -= Content_Prepared;
+      Content.AlgorithmChanged -= Content_AlgorithmChanged;
+      Content.ProblemChanged -= Content_ProblemChanged;
+      Content.Runs.ItemsAdded -= Runs_ItemsAdded;
+      base.DeregisterContentEvents();
+    }
+
+    protected override void RegisterContentEvents() {
+      base.RegisterContentEvents();
+      Content.ExceptionOccurred += new EventHandler<EventArgs<Exception>>(Content_ExceptionOccurred);
+      Content.ExecutionStateChanged += new EventHandler(Content_ExecutionStateChanged);
+      Content.ExecutionTimeChanged += new EventHandler(Content_ExecutionTimeChanged);
+      Content.Prepared += Content_Prepared;
+      Content.AlgorithmChanged += Content_AlgorithmChanged;
+      Content.ProblemChanged += Content_ProblemChanged;
+      Content.Runs.ItemsAdded += Runs_ItemsAdded;
+    }
+
+    void Runs_ItemsAdded(object sender, CollectionItemsChangedEventArgs<IRun> e) {
+      if (InvokeRequired) {
+        Invoke(new CollectionItemsChangedEventHandler<IRun>(Runs_ItemsAdded), sender, e);
+      } else {
+        if (autoSubmitCheckBox.Checked) {
+          foreach (IRun run in e.Items) {
+            SubmitRun(run, true);
+          }
+        }
+      }
+    }
+
+    void Content_ProblemChanged(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(Content_ProblemChanged), sender, e);
+      else {
+        problemParameterCollectionView.Content = Content.ProblemParameters;
+        SetEnableStateOfControls();
+        if (!Content.HasOKBProblem)
+          MessageBox.Show(ParentForm,
+            "Non-OKB problem selected: You will not be able to submit results with non-OKB problems",
+            "Non-OKB Problem Selected.", MessageBoxButtons.OK, MessageBoxIcon.Warning);
+      }
+    }
+
+    void Content_AlgorithmChanged(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(Content_AlgorithmChanged), sender, e);
+      else {
+        algorithmParameterCollectionView.Content = Content.Algorithm.Parameters;
+        resultsView.Content = Content.Algorithm.Results.AsReadOnly();
+        SetEnableStateOfControls();
+      }
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      if (Content == null) {
+        algorithmParameterCollectionView.Content = null;
+        problemParameterCollectionView.Content = null;
+        resultsView.Content = null;
+        runsView.Content = null;
+        executionTimeTextBox.Text = "-";
+      } else {
+        algorithmParameterCollectionView.Content = Content.Parameters;
+        problemParameterCollectionView.Content = Content.ProblemParameters;
+        runsView.Content = Content.Runs;
+        executionTimeTextBox.Text = Content.ExecutionTime.ToString();
+        if (Content.StarterKit == null)
+          DownloadStarterKit();
+      }
+      SetEnableStateOfControls();
+    }
+
+    private void DownloadStarterKit() {
+      BackgroundWorker loader = new ObservableBackgroundWorker("Connecting...", workerMonitor);
+      loader.DoWork += (s, a) => {
+        var starterKit = Content.DownloadStarerKit();
+        Content.StarterKit = starterKit;
+      };
+      connectButton.Enabled = false;
+      SetEnableStateOfControls();
+      loader.RunWorkerCompleted += (s, a) => {
+        connectButton.Enabled = true;
+        SetEnableStateOfControls();
+      };
+      loader.RunWorkerAsync();
+    }
+
+    protected override void OnReadOnlyChanged() {
+      base.OnReadOnlyChanged();
+      SetEnableStateOfControls();
+    }
+
+    private void SetEnableStateOfControls() {
+      openAlgorithmButton.Enabled = Content != null && Content.StarterKit != null;
+      openProblemButton.Enabled = Content != null && Content.StarterKit != null;
+      algorithmParameterCollectionView.Enabled = Content != null && Content.Algorithm != null;
+      problemParameterCollectionView.Enabled = Content != null && Content.Problem != null;
+      resultsView.Enabled = Content != null;
+      runsView.Enabled = Content != null;
+      executionTimeTextBox.Enabled = Content != null;
+      viewAlgorithmButton.Enabled = Content != null && Content.Algorithm != null;
+      viewProblemButton.Enabled = Content != null && Content.Problem != null;
+      SetEnabledStateOfExecutableButtons();
+    }
+
+    protected override void OnClosed(FormClosedEventArgs e) {
+      if ((Content != null) && (Content.ExecutionState == ExecutionState.Started)) Content.Stop();
+      base.OnClosed(e);
+    }
+
+    #region Content Events
+    protected virtual void Content_Prepared(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(Content_Prepared), sender, e);
+      else
+        resultsView.Content = Content.Results.AsReadOnly();
+    }
+    protected virtual void Content_ExecutionStateChanged(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(Content_ExecutionStateChanged), sender, e);
+      else {
+        ReadOnly = Content.ExecutionState == ExecutionState.Started;
+        Locked = Content.ExecutionState == ExecutionState.Started;
+        SetEnabledStateOfExecutableButtons();
+      }
+    }
+    protected virtual void Content_ExecutionTimeChanged(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(Content_ExecutionTimeChanged), sender, e);
+      else
+        executionTimeTextBox.Text = Content.ExecutionTime.ToString();
+    }
+    protected virtual void Content_ExceptionOccurred(object sender, EventArgs<Exception> e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler<EventArgs<Exception>>(Content_ExceptionOccurred), sender, e);
+      else
+        ErrorHandling.ShowErrorDialog(this, e.Value);
+    }
+    #endregion
+
+    #region Control Events
+    protected virtual void openAlgorithmButton_Click(object sender, EventArgs e) {
+      SelectItemDialog d = new SelectItemDialog();
+      foreach (var ac in Content.StarterKit.AlgorithmClasses) {
+        foreach (var a in ac.Algorithms) {
+          d.AddItem(a.Name, a.Description, ac.Name, a, VS2008ImageLibrary.ExecutableStopped);
+        }
+      }
+      if (d.ShowDialog(ParentForm) == DialogResult.OK) {
+        var loader = new ObservableBackgroundWorker("loading algorithm...", workerMonitor);
+        loader.DoWork += (s, a) => {
+          Content.OKBAlgorithm = d.Item as OKBRunner.Algorithm;
+        };
+        loader.RunWorkerAsync();
+      }
+    }
+    protected virtual void openProblemButton_Click(object sender, EventArgs e) {
+      SelectItemDialog d = new SelectItemDialog();
+      foreach (var pc in Content.StarterKit.ProblemClasses) {
+        foreach (var p in pc.Problems) {
+          d.AddItem(p.Name, p.Description, pc.Name, p, VS2008ImageLibrary.Type);
+        }
+      }
+      if (d.ShowDialog(ParentForm) == DialogResult.OK) {
+        var loader = new ObservableBackgroundWorker("loading problem...", workerMonitor);
+        loader.DoWork += (s, a) => {
+          Content.OKBProblem = d.Item as OKBRunner.Problem;
+        };
+        loader.RunWorkerAsync();
+      }
+    }
+    protected virtual void startButton_Click(object sender, EventArgs e) {
+      Content.Start();
+    }
+    protected virtual void pauseButton_Click(object sender, EventArgs e) {
+      Content.Pause();
+    }
+    protected virtual void stopButton_Click(object sender, EventArgs e) {
+      Content.Stop();
+    }
+    protected virtual void resetButton_Click(object sender, EventArgs e) {
+      Content.Prepare(false);
+    }
+    protected virtual void connectButton_Click(object sender, EventArgs e) {
+      DownloadStarterKit();
+    }
+    #endregion
+
+    #region Helpers
+    private void SetEnabledStateOfExecutableButtons() {
+      if (Content == null) {
+        startButton.Enabled = pauseButton.Enabled = stopButton.Enabled = resetButton.Enabled = false;
+      } else {
+        startButton.Enabled = (Content.ExecutionState == ExecutionState.Prepared) || (Content.ExecutionState == ExecutionState.Paused);
+        pauseButton.Enabled = Content.ExecutionState == ExecutionState.Started;
+        stopButton.Enabled = (Content.ExecutionState == ExecutionState.Started) || (Content.ExecutionState == ExecutionState.Paused);
+        resetButton.Enabled = Content.ExecutionState != ExecutionState.Started;
+      }
+    }
+    #endregion
+
+    private void submitButton_Click(object sender, EventArgs e) {
+      foreach (ListViewItem item in runsView.ItemsListView.SelectedItems) {
+        SubmitRun(item.Tag as IRun, false);
+      }
+    }
+
+    private void SubmitRun(IRun run, bool skipConfirmation) {
+      if (run == null) {
+        MessageBox.Show(this, "selected item is not an IRun :`(");
+      } else {
+        var worker = new ObservableBackgroundWorker("Preparing submission: " + run.Name, workerMonitor);
+        OKBRunner.ExperimentKit experimentKit = null;
+        worker.DoWork += (s, a) => {
+          experimentKit = Content.PrepareSubmission(run);
+        };
+        worker.RunWorkerCompleted += (s, a) => {
+          if (experimentKit == null)
+            return;
+          if (skipConfirmation || ConfirmSubmission(experimentKit)) {
+            var submitter = new ObservableBackgroundWorker("Submitting Run: " + run.Name, workerMonitor);
+            submitter.DoWork += (s1, a1) => { Content.SubmitRun(experimentKit); };
+            submitter.RunWorkerAsync();
+          }
+        };
+        worker.RunWorkerAsync();
+      }
+    }
+
+    private bool ConfirmSubmission(OKBRunner.ExperimentKit experimentKit) {
+      return MessageBox.Show(this,
+        AlgorithmHost.FormatSubmission(experimentKit),
+        "Submit Run?",
+        MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK;
+    }
+
+    private void viewAlgorithmButton_Click(object sender, EventArgs e) {
+      if (Content.Algorithm == null) return;
+      IContentView view = FindFirstView(Content.Algorithm);
+      if (view == null && MessageBox.Show(ParentForm,
+@"The defintion of this algorithm has been fixed inside the OKB
+and should not be changed in a way that changes its behaviour
+
+Please be careful with modifications!", "Algorithm assumed fixed!",
+          MessageBoxButtons.OKCancel, MessageBoxIcon.Exclamation) == DialogResult.OK)
+        view = MainFormManager.CreateDefaultView(Content.Algorithm.GetType());
+      if (view != null) {
+        view.Content = Content.Algorithm;
+        view.Show();
+      }
+    }
+
+    private void viewProblemButton_Click(object sender, EventArgs e) {
+      if (Content.Problem == null) return;
+      IContentView view = FindFirstView(Content.Problem);
+      if (view == null && MessageBox.Show(ParentForm,
+@"The defintion of this problem has been fixed inside the OKB
+and should not be changed in a way that changes its behaviour.
+
+Please be careful with modifications!", "Problem assumed fixed!",
+          MessageBoxButtons.OKCancel, MessageBoxIcon.Exclamation) == DialogResult.OK)
+        view = MainFormManager.CreateDefaultView(Content.Problem.GetType());
+      if (view != null) {
+        view.Content = Content.Problem;
+        view.Show();
+      }
+    }
+
+    private static IContentView FindFirstView(IContent content) {
+      return MainFormManager.MainForm.Views
+        .Where(v => v is IContentView)
+        .Cast<IContentView>()
+        .Where(v => v.Content == content)
+        .FirstOrDefault();
+    }
+
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/AlgorithmHostView.resx
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/AlgorithmHostView.resx	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/AlgorithmHostView.resx	(revision 5296)
@@ -0,0 +1,294 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="errorProvider.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>107, 17</value>
+  </metadata>
+  <metadata name="errorProvider.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>107, 17</value>
+  </metadata>
+  <metadata name="toolTip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+  <metadata name="statusStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>363, 17</value>
+  </metadata>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="submitButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALCwAA
+        CwsBbQSEtwAAAjBJREFUOE+N0+1LU1EcB/AzNUQKIpCgXhRE+B/0stGDEyqIRfWmJymU1tZESSjsAW2i
+        JavJchG7lTmRVpYFtbwJUplTWIU9TMTNGE3LmS7v3HRmXr6dc/dQ7fiiC7/77vfhe36/c1QASOr7PubB
+        9MQIkcLjZOZHmMzFZoksL5Jlublk+YpVZGX+GpK/toCsL1Cr0k0MYDX8rg1vu83wD9xCKPAQ0annWJjt
+        USoyKWLUdw8fepsgOs/C3dlEWxJ9yo+V2FoJ+af7v8p2fj8PuFoqEBs0IB6yYyHqwuJ8D+T515Djr/BL
+        eoR40ALpvR5fRTWuVe3lgSfN5ZD6NIh4TyA2asbcpAOxgAmSZw/Cz9YhdDcLX1pU8AnZaDyt5YHHglEB
+        ZrwGClzhAScDsuC7mY2rlbt5oOOGHpK7iCZYGphQAJqAAg3lu3ig3aZTAC7BG3oEV+IIQQXIwaWyHTzg
+        tJYuAVykM9AmZ6BSEvhpgjpDEQ+0WUroDFgCfcYM/gAsAQNMukIecJiPJrfAgNQWWILkFugMgg4KCDmo
+        Lt3GA3cuF2O6dzsdoi6dIBr4F0ht4cKxLTxwu/4wJAXIvAfJI/y1hXPFah4Qag9gvLsQkU/HMy5SagaJ
+        NX68noeqI5t5YECsRbtlH160HoL35Rl8G7ZB8tdgqk+Lz/c3ot+6Gg+qN6CxbBO6mo08wB7U2FAn+p/W
+        ocNuhN10EA0VO1F/UgPrqa1w1GjQJZTA73Gmm1nPb89G3q5zH8W9AAAAAElFTkSuQmCC
+</value>
+  </data>
+  <data name="viewProblemButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEQAA
+        CxEBf2RfkQAAAoJJREFUOE99kd1LU2Ecx0939Rd022UXQdBFXZVdh10FERRBipXD1CRDS8tmRbhM09LE
+        WavUaCnpsqzhnNPlKvNlrFm+pem0Njdtup3nnPOc7dtznmGQbB34cODh+b78fs8WAMLmr981TtjZVjWm
+        CgpNIMtUoCrlf1mhgqrGpZyM9G2CZrCZgY/jMjuD+6sPQ545vB+eht31DW/7v+BVzyi6bG7UmboID09m
+        4Bj0UgZsTje6e4dhsX6C2eJES7sdTc/eof7xa9QYLVpIcgNzpw2qGuNQqkJRKIdIMkQi4Xc4ghJ9lVZS
+        EF7apggDL6wTaO7yorFtFLWtn3H7kQvlDwZQcteOS9W9iEQJFwZDYSz5QygoupEw6LTP8HkdY0FYh/yw
+        OBdhts3jSfd3NHZMockyjav3HQgEV+FbWsbcwi9Mzy4iK/vC3wb03wZjvEGV6QNuGZ243tCP0uoe6HKL
+        cFpXyIUb8Ab1LX2g2qwM9lyQFRWSTCFKCqstYyVMcFFv5GnJEAwNFiZkYibU0MRrEQl32gKoeB5A+dOf
+        KDb6kHtvDhmGGRzVT+BQ0TjS8tzYlz1KhPIaM08WicKWRBAKi1heiaCqPailwuSIo86qoqJDQWmrhPMP
+        ozhTv86IYn+ehwiZ+TdxPKsYR04UIDOnDJf1taiua4HB7E80aN5o8CPR4BprUOxFWr4be8+OyEnn0mY9
+        ZxhkewFHoXGIMkOKYU1UsbpOsRCQsCu9MvliNINTV94wIdhS42wvcURIDMGwgqWghJlFEZ7Zdew4WJba
+        4FhhG2SWvBZV4V+RMe8nmPRFMTIZhsu7ir6xELbvPpnaYM/hUuw8oOOX/kfKHaR6983nfwDA/wvA3MbO
+        iwAAAABJRU5ErkJggg==
+</value>
+  </data>
+  <data name="viewAlgorithmButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEQAA
+        CxEBf2RfkQAAAoJJREFUOE99kd1LU2Ecx0939Rd022UXQdBFXZVdh10FERRBipXD1CRDS8tmRbhM09LE
+        WavUaCnpsqzhnNPlKvNlrFm+pem0Njdtup3nnPOc7dtznmGQbB34cODh+b78fs8WAMLmr981TtjZVjWm
+        CgpNIMtUoCrlf1mhgqrGpZyM9G2CZrCZgY/jMjuD+6sPQ545vB+eht31DW/7v+BVzyi6bG7UmboID09m
+        4Bj0UgZsTje6e4dhsX6C2eJES7sdTc/eof7xa9QYLVpIcgNzpw2qGuNQqkJRKIdIMkQi4Xc4ghJ9lVZS
+        EF7apggDL6wTaO7yorFtFLWtn3H7kQvlDwZQcteOS9W9iEQJFwZDYSz5QygoupEw6LTP8HkdY0FYh/yw
+        OBdhts3jSfd3NHZMockyjav3HQgEV+FbWsbcwi9Mzy4iK/vC3wb03wZjvEGV6QNuGZ243tCP0uoe6HKL
+        cFpXyIUb8Ab1LX2g2qwM9lyQFRWSTCFKCqstYyVMcFFv5GnJEAwNFiZkYibU0MRrEQl32gKoeB5A+dOf
+        KDb6kHtvDhmGGRzVT+BQ0TjS8tzYlz1KhPIaM08WicKWRBAKi1heiaCqPailwuSIo86qoqJDQWmrhPMP
+        ozhTv86IYn+ehwiZ+TdxPKsYR04UIDOnDJf1taiua4HB7E80aN5o8CPR4BprUOxFWr4be8+OyEnn0mY9
+        ZxhkewFHoXGIMkOKYU1UsbpOsRCQsCu9MvliNINTV94wIdhS42wvcURIDMGwgqWghJlFEZ7Zdew4WJba
+        4FhhG2SWvBZV4V+RMe8nmPRFMTIZhsu7ir6xELbvPpnaYM/hUuw8oOOX/kfKHaR6983nfwDA/wvA3MbO
+        iwAAAABJRU5ErkJggg==
+</value>
+  </data>
+  <data name="connectButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAOtAAA
+        DrQBsTZ6LAAAA01JREFUOE9tk21Mm1UYhk+nyaxBnUbdnHHT6Ez4sWTR4Q/B7zk/Ek2WTPaFiDOZmxOy
+        sUFxyUhLi6BDAlJZpkApQkdhhVqg7SBLHBPokFIbEN80zFBcCyuruHYpPyi7bN8FFhNPcpLz43mu3Pfz
+        3EcBiOUj3bzJ5MKg8N6IiZHgPeLx1b+LB+LbxZ4N68TTD6cIpVKpWClefiQBi7duYQo4qJ4uwnS9BsNs
+        OcVSJjv6U3msXsd9p0Jo7RKhUIjFxcVEC2L5ys0VUh2HPa9wOnCSCwtObJEOqvxadg9sZl1TOUIzg6Ik
+        k8KmbgKBAPF4fAUihkILbLFs5aPLz1M6+TENs99zJqChOTTInoE/eMhwEUVFAaJEsLooG5vNxvz8/B3A
+        rtarpHxt5fXep8hJQD73vMoR724KxoNkOODu0yOISoE4KVDkrmFnYS0TExMrVkRqmcSqLzw8eXYDW7vW
+        87JzIy85XWy2wrN1N3i3ZZT8bitHzG08mpvKC/tP4HA4iEajsgrxzIlRxCEPq4q7UX6XxZrGtdzbkMYT
+        VXN0jl7D7A5jvRKn5bcoP1zys1/TiNFolAcqA54rTkjcdQHxqRuRLyW85iFOCV6sOojaJNE6ch2nL4L7
+        HxiYg/N/LaGrPYckSbINcazdh3izHbHDgdh3EfGJBVEkeK38uAyo7g3Q6o3SJUWpdlyl5Nw0h1Xl2O12
+        IpEIwjt1jfXZThQZTYhtbYi3O1AefJC7MrNIyzJSaZ+myR1BY75C+8gcrkCMQm0VnZ2d8jZELBbD1Odm
+        Y87PrH3DzCPbz7Bp73FSMozcn95A2r4eKntm0LT7ydX9SGOfl6HZOPVtvUxNTd1OVJLUbL/EW/k2thxw
+        se1AH+8nZpKeM0happX0946yNyuHvLw8tFotbUPT1P8Swmq13gYsLS3JclwuF7W1tXyQ+yXvZKvY+eFn
+        HMpXU1Bcgb6ll2anl65f/dh8cb75SaK0tPROppOgpJ1gMMjY2BiW85exeP6m508we6KcHY1iGg7zbc8k
+        X9XZOHpMRU1NzX8Byx8kmXVD/wz6/ihqfQcqlUqWrtPpKCsrQ6/XY7FYGB8f/39AEpRUYjAYUKvVcnCG
+        h4flCPt8Pvx+P+FwWA7Sv0wiuVCGsgSAAAAAAElFTkSuQmCC
+</value>
+  </data>
+  <metadata name="statusStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>363, 17</value>
+  </metadata>
+  <data name="openAlgorithmButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK/wAA
+        Cv8BNGKaggAAAn9JREFUOE+lk2tI01EYxhf0oU8WqVEIRpaIBWJgSPUhROmippS3QkkTylsXDMW8ts3b
+        1G06daVibuqaOq0sxbBCKBSJ0PJCialZUFSKqaGSt1//TbIsww8deOBwznl+5zkv71kHiP5rGAFrKb1Q
+        5ypR6bmaVU6m2kCiXJv007Om2XgwJEaNT4QiyDi/GF9mKRVgsWkav+CYQkR1utwAQfypphqZ4l/JIhOL
+        jvtGKfCOyDMB6O/WMjNea9L3MT1zIxoM5QrqdWnS1SA+kUq8w1V4hhUgqq1QMj1WtcK88KmIud5oqsqy
+        qCzOQFMopSQvhRvyBApkcQLzV91E1docpr9ol29eFMz0J0Bv2Kr6C3CrVMa3jyWm2EZzc12OSQ8M2TTo
+        ZdytzMCgSUVfIqFcfY2bqiSKlQmoc+JNaUSVJRlMvsvHGHuoVUx9lZKFIQkMp63UW2FtMBH6YuBVFF01
+        /lwO9aoQadSpTAxkwXs596oVtD+ULx36/Qkvg6HDl/k2D2YeufCmwoELZ45MCIA9olKVmK+vJQy3JVOv
+        l7M4KIae8CVAV6hgPMV8uxczLYeZbDrIaN1eJBG2nHazyDN1cZEymdHueG7rcuh8KiTpixYA56AziMVn
+        J5h9coyp5kOM1TvxudqejvRNBHrY4GRnZmcCqLMT6GlJ4Y4uGwZS4IUQ97kfs62eTD12YbzBmRGDAx+0
+        u+iVmyMO24njbqvG5VbOz4yjtjyL3vuRdOSKltUuX0+LbAON0o3UJFmiibPi+pXtBLrvWHR2tHZfBuSm
+        xZIrPk9mfAiJlwKMleWsvxsnj+7H9YAD+xxssbexwnqbBVs2m7HV3GxlI631E9fa/wGRpaRpa3TTbQAA
+        AABJRU5ErkJggg==
+</value>
+  </data>
+  <data name="openProblemButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALAAAA
+        CwAB5DetvwAAAn9JREFUOE+lk2tI01EYxhf0oU8WqVEIRpaIBWJgSPUhROmippS3QkkTylsXDMW8ts3b
+        1G06daVibuqaOq0sxbBCKBSJ0PJCialZUFSKqaGSt1//TbIsww8deOBwznl+5zkv71kHiP5rGAFrKb1Q
+        5ypR6bmaVU6m2kCiXJv007Om2XgwJEaNT4QiyDi/GF9mKRVgsWkav+CYQkR1utwAQfypphqZ4l/JIhOL
+        jvtGKfCOyDMB6O/WMjNea9L3MT1zIxoM5QrqdWnS1SA+kUq8w1V4hhUgqq1QMj1WtcK88KmIud5oqsqy
+        qCzOQFMopSQvhRvyBApkcQLzV91E1docpr9ol29eFMz0J0Bv2Kr6C3CrVMa3jyWm2EZzc12OSQ8M2TTo
+        ZdytzMCgSUVfIqFcfY2bqiSKlQmoc+JNaUSVJRlMvsvHGHuoVUx9lZKFIQkMp63UW2FtMBH6YuBVFF01
+        /lwO9aoQadSpTAxkwXs596oVtD+ULx36/Qkvg6HDl/k2D2YeufCmwoELZ45MCIA9olKVmK+vJQy3JVOv
+        l7M4KIae8CVAV6hgPMV8uxczLYeZbDrIaN1eJBG2nHazyDN1cZEymdHueG7rcuh8KiTpixYA56AziMVn
+        J5h9coyp5kOM1TvxudqejvRNBHrY4GRnZmcCqLMT6GlJ4Y4uGwZS4IUQ97kfs62eTD12YbzBmRGDAx+0
+        u+iVmyMO24njbqvG5VbOz4yjtjyL3vuRdOSKltUuX0+LbAON0o3UJFmiibPi+pXtBLrvWHR2tHZfBuSm
+        xZIrPk9mfAiJlwKMleWsvxsnj+7H9YAD+xxssbexwnqbBVs2m7HV3GxlI631E9fa/wGRpaRpa3TTbQAA
+        AABJRU5ErkJggg==
+</value>
+  </data>
+  <data name="startButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALAAAA
+        CwAB5DetvwAAALZJREFUOE9j/P//PwNFAGQAOi7bn+2GTRybGIZmkKKEGRH/iTUEpwGWZfpEGYLVgKgp
+        Qf833Fr8nxhDsBoQPMEbZDtRhmA1wKfLGWwACEctCsDrEqwGODZb/M/YEAvWbNus/1+nWOG/RBo3iFZD
+        jwmsBpjX6KFo5k9gwaoZnIawxa1eqTLcZnyacRqgki8FdjYhzTgNkM4QJEozTgNEkjlx+pmoQMQW2rjy
+        BtZAJDYj4fQCKQYAAPmEmBfWSTCRAAAAAElFTkSuQmCC
+</value>
+  </data>
+  <data name="pauseButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALAAAA
+        CwAB5DetvwAAAMZJREFUOE9j/P//PwNFAGQAJZgizWDXU2I7VgN6N//937Xh1/+8qY8+gRSg89EtxHAB
+        SPPVh3/+64auAqr9z4DOJ2hA29pv/289/f1f1W8R2AB0PkEDGld8/n/54e//cm6zwAag8wkaULv4/f8T
+        13//F7ObBDYAnU/QgIp5r/7vvvDzP79ZN9gAdD5BA0pmP/+//uTP/5wGrWAD0PkEDSiY/vj/gj2f/7Pq
+        NIINQOcTNAAU/2y6TXAD0PkEDSA1ZVI/KZPqAgBmE8VVB/UQsAAAAABJRU5ErkJggg==
+</value>
+  </data>
+  <data name="resetButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALAAAA
+        CwAB5DetvwAAAYNJREFUOE9j/P//PwNFAGQAJZgizWDXI9veu/nvfxhuW/vtf+OKz/9rF7//XzHv1f+S
+        2c//F0x//L901mOgFoSrUQzo2vDr/6aT3/6vPPTl/4I9n/5ffvDzf+/ad/+bl74BG5I3/cV/3dBVuA0A
+        2bri4Jf/83Z9+n/ryS+Qwv8NS978L5378n/O1Of/k3qf/Vf1W4TbAJCT5+z49P/hyx9gzSBQMvvl/6wp
+        z/8n9D79H9b6+L+c2yzcBoD8e/PRZ7hmZMaxy2/+e9U+/C9mNwm3ASB/Ni978//UlZdwvdGdT/4HNj0C
+        8x1K7//nN+vGbQAopMuBhuRMe/5/55G7YE0BDY/+u1U9ALPN8u7+5zRoxW0AKJqygf5NBPo3vO3x/znr
+        Lvx3rbj/36b4HtgAvYxb/1l1GnEbAIrjuJ6n/0NbHv33qXv436n8/n/rwnv/TbLvgA1QTyLCAMukbf9B
+        2Dhmw3+t4OX/FTzmggOO16TzP5tuE34XAC0hOWmTrAHdEooNAABnu83WrybVqwAAAABJRU5ErkJggg==
+</value>
+  </data>
+  <metadata name="openFileDialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>230, 17</value>
+  </metadata>
+  <data name="stopButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALAAAA
+        CwAB5DetvwAAAXJJREFUOE+tkj1IQmEYhWsoaIi2xmhpiYSgKFoiCMLJJYSEJiEI0mgIyqjA6vaLUKIU
+        iZlJKKUoWEbZDzVYCYlQYVxcNDIoRND8ud7idD83C27g7YNvPM8573nfcgBlgh4BCPmCxIX0Qtx/ATTu
+        Lyy78ph3ZKC2pTBlSWB86w2jhleMrD9jWB9N/jQsSkDEj5FPPERZ+J7yOL5j4PYzsPsYGL1piKR7nL64
+        syIAcaZfWPhptiC0XeWw4clgzZ3CgiWMBskOP4DEvo+wOAkw2L3IQccJKVsSE6Z3KDRB1PVs8gPIzDch
+        Fo5rzvkoi8V9Io5DqYtBOnaO2k4tP4AU5g0yMJ/lsOr6gMqUwKA2BtlcGOKhA9S0rfADSNvOWwa6wzSm
+        LXEo9JyYoiFRBdA9YEdVM8UPIKvaPk1h1hyCUhOAbPKSc3aiS25Fe58BFU1qfgDZc4fcg5Z+Fxp7ragX
+        GwtzV7cuoVI08zeglKv831MuJcE3MLnHrIkIZqEAAAAASUVORK5CYII=
+</value>
+  </data>
+</root>
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/HeuristicLab.OKB.AlgorithmHost-3.3.csproj
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/HeuristicLab.OKB.AlgorithmHost-3.3.csproj	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/HeuristicLab.OKB.AlgorithmHost-3.3.csproj	(revision 5296)
@@ -0,0 +1,402 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{7B60CBDC-E7E3-4610-91E2-7CE831A02D35}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.OKB.AlgorithmHost</RootNamespace>
+    <AssemblyName>HeuristicLab.OKB.AlgorithmHost-3.3</AssemblyName>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <FileUpgradeFlags>
+    </FileUpgradeFlags>
+    <OldToolsVersion>3.5</OldToolsVersion>
+    <UpgradeBackupLocation />
+    <PublishUrl>publish\</PublishUrl>
+    <Install>true</Install>
+    <InstallFrom>Disk</InstallFrom>
+    <UpdateEnabled>false</UpdateEnabled>
+    <UpdateMode>Foreground</UpdateMode>
+    <UpdateInterval>7</UpdateInterval>
+    <UpdateIntervalUnits>Days</UpdateIntervalUnits>
+    <UpdatePeriodically>false</UpdatePeriodically>
+    <UpdateRequired>false</UpdateRequired>
+    <MapFileExtensions>true</MapFileExtensions>
+    <ApplicationRevision>0</ApplicationRevision>
+    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
+    <IsWebBootstrapper>false</IsWebBootstrapper>
+    <UseApplicationTrust>false</UseApplicationTrust>
+    <BootstrapperEnabled>true</BootstrapperEnabled>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="HeuristicLab.Collections-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Collections-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Common-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Common-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Common.Resources-3.3, Version=3.2.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Common.Resources-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Core-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Core-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Core.Views-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Core.Views-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Data-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Data-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Data.Views-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Data.Views-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.MainForm-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.MainForm-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.MainForm.WindowsForms-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.MainForm.WindowsForms-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Optimization-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Optimization-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Optimization.Views-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Optimization.Views-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Parameters-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Parameters-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Persistence-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Persistence-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.PluginInfrastructure-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.PluginInfrastructure-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Core">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Runtime.Serialization">
+      <RequiredTargetFramework>3.0</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.ServiceModel">
+      <RequiredTargetFramework>3.0</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Windows.Forms.DataVisualization, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />
+    <Reference Include="System.Xml.Linq">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data.DataSetExtensions">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+    <Reference Include="WindowsBase">
+      <RequiredTargetFramework>3.0</RequiredTargetFramework>
+    </Reference>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="AlgorithmContainerView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="AlgorithmContainerView.Designer.cs">
+      <DependentUpon>AlgorithmContainerView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="AlgorithmHost.cs" />
+    <Compile Include="AlgorithmHostView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="AlgorithmHostView.Designer.cs">
+      <DependentUpon>AlgorithmHostView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Service References\OKBData\Reference.cs">
+      <AutoGen>True</AutoGen>
+      <DesignTime>True</DesignTime>
+      <DependentUpon>Reference.svcmap</DependentUpon>
+    </Compile>
+    <Compile Include="Service References\OKBRunner\Reference.cs">
+      <AutoGen>True</AutoGen>
+      <DesignTime>True</DesignTime>
+      <DependentUpon>Reference.svcmap</DependentUpon>
+    </Compile>
+    <Compile Include="Service References\OKBTables\Reference.cs">
+      <AutoGen>True</AutoGen>
+      <DesignTime>True</DesignTime>
+      <DependentUpon>Reference.svcmap</DependentUpon>
+    </Compile>
+    <None Include="app.config" />
+    <None Include="HeuristicLabOKBAlgorithmHostPlugin.cs.frame" />
+    <Compile Include="Mapping.cs" />
+    <Compile Include="MappingView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="MappingView.Designer.cs">
+      <DependentUpon>MappingView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="ParameterizedNamedItemContainer.cs" />
+    <Compile Include="ParameterizedNamedItemContainerView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="ParameterizedNamedItemContainerView.Designer.cs">
+      <DependentUpon>ParameterizedNamedItemContainerView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="ProblemContainer.cs" />
+    <Compile Include="HeuristicLabOKBAlgorithmHostPlugin.cs" />
+    <Compile Include="AlgorithmContainer.cs" />
+    <Compile Include="OKBRunnerExtensions.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="Properties\Resources.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DesignTime>True</DesignTime>
+      <DependentUpon>Resources.resx</DependentUpon>
+    </Compile>
+    <Compile Include="SelectItemDialog.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="SelectItemDialog.Designer.cs">
+      <DependentUpon>SelectItemDialog.cs</DependentUpon>
+    </Compile>
+    <None Include="Properties\AssemblyInfo.frame" />
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="AlgorithmContainerView.resx">
+      <DependentUpon>AlgorithmContainerView.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="AlgorithmHostView.resx">
+      <DependentUpon>AlgorithmHostView.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="MappingView.resx">
+      <DependentUpon>MappingView.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="ParameterizedNamedItemContainerView.resx">
+      <DependentUpon>ParameterizedNamedItemContainerView.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Properties\Resources.resx">
+      <Generator>ResXFileCodeGenerator</Generator>
+      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
+    </EmbeddedResource>
+    <EmbeddedResource Include="SelectItemDialog.resx">
+      <DependentUpon>SelectItemDialog.cs</DependentUpon>
+    </EmbeddedResource>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Service References\OKBData\HeuristicLab.Services.OKB.xsd">
+      <SubType>Designer</SubType>
+    </None>
+    <None Include="Service References\OKBData\service.wsdl" />
+    <None Include="Service References\OKBData\service.xsd">
+      <SubType>Designer</SubType>
+    </None>
+    <None Include="Service References\OKBData\service1.xsd">
+      <SubType>Designer</SubType>
+    </None>
+    <None Include="Service References\OKBRunner\HeuristicLab.OKB.AlgorithmHost.OKBRunner.ExperimentKit.datasource">
+      <DependentUpon>Reference.svcmap</DependentUpon>
+    </None>
+    <None Include="Service References\OKBRunner\HeuristicLab.OKB.AlgorithmHost.OKBRunner.StarterKit.datasource">
+      <DependentUpon>Reference.svcmap</DependentUpon>
+    </None>
+    <None Include="Service References\OKBRunner\HeuristicLab.Services.OKB.DataAccess.xsd">
+      <SubType>Designer</SubType>
+    </None>
+    <None Include="Service References\OKBRunner\HeuristicLab.Services.OKB.xsd">
+      <SubType>Designer</SubType>
+    </None>
+    <None Include="Service References\OKBRunner\service.wsdl" />
+    <None Include="Service References\OKBRunner\service.xsd">
+      <SubType>Designer</SubType>
+    </None>
+    <None Include="Service References\OKBRunner\service1.xsd">
+      <SubType>Designer</SubType>
+    </None>
+    <None Include="Service References\OKBRunner\System.Data.Linq.xsd">
+      <SubType>Designer</SubType>
+    </None>
+    <None Include="Service References\OKBTables\Arrays.xsd">
+      <SubType>Designer</SubType>
+    </None>
+    <None Include="Service References\OKBTables\service.wsdl" />
+    <None Include="Service References\OKBTables\service.xsd">
+      <SubType>Designer</SubType>
+    </None>
+    <None Include="Service References\OKBTables\service1.xsd">
+      <SubType>Designer</SubType>
+    </None>
+    <None Include="Service References\OKBTables\System.Data.xsd">
+      <SubType>Designer</SubType>
+    </None>
+    <None Include="UpdateLocalInstallation.cmd" />
+  </ItemGroup>
+  <ItemGroup>
+    <WCFMetadata Include="Service References\" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\HeuristicLab.BackgroundProcessing\HeuristicLab.BackgroundProcessing-3.3.csproj">
+      <Project>{589BECAE-69B0-4EB1-8C06-C073531762B7}</Project>
+      <Name>HeuristicLab.BackgroundProcessing-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.OKB.Client\HeuristicLab.OKB.Client-3.3.csproj">
+      <Project>{B157FAB7-9B6D-4BAE-ACF2-C6FB7D22EBBD}</Project>
+      <Name>HeuristicLab.OKB.Client-3.3</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Properties\DataSources\System.Data.DataTable.datasource" />
+  </ItemGroup>
+  <ItemGroup>
+    <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
+      <Install>false</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.5 SP1</ProductName>
+      <Install>true</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
+      <Visible>False</Visible>
+      <ProductName>Windows Installer 3.1</ProductName>
+      <Install>true</Install>
+    </BootstrapperPackage>
+  </ItemGroup>
+  <ItemGroup>
+    <WCFMetadataStorage Include="Service References\OKBData\" />
+    <WCFMetadataStorage Include="Service References\OKBRunner\" />
+    <WCFMetadataStorage Include="Service References\OKBTables\" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Service References\OKBData\configuration91.svcinfo" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Service References\OKBData\configuration.svcinfo" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Service References\OKBData\Reference.svcmap">
+      <Generator>WCF Proxy Generator</Generator>
+      <LastGenOutput>Reference.cs</LastGenOutput>
+    </None>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Service References\OKBRunner\configuration91.svcinfo" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Service References\OKBRunner\configuration.svcinfo" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Service References\OKBRunner\Reference.svcmap">
+      <Generator>WCF Proxy Generator</Generator>
+      <LastGenOutput>Reference.cs</LastGenOutput>
+    </None>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Service References\OKBTables\configuration91.svcinfo" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Service References\OKBTables\configuration.svcinfo" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Service References\OKBTables\Reference.svcmap">
+      <Generator>WCF Proxy Generator</Generator>
+      <LastGenOutput>Reference.cs</LastGenOutput>
+    </None>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <PropertyGroup>
+    <PostBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+set TargetPath=$(TargetPath)
+
+call UpdateLocalInstallation.cmd</PostBuildEvent>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+SubWCRev "%25ProjectDir%25\" "%25ProjectDir%25\Properties\AssemblyInfo.frame" "%25ProjectDir%25\Properties\AssemblyInfo.cs"
+SubWCRev "%25ProjectDir%25\" "%25ProjectDir%25\HeuristicLabOKBAlgorithmHostPlugin.cs.frame" "%25ProjectDir%25\HeuristicLabOKBAlgorithmHostPlugin.cs"</PreBuildEvent>
+  </PropertyGroup>
+</Project>
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/HeuristicLabOKBAlgorithmHostPlugin.cs.frame
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/HeuristicLabOKBAlgorithmHostPlugin.cs.frame	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/HeuristicLabOKBAlgorithmHostPlugin.cs.frame	(revision 5296)
@@ -0,0 +1,47 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 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.Text;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.OKB {
+
+  [Plugin("HeuristicLab.OKB.AlgorithmHost", "3.3.0.$WCREV$")]
+  [PluginFile("HeuristicLab.OKB.AlgorithmHost-3.3.dll", PluginFileType.Assembly)]  
+  [PluginDependency("HeuristicLab.OKB.Client", "3.3")]
+  [PluginDependency("HeuristicLab.Collections", "3.3")]
+  [PluginDependency("HeuristicLab.Common", "3.3")]
+  [PluginDependency("HeuristicLab.Common.Resources", "3.3")]
+  [PluginDependency("HeuristicLab.Core", "3.3")]
+  [PluginDependency("HeuristicLab.Core.Views", "3.3")]
+  [PluginDependency("HeuristicLab.Data", "3.3")]
+  [PluginDependency("HeuristicLab.Data.Views", "3.3")]
+  [PluginDependency("HeuristicLab.MainForm", "3.3")]
+  [PluginDependency("HeuristicLab.MainForm.WindowsForms", "3.3")]
+  [PluginDependency("HeuristicLab.Optimization", "3.3")]
+  [PluginDependency("HeuristicLab.Optimization.Views", "3.3")]
+  [PluginDependency("HeuristicLab.Parameters", "3.3")]
+  [PluginDependency("HeuristicLab.Persistence", "3.3")]  
+  public class HeuristicLabOKBAlgorithmHostPlugin : PluginBase {
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Mapping.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Mapping.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Mapping.cs	(revision 5296)
@@ -0,0 +1,28 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Collections;
+using HeuristicLab.Common;
+
+namespace HeuristicLab.OKB.AlgorithmHost {
+
+  [StorableClass]
+  public class Mapping : IContent {
+
+    public Mapping() {
+      Map = new ObservableDictionary<string, string>();
+      Values = new ObservableCollection<string>();
+    }
+
+    [StorableConstructor]
+    public Mapping(bool deserializing) { }
+
+    [Storable]
+    public ObservableDictionary<string, string> Map { get; set; }
+
+    [Storable]
+    public ObservableCollection<string> Values { get; set; }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/MappingView.Designer.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/MappingView.Designer.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/MappingView.Designer.cs	(revision 5296)
@@ -0,0 +1,147 @@
+﻿namespace HeuristicLab.OKB.AlgorithmHost {
+  partial class MappingView {
+    /// <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.mappingDataSet = new System.Data.DataSet();
+      this.mappingTable = new System.Data.DataTable();
+      this.keyColumn = new System.Data.DataColumn();
+      this.valueColumn = new System.Data.DataColumn();
+      this.ValueTable = new System.Data.DataTable();
+      this.valuesColumn = new System.Data.DataColumn();
+      this.mappingGridView = new System.Windows.Forms.DataGridView();
+      this.keyDataGridViewTextBoxColumn = new System.Windows.Forms.DataGridViewTextBoxColumn();
+      this.valueDataGridViewTextBoxColumn = new System.Windows.Forms.DataGridViewComboBoxColumn();
+      ((System.ComponentModel.ISupportInitialize)(this.mappingDataSet)).BeginInit();
+      ((System.ComponentModel.ISupportInitialize)(this.mappingTable)).BeginInit();
+      ((System.ComponentModel.ISupportInitialize)(this.ValueTable)).BeginInit();
+      ((System.ComponentModel.ISupportInitialize)(this.mappingGridView)).BeginInit();
+      this.SuspendLayout();
+      // 
+      // mappingDataSet
+      // 
+      this.mappingDataSet.DataSetName = "NewDataSet";
+      this.mappingDataSet.Tables.AddRange(new System.Data.DataTable[] {
+            this.mappingTable,
+            this.ValueTable});
+      // 
+      // mappingTable
+      // 
+      this.mappingTable.Columns.AddRange(new System.Data.DataColumn[] {
+            this.keyColumn,
+            this.valueColumn});
+      this.mappingTable.TableName = "Mapping";
+      // 
+      // keyColumn
+      // 
+      this.keyColumn.ColumnName = "Key";
+      // 
+      // valueColumn
+      // 
+      this.valueColumn.ColumnName = "Value";
+      // 
+      // ValueTable
+      // 
+      this.ValueTable.Columns.AddRange(new System.Data.DataColumn[] {
+            this.valuesColumn});
+      this.ValueTable.TableName = "Values";
+      // 
+      // valuesColumn
+      // 
+      this.valuesColumn.ColumnName = "Values";
+      // 
+      // mappingGridView
+      // 
+      this.mappingGridView.AllowUserToAddRows = false;
+      this.mappingGridView.AllowUserToDeleteRows = false;
+      this.mappingGridView.AllowUserToResizeRows = false;
+      this.mappingGridView.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.mappingGridView.AutoGenerateColumns = false;
+      this.mappingGridView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
+      this.mappingGridView.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
+            this.keyDataGridViewTextBoxColumn,
+            this.valueDataGridViewTextBoxColumn});
+      this.mappingGridView.DataMember = "Mapping";
+      this.mappingGridView.DataSource = this.mappingDataSet;
+      this.mappingGridView.EditMode = System.Windows.Forms.DataGridViewEditMode.EditOnEnter;
+      this.mappingGridView.Location = new System.Drawing.Point(0, 0);
+      this.mappingGridView.MultiSelect = false;
+      this.mappingGridView.Name = "mappingGridView";
+      this.mappingGridView.Size = new System.Drawing.Size(433, 265);
+      this.mappingGridView.TabIndex = 0;
+      this.mappingGridView.CellValidated += new System.Windows.Forms.DataGridViewCellEventHandler(this.parameterMappingGridView_CellValidated);
+      this.mappingGridView.CellValidating += new System.Windows.Forms.DataGridViewCellValidatingEventHandler(this.mappingGridView_CellValidating);
+      this.mappingGridView.DataError += new System.Windows.Forms.DataGridViewDataErrorEventHandler(this.mappingGridView_DataError);
+      // 
+      // keyDataGridViewTextBoxColumn
+      // 
+      this.keyDataGridViewTextBoxColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.DisplayedCells;
+      this.keyDataGridViewTextBoxColumn.DataPropertyName = "Key";
+      this.keyDataGridViewTextBoxColumn.HeaderText = "Key";
+      this.keyDataGridViewTextBoxColumn.MinimumWidth = 100;
+      this.keyDataGridViewTextBoxColumn.Name = "keyDataGridViewTextBoxColumn";
+      this.keyDataGridViewTextBoxColumn.ReadOnly = true;
+      this.keyDataGridViewTextBoxColumn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
+      // 
+      // valueDataGridViewTextBoxColumn
+      // 
+      this.valueDataGridViewTextBoxColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.DisplayedCells;
+      this.valueDataGridViewTextBoxColumn.DataPropertyName = "Value";
+      this.valueDataGridViewTextBoxColumn.DataSource = this.mappingDataSet;
+      this.valueDataGridViewTextBoxColumn.DisplayMember = "Values.Values";
+      this.valueDataGridViewTextBoxColumn.HeaderText = "Value";
+      this.valueDataGridViewTextBoxColumn.MinimumWidth = 100;
+      this.valueDataGridViewTextBoxColumn.Name = "valueDataGridViewTextBoxColumn";
+      this.valueDataGridViewTextBoxColumn.Resizable = System.Windows.Forms.DataGridViewTriState.True;
+      this.valueDataGridViewTextBoxColumn.ValueMember = "Values.Values";
+      // 
+      // MappingView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.mappingGridView);
+      this.Name = "MappingView";
+      this.Size = new System.Drawing.Size(433, 265);
+      ((System.ComponentModel.ISupportInitialize)(this.mappingDataSet)).EndInit();
+      ((System.ComponentModel.ISupportInitialize)(this.mappingTable)).EndInit();
+      ((System.ComponentModel.ISupportInitialize)(this.ValueTable)).EndInit();
+      ((System.ComponentModel.ISupportInitialize)(this.mappingGridView)).EndInit();
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Data.DataSet mappingDataSet;
+    private System.Data.DataTable mappingTable;
+    private System.Data.DataColumn keyColumn;
+    private System.Data.DataColumn valueColumn;
+    private System.Data.DataTable ValueTable;
+    private System.Data.DataColumn valuesColumn;
+    private System.Windows.Forms.DataGridView mappingGridView;
+    private System.Windows.Forms.DataGridViewTextBoxColumn keyDataGridViewTextBoxColumn;
+    private System.Windows.Forms.DataGridViewComboBoxColumn valueDataGridViewTextBoxColumn;
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/MappingView.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/MappingView.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/MappingView.cs	(revision 5296)
@@ -0,0 +1,122 @@
+﻿using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Collections;
+using HeuristicLab.MainForm.WindowsForms;
+using HeuristicLab.Common;
+using HeuristicLab.MainForm;
+
+namespace HeuristicLab.OKB.AlgorithmHost {
+
+  [ViewAttribute("Mapping View")]
+  [Content(typeof(Mapping), true)]  
+  public partial class MappingView : ContentView {
+    
+    public MappingView() {
+      InitializeComponent();
+    }
+
+    public new Mapping Content {
+      get { return (Mapping)base.Content; }
+      set { base.Content = value; }
+    }
+
+    protected override void RegisterContentEvents() {
+      base.RegisterContentEvents();
+      Content.Map.CollectionReset += Content_MapChanged;
+      Content.Map.ItemsAdded += Content_MapChanged;
+      Content.Map.ItemsRemoved += Content_MapChanged;
+      Content.Map.ItemsReplaced += Content_MapChanged;
+      Content.Values.CollectionReset += Content_ValuesChanged;
+      Content.Values.ItemsAdded += Content_ValuesChanged;
+      Content.Values.ItemsRemoved += Content_ValuesChanged;
+    }
+
+    protected override void DeregisterContentEvents() {
+      base.DeregisterContentEvents();
+      Content.Map.CollectionReset -= Content_MapChanged;
+      Content.Map.ItemsAdded -= Content_MapChanged;
+      Content.Map.ItemsRemoved -= Content_MapChanged;
+      Content.Map.ItemsReplaced -= Content_MapChanged;
+      Content.Values.CollectionReset -= Content_ValuesChanged;
+      Content.Values.ItemsAdded -= Content_ValuesChanged;
+      Content.Values.ItemsRemoved -= Content_ValuesChanged;
+    }
+
+    void Content_MapChanged(object sender, CollectionItemsChangedEventArgs<KeyValuePair<string, string>> e) {
+      mappingTable.BeginLoadData();
+      mappingTable.Clear();
+      if (Content != null) {
+        foreach (var mapping in Content.Map) {
+          mappingTable.Rows.Add(new object[] { mapping.Key, mapping.Value });
+        }
+      }
+      mappingTable.EndLoadData();
+      mappingTable.AcceptChanges();
+    }
+
+    void Content_ValuesChanged(object sender, CollectionItemsChangedEventArgs<string> e) {
+      ValueTable.BeginLoadData();
+      ValueTable.Clear();
+      if (Content != null) {
+        foreach (var value in Content.Values) {
+          ValueTable.Rows.Add(new object[] { value });
+        }
+      }
+      ValueTable.EndLoadData();
+      ValueTable.AcceptChanges();
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      if (Content == null) {
+        mappingTable.Clear();
+        ValueTable.Clear();
+      } else {
+        Content_MapChanged(this, new CollectionItemsChangedEventArgs<KeyValuePair<string, string>>(Enumerable.Empty<KeyValuePair<string, string>>()));
+        Content_ValuesChanged(this, new CollectionItemsChangedEventArgs<string>(Enumerable.Empty<string>()));
+      }
+    }
+
+    private void mappingGridView_CellValidating(object sender, DataGridViewCellValidatingEventArgs e) {
+      mappingGridView.EndEdit();
+      if (e.ColumnIndex != valueColumn.Ordinal || e.FormattedValue == DBNull.Value)
+        return;
+      DataGridViewRow currentRow = mappingGridView.Rows[e.RowIndex];
+      foreach (DataGridViewRow row in mappingGridView.Rows) {
+        if (row.Index == e.RowIndex)
+          continue;
+        if (row.Cells[e.ColumnIndex].Value == e.FormattedValue) {
+          currentRow.ErrorText = "ERROR: Duplicate DB parameter!";
+          e.Cancel = true;
+          return;
+        }
+      }
+      if (currentRow.ErrorText == "" && ((string)e.FormattedValue).Contains('.')) {
+        currentRow.ErrorText = "WARNING: Compound parameter should not be directly mapped";
+      } else {
+        currentRow.ErrorText = "";
+      }
+    }
+
+    private void parameterMappingGridView_CellValidated(object sender, DataGridViewCellEventArgs e) {
+      if (e.ColumnIndex != valueColumn.Ordinal)
+        return;
+      mappingTable.AcceptChanges();
+      object value = mappingGridView[valueColumn.Ordinal, e.RowIndex].Value;
+      object key = mappingGridView[keyColumn.Ordinal, e.RowIndex].Value;
+      if (value != DBNull.Value)
+        Content.Map[(string)key] = (string)value;
+      else
+        Content.Map[(string)key] = null;
+    }
+
+    private void mappingGridView_DataError(object sender, DataGridViewDataErrorEventArgs e) {
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/MappingView.resx
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/MappingView.resx	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/MappingView.resx	(revision 5296)
@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="mappingDataSet.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+</root>
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/OKBRunnerExtensions.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/OKBRunnerExtensions.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/OKBRunnerExtensions.cs	(revision 5296)
@@ -0,0 +1,114 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Data;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.Xml;
+using System.IO;
+using HeuristicLab.OKB.AlgorithmHost.OKBRunner;
+
+namespace HeuristicLab.OKB.AlgorithmHost {
+  public static class OKBExtensions {
+
+    public static void AddParameterValue(this Algorithm a, string name, object value) {      
+      if (value == null) return;
+      if (value is StringValue) {
+        value = ((StringValue)value).Value;
+      } else if (value is IntValue) {
+        value = ((IntValue)value).Value;
+      } else if (value is DoubleValue) {
+        value = ((DoubleValue)value).Value;
+      } else if (value is BoolValue) {
+        value = ((BoolValue)value).Value;
+      }
+      Type t = value.GetType();
+      Parameter p = new Parameter() {
+        DataType = new DataType() { ClrName = t.FullName },
+        Name = name
+      };
+      if (t == typeof(int)) {
+        p.IntParameterValues = new List<IntParameterValue>() { new IntParameterValue() { Value = (int)value } };
+      } else if (t == typeof(double)) {
+        p.FloatParameterValues = new List<FloatParameterValue>() { new FloatParameterValue() { Value = (double)value } };
+      } else if (t == typeof(string)) {
+        p.CharParameterValues = new List<CharParameterValue>() { new CharParameterValue() { Value = (string)value } };      
+      } else if (t == typeof(bool)) {
+        p.IntParameterValues = new List<IntParameterValue>() { new IntParameterValue() { Value = ((bool)value) ? 1 : 0 } };
+      } else if (value is Item) {
+        byte[] data;
+        using (var stream = new MemoryStream()) {
+          XmlGenerator.Serialize(value, stream);
+          data = stream.ToArray();
+        }
+        p.DataType.ClrName = "IOperator";
+        p.OperatorParameterValues = new List<OperatorParameterValue>() {
+          new OperatorParameterValue() {
+            DataType = new DataType() { ClrName = t.FullName },
+            Value = new Binary() { Bytes = data },
+          },
+        };
+        if (value is IParameterizedItem) {
+          foreach (var param in ((IParameterizedItem)value).Parameters) {
+            try {
+              a.AddParameterValue(string.Format("{0}:{1}.{2}", name, t.Name, param.Name), param.ActualValue);
+            } catch (Exception x) {              
+              // swallow exceptions
+            }
+          }
+        }
+      } else {
+        throw new ArgumentException("invalid parameter data type" + t.ToString());
+      }      
+      if (a.Algorithm_Parameters.Any(ap => ap.Parameter.Name == name)) {
+        throw new ArgumentException("duplicate parameter " + name);
+      }
+      a.Algorithm_Parameters.Add(new Algorithm_Parameter() {
+        Algorithm = a,
+        Parameter = p,
+      });            
+    }
+
+    public static void AddResultValue(this Algorithm a, string name, object value) {
+      if (value == null) return;
+      if (value is StringValue) {
+        value = ((StringValue)value).Value;
+      } else if (value is IntValue) {
+        value = ((IntValue)value).Value;
+      } else if (value is DoubleValue) {
+        value = ((DoubleValue)value).Value;
+      } else if (value is BoolValue) {
+        value = ((BoolValue)value).Value;
+      }
+      Type t = value.GetType();
+      Result r = new Result() {
+        DataType = new DataType() { ClrName = t.FullName },
+        Name = name
+      };
+      if (t == typeof(int)) {
+        r.IntResultValues = new List<IntResultValue>() { new IntResultValue() { Value = (int)value } };
+      } else if (t == typeof(double)) {
+        r.FloatResultValues = new List<FloatResultValue>() { new FloatResultValue() { Value = (double)value } };
+      } else if (t == typeof(string)) {
+        r.CharResultValues = new List<CharResultValue>() { new CharResultValue() { Value = (string)value } };
+      } else if (value is Item) {
+        byte[] data;
+        using (var stream = new MemoryStream()) {
+          XmlGenerator.Serialize(value, stream);
+          data = stream.ToArray();
+        }
+        r.BlobResultValues = new List<BlobResultValue>() {
+          new BlobResultValue() {
+            Value = new Binary() { Bytes = data },
+          } 
+        };
+      } else {
+        throw new ArgumentException("unsupported result data type" + t.ToString());
+      }
+      a.Algorithm_Results.Add(new Algorithm_Result() {
+        Algorithm = a,
+        Result = r,
+      });
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/ParameterizedNamedItemContainer.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/ParameterizedNamedItemContainer.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/ParameterizedNamedItemContainer.cs	(revision 5296)
@@ -0,0 +1,82 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Optimization;
+using HeuristicLab.Data;
+using HeuristicLab.Collections;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common.Resources;
+using HeuristicLab.Common;
+using HeuristicLab.Parameters;
+
+namespace HeuristicLab.OKB.AlgorithmHost {
+
+  [StorableClass]
+  public class ParameterizedNamedItemContainer : Item {
+
+    public ParameterizedNamedItemContainer() {
+      ParameterMapping = new ObservableDictionary<string, string>();
+    }
+
+    [StorableConstructor]
+    public ParameterizedNamedItemContainer(bool deserializing) : base(deserializing) { }
+
+    [Storable]
+    private IParameterizedNamedItem item;
+    public IParameterizedNamedItem Item {
+      get { return item; }
+      set {
+        if (value == item) return;
+        if (item != null)
+          DeregisterItemEvents();
+        item = value;
+        if (item != null)
+          RegisterItemEvents();
+        OnItemChanged();
+      }
+    }
+    public event EventHandler ItemChanged;
+    protected void OnItemChanged() {
+      InitializeMapping();
+      EventHandler handler = ItemChanged;
+      if (handler != null)
+        handler(this, EventArgs.Empty);
+    }
+
+    public virtual Type ItemType { get { return typeof(IParameterizedNamedItem); } }
+
+    [Storable]
+    public ObservableDictionary<string, string> ParameterMapping { get; private set; }
+
+    public virtual void InitializeMapping() {
+      ParameterMapping.Clear();
+      foreach (Parameter p in item.Parameters) {
+        ParameterMapping.Add(p.Name, null);
+      }
+    }
+
+    protected virtual void RegisterItemEvents() {
+    }
+
+    protected virtual void DeregisterItemEvents() {
+    }
+
+
+    public override string ItemName { get { return "ParameterizedNamedItemContainer"; } }
+    public override string ItemDescription { get { return "Container for parameterized named items to be stored in the OKB"; } }
+    public override System.Drawing.Image ItemImage { get { return VS2008ImageLibrary.Module; } }
+    public override string ToString() { return Item == null ? "Empty Container" : string.Format("<{0}>", Item.Name); }
+    public override HeuristicLab.Common.IDeepCloneable Clone(Cloner cloner) {
+      ParameterizedNamedItemContainer clone = (ParameterizedNamedItemContainer)Activator.CreateInstance(this.GetType());
+      cloner.RegisterClonedObject(this, clone);
+      clone.Item = (IParameterizedNamedItem)cloner.Clone(Item);
+      clone.ParameterMapping = new ObservableDictionary<string, string>();
+      foreach (var item in ParameterMapping) {
+        clone.ParameterMapping.Add(item.Key, item.Value);
+      }
+      return clone;
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/ParameterizedNamedItemContainerView.Designer.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/ParameterizedNamedItemContainerView.Designer.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/ParameterizedNamedItemContainerView.Designer.cs	(revision 5296)
@@ -0,0 +1,214 @@
+﻿namespace HeuristicLab.OKB.AlgorithmHost {
+  partial class ParameterizedNamedItemContainerView {
+    /// <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 Windows Form 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.components = new System.ComponentModel.Container();
+      System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ParameterizedNamedItemContainerView));
+      this.tabControl = new System.Windows.Forms.TabControl();
+      this.itemPage = new System.Windows.Forms.TabPage();
+      this.newItemButton = new System.Windows.Forms.Button();
+      this.openItemButton = new System.Windows.Forms.Button();
+      this.itemPanel = new System.Windows.Forms.Panel();
+      this.itemViewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
+      this.parameterMappingPage = new System.Windows.Forms.TabPage();
+      this.parameterMappingView = new HeuristicLab.OKB.AlgorithmHost.MappingView();
+      this.progressBar = new System.Windows.Forms.ProgressBar();
+      this.refreshButton = new System.Windows.Forms.Button();
+      this.openFileDialog = new System.Windows.Forms.OpenFileDialog();
+      this.toolTip = new System.Windows.Forms.ToolTip(this.components);
+      this.backgroundWorker = new System.ComponentModel.BackgroundWorker();
+      this.tabControl.SuspendLayout();
+      this.itemPage.SuspendLayout();
+      this.itemPanel.SuspendLayout();
+      this.parameterMappingPage.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // tabControl
+      // 
+      this.tabControl.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.tabControl.Controls.Add(this.itemPage);
+      this.tabControl.Controls.Add(this.parameterMappingPage);
+      this.tabControl.Location = new System.Drawing.Point(0, 0);
+      this.tabControl.Name = "tabControl";
+      this.tabControl.SelectedIndex = 0;
+      this.tabControl.Size = new System.Drawing.Size(404, 223);
+      this.tabControl.TabIndex = 0;
+      // 
+      // itemPage
+      // 
+      this.itemPage.Controls.Add(this.newItemButton);
+      this.itemPage.Controls.Add(this.openItemButton);
+      this.itemPage.Controls.Add(this.itemPanel);
+      this.itemPage.Location = new System.Drawing.Point(4, 22);
+      this.itemPage.Name = "itemPage";
+      this.itemPage.Padding = new System.Windows.Forms.Padding(3);
+      this.itemPage.Size = new System.Drawing.Size(396, 197);
+      this.itemPage.TabIndex = 0;
+      this.itemPage.Text = "Item";
+      this.itemPage.UseVisualStyleBackColor = true;
+      // 
+      // newItemButton
+      // 
+      this.newItemButton.Image = ((System.Drawing.Image)(resources.GetObject("newItemButton.Image")));
+      this.newItemButton.Location = new System.Drawing.Point(6, 6);
+      this.newItemButton.Name = "newItemButton";
+      this.newItemButton.Size = new System.Drawing.Size(24, 24);
+      this.newItemButton.TabIndex = 1;
+      this.toolTip.SetToolTip(this.newItemButton, "New Item");
+      this.newItemButton.UseVisualStyleBackColor = true;
+      this.newItemButton.Click += new System.EventHandler(this.newAlgorithmButton_Click);
+      // 
+      // openItemButton
+      // 
+      this.openItemButton.Image = ((System.Drawing.Image)(resources.GetObject("openItemButton.Image")));
+      this.openItemButton.Location = new System.Drawing.Point(36, 6);
+      this.openItemButton.Name = "openItemButton";
+      this.openItemButton.Size = new System.Drawing.Size(24, 24);
+      this.openItemButton.TabIndex = 3;
+      this.toolTip.SetToolTip(this.openItemButton, "Open Item");
+      this.openItemButton.UseVisualStyleBackColor = true;
+      this.openItemButton.Click += new System.EventHandler(this.openItemButton_Click);
+      // 
+      // itemPanel
+      // 
+      this.itemPanel.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.itemPanel.Controls.Add(this.itemViewHost);
+      this.itemPanel.Location = new System.Drawing.Point(0, 36);
+      this.itemPanel.Name = "itemPanel";
+      this.itemPanel.Size = new System.Drawing.Size(396, 161);
+      this.itemPanel.TabIndex = 4;
+      // 
+      // itemViewHost
+      // 
+      this.itemViewHost.Caption = "View";
+      this.itemViewHost.Content = null;
+      this.itemViewHost.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.itemViewHost.Location = new System.Drawing.Point(0, 0);
+      this.itemViewHost.Name = "itemViewHost";
+      this.itemViewHost.ReadOnly = false;
+      this.itemViewHost.Size = new System.Drawing.Size(396, 161);
+      this.itemViewHost.TabIndex = 0;
+      this.itemViewHost.ViewType = null;
+      // 
+      // parameterMappingPage
+      // 
+      this.parameterMappingPage.Controls.Add(this.parameterMappingView);
+      this.parameterMappingPage.Location = new System.Drawing.Point(4, 22);
+      this.parameterMappingPage.Name = "parameterMappingPage";
+      this.parameterMappingPage.Padding = new System.Windows.Forms.Padding(3);
+      this.parameterMappingPage.Size = new System.Drawing.Size(396, 197);
+      this.parameterMappingPage.TabIndex = 1;
+      this.parameterMappingPage.Text = "Parameter Mapping";
+      this.parameterMappingPage.UseVisualStyleBackColor = true;
+      // 
+      // parameterMappingView
+      // 
+      this.parameterMappingView.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.parameterMappingView.Caption = "View";
+      this.parameterMappingView.Content = null;
+      this.parameterMappingView.Location = new System.Drawing.Point(0, 0);
+      this.parameterMappingView.Name = "parameterMappingView";
+      this.parameterMappingView.ReadOnly = false;
+      this.parameterMappingView.Size = new System.Drawing.Size(396, 197);
+      this.parameterMappingView.TabIndex = 3;
+      // 
+      // progressBar
+      // 
+      this.progressBar.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.progressBar.Location = new System.Drawing.Point(33, 229);
+      this.progressBar.MarqueeAnimationSpeed = 1;
+      this.progressBar.Name = "progressBar";
+      this.progressBar.Size = new System.Drawing.Size(368, 24);
+      this.progressBar.Style = System.Windows.Forms.ProgressBarStyle.Marquee;
+      this.progressBar.TabIndex = 2;
+      this.progressBar.Visible = false;
+      // 
+      // refreshButton
+      // 
+      this.refreshButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.refreshButton.Image = ((System.Drawing.Image)(resources.GetObject("refreshButton.Image")));
+      this.refreshButton.Location = new System.Drawing.Point(3, 229);
+      this.refreshButton.Name = "refreshButton";
+      this.refreshButton.Size = new System.Drawing.Size(24, 24);
+      this.refreshButton.TabIndex = 1;
+      this.toolTip.SetToolTip(this.refreshButton, "Refresh list of available DB parameters");
+      this.refreshButton.UseVisualStyleBackColor = true;
+      this.refreshButton.Click += new System.EventHandler(this.refreshButton_Click);
+      // 
+      // openFileDialog
+      // 
+      this.openFileDialog.DefaultExt = "hl";
+      this.openFileDialog.FileName = "Algorithm";
+      this.openFileDialog.Filter = "HeuristicLab Files|*.hl|All Files|*.*";
+      this.openFileDialog.Title = "Open Algorithm";
+      // 
+      // backgroundWorker
+      // 
+      this.backgroundWorker.WorkerReportsProgress = true;
+      this.backgroundWorker.DoWork += new System.ComponentModel.DoWorkEventHandler(this.backgroundWorker_DoWork);
+      this.backgroundWorker.RunWorkerCompleted += new System.ComponentModel.RunWorkerCompletedEventHandler(this.backgroundWorker_RunWorkerCompleted);
+      this.backgroundWorker.ProgressChanged += new System.ComponentModel.ProgressChangedEventHandler(this.backgroundWorker_ProgressChanged);
+      // 
+      // ParameterizedNamedItemContainerView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.Controls.Add(this.tabControl);
+      this.Controls.Add(this.refreshButton);
+      this.Controls.Add(this.progressBar);
+      this.Name = "ParameterizedNamedItemContainerView";
+      this.Size = new System.Drawing.Size(404, 256);
+      this.tabControl.ResumeLayout(false);
+      this.itemPage.ResumeLayout(false);
+      this.itemPanel.ResumeLayout(false);
+      this.parameterMappingPage.ResumeLayout(false);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    protected System.Windows.Forms.TabControl tabControl;
+    private System.Windows.Forms.TabPage itemPage;
+    private System.Windows.Forms.TabPage parameterMappingPage;
+    private System.Windows.Forms.Panel itemPanel;
+    private HeuristicLab.MainForm.WindowsForms.ViewHost itemViewHost;
+    protected System.Windows.Forms.Button openItemButton;
+    private System.Windows.Forms.Button newItemButton;
+    private System.Windows.Forms.OpenFileDialog openFileDialog;
+    protected System.Windows.Forms.ToolTip toolTip;
+    protected System.ComponentModel.BackgroundWorker backgroundWorker;
+    protected System.Windows.Forms.ProgressBar progressBar;
+    protected System.Windows.Forms.Button refreshButton;
+    private MappingView parameterMappingView;
+
+
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/ParameterizedNamedItemContainerView.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/ParameterizedNamedItemContainerView.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/ParameterizedNamedItemContainerView.cs	(revision 5296)
@@ -0,0 +1,165 @@
+﻿using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Data;
+using System.Drawing;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Core.Views;
+using HeuristicLab.OKB.Client;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.PluginInfrastructure;
+using System.Threading;
+
+namespace HeuristicLab.OKB.AlgorithmHost {
+
+  [MainForm.View("ParameterizedNamedItemContainer View")]
+  [MainForm.Content(typeof(ParameterizedNamedItemContainer), true)]  
+  public partial class ParameterizedNamedItemContainerView : ItemView {
+
+    private Mapping mapping;
+
+    public new ParameterizedNamedItemContainer Content {
+      get { return (ParameterizedNamedItemContainer)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public ParameterizedNamedItemContainerView() {
+      mapping = new Mapping();
+      InitializeComponent();
+      InitializeParameterList();
+    }
+
+    public void InitializeParameterList() {
+      backgroundWorker.RunWorkerAsync();
+    }
+
+    protected override void RegisterContentEvents() {
+      base.RegisterContentEvents();
+      Content.ItemChanged += new EventHandler(Content_ItemChanged);
+    }
+
+    
+    protected override void DeregisterContentEvents() {
+      Content.ItemChanged -= new EventHandler(Content_ItemChanged);
+      base.DeregisterContentEvents();
+    }
+    
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      parameterMappingView.Content = null;
+      itemViewHost.Content = null;
+      itemViewHost.ViewType = null;
+      if (Content == null) {
+        mapping.Map = null;
+      } else {
+        itemViewHost.Content = Content.Item;
+        mapping.Map = Content.ParameterMapping;
+        parameterMappingView.Content = mapping;
+      }
+    }
+
+    void Content_ItemChanged(object sender, EventArgs e) {
+      OnContentChanged();
+    }
+
+    protected void openItemButton_Click(object sender, EventArgs e) {
+      openFileDialog.Title = "Open Item";
+      if (openFileDialog.ShowDialog(this) == DialogResult.OK) {
+        newItemButton.Enabled = openItemButton.Enabled = false;
+        itemViewHost.Enabled = false;
+
+        ContentManager.LoadAsync(openFileDialog.FileName, delegate(IStorableContent content, Exception error) {
+          try {
+            if (error != null) throw error;
+            if (content == null) {
+              MessageBox.Show(this, "The selected file could not be loaded", "Invalid File", MessageBoxButtons.OK, MessageBoxIcon.Error);
+            } else {
+              IParameterizedNamedItem item = content as IParameterizedNamedItem;
+              if (item == null && item.GetType() != Content.ItemType) {
+                MessageBox.Show(this,
+                  string.Format("The selected file does not contain an object of type {0}", Content.ItemType.Name),
+                  "Invalid File", MessageBoxButtons.OK, MessageBoxIcon.Error);
+              } else {
+                Content.Item = item;
+              }
+            }
+          } catch (Exception ex) {
+            ErrorHandling.ShowErrorDialog(this, ex);
+          } finally {
+            Invoke(new Action(delegate() {
+              itemViewHost.Enabled = true;
+              newItemButton.Enabled = openItemButton.Enabled = true;
+            }));
+          }
+        });
+      }
+    }
+
+    private TypeSelectorDialog itemTypeSelectorDialog;
+
+    protected void newAlgorithmButton_Click(object sender, EventArgs e) {
+      if (itemTypeSelectorDialog == null) {
+        itemTypeSelectorDialog = new TypeSelectorDialog();
+        itemTypeSelectorDialog.Caption = "Select Item";
+        itemTypeSelectorDialog.TypeSelector.Caption = "Available Items";
+        itemTypeSelectorDialog.TypeSelector.Configure(Content.ItemType, false, true);
+      }
+      if (itemTypeSelectorDialog.ShowDialog(this) == DialogResult.OK) {
+        try {
+          Content.Item = (IParameterizedNamedItem)itemTypeSelectorDialog.TypeSelector.CreateInstanceOfSelectedType();
+        } catch (Exception ex) {
+          ErrorHandling.ShowErrorDialog(this, ex);
+        }
+      }
+    }
+
+    protected DataTable backgroundLoadedParameters = null;
+
+    protected void backgroundWorker_ProgressChanged(object sender, ProgressChangedEventArgs e) {
+      if (InvokeRequired)
+        Invoke(new ProgressChangedEventHandler(backgroundWorker_ProgressChanged), sender, e);
+      else {
+        if (e.ProgressPercentage < 100) {
+          progressBar.Visible = true;
+        } else {
+          progressBar.Visible = false;
+        }
+      }
+    }
+
+    protected virtual void backgroundWorker_DoWork(object sender, DoWorkEventArgs e) {
+      backgroundWorker.ReportProgress(0);
+      var client = ClientFactory.Create<OKBTables.TableServiceClient, OKBTables.ITableService>();
+      int count;
+      DataTable pars = client.PrepareDataTable(out count, "Parameter");
+      pars.BeginLoadData();
+      DataTable newRows;
+      do {
+        newRows = client.GetNextRows(100);
+        pars.Merge(newRows);
+      } while (newRows != null && newRows.Rows.Count > 0);
+      client.FinishFetchingRows();
+      client.Close();
+      pars.EndLoadData();
+      backgroundLoadedParameters = pars;
+      backgroundWorker.ReportProgress(100);
+    }
+ 
+    protected virtual void backgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) {
+      parameterMappingView.Enabled = false;
+      if (backgroundLoadedParameters != null) {
+        mapping.Values.Clear();
+        mapping.Values.Add(null);
+        mapping.Values.AddRange(backgroundLoadedParameters.Rows.Cast<DataRow>().Select(r => (string)r["Name"]));
+        parameterMappingView.Enabled = true;
+      }
+    }
+
+    protected virtual void refreshButton_Click(object sender, EventArgs e) {
+      InitializeParameterList();
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/ParameterizedNamedItemContainerView.resx
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/ParameterizedNamedItemContainerView.resx	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/ParameterizedNamedItemContainerView.resx	(revision 5296)
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="newItemButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALCgAA
+        CwoBv0NmUwAAAaJJREFUOE+Nkk1LAkEYx5egU9Sla9AX6NKhLlH3IujSoXtBn0EI+gB5qVBIKyIMtEDo
+        BUIhK6qDSUj4gqYloilmvqa5rrr/Zlx3dkU0B/48z87O/zfzPDMcAE7SOg8sB2AkqYdIXIoAK4LyX17X
+        HiVzYPhC0NBUB1yR6Jfy5lx59rQXRAKEhl6Y4YhMnXOSmUDywRlYHV5YbG6YLp1UW2pgEyBoSdARbdNP
+        OszSSQxEZnkO2D+7w/TCWhtEOoGfqyE5KmKnVf/HIHBLcn4SiI21oGQPkw32J68M0VKvBKgvulgJdEey
+        O+sJNhlg9/i6aZalAEpz98xwQADhAaWJ2GOAWr0BCpFBCoCeIjOxgdCIHlYCiI8DGQ1QMjKzKIooVwSk
+        MuUmYGp+lf5rlcDeArhD6wMzqZOqUEe2UEE0WegNMFgcHYB6Q0SxXEUiXcJbNNsboD+xdwAqfA3p3C8i
+        n3l4QuneAFqfetDG5X94xFJFBCIZuHzJ/gHqxoVjObwGv/DojvcPUDfO9/4NpyeBm+dofwD5vrvFrtco
+        3zFd8J/oO/gDpYIVhUFyWDsAAAAASUVORK5CYII=
+</value>
+  </data>
+  <metadata name="toolTip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>350, 17</value>
+  </metadata>
+  <data name="openItemButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK/QAA
+        Cv0BS5xZCwAAAn9JREFUOE+lk2tI01EYxhf0oU8WqVEIRpaIBWJgSPUhROmippS3QkkTylsXDMW8ts3b
+        1G06daVibuqaOq0sxbBCKBSJ0PJCialZUFSKqaGSt1//TbIsww8deOBwznl+5zkv71kHiP5rGAFrKb1Q
+        5ypR6bmaVU6m2kCiXJv007Om2XgwJEaNT4QiyDi/GF9mKRVgsWkav+CYQkR1utwAQfypphqZ4l/JIhOL
+        jvtGKfCOyDMB6O/WMjNea9L3MT1zIxoM5QrqdWnS1SA+kUq8w1V4hhUgqq1QMj1WtcK88KmIud5oqsqy
+        qCzOQFMopSQvhRvyBApkcQLzV91E1docpr9ol29eFMz0J0Bv2Kr6C3CrVMa3jyWm2EZzc12OSQ8M2TTo
+        ZdytzMCgSUVfIqFcfY2bqiSKlQmoc+JNaUSVJRlMvsvHGHuoVUx9lZKFIQkMp63UW2FtMBH6YuBVFF01
+        /lwO9aoQadSpTAxkwXs596oVtD+ULx36/Qkvg6HDl/k2D2YeufCmwoELZ45MCIA9olKVmK+vJQy3JVOv
+        l7M4KIae8CVAV6hgPMV8uxczLYeZbDrIaN1eJBG2nHazyDN1cZEymdHueG7rcuh8KiTpixYA56AziMVn
+        J5h9coyp5kOM1TvxudqejvRNBHrY4GRnZmcCqLMT6GlJ4Y4uGwZS4IUQ97kfs62eTD12YbzBmRGDAx+0
+        u+iVmyMO24njbqvG5VbOz4yjtjyL3vuRdOSKltUuX0+LbAON0o3UJFmiibPi+pXtBLrvWHR2tHZfBuSm
+        xZIrPk9mfAiJlwKMleWsvxsnj+7H9YAD+xxssbexwnqbBVs2m7HV3GxlI631E9fa/wGRpaRpa3TTbQAA
+        AABJRU5ErkJggg==
+</value>
+  </data>
+  <data name="refreshButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALDAAA
+        CwwBP0AiyAAAAUFJREFUOE9j/P//PwNFAGQACG86dOM/Ol6378r/lTvP/1+y+SQId8PUItNgzTADgDRW
+        MGf1gf9mXilYDYEbsH7/VVz6/6/defL/rqNXYIb0YHXB6t0XsRpQMFP5/7lrZ/7X9y/5b+WXDjYEqwHL
+        t52BG/Dw5bn/II0wHF4t8H/dzlP/Jy/ajtuAxZtOwA0AaTx2dRWYH1Qm+P/2owv/X779CjbA1DMZuwvm
+        rTuMYgCM8/PXn//vPn7///D5R/wGzFq5DyMM/vz99//T159gr9x6+A6/AdOW7oIb8ObjPbCm7z9+/7/6
+        8AiYffn2a/wGgPwHA8gBCGLvOb3n/+mrz4k34Onb6//9swTAAXfn8fv/F2+++n/k/BPiDUAOuKt33/w/
+        efnZ/72nHhJnAMgr+DDOaITFMUgBIYw1JWLLacSIAQBXZuNaAr2wAAAAAABJRU5ErkJggg==
+</value>
+  </data>
+  <metadata name="openFileDialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>217, 17</value>
+  </metadata>
+  <metadata name="backgroundWorker.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>440, 17</value>
+  </metadata>
+</root>
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/ProblemContainer.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/ProblemContainer.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/ProblemContainer.cs	(revision 5296)
@@ -0,0 +1,34 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Optimization;
+using HeuristicLab.Data;
+using HeuristicLab.Collections;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common.Resources;
+using HeuristicLab.Common;
+
+namespace HeuristicLab.OKB.AlgorithmHost {
+
+  [Item("Problem Container", "Encapsulates problem & parameters for storing in the OKB")]  
+  [StorableClass]
+  public class ProblemContainer : ParameterizedNamedItemContainer {
+
+    public ProblemContainer() { }
+    [StorableConstructor]
+    public ProblemContainer(bool deserializing) : base(deserializing) { }
+
+    public IProblem Problem {
+      get { return (IProblem)Item; }
+      set { Item = value; }
+    }
+
+    public override Type ItemType { get { return typeof(IProblem); } }
+
+    public override string ItemName { get { return "ProblemContainer"; } }
+    public override string ItemDescription { get { return "Container for problems to be stored in the OKB"; } }
+
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Properties/AssemblyInfo.frame
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Properties/AssemblyInfo.frame	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Properties/AssemblyInfo.frame	(revision 5296)
@@ -0,0 +1,36 @@
+﻿using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.OKB.AlgorithmHost")]
+[assembly: AssemblyDescription("Host OKB Algorithms")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2010 HEAL")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("e6b0144e-0c1a-4e39-a592-0606f4441238")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers 
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("3.3.0.0")]
+[assembly: AssemblyFileVersion("3.3.0.$WCREV$")]
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Properties/DataSources/System.Data.DataTable.datasource
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Properties/DataSources/System.Data.DataTable.datasource	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Properties/DataSources/System.Data.DataTable.datasource	(revision 5296)
@@ -0,0 +1,10 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<!--
+    This file is automatically generated by Visual Studio .Net. It is 
+    used to store generic object data source configuration information.  
+    Renaming the file extension or editing the content of this file may   
+    cause the file to be unrecognizable by the program.
+-->
+<GenericObjectDataSource DisplayName="DataTable" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
+   <TypeInfo>System.Data.DataTable, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</TypeInfo>
+</GenericObjectDataSource>
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Properties/Resources.Designer.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Properties/Resources.Designer.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Properties/Resources.Designer.cs	(revision 5296)
@@ -0,0 +1,63 @@
+﻿//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.1
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HeuristicLab.OKB.AlgorithmHost.Properties {
+    using System;
+    
+    
+    /// <summary>
+    ///   A strongly-typed resource class, for looking up localized strings, etc.
+    /// </summary>
+    // This class was auto-generated by the StronglyTypedResourceBuilder
+    // class via a tool like ResGen or Visual Studio.
+    // To add or remove a member, edit your .ResX file then rerun ResGen
+    // with the /str option, or rebuild your VS project.
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    internal class Resources {
+        
+        private static global::System.Resources.ResourceManager resourceMan;
+        
+        private static global::System.Globalization.CultureInfo resourceCulture;
+        
+        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+        internal Resources() {
+        }
+        
+        /// <summary>
+        ///   Returns the cached ResourceManager instance used by this class.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Resources.ResourceManager ResourceManager {
+            get {
+                if (object.ReferenceEquals(resourceMan, null)) {
+                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("HeuristicLab.OKB.AlgorithmHost.Properties.Resources", typeof(Resources).Assembly);
+                    resourceMan = temp;
+                }
+                return resourceMan;
+            }
+        }
+        
+        /// <summary>
+        ///   Overrides the current thread's CurrentUICulture property for all
+        ///   resource lookups using this strongly typed resource class.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Globalization.CultureInfo Culture {
+            get {
+                return resourceCulture;
+            }
+            set {
+                resourceCulture = value;
+            }
+        }
+    }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Properties/Resources.resx
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Properties/Resources.resx	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Properties/Resources.resx	(revision 5296)
@@ -0,0 +1,120 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/SelectItemDialog.Designer.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/SelectItemDialog.Designer.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/SelectItemDialog.Designer.cs	(revision 5296)
@@ -0,0 +1,117 @@
+﻿namespace HeuristicLab.OKB.AlgorithmHost {
+  partial class SelectItemDialog {
+    /// <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 Windows Form 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.okButton = new System.Windows.Forms.Button();
+      this.cancelButton = new System.Windows.Forms.Button();
+      this.itemsListView = new System.Windows.Forms.ListView();
+      this.nameColumnHeader = new System.Windows.Forms.ColumnHeader();
+      this.descriptionColumnHeader = new System.Windows.Forms.ColumnHeader();
+      this.SuspendLayout();
+      // 
+      // okButton
+      // 
+      this.okButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+      this.okButton.Location = new System.Drawing.Point(456, 409);
+      this.okButton.Name = "okButton";
+      this.okButton.Size = new System.Drawing.Size(75, 23);
+      this.okButton.TabIndex = 2;
+      this.okButton.Text = "&OK";
+      this.okButton.UseVisualStyleBackColor = true;
+      this.okButton.Click += new System.EventHandler(this.okButton_Click);
+      // 
+      // cancelButton
+      // 
+      this.cancelButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+      this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel;
+      this.cancelButton.Location = new System.Drawing.Point(537, 409);
+      this.cancelButton.Name = "cancelButton";
+      this.cancelButton.Size = new System.Drawing.Size(75, 23);
+      this.cancelButton.TabIndex = 3;
+      this.cancelButton.Text = "&Cancel";
+      this.cancelButton.UseVisualStyleBackColor = true;
+      this.cancelButton.Click += new System.EventHandler(this.cancelButton_Click);
+      // 
+      // itemsListView
+      // 
+      this.itemsListView.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.itemsListView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
+            this.nameColumnHeader,
+            this.descriptionColumnHeader});
+      this.itemsListView.FullRowSelect = true;
+      this.itemsListView.HideSelection = false;
+      this.itemsListView.Location = new System.Drawing.Point(12, 12);
+      this.itemsListView.MultiSelect = false;
+      this.itemsListView.Name = "itemsListView";
+      this.itemsListView.Size = new System.Drawing.Size(600, 391);
+      this.itemsListView.TabIndex = 1;
+      this.itemsListView.UseCompatibleStateImageBehavior = false;
+      this.itemsListView.View = System.Windows.Forms.View.Details;
+      this.itemsListView.SelectedIndexChanged += new System.EventHandler(this.itemsListView_SelectedIndexChanged);
+      this.itemsListView.DoubleClick += new System.EventHandler(this.itemsListView_DoubleClick);
+      // 
+      // nameColumnHeader
+      // 
+      this.nameColumnHeader.Text = "Name";
+      this.nameColumnHeader.Width = 185;
+      // 
+      // descriptionColumnHeader
+      // 
+      this.descriptionColumnHeader.Text = "Description";
+      this.descriptionColumnHeader.Width = 411;
+      // 
+      // SelectItemDialog
+      // 
+      this.AcceptButton = this.okButton;
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.CancelButton = this.cancelButton;
+      this.ClientSize = new System.Drawing.Size(624, 444);
+      this.Controls.Add(this.itemsListView);
+      this.Controls.Add(this.cancelButton);
+      this.Controls.Add(this.okButton);
+      this.MaximizeBox = false;
+      this.MinimizeBox = false;
+      this.Name = "SelectItemDialog";
+      this.ShowIcon = false;
+      this.ShowInTaskbar = false;
+      this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
+      this.Text = "Select Item";
+      this.TopMost = true;
+      this.Shown += new System.EventHandler(this.SelectItemDialog_Shown);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Button okButton;
+    private System.Windows.Forms.Button cancelButton;
+    private System.Windows.Forms.ListView itemsListView;
+    private System.Windows.Forms.ColumnHeader nameColumnHeader;
+    private System.Windows.Forms.ColumnHeader descriptionColumnHeader;
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/SelectItemDialog.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/SelectItemDialog.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/SelectItemDialog.cs	(revision 5296)
@@ -0,0 +1,83 @@
+﻿using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+
+namespace HeuristicLab.OKB.AlgorithmHost {
+  public partial class SelectItemDialog : Form {
+
+    public object Item { get; private set; }
+
+    public SelectItemDialog() {
+      InitializeComponent();
+      itemsListView.SmallImageList = new ImageList();      
+    }
+
+    private Dictionary<string, ListViewGroup> groups = new Dictionary<string, ListViewGroup>();
+
+    public void Clear() {
+      itemsListView.Clear();
+      itemsListView.Groups.Clear();
+      groups.Clear();
+      itemsListView.SmallImageList = new ImageList();
+    }
+
+    public void AddItem(string name, string description, string groupName, object o, Image icon) {
+      ListViewGroup group = null;
+      if (groupName != null) {
+        groups.TryGetValue(groupName, out group);
+        if (group == null) {
+          group = new ListViewGroup(groupName, groupName);          
+          groups[groupName] = group;
+          itemsListView.Groups.Add(group);
+        }
+      }
+      ListViewItem item;
+      if (group != null)
+        item = new ListViewItem(new string[] { name, description }, group);
+      else
+        item = new ListViewItem(new string[] { name, description });
+      if (icon != null) {
+        itemsListView.SmallImageList.Images.Add(icon);
+        item.ImageIndex = itemsListView.SmallImageList.Images.Count - 1;            
+      }
+      item.Tag = o;
+      itemsListView.Items.Add(item);            
+    }
+
+    private void SelectItemDialog_Shown(object sender, EventArgs e) {
+      Item = null;
+      DialogResult = DialogResult.None;
+    }
+
+    private void itemsListView_SelectedIndexChanged(object sender, EventArgs e) {
+      okButton.Enabled = itemsListView.SelectedItems.Count == 1;
+    }
+
+    private void okButton_Click(object sender, EventArgs e) {
+      if (itemsListView.SelectedItems.Count == 1) {
+        Item = itemsListView.SelectedItems[0].Tag;
+        DialogResult = DialogResult.OK;
+        Close();
+      }
+    }
+
+    private void cancelButton_Click(object sender, EventArgs e) {
+      DialogResult = DialogResult.Cancel;
+      Close();
+    }
+
+    private void itemsListView_DoubleClick(object sender, EventArgs e) {
+      if (itemsListView.SelectedItems.Count == 1) {
+        Item = itemsListView.SelectedItems[0].Tag;
+        DialogResult = DialogResult.OK;
+        Close();
+      }
+    }    
+
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/SelectItemDialog.resx
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/SelectItemDialog.resx	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/SelectItemDialog.resx	(revision 5296)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Service References/OKBData/HeuristicLab.Services.OKB.xsd
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Service References/OKBData/HeuristicLab.Services.OKB.xsd	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Service References/OKBData/HeuristicLab.Services.OKB.xsd	(revision 5296)
@@ -0,0 +1,10 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:tns="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB" elementFormDefault="qualified" targetNamespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:simpleType name="EntityType">
+    <xs:restriction base="xs:string">
+      <xs:enumeration value="Algorithm" />
+      <xs:enumeration value="Problem" />
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:element name="EntityType" nillable="true" type="tns:EntityType" />
+</xs:schema>
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Service References/OKBData/Reference.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Service References/OKBData/Reference.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Service References/OKBData/Reference.cs	(revision 5296)
@@ -0,0 +1,100 @@
+﻿//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.1
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HeuristicLab.OKB.AlgorithmHost.OKBData {
+    using System.Runtime.Serialization;
+    
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="EntityType", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB")]
+    public enum EntityType : int {
+        
+        [System.Runtime.Serialization.EnumMemberAttribute()]
+        Algorithm = 0,
+        
+        [System.Runtime.Serialization.EnumMemberAttribute()]
+        Problem = 1,
+    }
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+    [System.ServiceModel.ServiceContractAttribute(ConfigurationName="OKBData.IDataService", SessionMode=System.ServiceModel.SessionMode.Required)]
+    public interface IDataService {
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IDataService/Request", ReplyAction="http://tempuri.org/IDataService/RequestResponse")]
+        int Request(HeuristicLab.OKB.AlgorithmHost.OKBData.EntityType type, int id);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IDataService/Submit", ReplyAction="http://tempuri.org/IDataService/SubmitResponse")]
+        void Submit(HeuristicLab.OKB.AlgorithmHost.OKBData.EntityType type, int id);
+        
+        [System.ServiceModel.OperationContractAttribute(IsInitiating=false, Action="http://tempuri.org/IDataService/GetNextChunk", ReplyAction="http://tempuri.org/IDataService/GetNextChunkResponse")]
+        byte[] GetNextChunk(int size);
+        
+        [System.ServiceModel.OperationContractAttribute(IsInitiating=false, Action="http://tempuri.org/IDataService/SetNextChunk", ReplyAction="http://tempuri.org/IDataService/SetNextChunkResponse")]
+        void SetNextChunk(byte[] data);
+        
+        [System.ServiceModel.OperationContractAttribute(IsTerminating=true, IsInitiating=false, Action="http://tempuri.org/IDataService/TransferDone", ReplyAction="http://tempuri.org/IDataService/TransferDoneResponse")]
+        void TransferDone();
+        
+        [System.ServiceModel.OperationContractAttribute(IsTerminating=true, IsInitiating=false, Action="http://tempuri.org/IDataService/AbortTransfer", ReplyAction="http://tempuri.org/IDataService/AbortTransferResponse")]
+        void AbortTransfer();
+    }
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+    public interface IDataServiceChannel : HeuristicLab.OKB.AlgorithmHost.OKBData.IDataService, System.ServiceModel.IClientChannel {
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+    public partial class DataServiceClient : System.ServiceModel.ClientBase<HeuristicLab.OKB.AlgorithmHost.OKBData.IDataService>, HeuristicLab.OKB.AlgorithmHost.OKBData.IDataService {
+        
+        public DataServiceClient() {
+        }
+        
+        public DataServiceClient(string endpointConfigurationName) : 
+                base(endpointConfigurationName) {
+        }
+        
+        public DataServiceClient(string endpointConfigurationName, string remoteAddress) : 
+                base(endpointConfigurationName, remoteAddress) {
+        }
+        
+        public DataServiceClient(string endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) : 
+                base(endpointConfigurationName, remoteAddress) {
+        }
+        
+        public DataServiceClient(System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress) : 
+                base(binding, remoteAddress) {
+        }
+        
+        public int Request(HeuristicLab.OKB.AlgorithmHost.OKBData.EntityType type, int id) {
+            return base.Channel.Request(type, id);
+        }
+        
+        public void Submit(HeuristicLab.OKB.AlgorithmHost.OKBData.EntityType type, int id) {
+            base.Channel.Submit(type, id);
+        }
+        
+        public byte[] GetNextChunk(int size) {
+            return base.Channel.GetNextChunk(size);
+        }
+        
+        public void SetNextChunk(byte[] data) {
+            base.Channel.SetNextChunk(data);
+        }
+        
+        public void TransferDone() {
+            base.Channel.TransferDone();
+        }
+        
+        public void AbortTransfer() {
+            base.Channel.AbortTransfer();
+        }
+    }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Service References/OKBData/Reference.svcmap
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Service References/OKBData/Reference.svcmap	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Service References/OKBData/Reference.svcmap	(revision 5296)
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+<ReferenceGroup xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" ID="3526d90d-73ac-4d1d-b5c6-b0168a7596c9" xmlns="urn:schemas-microsoft-com:xml-wcfservicemap">
+  <ClientOptions>
+    <GenerateAsynchronousMethods>false</GenerateAsynchronousMethods>
+    <EnableDataBinding>true</EnableDataBinding>
+    <ExcludedTypes />
+    <ImportXmlTypes>false</ImportXmlTypes>
+    <GenerateInternalTypes>false</GenerateInternalTypes>
+    <GenerateMessageContracts>false</GenerateMessageContracts>
+    <NamespaceMappings />
+    <CollectionMappings />
+    <GenerateSerializableTypes>true</GenerateSerializableTypes>
+    <Serializer>Auto</Serializer>
+    <UseSerializerForFaults>true</UseSerializerForFaults>
+    <ReferenceAllAssemblies>true</ReferenceAllAssemblies>
+    <ReferencedAssemblies />
+    <ReferencedDataContractTypes />
+    <ServiceContractMappings />
+  </ClientOptions>
+  <MetadataSources>
+    <MetadataSource Address="http://localhost:8732/Design_Time_Addresses/OKB-3.3/DataService/mex" Protocol="mex" SourceId="1" />
+  </MetadataSources>
+  <Metadata>
+    <MetadataFile FileName="service.wsdl" MetadataType="Wsdl" ID="16d43e5f-65ec-4c41-9099-67f2de43357c" SourceId="1" SourceUrl="http://localhost:8732/Design_Time_Addresses/OKB-3.3/DataService/mex" />
+    <MetadataFile FileName="service.xsd" MetadataType="Schema" ID="54e464c8-eb3d-4118-ae2d-5bda89559899" SourceId="1" SourceUrl="http://localhost:8732/Design_Time_Addresses/OKB-3.3/DataService/mex" />
+    <MetadataFile FileName="service1.xsd" MetadataType="Schema" ID="924ea9e3-8e0c-4c5b-b63a-61b173bca3e5" SourceId="1" SourceUrl="http://localhost:8732/Design_Time_Addresses/OKB-3.3/DataService/mex" />
+    <MetadataFile FileName="HeuristicLab.Services.OKB.xsd" MetadataType="Schema" ID="713a73c8-42ac-492f-880b-07d55bb4c3f7" SourceId="1" SourceUrl="http://localhost:8732/Design_Time_Addresses/OKB-3.3/DataService/mex" />
+  </Metadata>
+  <Extensions>
+    <ExtensionFile FileName="configuration91.svcinfo" Name="configuration91.svcinfo" />
+    <ExtensionFile FileName="configuration.svcinfo" Name="configuration.svcinfo" />
+  </Extensions>
+</ReferenceGroup>
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Service References/OKBData/configuration.svcinfo
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Service References/OKBData/configuration.svcinfo	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Service References/OKBData/configuration.svcinfo	(revision 5296)
@@ -0,0 +1,10 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<configurationSnapshot xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="urn:schemas-microsoft-com:xml-wcfconfigurationsnapshot">
+  <behaviors />
+  <bindings>
+    <binding digest="System.ServiceModel.Configuration.NetTcpBindingElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089:&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-16&quot;?&gt;&lt;Data hostNameComparisonMode=&quot;StrongWildcard&quot; listenBacklog=&quot;10&quot; maxBufferSize=&quot;65536&quot; maxConnections=&quot;10&quot; name=&quot;NetTcpBinding_IDataService&quot; transactionFlow=&quot;false&quot; transactionProtocol=&quot;OleTransactions&quot; transferMode=&quot;Buffered&quot;&gt;&lt;readerQuotas maxArrayLength=&quot;16384&quot; maxBytesPerRead=&quot;4096&quot; maxDepth=&quot;32&quot; maxNameTableCharCount=&quot;16384&quot; maxStringContentLength=&quot;8192&quot; /&gt;&lt;reliableSession enabled=&quot;false&quot; inactivityTimeout=&quot;00:10:00&quot; ordered=&quot;true&quot; /&gt;&lt;security mode=&quot;Message&quot;&gt;&lt;message algorithmSuite=&quot;Default&quot; clientCredentialType=&quot;UserName&quot; /&gt;&lt;transport clientCredentialType=&quot;Windows&quot; protectionLevel=&quot;EncryptAndSign&quot; /&gt;&lt;/security&gt;&lt;/Data&gt;" bindingType="netTcpBinding" name="NetTcpBinding_IDataService" />
+  </bindings>
+  <endpoints>
+    <endpoint normalizedDigest="&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-16&quot;?&gt;&lt;Data address=&quot;net.tcp://localhost:8733/OKB-3.3/DataService&quot; binding=&quot;netTcpBinding&quot; bindingConfiguration=&quot;NetTcpBinding_IDataService&quot; contract=&quot;OKBData.IDataService&quot; name=&quot;NetTcpBinding_IDataService&quot;&gt;&lt;identity&gt;&lt;certificate encodedValue=&quot;AwAAAAEAAAAUAAAAD/AlkYJw/OUhl6D/9w8mjJBh39kgAAAAAQAAAPIBAAAwggHuMIIBW6ADAgECAhAdEzTisaf2sEZxrqYZfYtCMAkGBSsOAwIdBQAwFDESMBAGA1UEAxMJbG9jYWxob3N0MB4XDTEwMDgyMDIyMzIwOFoXDTM5MTIzMTIzNTk1OVowFDESMBAGA1UEAxMJbG9jYWxob3N0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDPkfCSLRX8/4F+Z4ys43yZ4MMzjB44cMakPz4Nri+mEB5n2z/0GFatCYzkI2f/nniWqVrBYjHkjsZy2EZioHu4wa99c1XEGJnFNDuNn6ESkfEyhyF4+OqKGnpK9HNrw7OWMuqn2oOh0iFd9fl6FTAm+Y0p3LP+38BuYzpCniqqdwIDAQABo0kwRzBFBgNVHQEEPjA8gBDvi8Rgio9v+mr58TiAvqF5oRYwFDESMBAGA1UEAxMJbG9jYWxob3N0ghAdEzTisaf2sEZxrqYZfYtCMAkGBSsOAwIdBQADgYEANdGlvHKeUptfNu9I0wgA5qjmVB+JDldOAkrfM0R+4IcVQ06y5K7P07uxQAV7+rhnDLgLyFJunUHgzbfjsjFy7vjwtoieXA5j0AYlm4AHR7dHt4HVgkIMYt8XOCqMw5jjFX91xJ89tC7mM9zYR48N9T5QSeMGo+f+JzybeLWxnNs=&quot; /&gt;&lt;/identity&gt;&lt;/Data&gt;" digest="&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-16&quot;?&gt;&lt;Data address=&quot;net.tcp://localhost:8733/OKB-3.3/DataService&quot; binding=&quot;netTcpBinding&quot; bindingConfiguration=&quot;NetTcpBinding_IDataService&quot; contract=&quot;OKBData.IDataService&quot; name=&quot;NetTcpBinding_IDataService&quot;&gt;&lt;identity&gt;&lt;certificate encodedValue=&quot;AwAAAAEAAAAUAAAAD/AlkYJw/OUhl6D/9w8mjJBh39kgAAAAAQAAAPIBAAAwggHuMIIBW6ADAgECAhAdEzTisaf2sEZxrqYZfYtCMAkGBSsOAwIdBQAwFDESMBAGA1UEAxMJbG9jYWxob3N0MB4XDTEwMDgyMDIyMzIwOFoXDTM5MTIzMTIzNTk1OVowFDESMBAGA1UEAxMJbG9jYWxob3N0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDPkfCSLRX8/4F+Z4ys43yZ4MMzjB44cMakPz4Nri+mEB5n2z/0GFatCYzkI2f/nniWqVrBYjHkjsZy2EZioHu4wa99c1XEGJnFNDuNn6ESkfEyhyF4+OqKGnpK9HNrw7OWMuqn2oOh0iFd9fl6FTAm+Y0p3LP+38BuYzpCniqqdwIDAQABo0kwRzBFBgNVHQEEPjA8gBDvi8Rgio9v+mr58TiAvqF5oRYwFDESMBAGA1UEAxMJbG9jYWxob3N0ghAdEzTisaf2sEZxrqYZfYtCMAkGBSsOAwIdBQADgYEANdGlvHKeUptfNu9I0wgA5qjmVB+JDldOAkrfM0R+4IcVQ06y5K7P07uxQAV7+rhnDLgLyFJunUHgzbfjsjFy7vjwtoieXA5j0AYlm4AHR7dHt4HVgkIMYt8XOCqMw5jjFX91xJ89tC7mM9zYR48N9T5QSeMGo+f+JzybeLWxnNs=&quot; /&gt;&lt;/identity&gt;&lt;/Data&gt;" contractName="OKBData.IDataService" name="NetTcpBinding_IDataService" />
+  </endpoints>
+</configurationSnapshot>
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Service References/OKBData/configuration91.svcinfo
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Service References/OKBData/configuration91.svcinfo	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Service References/OKBData/configuration91.svcinfo	(revision 5296)
@@ -0,0 +1,207 @@
+<?xml version="1.0" encoding="utf-8"?>
+<SavedWcfConfigurationInformation xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Version="9.1" CheckSum="LMVHWymJpVGiwhcR+yMeNN4rwT8=">
+  <bindingConfigurations>
+    <bindingConfiguration bindingType="netTcpBinding" name="NetTcpBinding_IDataService">
+      <properties>
+        <property path="/name" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>NetTcpBinding_IDataService</serializedValue>
+        </property>
+        <property path="/closeTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>00:01:00</serializedValue>
+        </property>
+        <property path="/openTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>00:01:00</serializedValue>
+        </property>
+        <property path="/receiveTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>00:10:00</serializedValue>
+        </property>
+        <property path="/sendTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>00:01:00</serializedValue>
+        </property>
+        <property path="/transactionFlow" isComplexType="false" isExplicitlyDefined="true" clrType="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>False</serializedValue>
+        </property>
+        <property path="/transferMode" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.TransferMode, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>Buffered</serializedValue>
+        </property>
+        <property path="/transactionProtocol" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.TransactionProtocol, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>OleTransactions</serializedValue>
+        </property>
+        <property path="/hostNameComparisonMode" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.HostNameComparisonMode, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>StrongWildcard</serializedValue>
+        </property>
+        <property path="/listenBacklog" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>10</serializedValue>
+        </property>
+        <property path="/maxBufferPoolSize" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int64, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>524288</serializedValue>
+        </property>
+        <property path="/maxBufferSize" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>65536</serializedValue>
+        </property>
+        <property path="/maxConnections" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>10</serializedValue>
+        </property>
+        <property path="/maxReceivedMessageSize" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int64, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>65536</serializedValue>
+        </property>
+        <property path="/portSharingEnabled" isComplexType="false" isExplicitlyDefined="false" clrType="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>False</serializedValue>
+        </property>
+        <property path="/readerQuotas" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.XmlDictionaryReaderQuotasElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.XmlDictionaryReaderQuotasElement</serializedValue>
+        </property>
+        <property path="/readerQuotas/maxDepth" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>32</serializedValue>
+        </property>
+        <property path="/readerQuotas/maxStringContentLength" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>8192</serializedValue>
+        </property>
+        <property path="/readerQuotas/maxArrayLength" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>16384</serializedValue>
+        </property>
+        <property path="/readerQuotas/maxBytesPerRead" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>4096</serializedValue>
+        </property>
+        <property path="/readerQuotas/maxNameTableCharCount" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>16384</serializedValue>
+        </property>
+        <property path="/reliableSession" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.StandardBindingOptionalReliableSessionElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.StandardBindingOptionalReliableSessionElement</serializedValue>
+        </property>
+        <property path="/reliableSession/ordered" isComplexType="false" isExplicitlyDefined="true" clrType="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>True</serializedValue>
+        </property>
+        <property path="/reliableSession/inactivityTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>00:10:00</serializedValue>
+        </property>
+        <property path="/reliableSession/enabled" isComplexType="false" isExplicitlyDefined="true" clrType="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>False</serializedValue>
+        </property>
+        <property path="/security" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.NetTcpSecurityElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.NetTcpSecurityElement</serializedValue>
+        </property>
+        <property path="/security/mode" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.SecurityMode, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>Message</serializedValue>
+        </property>
+        <property path="/security/transport" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.TcpTransportSecurityElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.TcpTransportSecurityElement</serializedValue>
+        </property>
+        <property path="/security/transport/clientCredentialType" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.TcpClientCredentialType, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>Windows</serializedValue>
+        </property>
+        <property path="/security/transport/protectionLevel" isComplexType="false" isExplicitlyDefined="true" clrType="System.Net.Security.ProtectionLevel, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>EncryptAndSign</serializedValue>
+        </property>
+        <property path="/security/transport/extendedProtectionPolicy" isComplexType="true" isExplicitlyDefined="false" clrType="System.Security.Authentication.ExtendedProtection.Configuration.ExtendedProtectionPolicyElement, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.Security.Authentication.ExtendedProtection.Configuration.ExtendedProtectionPolicyElement</serializedValue>
+        </property>
+        <property path="/security/transport/extendedProtectionPolicy/policyEnforcement" isComplexType="false" isExplicitlyDefined="false" clrType="System.Security.Authentication.ExtendedProtection.PolicyEnforcement, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>Never</serializedValue>
+        </property>
+        <property path="/security/transport/extendedProtectionPolicy/protectionScenario" isComplexType="false" isExplicitlyDefined="false" clrType="System.Security.Authentication.ExtendedProtection.ProtectionScenario, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>TransportSelected</serializedValue>
+        </property>
+        <property path="/security/transport/extendedProtectionPolicy/customServiceNames" isComplexType="true" isExplicitlyDefined="false" clrType="System.Security.Authentication.ExtendedProtection.Configuration.ServiceNameElementCollection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>(Collection)</serializedValue>
+        </property>
+        <property path="/security/message" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.MessageSecurityOverTcpElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.MessageSecurityOverTcpElement</serializedValue>
+        </property>
+        <property path="/security/message/clientCredentialType" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.MessageCredentialType, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>UserName</serializedValue>
+        </property>
+        <property path="/security/message/algorithmSuite" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.Security.SecurityAlgorithmSuite, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>Default</serializedValue>
+        </property>
+      </properties>
+    </bindingConfiguration>
+  </bindingConfigurations>
+  <endpoints>
+    <endpoint name="NetTcpBinding_IDataService" contract="OKBData.IDataService" bindingType="netTcpBinding" address="net.tcp://localhost:8733/OKB-3.3/DataService" bindingConfiguration="NetTcpBinding_IDataService">
+      <properties>
+        <property path="/address" isComplexType="false" isExplicitlyDefined="true" clrType="System.Uri, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>net.tcp://localhost:8733/OKB-3.3/DataService</serializedValue>
+        </property>
+        <property path="/behaviorConfiguration" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/binding" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>netTcpBinding</serializedValue>
+        </property>
+        <property path="/bindingConfiguration" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>NetTcpBinding_IDataService</serializedValue>
+        </property>
+        <property path="/contract" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>OKBData.IDataService</serializedValue>
+        </property>
+        <property path="/headers" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.AddressHeaderCollectionElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.AddressHeaderCollectionElement</serializedValue>
+        </property>
+        <property path="/headers/headers" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.Channels.AddressHeaderCollection, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>&lt;Header /&gt;</serializedValue>
+        </property>
+        <property path="/identity" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.IdentityElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.IdentityElement</serializedValue>
+        </property>
+        <property path="/identity/userPrincipalName" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.UserPrincipalNameElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.UserPrincipalNameElement</serializedValue>
+        </property>
+        <property path="/identity/userPrincipalName/value" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/servicePrincipalName" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.ServicePrincipalNameElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.ServicePrincipalNameElement</serializedValue>
+        </property>
+        <property path="/identity/servicePrincipalName/value" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/dns" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.DnsElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.DnsElement</serializedValue>
+        </property>
+        <property path="/identity/dns/value" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/rsa" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.RsaElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.RsaElement</serializedValue>
+        </property>
+        <property path="/identity/rsa/value" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/certificate" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.CertificateElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.CertificateElement</serializedValue>
+        </property>
+        <property path="/identity/certificate/encodedValue" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>AwAAAAEAAAAUAAAAD/AlkYJw/OUhl6D/9w8mjJBh39kgAAAAAQAAAPIBAAAwggHuMIIBW6ADAgECAhAdEzTisaf2sEZxrqYZfYtCMAkGBSsOAwIdBQAwFDESMBAGA1UEAxMJbG9jYWxob3N0MB4XDTEwMDgyMDIyMzIwOFoXDTM5MTIzMTIzNTk1OVowFDESMBAGA1UEAxMJbG9jYWxob3N0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDPkfCSLRX8/4F+Z4ys43yZ4MMzjB44cMakPz4Nri+mEB5n2z/0GFatCYzkI2f/nniWqVrBYjHkjsZy2EZioHu4wa99c1XEGJnFNDuNn6ESkfEyhyF4+OqKGnpK9HNrw7OWMuqn2oOh0iFd9fl6FTAm+Y0p3LP+38BuYzpCniqqdwIDAQABo0kwRzBFBgNVHQEEPjA8gBDvi8Rgio9v+mr58TiAvqF5oRYwFDESMBAGA1UEAxMJbG9jYWxob3N0ghAdEzTisaf2sEZxrqYZfYtCMAkGBSsOAwIdBQADgYEANdGlvHKeUptfNu9I0wgA5qjmVB+JDldOAkrfM0R+4IcVQ06y5K7P07uxQAV7+rhnDLgLyFJunUHgzbfjsjFy7vjwtoieXA5j0AYlm4AHR7dHt4HVgkIMYt8XOCqMw5jjFX91xJ89tC7mM9zYR48N9T5QSeMGo+f+JzybeLWxnNs=</serializedValue>
+        </property>
+        <property path="/identity/certificateReference" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.CertificateReferenceElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.CertificateReferenceElement</serializedValue>
+        </property>
+        <property path="/identity/certificateReference/storeName" isComplexType="false" isExplicitlyDefined="false" clrType="System.Security.Cryptography.X509Certificates.StoreName, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>My</serializedValue>
+        </property>
+        <property path="/identity/certificateReference/storeLocation" isComplexType="false" isExplicitlyDefined="false" clrType="System.Security.Cryptography.X509Certificates.StoreLocation, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>LocalMachine</serializedValue>
+        </property>
+        <property path="/identity/certificateReference/x509FindType" isComplexType="false" isExplicitlyDefined="false" clrType="System.Security.Cryptography.X509Certificates.X509FindType, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>FindBySubjectDistinguishedName</serializedValue>
+        </property>
+        <property path="/identity/certificateReference/findValue" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/certificateReference/isChainIncluded" isComplexType="false" isExplicitlyDefined="false" clrType="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>False</serializedValue>
+        </property>
+        <property path="/name" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>NetTcpBinding_IDataService</serializedValue>
+        </property>
+        <property path="/kind" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/endpointConfiguration" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+      </properties>
+    </endpoint>
+  </endpoints>
+</SavedWcfConfigurationInformation>
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Service References/OKBData/service.wsdl
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Service References/OKBData/service.wsdl	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Service References/OKBData/service.wsdl	(revision 5296)
@@ -0,0 +1,491 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<wsdl:definitions xmlns:wsap="http://schemas.xmlsoap.org/ws/2004/08/addressing/policy" xmlns:wsa10="http://www.w3.org/2005/08/addressing" xmlns:tns="http://tempuri.org/" xmlns:msc="http://schemas.microsoft.com/ws/2005/12/wsdl/contract" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="DataService" targetNamespace="http://tempuri.org/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
+  <wsp:Policy wsu:Id="NetTcpBinding_IDataService_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SymmetricBinding xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <wsp:Policy>
+            <sp:ProtectionToken>
+              <wsp:Policy>
+                <sp:SecureConversationToken sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient">
+                  <wsp:Policy>
+                    <sp:RequireDerivedKeys />
+                    <sp:BootstrapPolicy>
+                      <wsp:Policy>
+                        <sp:SignedParts>
+                          <sp:Body />
+                          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+                          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+                          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+                          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+                          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+                          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+                          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+                        </sp:SignedParts>
+                        <sp:EncryptedParts>
+                          <sp:Body />
+                        </sp:EncryptedParts>
+                        <sp:SymmetricBinding>
+                          <wsp:Policy>
+                            <sp:ProtectionToken>
+                              <wsp:Policy>
+                                <mssp:SslContextToken sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient" xmlns:mssp="http://schemas.microsoft.com/ws/2005/07/securitypolicy">
+                                  <wsp:Policy>
+                                    <sp:RequireDerivedKeys />
+                                  </wsp:Policy>
+                                </mssp:SslContextToken>
+                              </wsp:Policy>
+                            </sp:ProtectionToken>
+                            <sp:AlgorithmSuite>
+                              <wsp:Policy>
+                                <sp:Basic256 />
+                              </wsp:Policy>
+                            </sp:AlgorithmSuite>
+                            <sp:Layout>
+                              <wsp:Policy>
+                                <sp:Strict />
+                              </wsp:Policy>
+                            </sp:Layout>
+                            <sp:IncludeTimestamp />
+                            <sp:EncryptSignature />
+                            <sp:OnlySignEntireHeadersAndBody />
+                          </wsp:Policy>
+                        </sp:SymmetricBinding>
+                        <sp:SignedSupportingTokens>
+                          <wsp:Policy>
+                            <sp:UsernameToken sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient">
+                              <wsp:Policy>
+                                <sp:WssUsernameToken10 />
+                              </wsp:Policy>
+                            </sp:UsernameToken>
+                          </wsp:Policy>
+                        </sp:SignedSupportingTokens>
+                        <sp:Wss11>
+                          <wsp:Policy />
+                        </sp:Wss11>
+                        <sp:Trust10>
+                          <wsp:Policy>
+                            <sp:MustSupportIssuedTokens />
+                            <sp:RequireClientEntropy />
+                            <sp:RequireServerEntropy />
+                          </wsp:Policy>
+                        </sp:Trust10>
+                      </wsp:Policy>
+                    </sp:BootstrapPolicy>
+                  </wsp:Policy>
+                </sp:SecureConversationToken>
+              </wsp:Policy>
+            </sp:ProtectionToken>
+            <sp:AlgorithmSuite>
+              <wsp:Policy>
+                <sp:Basic256 />
+              </wsp:Policy>
+            </sp:AlgorithmSuite>
+            <sp:Layout>
+              <wsp:Policy>
+                <sp:Strict />
+              </wsp:Policy>
+            </sp:Layout>
+            <sp:IncludeTimestamp />
+            <sp:EncryptSignature />
+            <sp:OnlySignEntireHeadersAndBody />
+          </wsp:Policy>
+        </sp:SymmetricBinding>
+        <sp:Wss11 xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <wsp:Policy />
+        </sp:Wss11>
+        <sp:Trust10 xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <wsp:Policy>
+            <sp:MustSupportIssuedTokens />
+            <sp:RequireClientEntropy />
+            <sp:RequireServerEntropy />
+          </wsp:Policy>
+        </sp:Trust10>
+        <msb:BinaryEncoding xmlns:msb="http://schemas.microsoft.com/ws/06/2004/mspolicy/netbinary1" />
+        <wsaw:UsingAddressing />
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="NetTcpBinding_IDataService_Request_Input_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="NetTcpBinding_IDataService_Request_output_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="NetTcpBinding_IDataService_Submit_Input_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="NetTcpBinding_IDataService_Submit_output_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="NetTcpBinding_IDataService_GetNextChunk_Input_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="NetTcpBinding_IDataService_GetNextChunk_output_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="NetTcpBinding_IDataService_SetNextChunk_Input_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="NetTcpBinding_IDataService_SetNextChunk_output_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="NetTcpBinding_IDataService_TransferDone_Input_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="NetTcpBinding_IDataService_TransferDone_output_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="NetTcpBinding_IDataService_AbortTransfer_Input_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="NetTcpBinding_IDataService_AbortTransfer_output_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsdl:types>
+    <xsd:schema targetNamespace="http://tempuri.org/Imports">
+      <xsd:import namespace="http://tempuri.org/" />
+      <xsd:import namespace="http://schemas.microsoft.com/2003/10/Serialization/" />
+      <xsd:import namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB" />
+    </xsd:schema>
+  </wsdl:types>
+  <wsdl:message name="IDataService_Request_InputMessage">
+    <wsdl:part name="parameters" element="tns:Request" />
+  </wsdl:message>
+  <wsdl:message name="IDataService_Request_OutputMessage">
+    <wsdl:part name="parameters" element="tns:RequestResponse" />
+  </wsdl:message>
+  <wsdl:message name="IDataService_Submit_InputMessage">
+    <wsdl:part name="parameters" element="tns:Submit" />
+  </wsdl:message>
+  <wsdl:message name="IDataService_Submit_OutputMessage">
+    <wsdl:part name="parameters" element="tns:SubmitResponse" />
+  </wsdl:message>
+  <wsdl:message name="IDataService_GetNextChunk_InputMessage">
+    <wsdl:part name="parameters" element="tns:GetNextChunk" />
+  </wsdl:message>
+  <wsdl:message name="IDataService_GetNextChunk_OutputMessage">
+    <wsdl:part name="parameters" element="tns:GetNextChunkResponse" />
+  </wsdl:message>
+  <wsdl:message name="IDataService_SetNextChunk_InputMessage">
+    <wsdl:part name="parameters" element="tns:SetNextChunk" />
+  </wsdl:message>
+  <wsdl:message name="IDataService_SetNextChunk_OutputMessage">
+    <wsdl:part name="parameters" element="tns:SetNextChunkResponse" />
+  </wsdl:message>
+  <wsdl:message name="IDataService_TransferDone_InputMessage">
+    <wsdl:part name="parameters" element="tns:TransferDone" />
+  </wsdl:message>
+  <wsdl:message name="IDataService_TransferDone_OutputMessage">
+    <wsdl:part name="parameters" element="tns:TransferDoneResponse" />
+  </wsdl:message>
+  <wsdl:message name="IDataService_AbortTransfer_InputMessage">
+    <wsdl:part name="parameters" element="tns:AbortTransfer" />
+  </wsdl:message>
+  <wsdl:message name="IDataService_AbortTransfer_OutputMessage">
+    <wsdl:part name="parameters" element="tns:AbortTransferResponse" />
+  </wsdl:message>
+  <wsdl:portType msc:usingSession="true" name="IDataService">
+    <wsdl:operation msc:isInitiating="true" msc:isTerminating="false" name="Request">
+      <wsdl:input wsaw:Action="http://tempuri.org/IDataService/Request" message="tns:IDataService_Request_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/IDataService/RequestResponse" message="tns:IDataService_Request_OutputMessage" />
+    </wsdl:operation>
+    <wsdl:operation msc:isInitiating="true" msc:isTerminating="false" name="Submit">
+      <wsdl:input wsaw:Action="http://tempuri.org/IDataService/Submit" message="tns:IDataService_Submit_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/IDataService/SubmitResponse" message="tns:IDataService_Submit_OutputMessage" />
+    </wsdl:operation>
+    <wsdl:operation msc:isInitiating="false" msc:isTerminating="false" name="GetNextChunk">
+      <wsdl:input wsaw:Action="http://tempuri.org/IDataService/GetNextChunk" message="tns:IDataService_GetNextChunk_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/IDataService/GetNextChunkResponse" message="tns:IDataService_GetNextChunk_OutputMessage" />
+    </wsdl:operation>
+    <wsdl:operation msc:isInitiating="false" msc:isTerminating="false" name="SetNextChunk">
+      <wsdl:input wsaw:Action="http://tempuri.org/IDataService/SetNextChunk" message="tns:IDataService_SetNextChunk_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/IDataService/SetNextChunkResponse" message="tns:IDataService_SetNextChunk_OutputMessage" />
+    </wsdl:operation>
+    <wsdl:operation msc:isInitiating="false" msc:isTerminating="true" name="TransferDone">
+      <wsdl:input wsaw:Action="http://tempuri.org/IDataService/TransferDone" message="tns:IDataService_TransferDone_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/IDataService/TransferDoneResponse" message="tns:IDataService_TransferDone_OutputMessage" />
+    </wsdl:operation>
+    <wsdl:operation msc:isInitiating="false" msc:isTerminating="true" name="AbortTransfer">
+      <wsdl:input wsaw:Action="http://tempuri.org/IDataService/AbortTransfer" message="tns:IDataService_AbortTransfer_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/IDataService/AbortTransferResponse" message="tns:IDataService_AbortTransfer_OutputMessage" />
+    </wsdl:operation>
+  </wsdl:portType>
+  <wsdl:binding name="NetTcpBinding_IDataService" type="tns:IDataService">
+    <wsp:PolicyReference URI="#NetTcpBinding_IDataService_policy" />
+    <soap12:binding transport="http://schemas.microsoft.com/soap/tcp" />
+    <wsdl:operation name="Request">
+      <soap12:operation soapAction="http://tempuri.org/IDataService/Request" style="document" />
+      <wsdl:input>
+        <wsp:PolicyReference URI="#NetTcpBinding_IDataService_Request_Input_policy" />
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <wsp:PolicyReference URI="#NetTcpBinding_IDataService_Request_output_policy" />
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="Submit">
+      <soap12:operation soapAction="http://tempuri.org/IDataService/Submit" style="document" />
+      <wsdl:input>
+        <wsp:PolicyReference URI="#NetTcpBinding_IDataService_Submit_Input_policy" />
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <wsp:PolicyReference URI="#NetTcpBinding_IDataService_Submit_output_policy" />
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="GetNextChunk">
+      <soap12:operation soapAction="http://tempuri.org/IDataService/GetNextChunk" style="document" />
+      <wsdl:input>
+        <wsp:PolicyReference URI="#NetTcpBinding_IDataService_GetNextChunk_Input_policy" />
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <wsp:PolicyReference URI="#NetTcpBinding_IDataService_GetNextChunk_output_policy" />
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="SetNextChunk">
+      <soap12:operation soapAction="http://tempuri.org/IDataService/SetNextChunk" style="document" />
+      <wsdl:input>
+        <wsp:PolicyReference URI="#NetTcpBinding_IDataService_SetNextChunk_Input_policy" />
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <wsp:PolicyReference URI="#NetTcpBinding_IDataService_SetNextChunk_output_policy" />
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="TransferDone">
+      <soap12:operation soapAction="http://tempuri.org/IDataService/TransferDone" style="document" />
+      <wsdl:input>
+        <wsp:PolicyReference URI="#NetTcpBinding_IDataService_TransferDone_Input_policy" />
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <wsp:PolicyReference URI="#NetTcpBinding_IDataService_TransferDone_output_policy" />
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="AbortTransfer">
+      <soap12:operation soapAction="http://tempuri.org/IDataService/AbortTransfer" style="document" />
+      <wsdl:input>
+        <wsp:PolicyReference URI="#NetTcpBinding_IDataService_AbortTransfer_Input_policy" />
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <wsp:PolicyReference URI="#NetTcpBinding_IDataService_AbortTransfer_output_policy" />
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+  </wsdl:binding>
+  <wsdl:service name="DataService">
+    <wsdl:port name="NetTcpBinding_IDataService" binding="tns:NetTcpBinding_IDataService">
+      <soap12:address location="net.tcp://localhost:8733/OKB-3.3/DataService" />
+      <wsa10:EndpointReference>
+        <wsa10:Address>net.tcp://localhost:8733/OKB-3.3/DataService</wsa10:Address>
+        <Identity xmlns="http://schemas.xmlsoap.org/ws/2006/02/addressingidentity">
+          <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
+            <X509Data>
+              <X509Certificate>MIIB7jCCAVugAwIBAgIQHRM04rGn9rBGca6mGX2LQjAJBgUrDgMCHQUAMBQxEjAQBgNVBAMTCWxvY2FsaG9zdDAeFw0xMDA4MjAyMjMyMDhaFw0zOTEyMzEyMzU5NTlaMBQxEjAQBgNVBAMTCWxvY2FsaG9zdDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAz5Hwki0V/P+BfmeMrON8meDDM4weOHDGpD8+Da4vphAeZ9s/9BhWrQmM5CNn/554lqlawWIx5I7GcthGYqB7uMGvfXNVxBiZxTQ7jZ+hEpHxMochePjqihp6SvRza8OzljLqp9qDodIhXfX5ehUwJvmNKdyz/t/AbmM6Qp4qqncCAwEAAaNJMEcwRQYDVR0BBD4wPIAQ74vEYIqPb/pq+fE4gL6heaEWMBQxEjAQBgNVBAMTCWxvY2FsaG9zdIIQHRM04rGn9rBGca6mGX2LQjAJBgUrDgMCHQUAA4GBADXRpbxynlKbXzbvSNMIAOao5lQfiQ5XTgJK3zNEfuCHFUNOsuSuz9O7sUAFe/q4Zwy4C8hSbp1B4M2347Ixcu748LaInlwOY9AGJZuAB0e3R7eB1YJCDGLfFzgqjMOY4xV/dcSfPbQu5jPc2EePDfU+UEnjBqPn/ic8m3i1sZzb</X509Certificate>
+            </X509Data>
+          </KeyInfo>
+        </Identity>
+      </wsa10:EndpointReference>
+    </wsdl:port>
+  </wsdl:service>
+</wsdl:definitions>
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Service References/OKBData/service.xsd
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Service References/OKBData/service.xsd	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Service References/OKBData/service.xsd	(revision 5296)
@@ -0,0 +1,78 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:tns="http://tempuri.org/" elementFormDefault="qualified" targetNamespace="http://tempuri.org/" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:import namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB" />
+  <xs:element name="Request">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q1="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB" minOccurs="0" name="type" type="q1:EntityType" />
+        <xs:element minOccurs="0" name="id" type="xs:int" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="RequestResponse">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="RequestResult" type="xs:int" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="Submit">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q2="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB" minOccurs="0" name="type" type="q2:EntityType" />
+        <xs:element minOccurs="0" name="id" type="xs:int" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="SubmitResponse">
+    <xs:complexType>
+      <xs:sequence />
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="GetNextChunk">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="size" type="xs:int" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="GetNextChunkResponse">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="GetNextChunkResult" nillable="true" type="xs:base64Binary" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="SetNextChunk">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="data" nillable="true" type="xs:base64Binary" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="SetNextChunkResponse">
+    <xs:complexType>
+      <xs:sequence />
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="TransferDone">
+    <xs:complexType>
+      <xs:sequence />
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="TransferDoneResponse">
+    <xs:complexType>
+      <xs:sequence />
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="AbortTransfer">
+    <xs:complexType>
+      <xs:sequence />
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="AbortTransferResponse">
+    <xs:complexType>
+      <xs:sequence />
+    </xs:complexType>
+  </xs:element>
+</xs:schema>
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Service References/OKBData/service1.xsd
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Service References/OKBData/service1.xsd	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Service References/OKBData/service1.xsd	(revision 5296)
@@ -0,0 +1,42 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:tns="http://schemas.microsoft.com/2003/10/Serialization/" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://schemas.microsoft.com/2003/10/Serialization/" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:element name="anyType" nillable="true" type="xs:anyType" />
+  <xs:element name="anyURI" nillable="true" type="xs:anyURI" />
+  <xs:element name="base64Binary" nillable="true" type="xs:base64Binary" />
+  <xs:element name="boolean" nillable="true" type="xs:boolean" />
+  <xs:element name="byte" nillable="true" type="xs:byte" />
+  <xs:element name="dateTime" nillable="true" type="xs:dateTime" />
+  <xs:element name="decimal" nillable="true" type="xs:decimal" />
+  <xs:element name="double" nillable="true" type="xs:double" />
+  <xs:element name="float" nillable="true" type="xs:float" />
+  <xs:element name="int" nillable="true" type="xs:int" />
+  <xs:element name="long" nillable="true" type="xs:long" />
+  <xs:element name="QName" nillable="true" type="xs:QName" />
+  <xs:element name="short" nillable="true" type="xs:short" />
+  <xs:element name="string" nillable="true" type="xs:string" />
+  <xs:element name="unsignedByte" nillable="true" type="xs:unsignedByte" />
+  <xs:element name="unsignedInt" nillable="true" type="xs:unsignedInt" />
+  <xs:element name="unsignedLong" nillable="true" type="xs:unsignedLong" />
+  <xs:element name="unsignedShort" nillable="true" type="xs:unsignedShort" />
+  <xs:element name="char" nillable="true" type="tns:char" />
+  <xs:simpleType name="char">
+    <xs:restriction base="xs:int" />
+  </xs:simpleType>
+  <xs:element name="duration" nillable="true" type="tns:duration" />
+  <xs:simpleType name="duration">
+    <xs:restriction base="xs:duration">
+      <xs:pattern value="\-?P(\d*D)?(T(\d*H)?(\d*M)?(\d*(\.\d*)?S)?)?" />
+      <xs:minInclusive value="-P10675199DT2H48M5.4775808S" />
+      <xs:maxInclusive value="P10675199DT2H48M5.4775807S" />
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:element name="guid" nillable="true" type="tns:guid" />
+  <xs:simpleType name="guid">
+    <xs:restriction base="xs:string">
+      <xs:pattern value="[\da-fA-F]{8}-[\da-fA-F]{4}-[\da-fA-F]{4}-[\da-fA-F]{4}-[\da-fA-F]{12}" />
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:attribute name="FactoryType" type="xs:QName" />
+  <xs:attribute name="Id" type="xs:ID" />
+  <xs:attribute name="Ref" type="xs:IDREF" />
+</xs:schema>
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Service References/OKBRunner/HeuristicLab.OKB.AlgorithmHost.OKBRunner.ExperimentKit.datasource
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Service References/OKBRunner/HeuristicLab.OKB.AlgorithmHost.OKBRunner.ExperimentKit.datasource	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Service References/OKBRunner/HeuristicLab.OKB.AlgorithmHost.OKBRunner.ExperimentKit.datasource	(revision 5296)
@@ -0,0 +1,10 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<!--
+    This file is automatically generated by Visual Studio .Net. It is 
+    used to store generic object data source configuration information.  
+    Renaming the file extension or editing the content of this file may   
+    cause the file to be unrecognizable by the program.
+-->
+<GenericObjectDataSource DisplayName="ExperimentKit" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
+   <TypeInfo>HeuristicLab.OKB.AlgorithmHost.OKBRunner.ExperimentKit, Service References.OKBRunner.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</TypeInfo>
+</GenericObjectDataSource>
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Service References/OKBRunner/HeuristicLab.OKB.AlgorithmHost.OKBRunner.StarterKit.datasource
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Service References/OKBRunner/HeuristicLab.OKB.AlgorithmHost.OKBRunner.StarterKit.datasource	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Service References/OKBRunner/HeuristicLab.OKB.AlgorithmHost.OKBRunner.StarterKit.datasource	(revision 5296)
@@ -0,0 +1,10 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<!--
+    This file is automatically generated by Visual Studio .Net. It is 
+    used to store generic object data source configuration information.  
+    Renaming the file extension or editing the content of this file may   
+    cause the file to be unrecognizable by the program.
+-->
+<GenericObjectDataSource DisplayName="StarterKit" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
+   <TypeInfo>HeuristicLab.OKB.AlgorithmHost.OKBRunner.StarterKit, Service References.OKBRunner.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</TypeInfo>
+</GenericObjectDataSource>
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Service References/OKBRunner/HeuristicLab.Services.OKB.DataAccess.xsd
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Service References/OKBRunner/HeuristicLab.Services.OKB.DataAccess.xsd	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Service References/OKBRunner/HeuristicLab.Services.OKB.DataAccess.xsd	(revision 5296)
@@ -0,0 +1,1094 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:ser="http://schemas.microsoft.com/2003/10/Serialization/" xmlns:tns="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataAccess" elementFormDefault="qualified" targetNamespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataAccess" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:import namespace="http://schemas.microsoft.com/2003/10/Serialization/" />
+  <xs:import namespace="http://schemas.datacontract.org/2004/07/System.Data.Linq" />
+  <xs:complexType name="ArrayOfAlgorithmClass">
+    <xs:sequence>
+      <xs:element minOccurs="0" maxOccurs="unbounded" name="AlgorithmClass" nillable="true" type="tns:AlgorithmClass" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="ArrayOfAlgorithmClass" nillable="true" type="tns:ArrayOfAlgorithmClass" />
+  <xs:complexType name="AlgorithmClass">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="Id" type="xs:int" />
+      <xs:element minOccurs="0" name="Name" nillable="true" type="xs:string" />
+      <xs:element minOccurs="0" name="Description" nillable="true" type="xs:string" />
+      <xs:element minOccurs="0" name="Algorithms" nillable="true" type="tns:ArrayOfAlgorithm">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+    </xs:sequence>
+    <xs:attribute ref="ser:Id" />
+    <xs:attribute ref="ser:Ref" />
+  </xs:complexType>
+  <xs:element name="AlgorithmClass" nillable="true" type="tns:AlgorithmClass" />
+  <xs:complexType name="ArrayOfAlgorithm">
+    <xs:sequence>
+      <xs:element minOccurs="0" maxOccurs="unbounded" name="Algorithm" nillable="true" type="tns:Algorithm" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="ArrayOfAlgorithm" nillable="true" type="tns:ArrayOfAlgorithm" />
+  <xs:complexType name="Algorithm">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="Id" type="xs:int" />
+      <xs:element minOccurs="0" name="AlgorithmClassId" type="xs:int" />
+      <xs:element minOccurs="0" name="PlatformId" type="xs:int" />
+      <xs:element minOccurs="0" name="Name" nillable="true" type="xs:string" />
+      <xs:element minOccurs="0" name="Description" nillable="true" type="xs:string" />
+      <xs:element minOccurs="0" name="Algorithm_Parameters" nillable="true" type="tns:ArrayOfAlgorithm_Parameter">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="AlgorithmData" nillable="true" type="tns:AlgorithmData">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="Experiments" nillable="true" type="tns:ArrayOfExperiment">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="Algorithm_Results" nillable="true" type="tns:ArrayOfAlgorithm_Result">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="AlgorithmClass" nillable="true" type="tns:AlgorithmClass">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="Platform" nillable="true" type="tns:Platform">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+    </xs:sequence>
+    <xs:attribute ref="ser:Id" />
+    <xs:attribute ref="ser:Ref" />
+  </xs:complexType>
+  <xs:element name="Algorithm" nillable="true" type="tns:Algorithm" />
+  <xs:complexType name="ArrayOfAlgorithm_Parameter">
+    <xs:sequence>
+      <xs:element minOccurs="0" maxOccurs="unbounded" name="Algorithm_Parameter" nillable="true" type="tns:Algorithm_Parameter" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="ArrayOfAlgorithm_Parameter" nillable="true" type="tns:ArrayOfAlgorithm_Parameter" />
+  <xs:complexType name="Algorithm_Parameter">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="AlgorithmId" type="xs:int" />
+      <xs:element minOccurs="0" name="ParameterId" type="xs:int" />
+      <xs:element minOccurs="0" name="Parameter" nillable="true" type="tns:Parameter">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="Algorithm" nillable="true" type="tns:Algorithm">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+    </xs:sequence>
+    <xs:attribute ref="ser:Id" />
+    <xs:attribute ref="ser:Ref" />
+  </xs:complexType>
+  <xs:element name="Algorithm_Parameter" nillable="true" type="tns:Algorithm_Parameter" />
+  <xs:complexType name="Parameter">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="Id" type="xs:int" />
+      <xs:element minOccurs="0" name="Name" nillable="true" type="xs:string" />
+      <xs:element minOccurs="0" name="Description" nillable="true" type="xs:string" />
+      <xs:element minOccurs="0" name="DataTypeId" type="xs:int" />
+      <xs:element minOccurs="0" name="Algorithm_Parameters" nillable="true" type="tns:ArrayOfAlgorithm_Parameter">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="CharParameterValues" nillable="true" type="tns:ArrayOfCharParameterValue">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="FloatParameterValues" nillable="true" type="tns:ArrayOfFloatParameterValue">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="IntParameterValues" nillable="true" type="tns:ArrayOfIntParameterValue">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="Problem_Parameters" nillable="true" type="tns:ArrayOfProblem_Parameter">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="OperatorParameterValues" nillable="true" type="tns:ArrayOfOperatorParameterValue">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="DataType" nillable="true" type="tns:DataType">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+    </xs:sequence>
+    <xs:attribute ref="ser:Id" />
+    <xs:attribute ref="ser:Ref" />
+  </xs:complexType>
+  <xs:element name="Parameter" nillable="true" type="tns:Parameter" />
+  <xs:complexType name="ArrayOfCharParameterValue">
+    <xs:sequence>
+      <xs:element minOccurs="0" maxOccurs="unbounded" name="CharParameterValue" nillable="true" type="tns:CharParameterValue" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="ArrayOfCharParameterValue" nillable="true" type="tns:ArrayOfCharParameterValue" />
+  <xs:complexType name="CharParameterValue">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="ParameterId" type="xs:int" />
+      <xs:element minOccurs="0" name="ExperimentId" type="xs:int" />
+      <xs:element minOccurs="0" name="Value" nillable="true" type="xs:string" />
+      <xs:element minOccurs="0" name="Experiment" nillable="true" type="tns:Experiment">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="Parameter" nillable="true" type="tns:Parameter">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+    </xs:sequence>
+    <xs:attribute ref="ser:Id" />
+    <xs:attribute ref="ser:Ref" />
+  </xs:complexType>
+  <xs:element name="CharParameterValue" nillable="true" type="tns:CharParameterValue" />
+  <xs:complexType name="Experiment">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="Id" type="xs:int" />
+      <xs:element minOccurs="0" name="ProjectId" type="xs:int" />
+      <xs:element minOccurs="0" name="AlgorithmId" type="xs:int" />
+      <xs:element minOccurs="0" name="ProblemId" type="xs:int" />
+      <xs:element minOccurs="0" name="CharParameterValues" nillable="true" type="tns:ArrayOfCharParameterValue">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="FloatParameterValues" nillable="true" type="tns:ArrayOfFloatParameterValue">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="IntParameterValues" nillable="true" type="tns:ArrayOfIntParameterValue">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="Runs" nillable="true" type="tns:ArrayOfRun">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="OperatorParameterValues" nillable="true" type="tns:ArrayOfOperatorParameterValue">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="Problem" nillable="true" type="tns:Problem">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="Project" nillable="true" type="tns:Project">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="Algorithm" nillable="true" type="tns:Algorithm">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+    </xs:sequence>
+    <xs:attribute ref="ser:Id" />
+    <xs:attribute ref="ser:Ref" />
+  </xs:complexType>
+  <xs:element name="Experiment" nillable="true" type="tns:Experiment" />
+  <xs:complexType name="ArrayOfFloatParameterValue">
+    <xs:sequence>
+      <xs:element minOccurs="0" maxOccurs="unbounded" name="FloatParameterValue" nillable="true" type="tns:FloatParameterValue" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="ArrayOfFloatParameterValue" nillable="true" type="tns:ArrayOfFloatParameterValue" />
+  <xs:complexType name="FloatParameterValue">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="ParameterId" type="xs:int" />
+      <xs:element minOccurs="0" name="ExperimentId" type="xs:int" />
+      <xs:element minOccurs="0" name="Value" type="xs:double" />
+      <xs:element minOccurs="0" name="Experiment" nillable="true" type="tns:Experiment">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="Parameter" nillable="true" type="tns:Parameter">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+    </xs:sequence>
+    <xs:attribute ref="ser:Id" />
+    <xs:attribute ref="ser:Ref" />
+  </xs:complexType>
+  <xs:element name="FloatParameterValue" nillable="true" type="tns:FloatParameterValue" />
+  <xs:complexType name="ArrayOfIntParameterValue">
+    <xs:sequence>
+      <xs:element minOccurs="0" maxOccurs="unbounded" name="IntParameterValue" nillable="true" type="tns:IntParameterValue" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="ArrayOfIntParameterValue" nillable="true" type="tns:ArrayOfIntParameterValue" />
+  <xs:complexType name="IntParameterValue">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="ParameterId" type="xs:int" />
+      <xs:element minOccurs="0" name="ExperimentId" type="xs:int" />
+      <xs:element minOccurs="0" name="Value" type="xs:int" />
+      <xs:element minOccurs="0" name="Experiment" nillable="true" type="tns:Experiment">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="Parameter" nillable="true" type="tns:Parameter">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+    </xs:sequence>
+    <xs:attribute ref="ser:Id" />
+    <xs:attribute ref="ser:Ref" />
+  </xs:complexType>
+  <xs:element name="IntParameterValue" nillable="true" type="tns:IntParameterValue" />
+  <xs:complexType name="ArrayOfRun">
+    <xs:sequence>
+      <xs:element minOccurs="0" maxOccurs="unbounded" name="Run" nillable="true" type="tns:Run" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="ArrayOfRun" nillable="true" type="tns:ArrayOfRun" />
+  <xs:complexType name="Run">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="Id" type="xs:int" />
+      <xs:element minOccurs="0" name="ExperimentId" type="xs:int" />
+      <xs:element minOccurs="0" name="FinishedDate" nillable="true" type="xs:dateTime" />
+      <xs:element minOccurs="0" name="UserId" type="ser:guid" />
+      <xs:element minOccurs="0" name="ClientId" type="ser:guid" />
+      <xs:element minOccurs="0" name="BlobResultValues" nillable="true" type="tns:ArrayOfBlobResultValue">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="CharResultValues" nillable="true" type="tns:ArrayOfCharResultValue">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="FloatResultValues" nillable="true" type="tns:ArrayOfFloatResultValue">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="IntResultValues" nillable="true" type="tns:ArrayOfIntResultValue">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="Client" nillable="true" type="tns:Client">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="Experiment" nillable="true" type="tns:Experiment">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="User" nillable="true" type="tns:User">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+    </xs:sequence>
+    <xs:attribute ref="ser:Id" />
+    <xs:attribute ref="ser:Ref" />
+  </xs:complexType>
+  <xs:element name="Run" nillable="true" type="tns:Run" />
+  <xs:complexType name="ArrayOfBlobResultValue">
+    <xs:sequence>
+      <xs:element minOccurs="0" maxOccurs="unbounded" name="BlobResultValue" nillable="true" type="tns:BlobResultValue" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="ArrayOfBlobResultValue" nillable="true" type="tns:ArrayOfBlobResultValue" />
+  <xs:complexType name="BlobResultValue">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="ResultId" type="xs:int" />
+      <xs:element minOccurs="0" name="RunId" type="xs:int" />
+      <xs:element xmlns:q1="http://schemas.datacontract.org/2004/07/System.Data.Linq" minOccurs="0" name="Value" nillable="true" type="q1:Binary" />
+      <xs:element minOccurs="0" name="Run" nillable="true" type="tns:Run">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="Result" nillable="true" type="tns:Result">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+    </xs:sequence>
+    <xs:attribute ref="ser:Id" />
+    <xs:attribute ref="ser:Ref" />
+  </xs:complexType>
+  <xs:element name="BlobResultValue" nillable="true" type="tns:BlobResultValue" />
+  <xs:complexType name="Result">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="Id" type="xs:int" />
+      <xs:element minOccurs="0" name="Name" nillable="true" type="xs:string" />
+      <xs:element minOccurs="0" name="Description" nillable="true" type="xs:string" />
+      <xs:element minOccurs="0" name="DataTypeId" type="xs:int" />
+      <xs:element minOccurs="0" name="BlobResultValues" nillable="true" type="tns:ArrayOfBlobResultValue">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="CharResultValues" nillable="true" type="tns:ArrayOfCharResultValue">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="FloatResultValues" nillable="true" type="tns:ArrayOfFloatResultValue">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="IntResultValues" nillable="true" type="tns:ArrayOfIntResultValue">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="Algorithm_Results" nillable="true" type="tns:ArrayOfAlgorithm_Result">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="DataType" nillable="true" type="tns:DataType">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+    </xs:sequence>
+    <xs:attribute ref="ser:Id" />
+    <xs:attribute ref="ser:Ref" />
+  </xs:complexType>
+  <xs:element name="Result" nillable="true" type="tns:Result" />
+  <xs:complexType name="ArrayOfCharResultValue">
+    <xs:sequence>
+      <xs:element minOccurs="0" maxOccurs="unbounded" name="CharResultValue" nillable="true" type="tns:CharResultValue" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="ArrayOfCharResultValue" nillable="true" type="tns:ArrayOfCharResultValue" />
+  <xs:complexType name="CharResultValue">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="ResultId" type="xs:int" />
+      <xs:element minOccurs="0" name="RunId" type="xs:int" />
+      <xs:element minOccurs="0" name="Value" nillable="true" type="xs:string" />
+      <xs:element minOccurs="0" name="Run" nillable="true" type="tns:Run">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="Result" nillable="true" type="tns:Result">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+    </xs:sequence>
+    <xs:attribute ref="ser:Id" />
+    <xs:attribute ref="ser:Ref" />
+  </xs:complexType>
+  <xs:element name="CharResultValue" nillable="true" type="tns:CharResultValue" />
+  <xs:complexType name="ArrayOfFloatResultValue">
+    <xs:sequence>
+      <xs:element minOccurs="0" maxOccurs="unbounded" name="FloatResultValue" nillable="true" type="tns:FloatResultValue" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="ArrayOfFloatResultValue" nillable="true" type="tns:ArrayOfFloatResultValue" />
+  <xs:complexType name="FloatResultValue">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="ResultId" type="xs:int" />
+      <xs:element minOccurs="0" name="RunId" type="xs:int" />
+      <xs:element minOccurs="0" name="Value" type="xs:double" />
+      <xs:element minOccurs="0" name="Run" nillable="true" type="tns:Run">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="Result" nillable="true" type="tns:Result">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+    </xs:sequence>
+    <xs:attribute ref="ser:Id" />
+    <xs:attribute ref="ser:Ref" />
+  </xs:complexType>
+  <xs:element name="FloatResultValue" nillable="true" type="tns:FloatResultValue" />
+  <xs:complexType name="ArrayOfIntResultValue">
+    <xs:sequence>
+      <xs:element minOccurs="0" maxOccurs="unbounded" name="IntResultValue" nillable="true" type="tns:IntResultValue" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="ArrayOfIntResultValue" nillable="true" type="tns:ArrayOfIntResultValue" />
+  <xs:complexType name="IntResultValue">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="ResultId" type="xs:int" />
+      <xs:element minOccurs="0" name="RunId" type="xs:int" />
+      <xs:element minOccurs="0" name="Value" type="xs:int" />
+      <xs:element minOccurs="0" name="Run" nillable="true" type="tns:Run">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="Result" nillable="true" type="tns:Result">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+    </xs:sequence>
+    <xs:attribute ref="ser:Id" />
+    <xs:attribute ref="ser:Ref" />
+  </xs:complexType>
+  <xs:element name="IntResultValue" nillable="true" type="tns:IntResultValue" />
+  <xs:complexType name="ArrayOfAlgorithm_Result">
+    <xs:sequence>
+      <xs:element minOccurs="0" maxOccurs="unbounded" name="Algorithm_Result" nillable="true" type="tns:Algorithm_Result" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="ArrayOfAlgorithm_Result" nillable="true" type="tns:ArrayOfAlgorithm_Result" />
+  <xs:complexType name="Algorithm_Result">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="AlgorithmId" type="xs:int" />
+      <xs:element minOccurs="0" name="ResultId" type="xs:int" />
+      <xs:element minOccurs="0" name="Algorithm" nillable="true" type="tns:Algorithm">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="Result" nillable="true" type="tns:Result">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+    </xs:sequence>
+    <xs:attribute ref="ser:Id" />
+    <xs:attribute ref="ser:Ref" />
+  </xs:complexType>
+  <xs:element name="Algorithm_Result" nillable="true" type="tns:Algorithm_Result" />
+  <xs:complexType name="DataType">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="Id" type="xs:int" />
+      <xs:element minOccurs="0" name="SqlName" nillable="true" type="xs:string" />
+      <xs:element minOccurs="0" name="ClrName" nillable="true" type="xs:string" />
+      <xs:element minOccurs="0" name="ProblemCharacteristics" nillable="true" type="tns:ArrayOfProblemCharacteristic">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="Results" nillable="true" type="tns:ArrayOfResult">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="OperatorParameterValues" nillable="true" type="tns:ArrayOfOperatorParameterValue">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="Parameters" nillable="true" type="tns:ArrayOfParameter">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+    </xs:sequence>
+    <xs:attribute ref="ser:Id" />
+    <xs:attribute ref="ser:Ref" />
+  </xs:complexType>
+  <xs:element name="DataType" nillable="true" type="tns:DataType" />
+  <xs:complexType name="ArrayOfProblemCharacteristic">
+    <xs:sequence>
+      <xs:element minOccurs="0" maxOccurs="unbounded" name="ProblemCharacteristic" nillable="true" type="tns:ProblemCharacteristic" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="ArrayOfProblemCharacteristic" nillable="true" type="tns:ArrayOfProblemCharacteristic" />
+  <xs:complexType name="ProblemCharacteristic">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="Id" type="xs:int" />
+      <xs:element minOccurs="0" name="Name" nillable="true" type="xs:string" />
+      <xs:element minOccurs="0" name="Description" nillable="true" type="xs:string" />
+      <xs:element minOccurs="0" name="DataTypeId" type="xs:int" />
+      <xs:element minOccurs="0" name="CharProblemCharacteristicValues" nillable="true" type="tns:ArrayOfCharProblemCharacteristicValue">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="FloatProblemCharacteristicValues" nillable="true" type="tns:ArrayOfFloatProblemCharacteristicValue">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="IntProblemCharacteristicValues" nillable="true" type="tns:ArrayOfIntProblemCharacteristicValue">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="DataType" nillable="true" type="tns:DataType">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+    </xs:sequence>
+    <xs:attribute ref="ser:Id" />
+    <xs:attribute ref="ser:Ref" />
+  </xs:complexType>
+  <xs:element name="ProblemCharacteristic" nillable="true" type="tns:ProblemCharacteristic" />
+  <xs:complexType name="ArrayOfCharProblemCharacteristicValue">
+    <xs:sequence>
+      <xs:element minOccurs="0" maxOccurs="unbounded" name="CharProblemCharacteristicValue" nillable="true" type="tns:CharProblemCharacteristicValue" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="ArrayOfCharProblemCharacteristicValue" nillable="true" type="tns:ArrayOfCharProblemCharacteristicValue" />
+  <xs:complexType name="CharProblemCharacteristicValue">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="ProblemCharacteristicId" type="xs:int" />
+      <xs:element minOccurs="0" name="ProblemId" type="xs:int" />
+      <xs:element minOccurs="0" name="Value" nillable="true" type="xs:string" />
+      <xs:element minOccurs="0" name="Problem" nillable="true" type="tns:Problem">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="ProblemCharacteristic" nillable="true" type="tns:ProblemCharacteristic">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+    </xs:sequence>
+    <xs:attribute ref="ser:Id" />
+    <xs:attribute ref="ser:Ref" />
+  </xs:complexType>
+  <xs:element name="CharProblemCharacteristicValue" nillable="true" type="tns:CharProblemCharacteristicValue" />
+  <xs:complexType name="Problem">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="Id" type="xs:int" />
+      <xs:element minOccurs="0" name="ProblemClassId" type="xs:int" />
+      <xs:element minOccurs="0" name="PlatformId" type="xs:int" />
+      <xs:element minOccurs="0" name="SolutionRepresentationId" type="xs:int" />
+      <xs:element minOccurs="0" name="Name" nillable="true" type="xs:string" />
+      <xs:element minOccurs="0" name="Description" nillable="true" type="xs:string" />
+      <xs:element minOccurs="0" name="CharProblemCharacteristicValues" nillable="true" type="tns:ArrayOfCharProblemCharacteristicValue">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="Experiments" nillable="true" type="tns:ArrayOfExperiment">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="FloatProblemCharacteristicValues" nillable="true" type="tns:ArrayOfFloatProblemCharacteristicValue">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="IntProblemCharacteristicValues" nillable="true" type="tns:ArrayOfIntProblemCharacteristicValue">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="Problem_Parameters" nillable="true" type="tns:ArrayOfProblem_Parameter">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="ProblemData" nillable="true" type="tns:ProblemData">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="Platform" nillable="true" type="tns:Platform">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="ProblemClass" nillable="true" type="tns:ProblemClass">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="SolutionRepresentation" nillable="true" type="tns:SolutionRepresentation">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+    </xs:sequence>
+    <xs:attribute ref="ser:Id" />
+    <xs:attribute ref="ser:Ref" />
+  </xs:complexType>
+  <xs:element name="Problem" nillable="true" type="tns:Problem" />
+  <xs:complexType name="ArrayOfExperiment">
+    <xs:sequence>
+      <xs:element minOccurs="0" maxOccurs="unbounded" name="Experiment" nillable="true" type="tns:Experiment" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="ArrayOfExperiment" nillable="true" type="tns:ArrayOfExperiment" />
+  <xs:complexType name="ArrayOfFloatProblemCharacteristicValue">
+    <xs:sequence>
+      <xs:element minOccurs="0" maxOccurs="unbounded" name="FloatProblemCharacteristicValue" nillable="true" type="tns:FloatProblemCharacteristicValue" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="ArrayOfFloatProblemCharacteristicValue" nillable="true" type="tns:ArrayOfFloatProblemCharacteristicValue" />
+  <xs:complexType name="FloatProblemCharacteristicValue">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="ProblemCharacteristicId" type="xs:int" />
+      <xs:element minOccurs="0" name="ProblemId" type="xs:int" />
+      <xs:element minOccurs="0" name="Value" type="xs:double" />
+      <xs:element minOccurs="0" name="Problem" nillable="true" type="tns:Problem">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="ProblemCharacteristic" nillable="true" type="tns:ProblemCharacteristic">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+    </xs:sequence>
+    <xs:attribute ref="ser:Id" />
+    <xs:attribute ref="ser:Ref" />
+  </xs:complexType>
+  <xs:element name="FloatProblemCharacteristicValue" nillable="true" type="tns:FloatProblemCharacteristicValue" />
+  <xs:complexType name="ArrayOfIntProblemCharacteristicValue">
+    <xs:sequence>
+      <xs:element minOccurs="0" maxOccurs="unbounded" name="IntProblemCharacteristicValue" nillable="true" type="tns:IntProblemCharacteristicValue" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="ArrayOfIntProblemCharacteristicValue" nillable="true" type="tns:ArrayOfIntProblemCharacteristicValue" />
+  <xs:complexType name="IntProblemCharacteristicValue">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="ProblemCharacteristicId" type="xs:int" />
+      <xs:element minOccurs="0" name="ProblemId" type="xs:int" />
+      <xs:element minOccurs="0" name="Value" type="xs:int" />
+      <xs:element minOccurs="0" name="Problem" nillable="true" type="tns:Problem">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="ProblemCharacteristic" nillable="true" type="tns:ProblemCharacteristic">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+    </xs:sequence>
+    <xs:attribute ref="ser:Id" />
+    <xs:attribute ref="ser:Ref" />
+  </xs:complexType>
+  <xs:element name="IntProblemCharacteristicValue" nillable="true" type="tns:IntProblemCharacteristicValue" />
+  <xs:complexType name="ArrayOfProblem_Parameter">
+    <xs:sequence>
+      <xs:element minOccurs="0" maxOccurs="unbounded" name="Problem_Parameter" nillable="true" type="tns:Problem_Parameter" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="ArrayOfProblem_Parameter" nillable="true" type="tns:ArrayOfProblem_Parameter" />
+  <xs:complexType name="Problem_Parameter">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="ProblemId" type="xs:int" />
+      <xs:element minOccurs="0" name="ParameterId" type="xs:int" />
+      <xs:element minOccurs="0" name="Parameter" nillable="true" type="tns:Parameter">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="Problem" nillable="true" type="tns:Problem">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+    </xs:sequence>
+    <xs:attribute ref="ser:Id" />
+    <xs:attribute ref="ser:Ref" />
+  </xs:complexType>
+  <xs:element name="Problem_Parameter" nillable="true" type="tns:Problem_Parameter" />
+  <xs:complexType name="ProblemData">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="ProblemId" type="xs:int" />
+      <xs:element xmlns:q2="http://schemas.datacontract.org/2004/07/System.Data.Linq" minOccurs="0" name="Data" nillable="true" type="q2:Binary" />
+      <xs:element minOccurs="0" name="Problem" nillable="true" type="tns:Problem">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+    </xs:sequence>
+    <xs:attribute ref="ser:Id" />
+    <xs:attribute ref="ser:Ref" />
+  </xs:complexType>
+  <xs:element name="ProblemData" nillable="true" type="tns:ProblemData" />
+  <xs:complexType name="Platform">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="Id" type="xs:int" />
+      <xs:element minOccurs="0" name="Name" nillable="true" type="xs:string" />
+      <xs:element minOccurs="0" name="Description" nillable="true" type="xs:string" />
+      <xs:element minOccurs="0" name="Problems" nillable="true" type="tns:ArrayOfProblem">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="Algorithms" nillable="true" type="tns:ArrayOfAlgorithm">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+    </xs:sequence>
+    <xs:attribute ref="ser:Id" />
+    <xs:attribute ref="ser:Ref" />
+  </xs:complexType>
+  <xs:element name="Platform" nillable="true" type="tns:Platform" />
+  <xs:complexType name="ArrayOfProblem">
+    <xs:sequence>
+      <xs:element minOccurs="0" maxOccurs="unbounded" name="Problem" nillable="true" type="tns:Problem" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="ArrayOfProblem" nillable="true" type="tns:ArrayOfProblem" />
+  <xs:complexType name="ProblemClass">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="Id" type="xs:int" />
+      <xs:element minOccurs="0" name="Name" nillable="true" type="xs:string" />
+      <xs:element minOccurs="0" name="Description" nillable="true" type="xs:string" />
+      <xs:element minOccurs="0" name="Problems" nillable="true" type="tns:ArrayOfProblem">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+    </xs:sequence>
+    <xs:attribute ref="ser:Id" />
+    <xs:attribute ref="ser:Ref" />
+  </xs:complexType>
+  <xs:element name="ProblemClass" nillable="true" type="tns:ProblemClass" />
+  <xs:complexType name="SolutionRepresentation">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="Id" type="xs:int" />
+      <xs:element minOccurs="0" name="Name" nillable="true" type="xs:string" />
+      <xs:element minOccurs="0" name="Description" nillable="true" type="xs:string" />
+      <xs:element minOccurs="0" name="Problems" nillable="true" type="tns:ArrayOfProblem">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+    </xs:sequence>
+    <xs:attribute ref="ser:Id" />
+    <xs:attribute ref="ser:Ref" />
+  </xs:complexType>
+  <xs:element name="SolutionRepresentation" nillable="true" type="tns:SolutionRepresentation" />
+  <xs:complexType name="ArrayOfResult">
+    <xs:sequence>
+      <xs:element minOccurs="0" maxOccurs="unbounded" name="Result" nillable="true" type="tns:Result" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="ArrayOfResult" nillable="true" type="tns:ArrayOfResult" />
+  <xs:complexType name="ArrayOfOperatorParameterValue">
+    <xs:sequence>
+      <xs:element minOccurs="0" maxOccurs="unbounded" name="OperatorParameterValue" nillable="true" type="tns:OperatorParameterValue" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="ArrayOfOperatorParameterValue" nillable="true" type="tns:ArrayOfOperatorParameterValue" />
+  <xs:complexType name="OperatorParameterValue">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="ParameterId" type="xs:int" />
+      <xs:element minOccurs="0" name="ExperimentId" type="xs:int" />
+      <xs:element xmlns:q3="http://schemas.datacontract.org/2004/07/System.Data.Linq" minOccurs="0" name="Value" nillable="true" type="q3:Binary" />
+      <xs:element minOccurs="0" name="DataTypeId" type="xs:int" />
+      <xs:element minOccurs="0" name="DataType" nillable="true" type="tns:DataType">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="Experiment" nillable="true" type="tns:Experiment">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="Parameter" nillable="true" type="tns:Parameter">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+    </xs:sequence>
+    <xs:attribute ref="ser:Id" />
+    <xs:attribute ref="ser:Ref" />
+  </xs:complexType>
+  <xs:element name="OperatorParameterValue" nillable="true" type="tns:OperatorParameterValue" />
+  <xs:complexType name="ArrayOfParameter">
+    <xs:sequence>
+      <xs:element minOccurs="0" maxOccurs="unbounded" name="Parameter" nillable="true" type="tns:Parameter" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="ArrayOfParameter" nillable="true" type="tns:ArrayOfParameter" />
+  <xs:complexType name="Client">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="Id" type="ser:guid" />
+      <xs:element minOccurs="0" name="Name" nillable="true" type="xs:string" />
+      <xs:element minOccurs="0" name="Runs" nillable="true" type="tns:ArrayOfRun">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+    </xs:sequence>
+    <xs:attribute ref="ser:Id" />
+    <xs:attribute ref="ser:Ref" />
+  </xs:complexType>
+  <xs:element name="Client" nillable="true" type="tns:Client" />
+  <xs:complexType name="User">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="Id" type="ser:guid" />
+      <xs:element minOccurs="0" name="Name" nillable="true" type="xs:string" />
+      <xs:element minOccurs="0" name="Runs" nillable="true" type="tns:ArrayOfRun">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+    </xs:sequence>
+    <xs:attribute ref="ser:Id" />
+    <xs:attribute ref="ser:Ref" />
+  </xs:complexType>
+  <xs:element name="User" nillable="true" type="tns:User" />
+  <xs:complexType name="Project">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="Id" type="xs:int" />
+      <xs:element minOccurs="0" name="Name" nillable="true" type="xs:string" />
+      <xs:element minOccurs="0" name="Description" nillable="true" type="xs:string" />
+      <xs:element minOccurs="0" name="Experiments" nillable="true" type="tns:ArrayOfExperiment">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+    </xs:sequence>
+    <xs:attribute ref="ser:Id" />
+    <xs:attribute ref="ser:Ref" />
+  </xs:complexType>
+  <xs:element name="Project" nillable="true" type="tns:Project" />
+  <xs:complexType name="AlgorithmData">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="AlgorithmId" type="xs:int" />
+      <xs:element xmlns:q4="http://schemas.datacontract.org/2004/07/System.Data.Linq" minOccurs="0" name="Data" nillable="true" type="q4:Binary" />
+      <xs:element minOccurs="0" name="Algorithm" nillable="true" type="tns:Algorithm">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+    </xs:sequence>
+    <xs:attribute ref="ser:Id" />
+    <xs:attribute ref="ser:Ref" />
+  </xs:complexType>
+  <xs:element name="AlgorithmData" nillable="true" type="tns:AlgorithmData" />
+  <xs:complexType name="ArrayOfProblemClass">
+    <xs:sequence>
+      <xs:element minOccurs="0" maxOccurs="unbounded" name="ProblemClass" nillable="true" type="tns:ProblemClass" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="ArrayOfProblemClass" nillable="true" type="tns:ArrayOfProblemClass" />
+  <xs:complexType name="ArrayOfProject">
+    <xs:sequence>
+      <xs:element minOccurs="0" maxOccurs="unbounded" name="Project" nillable="true" type="tns:Project" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="ArrayOfProject" nillable="true" type="tns:ArrayOfProject" />
+</xs:schema>
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Service References/OKBRunner/HeuristicLab.Services.OKB.xsd
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Service References/OKBRunner/HeuristicLab.Services.OKB.xsd	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Service References/OKBRunner/HeuristicLab.Services.OKB.xsd	(revision 5296)
@@ -0,0 +1,19 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:tns="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB" elementFormDefault="qualified" targetNamespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:import namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataAccess" />
+  <xs:complexType name="StarterKit">
+    <xs:sequence>
+      <xs:element xmlns:q1="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataAccess" minOccurs="0" name="AlgorithmClasses" nillable="true" type="q1:ArrayOfAlgorithmClass" />
+      <xs:element xmlns:q2="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataAccess" minOccurs="0" name="ProblemClasses" nillable="true" type="q2:ArrayOfProblemClass" />
+      <xs:element xmlns:q3="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataAccess" minOccurs="0" name="Projects" nillable="true" type="q3:ArrayOfProject" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="StarterKit" nillable="true" type="tns:StarterKit" />
+  <xs:complexType name="ExperimentKit">
+    <xs:sequence>
+      <xs:element xmlns:q4="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataAccess" minOccurs="0" name="Algorithm" nillable="true" type="q4:Algorithm" />
+      <xs:element xmlns:q5="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataAccess" minOccurs="0" name="Problem" nillable="true" type="q5:Problem" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="ExperimentKit" nillable="true" type="tns:ExperimentKit" />
+</xs:schema>
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Service References/OKBRunner/Reference.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Service References/OKBRunner/Reference.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Service References/OKBRunner/Reference.cs	(revision 5296)
@@ -0,0 +1,4180 @@
+﻿//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.1
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HeuristicLab.OKB.AlgorithmHost.OKBRunner {
+    using System.Runtime.Serialization;
+    using System;
+    
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="StarterKit", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB")]
+    [System.SerializableAttribute()]
+    public partial class StarterKit : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+        
+        [System.NonSerializedAttribute()]
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<HeuristicLab.OKB.AlgorithmHost.OKBRunner.AlgorithmClass> AlgorithmClassesField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<HeuristicLab.OKB.AlgorithmHost.OKBRunner.ProblemClass> ProblemClassesField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<HeuristicLab.OKB.AlgorithmHost.OKBRunner.Project> ProjectsField;
+        
+        [global::System.ComponentModel.BrowsableAttribute(false)]
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+            get {
+                return this.extensionDataField;
+            }
+            set {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public System.Collections.Generic.List<HeuristicLab.OKB.AlgorithmHost.OKBRunner.AlgorithmClass> AlgorithmClasses {
+            get {
+                return this.AlgorithmClassesField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.AlgorithmClassesField, value) != true)) {
+                    this.AlgorithmClassesField = value;
+                    this.RaisePropertyChanged("AlgorithmClasses");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public System.Collections.Generic.List<HeuristicLab.OKB.AlgorithmHost.OKBRunner.ProblemClass> ProblemClasses {
+            get {
+                return this.ProblemClassesField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.ProblemClassesField, value) != true)) {
+                    this.ProblemClassesField = value;
+                    this.RaisePropertyChanged("ProblemClasses");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public System.Collections.Generic.List<HeuristicLab.OKB.AlgorithmHost.OKBRunner.Project> Projects {
+            get {
+                return this.ProjectsField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.ProjectsField, value) != true)) {
+                    this.ProjectsField = value;
+                    this.RaisePropertyChanged("Projects");
+                }
+            }
+        }
+        
+        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.DataAccess", IsReference=true)]
+    [System.SerializableAttribute()]
+    public partial class AlgorithmClass : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+        
+        [System.NonSerializedAttribute()]
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int IdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string NameField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string DescriptionField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<HeuristicLab.OKB.AlgorithmHost.OKBRunner.Algorithm> AlgorithmsField;
+        
+        [global::System.ComponentModel.BrowsableAttribute(false)]
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+            get {
+                return this.extensionDataField;
+            }
+            set {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int 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(Order=2)]
+        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(EmitDefaultValue=false, Order=3)]
+        public System.Collections.Generic.List<HeuristicLab.OKB.AlgorithmHost.OKBRunner.Algorithm> Algorithms {
+            get {
+                return this.AlgorithmsField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.AlgorithmsField, value) != true)) {
+                    this.AlgorithmsField = value;
+                    this.RaisePropertyChanged("Algorithms");
+                }
+            }
+        }
+        
+        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.DataAccess", IsReference=true)]
+    [System.SerializableAttribute()]
+    public partial class ProblemClass : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+        
+        [System.NonSerializedAttribute()]
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int IdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string NameField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string DescriptionField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<HeuristicLab.OKB.AlgorithmHost.OKBRunner.Problem> ProblemsField;
+        
+        [global::System.ComponentModel.BrowsableAttribute(false)]
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+            get {
+                return this.extensionDataField;
+            }
+            set {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int 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(Order=2)]
+        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(EmitDefaultValue=false, Order=3)]
+        public System.Collections.Generic.List<HeuristicLab.OKB.AlgorithmHost.OKBRunner.Problem> Problems {
+            get {
+                return this.ProblemsField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.ProblemsField, value) != true)) {
+                    this.ProblemsField = value;
+                    this.RaisePropertyChanged("Problems");
+                }
+            }
+        }
+        
+        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="Project", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataAccess", IsReference=true)]
+    [System.SerializableAttribute()]
+    public partial class Project : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+        
+        [System.NonSerializedAttribute()]
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int IdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string NameField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string DescriptionField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<HeuristicLab.OKB.AlgorithmHost.OKBRunner.Experiment> ExperimentsField;
+        
+        [global::System.ComponentModel.BrowsableAttribute(false)]
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+            get {
+                return this.extensionDataField;
+            }
+            set {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int 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(Order=2)]
+        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(EmitDefaultValue=false, Order=3)]
+        public System.Collections.Generic.List<HeuristicLab.OKB.AlgorithmHost.OKBRunner.Experiment> Experiments {
+            get {
+                return this.ExperimentsField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.ExperimentsField, value) != true)) {
+                    this.ExperimentsField = value;
+                    this.RaisePropertyChanged("Experiments");
+                }
+            }
+        }
+        
+        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="Algorithm", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataAccess", IsReference=true)]
+    [System.SerializableAttribute()]
+    public partial class Algorithm : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+        
+        [System.NonSerializedAttribute()]
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int IdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int AlgorithmClassIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int PlatformIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string NameField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string DescriptionField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<HeuristicLab.OKB.AlgorithmHost.OKBRunner.Algorithm_Parameter> Algorithm_ParametersField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.AlgorithmHost.OKBRunner.AlgorithmData AlgorithmDataField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<HeuristicLab.OKB.AlgorithmHost.OKBRunner.Experiment> ExperimentsField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<HeuristicLab.OKB.AlgorithmHost.OKBRunner.Algorithm_Result> Algorithm_ResultsField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.AlgorithmHost.OKBRunner.AlgorithmClass AlgorithmClassField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.AlgorithmHost.OKBRunner.Platform PlatformField;
+        
+        [global::System.ComponentModel.BrowsableAttribute(false)]
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+            get {
+                return this.extensionDataField;
+            }
+            set {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int Id {
+            get {
+                return this.IdField;
+            }
+            set {
+                if ((this.IdField.Equals(value) != true)) {
+                    this.IdField = value;
+                    this.RaisePropertyChanged("Id");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(Order=1)]
+        public int AlgorithmClassId {
+            get {
+                return this.AlgorithmClassIdField;
+            }
+            set {
+                if ((this.AlgorithmClassIdField.Equals(value) != true)) {
+                    this.AlgorithmClassIdField = value;
+                    this.RaisePropertyChanged("AlgorithmClassId");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(Order=2)]
+        public int PlatformId {
+            get {
+                return this.PlatformIdField;
+            }
+            set {
+                if ((this.PlatformIdField.Equals(value) != true)) {
+                    this.PlatformIdField = value;
+                    this.RaisePropertyChanged("PlatformId");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(Order=3)]
+        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(Order=4)]
+        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(EmitDefaultValue=false, Order=5)]
+        public System.Collections.Generic.List<HeuristicLab.OKB.AlgorithmHost.OKBRunner.Algorithm_Parameter> Algorithm_Parameters {
+            get {
+                return this.Algorithm_ParametersField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.Algorithm_ParametersField, value) != true)) {
+                    this.Algorithm_ParametersField = value;
+                    this.RaisePropertyChanged("Algorithm_Parameters");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=6)]
+        public HeuristicLab.OKB.AlgorithmHost.OKBRunner.AlgorithmData AlgorithmData {
+            get {
+                return this.AlgorithmDataField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.AlgorithmDataField, value) != true)) {
+                    this.AlgorithmDataField = value;
+                    this.RaisePropertyChanged("AlgorithmData");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=7)]
+        public System.Collections.Generic.List<HeuristicLab.OKB.AlgorithmHost.OKBRunner.Experiment> Experiments {
+            get {
+                return this.ExperimentsField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.ExperimentsField, value) != true)) {
+                    this.ExperimentsField = value;
+                    this.RaisePropertyChanged("Experiments");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=8)]
+        public System.Collections.Generic.List<HeuristicLab.OKB.AlgorithmHost.OKBRunner.Algorithm_Result> Algorithm_Results {
+            get {
+                return this.Algorithm_ResultsField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.Algorithm_ResultsField, value) != true)) {
+                    this.Algorithm_ResultsField = value;
+                    this.RaisePropertyChanged("Algorithm_Results");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=9)]
+        public HeuristicLab.OKB.AlgorithmHost.OKBRunner.AlgorithmClass AlgorithmClass {
+            get {
+                return this.AlgorithmClassField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.AlgorithmClassField, value) != true)) {
+                    this.AlgorithmClassField = value;
+                    this.RaisePropertyChanged("AlgorithmClass");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=10)]
+        public HeuristicLab.OKB.AlgorithmHost.OKBRunner.Platform Platform {
+            get {
+                return this.PlatformField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.PlatformField, value) != true)) {
+                    this.PlatformField = value;
+                    this.RaisePropertyChanged("Platform");
+                }
+            }
+        }
+        
+        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="AlgorithmData", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataAccess", IsReference=true)]
+    [System.SerializableAttribute()]
+    public partial class AlgorithmData : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+        
+        [System.NonSerializedAttribute()]
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int AlgorithmIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.AlgorithmHost.OKBRunner.Binary DataField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.AlgorithmHost.OKBRunner.Algorithm AlgorithmField;
+        
+        [global::System.ComponentModel.BrowsableAttribute(false)]
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+            get {
+                return this.extensionDataField;
+            }
+            set {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int AlgorithmId {
+            get {
+                return this.AlgorithmIdField;
+            }
+            set {
+                if ((this.AlgorithmIdField.Equals(value) != true)) {
+                    this.AlgorithmIdField = value;
+                    this.RaisePropertyChanged("AlgorithmId");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public HeuristicLab.OKB.AlgorithmHost.OKBRunner.Binary Data {
+            get {
+                return this.DataField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.DataField, value) != true)) {
+                    this.DataField = value;
+                    this.RaisePropertyChanged("Data");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=2)]
+        public HeuristicLab.OKB.AlgorithmHost.OKBRunner.Algorithm Algorithm {
+            get {
+                return this.AlgorithmField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.AlgorithmField, value) != true)) {
+                    this.AlgorithmField = value;
+                    this.RaisePropertyChanged("Algorithm");
+                }
+            }
+        }
+        
+        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="Platform", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataAccess", IsReference=true)]
+    [System.SerializableAttribute()]
+    public partial class Platform : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+        
+        [System.NonSerializedAttribute()]
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int IdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string NameField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string DescriptionField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<HeuristicLab.OKB.AlgorithmHost.OKBRunner.Problem> ProblemsField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<HeuristicLab.OKB.AlgorithmHost.OKBRunner.Algorithm> AlgorithmsField;
+        
+        [global::System.ComponentModel.BrowsableAttribute(false)]
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+            get {
+                return this.extensionDataField;
+            }
+            set {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int 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(Order=2)]
+        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(EmitDefaultValue=false, Order=3)]
+        public System.Collections.Generic.List<HeuristicLab.OKB.AlgorithmHost.OKBRunner.Problem> Problems {
+            get {
+                return this.ProblemsField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.ProblemsField, value) != true)) {
+                    this.ProblemsField = value;
+                    this.RaisePropertyChanged("Problems");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=4)]
+        public System.Collections.Generic.List<HeuristicLab.OKB.AlgorithmHost.OKBRunner.Algorithm> Algorithms {
+            get {
+                return this.AlgorithmsField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.AlgorithmsField, value) != true)) {
+                    this.AlgorithmsField = value;
+                    this.RaisePropertyChanged("Algorithms");
+                }
+            }
+        }
+        
+        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="Algorithm_Parameter", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataAccess", IsReference=true)]
+    [System.SerializableAttribute()]
+    public partial class Algorithm_Parameter : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+        
+        [System.NonSerializedAttribute()]
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int AlgorithmIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int ParameterIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.AlgorithmHost.OKBRunner.Parameter ParameterField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.AlgorithmHost.OKBRunner.Algorithm AlgorithmField;
+        
+        [global::System.ComponentModel.BrowsableAttribute(false)]
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+            get {
+                return this.extensionDataField;
+            }
+            set {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int AlgorithmId {
+            get {
+                return this.AlgorithmIdField;
+            }
+            set {
+                if ((this.AlgorithmIdField.Equals(value) != true)) {
+                    this.AlgorithmIdField = value;
+                    this.RaisePropertyChanged("AlgorithmId");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int ParameterId {
+            get {
+                return this.ParameterIdField;
+            }
+            set {
+                if ((this.ParameterIdField.Equals(value) != true)) {
+                    this.ParameterIdField = value;
+                    this.RaisePropertyChanged("ParameterId");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=2)]
+        public HeuristicLab.OKB.AlgorithmHost.OKBRunner.Parameter Parameter {
+            get {
+                return this.ParameterField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.ParameterField, value) != true)) {
+                    this.ParameterField = value;
+                    this.RaisePropertyChanged("Parameter");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=3)]
+        public HeuristicLab.OKB.AlgorithmHost.OKBRunner.Algorithm Algorithm {
+            get {
+                return this.AlgorithmField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.AlgorithmField, value) != true)) {
+                    this.AlgorithmField = value;
+                    this.RaisePropertyChanged("Algorithm");
+                }
+            }
+        }
+        
+        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="Experiment", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataAccess", IsReference=true)]
+    [System.SerializableAttribute()]
+    public partial class Experiment : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+        
+        [System.NonSerializedAttribute()]
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int IdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int ProjectIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int AlgorithmIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int ProblemIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<HeuristicLab.OKB.AlgorithmHost.OKBRunner.CharParameterValue> CharParameterValuesField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<HeuristicLab.OKB.AlgorithmHost.OKBRunner.FloatParameterValue> FloatParameterValuesField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<HeuristicLab.OKB.AlgorithmHost.OKBRunner.IntParameterValue> IntParameterValuesField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<HeuristicLab.OKB.AlgorithmHost.OKBRunner.Run> RunsField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<HeuristicLab.OKB.AlgorithmHost.OKBRunner.OperatorParameterValue> OperatorParameterValuesField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.AlgorithmHost.OKBRunner.Problem ProblemField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.AlgorithmHost.OKBRunner.Project ProjectField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.AlgorithmHost.OKBRunner.Algorithm AlgorithmField;
+        
+        [global::System.ComponentModel.BrowsableAttribute(false)]
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+            get {
+                return this.extensionDataField;
+            }
+            set {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int Id {
+            get {
+                return this.IdField;
+            }
+            set {
+                if ((this.IdField.Equals(value) != true)) {
+                    this.IdField = value;
+                    this.RaisePropertyChanged("Id");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int ProjectId {
+            get {
+                return this.ProjectIdField;
+            }
+            set {
+                if ((this.ProjectIdField.Equals(value) != true)) {
+                    this.ProjectIdField = value;
+                    this.RaisePropertyChanged("ProjectId");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(Order=2)]
+        public int AlgorithmId {
+            get {
+                return this.AlgorithmIdField;
+            }
+            set {
+                if ((this.AlgorithmIdField.Equals(value) != true)) {
+                    this.AlgorithmIdField = value;
+                    this.RaisePropertyChanged("AlgorithmId");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(Order=3)]
+        public int ProblemId {
+            get {
+                return this.ProblemIdField;
+            }
+            set {
+                if ((this.ProblemIdField.Equals(value) != true)) {
+                    this.ProblemIdField = value;
+                    this.RaisePropertyChanged("ProblemId");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=4)]
+        public System.Collections.Generic.List<HeuristicLab.OKB.AlgorithmHost.OKBRunner.CharParameterValue> CharParameterValues {
+            get {
+                return this.CharParameterValuesField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.CharParameterValuesField, value) != true)) {
+                    this.CharParameterValuesField = value;
+                    this.RaisePropertyChanged("CharParameterValues");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=5)]
+        public System.Collections.Generic.List<HeuristicLab.OKB.AlgorithmHost.OKBRunner.FloatParameterValue> FloatParameterValues {
+            get {
+                return this.FloatParameterValuesField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.FloatParameterValuesField, value) != true)) {
+                    this.FloatParameterValuesField = value;
+                    this.RaisePropertyChanged("FloatParameterValues");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=6)]
+        public System.Collections.Generic.List<HeuristicLab.OKB.AlgorithmHost.OKBRunner.IntParameterValue> IntParameterValues {
+            get {
+                return this.IntParameterValuesField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.IntParameterValuesField, value) != true)) {
+                    this.IntParameterValuesField = value;
+                    this.RaisePropertyChanged("IntParameterValues");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=7)]
+        public System.Collections.Generic.List<HeuristicLab.OKB.AlgorithmHost.OKBRunner.Run> Runs {
+            get {
+                return this.RunsField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.RunsField, value) != true)) {
+                    this.RunsField = value;
+                    this.RaisePropertyChanged("Runs");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=8)]
+        public System.Collections.Generic.List<HeuristicLab.OKB.AlgorithmHost.OKBRunner.OperatorParameterValue> OperatorParameterValues {
+            get {
+                return this.OperatorParameterValuesField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.OperatorParameterValuesField, value) != true)) {
+                    this.OperatorParameterValuesField = value;
+                    this.RaisePropertyChanged("OperatorParameterValues");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=9)]
+        public HeuristicLab.OKB.AlgorithmHost.OKBRunner.Problem Problem {
+            get {
+                return this.ProblemField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.ProblemField, value) != true)) {
+                    this.ProblemField = value;
+                    this.RaisePropertyChanged("Problem");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=10)]
+        public HeuristicLab.OKB.AlgorithmHost.OKBRunner.Project Project {
+            get {
+                return this.ProjectField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.ProjectField, value) != true)) {
+                    this.ProjectField = value;
+                    this.RaisePropertyChanged("Project");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=11)]
+        public HeuristicLab.OKB.AlgorithmHost.OKBRunner.Algorithm Algorithm {
+            get {
+                return this.AlgorithmField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.AlgorithmField, value) != true)) {
+                    this.AlgorithmField = value;
+                    this.RaisePropertyChanged("Algorithm");
+                }
+            }
+        }
+        
+        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="Algorithm_Result", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataAccess", IsReference=true)]
+    [System.SerializableAttribute()]
+    public partial class Algorithm_Result : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+        
+        [System.NonSerializedAttribute()]
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int AlgorithmIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int ResultIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.AlgorithmHost.OKBRunner.Algorithm AlgorithmField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.AlgorithmHost.OKBRunner.Result ResultField;
+        
+        [global::System.ComponentModel.BrowsableAttribute(false)]
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+            get {
+                return this.extensionDataField;
+            }
+            set {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int AlgorithmId {
+            get {
+                return this.AlgorithmIdField;
+            }
+            set {
+                if ((this.AlgorithmIdField.Equals(value) != true)) {
+                    this.AlgorithmIdField = value;
+                    this.RaisePropertyChanged("AlgorithmId");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int ResultId {
+            get {
+                return this.ResultIdField;
+            }
+            set {
+                if ((this.ResultIdField.Equals(value) != true)) {
+                    this.ResultIdField = value;
+                    this.RaisePropertyChanged("ResultId");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=2)]
+        public HeuristicLab.OKB.AlgorithmHost.OKBRunner.Algorithm Algorithm {
+            get {
+                return this.AlgorithmField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.AlgorithmField, value) != true)) {
+                    this.AlgorithmField = value;
+                    this.RaisePropertyChanged("Algorithm");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=3)]
+        public HeuristicLab.OKB.AlgorithmHost.OKBRunner.Result Result {
+            get {
+                return this.ResultField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.ResultField, value) != true)) {
+                    this.ResultField = value;
+                    this.RaisePropertyChanged("Result");
+                }
+            }
+        }
+        
+        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="Parameter", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataAccess", IsReference=true)]
+    [System.SerializableAttribute()]
+    public partial class Parameter : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+        
+        [System.NonSerializedAttribute()]
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int IdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string NameField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string DescriptionField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int DataTypeIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<HeuristicLab.OKB.AlgorithmHost.OKBRunner.Algorithm_Parameter> Algorithm_ParametersField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<HeuristicLab.OKB.AlgorithmHost.OKBRunner.CharParameterValue> CharParameterValuesField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<HeuristicLab.OKB.AlgorithmHost.OKBRunner.FloatParameterValue> FloatParameterValuesField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<HeuristicLab.OKB.AlgorithmHost.OKBRunner.IntParameterValue> IntParameterValuesField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<HeuristicLab.OKB.AlgorithmHost.OKBRunner.Problem_Parameter> Problem_ParametersField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<HeuristicLab.OKB.AlgorithmHost.OKBRunner.OperatorParameterValue> OperatorParameterValuesField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.AlgorithmHost.OKBRunner.DataType DataTypeField;
+        
+        [global::System.ComponentModel.BrowsableAttribute(false)]
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+            get {
+                return this.extensionDataField;
+            }
+            set {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int 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(Order=2)]
+        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(Order=3)]
+        public int DataTypeId {
+            get {
+                return this.DataTypeIdField;
+            }
+            set {
+                if ((this.DataTypeIdField.Equals(value) != true)) {
+                    this.DataTypeIdField = value;
+                    this.RaisePropertyChanged("DataTypeId");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=4)]
+        public System.Collections.Generic.List<HeuristicLab.OKB.AlgorithmHost.OKBRunner.Algorithm_Parameter> Algorithm_Parameters {
+            get {
+                return this.Algorithm_ParametersField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.Algorithm_ParametersField, value) != true)) {
+                    this.Algorithm_ParametersField = value;
+                    this.RaisePropertyChanged("Algorithm_Parameters");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=5)]
+        public System.Collections.Generic.List<HeuristicLab.OKB.AlgorithmHost.OKBRunner.CharParameterValue> CharParameterValues {
+            get {
+                return this.CharParameterValuesField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.CharParameterValuesField, value) != true)) {
+                    this.CharParameterValuesField = value;
+                    this.RaisePropertyChanged("CharParameterValues");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=6)]
+        public System.Collections.Generic.List<HeuristicLab.OKB.AlgorithmHost.OKBRunner.FloatParameterValue> FloatParameterValues {
+            get {
+                return this.FloatParameterValuesField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.FloatParameterValuesField, value) != true)) {
+                    this.FloatParameterValuesField = value;
+                    this.RaisePropertyChanged("FloatParameterValues");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=7)]
+        public System.Collections.Generic.List<HeuristicLab.OKB.AlgorithmHost.OKBRunner.IntParameterValue> IntParameterValues {
+            get {
+                return this.IntParameterValuesField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.IntParameterValuesField, value) != true)) {
+                    this.IntParameterValuesField = value;
+                    this.RaisePropertyChanged("IntParameterValues");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=8)]
+        public System.Collections.Generic.List<HeuristicLab.OKB.AlgorithmHost.OKBRunner.Problem_Parameter> Problem_Parameters {
+            get {
+                return this.Problem_ParametersField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.Problem_ParametersField, value) != true)) {
+                    this.Problem_ParametersField = value;
+                    this.RaisePropertyChanged("Problem_Parameters");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=9)]
+        public System.Collections.Generic.List<HeuristicLab.OKB.AlgorithmHost.OKBRunner.OperatorParameterValue> OperatorParameterValues {
+            get {
+                return this.OperatorParameterValuesField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.OperatorParameterValuesField, value) != true)) {
+                    this.OperatorParameterValuesField = value;
+                    this.RaisePropertyChanged("OperatorParameterValues");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=10)]
+        public HeuristicLab.OKB.AlgorithmHost.OKBRunner.DataType DataType {
+            get {
+                return this.DataTypeField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.DataTypeField, value) != true)) {
+                    this.DataTypeField = value;
+                    this.RaisePropertyChanged("DataType");
+                }
+            }
+        }
+        
+        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.DataAccess", IsReference=true)]
+    [System.SerializableAttribute()]
+    public partial class DataType : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+        
+        [System.NonSerializedAttribute()]
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int IdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string SqlNameField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string ClrNameField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<HeuristicLab.OKB.AlgorithmHost.OKBRunner.ProblemCharacteristic> ProblemCharacteristicsField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<HeuristicLab.OKB.AlgorithmHost.OKBRunner.Result> ResultsField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<HeuristicLab.OKB.AlgorithmHost.OKBRunner.OperatorParameterValue> OperatorParameterValuesField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<HeuristicLab.OKB.AlgorithmHost.OKBRunner.Parameter> ParametersField;
+        
+        [global::System.ComponentModel.BrowsableAttribute(false)]
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+            get {
+                return this.extensionDataField;
+            }
+            set {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int Id {
+            get {
+                return this.IdField;
+            }
+            set {
+                if ((this.IdField.Equals(value) != true)) {
+                    this.IdField = value;
+                    this.RaisePropertyChanged("Id");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public string SqlName {
+            get {
+                return this.SqlNameField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.SqlNameField, value) != true)) {
+                    this.SqlNameField = value;
+                    this.RaisePropertyChanged("SqlName");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(Order=2)]
+        public string ClrName {
+            get {
+                return this.ClrNameField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.ClrNameField, value) != true)) {
+                    this.ClrNameField = value;
+                    this.RaisePropertyChanged("ClrName");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=3)]
+        public System.Collections.Generic.List<HeuristicLab.OKB.AlgorithmHost.OKBRunner.ProblemCharacteristic> ProblemCharacteristics {
+            get {
+                return this.ProblemCharacteristicsField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.ProblemCharacteristicsField, value) != true)) {
+                    this.ProblemCharacteristicsField = value;
+                    this.RaisePropertyChanged("ProblemCharacteristics");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=4)]
+        public System.Collections.Generic.List<HeuristicLab.OKB.AlgorithmHost.OKBRunner.Result> Results {
+            get {
+                return this.ResultsField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.ResultsField, value) != true)) {
+                    this.ResultsField = value;
+                    this.RaisePropertyChanged("Results");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=5)]
+        public System.Collections.Generic.List<HeuristicLab.OKB.AlgorithmHost.OKBRunner.OperatorParameterValue> OperatorParameterValues {
+            get {
+                return this.OperatorParameterValuesField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.OperatorParameterValuesField, value) != true)) {
+                    this.OperatorParameterValuesField = value;
+                    this.RaisePropertyChanged("OperatorParameterValues");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=6)]
+        public System.Collections.Generic.List<HeuristicLab.OKB.AlgorithmHost.OKBRunner.Parameter> Parameters {
+            get {
+                return this.ParametersField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.ParametersField, value) != true)) {
+                    this.ParametersField = value;
+                    this.RaisePropertyChanged("Parameters");
+                }
+            }
+        }
+        
+        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="CharParameterValue", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataAccess", IsReference=true)]
+    [System.SerializableAttribute()]
+    public partial class CharParameterValue : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+        
+        [System.NonSerializedAttribute()]
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int ParameterIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int ExperimentIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string ValueField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.AlgorithmHost.OKBRunner.Experiment ExperimentField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.AlgorithmHost.OKBRunner.Parameter ParameterField;
+        
+        [global::System.ComponentModel.BrowsableAttribute(false)]
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+            get {
+                return this.extensionDataField;
+            }
+            set {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int ParameterId {
+            get {
+                return this.ParameterIdField;
+            }
+            set {
+                if ((this.ParameterIdField.Equals(value) != true)) {
+                    this.ParameterIdField = value;
+                    this.RaisePropertyChanged("ParameterId");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(Order=1)]
+        public int ExperimentId {
+            get {
+                return this.ExperimentIdField;
+            }
+            set {
+                if ((this.ExperimentIdField.Equals(value) != true)) {
+                    this.ExperimentIdField = value;
+                    this.RaisePropertyChanged("ExperimentId");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(Order=2)]
+        public string Value {
+            get {
+                return this.ValueField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.ValueField, value) != true)) {
+                    this.ValueField = value;
+                    this.RaisePropertyChanged("Value");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=3)]
+        public HeuristicLab.OKB.AlgorithmHost.OKBRunner.Experiment Experiment {
+            get {
+                return this.ExperimentField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.ExperimentField, value) != true)) {
+                    this.ExperimentField = value;
+                    this.RaisePropertyChanged("Experiment");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=4)]
+        public HeuristicLab.OKB.AlgorithmHost.OKBRunner.Parameter Parameter {
+            get {
+                return this.ParameterField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.ParameterField, value) != true)) {
+                    this.ParameterField = value;
+                    this.RaisePropertyChanged("Parameter");
+                }
+            }
+        }
+        
+        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="FloatParameterValue", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataAccess", IsReference=true)]
+    [System.SerializableAttribute()]
+    public partial class FloatParameterValue : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+        
+        [System.NonSerializedAttribute()]
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int ParameterIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int ExperimentIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private double ValueField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.AlgorithmHost.OKBRunner.Experiment ExperimentField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.AlgorithmHost.OKBRunner.Parameter ParameterField;
+        
+        [global::System.ComponentModel.BrowsableAttribute(false)]
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+            get {
+                return this.extensionDataField;
+            }
+            set {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int ParameterId {
+            get {
+                return this.ParameterIdField;
+            }
+            set {
+                if ((this.ParameterIdField.Equals(value) != true)) {
+                    this.ParameterIdField = value;
+                    this.RaisePropertyChanged("ParameterId");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(Order=1)]
+        public int ExperimentId {
+            get {
+                return this.ExperimentIdField;
+            }
+            set {
+                if ((this.ExperimentIdField.Equals(value) != true)) {
+                    this.ExperimentIdField = value;
+                    this.RaisePropertyChanged("ExperimentId");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(Order=2)]
+        public double Value {
+            get {
+                return this.ValueField;
+            }
+            set {
+                if ((this.ValueField.Equals(value) != true)) {
+                    this.ValueField = value;
+                    this.RaisePropertyChanged("Value");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=3)]
+        public HeuristicLab.OKB.AlgorithmHost.OKBRunner.Experiment Experiment {
+            get {
+                return this.ExperimentField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.ExperimentField, value) != true)) {
+                    this.ExperimentField = value;
+                    this.RaisePropertyChanged("Experiment");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=4)]
+        public HeuristicLab.OKB.AlgorithmHost.OKBRunner.Parameter Parameter {
+            get {
+                return this.ParameterField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.ParameterField, value) != true)) {
+                    this.ParameterField = value;
+                    this.RaisePropertyChanged("Parameter");
+                }
+            }
+        }
+        
+        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="IntParameterValue", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataAccess", IsReference=true)]
+    [System.SerializableAttribute()]
+    public partial class IntParameterValue : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+        
+        [System.NonSerializedAttribute()]
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int ParameterIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int ExperimentIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int ValueField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.AlgorithmHost.OKBRunner.Experiment ExperimentField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.AlgorithmHost.OKBRunner.Parameter ParameterField;
+        
+        [global::System.ComponentModel.BrowsableAttribute(false)]
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+            get {
+                return this.extensionDataField;
+            }
+            set {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int ParameterId {
+            get {
+                return this.ParameterIdField;
+            }
+            set {
+                if ((this.ParameterIdField.Equals(value) != true)) {
+                    this.ParameterIdField = value;
+                    this.RaisePropertyChanged("ParameterId");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(Order=1)]
+        public int ExperimentId {
+            get {
+                return this.ExperimentIdField;
+            }
+            set {
+                if ((this.ExperimentIdField.Equals(value) != true)) {
+                    this.ExperimentIdField = value;
+                    this.RaisePropertyChanged("ExperimentId");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(Order=2)]
+        public int Value {
+            get {
+                return this.ValueField;
+            }
+            set {
+                if ((this.ValueField.Equals(value) != true)) {
+                    this.ValueField = value;
+                    this.RaisePropertyChanged("Value");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=3)]
+        public HeuristicLab.OKB.AlgorithmHost.OKBRunner.Experiment Experiment {
+            get {
+                return this.ExperimentField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.ExperimentField, value) != true)) {
+                    this.ExperimentField = value;
+                    this.RaisePropertyChanged("Experiment");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=4)]
+        public HeuristicLab.OKB.AlgorithmHost.OKBRunner.Parameter Parameter {
+            get {
+                return this.ParameterField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.ParameterField, value) != true)) {
+                    this.ParameterField = value;
+                    this.RaisePropertyChanged("Parameter");
+                }
+            }
+        }
+        
+        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_Parameter", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataAccess", IsReference=true)]
+    [System.SerializableAttribute()]
+    public partial class Problem_Parameter : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+        
+        [System.NonSerializedAttribute()]
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int ProblemIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int ParameterIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.AlgorithmHost.OKBRunner.Parameter ParameterField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.AlgorithmHost.OKBRunner.Problem ProblemField;
+        
+        [global::System.ComponentModel.BrowsableAttribute(false)]
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+            get {
+                return this.extensionDataField;
+            }
+            set {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int ProblemId {
+            get {
+                return this.ProblemIdField;
+            }
+            set {
+                if ((this.ProblemIdField.Equals(value) != true)) {
+                    this.ProblemIdField = value;
+                    this.RaisePropertyChanged("ProblemId");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(Order=1)]
+        public int ParameterId {
+            get {
+                return this.ParameterIdField;
+            }
+            set {
+                if ((this.ParameterIdField.Equals(value) != true)) {
+                    this.ParameterIdField = value;
+                    this.RaisePropertyChanged("ParameterId");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=2)]
+        public HeuristicLab.OKB.AlgorithmHost.OKBRunner.Parameter Parameter {
+            get {
+                return this.ParameterField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.ParameterField, value) != true)) {
+                    this.ParameterField = value;
+                    this.RaisePropertyChanged("Parameter");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=3)]
+        public HeuristicLab.OKB.AlgorithmHost.OKBRunner.Problem Problem {
+            get {
+                return this.ProblemField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.ProblemField, value) != true)) {
+                    this.ProblemField = value;
+                    this.RaisePropertyChanged("Problem");
+                }
+            }
+        }
+        
+        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="OperatorParameterValue", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataAccess", IsReference=true)]
+    [System.SerializableAttribute()]
+    public partial class OperatorParameterValue : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+        
+        [System.NonSerializedAttribute()]
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int ParameterIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int ExperimentIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.AlgorithmHost.OKBRunner.Binary ValueField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int DataTypeIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.AlgorithmHost.OKBRunner.DataType DataTypeField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.AlgorithmHost.OKBRunner.Experiment ExperimentField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.AlgorithmHost.OKBRunner.Parameter ParameterField;
+        
+        [global::System.ComponentModel.BrowsableAttribute(false)]
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+            get {
+                return this.extensionDataField;
+            }
+            set {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int ParameterId {
+            get {
+                return this.ParameterIdField;
+            }
+            set {
+                if ((this.ParameterIdField.Equals(value) != true)) {
+                    this.ParameterIdField = value;
+                    this.RaisePropertyChanged("ParameterId");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(Order=1)]
+        public int ExperimentId {
+            get {
+                return this.ExperimentIdField;
+            }
+            set {
+                if ((this.ExperimentIdField.Equals(value) != true)) {
+                    this.ExperimentIdField = value;
+                    this.RaisePropertyChanged("ExperimentId");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(Order=2)]
+        public HeuristicLab.OKB.AlgorithmHost.OKBRunner.Binary Value {
+            get {
+                return this.ValueField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.ValueField, value) != true)) {
+                    this.ValueField = value;
+                    this.RaisePropertyChanged("Value");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(Order=3)]
+        public int DataTypeId {
+            get {
+                return this.DataTypeIdField;
+            }
+            set {
+                if ((this.DataTypeIdField.Equals(value) != true)) {
+                    this.DataTypeIdField = value;
+                    this.RaisePropertyChanged("DataTypeId");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=4)]
+        public HeuristicLab.OKB.AlgorithmHost.OKBRunner.DataType DataType {
+            get {
+                return this.DataTypeField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.DataTypeField, value) != true)) {
+                    this.DataTypeField = value;
+                    this.RaisePropertyChanged("DataType");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=5)]
+        public HeuristicLab.OKB.AlgorithmHost.OKBRunner.Experiment Experiment {
+            get {
+                return this.ExperimentField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.ExperimentField, value) != true)) {
+                    this.ExperimentField = value;
+                    this.RaisePropertyChanged("Experiment");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=6)]
+        public HeuristicLab.OKB.AlgorithmHost.OKBRunner.Parameter Parameter {
+            get {
+                return this.ParameterField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.ParameterField, value) != true)) {
+                    this.ParameterField = value;
+                    this.RaisePropertyChanged("Parameter");
+                }
+            }
+        }
+        
+        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.DataAccess", IsReference=true)]
+    [System.SerializableAttribute()]
+    public partial class Problem : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+        
+        [System.NonSerializedAttribute()]
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int IdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int ProblemClassIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int PlatformIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int SolutionRepresentationIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string NameField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string DescriptionField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<HeuristicLab.OKB.AlgorithmHost.OKBRunner.CharProblemCharacteristicValue> CharProblemCharacteristicValuesField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<HeuristicLab.OKB.AlgorithmHost.OKBRunner.Experiment> ExperimentsField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<HeuristicLab.OKB.AlgorithmHost.OKBRunner.FloatProblemCharacteristicValue> FloatProblemCharacteristicValuesField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<HeuristicLab.OKB.AlgorithmHost.OKBRunner.IntProblemCharacteristicValue> IntProblemCharacteristicValuesField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<HeuristicLab.OKB.AlgorithmHost.OKBRunner.Problem_Parameter> Problem_ParametersField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.AlgorithmHost.OKBRunner.ProblemData ProblemDataField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.AlgorithmHost.OKBRunner.Platform PlatformField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.AlgorithmHost.OKBRunner.ProblemClass ProblemClassField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.AlgorithmHost.OKBRunner.SolutionRepresentation SolutionRepresentationField;
+        
+        [global::System.ComponentModel.BrowsableAttribute(false)]
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+            get {
+                return this.extensionDataField;
+            }
+            set {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int Id {
+            get {
+                return this.IdField;
+            }
+            set {
+                if ((this.IdField.Equals(value) != true)) {
+                    this.IdField = value;
+                    this.RaisePropertyChanged("Id");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int ProblemClassId {
+            get {
+                return this.ProblemClassIdField;
+            }
+            set {
+                if ((this.ProblemClassIdField.Equals(value) != true)) {
+                    this.ProblemClassIdField = value;
+                    this.RaisePropertyChanged("ProblemClassId");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(Order=2)]
+        public int PlatformId {
+            get {
+                return this.PlatformIdField;
+            }
+            set {
+                if ((this.PlatformIdField.Equals(value) != true)) {
+                    this.PlatformIdField = value;
+                    this.RaisePropertyChanged("PlatformId");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(Order=3)]
+        public int SolutionRepresentationId {
+            get {
+                return this.SolutionRepresentationIdField;
+            }
+            set {
+                if ((this.SolutionRepresentationIdField.Equals(value) != true)) {
+                    this.SolutionRepresentationIdField = value;
+                    this.RaisePropertyChanged("SolutionRepresentationId");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(Order=4)]
+        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(Order=5)]
+        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(EmitDefaultValue=false, Order=6)]
+        public System.Collections.Generic.List<HeuristicLab.OKB.AlgorithmHost.OKBRunner.CharProblemCharacteristicValue> CharProblemCharacteristicValues {
+            get {
+                return this.CharProblemCharacteristicValuesField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.CharProblemCharacteristicValuesField, value) != true)) {
+                    this.CharProblemCharacteristicValuesField = value;
+                    this.RaisePropertyChanged("CharProblemCharacteristicValues");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=7)]
+        public System.Collections.Generic.List<HeuristicLab.OKB.AlgorithmHost.OKBRunner.Experiment> Experiments {
+            get {
+                return this.ExperimentsField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.ExperimentsField, value) != true)) {
+                    this.ExperimentsField = value;
+                    this.RaisePropertyChanged("Experiments");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=8)]
+        public System.Collections.Generic.List<HeuristicLab.OKB.AlgorithmHost.OKBRunner.FloatProblemCharacteristicValue> FloatProblemCharacteristicValues {
+            get {
+                return this.FloatProblemCharacteristicValuesField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.FloatProblemCharacteristicValuesField, value) != true)) {
+                    this.FloatProblemCharacteristicValuesField = value;
+                    this.RaisePropertyChanged("FloatProblemCharacteristicValues");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=9)]
+        public System.Collections.Generic.List<HeuristicLab.OKB.AlgorithmHost.OKBRunner.IntProblemCharacteristicValue> IntProblemCharacteristicValues {
+            get {
+                return this.IntProblemCharacteristicValuesField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.IntProblemCharacteristicValuesField, value) != true)) {
+                    this.IntProblemCharacteristicValuesField = value;
+                    this.RaisePropertyChanged("IntProblemCharacteristicValues");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=10)]
+        public System.Collections.Generic.List<HeuristicLab.OKB.AlgorithmHost.OKBRunner.Problem_Parameter> Problem_Parameters {
+            get {
+                return this.Problem_ParametersField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.Problem_ParametersField, value) != true)) {
+                    this.Problem_ParametersField = value;
+                    this.RaisePropertyChanged("Problem_Parameters");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=11)]
+        public HeuristicLab.OKB.AlgorithmHost.OKBRunner.ProblemData ProblemData {
+            get {
+                return this.ProblemDataField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.ProblemDataField, value) != true)) {
+                    this.ProblemDataField = value;
+                    this.RaisePropertyChanged("ProblemData");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=12)]
+        public HeuristicLab.OKB.AlgorithmHost.OKBRunner.Platform Platform {
+            get {
+                return this.PlatformField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.PlatformField, value) != true)) {
+                    this.PlatformField = value;
+                    this.RaisePropertyChanged("Platform");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=13)]
+        public HeuristicLab.OKB.AlgorithmHost.OKBRunner.ProblemClass ProblemClass {
+            get {
+                return this.ProblemClassField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.ProblemClassField, value) != true)) {
+                    this.ProblemClassField = value;
+                    this.RaisePropertyChanged("ProblemClass");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=14)]
+        public HeuristicLab.OKB.AlgorithmHost.OKBRunner.SolutionRepresentation SolutionRepresentation {
+            get {
+                return this.SolutionRepresentationField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.SolutionRepresentationField, value) != true)) {
+                    this.SolutionRepresentationField = value;
+                    this.RaisePropertyChanged("SolutionRepresentation");
+                }
+            }
+        }
+        
+        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.DataAccess", IsReference=true)]
+    [System.SerializableAttribute()]
+    public partial class Run : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+        
+        [System.NonSerializedAttribute()]
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int IdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int ExperimentIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Nullable<System.DateTime> FinishedDateField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Guid UserIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Guid ClientIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<HeuristicLab.OKB.AlgorithmHost.OKBRunner.BlobResultValue> BlobResultValuesField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<HeuristicLab.OKB.AlgorithmHost.OKBRunner.CharResultValue> CharResultValuesField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<HeuristicLab.OKB.AlgorithmHost.OKBRunner.FloatResultValue> FloatResultValuesField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<HeuristicLab.OKB.AlgorithmHost.OKBRunner.IntResultValue> IntResultValuesField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.AlgorithmHost.OKBRunner.Client ClientField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.AlgorithmHost.OKBRunner.Experiment ExperimentField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.AlgorithmHost.OKBRunner.User UserField;
+        
+        [global::System.ComponentModel.BrowsableAttribute(false)]
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+            get {
+                return this.extensionDataField;
+            }
+            set {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int Id {
+            get {
+                return this.IdField;
+            }
+            set {
+                if ((this.IdField.Equals(value) != true)) {
+                    this.IdField = value;
+                    this.RaisePropertyChanged("Id");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(Order=1)]
+        public int ExperimentId {
+            get {
+                return this.ExperimentIdField;
+            }
+            set {
+                if ((this.ExperimentIdField.Equals(value) != true)) {
+                    this.ExperimentIdField = value;
+                    this.RaisePropertyChanged("ExperimentId");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(Order=2)]
+        public System.Nullable<System.DateTime> FinishedDate {
+            get {
+                return this.FinishedDateField;
+            }
+            set {
+                if ((this.FinishedDateField.Equals(value) != true)) {
+                    this.FinishedDateField = value;
+                    this.RaisePropertyChanged("FinishedDate");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(Order=3)]
+        public System.Guid UserId {
+            get {
+                return this.UserIdField;
+            }
+            set {
+                if ((this.UserIdField.Equals(value) != true)) {
+                    this.UserIdField = value;
+                    this.RaisePropertyChanged("UserId");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(Order=4)]
+        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(EmitDefaultValue=false, Order=5)]
+        public System.Collections.Generic.List<HeuristicLab.OKB.AlgorithmHost.OKBRunner.BlobResultValue> BlobResultValues {
+            get {
+                return this.BlobResultValuesField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.BlobResultValuesField, value) != true)) {
+                    this.BlobResultValuesField = value;
+                    this.RaisePropertyChanged("BlobResultValues");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=6)]
+        public System.Collections.Generic.List<HeuristicLab.OKB.AlgorithmHost.OKBRunner.CharResultValue> CharResultValues {
+            get {
+                return this.CharResultValuesField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.CharResultValuesField, value) != true)) {
+                    this.CharResultValuesField = value;
+                    this.RaisePropertyChanged("CharResultValues");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=7)]
+        public System.Collections.Generic.List<HeuristicLab.OKB.AlgorithmHost.OKBRunner.FloatResultValue> FloatResultValues {
+            get {
+                return this.FloatResultValuesField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.FloatResultValuesField, value) != true)) {
+                    this.FloatResultValuesField = value;
+                    this.RaisePropertyChanged("FloatResultValues");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=8)]
+        public System.Collections.Generic.List<HeuristicLab.OKB.AlgorithmHost.OKBRunner.IntResultValue> IntResultValues {
+            get {
+                return this.IntResultValuesField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.IntResultValuesField, value) != true)) {
+                    this.IntResultValuesField = value;
+                    this.RaisePropertyChanged("IntResultValues");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=9)]
+        public HeuristicLab.OKB.AlgorithmHost.OKBRunner.Client Client {
+            get {
+                return this.ClientField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.ClientField, value) != true)) {
+                    this.ClientField = value;
+                    this.RaisePropertyChanged("Client");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=10)]
+        public HeuristicLab.OKB.AlgorithmHost.OKBRunner.Experiment Experiment {
+            get {
+                return this.ExperimentField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.ExperimentField, value) != true)) {
+                    this.ExperimentField = value;
+                    this.RaisePropertyChanged("Experiment");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=11)]
+        public HeuristicLab.OKB.AlgorithmHost.OKBRunner.User User {
+            get {
+                return this.UserField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.UserField, value) != true)) {
+                    this.UserField = value;
+                    this.RaisePropertyChanged("User");
+                }
+            }
+        }
+        
+        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="Client", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataAccess", IsReference=true)]
+    [System.SerializableAttribute()]
+    public partial class Client : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+        
+        [System.NonSerializedAttribute()]
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Guid IdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string NameField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<HeuristicLab.OKB.AlgorithmHost.OKBRunner.Run> RunsField;
+        
+        [global::System.ComponentModel.BrowsableAttribute(false)]
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+            get {
+                return this.extensionDataField;
+            }
+            set {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public System.Guid 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(EmitDefaultValue=false)]
+        public System.Collections.Generic.List<HeuristicLab.OKB.AlgorithmHost.OKBRunner.Run> Runs {
+            get {
+                return this.RunsField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.RunsField, value) != true)) {
+                    this.RunsField = value;
+                    this.RaisePropertyChanged("Runs");
+                }
+            }
+        }
+        
+        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="User", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataAccess", IsReference=true)]
+    [System.SerializableAttribute()]
+    public partial class User : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+        
+        [System.NonSerializedAttribute()]
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Guid IdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string NameField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<HeuristicLab.OKB.AlgorithmHost.OKBRunner.Run> RunsField;
+        
+        [global::System.ComponentModel.BrowsableAttribute(false)]
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+            get {
+                return this.extensionDataField;
+            }
+            set {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public System.Guid 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(EmitDefaultValue=false)]
+        public System.Collections.Generic.List<HeuristicLab.OKB.AlgorithmHost.OKBRunner.Run> Runs {
+            get {
+                return this.RunsField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.RunsField, value) != true)) {
+                    this.RunsField = value;
+                    this.RaisePropertyChanged("Runs");
+                }
+            }
+        }
+        
+        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="BlobResultValue", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataAccess", IsReference=true)]
+    [System.SerializableAttribute()]
+    public partial class BlobResultValue : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+        
+        [System.NonSerializedAttribute()]
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int ResultIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int RunIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.AlgorithmHost.OKBRunner.Binary ValueField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.AlgorithmHost.OKBRunner.Run RunField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.AlgorithmHost.OKBRunner.Result ResultField;
+        
+        [global::System.ComponentModel.BrowsableAttribute(false)]
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+            get {
+                return this.extensionDataField;
+            }
+            set {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int ResultId {
+            get {
+                return this.ResultIdField;
+            }
+            set {
+                if ((this.ResultIdField.Equals(value) != true)) {
+                    this.ResultIdField = value;
+                    this.RaisePropertyChanged("ResultId");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int RunId {
+            get {
+                return this.RunIdField;
+            }
+            set {
+                if ((this.RunIdField.Equals(value) != true)) {
+                    this.RunIdField = value;
+                    this.RaisePropertyChanged("RunId");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public HeuristicLab.OKB.AlgorithmHost.OKBRunner.Binary Value {
+            get {
+                return this.ValueField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.ValueField, value) != true)) {
+                    this.ValueField = value;
+                    this.RaisePropertyChanged("Value");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=3)]
+        public HeuristicLab.OKB.AlgorithmHost.OKBRunner.Run Run {
+            get {
+                return this.RunField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.RunField, value) != true)) {
+                    this.RunField = value;
+                    this.RaisePropertyChanged("Run");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=4)]
+        public HeuristicLab.OKB.AlgorithmHost.OKBRunner.Result Result {
+            get {
+                return this.ResultField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.ResultField, value) != true)) {
+                    this.ResultField = value;
+                    this.RaisePropertyChanged("Result");
+                }
+            }
+        }
+        
+        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="CharResultValue", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataAccess", IsReference=true)]
+    [System.SerializableAttribute()]
+    public partial class CharResultValue : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+        
+        [System.NonSerializedAttribute()]
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int ResultIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int RunIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string ValueField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.AlgorithmHost.OKBRunner.Run RunField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.AlgorithmHost.OKBRunner.Result ResultField;
+        
+        [global::System.ComponentModel.BrowsableAttribute(false)]
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+            get {
+                return this.extensionDataField;
+            }
+            set {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int ResultId {
+            get {
+                return this.ResultIdField;
+            }
+            set {
+                if ((this.ResultIdField.Equals(value) != true)) {
+                    this.ResultIdField = value;
+                    this.RaisePropertyChanged("ResultId");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int RunId {
+            get {
+                return this.RunIdField;
+            }
+            set {
+                if ((this.RunIdField.Equals(value) != true)) {
+                    this.RunIdField = value;
+                    this.RaisePropertyChanged("RunId");
+                }
+            }
+        }
+        
+        [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.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=3)]
+        public HeuristicLab.OKB.AlgorithmHost.OKBRunner.Run Run {
+            get {
+                return this.RunField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.RunField, value) != true)) {
+                    this.RunField = value;
+                    this.RaisePropertyChanged("Run");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=4)]
+        public HeuristicLab.OKB.AlgorithmHost.OKBRunner.Result Result {
+            get {
+                return this.ResultField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.ResultField, value) != true)) {
+                    this.ResultField = value;
+                    this.RaisePropertyChanged("Result");
+                }
+            }
+        }
+        
+        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="FloatResultValue", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataAccess", IsReference=true)]
+    [System.SerializableAttribute()]
+    public partial class FloatResultValue : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+        
+        [System.NonSerializedAttribute()]
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int ResultIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int RunIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private double ValueField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.AlgorithmHost.OKBRunner.Run RunField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.AlgorithmHost.OKBRunner.Result ResultField;
+        
+        [global::System.ComponentModel.BrowsableAttribute(false)]
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+            get {
+                return this.extensionDataField;
+            }
+            set {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int ResultId {
+            get {
+                return this.ResultIdField;
+            }
+            set {
+                if ((this.ResultIdField.Equals(value) != true)) {
+                    this.ResultIdField = value;
+                    this.RaisePropertyChanged("ResultId");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int RunId {
+            get {
+                return this.RunIdField;
+            }
+            set {
+                if ((this.RunIdField.Equals(value) != true)) {
+                    this.RunIdField = value;
+                    this.RaisePropertyChanged("RunId");
+                }
+            }
+        }
+        
+        [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.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=3)]
+        public HeuristicLab.OKB.AlgorithmHost.OKBRunner.Run Run {
+            get {
+                return this.RunField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.RunField, value) != true)) {
+                    this.RunField = value;
+                    this.RaisePropertyChanged("Run");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=4)]
+        public HeuristicLab.OKB.AlgorithmHost.OKBRunner.Result Result {
+            get {
+                return this.ResultField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.ResultField, value) != true)) {
+                    this.ResultField = value;
+                    this.RaisePropertyChanged("Result");
+                }
+            }
+        }
+        
+        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="IntResultValue", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataAccess", IsReference=true)]
+    [System.SerializableAttribute()]
+    public partial class IntResultValue : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+        
+        [System.NonSerializedAttribute()]
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int ResultIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int RunIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int ValueField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.AlgorithmHost.OKBRunner.Run RunField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.AlgorithmHost.OKBRunner.Result ResultField;
+        
+        [global::System.ComponentModel.BrowsableAttribute(false)]
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+            get {
+                return this.extensionDataField;
+            }
+            set {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int ResultId {
+            get {
+                return this.ResultIdField;
+            }
+            set {
+                if ((this.ResultIdField.Equals(value) != true)) {
+                    this.ResultIdField = value;
+                    this.RaisePropertyChanged("ResultId");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int RunId {
+            get {
+                return this.RunIdField;
+            }
+            set {
+                if ((this.RunIdField.Equals(value) != true)) {
+                    this.RunIdField = value;
+                    this.RaisePropertyChanged("RunId");
+                }
+            }
+        }
+        
+        [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.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=3)]
+        public HeuristicLab.OKB.AlgorithmHost.OKBRunner.Run Run {
+            get {
+                return this.RunField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.RunField, value) != true)) {
+                    this.RunField = value;
+                    this.RaisePropertyChanged("Run");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=4)]
+        public HeuristicLab.OKB.AlgorithmHost.OKBRunner.Result Result {
+            get {
+                return this.ResultField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.ResultField, value) != true)) {
+                    this.ResultField = value;
+                    this.RaisePropertyChanged("Result");
+                }
+            }
+        }
+        
+        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="Binary", Namespace="http://schemas.datacontract.org/2004/07/System.Data.Linq")]
+    [System.SerializableAttribute()]
+    public partial class Binary : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+        
+        [System.NonSerializedAttribute()]
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private byte[] BytesField;
+        
+        [global::System.ComponentModel.BrowsableAttribute(false)]
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+            get {
+                return this.extensionDataField;
+            }
+            set {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public byte[] Bytes {
+            get {
+                return this.BytesField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.BytesField, value) != true)) {
+                    this.BytesField = value;
+                    this.RaisePropertyChanged("Bytes");
+                }
+            }
+        }
+        
+        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="Result", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataAccess", IsReference=true)]
+    [System.SerializableAttribute()]
+    public partial class Result : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+        
+        [System.NonSerializedAttribute()]
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int IdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string NameField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string DescriptionField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int DataTypeIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<HeuristicLab.OKB.AlgorithmHost.OKBRunner.BlobResultValue> BlobResultValuesField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<HeuristicLab.OKB.AlgorithmHost.OKBRunner.CharResultValue> CharResultValuesField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<HeuristicLab.OKB.AlgorithmHost.OKBRunner.FloatResultValue> FloatResultValuesField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<HeuristicLab.OKB.AlgorithmHost.OKBRunner.IntResultValue> IntResultValuesField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<HeuristicLab.OKB.AlgorithmHost.OKBRunner.Algorithm_Result> Algorithm_ResultsField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.AlgorithmHost.OKBRunner.DataType DataTypeField;
+        
+        [global::System.ComponentModel.BrowsableAttribute(false)]
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+            get {
+                return this.extensionDataField;
+            }
+            set {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int 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(Order=2)]
+        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(Order=3)]
+        public int DataTypeId {
+            get {
+                return this.DataTypeIdField;
+            }
+            set {
+                if ((this.DataTypeIdField.Equals(value) != true)) {
+                    this.DataTypeIdField = value;
+                    this.RaisePropertyChanged("DataTypeId");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=4)]
+        public System.Collections.Generic.List<HeuristicLab.OKB.AlgorithmHost.OKBRunner.BlobResultValue> BlobResultValues {
+            get {
+                return this.BlobResultValuesField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.BlobResultValuesField, value) != true)) {
+                    this.BlobResultValuesField = value;
+                    this.RaisePropertyChanged("BlobResultValues");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=5)]
+        public System.Collections.Generic.List<HeuristicLab.OKB.AlgorithmHost.OKBRunner.CharResultValue> CharResultValues {
+            get {
+                return this.CharResultValuesField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.CharResultValuesField, value) != true)) {
+                    this.CharResultValuesField = value;
+                    this.RaisePropertyChanged("CharResultValues");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=6)]
+        public System.Collections.Generic.List<HeuristicLab.OKB.AlgorithmHost.OKBRunner.FloatResultValue> FloatResultValues {
+            get {
+                return this.FloatResultValuesField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.FloatResultValuesField, value) != true)) {
+                    this.FloatResultValuesField = value;
+                    this.RaisePropertyChanged("FloatResultValues");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=7)]
+        public System.Collections.Generic.List<HeuristicLab.OKB.AlgorithmHost.OKBRunner.IntResultValue> IntResultValues {
+            get {
+                return this.IntResultValuesField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.IntResultValuesField, value) != true)) {
+                    this.IntResultValuesField = value;
+                    this.RaisePropertyChanged("IntResultValues");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=8)]
+        public System.Collections.Generic.List<HeuristicLab.OKB.AlgorithmHost.OKBRunner.Algorithm_Result> Algorithm_Results {
+            get {
+                return this.Algorithm_ResultsField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.Algorithm_ResultsField, value) != true)) {
+                    this.Algorithm_ResultsField = value;
+                    this.RaisePropertyChanged("Algorithm_Results");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=9)]
+        public HeuristicLab.OKB.AlgorithmHost.OKBRunner.DataType DataType {
+            get {
+                return this.DataTypeField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.DataTypeField, value) != true)) {
+                    this.DataTypeField = value;
+                    this.RaisePropertyChanged("DataType");
+                }
+            }
+        }
+        
+        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="ProblemCharacteristic", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataAccess", IsReference=true)]
+    [System.SerializableAttribute()]
+    public partial class ProblemCharacteristic : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+        
+        [System.NonSerializedAttribute()]
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int IdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string NameField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string DescriptionField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int DataTypeIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<HeuristicLab.OKB.AlgorithmHost.OKBRunner.CharProblemCharacteristicValue> CharProblemCharacteristicValuesField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<HeuristicLab.OKB.AlgorithmHost.OKBRunner.FloatProblemCharacteristicValue> FloatProblemCharacteristicValuesField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<HeuristicLab.OKB.AlgorithmHost.OKBRunner.IntProblemCharacteristicValue> IntProblemCharacteristicValuesField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.AlgorithmHost.OKBRunner.DataType DataTypeField;
+        
+        [global::System.ComponentModel.BrowsableAttribute(false)]
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+            get {
+                return this.extensionDataField;
+            }
+            set {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int 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(Order=2)]
+        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(Order=3)]
+        public int DataTypeId {
+            get {
+                return this.DataTypeIdField;
+            }
+            set {
+                if ((this.DataTypeIdField.Equals(value) != true)) {
+                    this.DataTypeIdField = value;
+                    this.RaisePropertyChanged("DataTypeId");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=4)]
+        public System.Collections.Generic.List<HeuristicLab.OKB.AlgorithmHost.OKBRunner.CharProblemCharacteristicValue> CharProblemCharacteristicValues {
+            get {
+                return this.CharProblemCharacteristicValuesField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.CharProblemCharacteristicValuesField, value) != true)) {
+                    this.CharProblemCharacteristicValuesField = value;
+                    this.RaisePropertyChanged("CharProblemCharacteristicValues");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=5)]
+        public System.Collections.Generic.List<HeuristicLab.OKB.AlgorithmHost.OKBRunner.FloatProblemCharacteristicValue> FloatProblemCharacteristicValues {
+            get {
+                return this.FloatProblemCharacteristicValuesField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.FloatProblemCharacteristicValuesField, value) != true)) {
+                    this.FloatProblemCharacteristicValuesField = value;
+                    this.RaisePropertyChanged("FloatProblemCharacteristicValues");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=6)]
+        public System.Collections.Generic.List<HeuristicLab.OKB.AlgorithmHost.OKBRunner.IntProblemCharacteristicValue> IntProblemCharacteristicValues {
+            get {
+                return this.IntProblemCharacteristicValuesField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.IntProblemCharacteristicValuesField, value) != true)) {
+                    this.IntProblemCharacteristicValuesField = value;
+                    this.RaisePropertyChanged("IntProblemCharacteristicValues");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=7)]
+        public HeuristicLab.OKB.AlgorithmHost.OKBRunner.DataType DataType {
+            get {
+                return this.DataTypeField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.DataTypeField, value) != true)) {
+                    this.DataTypeField = value;
+                    this.RaisePropertyChanged("DataType");
+                }
+            }
+        }
+        
+        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="CharProblemCharacteristicValue", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataAccess", IsReference=true)]
+    [System.SerializableAttribute()]
+    public partial class CharProblemCharacteristicValue : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+        
+        [System.NonSerializedAttribute()]
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int ProblemCharacteristicIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int ProblemIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string ValueField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.AlgorithmHost.OKBRunner.Problem ProblemField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.AlgorithmHost.OKBRunner.ProblemCharacteristic ProblemCharacteristicField;
+        
+        [global::System.ComponentModel.BrowsableAttribute(false)]
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+            get {
+                return this.extensionDataField;
+            }
+            set {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int ProblemCharacteristicId {
+            get {
+                return this.ProblemCharacteristicIdField;
+            }
+            set {
+                if ((this.ProblemCharacteristicIdField.Equals(value) != true)) {
+                    this.ProblemCharacteristicIdField = value;
+                    this.RaisePropertyChanged("ProblemCharacteristicId");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int ProblemId {
+            get {
+                return this.ProblemIdField;
+            }
+            set {
+                if ((this.ProblemIdField.Equals(value) != true)) {
+                    this.ProblemIdField = value;
+                    this.RaisePropertyChanged("ProblemId");
+                }
+            }
+        }
+        
+        [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.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=3)]
+        public HeuristicLab.OKB.AlgorithmHost.OKBRunner.Problem Problem {
+            get {
+                return this.ProblemField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.ProblemField, value) != true)) {
+                    this.ProblemField = value;
+                    this.RaisePropertyChanged("Problem");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=4)]
+        public HeuristicLab.OKB.AlgorithmHost.OKBRunner.ProblemCharacteristic ProblemCharacteristic {
+            get {
+                return this.ProblemCharacteristicField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.ProblemCharacteristicField, value) != true)) {
+                    this.ProblemCharacteristicField = value;
+                    this.RaisePropertyChanged("ProblemCharacteristic");
+                }
+            }
+        }
+        
+        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="FloatProblemCharacteristicValue", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataAccess", IsReference=true)]
+    [System.SerializableAttribute()]
+    public partial class FloatProblemCharacteristicValue : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+        
+        [System.NonSerializedAttribute()]
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int ProblemCharacteristicIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int ProblemIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private double ValueField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.AlgorithmHost.OKBRunner.Problem ProblemField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.AlgorithmHost.OKBRunner.ProblemCharacteristic ProblemCharacteristicField;
+        
+        [global::System.ComponentModel.BrowsableAttribute(false)]
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+            get {
+                return this.extensionDataField;
+            }
+            set {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int ProblemCharacteristicId {
+            get {
+                return this.ProblemCharacteristicIdField;
+            }
+            set {
+                if ((this.ProblemCharacteristicIdField.Equals(value) != true)) {
+                    this.ProblemCharacteristicIdField = value;
+                    this.RaisePropertyChanged("ProblemCharacteristicId");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int ProblemId {
+            get {
+                return this.ProblemIdField;
+            }
+            set {
+                if ((this.ProblemIdField.Equals(value) != true)) {
+                    this.ProblemIdField = value;
+                    this.RaisePropertyChanged("ProblemId");
+                }
+            }
+        }
+        
+        [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.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=3)]
+        public HeuristicLab.OKB.AlgorithmHost.OKBRunner.Problem Problem {
+            get {
+                return this.ProblemField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.ProblemField, value) != true)) {
+                    this.ProblemField = value;
+                    this.RaisePropertyChanged("Problem");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=4)]
+        public HeuristicLab.OKB.AlgorithmHost.OKBRunner.ProblemCharacteristic ProblemCharacteristic {
+            get {
+                return this.ProblemCharacteristicField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.ProblemCharacteristicField, value) != true)) {
+                    this.ProblemCharacteristicField = value;
+                    this.RaisePropertyChanged("ProblemCharacteristic");
+                }
+            }
+        }
+        
+        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="IntProblemCharacteristicValue", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataAccess", IsReference=true)]
+    [System.SerializableAttribute()]
+    public partial class IntProblemCharacteristicValue : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+        
+        [System.NonSerializedAttribute()]
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int ProblemCharacteristicIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int ProblemIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int ValueField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.AlgorithmHost.OKBRunner.Problem ProblemField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.AlgorithmHost.OKBRunner.ProblemCharacteristic ProblemCharacteristicField;
+        
+        [global::System.ComponentModel.BrowsableAttribute(false)]
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+            get {
+                return this.extensionDataField;
+            }
+            set {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int ProblemCharacteristicId {
+            get {
+                return this.ProblemCharacteristicIdField;
+            }
+            set {
+                if ((this.ProblemCharacteristicIdField.Equals(value) != true)) {
+                    this.ProblemCharacteristicIdField = value;
+                    this.RaisePropertyChanged("ProblemCharacteristicId");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int ProblemId {
+            get {
+                return this.ProblemIdField;
+            }
+            set {
+                if ((this.ProblemIdField.Equals(value) != true)) {
+                    this.ProblemIdField = value;
+                    this.RaisePropertyChanged("ProblemId");
+                }
+            }
+        }
+        
+        [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.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=3)]
+        public HeuristicLab.OKB.AlgorithmHost.OKBRunner.Problem Problem {
+            get {
+                return this.ProblemField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.ProblemField, value) != true)) {
+                    this.ProblemField = value;
+                    this.RaisePropertyChanged("Problem");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=4)]
+        public HeuristicLab.OKB.AlgorithmHost.OKBRunner.ProblemCharacteristic ProblemCharacteristic {
+            get {
+                return this.ProblemCharacteristicField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.ProblemCharacteristicField, value) != true)) {
+                    this.ProblemCharacteristicField = value;
+                    this.RaisePropertyChanged("ProblemCharacteristic");
+                }
+            }
+        }
+        
+        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="ProblemData", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataAccess", IsReference=true)]
+    [System.SerializableAttribute()]
+    public partial class ProblemData : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+        
+        [System.NonSerializedAttribute()]
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int ProblemIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.AlgorithmHost.OKBRunner.Binary DataField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.AlgorithmHost.OKBRunner.Problem ProblemField;
+        
+        [global::System.ComponentModel.BrowsableAttribute(false)]
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+            get {
+                return this.extensionDataField;
+            }
+            set {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int ProblemId {
+            get {
+                return this.ProblemIdField;
+            }
+            set {
+                if ((this.ProblemIdField.Equals(value) != true)) {
+                    this.ProblemIdField = value;
+                    this.RaisePropertyChanged("ProblemId");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(Order=1)]
+        public HeuristicLab.OKB.AlgorithmHost.OKBRunner.Binary Data {
+            get {
+                return this.DataField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.DataField, value) != true)) {
+                    this.DataField = value;
+                    this.RaisePropertyChanged("Data");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=2)]
+        public HeuristicLab.OKB.AlgorithmHost.OKBRunner.Problem Problem {
+            get {
+                return this.ProblemField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.ProblemField, value) != true)) {
+                    this.ProblemField = value;
+                    this.RaisePropertyChanged("Problem");
+                }
+            }
+        }
+        
+        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="SolutionRepresentation", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataAccess", IsReference=true)]
+    [System.SerializableAttribute()]
+    public partial class SolutionRepresentation : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+        
+        [System.NonSerializedAttribute()]
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int IdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string NameField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string DescriptionField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<HeuristicLab.OKB.AlgorithmHost.OKBRunner.Problem> ProblemsField;
+        
+        [global::System.ComponentModel.BrowsableAttribute(false)]
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+            get {
+                return this.extensionDataField;
+            }
+            set {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int 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(Order=2)]
+        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(EmitDefaultValue=false, Order=3)]
+        public System.Collections.Generic.List<HeuristicLab.OKB.AlgorithmHost.OKBRunner.Problem> Problems {
+            get {
+                return this.ProblemsField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.ProblemsField, value) != true)) {
+                    this.ProblemsField = value;
+                    this.RaisePropertyChanged("Problems");
+                }
+            }
+        }
+        
+        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="ExperimentKit", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB")]
+    [System.SerializableAttribute()]
+    public partial class ExperimentKit : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+        
+        [System.NonSerializedAttribute()]
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.AlgorithmHost.OKBRunner.Algorithm AlgorithmField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.AlgorithmHost.OKBRunner.Problem ProblemField;
+        
+        [global::System.ComponentModel.BrowsableAttribute(false)]
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+            get {
+                return this.extensionDataField;
+            }
+            set {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public HeuristicLab.OKB.AlgorithmHost.OKBRunner.Algorithm Algorithm {
+            get {
+                return this.AlgorithmField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.AlgorithmField, value) != true)) {
+                    this.AlgorithmField = value;
+                    this.RaisePropertyChanged("Algorithm");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public HeuristicLab.OKB.AlgorithmHost.OKBRunner.Problem Problem {
+            get {
+                return this.ProblemField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.ProblemField, value) != true)) {
+                    this.ProblemField = value;
+                    this.RaisePropertyChanged("Problem");
+                }
+            }
+        }
+        
+        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="OKBRunner.IRunnerService", SessionMode=System.ServiceModel.SessionMode.Required)]
+    public interface IRunnerService {
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IRunnerService/Login", ReplyAction="http://tempuri.org/IRunnerService/LoginResponse")]
+        bool Login(string clientname);
+        
+        [System.ServiceModel.OperationContractAttribute(IsInitiating=false, Action="http://tempuri.org/IRunnerService/GetStarterKit", ReplyAction="http://tempuri.org/IRunnerService/GetStarterKitResponse")]
+        HeuristicLab.OKB.AlgorithmHost.OKBRunner.StarterKit GetStarterKit(string platformName);
+        
+        [System.ServiceModel.OperationContractAttribute(IsInitiating=false, Action="http://tempuri.org/IRunnerService/PrepareExperiment", ReplyAction="http://tempuri.org/IRunnerService/PrepareExperimentResponse")]
+        HeuristicLab.OKB.AlgorithmHost.OKBRunner.ExperimentKit PrepareExperiment(HeuristicLab.OKB.AlgorithmHost.OKBRunner.Algorithm algorithm, HeuristicLab.OKB.AlgorithmHost.OKBRunner.Problem problem);
+        
+        [System.ServiceModel.OperationContractAttribute(IsInitiating=false, Action="http://tempuri.org/IRunnerService/AddRun", ReplyAction="http://tempuri.org/IRunnerService/AddRunResponse")]
+        void AddRun(HeuristicLab.OKB.AlgorithmHost.OKBRunner.Algorithm algorithm, HeuristicLab.OKB.AlgorithmHost.OKBRunner.Problem problem, HeuristicLab.OKB.AlgorithmHost.OKBRunner.Project project);
+        
+        [System.ServiceModel.OperationContractAttribute(IsInitiating=false, Action="http://tempuri.org/IRunnerService/IsConnected", ReplyAction="http://tempuri.org/IRunnerService/IsConnectedResponse")]
+        bool IsConnected();
+        
+        [System.ServiceModel.OperationContractAttribute(IsOneWay=true, IsTerminating=true, IsInitiating=false, Action="http://tempuri.org/IRunnerService/Logout")]
+        void Logout();
+    }
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+    public interface IRunnerServiceChannel : HeuristicLab.OKB.AlgorithmHost.OKBRunner.IRunnerService, System.ServiceModel.IClientChannel {
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+    public partial class RunnerServiceClient : System.ServiceModel.ClientBase<HeuristicLab.OKB.AlgorithmHost.OKBRunner.IRunnerService>, HeuristicLab.OKB.AlgorithmHost.OKBRunner.IRunnerService {
+        
+        public RunnerServiceClient() {
+        }
+        
+        public RunnerServiceClient(string endpointConfigurationName) : 
+                base(endpointConfigurationName) {
+        }
+        
+        public RunnerServiceClient(string endpointConfigurationName, string remoteAddress) : 
+                base(endpointConfigurationName, remoteAddress) {
+        }
+        
+        public RunnerServiceClient(string endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) : 
+                base(endpointConfigurationName, remoteAddress) {
+        }
+        
+        public RunnerServiceClient(System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress) : 
+                base(binding, remoteAddress) {
+        }
+        
+        public bool Login(string clientname) {
+            return base.Channel.Login(clientname);
+        }
+        
+        public HeuristicLab.OKB.AlgorithmHost.OKBRunner.StarterKit GetStarterKit(string platformName) {
+            return base.Channel.GetStarterKit(platformName);
+        }
+        
+        public HeuristicLab.OKB.AlgorithmHost.OKBRunner.ExperimentKit PrepareExperiment(HeuristicLab.OKB.AlgorithmHost.OKBRunner.Algorithm algorithm, HeuristicLab.OKB.AlgorithmHost.OKBRunner.Problem problem) {
+            return base.Channel.PrepareExperiment(algorithm, problem);
+        }
+        
+        public void AddRun(HeuristicLab.OKB.AlgorithmHost.OKBRunner.Algorithm algorithm, HeuristicLab.OKB.AlgorithmHost.OKBRunner.Problem problem, HeuristicLab.OKB.AlgorithmHost.OKBRunner.Project project) {
+            base.Channel.AddRun(algorithm, problem, project);
+        }
+        
+        public bool IsConnected() {
+            return base.Channel.IsConnected();
+        }
+        
+        public void Logout() {
+            base.Channel.Logout();
+        }
+    }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Service References/OKBRunner/Reference.svcmap
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Service References/OKBRunner/Reference.svcmap	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Service References/OKBRunner/Reference.svcmap	(revision 5296)
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8"?>
+<ReferenceGroup xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" ID="7a7e9db7-c12c-4a72-aae8-6caf784134ea" xmlns="urn:schemas-microsoft-com:xml-wcfservicemap">
+  <ClientOptions>
+    <GenerateAsynchronousMethods>false</GenerateAsynchronousMethods>
+    <EnableDataBinding>true</EnableDataBinding>
+    <ExcludedTypes />
+    <ImportXmlTypes>false</ImportXmlTypes>
+    <GenerateInternalTypes>false</GenerateInternalTypes>
+    <GenerateMessageContracts>false</GenerateMessageContracts>
+    <NamespaceMappings />
+    <CollectionMappings>
+      <CollectionMapping TypeName="System.Collections.Generic.List`1" Category="List" />
+    </CollectionMappings>
+    <GenerateSerializableTypes>true</GenerateSerializableTypes>
+    <Serializer>Auto</Serializer>
+    <UseSerializerForFaults>true</UseSerializerForFaults>
+    <ReferenceAllAssemblies>true</ReferenceAllAssemblies>
+    <ReferencedAssemblies />
+    <ReferencedDataContractTypes />
+    <ServiceContractMappings />
+  </ClientOptions>
+  <MetadataSources>
+    <MetadataSource Address="http://localhost:8732/Design_Time_Addresses/OKB-3.3/RunnerService/mex" Protocol="mex" SourceId="1" />
+  </MetadataSources>
+  <Metadata>
+    <MetadataFile FileName="service.wsdl" MetadataType="Wsdl" ID="2d89c4e9-3689-492d-8ee2-82cdd6069ec8" SourceId="1" SourceUrl="http://localhost:8732/Design_Time_Addresses/OKB-3.3/RunnerService/mex" />
+    <MetadataFile FileName="service.xsd" MetadataType="Schema" ID="f2b43215-7929-478a-941d-793cc000883a" SourceId="1" SourceUrl="http://localhost:8732/Design_Time_Addresses/OKB-3.3/RunnerService/mex" />
+    <MetadataFile FileName="service1.xsd" MetadataType="Schema" ID="2ca6ff70-368d-4b3e-8dd3-bd9928b6ac05" SourceId="1" SourceUrl="http://localhost:8732/Design_Time_Addresses/OKB-3.3/RunnerService/mex" />
+    <MetadataFile FileName="HeuristicLab.Services.OKB.xsd" MetadataType="Schema" ID="730bc3d0-080e-40f7-9b9b-3f73e91c9ff4" SourceId="1" SourceUrl="http://localhost:8732/Design_Time_Addresses/OKB-3.3/RunnerService/mex" />
+    <MetadataFile FileName="HeuristicLab.Services.OKB.DataAccess.xsd" MetadataType="Schema" ID="27cd3bb7-a238-4424-b97b-61040cfe4d0c" SourceId="1" SourceUrl="http://localhost:8732/Design_Time_Addresses/OKB-3.3/RunnerService/mex" />
+    <MetadataFile FileName="System.Data.Linq.xsd" MetadataType="Schema" ID="7b2da110-854f-4b4c-a8b7-98636a3471b3" SourceId="1" SourceUrl="http://localhost:8732/Design_Time_Addresses/OKB-3.3/RunnerService/mex" />
+  </Metadata>
+  <Extensions>
+    <ExtensionFile FileName="configuration91.svcinfo" Name="configuration91.svcinfo" />
+    <ExtensionFile FileName="configuration.svcinfo" Name="configuration.svcinfo" />
+  </Extensions>
+</ReferenceGroup>
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Service References/OKBRunner/System.Data.Linq.xsd
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Service References/OKBRunner/System.Data.Linq.xsd	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Service References/OKBRunner/System.Data.Linq.xsd	(revision 5296)
@@ -0,0 +1,9 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:tns="http://schemas.datacontract.org/2004/07/System.Data.Linq" elementFormDefault="qualified" targetNamespace="http://schemas.datacontract.org/2004/07/System.Data.Linq" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:complexType name="Binary">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="Bytes" nillable="true" type="xs:base64Binary" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="Binary" nillable="true" type="tns:Binary" />
+</xs:schema>
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Service References/OKBRunner/configuration.svcinfo
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Service References/OKBRunner/configuration.svcinfo	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Service References/OKBRunner/configuration.svcinfo	(revision 5296)
@@ -0,0 +1,10 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<configurationSnapshot xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="urn:schemas-microsoft-com:xml-wcfconfigurationsnapshot">
+  <behaviors />
+  <bindings>
+    <binding digest="System.ServiceModel.Configuration.NetTcpBindingElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089:&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-16&quot;?&gt;&lt;Data hostNameComparisonMode=&quot;StrongWildcard&quot; listenBacklog=&quot;10&quot; maxBufferSize=&quot;65536&quot; maxConnections=&quot;10&quot; name=&quot;NetTcpBinding_IRunnerService&quot; transactionFlow=&quot;false&quot; transactionProtocol=&quot;OleTransactions&quot; transferMode=&quot;Buffered&quot;&gt;&lt;readerQuotas maxArrayLength=&quot;16384&quot; maxBytesPerRead=&quot;4096&quot; maxDepth=&quot;32&quot; maxNameTableCharCount=&quot;16384&quot; maxStringContentLength=&quot;8192&quot; /&gt;&lt;reliableSession enabled=&quot;false&quot; inactivityTimeout=&quot;00:10:00&quot; ordered=&quot;true&quot; /&gt;&lt;security mode=&quot;Message&quot;&gt;&lt;message algorithmSuite=&quot;Default&quot; clientCredentialType=&quot;UserName&quot; /&gt;&lt;transport clientCredentialType=&quot;Windows&quot; protectionLevel=&quot;EncryptAndSign&quot; /&gt;&lt;/security&gt;&lt;/Data&gt;" bindingType="netTcpBinding" name="NetTcpBinding_IRunnerService" />
+  </bindings>
+  <endpoints>
+    <endpoint normalizedDigest="&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-16&quot;?&gt;&lt;Data address=&quot;net.tcp://localhost:8733/OKB-3.3/RunnerService&quot; binding=&quot;netTcpBinding&quot; bindingConfiguration=&quot;NetTcpBinding_IRunnerService&quot; contract=&quot;OKBRunner.IRunnerService&quot; name=&quot;NetTcpBinding_IRunnerService&quot;&gt;&lt;identity&gt;&lt;certificate encodedValue=&quot;AwAAAAEAAAAUAAAAD/AlkYJw/OUhl6D/9w8mjJBh39kgAAAAAQAAAPIBAAAwggHuMIIBW6ADAgECAhAdEzTisaf2sEZxrqYZfYtCMAkGBSsOAwIdBQAwFDESMBAGA1UEAxMJbG9jYWxob3N0MB4XDTEwMDgyMDIyMzIwOFoXDTM5MTIzMTIzNTk1OVowFDESMBAGA1UEAxMJbG9jYWxob3N0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDPkfCSLRX8/4F+Z4ys43yZ4MMzjB44cMakPz4Nri+mEB5n2z/0GFatCYzkI2f/nniWqVrBYjHkjsZy2EZioHu4wa99c1XEGJnFNDuNn6ESkfEyhyF4+OqKGnpK9HNrw7OWMuqn2oOh0iFd9fl6FTAm+Y0p3LP+38BuYzpCniqqdwIDAQABo0kwRzBFBgNVHQEEPjA8gBDvi8Rgio9v+mr58TiAvqF5oRYwFDESMBAGA1UEAxMJbG9jYWxob3N0ghAdEzTisaf2sEZxrqYZfYtCMAkGBSsOAwIdBQADgYEANdGlvHKeUptfNu9I0wgA5qjmVB+JDldOAkrfM0R+4IcVQ06y5K7P07uxQAV7+rhnDLgLyFJunUHgzbfjsjFy7vjwtoieXA5j0AYlm4AHR7dHt4HVgkIMYt8XOCqMw5jjFX91xJ89tC7mM9zYR48N9T5QSeMGo+f+JzybeLWxnNs=&quot; /&gt;&lt;/identity&gt;&lt;/Data&gt;" digest="&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-16&quot;?&gt;&lt;Data address=&quot;net.tcp://localhost:8733/OKB-3.3/RunnerService&quot; binding=&quot;netTcpBinding&quot; bindingConfiguration=&quot;NetTcpBinding_IRunnerService&quot; contract=&quot;OKBRunner.IRunnerService&quot; name=&quot;NetTcpBinding_IRunnerService&quot;&gt;&lt;identity&gt;&lt;certificate encodedValue=&quot;AwAAAAEAAAAUAAAAD/AlkYJw/OUhl6D/9w8mjJBh39kgAAAAAQAAAPIBAAAwggHuMIIBW6ADAgECAhAdEzTisaf2sEZxrqYZfYtCMAkGBSsOAwIdBQAwFDESMBAGA1UEAxMJbG9jYWxob3N0MB4XDTEwMDgyMDIyMzIwOFoXDTM5MTIzMTIzNTk1OVowFDESMBAGA1UEAxMJbG9jYWxob3N0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDPkfCSLRX8/4F+Z4ys43yZ4MMzjB44cMakPz4Nri+mEB5n2z/0GFatCYzkI2f/nniWqVrBYjHkjsZy2EZioHu4wa99c1XEGJnFNDuNn6ESkfEyhyF4+OqKGnpK9HNrw7OWMuqn2oOh0iFd9fl6FTAm+Y0p3LP+38BuYzpCniqqdwIDAQABo0kwRzBFBgNVHQEEPjA8gBDvi8Rgio9v+mr58TiAvqF5oRYwFDESMBAGA1UEAxMJbG9jYWxob3N0ghAdEzTisaf2sEZxrqYZfYtCMAkGBSsOAwIdBQADgYEANdGlvHKeUptfNu9I0wgA5qjmVB+JDldOAkrfM0R+4IcVQ06y5K7P07uxQAV7+rhnDLgLyFJunUHgzbfjsjFy7vjwtoieXA5j0AYlm4AHR7dHt4HVgkIMYt8XOCqMw5jjFX91xJ89tC7mM9zYR48N9T5QSeMGo+f+JzybeLWxnNs=&quot; /&gt;&lt;/identity&gt;&lt;/Data&gt;" contractName="OKBRunner.IRunnerService" name="NetTcpBinding_IRunnerService" />
+  </endpoints>
+</configurationSnapshot>
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Service References/OKBRunner/configuration91.svcinfo
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Service References/OKBRunner/configuration91.svcinfo	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Service References/OKBRunner/configuration91.svcinfo	(revision 5296)
@@ -0,0 +1,207 @@
+<?xml version="1.0" encoding="utf-8"?>
+<SavedWcfConfigurationInformation xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Version="9.1" CheckSum="dtMKBpXmWjXXC670gtqOpDC0YK8=">
+  <bindingConfigurations>
+    <bindingConfiguration bindingType="netTcpBinding" name="NetTcpBinding_IRunnerService">
+      <properties>
+        <property path="/name" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>NetTcpBinding_IRunnerService</serializedValue>
+        </property>
+        <property path="/closeTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>00:01:00</serializedValue>
+        </property>
+        <property path="/openTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>00:01:00</serializedValue>
+        </property>
+        <property path="/receiveTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>00:10:00</serializedValue>
+        </property>
+        <property path="/sendTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>00:01:00</serializedValue>
+        </property>
+        <property path="/transactionFlow" isComplexType="false" isExplicitlyDefined="true" clrType="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>False</serializedValue>
+        </property>
+        <property path="/transferMode" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.TransferMode, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>Buffered</serializedValue>
+        </property>
+        <property path="/transactionProtocol" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.TransactionProtocol, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>OleTransactions</serializedValue>
+        </property>
+        <property path="/hostNameComparisonMode" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.HostNameComparisonMode, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>StrongWildcard</serializedValue>
+        </property>
+        <property path="/listenBacklog" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>10</serializedValue>
+        </property>
+        <property path="/maxBufferPoolSize" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int64, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>524288</serializedValue>
+        </property>
+        <property path="/maxBufferSize" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>65536</serializedValue>
+        </property>
+        <property path="/maxConnections" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>10</serializedValue>
+        </property>
+        <property path="/maxReceivedMessageSize" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int64, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>65536</serializedValue>
+        </property>
+        <property path="/portSharingEnabled" isComplexType="false" isExplicitlyDefined="false" clrType="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>False</serializedValue>
+        </property>
+        <property path="/readerQuotas" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.XmlDictionaryReaderQuotasElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.XmlDictionaryReaderQuotasElement</serializedValue>
+        </property>
+        <property path="/readerQuotas/maxDepth" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>32</serializedValue>
+        </property>
+        <property path="/readerQuotas/maxStringContentLength" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>8192</serializedValue>
+        </property>
+        <property path="/readerQuotas/maxArrayLength" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>16384</serializedValue>
+        </property>
+        <property path="/readerQuotas/maxBytesPerRead" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>4096</serializedValue>
+        </property>
+        <property path="/readerQuotas/maxNameTableCharCount" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>16384</serializedValue>
+        </property>
+        <property path="/reliableSession" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.StandardBindingOptionalReliableSessionElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.StandardBindingOptionalReliableSessionElement</serializedValue>
+        </property>
+        <property path="/reliableSession/ordered" isComplexType="false" isExplicitlyDefined="true" clrType="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>True</serializedValue>
+        </property>
+        <property path="/reliableSession/inactivityTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>00:10:00</serializedValue>
+        </property>
+        <property path="/reliableSession/enabled" isComplexType="false" isExplicitlyDefined="true" clrType="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>False</serializedValue>
+        </property>
+        <property path="/security" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.NetTcpSecurityElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.NetTcpSecurityElement</serializedValue>
+        </property>
+        <property path="/security/mode" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.SecurityMode, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>Message</serializedValue>
+        </property>
+        <property path="/security/transport" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.TcpTransportSecurityElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.TcpTransportSecurityElement</serializedValue>
+        </property>
+        <property path="/security/transport/clientCredentialType" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.TcpClientCredentialType, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>Windows</serializedValue>
+        </property>
+        <property path="/security/transport/protectionLevel" isComplexType="false" isExplicitlyDefined="true" clrType="System.Net.Security.ProtectionLevel, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>EncryptAndSign</serializedValue>
+        </property>
+        <property path="/security/transport/extendedProtectionPolicy" isComplexType="true" isExplicitlyDefined="false" clrType="System.Security.Authentication.ExtendedProtection.Configuration.ExtendedProtectionPolicyElement, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.Security.Authentication.ExtendedProtection.Configuration.ExtendedProtectionPolicyElement</serializedValue>
+        </property>
+        <property path="/security/transport/extendedProtectionPolicy/policyEnforcement" isComplexType="false" isExplicitlyDefined="false" clrType="System.Security.Authentication.ExtendedProtection.PolicyEnforcement, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>Never</serializedValue>
+        </property>
+        <property path="/security/transport/extendedProtectionPolicy/protectionScenario" isComplexType="false" isExplicitlyDefined="false" clrType="System.Security.Authentication.ExtendedProtection.ProtectionScenario, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>TransportSelected</serializedValue>
+        </property>
+        <property path="/security/transport/extendedProtectionPolicy/customServiceNames" isComplexType="true" isExplicitlyDefined="false" clrType="System.Security.Authentication.ExtendedProtection.Configuration.ServiceNameElementCollection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>(Collection)</serializedValue>
+        </property>
+        <property path="/security/message" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.MessageSecurityOverTcpElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.MessageSecurityOverTcpElement</serializedValue>
+        </property>
+        <property path="/security/message/clientCredentialType" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.MessageCredentialType, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>UserName</serializedValue>
+        </property>
+        <property path="/security/message/algorithmSuite" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.Security.SecurityAlgorithmSuite, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>Default</serializedValue>
+        </property>
+      </properties>
+    </bindingConfiguration>
+  </bindingConfigurations>
+  <endpoints>
+    <endpoint name="NetTcpBinding_IRunnerService" contract="OKBRunner.IRunnerService" bindingType="netTcpBinding" address="net.tcp://localhost:8733/OKB-3.3/RunnerService" bindingConfiguration="NetTcpBinding_IRunnerService">
+      <properties>
+        <property path="/address" isComplexType="false" isExplicitlyDefined="true" clrType="System.Uri, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>net.tcp://localhost:8733/OKB-3.3/RunnerService</serializedValue>
+        </property>
+        <property path="/behaviorConfiguration" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/binding" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>netTcpBinding</serializedValue>
+        </property>
+        <property path="/bindingConfiguration" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>NetTcpBinding_IRunnerService</serializedValue>
+        </property>
+        <property path="/contract" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>OKBRunner.IRunnerService</serializedValue>
+        </property>
+        <property path="/headers" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.AddressHeaderCollectionElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.AddressHeaderCollectionElement</serializedValue>
+        </property>
+        <property path="/headers/headers" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.Channels.AddressHeaderCollection, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>&lt;Header /&gt;</serializedValue>
+        </property>
+        <property path="/identity" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.IdentityElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.IdentityElement</serializedValue>
+        </property>
+        <property path="/identity/userPrincipalName" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.UserPrincipalNameElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.UserPrincipalNameElement</serializedValue>
+        </property>
+        <property path="/identity/userPrincipalName/value" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/servicePrincipalName" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.ServicePrincipalNameElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.ServicePrincipalNameElement</serializedValue>
+        </property>
+        <property path="/identity/servicePrincipalName/value" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/dns" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.DnsElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.DnsElement</serializedValue>
+        </property>
+        <property path="/identity/dns/value" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/rsa" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.RsaElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.RsaElement</serializedValue>
+        </property>
+        <property path="/identity/rsa/value" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/certificate" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.CertificateElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.CertificateElement</serializedValue>
+        </property>
+        <property path="/identity/certificate/encodedValue" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>AwAAAAEAAAAUAAAAD/AlkYJw/OUhl6D/9w8mjJBh39kgAAAAAQAAAPIBAAAwggHuMIIBW6ADAgECAhAdEzTisaf2sEZxrqYZfYtCMAkGBSsOAwIdBQAwFDESMBAGA1UEAxMJbG9jYWxob3N0MB4XDTEwMDgyMDIyMzIwOFoXDTM5MTIzMTIzNTk1OVowFDESMBAGA1UEAxMJbG9jYWxob3N0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDPkfCSLRX8/4F+Z4ys43yZ4MMzjB44cMakPz4Nri+mEB5n2z/0GFatCYzkI2f/nniWqVrBYjHkjsZy2EZioHu4wa99c1XEGJnFNDuNn6ESkfEyhyF4+OqKGnpK9HNrw7OWMuqn2oOh0iFd9fl6FTAm+Y0p3LP+38BuYzpCniqqdwIDAQABo0kwRzBFBgNVHQEEPjA8gBDvi8Rgio9v+mr58TiAvqF5oRYwFDESMBAGA1UEAxMJbG9jYWxob3N0ghAdEzTisaf2sEZxrqYZfYtCMAkGBSsOAwIdBQADgYEANdGlvHKeUptfNu9I0wgA5qjmVB+JDldOAkrfM0R+4IcVQ06y5K7P07uxQAV7+rhnDLgLyFJunUHgzbfjsjFy7vjwtoieXA5j0AYlm4AHR7dHt4HVgkIMYt8XOCqMw5jjFX91xJ89tC7mM9zYR48N9T5QSeMGo+f+JzybeLWxnNs=</serializedValue>
+        </property>
+        <property path="/identity/certificateReference" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.CertificateReferenceElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.CertificateReferenceElement</serializedValue>
+        </property>
+        <property path="/identity/certificateReference/storeName" isComplexType="false" isExplicitlyDefined="false" clrType="System.Security.Cryptography.X509Certificates.StoreName, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>My</serializedValue>
+        </property>
+        <property path="/identity/certificateReference/storeLocation" isComplexType="false" isExplicitlyDefined="false" clrType="System.Security.Cryptography.X509Certificates.StoreLocation, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>LocalMachine</serializedValue>
+        </property>
+        <property path="/identity/certificateReference/x509FindType" isComplexType="false" isExplicitlyDefined="false" clrType="System.Security.Cryptography.X509Certificates.X509FindType, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>FindBySubjectDistinguishedName</serializedValue>
+        </property>
+        <property path="/identity/certificateReference/findValue" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/certificateReference/isChainIncluded" isComplexType="false" isExplicitlyDefined="false" clrType="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>False</serializedValue>
+        </property>
+        <property path="/name" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>NetTcpBinding_IRunnerService</serializedValue>
+        </property>
+        <property path="/kind" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/endpointConfiguration" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+      </properties>
+    </endpoint>
+  </endpoints>
+</SavedWcfConfigurationInformation>
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Service References/OKBRunner/service.wsdl
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Service References/OKBRunner/service.wsdl	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Service References/OKBRunner/service.wsdl	(revision 5296)
@@ -0,0 +1,466 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<wsdl:definitions xmlns:wsap="http://schemas.xmlsoap.org/ws/2004/08/addressing/policy" xmlns:wsa10="http://www.w3.org/2005/08/addressing" xmlns:tns="http://tempuri.org/" xmlns:msc="http://schemas.microsoft.com/ws/2005/12/wsdl/contract" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="RunnerService" targetNamespace="http://tempuri.org/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
+  <wsp:Policy wsu:Id="NetTcpBinding_IRunnerService_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SymmetricBinding xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <wsp:Policy>
+            <sp:ProtectionToken>
+              <wsp:Policy>
+                <sp:SecureConversationToken sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient">
+                  <wsp:Policy>
+                    <sp:RequireDerivedKeys />
+                    <sp:BootstrapPolicy>
+                      <wsp:Policy>
+                        <sp:SignedParts>
+                          <sp:Body />
+                          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+                          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+                          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+                          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+                          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+                          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+                          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+                        </sp:SignedParts>
+                        <sp:EncryptedParts>
+                          <sp:Body />
+                        </sp:EncryptedParts>
+                        <sp:SymmetricBinding>
+                          <wsp:Policy>
+                            <sp:ProtectionToken>
+                              <wsp:Policy>
+                                <mssp:SslContextToken sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient" xmlns:mssp="http://schemas.microsoft.com/ws/2005/07/securitypolicy">
+                                  <wsp:Policy>
+                                    <sp:RequireDerivedKeys />
+                                  </wsp:Policy>
+                                </mssp:SslContextToken>
+                              </wsp:Policy>
+                            </sp:ProtectionToken>
+                            <sp:AlgorithmSuite>
+                              <wsp:Policy>
+                                <sp:Basic256 />
+                              </wsp:Policy>
+                            </sp:AlgorithmSuite>
+                            <sp:Layout>
+                              <wsp:Policy>
+                                <sp:Strict />
+                              </wsp:Policy>
+                            </sp:Layout>
+                            <sp:IncludeTimestamp />
+                            <sp:EncryptSignature />
+                            <sp:OnlySignEntireHeadersAndBody />
+                          </wsp:Policy>
+                        </sp:SymmetricBinding>
+                        <sp:SignedSupportingTokens>
+                          <wsp:Policy>
+                            <sp:UsernameToken sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient">
+                              <wsp:Policy>
+                                <sp:WssUsernameToken10 />
+                              </wsp:Policy>
+                            </sp:UsernameToken>
+                          </wsp:Policy>
+                        </sp:SignedSupportingTokens>
+                        <sp:Wss11>
+                          <wsp:Policy />
+                        </sp:Wss11>
+                        <sp:Trust10>
+                          <wsp:Policy>
+                            <sp:MustSupportIssuedTokens />
+                            <sp:RequireClientEntropy />
+                            <sp:RequireServerEntropy />
+                          </wsp:Policy>
+                        </sp:Trust10>
+                      </wsp:Policy>
+                    </sp:BootstrapPolicy>
+                  </wsp:Policy>
+                </sp:SecureConversationToken>
+              </wsp:Policy>
+            </sp:ProtectionToken>
+            <sp:AlgorithmSuite>
+              <wsp:Policy>
+                <sp:Basic256 />
+              </wsp:Policy>
+            </sp:AlgorithmSuite>
+            <sp:Layout>
+              <wsp:Policy>
+                <sp:Strict />
+              </wsp:Policy>
+            </sp:Layout>
+            <sp:IncludeTimestamp />
+            <sp:EncryptSignature />
+            <sp:OnlySignEntireHeadersAndBody />
+          </wsp:Policy>
+        </sp:SymmetricBinding>
+        <sp:Wss11 xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <wsp:Policy />
+        </sp:Wss11>
+        <sp:Trust10 xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <wsp:Policy>
+            <sp:MustSupportIssuedTokens />
+            <sp:RequireClientEntropy />
+            <sp:RequireServerEntropy />
+          </wsp:Policy>
+        </sp:Trust10>
+        <msb:BinaryEncoding xmlns:msb="http://schemas.microsoft.com/ws/06/2004/mspolicy/netbinary1" />
+        <wsaw:UsingAddressing />
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="NetTcpBinding_IRunnerService_Login_Input_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="NetTcpBinding_IRunnerService_Login_output_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="NetTcpBinding_IRunnerService_GetStarterKit_Input_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="NetTcpBinding_IRunnerService_GetStarterKit_output_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="NetTcpBinding_IRunnerService_PrepareExperiment_Input_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="NetTcpBinding_IRunnerService_PrepareExperiment_output_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="NetTcpBinding_IRunnerService_AddRun_Input_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="NetTcpBinding_IRunnerService_AddRun_output_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="NetTcpBinding_IRunnerService_IsConnected_Input_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="NetTcpBinding_IRunnerService_IsConnected_output_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="NetTcpBinding_IRunnerService_Logout_Input_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsdl:types>
+    <xsd:schema targetNamespace="http://tempuri.org/Imports">
+      <xsd:import namespace="http://tempuri.org/" />
+      <xsd:import namespace="http://schemas.microsoft.com/2003/10/Serialization/" />
+      <xsd:import namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB" />
+      <xsd:import namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataAccess" />
+      <xsd:import namespace="http://schemas.datacontract.org/2004/07/System.Data.Linq" />
+    </xsd:schema>
+  </wsdl:types>
+  <wsdl:message name="IRunnerService_Login_InputMessage">
+    <wsdl:part name="parameters" element="tns:Login" />
+  </wsdl:message>
+  <wsdl:message name="IRunnerService_Login_OutputMessage">
+    <wsdl:part name="parameters" element="tns:LoginResponse" />
+  </wsdl:message>
+  <wsdl:message name="IRunnerService_GetStarterKit_InputMessage">
+    <wsdl:part name="parameters" element="tns:GetStarterKit" />
+  </wsdl:message>
+  <wsdl:message name="IRunnerService_GetStarterKit_OutputMessage">
+    <wsdl:part name="parameters" element="tns:GetStarterKitResponse" />
+  </wsdl:message>
+  <wsdl:message name="IRunnerService_PrepareExperiment_InputMessage">
+    <wsdl:part name="parameters" element="tns:PrepareExperiment" />
+  </wsdl:message>
+  <wsdl:message name="IRunnerService_PrepareExperiment_OutputMessage">
+    <wsdl:part name="parameters" element="tns:PrepareExperimentResponse" />
+  </wsdl:message>
+  <wsdl:message name="IRunnerService_AddRun_InputMessage">
+    <wsdl:part name="parameters" element="tns:AddRun" />
+  </wsdl:message>
+  <wsdl:message name="IRunnerService_AddRun_OutputMessage">
+    <wsdl:part name="parameters" element="tns:AddRunResponse" />
+  </wsdl:message>
+  <wsdl:message name="IRunnerService_IsConnected_InputMessage">
+    <wsdl:part name="parameters" element="tns:IsConnected" />
+  </wsdl:message>
+  <wsdl:message name="IRunnerService_IsConnected_OutputMessage">
+    <wsdl:part name="parameters" element="tns:IsConnectedResponse" />
+  </wsdl:message>
+  <wsdl:message name="IRunnerService_Logout_InputMessage">
+    <wsdl:part name="parameters" element="tns:Logout" />
+  </wsdl:message>
+  <wsdl:portType msc:usingSession="true" name="IRunnerService">
+    <wsdl:operation msc:isInitiating="true" msc:isTerminating="false" name="Login">
+      <wsdl:input wsaw:Action="http://tempuri.org/IRunnerService/Login" message="tns:IRunnerService_Login_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/IRunnerService/LoginResponse" message="tns:IRunnerService_Login_OutputMessage" />
+    </wsdl:operation>
+    <wsdl:operation msc:isInitiating="false" msc:isTerminating="false" name="GetStarterKit">
+      <wsdl:input wsaw:Action="http://tempuri.org/IRunnerService/GetStarterKit" message="tns:IRunnerService_GetStarterKit_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/IRunnerService/GetStarterKitResponse" message="tns:IRunnerService_GetStarterKit_OutputMessage" />
+    </wsdl:operation>
+    <wsdl:operation msc:isInitiating="false" msc:isTerminating="false" name="PrepareExperiment">
+      <wsdl:input wsaw:Action="http://tempuri.org/IRunnerService/PrepareExperiment" message="tns:IRunnerService_PrepareExperiment_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/IRunnerService/PrepareExperimentResponse" message="tns:IRunnerService_PrepareExperiment_OutputMessage" />
+    </wsdl:operation>
+    <wsdl:operation msc:isInitiating="false" msc:isTerminating="false" name="AddRun">
+      <wsdl:input wsaw:Action="http://tempuri.org/IRunnerService/AddRun" message="tns:IRunnerService_AddRun_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/IRunnerService/AddRunResponse" message="tns:IRunnerService_AddRun_OutputMessage" />
+    </wsdl:operation>
+    <wsdl:operation msc:isInitiating="false" msc:isTerminating="false" name="IsConnected">
+      <wsdl:input wsaw:Action="http://tempuri.org/IRunnerService/IsConnected" message="tns:IRunnerService_IsConnected_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/IRunnerService/IsConnectedResponse" message="tns:IRunnerService_IsConnected_OutputMessage" />
+    </wsdl:operation>
+    <wsdl:operation msc:isInitiating="false" msc:isTerminating="true" name="Logout">
+      <wsdl:input wsaw:Action="http://tempuri.org/IRunnerService/Logout" message="tns:IRunnerService_Logout_InputMessage" />
+    </wsdl:operation>
+  </wsdl:portType>
+  <wsdl:binding name="NetTcpBinding_IRunnerService" type="tns:IRunnerService">
+    <wsp:PolicyReference URI="#NetTcpBinding_IRunnerService_policy" />
+    <soap12:binding transport="http://schemas.microsoft.com/soap/tcp" />
+    <wsdl:operation name="Login">
+      <soap12:operation soapAction="http://tempuri.org/IRunnerService/Login" style="document" />
+      <wsdl:input>
+        <wsp:PolicyReference URI="#NetTcpBinding_IRunnerService_Login_Input_policy" />
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <wsp:PolicyReference URI="#NetTcpBinding_IRunnerService_Login_output_policy" />
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="GetStarterKit">
+      <soap12:operation soapAction="http://tempuri.org/IRunnerService/GetStarterKit" style="document" />
+      <wsdl:input>
+        <wsp:PolicyReference URI="#NetTcpBinding_IRunnerService_GetStarterKit_Input_policy" />
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <wsp:PolicyReference URI="#NetTcpBinding_IRunnerService_GetStarterKit_output_policy" />
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="PrepareExperiment">
+      <soap12:operation soapAction="http://tempuri.org/IRunnerService/PrepareExperiment" style="document" />
+      <wsdl:input>
+        <wsp:PolicyReference URI="#NetTcpBinding_IRunnerService_PrepareExperiment_Input_policy" />
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <wsp:PolicyReference URI="#NetTcpBinding_IRunnerService_PrepareExperiment_output_policy" />
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="AddRun">
+      <soap12:operation soapAction="http://tempuri.org/IRunnerService/AddRun" style="document" />
+      <wsdl:input>
+        <wsp:PolicyReference URI="#NetTcpBinding_IRunnerService_AddRun_Input_policy" />
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <wsp:PolicyReference URI="#NetTcpBinding_IRunnerService_AddRun_output_policy" />
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="IsConnected">
+      <soap12:operation soapAction="http://tempuri.org/IRunnerService/IsConnected" style="document" />
+      <wsdl:input>
+        <wsp:PolicyReference URI="#NetTcpBinding_IRunnerService_IsConnected_Input_policy" />
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <wsp:PolicyReference URI="#NetTcpBinding_IRunnerService_IsConnected_output_policy" />
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="Logout">
+      <soap12:operation soapAction="http://tempuri.org/IRunnerService/Logout" style="document" />
+      <wsdl:input>
+        <wsp:PolicyReference URI="#NetTcpBinding_IRunnerService_Logout_Input_policy" />
+        <soap12:body use="literal" />
+      </wsdl:input>
+    </wsdl:operation>
+  </wsdl:binding>
+  <wsdl:service name="RunnerService">
+    <wsdl:port name="NetTcpBinding_IRunnerService" binding="tns:NetTcpBinding_IRunnerService">
+      <soap12:address location="net.tcp://localhost:8733/OKB-3.3/RunnerService" />
+      <wsa10:EndpointReference>
+        <wsa10:Address>net.tcp://localhost:8733/OKB-3.3/RunnerService</wsa10:Address>
+        <Identity xmlns="http://schemas.xmlsoap.org/ws/2006/02/addressingidentity">
+          <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
+            <X509Data>
+              <X509Certificate>MIIB7jCCAVugAwIBAgIQHRM04rGn9rBGca6mGX2LQjAJBgUrDgMCHQUAMBQxEjAQBgNVBAMTCWxvY2FsaG9zdDAeFw0xMDA4MjAyMjMyMDhaFw0zOTEyMzEyMzU5NTlaMBQxEjAQBgNVBAMTCWxvY2FsaG9zdDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAz5Hwki0V/P+BfmeMrON8meDDM4weOHDGpD8+Da4vphAeZ9s/9BhWrQmM5CNn/554lqlawWIx5I7GcthGYqB7uMGvfXNVxBiZxTQ7jZ+hEpHxMochePjqihp6SvRza8OzljLqp9qDodIhXfX5ehUwJvmNKdyz/t/AbmM6Qp4qqncCAwEAAaNJMEcwRQYDVR0BBD4wPIAQ74vEYIqPb/pq+fE4gL6heaEWMBQxEjAQBgNVBAMTCWxvY2FsaG9zdIIQHRM04rGn9rBGca6mGX2LQjAJBgUrDgMCHQUAA4GBADXRpbxynlKbXzbvSNMIAOao5lQfiQ5XTgJK3zNEfuCHFUNOsuSuz9O7sUAFe/q4Zwy4C8hSbp1B4M2347Ixcu748LaInlwOY9AGJZuAB0e3R7eB1YJCDGLfFzgqjMOY4xV/dcSfPbQu5jPc2EePDfU+UEnjBqPn/ic8m3i1sZzb</X509Certificate>
+            </X509Data>
+          </KeyInfo>
+        </Identity>
+      </wsa10:EndpointReference>
+    </wsdl:port>
+  </wsdl:service>
+</wsdl:definitions>
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Service References/OKBRunner/service.xsd
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Service References/OKBRunner/service.xsd	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Service References/OKBRunner/service.xsd	(revision 5296)
@@ -0,0 +1,79 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:tns="http://tempuri.org/" elementFormDefault="qualified" targetNamespace="http://tempuri.org/" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:import namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB" />
+  <xs:import namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataAccess" />
+  <xs:element name="Login">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="clientname" nillable="true" type="xs:string" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="LoginResponse">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="LoginResult" type="xs:boolean" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="GetStarterKit">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="platformName" nillable="true" type="xs:string" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="GetStarterKitResponse">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q1="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB" minOccurs="0" name="GetStarterKitResult" nillable="true" type="q1:StarterKit" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="PrepareExperiment">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q2="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataAccess" minOccurs="0" name="algorithm" nillable="true" type="q2:Algorithm" />
+        <xs:element xmlns:q3="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataAccess" minOccurs="0" name="problem" nillable="true" type="q3:Problem" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="PrepareExperimentResponse">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q4="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB" minOccurs="0" name="PrepareExperimentResult" nillable="true" type="q4:ExperimentKit" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="AddRun">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q5="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataAccess" minOccurs="0" name="algorithm" nillable="true" type="q5:Algorithm" />
+        <xs:element xmlns:q6="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataAccess" minOccurs="0" name="problem" nillable="true" type="q6:Problem" />
+        <xs:element xmlns:q7="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataAccess" minOccurs="0" name="project" nillable="true" type="q7:Project" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="AddRunResponse">
+    <xs:complexType>
+      <xs:sequence />
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="IsConnected">
+    <xs:complexType>
+      <xs:sequence />
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="IsConnectedResponse">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="IsConnectedResult" type="xs:boolean" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="Logout">
+    <xs:complexType>
+      <xs:sequence />
+    </xs:complexType>
+  </xs:element>
+</xs:schema>
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Service References/OKBRunner/service1.xsd
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Service References/OKBRunner/service1.xsd	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Service References/OKBRunner/service1.xsd	(revision 5296)
@@ -0,0 +1,42 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:tns="http://schemas.microsoft.com/2003/10/Serialization/" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://schemas.microsoft.com/2003/10/Serialization/" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:element name="anyType" nillable="true" type="xs:anyType" />
+  <xs:element name="anyURI" nillable="true" type="xs:anyURI" />
+  <xs:element name="base64Binary" nillable="true" type="xs:base64Binary" />
+  <xs:element name="boolean" nillable="true" type="xs:boolean" />
+  <xs:element name="byte" nillable="true" type="xs:byte" />
+  <xs:element name="dateTime" nillable="true" type="xs:dateTime" />
+  <xs:element name="decimal" nillable="true" type="xs:decimal" />
+  <xs:element name="double" nillable="true" type="xs:double" />
+  <xs:element name="float" nillable="true" type="xs:float" />
+  <xs:element name="int" nillable="true" type="xs:int" />
+  <xs:element name="long" nillable="true" type="xs:long" />
+  <xs:element name="QName" nillable="true" type="xs:QName" />
+  <xs:element name="short" nillable="true" type="xs:short" />
+  <xs:element name="string" nillable="true" type="xs:string" />
+  <xs:element name="unsignedByte" nillable="true" type="xs:unsignedByte" />
+  <xs:element name="unsignedInt" nillable="true" type="xs:unsignedInt" />
+  <xs:element name="unsignedLong" nillable="true" type="xs:unsignedLong" />
+  <xs:element name="unsignedShort" nillable="true" type="xs:unsignedShort" />
+  <xs:element name="char" nillable="true" type="tns:char" />
+  <xs:simpleType name="char">
+    <xs:restriction base="xs:int" />
+  </xs:simpleType>
+  <xs:element name="duration" nillable="true" type="tns:duration" />
+  <xs:simpleType name="duration">
+    <xs:restriction base="xs:duration">
+      <xs:pattern value="\-?P(\d*D)?(T(\d*H)?(\d*M)?(\d*(\.\d*)?S)?)?" />
+      <xs:minInclusive value="-P10675199DT2H48M5.4775808S" />
+      <xs:maxInclusive value="P10675199DT2H48M5.4775807S" />
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:element name="guid" nillable="true" type="tns:guid" />
+  <xs:simpleType name="guid">
+    <xs:restriction base="xs:string">
+      <xs:pattern value="[\da-fA-F]{8}-[\da-fA-F]{4}-[\da-fA-F]{4}-[\da-fA-F]{4}-[\da-fA-F]{12}" />
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:attribute name="FactoryType" type="xs:QName" />
+  <xs:attribute name="Id" type="xs:ID" />
+  <xs:attribute name="Ref" type="xs:IDREF" />
+</xs:schema>
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Service References/OKBTables/Arrays.xsd
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Service References/OKBTables/Arrays.xsd	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Service References/OKBTables/Arrays.xsd	(revision 5296)
@@ -0,0 +1,9 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:tns="http://schemas.microsoft.com/2003/10/Serialization/Arrays" elementFormDefault="qualified" targetNamespace="http://schemas.microsoft.com/2003/10/Serialization/Arrays" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:complexType name="ArrayOfint">
+    <xs:sequence>
+      <xs:element minOccurs="0" maxOccurs="unbounded" name="int" type="xs:int" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="ArrayOfint" nillable="true" type="tns:ArrayOfint" />
+</xs:schema>
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Service References/OKBTables/Reference.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Service References/OKBTables/Reference.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Service References/OKBTables/Reference.cs	(revision 5296)
@@ -0,0 +1,81 @@
+﻿//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.1
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HeuristicLab.OKB.AlgorithmHost.OKBTables {
+    
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+    [System.ServiceModel.ServiceContractAttribute(ConfigurationName="OKBTables.ITableService", SessionMode=System.ServiceModel.SessionMode.Required)]
+    public interface ITableService {
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/ITableService/PrepareDataTable", ReplyAction="http://tempuri.org/ITableService/PrepareDataTableResponse")]
+        System.Data.DataTable PrepareDataTable(out int count, string tableName);
+        
+        [System.ServiceModel.OperationContractAttribute(IsInitiating=false, Action="http://tempuri.org/ITableService/GetNextRows", ReplyAction="http://tempuri.org/ITableService/GetNextRowsResponse")]
+        System.Data.DataTable GetNextRows(int count);
+        
+        [System.ServiceModel.OperationContractAttribute(IsTerminating=true, Action="http://tempuri.org/ITableService/FinishFetchingRows", ReplyAction="http://tempuri.org/ITableService/FinishFetchingRowsResponse")]
+        void FinishFetchingRows();
+        
+        [System.ServiceModel.OperationContractAttribute(IsTerminating=true, Action="http://tempuri.org/ITableService/UpdateDataTable", ReplyAction="http://tempuri.org/ITableService/UpdateDataTableResponse")]
+        void UpdateDataTable(System.Data.DataTable changedRows, string tableName);
+        
+        [System.ServiceModel.OperationContractAttribute(IsTerminating=true, Action="http://tempuri.org/ITableService/DeleteTableRows", ReplyAction="http://tempuri.org/ITableService/DeleteTableRowsResponse")]
+        void DeleteTableRows(System.Collections.Generic.List<int> ids, string tableName);
+    }
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+    public interface ITableServiceChannel : HeuristicLab.OKB.AlgorithmHost.OKBTables.ITableService, System.ServiceModel.IClientChannel {
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+    public partial class TableServiceClient : System.ServiceModel.ClientBase<HeuristicLab.OKB.AlgorithmHost.OKBTables.ITableService>, HeuristicLab.OKB.AlgorithmHost.OKBTables.ITableService {
+        
+        public TableServiceClient() {
+        }
+        
+        public TableServiceClient(string endpointConfigurationName) : 
+                base(endpointConfigurationName) {
+        }
+        
+        public TableServiceClient(string endpointConfigurationName, string remoteAddress) : 
+                base(endpointConfigurationName, remoteAddress) {
+        }
+        
+        public TableServiceClient(string endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) : 
+                base(endpointConfigurationName, remoteAddress) {
+        }
+        
+        public TableServiceClient(System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress) : 
+                base(binding, remoteAddress) {
+        }
+        
+        public System.Data.DataTable PrepareDataTable(out int count, string tableName) {
+            return base.Channel.PrepareDataTable(out count, tableName);
+        }
+        
+        public System.Data.DataTable GetNextRows(int count) {
+            return base.Channel.GetNextRows(count);
+        }
+        
+        public void FinishFetchingRows() {
+            base.Channel.FinishFetchingRows();
+        }
+        
+        public void UpdateDataTable(System.Data.DataTable changedRows, string tableName) {
+            base.Channel.UpdateDataTable(changedRows, tableName);
+        }
+        
+        public void DeleteTableRows(System.Collections.Generic.List<int> ids, string tableName) {
+            base.Channel.DeleteTableRows(ids, tableName);
+        }
+    }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Service References/OKBTables/Reference.svcmap
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Service References/OKBTables/Reference.svcmap	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Service References/OKBTables/Reference.svcmap	(revision 5296)
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<ReferenceGroup xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" ID="249d48db-9a4a-4eb5-a4fd-07e29f0967ed" xmlns="urn:schemas-microsoft-com:xml-wcfservicemap">
+  <ClientOptions>
+    <GenerateAsynchronousMethods>false</GenerateAsynchronousMethods>
+    <EnableDataBinding>true</EnableDataBinding>
+    <ExcludedTypes />
+    <ImportXmlTypes>false</ImportXmlTypes>
+    <GenerateInternalTypes>false</GenerateInternalTypes>
+    <GenerateMessageContracts>false</GenerateMessageContracts>
+    <NamespaceMappings />
+    <CollectionMappings>
+      <CollectionMapping TypeName="System.Collections.Generic.List`1" Category="List" />
+    </CollectionMappings>
+    <GenerateSerializableTypes>true</GenerateSerializableTypes>
+    <Serializer>Auto</Serializer>
+    <UseSerializerForFaults>true</UseSerializerForFaults>
+    <ReferenceAllAssemblies>true</ReferenceAllAssemblies>
+    <ReferencedAssemblies />
+    <ReferencedDataContractTypes />
+    <ServiceContractMappings />
+  </ClientOptions>
+  <MetadataSources>
+    <MetadataSource Address="http://localhost:8732/Design_Time_Addresses/OKB-3.3/TableService/mex" Protocol="mex" SourceId="1" />
+  </MetadataSources>
+  <Metadata>
+    <MetadataFile FileName="service.wsdl" MetadataType="Wsdl" ID="7500dc21-48a8-430d-91ef-f976a952559a" SourceId="1" SourceUrl="http://localhost:8732/Design_Time_Addresses/OKB-3.3/TableService/mex" />
+    <MetadataFile FileName="service.xsd" MetadataType="Schema" ID="b1f8c2e3-62db-4cb9-a053-749f416d41c6" SourceId="1" SourceUrl="http://localhost:8732/Design_Time_Addresses/OKB-3.3/TableService/mex" />
+    <MetadataFile FileName="service1.xsd" MetadataType="Schema" ID="5bb96bac-e5a9-4f60-9dbc-799d196d272e" SourceId="1" SourceUrl="http://localhost:8732/Design_Time_Addresses/OKB-3.3/TableService/mex" />
+    <MetadataFile FileName="System.Data.xsd" MetadataType="Schema" ID="729cfa4e-b7a0-41d8-8928-9e90a2ae2caf" SourceId="1" SourceUrl="http://localhost:8732/Design_Time_Addresses/OKB-3.3/TableService/mex" />
+    <MetadataFile FileName="Arrays.xsd" MetadataType="Schema" ID="a44479b4-3045-4fb0-952b-d9ef85c403ae" SourceId="1" SourceUrl="http://localhost:8732/Design_Time_Addresses/OKB-3.3/TableService/mex" />
+  </Metadata>
+  <Extensions>
+    <ExtensionFile FileName="configuration91.svcinfo" Name="configuration91.svcinfo" />
+    <ExtensionFile FileName="configuration.svcinfo" Name="configuration.svcinfo" />
+  </Extensions>
+</ReferenceGroup>
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Service References/OKBTables/System.Data.xsd
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Service References/OKBTables/System.Data.xsd	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Service References/OKBTables/System.Data.xsd	(revision 5296)
@@ -0,0 +1,16 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:tns="http://schemas.datacontract.org/2004/07/System.Data" elementFormDefault="qualified" targetNamespace="http://schemas.datacontract.org/2004/07/System.Data" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:element name="DataTable" nillable="true">
+    <xs:complexType>
+      <xs:annotation>
+        <xs:appinfo>
+          <ActualType Name="DataTable" Namespace="http://schemas.datacontract.org/2004/07/System.Data" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+        </xs:appinfo>
+      </xs:annotation>
+      <xs:sequence>
+        <xs:any minOccurs="0" maxOccurs="unbounded" namespace="http://www.w3.org/2001/XMLSchema" processContents="lax" />
+        <xs:any minOccurs="1" namespace="urn:schemas-microsoft-com:xml-diffgram-v1" processContents="lax" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+</xs:schema>
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Service References/OKBTables/configuration.svcinfo
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Service References/OKBTables/configuration.svcinfo	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Service References/OKBTables/configuration.svcinfo	(revision 5296)
@@ -0,0 +1,10 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<configurationSnapshot xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="urn:schemas-microsoft-com:xml-wcfconfigurationsnapshot">
+  <behaviors />
+  <bindings>
+    <binding digest="System.ServiceModel.Configuration.NetTcpBindingElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089:&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-16&quot;?&gt;&lt;Data hostNameComparisonMode=&quot;StrongWildcard&quot; listenBacklog=&quot;10&quot; maxBufferSize=&quot;65536&quot; maxConnections=&quot;10&quot; name=&quot;NetTcpBinding_ITableService&quot; transactionFlow=&quot;false&quot; transactionProtocol=&quot;OleTransactions&quot; transferMode=&quot;Buffered&quot;&gt;&lt;readerQuotas maxArrayLength=&quot;16384&quot; maxBytesPerRead=&quot;4096&quot; maxDepth=&quot;32&quot; maxNameTableCharCount=&quot;16384&quot; maxStringContentLength=&quot;8192&quot; /&gt;&lt;reliableSession enabled=&quot;false&quot; inactivityTimeout=&quot;00:10:00&quot; ordered=&quot;true&quot; /&gt;&lt;security mode=&quot;Message&quot;&gt;&lt;message algorithmSuite=&quot;Default&quot; clientCredentialType=&quot;UserName&quot; /&gt;&lt;transport clientCredentialType=&quot;Windows&quot; protectionLevel=&quot;EncryptAndSign&quot; /&gt;&lt;/security&gt;&lt;/Data&gt;" bindingType="netTcpBinding" name="NetTcpBinding_ITableService" />
+  </bindings>
+  <endpoints>
+    <endpoint normalizedDigest="&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-16&quot;?&gt;&lt;Data address=&quot;net.tcp://localhost:8733/OKB-3.3/TableService&quot; binding=&quot;netTcpBinding&quot; bindingConfiguration=&quot;NetTcpBinding_ITableService&quot; contract=&quot;OKBTables.ITableService&quot; name=&quot;NetTcpBinding_ITableService&quot;&gt;&lt;identity&gt;&lt;certificate encodedValue=&quot;AwAAAAEAAAAUAAAAD/AlkYJw/OUhl6D/9w8mjJBh39kgAAAAAQAAAPIBAAAwggHuMIIBW6ADAgECAhAdEzTisaf2sEZxrqYZfYtCMAkGBSsOAwIdBQAwFDESMBAGA1UEAxMJbG9jYWxob3N0MB4XDTEwMDgyMDIyMzIwOFoXDTM5MTIzMTIzNTk1OVowFDESMBAGA1UEAxMJbG9jYWxob3N0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDPkfCSLRX8/4F+Z4ys43yZ4MMzjB44cMakPz4Nri+mEB5n2z/0GFatCYzkI2f/nniWqVrBYjHkjsZy2EZioHu4wa99c1XEGJnFNDuNn6ESkfEyhyF4+OqKGnpK9HNrw7OWMuqn2oOh0iFd9fl6FTAm+Y0p3LP+38BuYzpCniqqdwIDAQABo0kwRzBFBgNVHQEEPjA8gBDvi8Rgio9v+mr58TiAvqF5oRYwFDESMBAGA1UEAxMJbG9jYWxob3N0ghAdEzTisaf2sEZxrqYZfYtCMAkGBSsOAwIdBQADgYEANdGlvHKeUptfNu9I0wgA5qjmVB+JDldOAkrfM0R+4IcVQ06y5K7P07uxQAV7+rhnDLgLyFJunUHgzbfjsjFy7vjwtoieXA5j0AYlm4AHR7dHt4HVgkIMYt8XOCqMw5jjFX91xJ89tC7mM9zYR48N9T5QSeMGo+f+JzybeLWxnNs=&quot; /&gt;&lt;/identity&gt;&lt;/Data&gt;" digest="&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-16&quot;?&gt;&lt;Data address=&quot;net.tcp://localhost:8733/OKB-3.3/TableService&quot; binding=&quot;netTcpBinding&quot; bindingConfiguration=&quot;NetTcpBinding_ITableService&quot; contract=&quot;OKBTables.ITableService&quot; name=&quot;NetTcpBinding_ITableService&quot;&gt;&lt;identity&gt;&lt;certificate encodedValue=&quot;AwAAAAEAAAAUAAAAD/AlkYJw/OUhl6D/9w8mjJBh39kgAAAAAQAAAPIBAAAwggHuMIIBW6ADAgECAhAdEzTisaf2sEZxrqYZfYtCMAkGBSsOAwIdBQAwFDESMBAGA1UEAxMJbG9jYWxob3N0MB4XDTEwMDgyMDIyMzIwOFoXDTM5MTIzMTIzNTk1OVowFDESMBAGA1UEAxMJbG9jYWxob3N0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDPkfCSLRX8/4F+Z4ys43yZ4MMzjB44cMakPz4Nri+mEB5n2z/0GFatCYzkI2f/nniWqVrBYjHkjsZy2EZioHu4wa99c1XEGJnFNDuNn6ESkfEyhyF4+OqKGnpK9HNrw7OWMuqn2oOh0iFd9fl6FTAm+Y0p3LP+38BuYzpCniqqdwIDAQABo0kwRzBFBgNVHQEEPjA8gBDvi8Rgio9v+mr58TiAvqF5oRYwFDESMBAGA1UEAxMJbG9jYWxob3N0ghAdEzTisaf2sEZxrqYZfYtCMAkGBSsOAwIdBQADgYEANdGlvHKeUptfNu9I0wgA5qjmVB+JDldOAkrfM0R+4IcVQ06y5K7P07uxQAV7+rhnDLgLyFJunUHgzbfjsjFy7vjwtoieXA5j0AYlm4AHR7dHt4HVgkIMYt8XOCqMw5jjFX91xJ89tC7mM9zYR48N9T5QSeMGo+f+JzybeLWxnNs=&quot; /&gt;&lt;/identity&gt;&lt;/Data&gt;" contractName="OKBTables.ITableService" name="NetTcpBinding_ITableService" />
+  </endpoints>
+</configurationSnapshot>
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Service References/OKBTables/configuration91.svcinfo
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Service References/OKBTables/configuration91.svcinfo	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Service References/OKBTables/configuration91.svcinfo	(revision 5296)
@@ -0,0 +1,207 @@
+<?xml version="1.0" encoding="utf-8"?>
+<SavedWcfConfigurationInformation xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Version="9.1" CheckSum="XZJ2kMATj2R2CEJcMgHRBlAmMjQ=">
+  <bindingConfigurations>
+    <bindingConfiguration bindingType="netTcpBinding" name="NetTcpBinding_ITableService">
+      <properties>
+        <property path="/name" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>NetTcpBinding_ITableService</serializedValue>
+        </property>
+        <property path="/closeTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>00:01:00</serializedValue>
+        </property>
+        <property path="/openTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>00:01:00</serializedValue>
+        </property>
+        <property path="/receiveTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>00:10:00</serializedValue>
+        </property>
+        <property path="/sendTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>00:01:00</serializedValue>
+        </property>
+        <property path="/transactionFlow" isComplexType="false" isExplicitlyDefined="true" clrType="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>False</serializedValue>
+        </property>
+        <property path="/transferMode" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.TransferMode, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>Buffered</serializedValue>
+        </property>
+        <property path="/transactionProtocol" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.TransactionProtocol, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>OleTransactions</serializedValue>
+        </property>
+        <property path="/hostNameComparisonMode" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.HostNameComparisonMode, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>StrongWildcard</serializedValue>
+        </property>
+        <property path="/listenBacklog" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>10</serializedValue>
+        </property>
+        <property path="/maxBufferPoolSize" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int64, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>524288</serializedValue>
+        </property>
+        <property path="/maxBufferSize" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>65536</serializedValue>
+        </property>
+        <property path="/maxConnections" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>10</serializedValue>
+        </property>
+        <property path="/maxReceivedMessageSize" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int64, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>65536</serializedValue>
+        </property>
+        <property path="/portSharingEnabled" isComplexType="false" isExplicitlyDefined="false" clrType="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>False</serializedValue>
+        </property>
+        <property path="/readerQuotas" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.XmlDictionaryReaderQuotasElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.XmlDictionaryReaderQuotasElement</serializedValue>
+        </property>
+        <property path="/readerQuotas/maxDepth" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>32</serializedValue>
+        </property>
+        <property path="/readerQuotas/maxStringContentLength" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>8192</serializedValue>
+        </property>
+        <property path="/readerQuotas/maxArrayLength" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>16384</serializedValue>
+        </property>
+        <property path="/readerQuotas/maxBytesPerRead" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>4096</serializedValue>
+        </property>
+        <property path="/readerQuotas/maxNameTableCharCount" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>16384</serializedValue>
+        </property>
+        <property path="/reliableSession" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.StandardBindingOptionalReliableSessionElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.StandardBindingOptionalReliableSessionElement</serializedValue>
+        </property>
+        <property path="/reliableSession/ordered" isComplexType="false" isExplicitlyDefined="true" clrType="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>True</serializedValue>
+        </property>
+        <property path="/reliableSession/inactivityTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>00:10:00</serializedValue>
+        </property>
+        <property path="/reliableSession/enabled" isComplexType="false" isExplicitlyDefined="true" clrType="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>False</serializedValue>
+        </property>
+        <property path="/security" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.NetTcpSecurityElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.NetTcpSecurityElement</serializedValue>
+        </property>
+        <property path="/security/mode" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.SecurityMode, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>Message</serializedValue>
+        </property>
+        <property path="/security/transport" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.TcpTransportSecurityElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.TcpTransportSecurityElement</serializedValue>
+        </property>
+        <property path="/security/transport/clientCredentialType" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.TcpClientCredentialType, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>Windows</serializedValue>
+        </property>
+        <property path="/security/transport/protectionLevel" isComplexType="false" isExplicitlyDefined="true" clrType="System.Net.Security.ProtectionLevel, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>EncryptAndSign</serializedValue>
+        </property>
+        <property path="/security/transport/extendedProtectionPolicy" isComplexType="true" isExplicitlyDefined="false" clrType="System.Security.Authentication.ExtendedProtection.Configuration.ExtendedProtectionPolicyElement, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.Security.Authentication.ExtendedProtection.Configuration.ExtendedProtectionPolicyElement</serializedValue>
+        </property>
+        <property path="/security/transport/extendedProtectionPolicy/policyEnforcement" isComplexType="false" isExplicitlyDefined="false" clrType="System.Security.Authentication.ExtendedProtection.PolicyEnforcement, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>Never</serializedValue>
+        </property>
+        <property path="/security/transport/extendedProtectionPolicy/protectionScenario" isComplexType="false" isExplicitlyDefined="false" clrType="System.Security.Authentication.ExtendedProtection.ProtectionScenario, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>TransportSelected</serializedValue>
+        </property>
+        <property path="/security/transport/extendedProtectionPolicy/customServiceNames" isComplexType="true" isExplicitlyDefined="false" clrType="System.Security.Authentication.ExtendedProtection.Configuration.ServiceNameElementCollection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>(Collection)</serializedValue>
+        </property>
+        <property path="/security/message" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.MessageSecurityOverTcpElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.MessageSecurityOverTcpElement</serializedValue>
+        </property>
+        <property path="/security/message/clientCredentialType" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.MessageCredentialType, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>UserName</serializedValue>
+        </property>
+        <property path="/security/message/algorithmSuite" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.Security.SecurityAlgorithmSuite, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>Default</serializedValue>
+        </property>
+      </properties>
+    </bindingConfiguration>
+  </bindingConfigurations>
+  <endpoints>
+    <endpoint name="NetTcpBinding_ITableService" contract="OKBTables.ITableService" bindingType="netTcpBinding" address="net.tcp://localhost:8733/OKB-3.3/TableService" bindingConfiguration="NetTcpBinding_ITableService">
+      <properties>
+        <property path="/address" isComplexType="false" isExplicitlyDefined="true" clrType="System.Uri, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>net.tcp://localhost:8733/OKB-3.3/TableService</serializedValue>
+        </property>
+        <property path="/behaviorConfiguration" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/binding" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>netTcpBinding</serializedValue>
+        </property>
+        <property path="/bindingConfiguration" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>NetTcpBinding_ITableService</serializedValue>
+        </property>
+        <property path="/contract" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>OKBTables.ITableService</serializedValue>
+        </property>
+        <property path="/headers" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.AddressHeaderCollectionElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.AddressHeaderCollectionElement</serializedValue>
+        </property>
+        <property path="/headers/headers" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.Channels.AddressHeaderCollection, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>&lt;Header /&gt;</serializedValue>
+        </property>
+        <property path="/identity" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.IdentityElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.IdentityElement</serializedValue>
+        </property>
+        <property path="/identity/userPrincipalName" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.UserPrincipalNameElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.UserPrincipalNameElement</serializedValue>
+        </property>
+        <property path="/identity/userPrincipalName/value" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/servicePrincipalName" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.ServicePrincipalNameElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.ServicePrincipalNameElement</serializedValue>
+        </property>
+        <property path="/identity/servicePrincipalName/value" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/dns" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.DnsElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.DnsElement</serializedValue>
+        </property>
+        <property path="/identity/dns/value" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/rsa" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.RsaElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.RsaElement</serializedValue>
+        </property>
+        <property path="/identity/rsa/value" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/certificate" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.CertificateElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.CertificateElement</serializedValue>
+        </property>
+        <property path="/identity/certificate/encodedValue" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>AwAAAAEAAAAUAAAAD/AlkYJw/OUhl6D/9w8mjJBh39kgAAAAAQAAAPIBAAAwggHuMIIBW6ADAgECAhAdEzTisaf2sEZxrqYZfYtCMAkGBSsOAwIdBQAwFDESMBAGA1UEAxMJbG9jYWxob3N0MB4XDTEwMDgyMDIyMzIwOFoXDTM5MTIzMTIzNTk1OVowFDESMBAGA1UEAxMJbG9jYWxob3N0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDPkfCSLRX8/4F+Z4ys43yZ4MMzjB44cMakPz4Nri+mEB5n2z/0GFatCYzkI2f/nniWqVrBYjHkjsZy2EZioHu4wa99c1XEGJnFNDuNn6ESkfEyhyF4+OqKGnpK9HNrw7OWMuqn2oOh0iFd9fl6FTAm+Y0p3LP+38BuYzpCniqqdwIDAQABo0kwRzBFBgNVHQEEPjA8gBDvi8Rgio9v+mr58TiAvqF5oRYwFDESMBAGA1UEAxMJbG9jYWxob3N0ghAdEzTisaf2sEZxrqYZfYtCMAkGBSsOAwIdBQADgYEANdGlvHKeUptfNu9I0wgA5qjmVB+JDldOAkrfM0R+4IcVQ06y5K7P07uxQAV7+rhnDLgLyFJunUHgzbfjsjFy7vjwtoieXA5j0AYlm4AHR7dHt4HVgkIMYt8XOCqMw5jjFX91xJ89tC7mM9zYR48N9T5QSeMGo+f+JzybeLWxnNs=</serializedValue>
+        </property>
+        <property path="/identity/certificateReference" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.CertificateReferenceElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.CertificateReferenceElement</serializedValue>
+        </property>
+        <property path="/identity/certificateReference/storeName" isComplexType="false" isExplicitlyDefined="false" clrType="System.Security.Cryptography.X509Certificates.StoreName, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>My</serializedValue>
+        </property>
+        <property path="/identity/certificateReference/storeLocation" isComplexType="false" isExplicitlyDefined="false" clrType="System.Security.Cryptography.X509Certificates.StoreLocation, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>LocalMachine</serializedValue>
+        </property>
+        <property path="/identity/certificateReference/x509FindType" isComplexType="false" isExplicitlyDefined="false" clrType="System.Security.Cryptography.X509Certificates.X509FindType, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>FindBySubjectDistinguishedName</serializedValue>
+        </property>
+        <property path="/identity/certificateReference/findValue" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/certificateReference/isChainIncluded" isComplexType="false" isExplicitlyDefined="false" clrType="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>False</serializedValue>
+        </property>
+        <property path="/name" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>NetTcpBinding_ITableService</serializedValue>
+        </property>
+        <property path="/kind" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/endpointConfiguration" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+      </properties>
+    </endpoint>
+  </endpoints>
+</SavedWcfConfigurationInformation>
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Service References/OKBTables/service.wsdl
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Service References/OKBTables/service.wsdl	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Service References/OKBTables/service.wsdl	(revision 5296)
@@ -0,0 +1,433 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<wsdl:definitions xmlns:wsap="http://schemas.xmlsoap.org/ws/2004/08/addressing/policy" xmlns:wsa10="http://www.w3.org/2005/08/addressing" xmlns:tns="http://tempuri.org/" xmlns:msc="http://schemas.microsoft.com/ws/2005/12/wsdl/contract" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="TableService" targetNamespace="http://tempuri.org/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
+  <wsp:Policy wsu:Id="NetTcpBinding_ITableService_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SymmetricBinding xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <wsp:Policy>
+            <sp:ProtectionToken>
+              <wsp:Policy>
+                <sp:SecureConversationToken sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient">
+                  <wsp:Policy>
+                    <sp:RequireDerivedKeys />
+                    <sp:BootstrapPolicy>
+                      <wsp:Policy>
+                        <sp:SignedParts>
+                          <sp:Body />
+                          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+                          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+                          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+                          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+                          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+                          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+                          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+                        </sp:SignedParts>
+                        <sp:EncryptedParts>
+                          <sp:Body />
+                        </sp:EncryptedParts>
+                        <sp:SymmetricBinding>
+                          <wsp:Policy>
+                            <sp:ProtectionToken>
+                              <wsp:Policy>
+                                <mssp:SslContextToken sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient" xmlns:mssp="http://schemas.microsoft.com/ws/2005/07/securitypolicy">
+                                  <wsp:Policy>
+                                    <sp:RequireDerivedKeys />
+                                  </wsp:Policy>
+                                </mssp:SslContextToken>
+                              </wsp:Policy>
+                            </sp:ProtectionToken>
+                            <sp:AlgorithmSuite>
+                              <wsp:Policy>
+                                <sp:Basic256 />
+                              </wsp:Policy>
+                            </sp:AlgorithmSuite>
+                            <sp:Layout>
+                              <wsp:Policy>
+                                <sp:Strict />
+                              </wsp:Policy>
+                            </sp:Layout>
+                            <sp:IncludeTimestamp />
+                            <sp:EncryptSignature />
+                            <sp:OnlySignEntireHeadersAndBody />
+                          </wsp:Policy>
+                        </sp:SymmetricBinding>
+                        <sp:SignedSupportingTokens>
+                          <wsp:Policy>
+                            <sp:UsernameToken sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient">
+                              <wsp:Policy>
+                                <sp:WssUsernameToken10 />
+                              </wsp:Policy>
+                            </sp:UsernameToken>
+                          </wsp:Policy>
+                        </sp:SignedSupportingTokens>
+                        <sp:Wss11>
+                          <wsp:Policy />
+                        </sp:Wss11>
+                        <sp:Trust10>
+                          <wsp:Policy>
+                            <sp:MustSupportIssuedTokens />
+                            <sp:RequireClientEntropy />
+                            <sp:RequireServerEntropy />
+                          </wsp:Policy>
+                        </sp:Trust10>
+                      </wsp:Policy>
+                    </sp:BootstrapPolicy>
+                  </wsp:Policy>
+                </sp:SecureConversationToken>
+              </wsp:Policy>
+            </sp:ProtectionToken>
+            <sp:AlgorithmSuite>
+              <wsp:Policy>
+                <sp:Basic256 />
+              </wsp:Policy>
+            </sp:AlgorithmSuite>
+            <sp:Layout>
+              <wsp:Policy>
+                <sp:Strict />
+              </wsp:Policy>
+            </sp:Layout>
+            <sp:IncludeTimestamp />
+            <sp:EncryptSignature />
+            <sp:OnlySignEntireHeadersAndBody />
+          </wsp:Policy>
+        </sp:SymmetricBinding>
+        <sp:Wss11 xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <wsp:Policy />
+        </sp:Wss11>
+        <sp:Trust10 xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <wsp:Policy>
+            <sp:MustSupportIssuedTokens />
+            <sp:RequireClientEntropy />
+            <sp:RequireServerEntropy />
+          </wsp:Policy>
+        </sp:Trust10>
+        <msb:BinaryEncoding xmlns:msb="http://schemas.microsoft.com/ws/06/2004/mspolicy/netbinary1" />
+        <wsaw:UsingAddressing />
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="NetTcpBinding_ITableService_PrepareDataTable_Input_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="NetTcpBinding_ITableService_PrepareDataTable_output_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="NetTcpBinding_ITableService_GetNextRows_Input_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="NetTcpBinding_ITableService_GetNextRows_output_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="NetTcpBinding_ITableService_FinishFetchingRows_Input_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="NetTcpBinding_ITableService_FinishFetchingRows_output_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="NetTcpBinding_ITableService_UpdateDataTable_Input_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="NetTcpBinding_ITableService_UpdateDataTable_output_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="NetTcpBinding_ITableService_DeleteTableRows_Input_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="NetTcpBinding_ITableService_DeleteTableRows_output_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsdl:types>
+    <xsd:schema targetNamespace="http://tempuri.org/Imports">
+      <xsd:import namespace="http://tempuri.org/" />
+      <xsd:import namespace="http://schemas.microsoft.com/2003/10/Serialization/" />
+      <xsd:import namespace="http://schemas.datacontract.org/2004/07/System.Data" />
+      <xsd:import namespace="http://schemas.microsoft.com/2003/10/Serialization/Arrays" />
+    </xsd:schema>
+  </wsdl:types>
+  <wsdl:message name="ITableService_PrepareDataTable_InputMessage">
+    <wsdl:part name="parameters" element="tns:PrepareDataTable" />
+  </wsdl:message>
+  <wsdl:message name="ITableService_PrepareDataTable_OutputMessage">
+    <wsdl:part name="parameters" element="tns:PrepareDataTableResponse" />
+  </wsdl:message>
+  <wsdl:message name="ITableService_GetNextRows_InputMessage">
+    <wsdl:part name="parameters" element="tns:GetNextRows" />
+  </wsdl:message>
+  <wsdl:message name="ITableService_GetNextRows_OutputMessage">
+    <wsdl:part name="parameters" element="tns:GetNextRowsResponse" />
+  </wsdl:message>
+  <wsdl:message name="ITableService_FinishFetchingRows_InputMessage">
+    <wsdl:part name="parameters" element="tns:FinishFetchingRows" />
+  </wsdl:message>
+  <wsdl:message name="ITableService_FinishFetchingRows_OutputMessage">
+    <wsdl:part name="parameters" element="tns:FinishFetchingRowsResponse" />
+  </wsdl:message>
+  <wsdl:message name="ITableService_UpdateDataTable_InputMessage">
+    <wsdl:part name="parameters" element="tns:UpdateDataTable" />
+  </wsdl:message>
+  <wsdl:message name="ITableService_UpdateDataTable_OutputMessage">
+    <wsdl:part name="parameters" element="tns:UpdateDataTableResponse" />
+  </wsdl:message>
+  <wsdl:message name="ITableService_DeleteTableRows_InputMessage">
+    <wsdl:part name="parameters" element="tns:DeleteTableRows" />
+  </wsdl:message>
+  <wsdl:message name="ITableService_DeleteTableRows_OutputMessage">
+    <wsdl:part name="parameters" element="tns:DeleteTableRowsResponse" />
+  </wsdl:message>
+  <wsdl:portType msc:usingSession="true" name="ITableService">
+    <wsdl:operation msc:isInitiating="true" msc:isTerminating="false" name="PrepareDataTable">
+      <wsdl:input wsaw:Action="http://tempuri.org/ITableService/PrepareDataTable" message="tns:ITableService_PrepareDataTable_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/ITableService/PrepareDataTableResponse" message="tns:ITableService_PrepareDataTable_OutputMessage" />
+    </wsdl:operation>
+    <wsdl:operation msc:isInitiating="false" msc:isTerminating="false" name="GetNextRows">
+      <wsdl:input wsaw:Action="http://tempuri.org/ITableService/GetNextRows" message="tns:ITableService_GetNextRows_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/ITableService/GetNextRowsResponse" message="tns:ITableService_GetNextRows_OutputMessage" />
+    </wsdl:operation>
+    <wsdl:operation msc:isInitiating="true" msc:isTerminating="true" name="FinishFetchingRows">
+      <wsdl:input wsaw:Action="http://tempuri.org/ITableService/FinishFetchingRows" message="tns:ITableService_FinishFetchingRows_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/ITableService/FinishFetchingRowsResponse" message="tns:ITableService_FinishFetchingRows_OutputMessage" />
+    </wsdl:operation>
+    <wsdl:operation msc:isInitiating="true" msc:isTerminating="true" name="UpdateDataTable">
+      <wsdl:input wsaw:Action="http://tempuri.org/ITableService/UpdateDataTable" message="tns:ITableService_UpdateDataTable_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/ITableService/UpdateDataTableResponse" message="tns:ITableService_UpdateDataTable_OutputMessage" />
+    </wsdl:operation>
+    <wsdl:operation msc:isInitiating="true" msc:isTerminating="true" name="DeleteTableRows">
+      <wsdl:input wsaw:Action="http://tempuri.org/ITableService/DeleteTableRows" message="tns:ITableService_DeleteTableRows_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/ITableService/DeleteTableRowsResponse" message="tns:ITableService_DeleteTableRows_OutputMessage" />
+    </wsdl:operation>
+  </wsdl:portType>
+  <wsdl:binding name="NetTcpBinding_ITableService" type="tns:ITableService">
+    <wsp:PolicyReference URI="#NetTcpBinding_ITableService_policy" />
+    <soap12:binding transport="http://schemas.microsoft.com/soap/tcp" />
+    <wsdl:operation name="PrepareDataTable">
+      <soap12:operation soapAction="http://tempuri.org/ITableService/PrepareDataTable" style="document" />
+      <wsdl:input>
+        <wsp:PolicyReference URI="#NetTcpBinding_ITableService_PrepareDataTable_Input_policy" />
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <wsp:PolicyReference URI="#NetTcpBinding_ITableService_PrepareDataTable_output_policy" />
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="GetNextRows">
+      <soap12:operation soapAction="http://tempuri.org/ITableService/GetNextRows" style="document" />
+      <wsdl:input>
+        <wsp:PolicyReference URI="#NetTcpBinding_ITableService_GetNextRows_Input_policy" />
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <wsp:PolicyReference URI="#NetTcpBinding_ITableService_GetNextRows_output_policy" />
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="FinishFetchingRows">
+      <soap12:operation soapAction="http://tempuri.org/ITableService/FinishFetchingRows" style="document" />
+      <wsdl:input>
+        <wsp:PolicyReference URI="#NetTcpBinding_ITableService_FinishFetchingRows_Input_policy" />
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <wsp:PolicyReference URI="#NetTcpBinding_ITableService_FinishFetchingRows_output_policy" />
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="UpdateDataTable">
+      <soap12:operation soapAction="http://tempuri.org/ITableService/UpdateDataTable" style="document" />
+      <wsdl:input>
+        <wsp:PolicyReference URI="#NetTcpBinding_ITableService_UpdateDataTable_Input_policy" />
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <wsp:PolicyReference URI="#NetTcpBinding_ITableService_UpdateDataTable_output_policy" />
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="DeleteTableRows">
+      <soap12:operation soapAction="http://tempuri.org/ITableService/DeleteTableRows" style="document" />
+      <wsdl:input>
+        <wsp:PolicyReference URI="#NetTcpBinding_ITableService_DeleteTableRows_Input_policy" />
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <wsp:PolicyReference URI="#NetTcpBinding_ITableService_DeleteTableRows_output_policy" />
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+  </wsdl:binding>
+  <wsdl:service name="TableService">
+    <wsdl:port name="NetTcpBinding_ITableService" binding="tns:NetTcpBinding_ITableService">
+      <soap12:address location="net.tcp://localhost:8733/OKB-3.3/TableService" />
+      <wsa10:EndpointReference>
+        <wsa10:Address>net.tcp://localhost:8733/OKB-3.3/TableService</wsa10:Address>
+        <Identity xmlns="http://schemas.xmlsoap.org/ws/2006/02/addressingidentity">
+          <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
+            <X509Data>
+              <X509Certificate>MIIB7jCCAVugAwIBAgIQHRM04rGn9rBGca6mGX2LQjAJBgUrDgMCHQUAMBQxEjAQBgNVBAMTCWxvY2FsaG9zdDAeFw0xMDA4MjAyMjMyMDhaFw0zOTEyMzEyMzU5NTlaMBQxEjAQBgNVBAMTCWxvY2FsaG9zdDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAz5Hwki0V/P+BfmeMrON8meDDM4weOHDGpD8+Da4vphAeZ9s/9BhWrQmM5CNn/554lqlawWIx5I7GcthGYqB7uMGvfXNVxBiZxTQ7jZ+hEpHxMochePjqihp6SvRza8OzljLqp9qDodIhXfX5ehUwJvmNKdyz/t/AbmM6Qp4qqncCAwEAAaNJMEcwRQYDVR0BBD4wPIAQ74vEYIqPb/pq+fE4gL6heaEWMBQxEjAQBgNVBAMTCWxvY2FsaG9zdIIQHRM04rGn9rBGca6mGX2LQjAJBgUrDgMCHQUAA4GBADXRpbxynlKbXzbvSNMIAOao5lQfiQ5XTgJK3zNEfuCHFUNOsuSuz9O7sUAFe/q4Zwy4C8hSbp1B4M2347Ixcu748LaInlwOY9AGJZuAB0e3R7eB1YJCDGLfFzgqjMOY4xV/dcSfPbQu5jPc2EePDfU+UEnjBqPn/ic8m3i1sZzb</X509Certificate>
+            </X509Data>
+          </KeyInfo>
+        </Identity>
+      </wsa10:EndpointReference>
+    </wsdl:port>
+  </wsdl:service>
+</wsdl:definitions>
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Service References/OKBTables/service.xsd
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Service References/OKBTables/service.xsd	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Service References/OKBTables/service.xsd	(revision 5296)
@@ -0,0 +1,105 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:tns="http://tempuri.org/" elementFormDefault="qualified" targetNamespace="http://tempuri.org/" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:import namespace="http://schemas.microsoft.com/2003/10/Serialization/Arrays" />
+  <xs:element name="PrepareDataTable">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="tableName" nillable="true" type="xs:string" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="PrepareDataTableResponse">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="PrepareDataTableResult" nillable="true">
+          <xs:complexType>
+            <xs:annotation>
+              <xs:appinfo>
+                <ActualType Name="DataTable" Namespace="http://schemas.datacontract.org/2004/07/System.Data" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+              </xs:appinfo>
+            </xs:annotation>
+            <xs:sequence>
+              <xs:any minOccurs="0" maxOccurs="unbounded" namespace="http://www.w3.org/2001/XMLSchema" processContents="lax" />
+              <xs:any minOccurs="1" namespace="urn:schemas-microsoft-com:xml-diffgram-v1" processContents="lax" />
+            </xs:sequence>
+          </xs:complexType>
+        </xs:element>
+        <xs:element minOccurs="0" name="count" type="xs:int" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="GetNextRows">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="count" type="xs:int" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="GetNextRowsResponse">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="GetNextRowsResult" nillable="true">
+          <xs:complexType>
+            <xs:annotation>
+              <xs:appinfo>
+                <ActualType Name="DataTable" Namespace="http://schemas.datacontract.org/2004/07/System.Data" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+              </xs:appinfo>
+            </xs:annotation>
+            <xs:sequence>
+              <xs:any minOccurs="0" maxOccurs="unbounded" namespace="http://www.w3.org/2001/XMLSchema" processContents="lax" />
+              <xs:any minOccurs="1" namespace="urn:schemas-microsoft-com:xml-diffgram-v1" processContents="lax" />
+            </xs:sequence>
+          </xs:complexType>
+        </xs:element>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="FinishFetchingRows">
+    <xs:complexType>
+      <xs:sequence />
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="FinishFetchingRowsResponse">
+    <xs:complexType>
+      <xs:sequence />
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="UpdateDataTable">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="changedRows" nillable="true">
+          <xs:complexType>
+            <xs:annotation>
+              <xs:appinfo>
+                <ActualType Name="DataTable" Namespace="http://schemas.datacontract.org/2004/07/System.Data" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+              </xs:appinfo>
+            </xs:annotation>
+            <xs:sequence>
+              <xs:any minOccurs="0" maxOccurs="unbounded" namespace="http://www.w3.org/2001/XMLSchema" processContents="lax" />
+              <xs:any minOccurs="1" namespace="urn:schemas-microsoft-com:xml-diffgram-v1" processContents="lax" />
+            </xs:sequence>
+          </xs:complexType>
+        </xs:element>
+        <xs:element minOccurs="0" name="tableName" nillable="true" type="xs:string" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="UpdateDataTableResponse">
+    <xs:complexType>
+      <xs:sequence />
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="DeleteTableRows">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q1="http://schemas.microsoft.com/2003/10/Serialization/Arrays" minOccurs="0" name="ids" nillable="true" type="q1:ArrayOfint" />
+        <xs:element minOccurs="0" name="tableName" nillable="true" type="xs:string" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="DeleteTableRowsResponse">
+    <xs:complexType>
+      <xs:sequence />
+    </xs:complexType>
+  </xs:element>
+</xs:schema>
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Service References/OKBTables/service1.xsd
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Service References/OKBTables/service1.xsd	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/Service References/OKBTables/service1.xsd	(revision 5296)
@@ -0,0 +1,42 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:tns="http://schemas.microsoft.com/2003/10/Serialization/" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://schemas.microsoft.com/2003/10/Serialization/" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:element name="anyType" nillable="true" type="xs:anyType" />
+  <xs:element name="anyURI" nillable="true" type="xs:anyURI" />
+  <xs:element name="base64Binary" nillable="true" type="xs:base64Binary" />
+  <xs:element name="boolean" nillable="true" type="xs:boolean" />
+  <xs:element name="byte" nillable="true" type="xs:byte" />
+  <xs:element name="dateTime" nillable="true" type="xs:dateTime" />
+  <xs:element name="decimal" nillable="true" type="xs:decimal" />
+  <xs:element name="double" nillable="true" type="xs:double" />
+  <xs:element name="float" nillable="true" type="xs:float" />
+  <xs:element name="int" nillable="true" type="xs:int" />
+  <xs:element name="long" nillable="true" type="xs:long" />
+  <xs:element name="QName" nillable="true" type="xs:QName" />
+  <xs:element name="short" nillable="true" type="xs:short" />
+  <xs:element name="string" nillable="true" type="xs:string" />
+  <xs:element name="unsignedByte" nillable="true" type="xs:unsignedByte" />
+  <xs:element name="unsignedInt" nillable="true" type="xs:unsignedInt" />
+  <xs:element name="unsignedLong" nillable="true" type="xs:unsignedLong" />
+  <xs:element name="unsignedShort" nillable="true" type="xs:unsignedShort" />
+  <xs:element name="char" nillable="true" type="tns:char" />
+  <xs:simpleType name="char">
+    <xs:restriction base="xs:int" />
+  </xs:simpleType>
+  <xs:element name="duration" nillable="true" type="tns:duration" />
+  <xs:simpleType name="duration">
+    <xs:restriction base="xs:duration">
+      <xs:pattern value="\-?P(\d*D)?(T(\d*H)?(\d*M)?(\d*(\.\d*)?S)?)?" />
+      <xs:minInclusive value="-P10675199DT2H48M5.4775808S" />
+      <xs:maxInclusive value="P10675199DT2H48M5.4775807S" />
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:element name="guid" nillable="true" type="tns:guid" />
+  <xs:simpleType name="guid">
+    <xs:restriction base="xs:string">
+      <xs:pattern value="[\da-fA-F]{8}-[\da-fA-F]{4}-[\da-fA-F]{4}-[\da-fA-F]{4}-[\da-fA-F]{12}" />
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:attribute name="FactoryType" type="xs:QName" />
+  <xs:attribute name="Id" type="xs:ID" />
+  <xs:attribute name="Ref" type="xs:IDREF" />
+</xs:schema>
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/UpdateLocalInstallation.cmd
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/UpdateLocalInstallation.cmd	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/UpdateLocalInstallation.cmd	(revision 5296)
@@ -0,0 +1,6 @@
+set target=C:\Program Files\HeuristicLab 3.3
+
+echo Copying OKB Engine Assembly
+copy "%TargetPath%" "%target%"
+echo ---------------------------
+"%SolutionDir%ConfigMerger.exe" "%SolutionDir%ServiceClient.config" "%target%\HeuristicLab 3.3.exe.config"
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/app.config
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/app.config	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.AlgorithmHost/app.config	(revision 5296)
@@ -0,0 +1,77 @@
+﻿<?xml version="1.0" encoding="utf-8" ?>
+<configuration>
+    <system.serviceModel>
+        <bindings>
+            <netTcpBinding>
+                <binding name="NetTcpBinding_IDataService" closeTimeout="00:01:00"
+                    openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
+                    transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions"
+                    hostNameComparisonMode="StrongWildcard" listenBacklog="10"
+                    maxBufferPoolSize="524288" maxBufferSize="65536" maxConnections="10"
+                    maxReceivedMessageSize="65536">
+                    <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
+                        maxBytesPerRead="4096" maxNameTableCharCount="16384" />
+                    <reliableSession ordered="true" inactivityTimeout="00:10:00"
+                        enabled="false" />
+                    <security mode="Message">
+                        <transport clientCredentialType="Windows" protectionLevel="EncryptAndSign" />
+                        <message clientCredentialType="UserName" algorithmSuite="Default" />
+                    </security>
+                </binding>
+                <binding name="NetTcpBinding_IRunnerService" closeTimeout="00:01:00"
+                    openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
+                    transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions"
+                    hostNameComparisonMode="StrongWildcard" listenBacklog="10"
+                    maxBufferPoolSize="524288" maxBufferSize="65536" maxConnections="10"
+                    maxReceivedMessageSize="65536">
+                    <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
+                        maxBytesPerRead="4096" maxNameTableCharCount="16384" />
+                    <reliableSession ordered="true" inactivityTimeout="00:10:00"
+                        enabled="false" />
+                    <security mode="Message">
+                        <transport clientCredentialType="Windows" protectionLevel="EncryptAndSign" />
+                        <message clientCredentialType="UserName" algorithmSuite="Default" />
+                    </security>
+                </binding>
+                <binding name="NetTcpBinding_ITableService" closeTimeout="00:01:00"
+                    openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
+                    transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions"
+                    hostNameComparisonMode="StrongWildcard" listenBacklog="10"
+                    maxBufferPoolSize="524288" maxBufferSize="65536" maxConnections="10"
+                    maxReceivedMessageSize="65536">
+                    <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
+                        maxBytesPerRead="4096" maxNameTableCharCount="16384" />
+                    <reliableSession ordered="true" inactivityTimeout="00:10:00"
+                        enabled="false" />
+                    <security mode="Message">
+                        <transport clientCredentialType="Windows" protectionLevel="EncryptAndSign" />
+                        <message clientCredentialType="UserName" algorithmSuite="Default" />
+                    </security>
+                </binding>
+            </netTcpBinding>
+        </bindings>
+        <client>
+            <endpoint address="net.tcp://localhost:8733/OKB-3.3/DataService"
+                binding="netTcpBinding" bindingConfiguration="NetTcpBinding_IDataService"
+                contract="OKBData.IDataService" name="NetTcpBinding_IDataService">
+                <identity>
+                    <certificate encodedValue="AwAAAAEAAAAUAAAAD/AlkYJw/OUhl6D/9w8mjJBh39kgAAAAAQAAAPIBAAAwggHuMIIBW6ADAgECAhAdEzTisaf2sEZxrqYZfYtCMAkGBSsOAwIdBQAwFDESMBAGA1UEAxMJbG9jYWxob3N0MB4XDTEwMDgyMDIyMzIwOFoXDTM5MTIzMTIzNTk1OVowFDESMBAGA1UEAxMJbG9jYWxob3N0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDPkfCSLRX8/4F+Z4ys43yZ4MMzjB44cMakPz4Nri+mEB5n2z/0GFatCYzkI2f/nniWqVrBYjHkjsZy2EZioHu4wa99c1XEGJnFNDuNn6ESkfEyhyF4+OqKGnpK9HNrw7OWMuqn2oOh0iFd9fl6FTAm+Y0p3LP+38BuYzpCniqqdwIDAQABo0kwRzBFBgNVHQEEPjA8gBDvi8Rgio9v+mr58TiAvqF5oRYwFDESMBAGA1UEAxMJbG9jYWxob3N0ghAdEzTisaf2sEZxrqYZfYtCMAkGBSsOAwIdBQADgYEANdGlvHKeUptfNu9I0wgA5qjmVB+JDldOAkrfM0R+4IcVQ06y5K7P07uxQAV7+rhnDLgLyFJunUHgzbfjsjFy7vjwtoieXA5j0AYlm4AHR7dHt4HVgkIMYt8XOCqMw5jjFX91xJ89tC7mM9zYR48N9T5QSeMGo+f+JzybeLWxnNs=" />
+                </identity>
+            </endpoint>
+            <endpoint address="net.tcp://localhost:8733/OKB-3.3/RunnerService"
+                binding="netTcpBinding" bindingConfiguration="NetTcpBinding_IRunnerService"
+                contract="OKBRunner.IRunnerService" name="NetTcpBinding_IRunnerService">
+                <identity>
+                    <certificate encodedValue="AwAAAAEAAAAUAAAAD/AlkYJw/OUhl6D/9w8mjJBh39kgAAAAAQAAAPIBAAAwggHuMIIBW6ADAgECAhAdEzTisaf2sEZxrqYZfYtCMAkGBSsOAwIdBQAwFDESMBAGA1UEAxMJbG9jYWxob3N0MB4XDTEwMDgyMDIyMzIwOFoXDTM5MTIzMTIzNTk1OVowFDESMBAGA1UEAxMJbG9jYWxob3N0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDPkfCSLRX8/4F+Z4ys43yZ4MMzjB44cMakPz4Nri+mEB5n2z/0GFatCYzkI2f/nniWqVrBYjHkjsZy2EZioHu4wa99c1XEGJnFNDuNn6ESkfEyhyF4+OqKGnpK9HNrw7OWMuqn2oOh0iFd9fl6FTAm+Y0p3LP+38BuYzpCniqqdwIDAQABo0kwRzBFBgNVHQEEPjA8gBDvi8Rgio9v+mr58TiAvqF5oRYwFDESMBAGA1UEAxMJbG9jYWxob3N0ghAdEzTisaf2sEZxrqYZfYtCMAkGBSsOAwIdBQADgYEANdGlvHKeUptfNu9I0wgA5qjmVB+JDldOAkrfM0R+4IcVQ06y5K7P07uxQAV7+rhnDLgLyFJunUHgzbfjsjFy7vjwtoieXA5j0AYlm4AHR7dHt4HVgkIMYt8XOCqMw5jjFX91xJ89tC7mM9zYR48N9T5QSeMGo+f+JzybeLWxnNs=" />
+                </identity>
+            </endpoint>
+            <endpoint address="net.tcp://localhost:8733/OKB-3.3/TableService"
+                binding="netTcpBinding" bindingConfiguration="NetTcpBinding_ITableService"
+                contract="OKBTables.ITableService" name="NetTcpBinding_ITableService">
+                <identity>
+                    <certificate encodedValue="AwAAAAEAAAAUAAAAD/AlkYJw/OUhl6D/9w8mjJBh39kgAAAAAQAAAPIBAAAwggHuMIIBW6ADAgECAhAdEzTisaf2sEZxrqYZfYtCMAkGBSsOAwIdBQAwFDESMBAGA1UEAxMJbG9jYWxob3N0MB4XDTEwMDgyMDIyMzIwOFoXDTM5MTIzMTIzNTk1OVowFDESMBAGA1UEAxMJbG9jYWxob3N0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDPkfCSLRX8/4F+Z4ys43yZ4MMzjB44cMakPz4Nri+mEB5n2z/0GFatCYzkI2f/nniWqVrBYjHkjsZy2EZioHu4wa99c1XEGJnFNDuNn6ESkfEyhyF4+OqKGnpK9HNrw7OWMuqn2oOh0iFd9fl6FTAm+Y0p3LP+38BuYzpCniqqdwIDAQABo0kwRzBFBgNVHQEEPjA8gBDvi8Rgio9v+mr58TiAvqF5oRYwFDESMBAGA1UEAxMJbG9jYWxob3N0ghAdEzTisaf2sEZxrqYZfYtCMAkGBSsOAwIdBQADgYEANdGlvHKeUptfNu9I0wgA5qjmVB+JDldOAkrfM0R+4IcVQ06y5K7P07uxQAV7+rhnDLgLyFJunUHgzbfjsjFy7vjwtoieXA5j0AYlm4AHR7dHt4HVgkIMYt8XOCqMw5jjFX91xJ89tC7mM9zYR48N9T5QSeMGo+f+JzybeLWxnNs=" />
+                </identity>
+            </endpoint>
+        </client>
+    </system.serviceModel>
+</configuration>
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Client/ClientFactory.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Client/ClientFactory.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Client/ClientFactory.cs	(revision 5296)
@@ -0,0 +1,17 @@
+﻿using System;
+using System.ServiceModel;
+
+namespace HeuristicLab.OKB.Client {
+
+  public class ClientFactory {
+    public static T Create<T, I>()
+      where T : ClientBase<I>, I
+      where I : class {
+      var client = Activator.CreateInstance<T>();
+      client.ClientCredentials.UserName.UserName = "swagner";
+      client.ClientCredentials.UserName.Password = "swagner";
+      client.ClientCredentials.ServiceCertificate.Authentication.CertificateValidationMode = System.ServiceModel.Security.X509CertificateValidationMode.None;
+      return client;
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Client/HeuristicLab.OKB.Client-3.3.csproj
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Client/HeuristicLab.OKB.Client-3.3.csproj	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Client/HeuristicLab.OKB.Client-3.3.csproj	(revision 5296)
@@ -0,0 +1,165 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{B157FAB7-9B6D-4BAE-ACF2-C6FB7D22EBBD}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.OKB.Client</RootNamespace>
+    <AssemblyName>HeuristicLab.OKB.Client-3.3</AssemblyName>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+    <FileUpgradeFlags>
+    </FileUpgradeFlags>
+    <OldToolsVersion>3.5</OldToolsVersion>
+    <UpgradeBackupLocation />
+    <PublishUrl>publish\</PublishUrl>
+    <Install>true</Install>
+    <InstallFrom>Disk</InstallFrom>
+    <UpdateEnabled>false</UpdateEnabled>
+    <UpdateMode>Foreground</UpdateMode>
+    <UpdateInterval>7</UpdateInterval>
+    <UpdateIntervalUnits>Days</UpdateIntervalUnits>
+    <UpdatePeriodically>false</UpdatePeriodically>
+    <UpdateRequired>false</UpdateRequired>
+    <MapFileExtensions>true</MapFileExtensions>
+    <ApplicationRevision>0</ApplicationRevision>
+    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
+    <IsWebBootstrapper>false</IsWebBootstrapper>
+    <UseApplicationTrust>false</UseApplicationTrust>
+    <BootstrapperEnabled>true</BootstrapperEnabled>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="HeuristicLab.PluginInfrastructure-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.PluginInfrastructure-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Core">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.IdentityModel">
+      <RequiredTargetFramework>3.0</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.ServiceModel">
+      <RequiredTargetFramework>3.0</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Xml.Linq">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data.DataSetExtensions">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLabOKBClientPlugin.cs.frame" />
+    <Compile Include="ClientFactory.cs" />
+    <Compile Include="HeuristicLabOKBClientPlugin.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <None Include="HeuristicLab.snk" />
+    <None Include="Properties\AssemblyInfo.frame" />
+    <None Include="UpdateLocalInstallation.cmd" />
+  </ItemGroup>
+  <ItemGroup>
+    <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
+      <Install>false</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.5 SP1</ProductName>
+      <Install>true</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
+      <Visible>False</Visible>
+      <ProductName>Windows Installer 3.1</ProductName>
+      <Install>true</Install>
+    </BootstrapperPackage>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+SubWCRev "%25ProjectDir%25\" "%25ProjectDir%25\Properties\AssemblyInfo.frame" "%25ProjectDir%25\Properties\AssemblyInfo.cs"
+SubWCRev "%25ProjectDir%25\" "%25ProjectDir%25\HeuristicLabOKBClientPlugin.cs.frame" "%25ProjectDir%25\HeuristicLabOKBClientPlugin.cs"</PreBuildEvent>
+    <PostBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call UpdateLocalInstallation.cmd</PostBuildEvent>
+  </PropertyGroup>
+</Project>
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Client/HeuristicLabOKBClientPlugin.cs.frame
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Client/HeuristicLabOKBClientPlugin.cs.frame	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Client/HeuristicLabOKBClientPlugin.cs.frame	(revision 5296)
@@ -0,0 +1,33 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 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.Text;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.OKB {
+
+  [Plugin("HeuristicLab.OKB.Client", "3.3.0.$WCREV$")]
+  [PluginFile("HeuristicLab.OKB.Client-3.3.dll", PluginFileType.Assembly)]
+  public class HeuristicLabOKBClientPlugin : PluginBase {
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Client/Properties/AssemblyInfo.frame
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Client/Properties/AssemblyInfo.frame	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Client/Properties/AssemblyInfo.frame	(revision 5296)
@@ -0,0 +1,37 @@
+﻿using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using HeuristicLab.PluginInfrastructure;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.OKB.Client")]
+[assembly: AssemblyDescription("Generic OKB Client Support")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab 3")]
+[assembly: AssemblyCopyright("(c) HEAL 2010")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("df17a711-9af6-4aac-8787-409105aaa755")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers 
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("3.3.0.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.0.$WCREV$")]
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Client/UpdateLocalInstallation.cmd
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Client/UpdateLocalInstallation.cmd	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Client/UpdateLocalInstallation.cmd	(revision 5296)
@@ -0,0 +1,5 @@
+set target=C:\Program Files\HeuristicLab 3.3
+
+echo Copying OKB Client Assembly
+copy "%SolutionDir%\HeuristicLab.OKB.Client\%Outdir%\HeuristicLab.OKB.Client-3.3.dll" "%target%"
+echo ---------------------------
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin.EngineEditor/HL3_3OperatorGraphEditor.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin.EngineEditor/HL3_3OperatorGraphEditor.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin.EngineEditor/HL3_3OperatorGraphEditor.cs	(revision 5296)
@@ -0,0 +1,56 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using System.IO;
+using HeuristicLab.Persistence.Default.Xml;
+using HeuristicLab.Persistence.Core;
+
+namespace HeuristicLab.OKB.Cockpit.Admin.EngineEditor {
+  public class HL3_3OperatorGraphEditor : IOperatorGraphEditor {
+
+    public string PlatformName {
+      get { return "HL 3.3"; }
+    }
+
+    private IOperator op;
+
+    public void Load(byte[] data) {
+      using (MemoryStream stream = new MemoryStream(data)) {
+        op = (IOperator)XmlParser.Deserialize(stream);
+      }
+    }
+
+    public System.Windows.Forms.Control CreateControl() {
+      var operatorGraph = new OperatorGraph();
+      var control = new OperatorGraphView(operatorGraph);
+      if (op != null) {
+        operatorGraph.AddOperator(op);
+        operatorGraph.InitialOperator = op;
+      }
+      return control;
+    }
+
+    private byte[] GetData(System.Windows.Forms.Control control) {
+      var view = control as OperatorGraphView;
+      if (view == null || view.OperatorGraph.InitialOperator == null)
+        return new byte[0];
+      IOperator initialOperator = (IOperator)view.OperatorGraph.InitialOperator.Clone();
+      using (MemoryStream stream = new MemoryStream()) {
+        XmlGenerator.Serialize(initialOperator, stream,
+          ConfigurationService.Instance.GetConfiguration(new XmlFormat()));
+        return stream.ToArray();
+      }
+    }
+
+    public byte[] GetAlgorithmData(System.Windows.Forms.Control control) {
+      return GetData(control);
+    }
+
+    public byte[] GetProblemData(System.Windows.Forms.Control control) {
+      return GetData(control);
+    }
+
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin.EngineEditor/HeuristicLab.OKB.Cockpit.Admin.EngineEditor-3.3.csproj
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin.EngineEditor/HeuristicLab.OKB.Cockpit.Admin.EngineEditor-3.3.csproj	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin.EngineEditor/HeuristicLab.OKB.Cockpit.Admin.EngineEditor-3.3.csproj	(revision 5296)
@@ -0,0 +1,137 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{CFBF2410-99A1-44EC-BFEA-F1AD4C3DA622}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.OKB.Cockpit.Admin.EngineEditor</RootNamespace>
+    <AssemblyName>HeuristicLab.OKB.Cockpit.Admin.EngineEditor-3.3</AssemblyName>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="HeuristicLab.Core-3.3, Version=3.3.0.2744, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=x86">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>C:\Program Files\HeuristicLab 3.0\HeuristicLab.Core-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Persistence-3.3, Version=3.3.0.2744, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=x86">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>C:\Program Files\HeuristicLab 3.0\HeuristicLab.Persistence-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.PluginInfrastructure, Version=3.2.0.2748, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=x86">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>C:\Program Files\HeuristicLab 3.0\HeuristicLab.PluginInfrastructure.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Core">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml.Linq">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data.DataSetExtensions">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="HeuristicLabOkbCockpitAdminEngineEditorPlugin.cs" />
+    <Compile Include="HL3_3OperatorGraphEditor.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <None Include="Properties\AssemblyInfo.frame" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\HeuristicLab.MainForm.WPF\HeuristicLab.MainForm.WPF-3.3.csproj">
+      <Project>{1DBC4D60-0064-4A53-B48C-63D144A67B07}</Project>
+      <Name>HeuristicLab.MainForm.WPF-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.OKB.Cockpit.Admin\HeuristicLab.OKB.Cockpit.Admin-3.3.csproj">
+      <Project>{9AADAE96-361F-48F0-B9B0-31B7DACD0492}</Project>
+      <Name>HeuristicLab.OKB.Cockpit.Admin-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.OKB.Cockpit\HeuristicLab.OKB.Cockpit-3.3.csproj">
+      <Project>{52567721-66A9-4411-9ED6-48DE37732868}</Project>
+      <Name>HeuristicLab.OKB.Cockpit-3.3</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="UpdateLocalInstallation.cmd" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+    <PostBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call UpdateLocalInstallation.cmd</PostBuildEvent>
+  </PropertyGroup>
+</Project>
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin.EngineEditor/HeuristicLabOkbCockpitAdminEngineEditorPlugin.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin.EngineEditor/HeuristicLabOkbCockpitAdminEngineEditorPlugin.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin.EngineEditor/HeuristicLabOkbCockpitAdminEngineEditorPlugin.cs	(revision 5296)
@@ -0,0 +1,13 @@
+﻿using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.OKB.Cockpit.Admin.EngineEditor {
+
+  [Plugin("HeuristicLab.OKB.Cockpit.Admin.EngineEditor-3.3")]
+  [PluginFile("HeuristicLab.OKB.Cockpit.Admin.EngineEditor-3.3.dll", PluginFileType.Assembly)]
+  [PluginDependency("HeuristicLab.Core-3.3")]
+  [PluginDependency("HeuristicLab.MainForm.WPF-3.3")]
+  [PluginDependency("HeuristicLab.OKB.Cockpit-3.3")]
+  [PluginDependency("HeuristicLab.OKB.Cockpit.Admin-3.3")]
+  [PluginDependency("HeuristicLab.Persistence-3.3")]
+  public class HeuristicLabOkbCockpitAdminEngineEditorPlugin : PluginBase {}
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin.EngineEditor/Properties/AssemblyInfo.frame
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin.EngineEditor/Properties/AssemblyInfo.frame	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin.EngineEditor/Properties/AssemblyInfo.frame	(revision 5296)
@@ -0,0 +1,38 @@
+﻿using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using HeuristicLab.PluginInfrastructure;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.OKB.Admin.EngineEditor")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("Microsoft")]
+[assembly: AssemblyProduct("HeuristicLab.OKB.Admin.EngineEditor")]
+[assembly: AssemblyCopyright("Copyright © Microsoft 2010")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components.  If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("d909475e-6329-4c9a-81e9-46eb6d7dc89d")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("3.3.0.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.0.$WCREV$")]
+[assembly: AssemblyBuildDate("$WCNOW$")]
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin.EngineEditor/UpdateLocalInstallation.cmd
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin.EngineEditor/UpdateLocalInstallation.cmd	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin.EngineEditor/UpdateLocalInstallation.cmd	(revision 5296)
@@ -0,0 +1,4 @@
+SET target=C:\Program Files\HeuristicLab 3.0
+
+echo Copying OKB Cockpit Admin Engine Editor Assembly
+copy "%ProjectDir%\%Outdir%\HeuristicLab.OKB.Cockpit.Admin.EngineEditor-3.3.dll" "%target%"
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin.ItemEditor/HL3_3OperatorGraphEditor.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin.ItemEditor/HL3_3OperatorGraphEditor.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin.ItemEditor/HL3_3OperatorGraphEditor.cs	(revision 5296)
@@ -0,0 +1,65 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using System.IO;
+using HeuristicLab.Persistence.Default.Xml;
+using HeuristicLab.Persistence.Core;
+using HeuristicLab.OKB.AlgorithmHost;
+using System.Windows.Forms;
+
+namespace HeuristicLab.OKB.Cockpit.Admin.ItemEditor {
+  public class HL3_3OperatorGraphEditor : IOperatorGraphEditor {
+
+    public string PlatformName {
+      get { return "HL 3.3"; }
+    }
+
+    private ParameterizedNamedItemContainer container;
+
+    public void Load(byte[] data) {
+      using (var stream = new MemoryStream(data)) {
+        container = (ParameterizedNamedItemContainer)XmlParser.Deserialize(stream);
+      }
+    }
+
+    public Control CreateAlgorithmControl() {
+      var view = new AlgorithmContainerView();
+      if (container == null)
+        view.Content = new AlgorithmContainer();
+      else
+        view.Content = (AlgorithmContainer)container;
+      return (Control)view;
+    }
+
+    public Control CreateProblemControl() {
+      var view = new ParameterizedNamedItemContainerView();
+      if (container == null)
+        view.Content = new ProblemContainer();
+      else
+        view.Content = container;
+      return (Control)view;
+    }
+
+    private byte[] GetData(Control control) {      
+      var view = control as ParameterizedNamedItemContainerView;      
+      if (view == null || view.Content == null)
+        return new byte[0];      
+      using (MemoryStream stream = new MemoryStream()) {        
+        XmlGenerator.Serialize(view.Content, stream,
+          ConfigurationService.Instance.GetConfiguration(new XmlFormat()));
+        return stream.ToArray();
+      }       
+    }
+
+    public byte[] GetAlgorithmData(Control control) {
+      return GetData(control);
+    }
+
+    public byte[] GetProblemData(Control control) {
+      return GetData(control);
+    }
+
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin.ItemEditor/HeuristicLab.OKB.Cockpit.Admin.ItemEditor-3.3.csproj
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin.ItemEditor/HeuristicLab.OKB.Cockpit.Admin.ItemEditor-3.3.csproj	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin.ItemEditor/HeuristicLab.OKB.Cockpit.Admin.ItemEditor-3.3.csproj	(revision 5296)
@@ -0,0 +1,201 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{CFBF2410-99A1-44EC-BFEA-F1AD4C3DA622}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.OKB.Cockpit.Admin.ItemEditor</RootNamespace>
+    <AssemblyName>HeuristicLab.OKB.Cockpit.Admin.ItemEditor-3.3</AssemblyName>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <FileUpgradeFlags>
+    </FileUpgradeFlags>
+    <OldToolsVersion>3.5</OldToolsVersion>
+    <UpgradeBackupLocation />
+    <PublishUrl>publish\</PublishUrl>
+    <Install>true</Install>
+    <InstallFrom>Disk</InstallFrom>
+    <UpdateEnabled>false</UpdateEnabled>
+    <UpdateMode>Foreground</UpdateMode>
+    <UpdateInterval>7</UpdateInterval>
+    <UpdateIntervalUnits>Days</UpdateIntervalUnits>
+    <UpdatePeriodically>false</UpdatePeriodically>
+    <UpdateRequired>false</UpdateRequired>
+    <MapFileExtensions>true</MapFileExtensions>
+    <ApplicationRevision>0</ApplicationRevision>
+    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
+    <IsWebBootstrapper>false</IsWebBootstrapper>
+    <UseApplicationTrust>false</UseApplicationTrust>
+    <BootstrapperEnabled>true</BootstrapperEnabled>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="HeuristicLab.Common-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=x86">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Common-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Core-3.3, Version=3.3.0.2744, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=x86">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Core-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Core.Views-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=x86">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Core.Views-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.MainForm-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=x86">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.MainForm-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.MainForm.WindowsForms-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=x86">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.MainForm.WindowsForms-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Persistence-3.3, Version=3.3.0.2744, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=x86">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Persistence-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.PluginInfrastructure-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=x86">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.PluginInfrastructure-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Core">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml.Linq">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data.DataSetExtensions">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLabOKBCockpitAdminItemEditorPlugin.cs.frame" />
+    <Compile Include="HeuristicLabOKBCockpitAdminItemEditorPlugin.cs" />
+    <Compile Include="HL3_3OperatorGraphEditor.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <None Include="Properties\AssemblyInfo.frame" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\HeuristicLab.MainForm.WPF\HeuristicLab.MainForm.WPF-3.3.csproj">
+      <Project>{1DBC4D60-0064-4A53-B48C-63D144A67B07}</Project>
+      <Name>HeuristicLab.MainForm.WPF-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.OKB.AlgorithmHost\HeuristicLab.OKB.AlgorithmHost-3.3.csproj">
+      <Project>{7B60CBDC-E7E3-4610-91E2-7CE831A02D35}</Project>
+      <Name>HeuristicLab.OKB.AlgorithmHost-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.OKB.Cockpit.Admin\HeuristicLab.OKB.Cockpit.Admin-3.3.csproj">
+      <Project>{9AADAE96-361F-48F0-B9B0-31B7DACD0492}</Project>
+      <Name>HeuristicLab.OKB.Cockpit.Admin-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.OKB.Cockpit\HeuristicLab.OKB.Cockpit-3.3.csproj">
+      <Project>{52567721-66A9-4411-9ED6-48DE37732868}</Project>
+      <Name>HeuristicLab.OKB.Cockpit-3.3</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="UpdateLocalInstallation.cmd" />
+  </ItemGroup>
+  <ItemGroup>
+    <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
+      <Install>false</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.5 SP1</ProductName>
+      <Install>true</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
+      <Visible>False</Visible>
+      <ProductName>Windows Installer 3.1</ProductName>
+      <Install>true</Install>
+    </BootstrapperPackage>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+SubWCRev "%25ProjectDir%25\" "%25ProjectDir%25\Properties\AssemblyInfo.frame" "%25ProjectDir%25\Properties\AssemblyInfo.cs"
+SubWCRev "%25ProjectDir%25\" "%25ProjectDir%25\HeuristicLabOKBCockpitAdminItemEditorPlugin.cs.frame" "%25ProjectDir%25\HeuristicLabOKBCockpitAdminItemEditorPlugin.cs"</PreBuildEvent>
+    <PostBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call UpdateLocalInstallation.cmd</PostBuildEvent>
+  </PropertyGroup>
+</Project>
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin.ItemEditor/HeuristicLabOKBAdminItemEditorPlugin.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin.ItemEditor/HeuristicLabOKBAdminItemEditorPlugin.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin.ItemEditor/HeuristicLabOKBAdminItemEditorPlugin.cs	(revision 5296)
@@ -0,0 +1,13 @@
+﻿using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.OKB.Cockpit.Admin.EngineEditor {
+
+  [Plugin("HeuristicLab.OKB.Cockpit.Admin.EngineEditor", "3.3.0.1808")]
+  [PluginFile("HeuristicLab.OKB.Cockpit.Admin.EngineEditor-3.3.dll", PluginFileType.Assembly)]
+  [PluginDependency("HeuristicLab.Core", "3.3")]
+  [PluginDependency("HeuristicLab.MainForm.WPF", "3.3")]
+  [PluginDependency("HeuristicLab.OKB.Cockpit", "3.3")]
+  [PluginDependency("HeuristicLab.OKB.Cockpit.Admin", "3.3")]
+  [PluginDependency("HeuristicLab.Persistence", "3.3")]
+  public class HeuristicLabOkbCockpitAdminEngineEditorPlugin : PluginBase {}
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin.ItemEditor/HeuristicLabOKBCockpitAdminItemEditorPlugin.cs.frame
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin.ItemEditor/HeuristicLabOKBCockpitAdminItemEditorPlugin.cs.frame	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin.ItemEditor/HeuristicLabOKBCockpitAdminItemEditorPlugin.cs.frame	(revision 5296)
@@ -0,0 +1,18 @@
+﻿using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.OKB.Cockpit.Admin.ItemEditor {
+
+  [Plugin("HeuristicLab.OKB.Cockpit.Admin.ItemEditor", "3.3.0.$WCREV$")]
+  [PluginFile("HeuristicLab.OKB.Cockpit.Admin.ItemEditor-3.3.dll", PluginFileType.Assembly)]
+  [PluginDependency("HeuristicLab.Common", "3.3")]
+  [PluginDependency("HeuristicLab.Core", "3.3")]  
+  [PluginDependency("HeuristicLab.Core.Views", "3.3")]  
+  [PluginDependency("HeuristicLab.MainForm.WPF", "3.3")]
+  [PluginDependency("HeuristicLab.MainForm.WindowsForms", "3.3")]
+  [PluginDependency("HeuristicLab.MainForm.WPF", "3.3")]
+  [PluginDependency("HeuristicLab.OKB.AlgorithmHost", "3.3")]
+  [PluginDependency("HeuristicLab.OKB.Cockpit", "3.3")]
+  [PluginDependency("HeuristicLab.OKB.Cockpit.Admin", "3.3")]
+  [PluginDependency("HeuristicLab.Persistence", "3.3")]
+  public class HeuristicLabOkbCockpitAdminEngineEditorPlugin : PluginBase {}
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin.ItemEditor/Properties/AssemblyInfo.frame
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin.ItemEditor/Properties/AssemblyInfo.frame	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin.ItemEditor/Properties/AssemblyInfo.frame	(revision 5296)
@@ -0,0 +1,36 @@
+﻿using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.OKB.Admin.ItemEditor")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("Microsoft")]
+[assembly: AssemblyProduct("HeuristicLab.OKB.Admin.EngineEditor")]
+[assembly: AssemblyCopyright("Copyright © Microsoft 2010")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components.  If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("d909475e-6329-4c9a-81e9-46eb6d7dc89d")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("3.3.0.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.0.$WCREV$")]
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin.ItemEditor/UpdateLocalInstallation.cmd
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin.ItemEditor/UpdateLocalInstallation.cmd	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin.ItemEditor/UpdateLocalInstallation.cmd	(revision 5296)
@@ -0,0 +1,4 @@
+SET target=C:\Program Files\HeuristicLab 3.3
+
+echo Copying OKB Cockpit Admin Item Editor Assembly
+copy "%ProjectDir%\%Outdir%\HeuristicLab.OKB.Cockpit.Admin.ItemEditor-3.3.dll" "%target%"
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/AlgorithmEditor.xaml
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/AlgorithmEditor.xaml	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/AlgorithmEditor.xaml	(revision 5296)
@@ -0,0 +1,47 @@
+﻿<UserControl xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+             xmlns:src="clr-namespace:HeuristicLab.OKB.Cockpit.Admin"
+             x:Class="HeuristicLab.OKB.Cockpit.Admin.AlgorithmEditor">
+  <UserControl.Resources>
+    <Style TargetType="{x:Type Button}">
+      <Setter Property="Padding" Value="5 0 5 0"/>
+      <Setter Property="Margin" Value="1 0 1 0"/>
+    </Style>
+  </UserControl.Resources>
+  <DockPanel>
+
+    <GroupBox DockPanel.Dock="Top" Header="Master Data">
+      <Grid>
+        <Grid.RowDefinitions>
+          <RowDefinition Height="Auto"/>
+          <RowDefinition Height="Auto"/>
+        </Grid.RowDefinitions>
+        <Grid.ColumnDefinitions>
+          <ColumnDefinition Width="Auto"/>
+          <ColumnDefinition Width="Auto"/>
+          <ColumnDefinition Width="*"/>
+          <ColumnDefinition Width="Auto"/>
+          <ColumnDefinition Width="Auto"/>
+          <ColumnDefinition Width="Auto"/>
+        </Grid.ColumnDefinitions>
+        <TextBlock Grid.Column="0">Id</TextBlock>
+        <TextBlock Grid.Column="1">Name</TextBlock>
+        <TextBlock Grid.Column="2">Description</TextBlock>
+
+        <TextBox IsEnabled="False" Grid.Column="0" Grid.Row="1" Name="IdBox"/>
+        <TextBox Grid.Column="1" Grid.Row="1" Name="NameBox"/>
+        <TextBox Grid.Column="2" Grid.Row="1" Name="DescriptionBox" TextWrapping="Wrap"/>
+
+        <Button Name="ParametersButton" Grid.Column="3" Grid.Row="0" Click="OnView">Parameters</Button>
+        <Button Name="ResultsButton" Grid.Column="3" Grid.Row="1" Click="OnView">Results</Button>
+
+        <Button Grid.Column="4" Grid.Row="0" Click="OnLoad">Reload</Button>
+        <Button Grid.Column="4" Grid.Row="1" Click="OnSave">Save</Button>
+
+        <Button Grid.Column="5" Grid.Row="0" Click="OnDownload">Download...</Button>
+        <Button Grid.Column="5" Grid.Row="1" Click="OnUpload">Upload...</Button>
+      </Grid>
+    </GroupBox>
+    <src:OperatorGraphEditorHost x:Name="OperatorGraphEditor"/>
+  </DockPanel>
+</UserControl>
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/AlgorithmEditor.xaml.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/AlgorithmEditor.xaml.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/AlgorithmEditor.xaml.cs	(revision 5296)
@@ -0,0 +1,225 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.MainForm.WPF;
+using System.Windows.Controls;
+using System.Windows;
+using HeuristicLab.BackgroundProcessing;
+using System.Diagnostics;
+using System.IO;
+using HeuristicLab.Persistence.Default.Xml;
+using HeuristicLab.Persistence.Core;
+using System.Collections.ObjectModel;
+using HeuristicLab.MainForm;
+using System.Data;
+using HeuristicLab.OKB.Client;
+
+namespace HeuristicLab.OKB.Cockpit.Admin {
+
+  public partial class AlgorithmEditor : UserControl, IView, IOKBCockpitItem {
+
+    public static DependencyProperty AlgorithmProperty = DependencyProperty.Register(
+      "Algorithm", typeof(OKBAdmin.Algorithm), typeof(AlgorithmEditor));
+
+    public OKBAdmin.Algorithm Algorithm {
+      get { return (OKBAdmin.Algorithm)GetValue(AlgorithmProperty); }
+      set { SetValue(AlgorithmProperty, value); }
+    }
+
+    public AlgorithmEditor() {
+      InitializeComponent();
+      Algorithm = null;
+    }
+
+    protected override void OnPropertyChanged(DependencyPropertyChangedEventArgs e) {
+      base.OnPropertyChanged(e);
+      if (e.Property == AlgorithmProperty)
+        UpdateAlgorithm();
+    }
+
+    private void UpdateAlgorithm() {
+      if (Algorithm == null) {
+        Clear();
+        return;
+      }
+      OnLoad(this, new RoutedEventArgs());
+    }
+
+    private void Clear() {
+      IdBox.Text = null;
+      NameBox.Text = null;
+      DescriptionBox.Text = null;
+    }
+
+    private bool isLoading = false;
+    protected void OnLoad(object sender, RoutedEventArgs args) {
+      if (isLoading || Algorithm == null) return;
+      isLoading = true;
+      OKBAdmin.Algorithm algorithm = Algorithm;
+      OperatorGraphEditorHost editor = OperatorGraphEditor;
+      var loader = new ObservableBackgroundWorker("downloading algorithm") {
+        WorkerReportsProgress = true,
+        WorkerSupportsCancellation = true,
+      };
+      loader.DoWork += (s, a) => {
+        OKBAdmin.AdminServiceClient client = ClientFactory.Create<OKBAdmin.AdminServiceClient, OKBAdmin.IAdminService>();
+        algorithm = client.GetCompleteAlgorithm(algorithm.Id);
+        client.Close();
+        loader.ReportProgress(10);
+        byte[] data = new DataClientHelper(loader, a) {
+          ReportProgress = p => loader.ReportProgress(10 + 80 * p / 100)
+        }.Load(OKBData.EntityType.Algorithm, algorithm.Id);
+        if (data != null) {
+          editor.LoadData(data, algorithm.Platform, OperatorGraphEditorHost.EditorType.Algorithm);
+          loader.ReportProgress(100);
+        }
+      };
+      loader.RunWorkerCompleted += (s, a) => {
+        if (algorithm == null) return;
+        Algorithm = algorithm;
+        IdBox.Text = Algorithm.Id.ToString();
+        NameBox.Text = Algorithm.Name;
+        DescriptionBox.Text = Algorithm.Description;
+        isLoading = false;
+      };
+      loader.RunWorkerAsync();
+    }
+
+    protected void OnSave(object sender, RoutedEventArgs args) {
+      if (Algorithm == null) return;
+      Algorithm.Name = NameBox.Text;
+      Algorithm.Description = DescriptionBox.Text;
+      OKBAdmin.Algorithm algorithm = Algorithm;
+      OperatorGraphEditorHost editor = OperatorGraphEditor;
+      var saver = new ObservableBackgroundWorker("uploading algorithm") {
+        WorkerReportsProgress = true,
+        WorkerSupportsCancellation = true,
+      };
+      saver.DoWork += (s, a) => {
+        OKBAdmin.AdminServiceClient client = ClientFactory.Create<OKBAdmin.AdminServiceClient, OKBAdmin.IAdminService>();
+        client.UpdateCompleteAlgorithm(algorithm);
+        client.Close();
+        saver.ReportProgress(10);
+        byte[] data = editor.GetAlgorithmData();
+        if (data != null) {
+          saver.ReportProgress(20);
+          new DataClientHelper(saver, a) {
+            ReportProgress = p => saver.ReportProgress(20 + 80 * p / 100)
+          }.Save(OKBData.EntityType.Algorithm, algorithm.Id, data);
+        } else {
+          saver.ReportProgress(100);
+        }
+      };
+      saver.RunWorkerAsync();
+    }
+
+    private IEnumerable<T> GetObjects<T>(DataTable table, IEnumerable<string> propertyNames) where T : class {
+      foreach (DataRow row in table.Rows) {
+        if (row["Id"] != DBNull.Value) {
+          T o = Activator.CreateInstance<T>();
+          foreach (string name in propertyNames)
+            typeof(T).GetProperty(name).SetValue(o, row[name] == DBNull.Value ? null : (object)row[name], null);
+          yield return o;
+        }
+      }
+    }
+
+    private bool ContentHasParameter(OKBAdmin.Parameter p) {
+      return Algorithm.Algorithm_Parameters.Any(ap => ap.ParameterId == p.Id);
+    }
+
+    private bool ContentHasResult(OKBAdmin.Result result) {
+      return Algorithm.Algorithm_Results.Any(ar => ar.ResultId == result.Id);
+    }
+
+    protected void OnView(object sender, EventArgs args) {
+      if (sender == ParametersButton && Algorithm != null)
+        EntityEditorSupport.ShowSelector<OKBAdmin.Parameter>(ContentHasParameter, UpdateParameters);
+      if (sender == ResultsButton && Algorithm != null)
+        EntityEditorSupport.ShowSelector<OKBAdmin.Result>(ContentHasResult, UpdateResults);
+    }
+
+    private void UpdateParameters(IEnumerable<OKBAdmin.Parameter> parameters) {
+      Algorithm.Algorithm_Parameters.Clear();
+      foreach (OKBAdmin.Parameter p in parameters) {
+        Algorithm.Algorithm_Parameters.Add(new OKBAdmin.Algorithm_Parameter() {
+          AlgorithmId = Algorithm.Id,
+          ParameterId = p.Id,
+        });
+      }
+    }
+
+    private void UpdateResults(IEnumerable<OKBAdmin.Result> results) {
+      Algorithm.Algorithm_Results.Clear();
+      foreach (OKBAdmin.Result r in results) {
+        Algorithm.Algorithm_Results.Add(new OKBAdmin.Algorithm_Result() {
+          AlgorithmId = Algorithm.Id,
+          ResultId = r.Id,
+        });
+      }
+    }
+
+    private void OnDownload(object sender, EventArgs args) {
+      PersistenceHacker.Download(OKBData.EntityType.Algorithm, Algorithm.Id);
+    }
+
+    private void OnUpload(object sender, EventArgs args) {
+      PersistenceHacker.Upload(OKBData.EntityType.Algorithm, Algorithm.Id);
+    }
+
+    #region IView Members
+
+    public string Caption {
+      get { return "Algorithm Editor"; }
+      set { throw new NotSupportedException(); }
+    }    
+
+    public event EventHandler CaptionChanged;
+
+    public event EventHandler Changed;
+
+    protected void OnChanged() {
+      EventHandler handler = CaptionChanged;
+      if (handler != null)
+        handler(this, EventArgs.Empty);
+    }
+
+    public virtual void Close() {
+      MainFormManager.GetMainForm<WPFMainFormBase>().CloseView(this);
+      IsShown = false;
+    }
+
+    public void Hide() {
+      MainFormManager.GetMainForm<WPFMainFormBase>().HideView(this);
+      IsShown = false;
+    }
+
+    public bool IsShown { get; protected set; }
+
+    private bool readOnly = false;
+    public bool ReadOnly {
+      get {
+        return readOnly;
+      }
+      set {
+        if (value == readOnly) return;
+        readOnly = value;
+        OnReadOnlyChanged();
+      }
+    }
+    public event EventHandler ReadOnlyChanged;
+    protected void OnReadOnlyChanged() {
+      EventHandler handler = ReadOnlyChanged;
+      if (handler != null)
+        handler(this, EventArgs.Empty);
+    }
+
+    public void Show() {
+      MainFormManager.GetMainForm<WPFMainFormBase>().ShowView(this);
+      IsShown = true;
+    }
+
+    #endregion    
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/DataClientHelper.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/DataClientHelper.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/DataClientHelper.cs	(revision 5296)
@@ -0,0 +1,73 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.IO;
+using System.ComponentModel;
+using HeuristicLab.BackgroundProcessing;
+using HeuristicLab.OKB.Client;
+using HeuristicLab.OKB.Cockpit.Admin.OKBData;
+
+namespace HeuristicLab.OKB.Cockpit.Admin {
+  public class DataClientHelper {
+
+    BackgroundWorker host;
+    public Action<int> ReportProgress { get; set; }
+    System.ComponentModel.DoWorkEventArgs args;
+
+    public DataClientHelper(BackgroundWorker host, DoWorkEventArgs args) {      
+      this.host = host;
+      this.args = args;
+      if (host.WorkerReportsProgress)
+        ReportProgress = i => host.ReportProgress(i);
+      else
+        ReportProgress = new Action<int>(i => { });
+    }
+
+    public byte[] Load(OKBData.EntityType type, int id) {
+      DataServiceClient dataClient = ClientFactory.Create<DataServiceClient, IDataService>();
+      int size = dataClient.Request(type, id);
+      using (MemoryStream dataStream = new MemoryStream()) {
+        int chunkSize = Math.Max(100, Math.Min(1024 * 1024, size / 100));
+        while (!host.CancellationPending && dataStream.Position < size) {
+          byte[] chunk = dataClient.GetNextChunk(chunkSize);
+          dataStream.Write(chunk, 0, chunk.Length);
+          ReportProgress(100 * (int)dataStream.Position / size);
+        }
+        if (host.CancellationPending) {
+          args.Cancel = true;
+          dataClient.AbortTransfer();
+          dataClient.Close();
+          return null;
+        } else {
+          dataClient.TransferDone();
+          dataClient.Close();
+          ReportProgress(100);
+          return dataStream.ToArray();
+        }        
+      }
+    }
+
+    public void Save(OKBData.EntityType type, int id, byte[] data) {
+      DataServiceClient dataClient = ClientFactory.Create<DataServiceClient, IDataService>();
+      dataClient.Submit(type, id);
+      using (MemoryStream dataStream = new MemoryStream(data)) {
+        int size = Math.Max(100, Math.Min(1024 * 1024, (int)dataStream.Length / 100));
+        for (int i = 0; i < dataStream.Length && !host.CancellationPending; i += size) {
+          byte[] chunk = new byte[Math.Min(size, dataStream.Length - dataStream.Position)];
+          dataStream.Read(chunk, 0, chunk.Length);
+          dataClient.SetNextChunk(chunk);
+          ReportProgress(100 * (int)dataStream.Position / (int)dataStream.Length);
+        }
+        if (host.CancellationPending) {
+          args.Cancel = true;
+          dataClient.AbortTransfer();
+        } else {
+          dataClient.TransferDone();
+        }
+        dataClient.Close();
+      }
+    }
+
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/EntityEditorSupport.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/EntityEditorSupport.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/EntityEditorSupport.cs	(revision 5296)
@@ -0,0 +1,39 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Data;
+using System.Collections.ObjectModel;
+
+namespace HeuristicLab.OKB.Cockpit.Admin {
+  public static class EntityEditorSupport {
+
+    public static IEnumerable<T> GetObjects<T>(DataTable table, IEnumerable<string> propertyNames) where T : class {
+      foreach (DataRow row in table.Rows) {
+        if (row["Id"] != DBNull.Value) {
+          T o = Activator.CreateInstance<T>();
+          foreach (string name in propertyNames)
+            typeof(T).GetProperty(name).SetValue(o, row[name] == DBNull.Value ? null : (object)row[name], null);
+          yield return o;
+        }
+      }
+    }
+
+    public static void ShowSelector<T>(Func<T, bool> filter, Action<IEnumerable<T>> updater) where T : class {
+      var loader = new TableLoadWorker(typeof(T).Name, false);
+      loader.RunWorkerCompleted += (s, a) => {
+        var objects = GetObjects<T>(loader.Table, new[] { "Id", "Name", "Description", }).ToList();
+        RelationEditorWindow relationEditor = new RelationEditorWindow() {
+          Title = typeof(T).Name,
+          AvailableObjects = new ObservableCollection<object>(objects.Cast<object>()),
+          SelectedObjects = new ObservableCollection<object>(objects.Where(o => filter(o)).Cast<object>()),
+        };
+        if (relationEditor.ShowDialog() == true) {
+          updater(relationEditor.SelectedObjects.Cast<T>());
+        }
+      };
+      loader.RunWorkerAsync();
+    }
+
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/HeuristicLab.OKB.Cockpit.Admin-3.3.csproj
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/HeuristicLab.OKB.Cockpit.Admin-3.3.csproj	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/HeuristicLab.OKB.Cockpit.Admin-3.3.csproj	(revision 5296)
@@ -0,0 +1,396 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{9AADAE96-361F-48F0-B9B0-31B7DACD0492}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.OKB.Cockpit.Admin</RootNamespace>
+    <AssemblyName>HeuristicLab.OKB.Cockpit.Admin-3.3</AssemblyName>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <FileUpgradeFlags>
+    </FileUpgradeFlags>
+    <OldToolsVersion>3.5</OldToolsVersion>
+    <UpgradeBackupLocation />
+    <PublishUrl>publish\</PublishUrl>
+    <Install>true</Install>
+    <InstallFrom>Disk</InstallFrom>
+    <UpdateEnabled>false</UpdateEnabled>
+    <UpdateMode>Foreground</UpdateMode>
+    <UpdateInterval>7</UpdateInterval>
+    <UpdateIntervalUnits>Days</UpdateIntervalUnits>
+    <UpdatePeriodically>false</UpdatePeriodically>
+    <UpdateRequired>false</UpdateRequired>
+    <MapFileExtensions>true</MapFileExtensions>
+    <ApplicationRevision>0</ApplicationRevision>
+    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
+    <IsWebBootstrapper>false</IsWebBootstrapper>
+    <UseApplicationTrust>false</UseApplicationTrust>
+    <BootstrapperEnabled>true</BootstrapperEnabled>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="HeuristicLab.MainForm-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.MainForm-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Persistence-3.3, Version=3.3.0.2744, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=x86">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Persistence-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.PluginInfrastructure-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.PluginInfrastructure-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="PresentationCore">
+      <RequiredTargetFramework>3.0</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="PresentationFramework">
+      <RequiredTargetFramework>3.0</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Core">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Runtime.Serialization">
+      <RequiredTargetFramework>3.0</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.ServiceModel">
+      <RequiredTargetFramework>3.0</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml.Linq">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data.DataSetExtensions">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+    <Reference Include="WindowsBase">
+      <RequiredTargetFramework>3.0</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="WindowsFormsIntegration">
+      <RequiredTargetFramework>3.0</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="WPFToolkit, Version=3.5.40128.1, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\HeuristicLab.OKB.Cockpit\lib\WPFToolkit.dll</HintPath>
+    </Reference>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="AlgorithmEditor.xaml.cs">
+      <DependentUpon>AlgorithmEditor.xaml</DependentUpon>
+    </Compile>
+    <None Include="app.config" />
+    <None Include="HeuristicLabOkbCockpitAdminPlugin.cs.frame" />
+    <Compile Include="DataClientHelper.cs" />
+    <Compile Include="EntityEditorSupport.cs" />
+    <Compile Include="HeuristicLabOkbCockpitAdminPlugin.cs" />
+    <Compile Include="IOperatorGraphEditor.cs" />
+    <Compile Include="ItemSelector.xaml.cs">
+      <DependentUpon>ItemSelector.xaml</DependentUpon>
+    </Compile>
+    <Compile Include="OperatorGraphEditorHost.xaml.cs">
+      <DependentUpon>OperatorGraphEditorHost.xaml</DependentUpon>
+    </Compile>
+    <Compile Include="PersistenceHacker.cs" />
+    <Compile Include="ProblemEditor.xaml.cs">
+      <DependentUpon>ProblemEditor.xaml</DependentUpon>
+    </Compile>
+    <None Include="Properties\AssemblyInfo.frame" />
+    <Compile Include="RelationEditorWindow.xaml.cs">
+      <DependentUpon>RelationEditorWindow.xaml</DependentUpon>
+    </Compile>
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="Service References\OKBAdmin\Reference.cs">
+      <AutoGen>True</AutoGen>
+      <DesignTime>True</DesignTime>
+      <DependentUpon>Reference.svcmap</DependentUpon>
+    </Compile>
+    <Compile Include="Service References\OKBData\Reference.cs">
+      <AutoGen>True</AutoGen>
+      <DesignTime>True</DesignTime>
+      <DependentUpon>Reference.svcmap</DependentUpon>
+    </Compile>
+    <Compile Include="Service References\OKBTables\Reference.cs">
+      <AutoGen>True</AutoGen>
+      <DesignTime>True</DesignTime>
+      <DependentUpon>Reference.svcmap</DependentUpon>
+    </Compile>
+    <Compile Include="TableLoadWorker.cs">
+      <SubType>Component</SubType>
+    </Compile>
+    <Compile Include="TableOverview.xaml.cs">
+      <DependentUpon>TableOverview.xaml</DependentUpon>
+    </Compile>
+    <Compile Include="TableView.xaml.cs">
+      <DependentUpon>TableView.xaml</DependentUpon>
+    </Compile>
+  </ItemGroup>
+  <ItemGroup>
+    <Page Include="AlgorithmEditor.xaml">
+      <Generator>MSBuild:Compile</Generator>
+      <SubType>Designer</SubType>
+      <Generator>MSBuild:Compile</Generator>
+      <SubType>Designer</SubType>
+    </Page>
+  </ItemGroup>
+  <ItemGroup>
+    <Page Include="ItemSelector.xaml">
+      <Generator>MSBuild:Compile</Generator>
+      <SubType>Designer</SubType>
+      <Generator>MSBuild:Compile</Generator>
+      <SubType>Designer</SubType>
+    </Page>
+  </ItemGroup>
+  <ItemGroup>
+    <Page Include="OperatorGraphEditorHost.xaml">
+      <Generator>MSBuild:Compile</Generator>
+      <SubType>Designer</SubType>
+      <Generator>MSBuild:Compile</Generator>
+      <SubType>Designer</SubType>
+    </Page>
+  </ItemGroup>
+  <ItemGroup>
+    <Page Include="ProblemEditor.xaml">
+      <Generator>MSBuild:Compile</Generator>
+      <SubType>Designer</SubType>
+      <Generator>MSBuild:Compile</Generator>
+      <SubType>Designer</SubType>
+    </Page>
+  </ItemGroup>
+  <ItemGroup>
+    <Page Include="RelationEditorWindow.xaml">
+      <Generator>MSBuild:Compile</Generator>
+      <SubType>Designer</SubType>
+      <Generator>MSBuild:Compile</Generator>
+      <SubType>Designer</SubType>
+    </Page>
+  </ItemGroup>
+  <ItemGroup>
+    <Page Include="TableOverview.xaml">
+      <Generator>MSBuild:Compile</Generator>
+      <SubType>Designer</SubType>
+      <Generator>MSBuild:Compile</Generator>
+      <SubType>Designer</SubType>
+    </Page>
+  </ItemGroup>
+  <ItemGroup>
+    <Page Include="TableView.xaml">
+      <Generator>MSBuild:Compile</Generator>
+      <SubType>Designer</SubType>
+      <Generator>MSBuild:Compile</Generator>
+      <SubType>Designer</SubType>
+    </Page>
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\HeuristicLab.BackgroundProcessing\HeuristicLab.BackgroundProcessing-3.3.csproj">
+      <Project>{589BECAE-69B0-4EB1-8C06-C073531762B7}</Project>
+      <Name>HeuristicLab.BackgroundProcessing-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.MainForm.WPF\HeuristicLab.MainForm.WPF-3.3.csproj">
+      <Project>{1DBC4D60-0064-4A53-B48C-63D144A67B07}</Project>
+      <Name>HeuristicLab.MainForm.WPF-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.OKB.Client\HeuristicLab.OKB.Client-3.3.csproj">
+      <Project>{B157FAB7-9B6D-4BAE-ACF2-C6FB7D22EBBD}</Project>
+      <Name>HeuristicLab.OKB.Client-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.OKB.Cockpit\HeuristicLab.OKB.Cockpit-3.3.csproj">
+      <Project>{52567721-66A9-4411-9ED6-48DE37732868}</Project>
+      <Name>HeuristicLab.OKB.Cockpit-3.3</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <WCFMetadata Include="Service References\" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Properties\DataSources\System.Data.DataTable.datasource" />
+    <None Include="Service References\OKBAdmin\HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Algorithm.datasource">
+      <DependentUpon>Reference.svcmap</DependentUpon>
+    </None>
+    <None Include="Service References\OKBAdmin\HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Platform.datasource">
+      <DependentUpon>Reference.svcmap</DependentUpon>
+    </None>
+    <None Include="Service References\OKBAdmin\HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Problem.datasource">
+      <DependentUpon>Reference.svcmap</DependentUpon>
+    </None>
+    <None Include="Service References\OKBAdmin\HeuristicLab.Services.OKB.DataAccess.xsd">
+      <SubType>Designer</SubType>
+    </None>
+    <None Include="Service References\OKBAdmin\service.wsdl" />
+    <None Include="Service References\OKBAdmin\service.xsd">
+      <SubType>Designer</SubType>
+    </None>
+    <None Include="Service References\OKBAdmin\service1.xsd">
+      <SubType>Designer</SubType>
+    </None>
+    <None Include="Service References\OKBAdmin\System.Data.Linq.xsd">
+      <SubType>Designer</SubType>
+    </None>
+    <None Include="Service References\OKBData\HeuristicLab.Services.OKB.xsd">
+      <SubType>Designer</SubType>
+    </None>
+    <None Include="Service References\OKBData\service.wsdl" />
+    <None Include="Service References\OKBData\service.xsd">
+      <SubType>Designer</SubType>
+    </None>
+    <None Include="Service References\OKBData\service1.xsd">
+      <SubType>Designer</SubType>
+    </None>
+    <None Include="Service References\OKBTables\Arrays.xsd">
+      <SubType>Designer</SubType>
+    </None>
+    <None Include="Service References\OKBTables\service.wsdl" />
+    <None Include="Service References\OKBTables\service.xsd">
+      <SubType>Designer</SubType>
+    </None>
+    <None Include="Service References\OKBTables\service1.xsd">
+      <SubType>Designer</SubType>
+    </None>
+    <None Include="Service References\OKBTables\System.Data.xsd">
+      <SubType>Designer</SubType>
+    </None>
+    <None Include="UpdateLocalInstallation.cmd" />
+  </ItemGroup>
+  <ItemGroup>
+    <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
+      <Install>false</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.5 SP1</ProductName>
+      <Install>true</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
+      <Visible>False</Visible>
+      <ProductName>Windows Installer 3.1</ProductName>
+      <Install>true</Install>
+    </BootstrapperPackage>
+  </ItemGroup>
+  <ItemGroup>
+    <WCFMetadataStorage Include="Service References\OKBAdmin\" />
+    <WCFMetadataStorage Include="Service References\OKBData\" />
+    <WCFMetadataStorage Include="Service References\OKBTables\" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Service References\OKBAdmin\configuration91.svcinfo" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Service References\OKBAdmin\configuration.svcinfo" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Service References\OKBAdmin\Reference.svcmap">
+      <Generator>WCF Proxy Generator</Generator>
+      <LastGenOutput>Reference.cs</LastGenOutput>
+    </None>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Service References\OKBData\configuration91.svcinfo" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Service References\OKBData\configuration.svcinfo" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Service References\OKBData\Reference.svcmap">
+      <Generator>WCF Proxy Generator</Generator>
+      <LastGenOutput>Reference.cs</LastGenOutput>
+    </None>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Service References\OKBTables\configuration91.svcinfo" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Service References\OKBTables\configuration.svcinfo" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Service References\OKBTables\Reference.svcmap">
+      <Generator>WCF Proxy Generator</Generator>
+      <LastGenOutput>Reference.cs</LastGenOutput>
+    </None>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+SubWCRev "%25ProjectDir%25\" "%25ProjectDir%25\Properties\AssemblyInfo.frame" "%25ProjectDir%25\Properties\AssemblyInfo.cs"
+SubWCRev "%25ProjectDir%25\" "%25ProjectDir%25\HeuristicLabOKBCockpitAdminPlugin.cs.frame" "%25ProjectDir%25\HeuristicLabOKBCockpitAdminPlugin.cs"</PreBuildEvent>
+    <PostBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call UpdateLocalInstallation.cmd</PostBuildEvent>
+  </PropertyGroup>
+</Project>
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/HeuristicLabOkbCockpitAdminPlugin.cs.frame
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/HeuristicLabOkbCockpitAdminPlugin.cs.frame	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/HeuristicLabOkbCockpitAdminPlugin.cs.frame	(revision 5296)
@@ -0,0 +1,14 @@
+﻿using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.OKB.Cockpit.Admin {
+
+  [Plugin("HeuristicLab.OKB.Cockpit.Admin", "3.3.0.$WCREV$")]
+  [PluginFile("HeuristicLab.OKB.Cockpit.Admin-3.3.dll", PluginFileType.Assembly)]
+  [PluginFile("WPFToolkit.dll", PluginFileType.Assembly)]
+  [PluginDependency("HeuristicLab.MainForm", "3.3")]
+  [PluginDependency("HeuristicLab.MainForm.WPF", "3.3")]
+  [PluginDependency("HeuristicLab.OKB.Cockpit", "3.3")]
+  [PluginDependency("HeuristicLab.BackgroundProcessing", "3.3")]
+  [PluginDependency("HeuristicLab.Persistence", "3.3")]
+  public class HeuristicLabOkbCockpitAdminPlugin : PluginBase {}
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/IOperatorGraphEditor.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/IOperatorGraphEditor.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/IOperatorGraphEditor.cs	(revision 5296)
@@ -0,0 +1,16 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+
+namespace HeuristicLab.OKB.Cockpit.Admin {
+  public interface IOperatorGraphEditor {
+    string PlatformName { get; }
+    void Load(byte[] data);
+    Control CreateAlgorithmControl();
+    Control CreateProblemControl();
+    byte[] GetAlgorithmData(System.Windows.Forms.Control control);
+    byte[] GetProblemData(System.Windows.Forms.Control control);
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/ItemSelector.xaml
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/ItemSelector.xaml	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/ItemSelector.xaml	(revision 5296)
@@ -0,0 +1,52 @@
+﻿<UserControl xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+             x:Class="HeuristicLab.OKB.Cockpit.Admin.ItemSelector">
+  <UserControl.Resources>
+    <Style TargetType="{x:Type ListBoxItem}">
+      <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
+    </Style>
+    <ItemsPanelTemplate x:Key="ButtonPanel">
+      <StackPanel CanHorizontallyScroll="True" CanVerticallyScroll="False"/>
+    </ItemsPanelTemplate>
+    <DataTemplate x:Key="AvailableButton">
+      <ToggleButton Margin="0 0 2 0"
+                    Content="{Binding Path=Obj.Name}"
+                    ToolTip="{Binding Path=Obj.Description}"
+                    IsChecked="{Binding Path=IsChecked}"
+                    Tag="{Binding}"
+                    Click="OnAvailableClicked"/>
+    </DataTemplate>
+    <DataTemplate x:Key="SelectedButton">
+      <Button Content="{Binding Name}"
+              ToolTip="{Binding Description}"
+              Tag="{Binding}"
+              Click="OnSelectedClicked"/>
+    </DataTemplate>
+  </UserControl.Resources>
+
+  <Grid>
+
+    <Grid.RowDefinitions>
+      <RowDefinition/>
+    </Grid.RowDefinitions>
+    <Grid.ColumnDefinitions>
+      <ColumnDefinition/>
+      <ColumnDefinition/>
+    </Grid.ColumnDefinitions>
+
+    <GroupBox Name="AvailableObjectsGroupBox" Header="Available" Margin="0 0 4 0">
+      <ListBox Name="AvailableObjectsList"
+               ItemsPanel="{StaticResource ButtonPanel}"
+               ItemTemplate="{StaticResource AvailableButton}"
+               SelectedValuePath="Id"/>
+    </GroupBox>
+    <GridSplitter Width="3"/>
+
+    <GroupBox Name="SelectedObjectsGroupBox" Header="Selected" Grid.Column="2">
+      <ListBox Name="SelectedObjectsList"
+               ItemsPanel="{StaticResource ButtonPanel}"
+               ItemTemplate="{StaticResource SelectedButton}"
+               SelectedValuePath="Id"/>
+    </GroupBox>
+  </Grid>
+</UserControl>
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/ItemSelector.xaml.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/ItemSelector.xaml.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/ItemSelector.xaml.cs	(revision 5296)
@@ -0,0 +1,158 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Windows.Controls;
+using HeuristicLab.MainForm.WPF;
+using System.Windows;
+using System.Collections.ObjectModel;
+using System.Collections.Specialized;
+using System.Windows.Controls.Primitives;
+using System.Collections;
+using System.Diagnostics;
+using System.ComponentModel;
+
+namespace HeuristicLab.OKB.Cockpit.Admin {
+
+  public partial class ItemSelector : UserControl, IOKBCockpitItem {
+
+    class SelectionWrapper {
+
+      public event EventHandler IsCheckedChanged;
+      private bool isChecked;
+      public bool IsChecked {
+        get { return isChecked; }
+        set {
+          if (value == isChecked) return;
+          isChecked = value;
+          OnIsCheckedChanged();
+        }
+      }
+
+      public object Obj { get; set; }
+
+      public SelectionWrapper() {
+      }
+
+      public SelectionWrapper(object o) {
+        Obj = o;
+      }
+
+      protected void OnIsCheckedChanged() {
+        if (IsCheckedChanged != null)
+          IsCheckedChanged(this, new EventArgs());
+      }
+
+      public override bool Equals(object obj) {
+        return Obj.Equals(obj);
+      }
+
+      public override int GetHashCode() {
+        if (Obj == null)
+          return 0;
+        return Obj.GetHashCode();
+      }
+    }
+
+    public static DependencyProperty AvailableObjectsProperty = DependencyProperty.Register(
+      "AvailableObjects", typeof(ObservableCollection<object>), typeof(ItemSelector),
+      new PropertyMetadata(new ObservableCollection<object>()));
+
+    public static DependencyProperty SelectedObjectsProperty = DependencyProperty.Register(
+      "SelectedObjects", typeof(ObservableCollection<object>), typeof(ItemSelector),
+      new PropertyMetadata(new ObservableCollection<object>()));
+
+    public ObservableCollection<object> AvailableObjects {
+      get { return (ObservableCollection<object>)GetValue(AvailableObjectsProperty); }
+      set { SetValue(AvailableObjectsProperty, value); }
+    }
+
+    public ObservableCollection<object> SelectedObjects {
+      get { return (ObservableCollection<object>)GetValue(SelectedObjectsProperty); }
+      set { SetValue(SelectedObjectsProperty, value); }
+    }
+
+    private ObservableCollection<SelectionWrapper> DisplayedAvailableObjects;
+
+    protected override void OnPropertyChanged(DependencyPropertyChangedEventArgs e) {
+      base.OnPropertyChanged(e);
+      if (e.Property == AvailableObjectsProperty) {
+        ((ObservableCollection<object>)e.OldValue).CollectionChanged -= PropageAvailableObjectsChange;
+        AvailableObjects.CollectionChanged += PropageAvailableObjectsChange;
+        PropageAvailableObjectsChange(this, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset));
+        ValidateSelection();
+      } else if (e.Property == SelectedObjectsProperty) {
+        ValidateSelection();
+      }
+    }
+
+    private void ValidateSelection() {
+      if (SelectedObjects == null)
+        return;
+      var selectedObjects = new HashSet<object>(SelectedObjects);
+      SelectedObjects.Clear();
+      if (AvailableObjects != null) {
+        selectedObjects.IntersectWith(AvailableObjects);
+        foreach (var wrapper in DisplayedAvailableObjects)
+          wrapper.IsChecked = selectedObjects.Contains(wrapper.Obj);
+        foreach (var o in selectedObjects)
+          SelectedObjects.Add(o);
+      }
+    }
+
+    private void PropageAvailableObjectsChange(object sender, NotifyCollectionChangedEventArgs args) {
+      switch (args.Action) {
+        case NotifyCollectionChangedAction.Add:
+          foreach (var o in args.NewItems) DisplayedAvailableObjects.Add(new SelectionWrapper(o)); break;
+        case NotifyCollectionChangedAction.Move:
+          DisplayedAvailableObjects.Move(args.OldStartingIndex, args.NewStartingIndex); break;
+        case NotifyCollectionChangedAction.Remove:
+          foreach (var o in args.OldItems) DisplayedAvailableObjects.Remove(new SelectionWrapper(o)); break;
+        case NotifyCollectionChangedAction.Replace:
+          foreach (var o in args.OldItems) DisplayedAvailableObjects.Remove(new SelectionWrapper(o));
+          foreach (var o in args.NewItems) DisplayedAvailableObjects.Insert(args.OldStartingIndex, new SelectionWrapper(o));
+          break;
+        case NotifyCollectionChangedAction.Reset:
+          DisplayedAvailableObjects.Clear();
+          foreach (var o in AvailableObjects) DisplayedAvailableObjects.Add(new SelectionWrapper(o));
+          break;
+      }
+    }
+
+    public ItemSelector() {
+      InitializeComponent();
+      DisplayedAvailableObjects = new ObservableCollection<SelectionWrapper>();
+      AvailableObjectsList.ItemsSource = DisplayedAvailableObjects;
+      SelectedObjectsList.DataContext = this;
+      SelectedObjectsList.SetBinding(ListBox.ItemsSourceProperty, "SelectedObjects");
+      AvailableObjects.CollectionChanged += PropageAvailableObjectsChange;
+    }
+
+
+
+    protected void OnAvailableClicked(object sender, RoutedEventArgs args) {
+      ToggleButton button = args.OriginalSource as ToggleButton;
+      if (button == null) return;
+      SelectionWrapper wrapper = button.Tag as SelectionWrapper;
+      if (wrapper == null) return;
+      if (!SelectedObjects.Contains(wrapper.Obj)) {
+        SelectedObjects.Add(wrapper.Obj);
+        wrapper.IsChecked = true;
+      } else {
+        SelectedObjects.Remove(wrapper.Obj);
+        wrapper.IsChecked = false;
+      }
+    }
+
+    protected void OnSelectedClicked(object sender, RoutedEventArgs args) {
+      Button button = args.OriginalSource as Button;
+      if (button == null) return;
+      object o = button.Tag;
+      Debug.Assert(SelectedObjects.Contains(o));
+      SelectedObjects.Remove(o);
+      var wrappers = DisplayedAvailableObjects.Where(w => w.Obj == o);
+      foreach (var w in wrappers)
+        w.IsChecked = false;
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/OperatorGraphEditorHost.xaml
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/OperatorGraphEditorHost.xaml	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/OperatorGraphEditorHost.xaml	(revision 5296)
@@ -0,0 +1,8 @@
+﻿<UserControl xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+             xmlns:wfi="clr-namespace:System.Windows.Forms.Integration;assembly=WindowsFormsIntegration"
+             x:Class="HeuristicLab.OKB.Cockpit.Admin.OperatorGraphEditorHost">
+  <GroupBox Name="OperatorGraphGroupBox" Header="Operator Graph">
+    <wfi:WindowsFormsHost Padding="0 0 80 50" Name="FormsHost"/>
+  </GroupBox>
+</UserControl>
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/OperatorGraphEditorHost.xaml.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/OperatorGraphEditorHost.xaml.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/OperatorGraphEditorHost.xaml.cs	(revision 5296)
@@ -0,0 +1,76 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Windows.Controls;
+using System.Windows;
+using HeuristicLab.BackgroundProcessing;
+using System.IO;
+using HeuristicLab.Persistence.Default.Xml;
+using HeuristicLab.Persistence.Core;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.OKB.Cockpit.Admin {
+
+  public partial class OperatorGraphEditorHost : UserControl {
+
+    public enum EditorType { Algorithm, Problem };
+
+    private IOperatorGraphEditor activeEditor;
+    private Dictionary<string, IOperatorGraphEditor> availableEditors;
+
+    public OperatorGraphEditorHost() {
+      InitializeComponent();
+      availableEditors = ApplicationManager.Manager
+        .GetInstances<IOperatorGraphEditor>()
+        .ToDictionary(e => e.PlatformName, e => e);
+    }
+
+    public void LoadData(byte[] data, OKBAdmin.Platform platform, EditorType type) {
+      availableEditors.TryGetValue(platform.Name, out activeEditor);
+      if (activeEditor == null) {
+        MessageBox.Show(
+          String.Format("Unsupported platform '{0}'", platform.Name),
+          typeof(OperatorGraphEditorHost).Name,
+          MessageBoxButton.OK, MessageBoxImage.Error);
+        return;
+      }
+      try {
+        activeEditor.Load(data);
+      } catch (Exception x) {
+        MessageBox.Show(
+          String.Format("Could not load {0} implementation:\n{1}", platform.Name, x.ToString()),
+          typeof(OperatorGraphEditorHost).Name,
+          MessageBoxButton.OK, MessageBoxImage.Error);
+      }
+      try {
+        Dispatcher.Invoke(new Action(() => {
+          if (type == EditorType.Algorithm) {
+            FormsHost.Child = activeEditor.CreateAlgorithmControl();
+          } else {
+            FormsHost.Child = activeEditor.CreateProblemControl();
+          }
+        }));
+      } catch (Exception x) {
+        MessageBox.Show(
+          String.Format("Could not instatiate operator graph editor:\n{1}", x.ToString()),
+          typeof(OperatorGraphEditorHost).Name,
+          MessageBoxButton.OK, MessageBoxImage.Error);
+      }
+    }
+
+    public byte[] GetAlgorithmData() {
+      return (byte[])Dispatcher.Invoke(new Func<System.Windows.Forms.Control, byte[]>(control => {
+        if (activeEditor == null) return null;
+        return activeEditor.GetAlgorithmData(control);
+      }), FormsHost.Child);
+    }
+
+    public byte[] GetProblemData() {
+      return (byte[])Dispatcher.Invoke(new Func<System.Windows.Forms.Control, byte[]>(control => {
+        if (activeEditor == null) return null;
+        return activeEditor.GetProblemData(control);
+      }), FormsHost.Child);
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/PersistenceHacker.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/PersistenceHacker.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/PersistenceHacker.cs	(revision 5296)
@@ -0,0 +1,61 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Windows.Controls;
+using HeuristicLab.BackgroundProcessing;
+using System.Windows;
+using HeuristicLab.MainForm.WPF;
+using HeuristicLab.MainForm;
+using System.IO;
+
+namespace HeuristicLab.OKB.Cockpit.Admin {
+  public class PersistenceHacker {
+
+    public static void Upload(OKBData.EntityType type, int id) {
+      Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog() {
+        FileName = "Entity",
+        DefaultExt = ".zip",
+        Filter = "Zip Files (HL 3.3) (.zip)|*.zip|GZip Files (HL 2.5) (*.gz)|*.gz",
+        CheckFileExists = true,
+        CheckPathExists = true,
+      };
+      if (dlg.ShowDialog() != true)
+        return;
+      var saver = new ObservableBackgroundWorker("uploading implementation");
+      saver.DoWork += (s, a) => {
+        var stream = new FileStream(dlg.FileName, FileMode.Open, FileAccess.Read);
+        byte[] data = new byte[stream.Length];
+        stream.Read(data, 0, (int)stream.Length);
+        stream.Close();
+        new DataClientHelper(saver, a).Save(type, id, data);
+      };
+      saver.RunWorkerAsync();
+    }
+
+    public static void Download(OKBData.EntityType type, int id) {
+      var loader = new ObservableBackgroundWorker("downloading implementation");
+      byte[] data = null;
+      loader.DoWork += (s, a) => {
+        data = new DataClientHelper(loader, a).Load(type, id);
+      };
+      loader.RunWorkerCompleted += (s, a) => {
+        if (data == null)
+          return;
+        Microsoft.Win32.SaveFileDialog dlg = new Microsoft.Win32.SaveFileDialog() {
+          FileName = "Entity",
+          DefaultExt = ".zip",
+          Filter = "Zip Files (HL 3.3) (.zip)|*.zip|GZip Files (HL 2.5)|*.gz",
+          OverwritePrompt = true,
+          CheckPathExists = true,
+        };
+        if (dlg.ShowDialog() != true)
+          return;
+        var stream = new FileStream(dlg.FileName, FileMode.Create);
+        stream.Write(data, 0, data.Length);
+        stream.Close();
+      };
+      loader.RunWorkerAsync();
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/ProblemEditor.xaml
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/ProblemEditor.xaml	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/ProblemEditor.xaml	(revision 5296)
@@ -0,0 +1,61 @@
+﻿<UserControl xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+             xmlns:src="clr-namespace:HeuristicLab.OKB.Cockpit.Admin"
+             x:Class="HeuristicLab.OKB.Cockpit.Admin.ProblemEditor">
+  <UserControl.Resources>
+    <Style TargetType="{x:Type Button}">
+      <Setter Property="Padding" Value="5 0 5 0"/>
+      <Setter Property="Margin" Value="1 0 1 0"/>
+    </Style>
+  </UserControl.Resources>
+  <DockPanel>
+
+    <GroupBox DockPanel.Dock="Top" Header="Master Data">
+      <Grid>
+        <Grid.RowDefinitions>
+          <RowDefinition Height="Auto"/>
+          <RowDefinition Height="Auto"/>
+        </Grid.RowDefinitions>
+        <Grid.ColumnDefinitions>
+          <ColumnDefinition Width="Auto"/>
+          <ColumnDefinition Width="Auto"/>
+          <ColumnDefinition Width="*"/>
+          <ColumnDefinition Width="Auto"/>
+          <ColumnDefinition Width="Auto"/>
+          <ColumnDefinition Width="Auto"/>
+        </Grid.ColumnDefinitions>
+        <TextBlock Grid.Column="0">Id</TextBlock>
+        <TextBlock Grid.Column="1">Name</TextBlock>
+        <TextBlock Grid.Column="2">Description</TextBlock>
+
+        <TextBox IsEnabled="False" Grid.Column="0" Grid.Row="1" Name="IdBox"/>
+        <TextBox Grid.Column="1" Grid.Row="1" Name="NameBox"/>
+        <TextBox Grid.Column="2" Grid.Row="1" Name="DescriptionBox" TextWrapping="Wrap"/>
+
+        <ComboBox Name="SolutionRepresentationBox" Grid.Column="3" SelectedValuePath="Id"  DisplayMemberPath="Name"/>
+        <Button Name="ParametersButton" Grid.Column="3" Grid.Row="1" Click="OnViewParameters">Parameters</Button>
+
+        <Button Grid.Column="4" Grid.Row="0" Click="OnLoad">Reload</Button>
+        <Button Grid.Column="4" Grid.Row="1" Click="OnSave">Save</Button>
+
+        <Button Grid.Column="5" Grid.Row="0" Click="OnDownload">Download...</Button>
+        <Button Grid.Column="5" Grid.Row="1" Click="OnUpload">Upload...</Button>
+      </Grid>
+    </GroupBox>
+    <GroupBox Header="Problem Characteristics" DockPanel.Dock="Right">
+      <ListBox Name="ProblemCharacteristicsList" HorizontalContentAlignment="Stretch">
+        <ListBox.ItemTemplate>
+          <DataTemplate>
+            <ListBoxItem>
+              <UniformGrid Columns="2">
+                <ToggleButton Content="{Binding Name}" IsChecked="{Binding IsSelected, Mode=TwoWay}" ToolTip="{Binding Description}"/>
+                <TextBox MinWidth="40" Text="{Binding Value, Mode=TwoWay}" ToolTip="{Binding DataType}"/>
+              </UniformGrid>
+            </ListBoxItem>
+          </DataTemplate>
+        </ListBox.ItemTemplate>
+      </ListBox>
+    </GroupBox>
+    <src:OperatorGraphEditorHost x:Name="OperatorGraphEditor"/>
+  </DockPanel>
+</UserControl>
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/ProblemEditor.xaml.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/ProblemEditor.xaml.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/ProblemEditor.xaml.cs	(revision 5296)
@@ -0,0 +1,302 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.MainForm.WPF;
+using System.Windows.Controls;
+using System.Windows;
+using HeuristicLab.BackgroundProcessing;
+using System.Diagnostics;
+using System.IO;
+using HeuristicLab.Persistence.Default.Xml;
+using HeuristicLab.Persistence.Core;
+using System.Collections.ObjectModel;
+using HeuristicLab.MainForm;
+using System.Data;
+using System.Globalization;
+using HeuristicLab.OKB.Client;
+
+namespace HeuristicLab.OKB.Cockpit.Admin {
+  public partial class ProblemEditor : UserControl, IView, IOKBCockpitItem {
+
+    public static DependencyProperty ProblemProperty = DependencyProperty.Register(
+      "Problem", typeof(OKBAdmin.Problem), typeof(AlgorithmEditor));
+
+    public OKBAdmin.Problem Problem {
+      get { return (OKBAdmin.Problem)GetValue(ProblemProperty); }
+      set { SetValue(ProblemProperty, value); }
+    }
+
+    private Dictionary<int, Type> dataTypes;
+
+    public ProblemEditor() {
+      InitializeComponent();
+      Problem = null;
+      InitializeSolutionRepresentations();
+      InitializeDataTypes();
+      InitializeProblemCharacteristics();
+    }
+
+    protected void InitializeDataTypes() {
+      dataTypes = new Dictionary<int, Type>();
+      var loader = new TableLoadWorker("DataType", false);
+      loader.RunWorkerCompleted += (s, a) => {
+        foreach (DataRow row in loader.Table.Rows) {
+          try {
+            dataTypes.Add((int)row["Id"], Type.GetType((string)row["clrName"]));
+          } catch (Exception x) {
+            MessageBox.Show(
+              String.Format("Could not parse CLR name of database datatype '{0}':\n{1}", row["clrName"], x),
+              Caption, MessageBoxButton.OK, MessageBoxImage.Error);
+          }
+        }
+      };
+      loader.RunWorkerAsync();
+    }
+
+    protected void InitializeProblemCharacteristics() {
+      var loader = new TableLoadWorker("ProblemCharacteristic", false);
+      loader.RunWorkerCompleted += (s, a) => {
+        if (loader.Table != null) {
+          loader.Table.Columns.Add(new DataColumn("Value", typeof(string)));
+          loader.Table.Columns.Add(new DataColumn("IsSelected", typeof(bool)));
+          loader.Table.Columns.Add(new DataColumn("DataType", typeof(Type)));
+          foreach (DataRow row in loader.Table.Rows) {
+            try {
+              row["IsSelected"] = false;
+              row["DataType"] = dataTypes[(int)row["DataTypeId"]];
+            } catch { }
+          }
+          ProblemCharacteristicsList.ItemsSource = loader.Table.DefaultView;
+        }
+      };
+      loader.RunWorkerAsync();
+    }
+
+    protected void InitializeSolutionRepresentations() {
+      var loader = new TableLoadWorker("SolutionRepresentation", false);
+      loader.RunWorkerCompleted += (s, a) => {
+        if (loader.Table != null) {
+          SolutionRepresentationBox.ItemsSource = loader.Table.DefaultView;
+        }
+      };
+      loader.RunWorkerAsync();
+    }
+
+    protected override void OnPropertyChanged(DependencyPropertyChangedEventArgs e) {
+      base.OnPropertyChanged(e);
+      if (e.Property == ProblemProperty)
+        UpdateProblem();
+    }
+
+    private void UpdateProblem() {
+      if (Problem == null) {
+        Clear();
+        return;
+      }
+      OnLoad(this, new RoutedEventArgs());
+    }
+
+    private void Clear() {
+      IdBox.Text = null;
+      NameBox.Text = null;
+      DescriptionBox.Text = null;
+    }
+
+    private bool isLoading = false;
+    protected void OnLoad(object sender, RoutedEventArgs args) {
+      if (isLoading) return;
+      isLoading = true;
+      var loader = new ObservableBackgroundWorker("downloading problem") {
+        WorkerSupportsCancellation = true,
+        WorkerReportsProgress = true,
+      };
+      OKBAdmin.Problem problem = Problem;
+      loader.DoWork += (s, a) => {
+        OKBAdmin.AdminServiceClient client = ClientFactory.Create<OKBAdmin.AdminServiceClient, OKBAdmin.IAdminService>();
+        problem = client.GetCompleteProblem(problem.Id);
+        client.Close();
+        loader.ReportProgress(10);        
+        byte[] data = new DataClientHelper(loader, a) {
+          ReportProgress = p => loader.ReportProgress(10 + 80 * p / 100),
+        }.Load(OKBData.EntityType.Problem, problem.Id);
+        if (data != null && !loader.CancellationPending) {
+          OperatorGraphEditor.LoadData(data, problem.Platform, OperatorGraphEditorHost.EditorType.Problem);
+          loader.ReportProgress(100);
+        }
+      };
+      loader.RunWorkerCompleted += (s, a) => {
+        try {
+          if (problem == null) return;
+          Problem = problem;
+          IdBox.Text = Problem.Id.ToString();
+          NameBox.Text = Problem.Name;
+          DescriptionBox.Text = Problem.Description;
+          SolutionRepresentationBox.SelectedItem =
+            SolutionRepresentationBox.Items.Cast<DataRowView>()
+            .SingleOrDefault(sr => (int)sr["Id"] == Problem.SolutionRepresentation.Id);
+          LoadProblemCharacteristics();
+        } finally {
+          isLoading = false;
+        }
+      };
+      loader.RunWorkerAsync();
+    }
+
+    protected void LoadProblemCharacteristics() {
+      var pcs = new Dictionary<int, object>();
+      foreach (var pc in Problem.IntProblemCharacteristicValues)
+        pcs.Add(pc.ProblemCharacteristicId, pc.Value);
+      foreach (var pc in Problem.CharProblemCharacteristicValues)
+        pcs.Add(pc.ProblemCharacteristicId, pc.Value);
+      foreach (var pc in Problem.FloatProblemCharacteristicValues)
+        pcs.Add(pc.ProblemCharacteristicId, pc.Value);
+      foreach (DataRowView row in ProblemCharacteristicsList.Items) {
+        int id = (int)row["Id"];
+        if (pcs.ContainsKey(id)) {
+          row["IsSelected"] = true;
+          row["Value"] = pcs[id].ToString();
+        }
+      }
+    }
+
+    protected void OnSave(object sender, RoutedEventArgs args) {
+      StoreProblemCharacteristics();
+      Problem.Name = NameBox.Text;
+      Problem.Description = DescriptionBox.Text;
+      OKBAdmin.Problem problem = Problem;
+      OperatorGraphEditorHost editor = OperatorGraphEditor;
+      var saver = new ObservableBackgroundWorker("uploading problem") {
+        WorkerReportsProgress = true,
+        WorkerSupportsCancellation = true,
+      };
+      saver.DoWork += (s, a) => {
+        OKBAdmin.AdminServiceClient client = ClientFactory.Create<OKBAdmin.AdminServiceClient, OKBAdmin.IAdminService>();        
+        client.UpdateCompleteProblem(problem);
+        client.Close();
+        saver.ReportProgress(10);
+        byte[] data = editor.GetProblemData();
+        saver.ReportProgress(20);
+        if (data != null) {
+          new DataClientHelper(saver, a) {
+            ReportProgress = i => saver.ReportProgress(20 + 80 * i / 100)
+          }.Save(OKBData.EntityType.Problem, problem.Id, data);
+        } else {
+          saver.ReportProgress(100);
+        }
+      };
+      saver.RunWorkerAsync();
+    }
+
+    private void StoreProblemCharacteristics() {
+      Problem.IntProblemCharacteristicValues.Clear();
+      Problem.FloatProblemCharacteristicValues.Clear();
+      Problem.CharProblemCharacteristicValues.Clear();
+      foreach (DataRowView row in ProblemCharacteristicsList.Items) {
+        string value = row["Value"] as string;
+        if (string.IsNullOrEmpty(value) || !(bool)row["IsSelected"])
+          continue;
+        try {
+          Type dataType = (Type)row["DataType"];
+          if (dataType == typeof(int)) {
+            Problem.IntProblemCharacteristicValues.Add(new OKBAdmin.IntProblemCharacteristicValue() {
+              ProblemId = Problem.Id,
+              ProblemCharacteristicId = (int)row["Id"],
+              Value = int.Parse((string)row["Value"], CultureInfo.InvariantCulture.NumberFormat),
+            });
+          } else if (dataType == typeof(double)) {
+            Problem.FloatProblemCharacteristicValues.Add(new OKBAdmin.FloatProblemCharacteristicValue() {
+              ProblemId = Problem.Id,
+              ProblemCharacteristicId = (int)row["Id"],
+              Value = double.Parse((string)row["Value"], CultureInfo.InvariantCulture.NumberFormat),
+            });
+          } else if (dataType == typeof(string)) {
+            Problem.CharProblemCharacteristicValues.Add(new OKBAdmin.CharProblemCharacteristicValue() {
+              ProblemId = Problem.Id,
+              ProblemCharacteristicId = (int)row["Id"],
+              Value = (string)row["Value"],
+            });
+          }
+        } catch (Exception x) {
+          MessageBox.Show(
+            String.Format("Could not create problem characteristic {0} with value {1}:\n{2}",
+            row["Name"], row["Value"], x), Caption, MessageBoxButton.OK, MessageBoxImage.Error);
+        }
+      }
+    }
+
+    private bool ContentHasParameter(OKBAdmin.Parameter p) {
+      return Problem.Problem_Parameters.Any(ap => ap.ParameterId == p.Id);
+    }
+
+    protected void OnViewParameters(object sender, EventArgs args) {
+      if (sender == ParametersButton && Problem != null)
+        EntityEditorSupport.ShowSelector<OKBAdmin.Parameter>(ContentHasParameter, UpdateParameters);
+    }
+
+    private void UpdateParameters(IEnumerable<OKBAdmin.Parameter> parameters) {
+      Problem.Problem_Parameters.Clear();
+      foreach (OKBAdmin.Parameter p in parameters) {
+        Problem.Problem_Parameters.Add(new OKBAdmin.Problem_Parameter() {
+          ProblemId = Problem.Id,
+          ParameterId = p.Id,
+        });
+      }
+    }
+
+    private void OnDownload(object sender, EventArgs args) {
+      PersistenceHacker.Download(OKBData.EntityType.Problem, Problem.Id);
+    }
+
+    private void OnUpload(object sender, EventArgs args) {
+      PersistenceHacker.Upload(OKBData.EntityType.Problem, Problem.Id);
+    }
+
+    #region IView Members
+
+    public string Caption {
+      get { return "Problem Editor"; }
+      set { throw new NotSupportedException(); }
+    }
+
+    public event EventHandler CaptionChanged;
+    public event EventHandler Changed;    
+
+    public virtual void Close() {
+      MainFormManager.GetMainForm<WPFMainFormBase>().CloseView(this);
+      IsShown = false;
+    }
+
+    public void Hide() {
+      MainFormManager.GetMainForm<WPFMainFormBase>().HideView(this);
+      IsShown = false;
+    }
+
+    public bool IsShown { get; protected set; }
+
+    private bool readOnly = false;
+    public bool ReadOnly {
+      get {
+        return readOnly;
+      }
+      set {
+        if (value == readOnly) return;
+        readOnly = value;
+        OnReadOnlyChanged();
+      }
+    }
+    public event EventHandler ReadOnlyChanged;
+    protected void OnReadOnlyChanged() {
+      EventHandler handler = ReadOnlyChanged;
+      if (handler != null)
+        handler(this, EventArgs.Empty);
+    }
+
+    public void Show() {
+      MainFormManager.GetMainForm<WPFMainFormBase>().ShowView(this);
+      IsShown = true;
+    }
+
+    #endregion
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/Properties/AssemblyInfo.frame
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/Properties/AssemblyInfo.frame	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/Properties/AssemblyInfo.frame	(revision 5296)
@@ -0,0 +1,37 @@
+﻿using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using HeuristicLab.PluginInfrastructure;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.OKB.Cockpit.Admin")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("Microsoft")]
+[assembly: AssemblyProduct("HeuristicLab.OKB.Cockpit.Admin")]
+[assembly: AssemblyCopyright("Copyright © Microsoft 2010")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components.  If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("f2130e30-fa92-47f8-b4f5-c6f85fcc737a")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("3.3.0.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.0.$WCREV$")]
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/Properties/DataSources/System.Data.DataTable.datasource
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/Properties/DataSources/System.Data.DataTable.datasource	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/Properties/DataSources/System.Data.DataTable.datasource	(revision 5296)
@@ -0,0 +1,10 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<!--
+    This file is automatically generated by Visual Studio .Net. It is
+    used to store generic object data source configuration information.
+    Renaming the file extension or editing the content of this file may
+    cause the file to be unrecognizable by the program.
+-->
+<GenericObjectDataSource DisplayName="DataTable" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
+   <TypeInfo>System.Data.DataTable, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</TypeInfo>
+</GenericObjectDataSource>
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/RelationEditorWindow.xaml
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/RelationEditorWindow.xaml	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/RelationEditorWindow.xaml	(revision 5296)
@@ -0,0 +1,18 @@
+﻿<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+        xmlns:src="clr-namespace:HeuristicLab.OKB.Cockpit.Admin"
+        x:Class="HeuristicLab.OKB.Cockpit.Admin.RelationEditorWindow"
+        WindowStyle = "ToolWindow"
+        WindowStartupLocation = "CenterOwner"
+        ResizeMode = "CanResize"
+        ShowInTaskbar ="False"
+        SizeToContent="WidthAndHeight"
+        Topmost ="True">
+  <DockPanel>
+    <StackPanel Orientation="Horizontal" DockPanel.Dock="Bottom">
+      <Button Name="OK" Padding="10 0 10 0" Margin="0 0 5 0" Click="OnClick">OK</Button>
+      <Button Name="Cancel" Padding="10 0 10 0" Click="OnClick">Cancel</Button>
+    </StackPanel>
+    <src:ItemSelector x:Name="ItemSelector"/>
+  </DockPanel>
+</Window>
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/RelationEditorWindow.xaml.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/RelationEditorWindow.xaml.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/RelationEditorWindow.xaml.cs	(revision 5296)
@@ -0,0 +1,45 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Windows.Controls;
+using System.Windows;
+using System.Collections.ObjectModel;
+
+namespace HeuristicLab.OKB.Cockpit.Admin {
+  public partial class RelationEditorWindow : Window {
+
+    public static DependencyProperty AvailableObjectsProperty = DependencyProperty.Register(
+      "AvailableObjects", typeof(ObservableCollection<object>), typeof(RelationEditorWindow),
+      new PropertyMetadata(new ObservableCollection<object>()));
+
+    public static DependencyProperty SelectedObjectsProperty = DependencyProperty.Register(
+      "SelectedObjects", typeof(ObservableCollection<object>), typeof(RelationEditorWindow),
+      new PropertyMetadata(new ObservableCollection<object>()));
+
+    public ObservableCollection<object> AvailableObjects {
+      get { return (ObservableCollection<object>)GetValue(AvailableObjectsProperty); }
+      set { SetValue(AvailableObjectsProperty, value); }
+    }
+
+    public ObservableCollection<object> SelectedObjects {
+      get { return (ObservableCollection<object>)GetValue(SelectedObjectsProperty); }
+      set { SetValue(SelectedObjectsProperty, value); }
+    }
+
+    public RelationEditorWindow() {
+      InitializeComponent();
+      ItemSelector.DataContext = this;
+      ItemSelector.SetBinding(ItemSelector.AvailableObjectsProperty, "AvailableObjects");
+      ItemSelector.SetBinding(ItemSelector.SelectedObjectsProperty, "SelectedObjects");
+    }
+
+    protected void OnClick(object sender, EventArgs args) {
+      if (sender == OK)
+        DialogResult = true;
+      else if (sender == Cancel)
+        DialogResult = false;
+      Close();
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/Service References/OKBAdmin/HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Algorithm.datasource
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/Service References/OKBAdmin/HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Algorithm.datasource	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/Service References/OKBAdmin/HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Algorithm.datasource	(revision 5296)
@@ -0,0 +1,10 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<!--
+    This file is automatically generated by Visual Studio .Net. It is 
+    used to store generic object data source configuration information.  
+    Renaming the file extension or editing the content of this file may   
+    cause the file to be unrecognizable by the program.
+-->
+<GenericObjectDataSource DisplayName="Algorithm" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
+   <TypeInfo>HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Algorithm, Service References.OKBAdmin.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</TypeInfo>
+</GenericObjectDataSource>
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/Service References/OKBAdmin/HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Platform.datasource
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/Service References/OKBAdmin/HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Platform.datasource	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/Service References/OKBAdmin/HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Platform.datasource	(revision 5296)
@@ -0,0 +1,10 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<!--
+    This file is automatically generated by Visual Studio .Net. It is 
+    used to store generic object data source configuration information.  
+    Renaming the file extension or editing the content of this file may   
+    cause the file to be unrecognizable by the program.
+-->
+<GenericObjectDataSource DisplayName="Platform" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
+   <TypeInfo>HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Platform, Service References.OKBAdmin.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</TypeInfo>
+</GenericObjectDataSource>
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/Service References/OKBAdmin/HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Problem.datasource
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/Service References/OKBAdmin/HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Problem.datasource	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/Service References/OKBAdmin/HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Problem.datasource	(revision 5296)
@@ -0,0 +1,10 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<!--
+    This file is automatically generated by Visual Studio .Net. It is 
+    used to store generic object data source configuration information.  
+    Renaming the file extension or editing the content of this file may   
+    cause the file to be unrecognizable by the program.
+-->
+<GenericObjectDataSource DisplayName="Problem" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
+   <TypeInfo>HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Problem, Service References.OKBAdmin.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</TypeInfo>
+</GenericObjectDataSource>
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/Service References/OKBAdmin/HeuristicLab.Services.OKB.DataAccess.xsd
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/Service References/OKBAdmin/HeuristicLab.Services.OKB.DataAccess.xsd	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/Service References/OKBAdmin/HeuristicLab.Services.OKB.DataAccess.xsd	(revision 5296)
@@ -0,0 +1,1082 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:ser="http://schemas.microsoft.com/2003/10/Serialization/" xmlns:tns="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataAccess" elementFormDefault="qualified" targetNamespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataAccess" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:import namespace="http://schemas.microsoft.com/2003/10/Serialization/" />
+  <xs:import namespace="http://schemas.datacontract.org/2004/07/System.Data.Linq" />
+  <xs:complexType name="ArrayOfPlatform">
+    <xs:sequence>
+      <xs:element minOccurs="0" maxOccurs="unbounded" name="Platform" nillable="true" type="tns:Platform" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="ArrayOfPlatform" nillable="true" type="tns:ArrayOfPlatform" />
+  <xs:complexType name="Platform">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="Id" type="xs:int" />
+      <xs:element minOccurs="0" name="Name" nillable="true" type="xs:string" />
+      <xs:element minOccurs="0" name="Description" nillable="true" type="xs:string" />
+      <xs:element minOccurs="0" name="Problems" nillable="true" type="tns:ArrayOfProblem">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="Algorithms" nillable="true" type="tns:ArrayOfAlgorithm">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+    </xs:sequence>
+    <xs:attribute ref="ser:Id" />
+    <xs:attribute ref="ser:Ref" />
+  </xs:complexType>
+  <xs:element name="Platform" nillable="true" type="tns:Platform" />
+  <xs:complexType name="ArrayOfProblem">
+    <xs:sequence>
+      <xs:element minOccurs="0" maxOccurs="unbounded" name="Problem" nillable="true" type="tns:Problem" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="ArrayOfProblem" nillable="true" type="tns:ArrayOfProblem" />
+  <xs:complexType name="Problem">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="Id" type="xs:int" />
+      <xs:element minOccurs="0" name="ProblemClassId" type="xs:int" />
+      <xs:element minOccurs="0" name="PlatformId" type="xs:int" />
+      <xs:element minOccurs="0" name="SolutionRepresentationId" type="xs:int" />
+      <xs:element minOccurs="0" name="Name" nillable="true" type="xs:string" />
+      <xs:element minOccurs="0" name="Description" nillable="true" type="xs:string" />
+      <xs:element minOccurs="0" name="CharProblemCharacteristicValues" nillable="true" type="tns:ArrayOfCharProblemCharacteristicValue">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="Experiments" nillable="true" type="tns:ArrayOfExperiment">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="FloatProblemCharacteristicValues" nillable="true" type="tns:ArrayOfFloatProblemCharacteristicValue">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="IntProblemCharacteristicValues" nillable="true" type="tns:ArrayOfIntProblemCharacteristicValue">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="Problem_Parameters" nillable="true" type="tns:ArrayOfProblem_Parameter">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="ProblemData" nillable="true" type="tns:ProblemData">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="Platform" nillable="true" type="tns:Platform">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="ProblemClass" nillable="true" type="tns:ProblemClass">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="SolutionRepresentation" nillable="true" type="tns:SolutionRepresentation">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+    </xs:sequence>
+    <xs:attribute ref="ser:Id" />
+    <xs:attribute ref="ser:Ref" />
+  </xs:complexType>
+  <xs:element name="Problem" nillable="true" type="tns:Problem" />
+  <xs:complexType name="ArrayOfCharProblemCharacteristicValue">
+    <xs:sequence>
+      <xs:element minOccurs="0" maxOccurs="unbounded" name="CharProblemCharacteristicValue" nillable="true" type="tns:CharProblemCharacteristicValue" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="ArrayOfCharProblemCharacteristicValue" nillable="true" type="tns:ArrayOfCharProblemCharacteristicValue" />
+  <xs:complexType name="CharProblemCharacteristicValue">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="ProblemCharacteristicId" type="xs:int" />
+      <xs:element minOccurs="0" name="ProblemId" type="xs:int" />
+      <xs:element minOccurs="0" name="Value" nillable="true" type="xs:string" />
+      <xs:element minOccurs="0" name="Problem" nillable="true" type="tns:Problem">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="ProblemCharacteristic" nillable="true" type="tns:ProblemCharacteristic">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+    </xs:sequence>
+    <xs:attribute ref="ser:Id" />
+    <xs:attribute ref="ser:Ref" />
+  </xs:complexType>
+  <xs:element name="CharProblemCharacteristicValue" nillable="true" type="tns:CharProblemCharacteristicValue" />
+  <xs:complexType name="ProblemCharacteristic">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="Id" type="xs:int" />
+      <xs:element minOccurs="0" name="Name" nillable="true" type="xs:string" />
+      <xs:element minOccurs="0" name="Description" nillable="true" type="xs:string" />
+      <xs:element minOccurs="0" name="DataTypeId" type="xs:int" />
+      <xs:element minOccurs="0" name="CharProblemCharacteristicValues" nillable="true" type="tns:ArrayOfCharProblemCharacteristicValue">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="FloatProblemCharacteristicValues" nillable="true" type="tns:ArrayOfFloatProblemCharacteristicValue">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="IntProblemCharacteristicValues" nillable="true" type="tns:ArrayOfIntProblemCharacteristicValue">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="DataType" nillable="true" type="tns:DataType">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+    </xs:sequence>
+    <xs:attribute ref="ser:Id" />
+    <xs:attribute ref="ser:Ref" />
+  </xs:complexType>
+  <xs:element name="ProblemCharacteristic" nillable="true" type="tns:ProblemCharacteristic" />
+  <xs:complexType name="ArrayOfFloatProblemCharacteristicValue">
+    <xs:sequence>
+      <xs:element minOccurs="0" maxOccurs="unbounded" name="FloatProblemCharacteristicValue" nillable="true" type="tns:FloatProblemCharacteristicValue" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="ArrayOfFloatProblemCharacteristicValue" nillable="true" type="tns:ArrayOfFloatProblemCharacteristicValue" />
+  <xs:complexType name="FloatProblemCharacteristicValue">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="ProblemCharacteristicId" type="xs:int" />
+      <xs:element minOccurs="0" name="ProblemId" type="xs:int" />
+      <xs:element minOccurs="0" name="Value" type="xs:double" />
+      <xs:element minOccurs="0" name="Problem" nillable="true" type="tns:Problem">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="ProblemCharacteristic" nillable="true" type="tns:ProblemCharacteristic">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+    </xs:sequence>
+    <xs:attribute ref="ser:Id" />
+    <xs:attribute ref="ser:Ref" />
+  </xs:complexType>
+  <xs:element name="FloatProblemCharacteristicValue" nillable="true" type="tns:FloatProblemCharacteristicValue" />
+  <xs:complexType name="ArrayOfIntProblemCharacteristicValue">
+    <xs:sequence>
+      <xs:element minOccurs="0" maxOccurs="unbounded" name="IntProblemCharacteristicValue" nillable="true" type="tns:IntProblemCharacteristicValue" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="ArrayOfIntProblemCharacteristicValue" nillable="true" type="tns:ArrayOfIntProblemCharacteristicValue" />
+  <xs:complexType name="IntProblemCharacteristicValue">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="ProblemCharacteristicId" type="xs:int" />
+      <xs:element minOccurs="0" name="ProblemId" type="xs:int" />
+      <xs:element minOccurs="0" name="Value" type="xs:int" />
+      <xs:element minOccurs="0" name="Problem" nillable="true" type="tns:Problem">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="ProblemCharacteristic" nillable="true" type="tns:ProblemCharacteristic">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+    </xs:sequence>
+    <xs:attribute ref="ser:Id" />
+    <xs:attribute ref="ser:Ref" />
+  </xs:complexType>
+  <xs:element name="IntProblemCharacteristicValue" nillable="true" type="tns:IntProblemCharacteristicValue" />
+  <xs:complexType name="DataType">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="Id" type="xs:int" />
+      <xs:element minOccurs="0" name="SqlName" nillable="true" type="xs:string" />
+      <xs:element minOccurs="0" name="ClrName" nillable="true" type="xs:string" />
+      <xs:element minOccurs="0" name="ProblemCharacteristics" nillable="true" type="tns:ArrayOfProblemCharacteristic">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="Results" nillable="true" type="tns:ArrayOfResult">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="OperatorParameterValues" nillable="true" type="tns:ArrayOfOperatorParameterValue">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="Parameters" nillable="true" type="tns:ArrayOfParameter">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+    </xs:sequence>
+    <xs:attribute ref="ser:Id" />
+    <xs:attribute ref="ser:Ref" />
+  </xs:complexType>
+  <xs:element name="DataType" nillable="true" type="tns:DataType" />
+  <xs:complexType name="ArrayOfProblemCharacteristic">
+    <xs:sequence>
+      <xs:element minOccurs="0" maxOccurs="unbounded" name="ProblemCharacteristic" nillable="true" type="tns:ProblemCharacteristic" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="ArrayOfProblemCharacteristic" nillable="true" type="tns:ArrayOfProblemCharacteristic" />
+  <xs:complexType name="ArrayOfResult">
+    <xs:sequence>
+      <xs:element minOccurs="0" maxOccurs="unbounded" name="Result" nillable="true" type="tns:Result" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="ArrayOfResult" nillable="true" type="tns:ArrayOfResult" />
+  <xs:complexType name="Result">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="Id" type="xs:int" />
+      <xs:element minOccurs="0" name="Name" nillable="true" type="xs:string" />
+      <xs:element minOccurs="0" name="Description" nillable="true" type="xs:string" />
+      <xs:element minOccurs="0" name="DataTypeId" type="xs:int" />
+      <xs:element minOccurs="0" name="BlobResultValues" nillable="true" type="tns:ArrayOfBlobResultValue">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="CharResultValues" nillable="true" type="tns:ArrayOfCharResultValue">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="FloatResultValues" nillable="true" type="tns:ArrayOfFloatResultValue">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="IntResultValues" nillable="true" type="tns:ArrayOfIntResultValue">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="Algorithm_Results" nillable="true" type="tns:ArrayOfAlgorithm_Result">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="DataType" nillable="true" type="tns:DataType">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+    </xs:sequence>
+    <xs:attribute ref="ser:Id" />
+    <xs:attribute ref="ser:Ref" />
+  </xs:complexType>
+  <xs:element name="Result" nillable="true" type="tns:Result" />
+  <xs:complexType name="ArrayOfBlobResultValue">
+    <xs:sequence>
+      <xs:element minOccurs="0" maxOccurs="unbounded" name="BlobResultValue" nillable="true" type="tns:BlobResultValue" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="ArrayOfBlobResultValue" nillable="true" type="tns:ArrayOfBlobResultValue" />
+  <xs:complexType name="BlobResultValue">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="ResultId" type="xs:int" />
+      <xs:element minOccurs="0" name="RunId" type="xs:int" />
+      <xs:element xmlns:q1="http://schemas.datacontract.org/2004/07/System.Data.Linq" minOccurs="0" name="Value" nillable="true" type="q1:Binary" />
+      <xs:element minOccurs="0" name="Run" nillable="true" type="tns:Run">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="Result" nillable="true" type="tns:Result">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+    </xs:sequence>
+    <xs:attribute ref="ser:Id" />
+    <xs:attribute ref="ser:Ref" />
+  </xs:complexType>
+  <xs:element name="BlobResultValue" nillable="true" type="tns:BlobResultValue" />
+  <xs:complexType name="Run">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="Id" type="xs:int" />
+      <xs:element minOccurs="0" name="ExperimentId" type="xs:int" />
+      <xs:element minOccurs="0" name="FinishedDate" nillable="true" type="xs:dateTime" />
+      <xs:element minOccurs="0" name="UserId" type="ser:guid" />
+      <xs:element minOccurs="0" name="ClientId" type="ser:guid" />
+      <xs:element minOccurs="0" name="BlobResultValues" nillable="true" type="tns:ArrayOfBlobResultValue">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="CharResultValues" nillable="true" type="tns:ArrayOfCharResultValue">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="FloatResultValues" nillable="true" type="tns:ArrayOfFloatResultValue">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="IntResultValues" nillable="true" type="tns:ArrayOfIntResultValue">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="Client" nillable="true" type="tns:Client">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="Experiment" nillable="true" type="tns:Experiment">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="User" nillable="true" type="tns:User">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+    </xs:sequence>
+    <xs:attribute ref="ser:Id" />
+    <xs:attribute ref="ser:Ref" />
+  </xs:complexType>
+  <xs:element name="Run" nillable="true" type="tns:Run" />
+  <xs:complexType name="ArrayOfCharResultValue">
+    <xs:sequence>
+      <xs:element minOccurs="0" maxOccurs="unbounded" name="CharResultValue" nillable="true" type="tns:CharResultValue" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="ArrayOfCharResultValue" nillable="true" type="tns:ArrayOfCharResultValue" />
+  <xs:complexType name="CharResultValue">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="ResultId" type="xs:int" />
+      <xs:element minOccurs="0" name="RunId" type="xs:int" />
+      <xs:element minOccurs="0" name="Value" nillable="true" type="xs:string" />
+      <xs:element minOccurs="0" name="Run" nillable="true" type="tns:Run">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="Result" nillable="true" type="tns:Result">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+    </xs:sequence>
+    <xs:attribute ref="ser:Id" />
+    <xs:attribute ref="ser:Ref" />
+  </xs:complexType>
+  <xs:element name="CharResultValue" nillable="true" type="tns:CharResultValue" />
+  <xs:complexType name="ArrayOfFloatResultValue">
+    <xs:sequence>
+      <xs:element minOccurs="0" maxOccurs="unbounded" name="FloatResultValue" nillable="true" type="tns:FloatResultValue" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="ArrayOfFloatResultValue" nillable="true" type="tns:ArrayOfFloatResultValue" />
+  <xs:complexType name="FloatResultValue">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="ResultId" type="xs:int" />
+      <xs:element minOccurs="0" name="RunId" type="xs:int" />
+      <xs:element minOccurs="0" name="Value" type="xs:double" />
+      <xs:element minOccurs="0" name="Run" nillable="true" type="tns:Run">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="Result" nillable="true" type="tns:Result">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+    </xs:sequence>
+    <xs:attribute ref="ser:Id" />
+    <xs:attribute ref="ser:Ref" />
+  </xs:complexType>
+  <xs:element name="FloatResultValue" nillable="true" type="tns:FloatResultValue" />
+  <xs:complexType name="ArrayOfIntResultValue">
+    <xs:sequence>
+      <xs:element minOccurs="0" maxOccurs="unbounded" name="IntResultValue" nillable="true" type="tns:IntResultValue" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="ArrayOfIntResultValue" nillable="true" type="tns:ArrayOfIntResultValue" />
+  <xs:complexType name="IntResultValue">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="ResultId" type="xs:int" />
+      <xs:element minOccurs="0" name="RunId" type="xs:int" />
+      <xs:element minOccurs="0" name="Value" type="xs:int" />
+      <xs:element minOccurs="0" name="Run" nillable="true" type="tns:Run">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="Result" nillable="true" type="tns:Result">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+    </xs:sequence>
+    <xs:attribute ref="ser:Id" />
+    <xs:attribute ref="ser:Ref" />
+  </xs:complexType>
+  <xs:element name="IntResultValue" nillable="true" type="tns:IntResultValue" />
+  <xs:complexType name="Client">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="Id" type="ser:guid" />
+      <xs:element minOccurs="0" name="Name" nillable="true" type="xs:string" />
+      <xs:element minOccurs="0" name="Runs" nillable="true" type="tns:ArrayOfRun">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+    </xs:sequence>
+    <xs:attribute ref="ser:Id" />
+    <xs:attribute ref="ser:Ref" />
+  </xs:complexType>
+  <xs:element name="Client" nillable="true" type="tns:Client" />
+  <xs:complexType name="ArrayOfRun">
+    <xs:sequence>
+      <xs:element minOccurs="0" maxOccurs="unbounded" name="Run" nillable="true" type="tns:Run" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="ArrayOfRun" nillable="true" type="tns:ArrayOfRun" />
+  <xs:complexType name="Experiment">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="Id" type="xs:int" />
+      <xs:element minOccurs="0" name="ProjectId" type="xs:int" />
+      <xs:element minOccurs="0" name="AlgorithmId" type="xs:int" />
+      <xs:element minOccurs="0" name="ProblemId" type="xs:int" />
+      <xs:element minOccurs="0" name="CharParameterValues" nillable="true" type="tns:ArrayOfCharParameterValue">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="FloatParameterValues" nillable="true" type="tns:ArrayOfFloatParameterValue">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="IntParameterValues" nillable="true" type="tns:ArrayOfIntParameterValue">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="Runs" nillable="true" type="tns:ArrayOfRun">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="OperatorParameterValues" nillable="true" type="tns:ArrayOfOperatorParameterValue">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="Problem" nillable="true" type="tns:Problem">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="Project" nillable="true" type="tns:Project">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="Algorithm" nillable="true" type="tns:Algorithm">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+    </xs:sequence>
+    <xs:attribute ref="ser:Id" />
+    <xs:attribute ref="ser:Ref" />
+  </xs:complexType>
+  <xs:element name="Experiment" nillable="true" type="tns:Experiment" />
+  <xs:complexType name="ArrayOfCharParameterValue">
+    <xs:sequence>
+      <xs:element minOccurs="0" maxOccurs="unbounded" name="CharParameterValue" nillable="true" type="tns:CharParameterValue" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="ArrayOfCharParameterValue" nillable="true" type="tns:ArrayOfCharParameterValue" />
+  <xs:complexType name="CharParameterValue">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="ParameterId" type="xs:int" />
+      <xs:element minOccurs="0" name="ExperimentId" type="xs:int" />
+      <xs:element minOccurs="0" name="Value" nillable="true" type="xs:string" />
+      <xs:element minOccurs="0" name="Experiment" nillable="true" type="tns:Experiment">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="Parameter" nillable="true" type="tns:Parameter">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+    </xs:sequence>
+    <xs:attribute ref="ser:Id" />
+    <xs:attribute ref="ser:Ref" />
+  </xs:complexType>
+  <xs:element name="CharParameterValue" nillable="true" type="tns:CharParameterValue" />
+  <xs:complexType name="Parameter">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="Id" type="xs:int" />
+      <xs:element minOccurs="0" name="Name" nillable="true" type="xs:string" />
+      <xs:element minOccurs="0" name="Description" nillable="true" type="xs:string" />
+      <xs:element minOccurs="0" name="DataTypeId" type="xs:int" />
+      <xs:element minOccurs="0" name="Algorithm_Parameters" nillable="true" type="tns:ArrayOfAlgorithm_Parameter">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="CharParameterValues" nillable="true" type="tns:ArrayOfCharParameterValue">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="FloatParameterValues" nillable="true" type="tns:ArrayOfFloatParameterValue">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="IntParameterValues" nillable="true" type="tns:ArrayOfIntParameterValue">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="Problem_Parameters" nillable="true" type="tns:ArrayOfProblem_Parameter">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="OperatorParameterValues" nillable="true" type="tns:ArrayOfOperatorParameterValue">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="DataType" nillable="true" type="tns:DataType">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+    </xs:sequence>
+    <xs:attribute ref="ser:Id" />
+    <xs:attribute ref="ser:Ref" />
+  </xs:complexType>
+  <xs:element name="Parameter" nillable="true" type="tns:Parameter" />
+  <xs:complexType name="ArrayOfAlgorithm_Parameter">
+    <xs:sequence>
+      <xs:element minOccurs="0" maxOccurs="unbounded" name="Algorithm_Parameter" nillable="true" type="tns:Algorithm_Parameter" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="ArrayOfAlgorithm_Parameter" nillable="true" type="tns:ArrayOfAlgorithm_Parameter" />
+  <xs:complexType name="Algorithm_Parameter">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="AlgorithmId" type="xs:int" />
+      <xs:element minOccurs="0" name="ParameterId" type="xs:int" />
+      <xs:element minOccurs="0" name="Parameter" nillable="true" type="tns:Parameter">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="Algorithm" nillable="true" type="tns:Algorithm">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+    </xs:sequence>
+    <xs:attribute ref="ser:Id" />
+    <xs:attribute ref="ser:Ref" />
+  </xs:complexType>
+  <xs:element name="Algorithm_Parameter" nillable="true" type="tns:Algorithm_Parameter" />
+  <xs:complexType name="Algorithm">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="Id" type="xs:int" />
+      <xs:element minOccurs="0" name="AlgorithmClassId" type="xs:int" />
+      <xs:element minOccurs="0" name="PlatformId" type="xs:int" />
+      <xs:element minOccurs="0" name="Name" nillable="true" type="xs:string" />
+      <xs:element minOccurs="0" name="Description" nillable="true" type="xs:string" />
+      <xs:element minOccurs="0" name="Algorithm_Parameters" nillable="true" type="tns:ArrayOfAlgorithm_Parameter">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="AlgorithmData" nillable="true" type="tns:AlgorithmData">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="Experiments" nillable="true" type="tns:ArrayOfExperiment">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="Algorithm_Results" nillable="true" type="tns:ArrayOfAlgorithm_Result">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="AlgorithmClass" nillable="true" type="tns:AlgorithmClass">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="Platform" nillable="true" type="tns:Platform">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+    </xs:sequence>
+    <xs:attribute ref="ser:Id" />
+    <xs:attribute ref="ser:Ref" />
+  </xs:complexType>
+  <xs:element name="Algorithm" nillable="true" type="tns:Algorithm" />
+  <xs:complexType name="AlgorithmData">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="AlgorithmId" type="xs:int" />
+      <xs:element xmlns:q2="http://schemas.datacontract.org/2004/07/System.Data.Linq" minOccurs="0" name="Data" nillable="true" type="q2:Binary" />
+      <xs:element minOccurs="0" name="Algorithm" nillable="true" type="tns:Algorithm">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+    </xs:sequence>
+    <xs:attribute ref="ser:Id" />
+    <xs:attribute ref="ser:Ref" />
+  </xs:complexType>
+  <xs:element name="AlgorithmData" nillable="true" type="tns:AlgorithmData" />
+  <xs:complexType name="ArrayOfExperiment">
+    <xs:sequence>
+      <xs:element minOccurs="0" maxOccurs="unbounded" name="Experiment" nillable="true" type="tns:Experiment" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="ArrayOfExperiment" nillable="true" type="tns:ArrayOfExperiment" />
+  <xs:complexType name="ArrayOfAlgorithm_Result">
+    <xs:sequence>
+      <xs:element minOccurs="0" maxOccurs="unbounded" name="Algorithm_Result" nillable="true" type="tns:Algorithm_Result" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="ArrayOfAlgorithm_Result" nillable="true" type="tns:ArrayOfAlgorithm_Result" />
+  <xs:complexType name="Algorithm_Result">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="AlgorithmId" type="xs:int" />
+      <xs:element minOccurs="0" name="ResultId" type="xs:int" />
+      <xs:element minOccurs="0" name="Algorithm" nillable="true" type="tns:Algorithm">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="Result" nillable="true" type="tns:Result">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+    </xs:sequence>
+    <xs:attribute ref="ser:Id" />
+    <xs:attribute ref="ser:Ref" />
+  </xs:complexType>
+  <xs:element name="Algorithm_Result" nillable="true" type="tns:Algorithm_Result" />
+  <xs:complexType name="AlgorithmClass">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="Id" type="xs:int" />
+      <xs:element minOccurs="0" name="Name" nillable="true" type="xs:string" />
+      <xs:element minOccurs="0" name="Description" nillable="true" type="xs:string" />
+      <xs:element minOccurs="0" name="Algorithms" nillable="true" type="tns:ArrayOfAlgorithm">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+    </xs:sequence>
+    <xs:attribute ref="ser:Id" />
+    <xs:attribute ref="ser:Ref" />
+  </xs:complexType>
+  <xs:element name="AlgorithmClass" nillable="true" type="tns:AlgorithmClass" />
+  <xs:complexType name="ArrayOfAlgorithm">
+    <xs:sequence>
+      <xs:element minOccurs="0" maxOccurs="unbounded" name="Algorithm" nillable="true" type="tns:Algorithm" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="ArrayOfAlgorithm" nillable="true" type="tns:ArrayOfAlgorithm" />
+  <xs:complexType name="ArrayOfFloatParameterValue">
+    <xs:sequence>
+      <xs:element minOccurs="0" maxOccurs="unbounded" name="FloatParameterValue" nillable="true" type="tns:FloatParameterValue" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="ArrayOfFloatParameterValue" nillable="true" type="tns:ArrayOfFloatParameterValue" />
+  <xs:complexType name="FloatParameterValue">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="ParameterId" type="xs:int" />
+      <xs:element minOccurs="0" name="ExperimentId" type="xs:int" />
+      <xs:element minOccurs="0" name="Value" type="xs:double" />
+      <xs:element minOccurs="0" name="Experiment" nillable="true" type="tns:Experiment">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="Parameter" nillable="true" type="tns:Parameter">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+    </xs:sequence>
+    <xs:attribute ref="ser:Id" />
+    <xs:attribute ref="ser:Ref" />
+  </xs:complexType>
+  <xs:element name="FloatParameterValue" nillable="true" type="tns:FloatParameterValue" />
+  <xs:complexType name="ArrayOfIntParameterValue">
+    <xs:sequence>
+      <xs:element minOccurs="0" maxOccurs="unbounded" name="IntParameterValue" nillable="true" type="tns:IntParameterValue" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="ArrayOfIntParameterValue" nillable="true" type="tns:ArrayOfIntParameterValue" />
+  <xs:complexType name="IntParameterValue">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="ParameterId" type="xs:int" />
+      <xs:element minOccurs="0" name="ExperimentId" type="xs:int" />
+      <xs:element minOccurs="0" name="Value" type="xs:int" />
+      <xs:element minOccurs="0" name="Experiment" nillable="true" type="tns:Experiment">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="Parameter" nillable="true" type="tns:Parameter">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+    </xs:sequence>
+    <xs:attribute ref="ser:Id" />
+    <xs:attribute ref="ser:Ref" />
+  </xs:complexType>
+  <xs:element name="IntParameterValue" nillable="true" type="tns:IntParameterValue" />
+  <xs:complexType name="ArrayOfProblem_Parameter">
+    <xs:sequence>
+      <xs:element minOccurs="0" maxOccurs="unbounded" name="Problem_Parameter" nillable="true" type="tns:Problem_Parameter" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="ArrayOfProblem_Parameter" nillable="true" type="tns:ArrayOfProblem_Parameter" />
+  <xs:complexType name="Problem_Parameter">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="ProblemId" type="xs:int" />
+      <xs:element minOccurs="0" name="ParameterId" type="xs:int" />
+      <xs:element minOccurs="0" name="Parameter" nillable="true" type="tns:Parameter">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="Problem" nillable="true" type="tns:Problem">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+    </xs:sequence>
+    <xs:attribute ref="ser:Id" />
+    <xs:attribute ref="ser:Ref" />
+  </xs:complexType>
+  <xs:element name="Problem_Parameter" nillable="true" type="tns:Problem_Parameter" />
+  <xs:complexType name="ArrayOfOperatorParameterValue">
+    <xs:sequence>
+      <xs:element minOccurs="0" maxOccurs="unbounded" name="OperatorParameterValue" nillable="true" type="tns:OperatorParameterValue" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="ArrayOfOperatorParameterValue" nillable="true" type="tns:ArrayOfOperatorParameterValue" />
+  <xs:complexType name="OperatorParameterValue">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="ParameterId" type="xs:int" />
+      <xs:element minOccurs="0" name="ExperimentId" type="xs:int" />
+      <xs:element xmlns:q3="http://schemas.datacontract.org/2004/07/System.Data.Linq" minOccurs="0" name="Value" nillable="true" type="q3:Binary" />
+      <xs:element minOccurs="0" name="DataTypeId" type="xs:int" />
+      <xs:element minOccurs="0" name="DataType" nillable="true" type="tns:DataType">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="Experiment" nillable="true" type="tns:Experiment">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="Parameter" nillable="true" type="tns:Parameter">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+    </xs:sequence>
+    <xs:attribute ref="ser:Id" />
+    <xs:attribute ref="ser:Ref" />
+  </xs:complexType>
+  <xs:element name="OperatorParameterValue" nillable="true" type="tns:OperatorParameterValue" />
+  <xs:complexType name="Project">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="Id" type="xs:int" />
+      <xs:element minOccurs="0" name="Name" nillable="true" type="xs:string" />
+      <xs:element minOccurs="0" name="Description" nillable="true" type="xs:string" />
+      <xs:element minOccurs="0" name="Experiments" nillable="true" type="tns:ArrayOfExperiment">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+    </xs:sequence>
+    <xs:attribute ref="ser:Id" />
+    <xs:attribute ref="ser:Ref" />
+  </xs:complexType>
+  <xs:element name="Project" nillable="true" type="tns:Project" />
+  <xs:complexType name="User">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="Id" type="ser:guid" />
+      <xs:element minOccurs="0" name="Name" nillable="true" type="xs:string" />
+      <xs:element minOccurs="0" name="Runs" nillable="true" type="tns:ArrayOfRun">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+    </xs:sequence>
+    <xs:attribute ref="ser:Id" />
+    <xs:attribute ref="ser:Ref" />
+  </xs:complexType>
+  <xs:element name="User" nillable="true" type="tns:User" />
+  <xs:complexType name="ArrayOfParameter">
+    <xs:sequence>
+      <xs:element minOccurs="0" maxOccurs="unbounded" name="Parameter" nillable="true" type="tns:Parameter" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="ArrayOfParameter" nillable="true" type="tns:ArrayOfParameter" />
+  <xs:complexType name="ProblemData">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="ProblemId" type="xs:int" />
+      <xs:element xmlns:q4="http://schemas.datacontract.org/2004/07/System.Data.Linq" minOccurs="0" name="Data" nillable="true" type="q4:Binary" />
+      <xs:element minOccurs="0" name="Problem" nillable="true" type="tns:Problem">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+    </xs:sequence>
+    <xs:attribute ref="ser:Id" />
+    <xs:attribute ref="ser:Ref" />
+  </xs:complexType>
+  <xs:element name="ProblemData" nillable="true" type="tns:ProblemData" />
+  <xs:complexType name="ProblemClass">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="Id" type="xs:int" />
+      <xs:element minOccurs="0" name="Name" nillable="true" type="xs:string" />
+      <xs:element minOccurs="0" name="Description" nillable="true" type="xs:string" />
+      <xs:element minOccurs="0" name="Problems" nillable="true" type="tns:ArrayOfProblem">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+    </xs:sequence>
+    <xs:attribute ref="ser:Id" />
+    <xs:attribute ref="ser:Ref" />
+  </xs:complexType>
+  <xs:element name="ProblemClass" nillable="true" type="tns:ProblemClass" />
+  <xs:complexType name="SolutionRepresentation">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="Id" type="xs:int" />
+      <xs:element minOccurs="0" name="Name" nillable="true" type="xs:string" />
+      <xs:element minOccurs="0" name="Description" nillable="true" type="xs:string" />
+      <xs:element minOccurs="0" name="Problems" nillable="true" type="tns:ArrayOfProblem">
+        <xs:annotation>
+          <xs:appinfo>
+            <DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+          </xs:appinfo>
+        </xs:annotation>
+      </xs:element>
+    </xs:sequence>
+    <xs:attribute ref="ser:Id" />
+    <xs:attribute ref="ser:Ref" />
+  </xs:complexType>
+  <xs:element name="SolutionRepresentation" nillable="true" type="tns:SolutionRepresentation" />
+</xs:schema>
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/Service References/OKBAdmin/Reference.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/Service References/OKBAdmin/Reference.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/Service References/OKBAdmin/Reference.cs	(revision 5296)
@@ -0,0 +1,4035 @@
+﻿//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.1
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HeuristicLab.OKB.Cockpit.Admin.OKBAdmin {
+    using System.Runtime.Serialization;
+    using System;
+    
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="Platform", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataAccess", IsReference=true)]
+    [System.SerializableAttribute()]
+    public partial class Platform : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+        
+        [System.NonSerializedAttribute()]
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int IdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string NameField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string DescriptionField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Problem> ProblemsField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Algorithm> AlgorithmsField;
+        
+        [global::System.ComponentModel.BrowsableAttribute(false)]
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+            get {
+                return this.extensionDataField;
+            }
+            set {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int 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(Order=2)]
+        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(EmitDefaultValue=false, Order=3)]
+        public System.Collections.Generic.List<HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Problem> Problems {
+            get {
+                return this.ProblemsField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.ProblemsField, value) != true)) {
+                    this.ProblemsField = value;
+                    this.RaisePropertyChanged("Problems");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=4)]
+        public System.Collections.Generic.List<HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Algorithm> Algorithms {
+            get {
+                return this.AlgorithmsField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.AlgorithmsField, value) != true)) {
+                    this.AlgorithmsField = value;
+                    this.RaisePropertyChanged("Algorithms");
+                }
+            }
+        }
+        
+        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.DataAccess", IsReference=true)]
+    [System.SerializableAttribute()]
+    public partial class Problem : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+        
+        [System.NonSerializedAttribute()]
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int IdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int ProblemClassIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int PlatformIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int SolutionRepresentationIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string NameField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string DescriptionField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.CharProblemCharacteristicValue> CharProblemCharacteristicValuesField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Experiment> ExperimentsField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.FloatProblemCharacteristicValue> FloatProblemCharacteristicValuesField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.IntProblemCharacteristicValue> IntProblemCharacteristicValuesField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Problem_Parameter> Problem_ParametersField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.ProblemData ProblemDataField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Platform PlatformField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.ProblemClass ProblemClassField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.SolutionRepresentation SolutionRepresentationField;
+        
+        [global::System.ComponentModel.BrowsableAttribute(false)]
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+            get {
+                return this.extensionDataField;
+            }
+            set {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int Id {
+            get {
+                return this.IdField;
+            }
+            set {
+                if ((this.IdField.Equals(value) != true)) {
+                    this.IdField = value;
+                    this.RaisePropertyChanged("Id");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int ProblemClassId {
+            get {
+                return this.ProblemClassIdField;
+            }
+            set {
+                if ((this.ProblemClassIdField.Equals(value) != true)) {
+                    this.ProblemClassIdField = value;
+                    this.RaisePropertyChanged("ProblemClassId");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(Order=2)]
+        public int PlatformId {
+            get {
+                return this.PlatformIdField;
+            }
+            set {
+                if ((this.PlatformIdField.Equals(value) != true)) {
+                    this.PlatformIdField = value;
+                    this.RaisePropertyChanged("PlatformId");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(Order=3)]
+        public int SolutionRepresentationId {
+            get {
+                return this.SolutionRepresentationIdField;
+            }
+            set {
+                if ((this.SolutionRepresentationIdField.Equals(value) != true)) {
+                    this.SolutionRepresentationIdField = value;
+                    this.RaisePropertyChanged("SolutionRepresentationId");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(Order=4)]
+        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(Order=5)]
+        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(EmitDefaultValue=false, Order=6)]
+        public System.Collections.Generic.List<HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.CharProblemCharacteristicValue> CharProblemCharacteristicValues {
+            get {
+                return this.CharProblemCharacteristicValuesField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.CharProblemCharacteristicValuesField, value) != true)) {
+                    this.CharProblemCharacteristicValuesField = value;
+                    this.RaisePropertyChanged("CharProblemCharacteristicValues");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=7)]
+        public System.Collections.Generic.List<HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Experiment> Experiments {
+            get {
+                return this.ExperimentsField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.ExperimentsField, value) != true)) {
+                    this.ExperimentsField = value;
+                    this.RaisePropertyChanged("Experiments");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=8)]
+        public System.Collections.Generic.List<HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.FloatProblemCharacteristicValue> FloatProblemCharacteristicValues {
+            get {
+                return this.FloatProblemCharacteristicValuesField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.FloatProblemCharacteristicValuesField, value) != true)) {
+                    this.FloatProblemCharacteristicValuesField = value;
+                    this.RaisePropertyChanged("FloatProblemCharacteristicValues");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=9)]
+        public System.Collections.Generic.List<HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.IntProblemCharacteristicValue> IntProblemCharacteristicValues {
+            get {
+                return this.IntProblemCharacteristicValuesField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.IntProblemCharacteristicValuesField, value) != true)) {
+                    this.IntProblemCharacteristicValuesField = value;
+                    this.RaisePropertyChanged("IntProblemCharacteristicValues");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=10)]
+        public System.Collections.Generic.List<HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Problem_Parameter> Problem_Parameters {
+            get {
+                return this.Problem_ParametersField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.Problem_ParametersField, value) != true)) {
+                    this.Problem_ParametersField = value;
+                    this.RaisePropertyChanged("Problem_Parameters");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=11)]
+        public HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.ProblemData ProblemData {
+            get {
+                return this.ProblemDataField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.ProblemDataField, value) != true)) {
+                    this.ProblemDataField = value;
+                    this.RaisePropertyChanged("ProblemData");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=12)]
+        public HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Platform Platform {
+            get {
+                return this.PlatformField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.PlatformField, value) != true)) {
+                    this.PlatformField = value;
+                    this.RaisePropertyChanged("Platform");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=13)]
+        public HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.ProblemClass ProblemClass {
+            get {
+                return this.ProblemClassField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.ProblemClassField, value) != true)) {
+                    this.ProblemClassField = value;
+                    this.RaisePropertyChanged("ProblemClass");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=14)]
+        public HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.SolutionRepresentation SolutionRepresentation {
+            get {
+                return this.SolutionRepresentationField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.SolutionRepresentationField, value) != true)) {
+                    this.SolutionRepresentationField = value;
+                    this.RaisePropertyChanged("SolutionRepresentation");
+                }
+            }
+        }
+        
+        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="Algorithm", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataAccess", IsReference=true)]
+    [System.SerializableAttribute()]
+    public partial class Algorithm : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+        
+        [System.NonSerializedAttribute()]
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int IdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int AlgorithmClassIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int PlatformIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string NameField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string DescriptionField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Algorithm_Parameter> Algorithm_ParametersField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.AlgorithmData AlgorithmDataField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Experiment> ExperimentsField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Algorithm_Result> Algorithm_ResultsField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.AlgorithmClass AlgorithmClassField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Platform PlatformField;
+        
+        [global::System.ComponentModel.BrowsableAttribute(false)]
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+            get {
+                return this.extensionDataField;
+            }
+            set {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int Id {
+            get {
+                return this.IdField;
+            }
+            set {
+                if ((this.IdField.Equals(value) != true)) {
+                    this.IdField = value;
+                    this.RaisePropertyChanged("Id");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(Order=1)]
+        public int AlgorithmClassId {
+            get {
+                return this.AlgorithmClassIdField;
+            }
+            set {
+                if ((this.AlgorithmClassIdField.Equals(value) != true)) {
+                    this.AlgorithmClassIdField = value;
+                    this.RaisePropertyChanged("AlgorithmClassId");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(Order=2)]
+        public int PlatformId {
+            get {
+                return this.PlatformIdField;
+            }
+            set {
+                if ((this.PlatformIdField.Equals(value) != true)) {
+                    this.PlatformIdField = value;
+                    this.RaisePropertyChanged("PlatformId");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(Order=3)]
+        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(Order=4)]
+        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(EmitDefaultValue=false, Order=5)]
+        public System.Collections.Generic.List<HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Algorithm_Parameter> Algorithm_Parameters {
+            get {
+                return this.Algorithm_ParametersField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.Algorithm_ParametersField, value) != true)) {
+                    this.Algorithm_ParametersField = value;
+                    this.RaisePropertyChanged("Algorithm_Parameters");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=6)]
+        public HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.AlgorithmData AlgorithmData {
+            get {
+                return this.AlgorithmDataField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.AlgorithmDataField, value) != true)) {
+                    this.AlgorithmDataField = value;
+                    this.RaisePropertyChanged("AlgorithmData");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=7)]
+        public System.Collections.Generic.List<HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Experiment> Experiments {
+            get {
+                return this.ExperimentsField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.ExperimentsField, value) != true)) {
+                    this.ExperimentsField = value;
+                    this.RaisePropertyChanged("Experiments");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=8)]
+        public System.Collections.Generic.List<HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Algorithm_Result> Algorithm_Results {
+            get {
+                return this.Algorithm_ResultsField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.Algorithm_ResultsField, value) != true)) {
+                    this.Algorithm_ResultsField = value;
+                    this.RaisePropertyChanged("Algorithm_Results");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=9)]
+        public HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.AlgorithmClass AlgorithmClass {
+            get {
+                return this.AlgorithmClassField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.AlgorithmClassField, value) != true)) {
+                    this.AlgorithmClassField = value;
+                    this.RaisePropertyChanged("AlgorithmClass");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=10)]
+        public HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Platform Platform {
+            get {
+                return this.PlatformField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.PlatformField, value) != true)) {
+                    this.PlatformField = value;
+                    this.RaisePropertyChanged("Platform");
+                }
+            }
+        }
+        
+        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="ProblemData", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataAccess", IsReference=true)]
+    [System.SerializableAttribute()]
+    public partial class ProblemData : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+        
+        [System.NonSerializedAttribute()]
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int ProblemIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Binary DataField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Problem ProblemField;
+        
+        [global::System.ComponentModel.BrowsableAttribute(false)]
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+            get {
+                return this.extensionDataField;
+            }
+            set {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int ProblemId {
+            get {
+                return this.ProblemIdField;
+            }
+            set {
+                if ((this.ProblemIdField.Equals(value) != true)) {
+                    this.ProblemIdField = value;
+                    this.RaisePropertyChanged("ProblemId");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(Order=1)]
+        public HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Binary Data {
+            get {
+                return this.DataField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.DataField, value) != true)) {
+                    this.DataField = value;
+                    this.RaisePropertyChanged("Data");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=2)]
+        public HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Problem Problem {
+            get {
+                return this.ProblemField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.ProblemField, value) != true)) {
+                    this.ProblemField = value;
+                    this.RaisePropertyChanged("Problem");
+                }
+            }
+        }
+        
+        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.DataAccess", IsReference=true)]
+    [System.SerializableAttribute()]
+    public partial class ProblemClass : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+        
+        [System.NonSerializedAttribute()]
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int IdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string NameField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string DescriptionField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Problem> ProblemsField;
+        
+        [global::System.ComponentModel.BrowsableAttribute(false)]
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+            get {
+                return this.extensionDataField;
+            }
+            set {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int 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(Order=2)]
+        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(EmitDefaultValue=false, Order=3)]
+        public System.Collections.Generic.List<HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Problem> Problems {
+            get {
+                return this.ProblemsField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.ProblemsField, value) != true)) {
+                    this.ProblemsField = value;
+                    this.RaisePropertyChanged("Problems");
+                }
+            }
+        }
+        
+        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="SolutionRepresentation", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataAccess", IsReference=true)]
+    [System.SerializableAttribute()]
+    public partial class SolutionRepresentation : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+        
+        [System.NonSerializedAttribute()]
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int IdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string NameField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string DescriptionField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Problem> ProblemsField;
+        
+        [global::System.ComponentModel.BrowsableAttribute(false)]
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+            get {
+                return this.extensionDataField;
+            }
+            set {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int 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(Order=2)]
+        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(EmitDefaultValue=false, Order=3)]
+        public System.Collections.Generic.List<HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Problem> Problems {
+            get {
+                return this.ProblemsField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.ProblemsField, value) != true)) {
+                    this.ProblemsField = value;
+                    this.RaisePropertyChanged("Problems");
+                }
+            }
+        }
+        
+        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="CharProblemCharacteristicValue", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataAccess", IsReference=true)]
+    [System.SerializableAttribute()]
+    public partial class CharProblemCharacteristicValue : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+        
+        [System.NonSerializedAttribute()]
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int ProblemCharacteristicIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int ProblemIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string ValueField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Problem ProblemField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.ProblemCharacteristic ProblemCharacteristicField;
+        
+        [global::System.ComponentModel.BrowsableAttribute(false)]
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+            get {
+                return this.extensionDataField;
+            }
+            set {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int ProblemCharacteristicId {
+            get {
+                return this.ProblemCharacteristicIdField;
+            }
+            set {
+                if ((this.ProblemCharacteristicIdField.Equals(value) != true)) {
+                    this.ProblemCharacteristicIdField = value;
+                    this.RaisePropertyChanged("ProblemCharacteristicId");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int ProblemId {
+            get {
+                return this.ProblemIdField;
+            }
+            set {
+                if ((this.ProblemIdField.Equals(value) != true)) {
+                    this.ProblemIdField = value;
+                    this.RaisePropertyChanged("ProblemId");
+                }
+            }
+        }
+        
+        [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.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=3)]
+        public HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Problem Problem {
+            get {
+                return this.ProblemField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.ProblemField, value) != true)) {
+                    this.ProblemField = value;
+                    this.RaisePropertyChanged("Problem");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=4)]
+        public HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.ProblemCharacteristic ProblemCharacteristic {
+            get {
+                return this.ProblemCharacteristicField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.ProblemCharacteristicField, value) != true)) {
+                    this.ProblemCharacteristicField = value;
+                    this.RaisePropertyChanged("ProblemCharacteristic");
+                }
+            }
+        }
+        
+        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="Experiment", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataAccess", IsReference=true)]
+    [System.SerializableAttribute()]
+    public partial class Experiment : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+        
+        [System.NonSerializedAttribute()]
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int IdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int ProjectIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int AlgorithmIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int ProblemIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.CharParameterValue> CharParameterValuesField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.FloatParameterValue> FloatParameterValuesField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.IntParameterValue> IntParameterValuesField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Run> RunsField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.OperatorParameterValue> OperatorParameterValuesField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Problem ProblemField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Project ProjectField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Algorithm AlgorithmField;
+        
+        [global::System.ComponentModel.BrowsableAttribute(false)]
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+            get {
+                return this.extensionDataField;
+            }
+            set {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int Id {
+            get {
+                return this.IdField;
+            }
+            set {
+                if ((this.IdField.Equals(value) != true)) {
+                    this.IdField = value;
+                    this.RaisePropertyChanged("Id");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int ProjectId {
+            get {
+                return this.ProjectIdField;
+            }
+            set {
+                if ((this.ProjectIdField.Equals(value) != true)) {
+                    this.ProjectIdField = value;
+                    this.RaisePropertyChanged("ProjectId");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(Order=2)]
+        public int AlgorithmId {
+            get {
+                return this.AlgorithmIdField;
+            }
+            set {
+                if ((this.AlgorithmIdField.Equals(value) != true)) {
+                    this.AlgorithmIdField = value;
+                    this.RaisePropertyChanged("AlgorithmId");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(Order=3)]
+        public int ProblemId {
+            get {
+                return this.ProblemIdField;
+            }
+            set {
+                if ((this.ProblemIdField.Equals(value) != true)) {
+                    this.ProblemIdField = value;
+                    this.RaisePropertyChanged("ProblemId");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=4)]
+        public System.Collections.Generic.List<HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.CharParameterValue> CharParameterValues {
+            get {
+                return this.CharParameterValuesField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.CharParameterValuesField, value) != true)) {
+                    this.CharParameterValuesField = value;
+                    this.RaisePropertyChanged("CharParameterValues");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=5)]
+        public System.Collections.Generic.List<HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.FloatParameterValue> FloatParameterValues {
+            get {
+                return this.FloatParameterValuesField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.FloatParameterValuesField, value) != true)) {
+                    this.FloatParameterValuesField = value;
+                    this.RaisePropertyChanged("FloatParameterValues");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=6)]
+        public System.Collections.Generic.List<HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.IntParameterValue> IntParameterValues {
+            get {
+                return this.IntParameterValuesField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.IntParameterValuesField, value) != true)) {
+                    this.IntParameterValuesField = value;
+                    this.RaisePropertyChanged("IntParameterValues");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=7)]
+        public System.Collections.Generic.List<HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Run> Runs {
+            get {
+                return this.RunsField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.RunsField, value) != true)) {
+                    this.RunsField = value;
+                    this.RaisePropertyChanged("Runs");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=8)]
+        public System.Collections.Generic.List<HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.OperatorParameterValue> OperatorParameterValues {
+            get {
+                return this.OperatorParameterValuesField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.OperatorParameterValuesField, value) != true)) {
+                    this.OperatorParameterValuesField = value;
+                    this.RaisePropertyChanged("OperatorParameterValues");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=9)]
+        public HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Problem Problem {
+            get {
+                return this.ProblemField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.ProblemField, value) != true)) {
+                    this.ProblemField = value;
+                    this.RaisePropertyChanged("Problem");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=10)]
+        public HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Project Project {
+            get {
+                return this.ProjectField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.ProjectField, value) != true)) {
+                    this.ProjectField = value;
+                    this.RaisePropertyChanged("Project");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=11)]
+        public HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Algorithm Algorithm {
+            get {
+                return this.AlgorithmField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.AlgorithmField, value) != true)) {
+                    this.AlgorithmField = value;
+                    this.RaisePropertyChanged("Algorithm");
+                }
+            }
+        }
+        
+        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="FloatProblemCharacteristicValue", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataAccess", IsReference=true)]
+    [System.SerializableAttribute()]
+    public partial class FloatProblemCharacteristicValue : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+        
+        [System.NonSerializedAttribute()]
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int ProblemCharacteristicIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int ProblemIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private double ValueField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Problem ProblemField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.ProblemCharacteristic ProblemCharacteristicField;
+        
+        [global::System.ComponentModel.BrowsableAttribute(false)]
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+            get {
+                return this.extensionDataField;
+            }
+            set {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int ProblemCharacteristicId {
+            get {
+                return this.ProblemCharacteristicIdField;
+            }
+            set {
+                if ((this.ProblemCharacteristicIdField.Equals(value) != true)) {
+                    this.ProblemCharacteristicIdField = value;
+                    this.RaisePropertyChanged("ProblemCharacteristicId");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int ProblemId {
+            get {
+                return this.ProblemIdField;
+            }
+            set {
+                if ((this.ProblemIdField.Equals(value) != true)) {
+                    this.ProblemIdField = value;
+                    this.RaisePropertyChanged("ProblemId");
+                }
+            }
+        }
+        
+        [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.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=3)]
+        public HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Problem Problem {
+            get {
+                return this.ProblemField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.ProblemField, value) != true)) {
+                    this.ProblemField = value;
+                    this.RaisePropertyChanged("Problem");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=4)]
+        public HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.ProblemCharacteristic ProblemCharacteristic {
+            get {
+                return this.ProblemCharacteristicField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.ProblemCharacteristicField, value) != true)) {
+                    this.ProblemCharacteristicField = value;
+                    this.RaisePropertyChanged("ProblemCharacteristic");
+                }
+            }
+        }
+        
+        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="IntProblemCharacteristicValue", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataAccess", IsReference=true)]
+    [System.SerializableAttribute()]
+    public partial class IntProblemCharacteristicValue : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+        
+        [System.NonSerializedAttribute()]
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int ProblemCharacteristicIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int ProblemIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int ValueField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Problem ProblemField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.ProblemCharacteristic ProblemCharacteristicField;
+        
+        [global::System.ComponentModel.BrowsableAttribute(false)]
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+            get {
+                return this.extensionDataField;
+            }
+            set {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int ProblemCharacteristicId {
+            get {
+                return this.ProblemCharacteristicIdField;
+            }
+            set {
+                if ((this.ProblemCharacteristicIdField.Equals(value) != true)) {
+                    this.ProblemCharacteristicIdField = value;
+                    this.RaisePropertyChanged("ProblemCharacteristicId");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int ProblemId {
+            get {
+                return this.ProblemIdField;
+            }
+            set {
+                if ((this.ProblemIdField.Equals(value) != true)) {
+                    this.ProblemIdField = value;
+                    this.RaisePropertyChanged("ProblemId");
+                }
+            }
+        }
+        
+        [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.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=3)]
+        public HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Problem Problem {
+            get {
+                return this.ProblemField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.ProblemField, value) != true)) {
+                    this.ProblemField = value;
+                    this.RaisePropertyChanged("Problem");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=4)]
+        public HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.ProblemCharacteristic ProblemCharacteristic {
+            get {
+                return this.ProblemCharacteristicField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.ProblemCharacteristicField, value) != true)) {
+                    this.ProblemCharacteristicField = value;
+                    this.RaisePropertyChanged("ProblemCharacteristic");
+                }
+            }
+        }
+        
+        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_Parameter", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataAccess", IsReference=true)]
+    [System.SerializableAttribute()]
+    public partial class Problem_Parameter : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+        
+        [System.NonSerializedAttribute()]
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int ProblemIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int ParameterIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Parameter ParameterField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Problem ProblemField;
+        
+        [global::System.ComponentModel.BrowsableAttribute(false)]
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+            get {
+                return this.extensionDataField;
+            }
+            set {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int ProblemId {
+            get {
+                return this.ProblemIdField;
+            }
+            set {
+                if ((this.ProblemIdField.Equals(value) != true)) {
+                    this.ProblemIdField = value;
+                    this.RaisePropertyChanged("ProblemId");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(Order=1)]
+        public int ParameterId {
+            get {
+                return this.ParameterIdField;
+            }
+            set {
+                if ((this.ParameterIdField.Equals(value) != true)) {
+                    this.ParameterIdField = value;
+                    this.RaisePropertyChanged("ParameterId");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=2)]
+        public HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Parameter Parameter {
+            get {
+                return this.ParameterField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.ParameterField, value) != true)) {
+                    this.ParameterField = value;
+                    this.RaisePropertyChanged("Parameter");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=3)]
+        public HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Problem Problem {
+            get {
+                return this.ProblemField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.ProblemField, value) != true)) {
+                    this.ProblemField = value;
+                    this.RaisePropertyChanged("Problem");
+                }
+            }
+        }
+        
+        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="ProblemCharacteristic", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataAccess", IsReference=true)]
+    [System.SerializableAttribute()]
+    public partial class ProblemCharacteristic : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+        
+        [System.NonSerializedAttribute()]
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int IdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string NameField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string DescriptionField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int DataTypeIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.CharProblemCharacteristicValue> CharProblemCharacteristicValuesField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.FloatProblemCharacteristicValue> FloatProblemCharacteristicValuesField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.IntProblemCharacteristicValue> IntProblemCharacteristicValuesField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.DataType DataTypeField;
+        
+        [global::System.ComponentModel.BrowsableAttribute(false)]
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+            get {
+                return this.extensionDataField;
+            }
+            set {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int 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(Order=2)]
+        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(Order=3)]
+        public int DataTypeId {
+            get {
+                return this.DataTypeIdField;
+            }
+            set {
+                if ((this.DataTypeIdField.Equals(value) != true)) {
+                    this.DataTypeIdField = value;
+                    this.RaisePropertyChanged("DataTypeId");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=4)]
+        public System.Collections.Generic.List<HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.CharProblemCharacteristicValue> CharProblemCharacteristicValues {
+            get {
+                return this.CharProblemCharacteristicValuesField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.CharProblemCharacteristicValuesField, value) != true)) {
+                    this.CharProblemCharacteristicValuesField = value;
+                    this.RaisePropertyChanged("CharProblemCharacteristicValues");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=5)]
+        public System.Collections.Generic.List<HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.FloatProblemCharacteristicValue> FloatProblemCharacteristicValues {
+            get {
+                return this.FloatProblemCharacteristicValuesField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.FloatProblemCharacteristicValuesField, value) != true)) {
+                    this.FloatProblemCharacteristicValuesField = value;
+                    this.RaisePropertyChanged("FloatProblemCharacteristicValues");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=6)]
+        public System.Collections.Generic.List<HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.IntProblemCharacteristicValue> IntProblemCharacteristicValues {
+            get {
+                return this.IntProblemCharacteristicValuesField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.IntProblemCharacteristicValuesField, value) != true)) {
+                    this.IntProblemCharacteristicValuesField = value;
+                    this.RaisePropertyChanged("IntProblemCharacteristicValues");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=7)]
+        public HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.DataType DataType {
+            get {
+                return this.DataTypeField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.DataTypeField, value) != true)) {
+                    this.DataTypeField = value;
+                    this.RaisePropertyChanged("DataType");
+                }
+            }
+        }
+        
+        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.DataAccess", IsReference=true)]
+    [System.SerializableAttribute()]
+    public partial class DataType : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+        
+        [System.NonSerializedAttribute()]
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int IdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string SqlNameField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string ClrNameField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.ProblemCharacteristic> ProblemCharacteristicsField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Result> ResultsField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.OperatorParameterValue> OperatorParameterValuesField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Parameter> ParametersField;
+        
+        [global::System.ComponentModel.BrowsableAttribute(false)]
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+            get {
+                return this.extensionDataField;
+            }
+            set {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int Id {
+            get {
+                return this.IdField;
+            }
+            set {
+                if ((this.IdField.Equals(value) != true)) {
+                    this.IdField = value;
+                    this.RaisePropertyChanged("Id");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public string SqlName {
+            get {
+                return this.SqlNameField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.SqlNameField, value) != true)) {
+                    this.SqlNameField = value;
+                    this.RaisePropertyChanged("SqlName");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(Order=2)]
+        public string ClrName {
+            get {
+                return this.ClrNameField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.ClrNameField, value) != true)) {
+                    this.ClrNameField = value;
+                    this.RaisePropertyChanged("ClrName");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=3)]
+        public System.Collections.Generic.List<HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.ProblemCharacteristic> ProblemCharacteristics {
+            get {
+                return this.ProblemCharacteristicsField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.ProblemCharacteristicsField, value) != true)) {
+                    this.ProblemCharacteristicsField = value;
+                    this.RaisePropertyChanged("ProblemCharacteristics");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=4)]
+        public System.Collections.Generic.List<HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Result> Results {
+            get {
+                return this.ResultsField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.ResultsField, value) != true)) {
+                    this.ResultsField = value;
+                    this.RaisePropertyChanged("Results");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=5)]
+        public System.Collections.Generic.List<HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.OperatorParameterValue> OperatorParameterValues {
+            get {
+                return this.OperatorParameterValuesField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.OperatorParameterValuesField, value) != true)) {
+                    this.OperatorParameterValuesField = value;
+                    this.RaisePropertyChanged("OperatorParameterValues");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=6)]
+        public System.Collections.Generic.List<HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Parameter> Parameters {
+            get {
+                return this.ParametersField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.ParametersField, value) != true)) {
+                    this.ParametersField = value;
+                    this.RaisePropertyChanged("Parameters");
+                }
+            }
+        }
+        
+        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="Result", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataAccess", IsReference=true)]
+    [System.SerializableAttribute()]
+    public partial class Result : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+        
+        [System.NonSerializedAttribute()]
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int IdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string NameField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string DescriptionField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int DataTypeIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.BlobResultValue> BlobResultValuesField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.CharResultValue> CharResultValuesField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.FloatResultValue> FloatResultValuesField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.IntResultValue> IntResultValuesField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Algorithm_Result> Algorithm_ResultsField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.DataType DataTypeField;
+        
+        [global::System.ComponentModel.BrowsableAttribute(false)]
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+            get {
+                return this.extensionDataField;
+            }
+            set {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int 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(Order=2)]
+        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(Order=3)]
+        public int DataTypeId {
+            get {
+                return this.DataTypeIdField;
+            }
+            set {
+                if ((this.DataTypeIdField.Equals(value) != true)) {
+                    this.DataTypeIdField = value;
+                    this.RaisePropertyChanged("DataTypeId");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=4)]
+        public System.Collections.Generic.List<HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.BlobResultValue> BlobResultValues {
+            get {
+                return this.BlobResultValuesField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.BlobResultValuesField, value) != true)) {
+                    this.BlobResultValuesField = value;
+                    this.RaisePropertyChanged("BlobResultValues");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=5)]
+        public System.Collections.Generic.List<HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.CharResultValue> CharResultValues {
+            get {
+                return this.CharResultValuesField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.CharResultValuesField, value) != true)) {
+                    this.CharResultValuesField = value;
+                    this.RaisePropertyChanged("CharResultValues");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=6)]
+        public System.Collections.Generic.List<HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.FloatResultValue> FloatResultValues {
+            get {
+                return this.FloatResultValuesField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.FloatResultValuesField, value) != true)) {
+                    this.FloatResultValuesField = value;
+                    this.RaisePropertyChanged("FloatResultValues");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=7)]
+        public System.Collections.Generic.List<HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.IntResultValue> IntResultValues {
+            get {
+                return this.IntResultValuesField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.IntResultValuesField, value) != true)) {
+                    this.IntResultValuesField = value;
+                    this.RaisePropertyChanged("IntResultValues");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=8)]
+        public System.Collections.Generic.List<HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Algorithm_Result> Algorithm_Results {
+            get {
+                return this.Algorithm_ResultsField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.Algorithm_ResultsField, value) != true)) {
+                    this.Algorithm_ResultsField = value;
+                    this.RaisePropertyChanged("Algorithm_Results");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=9)]
+        public HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.DataType DataType {
+            get {
+                return this.DataTypeField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.DataTypeField, value) != true)) {
+                    this.DataTypeField = value;
+                    this.RaisePropertyChanged("DataType");
+                }
+            }
+        }
+        
+        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="OperatorParameterValue", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataAccess", IsReference=true)]
+    [System.SerializableAttribute()]
+    public partial class OperatorParameterValue : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+        
+        [System.NonSerializedAttribute()]
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int ParameterIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int ExperimentIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Binary ValueField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int DataTypeIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.DataType DataTypeField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Experiment ExperimentField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Parameter ParameterField;
+        
+        [global::System.ComponentModel.BrowsableAttribute(false)]
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+            get {
+                return this.extensionDataField;
+            }
+            set {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int ParameterId {
+            get {
+                return this.ParameterIdField;
+            }
+            set {
+                if ((this.ParameterIdField.Equals(value) != true)) {
+                    this.ParameterIdField = value;
+                    this.RaisePropertyChanged("ParameterId");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(Order=1)]
+        public int ExperimentId {
+            get {
+                return this.ExperimentIdField;
+            }
+            set {
+                if ((this.ExperimentIdField.Equals(value) != true)) {
+                    this.ExperimentIdField = value;
+                    this.RaisePropertyChanged("ExperimentId");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(Order=2)]
+        public HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Binary Value {
+            get {
+                return this.ValueField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.ValueField, value) != true)) {
+                    this.ValueField = value;
+                    this.RaisePropertyChanged("Value");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(Order=3)]
+        public int DataTypeId {
+            get {
+                return this.DataTypeIdField;
+            }
+            set {
+                if ((this.DataTypeIdField.Equals(value) != true)) {
+                    this.DataTypeIdField = value;
+                    this.RaisePropertyChanged("DataTypeId");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=4)]
+        public HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.DataType DataType {
+            get {
+                return this.DataTypeField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.DataTypeField, value) != true)) {
+                    this.DataTypeField = value;
+                    this.RaisePropertyChanged("DataType");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=5)]
+        public HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Experiment Experiment {
+            get {
+                return this.ExperimentField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.ExperimentField, value) != true)) {
+                    this.ExperimentField = value;
+                    this.RaisePropertyChanged("Experiment");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=6)]
+        public HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Parameter Parameter {
+            get {
+                return this.ParameterField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.ParameterField, value) != true)) {
+                    this.ParameterField = value;
+                    this.RaisePropertyChanged("Parameter");
+                }
+            }
+        }
+        
+        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="Parameter", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataAccess", IsReference=true)]
+    [System.SerializableAttribute()]
+    public partial class Parameter : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+        
+        [System.NonSerializedAttribute()]
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int IdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string NameField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string DescriptionField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int DataTypeIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Algorithm_Parameter> Algorithm_ParametersField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.CharParameterValue> CharParameterValuesField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.FloatParameterValue> FloatParameterValuesField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.IntParameterValue> IntParameterValuesField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Problem_Parameter> Problem_ParametersField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.OperatorParameterValue> OperatorParameterValuesField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.DataType DataTypeField;
+        
+        [global::System.ComponentModel.BrowsableAttribute(false)]
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+            get {
+                return this.extensionDataField;
+            }
+            set {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int 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(Order=2)]
+        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(Order=3)]
+        public int DataTypeId {
+            get {
+                return this.DataTypeIdField;
+            }
+            set {
+                if ((this.DataTypeIdField.Equals(value) != true)) {
+                    this.DataTypeIdField = value;
+                    this.RaisePropertyChanged("DataTypeId");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=4)]
+        public System.Collections.Generic.List<HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Algorithm_Parameter> Algorithm_Parameters {
+            get {
+                return this.Algorithm_ParametersField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.Algorithm_ParametersField, value) != true)) {
+                    this.Algorithm_ParametersField = value;
+                    this.RaisePropertyChanged("Algorithm_Parameters");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=5)]
+        public System.Collections.Generic.List<HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.CharParameterValue> CharParameterValues {
+            get {
+                return this.CharParameterValuesField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.CharParameterValuesField, value) != true)) {
+                    this.CharParameterValuesField = value;
+                    this.RaisePropertyChanged("CharParameterValues");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=6)]
+        public System.Collections.Generic.List<HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.FloatParameterValue> FloatParameterValues {
+            get {
+                return this.FloatParameterValuesField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.FloatParameterValuesField, value) != true)) {
+                    this.FloatParameterValuesField = value;
+                    this.RaisePropertyChanged("FloatParameterValues");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=7)]
+        public System.Collections.Generic.List<HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.IntParameterValue> IntParameterValues {
+            get {
+                return this.IntParameterValuesField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.IntParameterValuesField, value) != true)) {
+                    this.IntParameterValuesField = value;
+                    this.RaisePropertyChanged("IntParameterValues");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=8)]
+        public System.Collections.Generic.List<HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Problem_Parameter> Problem_Parameters {
+            get {
+                return this.Problem_ParametersField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.Problem_ParametersField, value) != true)) {
+                    this.Problem_ParametersField = value;
+                    this.RaisePropertyChanged("Problem_Parameters");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=9)]
+        public System.Collections.Generic.List<HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.OperatorParameterValue> OperatorParameterValues {
+            get {
+                return this.OperatorParameterValuesField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.OperatorParameterValuesField, value) != true)) {
+                    this.OperatorParameterValuesField = value;
+                    this.RaisePropertyChanged("OperatorParameterValues");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=10)]
+        public HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.DataType DataType {
+            get {
+                return this.DataTypeField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.DataTypeField, value) != true)) {
+                    this.DataTypeField = value;
+                    this.RaisePropertyChanged("DataType");
+                }
+            }
+        }
+        
+        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="BlobResultValue", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataAccess", IsReference=true)]
+    [System.SerializableAttribute()]
+    public partial class BlobResultValue : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+        
+        [System.NonSerializedAttribute()]
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int ResultIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int RunIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Binary ValueField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Run RunField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Result ResultField;
+        
+        [global::System.ComponentModel.BrowsableAttribute(false)]
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+            get {
+                return this.extensionDataField;
+            }
+            set {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int ResultId {
+            get {
+                return this.ResultIdField;
+            }
+            set {
+                if ((this.ResultIdField.Equals(value) != true)) {
+                    this.ResultIdField = value;
+                    this.RaisePropertyChanged("ResultId");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int RunId {
+            get {
+                return this.RunIdField;
+            }
+            set {
+                if ((this.RunIdField.Equals(value) != true)) {
+                    this.RunIdField = value;
+                    this.RaisePropertyChanged("RunId");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Binary Value {
+            get {
+                return this.ValueField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.ValueField, value) != true)) {
+                    this.ValueField = value;
+                    this.RaisePropertyChanged("Value");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=3)]
+        public HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Run Run {
+            get {
+                return this.RunField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.RunField, value) != true)) {
+                    this.RunField = value;
+                    this.RaisePropertyChanged("Run");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=4)]
+        public HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Result Result {
+            get {
+                return this.ResultField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.ResultField, value) != true)) {
+                    this.ResultField = value;
+                    this.RaisePropertyChanged("Result");
+                }
+            }
+        }
+        
+        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="CharResultValue", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataAccess", IsReference=true)]
+    [System.SerializableAttribute()]
+    public partial class CharResultValue : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+        
+        [System.NonSerializedAttribute()]
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int ResultIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int RunIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string ValueField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Run RunField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Result ResultField;
+        
+        [global::System.ComponentModel.BrowsableAttribute(false)]
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+            get {
+                return this.extensionDataField;
+            }
+            set {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int ResultId {
+            get {
+                return this.ResultIdField;
+            }
+            set {
+                if ((this.ResultIdField.Equals(value) != true)) {
+                    this.ResultIdField = value;
+                    this.RaisePropertyChanged("ResultId");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int RunId {
+            get {
+                return this.RunIdField;
+            }
+            set {
+                if ((this.RunIdField.Equals(value) != true)) {
+                    this.RunIdField = value;
+                    this.RaisePropertyChanged("RunId");
+                }
+            }
+        }
+        
+        [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.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=3)]
+        public HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Run Run {
+            get {
+                return this.RunField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.RunField, value) != true)) {
+                    this.RunField = value;
+                    this.RaisePropertyChanged("Run");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=4)]
+        public HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Result Result {
+            get {
+                return this.ResultField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.ResultField, value) != true)) {
+                    this.ResultField = value;
+                    this.RaisePropertyChanged("Result");
+                }
+            }
+        }
+        
+        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="FloatResultValue", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataAccess", IsReference=true)]
+    [System.SerializableAttribute()]
+    public partial class FloatResultValue : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+        
+        [System.NonSerializedAttribute()]
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int ResultIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int RunIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private double ValueField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Run RunField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Result ResultField;
+        
+        [global::System.ComponentModel.BrowsableAttribute(false)]
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+            get {
+                return this.extensionDataField;
+            }
+            set {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int ResultId {
+            get {
+                return this.ResultIdField;
+            }
+            set {
+                if ((this.ResultIdField.Equals(value) != true)) {
+                    this.ResultIdField = value;
+                    this.RaisePropertyChanged("ResultId");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int RunId {
+            get {
+                return this.RunIdField;
+            }
+            set {
+                if ((this.RunIdField.Equals(value) != true)) {
+                    this.RunIdField = value;
+                    this.RaisePropertyChanged("RunId");
+                }
+            }
+        }
+        
+        [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.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=3)]
+        public HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Run Run {
+            get {
+                return this.RunField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.RunField, value) != true)) {
+                    this.RunField = value;
+                    this.RaisePropertyChanged("Run");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=4)]
+        public HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Result Result {
+            get {
+                return this.ResultField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.ResultField, value) != true)) {
+                    this.ResultField = value;
+                    this.RaisePropertyChanged("Result");
+                }
+            }
+        }
+        
+        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="IntResultValue", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataAccess", IsReference=true)]
+    [System.SerializableAttribute()]
+    public partial class IntResultValue : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+        
+        [System.NonSerializedAttribute()]
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int ResultIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int RunIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int ValueField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Run RunField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Result ResultField;
+        
+        [global::System.ComponentModel.BrowsableAttribute(false)]
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+            get {
+                return this.extensionDataField;
+            }
+            set {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int ResultId {
+            get {
+                return this.ResultIdField;
+            }
+            set {
+                if ((this.ResultIdField.Equals(value) != true)) {
+                    this.ResultIdField = value;
+                    this.RaisePropertyChanged("ResultId");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int RunId {
+            get {
+                return this.RunIdField;
+            }
+            set {
+                if ((this.RunIdField.Equals(value) != true)) {
+                    this.RunIdField = value;
+                    this.RaisePropertyChanged("RunId");
+                }
+            }
+        }
+        
+        [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.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=3)]
+        public HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Run Run {
+            get {
+                return this.RunField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.RunField, value) != true)) {
+                    this.RunField = value;
+                    this.RaisePropertyChanged("Run");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=4)]
+        public HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Result Result {
+            get {
+                return this.ResultField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.ResultField, value) != true)) {
+                    this.ResultField = value;
+                    this.RaisePropertyChanged("Result");
+                }
+            }
+        }
+        
+        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="Algorithm_Result", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataAccess", IsReference=true)]
+    [System.SerializableAttribute()]
+    public partial class Algorithm_Result : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+        
+        [System.NonSerializedAttribute()]
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int AlgorithmIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int ResultIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Algorithm AlgorithmField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Result ResultField;
+        
+        [global::System.ComponentModel.BrowsableAttribute(false)]
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+            get {
+                return this.extensionDataField;
+            }
+            set {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int AlgorithmId {
+            get {
+                return this.AlgorithmIdField;
+            }
+            set {
+                if ((this.AlgorithmIdField.Equals(value) != true)) {
+                    this.AlgorithmIdField = value;
+                    this.RaisePropertyChanged("AlgorithmId");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int ResultId {
+            get {
+                return this.ResultIdField;
+            }
+            set {
+                if ((this.ResultIdField.Equals(value) != true)) {
+                    this.ResultIdField = value;
+                    this.RaisePropertyChanged("ResultId");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=2)]
+        public HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Algorithm Algorithm {
+            get {
+                return this.AlgorithmField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.AlgorithmField, value) != true)) {
+                    this.AlgorithmField = value;
+                    this.RaisePropertyChanged("Algorithm");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=3)]
+        public HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Result Result {
+            get {
+                return this.ResultField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.ResultField, value) != true)) {
+                    this.ResultField = value;
+                    this.RaisePropertyChanged("Result");
+                }
+            }
+        }
+        
+        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="Binary", Namespace="http://schemas.datacontract.org/2004/07/System.Data.Linq")]
+    [System.SerializableAttribute()]
+    public partial class Binary : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+        
+        [System.NonSerializedAttribute()]
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private byte[] BytesField;
+        
+        [global::System.ComponentModel.BrowsableAttribute(false)]
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+            get {
+                return this.extensionDataField;
+            }
+            set {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public byte[] Bytes {
+            get {
+                return this.BytesField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.BytesField, value) != true)) {
+                    this.BytesField = value;
+                    this.RaisePropertyChanged("Bytes");
+                }
+            }
+        }
+        
+        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.DataAccess", IsReference=true)]
+    [System.SerializableAttribute()]
+    public partial class Run : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+        
+        [System.NonSerializedAttribute()]
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int IdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int ExperimentIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Nullable<System.DateTime> FinishedDateField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Guid UserIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Guid ClientIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.BlobResultValue> BlobResultValuesField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.CharResultValue> CharResultValuesField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.FloatResultValue> FloatResultValuesField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.IntResultValue> IntResultValuesField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Client ClientField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Experiment ExperimentField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.User UserField;
+        
+        [global::System.ComponentModel.BrowsableAttribute(false)]
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+            get {
+                return this.extensionDataField;
+            }
+            set {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int Id {
+            get {
+                return this.IdField;
+            }
+            set {
+                if ((this.IdField.Equals(value) != true)) {
+                    this.IdField = value;
+                    this.RaisePropertyChanged("Id");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(Order=1)]
+        public int ExperimentId {
+            get {
+                return this.ExperimentIdField;
+            }
+            set {
+                if ((this.ExperimentIdField.Equals(value) != true)) {
+                    this.ExperimentIdField = value;
+                    this.RaisePropertyChanged("ExperimentId");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(Order=2)]
+        public System.Nullable<System.DateTime> FinishedDate {
+            get {
+                return this.FinishedDateField;
+            }
+            set {
+                if ((this.FinishedDateField.Equals(value) != true)) {
+                    this.FinishedDateField = value;
+                    this.RaisePropertyChanged("FinishedDate");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(Order=3)]
+        public System.Guid UserId {
+            get {
+                return this.UserIdField;
+            }
+            set {
+                if ((this.UserIdField.Equals(value) != true)) {
+                    this.UserIdField = value;
+                    this.RaisePropertyChanged("UserId");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(Order=4)]
+        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(EmitDefaultValue=false, Order=5)]
+        public System.Collections.Generic.List<HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.BlobResultValue> BlobResultValues {
+            get {
+                return this.BlobResultValuesField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.BlobResultValuesField, value) != true)) {
+                    this.BlobResultValuesField = value;
+                    this.RaisePropertyChanged("BlobResultValues");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=6)]
+        public System.Collections.Generic.List<HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.CharResultValue> CharResultValues {
+            get {
+                return this.CharResultValuesField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.CharResultValuesField, value) != true)) {
+                    this.CharResultValuesField = value;
+                    this.RaisePropertyChanged("CharResultValues");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=7)]
+        public System.Collections.Generic.List<HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.FloatResultValue> FloatResultValues {
+            get {
+                return this.FloatResultValuesField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.FloatResultValuesField, value) != true)) {
+                    this.FloatResultValuesField = value;
+                    this.RaisePropertyChanged("FloatResultValues");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=8)]
+        public System.Collections.Generic.List<HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.IntResultValue> IntResultValues {
+            get {
+                return this.IntResultValuesField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.IntResultValuesField, value) != true)) {
+                    this.IntResultValuesField = value;
+                    this.RaisePropertyChanged("IntResultValues");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=9)]
+        public HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Client Client {
+            get {
+                return this.ClientField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.ClientField, value) != true)) {
+                    this.ClientField = value;
+                    this.RaisePropertyChanged("Client");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=10)]
+        public HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Experiment Experiment {
+            get {
+                return this.ExperimentField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.ExperimentField, value) != true)) {
+                    this.ExperimentField = value;
+                    this.RaisePropertyChanged("Experiment");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=11)]
+        public HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.User User {
+            get {
+                return this.UserField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.UserField, value) != true)) {
+                    this.UserField = value;
+                    this.RaisePropertyChanged("User");
+                }
+            }
+        }
+        
+        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="Client", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataAccess", IsReference=true)]
+    [System.SerializableAttribute()]
+    public partial class Client : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+        
+        [System.NonSerializedAttribute()]
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Guid IdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string NameField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Run> RunsField;
+        
+        [global::System.ComponentModel.BrowsableAttribute(false)]
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+            get {
+                return this.extensionDataField;
+            }
+            set {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public System.Guid 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(EmitDefaultValue=false)]
+        public System.Collections.Generic.List<HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Run> Runs {
+            get {
+                return this.RunsField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.RunsField, value) != true)) {
+                    this.RunsField = value;
+                    this.RaisePropertyChanged("Runs");
+                }
+            }
+        }
+        
+        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="User", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataAccess", IsReference=true)]
+    [System.SerializableAttribute()]
+    public partial class User : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+        
+        [System.NonSerializedAttribute()]
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Guid IdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string NameField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Run> RunsField;
+        
+        [global::System.ComponentModel.BrowsableAttribute(false)]
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+            get {
+                return this.extensionDataField;
+            }
+            set {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public System.Guid 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(EmitDefaultValue=false)]
+        public System.Collections.Generic.List<HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Run> Runs {
+            get {
+                return this.RunsField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.RunsField, value) != true)) {
+                    this.RunsField = value;
+                    this.RaisePropertyChanged("Runs");
+                }
+            }
+        }
+        
+        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="Project", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataAccess", IsReference=true)]
+    [System.SerializableAttribute()]
+    public partial class Project : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+        
+        [System.NonSerializedAttribute()]
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int IdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string NameField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string DescriptionField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Experiment> ExperimentsField;
+        
+        [global::System.ComponentModel.BrowsableAttribute(false)]
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+            get {
+                return this.extensionDataField;
+            }
+            set {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int 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(Order=2)]
+        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(EmitDefaultValue=false, Order=3)]
+        public System.Collections.Generic.List<HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Experiment> Experiments {
+            get {
+                return this.ExperimentsField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.ExperimentsField, value) != true)) {
+                    this.ExperimentsField = value;
+                    this.RaisePropertyChanged("Experiments");
+                }
+            }
+        }
+        
+        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="CharParameterValue", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataAccess", IsReference=true)]
+    [System.SerializableAttribute()]
+    public partial class CharParameterValue : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+        
+        [System.NonSerializedAttribute()]
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int ParameterIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int ExperimentIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string ValueField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Experiment ExperimentField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Parameter ParameterField;
+        
+        [global::System.ComponentModel.BrowsableAttribute(false)]
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+            get {
+                return this.extensionDataField;
+            }
+            set {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int ParameterId {
+            get {
+                return this.ParameterIdField;
+            }
+            set {
+                if ((this.ParameterIdField.Equals(value) != true)) {
+                    this.ParameterIdField = value;
+                    this.RaisePropertyChanged("ParameterId");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(Order=1)]
+        public int ExperimentId {
+            get {
+                return this.ExperimentIdField;
+            }
+            set {
+                if ((this.ExperimentIdField.Equals(value) != true)) {
+                    this.ExperimentIdField = value;
+                    this.RaisePropertyChanged("ExperimentId");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(Order=2)]
+        public string Value {
+            get {
+                return this.ValueField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.ValueField, value) != true)) {
+                    this.ValueField = value;
+                    this.RaisePropertyChanged("Value");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=3)]
+        public HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Experiment Experiment {
+            get {
+                return this.ExperimentField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.ExperimentField, value) != true)) {
+                    this.ExperimentField = value;
+                    this.RaisePropertyChanged("Experiment");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=4)]
+        public HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Parameter Parameter {
+            get {
+                return this.ParameterField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.ParameterField, value) != true)) {
+                    this.ParameterField = value;
+                    this.RaisePropertyChanged("Parameter");
+                }
+            }
+        }
+        
+        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="FloatParameterValue", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataAccess", IsReference=true)]
+    [System.SerializableAttribute()]
+    public partial class FloatParameterValue : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+        
+        [System.NonSerializedAttribute()]
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int ParameterIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int ExperimentIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private double ValueField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Experiment ExperimentField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Parameter ParameterField;
+        
+        [global::System.ComponentModel.BrowsableAttribute(false)]
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+            get {
+                return this.extensionDataField;
+            }
+            set {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int ParameterId {
+            get {
+                return this.ParameterIdField;
+            }
+            set {
+                if ((this.ParameterIdField.Equals(value) != true)) {
+                    this.ParameterIdField = value;
+                    this.RaisePropertyChanged("ParameterId");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(Order=1)]
+        public int ExperimentId {
+            get {
+                return this.ExperimentIdField;
+            }
+            set {
+                if ((this.ExperimentIdField.Equals(value) != true)) {
+                    this.ExperimentIdField = value;
+                    this.RaisePropertyChanged("ExperimentId");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(Order=2)]
+        public double Value {
+            get {
+                return this.ValueField;
+            }
+            set {
+                if ((this.ValueField.Equals(value) != true)) {
+                    this.ValueField = value;
+                    this.RaisePropertyChanged("Value");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=3)]
+        public HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Experiment Experiment {
+            get {
+                return this.ExperimentField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.ExperimentField, value) != true)) {
+                    this.ExperimentField = value;
+                    this.RaisePropertyChanged("Experiment");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=4)]
+        public HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Parameter Parameter {
+            get {
+                return this.ParameterField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.ParameterField, value) != true)) {
+                    this.ParameterField = value;
+                    this.RaisePropertyChanged("Parameter");
+                }
+            }
+        }
+        
+        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="IntParameterValue", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataAccess", IsReference=true)]
+    [System.SerializableAttribute()]
+    public partial class IntParameterValue : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+        
+        [System.NonSerializedAttribute()]
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int ParameterIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int ExperimentIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int ValueField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Experiment ExperimentField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Parameter ParameterField;
+        
+        [global::System.ComponentModel.BrowsableAttribute(false)]
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+            get {
+                return this.extensionDataField;
+            }
+            set {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int ParameterId {
+            get {
+                return this.ParameterIdField;
+            }
+            set {
+                if ((this.ParameterIdField.Equals(value) != true)) {
+                    this.ParameterIdField = value;
+                    this.RaisePropertyChanged("ParameterId");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(Order=1)]
+        public int ExperimentId {
+            get {
+                return this.ExperimentIdField;
+            }
+            set {
+                if ((this.ExperimentIdField.Equals(value) != true)) {
+                    this.ExperimentIdField = value;
+                    this.RaisePropertyChanged("ExperimentId");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(Order=2)]
+        public int Value {
+            get {
+                return this.ValueField;
+            }
+            set {
+                if ((this.ValueField.Equals(value) != true)) {
+                    this.ValueField = value;
+                    this.RaisePropertyChanged("Value");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=3)]
+        public HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Experiment Experiment {
+            get {
+                return this.ExperimentField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.ExperimentField, value) != true)) {
+                    this.ExperimentField = value;
+                    this.RaisePropertyChanged("Experiment");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=4)]
+        public HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Parameter Parameter {
+            get {
+                return this.ParameterField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.ParameterField, value) != true)) {
+                    this.ParameterField = value;
+                    this.RaisePropertyChanged("Parameter");
+                }
+            }
+        }
+        
+        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="Algorithm_Parameter", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataAccess", IsReference=true)]
+    [System.SerializableAttribute()]
+    public partial class Algorithm_Parameter : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+        
+        [System.NonSerializedAttribute()]
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int AlgorithmIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int ParameterIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Parameter ParameterField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Algorithm AlgorithmField;
+        
+        [global::System.ComponentModel.BrowsableAttribute(false)]
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+            get {
+                return this.extensionDataField;
+            }
+            set {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int AlgorithmId {
+            get {
+                return this.AlgorithmIdField;
+            }
+            set {
+                if ((this.AlgorithmIdField.Equals(value) != true)) {
+                    this.AlgorithmIdField = value;
+                    this.RaisePropertyChanged("AlgorithmId");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int ParameterId {
+            get {
+                return this.ParameterIdField;
+            }
+            set {
+                if ((this.ParameterIdField.Equals(value) != true)) {
+                    this.ParameterIdField = value;
+                    this.RaisePropertyChanged("ParameterId");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=2)]
+        public HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Parameter Parameter {
+            get {
+                return this.ParameterField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.ParameterField, value) != true)) {
+                    this.ParameterField = value;
+                    this.RaisePropertyChanged("Parameter");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=3)]
+        public HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Algorithm Algorithm {
+            get {
+                return this.AlgorithmField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.AlgorithmField, value) != true)) {
+                    this.AlgorithmField = value;
+                    this.RaisePropertyChanged("Algorithm");
+                }
+            }
+        }
+        
+        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="AlgorithmData", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataAccess", IsReference=true)]
+    [System.SerializableAttribute()]
+    public partial class AlgorithmData : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+        
+        [System.NonSerializedAttribute()]
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int AlgorithmIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Binary DataField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Algorithm AlgorithmField;
+        
+        [global::System.ComponentModel.BrowsableAttribute(false)]
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+            get {
+                return this.extensionDataField;
+            }
+            set {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int AlgorithmId {
+            get {
+                return this.AlgorithmIdField;
+            }
+            set {
+                if ((this.AlgorithmIdField.Equals(value) != true)) {
+                    this.AlgorithmIdField = value;
+                    this.RaisePropertyChanged("AlgorithmId");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Binary Data {
+            get {
+                return this.DataField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.DataField, value) != true)) {
+                    this.DataField = value;
+                    this.RaisePropertyChanged("Data");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=2)]
+        public HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Algorithm Algorithm {
+            get {
+                return this.AlgorithmField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.AlgorithmField, value) != true)) {
+                    this.AlgorithmField = value;
+                    this.RaisePropertyChanged("Algorithm");
+                }
+            }
+        }
+        
+        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.DataAccess", IsReference=true)]
+    [System.SerializableAttribute()]
+    public partial class AlgorithmClass : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+        
+        [System.NonSerializedAttribute()]
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int IdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string NameField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string DescriptionField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Algorithm> AlgorithmsField;
+        
+        [global::System.ComponentModel.BrowsableAttribute(false)]
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+            get {
+                return this.extensionDataField;
+            }
+            set {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int 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(Order=2)]
+        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(EmitDefaultValue=false, Order=3)]
+        public System.Collections.Generic.List<HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Algorithm> Algorithms {
+            get {
+                return this.AlgorithmsField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.AlgorithmsField, value) != true)) {
+                    this.AlgorithmsField = value;
+                    this.RaisePropertyChanged("Algorithms");
+                }
+            }
+        }
+        
+        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="OKBAdmin.IAdminService")]
+    public interface IAdminService {
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAdminService/GetPlatformNames", ReplyAction="http://tempuri.org/IAdminService/GetPlatformNamesResponse")]
+        System.Collections.Generic.List<HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Platform> GetPlatformNames();
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAdminService/GetCompleteAlgorithm", ReplyAction="http://tempuri.org/IAdminService/GetCompleteAlgorithmResponse")]
+        HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Algorithm GetCompleteAlgorithm(int id);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAdminService/GetCompleteProblem", ReplyAction="http://tempuri.org/IAdminService/GetCompleteProblemResponse")]
+        HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Problem GetCompleteProblem(int id);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAdminService/UpdateCompleteAlgorithm", ReplyAction="http://tempuri.org/IAdminService/UpdateCompleteAlgorithmResponse")]
+        void UpdateCompleteAlgorithm(HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Algorithm algorithm);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAdminService/UpdateCompleteProblem", ReplyAction="http://tempuri.org/IAdminService/UpdateCompleteProblemResponse")]
+        void UpdateCompleteProblem(HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Problem problem);
+    }
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+    public interface IAdminServiceChannel : HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.IAdminService, System.ServiceModel.IClientChannel {
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+    public partial class AdminServiceClient : System.ServiceModel.ClientBase<HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.IAdminService>, HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.IAdminService {
+        
+        public AdminServiceClient() {
+        }
+        
+        public AdminServiceClient(string endpointConfigurationName) : 
+                base(endpointConfigurationName) {
+        }
+        
+        public AdminServiceClient(string endpointConfigurationName, string remoteAddress) : 
+                base(endpointConfigurationName, remoteAddress) {
+        }
+        
+        public AdminServiceClient(string endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) : 
+                base(endpointConfigurationName, remoteAddress) {
+        }
+        
+        public AdminServiceClient(System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress) : 
+                base(binding, remoteAddress) {
+        }
+        
+        public System.Collections.Generic.List<HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Platform> GetPlatformNames() {
+            return base.Channel.GetPlatformNames();
+        }
+        
+        public HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Algorithm GetCompleteAlgorithm(int id) {
+            return base.Channel.GetCompleteAlgorithm(id);
+        }
+        
+        public HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Problem GetCompleteProblem(int id) {
+            return base.Channel.GetCompleteProblem(id);
+        }
+        
+        public void UpdateCompleteAlgorithm(HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Algorithm algorithm) {
+            base.Channel.UpdateCompleteAlgorithm(algorithm);
+        }
+        
+        public void UpdateCompleteProblem(HeuristicLab.OKB.Cockpit.Admin.OKBAdmin.Problem problem) {
+            base.Channel.UpdateCompleteProblem(problem);
+        }
+    }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/Service References/OKBAdmin/Reference.svcmap
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/Service References/OKBAdmin/Reference.svcmap	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/Service References/OKBAdmin/Reference.svcmap	(revision 5296)
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<ReferenceGroup xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" ID="96e4cc0c-06a1-452f-a7ed-6d001a78514a" xmlns="urn:schemas-microsoft-com:xml-wcfservicemap">
+  <ClientOptions>
+    <GenerateAsynchronousMethods>false</GenerateAsynchronousMethods>
+    <EnableDataBinding>true</EnableDataBinding>
+    <ExcludedTypes />
+    <ImportXmlTypes>false</ImportXmlTypes>
+    <GenerateInternalTypes>false</GenerateInternalTypes>
+    <GenerateMessageContracts>false</GenerateMessageContracts>
+    <NamespaceMappings />
+    <CollectionMappings>
+      <CollectionMapping TypeName="System.Collections.Generic.List`1" Category="List" />
+    </CollectionMappings>
+    <GenerateSerializableTypes>true</GenerateSerializableTypes>
+    <Serializer>Auto</Serializer>
+    <UseSerializerForFaults>true</UseSerializerForFaults>
+    <ReferenceAllAssemblies>true</ReferenceAllAssemblies>
+    <ReferencedAssemblies />
+    <ReferencedDataContractTypes />
+    <ServiceContractMappings />
+  </ClientOptions>
+  <MetadataSources>
+    <MetadataSource Address="http://localhost:8732/Design_Time_Addresses/OKB-3.3/AdminService/mex" Protocol="mex" SourceId="1" />
+  </MetadataSources>
+  <Metadata>
+    <MetadataFile FileName="service.wsdl" MetadataType="Wsdl" ID="31b2300c-6f22-491c-b9b0-4e94e4c6c9de" SourceId="1" SourceUrl="http://localhost:8732/Design_Time_Addresses/OKB-3.3/AdminService/mex" />
+    <MetadataFile FileName="service.xsd" MetadataType="Schema" ID="875bb9b1-c005-46bf-83b0-29bae0779c01" SourceId="1" SourceUrl="http://localhost:8732/Design_Time_Addresses/OKB-3.3/AdminService/mex" />
+    <MetadataFile FileName="service1.xsd" MetadataType="Schema" ID="b9f4de44-5bf5-4d9b-83e5-8bac72dd35c3" SourceId="1" SourceUrl="http://localhost:8732/Design_Time_Addresses/OKB-3.3/AdminService/mex" />
+    <MetadataFile FileName="HeuristicLab.Services.OKB.DataAccess.xsd" MetadataType="Schema" ID="57a90b7f-77ed-4000-9e8b-0c683f5663a5" SourceId="1" SourceUrl="http://localhost:8732/Design_Time_Addresses/OKB-3.3/AdminService/mex" />
+    <MetadataFile FileName="System.Data.Linq.xsd" MetadataType="Schema" ID="10d08e99-da39-4d5d-ac9d-4dbeccfe9d52" SourceId="1" SourceUrl="http://localhost:8732/Design_Time_Addresses/OKB-3.3/AdminService/mex" />
+  </Metadata>
+  <Extensions>
+    <ExtensionFile FileName="configuration91.svcinfo" Name="configuration91.svcinfo" />
+    <ExtensionFile FileName="configuration.svcinfo" Name="configuration.svcinfo" />
+  </Extensions>
+</ReferenceGroup>
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/Service References/OKBAdmin/System.Data.Linq.xsd
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/Service References/OKBAdmin/System.Data.Linq.xsd	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/Service References/OKBAdmin/System.Data.Linq.xsd	(revision 5296)
@@ -0,0 +1,9 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:tns="http://schemas.datacontract.org/2004/07/System.Data.Linq" elementFormDefault="qualified" targetNamespace="http://schemas.datacontract.org/2004/07/System.Data.Linq" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:complexType name="Binary">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="Bytes" nillable="true" type="xs:base64Binary" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="Binary" nillable="true" type="tns:Binary" />
+</xs:schema>
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/Service References/OKBAdmin/configuration.svcinfo
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/Service References/OKBAdmin/configuration.svcinfo	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/Service References/OKBAdmin/configuration.svcinfo	(revision 5296)
@@ -0,0 +1,10 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<configurationSnapshot xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="urn:schemas-microsoft-com:xml-wcfconfigurationsnapshot">
+  <behaviors />
+  <bindings>
+    <binding digest="System.ServiceModel.Configuration.NetTcpBindingElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089:&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-16&quot;?&gt;&lt;Data hostNameComparisonMode=&quot;StrongWildcard&quot; listenBacklog=&quot;10&quot; maxBufferSize=&quot;65536&quot; maxConnections=&quot;10&quot; name=&quot;NetTcpBinding_IAdminService&quot; transactionFlow=&quot;false&quot; transactionProtocol=&quot;OleTransactions&quot; transferMode=&quot;Buffered&quot;&gt;&lt;readerQuotas maxArrayLength=&quot;16384&quot; maxBytesPerRead=&quot;4096&quot; maxDepth=&quot;32&quot; maxNameTableCharCount=&quot;16384&quot; maxStringContentLength=&quot;8192&quot; /&gt;&lt;reliableSession enabled=&quot;false&quot; inactivityTimeout=&quot;00:10:00&quot; ordered=&quot;true&quot; /&gt;&lt;security mode=&quot;Message&quot;&gt;&lt;message algorithmSuite=&quot;Default&quot; clientCredentialType=&quot;UserName&quot; /&gt;&lt;transport clientCredentialType=&quot;Windows&quot; protectionLevel=&quot;EncryptAndSign&quot; /&gt;&lt;/security&gt;&lt;/Data&gt;" bindingType="netTcpBinding" name="NetTcpBinding_IAdminService" />
+  </bindings>
+  <endpoints>
+    <endpoint normalizedDigest="&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-16&quot;?&gt;&lt;Data address=&quot;net.tcp://localhost:8733/OKB-3.3/AdminService&quot; binding=&quot;netTcpBinding&quot; bindingConfiguration=&quot;NetTcpBinding_IAdminService&quot; contract=&quot;OKBAdmin.IAdminService&quot; name=&quot;NetTcpBinding_IAdminService&quot;&gt;&lt;identity&gt;&lt;certificate encodedValue=&quot;AwAAAAEAAAAUAAAAD/AlkYJw/OUhl6D/9w8mjJBh39kgAAAAAQAAAPIBAAAwggHuMIIBW6ADAgECAhAdEzTisaf2sEZxrqYZfYtCMAkGBSsOAwIdBQAwFDESMBAGA1UEAxMJbG9jYWxob3N0MB4XDTEwMDgyMDIyMzIwOFoXDTM5MTIzMTIzNTk1OVowFDESMBAGA1UEAxMJbG9jYWxob3N0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDPkfCSLRX8/4F+Z4ys43yZ4MMzjB44cMakPz4Nri+mEB5n2z/0GFatCYzkI2f/nniWqVrBYjHkjsZy2EZioHu4wa99c1XEGJnFNDuNn6ESkfEyhyF4+OqKGnpK9HNrw7OWMuqn2oOh0iFd9fl6FTAm+Y0p3LP+38BuYzpCniqqdwIDAQABo0kwRzBFBgNVHQEEPjA8gBDvi8Rgio9v+mr58TiAvqF5oRYwFDESMBAGA1UEAxMJbG9jYWxob3N0ghAdEzTisaf2sEZxrqYZfYtCMAkGBSsOAwIdBQADgYEANdGlvHKeUptfNu9I0wgA5qjmVB+JDldOAkrfM0R+4IcVQ06y5K7P07uxQAV7+rhnDLgLyFJunUHgzbfjsjFy7vjwtoieXA5j0AYlm4AHR7dHt4HVgkIMYt8XOCqMw5jjFX91xJ89tC7mM9zYR48N9T5QSeMGo+f+JzybeLWxnNs=&quot; /&gt;&lt;/identity&gt;&lt;/Data&gt;" digest="&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-16&quot;?&gt;&lt;Data address=&quot;net.tcp://localhost:8733/OKB-3.3/AdminService&quot; binding=&quot;netTcpBinding&quot; bindingConfiguration=&quot;NetTcpBinding_IAdminService&quot; contract=&quot;OKBAdmin.IAdminService&quot; name=&quot;NetTcpBinding_IAdminService&quot;&gt;&lt;identity&gt;&lt;certificate encodedValue=&quot;AwAAAAEAAAAUAAAAD/AlkYJw/OUhl6D/9w8mjJBh39kgAAAAAQAAAPIBAAAwggHuMIIBW6ADAgECAhAdEzTisaf2sEZxrqYZfYtCMAkGBSsOAwIdBQAwFDESMBAGA1UEAxMJbG9jYWxob3N0MB4XDTEwMDgyMDIyMzIwOFoXDTM5MTIzMTIzNTk1OVowFDESMBAGA1UEAxMJbG9jYWxob3N0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDPkfCSLRX8/4F+Z4ys43yZ4MMzjB44cMakPz4Nri+mEB5n2z/0GFatCYzkI2f/nniWqVrBYjHkjsZy2EZioHu4wa99c1XEGJnFNDuNn6ESkfEyhyF4+OqKGnpK9HNrw7OWMuqn2oOh0iFd9fl6FTAm+Y0p3LP+38BuYzpCniqqdwIDAQABo0kwRzBFBgNVHQEEPjA8gBDvi8Rgio9v+mr58TiAvqF5oRYwFDESMBAGA1UEAxMJbG9jYWxob3N0ghAdEzTisaf2sEZxrqYZfYtCMAkGBSsOAwIdBQADgYEANdGlvHKeUptfNu9I0wgA5qjmVB+JDldOAkrfM0R+4IcVQ06y5K7P07uxQAV7+rhnDLgLyFJunUHgzbfjsjFy7vjwtoieXA5j0AYlm4AHR7dHt4HVgkIMYt8XOCqMw5jjFX91xJ89tC7mM9zYR48N9T5QSeMGo+f+JzybeLWxnNs=&quot; /&gt;&lt;/identity&gt;&lt;/Data&gt;" contractName="OKBAdmin.IAdminService" name="NetTcpBinding_IAdminService" />
+  </endpoints>
+</configurationSnapshot>
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/Service References/OKBAdmin/configuration91.svcinfo
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/Service References/OKBAdmin/configuration91.svcinfo	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/Service References/OKBAdmin/configuration91.svcinfo	(revision 5296)
@@ -0,0 +1,207 @@
+<?xml version="1.0" encoding="utf-8"?>
+<SavedWcfConfigurationInformation xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Version="9.1" CheckSum="digIaTjAqc6HskPS0J94jCaee/o=">
+  <bindingConfigurations>
+    <bindingConfiguration bindingType="netTcpBinding" name="NetTcpBinding_IAdminService">
+      <properties>
+        <property path="/name" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>NetTcpBinding_IAdminService</serializedValue>
+        </property>
+        <property path="/closeTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>00:01:00</serializedValue>
+        </property>
+        <property path="/openTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>00:01:00</serializedValue>
+        </property>
+        <property path="/receiveTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>00:10:00</serializedValue>
+        </property>
+        <property path="/sendTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>00:01:00</serializedValue>
+        </property>
+        <property path="/transactionFlow" isComplexType="false" isExplicitlyDefined="true" clrType="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>False</serializedValue>
+        </property>
+        <property path="/transferMode" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.TransferMode, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>Buffered</serializedValue>
+        </property>
+        <property path="/transactionProtocol" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.TransactionProtocol, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>OleTransactions</serializedValue>
+        </property>
+        <property path="/hostNameComparisonMode" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.HostNameComparisonMode, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>StrongWildcard</serializedValue>
+        </property>
+        <property path="/listenBacklog" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>10</serializedValue>
+        </property>
+        <property path="/maxBufferPoolSize" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int64, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>524288</serializedValue>
+        </property>
+        <property path="/maxBufferSize" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>65536</serializedValue>
+        </property>
+        <property path="/maxConnections" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>10</serializedValue>
+        </property>
+        <property path="/maxReceivedMessageSize" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int64, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>65536</serializedValue>
+        </property>
+        <property path="/portSharingEnabled" isComplexType="false" isExplicitlyDefined="false" clrType="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>False</serializedValue>
+        </property>
+        <property path="/readerQuotas" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.XmlDictionaryReaderQuotasElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.XmlDictionaryReaderQuotasElement</serializedValue>
+        </property>
+        <property path="/readerQuotas/maxDepth" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>32</serializedValue>
+        </property>
+        <property path="/readerQuotas/maxStringContentLength" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>8192</serializedValue>
+        </property>
+        <property path="/readerQuotas/maxArrayLength" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>16384</serializedValue>
+        </property>
+        <property path="/readerQuotas/maxBytesPerRead" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>4096</serializedValue>
+        </property>
+        <property path="/readerQuotas/maxNameTableCharCount" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>16384</serializedValue>
+        </property>
+        <property path="/reliableSession" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.StandardBindingOptionalReliableSessionElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.StandardBindingOptionalReliableSessionElement</serializedValue>
+        </property>
+        <property path="/reliableSession/ordered" isComplexType="false" isExplicitlyDefined="true" clrType="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>True</serializedValue>
+        </property>
+        <property path="/reliableSession/inactivityTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>00:10:00</serializedValue>
+        </property>
+        <property path="/reliableSession/enabled" isComplexType="false" isExplicitlyDefined="true" clrType="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>False</serializedValue>
+        </property>
+        <property path="/security" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.NetTcpSecurityElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.NetTcpSecurityElement</serializedValue>
+        </property>
+        <property path="/security/mode" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.SecurityMode, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>Message</serializedValue>
+        </property>
+        <property path="/security/transport" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.TcpTransportSecurityElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.TcpTransportSecurityElement</serializedValue>
+        </property>
+        <property path="/security/transport/clientCredentialType" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.TcpClientCredentialType, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>Windows</serializedValue>
+        </property>
+        <property path="/security/transport/protectionLevel" isComplexType="false" isExplicitlyDefined="true" clrType="System.Net.Security.ProtectionLevel, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>EncryptAndSign</serializedValue>
+        </property>
+        <property path="/security/transport/extendedProtectionPolicy" isComplexType="true" isExplicitlyDefined="false" clrType="System.Security.Authentication.ExtendedProtection.Configuration.ExtendedProtectionPolicyElement, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.Security.Authentication.ExtendedProtection.Configuration.ExtendedProtectionPolicyElement</serializedValue>
+        </property>
+        <property path="/security/transport/extendedProtectionPolicy/policyEnforcement" isComplexType="false" isExplicitlyDefined="false" clrType="System.Security.Authentication.ExtendedProtection.PolicyEnforcement, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>Never</serializedValue>
+        </property>
+        <property path="/security/transport/extendedProtectionPolicy/protectionScenario" isComplexType="false" isExplicitlyDefined="false" clrType="System.Security.Authentication.ExtendedProtection.ProtectionScenario, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>TransportSelected</serializedValue>
+        </property>
+        <property path="/security/transport/extendedProtectionPolicy/customServiceNames" isComplexType="true" isExplicitlyDefined="false" clrType="System.Security.Authentication.ExtendedProtection.Configuration.ServiceNameElementCollection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>(Collection)</serializedValue>
+        </property>
+        <property path="/security/message" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.MessageSecurityOverTcpElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.MessageSecurityOverTcpElement</serializedValue>
+        </property>
+        <property path="/security/message/clientCredentialType" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.MessageCredentialType, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>UserName</serializedValue>
+        </property>
+        <property path="/security/message/algorithmSuite" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.Security.SecurityAlgorithmSuite, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>Default</serializedValue>
+        </property>
+      </properties>
+    </bindingConfiguration>
+  </bindingConfigurations>
+  <endpoints>
+    <endpoint name="NetTcpBinding_IAdminService" contract="OKBAdmin.IAdminService" bindingType="netTcpBinding" address="net.tcp://localhost:8733/OKB-3.3/AdminService" bindingConfiguration="NetTcpBinding_IAdminService">
+      <properties>
+        <property path="/address" isComplexType="false" isExplicitlyDefined="true" clrType="System.Uri, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>net.tcp://localhost:8733/OKB-3.3/AdminService</serializedValue>
+        </property>
+        <property path="/behaviorConfiguration" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/binding" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>netTcpBinding</serializedValue>
+        </property>
+        <property path="/bindingConfiguration" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>NetTcpBinding_IAdminService</serializedValue>
+        </property>
+        <property path="/contract" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>OKBAdmin.IAdminService</serializedValue>
+        </property>
+        <property path="/headers" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.AddressHeaderCollectionElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.AddressHeaderCollectionElement</serializedValue>
+        </property>
+        <property path="/headers/headers" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.Channels.AddressHeaderCollection, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>&lt;Header /&gt;</serializedValue>
+        </property>
+        <property path="/identity" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.IdentityElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.IdentityElement</serializedValue>
+        </property>
+        <property path="/identity/userPrincipalName" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.UserPrincipalNameElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.UserPrincipalNameElement</serializedValue>
+        </property>
+        <property path="/identity/userPrincipalName/value" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/servicePrincipalName" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.ServicePrincipalNameElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.ServicePrincipalNameElement</serializedValue>
+        </property>
+        <property path="/identity/servicePrincipalName/value" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/dns" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.DnsElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.DnsElement</serializedValue>
+        </property>
+        <property path="/identity/dns/value" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/rsa" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.RsaElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.RsaElement</serializedValue>
+        </property>
+        <property path="/identity/rsa/value" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/certificate" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.CertificateElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.CertificateElement</serializedValue>
+        </property>
+        <property path="/identity/certificate/encodedValue" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>AwAAAAEAAAAUAAAAD/AlkYJw/OUhl6D/9w8mjJBh39kgAAAAAQAAAPIBAAAwggHuMIIBW6ADAgECAhAdEzTisaf2sEZxrqYZfYtCMAkGBSsOAwIdBQAwFDESMBAGA1UEAxMJbG9jYWxob3N0MB4XDTEwMDgyMDIyMzIwOFoXDTM5MTIzMTIzNTk1OVowFDESMBAGA1UEAxMJbG9jYWxob3N0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDPkfCSLRX8/4F+Z4ys43yZ4MMzjB44cMakPz4Nri+mEB5n2z/0GFatCYzkI2f/nniWqVrBYjHkjsZy2EZioHu4wa99c1XEGJnFNDuNn6ESkfEyhyF4+OqKGnpK9HNrw7OWMuqn2oOh0iFd9fl6FTAm+Y0p3LP+38BuYzpCniqqdwIDAQABo0kwRzBFBgNVHQEEPjA8gBDvi8Rgio9v+mr58TiAvqF5oRYwFDESMBAGA1UEAxMJbG9jYWxob3N0ghAdEzTisaf2sEZxrqYZfYtCMAkGBSsOAwIdBQADgYEANdGlvHKeUptfNu9I0wgA5qjmVB+JDldOAkrfM0R+4IcVQ06y5K7P07uxQAV7+rhnDLgLyFJunUHgzbfjsjFy7vjwtoieXA5j0AYlm4AHR7dHt4HVgkIMYt8XOCqMw5jjFX91xJ89tC7mM9zYR48N9T5QSeMGo+f+JzybeLWxnNs=</serializedValue>
+        </property>
+        <property path="/identity/certificateReference" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.CertificateReferenceElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.CertificateReferenceElement</serializedValue>
+        </property>
+        <property path="/identity/certificateReference/storeName" isComplexType="false" isExplicitlyDefined="false" clrType="System.Security.Cryptography.X509Certificates.StoreName, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>My</serializedValue>
+        </property>
+        <property path="/identity/certificateReference/storeLocation" isComplexType="false" isExplicitlyDefined="false" clrType="System.Security.Cryptography.X509Certificates.StoreLocation, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>LocalMachine</serializedValue>
+        </property>
+        <property path="/identity/certificateReference/x509FindType" isComplexType="false" isExplicitlyDefined="false" clrType="System.Security.Cryptography.X509Certificates.X509FindType, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>FindBySubjectDistinguishedName</serializedValue>
+        </property>
+        <property path="/identity/certificateReference/findValue" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/certificateReference/isChainIncluded" isComplexType="false" isExplicitlyDefined="false" clrType="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>False</serializedValue>
+        </property>
+        <property path="/name" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>NetTcpBinding_IAdminService</serializedValue>
+        </property>
+        <property path="/kind" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/endpointConfiguration" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+      </properties>
+    </endpoint>
+  </endpoints>
+</SavedWcfConfigurationInformation>
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/Service References/OKBAdmin/service.wsdl
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/Service References/OKBAdmin/service.wsdl	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/Service References/OKBAdmin/service.wsdl	(revision 5296)
@@ -0,0 +1,433 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<wsdl:definitions xmlns:wsap="http://schemas.xmlsoap.org/ws/2004/08/addressing/policy" xmlns:wsa10="http://www.w3.org/2005/08/addressing" xmlns:tns="http://tempuri.org/" xmlns:msc="http://schemas.microsoft.com/ws/2005/12/wsdl/contract" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="AdminService" targetNamespace="http://tempuri.org/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
+  <wsp:Policy wsu:Id="NetTcpBinding_IAdminService_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SymmetricBinding xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <wsp:Policy>
+            <sp:ProtectionToken>
+              <wsp:Policy>
+                <sp:SecureConversationToken sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient">
+                  <wsp:Policy>
+                    <sp:RequireDerivedKeys />
+                    <sp:BootstrapPolicy>
+                      <wsp:Policy>
+                        <sp:SignedParts>
+                          <sp:Body />
+                          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+                          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+                          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+                          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+                          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+                          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+                          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+                        </sp:SignedParts>
+                        <sp:EncryptedParts>
+                          <sp:Body />
+                        </sp:EncryptedParts>
+                        <sp:SymmetricBinding>
+                          <wsp:Policy>
+                            <sp:ProtectionToken>
+                              <wsp:Policy>
+                                <mssp:SslContextToken sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient" xmlns:mssp="http://schemas.microsoft.com/ws/2005/07/securitypolicy">
+                                  <wsp:Policy>
+                                    <sp:RequireDerivedKeys />
+                                  </wsp:Policy>
+                                </mssp:SslContextToken>
+                              </wsp:Policy>
+                            </sp:ProtectionToken>
+                            <sp:AlgorithmSuite>
+                              <wsp:Policy>
+                                <sp:Basic256 />
+                              </wsp:Policy>
+                            </sp:AlgorithmSuite>
+                            <sp:Layout>
+                              <wsp:Policy>
+                                <sp:Strict />
+                              </wsp:Policy>
+                            </sp:Layout>
+                            <sp:IncludeTimestamp />
+                            <sp:EncryptSignature />
+                            <sp:OnlySignEntireHeadersAndBody />
+                          </wsp:Policy>
+                        </sp:SymmetricBinding>
+                        <sp:SignedSupportingTokens>
+                          <wsp:Policy>
+                            <sp:UsernameToken sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient">
+                              <wsp:Policy>
+                                <sp:WssUsernameToken10 />
+                              </wsp:Policy>
+                            </sp:UsernameToken>
+                          </wsp:Policy>
+                        </sp:SignedSupportingTokens>
+                        <sp:Wss11>
+                          <wsp:Policy />
+                        </sp:Wss11>
+                        <sp:Trust10>
+                          <wsp:Policy>
+                            <sp:MustSupportIssuedTokens />
+                            <sp:RequireClientEntropy />
+                            <sp:RequireServerEntropy />
+                          </wsp:Policy>
+                        </sp:Trust10>
+                      </wsp:Policy>
+                    </sp:BootstrapPolicy>
+                  </wsp:Policy>
+                </sp:SecureConversationToken>
+              </wsp:Policy>
+            </sp:ProtectionToken>
+            <sp:AlgorithmSuite>
+              <wsp:Policy>
+                <sp:Basic256 />
+              </wsp:Policy>
+            </sp:AlgorithmSuite>
+            <sp:Layout>
+              <wsp:Policy>
+                <sp:Strict />
+              </wsp:Policy>
+            </sp:Layout>
+            <sp:IncludeTimestamp />
+            <sp:EncryptSignature />
+            <sp:OnlySignEntireHeadersAndBody />
+          </wsp:Policy>
+        </sp:SymmetricBinding>
+        <sp:Wss11 xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <wsp:Policy />
+        </sp:Wss11>
+        <sp:Trust10 xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <wsp:Policy>
+            <sp:MustSupportIssuedTokens />
+            <sp:RequireClientEntropy />
+            <sp:RequireServerEntropy />
+          </wsp:Policy>
+        </sp:Trust10>
+        <msb:BinaryEncoding xmlns:msb="http://schemas.microsoft.com/ws/06/2004/mspolicy/netbinary1" />
+        <wsaw:UsingAddressing />
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="NetTcpBinding_IAdminService_GetPlatformNames_Input_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="NetTcpBinding_IAdminService_GetPlatformNames_output_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="NetTcpBinding_IAdminService_GetCompleteAlgorithm_Input_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="NetTcpBinding_IAdminService_GetCompleteAlgorithm_output_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="NetTcpBinding_IAdminService_GetCompleteProblem_Input_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="NetTcpBinding_IAdminService_GetCompleteProblem_output_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="NetTcpBinding_IAdminService_UpdateCompleteAlgorithm_Input_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="NetTcpBinding_IAdminService_UpdateCompleteAlgorithm_output_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="NetTcpBinding_IAdminService_UpdateCompleteProblem_Input_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="NetTcpBinding_IAdminService_UpdateCompleteProblem_output_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsdl:types>
+    <xsd:schema targetNamespace="http://tempuri.org/Imports">
+      <xsd:import namespace="http://tempuri.org/" />
+      <xsd:import namespace="http://schemas.microsoft.com/2003/10/Serialization/" />
+      <xsd:import namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataAccess" />
+      <xsd:import namespace="http://schemas.datacontract.org/2004/07/System.Data.Linq" />
+    </xsd:schema>
+  </wsdl:types>
+  <wsdl:message name="IAdminService_GetPlatformNames_InputMessage">
+    <wsdl:part name="parameters" element="tns:GetPlatformNames" />
+  </wsdl:message>
+  <wsdl:message name="IAdminService_GetPlatformNames_OutputMessage">
+    <wsdl:part name="parameters" element="tns:GetPlatformNamesResponse" />
+  </wsdl:message>
+  <wsdl:message name="IAdminService_GetCompleteAlgorithm_InputMessage">
+    <wsdl:part name="parameters" element="tns:GetCompleteAlgorithm" />
+  </wsdl:message>
+  <wsdl:message name="IAdminService_GetCompleteAlgorithm_OutputMessage">
+    <wsdl:part name="parameters" element="tns:GetCompleteAlgorithmResponse" />
+  </wsdl:message>
+  <wsdl:message name="IAdminService_GetCompleteProblem_InputMessage">
+    <wsdl:part name="parameters" element="tns:GetCompleteProblem" />
+  </wsdl:message>
+  <wsdl:message name="IAdminService_GetCompleteProblem_OutputMessage">
+    <wsdl:part name="parameters" element="tns:GetCompleteProblemResponse" />
+  </wsdl:message>
+  <wsdl:message name="IAdminService_UpdateCompleteAlgorithm_InputMessage">
+    <wsdl:part name="parameters" element="tns:UpdateCompleteAlgorithm" />
+  </wsdl:message>
+  <wsdl:message name="IAdminService_UpdateCompleteAlgorithm_OutputMessage">
+    <wsdl:part name="parameters" element="tns:UpdateCompleteAlgorithmResponse" />
+  </wsdl:message>
+  <wsdl:message name="IAdminService_UpdateCompleteProblem_InputMessage">
+    <wsdl:part name="parameters" element="tns:UpdateCompleteProblem" />
+  </wsdl:message>
+  <wsdl:message name="IAdminService_UpdateCompleteProblem_OutputMessage">
+    <wsdl:part name="parameters" element="tns:UpdateCompleteProblemResponse" />
+  </wsdl:message>
+  <wsdl:portType name="IAdminService">
+    <wsdl:operation name="GetPlatformNames">
+      <wsdl:input wsaw:Action="http://tempuri.org/IAdminService/GetPlatformNames" message="tns:IAdminService_GetPlatformNames_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/IAdminService/GetPlatformNamesResponse" message="tns:IAdminService_GetPlatformNames_OutputMessage" />
+    </wsdl:operation>
+    <wsdl:operation name="GetCompleteAlgorithm">
+      <wsdl:input wsaw:Action="http://tempuri.org/IAdminService/GetCompleteAlgorithm" message="tns:IAdminService_GetCompleteAlgorithm_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/IAdminService/GetCompleteAlgorithmResponse" message="tns:IAdminService_GetCompleteAlgorithm_OutputMessage" />
+    </wsdl:operation>
+    <wsdl:operation name="GetCompleteProblem">
+      <wsdl:input wsaw:Action="http://tempuri.org/IAdminService/GetCompleteProblem" message="tns:IAdminService_GetCompleteProblem_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/IAdminService/GetCompleteProblemResponse" message="tns:IAdminService_GetCompleteProblem_OutputMessage" />
+    </wsdl:operation>
+    <wsdl:operation name="UpdateCompleteAlgorithm">
+      <wsdl:input wsaw:Action="http://tempuri.org/IAdminService/UpdateCompleteAlgorithm" message="tns:IAdminService_UpdateCompleteAlgorithm_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/IAdminService/UpdateCompleteAlgorithmResponse" message="tns:IAdminService_UpdateCompleteAlgorithm_OutputMessage" />
+    </wsdl:operation>
+    <wsdl:operation name="UpdateCompleteProblem">
+      <wsdl:input wsaw:Action="http://tempuri.org/IAdminService/UpdateCompleteProblem" message="tns:IAdminService_UpdateCompleteProblem_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/IAdminService/UpdateCompleteProblemResponse" message="tns:IAdminService_UpdateCompleteProblem_OutputMessage" />
+    </wsdl:operation>
+  </wsdl:portType>
+  <wsdl:binding name="NetTcpBinding_IAdminService" type="tns:IAdminService">
+    <wsp:PolicyReference URI="#NetTcpBinding_IAdminService_policy" />
+    <soap12:binding transport="http://schemas.microsoft.com/soap/tcp" />
+    <wsdl:operation name="GetPlatformNames">
+      <soap12:operation soapAction="http://tempuri.org/IAdminService/GetPlatformNames" style="document" />
+      <wsdl:input>
+        <wsp:PolicyReference URI="#NetTcpBinding_IAdminService_GetPlatformNames_Input_policy" />
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <wsp:PolicyReference URI="#NetTcpBinding_IAdminService_GetPlatformNames_output_policy" />
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="GetCompleteAlgorithm">
+      <soap12:operation soapAction="http://tempuri.org/IAdminService/GetCompleteAlgorithm" style="document" />
+      <wsdl:input>
+        <wsp:PolicyReference URI="#NetTcpBinding_IAdminService_GetCompleteAlgorithm_Input_policy" />
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <wsp:PolicyReference URI="#NetTcpBinding_IAdminService_GetCompleteAlgorithm_output_policy" />
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="GetCompleteProblem">
+      <soap12:operation soapAction="http://tempuri.org/IAdminService/GetCompleteProblem" style="document" />
+      <wsdl:input>
+        <wsp:PolicyReference URI="#NetTcpBinding_IAdminService_GetCompleteProblem_Input_policy" />
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <wsp:PolicyReference URI="#NetTcpBinding_IAdminService_GetCompleteProblem_output_policy" />
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="UpdateCompleteAlgorithm">
+      <soap12:operation soapAction="http://tempuri.org/IAdminService/UpdateCompleteAlgorithm" style="document" />
+      <wsdl:input>
+        <wsp:PolicyReference URI="#NetTcpBinding_IAdminService_UpdateCompleteAlgorithm_Input_policy" />
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <wsp:PolicyReference URI="#NetTcpBinding_IAdminService_UpdateCompleteAlgorithm_output_policy" />
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="UpdateCompleteProblem">
+      <soap12:operation soapAction="http://tempuri.org/IAdminService/UpdateCompleteProblem" style="document" />
+      <wsdl:input>
+        <wsp:PolicyReference URI="#NetTcpBinding_IAdminService_UpdateCompleteProblem_Input_policy" />
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <wsp:PolicyReference URI="#NetTcpBinding_IAdminService_UpdateCompleteProblem_output_policy" />
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+  </wsdl:binding>
+  <wsdl:service name="AdminService">
+    <wsdl:port name="NetTcpBinding_IAdminService" binding="tns:NetTcpBinding_IAdminService">
+      <soap12:address location="net.tcp://localhost:8733/OKB-3.3/AdminService" />
+      <wsa10:EndpointReference>
+        <wsa10:Address>net.tcp://localhost:8733/OKB-3.3/AdminService</wsa10:Address>
+        <Identity xmlns="http://schemas.xmlsoap.org/ws/2006/02/addressingidentity">
+          <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
+            <X509Data>
+              <X509Certificate>MIIB7jCCAVugAwIBAgIQHRM04rGn9rBGca6mGX2LQjAJBgUrDgMCHQUAMBQxEjAQBgNVBAMTCWxvY2FsaG9zdDAeFw0xMDA4MjAyMjMyMDhaFw0zOTEyMzEyMzU5NTlaMBQxEjAQBgNVBAMTCWxvY2FsaG9zdDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAz5Hwki0V/P+BfmeMrON8meDDM4weOHDGpD8+Da4vphAeZ9s/9BhWrQmM5CNn/554lqlawWIx5I7GcthGYqB7uMGvfXNVxBiZxTQ7jZ+hEpHxMochePjqihp6SvRza8OzljLqp9qDodIhXfX5ehUwJvmNKdyz/t/AbmM6Qp4qqncCAwEAAaNJMEcwRQYDVR0BBD4wPIAQ74vEYIqPb/pq+fE4gL6heaEWMBQxEjAQBgNVBAMTCWxvY2FsaG9zdIIQHRM04rGn9rBGca6mGX2LQjAJBgUrDgMCHQUAA4GBADXRpbxynlKbXzbvSNMIAOao5lQfiQ5XTgJK3zNEfuCHFUNOsuSuz9O7sUAFe/q4Zwy4C8hSbp1B4M2347Ixcu748LaInlwOY9AGJZuAB0e3R7eB1YJCDGLfFzgqjMOY4xV/dcSfPbQu5jPc2EePDfU+UEnjBqPn/ic8m3i1sZzb</X509Certificate>
+            </X509Data>
+          </KeyInfo>
+        </Identity>
+      </wsa10:EndpointReference>
+    </wsdl:port>
+  </wsdl:service>
+</wsdl:definitions>
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/Service References/OKBAdmin/service.xsd
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/Service References/OKBAdmin/service.xsd	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/Service References/OKBAdmin/service.xsd	(revision 5296)
@@ -0,0 +1,68 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:tns="http://tempuri.org/" elementFormDefault="qualified" targetNamespace="http://tempuri.org/" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:import namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataAccess" />
+  <xs:element name="GetPlatformNames">
+    <xs:complexType>
+      <xs:sequence />
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="GetPlatformNamesResponse">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q1="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataAccess" minOccurs="0" name="GetPlatformNamesResult" nillable="true" type="q1:ArrayOfPlatform" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="GetCompleteAlgorithm">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="id" type="xs:int" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="GetCompleteAlgorithmResponse">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q2="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataAccess" minOccurs="0" name="GetCompleteAlgorithmResult" nillable="true" type="q2:Algorithm" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="GetCompleteProblem">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="id" type="xs:int" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="GetCompleteProblemResponse">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q3="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataAccess" minOccurs="0" name="GetCompleteProblemResult" nillable="true" type="q3:Problem" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="UpdateCompleteAlgorithm">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q4="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataAccess" minOccurs="0" name="algorithm" nillable="true" type="q4:Algorithm" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="UpdateCompleteAlgorithmResponse">
+    <xs:complexType>
+      <xs:sequence />
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="UpdateCompleteProblem">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q5="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataAccess" minOccurs="0" name="problem" nillable="true" type="q5:Problem" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="UpdateCompleteProblemResponse">
+    <xs:complexType>
+      <xs:sequence />
+    </xs:complexType>
+  </xs:element>
+</xs:schema>
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/Service References/OKBAdmin/service1.xsd
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/Service References/OKBAdmin/service1.xsd	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/Service References/OKBAdmin/service1.xsd	(revision 5296)
@@ -0,0 +1,42 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:tns="http://schemas.microsoft.com/2003/10/Serialization/" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://schemas.microsoft.com/2003/10/Serialization/" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:element name="anyType" nillable="true" type="xs:anyType" />
+  <xs:element name="anyURI" nillable="true" type="xs:anyURI" />
+  <xs:element name="base64Binary" nillable="true" type="xs:base64Binary" />
+  <xs:element name="boolean" nillable="true" type="xs:boolean" />
+  <xs:element name="byte" nillable="true" type="xs:byte" />
+  <xs:element name="dateTime" nillable="true" type="xs:dateTime" />
+  <xs:element name="decimal" nillable="true" type="xs:decimal" />
+  <xs:element name="double" nillable="true" type="xs:double" />
+  <xs:element name="float" nillable="true" type="xs:float" />
+  <xs:element name="int" nillable="true" type="xs:int" />
+  <xs:element name="long" nillable="true" type="xs:long" />
+  <xs:element name="QName" nillable="true" type="xs:QName" />
+  <xs:element name="short" nillable="true" type="xs:short" />
+  <xs:element name="string" nillable="true" type="xs:string" />
+  <xs:element name="unsignedByte" nillable="true" type="xs:unsignedByte" />
+  <xs:element name="unsignedInt" nillable="true" type="xs:unsignedInt" />
+  <xs:element name="unsignedLong" nillable="true" type="xs:unsignedLong" />
+  <xs:element name="unsignedShort" nillable="true" type="xs:unsignedShort" />
+  <xs:element name="char" nillable="true" type="tns:char" />
+  <xs:simpleType name="char">
+    <xs:restriction base="xs:int" />
+  </xs:simpleType>
+  <xs:element name="duration" nillable="true" type="tns:duration" />
+  <xs:simpleType name="duration">
+    <xs:restriction base="xs:duration">
+      <xs:pattern value="\-?P(\d*D)?(T(\d*H)?(\d*M)?(\d*(\.\d*)?S)?)?" />
+      <xs:minInclusive value="-P10675199DT2H48M5.4775808S" />
+      <xs:maxInclusive value="P10675199DT2H48M5.4775807S" />
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:element name="guid" nillable="true" type="tns:guid" />
+  <xs:simpleType name="guid">
+    <xs:restriction base="xs:string">
+      <xs:pattern value="[\da-fA-F]{8}-[\da-fA-F]{4}-[\da-fA-F]{4}-[\da-fA-F]{4}-[\da-fA-F]{12}" />
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:attribute name="FactoryType" type="xs:QName" />
+  <xs:attribute name="Id" type="xs:ID" />
+  <xs:attribute name="Ref" type="xs:IDREF" />
+</xs:schema>
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/Service References/OKBData/HeuristicLab.Services.OKB.xsd
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/Service References/OKBData/HeuristicLab.Services.OKB.xsd	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/Service References/OKBData/HeuristicLab.Services.OKB.xsd	(revision 5296)
@@ -0,0 +1,10 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:tns="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB" elementFormDefault="qualified" targetNamespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:simpleType name="EntityType">
+    <xs:restriction base="xs:string">
+      <xs:enumeration value="Algorithm" />
+      <xs:enumeration value="Problem" />
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:element name="EntityType" nillable="true" type="tns:EntityType" />
+</xs:schema>
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/Service References/OKBData/Reference.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/Service References/OKBData/Reference.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/Service References/OKBData/Reference.cs	(revision 5296)
@@ -0,0 +1,100 @@
+﻿//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.1
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HeuristicLab.OKB.Cockpit.Admin.OKBData {
+    using System.Runtime.Serialization;
+    
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="EntityType", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB")]
+    public enum EntityType : int {
+        
+        [System.Runtime.Serialization.EnumMemberAttribute()]
+        Algorithm = 0,
+        
+        [System.Runtime.Serialization.EnumMemberAttribute()]
+        Problem = 1,
+    }
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+    [System.ServiceModel.ServiceContractAttribute(ConfigurationName="OKBData.IDataService", SessionMode=System.ServiceModel.SessionMode.Required)]
+    public interface IDataService {
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IDataService/Request", ReplyAction="http://tempuri.org/IDataService/RequestResponse")]
+        int Request(HeuristicLab.OKB.Cockpit.Admin.OKBData.EntityType type, int id);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IDataService/Submit", ReplyAction="http://tempuri.org/IDataService/SubmitResponse")]
+        void Submit(HeuristicLab.OKB.Cockpit.Admin.OKBData.EntityType type, int id);
+        
+        [System.ServiceModel.OperationContractAttribute(IsInitiating=false, Action="http://tempuri.org/IDataService/GetNextChunk", ReplyAction="http://tempuri.org/IDataService/GetNextChunkResponse")]
+        byte[] GetNextChunk(int size);
+        
+        [System.ServiceModel.OperationContractAttribute(IsInitiating=false, Action="http://tempuri.org/IDataService/SetNextChunk", ReplyAction="http://tempuri.org/IDataService/SetNextChunkResponse")]
+        void SetNextChunk(byte[] data);
+        
+        [System.ServiceModel.OperationContractAttribute(IsTerminating=true, IsInitiating=false, Action="http://tempuri.org/IDataService/TransferDone", ReplyAction="http://tempuri.org/IDataService/TransferDoneResponse")]
+        void TransferDone();
+        
+        [System.ServiceModel.OperationContractAttribute(IsTerminating=true, IsInitiating=false, Action="http://tempuri.org/IDataService/AbortTransfer", ReplyAction="http://tempuri.org/IDataService/AbortTransferResponse")]
+        void AbortTransfer();
+    }
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+    public interface IDataServiceChannel : HeuristicLab.OKB.Cockpit.Admin.OKBData.IDataService, System.ServiceModel.IClientChannel {
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+    public partial class DataServiceClient : System.ServiceModel.ClientBase<HeuristicLab.OKB.Cockpit.Admin.OKBData.IDataService>, HeuristicLab.OKB.Cockpit.Admin.OKBData.IDataService {
+        
+        public DataServiceClient() {
+        }
+        
+        public DataServiceClient(string endpointConfigurationName) : 
+                base(endpointConfigurationName) {
+        }
+        
+        public DataServiceClient(string endpointConfigurationName, string remoteAddress) : 
+                base(endpointConfigurationName, remoteAddress) {
+        }
+        
+        public DataServiceClient(string endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) : 
+                base(endpointConfigurationName, remoteAddress) {
+        }
+        
+        public DataServiceClient(System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress) : 
+                base(binding, remoteAddress) {
+        }
+        
+        public int Request(HeuristicLab.OKB.Cockpit.Admin.OKBData.EntityType type, int id) {
+            return base.Channel.Request(type, id);
+        }
+        
+        public void Submit(HeuristicLab.OKB.Cockpit.Admin.OKBData.EntityType type, int id) {
+            base.Channel.Submit(type, id);
+        }
+        
+        public byte[] GetNextChunk(int size) {
+            return base.Channel.GetNextChunk(size);
+        }
+        
+        public void SetNextChunk(byte[] data) {
+            base.Channel.SetNextChunk(data);
+        }
+        
+        public void TransferDone() {
+            base.Channel.TransferDone();
+        }
+        
+        public void AbortTransfer() {
+            base.Channel.AbortTransfer();
+        }
+    }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/Service References/OKBData/Reference.svcmap
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/Service References/OKBData/Reference.svcmap	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/Service References/OKBData/Reference.svcmap	(revision 5296)
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+<ReferenceGroup xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" ID="9b4e5068-a4c2-41e9-b83d-3e7c0fec3293" xmlns="urn:schemas-microsoft-com:xml-wcfservicemap">
+  <ClientOptions>
+    <GenerateAsynchronousMethods>false</GenerateAsynchronousMethods>
+    <EnableDataBinding>true</EnableDataBinding>
+    <ExcludedTypes />
+    <ImportXmlTypes>false</ImportXmlTypes>
+    <GenerateInternalTypes>false</GenerateInternalTypes>
+    <GenerateMessageContracts>false</GenerateMessageContracts>
+    <NamespaceMappings />
+    <CollectionMappings />
+    <GenerateSerializableTypes>true</GenerateSerializableTypes>
+    <Serializer>Auto</Serializer>
+    <UseSerializerForFaults>true</UseSerializerForFaults>
+    <ReferenceAllAssemblies>true</ReferenceAllAssemblies>
+    <ReferencedAssemblies />
+    <ReferencedDataContractTypes />
+    <ServiceContractMappings />
+  </ClientOptions>
+  <MetadataSources>
+    <MetadataSource Address="http://localhost:8732/Design_Time_Addresses/OKB-3.3/DataService/mex" Protocol="mex" SourceId="1" />
+  </MetadataSources>
+  <Metadata>
+    <MetadataFile FileName="service.wsdl" MetadataType="Wsdl" ID="0c4196bd-10ea-4361-a9b1-05b691333aa2" SourceId="1" SourceUrl="http://localhost:8732/Design_Time_Addresses/OKB-3.3/DataService/mex" />
+    <MetadataFile FileName="service.xsd" MetadataType="Schema" ID="79f2df79-290b-46cb-8b5f-7be2fa4c3dec" SourceId="1" SourceUrl="http://localhost:8732/Design_Time_Addresses/OKB-3.3/DataService/mex" />
+    <MetadataFile FileName="service1.xsd" MetadataType="Schema" ID="84ca98bd-4a54-43ab-aba6-50172447f108" SourceId="1" SourceUrl="http://localhost:8732/Design_Time_Addresses/OKB-3.3/DataService/mex" />
+    <MetadataFile FileName="HeuristicLab.Services.OKB.xsd" MetadataType="Schema" ID="979236f2-5c8d-4b0d-ac55-561415f87bfa" SourceId="1" SourceUrl="http://localhost:8732/Design_Time_Addresses/OKB-3.3/DataService/mex" />
+  </Metadata>
+  <Extensions>
+    <ExtensionFile FileName="configuration91.svcinfo" Name="configuration91.svcinfo" />
+    <ExtensionFile FileName="configuration.svcinfo" Name="configuration.svcinfo" />
+  </Extensions>
+</ReferenceGroup>
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/Service References/OKBData/configuration.svcinfo
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/Service References/OKBData/configuration.svcinfo	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/Service References/OKBData/configuration.svcinfo	(revision 5296)
@@ -0,0 +1,10 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<configurationSnapshot xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="urn:schemas-microsoft-com:xml-wcfconfigurationsnapshot">
+  <behaviors />
+  <bindings>
+    <binding digest="System.ServiceModel.Configuration.NetTcpBindingElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089:&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-16&quot;?&gt;&lt;Data hostNameComparisonMode=&quot;StrongWildcard&quot; listenBacklog=&quot;10&quot; maxBufferSize=&quot;65536&quot; maxConnections=&quot;10&quot; name=&quot;NetTcpBinding_IDataService&quot; transactionFlow=&quot;false&quot; transactionProtocol=&quot;OleTransactions&quot; transferMode=&quot;Buffered&quot;&gt;&lt;readerQuotas maxArrayLength=&quot;16384&quot; maxBytesPerRead=&quot;4096&quot; maxDepth=&quot;32&quot; maxNameTableCharCount=&quot;16384&quot; maxStringContentLength=&quot;8192&quot; /&gt;&lt;reliableSession enabled=&quot;false&quot; inactivityTimeout=&quot;00:10:00&quot; ordered=&quot;true&quot; /&gt;&lt;security mode=&quot;Message&quot;&gt;&lt;message algorithmSuite=&quot;Default&quot; clientCredentialType=&quot;UserName&quot; /&gt;&lt;transport clientCredentialType=&quot;Windows&quot; protectionLevel=&quot;EncryptAndSign&quot; /&gt;&lt;/security&gt;&lt;/Data&gt;" bindingType="netTcpBinding" name="NetTcpBinding_IDataService" />
+  </bindings>
+  <endpoints>
+    <endpoint normalizedDigest="&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-16&quot;?&gt;&lt;Data address=&quot;net.tcp://localhost:8733/OKB-3.3/DataService&quot; binding=&quot;netTcpBinding&quot; bindingConfiguration=&quot;NetTcpBinding_IDataService&quot; contract=&quot;OKBData.IDataService&quot; name=&quot;NetTcpBinding_IDataService&quot;&gt;&lt;identity&gt;&lt;certificate encodedValue=&quot;AwAAAAEAAAAUAAAAD/AlkYJw/OUhl6D/9w8mjJBh39kgAAAAAQAAAPIBAAAwggHuMIIBW6ADAgECAhAdEzTisaf2sEZxrqYZfYtCMAkGBSsOAwIdBQAwFDESMBAGA1UEAxMJbG9jYWxob3N0MB4XDTEwMDgyMDIyMzIwOFoXDTM5MTIzMTIzNTk1OVowFDESMBAGA1UEAxMJbG9jYWxob3N0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDPkfCSLRX8/4F+Z4ys43yZ4MMzjB44cMakPz4Nri+mEB5n2z/0GFatCYzkI2f/nniWqVrBYjHkjsZy2EZioHu4wa99c1XEGJnFNDuNn6ESkfEyhyF4+OqKGnpK9HNrw7OWMuqn2oOh0iFd9fl6FTAm+Y0p3LP+38BuYzpCniqqdwIDAQABo0kwRzBFBgNVHQEEPjA8gBDvi8Rgio9v+mr58TiAvqF5oRYwFDESMBAGA1UEAxMJbG9jYWxob3N0ghAdEzTisaf2sEZxrqYZfYtCMAkGBSsOAwIdBQADgYEANdGlvHKeUptfNu9I0wgA5qjmVB+JDldOAkrfM0R+4IcVQ06y5K7P07uxQAV7+rhnDLgLyFJunUHgzbfjsjFy7vjwtoieXA5j0AYlm4AHR7dHt4HVgkIMYt8XOCqMw5jjFX91xJ89tC7mM9zYR48N9T5QSeMGo+f+JzybeLWxnNs=&quot; /&gt;&lt;/identity&gt;&lt;/Data&gt;" digest="&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-16&quot;?&gt;&lt;Data address=&quot;net.tcp://localhost:8733/OKB-3.3/DataService&quot; binding=&quot;netTcpBinding&quot; bindingConfiguration=&quot;NetTcpBinding_IDataService&quot; contract=&quot;OKBData.IDataService&quot; name=&quot;NetTcpBinding_IDataService&quot;&gt;&lt;identity&gt;&lt;certificate encodedValue=&quot;AwAAAAEAAAAUAAAAD/AlkYJw/OUhl6D/9w8mjJBh39kgAAAAAQAAAPIBAAAwggHuMIIBW6ADAgECAhAdEzTisaf2sEZxrqYZfYtCMAkGBSsOAwIdBQAwFDESMBAGA1UEAxMJbG9jYWxob3N0MB4XDTEwMDgyMDIyMzIwOFoXDTM5MTIzMTIzNTk1OVowFDESMBAGA1UEAxMJbG9jYWxob3N0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDPkfCSLRX8/4F+Z4ys43yZ4MMzjB44cMakPz4Nri+mEB5n2z/0GFatCYzkI2f/nniWqVrBYjHkjsZy2EZioHu4wa99c1XEGJnFNDuNn6ESkfEyhyF4+OqKGnpK9HNrw7OWMuqn2oOh0iFd9fl6FTAm+Y0p3LP+38BuYzpCniqqdwIDAQABo0kwRzBFBgNVHQEEPjA8gBDvi8Rgio9v+mr58TiAvqF5oRYwFDESMBAGA1UEAxMJbG9jYWxob3N0ghAdEzTisaf2sEZxrqYZfYtCMAkGBSsOAwIdBQADgYEANdGlvHKeUptfNu9I0wgA5qjmVB+JDldOAkrfM0R+4IcVQ06y5K7P07uxQAV7+rhnDLgLyFJunUHgzbfjsjFy7vjwtoieXA5j0AYlm4AHR7dHt4HVgkIMYt8XOCqMw5jjFX91xJ89tC7mM9zYR48N9T5QSeMGo+f+JzybeLWxnNs=&quot; /&gt;&lt;/identity&gt;&lt;/Data&gt;" contractName="OKBData.IDataService" name="NetTcpBinding_IDataService" />
+  </endpoints>
+</configurationSnapshot>
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/Service References/OKBData/configuration91.svcinfo
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/Service References/OKBData/configuration91.svcinfo	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/Service References/OKBData/configuration91.svcinfo	(revision 5296)
@@ -0,0 +1,207 @@
+<?xml version="1.0" encoding="utf-8"?>
+<SavedWcfConfigurationInformation xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Version="9.1" CheckSum="LMVHWymJpVGiwhcR+yMeNN4rwT8=">
+  <bindingConfigurations>
+    <bindingConfiguration bindingType="netTcpBinding" name="NetTcpBinding_IDataService">
+      <properties>
+        <property path="/name" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>NetTcpBinding_IDataService</serializedValue>
+        </property>
+        <property path="/closeTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>00:01:00</serializedValue>
+        </property>
+        <property path="/openTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>00:01:00</serializedValue>
+        </property>
+        <property path="/receiveTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>00:10:00</serializedValue>
+        </property>
+        <property path="/sendTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>00:01:00</serializedValue>
+        </property>
+        <property path="/transactionFlow" isComplexType="false" isExplicitlyDefined="true" clrType="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>False</serializedValue>
+        </property>
+        <property path="/transferMode" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.TransferMode, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>Buffered</serializedValue>
+        </property>
+        <property path="/transactionProtocol" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.TransactionProtocol, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>OleTransactions</serializedValue>
+        </property>
+        <property path="/hostNameComparisonMode" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.HostNameComparisonMode, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>StrongWildcard</serializedValue>
+        </property>
+        <property path="/listenBacklog" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>10</serializedValue>
+        </property>
+        <property path="/maxBufferPoolSize" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int64, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>524288</serializedValue>
+        </property>
+        <property path="/maxBufferSize" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>65536</serializedValue>
+        </property>
+        <property path="/maxConnections" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>10</serializedValue>
+        </property>
+        <property path="/maxReceivedMessageSize" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int64, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>65536</serializedValue>
+        </property>
+        <property path="/portSharingEnabled" isComplexType="false" isExplicitlyDefined="false" clrType="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>False</serializedValue>
+        </property>
+        <property path="/readerQuotas" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.XmlDictionaryReaderQuotasElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.XmlDictionaryReaderQuotasElement</serializedValue>
+        </property>
+        <property path="/readerQuotas/maxDepth" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>32</serializedValue>
+        </property>
+        <property path="/readerQuotas/maxStringContentLength" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>8192</serializedValue>
+        </property>
+        <property path="/readerQuotas/maxArrayLength" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>16384</serializedValue>
+        </property>
+        <property path="/readerQuotas/maxBytesPerRead" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>4096</serializedValue>
+        </property>
+        <property path="/readerQuotas/maxNameTableCharCount" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>16384</serializedValue>
+        </property>
+        <property path="/reliableSession" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.StandardBindingOptionalReliableSessionElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.StandardBindingOptionalReliableSessionElement</serializedValue>
+        </property>
+        <property path="/reliableSession/ordered" isComplexType="false" isExplicitlyDefined="true" clrType="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>True</serializedValue>
+        </property>
+        <property path="/reliableSession/inactivityTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>00:10:00</serializedValue>
+        </property>
+        <property path="/reliableSession/enabled" isComplexType="false" isExplicitlyDefined="true" clrType="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>False</serializedValue>
+        </property>
+        <property path="/security" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.NetTcpSecurityElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.NetTcpSecurityElement</serializedValue>
+        </property>
+        <property path="/security/mode" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.SecurityMode, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>Message</serializedValue>
+        </property>
+        <property path="/security/transport" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.TcpTransportSecurityElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.TcpTransportSecurityElement</serializedValue>
+        </property>
+        <property path="/security/transport/clientCredentialType" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.TcpClientCredentialType, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>Windows</serializedValue>
+        </property>
+        <property path="/security/transport/protectionLevel" isComplexType="false" isExplicitlyDefined="true" clrType="System.Net.Security.ProtectionLevel, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>EncryptAndSign</serializedValue>
+        </property>
+        <property path="/security/transport/extendedProtectionPolicy" isComplexType="true" isExplicitlyDefined="false" clrType="System.Security.Authentication.ExtendedProtection.Configuration.ExtendedProtectionPolicyElement, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.Security.Authentication.ExtendedProtection.Configuration.ExtendedProtectionPolicyElement</serializedValue>
+        </property>
+        <property path="/security/transport/extendedProtectionPolicy/policyEnforcement" isComplexType="false" isExplicitlyDefined="false" clrType="System.Security.Authentication.ExtendedProtection.PolicyEnforcement, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>Never</serializedValue>
+        </property>
+        <property path="/security/transport/extendedProtectionPolicy/protectionScenario" isComplexType="false" isExplicitlyDefined="false" clrType="System.Security.Authentication.ExtendedProtection.ProtectionScenario, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>TransportSelected</serializedValue>
+        </property>
+        <property path="/security/transport/extendedProtectionPolicy/customServiceNames" isComplexType="true" isExplicitlyDefined="false" clrType="System.Security.Authentication.ExtendedProtection.Configuration.ServiceNameElementCollection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>(Collection)</serializedValue>
+        </property>
+        <property path="/security/message" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.MessageSecurityOverTcpElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.MessageSecurityOverTcpElement</serializedValue>
+        </property>
+        <property path="/security/message/clientCredentialType" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.MessageCredentialType, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>UserName</serializedValue>
+        </property>
+        <property path="/security/message/algorithmSuite" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.Security.SecurityAlgorithmSuite, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>Default</serializedValue>
+        </property>
+      </properties>
+    </bindingConfiguration>
+  </bindingConfigurations>
+  <endpoints>
+    <endpoint name="NetTcpBinding_IDataService" contract="OKBData.IDataService" bindingType="netTcpBinding" address="net.tcp://localhost:8733/OKB-3.3/DataService" bindingConfiguration="NetTcpBinding_IDataService">
+      <properties>
+        <property path="/address" isComplexType="false" isExplicitlyDefined="true" clrType="System.Uri, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>net.tcp://localhost:8733/OKB-3.3/DataService</serializedValue>
+        </property>
+        <property path="/behaviorConfiguration" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/binding" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>netTcpBinding</serializedValue>
+        </property>
+        <property path="/bindingConfiguration" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>NetTcpBinding_IDataService</serializedValue>
+        </property>
+        <property path="/contract" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>OKBData.IDataService</serializedValue>
+        </property>
+        <property path="/headers" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.AddressHeaderCollectionElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.AddressHeaderCollectionElement</serializedValue>
+        </property>
+        <property path="/headers/headers" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.Channels.AddressHeaderCollection, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>&lt;Header /&gt;</serializedValue>
+        </property>
+        <property path="/identity" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.IdentityElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.IdentityElement</serializedValue>
+        </property>
+        <property path="/identity/userPrincipalName" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.UserPrincipalNameElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.UserPrincipalNameElement</serializedValue>
+        </property>
+        <property path="/identity/userPrincipalName/value" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/servicePrincipalName" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.ServicePrincipalNameElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.ServicePrincipalNameElement</serializedValue>
+        </property>
+        <property path="/identity/servicePrincipalName/value" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/dns" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.DnsElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.DnsElement</serializedValue>
+        </property>
+        <property path="/identity/dns/value" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/rsa" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.RsaElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.RsaElement</serializedValue>
+        </property>
+        <property path="/identity/rsa/value" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/certificate" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.CertificateElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.CertificateElement</serializedValue>
+        </property>
+        <property path="/identity/certificate/encodedValue" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>AwAAAAEAAAAUAAAAD/AlkYJw/OUhl6D/9w8mjJBh39kgAAAAAQAAAPIBAAAwggHuMIIBW6ADAgECAhAdEzTisaf2sEZxrqYZfYtCMAkGBSsOAwIdBQAwFDESMBAGA1UEAxMJbG9jYWxob3N0MB4XDTEwMDgyMDIyMzIwOFoXDTM5MTIzMTIzNTk1OVowFDESMBAGA1UEAxMJbG9jYWxob3N0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDPkfCSLRX8/4F+Z4ys43yZ4MMzjB44cMakPz4Nri+mEB5n2z/0GFatCYzkI2f/nniWqVrBYjHkjsZy2EZioHu4wa99c1XEGJnFNDuNn6ESkfEyhyF4+OqKGnpK9HNrw7OWMuqn2oOh0iFd9fl6FTAm+Y0p3LP+38BuYzpCniqqdwIDAQABo0kwRzBFBgNVHQEEPjA8gBDvi8Rgio9v+mr58TiAvqF5oRYwFDESMBAGA1UEAxMJbG9jYWxob3N0ghAdEzTisaf2sEZxrqYZfYtCMAkGBSsOAwIdBQADgYEANdGlvHKeUptfNu9I0wgA5qjmVB+JDldOAkrfM0R+4IcVQ06y5K7P07uxQAV7+rhnDLgLyFJunUHgzbfjsjFy7vjwtoieXA5j0AYlm4AHR7dHt4HVgkIMYt8XOCqMw5jjFX91xJ89tC7mM9zYR48N9T5QSeMGo+f+JzybeLWxnNs=</serializedValue>
+        </property>
+        <property path="/identity/certificateReference" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.CertificateReferenceElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.CertificateReferenceElement</serializedValue>
+        </property>
+        <property path="/identity/certificateReference/storeName" isComplexType="false" isExplicitlyDefined="false" clrType="System.Security.Cryptography.X509Certificates.StoreName, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>My</serializedValue>
+        </property>
+        <property path="/identity/certificateReference/storeLocation" isComplexType="false" isExplicitlyDefined="false" clrType="System.Security.Cryptography.X509Certificates.StoreLocation, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>LocalMachine</serializedValue>
+        </property>
+        <property path="/identity/certificateReference/x509FindType" isComplexType="false" isExplicitlyDefined="false" clrType="System.Security.Cryptography.X509Certificates.X509FindType, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>FindBySubjectDistinguishedName</serializedValue>
+        </property>
+        <property path="/identity/certificateReference/findValue" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/certificateReference/isChainIncluded" isComplexType="false" isExplicitlyDefined="false" clrType="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>False</serializedValue>
+        </property>
+        <property path="/name" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>NetTcpBinding_IDataService</serializedValue>
+        </property>
+        <property path="/kind" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/endpointConfiguration" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+      </properties>
+    </endpoint>
+  </endpoints>
+</SavedWcfConfigurationInformation>
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/Service References/OKBData/service.wsdl
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/Service References/OKBData/service.wsdl	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/Service References/OKBData/service.wsdl	(revision 5296)
@@ -0,0 +1,491 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<wsdl:definitions xmlns:wsap="http://schemas.xmlsoap.org/ws/2004/08/addressing/policy" xmlns:wsa10="http://www.w3.org/2005/08/addressing" xmlns:tns="http://tempuri.org/" xmlns:msc="http://schemas.microsoft.com/ws/2005/12/wsdl/contract" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="DataService" targetNamespace="http://tempuri.org/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
+  <wsp:Policy wsu:Id="NetTcpBinding_IDataService_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SymmetricBinding xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <wsp:Policy>
+            <sp:ProtectionToken>
+              <wsp:Policy>
+                <sp:SecureConversationToken sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient">
+                  <wsp:Policy>
+                    <sp:RequireDerivedKeys />
+                    <sp:BootstrapPolicy>
+                      <wsp:Policy>
+                        <sp:SignedParts>
+                          <sp:Body />
+                          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+                          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+                          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+                          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+                          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+                          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+                          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+                        </sp:SignedParts>
+                        <sp:EncryptedParts>
+                          <sp:Body />
+                        </sp:EncryptedParts>
+                        <sp:SymmetricBinding>
+                          <wsp:Policy>
+                            <sp:ProtectionToken>
+                              <wsp:Policy>
+                                <mssp:SslContextToken sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient" xmlns:mssp="http://schemas.microsoft.com/ws/2005/07/securitypolicy">
+                                  <wsp:Policy>
+                                    <sp:RequireDerivedKeys />
+                                  </wsp:Policy>
+                                </mssp:SslContextToken>
+                              </wsp:Policy>
+                            </sp:ProtectionToken>
+                            <sp:AlgorithmSuite>
+                              <wsp:Policy>
+                                <sp:Basic256 />
+                              </wsp:Policy>
+                            </sp:AlgorithmSuite>
+                            <sp:Layout>
+                              <wsp:Policy>
+                                <sp:Strict />
+                              </wsp:Policy>
+                            </sp:Layout>
+                            <sp:IncludeTimestamp />
+                            <sp:EncryptSignature />
+                            <sp:OnlySignEntireHeadersAndBody />
+                          </wsp:Policy>
+                        </sp:SymmetricBinding>
+                        <sp:SignedSupportingTokens>
+                          <wsp:Policy>
+                            <sp:UsernameToken sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient">
+                              <wsp:Policy>
+                                <sp:WssUsernameToken10 />
+                              </wsp:Policy>
+                            </sp:UsernameToken>
+                          </wsp:Policy>
+                        </sp:SignedSupportingTokens>
+                        <sp:Wss11>
+                          <wsp:Policy />
+                        </sp:Wss11>
+                        <sp:Trust10>
+                          <wsp:Policy>
+                            <sp:MustSupportIssuedTokens />
+                            <sp:RequireClientEntropy />
+                            <sp:RequireServerEntropy />
+                          </wsp:Policy>
+                        </sp:Trust10>
+                      </wsp:Policy>
+                    </sp:BootstrapPolicy>
+                  </wsp:Policy>
+                </sp:SecureConversationToken>
+              </wsp:Policy>
+            </sp:ProtectionToken>
+            <sp:AlgorithmSuite>
+              <wsp:Policy>
+                <sp:Basic256 />
+              </wsp:Policy>
+            </sp:AlgorithmSuite>
+            <sp:Layout>
+              <wsp:Policy>
+                <sp:Strict />
+              </wsp:Policy>
+            </sp:Layout>
+            <sp:IncludeTimestamp />
+            <sp:EncryptSignature />
+            <sp:OnlySignEntireHeadersAndBody />
+          </wsp:Policy>
+        </sp:SymmetricBinding>
+        <sp:Wss11 xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <wsp:Policy />
+        </sp:Wss11>
+        <sp:Trust10 xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <wsp:Policy>
+            <sp:MustSupportIssuedTokens />
+            <sp:RequireClientEntropy />
+            <sp:RequireServerEntropy />
+          </wsp:Policy>
+        </sp:Trust10>
+        <msb:BinaryEncoding xmlns:msb="http://schemas.microsoft.com/ws/06/2004/mspolicy/netbinary1" />
+        <wsaw:UsingAddressing />
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="NetTcpBinding_IDataService_Request_Input_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="NetTcpBinding_IDataService_Request_output_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="NetTcpBinding_IDataService_Submit_Input_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="NetTcpBinding_IDataService_Submit_output_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="NetTcpBinding_IDataService_GetNextChunk_Input_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="NetTcpBinding_IDataService_GetNextChunk_output_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="NetTcpBinding_IDataService_SetNextChunk_Input_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="NetTcpBinding_IDataService_SetNextChunk_output_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="NetTcpBinding_IDataService_TransferDone_Input_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="NetTcpBinding_IDataService_TransferDone_output_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="NetTcpBinding_IDataService_AbortTransfer_Input_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="NetTcpBinding_IDataService_AbortTransfer_output_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsdl:types>
+    <xsd:schema targetNamespace="http://tempuri.org/Imports">
+      <xsd:import namespace="http://tempuri.org/" />
+      <xsd:import namespace="http://schemas.microsoft.com/2003/10/Serialization/" />
+      <xsd:import namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB" />
+    </xsd:schema>
+  </wsdl:types>
+  <wsdl:message name="IDataService_Request_InputMessage">
+    <wsdl:part name="parameters" element="tns:Request" />
+  </wsdl:message>
+  <wsdl:message name="IDataService_Request_OutputMessage">
+    <wsdl:part name="parameters" element="tns:RequestResponse" />
+  </wsdl:message>
+  <wsdl:message name="IDataService_Submit_InputMessage">
+    <wsdl:part name="parameters" element="tns:Submit" />
+  </wsdl:message>
+  <wsdl:message name="IDataService_Submit_OutputMessage">
+    <wsdl:part name="parameters" element="tns:SubmitResponse" />
+  </wsdl:message>
+  <wsdl:message name="IDataService_GetNextChunk_InputMessage">
+    <wsdl:part name="parameters" element="tns:GetNextChunk" />
+  </wsdl:message>
+  <wsdl:message name="IDataService_GetNextChunk_OutputMessage">
+    <wsdl:part name="parameters" element="tns:GetNextChunkResponse" />
+  </wsdl:message>
+  <wsdl:message name="IDataService_SetNextChunk_InputMessage">
+    <wsdl:part name="parameters" element="tns:SetNextChunk" />
+  </wsdl:message>
+  <wsdl:message name="IDataService_SetNextChunk_OutputMessage">
+    <wsdl:part name="parameters" element="tns:SetNextChunkResponse" />
+  </wsdl:message>
+  <wsdl:message name="IDataService_TransferDone_InputMessage">
+    <wsdl:part name="parameters" element="tns:TransferDone" />
+  </wsdl:message>
+  <wsdl:message name="IDataService_TransferDone_OutputMessage">
+    <wsdl:part name="parameters" element="tns:TransferDoneResponse" />
+  </wsdl:message>
+  <wsdl:message name="IDataService_AbortTransfer_InputMessage">
+    <wsdl:part name="parameters" element="tns:AbortTransfer" />
+  </wsdl:message>
+  <wsdl:message name="IDataService_AbortTransfer_OutputMessage">
+    <wsdl:part name="parameters" element="tns:AbortTransferResponse" />
+  </wsdl:message>
+  <wsdl:portType msc:usingSession="true" name="IDataService">
+    <wsdl:operation msc:isInitiating="true" msc:isTerminating="false" name="Request">
+      <wsdl:input wsaw:Action="http://tempuri.org/IDataService/Request" message="tns:IDataService_Request_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/IDataService/RequestResponse" message="tns:IDataService_Request_OutputMessage" />
+    </wsdl:operation>
+    <wsdl:operation msc:isInitiating="true" msc:isTerminating="false" name="Submit">
+      <wsdl:input wsaw:Action="http://tempuri.org/IDataService/Submit" message="tns:IDataService_Submit_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/IDataService/SubmitResponse" message="tns:IDataService_Submit_OutputMessage" />
+    </wsdl:operation>
+    <wsdl:operation msc:isInitiating="false" msc:isTerminating="false" name="GetNextChunk">
+      <wsdl:input wsaw:Action="http://tempuri.org/IDataService/GetNextChunk" message="tns:IDataService_GetNextChunk_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/IDataService/GetNextChunkResponse" message="tns:IDataService_GetNextChunk_OutputMessage" />
+    </wsdl:operation>
+    <wsdl:operation msc:isInitiating="false" msc:isTerminating="false" name="SetNextChunk">
+      <wsdl:input wsaw:Action="http://tempuri.org/IDataService/SetNextChunk" message="tns:IDataService_SetNextChunk_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/IDataService/SetNextChunkResponse" message="tns:IDataService_SetNextChunk_OutputMessage" />
+    </wsdl:operation>
+    <wsdl:operation msc:isInitiating="false" msc:isTerminating="true" name="TransferDone">
+      <wsdl:input wsaw:Action="http://tempuri.org/IDataService/TransferDone" message="tns:IDataService_TransferDone_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/IDataService/TransferDoneResponse" message="tns:IDataService_TransferDone_OutputMessage" />
+    </wsdl:operation>
+    <wsdl:operation msc:isInitiating="false" msc:isTerminating="true" name="AbortTransfer">
+      <wsdl:input wsaw:Action="http://tempuri.org/IDataService/AbortTransfer" message="tns:IDataService_AbortTransfer_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/IDataService/AbortTransferResponse" message="tns:IDataService_AbortTransfer_OutputMessage" />
+    </wsdl:operation>
+  </wsdl:portType>
+  <wsdl:binding name="NetTcpBinding_IDataService" type="tns:IDataService">
+    <wsp:PolicyReference URI="#NetTcpBinding_IDataService_policy" />
+    <soap12:binding transport="http://schemas.microsoft.com/soap/tcp" />
+    <wsdl:operation name="Request">
+      <soap12:operation soapAction="http://tempuri.org/IDataService/Request" style="document" />
+      <wsdl:input>
+        <wsp:PolicyReference URI="#NetTcpBinding_IDataService_Request_Input_policy" />
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <wsp:PolicyReference URI="#NetTcpBinding_IDataService_Request_output_policy" />
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="Submit">
+      <soap12:operation soapAction="http://tempuri.org/IDataService/Submit" style="document" />
+      <wsdl:input>
+        <wsp:PolicyReference URI="#NetTcpBinding_IDataService_Submit_Input_policy" />
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <wsp:PolicyReference URI="#NetTcpBinding_IDataService_Submit_output_policy" />
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="GetNextChunk">
+      <soap12:operation soapAction="http://tempuri.org/IDataService/GetNextChunk" style="document" />
+      <wsdl:input>
+        <wsp:PolicyReference URI="#NetTcpBinding_IDataService_GetNextChunk_Input_policy" />
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <wsp:PolicyReference URI="#NetTcpBinding_IDataService_GetNextChunk_output_policy" />
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="SetNextChunk">
+      <soap12:operation soapAction="http://tempuri.org/IDataService/SetNextChunk" style="document" />
+      <wsdl:input>
+        <wsp:PolicyReference URI="#NetTcpBinding_IDataService_SetNextChunk_Input_policy" />
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <wsp:PolicyReference URI="#NetTcpBinding_IDataService_SetNextChunk_output_policy" />
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="TransferDone">
+      <soap12:operation soapAction="http://tempuri.org/IDataService/TransferDone" style="document" />
+      <wsdl:input>
+        <wsp:PolicyReference URI="#NetTcpBinding_IDataService_TransferDone_Input_policy" />
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <wsp:PolicyReference URI="#NetTcpBinding_IDataService_TransferDone_output_policy" />
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="AbortTransfer">
+      <soap12:operation soapAction="http://tempuri.org/IDataService/AbortTransfer" style="document" />
+      <wsdl:input>
+        <wsp:PolicyReference URI="#NetTcpBinding_IDataService_AbortTransfer_Input_policy" />
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <wsp:PolicyReference URI="#NetTcpBinding_IDataService_AbortTransfer_output_policy" />
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+  </wsdl:binding>
+  <wsdl:service name="DataService">
+    <wsdl:port name="NetTcpBinding_IDataService" binding="tns:NetTcpBinding_IDataService">
+      <soap12:address location="net.tcp://localhost:8733/OKB-3.3/DataService" />
+      <wsa10:EndpointReference>
+        <wsa10:Address>net.tcp://localhost:8733/OKB-3.3/DataService</wsa10:Address>
+        <Identity xmlns="http://schemas.xmlsoap.org/ws/2006/02/addressingidentity">
+          <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
+            <X509Data>
+              <X509Certificate>MIIB7jCCAVugAwIBAgIQHRM04rGn9rBGca6mGX2LQjAJBgUrDgMCHQUAMBQxEjAQBgNVBAMTCWxvY2FsaG9zdDAeFw0xMDA4MjAyMjMyMDhaFw0zOTEyMzEyMzU5NTlaMBQxEjAQBgNVBAMTCWxvY2FsaG9zdDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAz5Hwki0V/P+BfmeMrON8meDDM4weOHDGpD8+Da4vphAeZ9s/9BhWrQmM5CNn/554lqlawWIx5I7GcthGYqB7uMGvfXNVxBiZxTQ7jZ+hEpHxMochePjqihp6SvRza8OzljLqp9qDodIhXfX5ehUwJvmNKdyz/t/AbmM6Qp4qqncCAwEAAaNJMEcwRQYDVR0BBD4wPIAQ74vEYIqPb/pq+fE4gL6heaEWMBQxEjAQBgNVBAMTCWxvY2FsaG9zdIIQHRM04rGn9rBGca6mGX2LQjAJBgUrDgMCHQUAA4GBADXRpbxynlKbXzbvSNMIAOao5lQfiQ5XTgJK3zNEfuCHFUNOsuSuz9O7sUAFe/q4Zwy4C8hSbp1B4M2347Ixcu748LaInlwOY9AGJZuAB0e3R7eB1YJCDGLfFzgqjMOY4xV/dcSfPbQu5jPc2EePDfU+UEnjBqPn/ic8m3i1sZzb</X509Certificate>
+            </X509Data>
+          </KeyInfo>
+        </Identity>
+      </wsa10:EndpointReference>
+    </wsdl:port>
+  </wsdl:service>
+</wsdl:definitions>
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/Service References/OKBData/service.xsd
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/Service References/OKBData/service.xsd	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/Service References/OKBData/service.xsd	(revision 5296)
@@ -0,0 +1,78 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:tns="http://tempuri.org/" elementFormDefault="qualified" targetNamespace="http://tempuri.org/" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:import namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB" />
+  <xs:element name="Request">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q1="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB" minOccurs="0" name="type" type="q1:EntityType" />
+        <xs:element minOccurs="0" name="id" type="xs:int" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="RequestResponse">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="RequestResult" type="xs:int" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="Submit">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q2="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB" minOccurs="0" name="type" type="q2:EntityType" />
+        <xs:element minOccurs="0" name="id" type="xs:int" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="SubmitResponse">
+    <xs:complexType>
+      <xs:sequence />
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="GetNextChunk">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="size" type="xs:int" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="GetNextChunkResponse">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="GetNextChunkResult" nillable="true" type="xs:base64Binary" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="SetNextChunk">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="data" nillable="true" type="xs:base64Binary" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="SetNextChunkResponse">
+    <xs:complexType>
+      <xs:sequence />
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="TransferDone">
+    <xs:complexType>
+      <xs:sequence />
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="TransferDoneResponse">
+    <xs:complexType>
+      <xs:sequence />
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="AbortTransfer">
+    <xs:complexType>
+      <xs:sequence />
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="AbortTransferResponse">
+    <xs:complexType>
+      <xs:sequence />
+    </xs:complexType>
+  </xs:element>
+</xs:schema>
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/Service References/OKBData/service1.xsd
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/Service References/OKBData/service1.xsd	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/Service References/OKBData/service1.xsd	(revision 5296)
@@ -0,0 +1,42 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:tns="http://schemas.microsoft.com/2003/10/Serialization/" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://schemas.microsoft.com/2003/10/Serialization/" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:element name="anyType" nillable="true" type="xs:anyType" />
+  <xs:element name="anyURI" nillable="true" type="xs:anyURI" />
+  <xs:element name="base64Binary" nillable="true" type="xs:base64Binary" />
+  <xs:element name="boolean" nillable="true" type="xs:boolean" />
+  <xs:element name="byte" nillable="true" type="xs:byte" />
+  <xs:element name="dateTime" nillable="true" type="xs:dateTime" />
+  <xs:element name="decimal" nillable="true" type="xs:decimal" />
+  <xs:element name="double" nillable="true" type="xs:double" />
+  <xs:element name="float" nillable="true" type="xs:float" />
+  <xs:element name="int" nillable="true" type="xs:int" />
+  <xs:element name="long" nillable="true" type="xs:long" />
+  <xs:element name="QName" nillable="true" type="xs:QName" />
+  <xs:element name="short" nillable="true" type="xs:short" />
+  <xs:element name="string" nillable="true" type="xs:string" />
+  <xs:element name="unsignedByte" nillable="true" type="xs:unsignedByte" />
+  <xs:element name="unsignedInt" nillable="true" type="xs:unsignedInt" />
+  <xs:element name="unsignedLong" nillable="true" type="xs:unsignedLong" />
+  <xs:element name="unsignedShort" nillable="true" type="xs:unsignedShort" />
+  <xs:element name="char" nillable="true" type="tns:char" />
+  <xs:simpleType name="char">
+    <xs:restriction base="xs:int" />
+  </xs:simpleType>
+  <xs:element name="duration" nillable="true" type="tns:duration" />
+  <xs:simpleType name="duration">
+    <xs:restriction base="xs:duration">
+      <xs:pattern value="\-?P(\d*D)?(T(\d*H)?(\d*M)?(\d*(\.\d*)?S)?)?" />
+      <xs:minInclusive value="-P10675199DT2H48M5.4775808S" />
+      <xs:maxInclusive value="P10675199DT2H48M5.4775807S" />
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:element name="guid" nillable="true" type="tns:guid" />
+  <xs:simpleType name="guid">
+    <xs:restriction base="xs:string">
+      <xs:pattern value="[\da-fA-F]{8}-[\da-fA-F]{4}-[\da-fA-F]{4}-[\da-fA-F]{4}-[\da-fA-F]{12}" />
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:attribute name="FactoryType" type="xs:QName" />
+  <xs:attribute name="Id" type="xs:ID" />
+  <xs:attribute name="Ref" type="xs:IDREF" />
+</xs:schema>
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/Service References/OKBTables/Arrays.xsd
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/Service References/OKBTables/Arrays.xsd	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/Service References/OKBTables/Arrays.xsd	(revision 5296)
@@ -0,0 +1,9 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:tns="http://schemas.microsoft.com/2003/10/Serialization/Arrays" elementFormDefault="qualified" targetNamespace="http://schemas.microsoft.com/2003/10/Serialization/Arrays" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:complexType name="ArrayOfint">
+    <xs:sequence>
+      <xs:element minOccurs="0" maxOccurs="unbounded" name="int" type="xs:int" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="ArrayOfint" nillable="true" type="tns:ArrayOfint" />
+</xs:schema>
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/Service References/OKBTables/Reference.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/Service References/OKBTables/Reference.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/Service References/OKBTables/Reference.cs	(revision 5296)
@@ -0,0 +1,81 @@
+﻿//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.1
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HeuristicLab.OKB.Cockpit.Admin.OKBTables {
+    
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+    [System.ServiceModel.ServiceContractAttribute(ConfigurationName="OKBTables.ITableService", SessionMode=System.ServiceModel.SessionMode.Required)]
+    public interface ITableService {
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/ITableService/PrepareDataTable", ReplyAction="http://tempuri.org/ITableService/PrepareDataTableResponse")]
+        System.Data.DataTable PrepareDataTable(out int count, string tableName);
+        
+        [System.ServiceModel.OperationContractAttribute(IsInitiating=false, Action="http://tempuri.org/ITableService/GetNextRows", ReplyAction="http://tempuri.org/ITableService/GetNextRowsResponse")]
+        System.Data.DataTable GetNextRows(int count);
+        
+        [System.ServiceModel.OperationContractAttribute(IsTerminating=true, Action="http://tempuri.org/ITableService/FinishFetchingRows", ReplyAction="http://tempuri.org/ITableService/FinishFetchingRowsResponse")]
+        void FinishFetchingRows();
+        
+        [System.ServiceModel.OperationContractAttribute(IsTerminating=true, Action="http://tempuri.org/ITableService/UpdateDataTable", ReplyAction="http://tempuri.org/ITableService/UpdateDataTableResponse")]
+        void UpdateDataTable(System.Data.DataTable changedRows, string tableName);
+        
+        [System.ServiceModel.OperationContractAttribute(IsTerminating=true, Action="http://tempuri.org/ITableService/DeleteTableRows", ReplyAction="http://tempuri.org/ITableService/DeleteTableRowsResponse")]
+        void DeleteTableRows(System.Collections.Generic.List<int> ids, string tableName);
+    }
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+    public interface ITableServiceChannel : HeuristicLab.OKB.Cockpit.Admin.OKBTables.ITableService, System.ServiceModel.IClientChannel {
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+    public partial class TableServiceClient : System.ServiceModel.ClientBase<HeuristicLab.OKB.Cockpit.Admin.OKBTables.ITableService>, HeuristicLab.OKB.Cockpit.Admin.OKBTables.ITableService {
+        
+        public TableServiceClient() {
+        }
+        
+        public TableServiceClient(string endpointConfigurationName) : 
+                base(endpointConfigurationName) {
+        }
+        
+        public TableServiceClient(string endpointConfigurationName, string remoteAddress) : 
+                base(endpointConfigurationName, remoteAddress) {
+        }
+        
+        public TableServiceClient(string endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) : 
+                base(endpointConfigurationName, remoteAddress) {
+        }
+        
+        public TableServiceClient(System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress) : 
+                base(binding, remoteAddress) {
+        }
+        
+        public System.Data.DataTable PrepareDataTable(out int count, string tableName) {
+            return base.Channel.PrepareDataTable(out count, tableName);
+        }
+        
+        public System.Data.DataTable GetNextRows(int count) {
+            return base.Channel.GetNextRows(count);
+        }
+        
+        public void FinishFetchingRows() {
+            base.Channel.FinishFetchingRows();
+        }
+        
+        public void UpdateDataTable(System.Data.DataTable changedRows, string tableName) {
+            base.Channel.UpdateDataTable(changedRows, tableName);
+        }
+        
+        public void DeleteTableRows(System.Collections.Generic.List<int> ids, string tableName) {
+            base.Channel.DeleteTableRows(ids, tableName);
+        }
+    }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/Service References/OKBTables/Reference.svcmap
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/Service References/OKBTables/Reference.svcmap	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/Service References/OKBTables/Reference.svcmap	(revision 5296)
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<ReferenceGroup xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" ID="32d4014c-e259-43d2-adfd-ad15c07ca8c1" xmlns="urn:schemas-microsoft-com:xml-wcfservicemap">
+  <ClientOptions>
+    <GenerateAsynchronousMethods>false</GenerateAsynchronousMethods>
+    <EnableDataBinding>true</EnableDataBinding>
+    <ExcludedTypes />
+    <ImportXmlTypes>false</ImportXmlTypes>
+    <GenerateInternalTypes>false</GenerateInternalTypes>
+    <GenerateMessageContracts>false</GenerateMessageContracts>
+    <NamespaceMappings />
+    <CollectionMappings>
+      <CollectionMapping TypeName="System.Collections.Generic.List`1" Category="List" />
+    </CollectionMappings>
+    <GenerateSerializableTypes>true</GenerateSerializableTypes>
+    <Serializer>Auto</Serializer>
+    <UseSerializerForFaults>true</UseSerializerForFaults>
+    <ReferenceAllAssemblies>true</ReferenceAllAssemblies>
+    <ReferencedAssemblies />
+    <ReferencedDataContractTypes />
+    <ServiceContractMappings />
+  </ClientOptions>
+  <MetadataSources>
+    <MetadataSource Address="http://localhost:8732/Design_Time_Addresses/OKB-3.3/TableService/mex" Protocol="mex" SourceId="1" />
+  </MetadataSources>
+  <Metadata>
+    <MetadataFile FileName="service.wsdl" MetadataType="Wsdl" ID="211baf11-a36e-4216-ad2a-81bb8597e685" SourceId="1" SourceUrl="http://localhost:8732/Design_Time_Addresses/OKB-3.3/TableService/mex" />
+    <MetadataFile FileName="service.xsd" MetadataType="Schema" ID="dc079ea4-575c-4d72-9f6e-240df8722b0e" SourceId="1" SourceUrl="http://localhost:8732/Design_Time_Addresses/OKB-3.3/TableService/mex" />
+    <MetadataFile FileName="service1.xsd" MetadataType="Schema" ID="adb5b054-2a44-4f19-8bdc-1a16f808565a" SourceId="1" SourceUrl="http://localhost:8732/Design_Time_Addresses/OKB-3.3/TableService/mex" />
+    <MetadataFile FileName="System.Data.xsd" MetadataType="Schema" ID="f34e0443-7b51-451b-8b9d-d2a47b0b03a8" SourceId="1" SourceUrl="http://localhost:8732/Design_Time_Addresses/OKB-3.3/TableService/mex" />
+    <MetadataFile FileName="Arrays.xsd" MetadataType="Schema" ID="e921aea4-394f-4065-bcf4-391175afafd1" SourceId="1" SourceUrl="http://localhost:8732/Design_Time_Addresses/OKB-3.3/TableService/mex" />
+  </Metadata>
+  <Extensions>
+    <ExtensionFile FileName="configuration91.svcinfo" Name="configuration91.svcinfo" />
+    <ExtensionFile FileName="configuration.svcinfo" Name="configuration.svcinfo" />
+  </Extensions>
+</ReferenceGroup>
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/Service References/OKBTables/System.Data.xsd
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/Service References/OKBTables/System.Data.xsd	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/Service References/OKBTables/System.Data.xsd	(revision 5296)
@@ -0,0 +1,16 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:tns="http://schemas.datacontract.org/2004/07/System.Data" elementFormDefault="qualified" targetNamespace="http://schemas.datacontract.org/2004/07/System.Data" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:element name="DataTable" nillable="true">
+    <xs:complexType>
+      <xs:annotation>
+        <xs:appinfo>
+          <ActualType Name="DataTable" Namespace="http://schemas.datacontract.org/2004/07/System.Data" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+        </xs:appinfo>
+      </xs:annotation>
+      <xs:sequence>
+        <xs:any minOccurs="0" maxOccurs="unbounded" namespace="http://www.w3.org/2001/XMLSchema" processContents="lax" />
+        <xs:any minOccurs="1" namespace="urn:schemas-microsoft-com:xml-diffgram-v1" processContents="lax" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+</xs:schema>
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/Service References/OKBTables/configuration.svcinfo
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/Service References/OKBTables/configuration.svcinfo	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/Service References/OKBTables/configuration.svcinfo	(revision 5296)
@@ -0,0 +1,10 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<configurationSnapshot xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="urn:schemas-microsoft-com:xml-wcfconfigurationsnapshot">
+  <behaviors />
+  <bindings>
+    <binding digest="System.ServiceModel.Configuration.NetTcpBindingElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089:&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-16&quot;?&gt;&lt;Data hostNameComparisonMode=&quot;StrongWildcard&quot; listenBacklog=&quot;10&quot; maxBufferSize=&quot;65536&quot; maxConnections=&quot;10&quot; name=&quot;NetTcpBinding_ITableService&quot; transactionFlow=&quot;false&quot; transactionProtocol=&quot;OleTransactions&quot; transferMode=&quot;Buffered&quot;&gt;&lt;readerQuotas maxArrayLength=&quot;16384&quot; maxBytesPerRead=&quot;4096&quot; maxDepth=&quot;32&quot; maxNameTableCharCount=&quot;16384&quot; maxStringContentLength=&quot;8192&quot; /&gt;&lt;reliableSession enabled=&quot;false&quot; inactivityTimeout=&quot;00:10:00&quot; ordered=&quot;true&quot; /&gt;&lt;security mode=&quot;Message&quot;&gt;&lt;message algorithmSuite=&quot;Default&quot; clientCredentialType=&quot;UserName&quot; /&gt;&lt;transport clientCredentialType=&quot;Windows&quot; protectionLevel=&quot;EncryptAndSign&quot; /&gt;&lt;/security&gt;&lt;/Data&gt;" bindingType="netTcpBinding" name="NetTcpBinding_ITableService" />
+  </bindings>
+  <endpoints>
+    <endpoint normalizedDigest="&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-16&quot;?&gt;&lt;Data address=&quot;net.tcp://localhost:8733/OKB-3.3/TableService&quot; binding=&quot;netTcpBinding&quot; bindingConfiguration=&quot;NetTcpBinding_ITableService&quot; contract=&quot;OKBTables.ITableService&quot; name=&quot;NetTcpBinding_ITableService&quot;&gt;&lt;identity&gt;&lt;certificate encodedValue=&quot;AwAAAAEAAAAUAAAAD/AlkYJw/OUhl6D/9w8mjJBh39kgAAAAAQAAAPIBAAAwggHuMIIBW6ADAgECAhAdEzTisaf2sEZxrqYZfYtCMAkGBSsOAwIdBQAwFDESMBAGA1UEAxMJbG9jYWxob3N0MB4XDTEwMDgyMDIyMzIwOFoXDTM5MTIzMTIzNTk1OVowFDESMBAGA1UEAxMJbG9jYWxob3N0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDPkfCSLRX8/4F+Z4ys43yZ4MMzjB44cMakPz4Nri+mEB5n2z/0GFatCYzkI2f/nniWqVrBYjHkjsZy2EZioHu4wa99c1XEGJnFNDuNn6ESkfEyhyF4+OqKGnpK9HNrw7OWMuqn2oOh0iFd9fl6FTAm+Y0p3LP+38BuYzpCniqqdwIDAQABo0kwRzBFBgNVHQEEPjA8gBDvi8Rgio9v+mr58TiAvqF5oRYwFDESMBAGA1UEAxMJbG9jYWxob3N0ghAdEzTisaf2sEZxrqYZfYtCMAkGBSsOAwIdBQADgYEANdGlvHKeUptfNu9I0wgA5qjmVB+JDldOAkrfM0R+4IcVQ06y5K7P07uxQAV7+rhnDLgLyFJunUHgzbfjsjFy7vjwtoieXA5j0AYlm4AHR7dHt4HVgkIMYt8XOCqMw5jjFX91xJ89tC7mM9zYR48N9T5QSeMGo+f+JzybeLWxnNs=&quot; /&gt;&lt;/identity&gt;&lt;/Data&gt;" digest="&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-16&quot;?&gt;&lt;Data address=&quot;net.tcp://localhost:8733/OKB-3.3/TableService&quot; binding=&quot;netTcpBinding&quot; bindingConfiguration=&quot;NetTcpBinding_ITableService&quot; contract=&quot;OKBTables.ITableService&quot; name=&quot;NetTcpBinding_ITableService&quot;&gt;&lt;identity&gt;&lt;certificate encodedValue=&quot;AwAAAAEAAAAUAAAAD/AlkYJw/OUhl6D/9w8mjJBh39kgAAAAAQAAAPIBAAAwggHuMIIBW6ADAgECAhAdEzTisaf2sEZxrqYZfYtCMAkGBSsOAwIdBQAwFDESMBAGA1UEAxMJbG9jYWxob3N0MB4XDTEwMDgyMDIyMzIwOFoXDTM5MTIzMTIzNTk1OVowFDESMBAGA1UEAxMJbG9jYWxob3N0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDPkfCSLRX8/4F+Z4ys43yZ4MMzjB44cMakPz4Nri+mEB5n2z/0GFatCYzkI2f/nniWqVrBYjHkjsZy2EZioHu4wa99c1XEGJnFNDuNn6ESkfEyhyF4+OqKGnpK9HNrw7OWMuqn2oOh0iFd9fl6FTAm+Y0p3LP+38BuYzpCniqqdwIDAQABo0kwRzBFBgNVHQEEPjA8gBDvi8Rgio9v+mr58TiAvqF5oRYwFDESMBAGA1UEAxMJbG9jYWxob3N0ghAdEzTisaf2sEZxrqYZfYtCMAkGBSsOAwIdBQADgYEANdGlvHKeUptfNu9I0wgA5qjmVB+JDldOAkrfM0R+4IcVQ06y5K7P07uxQAV7+rhnDLgLyFJunUHgzbfjsjFy7vjwtoieXA5j0AYlm4AHR7dHt4HVgkIMYt8XOCqMw5jjFX91xJ89tC7mM9zYR48N9T5QSeMGo+f+JzybeLWxnNs=&quot; /&gt;&lt;/identity&gt;&lt;/Data&gt;" contractName="OKBTables.ITableService" name="NetTcpBinding_ITableService" />
+  </endpoints>
+</configurationSnapshot>
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/Service References/OKBTables/configuration91.svcinfo
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/Service References/OKBTables/configuration91.svcinfo	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/Service References/OKBTables/configuration91.svcinfo	(revision 5296)
@@ -0,0 +1,207 @@
+<?xml version="1.0" encoding="utf-8"?>
+<SavedWcfConfigurationInformation xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Version="9.1" CheckSum="XZJ2kMATj2R2CEJcMgHRBlAmMjQ=">
+  <bindingConfigurations>
+    <bindingConfiguration bindingType="netTcpBinding" name="NetTcpBinding_ITableService">
+      <properties>
+        <property path="/name" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>NetTcpBinding_ITableService</serializedValue>
+        </property>
+        <property path="/closeTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>00:01:00</serializedValue>
+        </property>
+        <property path="/openTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>00:01:00</serializedValue>
+        </property>
+        <property path="/receiveTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>00:10:00</serializedValue>
+        </property>
+        <property path="/sendTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>00:01:00</serializedValue>
+        </property>
+        <property path="/transactionFlow" isComplexType="false" isExplicitlyDefined="true" clrType="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>False</serializedValue>
+        </property>
+        <property path="/transferMode" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.TransferMode, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>Buffered</serializedValue>
+        </property>
+        <property path="/transactionProtocol" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.TransactionProtocol, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>OleTransactions</serializedValue>
+        </property>
+        <property path="/hostNameComparisonMode" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.HostNameComparisonMode, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>StrongWildcard</serializedValue>
+        </property>
+        <property path="/listenBacklog" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>10</serializedValue>
+        </property>
+        <property path="/maxBufferPoolSize" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int64, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>524288</serializedValue>
+        </property>
+        <property path="/maxBufferSize" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>65536</serializedValue>
+        </property>
+        <property path="/maxConnections" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>10</serializedValue>
+        </property>
+        <property path="/maxReceivedMessageSize" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int64, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>65536</serializedValue>
+        </property>
+        <property path="/portSharingEnabled" isComplexType="false" isExplicitlyDefined="false" clrType="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>False</serializedValue>
+        </property>
+        <property path="/readerQuotas" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.XmlDictionaryReaderQuotasElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.XmlDictionaryReaderQuotasElement</serializedValue>
+        </property>
+        <property path="/readerQuotas/maxDepth" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>32</serializedValue>
+        </property>
+        <property path="/readerQuotas/maxStringContentLength" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>8192</serializedValue>
+        </property>
+        <property path="/readerQuotas/maxArrayLength" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>16384</serializedValue>
+        </property>
+        <property path="/readerQuotas/maxBytesPerRead" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>4096</serializedValue>
+        </property>
+        <property path="/readerQuotas/maxNameTableCharCount" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>16384</serializedValue>
+        </property>
+        <property path="/reliableSession" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.StandardBindingOptionalReliableSessionElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.StandardBindingOptionalReliableSessionElement</serializedValue>
+        </property>
+        <property path="/reliableSession/ordered" isComplexType="false" isExplicitlyDefined="true" clrType="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>True</serializedValue>
+        </property>
+        <property path="/reliableSession/inactivityTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>00:10:00</serializedValue>
+        </property>
+        <property path="/reliableSession/enabled" isComplexType="false" isExplicitlyDefined="true" clrType="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>False</serializedValue>
+        </property>
+        <property path="/security" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.NetTcpSecurityElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.NetTcpSecurityElement</serializedValue>
+        </property>
+        <property path="/security/mode" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.SecurityMode, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>Message</serializedValue>
+        </property>
+        <property path="/security/transport" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.TcpTransportSecurityElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.TcpTransportSecurityElement</serializedValue>
+        </property>
+        <property path="/security/transport/clientCredentialType" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.TcpClientCredentialType, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>Windows</serializedValue>
+        </property>
+        <property path="/security/transport/protectionLevel" isComplexType="false" isExplicitlyDefined="true" clrType="System.Net.Security.ProtectionLevel, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>EncryptAndSign</serializedValue>
+        </property>
+        <property path="/security/transport/extendedProtectionPolicy" isComplexType="true" isExplicitlyDefined="false" clrType="System.Security.Authentication.ExtendedProtection.Configuration.ExtendedProtectionPolicyElement, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.Security.Authentication.ExtendedProtection.Configuration.ExtendedProtectionPolicyElement</serializedValue>
+        </property>
+        <property path="/security/transport/extendedProtectionPolicy/policyEnforcement" isComplexType="false" isExplicitlyDefined="false" clrType="System.Security.Authentication.ExtendedProtection.PolicyEnforcement, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>Never</serializedValue>
+        </property>
+        <property path="/security/transport/extendedProtectionPolicy/protectionScenario" isComplexType="false" isExplicitlyDefined="false" clrType="System.Security.Authentication.ExtendedProtection.ProtectionScenario, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>TransportSelected</serializedValue>
+        </property>
+        <property path="/security/transport/extendedProtectionPolicy/customServiceNames" isComplexType="true" isExplicitlyDefined="false" clrType="System.Security.Authentication.ExtendedProtection.Configuration.ServiceNameElementCollection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>(Collection)</serializedValue>
+        </property>
+        <property path="/security/message" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.MessageSecurityOverTcpElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.MessageSecurityOverTcpElement</serializedValue>
+        </property>
+        <property path="/security/message/clientCredentialType" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.MessageCredentialType, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>UserName</serializedValue>
+        </property>
+        <property path="/security/message/algorithmSuite" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.Security.SecurityAlgorithmSuite, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>Default</serializedValue>
+        </property>
+      </properties>
+    </bindingConfiguration>
+  </bindingConfigurations>
+  <endpoints>
+    <endpoint name="NetTcpBinding_ITableService" contract="OKBTables.ITableService" bindingType="netTcpBinding" address="net.tcp://localhost:8733/OKB-3.3/TableService" bindingConfiguration="NetTcpBinding_ITableService">
+      <properties>
+        <property path="/address" isComplexType="false" isExplicitlyDefined="true" clrType="System.Uri, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>net.tcp://localhost:8733/OKB-3.3/TableService</serializedValue>
+        </property>
+        <property path="/behaviorConfiguration" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/binding" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>netTcpBinding</serializedValue>
+        </property>
+        <property path="/bindingConfiguration" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>NetTcpBinding_ITableService</serializedValue>
+        </property>
+        <property path="/contract" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>OKBTables.ITableService</serializedValue>
+        </property>
+        <property path="/headers" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.AddressHeaderCollectionElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.AddressHeaderCollectionElement</serializedValue>
+        </property>
+        <property path="/headers/headers" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.Channels.AddressHeaderCollection, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>&lt;Header /&gt;</serializedValue>
+        </property>
+        <property path="/identity" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.IdentityElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.IdentityElement</serializedValue>
+        </property>
+        <property path="/identity/userPrincipalName" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.UserPrincipalNameElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.UserPrincipalNameElement</serializedValue>
+        </property>
+        <property path="/identity/userPrincipalName/value" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/servicePrincipalName" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.ServicePrincipalNameElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.ServicePrincipalNameElement</serializedValue>
+        </property>
+        <property path="/identity/servicePrincipalName/value" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/dns" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.DnsElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.DnsElement</serializedValue>
+        </property>
+        <property path="/identity/dns/value" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/rsa" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.RsaElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.RsaElement</serializedValue>
+        </property>
+        <property path="/identity/rsa/value" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/certificate" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.CertificateElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.CertificateElement</serializedValue>
+        </property>
+        <property path="/identity/certificate/encodedValue" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>AwAAAAEAAAAUAAAAD/AlkYJw/OUhl6D/9w8mjJBh39kgAAAAAQAAAPIBAAAwggHuMIIBW6ADAgECAhAdEzTisaf2sEZxrqYZfYtCMAkGBSsOAwIdBQAwFDESMBAGA1UEAxMJbG9jYWxob3N0MB4XDTEwMDgyMDIyMzIwOFoXDTM5MTIzMTIzNTk1OVowFDESMBAGA1UEAxMJbG9jYWxob3N0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDPkfCSLRX8/4F+Z4ys43yZ4MMzjB44cMakPz4Nri+mEB5n2z/0GFatCYzkI2f/nniWqVrBYjHkjsZy2EZioHu4wa99c1XEGJnFNDuNn6ESkfEyhyF4+OqKGnpK9HNrw7OWMuqn2oOh0iFd9fl6FTAm+Y0p3LP+38BuYzpCniqqdwIDAQABo0kwRzBFBgNVHQEEPjA8gBDvi8Rgio9v+mr58TiAvqF5oRYwFDESMBAGA1UEAxMJbG9jYWxob3N0ghAdEzTisaf2sEZxrqYZfYtCMAkGBSsOAwIdBQADgYEANdGlvHKeUptfNu9I0wgA5qjmVB+JDldOAkrfM0R+4IcVQ06y5K7P07uxQAV7+rhnDLgLyFJunUHgzbfjsjFy7vjwtoieXA5j0AYlm4AHR7dHt4HVgkIMYt8XOCqMw5jjFX91xJ89tC7mM9zYR48N9T5QSeMGo+f+JzybeLWxnNs=</serializedValue>
+        </property>
+        <property path="/identity/certificateReference" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.CertificateReferenceElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.CertificateReferenceElement</serializedValue>
+        </property>
+        <property path="/identity/certificateReference/storeName" isComplexType="false" isExplicitlyDefined="false" clrType="System.Security.Cryptography.X509Certificates.StoreName, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>My</serializedValue>
+        </property>
+        <property path="/identity/certificateReference/storeLocation" isComplexType="false" isExplicitlyDefined="false" clrType="System.Security.Cryptography.X509Certificates.StoreLocation, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>LocalMachine</serializedValue>
+        </property>
+        <property path="/identity/certificateReference/x509FindType" isComplexType="false" isExplicitlyDefined="false" clrType="System.Security.Cryptography.X509Certificates.X509FindType, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>FindBySubjectDistinguishedName</serializedValue>
+        </property>
+        <property path="/identity/certificateReference/findValue" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/certificateReference/isChainIncluded" isComplexType="false" isExplicitlyDefined="false" clrType="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>False</serializedValue>
+        </property>
+        <property path="/name" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>NetTcpBinding_ITableService</serializedValue>
+        </property>
+        <property path="/kind" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/endpointConfiguration" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+      </properties>
+    </endpoint>
+  </endpoints>
+</SavedWcfConfigurationInformation>
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/Service References/OKBTables/service.wsdl
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/Service References/OKBTables/service.wsdl	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/Service References/OKBTables/service.wsdl	(revision 5296)
@@ -0,0 +1,433 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<wsdl:definitions xmlns:wsap="http://schemas.xmlsoap.org/ws/2004/08/addressing/policy" xmlns:wsa10="http://www.w3.org/2005/08/addressing" xmlns:tns="http://tempuri.org/" xmlns:msc="http://schemas.microsoft.com/ws/2005/12/wsdl/contract" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="TableService" targetNamespace="http://tempuri.org/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
+  <wsp:Policy wsu:Id="NetTcpBinding_ITableService_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SymmetricBinding xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <wsp:Policy>
+            <sp:ProtectionToken>
+              <wsp:Policy>
+                <sp:SecureConversationToken sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient">
+                  <wsp:Policy>
+                    <sp:RequireDerivedKeys />
+                    <sp:BootstrapPolicy>
+                      <wsp:Policy>
+                        <sp:SignedParts>
+                          <sp:Body />
+                          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+                          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+                          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+                          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+                          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+                          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+                          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+                        </sp:SignedParts>
+                        <sp:EncryptedParts>
+                          <sp:Body />
+                        </sp:EncryptedParts>
+                        <sp:SymmetricBinding>
+                          <wsp:Policy>
+                            <sp:ProtectionToken>
+                              <wsp:Policy>
+                                <mssp:SslContextToken sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient" xmlns:mssp="http://schemas.microsoft.com/ws/2005/07/securitypolicy">
+                                  <wsp:Policy>
+                                    <sp:RequireDerivedKeys />
+                                  </wsp:Policy>
+                                </mssp:SslContextToken>
+                              </wsp:Policy>
+                            </sp:ProtectionToken>
+                            <sp:AlgorithmSuite>
+                              <wsp:Policy>
+                                <sp:Basic256 />
+                              </wsp:Policy>
+                            </sp:AlgorithmSuite>
+                            <sp:Layout>
+                              <wsp:Policy>
+                                <sp:Strict />
+                              </wsp:Policy>
+                            </sp:Layout>
+                            <sp:IncludeTimestamp />
+                            <sp:EncryptSignature />
+                            <sp:OnlySignEntireHeadersAndBody />
+                          </wsp:Policy>
+                        </sp:SymmetricBinding>
+                        <sp:SignedSupportingTokens>
+                          <wsp:Policy>
+                            <sp:UsernameToken sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient">
+                              <wsp:Policy>
+                                <sp:WssUsernameToken10 />
+                              </wsp:Policy>
+                            </sp:UsernameToken>
+                          </wsp:Policy>
+                        </sp:SignedSupportingTokens>
+                        <sp:Wss11>
+                          <wsp:Policy />
+                        </sp:Wss11>
+                        <sp:Trust10>
+                          <wsp:Policy>
+                            <sp:MustSupportIssuedTokens />
+                            <sp:RequireClientEntropy />
+                            <sp:RequireServerEntropy />
+                          </wsp:Policy>
+                        </sp:Trust10>
+                      </wsp:Policy>
+                    </sp:BootstrapPolicy>
+                  </wsp:Policy>
+                </sp:SecureConversationToken>
+              </wsp:Policy>
+            </sp:ProtectionToken>
+            <sp:AlgorithmSuite>
+              <wsp:Policy>
+                <sp:Basic256 />
+              </wsp:Policy>
+            </sp:AlgorithmSuite>
+            <sp:Layout>
+              <wsp:Policy>
+                <sp:Strict />
+              </wsp:Policy>
+            </sp:Layout>
+            <sp:IncludeTimestamp />
+            <sp:EncryptSignature />
+            <sp:OnlySignEntireHeadersAndBody />
+          </wsp:Policy>
+        </sp:SymmetricBinding>
+        <sp:Wss11 xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <wsp:Policy />
+        </sp:Wss11>
+        <sp:Trust10 xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <wsp:Policy>
+            <sp:MustSupportIssuedTokens />
+            <sp:RequireClientEntropy />
+            <sp:RequireServerEntropy />
+          </wsp:Policy>
+        </sp:Trust10>
+        <msb:BinaryEncoding xmlns:msb="http://schemas.microsoft.com/ws/06/2004/mspolicy/netbinary1" />
+        <wsaw:UsingAddressing />
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="NetTcpBinding_ITableService_PrepareDataTable_Input_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="NetTcpBinding_ITableService_PrepareDataTable_output_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="NetTcpBinding_ITableService_GetNextRows_Input_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="NetTcpBinding_ITableService_GetNextRows_output_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="NetTcpBinding_ITableService_FinishFetchingRows_Input_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="NetTcpBinding_ITableService_FinishFetchingRows_output_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="NetTcpBinding_ITableService_UpdateDataTable_Input_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="NetTcpBinding_ITableService_UpdateDataTable_output_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="NetTcpBinding_ITableService_DeleteTableRows_Input_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="NetTcpBinding_ITableService_DeleteTableRows_output_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsdl:types>
+    <xsd:schema targetNamespace="http://tempuri.org/Imports">
+      <xsd:import namespace="http://tempuri.org/" />
+      <xsd:import namespace="http://schemas.microsoft.com/2003/10/Serialization/" />
+      <xsd:import namespace="http://schemas.datacontract.org/2004/07/System.Data" />
+      <xsd:import namespace="http://schemas.microsoft.com/2003/10/Serialization/Arrays" />
+    </xsd:schema>
+  </wsdl:types>
+  <wsdl:message name="ITableService_PrepareDataTable_InputMessage">
+    <wsdl:part name="parameters" element="tns:PrepareDataTable" />
+  </wsdl:message>
+  <wsdl:message name="ITableService_PrepareDataTable_OutputMessage">
+    <wsdl:part name="parameters" element="tns:PrepareDataTableResponse" />
+  </wsdl:message>
+  <wsdl:message name="ITableService_GetNextRows_InputMessage">
+    <wsdl:part name="parameters" element="tns:GetNextRows" />
+  </wsdl:message>
+  <wsdl:message name="ITableService_GetNextRows_OutputMessage">
+    <wsdl:part name="parameters" element="tns:GetNextRowsResponse" />
+  </wsdl:message>
+  <wsdl:message name="ITableService_FinishFetchingRows_InputMessage">
+    <wsdl:part name="parameters" element="tns:FinishFetchingRows" />
+  </wsdl:message>
+  <wsdl:message name="ITableService_FinishFetchingRows_OutputMessage">
+    <wsdl:part name="parameters" element="tns:FinishFetchingRowsResponse" />
+  </wsdl:message>
+  <wsdl:message name="ITableService_UpdateDataTable_InputMessage">
+    <wsdl:part name="parameters" element="tns:UpdateDataTable" />
+  </wsdl:message>
+  <wsdl:message name="ITableService_UpdateDataTable_OutputMessage">
+    <wsdl:part name="parameters" element="tns:UpdateDataTableResponse" />
+  </wsdl:message>
+  <wsdl:message name="ITableService_DeleteTableRows_InputMessage">
+    <wsdl:part name="parameters" element="tns:DeleteTableRows" />
+  </wsdl:message>
+  <wsdl:message name="ITableService_DeleteTableRows_OutputMessage">
+    <wsdl:part name="parameters" element="tns:DeleteTableRowsResponse" />
+  </wsdl:message>
+  <wsdl:portType msc:usingSession="true" name="ITableService">
+    <wsdl:operation msc:isInitiating="true" msc:isTerminating="false" name="PrepareDataTable">
+      <wsdl:input wsaw:Action="http://tempuri.org/ITableService/PrepareDataTable" message="tns:ITableService_PrepareDataTable_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/ITableService/PrepareDataTableResponse" message="tns:ITableService_PrepareDataTable_OutputMessage" />
+    </wsdl:operation>
+    <wsdl:operation msc:isInitiating="false" msc:isTerminating="false" name="GetNextRows">
+      <wsdl:input wsaw:Action="http://tempuri.org/ITableService/GetNextRows" message="tns:ITableService_GetNextRows_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/ITableService/GetNextRowsResponse" message="tns:ITableService_GetNextRows_OutputMessage" />
+    </wsdl:operation>
+    <wsdl:operation msc:isInitiating="true" msc:isTerminating="true" name="FinishFetchingRows">
+      <wsdl:input wsaw:Action="http://tempuri.org/ITableService/FinishFetchingRows" message="tns:ITableService_FinishFetchingRows_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/ITableService/FinishFetchingRowsResponse" message="tns:ITableService_FinishFetchingRows_OutputMessage" />
+    </wsdl:operation>
+    <wsdl:operation msc:isInitiating="true" msc:isTerminating="true" name="UpdateDataTable">
+      <wsdl:input wsaw:Action="http://tempuri.org/ITableService/UpdateDataTable" message="tns:ITableService_UpdateDataTable_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/ITableService/UpdateDataTableResponse" message="tns:ITableService_UpdateDataTable_OutputMessage" />
+    </wsdl:operation>
+    <wsdl:operation msc:isInitiating="true" msc:isTerminating="true" name="DeleteTableRows">
+      <wsdl:input wsaw:Action="http://tempuri.org/ITableService/DeleteTableRows" message="tns:ITableService_DeleteTableRows_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/ITableService/DeleteTableRowsResponse" message="tns:ITableService_DeleteTableRows_OutputMessage" />
+    </wsdl:operation>
+  </wsdl:portType>
+  <wsdl:binding name="NetTcpBinding_ITableService" type="tns:ITableService">
+    <wsp:PolicyReference URI="#NetTcpBinding_ITableService_policy" />
+    <soap12:binding transport="http://schemas.microsoft.com/soap/tcp" />
+    <wsdl:operation name="PrepareDataTable">
+      <soap12:operation soapAction="http://tempuri.org/ITableService/PrepareDataTable" style="document" />
+      <wsdl:input>
+        <wsp:PolicyReference URI="#NetTcpBinding_ITableService_PrepareDataTable_Input_policy" />
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <wsp:PolicyReference URI="#NetTcpBinding_ITableService_PrepareDataTable_output_policy" />
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="GetNextRows">
+      <soap12:operation soapAction="http://tempuri.org/ITableService/GetNextRows" style="document" />
+      <wsdl:input>
+        <wsp:PolicyReference URI="#NetTcpBinding_ITableService_GetNextRows_Input_policy" />
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <wsp:PolicyReference URI="#NetTcpBinding_ITableService_GetNextRows_output_policy" />
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="FinishFetchingRows">
+      <soap12:operation soapAction="http://tempuri.org/ITableService/FinishFetchingRows" style="document" />
+      <wsdl:input>
+        <wsp:PolicyReference URI="#NetTcpBinding_ITableService_FinishFetchingRows_Input_policy" />
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <wsp:PolicyReference URI="#NetTcpBinding_ITableService_FinishFetchingRows_output_policy" />
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="UpdateDataTable">
+      <soap12:operation soapAction="http://tempuri.org/ITableService/UpdateDataTable" style="document" />
+      <wsdl:input>
+        <wsp:PolicyReference URI="#NetTcpBinding_ITableService_UpdateDataTable_Input_policy" />
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <wsp:PolicyReference URI="#NetTcpBinding_ITableService_UpdateDataTable_output_policy" />
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="DeleteTableRows">
+      <soap12:operation soapAction="http://tempuri.org/ITableService/DeleteTableRows" style="document" />
+      <wsdl:input>
+        <wsp:PolicyReference URI="#NetTcpBinding_ITableService_DeleteTableRows_Input_policy" />
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <wsp:PolicyReference URI="#NetTcpBinding_ITableService_DeleteTableRows_output_policy" />
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+  </wsdl:binding>
+  <wsdl:service name="TableService">
+    <wsdl:port name="NetTcpBinding_ITableService" binding="tns:NetTcpBinding_ITableService">
+      <soap12:address location="net.tcp://localhost:8733/OKB-3.3/TableService" />
+      <wsa10:EndpointReference>
+        <wsa10:Address>net.tcp://localhost:8733/OKB-3.3/TableService</wsa10:Address>
+        <Identity xmlns="http://schemas.xmlsoap.org/ws/2006/02/addressingidentity">
+          <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
+            <X509Data>
+              <X509Certificate>MIIB7jCCAVugAwIBAgIQHRM04rGn9rBGca6mGX2LQjAJBgUrDgMCHQUAMBQxEjAQBgNVBAMTCWxvY2FsaG9zdDAeFw0xMDA4MjAyMjMyMDhaFw0zOTEyMzEyMzU5NTlaMBQxEjAQBgNVBAMTCWxvY2FsaG9zdDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAz5Hwki0V/P+BfmeMrON8meDDM4weOHDGpD8+Da4vphAeZ9s/9BhWrQmM5CNn/554lqlawWIx5I7GcthGYqB7uMGvfXNVxBiZxTQ7jZ+hEpHxMochePjqihp6SvRza8OzljLqp9qDodIhXfX5ehUwJvmNKdyz/t/AbmM6Qp4qqncCAwEAAaNJMEcwRQYDVR0BBD4wPIAQ74vEYIqPb/pq+fE4gL6heaEWMBQxEjAQBgNVBAMTCWxvY2FsaG9zdIIQHRM04rGn9rBGca6mGX2LQjAJBgUrDgMCHQUAA4GBADXRpbxynlKbXzbvSNMIAOao5lQfiQ5XTgJK3zNEfuCHFUNOsuSuz9O7sUAFe/q4Zwy4C8hSbp1B4M2347Ixcu748LaInlwOY9AGJZuAB0e3R7eB1YJCDGLfFzgqjMOY4xV/dcSfPbQu5jPc2EePDfU+UEnjBqPn/ic8m3i1sZzb</X509Certificate>
+            </X509Data>
+          </KeyInfo>
+        </Identity>
+      </wsa10:EndpointReference>
+    </wsdl:port>
+  </wsdl:service>
+</wsdl:definitions>
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/Service References/OKBTables/service.xsd
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/Service References/OKBTables/service.xsd	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/Service References/OKBTables/service.xsd	(revision 5296)
@@ -0,0 +1,105 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:tns="http://tempuri.org/" elementFormDefault="qualified" targetNamespace="http://tempuri.org/" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:import namespace="http://schemas.microsoft.com/2003/10/Serialization/Arrays" />
+  <xs:element name="PrepareDataTable">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="tableName" nillable="true" type="xs:string" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="PrepareDataTableResponse">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="PrepareDataTableResult" nillable="true">
+          <xs:complexType>
+            <xs:annotation>
+              <xs:appinfo>
+                <ActualType Name="DataTable" Namespace="http://schemas.datacontract.org/2004/07/System.Data" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+              </xs:appinfo>
+            </xs:annotation>
+            <xs:sequence>
+              <xs:any minOccurs="0" maxOccurs="unbounded" namespace="http://www.w3.org/2001/XMLSchema" processContents="lax" />
+              <xs:any minOccurs="1" namespace="urn:schemas-microsoft-com:xml-diffgram-v1" processContents="lax" />
+            </xs:sequence>
+          </xs:complexType>
+        </xs:element>
+        <xs:element minOccurs="0" name="count" type="xs:int" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="GetNextRows">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="count" type="xs:int" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="GetNextRowsResponse">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="GetNextRowsResult" nillable="true">
+          <xs:complexType>
+            <xs:annotation>
+              <xs:appinfo>
+                <ActualType Name="DataTable" Namespace="http://schemas.datacontract.org/2004/07/System.Data" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+              </xs:appinfo>
+            </xs:annotation>
+            <xs:sequence>
+              <xs:any minOccurs="0" maxOccurs="unbounded" namespace="http://www.w3.org/2001/XMLSchema" processContents="lax" />
+              <xs:any minOccurs="1" namespace="urn:schemas-microsoft-com:xml-diffgram-v1" processContents="lax" />
+            </xs:sequence>
+          </xs:complexType>
+        </xs:element>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="FinishFetchingRows">
+    <xs:complexType>
+      <xs:sequence />
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="FinishFetchingRowsResponse">
+    <xs:complexType>
+      <xs:sequence />
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="UpdateDataTable">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="changedRows" nillable="true">
+          <xs:complexType>
+            <xs:annotation>
+              <xs:appinfo>
+                <ActualType Name="DataTable" Namespace="http://schemas.datacontract.org/2004/07/System.Data" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+              </xs:appinfo>
+            </xs:annotation>
+            <xs:sequence>
+              <xs:any minOccurs="0" maxOccurs="unbounded" namespace="http://www.w3.org/2001/XMLSchema" processContents="lax" />
+              <xs:any minOccurs="1" namespace="urn:schemas-microsoft-com:xml-diffgram-v1" processContents="lax" />
+            </xs:sequence>
+          </xs:complexType>
+        </xs:element>
+        <xs:element minOccurs="0" name="tableName" nillable="true" type="xs:string" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="UpdateDataTableResponse">
+    <xs:complexType>
+      <xs:sequence />
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="DeleteTableRows">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q1="http://schemas.microsoft.com/2003/10/Serialization/Arrays" minOccurs="0" name="ids" nillable="true" type="q1:ArrayOfint" />
+        <xs:element minOccurs="0" name="tableName" nillable="true" type="xs:string" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="DeleteTableRowsResponse">
+    <xs:complexType>
+      <xs:sequence />
+    </xs:complexType>
+  </xs:element>
+</xs:schema>
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/Service References/OKBTables/service1.xsd
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/Service References/OKBTables/service1.xsd	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/Service References/OKBTables/service1.xsd	(revision 5296)
@@ -0,0 +1,42 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:tns="http://schemas.microsoft.com/2003/10/Serialization/" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://schemas.microsoft.com/2003/10/Serialization/" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:element name="anyType" nillable="true" type="xs:anyType" />
+  <xs:element name="anyURI" nillable="true" type="xs:anyURI" />
+  <xs:element name="base64Binary" nillable="true" type="xs:base64Binary" />
+  <xs:element name="boolean" nillable="true" type="xs:boolean" />
+  <xs:element name="byte" nillable="true" type="xs:byte" />
+  <xs:element name="dateTime" nillable="true" type="xs:dateTime" />
+  <xs:element name="decimal" nillable="true" type="xs:decimal" />
+  <xs:element name="double" nillable="true" type="xs:double" />
+  <xs:element name="float" nillable="true" type="xs:float" />
+  <xs:element name="int" nillable="true" type="xs:int" />
+  <xs:element name="long" nillable="true" type="xs:long" />
+  <xs:element name="QName" nillable="true" type="xs:QName" />
+  <xs:element name="short" nillable="true" type="xs:short" />
+  <xs:element name="string" nillable="true" type="xs:string" />
+  <xs:element name="unsignedByte" nillable="true" type="xs:unsignedByte" />
+  <xs:element name="unsignedInt" nillable="true" type="xs:unsignedInt" />
+  <xs:element name="unsignedLong" nillable="true" type="xs:unsignedLong" />
+  <xs:element name="unsignedShort" nillable="true" type="xs:unsignedShort" />
+  <xs:element name="char" nillable="true" type="tns:char" />
+  <xs:simpleType name="char">
+    <xs:restriction base="xs:int" />
+  </xs:simpleType>
+  <xs:element name="duration" nillable="true" type="tns:duration" />
+  <xs:simpleType name="duration">
+    <xs:restriction base="xs:duration">
+      <xs:pattern value="\-?P(\d*D)?(T(\d*H)?(\d*M)?(\d*(\.\d*)?S)?)?" />
+      <xs:minInclusive value="-P10675199DT2H48M5.4775808S" />
+      <xs:maxInclusive value="P10675199DT2H48M5.4775807S" />
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:element name="guid" nillable="true" type="tns:guid" />
+  <xs:simpleType name="guid">
+    <xs:restriction base="xs:string">
+      <xs:pattern value="[\da-fA-F]{8}-[\da-fA-F]{4}-[\da-fA-F]{4}-[\da-fA-F]{4}-[\da-fA-F]{12}" />
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:attribute name="FactoryType" type="xs:QName" />
+  <xs:attribute name="Id" type="xs:ID" />
+  <xs:attribute name="Ref" type="xs:IDREF" />
+</xs:schema>
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/TableLoadWorker.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/TableLoadWorker.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/TableLoadWorker.cs	(revision 5296)
@@ -0,0 +1,65 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.BackgroundProcessing;
+using System.Data;
+using HeuristicLab.OKB.Client;
+using HeuristicLab.OKB.Cockpit.Admin.OKBTables;
+
+namespace HeuristicLab.OKB.Cockpit.Admin {
+
+  public class TableLoadWorker : ObservableBackgroundWorker {
+
+    public string TableName { get; private set; }
+    public DataTable Table { get; private set; }
+    public Dictionary<string, DataTable> ForeignKeys { get; private set; }
+    private bool loadForeignKeys;
+
+    public TableLoadWorker(string tableName, bool loadForeignKeys)
+      : base("loading " + tableName) {
+      WorkerReportsProgress = true;
+      WorkerSupportsCancellation = true;
+      TableName = tableName;
+      this.loadForeignKeys = loadForeignKeys;
+      DoWork += (s, a) => {
+        Table = loadTable(TableName);
+        if (loadForeignKeys)
+          ForeignKeys = LoadForeignKeys();
+      };
+    }
+
+    private DataTable loadTable(string tableName) {
+      ReportProgress(0);
+      TableServiceClient client = ClientFactory.Create<TableServiceClient, ITableService>();
+      int nRows = 0;
+      DataTable table = client.PrepareDataTable(out nRows, tableName);
+      int stepSize = Math.Max(1, Math.Min(nRows / 100, 200));
+      if (nRows > 0) {
+        DataTable newRows = new DataTable();
+        do {
+          newRows = client.GetNextRows(stepSize);
+          table.Merge(newRows);
+          ReportProgress(100 * table.Rows.Count / nRows);
+        } while (!CancellationPending && newRows.Rows.Count > 0);
+      }
+      client.FinishFetchingRows();
+      client.Close();
+      return table;
+    }
+
+    private Dictionary<string, DataTable> LoadForeignKeys() {
+      var fk = new Dictionary<string, DataTable>();
+      Name = "loading referenced tables";
+      var foreignKeyColumns = Table.Columns.Cast<DataColumn>()
+        .Where(c => c.ColumnName.EndsWith("Id") && c.ColumnName.Length > 2);
+      foreach (var column in foreignKeyColumns) {
+        string tableName = column.ColumnName.Substring(0, column.ColumnName.Length - 2);
+        DataTable referencedTable = loadTable(tableName);
+        fk[column.ColumnName] = referencedTable;
+      }
+      return fk;
+    }
+  }
+}
+
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/TableOverview.xaml
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/TableOverview.xaml	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/TableOverview.xaml	(revision 5296)
@@ -0,0 +1,93 @@
+﻿<UserControl xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+             x:Class="HeuristicLab.OKB.Cockpit.Admin.TableOverview">
+
+  <UserControl.Resources>
+    <Style TargetType="{x:Type Polyline}">
+      <Setter Property="Stretch" Value="Fill"/>
+      <Setter Property="Stroke" Value="DarkGray"/>
+      <Setter Property="StrokeThickness" Value="3"/>
+      <Setter Property="StrokeDashArray" Value="2.3 1"/>
+      <Setter Property="StrokeEndLineCap" Value="Round"/>
+      <Setter Property="HorizontalAlignment" Value="Stretch"/>
+      <Setter Property="VerticalAlignment" Value="Stretch"/>
+    </Style>
+    <Style TargetType="{x:Type Button}" BasedOn="{StaticResource {x:Static ToolBar.ButtonStyleKey}}">
+      <Setter Property="HorizontalAlignment" Value="Stretch"/>
+      <Setter Property="VerticalAlignment" Value="Stretch"/>
+      <EventSetter Event="Click" Handler="OnClick"/>
+    </Style>
+  </UserControl.Resources>
+
+  <Grid TextBlock.TextAlignment="Center">
+    <Grid.RowDefinitions>
+      <RowDefinition Height="3*" MinHeight="0" />
+      <RowDefinition Height="Auto"/>
+      <RowDefinition/>
+      <RowDefinition Height="Auto" />
+      <RowDefinition/>
+      <RowDefinition Height="Auto"/>
+      <RowDefinition Height="3*" MinHeight="0"/>
+    </Grid.RowDefinitions>
+    <Grid.ColumnDefinitions>
+      <ColumnDefinition Width="3*" MinWidth="0"/>
+      <ColumnDefinition Width="Auto"/>
+      <ColumnDefinition/>
+      <ColumnDefinition Width="Auto"/>
+      <ColumnDefinition/>
+      <ColumnDefinition Width="Auto"/>
+      <ColumnDefinition/>
+      <ColumnDefinition Width="Auto"/>
+      <ColumnDefinition Width="3*" MinWidth="0"/>
+    </Grid.ColumnDefinitions>
+
+    <Button Grid.Row="1" Grid.Column="1" Name="AlgorithmClass">
+      <StackPanel>
+        <TextBlock>Algorithm</TextBlock>
+        <TextBlock>Class</TextBlock>
+      </StackPanel>
+    </Button>
+    <Button Grid.Row="1" Grid.Column="3" Name="Project">Project</Button>
+    <Button Grid.Row="1" Grid.Column="5" Name="ProblemClass">
+      <StackPanel>
+        <TextBlock>Problem</TextBlock>
+        <TextBlock>Class</TextBlock>
+      </StackPanel>
+    </Button>
+
+    <Button Grid.Row="3" Grid.Column="1" Name="Algorithm">Algorithm</Button>
+    <Button Grid.Row="3" Grid.Column="3" Name="Platform">Platform</Button>
+    <Button Grid.Row="3" Grid.Column="5" Name="Problem">Problem</Button>
+    <Button Grid.Row="3" Grid.Column="7" Name="SolutionRepresentation">
+      <StackPanel>
+        <TextBlock>Solution</TextBlock>
+        <TextBlock>Representation</TextBlock>
+      </StackPanel>
+    </Button>
+
+    <Button Grid.Row="5" Grid.Column="1" Name="Result">Result</Button>
+    <Button Grid.Row="5" Grid.Column="3" Name="Parameter">Parameter</Button>
+    <Button Grid.Row="5" Grid.Column="5" Name="ProblemCharacteristic">
+      <StackPanel>
+        <TextBlock>Problem</TextBlock>
+        <TextBlock>Characteristic</TextBlock>
+      </StackPanel>
+    </Button>
+
+    <Polyline Grid.Row="2" Grid.Column="1" Points="1,0 1,1" MinHeight="20"/>
+    <Polyline Grid.Row="2" Grid.Column="5" Points="1,0 1,1" MinHeight="20"/>
+
+    <Button Name="Algorithm_Result" Grid.Row="4" Grid.Column="1"><Polyline Points="1,0 1,1" MinHeight="20"/></Button>
+    <Polyline Grid.Row="4" Grid.Column="5" Points="1,0 1,1" MinHeight="20"/>
+    <StackPanel Grid.Row="4" Grid.Column="5" Orientation="Horizontal" VerticalAlignment="Center" HorizontalAlignment="Center">
+      <Button Name="IntProblemCharacteristicValue" Grid.Row="4" Grid.Column="5" Content="I"/>
+      <Button Name="FloatProblemCharacteristicValue" Grid.Row="4" Grid.Column="5" Content="F"/>
+      <Button Name="CharProblemCharacteristicValue" Grid.Row="4" Grid.Column="5" Content="C"/>
+    </StackPanel>
+    <Polyline Grid.Row="3" Grid.Column="2" Points="0,1 1,1" MinWidth="40"/>
+    <Polyline Grid.Row="3" Grid.Column="4" Points="0,1 1,1" MinWidth="40"/>
+    <Polyline Grid.Row="3" Grid.Column="6" Points="0,1 1,1" MinWidth="40"/>
+    <Button Name="Algorithm_Parameter" Grid.Row="4" Grid.Column="2"><Polyline Points="0,0 1,1"/></Button>
+    <Button Name="Problem_Parameter" Grid.Row="4" Grid.Column="4"><Polyline Points="0,1 1,0"/></Button>
+  </Grid>
+</UserControl>
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/TableOverview.xaml.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/TableOverview.xaml.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/TableOverview.xaml.cs	(revision 5296)
@@ -0,0 +1,83 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Windows.Controls;
+using HeuristicLab.BackgroundProcessing;
+using System.Windows;
+using System.IO.Compression;
+using System.IO;
+using HeuristicLab.MainForm.WPF;
+using HeuristicLab.MainForm;
+using System.Windows.Input;
+
+namespace HeuristicLab.OKB.Cockpit.Admin {
+  public partial class TableOverview : UserControl, IAutoView, IOKBCockpitItem {
+
+    public TableOverview() {
+      InitializeComponent();
+    }
+
+    protected void OnClick(object sender, RoutedEventArgs args) {
+      string tableName = ((Button)args.Source).Name;
+      TableView tableView = null;
+      if (Keyboard.Modifiers != ModifierKeys.Shift) {
+       tableView = (TableView)
+        MainFormManager.MainForm.Views
+        .FirstOrDefault(v => v is TableView && ((TableView)v).TableName == tableName);
+      }
+      if (tableView == null)
+        tableView = new TableView() { TableName = tableName };
+      tableView.Show();
+    }
+
+    #region IView Members
+
+    public string Caption {
+      get { return "OKB Admin Main View"; }
+      set { }
+    }
+
+    public event EventHandler CaptionChanged;
+
+    public event EventHandler Changed;
+
+    public virtual void Close() {
+      MainFormManager.GetMainForm<WPFMainFormBase>().CloseView(this);
+      IsShown = false;
+    }
+
+    public void Hide() {
+      MainFormManager.GetMainForm<WPFMainFormBase>().HideView(this);
+      IsShown = false;
+    }
+
+    public bool IsShown { get; protected set; }
+
+    private bool readOnly = false;
+    public bool ReadOnly {
+      get {
+        return readOnly;
+      }
+      set {
+        if (value == readOnly) return;
+        readOnly = value;
+        OnReadOnlyChanged();
+      }
+    }
+    public event EventHandler ReadOnlyChanged;
+    protected void OnReadOnlyChanged() {
+      EventHandler handler = ReadOnlyChanged;
+      if (handler != null)
+        handler(this, EventArgs.Empty);
+    }
+
+    public void Show() {
+      MainFormManager.GetMainForm<WPFMainFormBase>().ShowView(this);
+      IsShown = true;
+    }
+
+
+    #endregion
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/TableView.xaml
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/TableView.xaml	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/TableView.xaml	(revision 5296)
@@ -0,0 +1,46 @@
+﻿<UserControl xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+             xmlns:dg="clr-namespace:Microsoft.Windows.Controls;assembly=WPFToolkit"
+             xmlns:dgp="clr-namespace:Microsoft.Windows.Controls.Primitives;assembly=WPFToolkit"
+             x:Class="HeuristicLab.OKB.Cockpit.Admin.TableView">
+  <UserControl.InputBindings>
+    <KeyBinding Key="S" Modifiers="Control" Command="ApplicationCommands.Save" />
+  </UserControl.InputBindings>
+  <UserControl.CommandBindings>
+    <CommandBinding Command="ApplicationCommands.Save"
+                    Executed="CommandBinding_Executed"/>
+  </UserControl.CommandBindings>
+  <DockPanel>
+    <TextBlock Name="TableNameTextBlock" DockPanel.Dock="Top"/>
+    <StackPanel DockPanel.Dock="Bottom" Orientation="Horizontal">
+      <Button Padding="10 0 10 0" Margin="0 0 5 0" Click="OnSave">Save</Button>
+      <Button Padding="10 0 10 0" Click="OnLoad">Reload</Button>
+    </StackPanel>
+    <dg:DataGrid Name="Data" MinWidth="300" MinHeight="100"
+                 CanUserAddRows="True" CanUserDeleteRows="True"
+                 CanUserReorderColumns="True" CanUserResizeColumns="True" CanUserResizeRows="True" CanUserSortColumns="True"
+                 ClipboardCopyMode="IncludeHeader"
+                 HorizontalGridLinesBrush="LightGray" VerticalGridLinesBrush="LightGray"
+                 AlternationCount="2" AlternatingRowBackground="AliceBlue"
+                 AutoGeneratingColumn="OnAutoGeneratingColumn"
+                 SelectionUnit="CellOrRowHeader">
+      <dg:DataGrid.RowHeaderStyle>
+        <Style TargetType="{x:Type dgp:DataGridRowHeader}">
+          <Setter Property="Content" Value="{Binding Path=Id}"/>
+        </Style>
+      </dg:DataGrid.RowHeaderStyle>
+
+      <!-- demo data -->
+      <dg:DataGrid.Columns>
+        <dg:DataGridTextColumn Header="Id" IsReadOnly="True"/>
+        <dg:DataGridTextColumn Header="Name"  Binding="{Binding Path=Name}"/>
+        <dg:DataGridTextColumn Header="Description"  Binding="{Binding Path=Content}"/>
+      </dg:DataGrid.Columns>
+      <Button Name="Test">a simple test</Button>
+      <Button Name="Test2">another test</Button>
+      <Button Name="Test3">a simple test</Button>
+      <!-- /demo data -->
+
+    </dg:DataGrid>
+  </DockPanel>
+</UserControl>
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/TableView.xaml.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/TableView.xaml.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/TableView.xaml.cs	(revision 5296)
@@ -0,0 +1,213 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Windows.Controls;
+using HeuristicLab.BackgroundProcessing;
+using System.Windows;
+using System.IO.Compression;
+using System.IO;
+using HeuristicLab.MainForm.WPF;
+using HeuristicLab.MainForm;
+using System.ComponentModel;
+using System.Data;
+using System.Windows.Data;
+using Microsoft.Windows.Controls;
+using HeuristicLab.OKB.Client;
+using HeuristicLab.OKB.Cockpit.Admin.OKBTables;
+
+namespace HeuristicLab.OKB.Cockpit.Admin {
+
+  public partial class TableView : UserControl, IView, IOKBCockpitItem {
+
+    static DependencyProperty TableNameProperty =
+      DependencyProperty.Register("TableName", typeof(string), typeof(TableView),
+      new PropertyMetadata("<no table>"));
+
+    private DataTable table;
+    private Dictionary<string, DataTable> foreignKeys;
+
+    public TableView() {
+      InitializeComponent();
+      Data.Items.Clear();
+      Data.Columns.Clear();
+    }
+
+    public string TableName {
+      get {
+        return (string)GetValue(TableNameProperty);
+      }
+      set {
+        SetValue(TableNameProperty, value);
+      }
+    }
+
+    protected override void OnPropertyChanged(DependencyPropertyChangedEventArgs e) {
+      base.OnPropertyChanged(e);
+      if (e.Property == TableNameProperty) {
+        if (CaptionChanged != null)
+          CaptionChanged(this, new EventArgs());
+        OnLoad(this, new EventArgs());
+      }
+    }
+
+    #region IView Members
+
+    public string Caption {
+      get { return "Table View: " + TableName; }
+      set { throw new NotSupportedException(); }
+    }
+    public event EventHandler CaptionChanged;
+    public event EventHandler Changed;
+    public virtual void Close() {
+      MainFormManager.GetMainForm<WPFMainFormBase>().CloseView(this);
+      IsShown = false;
+    }
+
+    public void Hide() {
+      MainFormManager.GetMainForm<WPFMainFormBase>().HideView(this);
+      IsShown = false;
+    }
+
+    public bool IsShown { get; protected set; }
+
+    private bool readOnly = false;
+    public bool ReadOnly {
+      get {
+        return readOnly;
+      }
+      set {
+        if (value == readOnly) return;
+        readOnly = value;
+        OnReadOnlyChanged();
+      }
+    }
+    public event EventHandler ReadOnlyChanged;
+    protected void OnReadOnlyChanged() {
+      EventHandler handler = ReadOnlyChanged;
+      if (handler != null)
+        handler(this, EventArgs.Empty);
+    }
+
+    public void Show() {
+      MainFormManager.GetMainForm<WPFMainFormBase>().ShowView(this);
+      IsShown = true;
+    }
+
+
+    #endregion
+
+    protected void OnLoad(object sender, EventArgs args) {
+      if (TableName == null) {
+        MessageBox.Show("No table name given", Caption);
+        return;
+      }
+      var loader = new TableLoadWorker(TableName, true);
+      loader.RunWorkerCompleted += (s, a) => {
+        if (loader.Table == null) {
+          MessageBox.Show("Table loading failed", Caption);
+          return;
+        }
+        foreignKeys = loader.ForeignKeys;
+        table = loader.Table;
+        table.AcceptChanges();
+        Data.ItemsSource = null;
+        Data.Items.Clear();
+        Data.Columns.Clear();
+        Data.DataContext = table;
+        Data.SetBinding(DataGrid.ItemsSourceProperty, new Binding());
+        Data.ContextMenu = null;
+        if (table.TableName == "Algorithm" || table.TableName == "Problem") {
+          MenuItem edit = new MenuItem() { Header = "Edit Operator Graph" };
+          edit.Click += OnEditOperatorGraphClicked;
+          Data.ContextMenu = new ContextMenu();
+          Data.ContextMenu.Items.Add(edit);
+        }
+      };
+      loader.RunWorkerAsync(TableName);
+    }
+
+    private string DataRowValueToString(object o) {
+      if (o == DBNull.Value)
+        return null;
+      return o as string;
+    }
+
+    protected void OnEditOperatorGraphClicked(object sender, RoutedEventArgs args) {
+      if (Data.SelectedCells.Count == 0)
+        return;
+      DataRowView view = Data.SelectedCells.First().Item as DataRowView;
+      if (view == null)
+        return;
+      DataRow row = view.Row;
+      if (row["Id"] == DBNull.Value) {
+        MessageBox.Show(string.Format("Cannot edit newly created {0} as it has no id yet."
+          + Environment.NewLine +
+          "upload your changes to the database first", table.TableName), Caption, MessageBoxButton.OK, MessageBoxImage.Error);
+        return;
+      }
+      if (table.TableName == "Problem")
+        MainFormManager.GetMainForm<CockpitMainWindow>().ShowView(new ProblemEditor() {
+          Problem = new OKBAdmin.Problem() {
+            Id = (int)row["Id"],
+            Name = (string)row["Name"],
+            Description = DataRowValueToString(row["Description"]),
+          }
+        });
+      else if (table.TableName == "Algorithm")
+        MainFormManager.GetMainForm<CockpitMainWindow>().ShowView(new AlgorithmEditor() {
+          Algorithm = new OKBAdmin.Algorithm() {
+            Id = (int)row["Id"],
+            Name = (string)row["Name"],
+            Description = DataRowValueToString(row["Description"]),
+          }
+        });
+    }
+
+    protected void OnSave(object sender, EventArgs args) {
+      var saver = new ObservableBackgroundWorker("uploading changes");
+      DataTable updatedRows = table.GetChanges(DataRowState.Added | DataRowState.Modified);
+      DataTable deletedRows = table.GetChanges(DataRowState.Deleted);
+      bool success = false;
+      saver.DoWork += (s, a) => {
+        TableServiceClient client = ClientFactory.Create<TableServiceClient, ITableService>();
+        if (updatedRows != null)
+          client.UpdateDataTable(updatedRows, (string)a.Argument);
+        if (deletedRows != null)
+          client.DeleteTableRows(
+            deletedRows.Rows.Cast<DataRow>()
+              .Select(r => (int)r["Id", DataRowVersion.Original]).ToList(),
+            (string)a.Argument);
+        success = true;
+      };
+      saver.RunWorkerCompleted += (s, a) => {
+        if (success) {
+          table.AcceptChanges();
+        }
+        OnLoad(sender, args);
+      };
+      saver.RunWorkerAsync(TableName);
+    }
+
+    protected void OnAutoGeneratingColumn(object source, DataGridAutoGeneratingColumnEventArgs args) {
+      if (args.Column.Header as string == "Id") {
+        args.Cancel = true;
+        return;
+      }
+      if (foreignKeys.ContainsKey(args.PropertyName)) {
+        DataTable referencedTable = foreignKeys[args.PropertyName];
+        args.Column = new DataGridComboBoxColumn() {
+          Header = referencedTable.TableName,
+          ItemsSource = referencedTable.DefaultView,
+          SelectedValuePath = "Id",
+          DisplayMemberPath = referencedTable.Columns.Contains("Name") ? "Name" : "ClrName",
+          SelectedValueBinding = new Binding(args.PropertyName),
+        };
+      }
+    }
+
+    private void CommandBinding_Executed(object sender, System.Windows.Input.ExecutedRoutedEventArgs e) {
+      OnSave(sender, e);
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/UpdateLocalInstallation.cmd
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/UpdateLocalInstallation.cmd	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/UpdateLocalInstallation.cmd	(revision 5296)
@@ -0,0 +1,8 @@
+SET target=C:\Program Files\HeuristicLab 3.3
+
+echo Copying OKB Cockpit Query Assembly
+copy "%ProjectDir%\%Outdir%\HeuristicLab.OKB.Cockpit.Admin-3.3.dll" "%target%"
+copy "%ProjectDir%\%Outdir%\WPFToolkit.dll" "%target%"
+echo ----------------------------
+echo Updating HeuristicLab 3.3.exe.config
+"%SolutionDir%ConfigMerger.exe" "%SolutionDir%ServiceClient.config" "%target%\HeuristicLab 3.3.exe.config"
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/app.config
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/app.config	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Admin/app.config	(revision 5296)
@@ -0,0 +1,77 @@
+﻿<?xml version="1.0" encoding="utf-8" ?>
+<configuration>
+    <system.serviceModel>
+        <bindings>
+            <netTcpBinding>
+                <binding name="NetTcpBinding_IAdminService" closeTimeout="00:01:00"
+                    openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
+                    transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions"
+                    hostNameComparisonMode="StrongWildcard" listenBacklog="10"
+                    maxBufferPoolSize="524288" maxBufferSize="65536" maxConnections="10"
+                    maxReceivedMessageSize="65536">
+                    <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
+                        maxBytesPerRead="4096" maxNameTableCharCount="16384" />
+                    <reliableSession ordered="true" inactivityTimeout="00:10:00"
+                        enabled="false" />
+                    <security mode="Message">
+                        <transport clientCredentialType="Windows" protectionLevel="EncryptAndSign" />
+                        <message clientCredentialType="UserName" algorithmSuite="Default" />
+                    </security>
+                </binding>
+                <binding name="NetTcpBinding_IDataService" closeTimeout="00:01:00"
+                    openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
+                    transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions"
+                    hostNameComparisonMode="StrongWildcard" listenBacklog="10"
+                    maxBufferPoolSize="524288" maxBufferSize="65536" maxConnections="10"
+                    maxReceivedMessageSize="65536">
+                    <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
+                        maxBytesPerRead="4096" maxNameTableCharCount="16384" />
+                    <reliableSession ordered="true" inactivityTimeout="00:10:00"
+                        enabled="false" />
+                    <security mode="Message">
+                        <transport clientCredentialType="Windows" protectionLevel="EncryptAndSign" />
+                        <message clientCredentialType="UserName" algorithmSuite="Default" />
+                    </security>
+                </binding>
+                <binding name="NetTcpBinding_ITableService" closeTimeout="00:01:00"
+                    openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
+                    transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions"
+                    hostNameComparisonMode="StrongWildcard" listenBacklog="10"
+                    maxBufferPoolSize="524288" maxBufferSize="65536" maxConnections="10"
+                    maxReceivedMessageSize="65536">
+                    <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
+                        maxBytesPerRead="4096" maxNameTableCharCount="16384" />
+                    <reliableSession ordered="true" inactivityTimeout="00:10:00"
+                        enabled="false" />
+                    <security mode="Message">
+                        <transport clientCredentialType="Windows" protectionLevel="EncryptAndSign" />
+                        <message clientCredentialType="UserName" algorithmSuite="Default" />
+                    </security>
+                </binding>
+            </netTcpBinding>
+        </bindings>
+        <client>
+            <endpoint address="net.tcp://localhost:8733/OKB-3.3/AdminService"
+                binding="netTcpBinding" bindingConfiguration="NetTcpBinding_IAdminService"
+                contract="OKBAdmin.IAdminService" name="NetTcpBinding_IAdminService">
+                <identity>
+                    <certificate encodedValue="AwAAAAEAAAAUAAAAD/AlkYJw/OUhl6D/9w8mjJBh39kgAAAAAQAAAPIBAAAwggHuMIIBW6ADAgECAhAdEzTisaf2sEZxrqYZfYtCMAkGBSsOAwIdBQAwFDESMBAGA1UEAxMJbG9jYWxob3N0MB4XDTEwMDgyMDIyMzIwOFoXDTM5MTIzMTIzNTk1OVowFDESMBAGA1UEAxMJbG9jYWxob3N0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDPkfCSLRX8/4F+Z4ys43yZ4MMzjB44cMakPz4Nri+mEB5n2z/0GFatCYzkI2f/nniWqVrBYjHkjsZy2EZioHu4wa99c1XEGJnFNDuNn6ESkfEyhyF4+OqKGnpK9HNrw7OWMuqn2oOh0iFd9fl6FTAm+Y0p3LP+38BuYzpCniqqdwIDAQABo0kwRzBFBgNVHQEEPjA8gBDvi8Rgio9v+mr58TiAvqF5oRYwFDESMBAGA1UEAxMJbG9jYWxob3N0ghAdEzTisaf2sEZxrqYZfYtCMAkGBSsOAwIdBQADgYEANdGlvHKeUptfNu9I0wgA5qjmVB+JDldOAkrfM0R+4IcVQ06y5K7P07uxQAV7+rhnDLgLyFJunUHgzbfjsjFy7vjwtoieXA5j0AYlm4AHR7dHt4HVgkIMYt8XOCqMw5jjFX91xJ89tC7mM9zYR48N9T5QSeMGo+f+JzybeLWxnNs=" />
+                </identity>
+            </endpoint>
+            <endpoint address="net.tcp://localhost:8733/OKB-3.3/DataService"
+                binding="netTcpBinding" bindingConfiguration="NetTcpBinding_IDataService"
+                contract="OKBData.IDataService" name="NetTcpBinding_IDataService">
+                <identity>
+                    <certificate encodedValue="AwAAAAEAAAAUAAAAD/AlkYJw/OUhl6D/9w8mjJBh39kgAAAAAQAAAPIBAAAwggHuMIIBW6ADAgECAhAdEzTisaf2sEZxrqYZfYtCMAkGBSsOAwIdBQAwFDESMBAGA1UEAxMJbG9jYWxob3N0MB4XDTEwMDgyMDIyMzIwOFoXDTM5MTIzMTIzNTk1OVowFDESMBAGA1UEAxMJbG9jYWxob3N0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDPkfCSLRX8/4F+Z4ys43yZ4MMzjB44cMakPz4Nri+mEB5n2z/0GFatCYzkI2f/nniWqVrBYjHkjsZy2EZioHu4wa99c1XEGJnFNDuNn6ESkfEyhyF4+OqKGnpK9HNrw7OWMuqn2oOh0iFd9fl6FTAm+Y0p3LP+38BuYzpCniqqdwIDAQABo0kwRzBFBgNVHQEEPjA8gBDvi8Rgio9v+mr58TiAvqF5oRYwFDESMBAGA1UEAxMJbG9jYWxob3N0ghAdEzTisaf2sEZxrqYZfYtCMAkGBSsOAwIdBQADgYEANdGlvHKeUptfNu9I0wgA5qjmVB+JDldOAkrfM0R+4IcVQ06y5K7P07uxQAV7+rhnDLgLyFJunUHgzbfjsjFy7vjwtoieXA5j0AYlm4AHR7dHt4HVgkIMYt8XOCqMw5jjFX91xJ89tC7mM9zYR48N9T5QSeMGo+f+JzybeLWxnNs=" />
+                </identity>
+            </endpoint>
+            <endpoint address="net.tcp://localhost:8733/OKB-3.3/TableService"
+                binding="netTcpBinding" bindingConfiguration="NetTcpBinding_ITableService"
+                contract="OKBTables.ITableService" name="NetTcpBinding_ITableService">
+                <identity>
+                    <certificate encodedValue="AwAAAAEAAAAUAAAAD/AlkYJw/OUhl6D/9w8mjJBh39kgAAAAAQAAAPIBAAAwggHuMIIBW6ADAgECAhAdEzTisaf2sEZxrqYZfYtCMAkGBSsOAwIdBQAwFDESMBAGA1UEAxMJbG9jYWxob3N0MB4XDTEwMDgyMDIyMzIwOFoXDTM5MTIzMTIzNTk1OVowFDESMBAGA1UEAxMJbG9jYWxob3N0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDPkfCSLRX8/4F+Z4ys43yZ4MMzjB44cMakPz4Nri+mEB5n2z/0GFatCYzkI2f/nniWqVrBYjHkjsZy2EZioHu4wa99c1XEGJnFNDuNn6ESkfEyhyF4+OqKGnpK9HNrw7OWMuqn2oOh0iFd9fl6FTAm+Y0p3LP+38BuYzpCniqqdwIDAQABo0kwRzBFBgNVHQEEPjA8gBDvi8Rgio9v+mr58TiAvqF5oRYwFDESMBAGA1UEAxMJbG9jYWxob3N0ghAdEzTisaf2sEZxrqYZfYtCMAkGBSsOAwIdBQADgYEANdGlvHKeUptfNu9I0wgA5qjmVB+JDldOAkrfM0R+4IcVQ06y5K7P07uxQAV7+rhnDLgLyFJunUHgzbfjsjFy7vjwtoieXA5j0AYlm4AHR7dHt4HVgkIMYt8XOCqMw5jjFX91xJ89tC7mM9zYR48N9T5QSeMGo+f+JzybeLWxnNs=" />
+                </identity>
+            </endpoint>
+        </client>
+    </system.serviceModel>
+</configuration>
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Query/HeuristicLab.OKB.Cockpit.Query-3.3.csproj
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Query/HeuristicLab.OKB.Cockpit.Query-3.3.csproj	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Query/HeuristicLab.OKB.Cockpit.Query-3.3.csproj	(revision 5296)
@@ -0,0 +1,261 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{AD85761D-D716-45D4-96E0-5AEF6BD3DE59}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.OKB.Cockpit.Query</RootNamespace>
+    <AssemblyName>HeuristicLab.OKB.Cockpit.Query-3.3</AssemblyName>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <FileUpgradeFlags>
+    </FileUpgradeFlags>
+    <OldToolsVersion>3.5</OldToolsVersion>
+    <UpgradeBackupLocation />
+    <PublishUrl>publish\</PublishUrl>
+    <Install>true</Install>
+    <InstallFrom>Disk</InstallFrom>
+    <UpdateEnabled>false</UpdateEnabled>
+    <UpdateMode>Foreground</UpdateMode>
+    <UpdateInterval>7</UpdateInterval>
+    <UpdateIntervalUnits>Days</UpdateIntervalUnits>
+    <UpdatePeriodically>false</UpdatePeriodically>
+    <UpdateRequired>false</UpdateRequired>
+    <MapFileExtensions>true</MapFileExtensions>
+    <ApplicationRevision>0</ApplicationRevision>
+    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
+    <IsWebBootstrapper>false</IsWebBootstrapper>
+    <UseApplicationTrust>false</UseApplicationTrust>
+    <BootstrapperEnabled>true</BootstrapperEnabled>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="HeuristicLab.BackgroundProcessing-3.3, Version=3.3.0.2050, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=x86">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.BackgroundProcessing-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.MainForm-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=x86">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.MainForm-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.PluginInfrastructure-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=x86">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.PluginInfrastructure-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="PresentationCore">
+      <RequiredTargetFramework>3.0</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="PresentationFramework">
+      <RequiredTargetFramework>3.0</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Core">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Runtime.Serialization">
+      <RequiredTargetFramework>3.0</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.ServiceModel">
+      <RequiredTargetFramework>3.0</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Xml.Linq">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data.DataSetExtensions">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+    <Reference Include="WindowsBase">
+      <RequiredTargetFramework>3.0</RequiredTargetFramework>
+    </Reference>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="app.config" />
+    <None Include="HeuristicLabOkbCockpitQueryPlugin.cs.frame" />
+    <Compile Include="HeuristicLabOkbCockpitQueryPlugin.cs" />
+    <Compile Include="ListFormatter.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <None Include="Properties\AssemblyInfo.frame" />
+    <Compile Include="RunView.xaml.cs">
+      <DependentUpon>RunView.xaml</DependentUpon>
+    </Compile>
+    <Compile Include="RunView\AttributeSelector.cs" />
+    <Compile Include="RunView\AttributeSelectorWindow.xaml.cs" />
+    <Compile Include="Service References\OKBQuery\Reference.cs">
+      <AutoGen>True</AutoGen>
+      <DesignTime>True</DesignTime>
+      <DependentUpon>Reference.svcmap</DependentUpon>
+    </Compile>
+    <Compile Include="TypeNameConverter.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <Page Include="RunView.xaml">
+      <Generator>MSBuild:Compile</Generator>
+      <SubType>Designer</SubType>
+      <Generator>MSBuild:Compile</Generator>
+      <SubType>Designer</SubType>
+    </Page>
+  </ItemGroup>
+  <ItemGroup>
+    <Page Include="RunView\AttributeSelectorWindow.xaml">
+      <Generator>MSBuild:Compile</Generator>
+      <SubType>Designer</SubType>
+      <Generator>MSBuild:Compile</Generator>
+      <SubType>Designer</SubType>
+    </Page>
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\HeuristicLab.MainForm.WPF\HeuristicLab.MainForm.WPF-3.3.csproj">
+      <Project>{1DBC4D60-0064-4A53-B48C-63D144A67B07}</Project>
+      <Name>HeuristicLab.MainForm.WPF-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.OKB.Client\HeuristicLab.OKB.Client-3.3.csproj">
+      <Project>{B157FAB7-9B6D-4BAE-ACF2-C6FB7D22EBBD}</Project>
+      <Name>HeuristicLab.OKB.Client-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.OKB.Cockpit\HeuristicLab.OKB.Cockpit-3.3.csproj">
+      <Project>{52567721-66A9-4411-9ED6-48DE37732868}</Project>
+      <Name>HeuristicLab.OKB.Cockpit-3.3</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <WCFMetadata Include="Service References\" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Properties\DataSources\System.Data.DataTable.datasource" />
+    <None Include="Service References\OKBQuery\Arrays.xsd">
+      <SubType>Designer</SubType>
+    </None>
+    <None Include="Service References\OKBQuery\HeuristicLab.OKB.Cockpit.Query.OKBQuery.AttributeSelector.datasource">
+      <DependentUpon>Reference.svcmap</DependentUpon>
+    </None>
+    <None Include="Service References\OKBQuery\HeuristicLab.Services.OKB.xsd">
+      <SubType>Designer</SubType>
+    </None>
+    <None Include="Service References\OKBQuery\service.wsdl" />
+    <None Include="Service References\OKBQuery\service.xsd">
+      <SubType>Designer</SubType>
+    </None>
+    <None Include="Service References\OKBQuery\service1.xsd">
+      <SubType>Designer</SubType>
+    </None>
+    <None Include="Service References\OKBQuery\System.Data.xsd">
+      <SubType>Designer</SubType>
+    </None>
+    <None Include="UpdateLocalInstallation.cmd" />
+  </ItemGroup>
+  <ItemGroup>
+    <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
+      <Install>false</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.5 SP1</ProductName>
+      <Install>true</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
+      <Visible>False</Visible>
+      <ProductName>Windows Installer 3.1</ProductName>
+      <Install>true</Install>
+    </BootstrapperPackage>
+  </ItemGroup>
+  <ItemGroup>
+    <WCFMetadataStorage Include="Service References\OKBQuery\" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Service References\OKBQuery\configuration91.svcinfo" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Service References\OKBQuery\configuration.svcinfo" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Service References\OKBQuery\Reference.svcmap">
+      <Generator>WCF Proxy Generator</Generator>
+      <LastGenOutput>Reference.cs</LastGenOutput>
+    </None>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+SubWCRev "%25ProjectDir%25\" "%25ProjectDir%25\Properties\AssemblyInfo.frame" "%25ProjectDir%25\Properties\AssemblyInfo.cs"
+SubWCRev "%25ProjectDir%25\" "%25ProjectDir%25\HeuristicLabOKBCockpitQueryPlugin.cs.frame" "%25ProjectDir%25\HeuristicLabOKBCockpitQueryPlugin.cs"</PreBuildEvent>
+    <PostBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call UpdateLocalInstallation.cmd</PostBuildEvent>
+  </PropertyGroup>
+</Project>
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Query/HeuristicLabOkbCockpitQueryPlugin.cs.frame
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Query/HeuristicLabOkbCockpitQueryPlugin.cs.frame	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Query/HeuristicLabOkbCockpitQueryPlugin.cs.frame	(revision 5296)
@@ -0,0 +1,12 @@
+﻿using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.OKB.Cockpit.Query {
+
+  [Plugin("HeuristicLab.OKB.Cockpit.Query", "3.3.0.$WCREV$")]
+  [PluginFile("HeuristicLab.OKB.Cockpit.Query-3.3.dll", PluginFileType.Assembly)]
+  [PluginDependency("HeuristicLab.MainForm", "3.3")]
+  [PluginDependency("HeuristicLab.MainForm.WPF", "3.3")]
+  [PluginDependency("HeuristicLab.OKB.Cockpit", "3.3")]
+  [PluginDependency("HeuristicLab.BackgroundProcessing", "3.3")]
+  public class HeuristicLabOkbCockpitQueryPlugin : PluginBase {}
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Query/ListFormatter.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Query/ListFormatter.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Query/ListFormatter.cs	(revision 5296)
@@ -0,0 +1,38 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Windows.Data;
+using System.Windows;
+using System.Collections;
+using System.Text.RegularExpressions;
+
+namespace HeuristicLab.OKB.Cockpit.Query {
+  public class ListFormatter : IValueConverter {
+
+    private Regex separator = new Regex(@"\s*,\s*");
+    public Regex Separator {
+      get {
+        return separator;
+      }
+      set {
+        separator = value;
+      }
+    }
+
+    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) {
+      IList lst = value as IList;
+      if (lst == null)
+        return value;
+      return string.Join(", ", lst.Cast<object>().Select(v => v.ToString()).ToArray());
+    }
+
+    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) {
+      string s = value as string;
+      if (string.IsNullOrEmpty(s))
+        return null;
+      return separator.Split((string)value).Cast<object>().ToList();
+    }
+
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Query/Properties/AssemblyInfo.frame
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Query/Properties/AssemblyInfo.frame	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Query/Properties/AssemblyInfo.frame	(revision 5296)
@@ -0,0 +1,36 @@
+﻿using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.OKB.Cockpit.Query")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("Microsoft")]
+[assembly: AssemblyProduct("HeuristicLab.OKB.Cockpit.Query")]
+[assembly: AssemblyCopyright("Copyright © Microsoft 2010")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components.  If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("6ad5ca72-e3a2-4519-886d-631441c20bad")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("3.3.0.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.0.$WCREV$")]
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Query/Properties/DataSources/System.Data.DataTable.datasource
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Query/Properties/DataSources/System.Data.DataTable.datasource	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Query/Properties/DataSources/System.Data.DataTable.datasource	(revision 5296)
@@ -0,0 +1,10 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<!--
+    This file is automatically generated by Visual Studio .Net. It is
+    used to store generic object data source configuration information.
+    Renaming the file extension or editing the content of this file may
+    cause the file to be unrecognizable by the program.
+-->
+<GenericObjectDataSource DisplayName="DataTable" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
+   <TypeInfo>System.Data.DataTable, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</TypeInfo>
+</GenericObjectDataSource>
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Query/RunView.xaml
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Query/RunView.xaml	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Query/RunView.xaml	(revision 5296)
@@ -0,0 +1,73 @@
+﻿<UserControl xmlns="http://schemas.microsoft.com/netfx/2007/xaml/presentation"
+             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+             x:Class="HeuristicLab.OKB.Cockpit.Query.RunView">
+  <UserControl.Resources>
+    <Style x:Key="gridViewHeaderStyle" TargetType="{x:Type GridViewColumnHeader}">
+      <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
+    </Style>
+    <DataTemplate x:Key="gridViewHeaderTemplate">
+      <DataTemplate.Triggers>
+        <DataTrigger Binding="{Binding Path=IsValid}" Value="False">
+          <Setter Property="TextBlock.Foreground" Value="Red"/>
+        </DataTrigger>
+      </DataTemplate.Triggers>
+      <StackPanel ToolTip="{Binding}">
+        <StackPanel.ContextMenu>
+          <ContextMenu MenuItem.Click="ContextMenuClicked" Tag="{Binding}">
+            <MenuItem Name="ConfigureItem" Header="Configure Column"/>
+            <MenuItem Name="RemoveItem" Header="Remove Column"/>
+          </ContextMenu>
+        </StackPanel.ContextMenu>
+        <TextBlock Text="{Binding Path=TableName}" Grid.Row="0"/>
+        <Separator Grid.Row="1"/>
+        <TextBlock Text="{Binding Path=FieldName}" Grid.Row="2"/>
+      </StackPanel>
+    </DataTemplate>
+  </UserControl.Resources>
+
+  <DockPanel>
+
+    <Grid DockPanel.Dock="Bottom">
+      <Grid.RowDefinitions>
+        <RowDefinition/>
+      </Grid.RowDefinitions>
+      <Grid.ColumnDefinitions>
+        <ColumnDefinition Width="Auto"/>
+        <ColumnDefinition Width="*"/>
+        <ColumnDefinition Width="Auto"/>
+      </Grid.ColumnDefinitions>
+      <StackPanel Orientation="Horizontal" Grid.Column="0">
+        <Button Click="OnAddClicked" Margin="8 8 4 8">Add Column</Button>
+        <Button Click="OnCopyClicked" Margin="4 8 4 8">Copy</Button>
+      </StackPanel>
+      <StackPanel Grid.Column="1" HorizontalAlignment="Center" VerticalAlignment="Center">
+        <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center">
+          <Run>#Runs:</Run>
+          <Run Name="NrOfRunsLabel"/>
+        </TextBlock>
+        <TextBlock Name="ErrorMessages" Foreground="Red"/>
+      </StackPanel>
+      <StackPanel Orientation="Horizontal" Grid.Column="2">
+        <Button Name="CheckButton" Click="OnCheckClicked" Margin="8 8 4 8">Check</Button>
+        <Button Name="UpdateButton" Click="OnUpdateClicked" Margin="4 8 8 8">Update</Button>
+      </StackPanel>
+    </Grid>
+
+
+    <ListView Name="Runs" MinWidth="400" MinHeight="200">
+      <ListView.View>
+        <GridView ColumnHeaderTemplate="{StaticResource gridViewHeaderTemplate}"
+                  ColumnHeaderContainerStyle="{StaticResource gridViewHeaderStyle}">
+        </GridView>
+      </ListView.View>
+      <ListView.ContextMenu>
+        <ContextMenu>
+          <MenuItem Header="Add Column" Click="OnAddClicked"/>
+        </ContextMenu>
+      </ListView.ContextMenu>
+    </ListView>
+
+
+
+  </DockPanel>
+</UserControl>
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Query/RunView.xaml.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Query/RunView.xaml.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Query/RunView.xaml.cs	(revision 5296)
@@ -0,0 +1,317 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Data;
+using System.Windows.Controls;
+using System.Windows.Data;
+using HeuristicLab.BackgroundProcessing;
+using System.ComponentModel;
+using System.Windows;
+using System.IO;
+using System.Threading;
+using System.Collections.Specialized;
+using HeuristicLab.MainForm.WPF;
+using HeuristicLab.OKB.Cockpit.Query.OKBQuery;
+using HeuristicLab.MainForm;
+using HeuristicLab.OKB.Client;
+
+namespace HeuristicLab.OKB.Cockpit.Query {
+
+  public partial class RunView : UserControl, IAutoView, IOKBCockpitItem {
+
+    private object selectorRefreshLock = new object();
+    private AttributeSelectors attributeSelectors;
+    private DataTable runTable;
+    private List<AttributeSelector> selectors = null;
+    private ManualResetEvent selectorsInitialized = new ManualResetEvent(false);
+
+    public RunView() {
+      InitializeComponent();
+      attributeSelectors = new AttributeSelectors();
+      GridView view = (GridView)Runs.View;
+      attributeSelectors.CollectionChanged += (sender, args) => {
+        if (args.Action == NotifyCollectionChangedAction.Add) {
+          foreach (AttributeSelector selector in args.NewItems) {
+            GridViewColumn column = new GridViewColumn() {
+              Header = selector,
+              DisplayMemberBinding = new Binding(selector.ColumnName),
+            };
+            view.Columns.Add(column);
+            selector.PropertyChanged += (s, a) => {
+              if (a.PropertyName == "ColumnName") {
+                column.DisplayMemberBinding = new Binding(selector.ColumnName);
+              }
+              Validate();
+            };
+          }
+        } else if (args.Action == NotifyCollectionChangedAction.Remove) {
+          foreach (AttributeSelector selector in args.OldItems) {
+            view.Columns.Remove(view.Columns.First(i => i.Header == selector));
+          }
+        }
+      };
+      attributeSelectors.Add(new AttributeSelector("Run", "Id", typeof(int)));
+      attributeSelectors.Add(new AttributeSelector("Run", "FinishedDate", typeof(DateTime)));
+      attributeSelectors.Add(new AttributeSelector("Algorithm", "Name", typeof(string)));
+      attributeSelectors.Add(new AttributeSelector("Problem", "Name", typeof(string)));
+      attributeSelectors.Add(new AttributeSelector("SolutionRepresentation", "Name", typeof(string)));
+      RefreshSelectors();
+    }
+
+    #region IView Members
+
+    public string Caption {
+      get { return "Run View"; }
+      set { throw new NotSupportedException(); }
+    }
+
+    public event EventHandler CaptionChanged;
+
+    public event EventHandler Changed;
+
+    protected void OnChanged() {
+      EventHandler handler = CaptionChanged;
+      if (handler != null)
+        handler(this, EventArgs.Empty);
+    }
+
+    public virtual void Close() {
+      MainFormManager.GetMainForm<WPFMainFormBase>().CloseView(this);
+      IsShown = false;
+    }
+
+    public void Hide() {
+      MainFormManager.GetMainForm<WPFMainFormBase>().HideView(this);
+      IsShown = false;
+    }
+
+    public bool IsShown { get; protected set; }
+
+    private bool readOnly = false;
+    public bool ReadOnly {
+      get {
+        return readOnly;
+      }
+      set {
+        if (value == readOnly) return;
+        readOnly = value;
+        OnReadOnlyChanged();
+      }
+    }
+    public event EventHandler ReadOnlyChanged;
+    protected void OnReadOnlyChanged() {
+      EventHandler handler = ReadOnlyChanged;
+      if (handler != null)
+        handler(this, EventArgs.Empty);
+    }
+
+    public void Show() {
+      MainFormManager.GetMainForm<WPFMainFormBase>().ShowView(this);
+      IsShown = true;
+    }
+
+    #endregion
+
+    protected void OnAddClicked(object sender, EventArgs args) {
+      AddItem();
+    }
+
+    protected void OnCheckClicked(object sender, EventArgs args) {
+      var loader = new ObservableBackgroundWorker("Checking Runs");
+      int? count = null;
+      bool failed = false;
+      loader.DoWork += (snd, arg) => {
+        try {
+          QueryServiceClient client = ClientFactory.Create<QueryServiceClient, IQueryService>();
+          client.PrepareQuery(attributeSelectors.ToList());
+          count = client.GetCount();
+          client.Terminate();
+          client.Close();
+        } catch {
+          failed = true;
+        }
+      };
+      loader.RunWorkerCompleted += (snd, arg) => {
+        if (failed) {
+          NrOfRunsLabel.Text = "?";
+          MessageBox.Show("Checking runs failed.", Caption);
+        } else {
+          NrOfRunsLabel.Text = count.ToString();
+        }
+      };
+      loader.RunWorkerAsync();
+    }
+
+
+    private void RefreshSelectors() {
+      ObservableBackgroundWorker loader = new ObservableBackgroundWorker("Fetching DB schema");
+      bool failed = false;
+      loader.DoWork += (s, a) => {
+        try {
+          QueryServiceClient client = ClientFactory.Create<QueryServiceClient, IQueryService>();
+          selectors = client.GetAllAttributeSelectors();
+        } catch {
+          failed = true;
+        } finally {
+          selectorsInitialized.Set();
+        }
+      };
+      loader.RunWorkerCompleted += (s, a) => {
+        if (failed) {
+          if (MessageBox.Show(
+                "Could not fetch DB Schema. Retry?", Caption,
+                MessageBoxButton.OKCancel) == MessageBoxResult.OK) {
+            selectorsInitialized.Reset();
+            RefreshSelectors();
+          }
+        }
+      };
+      loader.RunWorkerAsync();
+    }
+
+    protected void AddItem() {
+      BackgroundWorker waiter = new BackgroundWorker();
+      waiter.DoWork += (s, a) => selectorsInitialized.WaitOne();
+      waiter.RunWorkerCompleted += (s, a) => {
+        if (!VerifySelectors())
+          return;
+        var selector = new AttributeSelectorWindow(selectors) {
+          Owner = MainFormManager.GetMainForm<CockpitMainWindow>(),
+        };
+        if (selector.ShowDialog() == true) {
+          attributeSelectors.Add(selector.AttributeSelector);
+        }
+      };
+      waiter.RunWorkerAsync();
+    }
+
+    private bool VerifySelectors() {
+      if (selectors == null &&
+          MessageBox.Show(
+            "Schema information not available. Retry?",
+            this.Caption, MessageBoxButton.OKCancel) == MessageBoxResult.OK) {
+        selectorsInitialized.Reset();
+        RefreshSelectors();
+        return false;
+      }
+      return true;
+    }
+
+    protected void OnUpdateClicked(object sender, EventArgs args) {
+      var loader = new ObservableBackgroundWorker("Preparing Query") {
+        WorkerReportsProgress = true,
+        WorkerSupportsCancellation = true,
+      };
+      int total = 0;
+      loader.DoWork += (snd, arg) => {
+        loader.ReportProgress(0);
+        QueryServiceClient client = ClientFactory.Create<QueryServiceClient, IQueryService>();
+        runTable = client.PrepareQuery(attributeSelectors.ToList());
+        loader.ReportProgress(50);
+        total = client.GetCount();
+        int stepSize = Math.Max(1, Math.Min(total / 100, 100));
+        loader.ReportProgress(100);
+        Thread.Sleep(0);
+        loader.Name = "Loading Runs";
+        loader.ReportProgress(0);
+        if (total > 0) {
+          DataTable newRows = new DataTable();
+          do {
+            newRows = client.GetNextRows(stepSize);
+            runTable.Merge(newRows);
+            loader.ReportProgress(100 * runTable.Rows.Count / total);
+          } while (!loader.CancellationPending && newRows.Rows.Count > 0);
+        }
+        client.Terminate();
+        client.Close();
+        loader.ReportProgress(100);
+      };
+      loader.RunWorkerCompleted += (snd, arg) => {
+        if (arg.Error == null) {
+          NrOfRunsLabel.Text = total.ToString();
+          for (int i = 0; i < runTable.Columns.Count; i++) {
+            attributeSelectors[i].ColumnName = runTable.Columns[i].ColumnName;
+          }
+          Runs.DataContext = runTable;
+          Runs.SetBinding(ListView.ItemsSourceProperty, new Binding());
+        } else {
+          NrOfRunsLabel.Text = "?";
+        }
+      };
+      loader.RunWorkerAsync();
+    }
+
+    protected void ContextMenuClicked(object sender, RoutedEventArgs args) {
+      ContextMenu menu = sender as ContextMenu;
+      MenuItem item = args.Source as MenuItem;
+      AttributeSelector selector = menu.Tag as AttributeSelector;
+      if (menu == null || item == null || selector == null)
+        return;
+      if (item.Name == "ConfigureItem") {
+        BackgroundWorker waiter = new BackgroundWorker();
+        waiter.DoWork += (s, a) => selectorsInitialized.WaitOne();
+        waiter.RunWorkerCompleted += (s, a) => {
+          if (!VerifySelectors())
+            return;
+          var selectorView = new AttributeSelectorWindow(selectors) {
+            Owner = MainFormManager.GetMainForm<CockpitMainWindow>(),
+            AttributeSelector = selector,
+          };
+          selectorView.ShowDialog();
+        };
+        waiter.RunWorkerAsync();
+      } else if (item.Name == "RemoveItem") {
+        attributeSelectors.Remove(selector);
+      } else if (item.Name == "AddColumn") {
+        AddItem();
+      }
+    }
+
+    protected void OnCopyClicked(object sender, RoutedEventArgs args) {
+      ObservableBackgroundWorker copier = new ObservableBackgroundWorker("Copying to Clipboard") {
+        WorkerReportsProgress = true,
+        WorkerSupportsCancellation = true
+      };
+      StringBuilder sb = new StringBuilder();
+      copier.DoWork += (s, a) => {
+        sb.Append(
+          string.Join("\t",
+            runTable.Columns.Cast<DataColumn>()
+            .Select(c => c.ColumnName)
+            .ToArray()))
+          .Append('\n');
+        int i = 0;
+        int lastProgress = 0;
+        foreach (DataRow row in runTable.Rows) {
+          sb.Append(string.Join("\t", row.ItemArray.Select(v => v.ToString()).ToArray())).Append('\n');
+          i++;
+          int progress = 100 * i / runTable.Rows.Count;
+          if (progress > lastProgress) {
+            copier.ReportProgress(progress);
+            lastProgress = progress;
+            Thread.Sleep(0);
+          }
+          if (copier.CancellationPending) {
+            a.Cancel = true;
+            break;
+          }
+        }
+      };
+      copier.RunWorkerCompleted += (s, a) => {
+        if (!a.Cancelled)
+          Clipboard.SetText(sb.ToString(), TextDataFormat.Text);
+      };
+      copier.RunWorkerAsync();
+    }
+
+    protected void Validate() {
+      CheckButton.IsEnabled = UpdateButton.IsEnabled = attributeSelectors.All(s => s.IsValid);
+      if (CheckButton.IsEnabled) {
+        ErrorMessages.Text = "";
+      } else {
+        ErrorMessages.Text = "Invalid attribute selector configuration";
+      }
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Query/RunView/AttributeSelector.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Query/RunView/AttributeSelector.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Query/RunView/AttributeSelector.cs	(revision 5296)
@@ -0,0 +1,218 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Collections.ObjectModel;
+using System.Text.RegularExpressions;
+
+namespace HeuristicLab.OKB.Cockpit.Query.OKBQuery {
+
+  public class TypeConverter {
+
+    public static object Parse(object value, Type type) {
+      if (value == null)
+        return null;
+      string s = value as string;
+      if (s == null || type == null)
+        return value;
+      if (string.IsNullOrEmpty(s))
+        return null;
+      if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Nullable<>)) {
+        type = type.GetGenericArguments()[0];
+      }
+      try {
+        if (type == typeof(string)) return value;
+        if (type == typeof(int)) return int.Parse(s);
+        if (type == typeof(double)) return double.Parse(s);
+        if (type == typeof(DateTime)) return DateTime.Parse(s);
+        if (type == typeof(Guid)) return new Guid(s);
+      } catch (Exception x) {
+        throw new ArgumentException(string.Format(
+          "conversion of value '{0}' of type '{1}' to type '{2}' failed",
+          value, value.GetType(), type), x);
+      }
+      throw new ArgumentException(string.Format(
+        "conversion of value '{0}' of type '{1}' to type '{2}' is not supported",
+        value, value.GetType(), type));
+    }
+
+    public static List<object> ParseList(IEnumerable<object> values, Type type) {
+      if (values == null)
+        return null;
+      return values
+        .Select(v => Parse(v, type))
+        .ToList();
+    }
+  }
+
+
+  public partial class AttributeSelector {
+
+    public AttributeSelector() {
+      this.PropertyChanged += (s, a) => {
+        switch (a.PropertyName) {
+          case "IsValid":
+          case "ValidationErrorString":
+            break;
+          case "DataTypeName":
+            DataType = DataTypeName != null ? Type.GetType(DataTypeName) : null;
+            goto default;
+          case "TableName":
+          case "FieldName":
+            columnName = null;
+            OnPropertyChanged("ColumnName");
+            goto default;
+          default:
+            Validate();
+            break;
+        }
+      };
+      ValidationErrors.CollectionChanged += (s, a) => {
+        OnPropertyChanged("ValidationErrorString");
+      };
+    }
+
+    public AttributeSelector(string tableName, string fieldName, Type type)
+      : this() {
+      TableName = tableName;
+      FieldName = fieldName;
+      DataTypeName = type.FullName;
+    }
+
+    private Type dataType;
+    public Type DataType {
+      get {
+        return dataType;
+      }
+      private set {
+        if (value == dataType)
+          return;
+        dataType = value;
+        OnPropertyChanged("DataType");
+      }
+    }
+
+    protected void OnPropertyChanged(string propertyName) {
+      if (PropertyChanged != null)
+        PropertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+    }
+
+    private string columnName;
+    public string ColumnName {
+      get {
+        if (columnName == null)
+          columnName = TableName + "_" + FieldName;
+        return columnName;
+      }
+      set {
+        if (value == columnName)
+          return;
+        columnName = value;
+        OnPropertyChanged("ColumnName");
+      }
+    }
+
+    private bool isValid;
+    public bool IsValid {
+      get {
+        return isValid;
+      }
+      set {
+        if (isValid == value)
+          return;
+        isValid = value;
+        OnPropertyChanged("IsValid");
+      }
+    }
+
+    private ObservableCollection<string> ValidationErrors = new ObservableCollection<string>();
+    public string ValidationErrorString {
+      get {
+        return string.Join("\n", ValidationErrors.ToArray());
+      }
+    }
+
+    protected bool validating = false;
+    protected void Validate() {
+      if (validating)
+        return;
+      object minValue = MinValue;
+      object maxValue = MaxValue;
+      List<object> allowedValues = AllowedValues;
+      ValidationErrors.Clear();
+      IsValid =
+        ValidateNotNull(TableName, "table name") &
+        ValidateNotNull(FieldName, "field name") &
+        ValidateAndParse(ref minValue, "min value") &
+        ValidateAndParse(ref maxValue, "max value") &
+        ValidateAndParse(ref allowedValues, "allowed values");
+      if (IsValid) {
+        validating = true;
+        MinValue = minValue;
+        MaxValue = maxValue;
+        AllowedValues = allowedValues;
+        validating = false;
+      }
+    }
+
+    private bool ValidateNotNull(string value, string name) {
+      if (value == null) {
+        ValidationErrors.Add(String.Format("No {0}", name));
+        return false;
+      }
+      return true;
+    }
+
+
+    protected TypeNameConverter TypeNameConverter = new TypeNameConverter();
+    private bool ValidateAndParse(ref object value, string name) {
+      try {
+        value = TypeConverter.Parse(value, DataType);
+        return true;
+      } catch (Exception) {
+        ValidationErrors.Add(string.Format("Cannot parse {0}: '{1}' as {2}",
+          name, value, TypeNameConverter.FormatType(DataType)));
+        return false;
+      }
+    }
+
+    private bool ValidateAndParse(ref List<object> values, string name) {
+      try {
+        if (values != null)
+          values = values.Select(v => TypeConverter.Parse(v, DataType)).ToList();
+        return true;
+      } catch (Exception) {
+        ValidationErrors.Add(string.Format(
+          "Cannot parse {0}: [{1}] as list of {2}",
+          name,
+          string.Join(", ", values.Select(v => v.ToString()).ToArray()),
+          TypeNameConverter.FormatType(DataType)));
+        return false;
+      }
+    }
+
+    public override string ToString() {
+      StringBuilder sb = new StringBuilder()
+        .Append(TableName)
+        .Append('.')
+        .Append(FieldName);
+      if (MinValue != null)
+        sb.Append("\n >").Append(MinValue);
+      if (MaxValue != null)
+        sb.Append("\n <").Append(MaxValue);
+      if (AllowedValues != null)
+        sb.Append("\n in [")
+          .Append(string.Join(", ",
+                    AllowedValues
+                    .Select(v => v.ToString())
+                    .ToArray()))
+          .Append(']');
+      if (IsHidden)
+        return String.Format("({0})", sb.ToString());
+      else
+        return sb.ToString();
+    }
+  }
+
+  public class AttributeSelectors : ObservableCollection<AttributeSelector> { }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Query/RunView/AttributeSelectorWindow.xaml
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Query/RunView/AttributeSelectorWindow.xaml	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Query/RunView/AttributeSelectorWindow.xaml	(revision 5296)
@@ -0,0 +1,76 @@
+﻿<Window xmlns="http://schemas.microsoft.com/netfx/2007/xaml/presentation"
+        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+        xmlns:src="clr-namespace:HeuristicLab.OKB.Cockpit.Query"
+        x:Class="HeuristicLab.OKB.Cockpit.Query.AttributeSelectorWindow"
+        Title="Attribute Selector Configuration"
+        WindowStyle="ToolWindow"
+        WindowStartupLocation="CenterOwner"
+        SizeToContent="WidthAndHeight"
+        PreviewKeyDown="CloseOnEnterOrEscape"
+        >
+  <Window.Resources>
+    <Style TargetType="Button">
+      <Setter Property="Padding" Value="15 0 15 0"/>
+      <Setter Property="Margin" Value="2 0 2 0"/>
+    </Style>
+    <src:TypeNameConverter x:Key="TypeNameConverter"/>
+    <src:ListFormatter x:Key="ListFormatter"/>
+  </Window.Resources>
+  <Grid>
+    <Grid.ColumnDefinitions>
+      <ColumnDefinition Width="Auto"/>
+      <ColumnDefinition/>
+    </Grid.ColumnDefinitions>
+    <Grid.RowDefinitions>
+      <RowDefinition Height="Auto"/>
+      <RowDefinition Height="Auto"/>
+      <RowDefinition Height="Auto"/>
+      <RowDefinition Height="Auto"/>
+      <RowDefinition Height="Auto"/>
+      <RowDefinition Height="Auto"/>
+      <RowDefinition Height="Auto"/>
+      <RowDefinition/>
+      <RowDefinition Height="Auto"/>
+    </Grid.RowDefinitions>
+
+    <Label Grid.Column="0" Grid.Row="0">Table Name:</Label>
+    <ComboBox Name="TableName" Grid.Column="1" Grid.Row="0"
+              SelectedValue="{Binding Path=TableName, Mode=TwoWay}"/>
+
+    <Label Grid.Column="0" Grid.Row="1">Field Name:</Label>
+    <ComboBox Name="FieldName" Grid.Column="1" Grid.Row="1"
+              SelectedValue="{Binding Path=FieldName, Mode=TwoWay}"/>
+
+    <Label Grid.Column="0" Grid.Row="2">DataType:</Label>
+    <TextBlock Name="DataType" Grid.Column="1" Grid.Row="2"
+               Text="{Binding Path=DataType, Converter={StaticResource TypeNameConverter}}"/>
+
+    <Label Grid.Column="0" Grid.Row="3">Min Value:</Label>
+    <TextBox Name="MinValue" Grid.Column="1" Grid.Row="3"
+             Text="{Binding Path=MinValue, Mode=TwoWay}"/>
+
+    <Label Grid.Column="0" Grid.Row="4">Max Value:</Label>
+    <TextBox Name="MaxValue" Grid.Column="1" Grid.Row="4"
+             Text="{Binding Path=MaxValue, Mode=TwoWay}"/>
+
+    <Label Grid.Column="0" Grid.Row="5">Allowed Values:</Label>
+    <TextBox Name="AllowedValues" Grid.Column="1" Grid.Row="5"
+             Text="{Binding Path=AllowedValues, Mode=TwoWay, Converter={StaticResource ListFormatter}}"/>
+
+    <Label Grid.Column="0" Grid.Row="6">Hidden:</Label>
+    <CheckBox Name="Hidden" Grid.Column="1" Grid.Row="6" VerticalAlignment="Center" HorizontalAlignment="Center"/>
+
+    <TextBlock Grid.Row="7" Grid.ColumnSpan="2" VerticalAlignment="Center" HorizontalAlignment="Center"
+               Foreground="Red" Padding="15"
+               Text="{Binding Path=ValidationErrorString}"/>
+
+    <Border Grid.ColumnSpan="2" Grid.Row="8" Margin="5">
+      <DockPanel Grid.ColumnSpan="2" Grid.Row="7" LastChildFill="False">
+        <Button Name="CancelButton" Click="OnClick" DockPanel.Dock="Right">Cancel</Button>
+        <Button Name="OKButton" Click="OnClick" DockPanel.Dock="Right" IsEnabled="{Binding Path=IsValid}">OK</Button>
+        <Button Name="QueryButton" Click="OnClick" DockPanel.Dock="Left">Update Schema</Button>
+        <Rectangle Width="30"/>
+      </DockPanel>
+    </Border>
+  </Grid>
+</Window>
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Query/RunView/AttributeSelectorWindow.xaml.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Query/RunView/AttributeSelectorWindow.xaml.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Query/RunView/AttributeSelectorWindow.xaml.cs	(revision 5296)
@@ -0,0 +1,111 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Data;
+using System.Windows.Controls;
+using System.Windows.Data;
+using HeuristicLab.BackgroundProcessing;
+using System.ComponentModel;
+using System.Windows;
+using System.Threading;
+using System.Collections.ObjectModel;
+using System.Windows.Input;
+using HeuristicLab.OKB.Cockpit.Query.OKBQuery;
+using HeuristicLab.OKB.Client;
+
+namespace HeuristicLab.OKB.Cockpit.Query {
+
+  public partial class AttributeSelectorWindow : Window {
+
+    private Dictionary<string, Dictionary<string, AttributeSelector>> AttributeSelectorTemplates;
+
+    private AttributeSelector attributeSelector;
+    public AttributeSelector AttributeSelector {
+      get {
+        return attributeSelector;
+      }
+      set {
+        if (value == attributeSelector)
+          return;
+        attributeSelector = value;
+        this.DataContext = attributeSelector;
+      }
+    }
+
+    public AttributeSelectorWindow(IEnumerable<AttributeSelector> templates) {
+      InitializeComponent();
+      AttributeSelector = new AttributeSelector();
+      if (templates != null)
+        InitializeTemplates(templates);
+    }
+
+    protected virtual void OnClick(object sender, EventArgs args) {
+      if (sender == OKButton) {
+        DialogResult = true;
+        Close();
+      } else if (sender == CancelButton) {
+        DialogResult = false;
+        Close();
+      } else if (sender == QueryButton) {
+        RefreshAttributeSelectorList();
+        return;
+      }
+    }
+
+    private void InitializeTemplates(IEnumerable<AttributeSelector> templates) {
+      AttributeSelectorTemplates = new Dictionary<string, Dictionary<string, AttributeSelector>>();
+      foreach (var selector in templates) {
+        if (!AttributeSelectorTemplates.ContainsKey(selector.TableName))
+          AttributeSelectorTemplates.Add(selector.TableName, new Dictionary<string, AttributeSelector>());
+        AttributeSelectorTemplates[selector.TableName].Add(selector.FieldName, selector);
+      }
+      TableName.ItemsSource = AttributeSelectorTemplates.Keys;
+      TableName.SelectionChanged += (s, a) => {
+        FieldName.ItemsSource = AttributeSelectorTemplates[(string)TableName.SelectedItem].Keys;
+        FieldName.SelectedItem = null;
+      };
+      FieldName.SelectionChanged += (s, a) => {
+        if (TableName.SelectedItem == null || !AttributeSelectorTemplates.ContainsKey((string)TableName.SelectedItem) ||
+          FieldName.SelectedItem == null || !AttributeSelectorTemplates[(string)TableName.SelectedItem].ContainsKey((string)FieldName.SelectedItem))
+          AttributeSelector.DataTypeName = null;
+        else
+          AttributeSelector.DataTypeName = AttributeSelectorTemplates[(string)TableName.SelectedItem][(string)FieldName.SelectedItem].DataTypeName;
+      };
+    }
+
+    public void RefreshAttributeSelectorList() {
+      ObservableBackgroundWorker loader = new ObservableBackgroundWorker("Refreshing schema");
+      List<AttributeSelector> selectors = null;
+      loader.DoWork += (s, a) => {
+        try {
+          QueryServiceClient client = ClientFactory.Create<QueryServiceClient, IQueryService>();
+          selectors = client.GetAllAttributeSelectors();
+          client.Close();
+        } catch {
+        }
+      };
+      loader.RunWorkerCompleted += (s, a) => {
+        if (selectors != null)
+          InitializeTemplates(selectors);
+        else if (MessageBox.Show("Refreshing DB Schema failed. Retry?", Title, MessageBoxButton.OKCancel) == MessageBoxResult.OK) {
+          RefreshAttributeSelectorList();
+        }
+      };
+      loader.RunWorkerAsync();
+    }
+
+    protected void CloseOnEnterOrEscape(object sender, KeyEventArgs args) {
+      switch (args.Key) {
+        case Key.Enter:
+          DialogResult = true;
+          Close();
+          break;
+        case Key.Escape:
+          DialogResult = false;
+          Close();
+          break;
+      }
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Query/Service References/OKBQuery/Arrays.xsd
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Query/Service References/OKBQuery/Arrays.xsd	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Query/Service References/OKBQuery/Arrays.xsd	(revision 5296)
@@ -0,0 +1,9 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:tns="http://schemas.microsoft.com/2003/10/Serialization/Arrays" elementFormDefault="qualified" targetNamespace="http://schemas.microsoft.com/2003/10/Serialization/Arrays" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:complexType name="ArrayOfanyType">
+    <xs:sequence>
+      <xs:element minOccurs="0" maxOccurs="unbounded" name="anyType" nillable="true" type="xs:anyType" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="ArrayOfanyType" nillable="true" type="tns:ArrayOfanyType" />
+</xs:schema>
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Query/Service References/OKBQuery/HeuristicLab.OKB.Cockpit.Query.OKBQuery.AttributeSelector.datasource
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Query/Service References/OKBQuery/HeuristicLab.OKB.Cockpit.Query.OKBQuery.AttributeSelector.datasource	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Query/Service References/OKBQuery/HeuristicLab.OKB.Cockpit.Query.OKBQuery.AttributeSelector.datasource	(revision 5296)
@@ -0,0 +1,10 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<!--
+    This file is automatically generated by Visual Studio .Net. It is 
+    used to store generic object data source configuration information.  
+    Renaming the file extension or editing the content of this file may   
+    cause the file to be unrecognizable by the program.
+-->
+<GenericObjectDataSource DisplayName="AttributeSelector" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
+   <TypeInfo>HeuristicLab.OKB.Cockpit.Query.OKBQuery.AttributeSelector, Service References.OKBQuery.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</TypeInfo>
+</GenericObjectDataSource>
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Query/Service References/OKBQuery/HeuristicLab.Services.OKB.xsd
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Query/Service References/OKBQuery/HeuristicLab.Services.OKB.xsd	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Query/Service References/OKBQuery/HeuristicLab.Services.OKB.xsd	(revision 5296)
@@ -0,0 +1,22 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:tns="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB" elementFormDefault="qualified" targetNamespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:import namespace="http://schemas.microsoft.com/2003/10/Serialization/Arrays" />
+  <xs:complexType name="ArrayOfAttributeSelector">
+    <xs:sequence>
+      <xs:element minOccurs="0" maxOccurs="unbounded" name="AttributeSelector" nillable="true" type="tns:AttributeSelector" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="ArrayOfAttributeSelector" nillable="true" type="tns:ArrayOfAttributeSelector" />
+  <xs:complexType name="AttributeSelector">
+    <xs:sequence>
+      <xs:element xmlns:q1="http://schemas.microsoft.com/2003/10/Serialization/Arrays" minOccurs="0" name="AllowedValues" nillable="true" type="q1:ArrayOfanyType" />
+      <xs:element minOccurs="0" name="DataTypeName" nillable="true" type="xs:string" />
+      <xs:element minOccurs="0" name="FieldName" nillable="true" type="xs:string" />
+      <xs:element minOccurs="0" name="IsHidden" type="xs:boolean" />
+      <xs:element minOccurs="0" name="MaxValue" nillable="true" type="xs:anyType" />
+      <xs:element minOccurs="0" name="MinValue" nillable="true" type="xs:anyType" />
+      <xs:element minOccurs="0" name="TableName" nillable="true" type="xs:string" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="AttributeSelector" nillable="true" type="tns:AttributeSelector" />
+</xs:schema>
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Query/Service References/OKBQuery/Reference.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Query/Service References/OKBQuery/Reference.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Query/Service References/OKBQuery/Reference.cs	(revision 5296)
@@ -0,0 +1,226 @@
+﻿//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.1
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HeuristicLab.OKB.Cockpit.Query.OKBQuery {
+    using System.Runtime.Serialization;
+    using System;
+    
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="AttributeSelector", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB")]
+    [System.SerializableAttribute()]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(System.Collections.Generic.List<HeuristicLab.OKB.Cockpit.Query.OKBQuery.AttributeSelector>))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(System.Collections.Generic.List<object>))]
+    public partial class AttributeSelector : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+        
+        [System.NonSerializedAttribute()]
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<object> AllowedValuesField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string DataTypeNameField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string FieldNameField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private bool IsHiddenField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private object MaxValueField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private object MinValueField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string TableNameField;
+        
+        [global::System.ComponentModel.BrowsableAttribute(false)]
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+            get {
+                return this.extensionDataField;
+            }
+            set {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public System.Collections.Generic.List<object> AllowedValues {
+            get {
+                return this.AllowedValuesField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.AllowedValuesField, value) != true)) {
+                    this.AllowedValuesField = value;
+                    this.RaisePropertyChanged("AllowedValues");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public string DataTypeName {
+            get {
+                return this.DataTypeNameField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.DataTypeNameField, value) != true)) {
+                    this.DataTypeNameField = value;
+                    this.RaisePropertyChanged("DataTypeName");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public string FieldName {
+            get {
+                return this.FieldNameField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.FieldNameField, value) != true)) {
+                    this.FieldNameField = value;
+                    this.RaisePropertyChanged("FieldName");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public bool IsHidden {
+            get {
+                return this.IsHiddenField;
+            }
+            set {
+                if ((this.IsHiddenField.Equals(value) != true)) {
+                    this.IsHiddenField = value;
+                    this.RaisePropertyChanged("IsHidden");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public object MaxValue {
+            get {
+                return this.MaxValueField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.MaxValueField, value) != true)) {
+                    this.MaxValueField = value;
+                    this.RaisePropertyChanged("MaxValue");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public object MinValue {
+            get {
+                return this.MinValueField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.MinValueField, value) != true)) {
+                    this.MinValueField = value;
+                    this.RaisePropertyChanged("MinValue");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public string TableName {
+            get {
+                return this.TableNameField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.TableNameField, value) != true)) {
+                    this.TableNameField = value;
+                    this.RaisePropertyChanged("TableName");
+                }
+            }
+        }
+        
+        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="OKBQuery.IQueryService", SessionMode=System.ServiceModel.SessionMode.Required)]
+    public interface IQueryService {
+        
+        [System.ServiceModel.OperationContractAttribute(IsTerminating=true, Action="http://tempuri.org/IQueryService/GetAllAttributeSelectors", ReplyAction="http://tempuri.org/IQueryService/GetAllAttributeSelectorsResponse")]
+        System.Collections.Generic.List<HeuristicLab.OKB.Cockpit.Query.OKBQuery.AttributeSelector> GetAllAttributeSelectors();
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IQueryService/PrepareQuery", ReplyAction="http://tempuri.org/IQueryService/PrepareQueryResponse")]
+        System.Data.DataTable PrepareQuery(System.Collections.Generic.List<HeuristicLab.OKB.Cockpit.Query.OKBQuery.AttributeSelector> selectors);
+        
+        [System.ServiceModel.OperationContractAttribute(IsInitiating=false, Action="http://tempuri.org/IQueryService/GetCount", ReplyAction="http://tempuri.org/IQueryService/GetCountResponse")]
+        int GetCount();
+        
+        [System.ServiceModel.OperationContractAttribute(IsInitiating=false, Action="http://tempuri.org/IQueryService/GetNextRows", ReplyAction="http://tempuri.org/IQueryService/GetNextRowsResponse")]
+        System.Data.DataTable GetNextRows(int nRows);
+        
+        [System.ServiceModel.OperationContractAttribute(IsTerminating=true, IsInitiating=false, Action="http://tempuri.org/IQueryService/Terminate", ReplyAction="http://tempuri.org/IQueryService/TerminateResponse")]
+        void Terminate();
+    }
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+    public interface IQueryServiceChannel : HeuristicLab.OKB.Cockpit.Query.OKBQuery.IQueryService, System.ServiceModel.IClientChannel {
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+    public partial class QueryServiceClient : System.ServiceModel.ClientBase<HeuristicLab.OKB.Cockpit.Query.OKBQuery.IQueryService>, HeuristicLab.OKB.Cockpit.Query.OKBQuery.IQueryService {
+        
+        public QueryServiceClient() {
+        }
+        
+        public QueryServiceClient(string endpointConfigurationName) : 
+                base(endpointConfigurationName) {
+        }
+        
+        public QueryServiceClient(string endpointConfigurationName, string remoteAddress) : 
+                base(endpointConfigurationName, remoteAddress) {
+        }
+        
+        public QueryServiceClient(string endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) : 
+                base(endpointConfigurationName, remoteAddress) {
+        }
+        
+        public QueryServiceClient(System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress) : 
+                base(binding, remoteAddress) {
+        }
+        
+        public System.Collections.Generic.List<HeuristicLab.OKB.Cockpit.Query.OKBQuery.AttributeSelector> GetAllAttributeSelectors() {
+            return base.Channel.GetAllAttributeSelectors();
+        }
+        
+        public System.Data.DataTable PrepareQuery(System.Collections.Generic.List<HeuristicLab.OKB.Cockpit.Query.OKBQuery.AttributeSelector> selectors) {
+            return base.Channel.PrepareQuery(selectors);
+        }
+        
+        public int GetCount() {
+            return base.Channel.GetCount();
+        }
+        
+        public System.Data.DataTable GetNextRows(int nRows) {
+            return base.Channel.GetNextRows(nRows);
+        }
+        
+        public void Terminate() {
+            base.Channel.Terminate();
+        }
+    }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Query/Service References/OKBQuery/Reference.svcmap
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Query/Service References/OKBQuery/Reference.svcmap	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Query/Service References/OKBQuery/Reference.svcmap	(revision 5296)
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8"?>
+<ReferenceGroup xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" ID="1df9dbe1-7843-4e8c-907a-3ff9b3f3918e" xmlns="urn:schemas-microsoft-com:xml-wcfservicemap">
+  <ClientOptions>
+    <GenerateAsynchronousMethods>false</GenerateAsynchronousMethods>
+    <EnableDataBinding>true</EnableDataBinding>
+    <ExcludedTypes />
+    <ImportXmlTypes>false</ImportXmlTypes>
+    <GenerateInternalTypes>false</GenerateInternalTypes>
+    <GenerateMessageContracts>false</GenerateMessageContracts>
+    <NamespaceMappings />
+    <CollectionMappings>
+      <CollectionMapping TypeName="System.Collections.Generic.List`1" Category="List" />
+    </CollectionMappings>
+    <GenerateSerializableTypes>true</GenerateSerializableTypes>
+    <Serializer>Auto</Serializer>
+    <UseSerializerForFaults>true</UseSerializerForFaults>
+    <ReferenceAllAssemblies>true</ReferenceAllAssemblies>
+    <ReferencedAssemblies />
+    <ReferencedDataContractTypes />
+    <ServiceContractMappings />
+  </ClientOptions>
+  <MetadataSources>
+    <MetadataSource Address="http://localhost:8732/Design_Time_Addresses/OKB-3.3/QueryService/mex" Protocol="mex" SourceId="1" />
+  </MetadataSources>
+  <Metadata>
+    <MetadataFile FileName="service.wsdl" MetadataType="Wsdl" ID="acba299d-61d7-4c34-8cf5-3fece978690a" SourceId="1" SourceUrl="http://localhost:8732/Design_Time_Addresses/OKB-3.3/QueryService/mex" />
+    <MetadataFile FileName="service.xsd" MetadataType="Schema" ID="8006fff0-6365-47a8-b2fd-eef27f871c67" SourceId="1" SourceUrl="http://localhost:8732/Design_Time_Addresses/OKB-3.3/QueryService/mex" />
+    <MetadataFile FileName="service1.xsd" MetadataType="Schema" ID="988cc72d-37bf-4f2c-b671-bd48a8650346" SourceId="1" SourceUrl="http://localhost:8732/Design_Time_Addresses/OKB-3.3/QueryService/mex" />
+    <MetadataFile FileName="HeuristicLab.Services.OKB.xsd" MetadataType="Schema" ID="1597189d-322d-45b4-92ad-b39dbdf909cd" SourceId="1" SourceUrl="http://localhost:8732/Design_Time_Addresses/OKB-3.3/QueryService/mex" />
+    <MetadataFile FileName="Arrays.xsd" MetadataType="Schema" ID="c907d976-4ecb-4d1b-8344-df0d5d602769" SourceId="1" SourceUrl="http://localhost:8732/Design_Time_Addresses/OKB-3.3/QueryService/mex" />
+    <MetadataFile FileName="System.Data.xsd" MetadataType="Schema" ID="89d24e0b-d344-4a32-91b0-1079166c1cca" SourceId="1" SourceUrl="http://localhost:8732/Design_Time_Addresses/OKB-3.3/QueryService/mex" />
+  </Metadata>
+  <Extensions>
+    <ExtensionFile FileName="configuration91.svcinfo" Name="configuration91.svcinfo" />
+    <ExtensionFile FileName="configuration.svcinfo" Name="configuration.svcinfo" />
+  </Extensions>
+</ReferenceGroup>
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Query/Service References/OKBQuery/System.Data.xsd
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Query/Service References/OKBQuery/System.Data.xsd	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Query/Service References/OKBQuery/System.Data.xsd	(revision 5296)
@@ -0,0 +1,16 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:tns="http://schemas.datacontract.org/2004/07/System.Data" elementFormDefault="qualified" targetNamespace="http://schemas.datacontract.org/2004/07/System.Data" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:element name="DataTable" nillable="true">
+    <xs:complexType>
+      <xs:annotation>
+        <xs:appinfo>
+          <ActualType Name="DataTable" Namespace="http://schemas.datacontract.org/2004/07/System.Data" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+        </xs:appinfo>
+      </xs:annotation>
+      <xs:sequence>
+        <xs:any minOccurs="0" maxOccurs="unbounded" namespace="http://www.w3.org/2001/XMLSchema" processContents="lax" />
+        <xs:any minOccurs="1" namespace="urn:schemas-microsoft-com:xml-diffgram-v1" processContents="lax" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+</xs:schema>
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Query/Service References/OKBQuery/configuration.svcinfo
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Query/Service References/OKBQuery/configuration.svcinfo	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Query/Service References/OKBQuery/configuration.svcinfo	(revision 5296)
@@ -0,0 +1,10 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<configurationSnapshot xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="urn:schemas-microsoft-com:xml-wcfconfigurationsnapshot">
+  <behaviors />
+  <bindings>
+    <binding digest="System.ServiceModel.Configuration.NetTcpBindingElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089:&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-16&quot;?&gt;&lt;Data hostNameComparisonMode=&quot;StrongWildcard&quot; listenBacklog=&quot;10&quot; maxBufferSize=&quot;65536&quot; maxConnections=&quot;10&quot; name=&quot;NetTcpBinding_IQueryService&quot; transactionFlow=&quot;false&quot; transactionProtocol=&quot;OleTransactions&quot; transferMode=&quot;Buffered&quot;&gt;&lt;readerQuotas maxArrayLength=&quot;16384&quot; maxBytesPerRead=&quot;4096&quot; maxDepth=&quot;32&quot; maxNameTableCharCount=&quot;16384&quot; maxStringContentLength=&quot;8192&quot; /&gt;&lt;reliableSession enabled=&quot;false&quot; inactivityTimeout=&quot;00:10:00&quot; ordered=&quot;true&quot; /&gt;&lt;security mode=&quot;Message&quot;&gt;&lt;message algorithmSuite=&quot;Default&quot; clientCredentialType=&quot;UserName&quot; /&gt;&lt;transport clientCredentialType=&quot;Windows&quot; protectionLevel=&quot;EncryptAndSign&quot; /&gt;&lt;/security&gt;&lt;/Data&gt;" bindingType="netTcpBinding" name="NetTcpBinding_IQueryService" />
+  </bindings>
+  <endpoints>
+    <endpoint normalizedDigest="&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-16&quot;?&gt;&lt;Data address=&quot;net.tcp://localhost:8733/OKB-3.3/QueryService&quot; binding=&quot;netTcpBinding&quot; bindingConfiguration=&quot;NetTcpBinding_IQueryService&quot; contract=&quot;OKBQuery.IQueryService&quot; name=&quot;NetTcpBinding_IQueryService&quot;&gt;&lt;identity&gt;&lt;certificate encodedValue=&quot;AwAAAAEAAAAUAAAAD/AlkYJw/OUhl6D/9w8mjJBh39kgAAAAAQAAAPIBAAAwggHuMIIBW6ADAgECAhAdEzTisaf2sEZxrqYZfYtCMAkGBSsOAwIdBQAwFDESMBAGA1UEAxMJbG9jYWxob3N0MB4XDTEwMDgyMDIyMzIwOFoXDTM5MTIzMTIzNTk1OVowFDESMBAGA1UEAxMJbG9jYWxob3N0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDPkfCSLRX8/4F+Z4ys43yZ4MMzjB44cMakPz4Nri+mEB5n2z/0GFatCYzkI2f/nniWqVrBYjHkjsZy2EZioHu4wa99c1XEGJnFNDuNn6ESkfEyhyF4+OqKGnpK9HNrw7OWMuqn2oOh0iFd9fl6FTAm+Y0p3LP+38BuYzpCniqqdwIDAQABo0kwRzBFBgNVHQEEPjA8gBDvi8Rgio9v+mr58TiAvqF5oRYwFDESMBAGA1UEAxMJbG9jYWxob3N0ghAdEzTisaf2sEZxrqYZfYtCMAkGBSsOAwIdBQADgYEANdGlvHKeUptfNu9I0wgA5qjmVB+JDldOAkrfM0R+4IcVQ06y5K7P07uxQAV7+rhnDLgLyFJunUHgzbfjsjFy7vjwtoieXA5j0AYlm4AHR7dHt4HVgkIMYt8XOCqMw5jjFX91xJ89tC7mM9zYR48N9T5QSeMGo+f+JzybeLWxnNs=&quot; /&gt;&lt;/identity&gt;&lt;/Data&gt;" digest="&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-16&quot;?&gt;&lt;Data address=&quot;net.tcp://localhost:8733/OKB-3.3/QueryService&quot; binding=&quot;netTcpBinding&quot; bindingConfiguration=&quot;NetTcpBinding_IQueryService&quot; contract=&quot;OKBQuery.IQueryService&quot; name=&quot;NetTcpBinding_IQueryService&quot;&gt;&lt;identity&gt;&lt;certificate encodedValue=&quot;AwAAAAEAAAAUAAAAD/AlkYJw/OUhl6D/9w8mjJBh39kgAAAAAQAAAPIBAAAwggHuMIIBW6ADAgECAhAdEzTisaf2sEZxrqYZfYtCMAkGBSsOAwIdBQAwFDESMBAGA1UEAxMJbG9jYWxob3N0MB4XDTEwMDgyMDIyMzIwOFoXDTM5MTIzMTIzNTk1OVowFDESMBAGA1UEAxMJbG9jYWxob3N0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDPkfCSLRX8/4F+Z4ys43yZ4MMzjB44cMakPz4Nri+mEB5n2z/0GFatCYzkI2f/nniWqVrBYjHkjsZy2EZioHu4wa99c1XEGJnFNDuNn6ESkfEyhyF4+OqKGnpK9HNrw7OWMuqn2oOh0iFd9fl6FTAm+Y0p3LP+38BuYzpCniqqdwIDAQABo0kwRzBFBgNVHQEEPjA8gBDvi8Rgio9v+mr58TiAvqF5oRYwFDESMBAGA1UEAxMJbG9jYWxob3N0ghAdEzTisaf2sEZxrqYZfYtCMAkGBSsOAwIdBQADgYEANdGlvHKeUptfNu9I0wgA5qjmVB+JDldOAkrfM0R+4IcVQ06y5K7P07uxQAV7+rhnDLgLyFJunUHgzbfjsjFy7vjwtoieXA5j0AYlm4AHR7dHt4HVgkIMYt8XOCqMw5jjFX91xJ89tC7mM9zYR48N9T5QSeMGo+f+JzybeLWxnNs=&quot; /&gt;&lt;/identity&gt;&lt;/Data&gt;" contractName="OKBQuery.IQueryService" name="NetTcpBinding_IQueryService" />
+  </endpoints>
+</configurationSnapshot>
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Query/Service References/OKBQuery/configuration91.svcinfo
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Query/Service References/OKBQuery/configuration91.svcinfo	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Query/Service References/OKBQuery/configuration91.svcinfo	(revision 5296)
@@ -0,0 +1,207 @@
+<?xml version="1.0" encoding="utf-8"?>
+<SavedWcfConfigurationInformation xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Version="9.1" CheckSum="gqaukEP95jin4jFL25zfWyx2NDA=">
+  <bindingConfigurations>
+    <bindingConfiguration bindingType="netTcpBinding" name="NetTcpBinding_IQueryService">
+      <properties>
+        <property path="/name" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>NetTcpBinding_IQueryService</serializedValue>
+        </property>
+        <property path="/closeTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>00:01:00</serializedValue>
+        </property>
+        <property path="/openTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>00:01:00</serializedValue>
+        </property>
+        <property path="/receiveTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>00:10:00</serializedValue>
+        </property>
+        <property path="/sendTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>00:01:00</serializedValue>
+        </property>
+        <property path="/transactionFlow" isComplexType="false" isExplicitlyDefined="true" clrType="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>False</serializedValue>
+        </property>
+        <property path="/transferMode" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.TransferMode, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>Buffered</serializedValue>
+        </property>
+        <property path="/transactionProtocol" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.TransactionProtocol, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>OleTransactions</serializedValue>
+        </property>
+        <property path="/hostNameComparisonMode" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.HostNameComparisonMode, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>StrongWildcard</serializedValue>
+        </property>
+        <property path="/listenBacklog" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>10</serializedValue>
+        </property>
+        <property path="/maxBufferPoolSize" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int64, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>524288</serializedValue>
+        </property>
+        <property path="/maxBufferSize" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>65536</serializedValue>
+        </property>
+        <property path="/maxConnections" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>10</serializedValue>
+        </property>
+        <property path="/maxReceivedMessageSize" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int64, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>65536</serializedValue>
+        </property>
+        <property path="/portSharingEnabled" isComplexType="false" isExplicitlyDefined="false" clrType="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>False</serializedValue>
+        </property>
+        <property path="/readerQuotas" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.XmlDictionaryReaderQuotasElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.XmlDictionaryReaderQuotasElement</serializedValue>
+        </property>
+        <property path="/readerQuotas/maxDepth" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>32</serializedValue>
+        </property>
+        <property path="/readerQuotas/maxStringContentLength" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>8192</serializedValue>
+        </property>
+        <property path="/readerQuotas/maxArrayLength" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>16384</serializedValue>
+        </property>
+        <property path="/readerQuotas/maxBytesPerRead" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>4096</serializedValue>
+        </property>
+        <property path="/readerQuotas/maxNameTableCharCount" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>16384</serializedValue>
+        </property>
+        <property path="/reliableSession" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.StandardBindingOptionalReliableSessionElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.StandardBindingOptionalReliableSessionElement</serializedValue>
+        </property>
+        <property path="/reliableSession/ordered" isComplexType="false" isExplicitlyDefined="true" clrType="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>True</serializedValue>
+        </property>
+        <property path="/reliableSession/inactivityTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>00:10:00</serializedValue>
+        </property>
+        <property path="/reliableSession/enabled" isComplexType="false" isExplicitlyDefined="true" clrType="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>False</serializedValue>
+        </property>
+        <property path="/security" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.NetTcpSecurityElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.NetTcpSecurityElement</serializedValue>
+        </property>
+        <property path="/security/mode" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.SecurityMode, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>Message</serializedValue>
+        </property>
+        <property path="/security/transport" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.TcpTransportSecurityElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.TcpTransportSecurityElement</serializedValue>
+        </property>
+        <property path="/security/transport/clientCredentialType" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.TcpClientCredentialType, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>Windows</serializedValue>
+        </property>
+        <property path="/security/transport/protectionLevel" isComplexType="false" isExplicitlyDefined="true" clrType="System.Net.Security.ProtectionLevel, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>EncryptAndSign</serializedValue>
+        </property>
+        <property path="/security/transport/extendedProtectionPolicy" isComplexType="true" isExplicitlyDefined="false" clrType="System.Security.Authentication.ExtendedProtection.Configuration.ExtendedProtectionPolicyElement, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.Security.Authentication.ExtendedProtection.Configuration.ExtendedProtectionPolicyElement</serializedValue>
+        </property>
+        <property path="/security/transport/extendedProtectionPolicy/policyEnforcement" isComplexType="false" isExplicitlyDefined="false" clrType="System.Security.Authentication.ExtendedProtection.PolicyEnforcement, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>Never</serializedValue>
+        </property>
+        <property path="/security/transport/extendedProtectionPolicy/protectionScenario" isComplexType="false" isExplicitlyDefined="false" clrType="System.Security.Authentication.ExtendedProtection.ProtectionScenario, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>TransportSelected</serializedValue>
+        </property>
+        <property path="/security/transport/extendedProtectionPolicy/customServiceNames" isComplexType="true" isExplicitlyDefined="false" clrType="System.Security.Authentication.ExtendedProtection.Configuration.ServiceNameElementCollection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>(Collection)</serializedValue>
+        </property>
+        <property path="/security/message" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.MessageSecurityOverTcpElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.MessageSecurityOverTcpElement</serializedValue>
+        </property>
+        <property path="/security/message/clientCredentialType" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.MessageCredentialType, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>UserName</serializedValue>
+        </property>
+        <property path="/security/message/algorithmSuite" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.Security.SecurityAlgorithmSuite, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>Default</serializedValue>
+        </property>
+      </properties>
+    </bindingConfiguration>
+  </bindingConfigurations>
+  <endpoints>
+    <endpoint name="NetTcpBinding_IQueryService" contract="OKBQuery.IQueryService" bindingType="netTcpBinding" address="net.tcp://localhost:8733/OKB-3.3/QueryService" bindingConfiguration="NetTcpBinding_IQueryService">
+      <properties>
+        <property path="/address" isComplexType="false" isExplicitlyDefined="true" clrType="System.Uri, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>net.tcp://localhost:8733/OKB-3.3/QueryService</serializedValue>
+        </property>
+        <property path="/behaviorConfiguration" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/binding" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>netTcpBinding</serializedValue>
+        </property>
+        <property path="/bindingConfiguration" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>NetTcpBinding_IQueryService</serializedValue>
+        </property>
+        <property path="/contract" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>OKBQuery.IQueryService</serializedValue>
+        </property>
+        <property path="/headers" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.AddressHeaderCollectionElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.AddressHeaderCollectionElement</serializedValue>
+        </property>
+        <property path="/headers/headers" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.Channels.AddressHeaderCollection, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>&lt;Header /&gt;</serializedValue>
+        </property>
+        <property path="/identity" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.IdentityElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.IdentityElement</serializedValue>
+        </property>
+        <property path="/identity/userPrincipalName" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.UserPrincipalNameElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.UserPrincipalNameElement</serializedValue>
+        </property>
+        <property path="/identity/userPrincipalName/value" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/servicePrincipalName" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.ServicePrincipalNameElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.ServicePrincipalNameElement</serializedValue>
+        </property>
+        <property path="/identity/servicePrincipalName/value" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/dns" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.DnsElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.DnsElement</serializedValue>
+        </property>
+        <property path="/identity/dns/value" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/rsa" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.RsaElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.RsaElement</serializedValue>
+        </property>
+        <property path="/identity/rsa/value" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/certificate" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.CertificateElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.CertificateElement</serializedValue>
+        </property>
+        <property path="/identity/certificate/encodedValue" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>AwAAAAEAAAAUAAAAD/AlkYJw/OUhl6D/9w8mjJBh39kgAAAAAQAAAPIBAAAwggHuMIIBW6ADAgECAhAdEzTisaf2sEZxrqYZfYtCMAkGBSsOAwIdBQAwFDESMBAGA1UEAxMJbG9jYWxob3N0MB4XDTEwMDgyMDIyMzIwOFoXDTM5MTIzMTIzNTk1OVowFDESMBAGA1UEAxMJbG9jYWxob3N0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDPkfCSLRX8/4F+Z4ys43yZ4MMzjB44cMakPz4Nri+mEB5n2z/0GFatCYzkI2f/nniWqVrBYjHkjsZy2EZioHu4wa99c1XEGJnFNDuNn6ESkfEyhyF4+OqKGnpK9HNrw7OWMuqn2oOh0iFd9fl6FTAm+Y0p3LP+38BuYzpCniqqdwIDAQABo0kwRzBFBgNVHQEEPjA8gBDvi8Rgio9v+mr58TiAvqF5oRYwFDESMBAGA1UEAxMJbG9jYWxob3N0ghAdEzTisaf2sEZxrqYZfYtCMAkGBSsOAwIdBQADgYEANdGlvHKeUptfNu9I0wgA5qjmVB+JDldOAkrfM0R+4IcVQ06y5K7P07uxQAV7+rhnDLgLyFJunUHgzbfjsjFy7vjwtoieXA5j0AYlm4AHR7dHt4HVgkIMYt8XOCqMw5jjFX91xJ89tC7mM9zYR48N9T5QSeMGo+f+JzybeLWxnNs=</serializedValue>
+        </property>
+        <property path="/identity/certificateReference" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.CertificateReferenceElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.CertificateReferenceElement</serializedValue>
+        </property>
+        <property path="/identity/certificateReference/storeName" isComplexType="false" isExplicitlyDefined="false" clrType="System.Security.Cryptography.X509Certificates.StoreName, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>My</serializedValue>
+        </property>
+        <property path="/identity/certificateReference/storeLocation" isComplexType="false" isExplicitlyDefined="false" clrType="System.Security.Cryptography.X509Certificates.StoreLocation, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>LocalMachine</serializedValue>
+        </property>
+        <property path="/identity/certificateReference/x509FindType" isComplexType="false" isExplicitlyDefined="false" clrType="System.Security.Cryptography.X509Certificates.X509FindType, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>FindBySubjectDistinguishedName</serializedValue>
+        </property>
+        <property path="/identity/certificateReference/findValue" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/certificateReference/isChainIncluded" isComplexType="false" isExplicitlyDefined="false" clrType="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>False</serializedValue>
+        </property>
+        <property path="/name" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>NetTcpBinding_IQueryService</serializedValue>
+        </property>
+        <property path="/kind" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/endpointConfiguration" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+      </properties>
+    </endpoint>
+  </endpoints>
+</SavedWcfConfigurationInformation>
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Query/Service References/OKBQuery/service.wsdl
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Query/Service References/OKBQuery/service.wsdl	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Query/Service References/OKBQuery/service.wsdl	(revision 5296)
@@ -0,0 +1,434 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<wsdl:definitions xmlns:wsap="http://schemas.xmlsoap.org/ws/2004/08/addressing/policy" xmlns:wsa10="http://www.w3.org/2005/08/addressing" xmlns:tns="http://tempuri.org/" xmlns:msc="http://schemas.microsoft.com/ws/2005/12/wsdl/contract" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="QueryService" targetNamespace="http://tempuri.org/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
+  <wsp:Policy wsu:Id="NetTcpBinding_IQueryService_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SymmetricBinding xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <wsp:Policy>
+            <sp:ProtectionToken>
+              <wsp:Policy>
+                <sp:SecureConversationToken sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient">
+                  <wsp:Policy>
+                    <sp:RequireDerivedKeys />
+                    <sp:BootstrapPolicy>
+                      <wsp:Policy>
+                        <sp:SignedParts>
+                          <sp:Body />
+                          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+                          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+                          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+                          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+                          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+                          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+                          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+                        </sp:SignedParts>
+                        <sp:EncryptedParts>
+                          <sp:Body />
+                        </sp:EncryptedParts>
+                        <sp:SymmetricBinding>
+                          <wsp:Policy>
+                            <sp:ProtectionToken>
+                              <wsp:Policy>
+                                <mssp:SslContextToken sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient" xmlns:mssp="http://schemas.microsoft.com/ws/2005/07/securitypolicy">
+                                  <wsp:Policy>
+                                    <sp:RequireDerivedKeys />
+                                  </wsp:Policy>
+                                </mssp:SslContextToken>
+                              </wsp:Policy>
+                            </sp:ProtectionToken>
+                            <sp:AlgorithmSuite>
+                              <wsp:Policy>
+                                <sp:Basic256 />
+                              </wsp:Policy>
+                            </sp:AlgorithmSuite>
+                            <sp:Layout>
+                              <wsp:Policy>
+                                <sp:Strict />
+                              </wsp:Policy>
+                            </sp:Layout>
+                            <sp:IncludeTimestamp />
+                            <sp:EncryptSignature />
+                            <sp:OnlySignEntireHeadersAndBody />
+                          </wsp:Policy>
+                        </sp:SymmetricBinding>
+                        <sp:SignedSupportingTokens>
+                          <wsp:Policy>
+                            <sp:UsernameToken sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient">
+                              <wsp:Policy>
+                                <sp:WssUsernameToken10 />
+                              </wsp:Policy>
+                            </sp:UsernameToken>
+                          </wsp:Policy>
+                        </sp:SignedSupportingTokens>
+                        <sp:Wss11>
+                          <wsp:Policy />
+                        </sp:Wss11>
+                        <sp:Trust10>
+                          <wsp:Policy>
+                            <sp:MustSupportIssuedTokens />
+                            <sp:RequireClientEntropy />
+                            <sp:RequireServerEntropy />
+                          </wsp:Policy>
+                        </sp:Trust10>
+                      </wsp:Policy>
+                    </sp:BootstrapPolicy>
+                  </wsp:Policy>
+                </sp:SecureConversationToken>
+              </wsp:Policy>
+            </sp:ProtectionToken>
+            <sp:AlgorithmSuite>
+              <wsp:Policy>
+                <sp:Basic256 />
+              </wsp:Policy>
+            </sp:AlgorithmSuite>
+            <sp:Layout>
+              <wsp:Policy>
+                <sp:Strict />
+              </wsp:Policy>
+            </sp:Layout>
+            <sp:IncludeTimestamp />
+            <sp:EncryptSignature />
+            <sp:OnlySignEntireHeadersAndBody />
+          </wsp:Policy>
+        </sp:SymmetricBinding>
+        <sp:Wss11 xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <wsp:Policy />
+        </sp:Wss11>
+        <sp:Trust10 xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <wsp:Policy>
+            <sp:MustSupportIssuedTokens />
+            <sp:RequireClientEntropy />
+            <sp:RequireServerEntropy />
+          </wsp:Policy>
+        </sp:Trust10>
+        <msb:BinaryEncoding xmlns:msb="http://schemas.microsoft.com/ws/06/2004/mspolicy/netbinary1" />
+        <wsaw:UsingAddressing />
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="NetTcpBinding_IQueryService_GetAllAttributeSelectors_Input_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="NetTcpBinding_IQueryService_GetAllAttributeSelectors_output_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="NetTcpBinding_IQueryService_PrepareQuery_Input_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="NetTcpBinding_IQueryService_PrepareQuery_output_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="NetTcpBinding_IQueryService_GetCount_Input_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="NetTcpBinding_IQueryService_GetCount_output_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="NetTcpBinding_IQueryService_GetNextRows_Input_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="NetTcpBinding_IQueryService_GetNextRows_output_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="NetTcpBinding_IQueryService_Terminate_Input_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="NetTcpBinding_IQueryService_Terminate_output_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsdl:types>
+    <xsd:schema targetNamespace="http://tempuri.org/Imports">
+      <xsd:import namespace="http://tempuri.org/" />
+      <xsd:import namespace="http://schemas.microsoft.com/2003/10/Serialization/" />
+      <xsd:import namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB" />
+      <xsd:import namespace="http://schemas.microsoft.com/2003/10/Serialization/Arrays" />
+      <xsd:import namespace="http://schemas.datacontract.org/2004/07/System.Data" />
+    </xsd:schema>
+  </wsdl:types>
+  <wsdl:message name="IQueryService_GetAllAttributeSelectors_InputMessage">
+    <wsdl:part name="parameters" element="tns:GetAllAttributeSelectors" />
+  </wsdl:message>
+  <wsdl:message name="IQueryService_GetAllAttributeSelectors_OutputMessage">
+    <wsdl:part name="parameters" element="tns:GetAllAttributeSelectorsResponse" />
+  </wsdl:message>
+  <wsdl:message name="IQueryService_PrepareQuery_InputMessage">
+    <wsdl:part name="parameters" element="tns:PrepareQuery" />
+  </wsdl:message>
+  <wsdl:message name="IQueryService_PrepareQuery_OutputMessage">
+    <wsdl:part name="parameters" element="tns:PrepareQueryResponse" />
+  </wsdl:message>
+  <wsdl:message name="IQueryService_GetCount_InputMessage">
+    <wsdl:part name="parameters" element="tns:GetCount" />
+  </wsdl:message>
+  <wsdl:message name="IQueryService_GetCount_OutputMessage">
+    <wsdl:part name="parameters" element="tns:GetCountResponse" />
+  </wsdl:message>
+  <wsdl:message name="IQueryService_GetNextRows_InputMessage">
+    <wsdl:part name="parameters" element="tns:GetNextRows" />
+  </wsdl:message>
+  <wsdl:message name="IQueryService_GetNextRows_OutputMessage">
+    <wsdl:part name="parameters" element="tns:GetNextRowsResponse" />
+  </wsdl:message>
+  <wsdl:message name="IQueryService_Terminate_InputMessage">
+    <wsdl:part name="parameters" element="tns:Terminate" />
+  </wsdl:message>
+  <wsdl:message name="IQueryService_Terminate_OutputMessage">
+    <wsdl:part name="parameters" element="tns:TerminateResponse" />
+  </wsdl:message>
+  <wsdl:portType msc:usingSession="true" name="IQueryService">
+    <wsdl:operation msc:isInitiating="true" msc:isTerminating="true" name="GetAllAttributeSelectors">
+      <wsdl:input wsaw:Action="http://tempuri.org/IQueryService/GetAllAttributeSelectors" message="tns:IQueryService_GetAllAttributeSelectors_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/IQueryService/GetAllAttributeSelectorsResponse" message="tns:IQueryService_GetAllAttributeSelectors_OutputMessage" />
+    </wsdl:operation>
+    <wsdl:operation msc:isInitiating="true" msc:isTerminating="false" name="PrepareQuery">
+      <wsdl:input wsaw:Action="http://tempuri.org/IQueryService/PrepareQuery" message="tns:IQueryService_PrepareQuery_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/IQueryService/PrepareQueryResponse" message="tns:IQueryService_PrepareQuery_OutputMessage" />
+    </wsdl:operation>
+    <wsdl:operation msc:isInitiating="false" msc:isTerminating="false" name="GetCount">
+      <wsdl:input wsaw:Action="http://tempuri.org/IQueryService/GetCount" message="tns:IQueryService_GetCount_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/IQueryService/GetCountResponse" message="tns:IQueryService_GetCount_OutputMessage" />
+    </wsdl:operation>
+    <wsdl:operation msc:isInitiating="false" msc:isTerminating="false" name="GetNextRows">
+      <wsdl:input wsaw:Action="http://tempuri.org/IQueryService/GetNextRows" message="tns:IQueryService_GetNextRows_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/IQueryService/GetNextRowsResponse" message="tns:IQueryService_GetNextRows_OutputMessage" />
+    </wsdl:operation>
+    <wsdl:operation msc:isInitiating="false" msc:isTerminating="true" name="Terminate">
+      <wsdl:input wsaw:Action="http://tempuri.org/IQueryService/Terminate" message="tns:IQueryService_Terminate_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/IQueryService/TerminateResponse" message="tns:IQueryService_Terminate_OutputMessage" />
+    </wsdl:operation>
+  </wsdl:portType>
+  <wsdl:binding name="NetTcpBinding_IQueryService" type="tns:IQueryService">
+    <wsp:PolicyReference URI="#NetTcpBinding_IQueryService_policy" />
+    <soap12:binding transport="http://schemas.microsoft.com/soap/tcp" />
+    <wsdl:operation name="GetAllAttributeSelectors">
+      <soap12:operation soapAction="http://tempuri.org/IQueryService/GetAllAttributeSelectors" style="document" />
+      <wsdl:input>
+        <wsp:PolicyReference URI="#NetTcpBinding_IQueryService_GetAllAttributeSelectors_Input_policy" />
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <wsp:PolicyReference URI="#NetTcpBinding_IQueryService_GetAllAttributeSelectors_output_policy" />
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="PrepareQuery">
+      <soap12:operation soapAction="http://tempuri.org/IQueryService/PrepareQuery" style="document" />
+      <wsdl:input>
+        <wsp:PolicyReference URI="#NetTcpBinding_IQueryService_PrepareQuery_Input_policy" />
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <wsp:PolicyReference URI="#NetTcpBinding_IQueryService_PrepareQuery_output_policy" />
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="GetCount">
+      <soap12:operation soapAction="http://tempuri.org/IQueryService/GetCount" style="document" />
+      <wsdl:input>
+        <wsp:PolicyReference URI="#NetTcpBinding_IQueryService_GetCount_Input_policy" />
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <wsp:PolicyReference URI="#NetTcpBinding_IQueryService_GetCount_output_policy" />
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="GetNextRows">
+      <soap12:operation soapAction="http://tempuri.org/IQueryService/GetNextRows" style="document" />
+      <wsdl:input>
+        <wsp:PolicyReference URI="#NetTcpBinding_IQueryService_GetNextRows_Input_policy" />
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <wsp:PolicyReference URI="#NetTcpBinding_IQueryService_GetNextRows_output_policy" />
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="Terminate">
+      <soap12:operation soapAction="http://tempuri.org/IQueryService/Terminate" style="document" />
+      <wsdl:input>
+        <wsp:PolicyReference URI="#NetTcpBinding_IQueryService_Terminate_Input_policy" />
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <wsp:PolicyReference URI="#NetTcpBinding_IQueryService_Terminate_output_policy" />
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+  </wsdl:binding>
+  <wsdl:service name="QueryService">
+    <wsdl:port name="NetTcpBinding_IQueryService" binding="tns:NetTcpBinding_IQueryService">
+      <soap12:address location="net.tcp://localhost:8733/OKB-3.3/QueryService" />
+      <wsa10:EndpointReference>
+        <wsa10:Address>net.tcp://localhost:8733/OKB-3.3/QueryService</wsa10:Address>
+        <Identity xmlns="http://schemas.xmlsoap.org/ws/2006/02/addressingidentity">
+          <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
+            <X509Data>
+              <X509Certificate>MIIB7jCCAVugAwIBAgIQHRM04rGn9rBGca6mGX2LQjAJBgUrDgMCHQUAMBQxEjAQBgNVBAMTCWxvY2FsaG9zdDAeFw0xMDA4MjAyMjMyMDhaFw0zOTEyMzEyMzU5NTlaMBQxEjAQBgNVBAMTCWxvY2FsaG9zdDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAz5Hwki0V/P+BfmeMrON8meDDM4weOHDGpD8+Da4vphAeZ9s/9BhWrQmM5CNn/554lqlawWIx5I7GcthGYqB7uMGvfXNVxBiZxTQ7jZ+hEpHxMochePjqihp6SvRza8OzljLqp9qDodIhXfX5ehUwJvmNKdyz/t/AbmM6Qp4qqncCAwEAAaNJMEcwRQYDVR0BBD4wPIAQ74vEYIqPb/pq+fE4gL6heaEWMBQxEjAQBgNVBAMTCWxvY2FsaG9zdIIQHRM04rGn9rBGca6mGX2LQjAJBgUrDgMCHQUAA4GBADXRpbxynlKbXzbvSNMIAOao5lQfiQ5XTgJK3zNEfuCHFUNOsuSuz9O7sUAFe/q4Zwy4C8hSbp1B4M2347Ixcu748LaInlwOY9AGJZuAB0e3R7eB1YJCDGLfFzgqjMOY4xV/dcSfPbQu5jPc2EePDfU+UEnjBqPn/ic8m3i1sZzb</X509Certificate>
+            </X509Data>
+          </KeyInfo>
+        </Identity>
+      </wsa10:EndpointReference>
+    </wsdl:port>
+  </wsdl:service>
+</wsdl:definitions>
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Query/Service References/OKBQuery/service.xsd
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Query/Service References/OKBQuery/service.xsd	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Query/Service References/OKBQuery/service.xsd	(revision 5296)
@@ -0,0 +1,90 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:tns="http://tempuri.org/" elementFormDefault="qualified" targetNamespace="http://tempuri.org/" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:import namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB" />
+  <xs:element name="GetAllAttributeSelectors">
+    <xs:complexType>
+      <xs:sequence />
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="GetAllAttributeSelectorsResponse">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q1="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB" minOccurs="0" name="GetAllAttributeSelectorsResult" nillable="true" type="q1:ArrayOfAttributeSelector" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="PrepareQuery">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q2="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB" minOccurs="0" name="selectors" nillable="true" type="q2:ArrayOfAttributeSelector" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="PrepareQueryResponse">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="PrepareQueryResult" nillable="true">
+          <xs:complexType>
+            <xs:annotation>
+              <xs:appinfo>
+                <ActualType Name="DataTable" Namespace="http://schemas.datacontract.org/2004/07/System.Data" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+              </xs:appinfo>
+            </xs:annotation>
+            <xs:sequence>
+              <xs:any minOccurs="0" maxOccurs="unbounded" namespace="http://www.w3.org/2001/XMLSchema" processContents="lax" />
+              <xs:any minOccurs="1" namespace="urn:schemas-microsoft-com:xml-diffgram-v1" processContents="lax" />
+            </xs:sequence>
+          </xs:complexType>
+        </xs:element>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="GetCount">
+    <xs:complexType>
+      <xs:sequence />
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="GetCountResponse">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="GetCountResult" type="xs:int" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="GetNextRows">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="nRows" type="xs:int" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="GetNextRowsResponse">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="GetNextRowsResult" nillable="true">
+          <xs:complexType>
+            <xs:annotation>
+              <xs:appinfo>
+                <ActualType Name="DataTable" Namespace="http://schemas.datacontract.org/2004/07/System.Data" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
+              </xs:appinfo>
+            </xs:annotation>
+            <xs:sequence>
+              <xs:any minOccurs="0" maxOccurs="unbounded" namespace="http://www.w3.org/2001/XMLSchema" processContents="lax" />
+              <xs:any minOccurs="1" namespace="urn:schemas-microsoft-com:xml-diffgram-v1" processContents="lax" />
+            </xs:sequence>
+          </xs:complexType>
+        </xs:element>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="Terminate">
+    <xs:complexType>
+      <xs:sequence />
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="TerminateResponse">
+    <xs:complexType>
+      <xs:sequence />
+    </xs:complexType>
+  </xs:element>
+</xs:schema>
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Query/Service References/OKBQuery/service1.xsd
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Query/Service References/OKBQuery/service1.xsd	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Query/Service References/OKBQuery/service1.xsd	(revision 5296)
@@ -0,0 +1,42 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:tns="http://schemas.microsoft.com/2003/10/Serialization/" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://schemas.microsoft.com/2003/10/Serialization/" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:element name="anyType" nillable="true" type="xs:anyType" />
+  <xs:element name="anyURI" nillable="true" type="xs:anyURI" />
+  <xs:element name="base64Binary" nillable="true" type="xs:base64Binary" />
+  <xs:element name="boolean" nillable="true" type="xs:boolean" />
+  <xs:element name="byte" nillable="true" type="xs:byte" />
+  <xs:element name="dateTime" nillable="true" type="xs:dateTime" />
+  <xs:element name="decimal" nillable="true" type="xs:decimal" />
+  <xs:element name="double" nillable="true" type="xs:double" />
+  <xs:element name="float" nillable="true" type="xs:float" />
+  <xs:element name="int" nillable="true" type="xs:int" />
+  <xs:element name="long" nillable="true" type="xs:long" />
+  <xs:element name="QName" nillable="true" type="xs:QName" />
+  <xs:element name="short" nillable="true" type="xs:short" />
+  <xs:element name="string" nillable="true" type="xs:string" />
+  <xs:element name="unsignedByte" nillable="true" type="xs:unsignedByte" />
+  <xs:element name="unsignedInt" nillable="true" type="xs:unsignedInt" />
+  <xs:element name="unsignedLong" nillable="true" type="xs:unsignedLong" />
+  <xs:element name="unsignedShort" nillable="true" type="xs:unsignedShort" />
+  <xs:element name="char" nillable="true" type="tns:char" />
+  <xs:simpleType name="char">
+    <xs:restriction base="xs:int" />
+  </xs:simpleType>
+  <xs:element name="duration" nillable="true" type="tns:duration" />
+  <xs:simpleType name="duration">
+    <xs:restriction base="xs:duration">
+      <xs:pattern value="\-?P(\d*D)?(T(\d*H)?(\d*M)?(\d*(\.\d*)?S)?)?" />
+      <xs:minInclusive value="-P10675199DT2H48M5.4775808S" />
+      <xs:maxInclusive value="P10675199DT2H48M5.4775807S" />
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:element name="guid" nillable="true" type="tns:guid" />
+  <xs:simpleType name="guid">
+    <xs:restriction base="xs:string">
+      <xs:pattern value="[\da-fA-F]{8}-[\da-fA-F]{4}-[\da-fA-F]{4}-[\da-fA-F]{4}-[\da-fA-F]{12}" />
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:attribute name="FactoryType" type="xs:QName" />
+  <xs:attribute name="Id" type="xs:ID" />
+  <xs:attribute name="Ref" type="xs:IDREF" />
+</xs:schema>
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Query/TypeNameConverter.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Query/TypeNameConverter.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Query/TypeNameConverter.cs	(revision 5296)
@@ -0,0 +1,36 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Windows.Data;
+
+namespace HeuristicLab.OKB.Cockpit.Query {
+  public class TypeNameConverter : IValueConverter {
+
+    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) {
+      return FormatType(value);
+    }
+
+    public static object FormatType(object value) {
+      Type type = value as Type;
+      if (type == null)
+        return "none";
+      StringBuilder sb = new StringBuilder();
+      if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Nullable<>)) {
+        sb.Append('?');
+        type = type.GetGenericArguments()[0];
+      }
+      if (type == typeof(Int32)) sb.Append("int");
+      if (type == typeof(Double)) sb.Append("double");
+      if (type == typeof(String)) sb.Append("string");
+      if (type == typeof(Guid)) sb.Append("Guid");
+      if (type == typeof(DateTime)) sb.Append("DateTime");
+      return sb.ToString();
+    }
+
+    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) {
+      throw new NotImplementedException();
+    }
+
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Query/UpdateLocalInstallation.cmd
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Query/UpdateLocalInstallation.cmd	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Query/UpdateLocalInstallation.cmd	(revision 5296)
@@ -0,0 +1,7 @@
+SET target=C:\Program Files\HeuristicLab 3.3
+
+echo Copying OKB Cockpit Query Assembly
+copy "%ProjectDir%\%Outdir%\HeuristicLab.OKB.Cockpit.Query-3.3.dll" "%target%"
+echo ----------------------------
+echo Updating HeuristicLab.exe.config
+"%SolutionDir%ConfigMerger.exe" "%SolutionDir%ServiceClient.config" "%target%\HeuristicLab.exe.config"
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Query/app.config
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Query/app.config	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit.Query/app.config	(revision 5296)
@@ -0,0 +1,33 @@
+﻿<?xml version="1.0" encoding="utf-8" ?>
+<configuration>
+    <system.serviceModel>
+        <bindings>
+            <netTcpBinding>
+                <binding name="NetTcpBinding_IQueryService" closeTimeout="00:01:00"
+                    openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
+                    transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions"
+                    hostNameComparisonMode="StrongWildcard" listenBacklog="10"
+                    maxBufferPoolSize="524288" maxBufferSize="65536" maxConnections="10"
+                    maxReceivedMessageSize="65536">
+                    <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
+                        maxBytesPerRead="4096" maxNameTableCharCount="16384" />
+                    <reliableSession ordered="true" inactivityTimeout="00:10:00"
+                        enabled="false" />
+                    <security mode="Message">
+                        <transport clientCredentialType="Windows" protectionLevel="EncryptAndSign" />
+                        <message clientCredentialType="UserName" algorithmSuite="Default" />
+                    </security>
+                </binding>
+            </netTcpBinding>
+        </bindings>
+        <client>
+            <endpoint address="net.tcp://localhost:8733/OKB-3.3/QueryService"
+                binding="netTcpBinding" bindingConfiguration="NetTcpBinding_IQueryService"
+                contract="OKBQuery.IQueryService" name="NetTcpBinding_IQueryService">
+                <identity>
+                    <certificate encodedValue="AwAAAAEAAAAUAAAAD/AlkYJw/OUhl6D/9w8mjJBh39kgAAAAAQAAAPIBAAAwggHuMIIBW6ADAgECAhAdEzTisaf2sEZxrqYZfYtCMAkGBSsOAwIdBQAwFDESMBAGA1UEAxMJbG9jYWxob3N0MB4XDTEwMDgyMDIyMzIwOFoXDTM5MTIzMTIzNTk1OVowFDESMBAGA1UEAxMJbG9jYWxob3N0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDPkfCSLRX8/4F+Z4ys43yZ4MMzjB44cMakPz4Nri+mEB5n2z/0GFatCYzkI2f/nniWqVrBYjHkjsZy2EZioHu4wa99c1XEGJnFNDuNn6ESkfEyhyF4+OqKGnpK9HNrw7OWMuqn2oOh0iFd9fl6FTAm+Y0p3LP+38BuYzpCniqqdwIDAQABo0kwRzBFBgNVHQEEPjA8gBDvi8Rgio9v+mr58TiAvqF5oRYwFDESMBAGA1UEAxMJbG9jYWxob3N0ghAdEzTisaf2sEZxrqYZfYtCMAkGBSsOAwIdBQADgYEANdGlvHKeUptfNu9I0wgA5qjmVB+JDldOAkrfM0R+4IcVQ06y5K7P07uxQAV7+rhnDLgLyFJunUHgzbfjsjFy7vjwtoieXA5j0AYlm4AHR7dHt4HVgkIMYt8XOCqMw5jjFX91xJ89tC7mM9zYR48N9T5QSeMGo+f+JzybeLWxnNs=" />
+                </identity>
+            </endpoint>
+        </client>
+    </system.serviceModel>
+</configuration>
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit/DefaultItems.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit/DefaultItems.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit/DefaultItems.cs	(revision 5296)
@@ -0,0 +1,63 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.MainForm.WPF;
+
+namespace HeuristicLab.OKB.Cockpit {
+
+  public class FileMenuItem : WPFMenuItem, IOKBCockpitItem {
+
+    public override string Name {
+      get { return "File"; }
+    }
+    public override int Position {
+      get { return 0; }
+    }
+    public override void Execute() {      
+    }
+  }
+
+  public class ExtrasRunGCMenuItem : WPFMenuItem, IOKBCockpitItem {
+
+    public override string Name {
+      get { return "Run Garbage Collector"; }
+    }
+
+    public override IEnumerable<string> Structure {
+      get {
+        return new[] { "Extras" };
+      }
+    }
+
+    public override int Position {
+      get { return 9999; }
+    }
+
+    public override void Execute() {
+      GC.Collect();
+    }
+  }
+
+  public class FileExitMenuItem : WPFMenuItem, IOKBCockpitItem {
+
+    public override string Name {
+      get { return "Exit"; }
+    }
+
+    public override int Position {
+      get { return 9999; }
+    }
+    
+    public override IEnumerable<string> Structure {
+      get {
+        return new[] { "File" };
+      }
+    }
+
+    public override void Execute() {
+      MainForm.MainFormManager.MainForm.Close();
+    }
+
+  }  
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit/HeuristicLab.OKB.Cockpit-3.3.csproj
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit/HeuristicLab.OKB.Cockpit-3.3.csproj	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit/HeuristicLab.OKB.Cockpit-3.3.csproj	(revision 5296)
@@ -0,0 +1,225 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{52567721-66A9-4411-9ED6-48DE37732868}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.OKB.Cockpit</RootNamespace>
+    <AssemblyName>HeuristicLab.OKB.Cockpit-3.3</AssemblyName>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <StartupObject>
+    </StartupObject>
+    <FileUpgradeFlags>
+    </FileUpgradeFlags>
+    <OldToolsVersion>3.5</OldToolsVersion>
+    <UpgradeBackupLocation />
+    <PublishUrl>publish\</PublishUrl>
+    <Install>true</Install>
+    <InstallFrom>Disk</InstallFrom>
+    <UpdateEnabled>false</UpdateEnabled>
+    <UpdateMode>Foreground</UpdateMode>
+    <UpdateInterval>7</UpdateInterval>
+    <UpdateIntervalUnits>Days</UpdateIntervalUnits>
+    <UpdatePeriodically>false</UpdatePeriodically>
+    <UpdateRequired>false</UpdateRequired>
+    <MapFileExtensions>true</MapFileExtensions>
+    <ApplicationRevision>0</ApplicationRevision>
+    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
+    <IsWebBootstrapper>false</IsWebBootstrapper>
+    <UseApplicationTrust>false</UseApplicationTrust>
+    <BootstrapperEnabled>true</BootstrapperEnabled>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="HeuristicLab.MainForm-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.MainForm-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.PluginInfrastructure-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.PluginInfrastructure-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="PresentationCore">
+      <RequiredTargetFramework>3.0</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="PresentationFramework">
+      <RequiredTargetFramework>3.0</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Core">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data.Linq">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Runtime.Serialization">
+      <RequiredTargetFramework>3.0</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.ServiceModel">
+      <RequiredTargetFramework>3.0</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Windows.Presentation">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Xml.Linq">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data.DataSetExtensions">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+    <Reference Include="WindowsBase">
+      <RequiredTargetFramework>3.0</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="WindowsFormsIntegration">
+      <RequiredTargetFramework>3.0</RequiredTargetFramework>
+    </Reference>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="DefaultItems.cs" />
+    <Compile Include="MainWindow\CockpitApplication.cs" />
+    <Compile Include="MainWindow\CockpitMainWindow.cs" />
+    <Compile Include="HeuristicLabOkbCockpitPlugin.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="MainWindow\StringParseValidationRule.cs" />
+    <None Include="Properties\AssemblyInfo.frame" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="UpdateLocalInstallation.cmd" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Properties\DataSources\System.Data.DataSet.datasource" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Properties\DataSources\System.Data.DataTable.datasource" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\HeuristicLab.BackgroundProcessing\HeuristicLab.BackgroundProcessing-3.3.csproj">
+      <Project>{589BECAE-69B0-4EB1-8C06-C073531762B7}</Project>
+      <Name>HeuristicLab.BackgroundProcessing-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.MainForm.WPF\HeuristicLab.MainForm.WPF-3.3.csproj">
+      <Project>{1DBC4D60-0064-4A53-B48C-63D144A67B07}</Project>
+      <Name>HeuristicLab.MainForm.WPF-3.3</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
+      <Install>false</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Net.Framework.2.0">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 2.0 %28x86%29</ProductName>
+      <Install>false</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Net.Framework.3.0">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.0 %28x86%29</ProductName>
+      <Install>false</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.5</ProductName>
+      <Install>false</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.5 SP1</ProductName>
+      <Install>true</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
+      <Visible>False</Visible>
+      <ProductName>Windows Installer 3.1</ProductName>
+      <Install>true</Install>
+    </BootstrapperPackage>
+  </ItemGroup>
+  <ItemGroup>
+    <Resource Include="Images\07controlpanel.png" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+    <PostBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call UpdateLocalInstallation.cmd</PostBuildEvent>
+  </PropertyGroup>
+</Project>
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit/MainWindow/CockpitApplication.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit/MainWindow/CockpitApplication.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit/MainWindow/CockpitApplication.cs	(revision 5296)
@@ -0,0 +1,22 @@
+﻿using HeuristicLab.PluginInfrastructure;
+using System.Windows;
+using System;
+using HeuristicLab.MainForm.WPF;
+
+namespace HeuristicLab.OKB.Cockpit {
+
+  [Application("OKB Cockpit")]
+  public class CockpitApplication : ApplicationBase {
+
+    [STAThread]
+    public static void Main() {
+      new CockpitApplication().Run();
+    }
+
+    public override void Run() {
+      Application a = new Application();
+      Window w = new CockpitMainWindow();
+      a.Run(w);
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit/MainWindow/CockpitMainWindow.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit/MainWindow/CockpitMainWindow.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit/MainWindow/CockpitMainWindow.cs	(revision 5296)
@@ -0,0 +1,30 @@
+﻿using System;
+using HeuristicLab.MainForm.WPF;
+using System.Windows.Controls;
+using System.Windows.Media.Imaging;
+using System.Reflection;
+
+namespace HeuristicLab.OKB.Cockpit {
+
+  public interface IOKBCockpitItem { }
+
+  public class CockpitMainWindow : WPFMainFormBase {
+
+    public CockpitMainWindow() {
+      Title = "OKB Cockpit";
+      /* Icon = new Image() { Source =
+        new BitmapImage(new Uri(
+          "pack://application:,,,/" +
+          Assembly.GetExecutingAssembly().GetName().Name +
+          ";component/Images/07controlpanel.png"))
+      }; */
+    }
+
+    public override Type UserInterfaceItemType {
+      get {
+        return typeof(IOKBCockpitItem);
+      }
+    }
+  }
+
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit/MainWindow/StringParseValidationRule.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit/MainWindow/StringParseValidationRule.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit/MainWindow/StringParseValidationRule.cs	(revision 5296)
@@ -0,0 +1,61 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Windows.Controls;
+using System.Windows;
+
+namespace HeuristicLab.OKB.Cockpit {
+  public class StringParseValidationRule : ValidationRule {
+
+    private Type type;
+    public Type Type {
+      get {
+        return type;
+      }
+      set {
+        if (type == value)
+          return;
+        if (type == null)
+          return;
+        switch (Type.GetTypeCode(value)) {
+          // TODO parse nullables
+          case TypeCode.Int32: break;
+          case TypeCode.Double: break;
+          case TypeCode.String: break;
+          case TypeCode.DateTime: break;
+          default:
+            if (value.GetType() == typeof(Guid))
+              break;
+            //throw new ArgumentException(String.Format(
+            //"Parsing validation of type {0} is not supported", value));
+            break;
+        }
+        type = value;
+      }
+    }
+
+    public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo) {
+      if (type == null)
+        return new ValidationResult(true, null);
+      try {
+        string s = (string)value;
+        switch (Type.GetTypeCode(type)) {
+          case TypeCode.Int32: int.Parse(s); break;
+          case TypeCode.Double: double.Parse(s); break;
+          case TypeCode.String: break;
+          case TypeCode.DateTime: DateTime.Parse(s); break;
+          default:
+            if (value.GetType() == typeof(Guid))
+              new Guid(s);
+            else
+              throw new InvalidOperationException();
+            break;
+        }
+        return new ValidationResult(true, null);
+      } catch {
+        return new ValidationResult(false, String.Format("'{0}' is not a valid '{1}'", value, Type.Name));
+      }
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit/Properties/AssemblyInfo.frame
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit/Properties/AssemblyInfo.frame	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit/Properties/AssemblyInfo.frame	(revision 5296)
@@ -0,0 +1,53 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 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.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using HeuristicLab.PluginInfrastructure;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.OKB.Cockpit")]
+[assembly: AssemblyDescription("HeuristicLab Optimization Knowledge Base Cockpit")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2009 HEAL")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components.  If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version
+//      Build Number
+//      Revision
+//
+[assembly: AssemblyVersion("3.3.0.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.0.$WCREV$")]
+[assembly: AssemblyBuildDate("$WCNOW$")]
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit/Properties/DataSources/System.Data.DataSet.datasource
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit/Properties/DataSources/System.Data.DataSet.datasource	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit/Properties/DataSources/System.Data.DataSet.datasource	(revision 5296)
@@ -0,0 +1,10 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<!--
+    This file is automatically generated by Visual Studio .Net. It is
+    used to store generic object data source configuration information.
+    Renaming the file extension or editing the content of this file may
+    cause the file to be unrecognizable by the program.
+-->
+<GenericObjectDataSource DisplayName="DataSet" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
+   <TypeInfo>System.Data.DataSet, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</TypeInfo>
+</GenericObjectDataSource>
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit/Properties/DataSources/System.Data.DataTable.datasource
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit/Properties/DataSources/System.Data.DataTable.datasource	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit/Properties/DataSources/System.Data.DataTable.datasource	(revision 5296)
@@ -0,0 +1,10 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<!--
+    This file is automatically generated by Visual Studio .Net. It is
+    used to store generic object data source configuration information.
+    Renaming the file extension or editing the content of this file may
+    cause the file to be unrecognizable by the program.
+-->
+<GenericObjectDataSource DisplayName="DataTable" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
+   <TypeInfo>System.Data.DataTable, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</TypeInfo>
+</GenericObjectDataSource>
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit/UpdateLocalInstallation.cmd
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit/UpdateLocalInstallation.cmd	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.Cockpit/UpdateLocalInstallation.cmd	(revision 5296)
@@ -0,0 +1,4 @@
+SET target=C:\Program Files\HeuristicLab 3.3
+
+echo Copying OKB Cockpit Assembly
+copy "%ProjectDir%\%Outdir%\HeuristicLab.OKB.Cockpit-3.3.dll" "%target%"
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.ParameterTable/HeuristicLab.OKB.ParameterTable-3.3.csproj
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.ParameterTable/HeuristicLab.OKB.ParameterTable-3.3.csproj	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.ParameterTable/HeuristicLab.OKB.ParameterTable-3.3.csproj	(revision 5296)
@@ -0,0 +1,193 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{009C72FD-CE2D-4027-87A2-4151B03D2E8F}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.OKB.ParameterTable</RootNamespace>
+    <AssemblyName>HeuristicLab.OKB.ParameterTable-3.3</AssemblyName>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <StartupObject>
+    </StartupObject>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+    <FileUpgradeFlags>
+    </FileUpgradeFlags>
+    <OldToolsVersion>3.5</OldToolsVersion>
+    <UpgradeBackupLocation />
+    <PublishUrl>publish\</PublishUrl>
+    <Install>true</Install>
+    <InstallFrom>Disk</InstallFrom>
+    <UpdateEnabled>false</UpdateEnabled>
+    <UpdateMode>Foreground</UpdateMode>
+    <UpdateInterval>7</UpdateInterval>
+    <UpdateIntervalUnits>Days</UpdateIntervalUnits>
+    <UpdatePeriodically>false</UpdatePeriodically>
+    <UpdateRequired>false</UpdateRequired>
+    <MapFileExtensions>true</MapFileExtensions>
+    <ApplicationRevision>0</ApplicationRevision>
+    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
+    <IsWebBootstrapper>false</IsWebBootstrapper>
+    <UseApplicationTrust>false</UseApplicationTrust>
+    <BootstrapperEnabled>true</BootstrapperEnabled>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="HeuristicLab.PluginInfrastructure-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=x86">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.PluginInfrastructure-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Core">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Runtime.Serialization">
+      <RequiredTargetFramework>3.0</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.ServiceModel">
+      <RequiredTargetFramework>3.0</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml.Linq">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data.DataSetExtensions">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLabOKBParameterTablePlugin.cs.frame" />
+    <Compile Include="IPrimitiveParameter.cs" />
+    <Compile Include="IOperatorParameter.cs" />
+    <Compile Include="HeuristicLabOKBParameterTablePlugin.cs" />
+    <Compile Include="IParameter.cs" />
+    <Compile Include="ParameterSetterControl.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="ParameterSetterControl.Designer.cs">
+      <DependentUpon>ParameterSetterControl.cs</DependentUpon>
+    </Compile>
+    <Compile Include="ParameterTable.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="ParameterTable.Designer.cs">
+      <DependentUpon>ParameterTable.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Properties\AssemblyInfo.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="ParameterSetterControl.resx">
+      <DependentUpon>ParameterSetterControl.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="ParameterTable.resx">
+      <DependentUpon>ParameterTable.cs</DependentUpon>
+    </EmbeddedResource>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+    <None Include="Properties\AssemblyInfo.frame" />
+    <None Include="UpdateLocalInstallation.cmd" />
+  </ItemGroup>
+  <ItemGroup>
+    <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
+      <Install>false</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.5 SP1</ProductName>
+      <Install>true</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
+      <Visible>False</Visible>
+      <ProductName>Windows Installer 3.1</ProductName>
+      <Install>true</Install>
+    </BootstrapperPackage>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+SubWCRev "%25ProjectDir%25\" "%25ProjectDir%25\Properties\AssemblyInfo.frame" "%25ProjectDir%25\Properties\AssemblyInfo.cs"
+SubWCRev "%25ProjectDir%25\" "%25ProjectDir%25\HeuristicLabOKBParameterTablePlugin.cs.frame" "%25ProjectDir%25\HeuristicLabOKBParameterTablePlugin.cs"</PreBuildEvent>
+    <PostBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call UpdateLocalInstallation.cmd</PostBuildEvent>
+  </PropertyGroup>
+</Project>
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.ParameterTable/HeuristicLabOKBParameterTablePlugin.cs.frame
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.ParameterTable/HeuristicLabOKBParameterTablePlugin.cs.frame	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.ParameterTable/HeuristicLabOKBParameterTablePlugin.cs.frame	(revision 5296)
@@ -0,0 +1,33 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 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.Text;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.OKB {
+
+  [Plugin("HeuristicLab.OKB.ParameterTable", "3.3.0.$WCREV$")]
+  [PluginFile("HeuristicLab.OKB.ParameterTable-3.3.dll", PluginFileType.Assembly)]
+  public class HeuristicLabOKBParameterTablePlugin : PluginBase {
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.ParameterTable/IOperatorParameter.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.ParameterTable/IOperatorParameter.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.ParameterTable/IOperatorParameter.cs	(revision 5296)
@@ -0,0 +1,12 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace HeuristicLab.OKB.ParameterTable {
+
+  public interface IOperatorParameter : IParameterAccessor {
+    void Set();
+    void Show();
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.ParameterTable/IParameter.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.ParameterTable/IParameter.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.ParameterTable/IParameter.cs	(revision 5296)
@@ -0,0 +1,13 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace HeuristicLab.OKB.ParameterTable {
+  public interface IParameterAccessor {
+    string Name { get; }
+    string Description { get; }
+    string TypeName { get; }
+    string Value { get; }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.ParameterTable/IPrimitiveParameter.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.ParameterTable/IPrimitiveParameter.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.ParameterTable/IPrimitiveParameter.cs	(revision 5296)
@@ -0,0 +1,13 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace HeuristicLab.OKB.ParameterTable {
+
+  public interface IPrimitiveParameter : IParameterAccessor {
+    bool IsValid(string textValue);
+    new string Value { set; }
+  }
+
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.ParameterTable/ParameterSetterControl.Designer.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.ParameterTable/ParameterSetterControl.Designer.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.ParameterTable/ParameterSetterControl.Designer.cs	(revision 5296)
@@ -0,0 +1,83 @@
+﻿namespace HeuristicLab.OKB.ParameterTable {
+  partial class OperatorParameterSetterControl {
+    /// <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.nameBox = new System.Windows.Forms.TextBox();
+      this.setButton = new System.Windows.Forms.Button();
+      this.showButton = new System.Windows.Forms.Button();
+      this.SuspendLayout();
+      //
+      // nameBox
+      //
+      this.nameBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
+      this.nameBox.Enabled = false;
+      this.nameBox.Location = new System.Drawing.Point(3, 3);
+      this.nameBox.Name = "nameBox";
+      this.nameBox.ReadOnly = true;
+      this.nameBox.Size = new System.Drawing.Size(19, 20);
+      this.nameBox.TabIndex = 0;
+      //
+      // setButton
+      //
+      this.setButton.Anchor = System.Windows.Forms.AnchorStyles.Right;
+      this.setButton.Location = new System.Drawing.Point(23, 1);
+      this.setButton.Name = "setButton";
+      this.setButton.Size = new System.Drawing.Size(32, 23);
+      this.setButton.TabIndex = 1;
+      this.setButton.Text = "Set";
+      this.setButton.UseVisualStyleBackColor = true;
+      this.setButton.Click += new System.EventHandler(this.setButton_Click);
+      //
+      // showButton
+      //
+      this.showButton.Anchor = System.Windows.Forms.AnchorStyles.Right;
+      this.showButton.Location = new System.Drawing.Point(55, 1);
+      this.showButton.Name = "showButton";
+      this.showButton.Size = new System.Drawing.Size(42, 23);
+      this.showButton.TabIndex = 2;
+      this.showButton.Text = "Show";
+      this.showButton.UseVisualStyleBackColor = true;
+      this.showButton.Click += new System.EventHandler(this.showButton_Click);
+      //
+      // ParameterSetterControl
+      //
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.showButton);
+      this.Controls.Add(this.setButton);
+      this.Controls.Add(this.nameBox);
+      this.Name = "ParameterSetterControl";
+      this.Size = new System.Drawing.Size(97, 25);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.TextBox nameBox;
+    private System.Windows.Forms.Button setButton;
+    private System.Windows.Forms.Button showButton;
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.ParameterTable/ParameterSetterControl.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.ParameterTable/ParameterSetterControl.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.ParameterTable/ParameterSetterControl.cs	(revision 5296)
@@ -0,0 +1,34 @@
+﻿using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+
+namespace HeuristicLab.OKB.ParameterTable {
+  public partial class OperatorParameterSetterControl : UserControl {
+    public OperatorParameterSetterControl() {
+      InitializeComponent();
+    }
+
+    public event EventHandler SetClicked;
+    public event EventHandler ShowClicked;
+    public string Label {
+      get { return nameBox.Text; }
+      set { nameBox.Text = value; }
+    }
+
+    private void setButton_Click(object sender, EventArgs e) {
+      if (SetClicked != null)
+        SetClicked(sender, e);
+    }
+
+    private void showButton_Click(object sender, EventArgs e) {
+      if (ShowClicked != null)
+        ShowClicked(sender, e);
+    }
+
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.ParameterTable/ParameterSetterControl.resx
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.ParameterTable/ParameterSetterControl.resx	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.ParameterTable/ParameterSetterControl.resx	(revision 5296)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.ParameterTable/ParameterTable.Designer.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.ParameterTable/ParameterTable.Designer.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.ParameterTable/ParameterTable.Designer.cs	(revision 5296)
@@ -0,0 +1,60 @@
+﻿namespace HeuristicLab.OKB.ParameterTable {
+  partial class ParameterTable {
+    /// <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.components = new System.ComponentModel.Container();
+      this.panel = new System.Windows.Forms.TableLayoutPanel();
+      this.toolTip = new System.Windows.Forms.ToolTip(this.components);
+      this.SuspendLayout();
+      // 
+      // panel
+      // 
+      this.panel.CellBorderStyle = System.Windows.Forms.TableLayoutPanelCellBorderStyle.Single;
+      this.panel.ColumnCount = 2;
+      this.panel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
+      this.panel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
+      this.panel.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.panel.Location = new System.Drawing.Point(0, 0);
+      this.panel.Name = "panel";
+      this.panel.RowCount = 1;
+      this.panel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
+      this.panel.Size = new System.Drawing.Size(150, 150);
+      this.panel.TabIndex = 0;
+      // 
+      // ParameterTable
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.panel);
+      this.Name = "ParameterTable";
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.TableLayoutPanel panel;
+    private System.Windows.Forms.ToolTip toolTip;
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.ParameterTable/ParameterTable.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.ParameterTable/ParameterTable.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.ParameterTable/ParameterTable.cs	(revision 5296)
@@ -0,0 +1,85 @@
+﻿using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+
+namespace HeuristicLab.OKB.ParameterTable {
+  public partial class ParameterTable : UserControl {
+
+    public ParameterTable() {
+      InitializeComponent();
+    }
+
+    public void Initialize(IEnumerable<IParameterAccessor> parameters) {
+      SuspendLayout();
+      panel.Controls.Clear();
+      panel.RowStyles.Clear();
+      toolTip.RemoveAll();
+      panel.RowCount = 0;
+      foreach (var p in parameters) {
+        try {
+          Label l = new Label() {
+            Text = p.Name,
+            Dock = DockStyle.Fill,
+            TextAlign = ContentAlignment.MiddleLeft,
+          };
+          Control c = CreateParameterControl(p);
+          toolTip.SetToolTip(l, p.Description);
+          toolTip.SetToolTip(c, p.TypeName);
+          panel.Controls.Add(l);
+          panel.Controls.Add(c);
+          panel.SetCellPosition(l, new TableLayoutPanelCellPosition(0, panel.RowCount));
+          panel.SetCellPosition(c, new TableLayoutPanelCellPosition(1, panel.RowCount));
+          panel.RowCount++;
+        } catch (Exception x) {
+          MessageBox.Show(string.Format("could not display parameter {0}:\n{1}",
+            p.Name, x.ToString()),
+            "Error while creating parameter editor",
+            MessageBoxButtons.OK, MessageBoxIcon.Error);
+        }
+      }
+      Label filler = new Label() { Dock = DockStyle.Fill };
+      panel.Controls.Add(filler);
+      panel.SetCellPosition(filler, new TableLayoutPanelCellPosition(0, panel.RowCount));
+      panel.RowStyles.Add(new RowStyle(SizeType.AutoSize));
+      ResumeLayout();
+    }
+
+    private Control CreateParameterControl(IParameterAccessor parameter) {
+      if (parameter is IPrimitiveParameter) {
+        TextBox box = new TextBox() {
+          Dock = DockStyle.Fill,
+          Text = parameter.Value,
+        };
+        box.TextChanged += (s, a) => { UpdateParameter((IPrimitiveParameter)parameter, box); };
+        return box;
+      } else if (parameter is IOperatorParameter) {
+        IOperatorParameter op = (IOperatorParameter)parameter;
+        OperatorParameterSetterControl control = new OperatorParameterSetterControl() {
+          Dock = DockStyle.Fill,
+          Label = op.Value,
+        };
+        control.SetClicked += (s, a) => {
+          op.Set();
+          control.Label = op.Value;
+        };
+        control.ShowClicked += (s, a) => { op.Show(); };
+        return control;
+      } else throw new ArgumentException("unsupported parameter type");
+    }
+
+    private void UpdateParameter(IPrimitiveParameter parameter, TextBox box) {
+      string value = box.Text;
+      if (parameter.IsValid(value)) {
+        parameter.Value = value;
+        box.BackColor = Color.White;
+      } else {
+        box.BackColor = Color.LightPink;
+      }
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.ParameterTable/ParameterTable.resx
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.ParameterTable/ParameterTable.resx	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.ParameterTable/ParameterTable.resx	(revision 5296)
@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="toolTip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+</root>
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.ParameterTable/Properties/AssemblyInfo.frame
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.ParameterTable/Properties/AssemblyInfo.frame	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.ParameterTable/Properties/AssemblyInfo.frame	(revision 5296)
@@ -0,0 +1,38 @@
+﻿using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using HeuristicLab.PluginInfrastructure;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.OKB.ParameterTable")]
+[assembly: AssemblyDescription("Table of OKB Parameters")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab 3")]
+[assembly: AssemblyCopyright("(c) HEAL 2009-2010")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components.  If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("3c30eed4-4132-45dc-ac42-0e1d399b25b5")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("3.3.0.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.0.$WCREV$")]
+[assembly: AssemblyBuildDate("$WCNOW$")]
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.ParameterTable/UpdateLocalInstallation.cmd
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.ParameterTable/UpdateLocalInstallation.cmd	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.ParameterTable/UpdateLocalInstallation.cmd	(revision 5296)
@@ -0,0 +1,5 @@
+set target=C:\Program Files\HeuristicLab 3.3
+
+echo Copying OKB ParameterTable Assembly
+copy "%SolutionDir%\HeuristicLab.OKB.ParameterTable\%Outdir%\HeuristicLab.OKB.ParameterTable-3.3.dll" "%target%"
+echo ---------------------------
Index: /branches/OKB (trunk integration)/HeuristicLab.OKB.sln
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.OKB.sln	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.OKB.sln	(revision 5296)
@@ -0,0 +1,81 @@
+﻿
+Microsoft Visual Studio Solution File, Format Version 11.00
+# Visual Studio 2010
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{9E843318-7235-4B2B-81A7-160FDDADD9E1}"
+	ProjectSection(SolutionItems) = preProject
+		ServiceClient.config = ServiceClient.config
+	EndProjectSection
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Clients.OKB-3.3", "HeuristicLab.Clients.OKB-3.3\HeuristicLab.Clients.OKB-3.3.csproj", "{73857A9C-9706-4B72-8D9C-210B5B6A5691}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Services.OKB.DataTransfer-3.3", "HeuristicLab.Services.OKB.DataTransfer\3.3\HeuristicLab.Services.OKB.DataTransfer-3.3.csproj", "{209FD7A1-DFB2-4B9F-9268-B95E886B2F7A}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Services.OKB.DataAccess-3.3", "HeuristicLab.Services.OKB.DataAccess\3.3\HeuristicLab.Services.OKB.DataAccess-3.3.csproj", "{E36BE58F-F3CE-40BB-9AB3-9F9E30AD5CCF}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Services.OKB-3.3", "HeuristicLab.Services.OKB\3.3\HeuristicLab.Services.OKB-3.3.csproj", "{766DA4B7-2A0E-4CDE-8F90-93D8B1AD62CF}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Services.OKB.DataAccess-3.3.Tests", "HeuristicLab.Services.OKB.DataAccess\3.3\Tests\HeuristicLab.Services.OKB.DataAccess-3.3.Tests.csproj", "{89234006-FE1B-4A15-AFEC-91CB3526F0A5}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Any CPU = Debug|Any CPU
+		Debug|x64 = Debug|x64
+		Debug|x86 = Debug|x86
+		Release|Any CPU = Release|Any CPU
+		Release|x64 = Release|x64
+		Release|x86 = Release|x86
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{73857A9C-9706-4B72-8D9C-210B5B6A5691}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{73857A9C-9706-4B72-8D9C-210B5B6A5691}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{73857A9C-9706-4B72-8D9C-210B5B6A5691}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{73857A9C-9706-4B72-8D9C-210B5B6A5691}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{73857A9C-9706-4B72-8D9C-210B5B6A5691}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{73857A9C-9706-4B72-8D9C-210B5B6A5691}.Release|Any CPU.Build.0 = Release|Any CPU
+		{73857A9C-9706-4B72-8D9C-210B5B6A5691}.Release|x64.ActiveCfg = Release|Any CPU
+		{73857A9C-9706-4B72-8D9C-210B5B6A5691}.Release|x86.ActiveCfg = Release|Any CPU
+		{209FD7A1-DFB2-4B9F-9268-B95E886B2F7A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{209FD7A1-DFB2-4B9F-9268-B95E886B2F7A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{209FD7A1-DFB2-4B9F-9268-B95E886B2F7A}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{209FD7A1-DFB2-4B9F-9268-B95E886B2F7A}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{209FD7A1-DFB2-4B9F-9268-B95E886B2F7A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{209FD7A1-DFB2-4B9F-9268-B95E886B2F7A}.Release|Any CPU.Build.0 = Release|Any CPU
+		{209FD7A1-DFB2-4B9F-9268-B95E886B2F7A}.Release|x64.ActiveCfg = Release|Any CPU
+		{209FD7A1-DFB2-4B9F-9268-B95E886B2F7A}.Release|x86.ActiveCfg = Release|Any CPU
+		{E36BE58F-F3CE-40BB-9AB3-9F9E30AD5CCF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{E36BE58F-F3CE-40BB-9AB3-9F9E30AD5CCF}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{E36BE58F-F3CE-40BB-9AB3-9F9E30AD5CCF}.Debug|x64.ActiveCfg = Debug|x64
+		{E36BE58F-F3CE-40BB-9AB3-9F9E30AD5CCF}.Debug|x64.Build.0 = Debug|x64
+		{E36BE58F-F3CE-40BB-9AB3-9F9E30AD5CCF}.Debug|x86.ActiveCfg = Debug|x86
+		{E36BE58F-F3CE-40BB-9AB3-9F9E30AD5CCF}.Debug|x86.Build.0 = Debug|x86
+		{E36BE58F-F3CE-40BB-9AB3-9F9E30AD5CCF}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{E36BE58F-F3CE-40BB-9AB3-9F9E30AD5CCF}.Release|Any CPU.Build.0 = Release|Any CPU
+		{E36BE58F-F3CE-40BB-9AB3-9F9E30AD5CCF}.Release|x64.ActiveCfg = Release|x64
+		{E36BE58F-F3CE-40BB-9AB3-9F9E30AD5CCF}.Release|x64.Build.0 = Release|x64
+		{E36BE58F-F3CE-40BB-9AB3-9F9E30AD5CCF}.Release|x86.ActiveCfg = Release|x86
+		{E36BE58F-F3CE-40BB-9AB3-9F9E30AD5CCF}.Release|x86.Build.0 = Release|x86
+		{766DA4B7-2A0E-4CDE-8F90-93D8B1AD62CF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{766DA4B7-2A0E-4CDE-8F90-93D8B1AD62CF}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{766DA4B7-2A0E-4CDE-8F90-93D8B1AD62CF}.Debug|x64.ActiveCfg = Debug|x64
+		{766DA4B7-2A0E-4CDE-8F90-93D8B1AD62CF}.Debug|x64.Build.0 = Debug|x64
+		{766DA4B7-2A0E-4CDE-8F90-93D8B1AD62CF}.Debug|x86.ActiveCfg = Debug|x86
+		{766DA4B7-2A0E-4CDE-8F90-93D8B1AD62CF}.Debug|x86.Build.0 = Debug|x86
+		{766DA4B7-2A0E-4CDE-8F90-93D8B1AD62CF}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{766DA4B7-2A0E-4CDE-8F90-93D8B1AD62CF}.Release|Any CPU.Build.0 = Release|Any CPU
+		{766DA4B7-2A0E-4CDE-8F90-93D8B1AD62CF}.Release|x64.ActiveCfg = Release|x64
+		{766DA4B7-2A0E-4CDE-8F90-93D8B1AD62CF}.Release|x64.Build.0 = Release|x64
+		{766DA4B7-2A0E-4CDE-8F90-93D8B1AD62CF}.Release|x86.ActiveCfg = Release|x86
+		{766DA4B7-2A0E-4CDE-8F90-93D8B1AD62CF}.Release|x86.Build.0 = Release|x86
+		{89234006-FE1B-4A15-AFEC-91CB3526F0A5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{89234006-FE1B-4A15-AFEC-91CB3526F0A5}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{89234006-FE1B-4A15-AFEC-91CB3526F0A5}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{89234006-FE1B-4A15-AFEC-91CB3526F0A5}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{89234006-FE1B-4A15-AFEC-91CB3526F0A5}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{89234006-FE1B-4A15-AFEC-91CB3526F0A5}.Release|Any CPU.Build.0 = Release|Any CPU
+		{89234006-FE1B-4A15-AFEC-91CB3526F0A5}.Release|x64.ActiveCfg = Release|Any CPU
+		{89234006-FE1B-4A15-AFEC-91CB3526F0A5}.Release|x86.ActiveCfg = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.AttributeSelection/3.3/AttributeSelector.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.AttributeSelection/3.3/AttributeSelector.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.AttributeSelection/3.3/AttributeSelector.cs	(revision 5296)
@@ -0,0 +1,185 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Data.Linq;
+using System.Linq;
+using System.Linq.Expressions;
+using System.Text;
+using HeuristicLab.Services.OKB.DataAccess;
+
+namespace HeuristicLab.Services.OKB.AttributeSelection {
+
+  public class AttributeSelector : IAttributeSelector {
+
+    public string TableName { get; private set; }
+    public string FieldName { get; private set; }
+    public bool IsHidden { get; set; }
+    public object MinValue { get; set; }
+    public object MaxValue { get; set; }
+    public ICollection<object> AllowedValues { get; set; }
+
+    public Type TableType { get; private set; }
+    public bool IsDynamic { get; private set; }
+    public Type DataType { get; private set; }
+    public int ParentId { get; private set; }
+
+    protected static readonly List<string> staticTables = new List<string>() {
+      typeof(AlgorithmClass).Name,
+      typeof(Algorithm).Name,
+      typeof(ProblemClass).Name,
+      typeof(Problem).Name,
+      typeof(Experiment).Name,
+      typeof(Platform).Name,
+      typeof(SolutionRepresentation).Name,
+      typeof(Project).Name,
+      typeof(Run).Name,
+      typeof(Client).Name,
+      typeof(User).Name,
+    };
+
+    protected static readonly List<string> dynamicTables = new List<string>() {
+      typeof(ProblemCharacteristic).Name,
+      typeof(Parameter).Name,
+      typeof(Result).Name,
+    };
+
+    protected AttributeSelector(Type tableType, string fieldName, bool isDynamic, Type dataType, int parentId) {
+      TableName = tableType.Name;
+      FieldName = fieldName;
+      TableType = tableType;
+      IsDynamic = isDynamic;
+      DataType = dataType;
+      ParentId = parentId;
+    }
+
+    public AttributeSelector(OKBDataContext okb, string tableName, string fieldName) {
+      TableName = tableName;
+      FieldName = fieldName;
+      TableType = GetTableType(tableName);
+      ITable Table = GetTable(okb, tableName);
+      if (staticTables.Contains(tableName)) {
+        IsDynamic = false;
+        try {
+          DataType = TableType.GetProperty(fieldName).PropertyType;
+        }
+        catch (Exception x) {
+          throw new ArgumentException(String.Format(
+            "Invalid field name {0} in table {1}", fieldName, tableName),
+            x);
+        }
+      } else if (dynamicTables.Contains(tableName)) {
+        IsDynamic = true;
+        try {
+          IDynamicParent parent =
+            Table
+            .Cast<IDynamicParent>()
+            .Single(t => t.Name == fieldName);
+          ParentId = parent.Id;
+          DataType = parent.DataType.Type;
+        }
+        catch (Exception x) {
+          throw new ArgumentException(String.Format(
+            "Invalid field name {0} in table {1}", fieldName, tableName),
+            x);
+        }
+      } else {
+        throw new ArgumentException(String.Format("Invalid table name {0}", tableName));
+      }
+    }
+
+    protected static Type GetTableType(string name) {
+      try {
+        return typeof(Run).Assembly.GetType(typeof(Run).Namespace + "." + name, true);
+      }
+      catch {
+        return null;
+      }
+    }
+
+    protected static ITable GetTable(OKBDataContext okb, string name) {
+      return okb.GetTable(GetTableType(name));
+    }
+
+    public string FullName {
+      get {
+        return new StringBuilder().Append(TableName).Append('_').Append(FieldName).ToString();
+      }
+    }
+
+    protected static void LoadWith(DataLoadOptions dlo, Type parentType, Type type) {
+      ParameterExpression parent = Expression.Parameter(parentType, parentType.Name.ToLower());
+      LambdaExpression expr = Expression.Lambda(Expression.PropertyOrField(parent, type.Name), parent);
+      try {
+        dlo.LoadWith(expr);
+      }
+      catch (ArgumentException) {
+        Console.WriteLine(String.Format("Info: dlo.LoadWith<{0}>({1}) has already been added", parent.Type.Name, expr));
+      }
+    }
+
+    protected LambdaExpression GetDynamicSelector<T>(
+      Type masterType,
+      Expression<Func<Run, T>> parentSelector,
+      Expression<Func<T, int>> intSelector,
+      Expression<Func<T, double>> doubleSelector,
+      Expression<Func<T, string>> stringSelector,
+      Expression<Func<T, object>> operatorNameSelector) {
+      if (TableType != masterType)
+        return null;
+      ParameterExpression run = Expression.Parameter(typeof(Run), "run");
+      switch (Type.GetTypeCode(DataType)) {
+        case TypeCode.Int32:
+          return ExpressionTools.CallAfter<Run>(intSelector, parentSelector);
+        case TypeCode.Double:
+          return ExpressionTools.CallAfter<Run>(doubleSelector, parentSelector);
+        case TypeCode.String:
+          return ExpressionTools.CallAfter<Run>(stringSelector, parentSelector);
+        case TypeCode.Object:
+          return ExpressionTools.CallAfter<Run>(operatorNameSelector, parentSelector);
+      };
+      return null;
+    }
+
+    public override string ToString() {
+      StringBuilder sb = new StringBuilder()
+        .Append(TableName)
+        .Append('.')
+        .Append(FieldName);
+      if (MinValue != null)
+        sb.Append(" >").Append(MinValue);
+      if (MaxValue != null)
+        sb.Append(" <").Append(MaxValue);
+      if (AllowedValues != null)
+        sb.Append(" in [")
+          .Append(string.Join(", ",
+                    AllowedValues
+                    .Select(v => v.ToString())
+                    .ToArray()))
+          .Append(']');
+      if (IsHidden)
+        return String.Format("({0})", sb.ToString());
+      else
+        return sb.ToString();
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.AttributeSelection/3.3/DataSetBuilder.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.AttributeSelection/3.3/DataSetBuilder.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.AttributeSelection/3.3/DataSetBuilder.cs	(revision 5296)
@@ -0,0 +1,152 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Data;
+using System.Data.Linq;
+using System.Linq;
+using System.Linq.Expressions;
+using HeuristicLab.Services.OKB.DataAccess;
+
+
+namespace HeuristicLab.Services.OKB.AttributeSelection {
+  public class DataSetBuilder : IEnumerable<DataRow> {
+
+    public static DataSet GetDataSet(OKBDataContext okb, IEnumerable<RunAttributeSelector> selectors) {
+      DataSetBuilder builder = new DataSetBuilder(okb, selectors);
+      DataTable runs = new DataTable("Runs");
+      foreach (DataRow row in builder) {
+        runs.Rows.Add(row);
+      }
+      DataSet dataSet = new DataSet();
+      dataSet.Tables.Add(runs);
+      return dataSet;
+    }
+
+    private IQueryable<Run> query;
+    public DataTable Runs { get; private set; }
+    private IEnumerable<RunAttributeSelector> selectors;
+
+    public DataSetBuilder(OKBDataContext okb, IEnumerable<RunAttributeSelector> selectors) {
+      DataLoadOptions dlo = new DataLoadOptions();
+      query = okb.Runs.AsQueryable();
+      Runs = new DataTable("Runs");
+      this.selectors = selectors;
+
+      foreach (var selector in selectors) {
+        query = query.Where(selector.GetWhereExpression());
+        selector.ConfigureDataLoadOptions(dlo);
+        if (!selector.IsHidden) {
+          AddColumn(selector);
+        }
+      }
+
+      okb.LoadOptions = dlo;
+      Console.WriteLine(query);
+    }
+
+    private void AddColumn(RunAttributeSelector selector) {
+      Type type = selector.DataType;
+      if (type == typeof(object))
+        type = typeof(string);
+      if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Nullable<>))
+        type = type.GetGenericArguments()[0];
+      int i = 0;
+      string columnName = selector.FullName;
+      while (Runs.Columns.Contains(columnName)) {
+        i++;
+        columnName = string.Format("{0}({1})", selector.FullName, i);
+      }
+      Runs.Columns.Add(columnName, type);
+    }
+
+    public IEnumerator<DataRow> GetEnumerator() {
+      foreach (var run in query) {
+        DataRow row = Runs.NewRow();
+        int columnNr = 0;
+        foreach (var selector in selectors.Where(s => !s.IsHidden)) {
+          object value = selector.CompiledSelector(run);
+          row[columnNr] = selector.CompiledSelector(run) ?? DBNull.Value;
+          columnNr++;
+        }
+        yield return row;
+      }
+    }
+
+    IEnumerator IEnumerable.GetEnumerator() {
+      return GetEnumerator();
+    }
+
+
+    public int GetCount() {
+      return query.Count();
+    }
+
+    public static IEnumerable<object> GetEntities(OKBDataContext okb, Type tableType, IEnumerable<int> ids) {
+      ITable table = okb.GetTable(tableType);
+
+      // idFilter = element => ids.Contains(element.Id)
+      ParameterExpression param = Expression.Parameter(table.ElementType, "element");
+      LambdaExpression idFilter = Expression.Lambda(
+        Expression.Call(
+          null,
+          ExpressionTools.Enumerable_Contains.MakeGenericMethod(typeof(int)),
+          Expression.Constant(ids),
+          Expression.Property(param, "Id")), param);
+
+      // idSelector = element => element.Id
+      ParameterExpression param2 = Expression.Parameter(table.ElementType, "element");
+      LambdaExpression idSelector = Expression.Lambda(
+        Expression.Property(param2, "Id"), param2);
+
+      // selector = () => okb.<tableType>.Where(idFilter).OrderBy(idSelector).Cast<object>()
+      LambdaExpression selector =
+        Expression.Lambda(
+          Expression.Call(
+            null,
+            ExpressionTools.Enumerable_Cast.MakeGenericMethod(typeof(object)),
+            Expression.Call(
+              null,
+              ExpressionTools.Enumerable_OrderBy.MakeGenericMethod(table.ElementType, typeof(int)),
+              Expression.Call(
+                null,
+                ExpressionTools.Enumerable_Where.MakeGenericMethod(table.ElementType),
+                table.Expression,
+                idFilter),
+             idSelector)));
+      return (IEnumerable<object>)selector.Compile().DynamicInvoke();
+    }
+
+    public static int CountEntities(OKBDataContext okb, Type tableType) {
+      ITable table = okb.GetTable(tableType);
+      // okb.<tableType>.Count();
+      LambdaExpression counter =
+        Expression.Lambda(
+          Expression.Call(
+            null,
+            ExpressionTools.Enumerable_Count.MakeGenericMethod(table.ElementType),
+            table.Expression));
+      return (int)counter.Compile().DynamicInvoke();
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.AttributeSelection/3.3/ExpressionTools.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.AttributeSelection/3.3/ExpressionTools.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.AttributeSelection/3.3/ExpressionTools.cs	(revision 5296)
@@ -0,0 +1,107 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Linq.Expressions;
+using System.Reflection;
+using HeuristicLab.Services.OKB.DataAccess;
+
+namespace HeuristicLab.Services.OKB.AttributeSelection {
+
+  public static class ExpressionTools {
+
+    /// <summary>
+    /// p => f(g(p)) where p : T
+    /// </summary>
+    public static LambdaExpression CallAfter<T>(Expression f, Expression g) {
+      ParameterExpression p = Expression.Parameter(typeof(T), "p");
+      return Expression.Lambda(Expression.Invoke(f, Expression.Invoke(g, p)), p);
+    }
+
+    public static Selector GetSelector<T, D>(Expression<Func<Run, T>> tableSelector, Expression<Func<T, D>> fieldSelector) {
+      Expression member = fieldSelector.Body;
+      while (member is UnaryExpression)
+        member = ((UnaryExpression)member).Operand;
+      if (!(member is MemberExpression))
+        throw new ArgumentException("cannot determine field name");
+      string fieldName = ((MemberExpression)member).Member.Name;
+      return new Selector() {
+        Table = tableSelector.Body.Type,
+        Field = fieldName,
+        Expression = ExpressionTools.CallAfter<Run>(fieldSelector, tableSelector),
+      };
+    }
+
+    public static readonly List<Type> SupportedTypes = new List<Type>() {
+      typeof(int), typeof(double), typeof(DateTime), typeof(Guid) };
+
+    public static BinaryExpression GetLessThanOrEqualExpression<T>(Expression left, Expression right) {
+      if (SupportedTypes.Contains(typeof(T)))
+        return Expression.LessThanOrEqual(left, right);
+      else if (typeof(T) == typeof(string))
+        return Expression.LessThanOrEqual(
+          GetStringComparisonExpression(left, right), Expression.Constant(0));
+      else throw new ArgumentException("Unsupported comparison for types of " + typeof(T));
+    }
+
+    public static BinaryExpression GetGreaterOrEqualExpression<T>(Expression left, Expression right) {
+      if (SupportedTypes.Contains(typeof(T)))
+        return Expression.GreaterThanOrEqual(left, right);
+      else if (typeof(T) == typeof(string))
+        return Expression.GreaterThanOrEqual(
+          GetStringComparisonExpression(left, right), Expression.Constant(0));
+      else throw new ArgumentException("Unsupported comparison for types of " + typeof(T));
+    }
+
+    public static MethodCallExpression GetStringComparisonExpression(Expression left, Expression right) {
+      return Expression.Call(null, String_Compare, left, right);
+    }
+
+    public static readonly MethodInfo String_Compare =
+      typeof(string).GetMethod("Compare", new[] { typeof(string), typeof(string) });
+
+    public static readonly MethodInfo Enumerable_Contains =
+      typeof(Enumerable).GetMethods().Single(mi => mi.Name == "Contains" && mi.GetParameters().Count() == 2);
+
+    public static readonly MethodInfo Enumerable_Single =
+      typeof(Enumerable).GetMethods().Single(mi => mi.Name == "Single" && mi.GetParameters().Count() == 2);
+
+    public static readonly MethodInfo Enumerable_Where =
+      (from mi in typeof(Enumerable).GetMethods()
+       where mi.Name == "Where"
+       let p = mi.GetParameters()
+       where p.Count() == 2
+       let pt = p[1].ParameterType
+       where pt.IsGenericType
+       where pt.GetGenericArguments().Count() == 2
+       select mi).Single();
+
+    public static readonly MethodInfo Enumerable_Cast = typeof(Enumerable).GetMethod("Cast");
+
+    public static readonly MethodInfo Enumerable_OrderBy =
+      typeof(Enumerable).GetMethods().Single(mi => mi.Name == "OrderBy" && mi.GetParameters().Count() == 2);
+
+    public static readonly MethodInfo Enumerable_Count =
+      typeof(Enumerable).GetMethods().Single(mi => mi.Name == "Count" && mi.GetParameters().Count() == 1);
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.AttributeSelection/3.3/HeuristicLab.Services.OKB.AttributeSelection-3.3.csproj
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.AttributeSelection/3.3/HeuristicLab.Services.OKB.AttributeSelection-3.3.csproj	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.AttributeSelection/3.3/HeuristicLab.Services.OKB.AttributeSelection-3.3.csproj	(revision 5296)
@@ -0,0 +1,167 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{E80A68DB-D6E1-4395-ABF0-AFE09E4DEF8B}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Services.OKB.AttributeSelection</RootNamespace>
+    <AssemblyName>HeuristicLab.Services.OKB.AttributeSelection-3.3</AssemblyName>
+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <FileUpgradeFlags>
+    </FileUpgradeFlags>
+    <OldToolsVersion>3.5</OldToolsVersion>
+    <UpgradeBackupLocation />
+    <PublishUrl>publish\</PublishUrl>
+    <Install>true</Install>
+    <InstallFrom>Disk</InstallFrom>
+    <UpdateEnabled>false</UpdateEnabled>
+    <UpdateMode>Foreground</UpdateMode>
+    <UpdateInterval>7</UpdateInterval>
+    <UpdateIntervalUnits>Days</UpdateIntervalUnits>
+    <UpdatePeriodically>false</UpdatePeriodically>
+    <UpdateRequired>false</UpdateRequired>
+    <MapFileExtensions>true</MapFileExtensions>
+    <ApplicationRevision>0</ApplicationRevision>
+    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
+    <IsWebBootstrapper>false</IsWebBootstrapper>
+    <UseApplicationTrust>false</UseApplicationTrust>
+    <BootstrapperEnabled>true</BootstrapperEnabled>
+    <TargetFrameworkProfile />
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <DocumentationFile>bin\Release\HeuristicLab.Services.OKB.AttributeSelection-3.3.xml</DocumentationFile>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <DocumentationFile>bin\x64\Release\HeuristicLab.Services.OKB.AttributeSelection-3.3.xml</DocumentationFile>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <DocumentationFile>bin\x86\Release\HeuristicLab.Services.OKB.AttributeSelection-3.3.xml</DocumentationFile>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup>
+    <SignAssembly>true</SignAssembly>
+  </PropertyGroup>
+  <PropertyGroup>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data.Linq">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Xml.Linq">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data.DataSetExtensions">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="AttributeSelector.cs" />
+    <Compile Include="DataSetBuilder.cs" />
+    <Compile Include="ExpressionTools.cs" />
+    <Compile Include="IAttributeSelector.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <None Include="HeuristicLab.snk" />
+    <None Include="Properties\AssemblyInfo.frame" />
+    <Compile Include="RunAttributeSelector.cs" />
+    <Compile Include="Selector.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
+      <Install>false</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.5 SP1</ProductName>
+      <Install>true</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
+      <Visible>False</Visible>
+      <ProductName>Windows Installer 3.1</ProductName>
+      <Install>true</Install>
+    </BootstrapperPackage>
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\HeuristicLab.Services.OKB.DataAccess\3.3\HeuristicLab.Services.OKB.DataAccess-3.3.csproj">
+      <Project>{E36BE58F-F3CE-40BB-9AB3-9F9E30AD5CCF}</Project>
+      <Name>HeuristicLab.Services.OKB.DataAccess-3.3</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.AttributeSelection/3.3/IAttributeSelector.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.AttributeSelection/3.3/IAttributeSelector.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.AttributeSelection/3.3/IAttributeSelector.cs	(revision 5296)
@@ -0,0 +1,35 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Collections.Generic;
+
+namespace HeuristicLab.Services.OKB.AttributeSelection {
+
+  public interface IAttributeSelector {
+    string TableName { get; }
+    string FieldName { get; }
+    bool IsHidden { get; }
+    object MinValue { get; }
+    object MaxValue { get; }
+    ICollection<object> AllowedValues { get; }
+  }
+
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.AttributeSelection/3.3/Properties/AssemblyInfo.frame
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.AttributeSelection/3.3/Properties/AssemblyInfo.frame	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.AttributeSelection/3.3/Properties/AssemblyInfo.frame	(revision 5296)
@@ -0,0 +1,57 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.Services.OKB.AttributeSelection")]
+[assembly: AssemblyDescription("Attribute selection for HeuristicLab OKB services")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2010 HEAL")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components.  If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("3cbb2cba-f4e7-4e4a-9cb2-1eed8b7e2a24")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("3.3.0.0")]
+[assembly: AssemblyFileVersion("3.3.0.$WCREV$")]
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.AttributeSelection/3.3/RunAttributeSelector.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.AttributeSelection/3.3/RunAttributeSelector.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.AttributeSelection/3.3/RunAttributeSelector.cs	(revision 5296)
@@ -0,0 +1,323 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Data.Linq;
+using System.Linq;
+using System.Linq.Expressions;
+using System.Reflection;
+using HeuristicLab.Services.OKB.DataAccess;
+
+namespace HeuristicLab.Services.OKB.AttributeSelection {
+
+  public class AttributeSpecifier {
+    public string TableName { get; set; }
+    public string FieldName { get; set; }
+    public Type DataType { get; set; }
+  }
+
+  public class RunAttributeSelector : AttributeSelector {
+
+    public RunAttributeSelector(OKBDataContext okb, string table, string field)
+      : base(okb, table, field) { }
+
+    public RunAttributeSelector(OKBDataContext okb, IAttributeSelector selector)
+      : base(okb, selector.TableName, selector.FieldName) {
+      IsHidden = selector.IsHidden;
+      MinValue = selector.MinValue;
+      MaxValue = selector.MaxValue;
+      AllowedValues = selector.AllowedValues;
+    }
+
+    protected RunAttributeSelector(Type tableType, string fieldName, bool isDynamic, Type dataType, int parentId)
+      : base(tableType, fieldName, isDynamic, dataType, parentId) { }
+
+    public static IEnumerable<RunAttributeSelector> GetAllAttributeSelectors(OKBDataContext okb) {
+      OKBDataContext o = new OKBDataContext(okb.Connection.ConnectionString);
+      DataLoadOptions dlo = new DataLoadOptions();
+      dlo.LoadWith<Result>(r => r.DataType);
+      dlo.LoadWith<Parameter>(p => p.DataType);
+      dlo.LoadWith<ProblemCharacteristic>(pc => pc.DataType);
+      o.LoadOptions = dlo;
+      foreach (Selector selector in Selectors) {
+        yield return new RunAttributeSelector(o, selector.Table.Name, selector.Field);
+      }
+      foreach (Result result in okb.Results) {
+        yield return new RunAttributeSelector(typeof(Result), result.Name, true, result.DataType.Type, result.Id);
+      }
+      foreach (Parameter p in okb.Parameters) {
+        yield return new RunAttributeSelector(typeof(Parameter), p.Name, true, p.DataType.Type, p.Id);
+      }
+      foreach (ProblemCharacteristic pc in okb.ProblemCharacteristics) {
+        yield return new RunAttributeSelector(typeof(ProblemCharacteristic), pc.Name, true, pc.DataType.Type, pc.Id);
+      }
+    }
+
+    public void ConfigureDataLoadOptions(DataLoadOptions dlo) {
+      if (IsHidden)
+        return;
+      Include(TableType, dlo);
+    }
+
+    private static readonly Dictionary<Type, Type> parents = new Dictionary<Type, Type>() {
+      { typeof(Run), null },
+      { typeof(Client), typeof(Run) },
+      { typeof(User), typeof(Run) },
+      { typeof(Experiment), typeof(Run) },
+      { typeof(Project), typeof(Experiment) },
+      { typeof(Algorithm), typeof(Experiment) },
+      { typeof(AlgorithmClass), typeof(Algorithm) },
+      { typeof(Platform), typeof(Algorithm) },
+      { typeof(Problem), typeof(Experiment) },
+      { typeof(ProblemClass), typeof(Problem) },
+      { typeof(SolutionRepresentation), typeof(Problem) },
+    };
+
+    public static MethodInfo Enumerable_Where =
+      typeof(Enumerable).GetMethods().Single(mi =>
+        mi.Name == "Where" &&
+        mi.GetParameters().Count() == 2 &&
+        mi.GetParameters()[1].ParameterType.GetGenericArguments().Count() == 2);
+
+    public static MethodInfo Enumerable_Cast = typeof(Enumerable).GetMethod("Cast");
+
+    private void AssociateWith<T, V>(DataLoadOptions dlo,
+      Expression<Func<T, IEnumerable>> intSelector,
+      Expression<Func<T, IEnumerable>> doubleSelector,
+      Expression<Func<T, IEnumerable>> charSelector,
+      Expression<Func<T, IEnumerable>> blobSelector,
+      Expression<Func<V, bool>> filterPredicate) {
+      Expression<Func<T, IEnumerable>> selector;
+      switch (Type.GetTypeCode(DataType)) {
+        case TypeCode.Int32: selector = intSelector; break;
+        case TypeCode.Double: selector = doubleSelector; break;
+        case TypeCode.String: selector = charSelector; break;
+        default:
+          if (blobSelector != null)
+            selector = blobSelector;
+          else
+            throw new ArgumentException("DataType");
+          break;
+      }
+      ParameterExpression param = Expression.Parameter(typeof(T), "param");
+      dlo.AssociateWith<T>((Expression<Func<T, object>>)
+        Expression.Lambda(
+          Expression.Convert(
+            Expression.Call(
+              null,
+              Enumerable_Where.MakeGenericMethod(typeof(V)),
+              Expression.Convert(Expression.Invoke(selector, param), typeof(IEnumerable<V>)),
+              filterPredicate),
+          typeof(object)), param));
+      try {
+        dlo.LoadWith(selector);
+      }
+      catch (ArgumentException) {
+        Console.WriteLine("INFO: not adding (duplicate) load option: dlo.LoadWith<{0}>({1})", typeof(T).Name, selector.ToString());
+        Console.WriteLine("INFO: clearing association filters to allow multiple associations");
+        dlo.AssociateWith<T>((Expression<Func<T, object>>)
+          Expression.Lambda(
+            Expression.Convert(
+            Expression.Invoke(selector, param),
+            typeof(object)),
+          param));
+      }
+    }
+
+    private void Include(Type type, DataLoadOptions dlo) {
+      if (parents.ContainsKey(type)) {
+        Type parentType = parents[type];
+        if (parentType == null)
+          return;
+        LoadWith(dlo, parentType, type);
+        Include(parentType, dlo);
+      } else if (type == typeof(ProblemCharacteristic)) {
+        AssociateWith<Problem, IProblemCharacteristicValue>(dlo,
+          p => p.IntProblemCharacteristicValues,
+          p => p.FloatProblemCharacteristicValues,
+          p => p.CharProblemCharacteristicValues,
+          null,
+          pc => pc.ProblemId == ParentId);
+        Include(typeof(Problem), dlo);
+      } else if (type == typeof(Parameter)) {
+        AssociateWith<Experiment, IParameterValue>(dlo,
+          x => x.IntParameterValues,
+          x => x.FloatParameterValues,
+          x => x.CharParameterValues,
+          x => x.OperatorParameterValues,
+          ipv => ipv.ParameterId == ParentId);
+        try {
+          dlo.LoadWith<OperatorParameterValue>(opv => opv.DataType);
+        }
+        catch (ArgumentException) {
+          Console.WriteLine("INFO: not adding (duplicate) load option for OperatorParameterValue.DataType");
+        }
+        Include(typeof(Experiment), dlo);
+      } else if (type == typeof(Result)) {
+        AssociateWith<Run, IResultValue>(dlo,
+          r => r.IntResultValues,
+          r => r.FloatResultValues,
+          r => r.CharResultValues,
+          r => r.BlobResultValues,
+          irv => irv.ResultId == ParentId);
+      } else
+        throw new ArgumentException("type");
+    }
+
+    protected static List<Selector> Selectors = new List<Selector>() {
+        ExpressionTools.GetSelector(run => run, r => r.Id),
+        ExpressionTools.GetSelector(run => run, r => r.FinishedDate),
+
+        ExpressionTools.GetSelector(run => run.Client, c => c.Id),
+        ExpressionTools.GetSelector(run => run.Client, c => c.Name),
+
+        ExpressionTools.GetSelector(run => run.User, u => u.Id),
+        ExpressionTools.GetSelector(run => run.User, u => u.Name),
+
+        ExpressionTools.GetSelector(run => run.Experiment, x => x.Id),
+
+        ExpressionTools.GetSelector(run => run.Experiment.Project, p => p.Id),
+        ExpressionTools.GetSelector(run => run.Experiment.Project, p => p.Name),
+        ExpressionTools.GetSelector(run => run.Experiment.Project, p => p.Description),
+
+        ExpressionTools.GetSelector(run => run.Experiment.Algorithm, a => a.Id),
+        ExpressionTools.GetSelector(run => run.Experiment.Algorithm, a => a.Name),
+        ExpressionTools.GetSelector(run => run.Experiment.Algorithm, a => a.Description),
+
+        ExpressionTools.GetSelector(run => run.Experiment.Algorithm.AlgorithmClass, ac => ac.Id),
+        ExpressionTools.GetSelector(run => run.Experiment.Algorithm.AlgorithmClass, ac => ac.Name),
+        ExpressionTools.GetSelector(run => run.Experiment.Algorithm.AlgorithmClass, ac => ac.Description),
+
+        ExpressionTools.GetSelector(run => run.Experiment.Algorithm.Platform, p => p.Id),
+        ExpressionTools.GetSelector(run => run.Experiment.Algorithm.Platform, p => p.Name),
+        ExpressionTools.GetSelector(run => run.Experiment.Algorithm.Platform, p => p.Description),
+
+        ExpressionTools.GetSelector(run => run.Experiment.Problem, p => p.Id),
+        ExpressionTools.GetSelector(run => run.Experiment.Problem, p => p.Name),
+        ExpressionTools.GetSelector(run => run.Experiment.Problem, p => p.Description),
+
+        ExpressionTools.GetSelector(run => run.Experiment.Problem.ProblemClass, pc => pc.Id),
+        ExpressionTools.GetSelector(run => run.Experiment.Problem.ProblemClass, pc => pc.Name),
+        ExpressionTools.GetSelector(run => run.Experiment.Problem.ProblemClass, pc => pc.Description),
+
+        ExpressionTools.GetSelector(run => run.Experiment.Problem.SolutionRepresentation, sr => sr.Id),
+        ExpressionTools.GetSelector(run => run.Experiment.Problem.SolutionRepresentation, sr => sr.Name),
+        ExpressionTools.GetSelector(run => run.Experiment.Problem.SolutionRepresentation, sr => sr.Description)
+    };
+
+    private Func<Run, object> compiledSelector;
+
+    protected void CreateCompiledSelector<T>() {
+      var genericCompiledSelector = ((Expression<Func<Run, T>>)GetSelectorExpression()).Compile();
+      compiledSelector = run => {
+        try {
+          return (object)genericCompiledSelector(run);
+        }
+        catch (InvalidOperationException x) {
+          if (x.TargetSite == ExpressionTools.Enumerable_Single)
+            return null;
+          else
+            throw;
+        }
+      };
+    }
+
+    public Func<Run, object> CompiledSelector {
+      get {
+        if (compiledSelector == null) {
+          typeof(RunAttributeSelector)
+            .GetMethod("CreateCompiledSelector", BindingFlags.Instance | BindingFlags.NonPublic)
+            .MakeGenericMethod(DataType).Invoke(this, new object[0]);
+        }
+        return compiledSelector;
+      }
+    }
+
+    public LambdaExpression GetSelectorExpression() {
+      if (TableType == typeof(Parameter))
+        return
+          GetDynamicSelector(typeof(Parameter), run => run.Experiment,
+            x => x.IntParameterValues.Single(ipv => ipv.ParameterId == ParentId).Value,
+            x => x.FloatParameterValues.Single(fpv => fpv.ParameterId == ParentId).Value,
+            x => x.CharParameterValues.Single(cpv => cpv.ParameterId == ParentId).Value,
+            x => x.OperatorParameterValues.Single(opv => opv.ParameterId == ParentId).DataType.ClrName);
+      else if (TableType == typeof(Result))
+        return
+          GetDynamicSelector(typeof(Result), run => run,
+            r => r.IntResultValues.Single(irv => irv.ResultId == ParentId).Value,
+            r => r.FloatResultValues.Single(frv => frv.ResultId == ParentId).Value,
+            r => r.CharResultValues.Single(crv => crv.ResultId == ParentId).Value,
+            null);
+      else if (TableType == typeof(ProblemCharacteristic))
+        return
+          GetDynamicSelector(typeof(ProblemCharacteristic), run => run.Experiment.Problem,
+            p => p.IntProblemCharacteristicValues.Single(ipcv => ipcv.ProblemCharacteristicId == ParentId).Value,
+            p => p.FloatProblemCharacteristicValues.Single(fpcv => fpcv.ProblemCharacteristicId == ParentId).Value,
+            p => p.CharProblemCharacteristicValues.Single(cpcv => cpcv.ProblemCharacteristicId == ParentId).Value,
+            null);
+      else
+        return Selectors.Single(s => s.Table == TableType && s.Field == FieldName).Expression;
+    }
+
+    public Expression<Func<Run, bool>> GetWhereExpression() {
+      return GetWhereExpression(GetSelectorExpression());
+    }
+
+    protected Expression<Func<Run, bool>> GetWhereExpression(Expression selector) {
+      try {
+        return (Expression<Func<Run, bool>>)typeof(RunAttributeSelector)
+          .GetMethod("GenericGetWhereExpression", BindingFlags.Instance | BindingFlags.NonPublic)
+          .MakeGenericMethod(selector.Type.GetGenericArguments()[1])
+          .Invoke(this, new[] { selector });
+      }
+      catch (TargetInvocationException x) {
+        throw x.InnerException;
+      }
+    }
+
+    protected Expression<Func<Run, bool>> GenericGetWhereExpression<T>(Expression<Func<Run, T>> selector) {
+      ParameterExpression parameter = Expression.Parameter(typeof(Run), "run");
+      Expression testExpression = Expression.Constant(true);
+      if (AllowedValues != null) {
+        testExpression = Expression.AndAlso(testExpression,
+          Expression.Call(
+            null,
+            ExpressionTools.Enumerable_Contains.MakeGenericMethod(typeof(T)),
+            Expression.Constant(AllowedValues.Cast<T>().ToArray()),
+            Expression.Invoke(selector, parameter)));
+      }
+      if (MinValue != null) {
+        testExpression = Expression.AndAlso(testExpression,
+          ExpressionTools.GetLessThanOrEqualExpression<T>(Expression.Constant(MinValue),
+          Expression.Invoke(selector, parameter)));
+      }
+      if (MaxValue != null) {
+        testExpression = Expression.AndAlso(testExpression,
+          ExpressionTools.GetGreaterOrEqualExpression<T>(Expression.Constant(MaxValue),
+          Expression.Invoke(selector, parameter)));
+      }
+      return (Expression<Func<Run, bool>>)
+        Expression.Lambda(testExpression, parameter);
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.AttributeSelection/3.3/Selector.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.AttributeSelection/3.3/Selector.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.AttributeSelection/3.3/Selector.cs	(revision 5296)
@@ -0,0 +1,32 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Linq.Expressions;
+
+namespace HeuristicLab.Services.OKB.AttributeSelection {
+
+  public class Selector {
+    public Type Table { get; set; }
+    public string Field { get; set; }
+    public LambdaExpression Expression { get; set; }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataAccess/3.3/Extensions.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataAccess/3.3/Extensions.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataAccess/3.3/Extensions.cs	(revision 5296)
@@ -0,0 +1,536 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Data.Linq;
+using System.Linq;
+
+namespace HeuristicLab.Services.OKB.DataAccess {
+  #region Value Management
+  #region Interfaces
+  public interface IParameterValue {
+    Experiment Experiment { get; set; }
+    object Value { get; set; }
+  }
+  public interface IAlgorithmParameterValue : IParameterValue {
+    AlgorithmParameter AlgorithmParameter { get; set; }
+  }
+  public interface IProblemParameterValue : IParameterValue {
+    ProblemParameter ProblemParameter { get; set; }
+  }
+  public interface IResultValue {
+    Result Result { get; set; }
+    Run Run { get; set; }
+    object Value { get; set; }
+  }
+  public interface IProblemCharacteristicValue {
+    Problem Problem { get; set; }
+    ProblemCharacteristic ProblemCharacteristic { get; set; }
+    object Value { get; set; }
+  }
+  #endregion
+
+  #region Algorithm Parameters
+  public partial class AlgorithmParameterBlobValue : IAlgorithmParameterValue {
+    object IAlgorithmParameterValue.Value {
+      get { return this.Value; }
+      set { this.Value = (Binary)value; }
+    }
+  }
+  public partial class AlgorithmParameterBoolValue : IAlgorithmParameterValue {
+    object IAlgorithmParameterValue.Value {
+      get { return this.Value; }
+      set { this.Value = (bool)value; }
+    }
+  }
+  public partial class AlgorithmParameterFloatValue : IAlgorithmParameterValue {
+    object IAlgorithmParameterValue.Value {
+      get { return this.Value; }
+      set { this.Value = (double)value; }
+    }
+  }
+  public partial class AlgorithmParameterIntValue : IAlgorithmParameterValue {
+    object IAlgorithmParameterValue.Value {
+      get { return this.Value; }
+      set { this.Value = (int)value; }
+    }
+  }
+  public partial class AlgorithmParameterStringValue : IAlgorithmParameterValue {
+    object IAlgorithmParameterValue.Value {
+      get { return this.Value; }
+      set { this.Value = (string)value; }
+    }
+  }
+  #endregion
+
+  #region Problem Parameters
+  public partial class ProblemParameterBlobValue : IProblemParameterValue {
+    object IProblemParameterValue.Value {
+      get { return this.Value; }
+      set { this.Value = (Binary)value; }
+    }
+  }
+  public partial class ProblemParameterBoolValue : IProblemParameterValue {
+    object IProblemParameterValue.Value {
+      get { return this.Value; }
+      set { this.Value = (bool)value; }
+    }
+  }
+  public partial class ProblemParameterFloatValue : IProblemParameterValue {
+    object IProblemParameterValue.Value {
+      get { return this.Value; }
+      set { this.Value = (double)value; }
+    }
+  }
+  public partial class ProblemParameterIntValue : IProblemParameterValue {
+    object IProblemParameterValue.Value {
+      get { return this.Value; }
+      set { this.Value = (int)value; }
+    }
+  }
+  public partial class ProblemParameterStringValue : IProblemParameterValue {
+    object IProblemParameterValue.Value {
+      get { return this.Value; }
+      set { this.Value = (string)value; }
+    }
+  }
+  #endregion
+
+  #region Results
+  public partial class ResultBlobValue : IResultValue {
+    object IResultValue.Value {
+      get { return this.Value; }
+      set { this.Value = (Binary)value; }
+    }
+  }
+  public partial class ResultBoolValue : IResultValue {
+    object IResultValue.Value {
+      get { return this.Value; }
+      set { this.Value = (bool)value; }
+    }
+  }
+  public partial class ResultFloatValue : IResultValue {
+    object IResultValue.Value {
+      get { return this.Value; }
+      set { this.Value = (double)value; }
+    }
+  }
+  public partial class ResultIntValue : IResultValue {
+    object IResultValue.Value {
+      get { return this.Value; }
+      set { this.Value = (int)value; }
+    }
+  }
+  public partial class ResultStringValue : IResultValue {
+    object IResultValue.Value {
+      get { return this.Value; }
+      set { this.Value = (string)value; }
+    }
+  }
+  #endregion
+
+  #region Problem Characteristics
+  public partial class ProblemCharacteristicIntValue : IProblemCharacteristicValue {
+    object IProblemCharacteristicValue.Value {
+      get { return this.Value; }
+      set { this.Value = (int)value; }
+    }
+  }
+  public partial class ProblemCharacteristicFloatValue : IProblemCharacteristicValue {
+    object IProblemCharacteristicValue.Value {
+      get { return this.Value; }
+      set { this.Value = (double)value; }
+    }
+  }
+  public partial class ProblemCharacteristicStringValue : IProblemCharacteristicValue {
+    object IProblemCharacteristicValue.Value {
+      get { return this.Value; }
+      set { this.Value = (string)value; }
+    }
+  }
+  #endregion
+
+  public partial class Experiment {
+    public IQueryable<IAlgorithmParameterValue> AlgorithmParameterValues {
+      get {
+        return AlgorithmParameterBlobValues
+          .AsQueryable()
+          .Cast<IAlgorithmParameterValue>()
+          .Concat(AlgorithmParameterBoolValues.Cast<IAlgorithmParameterValue>())
+          .Concat(AlgorithmParameterFloatValues.Cast<IAlgorithmParameterValue>())
+          .Concat(AlgorithmParameterIntValues.Cast<IAlgorithmParameterValue>())
+          .Concat(AlgorithmParameterStringValues.Cast<IAlgorithmParameterValue>());
+      }
+      set {
+
+
+        if (value == null) return;
+        foreach (IParameterValue pv in value) {
+          if (pv == null) continue;
+          if (pv is IntParameterValue) {
+            IntParameterValues.Add(new IntParameterValue() { ParameterId = pv.ParameterId, Value = (int)pv.Value });
+          } else if (pv is FloatParameterValue) {
+            FloatParameterValues.Add(new FloatParameterValue() { ParameterId = pv.ParameterId, Value = (double)pv.Value });
+          } else if (pv is CharParameterValue) {
+            CharParameterValues.Add(new CharParameterValue() { ParameterId = pv.ParameterId, Value = (string)pv.Value });
+          } else if (pv is OperatorParameterValue) {
+            OperatorParameterValues.Add(new OperatorParameterValue() {
+              ParameterId = pv.ParameterId,
+              Value = (Binary)pv.Value,
+              DataTypeId = ((OperatorParameterValue)pv).DataTypeId,
+            });
+          } else {
+            throw new ArgumentException("Invalid Parameter type" + pv.GetType());
+          }
+        }
+      }
+    }
+  }
+
+  public partial class Run {
+    public IQueryable<IResultValue> ResultValues {
+      get {
+        return IntResultValues
+          .AsQueryable()
+          .Cast<IResultValue>()
+          .Concat(FloatResultValues.Cast<IResultValue>())
+          .Concat(CharResultValues.Cast<IResultValue>())
+          .Concat(BlobResultValues.Cast<IResultValue>());
+      }
+      set {
+        foreach (IResultValue rv in value) {
+          if (rv == null) continue;
+          if (rv is IntResultValue) {
+            IntResultValues.Add(new IntResultValue() { ResultId = rv.ResultId, Value = (int)rv.Value });
+          } else if (rv is FloatResultValue) {
+            FloatResultValues.Add(new FloatResultValue() { ResultId = rv.ResultId, Value = (double)rv.Value });
+          } else if (rv is CharResultValue) {
+            CharResultValues.Add(new CharResultValue() { ResultId = rv.ResultId, Value = (string)rv.Value });
+          } else if (rv is BlobResultValue) {
+            BlobResultValues.Add(new BlobResultValue() { ResultId = rv.ResultId, Value = (Binary)rv.Value });
+          } else {
+            throw new ArgumentException("Invalid result value type " + rv.GetType());
+          }
+        }
+      }
+    }
+  }
+  public partial class Result {
+    public IQueryable<IResultValue> ResultValues {
+      get {
+        return IntResultValues
+          .AsQueryable()
+          .Cast<IResultValue>()
+          .Concat(FloatResultValues.Cast<IResultValue>())
+          .Concat(CharResultValues.Cast<IResultValue>())
+          .Concat(BlobResultValues.Cast<IResultValue>());
+      }
+    }
+  }
+
+  public partial class Problem {
+    public IQueryable<IProblemCharacteristicValue> ProblemCharacteristicValues {
+      get {
+        return IntProblemCharacteristicValues
+          .AsQueryable()
+          .Cast<IProblemCharacteristicValue>()
+          .Concat(FloatProblemCharacteristicValues.Cast<IProblemCharacteristicValue>())
+          .Concat(CharProblemCharacteristicValues.Cast<IProblemCharacteristicValue>());
+      }
+    }
+  }
+  public partial class ProblemCharacteristic {
+    public IQueryable<IProblemCharacteristicValue> ProblemCharacteristicValues {
+      get {
+        return IntProblemCharacteristicValues
+          .AsQueryable()
+          .Cast<IProblemCharacteristicValue>()
+          .Concat(FloatProblemCharacteristicValues.Cast<IProblemCharacteristicValue>())
+          .Concat(CharProblemCharacteristicValues.Cast<IProblemCharacteristicValue>());
+      }
+    }
+  }
+  #endregion
+
+  #region Abuse entities to store parameter values for a single (not yet existing experiment)
+  public partial class Parameter {
+    public IParameterValue ParameterValue {
+      get {
+        try {
+          return IntParameterValues
+            .AsQueryable()
+            .Cast<IParameterValue>()
+            .Concat(FloatParameterValues.Cast<IParameterValue>())
+            .Concat(CharParameterValues.Cast<IParameterValue>())
+            .Concat(OperatorParameterValues.Cast<IParameterValue>())
+            .ToList().Single();
+        }
+        catch {
+          return null;
+        }
+      }
+      set {
+        if (value == ParameterValue) // access to ParameterValue ensures that there is a single value
+          return;
+        if (value == null)
+          throw new ArgumentNullException("ParameterValue");
+        IParameterValue oldValue = ParameterValue;
+        Type t = value.GetType();
+        if (oldValue.GetType() != t)
+          throw new ArgumentException("cannot assign value with different type");
+        if (t == typeof(IntParameterValue)) {
+          IntParameterValues.Clear();
+          IntParameterValues.Add((IntParameterValue)value);
+        } else if (t == typeof(FloatParameterValue)) {
+          FloatParameterValues.Clear();
+          FloatParameterValues.Add((FloatParameterValue)value);
+        } else if (t == typeof(CharParameterValue)) {
+          CharParameterValues.Clear();
+          CharParameterValues.Add((CharParameterValue)value);
+        } else if (t == typeof(OperatorParameterValue)) {
+          OperatorParameterValues.Clear();
+          OperatorParameterValues.Add((OperatorParameterValue)value);
+        } else throw new ArgumentException("invalid parameter value type " + t.Name);
+      }
+    }
+  }
+  public partial class Result {
+    public IResultValue ResultValue {
+      get {
+        try {
+          return IntResultValues
+            .AsQueryable()
+            .Cast<IResultValue>()
+            .Concat(FloatResultValues.Cast<IResultValue>())
+            .Concat(CharResultValues.Cast<IResultValue>())
+            .Concat(BlobResultValues.Cast<IResultValue>()).ToList().Single();
+        }
+        catch {
+          return null;
+        }
+      }
+      set {
+        if (value == ResultValue)
+          return;
+        if (value == null)
+          throw new ArgumentNullException("ResultValue");
+        IResultValue oldValue = ResultValue;
+        Type t = value.GetType();
+        if (oldValue.GetType() != t)
+          throw new ArgumentException("cannot assign value with different type");
+        if (t == typeof(IntResultValue)) {
+          IntResultValues.Clear();
+          IntResultValues.Add((IntResultValue)value);
+        } else if (t == typeof(FloatResultValue)) {
+          FloatResultValues.Clear();
+          FloatResultValues.Add((FloatResultValue)value);
+        } else if (t == typeof(CharResultValue)) {
+          CharResultValues.Clear();
+          CharResultValues.Add((CharResultValue)value);
+        } else if (t == typeof(BlobResultValue)) {
+          BlobResultValues.Clear();
+          BlobResultValues.Add((BlobResultValue)value);
+        } else throw new ArgumentException("invalid result value type " + t.Name);
+      }
+    }
+  }
+  public partial class Algorithm {
+    public IQueryable<Parameter> Parameters {
+      get {
+        return Algorithm_Parameters.AsQueryable().Select(ap => ap.Parameter);
+      }
+    }
+    public IQueryable<IntParameterValue> IntParameterValues {
+      get {
+        return Parameters.AsQueryable()
+          .Where(p => p.IntParameterValues.Count > 0)
+          .Select(p => p.IntParameterValues.Single());
+      }
+    }
+    public IQueryable<FloatParameterValue> FloatParameterValues {
+      get {
+        return Parameters.AsQueryable()
+          .Where(p => p.FloatParameterValues.Count > 0)
+          .Select(p => p.FloatParameterValues.Single());
+      }
+    }
+    public IQueryable<CharParameterValue> CharParameterValues {
+      get {
+        return Parameters.AsQueryable()
+          .Where(p => p.CharParameterValues.Count > 0)
+          .Select(p => p.CharParameterValues.Single());
+      }
+    }
+    public IQueryable<OperatorParameterValue> OperatorParameterValues {
+      get {
+        return Parameters.AsQueryable()
+          .Where(p => p.OperatorParameterValues.Count > 0)
+          .Select(p => p.OperatorParameterValues.Single());
+      }
+    }
+    public IQueryable<IParameterValue> ParameterValues {
+      get {
+        return Parameters.AsQueryable().Select(p => p.ParameterValue);
+      }
+    }
+
+    public IQueryable<Result> Results {
+      get {
+        return Algorithm_Results.AsQueryable().Select(ar => ar.Result);
+      }
+    }
+    public IQueryable<IntResultValue> IntResultValues {
+      get {
+        return Results.AsQueryable()
+          .Where(r => r.IntResultValues.Count > 0)
+          .Select(r => r.IntResultValues.Single());
+      }
+    }
+    public IQueryable<FloatResultValue> FloatResultValues {
+      get {
+        return Results.AsQueryable()
+          .Where(r => r.FloatResultValues.Count > 0)
+          .Select(r => r.FloatResultValues.Single());
+      }
+    }
+    public IQueryable<CharResultValue> CharResultValues {
+      get {
+
+        return Results.AsQueryable()
+          .Where(r => r.CharResultValues.Count > 0)
+          .Select(r => r.CharResultValues.Single());
+      }
+    }
+    public IQueryable<BlobResultValue> BlobResultValues {
+      get {
+        return Results.AsQueryable()
+          .Where(r => r.BlobResultValues.Count > 0)
+          .Select(r => r.BlobResultValues.Single());
+      }
+    }
+    public IQueryable<IResultValue> ResultValues {
+      get {
+        return Results.AsQueryable().Select(r => r.ResultValue);
+      }
+    }
+  }
+  #endregion
+
+  #region Type access
+  public partial class DataType {
+    public Type Type {
+      get {
+        return Type.GetType(ClrName, false) ?? typeof(object);
+      }
+    }
+  }
+  #endregion
+
+  #region NamedEntities
+  public interface INamedEntity {
+    int Id { get; }
+    string Name { get; }
+    string Description { get; }
+  }
+  public partial class AlgorithmClass : INamedEntity { }
+  public partial class Algorithm : INamedEntity { }
+  public partial class ProblemClass : INamedEntity { }
+  public partial class Problem : INamedEntity { }
+  public partial class SolutionRepresentation : INamedEntity { }
+  public partial class ProblemCharacteristic : INamedEntity { }
+  public partial class Parameter : INamedEntity { }
+  public partial class Result : INamedEntity { }
+  public partial class Project : INamedEntity { }
+  public partial class Platform : INamedValue { }
+  #endregion
+
+  #region DataTypes
+  public interface IIntValue {
+    int Value { get; }
+  }
+  public partial class IntResultValue : IIntValue { }
+  public partial class IntParameterValue : IIntValue { }
+  public partial class IntProblemCharacteristicValue : IIntValue { }
+  public interface IFloatValue {
+    double Value { get; }
+  }
+  public partial class FloatResultValue : IFloatValue { }
+  public partial class FloatParameterValue : IFloatValue { }
+  public partial class FloatProblemCharacteristicValue : IFloatValue { }
+  public interface ICharValue {
+    string Value { get; }
+  }
+  public partial class CharResultValue : ICharValue { }
+  public partial class CharParameterValue : ICharValue { }
+  public partial class CharProblemCharacteristicValue : ICharValue { }
+  #endregion
+
+  #region NamedValues
+  public interface INamedValue {
+    string Name { get; }
+  }
+  public interface IValue<T> : INamedValue {
+    T Value { get; }
+  }
+  public partial class IntResultValue : IValue<int> {
+    public string Name { get { return Result.Name; } }
+  }
+  public partial class FloatResultValue : IValue<double> {
+    public string Name { get { return Result.Name; } }
+  }
+  public partial class CharResultValue : IValue<string> {
+    public string Name { get { return Result.Name; } }
+  }
+  public partial class BlobResultValue : IValue<Binary> {
+    public string Name { get { return Result.Name; } }
+  }
+  public partial class IntParameterValue : IValue<int> {
+    public string Name { get { return Parameter.Name; } }
+  }
+  public partial class FloatParameterValue : IValue<double> {
+    public string Name { get { return Parameter.Name; } }
+  }
+  public partial class CharParameterValue : IValue<string> {
+    public string Name { get { return Parameter.Name; } }
+  }
+  public partial class OperatorParameterValue : IValue<Binary> {
+    public string Name { get { return Parameter.Name; } }
+  }
+  public partial class IntProblemCharacteristicValue : IValue<int> {
+    public string Name { get { return ProblemCharacteristic.Name; } }
+  }
+  public partial class FloatProblemCharacteristicValue : IValue<double> {
+    public string Name { get { return ProblemCharacteristic.Name; } }
+  }
+  public partial class CharProblemCharacteristicValue : IValue<string> {
+    public string Name { get { return ProblemCharacteristic.Name; } }
+  }
+  #endregion
+
+  #region DynamicTypeInformation
+  public interface IDynamicParent : INamedEntity {
+    DataType DataType { get; }
+  }
+  public partial class ProblemCharacteristic : IDynamicParent { }
+  public partial class Parameter : IDynamicParent { }
+  public partial class Result : IDynamicParent { }
+  #endregion
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataAccess/3.3/HeuristicLab.Services.OKB.DataAccess-3.3.csproj
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataAccess/3.3/HeuristicLab.Services.OKB.DataAccess-3.3.csproj	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataAccess/3.3/HeuristicLab.Services.OKB.DataAccess-3.3.csproj	(revision 5296)
@@ -0,0 +1,206 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{E36BE58F-F3CE-40BB-9AB3-9F9E30AD5CCF}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Services.OKB.DataAccess</RootNamespace>
+    <AssemblyName>HeuristicLab.Services.OKB.DataAccess-3.3</AssemblyName>
+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <FileUpgradeFlags>
+    </FileUpgradeFlags>
+    <OldToolsVersion>3.5</OldToolsVersion>
+    <UpgradeBackupLocation />
+    <PublishUrl>publish\</PublishUrl>
+    <Install>true</Install>
+    <InstallFrom>Disk</InstallFrom>
+    <UpdateEnabled>false</UpdateEnabled>
+    <UpdateMode>Foreground</UpdateMode>
+    <UpdateInterval>7</UpdateInterval>
+    <UpdateIntervalUnits>Days</UpdateIntervalUnits>
+    <UpdatePeriodically>false</UpdatePeriodically>
+    <UpdateRequired>false</UpdateRequired>
+    <MapFileExtensions>true</MapFileExtensions>
+    <ApplicationRevision>0</ApplicationRevision>
+    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
+    <IsWebBootstrapper>false</IsWebBootstrapper>
+    <UseApplicationTrust>false</UseApplicationTrust>
+    <BootstrapperEnabled>true</BootstrapperEnabled>
+    <TargetFrameworkProfile />
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <DocumentationFile>bin\Release\HeuristicLab.Services.OKB.DataAccess-3.3.xml</DocumentationFile>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <DocumentationFile>
+    </DocumentationFile>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <DocumentationFile>bin\x64\Release\HeuristicLab.Services.OKB.DataAccess-3.3.xml</DocumentationFile>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <DocumentationFile>bin\x86\Release\HeuristicLab.Services.OKB.DataAccess-3.3.xml</DocumentationFile>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup>
+    <SignAssembly>true</SignAssembly>
+  </PropertyGroup>
+  <PropertyGroup>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data.Linq">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Runtime.Serialization">
+      <RequiredTargetFramework>3.0</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Xml.Linq">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data.DataSetExtensions">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="OKB.designer.cs">
+      <AutoGen>True</AutoGen>
+      <DesignTime>True</DesignTime>
+      <DependentUpon>OKB.dbml</DependentUpon>
+    </Compile>
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <None Include="Properties\AssemblyInfo.frame" />
+    <Compile Include="Properties\Settings.Designer.cs">
+      <DependentUpon>Settings.settings</DependentUpon>
+      <AutoGen>True</AutoGen>
+      <DesignTimeSharedInput>True</DesignTimeSharedInput>
+    </Compile>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="app.config">
+      <SubType>Designer</SubType>
+    </None>
+    <None Include="HeuristicLab.snk" />
+    <None Include="OKB.dbml">
+      <Generator>MSLinqToSQLGenerator</Generator>
+      <LastGenOutput>OKB.designer.cs</LastGenOutput>
+      <SubType>Designer</SubType>
+    </None>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="OKB.dbml.layout">
+      <DependentUpon>OKB.dbml</DependentUpon>
+    </None>
+    <None Include="Properties\Settings.settings">
+      <Generator>PublicSettingsSingleFileGenerator</Generator>
+      <LastGenOutput>Settings.Designer.cs</LastGenOutput>
+    </None>
+  </ItemGroup>
+  <ItemGroup>
+    <Service Include="{3259AA49-8AA1-44D3-9025-A0B520596A8C}" />
+    <Service Include="{508349B6-6B84-4DF5-91F0-309BEEBAD82D}" />
+    <Service Include="{B4F97281-0DBD-4835-9ED8-7DFB966E87FF}" />
+  </ItemGroup>
+  <ItemGroup>
+    <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
+      <Install>false</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.5 SP1</ProductName>
+      <Install>true</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
+      <Visible>False</Visible>
+      <ProductName>Windows Installer 3.1</ProductName>
+      <Install>true</Install>
+    </BootstrapperPackage>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="SQL Scripts\Initialize OKB.sql" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="SQL Scripts\Create OKB.sql" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\HeuristicLab.Services.OKB.DataTransfer\3.3\HeuristicLab.Services.OKB.DataTransfer-3.3.csproj">
+      <Project>{209FD7A1-DFB2-4B9F-9268-B95E886B2F7A}</Project>
+      <Name>HeuristicLab.Services.OKB.DataTransfer-3.3</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataAccess/3.3/L2ST4.ttinclude
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataAccess/3.3/L2ST4.ttinclude	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataAccess/3.3/L2ST4.ttinclude	(revision 5296)
@@ -0,0 +1,853 @@
+﻿<#@ assembly name="System.Core"
+#><#@ assembly name="System.Data.Linq"
+#><#@ assembly name="EnvDTE"
+#><#@ assembly name="System.Xml"
+#><#@ assembly name="System.Xml.Linq"
+#><#@ import namespace="System"
+#><#@ import namespace="System.CodeDom"
+#><#@ import namespace="System.CodeDom.Compiler"
+#><#@ import namespace="System.Collections.Generic"
+#><#@ import namespace="System.Data.Linq"
+#><#@ import namespace="System.Data.Linq.Mapping"
+#><#@ import namespace="System.IO"
+#><#@ import namespace="System.Linq"
+#><#@ import namespace="System.Reflection"
+#><#@ import namespace="System.Text"
+#><#@ import namespace="System.Xml.Linq"
+#><#@ import namespace="Microsoft.VisualStudio.TextTemplating"
+#><#+
+// L2ST4 - LINQ to SQL templates for T4 v0.82 - http://www.codeplex.com/l2st4
+// Copyright (c) Microsoft Corporation.  All rights reserved.
+// This source code is made available under the terms of the Microsoft Public License (MS-PL)
+
+// DBML Database element > code DataContext class
+class Data
+{
+	public XNamespace NS = "http://schemas.microsoft.com/linqtosql/dbml/2007";
+	public String BaseClassName { get; private set; }
+	public String ConnectSettingsObject { get; private set; }
+	public String ConnectSettingsProperty { get; private set; }
+	public String ContextName { get; private set; }
+	public String ContextNamespace { get; set; }
+	public String DatabaseName { get; private set; }
+	public String DbmlFileName { get; private set; }
+	public String EntityBase { get; private set; }
+	public String EntityNamespace { get; set; }
+	public List<Function> Functions { get; private set; }
+	public List<FunctionClass> FunctionClasses { get; private set; }
+	public bool Serialization { get; private set; }
+	public string SpecifiedContextNamespace { get; private set; }
+	public string SpecifiedEntityNamespace { get; private set; }
+	public TypeAttributes TypeAttributes { get; private set; }
+	public List<Table> Tables { get; private set; }
+	public List<TableClass> TableClasses { get; private set; }
+	
+	public Data(String dbmlFileName) {
+		DbmlFileName = dbmlFileName;
+		if (!File.Exists(DbmlFileName))
+			throw new Exception(String.Format("DBML file '{0}' could not be found.", DbmlFileName));
+		XElement xe = XDocument.Load(DbmlFileName).Root;
+		TableClasses = new List<TableClass>();
+		FunctionClasses = new List<FunctionClass>();
+		
+		foreach(XElement connection in xe.Elements(NS + "Connection")) {
+			ConnectSettingsObject = (String) connection.Attribute("SettingsObjectName");
+			ConnectSettingsProperty = (String) connection.Attribute("SettingsPropertyName");
+		}
+		BaseClassName = (String) xe.Attribute("BaseType") ?? "DataContext";
+		ContextName = (String) xe.Attribute("Class");
+		ContextNamespace = SpecifiedContextNamespace = (String) xe.Attribute("ContextNamespace");
+		DatabaseName = (String) xe.Attribute("Name") ?? "";
+		EntityBase = (String) xe.Attribute("EntityBase");
+		EntityNamespace = SpecifiedEntityNamespace = (String) xe.Attribute("EntityNamespace");
+		Serialization = (String) xe.Attribute("Serialization") == "Unidirectional";
+		TypeAttributes = Class.DecodeAccess((String) xe.Attribute("AccessModifier")) | Class.DecodeModifier((String) xe.Attribute("Modifier"));
+		Tables = (from t in xe.Elements(NS + "Table")
+			select new Table(this, t)).ToList();
+		Functions = (from f in xe.Elements(NS + "Function")
+			select new Function(this, f)).ToList();
+	}
+		
+	static internal Type GetType(String typeName, bool canBeNull) {
+		Type type = null;
+		switch(typeName) {
+			case "System.Xml.Linq.XElement": type = typeof(System.Xml.Linq.XElement); break;
+			case "System.Data.Linq.Binary": type = typeof(System.Data.Linq.Binary); break;
+			default: type = Type.GetType(typeName); break;
+		}
+		if (type == null)
+			type = new TypeStub(typeName);
+		if (type.IsValueType && canBeNull)
+			type = typeof(Nullable<>).MakeGenericType(type);
+		return type;
+	}
+}
+
+// DBML Table element > Base entity class, events & property on DataContext class
+class Table
+{
+	public TableClass BaseClass {
+		get { return Classes.First(); }
+	}
+	public IEnumerable<TableClass> Classes {
+		get { return Data.TableClasses.Where(c => c.Table == this); }
+	}
+	public Data Data { get; private set; }
+	private String member;
+	public String Member {
+		get { return member ?? Name; }
+		set { member = value; }
+	}
+	public String Name { get; set; }
+	public List<TableOperation> Operations { get; private set; }
+
+	public Table(Data data, XElement xe) {
+		Data = data;
+		Name = (String) xe.Attribute("Name");
+		Member = (String) xe.Attribute("Member");
+		Data.TableClasses.AddRange(from c in xe.Elements(Data.NS + "Type")
+			select new TableClass(this, c));
+		Operations = new List<TableOperation>();
+		foreach(OperationType operationType in Enum.GetValues(typeof(OperationType)))
+			Operations.AddRange((from o in xe.Elements(Data.NS + operationType.ToString() + "Function")
+				select new TableOperation(this, o)).ToList());
+	}
+}
+
+// DBML Type element > Entity class, subclasses or stored procedure return type
+class Class
+{
+	public Class SuperClass { get; protected set; }
+	public List<Column> Columns { get; private set; }
+	public Data Data {get; private set; }
+	public String Id { get; private set; }
+	public String InheritanceCode { get; private set; }
+	public Boolean IsInheritanceDefault { get; private set; }
+	public Boolean IsSerializable {
+		get { return (TypeAttributes & TypeAttributes.VisibilityMask) == TypeAttributes.Public; }
+	}
+	protected String name;
+	public virtual String Name {
+		get { return name; }
+		set { name = value; }
+	}
+	public String QualifiedName {
+		get { return (String.IsNullOrEmpty(Data.EntityNamespace) || (Data.EntityNamespace == Data.ContextNamespace))
+				? Name : Data.EntityNamespace + '.' + Name; }
+	}
+	public TypeAttributes TypeAttributes { get; private set; }
+	
+	public Class(Data data, XElement xe) {
+		Data = data;
+		Id = (String) xe.Attribute("Id");
+		InheritanceCode = (String) xe.Attribute("InheritanceCode");
+		IsInheritanceDefault = (Boolean ?) xe.Attribute("IsInheritanceDefault") ?? false;
+		Name = (String) xe.Attribute("Name");
+		TypeAttributes = DecodeAccess((String) xe.Attribute("AccessModifier")) | DecodeModifier((String) xe.Attribute("Modifier"));
+		Columns = (from c in xe.Elements(Data.NS + "Column")
+			select new Column(this, c)).ToList();
+	}
+	
+	internal static TypeAttributes DecodeAccess(String access) {
+		switch(access) {
+			case "Private": return TypeAttributes.NestedPrivate;
+			case "Internal": return TypeAttributes.NestedAssembly;
+			case "Protected": return TypeAttributes.NestedFamily;
+			case "ProtectedInternal": return TypeAttributes.NestedFamORAssem;
+			default: return TypeAttributes.Public;
+		}
+	}
+	
+	internal static TypeAttributes DecodeModifier(String modifier) {
+		switch(modifier) {
+			case "Abstract": return TypeAttributes.Abstract;
+			case "Sealed": return TypeAttributes.Sealed;
+			default: return TypeAttributes.Class;
+		}
+	}
+}
+
+// DBML Type element > Classes and subclasses that map to tables
+class TableClass : Class
+{
+	public List<Association> Associations { get; private set; }
+	public Boolean HasPrimaryKey {
+		get { return Columns.Any(c => c.IsPrimaryKey); }
+	}
+	public override String Name { get; set; }
+	public IList<Column> PrimaryKey {
+		get { return Columns.Where(c => c.IsPrimaryKey).ToList(); }
+	}
+	public MemberAttributes PropertyChangeAccess {
+		get { return ((TypeAttributes & TypeAttributes.Sealed) != 0) ? MemberAttributes.Private | MemberAttributes.Final : MemberAttributes.Public; }
+	}
+	public IEnumerable<TableClass> Subclasses {
+		get { return Table.Data.TableClasses.Where(c => c.SuperClass == this); }
+	}
+	public Table Table { get; private set; }
+
+	public TableClass(TableClass superClass, XElement xe) : this(superClass.Table, xe) {
+		SuperClass = superClass;
+	}
+
+	public TableClass(Table table, XElement xe) : base(table.Data, xe) {
+		Table = table;
+		Associations = (from a in xe.Elements(Data.NS + "Association")
+			select new Association(this, a)).ToList();
+		Table.Data.TableClasses.AddRange(from c in xe.Elements(Data.NS + "Type")
+			select new TableClass(this, c));
+	}
+}
+
+// DBML Type > Classes that map to stored procedure return types
+class FunctionClass : Class
+{
+	public Function Function { get; set; }
+	
+	public FunctionClass(Function function, XElement xe) : base(function.Data, xe) {
+		Function = function;
+	}
+}
+
+// DBML type Column > Properties on a class
+class Column
+{
+	private String member, typeName, storage;
+
+	private AutoSync autoSync;
+	public AutoSync AutoSync {
+		get {
+			if (IsDbGenerated)
+				if (IsPrimaryKey)
+					return AutoSync.OnInsert;
+				else
+					return AutoSync.Always;
+			return autoSync;
+		}
+		private set { autoSync = value; }
+	}
+	public Boolean CanBeNull { get; private set; }
+	public Class Class { get; private set; }
+	public String DbType { get; private set; }
+	public String Expression { get; private set; }
+	private Boolean isDbGenerated;
+	public Boolean IsDbGenerated {
+		get { return (!String.IsNullOrEmpty(Expression) || IsVersion) ? true : isDbGenerated;  }
+		private set { isDbGenerated = value; }
+	}
+	public Boolean IsDelayLoaded { get; private set; }
+	public Boolean IsDiscriminator { get; private set; }
+	public List<Association> ForeignKeyAssociations {
+		get {
+			if (Class is TableClass) {
+				return ((TableClass)Class).Associations.Where(a => a.ThisKey.Contains(this) && a.IsForeignKey).ToList();
+			}
+			else
+				return new List<Association>();
+		}
+	}
+	public Boolean IsPrimaryKey { get; private set; }
+	private Boolean isReadOnly;
+	public Boolean IsReadOnly {
+		get { return (Class.Data.Serialization) ? false : isReadOnly; }
+		private set { isReadOnly = value; }
+	}
+	public Boolean IsVersion { get; private set; }
+	public String Member {
+		get { return member + ((member == Class.Name) ? "1" : ""); }
+		set { member = value; }
+	}
+	public MemberAttributes MemberAttributes { get; private set; }
+	public String Name { get; private set; }
+	public String Storage {
+		get { return String.IsNullOrEmpty(storage) ? "_" + Member : storage; }
+		set { storage = value; }
+	}
+	public Type StorageType {
+		get { return (IsDelayLoaded) ? typeof(Link<>).MakeGenericType(Type) : Type; }
+	}
+	public String StorageValue {
+		get { return (IsDelayLoaded) ? Storage + ".Value" : Storage; }
+	}
+	public Type Type {
+		get { return Data.GetType(typeName, CanBeNull); }
+	}
+	private UpdateCheck updateCheck;
+	public UpdateCheck UpdateCheck {
+		get { return (IsReadOnly) ? UpdateCheck.Never : updateCheck; }
+		private set { updateCheck = value; }
+	}
+	
+	public Column(Class class1, XElement xe) {
+		Class = class1;
+		Name = (String) xe.Attribute("Name") ?? "";
+		Member = (String) xe.Attribute("Member") ?? Name;
+		typeName = xe.Attribute("Type").Value;
+		CanBeNull = (Boolean?) xe.Attribute("CanBeNull") ?? false;
+		DbType = (String) xe.Attribute("DbType") ?? "";
+		Expression = (String) xe.Attribute("Expression") ?? "";
+		IsDbGenerated = (Boolean?) xe.Attribute("IsDbGenerated") ?? (IsVersion);
+		IsDelayLoaded = (Boolean?) xe.Attribute("IsDelayLoaded") ?? false;
+		IsDiscriminator = (Boolean?) xe.Attribute("IsDiscriminator") ?? false;
+		IsPrimaryKey = (Boolean?) xe.Attribute("IsPrimaryKey") ?? false;
+		IsReadOnly = (Boolean?) xe.Attribute("IsReadOnly") ?? false;
+		IsVersion = (Boolean?) xe.Attribute("IsVersion") ?? false;
+		Storage = (String) xe.Attribute("Storage") ?? "";
+		AutoSync autoSyncDefault = (IsDbGenerated) ? AutoSync.OnInsert : AutoSync.Default;
+		AutoSync = Util.ParseEnum((String) xe.Attribute("AutoSync"), (IsVersion) ? AutoSync.Always : autoSyncDefault);
+		UpdateCheck = Util.ParseEnum((String) xe.Attribute("UpdateCheck"), (IsVersion || IsPrimaryKey) ? UpdateCheck.Never : UpdateCheck.Always);
+		MemberAttributes = Util.DecodeMemberAccess((String) xe.Attribute("AccessModifier")) | Util.DecodeMemberModifier((String) xe.Attribute("Modifier"));
+	}
+}
+
+// DBML Association element > EntitySet or EntityRef between two table-mapped classes
+class Association
+{
+	private TableClass thisClass;
+	private String typeName, storage;
+
+	public Association OtherSide {
+		get { return Type.Associations.Find(a => a.Name == Name && a != this); }
+	}
+	public Boolean DeleteOnNull { get; private set; }
+	public String DeleteRule { get; private set; }
+	public Boolean IsForeignKey { get; private set; }
+	public Boolean IsMany { get; private set; }
+	public Boolean IsSerializable {
+		get { return ((MemberAttributes & MemberAttributes.AccessMask) == MemberAttributes.Public); }
+	}
+	public Boolean IsUnique {
+		get { return (!IsMany && !IsForeignKey); }
+	}
+	public Boolean ManagesKeys {
+		get { return !(IsMany || (OtherSide == null) || !IsForeignKey); }
+	}
+	public String Member { get; private set; }
+	public MemberAttributes MemberAttributes { get; private set; }
+	public String Name { get; private set; }
+	public IList<Column> OtherKey {
+		get { return OtherKeyMembers.Select(o => Type.Columns.Single(c => c.Member == o)).ToList(); }
+	}
+	private String[] otherKeyMembers;
+	public String[] OtherKeyMembers {
+		get { return (otherKeyMembers != null) ? otherKeyMembers : Type.PrimaryKey.Select(p => p.Member).ToArray(); }
+		set { otherKeyMembers = value; }
+	}
+	public String Storage { get { return storage ?? "_" + Member; } }
+	public IList<Column> ThisKey {
+		get { return ThisKeyMembers.Select(o => thisClass.Columns.Single(c => c.Member == o)).ToList(); }
+	}
+	private String[] thisKeyMembers;
+	public String[] ThisKeyMembers {
+		get { return (thisKeyMembers != null) ? thisKeyMembers : thisClass.PrimaryKey.Select(p => p.Member).ToArray(); }
+		set { thisKeyMembers = value; }
+	}
+	public TableClass Type {
+		get { return thisClass.Table.Data.TableClasses.Find(c => c.Name == typeName); }
+	}
+	
+	public Association(TableClass thisClass, XElement xe) {
+		this.thisClass = thisClass;
+		typeName = (String) xe.Attribute("Type");
+		String thisKey = ((String) xe.Attribute("ThisKey"));
+		if (thisKey != null)
+			thisKeyMembers = thisKey.Split(',');
+		storage = (String) xe.Attribute("Storage");
+		String otherKey = ((String) xe.Attribute("OtherKey"));
+		if (otherKey != null)
+			otherKeyMembers = otherKey.Split(',');
+		DeleteOnNull = (Boolean?) xe.Attribute("DeleteOnNull") ?? false;
+		DeleteRule = (String) xe.Attribute("DeleteRule");
+		IsForeignKey = (xe.Attribute("IsForeignKey") != null);
+		Member = (String) xe.Attribute("Member");
+		MemberAttributes = Util.DecodeMemberAccess((String) xe.Attribute("AccessModifier")) | Util.DecodeMemberModifier((String) xe.Attribute("Modifier"));
+		Name = (String) xe.Attribute("Name");
+		String cardinality = (String) xe.Attribute("Cardinality");
+		IsMany = (cardinality == null) ? !IsForeignKey : (cardinality.Equals("Many"));
+	}
+}
+
+// DBML Function element (stored procedure) > Method on DataContext
+class Function
+{
+	public List<Class> Classes { get; private set; }
+	public Data Data { get; private set; }
+	private Boolean? hasMultipleResults = null;
+	public Boolean HasMultipleResults {
+		get { return (hasMultipleResults.HasValue) ? hasMultipleResults.Value : Classes.Count() > 1; }
+	}
+	public String ID { get; private set; }
+	public Boolean IsComposable { get; private set; }
+	public MemberAttributes MemberAttributes { get; private set; }
+	public String Method { get; private set; }
+	public String Name { get; private set; }
+	public List<Parameter> Parameters { get; private set; }
+	public Return Return { get; private set; }
+	public CodeTypeReference ReturnType {
+		get {
+			if (Return != null)
+				return new CodeTypeReference(Return.Type);
+			else
+				if (HasMultipleResults)
+					return new CodeTypeReference(typeof(IMultipleResults));
+				else {
+					CodeTypeReference typeRef = new CodeTypeReference(typeof(ISingleResult<>));
+					typeRef.TypeArguments.Add(new CodeTypeReference(Classes[0].QualifiedName));
+					return typeRef;
+				}
+		}
+	}
+	
+	public Function(Data data, XElement xe) {
+		Data = data;
+		String hasMultiResultsElement = (String) xe.Attribute("HasMultipleResults");
+		if (hasMultiResultsElement != null)
+			hasMultipleResults = Boolean.Parse(hasMultiResultsElement);
+		ID = (String) xe.Attribute("Id");
+		IsComposable = (Boolean ?) xe.Attribute("IsComposable") ?? false;
+		Name = (String) xe.Attribute("Name");
+		Method = (String) xe.Attribute("Method");
+		MemberAttributes = Util.DecodeMemberAccess((String) xe.Attribute("AccessModifier")) | Util.DecodeMemberModifier((String) xe.Attribute("Modifier"));
+		Parameters = (from p in xe.Elements(Data.NS + "Parameter")
+			select new Parameter(this, p)).ToList();
+		Return = (from r in xe.Elements(Data.NS + "Return")
+			select new Return(this, r)).SingleOrDefault();
+		Classes = new List<Class>();
+		foreach(XElement fxe in xe.Elements(Data.NS + "ElementType")) {
+			String idRef = (String) fxe.Attribute("IdRef");
+			if (idRef == null) {
+				var functionClass = new FunctionClass(this, fxe);
+				Classes.Add(functionClass);
+				Data.FunctionClasses.Add(functionClass);
+			}
+			else
+				Classes.Add(Data.TableClasses.Single(c => c.Id == idRef));
+		}
+	}
+}
+
+// Function return type -> Method return type
+class Return
+{
+	private String typeName;
+	public String DbType { get; private set; }
+	public Function Function { get; private set; }
+	public Type Type {
+		get { return Data.GetType(typeName, false); }
+	}
+	
+	public Return(Function function, XElement xe) {
+		Function = function;
+		DbType = (String) xe.Attribute("DbType");
+		typeName = (String) xe.Attribute("Type");
+	}
+}
+
+public enum ParameterDirection { In, Out, InOut };
+public enum OperationType { Insert, Update, Delete };
+public enum ArgumentVersion { Original, New };
+
+// Function parameter -> Method parameter
+class Parameter
+{
+	private String typeName;
+	public String DbType { get; private set; }
+	public Function Function { get; private set; }
+	public String Name { get; private set; }
+	public String DbName { get; private set; }
+	public ParameterDirection Direction { get; private set; }
+	public Type Type {
+		get { return Data.GetType(typeName, true); }
+	}
+	
+	public Parameter(Function function, XElement xe) {
+		Function = function;
+		DbName = (String) xe.Attribute("Name");
+		Name = (String) xe.Attribute("Parameter") ?? DbName;
+		DbType = (String) xe.Attribute("DbType");
+		typeName = (String) xe.Attribute("Type");
+		Direction = Util.ParseEnum((String) xe.Attribute("Direction"), ParameterDirection.In);
+	}
+}
+
+// Functions associated with a table's CUD operations
+class TableOperation
+{
+	private String functionID;
+	private Function function;
+	public List<Argument> Arguments { get; private set; }
+	public OperationType Type { get; private set; }
+	public Function Function {
+		get {
+			if ((function == null) && (!String.IsNullOrEmpty(functionID)))
+				function = Table.Data.Functions.Where(f => f.ID == functionID).SingleOrDefault();
+			return function;
+		}
+		set {
+			function = value;
+			functionID = null;
+		}
+	}
+	public Table Table { get; private set; }
+	public TableOperation(Table table, XElement xe) {
+		Table = table;
+		functionID = (String) xe.Attribute("FunctionId");
+		Type = (OperationType) Enum.Parse(typeof(OperationType), xe.Name.LocalName.Replace("Function",""));
+		Arguments = (from a in xe.Elements(Table.Data.NS + "Argument") select new Argument(this, a)).ToList();
+	}
+}
+
+// Argument to a function
+class Argument
+{
+	private String parameterName;
+	private Parameter parameter;
+	public TableOperation TableOperation;
+	public Parameter Parameter {
+		get {
+			if ((parameter == null) && (!String.IsNullOrEmpty(parameterName)))
+				parameter = TableOperation.Function.Parameters.Single(p => p.Name == parameterName);
+			return parameter;
+		}
+		set {
+			parameter = value;
+			parameterName = null;
+		}
+	}
+	public String Member { get; private set; }
+	public ArgumentVersion Version { get; private set; }
+	
+	public Argument(TableOperation tableOperation, XElement xe) {
+		TableOperation = tableOperation;
+		parameterName = (String) xe.Attribute("Parameter");
+		Member = (String) xe.Attribute("Member");
+		Version = Util.ParseEnum((String) xe.Attribute("Version"), ArgumentVersion.New);
+	}
+}
+
+abstract class CodeLanguage
+{
+	public CodeDomProvider CodeDomProvider { get; protected set; }
+	public abstract String GetAccess(MemberAttributes memberAttributes);
+	public abstract String GetAccess(TypeAttributes typeAttributes);
+	public abstract String GetModifier(MemberAttributes memberAttributes);
+	public abstract String GetModifier(TypeAttributes typeAttributes);
+	
+	public String Format(Type type) {
+		return Format(new CodeTypeReference(type));
+	}
+	
+	public virtual String ShortenTypeRef(String typeRef) {
+		return (typeRef.LastIndexOf('.') != 6) ? typeRef.Replace("System.Data.Linq.","") : typeRef.Replace("System.","");
+	}
+	
+	public String Format(CodeTypeReference codeTypeRef) {
+		return ShortenTypeRef(CodeDomProvider.GetTypeOutput(codeTypeRef));
+	}
+	
+	public abstract String Format(ParameterDirection direction);
+	
+	public String Format(MemberAttributes memberAttributes) {
+		return GetAccess(memberAttributes) + GetModifier(memberAttributes);
+	}
+
+	public String Format(TypeAttributes typeAttributes) {
+		return GetAccess(typeAttributes) + GetModifier(typeAttributes);
+	}
+}
+
+class CSharpCodeLanguage : CodeLanguage
+{
+	public CSharpCodeLanguage() {
+		CodeDomProvider = new Microsoft.CSharp.CSharpCodeProvider();
+	}
+	
+	public override String Format(ParameterDirection direction) {
+		switch(direction) {
+			case ParameterDirection.InOut: return "ref ";
+			case ParameterDirection.Out: return "out ";
+			default: return "";
+		}
+	}
+
+	public override String ShortenTypeRef(String typeRef) {
+		if (typeRef.StartsWith("System.Nullable<"))
+			typeRef = typeRef.Replace("System.Nullable<","").Replace(">","?");
+		return base.ShortenTypeRef(typeRef);
+	}
+
+	public override String GetAccess(MemberAttributes memberAttributes) {
+		switch(memberAttributes & MemberAttributes.AccessMask) {
+			case MemberAttributes.Private: return "private ";
+			case MemberAttributes.Public: return "public ";
+			case MemberAttributes.Family: return "protected ";
+			case MemberAttributes.Assembly: return "internal ";
+			case MemberAttributes.FamilyAndAssembly: return "protected internal ";
+			default: return memberAttributes.ToString();
+		}
+	}
+
+	public override String GetAccess(TypeAttributes typeAttributes) {
+		switch(typeAttributes & TypeAttributes.VisibilityMask) {
+			case TypeAttributes.NestedPrivate: return "private ";
+			case TypeAttributes.NestedAssembly: return "internal ";
+			case TypeAttributes.NestedFamily: return "protected ";
+			case TypeAttributes.NestedFamORAssem: return "protected internal ";
+			default: return "public ";
+		}
+	}
+
+	public override String GetModifier(MemberAttributes memberAttributes) {
+		switch(memberAttributes & MemberAttributes.ScopeMask) {
+			case MemberAttributes.Final: return "";
+			case MemberAttributes.Abstract: return "abstract ";
+			case MemberAttributes.Override: return "override ";
+			default: return "virtual ";
+		}
+	}
+	
+	public override String GetModifier(TypeAttributes typeAttributes) {
+		if ((typeAttributes & TypeAttributes.Abstract) != 0) return "abstract ";
+		if ((typeAttributes & TypeAttributes.Sealed) != 0) return "sealed ";
+		return "";
+	}
+}
+
+class VBCodeLanguage : CodeLanguage
+{
+	public VBCodeLanguage() {
+		CodeDomProvider = new Microsoft.VisualBasic.VBCodeProvider();
+	}
+	
+	public override String Format(ParameterDirection direction) {
+		switch(direction) {
+			case ParameterDirection.InOut: return "ByRef ";
+			case ParameterDirection.Out: return "ByRef ";
+			default: return "";
+		}
+	}
+
+	public override String GetAccess(MemberAttributes memberAttributes) {
+		switch(memberAttributes & MemberAttributes.AccessMask) {
+			case MemberAttributes.Private: return "Private ";
+			case MemberAttributes.Public: return "Public ";
+			case MemberAttributes.Family: return "Protected ";
+			case MemberAttributes.Assembly: return "Friend ";
+			case MemberAttributes.FamilyAndAssembly: return "Protected Friend ";
+			default: return memberAttributes.ToString();
+		}
+	}
+	
+	public override String GetAccess(TypeAttributes typeAttributes) {
+		switch(typeAttributes & TypeAttributes.VisibilityMask) {
+			case TypeAttributes.NestedPrivate: return "Private ";
+			case TypeAttributes.NestedAssembly: return "Friend ";
+			case TypeAttributes.NestedFamily: return "Protected ";
+			case TypeAttributes.NestedFamORAssem: return "protected internal ";
+			default: return "Public ";
+		}
+	}
+
+	public override String GetModifier(MemberAttributes memberAttributes) {
+		switch(memberAttributes & MemberAttributes.ScopeMask) {
+			case MemberAttributes.Final: return "";
+			case MemberAttributes.Abstract: return "MustOverride ";
+			case MemberAttributes.Override: return "Override ";
+			default: return "Overridable ";
+		}
+	}
+	
+	public override String GetModifier(TypeAttributes typeAttributes) {
+		if ((typeAttributes & TypeAttributes.Abstract) != 0) return "MustInherit ";
+		if ((typeAttributes & TypeAttributes.Sealed) != 0) return "NotInheritable ";
+		return "";
+	}
+}
+
+// Manager class records the various blocks so it can split them up
+class Manager
+{
+	private struct Block {
+		public String Name;
+		public int Start, Length;
+	}
+	
+	private List<Block> blocks = new List<Block>();
+	private Block currentBlock;
+	private Block footerBlock = new Block();
+	private Block headerBlock = new Block();
+	private ITextTemplatingEngineHost host;
+	private ManagementStrategy strategy;
+	private StringBuilder template;
+	public String OutputPath { get; set; }
+	
+	public Manager(ITextTemplatingEngineHost host, StringBuilder template, bool commonHeader) {
+		this.host = host;
+		this.template = template;
+		OutputPath = String.Empty;
+		strategy = ManagementStrategy.Create(host);		
+	}
+		
+	public void StartBlock(String name) {
+		currentBlock = new Block { Name = name, Start = template.Length };
+	}
+
+	public void StartFooter() {
+		footerBlock.Start = template.Length;
+	}
+	
+	public void EndFooter() {
+		footerBlock.Length = template.Length - footerBlock.Start;
+	}
+	
+	public void StartHeader() {
+		headerBlock.Start = template.Length;
+	}
+	
+	public void EndHeader() {
+		headerBlock.Length = template.Length - headerBlock.Start;
+	}	
+
+	public void EndBlock() {
+		currentBlock.Length = template.Length - currentBlock.Start;
+		blocks.Add(currentBlock);
+	}
+		
+	public void Process(bool split) {
+		String header = template.ToString(headerBlock.Start, headerBlock.Length);
+		String footer = template.ToString(footerBlock.Start, footerBlock.Length);
+		blocks.Reverse();		
+		foreach(Block block in blocks) {
+			String fileName = Path.Combine(OutputPath, block.Name);
+			if (split) {
+				String content = header + template.ToString(block.Start, block.Length) + footer;
+				strategy.CreateFile(fileName, content);
+				template.Remove(block.Start, block.Length);
+			} else {
+				strategy.DeleteFile(fileName);
+			}
+		}
+	}
+
+	public string GetCustomToolNamespace(string fileName) {
+		return strategy.GetCustomToolNamespace(fileName);
+	}
+	
+	public string DefaultProjectNamespace {
+		get { return strategy.DefaultProjectNamespace; }
+	}
+}
+
+class ManagementStrategy
+{
+	internal static ManagementStrategy Create(ITextTemplatingEngineHost host) {
+		return (host is IServiceProvider) ? new VSManagementStrategy(host) : new ManagementStrategy(host);
+	}
+
+	internal ManagementStrategy(ITextTemplatingEngineHost host) { }
+
+	internal virtual void CreateFile(String fileName, String content) {
+		File.WriteAllText(fileName, content);
+	}
+	
+	internal virtual void DeleteFile(String fileName) {
+		if (File.Exists(fileName))
+			File.Delete(fileName);
+	}
+	
+	internal virtual string DefaultProjectNamespace {
+		get { return null; }
+	}
+		
+	internal virtual string GetCustomToolNamespace(string fileName) {
+		return null;
+	}
+}
+
+class VSManagementStrategy : ManagementStrategy
+{
+	private EnvDTE.ProjectItem templateProjectItem;
+	private EnvDTE.DTE dte;
+	
+	internal VSManagementStrategy(ITextTemplatingEngineHost host) : base(host) {
+		IServiceProvider hostServiceProvider = (IServiceProvider)host;
+		if(hostServiceProvider == null)
+			throw new ArgumentNullException("Could not obtain hostServiceProvider");
+		
+		dte = (EnvDTE.DTE)hostServiceProvider.GetService(typeof(EnvDTE.DTE));
+		if(dte == null)
+			throw new ArgumentNullException("Could not obtain DTE from host");
+		
+		templateProjectItem = dte.Solution.FindProjectItem(host.TemplateFile);			
+	}
+	
+	internal override void CreateFile(String fileName, String content) {
+		base.CreateFile(fileName, content);
+		((EventHandler)delegate { templateProjectItem.ProjectItems.AddFromFile(fileName); }).BeginInvoke(null, null, null, null);
+	}
+	
+	internal override void DeleteFile(String fileName) {
+		((EventHandler)delegate { FindAndDeleteFile(fileName); }).BeginInvoke(null, null, null, null);
+	}
+	
+	private void FindAndDeleteFile(String fileName) {	
+		foreach(EnvDTE.ProjectItem projectItem in templateProjectItem.ProjectItems) {
+			if (projectItem.get_FileNames(0) == fileName) {
+				projectItem.Delete();
+				return;
+			}
+		}
+	}
+
+	internal override string DefaultProjectNamespace {
+		get { return templateProjectItem.ContainingProject.Properties.Item("DefaultNamespace").Value.ToString(); }
+	}
+	
+	internal override string GetCustomToolNamespace(string fileName) {
+		return dte.Solution.FindProjectItem(fileName).Properties.Item("CustomToolNamespace").Value.ToString();
+	}
+}
+
+// Methods that deserve a better home
+public static class Util
+{
+	public static T ParseEnum<T>(String value, T defaultValue) where T:struct {
+		try { return (T)Enum.Parse(typeof(T), value); }
+		catch { return defaultValue; }
+	}
+	
+	public static MemberAttributes DecodeMemberAccess(String access) {
+		switch(access) {
+			case "Private": return MemberAttributes.Private;
+			case "Internal": return MemberAttributes.Assembly;
+			case "Protected": return MemberAttributes.Family;
+			case "ProtectedInternal": return MemberAttributes.FamilyAndAssembly;
+			default: return MemberAttributes.Public;
+		}
+	}
+	
+	public static MemberAttributes DecodeMemberModifier(String modifier) {
+		switch(modifier) {
+			case "Virtual": return 0;
+			case "Override": return MemberAttributes.Override;
+			default: return MemberAttributes.Final;
+		}
+	}
+}
+
+class TypeStub : System.Reflection.TypeDelegator
+{
+	private String name;
+	
+	public TypeStub(String name) : base(typeof(System.Enum)) {
+		this.name = name;
+	}
+	
+	public override String Name {
+		get { return name; }
+	}
+	
+	public override String FullName {
+		get { return name; }
+	}
+}#>
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataAccess/3.3/OKB.dbml
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataAccess/3.3/OKB.dbml	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataAccess/3.3/OKB.dbml	(revision 5296)
@@ -0,0 +1,374 @@
+﻿<?xml version="1.0" encoding="utf-8"?><Database Name="HeuristicLab.OKB" EntityNamespace="HeuristicLab.Services.OKB.DataAccess" ContextNamespace="HeuristicLab.Services.OKB.DataAccess" Class="OKBDataContext" xmlns="http://schemas.microsoft.com/linqtosql/dbml/2007">
+  <Connection Mode="AppSettings" ConnectionString="Data Source=.\SQLEXPRESS;Initial Catalog=HeuristicLab.OKB;Integrated Security=True" SettingsObjectName="HeuristicLab.Services.OKB.DataAccess.Properties.Settings" SettingsPropertyName="OKBConnectionString" Provider="System.Data.SqlClient" />
+  <Table Name="dbo.AlgorithmClass" Member="AlgorithmClasses">
+    <Type Name="AlgorithmClass">
+      <Column Name="Id" Type="System.Int64" DbType="BigInt NOT NULL IDENTITY" IsPrimaryKey="true" IsDbGenerated="true" CanBeNull="false" />
+      <Column Name="Name" Type="System.String" DbType="NVarChar(200) NOT NULL" CanBeNull="false" />
+      <Column Name="Description" Type="System.String" DbType="NVarChar(MAX)" CanBeNull="true" />
+      <Association Name="AlgorithmClass_Algorithm" Member="Algorithms" ThisKey="Id" OtherKey="AlgorithmClassId" Type="Algorithm" />
+    </Type>
+  </Table>
+  <Table Name="dbo.Algorithm" Member="Algorithms">
+    <Type Name="Algorithm">
+      <Column Name="Id" Type="System.Int64" DbType="BigInt NOT NULL IDENTITY" IsPrimaryKey="true" IsDbGenerated="true" CanBeNull="false" />
+      <Column Name="AlgorithmClassId" Type="System.Int64" DbType="BigInt NOT NULL" CanBeNull="false" />
+      <Column Name="PlatformId" Type="System.Int64" DbType="BigInt NOT NULL" CanBeNull="false" />
+      <Column Name="Name" Type="System.String" DbType="NVarChar(200) NOT NULL" CanBeNull="false" />
+      <Column Name="Description" Type="System.String" DbType="NVarChar(MAX)" CanBeNull="true" />
+      <Association Name="Algorithm_Experiment" Member="Experiments" ThisKey="Id" OtherKey="AlgorithmId" Type="Experiment" />
+      <Association Name="Algorithm_AlgorithmParameter" Member="AlgorithmParameters" ThisKey="Id" OtherKey="AlgorithmId" Type="AlgorithmParameter" />
+      <Association Name="Algorithm_AlgorithmUser" Member="AlgorithmUsers" ThisKey="Id" OtherKey="AlgorithmId" Type="AlgorithmUser" />
+      <Association Name="Algorithm_Result" Member="Results" ThisKey="Id" OtherKey="AlgorithmId" Type="Result" />
+      <Association Name="Algorithm_AlgorithmData" Member="AlgorithmData" ThisKey="Id" OtherKey="AlgorithmId" Type="AlgorithmData" Cardinality="One" />
+      <Association Name="AlgorithmClass_Algorithm" Member="AlgorithmClass" ThisKey="AlgorithmClassId" OtherKey="Id" Type="AlgorithmClass" IsForeignKey="true" />
+      <Association Name="Platform_Algorithm" Member="Platform" ThisKey="PlatformId" OtherKey="Id" Type="Platform" IsForeignKey="true" />
+    </Type>
+  </Table>
+  <Table Name="dbo.Problem" Member="Problems">
+    <Type Name="Problem">
+      <Column Name="Id" Type="System.Int64" DbType="BigInt NOT NULL IDENTITY" IsPrimaryKey="true" IsDbGenerated="true" CanBeNull="false" />
+      <Column Name="ProblemClassId" Type="System.Int64" DbType="BigInt NOT NULL" CanBeNull="false" />
+      <Column Name="PlatformId" Type="System.Int64" DbType="BigInt NOT NULL" CanBeNull="false" />
+      <Column Name="Name" Type="System.String" DbType="NVarChar(200) NOT NULL" CanBeNull="false" />
+      <Column Name="Description" Type="System.String" DbType="NVarChar(MAX)" CanBeNull="true" />
+      <Association Name="Problem_Experiment" Member="Experiments" ThisKey="Id" OtherKey="ProblemId" Type="Experiment" />
+      <Association Name="Problem_ProblemParameter" Member="ProblemParameters" ThisKey="Id" OtherKey="ProblemId" Type="ProblemParameter" />
+      <Association Name="Problem_ProblemUser" Member="ProblemUsers" ThisKey="Id" OtherKey="ProblemId" Type="ProblemUser" />
+      <Association Name="Problem_ProblemData" Member="ProblemData" ThisKey="Id" OtherKey="ProblemId" Type="ProblemData" Cardinality="One" />
+      <Association Name="ProblemClass_Problem" Member="ProblemClass" ThisKey="ProblemClassId" OtherKey="Id" Type="ProblemClass" IsForeignKey="true" />
+      <Association Name="Platform_Problem" Member="Platform" ThisKey="PlatformId" OtherKey="Id" Type="Platform" IsForeignKey="true" />
+    </Type>
+  </Table>
+  <Table Name="dbo.ProblemClass" Member="ProblemClasses">
+    <Type Name="ProblemClass">
+      <Column Name="Id" Type="System.Int64" DbType="BigInt NOT NULL IDENTITY" IsPrimaryKey="true" IsDbGenerated="true" CanBeNull="false" />
+      <Column Name="Name" Type="System.String" DbType="NVarChar(200) NOT NULL" CanBeNull="false" />
+      <Column Name="Description" Type="System.String" DbType="NVarChar(MAX)" CanBeNull="true" />
+      <Association Name="ProblemClass_Problem" Member="Problems" ThisKey="Id" OtherKey="ProblemClassId" Type="Problem" />
+    </Type>
+  </Table>
+  <Table Name="dbo.Experiment" Member="Experiments">
+    <Type Name="Experiment">
+      <Column Name="Id" Type="System.Int64" DbType="BigInt NOT NULL IDENTITY" IsPrimaryKey="true" IsDbGenerated="true" CanBeNull="false" />
+      <Column Name="AlgorithmId" Type="System.Int64" DbType="BigInt NOT NULL" CanBeNull="false" />
+      <Column Name="ProblemId" Type="System.Int64" DbType="BigInt NOT NULL" CanBeNull="false" />
+      <Association Name="Experiment_Run" Member="Runs" ThisKey="Id" OtherKey="ExperimentId" Type="Run" />
+      <Association Name="Experiment_AlgorithmParameterBlobValue" Member="AlgorithmParameterBlobValues" ThisKey="Id" OtherKey="ExperimentId" Type="AlgorithmParameterBlobValue" />
+      <Association Name="Experiment_AlgorithmParameterBoolValue" Member="AlgorithmParameterBoolValues" ThisKey="Id" OtherKey="ExperimentId" Type="AlgorithmParameterBoolValue" />
+      <Association Name="Experiment_AlgorithmParameterFloatValue" Member="AlgorithmParameterFloatValues" ThisKey="Id" OtherKey="ExperimentId" Type="AlgorithmParameterFloatValue" />
+      <Association Name="Experiment_AlgorithmParameterIntValue" Member="AlgorithmParameterIntValues" ThisKey="Id" OtherKey="ExperimentId" Type="AlgorithmParameterIntValue" />
+      <Association Name="Experiment_AlgorithmParameterStringValue" Member="AlgorithmParameterStringValues" ThisKey="Id" OtherKey="ExperimentId" Type="AlgorithmParameterStringValue" />
+      <Association Name="Experiment_ProblemParameterBlobValue" Member="ProblemParameterBlobValues" ThisKey="Id" OtherKey="ExperimentId" Type="ProblemParameterBlobValue" />
+      <Association Name="Experiment_ProblemParameterBoolValue" Member="ProblemParameterBoolValues" ThisKey="Id" OtherKey="ExperimentId" Type="ProblemParameterBoolValue" />
+      <Association Name="Experiment_ProblemParameterFloatValue" Member="ProblemParameterFloatValues" ThisKey="Id" OtherKey="ExperimentId" Type="ProblemParameterFloatValue" />
+      <Association Name="Experiment_ProblemParameterIntValue" Member="ProblemParameterIntValues" ThisKey="Id" OtherKey="ExperimentId" Type="ProblemParameterIntValue" />
+      <Association Name="Experiment_ProblemParameterStringValue" Member="ProblemParameterStringValues" ThisKey="Id" OtherKey="ExperimentId" Type="ProblemParameterStringValue" />
+      <Association Name="Problem_Experiment" Member="Problem" ThisKey="ProblemId" OtherKey="Id" Type="Problem" IsForeignKey="true" />
+      <Association Name="Algorithm_Experiment" Member="Algorithm" ThisKey="AlgorithmId" OtherKey="Id" Type="Algorithm" IsForeignKey="true" />
+    </Type>
+  </Table>
+  <Table Name="dbo.AlgorithmParameter" Member="AlgorithmParameters">
+    <Type Name="AlgorithmParameter">
+      <Column Name="Id" Type="System.Int64" DbType="BigInt NOT NULL IDENTITY" IsPrimaryKey="true" IsDbGenerated="true" CanBeNull="false" />
+      <Column Name="AlgorithmId" Type="System.Int64" DbType="BigInt NOT NULL" CanBeNull="false" />
+      <Column Name="Name" Type="System.String" DbType="NVarChar(200) NOT NULL" CanBeNull="false" />
+      <Column Name="Alias" Type="System.String" DbType="NVarChar(200)" CanBeNull="true" />
+      <Column Name="Description" Type="System.String" DbType="NVarChar(MAX)" CanBeNull="true" />
+      <Column Name="DataTypeId" Type="System.Int64" DbType="BigInt NOT NULL" CanBeNull="false" />
+      <Association Name="AlgorithmParameter_AlgorithmParameterBlobValue" Member="AlgorithmParameterBlobValues" ThisKey="Id" OtherKey="AlgorithmParameterId" Type="AlgorithmParameterBlobValue" />
+      <Association Name="AlgorithmParameter_AlgorithmParameterBoolValue" Member="AlgorithmParameterBoolValues" ThisKey="Id" OtherKey="AlgorithmParameterId" Type="AlgorithmParameterBoolValue" />
+      <Association Name="AlgorithmParameter_AlgorithmParameterFloatValue" Member="AlgorithmParameterFloatValues" ThisKey="Id" OtherKey="AlgorithmParameterId" Type="AlgorithmParameterFloatValue" />
+      <Association Name="AlgorithmParameter_AlgorithmParameterIntValue" Member="AlgorithmParameterIntValues" ThisKey="Id" OtherKey="AlgorithmParameterId" Type="AlgorithmParameterIntValue" />
+      <Association Name="AlgorithmParameter_AlgorithmParameterStringValue" Member="AlgorithmParameterStringValues" ThisKey="Id" OtherKey="AlgorithmParameterId" Type="AlgorithmParameterStringValue" />
+      <Association Name="Algorithm_AlgorithmParameter" Member="Algorithm" ThisKey="AlgorithmId" OtherKey="Id" Type="Algorithm" IsForeignKey="true" />
+      <Association Name="DataType_AlgorithmParameter" Member="DataType" ThisKey="DataTypeId" OtherKey="Id" Type="DataType" IsForeignKey="true" />
+    </Type>
+  </Table>
+  <Table Name="dbo.ProblemParameter" Member="ProblemParameters">
+    <Type Name="ProblemParameter">
+      <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 NOT NULL" CanBeNull="false" />
+      <Column Name="Name" Type="System.String" DbType="NVarChar(200) NOT NULL" CanBeNull="false" />
+      <Column Name="Alias" Type="System.String" DbType="NVarChar(200)" CanBeNull="true" />
+      <Column Name="Description" Type="System.String" DbType="NVarChar(MAX)" CanBeNull="true" />
+      <Column Name="DataTypeId" Type="System.Int64" DbType="BigInt NOT NULL" CanBeNull="false" />
+      <Association Name="ProblemParameter_ProblemParameterBlobValue" Member="ProblemParameterBlobValues" ThisKey="Id" OtherKey="ProblemParameterId" Type="ProblemParameterBlobValue" />
+      <Association Name="ProblemParameter_ProblemParameterBoolValue" Member="ProblemParameterBoolValues" ThisKey="Id" OtherKey="ProblemParameterId" Type="ProblemParameterBoolValue" />
+      <Association Name="ProblemParameter_ProblemParameterFloatValue" Member="ProblemParameterFloatValues" ThisKey="Id" OtherKey="ProblemParameterId" Type="ProblemParameterFloatValue" />
+      <Association Name="ProblemParameter_ProblemParameterIntValue" Member="ProblemParameterIntValues" ThisKey="Id" OtherKey="ProblemParameterId" Type="ProblemParameterIntValue" />
+      <Association Name="ProblemParameter_ProblemParameterStringValue" Member="ProblemParameterStringValues" ThisKey="Id" OtherKey="ProblemParameterId" Type="ProblemParameterStringValue" />
+      <Association Name="Problem_ProblemParameter" Member="Problem" ThisKey="ProblemId" OtherKey="Id" Type="Problem" IsForeignKey="true" />
+      <Association Name="DataType_ProblemParameter" Member="DataType" ThisKey="DataTypeId" OtherKey="Id" Type="DataType" IsForeignKey="true" />
+    </Type>
+  </Table>
+  <Table Name="dbo.AlgorithmUser" Member="AlgorithmUsers">
+    <Type Name="AlgorithmUser">
+      <Column Name="AlgorithmId" Type="System.Int64" DbType="BigInt NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
+      <Column Name="UserId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
+      <Association Name="Algorithm_AlgorithmUser" Member="Algorithm" ThisKey="AlgorithmId" OtherKey="Id" Type="Algorithm" IsForeignKey="true" />
+    </Type>
+  </Table>
+  <Table Name="dbo.ProblemUser" Member="ProblemUsers">
+    <Type Name="ProblemUser">
+      <Column Name="ProblemId" Type="System.Int64" DbType="BigInt NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
+      <Column Name="UserId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
+      <Association Name="Problem_ProblemUser" Member="Problem" ThisKey="ProblemId" OtherKey="Id" Type="Problem" IsForeignKey="true" />
+    </Type>
+  </Table>
+  <Table Name="dbo.Platform" Member="Platforms">
+    <Type Name="Platform">
+      <Column Name="Id" Type="System.Int64" DbType="BigInt NOT NULL IDENTITY" IsPrimaryKey="true" IsDbGenerated="true" CanBeNull="false" />
+      <Column Name="Name" Type="System.String" DbType="NVarChar(200) NOT NULL" CanBeNull="false" />
+      <Column Name="Description" Type="System.String" DbType="NVarChar(MAX)" CanBeNull="true" />
+      <Association Name="Platform_Algorithm" Member="Algorithms" ThisKey="Id" OtherKey="PlatformId" Type="Algorithm" />
+      <Association Name="Platform_Problem" Member="Problems" ThisKey="Id" OtherKey="PlatformId" Type="Problem" />
+      <Association Name="Platform_DataType" Member="DataTypes" ThisKey="Id" OtherKey="PlatformId" Type="DataType" />
+    </Type>
+  </Table>
+  <Table Name="dbo.Run" Member="Runs">
+    <Type Name="Run">
+      <Column Name="Id" Type="System.Int64" DbType="BigInt NOT NULL IDENTITY" IsPrimaryKey="true" IsDbGenerated="true" CanBeNull="false" />
+      <Column Name="ExperimentId" Type="System.Int64" DbType="BigInt NOT NULL" CanBeNull="false" />
+      <Column Name="RandomSeed" Type="System.Int64" DbType="BigInt NOT NULL" CanBeNull="false" />
+      <Column Name="CreatedDate" Type="System.DateTime" DbType="DateTime2" CanBeNull="false" />
+      <Column Name="UserId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" CanBeNull="false" />
+      <Column Name="ClientId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" CanBeNull="false" />
+      <Association Name="Run_ResultBlobValue" Member="ResultBlobValues" ThisKey="Id" OtherKey="RunId" Type="ResultBlobValue" />
+      <Association Name="Run_ResultBoolValue" Member="ResultBoolValues" ThisKey="Id" OtherKey="RunId" Type="ResultBoolValue" />
+      <Association Name="Run_ResultFloatValue" Member="ResultFloatValues" ThisKey="Id" OtherKey="RunId" Type="ResultFloatValue" />
+      <Association Name="Run_ResultIntValue" Member="ResultIntValues" ThisKey="Id" OtherKey="RunId" Type="ResultIntValue" />
+      <Association Name="Run_ResultStringValue" Member="ResultStringValues" ThisKey="Id" OtherKey="RunId" Type="ResultStringValue" />
+      <Association Name="Experiment_Run" Member="Experiment" ThisKey="ExperimentId" OtherKey="Id" Type="Experiment" IsForeignKey="true" />
+    </Type>
+  </Table>
+  <Table Name="dbo.Result" Member="Results">
+    <Type Name="Result">
+      <Column Name="Id" Type="System.Int64" DbType="BigInt NOT NULL IDENTITY" IsPrimaryKey="true" IsDbGenerated="true" CanBeNull="false" />
+      <Column Name="AlgorithmId" Type="System.Int64" DbType="BigInt NOT NULL" CanBeNull="false" />
+      <Column Name="Name" Type="System.String" DbType="NVarChar(200) NOT NULL" CanBeNull="false" />
+      <Column Name="Alias" Type="System.String" DbType="NVarChar(200)" CanBeNull="true" />
+      <Column Name="Description" Type="System.String" DbType="NVarChar(MAX)" CanBeNull="true" />
+      <Column Name="DataTypeId" Type="System.Int64" DbType="BigInt NOT NULL" CanBeNull="false" />
+      <Association Name="Result_ResultBlobValue" Member="ResultBlobValues" ThisKey="Id" OtherKey="ResultId" Type="ResultBlobValue" />
+      <Association Name="Result_ResultBoolValue" Member="ResultBoolValues" ThisKey="Id" OtherKey="ResultId" Type="ResultBoolValue" />
+      <Association Name="Result_ResultFloatValue" Member="ResultFloatValues" ThisKey="Id" OtherKey="ResultId" Type="ResultFloatValue" />
+      <Association Name="Result_ResultIntValue" Member="ResultIntValues" ThisKey="Id" OtherKey="ResultId" Type="ResultIntValue" />
+      <Association Name="Result_ResultStringValue" Member="ResultStringValues" ThisKey="Id" OtherKey="ResultId" Type="ResultStringValue" />
+      <Association Name="Algorithm_Result" Member="Algorithm" ThisKey="AlgorithmId" OtherKey="Id" Type="Algorithm" IsForeignKey="true" />
+      <Association Name="DataType_Result" Member="DataType" ThisKey="DataTypeId" OtherKey="Id" Type="DataType" IsForeignKey="true" />
+    </Type>
+  </Table>
+  <Table Name="dbo.AlgorithmParameterBlobValue" Member="AlgorithmParameterBlobValues">
+    <Type Name="AlgorithmParameterBlobValue">
+      <Column Name="AlgorithmParameterId" Type="System.Int64" DbType="BigInt NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
+      <Column Name="ExperimentId" Type="System.Int64" DbType="BigInt NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
+      <Column Name="DataTypeId" Type="System.Int64" DbType="BigInt NOT NULL" CanBeNull="false" />
+      <Column Name="Value" Type="System.Data.Linq.Binary" DbType="VarBinary(MAX) NOT NULL" CanBeNull="false" UpdateCheck="Never" />
+      <Association Name="AlgorithmParameter_AlgorithmParameterBlobValue" Member="AlgorithmParameter" ThisKey="AlgorithmParameterId" OtherKey="Id" Type="AlgorithmParameter" IsForeignKey="true" />
+      <Association Name="Experiment_AlgorithmParameterBlobValue" Member="Experiment" ThisKey="ExperimentId" OtherKey="Id" Type="Experiment" IsForeignKey="true" />
+      <Association Name="DataType_AlgorithmParameterBlobValue" Member="DataType" ThisKey="DataTypeId" OtherKey="Id" Type="DataType" IsForeignKey="true" />
+    </Type>
+  </Table>
+  <Table Name="dbo.DataType" Member="DataTypes">
+    <Type Name="DataType">
+      <Column Name="Id" Type="System.Int64" DbType="BigInt NOT NULL IDENTITY" IsPrimaryKey="true" IsDbGenerated="true" CanBeNull="false" />
+      <Column Name="PlatformId" Type="System.Int64" DbType="BigInt NOT NULL" CanBeNull="false" />
+      <Column Name="Name" Type="System.String" DbType="NVarChar(MAX) NOT NULL" CanBeNull="false" />
+      <Column Name="TypeName" Type="System.String" DbType="NVarChar(MAX) NOT NULL" CanBeNull="false" />
+      <Column Name="SqlName" Type="System.String" DbType="NVarChar(200) NOT NULL" CanBeNull="false" />
+      <Association Name="DataType_AlgorithmParameter" Member="AlgorithmParameters" ThisKey="Id" OtherKey="DataTypeId" Type="AlgorithmParameter" />
+      <Association Name="DataType_ProblemParameter" Member="ProblemParameters" ThisKey="Id" OtherKey="DataTypeId" Type="ProblemParameter" />
+      <Association Name="DataType_Result" Member="Results" ThisKey="Id" OtherKey="DataTypeId" Type="Result" />
+      <Association Name="DataType_AlgorithmParameterBlobValue" Member="AlgorithmParameterBlobValues" ThisKey="Id" OtherKey="DataTypeId" Type="AlgorithmParameterBlobValue" />
+      <Association Name="DataType_AlgorithmParameterBoolValue" Member="AlgorithmParameterBoolValues" ThisKey="Id" OtherKey="DataTypeId" Type="AlgorithmParameterBoolValue" />
+      <Association Name="DataType_AlgorithmParameterFloatValue" Member="AlgorithmParameterFloatValues" ThisKey="Id" OtherKey="DataTypeId" Type="AlgorithmParameterFloatValue" />
+      <Association Name="DataType_AlgorithmParameterIntValue" Member="AlgorithmParameterIntValues" ThisKey="Id" OtherKey="DataTypeId" Type="AlgorithmParameterIntValue" />
+      <Association Name="DataType_AlgorithmParameterStringValue" Member="AlgorithmParameterStringValues" ThisKey="Id" OtherKey="DataTypeId" Type="AlgorithmParameterStringValue" />
+      <Association Name="DataType_ProblemParameterBlobValue" Member="ProblemParameterBlobValues" ThisKey="Id" OtherKey="DataTypeId" Type="ProblemParameterBlobValue" />
+      <Association Name="DataType_ProblemParameterBoolValue" Member="ProblemParameterBoolValues" ThisKey="Id" OtherKey="DataTypeId" Type="ProblemParameterBoolValue" />
+      <Association Name="DataType_ProblemParameterFloatValue" Member="ProblemParameterFloatValues" ThisKey="Id" OtherKey="DataTypeId" Type="ProblemParameterFloatValue" />
+      <Association Name="DataType_ProblemParameterIntValue" Member="ProblemParameterIntValues" ThisKey="Id" OtherKey="DataTypeId" Type="ProblemParameterIntValue" />
+      <Association Name="DataType_ProblemParameterStringValue" Member="ProblemParameterStringValues" ThisKey="Id" OtherKey="DataTypeId" Type="ProblemParameterStringValue" />
+      <Association Name="DataType_ResultBlobValue" Member="ResultBlobValues" ThisKey="Id" OtherKey="DataTypeId" Type="ResultBlobValue" />
+      <Association Name="DataType_ResultBoolValue" Member="ResultBoolValues" ThisKey="Id" OtherKey="DataTypeId" Type="ResultBoolValue" />
+      <Association Name="DataType_ResultFloatValue" Member="ResultFloatValues" ThisKey="Id" OtherKey="DataTypeId" Type="ResultFloatValue" />
+      <Association Name="DataType_ResultIntValue" Member="ResultIntValues" ThisKey="Id" OtherKey="DataTypeId" Type="ResultIntValue" />
+      <Association Name="DataType_ResultStringValue" Member="ResultStringValues" ThisKey="Id" OtherKey="DataTypeId" Type="ResultStringValue" />
+      <Association Name="DataType_AlgorithmData" Member="AlgorithmDatas" ThisKey="Id" OtherKey="DataTypeId" Type="AlgorithmData" />
+      <Association Name="DataType_ProblemData" Member="ProblemDatas" ThisKey="Id" OtherKey="DataTypeId" Type="ProblemData" />
+      <Association Name="Platform_DataType" Member="Platform" ThisKey="PlatformId" OtherKey="Id" Type="Platform" IsForeignKey="true" />
+    </Type>
+  </Table>
+  <Table Name="dbo.AlgorithmParameterBoolValue" Member="AlgorithmParameterBoolValues">
+    <Type Name="AlgorithmParameterBoolValue">
+      <Column Name="AlgorithmParameterId" Type="System.Int64" DbType="BigInt NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
+      <Column Name="ExperimentId" Type="System.Int64" DbType="BigInt NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
+      <Column Name="DataTypeId" Type="System.Int64" DbType="BigInt NOT NULL" CanBeNull="false" />
+      <Column Name="Value" Type="System.Boolean" DbType="Bit NOT NULL" CanBeNull="false" />
+      <Association Name="AlgorithmParameter_AlgorithmParameterBoolValue" Member="AlgorithmParameter" ThisKey="AlgorithmParameterId" OtherKey="Id" Type="AlgorithmParameter" IsForeignKey="true" />
+      <Association Name="DataType_AlgorithmParameterBoolValue" Member="DataType" ThisKey="DataTypeId" OtherKey="Id" Type="DataType" IsForeignKey="true" />
+      <Association Name="Experiment_AlgorithmParameterBoolValue" Member="Experiment" ThisKey="ExperimentId" OtherKey="Id" Type="Experiment" IsForeignKey="true" />
+    </Type>
+  </Table>
+  <Table Name="dbo.AlgorithmParameterFloatValue" Member="AlgorithmParameterFloatValues">
+    <Type Name="AlgorithmParameterFloatValue">
+      <Column Name="AlgorithmParameterId" Type="System.Int64" DbType="BigInt NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
+      <Column Name="ExperimentId" Type="System.Int64" DbType="BigInt NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
+      <Column Name="DataTypeId" Type="System.Int64" DbType="BigInt NOT NULL" CanBeNull="false" />
+      <Column Name="Value" Type="System.Double" DbType="Float NOT NULL" CanBeNull="false" />
+      <Association Name="AlgorithmParameter_AlgorithmParameterFloatValue" Member="AlgorithmParameter" ThisKey="AlgorithmParameterId" OtherKey="Id" Type="AlgorithmParameter" IsForeignKey="true" />
+      <Association Name="DataType_AlgorithmParameterFloatValue" Member="DataType" ThisKey="DataTypeId" OtherKey="Id" Type="DataType" IsForeignKey="true" />
+      <Association Name="Experiment_AlgorithmParameterFloatValue" Member="Experiment" ThisKey="ExperimentId" OtherKey="Id" Type="Experiment" IsForeignKey="true" />
+    </Type>
+  </Table>
+  <Table Name="dbo.AlgorithmParameterIntValue" Member="AlgorithmParameterIntValues">
+    <Type Name="AlgorithmParameterIntValue">
+      <Column Name="AlgorithmParameterId" Type="System.Int64" DbType="BigInt NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
+      <Column Name="ExperimentId" Type="System.Int64" DbType="BigInt NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
+      <Column Name="DataTypeId" Type="System.Int64" DbType="BigInt NOT NULL" CanBeNull="false" />
+      <Column Name="Value" Type="System.Int64" DbType="BigInt NOT NULL" CanBeNull="false" />
+      <Association Name="AlgorithmParameter_AlgorithmParameterIntValue" Member="AlgorithmParameter" ThisKey="AlgorithmParameterId" OtherKey="Id" Type="AlgorithmParameter" IsForeignKey="true" />
+      <Association Name="DataType_AlgorithmParameterIntValue" Member="DataType" ThisKey="DataTypeId" OtherKey="Id" Type="DataType" IsForeignKey="true" />
+      <Association Name="Experiment_AlgorithmParameterIntValue" Member="Experiment" ThisKey="ExperimentId" OtherKey="Id" Type="Experiment" IsForeignKey="true" />
+    </Type>
+  </Table>
+  <Table Name="dbo.AlgorithmParameterStringValue" Member="AlgorithmParameterStringValues">
+    <Type Name="AlgorithmParameterStringValue">
+      <Column Name="AlgorithmParameterId" Type="System.Int64" DbType="BigInt NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
+      <Column Name="ExperimentId" Type="System.Int64" DbType="BigInt NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
+      <Column Name="DataTypeId" Type="System.Int64" DbType="BigInt NOT NULL" CanBeNull="false" />
+      <Column Name="Value" Type="System.String" DbType="NVarChar(MAX) NOT NULL" CanBeNull="false" />
+      <Association Name="AlgorithmParameter_AlgorithmParameterStringValue" Member="AlgorithmParameter" ThisKey="AlgorithmParameterId" OtherKey="Id" Type="AlgorithmParameter" IsForeignKey="true" />
+      <Association Name="DataType_AlgorithmParameterStringValue" Member="DataType" ThisKey="DataTypeId" OtherKey="Id" Type="DataType" IsForeignKey="true" />
+      <Association Name="Experiment_AlgorithmParameterStringValue" Member="Experiment" ThisKey="ExperimentId" OtherKey="Id" Type="Experiment" IsForeignKey="true" />
+    </Type>
+  </Table>
+  <Table Name="dbo.ProblemParameterBlobValue" Member="ProblemParameterBlobValues">
+    <Type Name="ProblemParameterBlobValue">
+      <Column Name="ProblemParameterId" Type="System.Int64" DbType="BigInt NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
+      <Column Name="ExperimentId" Type="System.Int64" DbType="BigInt NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
+      <Column Name="DataTypeId" Type="System.Int64" DbType="BigInt NOT NULL" CanBeNull="false" />
+      <Column Name="Value" Type="System.Data.Linq.Binary" DbType="VarBinary(MAX) NOT NULL" CanBeNull="false" UpdateCheck="Never" />
+      <Association Name="DataType_ProblemParameterBlobValue" Member="DataType" ThisKey="DataTypeId" OtherKey="Id" Type="DataType" IsForeignKey="true" />
+      <Association Name="Experiment_ProblemParameterBlobValue" Member="Experiment" ThisKey="ExperimentId" OtherKey="Id" Type="Experiment" IsForeignKey="true" />
+      <Association Name="ProblemParameter_ProblemParameterBlobValue" Member="ProblemParameter" ThisKey="ProblemParameterId" OtherKey="Id" Type="ProblemParameter" IsForeignKey="true" />
+    </Type>
+  </Table>
+  <Table Name="dbo.ProblemParameterBoolValue" Member="ProblemParameterBoolValues">
+    <Type Name="ProblemParameterBoolValue">
+      <Column Name="ProblemParameterId" Type="System.Int64" DbType="BigInt NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
+      <Column Name="ExperimentId" Type="System.Int64" DbType="BigInt NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
+      <Column Name="DataTypeId" Type="System.Int64" DbType="BigInt NOT NULL" CanBeNull="false" />
+      <Column Name="Value" Type="System.Boolean" DbType="Bit NOT NULL" CanBeNull="false" />
+      <Association Name="DataType_ProblemParameterBoolValue" Member="DataType" ThisKey="DataTypeId" OtherKey="Id" Type="DataType" IsForeignKey="true" />
+      <Association Name="Experiment_ProblemParameterBoolValue" Member="Experiment" ThisKey="ExperimentId" OtherKey="Id" Type="Experiment" IsForeignKey="true" />
+      <Association Name="ProblemParameter_ProblemParameterBoolValue" Member="ProblemParameter" ThisKey="ProblemParameterId" OtherKey="Id" Type="ProblemParameter" IsForeignKey="true" />
+    </Type>
+  </Table>
+  <Table Name="dbo.ProblemParameterFloatValue" Member="ProblemParameterFloatValues">
+    <Type Name="ProblemParameterFloatValue">
+      <Column Name="ProblemParameterId" Type="System.Int64" DbType="BigInt NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
+      <Column Name="ExperimentId" Type="System.Int64" DbType="BigInt NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
+      <Column Name="DataTypeId" Type="System.Int64" DbType="BigInt NOT NULL" CanBeNull="false" />
+      <Column Name="Value" Type="System.Double" DbType="Float NOT NULL" CanBeNull="false" />
+      <Association Name="DataType_ProblemParameterFloatValue" Member="DataType" ThisKey="DataTypeId" OtherKey="Id" Type="DataType" IsForeignKey="true" />
+      <Association Name="Experiment_ProblemParameterFloatValue" Member="Experiment" ThisKey="ExperimentId" OtherKey="Id" Type="Experiment" IsForeignKey="true" />
+      <Association Name="ProblemParameter_ProblemParameterFloatValue" Member="ProblemParameter" ThisKey="ProblemParameterId" OtherKey="Id" Type="ProblemParameter" IsForeignKey="true" />
+    </Type>
+  </Table>
+  <Table Name="dbo.ProblemParameterIntValue" Member="ProblemParameterIntValues">
+    <Type Name="ProblemParameterIntValue">
+      <Column Name="ProblemParameterId" Type="System.Int64" DbType="BigInt NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
+      <Column Name="ExperimentId" Type="System.Int64" DbType="BigInt NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
+      <Column Name="DataTypeId" Type="System.Int64" DbType="BigInt NOT NULL" CanBeNull="false" />
+      <Column Name="Value" Type="System.Int64" DbType="BigInt NOT NULL" CanBeNull="false" />
+      <Association Name="DataType_ProblemParameterIntValue" Member="DataType" ThisKey="DataTypeId" OtherKey="Id" Type="DataType" IsForeignKey="true" />
+      <Association Name="Experiment_ProblemParameterIntValue" Member="Experiment" ThisKey="ExperimentId" OtherKey="Id" Type="Experiment" IsForeignKey="true" />
+      <Association Name="ProblemParameter_ProblemParameterIntValue" Member="ProblemParameter" ThisKey="ProblemParameterId" OtherKey="Id" Type="ProblemParameter" IsForeignKey="true" />
+    </Type>
+  </Table>
+  <Table Name="dbo.ProblemParameterStringValue" Member="ProblemParameterStringValues">
+    <Type Name="ProblemParameterStringValue">
+      <Column Name="ProblemParameterId" Type="System.Int64" DbType="BigInt NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
+      <Column Name="ExperimentId" Type="System.Int64" DbType="BigInt NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
+      <Column Name="DataTypeId" Type="System.Int64" DbType="BigInt NOT NULL" CanBeNull="false" />
+      <Column Name="Value" Type="System.String" DbType="NVarChar(MAX) NOT NULL" CanBeNull="false" />
+      <Association Name="DataType_ProblemParameterStringValue" Member="DataType" ThisKey="DataTypeId" OtherKey="Id" Type="DataType" IsForeignKey="true" />
+      <Association Name="Experiment_ProblemParameterStringValue" Member="Experiment" ThisKey="ExperimentId" OtherKey="Id" Type="Experiment" IsForeignKey="true" />
+      <Association Name="ProblemParameter_ProblemParameterStringValue" Member="ProblemParameter" ThisKey="ProblemParameterId" OtherKey="Id" Type="ProblemParameter" IsForeignKey="true" />
+    </Type>
+  </Table>
+  <Table Name="dbo.ResultBlobValue" Member="ResultBlobValues">
+    <Type Name="ResultBlobValue">
+      <Column Name="ResultId" Type="System.Int64" DbType="BigInt NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
+      <Column Name="RunId" Type="System.Int64" DbType="BigInt NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
+      <Column Name="DataTypeId" Type="System.Int64" DbType="BigInt NOT NULL" CanBeNull="false" />
+      <Column Name="Value" Type="System.Data.Linq.Binary" DbType="VarBinary(MAX) NOT NULL" CanBeNull="false" UpdateCheck="Never" />
+      <Association Name="DataType_ResultBlobValue" Member="DataType" ThisKey="DataTypeId" OtherKey="Id" Type="DataType" IsForeignKey="true" />
+      <Association Name="Result_ResultBlobValue" Member="Result" ThisKey="ResultId" OtherKey="Id" Type="Result" IsForeignKey="true" />
+      <Association Name="Run_ResultBlobValue" Member="Run" ThisKey="RunId" OtherKey="Id" Type="Run" IsForeignKey="true" />
+    </Type>
+  </Table>
+  <Table Name="dbo.ResultBoolValue" Member="ResultBoolValues">
+    <Type Name="ResultBoolValue">
+      <Column Name="ResultId" Type="System.Int64" DbType="BigInt NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
+      <Column Name="RunId" Type="System.Int64" DbType="BigInt NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
+      <Column Name="DataTypeId" Type="System.Int64" DbType="BigInt NOT NULL" CanBeNull="false" />
+      <Column Name="Value" Type="System.Boolean" DbType="Bit NOT NULL" CanBeNull="false" />
+      <Association Name="DataType_ResultBoolValue" Member="DataType" ThisKey="DataTypeId" OtherKey="Id" Type="DataType" IsForeignKey="true" />
+      <Association Name="Result_ResultBoolValue" Member="Result" ThisKey="ResultId" OtherKey="Id" Type="Result" IsForeignKey="true" />
+      <Association Name="Run_ResultBoolValue" Member="Run" ThisKey="RunId" OtherKey="Id" Type="Run" IsForeignKey="true" />
+    </Type>
+  </Table>
+  <Table Name="dbo.ResultFloatValue" Member="ResultFloatValues">
+    <Type Name="ResultFloatValue">
+      <Column Name="ResultId" Type="System.Int64" DbType="BigInt NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
+      <Column Name="RunId" Type="System.Int64" DbType="BigInt NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
+      <Column Name="DataTypeId" Type="System.Int64" DbType="BigInt NOT NULL" CanBeNull="false" />
+      <Column Name="Value" Type="System.Double" DbType="Float NOT NULL" CanBeNull="false" />
+      <Association Name="DataType_ResultFloatValue" Member="DataType" ThisKey="DataTypeId" OtherKey="Id" Type="DataType" IsForeignKey="true" />
+      <Association Name="Result_ResultFloatValue" Member="Result" ThisKey="ResultId" OtherKey="Id" Type="Result" IsForeignKey="true" />
+      <Association Name="Run_ResultFloatValue" Member="Run" ThisKey="RunId" OtherKey="Id" Type="Run" IsForeignKey="true" />
+    </Type>
+  </Table>
+  <Table Name="dbo.ResultIntValue" Member="ResultIntValues">
+    <Type Name="ResultIntValue">
+      <Column Name="ResultId" Type="System.Int64" DbType="BigInt NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
+      <Column Name="RunId" Type="System.Int64" DbType="BigInt NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
+      <Column Name="DataTypeId" Type="System.Int64" DbType="BigInt NOT NULL" CanBeNull="false" />
+      <Column Name="Value" Type="System.Int64" DbType="BigInt NOT NULL" CanBeNull="false" />
+      <Association Name="DataType_ResultIntValue" Member="DataType" ThisKey="DataTypeId" OtherKey="Id" Type="DataType" IsForeignKey="true" />
+      <Association Name="Result_ResultIntValue" Member="Result" ThisKey="ResultId" OtherKey="Id" Type="Result" IsForeignKey="true" />
+      <Association Name="Run_ResultIntValue" Member="Run" ThisKey="RunId" OtherKey="Id" Type="Run" IsForeignKey="true" />
+    </Type>
+  </Table>
+  <Table Name="dbo.ResultStringValue" Member="ResultStringValues">
+    <Type Name="ResultStringValue">
+      <Column Name="ResultId" Type="System.Int64" DbType="BigInt NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
+      <Column Name="RunId" Type="System.Int64" DbType="BigInt NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
+      <Column Name="DataTypeId" Type="System.Int64" DbType="BigInt NOT NULL" CanBeNull="false" />
+      <Column Name="Value" Type="System.String" DbType="NVarChar(MAX) NOT NULL" CanBeNull="false" />
+      <Association Name="DataType_ResultStringValue" Member="DataType" ThisKey="DataTypeId" OtherKey="Id" Type="DataType" IsForeignKey="true" />
+      <Association Name="Result_ResultStringValue" Member="Result" ThisKey="ResultId" OtherKey="Id" Type="Result" IsForeignKey="true" />
+      <Association Name="Run_ResultStringValue" Member="Run" ThisKey="RunId" OtherKey="Id" Type="Run" IsForeignKey="true" />
+    </Type>
+  </Table>
+  <Table Name="dbo.AlgorithmData" Member="AlgorithmDatas">
+    <Type Name="AlgorithmData">
+      <Column Name="AlgorithmId" Type="System.Int64" DbType="BigInt NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
+      <Column Name="DataTypeId" Type="System.Int64" DbType="BigInt NOT NULL" CanBeNull="false" />
+      <Column Name="Data" Type="System.Data.Linq.Binary" DbType="VarBinary(MAX) NOT NULL" CanBeNull="false" UpdateCheck="Never" IsDelayLoaded="true" />
+      <Association Name="Algorithm_AlgorithmData" Member="Algorithm" ThisKey="AlgorithmId" OtherKey="Id" Type="Algorithm" IsForeignKey="true" />
+      <Association Name="DataType_AlgorithmData" Member="DataType" ThisKey="DataTypeId" OtherKey="Id" Type="DataType" IsForeignKey="true" />
+    </Type>
+  </Table>
+  <Table Name="dbo.ProblemData" Member="ProblemDatas">
+    <Type Name="ProblemData">
+      <Column Name="ProblemId" Type="System.Int64" DbType="BigInt NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
+      <Column Name="DataTypeId" Type="System.Int64" DbType="BigInt NOT NULL" CanBeNull="false" />
+      <Column Name="Data" Type="System.Data.Linq.Binary" DbType="VarBinary(MAX) NOT NULL" CanBeNull="false" UpdateCheck="Never" IsDelayLoaded="true" />
+      <Association Name="DataType_ProblemData" Member="DataType" ThisKey="DataTypeId" OtherKey="Id" Type="DataType" IsForeignKey="true" />
+      <Association Name="Problem_ProblemData" Member="Problem" ThisKey="ProblemId" OtherKey="Id" Type="Problem" IsForeignKey="true" />
+    </Type>
+  </Table>
+</Database>
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataAccess/3.3/OKB.dbml.layout
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataAccess/3.3/OKB.dbml.layout	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataAccess/3.3/OKB.dbml.layout	(revision 5296)
@@ -0,0 +1,641 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<ordesignerObjectsDiagram dslVersion="1.0.0.0" absoluteBounds="0, 0, 15.5, 12.75" name="OKB">
+  <DataContextMoniker Name="/OKBDataContext" />
+  <nestedChildShapes>
+    <classShape Id="ec288562-8ef9-46b8-a2dc-a471fec7afb8" absoluteBounds="2.75, 0.5, 2, 1.3862939453125">
+      <DataClassMoniker Name="/OKBDataContext/AlgorithmClass" />
+      <nestedChildShapes>
+        <elementListCompartment Id="fbed452c-662c-42d5-b89f-2b122b63aecc" absoluteBounds="2.765, 0.96, 1.9700000000000002, 0.8262939453125" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <classShape Id="6395cc20-e99d-4d78-868d-4401004ef90f" absoluteBounds="2.75, 2.125, 2, 1.7708968098958331">
+      <DataClassMoniker Name="/OKBDataContext/Algorithm" />
+      <nestedChildShapes>
+        <elementListCompartment Id="4dca152f-be31-4dd7-ba65-e6b1177eda3c" absoluteBounds="2.765, 2.585, 1.9700000000000002, 1.2108968098958333" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <associationConnector edgePoints="[(3.75 : 1.8862939453125); (3.75 : 2.125)]" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/OKBDataContext/AlgorithmClass/AlgorithmClass_Algorithm" />
+      <nodes>
+        <classShapeMoniker Id="ec288562-8ef9-46b8-a2dc-a471fec7afb8" />
+        <classShapeMoniker Id="6395cc20-e99d-4d78-868d-4401004ef90f" />
+      </nodes>
+    </associationConnector>
+    <classShape Id="27d0903a-8f45-4b0b-8d0e-8d632bffc702" absoluteBounds="13.25, 2.125, 2, 1.7708968098958331">
+      <DataClassMoniker Name="/OKBDataContext/Problem" />
+      <nestedChildShapes>
+        <elementListCompartment Id="9038b68e-8013-42c0-bba9-60a0b75fffd1" absoluteBounds="13.265, 2.585, 1.9700000000000002, 1.2108968098958333" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <classShape Id="018aceac-7bd0-4fdd-8cca-d219aa08a5b5" absoluteBounds="13.25, 0.5, 2, 1.3862939453125">
+      <DataClassMoniker Name="/OKBDataContext/ProblemClass" />
+      <nestedChildShapes>
+        <elementListCompartment Id="2958536f-012b-4eb7-8bc7-453edcda1493" absoluteBounds="13.265, 0.96, 1.9700000000000002, 0.8262939453125" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <associationConnector edgePoints="[(14.25 : 1.8862939453125); (14.25 : 2.125)]" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/OKBDataContext/ProblemClass/ProblemClass_Problem" />
+      <nodes>
+        <classShapeMoniker Id="018aceac-7bd0-4fdd-8cca-d219aa08a5b5" />
+        <classShapeMoniker Id="27d0903a-8f45-4b0b-8d0e-8d632bffc702" />
+      </nodes>
+    </associationConnector>
+    <classShape Id="c250fb1a-b448-499e-b8eb-d1d0c38521a0" absoluteBounds="8, 4.375, 2, 1.3862939453125">
+      <DataClassMoniker Name="/OKBDataContext/Experiment" />
+      <nestedChildShapes>
+        <elementListCompartment Id="75b7e6ac-33fa-45bf-9832-b5bf0c2c0db5" absoluteBounds="8.015, 4.835, 1.9700000000000002, 0.8262939453125" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <associationConnector edgePoints="[(13.25 : 3.73768854532225); (10.3177083333333 : 3.73768854532225 : JumpStart); (10.0755208333334 : 3.73768854532225 : JumpEnd); (9.39129711009978 : 3.73768854532225); (9.39129711009978 : 4.375)]" manuallyRouted="true" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/OKBDataContext/Problem/Problem_Experiment" />
+      <nodes>
+        <classShapeMoniker Id="27d0903a-8f45-4b0b-8d0e-8d632bffc702" />
+        <classShapeMoniker Id="c250fb1a-b448-499e-b8eb-d1d0c38521a0" />
+      </nodes>
+    </associationConnector>
+    <classShape Id="533939e3-1d76-4e1b-a562-4bb7a30cc432" absoluteBounds="2.75, 4.375, 2, 1.9631982421875">
+      <DataClassMoniker Name="/OKBDataContext/AlgorithmParameter" />
+      <nestedChildShapes>
+        <elementListCompartment Id="c642f03e-8fe9-4e69-af3e-0976f4f275da" absoluteBounds="2.765, 4.835, 1.9700000000000002, 1.4031982421875" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <associationConnector edgePoints="[(3.75 : 3.89589680989583); (3.75 : 4.375)]" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/OKBDataContext/Algorithm/Algorithm_AlgorithmParameter" />
+      <nodes>
+        <classShapeMoniker Id="6395cc20-e99d-4d78-868d-4401004ef90f" />
+        <classShapeMoniker Id="533939e3-1d76-4e1b-a562-4bb7a30cc432" />
+      </nodes>
+    </associationConnector>
+    <classShape Id="8b17f420-0cf1-402a-aaec-d2372f039661" absoluteBounds="13.25, 4.375, 2, 1.9631982421875">
+      <DataClassMoniker Name="/OKBDataContext/ProblemParameter" />
+      <nestedChildShapes>
+        <elementListCompartment Id="75441838-346f-41f0-9651-419532edd47d" absoluteBounds="13.265, 4.835, 1.9700000000000002, 1.4031982421875" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <associationConnector edgePoints="[(14.25 : 3.89589680989583); (14.25 : 4.375)]" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/OKBDataContext/Problem/Problem_ProblemParameter" />
+      <nodes>
+        <classShapeMoniker Id="27d0903a-8f45-4b0b-8d0e-8d632bffc702" />
+        <classShapeMoniker Id="8b17f420-0cf1-402a-aaec-d2372f039661" />
+      </nodes>
+    </associationConnector>
+    <classShape Id="aa997e47-0162-4fc2-aa8d-e237c50c46fe" isExpanded="false" absoluteBounds="5, 2.125, 2, 0.45">
+      <DataClassMoniker Name="/OKBDataContext/AlgorithmUser" />
+      <nestedChildShapes>
+        <elementListCompartment Id="f81c31a9-84c5-40b1-b817-6dccbe77227d" absoluteBounds="5.0150000000000006, 2.5850000000000009, 1.9700000000000002, 0.63399251302083326" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <associationConnector edgePoints="[(4.75 : 2.35); (5 : 2.35)]" manuallyRouted="true" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/OKBDataContext/Algorithm/Algorithm_AlgorithmUser" />
+      <nodes>
+        <classShapeMoniker Id="6395cc20-e99d-4d78-868d-4401004ef90f" />
+        <classShapeMoniker Id="aa997e47-0162-4fc2-aa8d-e237c50c46fe" />
+      </nodes>
+    </associationConnector>
+    <classShape Id="8d911be4-13c4-4abd-85de-4f93f280dd50" isExpanded="false" absoluteBounds="11, 2.125, 2, 0.45">
+      <DataClassMoniker Name="/OKBDataContext/ProblemUser" />
+      <nestedChildShapes>
+        <elementListCompartment Id="bdf4bd9d-405f-4582-99ff-036459c86748" absoluteBounds="11.015, 2.5850000000000009, 1.9700000000000002, 0.63399251302083326" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <associationConnector edgePoints="[(13.25 : 2.32796054349691); (13.125 : 2.32796054349691); (13.125 : 2.35); (13 : 2.35)]" manuallyRouted="true" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/OKBDataContext/Problem/Problem_ProblemUser" />
+      <nodes>
+        <classShapeMoniker Id="27d0903a-8f45-4b0b-8d0e-8d632bffc702" />
+        <classShapeMoniker Id="8d911be4-13c4-4abd-85de-4f93f280dd50" />
+      </nodes>
+    </associationConnector>
+    <classShape Id="42a9e8c0-3168-43f0-a31f-54d1558bd4c2" absoluteBounds="8, 2.125, 2, 1.3862939453125">
+      <DataClassMoniker Name="/OKBDataContext/Platform" />
+      <nestedChildShapes>
+        <elementListCompartment Id="83ab4fa2-80aa-4c36-9596-bc4d9a0c6daf" absoluteBounds="8.015, 2.585, 1.9700000000000002, 0.8262939453125" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <associationConnector edgePoints="[(8 : 2.85); (4.75 : 2.85)]" fixedFrom="Algorithm" fixedTo="Algorithm">
+      <AssociationMoniker Name="/OKBDataContext/Platform/Platform_Algorithm" />
+      <nodes>
+        <classShapeMoniker Id="42a9e8c0-3168-43f0-a31f-54d1558bd4c2" />
+        <classShapeMoniker Id="6395cc20-e99d-4d78-868d-4401004ef90f" />
+      </nodes>
+    </associationConnector>
+    <associationConnector edgePoints="[(10 : 2.85); (13.25 : 2.85)]" fixedFrom="Algorithm" fixedTo="Algorithm">
+      <AssociationMoniker Name="/OKBDataContext/Platform/Platform_Problem" />
+      <nodes>
+        <classShapeMoniker Id="42a9e8c0-3168-43f0-a31f-54d1558bd4c2" />
+        <classShapeMoniker Id="27d0903a-8f45-4b0b-8d0e-8d632bffc702" />
+      </nodes>
+    </associationConnector>
+    <associationConnector edgePoints="[(4.75 : 2.9875025); (7.9375 : 2.9875025); (7.9375 : 3.5737939453125); (8.66439655504989 : 3.5737939453125); (8.66439655504989 : 4.375)]" fixedFrom="Algorithm" fixedTo="Algorithm">
+      <AssociationMoniker Name="/OKBDataContext/Algorithm/Algorithm_Experiment" />
+      <nodes>
+        <classShapeMoniker Id="6395cc20-e99d-4d78-868d-4401004ef90f" />
+        <classShapeMoniker Id="c250fb1a-b448-499e-b8eb-d1d0c38521a0" />
+      </nodes>
+    </associationConnector>
+    <classShape Id="83a5f628-defe-486f-bc6a-4ab430293368" absoluteBounds="8, 9.875, 2, 1.9631982421875">
+      <DataClassMoniker Name="/OKBDataContext/Run" />
+      <nestedChildShapes>
+        <elementListCompartment Id="649f10a6-6047-4f4e-b76a-9da90591bbec" absoluteBounds="8.015, 10.335, 1.9700000000000002, 1.4031982421875" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <associationConnector edgePoints="[(8.97294619299704 : 5.7612939453125); (8.97294619299704 : 7.07715027669271); (10.0755208333334 : 7.07715027669271 : JumpStart); (10.3177083333333 : 7.07715027669271 : JumpEnd); (10.4169255432508 : 7.07715027669271); (10.4169255432508 : 9.43414366861979); (9.35898824036419 : 9.43414366861979); (9.35898824036419 : 9.875)]" manuallyRouted="true" fixedFrom="Algorithm" fixedTo="Algorithm">
+      <AssociationMoniker Name="/OKBDataContext/Experiment/Experiment_Run" />
+      <nodes>
+        <classShapeMoniker Id="c250fb1a-b448-499e-b8eb-d1d0c38521a0" />
+        <classShapeMoniker Id="83a5f628-defe-486f-bc6a-4ab430293368" />
+      </nodes>
+    </associationConnector>
+    <classShape Id="1cb9bad0-d19c-43d7-97f8-a26cf3e2d7a0" absoluteBounds="2.75, 9.875, 2, 1.9631982421875">
+      <DataClassMoniker Name="/OKBDataContext/Result" />
+      <nestedChildShapes>
+        <elementListCompartment Id="f9654c1a-11ad-49a5-869d-09139f6e950f" absoluteBounds="2.765, 10.335, 1.9700000000000002, 1.4031982421875" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <associationConnector edgePoints="[(2.75 : 3.57753182566939); (2.48611111111111 : 3.57753182566939); (2.48611111111111 : 10.8349145033753); (2.75 : 10.8349145033753)]" manuallyRouted="true" fixedFrom="Algorithm" fixedTo="Algorithm">
+      <AssociationMoniker Name="/OKBDataContext/Algorithm/Algorithm_Result" />
+      <nodes>
+        <classShapeMoniker Id="6395cc20-e99d-4d78-868d-4401004ef90f" />
+        <classShapeMoniker Id="1cb9bad0-d19c-43d7-97f8-a26cf3e2d7a0" />
+      </nodes>
+    </associationConnector>
+    <classShape Id="06cdd7a7-aece-4230-94df-523959acef3f" isExpanded="false" absoluteBounds="5, 4.375, 2, 0.45">
+      <DataClassMoniker Name="/OKBDataContext/AlgorithmParameterBlobValue" />
+      <nestedChildShapes>
+        <elementListCompartment Id="b48d7763-2c2a-4795-a2a0-632148a87992" absoluteBounds="5.015, 4.835, 1.9700000000000002, 1.0185953776041665" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <associationConnector edgePoints="[(4.75 : 4.6); (5 : 4.6)]" fixedFrom="Algorithm" fixedTo="Algorithm">
+      <AssociationMoniker Name="/OKBDataContext/AlgorithmParameter/AlgorithmParameter_AlgorithmParameterBlobValue" />
+      <nodes>
+        <classShapeMoniker Id="533939e3-1d76-4e1b-a562-4bb7a30cc432" />
+        <classShapeMoniker Id="06cdd7a7-aece-4230-94df-523959acef3f" />
+      </nodes>
+    </associationConnector>
+    <associationConnector edgePoints="[(8 : 4.474343832021); (7.75 : 4.47434383202099 : JumpStart); (7.58333333333334 : 4.474343832021 : JumpEnd); (7 : 4.474343832021)]" fixedFrom="Algorithm" fixedTo="Algorithm">
+      <AssociationMoniker Name="/OKBDataContext/Experiment/Experiment_AlgorithmParameterBlobValue" />
+      <nodes>
+        <classShapeMoniker Id="c250fb1a-b448-499e-b8eb-d1d0c38521a0" />
+        <classShapeMoniker Id="06cdd7a7-aece-4230-94df-523959acef3f" />
+      </nodes>
+    </associationConnector>
+    <classShape Id="fd56e6c2-86ec-4a3e-b5b4-3fc7da52b28c" absoluteBounds="8, 7.375, 2, 1.7708968098958327">
+      <DataClassMoniker Name="/OKBDataContext/DataType" />
+      <nestedChildShapes>
+        <elementListCompartment Id="ce12818a-3944-434b-8219-a290382fdcbc" absoluteBounds="8.015, 7.835, 1.9700000000000002, 1.2108968098958333" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <associationConnector edgePoints="[(8 : 8.62005434768249); (3.73458487358203 : 8.62005434768249); (3.73458487358203 : 6.3381982421875)]" manuallyRouted="true" fixedFrom="Algorithm" fixedTo="Caller">
+      <AssociationMoniker Name="/OKBDataContext/DataType/DataType_AlgorithmParameter" />
+      <nodes>
+        <classShapeMoniker Id="fd56e6c2-86ec-4a3e-b5b4-3fc7da52b28c" />
+        <classShapeMoniker Id="533939e3-1d76-4e1b-a562-4bb7a30cc432" />
+      </nodes>
+    </associationConnector>
+    <associationConnector edgePoints="[(10 : 8.96778217463151); (10.3335922099175 : 8.96778217463151 : JumpStart); (10.5002588765841 : 8.96778217463151 : JumpEnd); (14.2812525 : 8.96778217463151); (14.2812525 : 6.3381982421875)]" fixedFrom="Algorithm" fixedTo="Algorithm">
+      <AssociationMoniker Name="/OKBDataContext/DataType/DataType_ProblemParameter" />
+      <nodes>
+        <classShapeMoniker Id="fd56e6c2-86ec-4a3e-b5b4-3fc7da52b28c" />
+        <classShapeMoniker Id="8b17f420-0cf1-402a-aaec-d2372f039661" />
+      </nodes>
+    </associationConnector>
+    <associationConnector edgePoints="[(8 : 8.88813267804574); (3.73775859657604 : 8.88813267804574); (3.73775859657604 : 9.875)]" manuallyRouted="true" fixedFrom="Caller" fixedTo="Algorithm">
+      <AssociationMoniker Name="/OKBDataContext/DataType/DataType_Result" />
+      <nodes>
+        <classShapeMoniker Id="fd56e6c2-86ec-4a3e-b5b4-3fc7da52b28c" />
+        <classShapeMoniker Id="1cb9bad0-d19c-43d7-97f8-a26cf3e2d7a0" />
+      </nodes>
+    </associationConnector>
+    <associationConnector edgePoints="[(8 : 7.68202422783788); (7.53385416666667 : 7.68202422783788); (7.53385416666667 : 4.69868766404199); (7 : 4.69868766404199)]" manuallyRouted="true" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/OKBDataContext/DataType/DataType_AlgorithmParameterBlobValue" />
+      <nodes>
+        <classShapeMoniker Id="fd56e6c2-86ec-4a3e-b5b4-3fc7da52b28c" />
+        <classShapeMoniker Id="06cdd7a7-aece-4230-94df-523959acef3f" />
+      </nodes>
+    </associationConnector>
+    <associationConnector edgePoints="[(10 : 3.24965968229986); (10.1588541666667 : 3.24965968229986); (10.1588541666667 : 7.53538944096237); (10 : 7.53538944096237)]" manuallyRouted="true" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/OKBDataContext/Platform/Platform_DataType" />
+      <nodes>
+        <classShapeMoniker Id="42a9e8c0-3168-43f0-a31f-54d1558bd4c2" />
+        <classShapeMoniker Id="fd56e6c2-86ec-4a3e-b5b4-3fc7da52b28c" />
+      </nodes>
+    </associationConnector>
+    <classShape Id="26374887-8257-4278-aab5-42acd8160d99" isExpanded="false" absoluteBounds="5, 4.875, 2, 0.45">
+      <DataClassMoniker Name="/OKBDataContext/AlgorithmParameterBoolValue" />
+      <nestedChildShapes>
+        <elementListCompartment Id="674d80df-63fd-44ab-85f1-326e2e32ebca" absoluteBounds="5.015, 5.335, 1.9700000000000002, 1.0185953776041665" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <associationConnector edgePoints="[(4.75 : 5.1); (5 : 5.1)]" fixedFrom="Algorithm" fixedTo="Algorithm">
+      <AssociationMoniker Name="/OKBDataContext/AlgorithmParameter/AlgorithmParameter_AlgorithmParameterBoolValue" />
+      <nodes>
+        <classShapeMoniker Id="533939e3-1d76-4e1b-a562-4bb7a30cc432" />
+        <classShapeMoniker Id="26374887-8257-4278-aab5-42acd8160d99" />
+      </nodes>
+    </associationConnector>
+    <associationConnector edgePoints="[(8 : 7.89777876584318); (7.45052083333333 : 7.89777876584318); (7.45052083333333 : 5.18549618320611); (7 : 5.18549618320611)]" manuallyRouted="true" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/OKBDataContext/DataType/DataType_AlgorithmParameterBoolValue" />
+      <nodes>
+        <classShapeMoniker Id="fd56e6c2-86ec-4a3e-b5b4-3fc7da52b28c" />
+        <classShapeMoniker Id="26374887-8257-4278-aab5-42acd8160d99" />
+      </nodes>
+    </associationConnector>
+    <associationConnector edgePoints="[(8 : 4.96774809160306); (7.75 : 4.96774809160305 : JumpStart); (7.45052083333334 : 4.96774809160306 : JumpEnd); (7 : 4.96774809160306)]" fixedFrom="Algorithm" fixedTo="Algorithm">
+      <AssociationMoniker Name="/OKBDataContext/Experiment/Experiment_AlgorithmParameterBoolValue" />
+      <nodes>
+        <classShapeMoniker Id="c250fb1a-b448-499e-b8eb-d1d0c38521a0" />
+        <classShapeMoniker Id="26374887-8257-4278-aab5-42acd8160d99" />
+      </nodes>
+    </associationConnector>
+    <classShape Id="057a5dc9-97f1-4752-98b1-7e34502a121d" isExpanded="false" absoluteBounds="5, 5.375, 2, 0.45">
+      <DataClassMoniker Name="/OKBDataContext/AlgorithmParameterFloatValue" />
+      <nestedChildShapes>
+        <elementListCompartment Id="816b5043-a0c5-4633-96b3-f37d5e57a76d" absoluteBounds="5.015, 5.835, 1.9700000000000002, 1.0185953776041665" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <associationConnector edgePoints="[(4.75 : 5.6); (5 : 5.6)]" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/OKBDataContext/AlgorithmParameter/AlgorithmParameter_AlgorithmParameterFloatValue" />
+      <nodes>
+        <classShapeMoniker Id="533939e3-1d76-4e1b-a562-4bb7a30cc432" />
+        <classShapeMoniker Id="057a5dc9-97f1-4752-98b1-7e34502a121d" />
+      </nodes>
+    </associationConnector>
+    <associationConnector edgePoints="[(8 : 8.09431585737187); (7.36677083333333 : 8.09431585737187); (7.36677083333333 : 5.67187575); (7 : 5.67187575)]" manuallyRouted="true" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/OKBDataContext/DataType/DataType_AlgorithmParameterFloatValue" />
+      <nodes>
+        <classShapeMoniker Id="fd56e6c2-86ec-4a3e-b5b4-3fc7da52b28c" />
+        <classShapeMoniker Id="057a5dc9-97f1-4752-98b1-7e34502a121d" />
+      </nodes>
+    </associationConnector>
+    <associationConnector edgePoints="[(8 : 5.460937875); (7.75 : 5.460937875 : JumpStart); (7.3671875 : 5.460937875 : JumpEnd); (7 : 5.460937875)]" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/OKBDataContext/Experiment/Experiment_AlgorithmParameterFloatValue" />
+      <nodes>
+        <classShapeMoniker Id="c250fb1a-b448-499e-b8eb-d1d0c38521a0" />
+        <classShapeMoniker Id="057a5dc9-97f1-4752-98b1-7e34502a121d" />
+      </nodes>
+    </associationConnector>
+    <classShape Id="2f5e14b0-a1c2-4ff8-85e9-8be6dd6d1a3c" isExpanded="false" absoluteBounds="5, 5.875, 2, 0.45">
+      <DataClassMoniker Name="/OKBDataContext/AlgorithmParameterIntValue" />
+      <nestedChildShapes>
+        <elementListCompartment Id="752cb331-8b80-4e3d-bf2b-cf3e5f7969dd" absoluteBounds="5.015, 6.335, 1.9700000000000002, 1.0185953776041665" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <associationConnector edgePoints="[(4.75 : 6.1); (5 : 6.1)]" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/OKBDataContext/AlgorithmParameter/AlgorithmParameter_AlgorithmParameterIntValue" />
+      <nodes>
+        <classShapeMoniker Id="533939e3-1d76-4e1b-a562-4bb7a30cc432" />
+        <classShapeMoniker Id="2f5e14b0-a1c2-4ff8-85e9-8be6dd6d1a3c" />
+      </nodes>
+    </associationConnector>
+    <associationConnector edgePoints="[(8 : 8.27449885424563); (7.28645833333333 : 8.27449885424563); (7.28645833333333 : 6.14022346368715); (7 : 6.14022346368715)]" manuallyRouted="true" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/OKBDataContext/DataType/DataType_AlgorithmParameterIntValue" />
+      <nodes>
+        <classShapeMoniker Id="fd56e6c2-86ec-4a3e-b5b4-3fc7da52b28c" />
+        <classShapeMoniker Id="2f5e14b0-a1c2-4ff8-85e9-8be6dd6d1a3c" />
+      </nodes>
+    </associationConnector>
+    <associationConnector edgePoints="[(8.12469232196825 : 5.7612939453125); (8.12469232196825 : 6.26386423184357); (7.75 : 6.26386423184357 : JumpStart); (7.203125 : 6.26386423184357 : JumpEnd); (7 : 6.26386423184357)]" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/OKBDataContext/Experiment/Experiment_AlgorithmParameterIntValue" />
+      <nodes>
+        <classShapeMoniker Id="c250fb1a-b448-499e-b8eb-d1d0c38521a0" />
+        <classShapeMoniker Id="2f5e14b0-a1c2-4ff8-85e9-8be6dd6d1a3c" />
+      </nodes>
+    </associationConnector>
+    <classShape Id="eea47e09-6cec-4cb3-9d45-7b9004038e54" isExpanded="false" absoluteBounds="5, 6.375, 2, 0.45">
+      <DataClassMoniker Name="/OKBDataContext/AlgorithmParameterStringValue" />
+      <nestedChildShapes>
+        <elementListCompartment Id="c80917ed-7a25-4278-bdef-8dc9ab7ce3eb" absoluteBounds="5.015, 6.835, 1.9700000000000002, 1.0185953776041665" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <associationConnector edgePoints="[(4.75 : 6.3381982421875); (5 : 6.375)]" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/OKBDataContext/AlgorithmParameter/AlgorithmParameter_AlgorithmParameterStringValue" />
+      <nodes>
+        <classShapeMoniker Id="533939e3-1d76-4e1b-a562-4bb7a30cc432" />
+        <classShapeMoniker Id="eea47e09-6cec-4cb3-9d45-7b9004038e54" />
+      </nodes>
+    </associationConnector>
+    <associationConnector edgePoints="[(8 : 8.45765282383201); (7.22395833333333 : 8.45765282383201); (7.22395833333333 : 6.68727272727273); (7 : 6.68727272727273)]" manuallyRouted="true" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/OKBDataContext/DataType/DataType_AlgorithmParameterStringValue" />
+      <nodes>
+        <classShapeMoniker Id="fd56e6c2-86ec-4a3e-b5b4-3fc7da52b28c" />
+        <classShapeMoniker Id="eea47e09-6cec-4cb3-9d45-7b9004038e54" />
+      </nodes>
+    </associationConnector>
+    <associationConnector edgePoints="[(8.32275220480378 : 5.7612939453125); (8.32275220480378 : 6.52913752913753); (7.75 : 6.52913752913753 : JumpStart); (7.203125 : 6.52913752913753 : JumpEnd); (7 : 6.52913752913753)]" manuallyRouted="true" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/OKBDataContext/Experiment/Experiment_AlgorithmParameterStringValue" />
+      <nodes>
+        <classShapeMoniker Id="c250fb1a-b448-499e-b8eb-d1d0c38521a0" />
+        <classShapeMoniker Id="eea47e09-6cec-4cb3-9d45-7b9004038e54" />
+      </nodes>
+    </associationConnector>
+    <classShape Id="3a7d54f6-474c-4e4d-b1ef-db12741c57a7" isExpanded="false" absoluteBounds="11, 4.375, 2, 0.45">
+      <DataClassMoniker Name="/OKBDataContext/ProblemParameterBlobValue" />
+      <nestedChildShapes>
+        <elementListCompartment Id="661a54eb-030c-441f-b081-ff5fb5f56029" absoluteBounds="11.015, 4.835, 1.9700000000000002, 1.0185953776041665" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <associationConnector edgePoints="[(10 : 8.05217389502423); (10.3335922099175 : 8.05217389502423 : JumpStart); (10.5002588765841 : 8.05217389502423 : JumpEnd); (10.5625 : 8.05217389502423); (10.5625 : 4.6994708994709); (11 : 4.6994708994709)]" manuallyRouted="true" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/OKBDataContext/DataType/DataType_ProblemParameterBlobValue" />
+      <nodes>
+        <classShapeMoniker Id="fd56e6c2-86ec-4a3e-b5b4-3fc7da52b28c" />
+        <classShapeMoniker Id="3a7d54f6-474c-4e4d-b1ef-db12741c57a7" />
+      </nodes>
+    </associationConnector>
+    <associationConnector edgePoints="[(10 : 4.55926455740201); (10.0755208981321 : 4.55917037795654 : JumpStart); (10.3177082685346 : 4.5588683546384 : JumpEnd); (11 : 4.55801749271137)]" manuallyRouted="true" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/OKBDataContext/Experiment/Experiment_ProblemParameterBlobValue" />
+      <nodes>
+        <classShapeMoniker Id="c250fb1a-b448-499e-b8eb-d1d0c38521a0" />
+        <classShapeMoniker Id="3a7d54f6-474c-4e4d-b1ef-db12741c57a7" />
+      </nodes>
+    </associationConnector>
+    <associationConnector edgePoints="[(13.25 : 4.6); (13 : 4.6)]" fixedFrom="Algorithm" fixedTo="Algorithm">
+      <AssociationMoniker Name="/OKBDataContext/ProblemParameter/ProblemParameter_ProblemParameterBlobValue" />
+      <nodes>
+        <classShapeMoniker Id="8b17f420-0cf1-402a-aaec-d2372f039661" />
+        <classShapeMoniker Id="3a7d54f6-474c-4e4d-b1ef-db12741c57a7" />
+      </nodes>
+    </associationConnector>
+    <classShape Id="17eed903-551f-4855-bec6-9766e172358a" isExpanded="false" absoluteBounds="11, 4.875, 2, 0.45">
+      <DataClassMoniker Name="/OKBDataContext/ProblemParameterBoolValue" />
+      <nestedChildShapes>
+        <elementListCompartment Id="4e4b3cfc-c0b8-4792-a6f6-69eca72be5e9" absoluteBounds="11.015, 5.335, 1.9700000000000002, 1.0185953776041665" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <associationConnector edgePoints="[(10 : 8.19739777856985); (10.3335922099175 : 8.19739777856985 : JumpStart); (10.5002588765841 : 8.19739777856985 : JumpEnd); (10.625 : 8.19739777856985); (10.625 : 5.16632124352332); (11 : 5.16632124352332)]" manuallyRouted="true" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/OKBDataContext/DataType/DataType_ProblemParameterBoolValue" />
+      <nodes>
+        <classShapeMoniker Id="fd56e6c2-86ec-4a3e-b5b4-3fc7da52b28c" />
+        <classShapeMoniker Id="17eed903-551f-4855-bec6-9766e172358a" />
+      </nodes>
+    </associationConnector>
+    <associationConnector edgePoints="[(10 : 4.95816062176166); (10.0755208333334 : 4.95816062176166 : JumpStart); (10.3177083333333 : 4.95816062176166 : JumpEnd); (10.4791666666667 : 4.95816062176166 : JumpStart); (10.6458333333333 : 4.95816062176166 : JumpEnd); (11 : 4.95816062176166)]" fixedFrom="Algorithm" fixedTo="Algorithm">
+      <AssociationMoniker Name="/OKBDataContext/Experiment/Experiment_ProblemParameterBoolValue" />
+      <nodes>
+        <classShapeMoniker Id="c250fb1a-b448-499e-b8eb-d1d0c38521a0" />
+        <classShapeMoniker Id="17eed903-551f-4855-bec6-9766e172358a" />
+      </nodes>
+    </associationConnector>
+    <associationConnector edgePoints="[(13.25 : 5.1); (13 : 5.1)]" fixedFrom="Algorithm" fixedTo="Algorithm">
+      <AssociationMoniker Name="/OKBDataContext/ProblemParameter/ProblemParameter_ProblemParameterBoolValue" />
+      <nodes>
+        <classShapeMoniker Id="8b17f420-0cf1-402a-aaec-d2372f039661" />
+        <classShapeMoniker Id="17eed903-551f-4855-bec6-9766e172358a" />
+      </nodes>
+    </associationConnector>
+    <classShape Id="efb685e2-26e6-42b4-af33-25d0a261a8e4" isExpanded="false" absoluteBounds="11, 5.375, 2, 0.45">
+      <DataClassMoniker Name="/OKBDataContext/ProblemParameterFloatValue" />
+      <nestedChildShapes>
+        <elementListCompartment Id="e4fc9f1f-c248-4dc4-92d8-251dabb0e892" absoluteBounds="11.015, 5.835, 1.9700000000000002, 1.0185953776041665" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <associationConnector edgePoints="[(10 : 8.39427223648019); (10.3335922099175 : 8.39427223648019 : JumpStart); (10.5002588765841 : 8.39427223648019 : JumpEnd); (10.6848958333333 : 8.39427223648019); (10.6848958333333 : 5.65482233502538); (11 : 5.65482233502538)]" manuallyRouted="true" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/OKBDataContext/DataType/DataType_ProblemParameterFloatValue" />
+      <nodes>
+        <classShapeMoniker Id="fd56e6c2-86ec-4a3e-b5b4-3fc7da52b28c" />
+        <classShapeMoniker Id="efb685e2-26e6-42b4-af33-25d0a261a8e4" />
+      </nodes>
+    </associationConnector>
+    <associationConnector edgePoints="[(10 : 5.52361809045226); (10.0755208333334 : 5.52361809045226 : JumpStart); (10.3177083333333 : 5.52361809045226 : JumpEnd); (10.4791666666667 : 5.52361809045226 : JumpStart); (10.7083333333333 : 5.52361809045226 : JumpEnd); (11 : 5.52361809045226)]" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/OKBDataContext/Experiment/Experiment_ProblemParameterFloatValue" />
+      <nodes>
+        <classShapeMoniker Id="c250fb1a-b448-499e-b8eb-d1d0c38521a0" />
+        <classShapeMoniker Id="efb685e2-26e6-42b4-af33-25d0a261a8e4" />
+      </nodes>
+    </associationConnector>
+    <associationConnector edgePoints="[(13.25 : 5.6); (13 : 5.6)]" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/OKBDataContext/ProblemParameter/ProblemParameter_ProblemParameterFloatValue" />
+      <nodes>
+        <classShapeMoniker Id="8b17f420-0cf1-402a-aaec-d2372f039661" />
+        <classShapeMoniker Id="efb685e2-26e6-42b4-af33-25d0a261a8e4" />
+      </nodes>
+    </associationConnector>
+    <classShape Id="b27bcaf0-a671-4840-b8d0-3b0b9a75e521" isExpanded="false" absoluteBounds="11, 5.875, 2, 0.45">
+      <DataClassMoniker Name="/OKBDataContext/ProblemParameterIntValue" />
+      <nestedChildShapes>
+        <elementListCompartment Id="8d19f7b7-2edd-4c58-b478-8c9e82f8dd8e" absoluteBounds="11.015, 6.335, 1.9700000000000002, 1.0185953776041665" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <associationConnector edgePoints="[(10 : 8.53927182918805); (10.3335922099175 : 8.53927182918805 : JumpStart); (10.5002588765841 : 8.53927182918805 : JumpEnd); (10.796875 : 8.53927182918805); (10.796875 : 6.18442211055276); (11 : 6.18442211055276)]" manuallyRouted="true" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/OKBDataContext/DataType/DataType_ProblemParameterIntValue" />
+      <nodes>
+        <classShapeMoniker Id="fd56e6c2-86ec-4a3e-b5b4-3fc7da52b28c" />
+        <classShapeMoniker Id="b27bcaf0-a671-4840-b8d0-3b0b9a75e521" />
+      </nodes>
+    </associationConnector>
+    <associationConnector edgePoints="[(9.90313426539349 : 5.7612939453125); (9.90313426539349 : 5.99845855527638); (10.0755208333334 : 5.99845855527638 : JumpStart); (10.3177083333333 : 5.99845855527638 : JumpEnd); (10.4791666666667 : 5.99845855527638 : JumpStart); (10.7682291666666 : 5.99845855527638 : JumpEnd); (11 : 5.99845855527638)]" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/OKBDataContext/Experiment/Experiment_ProblemParameterIntValue" />
+      <nodes>
+        <classShapeMoniker Id="c250fb1a-b448-499e-b8eb-d1d0c38521a0" />
+        <classShapeMoniker Id="b27bcaf0-a671-4840-b8d0-3b0b9a75e521" />
+      </nodes>
+    </associationConnector>
+    <associationConnector edgePoints="[(13.25 : 6.1); (13 : 6.1)]" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/OKBDataContext/ProblemParameter/ProblemParameter_ProblemParameterIntValue" />
+      <nodes>
+        <classShapeMoniker Id="8b17f420-0cf1-402a-aaec-d2372f039661" />
+        <classShapeMoniker Id="b27bcaf0-a671-4840-b8d0-3b0b9a75e521" />
+      </nodes>
+    </associationConnector>
+    <classShape Id="b7bc30b4-f687-4b26-8033-3a45f55ba3d0" isExpanded="false" absoluteBounds="11, 6.375, 2, 0.45">
+      <DataClassMoniker Name="/OKBDataContext/ProblemParameterStringValue" />
+      <nestedChildShapes>
+        <elementListCompartment Id="3f3ddbbc-2bdc-4b62-8af7-c764c9cb3d23" absoluteBounds="11.015, 6.835, 1.9700000000000002, 1.0185953776041665" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <associationConnector edgePoints="[(10 : 8.72716253936718); (10.3335922099175 : 8.72716253936718 : JumpStart); (10.5002588765841 : 8.72716253936718 : JumpEnd); (10.8333333333334 : 8.72716253936718); (10.8333333333334 : 6.67728459530026); (11 : 6.67728459530026)]" manuallyRouted="true" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/OKBDataContext/DataType/DataType_ProblemParameterStringValue" />
+      <nodes>
+        <classShapeMoniker Id="fd56e6c2-86ec-4a3e-b5b4-3fc7da52b28c" />
+        <classShapeMoniker Id="b7bc30b4-f687-4b26-8033-3a45f55ba3d0" />
+      </nodes>
+    </associationConnector>
+    <associationConnector edgePoints="[(9.7239488113416 : 5.7612939453125); (9.7239488113416 : 6.52284263959391); (10.0755208333334 : 6.52284263959391 : JumpStart); (10.3177083333333 : 6.52284263959391 : JumpEnd); (10.4791666666667 : 6.52284263959391 : JumpStart); (10.8802083333333 : 6.52284263959391 : JumpEnd); (11 : 6.52284263959391)]" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/OKBDataContext/Experiment/Experiment_ProblemParameterStringValue" />
+      <nodes>
+        <classShapeMoniker Id="c250fb1a-b448-499e-b8eb-d1d0c38521a0" />
+        <classShapeMoniker Id="b7bc30b4-f687-4b26-8033-3a45f55ba3d0" />
+      </nodes>
+    </associationConnector>
+    <associationConnector edgePoints="[(13.25 : 6.3381982421875); (13 : 6.375)]" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/OKBDataContext/ProblemParameter/ProblemParameter_ProblemParameterStringValue" />
+      <nodes>
+        <classShapeMoniker Id="8b17f420-0cf1-402a-aaec-d2372f039661" />
+        <classShapeMoniker Id="b7bc30b4-f687-4b26-8033-3a45f55ba3d0" />
+      </nodes>
+    </associationConnector>
+    <classShape Id="ee200851-595b-4ee2-b49c-05a55a37599f" isExpanded="false" absoluteBounds="5, 9.875, 2, 0.45">
+      <DataClassMoniker Name="/OKBDataContext/ResultBlobValue" />
+      <nestedChildShapes>
+        <elementListCompartment Id="0ac0d616-ed46-4b7b-9cc5-2603a9b9ec47" absoluteBounds="5.015, 10.335, 1.9700000000000002, 1.0185953776041665" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <associationConnector edgePoints="[(8.25989679584114 : 9.14589680989583); (8.25989679584114 : 9.23177083333333); (7.19791666666667 : 9.23177083333333); (7.19791666666667 : 10.0022522522523); (7 : 10.0022522522523)]" manuallyRouted="true" fixedFrom="Caller" fixedTo="Caller">
+      <AssociationMoniker Name="/OKBDataContext/DataType/DataType_ResultBlobValue" />
+      <nodes>
+        <classShapeMoniker Id="fd56e6c2-86ec-4a3e-b5b4-3fc7da52b28c" />
+        <classShapeMoniker Id="ee200851-595b-4ee2-b49c-05a55a37599f" />
+      </nodes>
+    </associationConnector>
+    <associationConnector edgePoints="[(4.75 : 10.1); (5 : 10.1)]" fixedFrom="Algorithm" fixedTo="Algorithm">
+      <AssociationMoniker Name="/OKBDataContext/Result/Result_ResultBlobValue" />
+      <nodes>
+        <classShapeMoniker Id="1cb9bad0-d19c-43d7-97f8-a26cf3e2d7a0" />
+        <classShapeMoniker Id="ee200851-595b-4ee2-b49c-05a55a37599f" />
+      </nodes>
+    </associationConnector>
+    <associationConnector edgePoints="[(8 : 10.203124); (7.640625 : 10.203124 : JumpStart); (7.25520833333334 : 10.203124 : JumpEnd); (7 : 10.203124)]" fixedFrom="Algorithm" fixedTo="Algorithm">
+      <AssociationMoniker Name="/OKBDataContext/Run/Run_ResultBlobValue" />
+      <nodes>
+        <classShapeMoniker Id="83a5f628-defe-486f-bc6a-4ab430293368" />
+        <classShapeMoniker Id="ee200851-595b-4ee2-b49c-05a55a37599f" />
+      </nodes>
+    </associationConnector>
+    <classShape Id="d9962bb9-5e85-4440-ba70-52dee5597bb5" isExpanded="false" absoluteBounds="5, 10.375, 2, 0.45">
+      <DataClassMoniker Name="/OKBDataContext/ResultBoolValue" />
+      <nestedChildShapes>
+        <elementListCompartment Id="df41447b-8550-49a9-ae8a-ce5fdde5f39e" absoluteBounds="5.015, 10.835, 1.9700000000000002, 1.0185953776041665" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <associationConnector edgePoints="[(8.40008105657562 : 9.14589680989583); (8.40008105657562 : 9.3359375); (7.33854166666667 : 9.3359375); (7.33854166666667 : 10.5251231527094); (7 : 10.5251231527094)]" manuallyRouted="true" fixedFrom="Algorithm" fixedTo="Algorithm">
+      <AssociationMoniker Name="/OKBDataContext/DataType/DataType_ResultBoolValue" />
+      <nodes>
+        <classShapeMoniker Id="fd56e6c2-86ec-4a3e-b5b4-3fc7da52b28c" />
+        <classShapeMoniker Id="d9962bb9-5e85-4440-ba70-52dee5597bb5" />
+      </nodes>
+    </associationConnector>
+    <associationConnector edgePoints="[(4.75 : 10.6); (5 : 10.6)]" fixedFrom="Algorithm" fixedTo="Algorithm">
+      <AssociationMoniker Name="/OKBDataContext/Result/Result_ResultBoolValue" />
+      <nodes>
+        <classShapeMoniker Id="1cb9bad0-d19c-43d7-97f8-a26cf3e2d7a0" />
+        <classShapeMoniker Id="d9962bb9-5e85-4440-ba70-52dee5597bb5" />
+      </nodes>
+    </associationConnector>
+    <associationConnector edgePoints="[(8 : 10.7375615763547); (7.640625 : 10.7375615763547 : JumpStart); (7.31770833333334 : 10.7375615763547 : JumpEnd); (7 : 10.7375615763547)]" fixedFrom="Algorithm" fixedTo="Algorithm">
+      <AssociationMoniker Name="/OKBDataContext/Run/Run_ResultBoolValue" />
+      <nodes>
+        <classShapeMoniker Id="83a5f628-defe-486f-bc6a-4ab430293368" />
+        <classShapeMoniker Id="d9962bb9-5e85-4440-ba70-52dee5597bb5" />
+      </nodes>
+    </associationConnector>
+    <classShape Id="87722e82-0ed2-4367-970a-de15813bccf4" isExpanded="false" absoluteBounds="5, 10.875, 2, 0.45">
+      <DataClassMoniker Name="/OKBDataContext/ResultFloatValue" />
+      <nestedChildShapes>
+        <elementListCompartment Id="7da0329a-6d27-48f9-9681-3218a4f30693" absoluteBounds="5.015, 11.335, 1.9700000000000002, 1.0185953776041665" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <associationConnector edgePoints="[(8.50949690409837 : 9.14589680989583); (8.50949690409837 : 9.48177083333333); (7.40104166666667 : 9.48177083333333); (7.40104166666667 : 11.0431472081218); (7 : 11.0431472081218)]" manuallyRouted="true" fixedFrom="Algorithm" fixedTo="Algorithm">
+      <AssociationMoniker Name="/OKBDataContext/DataType/DataType_ResultFloatValue" />
+      <nodes>
+        <classShapeMoniker Id="fd56e6c2-86ec-4a3e-b5b4-3fc7da52b28c" />
+        <classShapeMoniker Id="87722e82-0ed2-4367-970a-de15813bccf4" />
+      </nodes>
+    </associationConnector>
+    <associationConnector edgePoints="[(4.75 : 11.1); (5 : 11.1)]" fixedFrom="Algorithm" fixedTo="Algorithm">
+      <AssociationMoniker Name="/OKBDataContext/Result/Result_ResultFloatValue" />
+      <nodes>
+        <classShapeMoniker Id="1cb9bad0-d19c-43d7-97f8-a26cf3e2d7a0" />
+        <classShapeMoniker Id="87722e82-0ed2-4367-970a-de15813bccf4" />
+      </nodes>
+    </associationConnector>
+    <associationConnector edgePoints="[(8 : 11.2465736040609); (7.640625 : 11.2465736040609 : JumpStart); (7.390625 : 11.2465736040609 : JumpEnd); (7 : 11.2465736040609)]" fixedFrom="Algorithm" fixedTo="Algorithm">
+      <AssociationMoniker Name="/OKBDataContext/Run/Run_ResultFloatValue" />
+      <nodes>
+        <classShapeMoniker Id="83a5f628-defe-486f-bc6a-4ab430293368" />
+        <classShapeMoniker Id="87722e82-0ed2-4367-970a-de15813bccf4" />
+      </nodes>
+    </associationConnector>
+    <classShape Id="51114ffd-aaac-4a08-b313-992d55fb1998" isExpanded="false" absoluteBounds="5, 11.375, 2, 0.45">
+      <DataClassMoniker Name="/OKBDataContext/ResultIntValue" />
+      <nestedChildShapes>
+        <elementListCompartment Id="c0d4b94f-c6a1-4143-866a-11e138a128b2" absoluteBounds="5.015, 11.835, 1.9700000000000002, 1.0185953776041665" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <associationConnector edgePoints="[(8.64347373456605 : 9.14589680989583); (8.64347373456605 : 9.62760416666666); (7.47395833333333 : 9.62760416666666); (7.47395833333333 : 11.5523316062176); (7 : 11.5523316062176)]" manuallyRouted="true" fixedFrom="Algorithm" fixedTo="Algorithm">
+      <AssociationMoniker Name="/OKBDataContext/DataType/DataType_ResultIntValue" />
+      <nodes>
+        <classShapeMoniker Id="fd56e6c2-86ec-4a3e-b5b4-3fc7da52b28c" />
+        <classShapeMoniker Id="51114ffd-aaac-4a08-b313-992d55fb1998" />
+      </nodes>
+    </associationConnector>
+    <associationConnector edgePoints="[(4.75 : 11.6); (5 : 11.6)]" fixedFrom="Algorithm" fixedTo="Algorithm">
+      <AssociationMoniker Name="/OKBDataContext/Result/Result_ResultIntValue" />
+      <nodes>
+        <classShapeMoniker Id="1cb9bad0-d19c-43d7-97f8-a26cf3e2d7a0" />
+        <classShapeMoniker Id="51114ffd-aaac-4a08-b313-992d55fb1998" />
+      </nodes>
+    </associationConnector>
+    <associationConnector edgePoints="[(8 : 11.7511658031088); (7.640625 : 11.7511658031088 : JumpStart); (7.47395833333334 : 11.7511658031088 : JumpEnd); (7 : 11.7511658031088)]" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/OKBDataContext/Run/Run_ResultIntValue" />
+      <nodes>
+        <classShapeMoniker Id="83a5f628-defe-486f-bc6a-4ab430293368" />
+        <classShapeMoniker Id="51114ffd-aaac-4a08-b313-992d55fb1998" />
+      </nodes>
+    </associationConnector>
+    <classShape Id="88d442c4-1dd1-4cbf-ab9f-0ab5be88bde3" isExpanded="false" absoluteBounds="5, 11.875, 2, 0.45">
+      <DataClassMoniker Name="/OKBDataContext/ResultStringValue" />
+      <nestedChildShapes>
+        <elementListCompartment Id="e1b83e78-6822-4fc3-ad73-406604736b80" absoluteBounds="5.015, 12.335, 1.9700000000000002, 1.0185953776041665" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <associationConnector edgePoints="[(8.76594671358473 : 9.14589680989583); (8.76594671358473 : 9.75260416666667); (7.55729166666667 : 9.75260416666667); (7.55729166666667 : 12.0117948717949); (7 : 12.0117948717949)]" manuallyRouted="true" fixedFrom="Algorithm" fixedTo="Algorithm">
+      <AssociationMoniker Name="/OKBDataContext/DataType/DataType_ResultStringValue" />
+      <nodes>
+        <classShapeMoniker Id="fd56e6c2-86ec-4a3e-b5b4-3fc7da52b28c" />
+        <classShapeMoniker Id="88d442c4-1dd1-4cbf-ab9f-0ab5be88bde3" />
+      </nodes>
+    </associationConnector>
+    <associationConnector edgePoints="[(4.75000000000001 : 11.8381982421875); (5 : 11.875)]" fixedFrom="Algorithm" fixedTo="Algorithm">
+      <AssociationMoniker Name="/OKBDataContext/Result/Result_ResultStringValue" />
+      <nodes>
+        <classShapeMoniker Id="1cb9bad0-d19c-43d7-97f8-a26cf3e2d7a0" />
+        <classShapeMoniker Id="88d442c4-1dd1-4cbf-ab9f-0ab5be88bde3" />
+      </nodes>
+    </associationConnector>
+    <associationConnector edgePoints="[(8.19174036349966 : 11.8381982421875); (8.19174036349966 : 12.1996499358974); (7 : 12.1996499358974)]" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/OKBDataContext/Run/Run_ResultStringValue" />
+      <nodes>
+        <classShapeMoniker Id="83a5f628-defe-486f-bc6a-4ab430293368" />
+        <classShapeMoniker Id="88d442c4-1dd1-4cbf-ab9f-0ab5be88bde3" />
+      </nodes>
+    </associationConnector>
+    <classShape Id="6a694570-7fd3-46f5-8972-d67f230df83e" isExpanded="false" absoluteBounds="5, 3.125, 2, 0.45">
+      <DataClassMoniker Name="/OKBDataContext/AlgorithmData" />
+      <nestedChildShapes>
+        <elementListCompartment Id="528e0b3e-4609-41e5-931d-60e5165e8fcf" absoluteBounds="5.015, 3.585, 1.9700000000000002, 0.8262939453125" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <associationConnector edgePoints="[(4.75 : 3.35); (5 : 3.35)]" fixedFrom="Algorithm" fixedTo="Algorithm">
+      <AssociationMoniker Name="/OKBDataContext/Algorithm/Algorithm_AlgorithmData" />
+      <nodes>
+        <classShapeMoniker Id="6395cc20-e99d-4d78-868d-4401004ef90f" />
+        <classShapeMoniker Id="6a694570-7fd3-46f5-8972-d67f230df83e" />
+      </nodes>
+    </associationConnector>
+    <associationConnector edgePoints="[(8 : 7.49345305579167); (7.66666666666667 : 7.49345305579167); (7.66666666666667 : 3.35402010050251); (7 : 3.35402010050251)]" manuallyRouted="true" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/OKBDataContext/DataType/DataType_AlgorithmData" />
+      <nodes>
+        <classShapeMoniker Id="fd56e6c2-86ec-4a3e-b5b4-3fc7da52b28c" />
+        <classShapeMoniker Id="6a694570-7fd3-46f5-8972-d67f230df83e" />
+      </nodes>
+    </associationConnector>
+    <classShape Id="76c463bf-aada-4bb3-8fee-36e85d08bebf" isExpanded="false" absoluteBounds="11, 3.125, 2, 0.45">
+      <DataClassMoniker Name="/OKBDataContext/ProblemData" />
+      <nestedChildShapes>
+        <elementListCompartment Id="f0041206-64f7-482e-bc89-1fc4ae5a29ec" absoluteBounds="11.015, 3.585, 1.9700000000000002, 0.8262939453125" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <associationConnector edgePoints="[(10 : 7.79166161250276); (10.234375 : 7.79166161250276); (10.234375 : 3.34351351351351); (11 : 3.34351351351351)]" manuallyRouted="true" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/OKBDataContext/DataType/DataType_ProblemData" />
+      <nodes>
+        <classShapeMoniker Id="fd56e6c2-86ec-4a3e-b5b4-3fc7da52b28c" />
+        <classShapeMoniker Id="76c463bf-aada-4bb3-8fee-36e85d08bebf" />
+      </nodes>
+    </associationConnector>
+    <associationConnector edgePoints="[(13.25 : 3.35); (13 : 3.35)]" fixedFrom="Algorithm" fixedTo="Algorithm">
+      <AssociationMoniker Name="/OKBDataContext/Problem/Problem_ProblemData" />
+      <nodes>
+        <classShapeMoniker Id="27d0903a-8f45-4b0b-8d0e-8d632bffc702" />
+        <classShapeMoniker Id="76c463bf-aada-4bb3-8fee-36e85d08bebf" />
+      </nodes>
+    </associationConnector>
+  </nestedChildShapes>
+</ordesignerObjectsDiagram>
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataAccess/3.3/OKB.generated.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataAccess/3.3/OKB.generated.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataAccess/3.3/OKB.generated.cs	(revision 5296)
@@ -0,0 +1,8986 @@
+﻿#pragma warning disable 1591
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by LINQ to SQL template for T4 C#
+//     Generated at 09/16/2010 02:21:16
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+using System;
+using System.ComponentModel;
+using System.Data.Linq;
+using System.Data.Linq.Mapping;
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.OKB.DataAccess
+{
+	[DatabaseAttribute(Name=@"HeuristicLab.OKB")]
+	public partial class OKBDataContext : DataContext
+	{
+		private static MappingSource mappingSource = new AttributeMappingSource();
+		
+		#region Extensibility Method Definitions
+		partial void OnCreated();
+		partial void InsertAlgorithmClass(AlgorithmClass instance);
+		partial void UpdateAlgorithmClass(AlgorithmClass instance);
+		partial void DeleteAlgorithmClass(AlgorithmClass instance);
+		partial void InsertAlgorithm(Algorithm instance);
+		partial void UpdateAlgorithm(Algorithm instance);
+		partial void DeleteAlgorithm(Algorithm instance);
+		partial void InsertProblem(Problem instance);
+		partial void UpdateProblem(Problem instance);
+		partial void DeleteProblem(Problem instance);
+		partial void InsertProblemClass(ProblemClass instance);
+		partial void UpdateProblemClass(ProblemClass instance);
+		partial void DeleteProblemClass(ProblemClass instance);
+		partial void InsertExperiment(Experiment instance);
+		partial void UpdateExperiment(Experiment instance);
+		partial void DeleteExperiment(Experiment instance);
+		partial void InsertAlgorithmParameter(AlgorithmParameter instance);
+		partial void UpdateAlgorithmParameter(AlgorithmParameter instance);
+		partial void DeleteAlgorithmParameter(AlgorithmParameter instance);
+		partial void InsertProblemParameter(ProblemParameter instance);
+		partial void UpdateProblemParameter(ProblemParameter instance);
+		partial void DeleteProblemParameter(ProblemParameter instance);
+		partial void InsertAlgorithmData(AlgorithmData instance);
+		partial void UpdateAlgorithmData(AlgorithmData instance);
+		partial void DeleteAlgorithmData(AlgorithmData instance);
+		partial void InsertUser(User instance);
+		partial void UpdateUser(User instance);
+		partial void DeleteUser(User instance);
+		partial void InsertProblemData(ProblemData instance);
+		partial void UpdateProblemData(ProblemData instance);
+		partial void DeleteProblemData(ProblemData instance);
+		partial void InsertAlgorithmUser(AlgorithmUser instance);
+		partial void UpdateAlgorithmUser(AlgorithmUser instance);
+		partial void DeleteAlgorithmUser(AlgorithmUser instance);
+		partial void InsertProblemUser(ProblemUser instance);
+		partial void UpdateProblemUser(ProblemUser instance);
+		partial void DeleteProblemUser(ProblemUser instance);
+		partial void InsertPlatform(Platform instance);
+		partial void UpdatePlatform(Platform instance);
+		partial void DeletePlatform(Platform instance);
+		partial void InsertRun(Run instance);
+		partial void UpdateRun(Run instance);
+		partial void DeleteRun(Run instance);
+		partial void InsertResult(Result instance);
+		partial void UpdateResult(Result instance);
+		partial void DeleteResult(Result instance);
+		partial void InsertClient(Client instance);
+		partial void UpdateClient(Client instance);
+		partial void DeleteClient(Client instance);
+		partial void InsertAlgorithmParameterBlobValue(AlgorithmParameterBlobValue instance);
+		partial void UpdateAlgorithmParameterBlobValue(AlgorithmParameterBlobValue instance);
+		partial void DeleteAlgorithmParameterBlobValue(AlgorithmParameterBlobValue instance);
+		partial void InsertDataType(DataType instance);
+		partial void UpdateDataType(DataType instance);
+		partial void DeleteDataType(DataType instance);
+		partial void InsertAlgorithmParameterBoolValue(AlgorithmParameterBoolValue instance);
+		partial void UpdateAlgorithmParameterBoolValue(AlgorithmParameterBoolValue instance);
+		partial void DeleteAlgorithmParameterBoolValue(AlgorithmParameterBoolValue instance);
+		partial void InsertAlgorithmParameterFloatValue(AlgorithmParameterFloatValue instance);
+		partial void UpdateAlgorithmParameterFloatValue(AlgorithmParameterFloatValue instance);
+		partial void DeleteAlgorithmParameterFloatValue(AlgorithmParameterFloatValue instance);
+		partial void InsertAlgorithmParameterIntValue(AlgorithmParameterIntValue instance);
+		partial void UpdateAlgorithmParameterIntValue(AlgorithmParameterIntValue instance);
+		partial void DeleteAlgorithmParameterIntValue(AlgorithmParameterIntValue instance);
+		partial void InsertAlgorithmParameterStringValue(AlgorithmParameterStringValue instance);
+		partial void UpdateAlgorithmParameterStringValue(AlgorithmParameterStringValue instance);
+		partial void DeleteAlgorithmParameterStringValue(AlgorithmParameterStringValue instance);
+		partial void InsertProblemParameterBlobValue(ProblemParameterBlobValue instance);
+		partial void UpdateProblemParameterBlobValue(ProblemParameterBlobValue instance);
+		partial void DeleteProblemParameterBlobValue(ProblemParameterBlobValue instance);
+		partial void InsertProblemParameterBoolValue(ProblemParameterBoolValue instance);
+		partial void UpdateProblemParameterBoolValue(ProblemParameterBoolValue instance);
+		partial void DeleteProblemParameterBoolValue(ProblemParameterBoolValue instance);
+		partial void InsertProblemParameterFloatValue(ProblemParameterFloatValue instance);
+		partial void UpdateProblemParameterFloatValue(ProblemParameterFloatValue instance);
+		partial void DeleteProblemParameterFloatValue(ProblemParameterFloatValue instance);
+		partial void InsertProblemParameterIntValue(ProblemParameterIntValue instance);
+		partial void UpdateProblemParameterIntValue(ProblemParameterIntValue instance);
+		partial void DeleteProblemParameterIntValue(ProblemParameterIntValue instance);
+		partial void InsertProblemParameterStringValue(ProblemParameterStringValue instance);
+		partial void UpdateProblemParameterStringValue(ProblemParameterStringValue instance);
+		partial void DeleteProblemParameterStringValue(ProblemParameterStringValue instance);
+		partial void InsertResultBlobValue(ResultBlobValue instance);
+		partial void UpdateResultBlobValue(ResultBlobValue instance);
+		partial void DeleteResultBlobValue(ResultBlobValue instance);
+		partial void InsertResultBoolValue(ResultBoolValue instance);
+		partial void UpdateResultBoolValue(ResultBoolValue instance);
+		partial void DeleteResultBoolValue(ResultBoolValue instance);
+		partial void InsertResultFloatValue(ResultFloatValue instance);
+		partial void UpdateResultFloatValue(ResultFloatValue instance);
+		partial void DeleteResultFloatValue(ResultFloatValue instance);
+		partial void InsertResultIntValue(ResultIntValue instance);
+		partial void UpdateResultIntValue(ResultIntValue instance);
+		partial void DeleteResultIntValue(ResultIntValue instance);
+		partial void InsertResultStringValue(ResultStringValue instance);
+		partial void UpdateResultStringValue(ResultStringValue instance);
+		partial void DeleteResultStringValue(ResultStringValue instance);
+		#endregion
+		
+		#region Construction
+		public OKBDataContext() :
+			base(global::HeuristicLab.Services.OKB.DataAccess.Properties.Settings.Default.OKBConnectionString, mappingSource)
+		{
+			OnCreated();
+		}
+	
+		public OKBDataContext(string connection) :
+			base(connection, mappingSource)
+		{
+			OnCreated();
+		}
+		
+		public OKBDataContext(System.Data.IDbConnection connection) :
+			base(connection, mappingSource)
+		{
+			OnCreated();
+		}
+		
+		public OKBDataContext(string connection, MappingSource mappingSource) :
+			base(connection, mappingSource)
+		{
+			OnCreated();
+		}
+		
+		public OKBDataContext(System.Data.IDbConnection connection, MappingSource mappingSource) :
+			base(connection, mappingSource)
+		{
+			OnCreated();
+		}
+		#endregion
+		
+		#region Tables
+		public Table<AlgorithmClass> AlgorithmClasses
+		{
+			get { return GetTable<AlgorithmClass>(); }
+		}
+		
+		public Table<Algorithm> Algorithms
+		{
+			get { return GetTable<Algorithm>(); }
+		}
+		
+		public Table<Problem> Problems
+		{
+			get { return GetTable<Problem>(); }
+		}
+		
+		public Table<ProblemClass> ProblemClasses
+		{
+			get { return GetTable<ProblemClass>(); }
+		}
+		
+		public Table<Experiment> Experiments
+		{
+			get { return GetTable<Experiment>(); }
+		}
+		
+		public Table<AlgorithmParameter> AlgorithmParameters
+		{
+			get { return GetTable<AlgorithmParameter>(); }
+		}
+		
+		public Table<ProblemParameter> ProblemParameters
+		{
+			get { return GetTable<ProblemParameter>(); }
+		}
+		
+		public Table<AlgorithmData> AlgorithmDatas
+		{
+			get { return GetTable<AlgorithmData>(); }
+		}
+		
+		public Table<User> Users
+		{
+			get { return GetTable<User>(); }
+		}
+		
+		public Table<ProblemData> ProblemDatas
+		{
+			get { return GetTable<ProblemData>(); }
+		}
+		
+		public Table<AlgorithmUser> AlgorithmUsers
+		{
+			get { return GetTable<AlgorithmUser>(); }
+		}
+		
+		public Table<ProblemUser> ProblemUsers
+		{
+			get { return GetTable<ProblemUser>(); }
+		}
+		
+		public Table<Platform> Platforms
+		{
+			get { return GetTable<Platform>(); }
+		}
+		
+		public Table<Run> Runs
+		{
+			get { return GetTable<Run>(); }
+		}
+		
+		public Table<Result> Results
+		{
+			get { return GetTable<Result>(); }
+		}
+		
+		public Table<Client> Clients
+		{
+			get { return GetTable<Client>(); }
+		}
+		
+		public Table<AlgorithmParameterBlobValue> AlgorithmParameterBlobValues
+		{
+			get { return GetTable<AlgorithmParameterBlobValue>(); }
+		}
+		
+		public Table<DataType> DataTypes
+		{
+			get { return GetTable<DataType>(); }
+		}
+		
+		public Table<AlgorithmParameterBoolValue> AlgorithmParameterBoolValues
+		{
+			get { return GetTable<AlgorithmParameterBoolValue>(); }
+		}
+		
+		public Table<AlgorithmParameterFloatValue> AlgorithmParameterFloatValues
+		{
+			get { return GetTable<AlgorithmParameterFloatValue>(); }
+		}
+		
+		public Table<AlgorithmParameterIntValue> AlgorithmParameterIntValues
+		{
+			get { return GetTable<AlgorithmParameterIntValue>(); }
+		}
+		
+		public Table<AlgorithmParameterStringValue> AlgorithmParameterStringValues
+		{
+			get { return GetTable<AlgorithmParameterStringValue>(); }
+		}
+		
+		public Table<ProblemParameterBlobValue> ProblemParameterBlobValues
+		{
+			get { return GetTable<ProblemParameterBlobValue>(); }
+		}
+		
+		public Table<ProblemParameterBoolValue> ProblemParameterBoolValues
+		{
+			get { return GetTable<ProblemParameterBoolValue>(); }
+		}
+		
+		public Table<ProblemParameterFloatValue> ProblemParameterFloatValues
+		{
+			get { return GetTable<ProblemParameterFloatValue>(); }
+		}
+		
+		public Table<ProblemParameterIntValue> ProblemParameterIntValues
+		{
+			get { return GetTable<ProblemParameterIntValue>(); }
+		}
+		
+		public Table<ProblemParameterStringValue> ProblemParameterStringValues
+		{
+			get { return GetTable<ProblemParameterStringValue>(); }
+		}
+		
+		public Table<ResultBlobValue> ResultBlobValues
+		{
+			get { return GetTable<ResultBlobValue>(); }
+		}
+		
+		public Table<ResultBoolValue> ResultBoolValues
+		{
+			get { return GetTable<ResultBoolValue>(); }
+		}
+		
+		public Table<ResultFloatValue> ResultFloatValues
+		{
+			get { return GetTable<ResultFloatValue>(); }
+		}
+		
+		public Table<ResultIntValue> ResultIntValues
+		{
+			get { return GetTable<ResultIntValue>(); }
+		}
+		
+		public Table<ResultStringValue> ResultStringValues
+		{
+			get { return GetTable<ResultStringValue>(); }
+		}
+		
+		#endregion
+	}
+}
+
+namespace HeuristicLab.Services.OKB.DataAccess
+{	
+	[DataContract(IsReference=true)]
+	[Table(Name=@"dbo.AlgorithmClass")]
+[KnownType(typeof(AlgorithmClass))]	public partial class AlgorithmClass : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		#region Property Change Event Handling
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		public virtual void SendPropertyChanging()
+		{
+			if (PropertyChanging != null) {
+				PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+			
+		public virtual void SendPropertyChanged(String propertyName)
+		{
+			if (PropertyChanged != null) {
+				PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+		#endregion
+		
+		#region Extensibility Method Definitions
+		partial void OnLoaded();
+		partial void OnValidate(ChangeAction action);
+		partial void OnCreated();
+		#endregion
+
+		#region Construction
+		public AlgorithmClass()
+		{
+			Initialize();
+		}
+		
+		private void Initialize()
+		{
+			_Algorithms = new EntitySet<Algorithm>(attach_Algorithms, detach_Algorithms);
+			OnCreated();
+		}
+		#endregion
+
+		#region Column Mappings
+		partial void OnIdChanging(long value);
+		partial void OnIdChanged();
+		private long _Id;
+		[Column(Storage=@"_Id", AutoSync=AutoSync.OnInsert, DbType=@"BigInt NOT NULL IDENTITY", IsPrimaryKey=true, IsDbGenerated=true, UpdateCheck=UpdateCheck.Never)]
+		[DataMember(Order=1)]
+		public long Id
+		{
+			get { return _Id; }
+			set {
+				if (_Id != value) {
+					OnIdChanging(value);
+					SendPropertyChanging();
+					_Id = value;
+					SendPropertyChanged("Id");
+					OnIdChanged();
+				}
+			}
+		}
+		
+		partial void OnNameChanging(string value);
+		partial void OnNameChanged();
+		private string _Name;
+		[Column(Storage=@"_Name", DbType=@"NVarChar(200) NOT NULL", CanBeNull=false)]
+		[DataMember(Order=2)]
+		public string Name
+		{
+			get { return _Name; }
+			set {
+				if (_Name != value) {
+					OnNameChanging(value);
+					SendPropertyChanging();
+					_Name = value;
+					SendPropertyChanged("Name");
+					OnNameChanged();
+				}
+			}
+		}
+		
+		partial void OnDescriptionChanging(string value);
+		partial void OnDescriptionChanged();
+		private string _Description;
+		[Column(Storage=@"_Description", DbType=@"NVarChar(MAX)")]
+		[DataMember(Order=3)]
+		public string Description
+		{
+			get { return _Description; }
+			set {
+				if (_Description != value) {
+					OnDescriptionChanging(value);
+					SendPropertyChanging();
+					_Description = value;
+					SendPropertyChanged("Description");
+					OnDescriptionChanged();
+				}
+			}
+		}
+		
+		#endregion
+		
+		#region Associations
+		private EntitySet<Algorithm> _Algorithms;
+		[Association(Name=@"AlgorithmClass_Algorithm", Storage=@"_Algorithms", ThisKey=@"Id", OtherKey=@"AlgorithmClassId")]
+		[DataMember(Order=4, EmitDefaultValue=false)]
+		public EntitySet<Algorithm> Algorithms
+		{
+			get {
+				if (serializing && !_Algorithms.HasLoadedOrAssignedValues) {
+					return null;
+				}
+				return _Algorithms;
+			}
+			set {
+				_Algorithms.Assign(value);
+			}
+		}
+
+		private void attach_Algorithms(Algorithm entity)
+		{
+			SendPropertyChanging();
+			entity.AlgorithmClass = this;
+		}
+		
+		private void detach_Algorithms(Algorithm entity)
+		{
+			SendPropertyChanging();
+			entity.AlgorithmClass = null;
+		}
+		#endregion
+		
+		#region Serialization
+		private bool serializing;
+		
+		[OnSerializing()]
+		[EditorBrowsableAttribute(EditorBrowsableState.Never)]
+		public void OnSerializing(StreamingContext context)
+		{
+			serializing = true;
+		}
+		
+		[OnSerialized()]
+		[EditorBrowsableAttribute(EditorBrowsableState.Never)]
+		public void OnSerialized(StreamingContext context)
+		{
+			serializing = false;
+		}
+		
+		[OnDeserializing()]
+		[EditorBrowsableAttribute(EditorBrowsableState.Never)]
+		public  void OnDeserializing(StreamingContext context)
+		{
+			Initialize();
+		}
+		#endregion
+	}
+}
+
+namespace HeuristicLab.Services.OKB.DataAccess
+{	
+	[DataContract(IsReference=true)]
+	[Table(Name=@"dbo.Algorithm")]
+[KnownType(typeof(Algorithm))]	public partial class Algorithm : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		#region Property Change Event Handling
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		public virtual void SendPropertyChanging()
+		{
+			if (PropertyChanging != null) {
+				PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+			
+		public virtual void SendPropertyChanged(String propertyName)
+		{
+			if (PropertyChanged != null) {
+				PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+		#endregion
+		
+		#region Extensibility Method Definitions
+		partial void OnLoaded();
+		partial void OnValidate(ChangeAction action);
+		partial void OnCreated();
+		#endregion
+
+		#region Construction
+		public Algorithm()
+		{
+			Initialize();
+		}
+		
+		private void Initialize()
+		{
+			_Experiments = new EntitySet<Experiment>(attach_Experiments, detach_Experiments);
+			_AlgorithmParameters = new EntitySet<AlgorithmParameter>(attach_AlgorithmParameters, detach_AlgorithmParameters);
+			_AlgorithmData = default(EntityRef<AlgorithmData>);
+			_AlgorithmUsers = new EntitySet<AlgorithmUser>(attach_AlgorithmUsers, detach_AlgorithmUsers);
+			_Results = new EntitySet<Result>(attach_Results, detach_Results);
+			_AlgorithmClass = default(EntityRef<AlgorithmClass>);
+			_Platform = default(EntityRef<Platform>);
+			OnCreated();
+		}
+		#endregion
+
+		#region Column Mappings
+		partial void OnIdChanging(long value);
+		partial void OnIdChanged();
+		private long _Id;
+		[Column(Storage=@"_Id", AutoSync=AutoSync.OnInsert, DbType=@"BigInt NOT NULL IDENTITY", IsPrimaryKey=true, IsDbGenerated=true, UpdateCheck=UpdateCheck.Never)]
+		[DataMember(Order=1)]
+		public long Id
+		{
+			get { return _Id; }
+			set {
+				if (_Id != value) {
+					OnIdChanging(value);
+					SendPropertyChanging();
+					_Id = value;
+					SendPropertyChanged("Id");
+					OnIdChanged();
+				}
+			}
+		}
+		
+		partial void OnAlgorithmClassIdChanging(long value);
+		partial void OnAlgorithmClassIdChanged();
+		private long _AlgorithmClassId;
+		[Column(Storage=@"_AlgorithmClassId", DbType=@"BigInt NOT NULL", CanBeNull=false)]
+		[DataMember(Order=2)]
+		public long AlgorithmClassId
+		{
+			get { return _AlgorithmClassId; }
+			set {
+				if (_AlgorithmClassId != value) {
+					if (_AlgorithmClass.HasLoadedOrAssignedValue) {
+						throw new ForeignKeyReferenceAlreadyHasValueException();
+					}
+					OnAlgorithmClassIdChanging(value);
+					SendPropertyChanging();
+					_AlgorithmClassId = value;
+					SendPropertyChanged("AlgorithmClassId");
+					OnAlgorithmClassIdChanged();
+				}
+			}
+		}
+		
+		partial void OnPlatformIdChanging(long value);
+		partial void OnPlatformIdChanged();
+		private long _PlatformId;
+		[Column(Storage=@"_PlatformId", DbType=@"BigInt NOT NULL", CanBeNull=false)]
+		[DataMember(Order=3)]
+		public long PlatformId
+		{
+			get { return _PlatformId; }
+			set {
+				if (_PlatformId != value) {
+					if (_Platform.HasLoadedOrAssignedValue) {
+						throw new ForeignKeyReferenceAlreadyHasValueException();
+					}
+					OnPlatformIdChanging(value);
+					SendPropertyChanging();
+					_PlatformId = value;
+					SendPropertyChanged("PlatformId");
+					OnPlatformIdChanged();
+				}
+			}
+		}
+		
+		partial void OnNameChanging(string value);
+		partial void OnNameChanged();
+		private string _Name;
+		[Column(Storage=@"_Name", DbType=@"NVarChar(200) NOT NULL", CanBeNull=false)]
+		[DataMember(Order=4)]
+		public string Name
+		{
+			get { return _Name; }
+			set {
+				if (_Name != value) {
+					OnNameChanging(value);
+					SendPropertyChanging();
+					_Name = value;
+					SendPropertyChanged("Name");
+					OnNameChanged();
+				}
+			}
+		}
+		
+		partial void OnDescriptionChanging(string value);
+		partial void OnDescriptionChanged();
+		private string _Description;
+		[Column(Storage=@"_Description", DbType=@"NVarChar(MAX)")]
+		[DataMember(Order=5)]
+		public string Description
+		{
+			get { return _Description; }
+			set {
+				if (_Description != value) {
+					OnDescriptionChanging(value);
+					SendPropertyChanging();
+					_Description = value;
+					SendPropertyChanged("Description");
+					OnDescriptionChanged();
+				}
+			}
+		}
+		
+		#endregion
+		
+		#region Associations
+		private EntitySet<Experiment> _Experiments;
+		[Association(Name=@"Algorithm_Experiment", Storage=@"_Experiments", ThisKey=@"Id", OtherKey=@"AlgorithmId")]
+		[DataMember(Order=6, EmitDefaultValue=false)]
+		public EntitySet<Experiment> Experiments
+		{
+			get {
+				if (serializing && !_Experiments.HasLoadedOrAssignedValues) {
+					return null;
+				}
+				return _Experiments;
+			}
+			set {
+				_Experiments.Assign(value);
+			}
+		}
+
+		private void attach_Experiments(Experiment entity)
+		{
+			SendPropertyChanging();
+			entity.Algorithm = this;
+		}
+		
+		private void detach_Experiments(Experiment entity)
+		{
+			SendPropertyChanging();
+			entity.Algorithm = null;
+		}
+		private EntitySet<AlgorithmParameter> _AlgorithmParameters;
+		[Association(Name=@"Algorithm_AlgorithmParameter", Storage=@"_AlgorithmParameters", ThisKey=@"Id", OtherKey=@"AlgorithmId")]
+		[DataMember(Order=7, EmitDefaultValue=false)]
+		public EntitySet<AlgorithmParameter> AlgorithmParameters
+		{
+			get {
+				if (serializing && !_AlgorithmParameters.HasLoadedOrAssignedValues) {
+					return null;
+				}
+				return _AlgorithmParameters;
+			}
+			set {
+				_AlgorithmParameters.Assign(value);
+			}
+		}
+
+		private void attach_AlgorithmParameters(AlgorithmParameter entity)
+		{
+			SendPropertyChanging();
+			entity.Algorithm = this;
+		}
+		
+		private void detach_AlgorithmParameters(AlgorithmParameter entity)
+		{
+			SendPropertyChanging();
+			entity.Algorithm = null;
+		}
+		private EntityRef<AlgorithmData> _AlgorithmData;
+		[Association(Name=@"Algorithm_AlgorithmData", Storage=@"_AlgorithmData", ThisKey=@"Id", OtherKey=@"AlgorithmId", IsUnique=true, IsForeignKey=false)]
+		[DataMember(Order=8, EmitDefaultValue=false)]
+		public AlgorithmData AlgorithmData
+		{
+			get {
+				if (serializing && !_AlgorithmData.HasLoadedOrAssignedValue) {
+					return null;
+				}
+				return _AlgorithmData.Entity;
+			}
+			set {
+				AlgorithmData previousValue = _AlgorithmData.Entity;
+				if ((previousValue != value) || (!_AlgorithmData.HasLoadedOrAssignedValue)) {
+					SendPropertyChanging();
+					if (previousValue != null) {
+						_AlgorithmData.Entity = null;
+						previousValue.Algorithm = null;
+					}
+					_AlgorithmData.Entity = value;
+					if (value != null) {
+						value.Algorithm = this;
+					}
+					SendPropertyChanged("AlgorithmData");
+				}
+			}
+		}
+
+		private EntitySet<AlgorithmUser> _AlgorithmUsers;
+		[Association(Name=@"Algorithm_AlgorithmUser", Storage=@"_AlgorithmUsers", ThisKey=@"Id", OtherKey=@"AlgorithmId")]
+		[DataMember(Order=9, EmitDefaultValue=false)]
+		public EntitySet<AlgorithmUser> AlgorithmUsers
+		{
+			get {
+				if (serializing && !_AlgorithmUsers.HasLoadedOrAssignedValues) {
+					return null;
+				}
+				return _AlgorithmUsers;
+			}
+			set {
+				_AlgorithmUsers.Assign(value);
+			}
+		}
+
+		private void attach_AlgorithmUsers(AlgorithmUser entity)
+		{
+			SendPropertyChanging();
+			entity.Algorithm = this;
+		}
+		
+		private void detach_AlgorithmUsers(AlgorithmUser entity)
+		{
+			SendPropertyChanging();
+			entity.Algorithm = null;
+		}
+		private EntitySet<Result> _Results;
+		[Association(Name=@"Algorithm_Result", Storage=@"_Results", ThisKey=@"Id", OtherKey=@"AlgorithmId")]
+		[DataMember(Order=10, EmitDefaultValue=false)]
+		public EntitySet<Result> Results
+		{
+			get {
+				if (serializing && !_Results.HasLoadedOrAssignedValues) {
+					return null;
+				}
+				return _Results;
+			}
+			set {
+				_Results.Assign(value);
+			}
+		}
+
+		private void attach_Results(Result entity)
+		{
+			SendPropertyChanging();
+			entity.Algorithm = this;
+		}
+		
+		private void detach_Results(Result entity)
+		{
+			SendPropertyChanging();
+			entity.Algorithm = null;
+		}
+		private EntityRef<AlgorithmClass> _AlgorithmClass;
+		[Association(Name=@"AlgorithmClass_Algorithm", Storage=@"_AlgorithmClass", ThisKey=@"AlgorithmClassId", OtherKey=@"Id", IsForeignKey=true)]
+		[DataMember(Order=11, EmitDefaultValue=false)]
+		public AlgorithmClass AlgorithmClass
+		{
+			get {
+				if (serializing && !_AlgorithmClass.HasLoadedOrAssignedValue) {
+					return null;
+				}
+				return _AlgorithmClass.Entity;
+			}
+			set {
+				AlgorithmClass previousValue = _AlgorithmClass.Entity;
+				if ((previousValue != value) || (!_AlgorithmClass.HasLoadedOrAssignedValue)) {
+					SendPropertyChanging();
+					if (previousValue != null) {
+						_AlgorithmClass.Entity = null;
+						previousValue.Algorithms.Remove(this);
+					}
+					_AlgorithmClass.Entity = value;
+					if (value != null) {
+						value.Algorithms.Add(this);
+						_AlgorithmClassId = value.Id;
+					}
+					else {
+						_AlgorithmClassId = default(long);
+					}
+					SendPropertyChanged("AlgorithmClass");
+				}
+			}
+		}
+
+		private EntityRef<Platform> _Platform;
+		[Association(Name=@"Platform_Algorithm", Storage=@"_Platform", ThisKey=@"PlatformId", OtherKey=@"Id", IsForeignKey=true)]
+		[DataMember(Order=12, EmitDefaultValue=false)]
+		public Platform Platform
+		{
+			get {
+				if (serializing && !_Platform.HasLoadedOrAssignedValue) {
+					return null;
+				}
+				return _Platform.Entity;
+			}
+			set {
+				Platform previousValue = _Platform.Entity;
+				if ((previousValue != value) || (!_Platform.HasLoadedOrAssignedValue)) {
+					SendPropertyChanging();
+					if (previousValue != null) {
+						_Platform.Entity = null;
+						previousValue.Algorithms.Remove(this);
+					}
+					_Platform.Entity = value;
+					if (value != null) {
+						value.Algorithms.Add(this);
+						_PlatformId = value.Id;
+					}
+					else {
+						_PlatformId = default(long);
+					}
+					SendPropertyChanged("Platform");
+				}
+			}
+		}
+
+		#endregion
+		
+		#region Serialization
+		private bool serializing;
+		
+		[OnSerializing()]
+		[EditorBrowsableAttribute(EditorBrowsableState.Never)]
+		public void OnSerializing(StreamingContext context)
+		{
+			serializing = true;
+		}
+		
+		[OnSerialized()]
+		[EditorBrowsableAttribute(EditorBrowsableState.Never)]
+		public void OnSerialized(StreamingContext context)
+		{
+			serializing = false;
+		}
+		
+		[OnDeserializing()]
+		[EditorBrowsableAttribute(EditorBrowsableState.Never)]
+		public  void OnDeserializing(StreamingContext context)
+		{
+			Initialize();
+		}
+		#endregion
+	}
+}
+
+namespace HeuristicLab.Services.OKB.DataAccess
+{	
+	[DataContract(IsReference=true)]
+	[Table(Name=@"dbo.Problem")]
+[KnownType(typeof(Problem))]	public partial class Problem : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		#region Property Change Event Handling
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		public virtual void SendPropertyChanging()
+		{
+			if (PropertyChanging != null) {
+				PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+			
+		public virtual void SendPropertyChanged(String propertyName)
+		{
+			if (PropertyChanged != null) {
+				PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+		#endregion
+		
+		#region Extensibility Method Definitions
+		partial void OnLoaded();
+		partial void OnValidate(ChangeAction action);
+		partial void OnCreated();
+		#endregion
+
+		#region Construction
+		public Problem()
+		{
+			Initialize();
+		}
+		
+		private void Initialize()
+		{
+			_Experiments = new EntitySet<Experiment>(attach_Experiments, detach_Experiments);
+			_ProblemParameters = new EntitySet<ProblemParameter>(attach_ProblemParameters, detach_ProblemParameters);
+			_ProblemData = default(EntityRef<ProblemData>);
+			_ProblemUsers = new EntitySet<ProblemUser>(attach_ProblemUsers, detach_ProblemUsers);
+			_ProblemClass = default(EntityRef<ProblemClass>);
+			_Platform = default(EntityRef<Platform>);
+			OnCreated();
+		}
+		#endregion
+
+		#region Column Mappings
+		partial void OnIdChanging(long value);
+		partial void OnIdChanged();
+		private long _Id;
+		[Column(Storage=@"_Id", AutoSync=AutoSync.OnInsert, DbType=@"BigInt NOT NULL IDENTITY", IsPrimaryKey=true, IsDbGenerated=true, UpdateCheck=UpdateCheck.Never)]
+		[DataMember(Order=1)]
+		public long Id
+		{
+			get { return _Id; }
+			set {
+				if (_Id != value) {
+					OnIdChanging(value);
+					SendPropertyChanging();
+					_Id = value;
+					SendPropertyChanged("Id");
+					OnIdChanged();
+				}
+			}
+		}
+		
+		partial void OnProblemClassIdChanging(long value);
+		partial void OnProblemClassIdChanged();
+		private long _ProblemClassId;
+		[Column(Storage=@"_ProblemClassId", DbType=@"BigInt NOT NULL", CanBeNull=false)]
+		[DataMember(Order=2)]
+		public long ProblemClassId
+		{
+			get { return _ProblemClassId; }
+			set {
+				if (_ProblemClassId != value) {
+					if (_ProblemClass.HasLoadedOrAssignedValue) {
+						throw new ForeignKeyReferenceAlreadyHasValueException();
+					}
+					OnProblemClassIdChanging(value);
+					SendPropertyChanging();
+					_ProblemClassId = value;
+					SendPropertyChanged("ProblemClassId");
+					OnProblemClassIdChanged();
+				}
+			}
+		}
+		
+		partial void OnPlatformIdChanging(long value);
+		partial void OnPlatformIdChanged();
+		private long _PlatformId;
+		[Column(Storage=@"_PlatformId", DbType=@"BigInt NOT NULL", CanBeNull=false)]
+		[DataMember(Order=3)]
+		public long PlatformId
+		{
+			get { return _PlatformId; }
+			set {
+				if (_PlatformId != value) {
+					if (_Platform.HasLoadedOrAssignedValue) {
+						throw new ForeignKeyReferenceAlreadyHasValueException();
+					}
+					OnPlatformIdChanging(value);
+					SendPropertyChanging();
+					_PlatformId = value;
+					SendPropertyChanged("PlatformId");
+					OnPlatformIdChanged();
+				}
+			}
+		}
+		
+		partial void OnSolutionRepresentationIdChanging(long value);
+		partial void OnSolutionRepresentationIdChanged();
+		private long _SolutionRepresentationid;
+		[Column(Storage=@"_SolutionRepresentationid", DbType=@"BigInt NOT NULL", CanBeNull=false)]
+		[DataMember(Order=4)]
+		public long SolutionRepresentationId
+		{
+			get { return _SolutionRepresentationid; }
+			set {
+				if (_SolutionRepresentationid != value) {
+					OnSolutionRepresentationIdChanging(value);
+					SendPropertyChanging();
+					_SolutionRepresentationid = value;
+					SendPropertyChanged("SolutionRepresentationId");
+					OnSolutionRepresentationIdChanged();
+				}
+			}
+		}
+		
+		partial void OnNameChanging(string value);
+		partial void OnNameChanged();
+		private string _Name;
+		[Column(Storage=@"_Name", DbType=@"NVarChar(200) NOT NULL", CanBeNull=false)]
+		[DataMember(Order=5)]
+		public string Name
+		{
+			get { return _Name; }
+			set {
+				if (_Name != value) {
+					OnNameChanging(value);
+					SendPropertyChanging();
+					_Name = value;
+					SendPropertyChanged("Name");
+					OnNameChanged();
+				}
+			}
+		}
+		
+		partial void OnDescriptionChanging(string value);
+		partial void OnDescriptionChanged();
+		private string _Description;
+		[Column(Storage=@"_Description", DbType=@"NVarChar(MAX)")]
+		[DataMember(Order=6)]
+		public string Description
+		{
+			get { return _Description; }
+			set {
+				if (_Description != value) {
+					OnDescriptionChanging(value);
+					SendPropertyChanging();
+					_Description = value;
+					SendPropertyChanged("Description");
+					OnDescriptionChanged();
+				}
+			}
+		}
+		
+		#endregion
+		
+		#region Associations
+		private EntitySet<Experiment> _Experiments;
+		[Association(Name=@"Problem_Experiment", Storage=@"_Experiments", ThisKey=@"Id", OtherKey=@"ProblemId")]
+		[DataMember(Order=7, EmitDefaultValue=false)]
+		public EntitySet<Experiment> Experiments
+		{
+			get {
+				if (serializing && !_Experiments.HasLoadedOrAssignedValues) {
+					return null;
+				}
+				return _Experiments;
+			}
+			set {
+				_Experiments.Assign(value);
+			}
+		}
+
+		private void attach_Experiments(Experiment entity)
+		{
+			SendPropertyChanging();
+			entity.Problem = this;
+		}
+		
+		private void detach_Experiments(Experiment entity)
+		{
+			SendPropertyChanging();
+			entity.Problem = null;
+		}
+		private EntitySet<ProblemParameter> _ProblemParameters;
+		[Association(Name=@"Problem_ProblemParameter", Storage=@"_ProblemParameters", ThisKey=@"Id", OtherKey=@"ProblemId")]
+		[DataMember(Order=8, EmitDefaultValue=false)]
+		public EntitySet<ProblemParameter> ProblemParameters
+		{
+			get {
+				if (serializing && !_ProblemParameters.HasLoadedOrAssignedValues) {
+					return null;
+				}
+				return _ProblemParameters;
+			}
+			set {
+				_ProblemParameters.Assign(value);
+			}
+		}
+
+		private void attach_ProblemParameters(ProblemParameter entity)
+		{
+			SendPropertyChanging();
+			entity.Problem = this;
+		}
+		
+		private void detach_ProblemParameters(ProblemParameter entity)
+		{
+			SendPropertyChanging();
+			entity.Problem = null;
+		}
+		private EntityRef<ProblemData> _ProblemData;
+		[Association(Name=@"Problem_ProblemData", Storage=@"_ProblemData", ThisKey=@"Id", OtherKey=@"ProblemId", IsUnique=true, IsForeignKey=false)]
+		[DataMember(Order=9, EmitDefaultValue=false)]
+		public ProblemData ProblemData
+		{
+			get {
+				if (serializing && !_ProblemData.HasLoadedOrAssignedValue) {
+					return null;
+				}
+				return _ProblemData.Entity;
+			}
+			set {
+				ProblemData previousValue = _ProblemData.Entity;
+				if ((previousValue != value) || (!_ProblemData.HasLoadedOrAssignedValue)) {
+					SendPropertyChanging();
+					if (previousValue != null) {
+						_ProblemData.Entity = null;
+						previousValue.Problem = null;
+					}
+					_ProblemData.Entity = value;
+					if (value != null) {
+						value.Problem = this;
+					}
+					SendPropertyChanged("ProblemData");
+				}
+			}
+		}
+
+		private EntitySet<ProblemUser> _ProblemUsers;
+		[Association(Name=@"Problem_ProblemUser", Storage=@"_ProblemUsers", ThisKey=@"Id", OtherKey=@"ProblemId")]
+		[DataMember(Order=10, EmitDefaultValue=false)]
+		public EntitySet<ProblemUser> ProblemUsers
+		{
+			get {
+				if (serializing && !_ProblemUsers.HasLoadedOrAssignedValues) {
+					return null;
+				}
+				return _ProblemUsers;
+			}
+			set {
+				_ProblemUsers.Assign(value);
+			}
+		}
+
+		private void attach_ProblemUsers(ProblemUser entity)
+		{
+			SendPropertyChanging();
+			entity.Problem = this;
+		}
+		
+		private void detach_ProblemUsers(ProblemUser entity)
+		{
+			SendPropertyChanging();
+			entity.Problem = null;
+		}
+		private EntityRef<ProblemClass> _ProblemClass;
+		[Association(Name=@"ProblemClass_Problem", Storage=@"_ProblemClass", ThisKey=@"ProblemClassId", OtherKey=@"Id", IsForeignKey=true)]
+		[DataMember(Order=11, EmitDefaultValue=false)]
+		public ProblemClass ProblemClass
+		{
+			get {
+				if (serializing && !_ProblemClass.HasLoadedOrAssignedValue) {
+					return null;
+				}
+				return _ProblemClass.Entity;
+			}
+			set {
+				ProblemClass previousValue = _ProblemClass.Entity;
+				if ((previousValue != value) || (!_ProblemClass.HasLoadedOrAssignedValue)) {
+					SendPropertyChanging();
+					if (previousValue != null) {
+						_ProblemClass.Entity = null;
+						previousValue.Problems.Remove(this);
+					}
+					_ProblemClass.Entity = value;
+					if (value != null) {
+						value.Problems.Add(this);
+						_ProblemClassId = value.Id;
+					}
+					else {
+						_ProblemClassId = default(long);
+					}
+					SendPropertyChanged("ProblemClass");
+				}
+			}
+		}
+
+		private EntityRef<Platform> _Platform;
+		[Association(Name=@"Platform_Problem", Storage=@"_Platform", ThisKey=@"PlatformId", OtherKey=@"Id", IsForeignKey=true)]
+		[DataMember(Order=12, EmitDefaultValue=false)]
+		public Platform Platform
+		{
+			get {
+				if (serializing && !_Platform.HasLoadedOrAssignedValue) {
+					return null;
+				}
+				return _Platform.Entity;
+			}
+			set {
+				Platform previousValue = _Platform.Entity;
+				if ((previousValue != value) || (!_Platform.HasLoadedOrAssignedValue)) {
+					SendPropertyChanging();
+					if (previousValue != null) {
+						_Platform.Entity = null;
+						previousValue.Problems.Remove(this);
+					}
+					_Platform.Entity = value;
+					if (value != null) {
+						value.Problems.Add(this);
+						_PlatformId = value.Id;
+					}
+					else {
+						_PlatformId = default(long);
+					}
+					SendPropertyChanged("Platform");
+				}
+			}
+		}
+
+		#endregion
+		
+		#region Serialization
+		private bool serializing;
+		
+		[OnSerializing()]
+		[EditorBrowsableAttribute(EditorBrowsableState.Never)]
+		public void OnSerializing(StreamingContext context)
+		{
+			serializing = true;
+		}
+		
+		[OnSerialized()]
+		[EditorBrowsableAttribute(EditorBrowsableState.Never)]
+		public void OnSerialized(StreamingContext context)
+		{
+			serializing = false;
+		}
+		
+		[OnDeserializing()]
+		[EditorBrowsableAttribute(EditorBrowsableState.Never)]
+		public  void OnDeserializing(StreamingContext context)
+		{
+			Initialize();
+		}
+		#endregion
+	}
+}
+
+namespace HeuristicLab.Services.OKB.DataAccess
+{	
+	[DataContract(IsReference=true)]
+	[Table(Name=@"dbo.ProblemClass")]
+[KnownType(typeof(ProblemClass))]	public partial class ProblemClass : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		#region Property Change Event Handling
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		public virtual void SendPropertyChanging()
+		{
+			if (PropertyChanging != null) {
+				PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+			
+		public virtual void SendPropertyChanged(String propertyName)
+		{
+			if (PropertyChanged != null) {
+				PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+		#endregion
+		
+		#region Extensibility Method Definitions
+		partial void OnLoaded();
+		partial void OnValidate(ChangeAction action);
+		partial void OnCreated();
+		#endregion
+
+		#region Construction
+		public ProblemClass()
+		{
+			Initialize();
+		}
+		
+		private void Initialize()
+		{
+			_Problems = new EntitySet<Problem>(attach_Problems, detach_Problems);
+			OnCreated();
+		}
+		#endregion
+
+		#region Column Mappings
+		partial void OnIdChanging(long value);
+		partial void OnIdChanged();
+		private long _Id;
+		[Column(Storage=@"_Id", AutoSync=AutoSync.OnInsert, DbType=@"BigInt NOT NULL IDENTITY", IsPrimaryKey=true, IsDbGenerated=true, UpdateCheck=UpdateCheck.Never)]
+		[DataMember(Order=1)]
+		public long Id
+		{
+			get { return _Id; }
+			set {
+				if (_Id != value) {
+					OnIdChanging(value);
+					SendPropertyChanging();
+					_Id = value;
+					SendPropertyChanged("Id");
+					OnIdChanged();
+				}
+			}
+		}
+		
+		partial void OnNameChanging(string value);
+		partial void OnNameChanged();
+		private string _Name;
+		[Column(Storage=@"_Name", DbType=@"NVarChar(200) NOT NULL", CanBeNull=false)]
+		[DataMember(Order=2)]
+		public string Name
+		{
+			get { return _Name; }
+			set {
+				if (_Name != value) {
+					OnNameChanging(value);
+					SendPropertyChanging();
+					_Name = value;
+					SendPropertyChanged("Name");
+					OnNameChanged();
+				}
+			}
+		}
+		
+		partial void OnDescriptionChanging(string value);
+		partial void OnDescriptionChanged();
+		private string _Description;
+		[Column(Storage=@"_Description", DbType=@"NVarChar(MAX)")]
+		[DataMember(Order=3)]
+		public string Description
+		{
+			get { return _Description; }
+			set {
+				if (_Description != value) {
+					OnDescriptionChanging(value);
+					SendPropertyChanging();
+					_Description = value;
+					SendPropertyChanged("Description");
+					OnDescriptionChanged();
+				}
+			}
+		}
+		
+		#endregion
+		
+		#region Associations
+		private EntitySet<Problem> _Problems;
+		[Association(Name=@"ProblemClass_Problem", Storage=@"_Problems", ThisKey=@"Id", OtherKey=@"ProblemClassId")]
+		[DataMember(Order=4, EmitDefaultValue=false)]
+		public EntitySet<Problem> Problems
+		{
+			get {
+				if (serializing && !_Problems.HasLoadedOrAssignedValues) {
+					return null;
+				}
+				return _Problems;
+			}
+			set {
+				_Problems.Assign(value);
+			}
+		}
+
+		private void attach_Problems(Problem entity)
+		{
+			SendPropertyChanging();
+			entity.ProblemClass = this;
+		}
+		
+		private void detach_Problems(Problem entity)
+		{
+			SendPropertyChanging();
+			entity.ProblemClass = null;
+		}
+		#endregion
+		
+		#region Serialization
+		private bool serializing;
+		
+		[OnSerializing()]
+		[EditorBrowsableAttribute(EditorBrowsableState.Never)]
+		public void OnSerializing(StreamingContext context)
+		{
+			serializing = true;
+		}
+		
+		[OnSerialized()]
+		[EditorBrowsableAttribute(EditorBrowsableState.Never)]
+		public void OnSerialized(StreamingContext context)
+		{
+			serializing = false;
+		}
+		
+		[OnDeserializing()]
+		[EditorBrowsableAttribute(EditorBrowsableState.Never)]
+		public  void OnDeserializing(StreamingContext context)
+		{
+			Initialize();
+		}
+		#endregion
+	}
+}
+
+namespace HeuristicLab.Services.OKB.DataAccess
+{	
+	[DataContract(IsReference=true)]
+	[Table(Name=@"dbo.Experiment")]
+[KnownType(typeof(Experiment))]	public partial class Experiment : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		#region Property Change Event Handling
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		public virtual void SendPropertyChanging()
+		{
+			if (PropertyChanging != null) {
+				PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+			
+		public virtual void SendPropertyChanged(String propertyName)
+		{
+			if (PropertyChanged != null) {
+				PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+		#endregion
+		
+		#region Extensibility Method Definitions
+		partial void OnLoaded();
+		partial void OnValidate(ChangeAction action);
+		partial void OnCreated();
+		#endregion
+
+		#region Construction
+		public Experiment()
+		{
+			Initialize();
+		}
+		
+		private void Initialize()
+		{
+			_Runs = new EntitySet<Run>(attach_Runs, detach_Runs);
+			_AlgorithmParameterBlobValues = new EntitySet<AlgorithmParameterBlobValue>(attach_AlgorithmParameterBlobValues, detach_AlgorithmParameterBlobValues);
+			_AlgorithmParameterBoolValues = new EntitySet<AlgorithmParameterBoolValue>(attach_AlgorithmParameterBoolValues, detach_AlgorithmParameterBoolValues);
+			_AlgorithmParameterFloatValues = new EntitySet<AlgorithmParameterFloatValue>(attach_AlgorithmParameterFloatValues, detach_AlgorithmParameterFloatValues);
+			_AlgorithmParameterIntValues = new EntitySet<AlgorithmParameterIntValue>(attach_AlgorithmParameterIntValues, detach_AlgorithmParameterIntValues);
+			_AlgorithmParameterStringValues = new EntitySet<AlgorithmParameterStringValue>(attach_AlgorithmParameterStringValues, detach_AlgorithmParameterStringValues);
+			_ProblemParameterBlobValues = new EntitySet<ProblemParameterBlobValue>(attach_ProblemParameterBlobValues, detach_ProblemParameterBlobValues);
+			_ProblemParameterBoolValues = new EntitySet<ProblemParameterBoolValue>(attach_ProblemParameterBoolValues, detach_ProblemParameterBoolValues);
+			_ProblemParameterFloatValues = new EntitySet<ProblemParameterFloatValue>(attach_ProblemParameterFloatValues, detach_ProblemParameterFloatValues);
+			_ProblemParameterIntValues = new EntitySet<ProblemParameterIntValue>(attach_ProblemParameterIntValues, detach_ProblemParameterIntValues);
+			_ProblemParameterStringValues = new EntitySet<ProblemParameterStringValue>(attach_ProblemParameterStringValues, detach_ProblemParameterStringValues);
+			_Problem = default(EntityRef<Problem>);
+			_Algorithm = default(EntityRef<Algorithm>);
+			OnCreated();
+		}
+		#endregion
+
+		#region Column Mappings
+		partial void OnIdChanging(long value);
+		partial void OnIdChanged();
+		private long _Id;
+		[Column(Storage=@"_Id", AutoSync=AutoSync.OnInsert, DbType=@"BigInt NOT NULL IDENTITY", IsPrimaryKey=true, IsDbGenerated=true, UpdateCheck=UpdateCheck.Never)]
+		[DataMember(Order=1)]
+		public long Id
+		{
+			get { return _Id; }
+			set {
+				if (_Id != value) {
+					OnIdChanging(value);
+					SendPropertyChanging();
+					_Id = value;
+					SendPropertyChanged("Id");
+					OnIdChanged();
+				}
+			}
+		}
+		
+		partial void OnAlgorithmIdChanging(long value);
+		partial void OnAlgorithmIdChanged();
+		private long _AlgorithmId;
+		[Column(Storage=@"_AlgorithmId", DbType=@"BigInt NOT NULL", CanBeNull=false)]
+		[DataMember(Order=2)]
+		public long AlgorithmId
+		{
+			get { return _AlgorithmId; }
+			set {
+				if (_AlgorithmId != value) {
+					if (_Algorithm.HasLoadedOrAssignedValue) {
+						throw new ForeignKeyReferenceAlreadyHasValueException();
+					}
+					OnAlgorithmIdChanging(value);
+					SendPropertyChanging();
+					_AlgorithmId = value;
+					SendPropertyChanged("AlgorithmId");
+					OnAlgorithmIdChanged();
+				}
+			}
+		}
+		
+		partial void OnProblemIdChanging(long value);
+		partial void OnProblemIdChanged();
+		private long _ProblemId;
+		[Column(Storage=@"_ProblemId", DbType=@"BigInt NOT NULL", CanBeNull=false)]
+		[DataMember(Order=3)]
+		public long ProblemId
+		{
+			get { return _ProblemId; }
+			set {
+				if (_ProblemId != value) {
+					if (_Problem.HasLoadedOrAssignedValue) {
+						throw new ForeignKeyReferenceAlreadyHasValueException();
+					}
+					OnProblemIdChanging(value);
+					SendPropertyChanging();
+					_ProblemId = value;
+					SendPropertyChanged("ProblemId");
+					OnProblemIdChanged();
+				}
+			}
+		}
+		
+		#endregion
+		
+		#region Associations
+		private EntitySet<Run> _Runs;
+		[Association(Name=@"Experiment_Run", Storage=@"_Runs", ThisKey=@"Id", OtherKey=@"ExperimentId")]
+		[DataMember(Order=4, EmitDefaultValue=false)]
+		public EntitySet<Run> Runs
+		{
+			get {
+				if (serializing && !_Runs.HasLoadedOrAssignedValues) {
+					return null;
+				}
+				return _Runs;
+			}
+			set {
+				_Runs.Assign(value);
+			}
+		}
+
+		private void attach_Runs(Run entity)
+		{
+			SendPropertyChanging();
+			entity.Experiment = this;
+		}
+		
+		private void detach_Runs(Run entity)
+		{
+			SendPropertyChanging();
+			entity.Experiment = null;
+		}
+		private EntitySet<AlgorithmParameterBlobValue> _AlgorithmParameterBlobValues;
+		[Association(Name=@"Experiment_AlgorithmParameterBlobValue", Storage=@"_AlgorithmParameterBlobValues", ThisKey=@"Id", OtherKey=@"ExperimentId")]
+		[DataMember(Order=5, EmitDefaultValue=false)]
+		public EntitySet<AlgorithmParameterBlobValue> AlgorithmParameterBlobValues
+		{
+			get {
+				if (serializing && !_AlgorithmParameterBlobValues.HasLoadedOrAssignedValues) {
+					return null;
+				}
+				return _AlgorithmParameterBlobValues;
+			}
+			set {
+				_AlgorithmParameterBlobValues.Assign(value);
+			}
+		}
+
+		private void attach_AlgorithmParameterBlobValues(AlgorithmParameterBlobValue entity)
+		{
+			SendPropertyChanging();
+			entity.Experiment = this;
+		}
+		
+		private void detach_AlgorithmParameterBlobValues(AlgorithmParameterBlobValue entity)
+		{
+			SendPropertyChanging();
+			entity.Experiment = null;
+		}
+		private EntitySet<AlgorithmParameterBoolValue> _AlgorithmParameterBoolValues;
+		[Association(Name=@"Experiment_AlgorithmParameterBoolValue", Storage=@"_AlgorithmParameterBoolValues", ThisKey=@"Id", OtherKey=@"ExperimentId")]
+		[DataMember(Order=6, EmitDefaultValue=false)]
+		public EntitySet<AlgorithmParameterBoolValue> AlgorithmParameterBoolValues
+		{
+			get {
+				if (serializing && !_AlgorithmParameterBoolValues.HasLoadedOrAssignedValues) {
+					return null;
+				}
+				return _AlgorithmParameterBoolValues;
+			}
+			set {
+				_AlgorithmParameterBoolValues.Assign(value);
+			}
+		}
+
+		private void attach_AlgorithmParameterBoolValues(AlgorithmParameterBoolValue entity)
+		{
+			SendPropertyChanging();
+			entity.Experiment = this;
+		}
+		
+		private void detach_AlgorithmParameterBoolValues(AlgorithmParameterBoolValue entity)
+		{
+			SendPropertyChanging();
+			entity.Experiment = null;
+		}
+		private EntitySet<AlgorithmParameterFloatValue> _AlgorithmParameterFloatValues;
+		[Association(Name=@"Experiment_AlgorithmParameterFloatValue", Storage=@"_AlgorithmParameterFloatValues", ThisKey=@"Id", OtherKey=@"ExperimentId")]
+		[DataMember(Order=7, EmitDefaultValue=false)]
+		public EntitySet<AlgorithmParameterFloatValue> AlgorithmParameterFloatValues
+		{
+			get {
+				if (serializing && !_AlgorithmParameterFloatValues.HasLoadedOrAssignedValues) {
+					return null;
+				}
+				return _AlgorithmParameterFloatValues;
+			}
+			set {
+				_AlgorithmParameterFloatValues.Assign(value);
+			}
+		}
+
+		private void attach_AlgorithmParameterFloatValues(AlgorithmParameterFloatValue entity)
+		{
+			SendPropertyChanging();
+			entity.Experiment = this;
+		}
+		
+		private void detach_AlgorithmParameterFloatValues(AlgorithmParameterFloatValue entity)
+		{
+			SendPropertyChanging();
+			entity.Experiment = null;
+		}
+		private EntitySet<AlgorithmParameterIntValue> _AlgorithmParameterIntValues;
+		[Association(Name=@"Experiment_AlgorithmParameterIntValue", Storage=@"_AlgorithmParameterIntValues", ThisKey=@"Id", OtherKey=@"ExperimentId")]
+		[DataMember(Order=8, EmitDefaultValue=false)]
+		public EntitySet<AlgorithmParameterIntValue> AlgorithmParameterIntValues
+		{
+			get {
+				if (serializing && !_AlgorithmParameterIntValues.HasLoadedOrAssignedValues) {
+					return null;
+				}
+				return _AlgorithmParameterIntValues;
+			}
+			set {
+				_AlgorithmParameterIntValues.Assign(value);
+			}
+		}
+
+		private void attach_AlgorithmParameterIntValues(AlgorithmParameterIntValue entity)
+		{
+			SendPropertyChanging();
+			entity.Experiment = this;
+		}
+		
+		private void detach_AlgorithmParameterIntValues(AlgorithmParameterIntValue entity)
+		{
+			SendPropertyChanging();
+			entity.Experiment = null;
+		}
+		private EntitySet<AlgorithmParameterStringValue> _AlgorithmParameterStringValues;
+		[Association(Name=@"Experiment_AlgorithmParameterStringValue", Storage=@"_AlgorithmParameterStringValues", ThisKey=@"Id", OtherKey=@"ExperimentId")]
+		[DataMember(Order=9, EmitDefaultValue=false)]
+		public EntitySet<AlgorithmParameterStringValue> AlgorithmParameterStringValues
+		{
+			get {
+				if (serializing && !_AlgorithmParameterStringValues.HasLoadedOrAssignedValues) {
+					return null;
+				}
+				return _AlgorithmParameterStringValues;
+			}
+			set {
+				_AlgorithmParameterStringValues.Assign(value);
+			}
+		}
+
+		private void attach_AlgorithmParameterStringValues(AlgorithmParameterStringValue entity)
+		{
+			SendPropertyChanging();
+			entity.Experiment = this;
+		}
+		
+		private void detach_AlgorithmParameterStringValues(AlgorithmParameterStringValue entity)
+		{
+			SendPropertyChanging();
+			entity.Experiment = null;
+		}
+		private EntitySet<ProblemParameterBlobValue> _ProblemParameterBlobValues;
+		[Association(Name=@"Experiment_ProblemParameterBlobValue", Storage=@"_ProblemParameterBlobValues", ThisKey=@"Id", OtherKey=@"ExperimentId")]
+		[DataMember(Order=10, EmitDefaultValue=false)]
+		public EntitySet<ProblemParameterBlobValue> ProblemParameterBlobValues
+		{
+			get {
+				if (serializing && !_ProblemParameterBlobValues.HasLoadedOrAssignedValues) {
+					return null;
+				}
+				return _ProblemParameterBlobValues;
+			}
+			set {
+				_ProblemParameterBlobValues.Assign(value);
+			}
+		}
+
+		private void attach_ProblemParameterBlobValues(ProblemParameterBlobValue entity)
+		{
+			SendPropertyChanging();
+			entity.Experiment = this;
+		}
+		
+		private void detach_ProblemParameterBlobValues(ProblemParameterBlobValue entity)
+		{
+			SendPropertyChanging();
+			entity.Experiment = null;
+		}
+		private EntitySet<ProblemParameterBoolValue> _ProblemParameterBoolValues;
+		[Association(Name=@"Experiment_ProblemParameterBoolValue", Storage=@"_ProblemParameterBoolValues", ThisKey=@"Id", OtherKey=@"ExperimentId")]
+		[DataMember(Order=11, EmitDefaultValue=false)]
+		public EntitySet<ProblemParameterBoolValue> ProblemParameterBoolValues
+		{
+			get {
+				if (serializing && !_ProblemParameterBoolValues.HasLoadedOrAssignedValues) {
+					return null;
+				}
+				return _ProblemParameterBoolValues;
+			}
+			set {
+				_ProblemParameterBoolValues.Assign(value);
+			}
+		}
+
+		private void attach_ProblemParameterBoolValues(ProblemParameterBoolValue entity)
+		{
+			SendPropertyChanging();
+			entity.Experiment = this;
+		}
+		
+		private void detach_ProblemParameterBoolValues(ProblemParameterBoolValue entity)
+		{
+			SendPropertyChanging();
+			entity.Experiment = null;
+		}
+		private EntitySet<ProblemParameterFloatValue> _ProblemParameterFloatValues;
+		[Association(Name=@"Experiment_ProblemParameterFloatValue", Storage=@"_ProblemParameterFloatValues", ThisKey=@"Id", OtherKey=@"ExperimentId")]
+		[DataMember(Order=12, EmitDefaultValue=false)]
+		public EntitySet<ProblemParameterFloatValue> ProblemParameterFloatValues
+		{
+			get {
+				if (serializing && !_ProblemParameterFloatValues.HasLoadedOrAssignedValues) {
+					return null;
+				}
+				return _ProblemParameterFloatValues;
+			}
+			set {
+				_ProblemParameterFloatValues.Assign(value);
+			}
+		}
+
+		private void attach_ProblemParameterFloatValues(ProblemParameterFloatValue entity)
+		{
+			SendPropertyChanging();
+			entity.Experiment = this;
+		}
+		
+		private void detach_ProblemParameterFloatValues(ProblemParameterFloatValue entity)
+		{
+			SendPropertyChanging();
+			entity.Experiment = null;
+		}
+		private EntitySet<ProblemParameterIntValue> _ProblemParameterIntValues;
+		[Association(Name=@"Experiment_ProblemParameterIntValue", Storage=@"_ProblemParameterIntValues", ThisKey=@"Id", OtherKey=@"ExperimentId")]
+		[DataMember(Order=13, EmitDefaultValue=false)]
+		public EntitySet<ProblemParameterIntValue> ProblemParameterIntValues
+		{
+			get {
+				if (serializing && !_ProblemParameterIntValues.HasLoadedOrAssignedValues) {
+					return null;
+				}
+				return _ProblemParameterIntValues;
+			}
+			set {
+				_ProblemParameterIntValues.Assign(value);
+			}
+		}
+
+		private void attach_ProblemParameterIntValues(ProblemParameterIntValue entity)
+		{
+			SendPropertyChanging();
+			entity.Experiment = this;
+		}
+		
+		private void detach_ProblemParameterIntValues(ProblemParameterIntValue entity)
+		{
+			SendPropertyChanging();
+			entity.Experiment = null;
+		}
+		private EntitySet<ProblemParameterStringValue> _ProblemParameterStringValues;
+		[Association(Name=@"Experiment_ProblemParameterStringValue", Storage=@"_ProblemParameterStringValues", ThisKey=@"Id", OtherKey=@"ExperimentId")]
+		[DataMember(Order=14, EmitDefaultValue=false)]
+		public EntitySet<ProblemParameterStringValue> ProblemParameterStringValues
+		{
+			get {
+				if (serializing && !_ProblemParameterStringValues.HasLoadedOrAssignedValues) {
+					return null;
+				}
+				return _ProblemParameterStringValues;
+			}
+			set {
+				_ProblemParameterStringValues.Assign(value);
+			}
+		}
+
+		private void attach_ProblemParameterStringValues(ProblemParameterStringValue entity)
+		{
+			SendPropertyChanging();
+			entity.Experiment = this;
+		}
+		
+		private void detach_ProblemParameterStringValues(ProblemParameterStringValue entity)
+		{
+			SendPropertyChanging();
+			entity.Experiment = null;
+		}
+		private EntityRef<Problem> _Problem;
+		[Association(Name=@"Problem_Experiment", Storage=@"_Problem", ThisKey=@"ProblemId", OtherKey=@"Id", IsForeignKey=true)]
+		[DataMember(Order=15, EmitDefaultValue=false)]
+		public Problem Problem
+		{
+			get {
+				if (serializing && !_Problem.HasLoadedOrAssignedValue) {
+					return null;
+				}
+				return _Problem.Entity;
+			}
+			set {
+				Problem previousValue = _Problem.Entity;
+				if ((previousValue != value) || (!_Problem.HasLoadedOrAssignedValue)) {
+					SendPropertyChanging();
+					if (previousValue != null) {
+						_Problem.Entity = null;
+						previousValue.Experiments.Remove(this);
+					}
+					_Problem.Entity = value;
+					if (value != null) {
+						value.Experiments.Add(this);
+						_ProblemId = value.Id;
+					}
+					else {
+						_ProblemId = default(long);
+					}
+					SendPropertyChanged("Problem");
+				}
+			}
+		}
+
+		private EntityRef<Algorithm> _Algorithm;
+		[Association(Name=@"Algorithm_Experiment", Storage=@"_Algorithm", ThisKey=@"AlgorithmId", OtherKey=@"Id", IsForeignKey=true)]
+		[DataMember(Order=16, EmitDefaultValue=false)]
+		public Algorithm Algorithm
+		{
+			get {
+				if (serializing && !_Algorithm.HasLoadedOrAssignedValue) {
+					return null;
+				}
+				return _Algorithm.Entity;
+			}
+			set {
+				Algorithm previousValue = _Algorithm.Entity;
+				if ((previousValue != value) || (!_Algorithm.HasLoadedOrAssignedValue)) {
+					SendPropertyChanging();
+					if (previousValue != null) {
+						_Algorithm.Entity = null;
+						previousValue.Experiments.Remove(this);
+					}
+					_Algorithm.Entity = value;
+					if (value != null) {
+						value.Experiments.Add(this);
+						_AlgorithmId = value.Id;
+					}
+					else {
+						_AlgorithmId = default(long);
+					}
+					SendPropertyChanged("Algorithm");
+				}
+			}
+		}
+
+		#endregion
+		
+		#region Serialization
+		private bool serializing;
+		
+		[OnSerializing()]
+		[EditorBrowsableAttribute(EditorBrowsableState.Never)]
+		public void OnSerializing(StreamingContext context)
+		{
+			serializing = true;
+		}
+		
+		[OnSerialized()]
+		[EditorBrowsableAttribute(EditorBrowsableState.Never)]
+		public void OnSerialized(StreamingContext context)
+		{
+			serializing = false;
+		}
+		
+		[OnDeserializing()]
+		[EditorBrowsableAttribute(EditorBrowsableState.Never)]
+		public  void OnDeserializing(StreamingContext context)
+		{
+			Initialize();
+		}
+		#endregion
+	}
+}
+
+namespace HeuristicLab.Services.OKB.DataAccess
+{	
+	[DataContract(IsReference=true)]
+	[Table(Name=@"dbo.AlgorithmParameter")]
+[KnownType(typeof(AlgorithmParameter))]	public partial class AlgorithmParameter : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		#region Property Change Event Handling
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		public virtual void SendPropertyChanging()
+		{
+			if (PropertyChanging != null) {
+				PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+			
+		public virtual void SendPropertyChanged(String propertyName)
+		{
+			if (PropertyChanged != null) {
+				PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+		#endregion
+		
+		#region Extensibility Method Definitions
+		partial void OnLoaded();
+		partial void OnValidate(ChangeAction action);
+		partial void OnCreated();
+		#endregion
+
+		#region Construction
+		public AlgorithmParameter()
+		{
+			Initialize();
+		}
+		
+		private void Initialize()
+		{
+			_AlgorithmParameterBlobValues = new EntitySet<AlgorithmParameterBlobValue>(attach_AlgorithmParameterBlobValues, detach_AlgorithmParameterBlobValues);
+			_AlgorithmParameterBoolValues = new EntitySet<AlgorithmParameterBoolValue>(attach_AlgorithmParameterBoolValues, detach_AlgorithmParameterBoolValues);
+			_AlgorithmParameterFloatValues = new EntitySet<AlgorithmParameterFloatValue>(attach_AlgorithmParameterFloatValues, detach_AlgorithmParameterFloatValues);
+			_AlgorithmParameterIntValues = new EntitySet<AlgorithmParameterIntValue>(attach_AlgorithmParameterIntValues, detach_AlgorithmParameterIntValues);
+			_AlgorithmParameterStringValues = new EntitySet<AlgorithmParameterStringValue>(attach_AlgorithmParameterStringValues, detach_AlgorithmParameterStringValues);
+			_Algorithm = default(EntityRef<Algorithm>);
+			_DataType = default(EntityRef<DataType>);
+			OnCreated();
+		}
+		#endregion
+
+		#region Column Mappings
+		partial void OnIdChanging(long value);
+		partial void OnIdChanged();
+		private long _Id;
+		[Column(Storage=@"_Id", AutoSync=AutoSync.OnInsert, DbType=@"BigInt NOT NULL IDENTITY", IsPrimaryKey=true, IsDbGenerated=true, UpdateCheck=UpdateCheck.Never)]
+		[DataMember(Order=1)]
+		public long Id
+		{
+			get { return _Id; }
+			set {
+				if (_Id != value) {
+					OnIdChanging(value);
+					SendPropertyChanging();
+					_Id = value;
+					SendPropertyChanged("Id");
+					OnIdChanged();
+				}
+			}
+		}
+		
+		partial void OnAlgorithmIdChanging(long value);
+		partial void OnAlgorithmIdChanged();
+		private long _AlgorithmId;
+		[Column(Storage=@"_AlgorithmId", DbType=@"BigInt NOT NULL", CanBeNull=false)]
+		[DataMember(Order=2)]
+		public long AlgorithmId
+		{
+			get { return _AlgorithmId; }
+			set {
+				if (_AlgorithmId != value) {
+					if (_Algorithm.HasLoadedOrAssignedValue) {
+						throw new ForeignKeyReferenceAlreadyHasValueException();
+					}
+					OnAlgorithmIdChanging(value);
+					SendPropertyChanging();
+					_AlgorithmId = value;
+					SendPropertyChanged("AlgorithmId");
+					OnAlgorithmIdChanged();
+				}
+			}
+		}
+		
+		partial void OnNameChanging(string value);
+		partial void OnNameChanged();
+		private string _Name;
+		[Column(Storage=@"_Name", DbType=@"NVarChar(200) NOT NULL", CanBeNull=false)]
+		[DataMember(Order=3)]
+		public string Name
+		{
+			get { return _Name; }
+			set {
+				if (_Name != value) {
+					OnNameChanging(value);
+					SendPropertyChanging();
+					_Name = value;
+					SendPropertyChanged("Name");
+					OnNameChanged();
+				}
+			}
+		}
+		
+		partial void OnAliasChanging(string value);
+		partial void OnAliasChanged();
+		private string _Alias;
+		[Column(Storage=@"_Alias", DbType=@"NVarChar(200)")]
+		[DataMember(Order=4)]
+		public string Alias
+		{
+			get { return _Alias; }
+			set {
+				if (_Alias != value) {
+					OnAliasChanging(value);
+					SendPropertyChanging();
+					_Alias = value;
+					SendPropertyChanged("Alias");
+					OnAliasChanged();
+				}
+			}
+		}
+		
+		partial void OnDescriptionChanging(string value);
+		partial void OnDescriptionChanged();
+		private string _Description;
+		[Column(Storage=@"_Description", DbType=@"NVarChar(MAX)")]
+		[DataMember(Order=5)]
+		public string Description
+		{
+			get { return _Description; }
+			set {
+				if (_Description != value) {
+					OnDescriptionChanging(value);
+					SendPropertyChanging();
+					_Description = value;
+					SendPropertyChanged("Description");
+					OnDescriptionChanged();
+				}
+			}
+		}
+		
+		partial void OnDataTypeIdChanging(long value);
+		partial void OnDataTypeIdChanged();
+		private long _DataTypeId;
+		[Column(Storage=@"_DataTypeId", DbType=@"BigInt NOT NULL", CanBeNull=false)]
+		[DataMember(Order=6)]
+		public long DataTypeId
+		{
+			get { return _DataTypeId; }
+			set {
+				if (_DataTypeId != value) {
+					if (_DataType.HasLoadedOrAssignedValue) {
+						throw new ForeignKeyReferenceAlreadyHasValueException();
+					}
+					OnDataTypeIdChanging(value);
+					SendPropertyChanging();
+					_DataTypeId = value;
+					SendPropertyChanged("DataTypeId");
+					OnDataTypeIdChanged();
+				}
+			}
+		}
+		
+		#endregion
+		
+		#region Associations
+		private EntitySet<AlgorithmParameterBlobValue> _AlgorithmParameterBlobValues;
+		[Association(Name=@"AlgorithmParameter_AlgorithmParameterBlobValue", Storage=@"_AlgorithmParameterBlobValues", ThisKey=@"Id", OtherKey=@"AlgorithmParameterId")]
+		[DataMember(Order=7, EmitDefaultValue=false)]
+		public EntitySet<AlgorithmParameterBlobValue> AlgorithmParameterBlobValues
+		{
+			get {
+				if (serializing && !_AlgorithmParameterBlobValues.HasLoadedOrAssignedValues) {
+					return null;
+				}
+				return _AlgorithmParameterBlobValues;
+			}
+			set {
+				_AlgorithmParameterBlobValues.Assign(value);
+			}
+		}
+
+		private void attach_AlgorithmParameterBlobValues(AlgorithmParameterBlobValue entity)
+		{
+			SendPropertyChanging();
+			entity.AlgorithmParameter = this;
+		}
+		
+		private void detach_AlgorithmParameterBlobValues(AlgorithmParameterBlobValue entity)
+		{
+			SendPropertyChanging();
+			entity.AlgorithmParameter = null;
+		}
+		private EntitySet<AlgorithmParameterBoolValue> _AlgorithmParameterBoolValues;
+		[Association(Name=@"AlgorithmParameter_AlgorithmParameterBoolValue", Storage=@"_AlgorithmParameterBoolValues", ThisKey=@"Id", OtherKey=@"AlgorithmParameterId")]
+		[DataMember(Order=8, EmitDefaultValue=false)]
+		public EntitySet<AlgorithmParameterBoolValue> AlgorithmParameterBoolValues
+		{
+			get {
+				if (serializing && !_AlgorithmParameterBoolValues.HasLoadedOrAssignedValues) {
+					return null;
+				}
+				return _AlgorithmParameterBoolValues;
+			}
+			set {
+				_AlgorithmParameterBoolValues.Assign(value);
+			}
+		}
+
+		private void attach_AlgorithmParameterBoolValues(AlgorithmParameterBoolValue entity)
+		{
+			SendPropertyChanging();
+			entity.AlgorithmParameter = this;
+		}
+		
+		private void detach_AlgorithmParameterBoolValues(AlgorithmParameterBoolValue entity)
+		{
+			SendPropertyChanging();
+			entity.AlgorithmParameter = null;
+		}
+		private EntitySet<AlgorithmParameterFloatValue> _AlgorithmParameterFloatValues;
+		[Association(Name=@"AlgorithmParameter_AlgorithmParameterFloatValue", Storage=@"_AlgorithmParameterFloatValues", ThisKey=@"Id", OtherKey=@"AlgorithmParameterId")]
+		[DataMember(Order=9, EmitDefaultValue=false)]
+		public EntitySet<AlgorithmParameterFloatValue> AlgorithmParameterFloatValues
+		{
+			get {
+				if (serializing && !_AlgorithmParameterFloatValues.HasLoadedOrAssignedValues) {
+					return null;
+				}
+				return _AlgorithmParameterFloatValues;
+			}
+			set {
+				_AlgorithmParameterFloatValues.Assign(value);
+			}
+		}
+
+		private void attach_AlgorithmParameterFloatValues(AlgorithmParameterFloatValue entity)
+		{
+			SendPropertyChanging();
+			entity.AlgorithmParameter = this;
+		}
+		
+		private void detach_AlgorithmParameterFloatValues(AlgorithmParameterFloatValue entity)
+		{
+			SendPropertyChanging();
+			entity.AlgorithmParameter = null;
+		}
+		private EntitySet<AlgorithmParameterIntValue> _AlgorithmParameterIntValues;
+		[Association(Name=@"AlgorithmParameter_AlgorithmParameterIntValue", Storage=@"_AlgorithmParameterIntValues", ThisKey=@"Id", OtherKey=@"AlgorithmParameterId")]
+		[DataMember(Order=10, EmitDefaultValue=false)]
+		public EntitySet<AlgorithmParameterIntValue> AlgorithmParameterIntValues
+		{
+			get {
+				if (serializing && !_AlgorithmParameterIntValues.HasLoadedOrAssignedValues) {
+					return null;
+				}
+				return _AlgorithmParameterIntValues;
+			}
+			set {
+				_AlgorithmParameterIntValues.Assign(value);
+			}
+		}
+
+		private void attach_AlgorithmParameterIntValues(AlgorithmParameterIntValue entity)
+		{
+			SendPropertyChanging();
+			entity.AlgorithmParameter = this;
+		}
+		
+		private void detach_AlgorithmParameterIntValues(AlgorithmParameterIntValue entity)
+		{
+			SendPropertyChanging();
+			entity.AlgorithmParameter = null;
+		}
+		private EntitySet<AlgorithmParameterStringValue> _AlgorithmParameterStringValues;
+		[Association(Name=@"AlgorithmParameter_AlgorithmParameterStringValue", Storage=@"_AlgorithmParameterStringValues", ThisKey=@"Id", OtherKey=@"AlgorithmParameterId")]
+		[DataMember(Order=11, EmitDefaultValue=false)]
+		public EntitySet<AlgorithmParameterStringValue> AlgorithmParameterStringValues
+		{
+			get {
+				if (serializing && !_AlgorithmParameterStringValues.HasLoadedOrAssignedValues) {
+					return null;
+				}
+				return _AlgorithmParameterStringValues;
+			}
+			set {
+				_AlgorithmParameterStringValues.Assign(value);
+			}
+		}
+
+		private void attach_AlgorithmParameterStringValues(AlgorithmParameterStringValue entity)
+		{
+			SendPropertyChanging();
+			entity.AlgorithmParameter = this;
+		}
+		
+		private void detach_AlgorithmParameterStringValues(AlgorithmParameterStringValue entity)
+		{
+			SendPropertyChanging();
+			entity.AlgorithmParameter = null;
+		}
+		private EntityRef<Algorithm> _Algorithm;
+		[Association(Name=@"Algorithm_AlgorithmParameter", Storage=@"_Algorithm", ThisKey=@"AlgorithmId", OtherKey=@"Id", IsForeignKey=true)]
+		[DataMember(Order=12, EmitDefaultValue=false)]
+		public Algorithm Algorithm
+		{
+			get {
+				if (serializing && !_Algorithm.HasLoadedOrAssignedValue) {
+					return null;
+				}
+				return _Algorithm.Entity;
+			}
+			set {
+				Algorithm previousValue = _Algorithm.Entity;
+				if ((previousValue != value) || (!_Algorithm.HasLoadedOrAssignedValue)) {
+					SendPropertyChanging();
+					if (previousValue != null) {
+						_Algorithm.Entity = null;
+						previousValue.AlgorithmParameters.Remove(this);
+					}
+					_Algorithm.Entity = value;
+					if (value != null) {
+						value.AlgorithmParameters.Add(this);
+						_AlgorithmId = value.Id;
+					}
+					else {
+						_AlgorithmId = default(long);
+					}
+					SendPropertyChanged("Algorithm");
+				}
+			}
+		}
+
+		private EntityRef<DataType> _DataType;
+		[Association(Name=@"DataType_AlgorithmParameter", Storage=@"_DataType", ThisKey=@"DataTypeId", OtherKey=@"Id", IsForeignKey=true)]
+		[DataMember(Order=13, EmitDefaultValue=false)]
+		public DataType DataType
+		{
+			get {
+				if (serializing && !_DataType.HasLoadedOrAssignedValue) {
+					return null;
+				}
+				return _DataType.Entity;
+			}
+			set {
+				DataType previousValue = _DataType.Entity;
+				if ((previousValue != value) || (!_DataType.HasLoadedOrAssignedValue)) {
+					SendPropertyChanging();
+					if (previousValue != null) {
+						_DataType.Entity = null;
+						previousValue.AlgorithmParameters.Remove(this);
+					}
+					_DataType.Entity = value;
+					if (value != null) {
+						value.AlgorithmParameters.Add(this);
+						_DataTypeId = value.Id;
+					}
+					else {
+						_DataTypeId = default(long);
+					}
+					SendPropertyChanged("DataType");
+				}
+			}
+		}
+
+		#endregion
+		
+		#region Serialization
+		private bool serializing;
+		
+		[OnSerializing()]
+		[EditorBrowsableAttribute(EditorBrowsableState.Never)]
+		public void OnSerializing(StreamingContext context)
+		{
+			serializing = true;
+		}
+		
+		[OnSerialized()]
+		[EditorBrowsableAttribute(EditorBrowsableState.Never)]
+		public void OnSerialized(StreamingContext context)
+		{
+			serializing = false;
+		}
+		
+		[OnDeserializing()]
+		[EditorBrowsableAttribute(EditorBrowsableState.Never)]
+		public  void OnDeserializing(StreamingContext context)
+		{
+			Initialize();
+		}
+		#endregion
+	}
+}
+
+namespace HeuristicLab.Services.OKB.DataAccess
+{	
+	[DataContract(IsReference=true)]
+	[Table(Name=@"dbo.ProblemParameter")]
+[KnownType(typeof(ProblemParameter))]	public partial class ProblemParameter : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		#region Property Change Event Handling
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		public virtual void SendPropertyChanging()
+		{
+			if (PropertyChanging != null) {
+				PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+			
+		public virtual void SendPropertyChanged(String propertyName)
+		{
+			if (PropertyChanged != null) {
+				PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+		#endregion
+		
+		#region Extensibility Method Definitions
+		partial void OnLoaded();
+		partial void OnValidate(ChangeAction action);
+		partial void OnCreated();
+		#endregion
+
+		#region Construction
+		public ProblemParameter()
+		{
+			Initialize();
+		}
+		
+		private void Initialize()
+		{
+			_ProblemParameterBlobValues = new EntitySet<ProblemParameterBlobValue>(attach_ProblemParameterBlobValues, detach_ProblemParameterBlobValues);
+			_ProblemParameterBoolValues = new EntitySet<ProblemParameterBoolValue>(attach_ProblemParameterBoolValues, detach_ProblemParameterBoolValues);
+			_ProblemParameterFloatValues = new EntitySet<ProblemParameterFloatValue>(attach_ProblemParameterFloatValues, detach_ProblemParameterFloatValues);
+			_ProblemParameterIntValues = new EntitySet<ProblemParameterIntValue>(attach_ProblemParameterIntValues, detach_ProblemParameterIntValues);
+			_ProblemParameterStringValues = new EntitySet<ProblemParameterStringValue>(attach_ProblemParameterStringValues, detach_ProblemParameterStringValues);
+			_Problem = default(EntityRef<Problem>);
+			_DataType = default(EntityRef<DataType>);
+			OnCreated();
+		}
+		#endregion
+
+		#region Column Mappings
+		partial void OnIdChanging(long value);
+		partial void OnIdChanged();
+		private long _Id;
+		[Column(Storage=@"_Id", AutoSync=AutoSync.OnInsert, DbType=@"BigInt NOT NULL IDENTITY", IsPrimaryKey=true, IsDbGenerated=true, UpdateCheck=UpdateCheck.Never)]
+		[DataMember(Order=1)]
+		public long Id
+		{
+			get { return _Id; }
+			set {
+				if (_Id != value) {
+					OnIdChanging(value);
+					SendPropertyChanging();
+					_Id = value;
+					SendPropertyChanged("Id");
+					OnIdChanged();
+				}
+			}
+		}
+		
+		partial void OnProblemIdChanging(long value);
+		partial void OnProblemIdChanged();
+		private long _ProblemId;
+		[Column(Storage=@"_ProblemId", DbType=@"BigInt NOT NULL", CanBeNull=false)]
+		[DataMember(Order=2)]
+		public long ProblemId
+		{
+			get { return _ProblemId; }
+			set {
+				if (_ProblemId != value) {
+					if (_Problem.HasLoadedOrAssignedValue) {
+						throw new ForeignKeyReferenceAlreadyHasValueException();
+					}
+					OnProblemIdChanging(value);
+					SendPropertyChanging();
+					_ProblemId = value;
+					SendPropertyChanged("ProblemId");
+					OnProblemIdChanged();
+				}
+			}
+		}
+		
+		partial void OnNameChanging(string value);
+		partial void OnNameChanged();
+		private string _Name;
+		[Column(Storage=@"_Name", DbType=@"NVarChar(200) NOT NULL", CanBeNull=false)]
+		[DataMember(Order=3)]
+		public string Name
+		{
+			get { return _Name; }
+			set {
+				if (_Name != value) {
+					OnNameChanging(value);
+					SendPropertyChanging();
+					_Name = value;
+					SendPropertyChanged("Name");
+					OnNameChanged();
+				}
+			}
+		}
+		
+		partial void OnAliasChanging(string value);
+		partial void OnAliasChanged();
+		private string _Alias;
+		[Column(Storage=@"_Alias", DbType=@"NVarChar(200)")]
+		[DataMember(Order=4)]
+		public string Alias
+		{
+			get { return _Alias; }
+			set {
+				if (_Alias != value) {
+					OnAliasChanging(value);
+					SendPropertyChanging();
+					_Alias = value;
+					SendPropertyChanged("Alias");
+					OnAliasChanged();
+				}
+			}
+		}
+		
+		partial void OnDescriptionChanging(string value);
+		partial void OnDescriptionChanged();
+		private string _Description;
+		[Column(Storage=@"_Description", DbType=@"NVarChar(MAX)")]
+		[DataMember(Order=5)]
+		public string Description
+		{
+			get { return _Description; }
+			set {
+				if (_Description != value) {
+					OnDescriptionChanging(value);
+					SendPropertyChanging();
+					_Description = value;
+					SendPropertyChanged("Description");
+					OnDescriptionChanged();
+				}
+			}
+		}
+		
+		partial void OnDataTypeIdChanging(long value);
+		partial void OnDataTypeIdChanged();
+		private long _DataTypeId;
+		[Column(Storage=@"_DataTypeId", DbType=@"BigInt NOT NULL", CanBeNull=false)]
+		[DataMember(Order=6)]
+		public long DataTypeId
+		{
+			get { return _DataTypeId; }
+			set {
+				if (_DataTypeId != value) {
+					if (_DataType.HasLoadedOrAssignedValue) {
+						throw new ForeignKeyReferenceAlreadyHasValueException();
+					}
+					OnDataTypeIdChanging(value);
+					SendPropertyChanging();
+					_DataTypeId = value;
+					SendPropertyChanged("DataTypeId");
+					OnDataTypeIdChanged();
+				}
+			}
+		}
+		
+		#endregion
+		
+		#region Associations
+		private EntitySet<ProblemParameterBlobValue> _ProblemParameterBlobValues;
+		[Association(Name=@"ProblemParameter_ProblemParameterBlobValue", Storage=@"_ProblemParameterBlobValues", ThisKey=@"Id", OtherKey=@"ProblemParameterId")]
+		[DataMember(Order=7, EmitDefaultValue=false)]
+		public EntitySet<ProblemParameterBlobValue> ProblemParameterBlobValues
+		{
+			get {
+				if (serializing && !_ProblemParameterBlobValues.HasLoadedOrAssignedValues) {
+					return null;
+				}
+				return _ProblemParameterBlobValues;
+			}
+			set {
+				_ProblemParameterBlobValues.Assign(value);
+			}
+		}
+
+		private void attach_ProblemParameterBlobValues(ProblemParameterBlobValue entity)
+		{
+			SendPropertyChanging();
+			entity.ProblemParameter = this;
+		}
+		
+		private void detach_ProblemParameterBlobValues(ProblemParameterBlobValue entity)
+		{
+			SendPropertyChanging();
+			entity.ProblemParameter = null;
+		}
+		private EntitySet<ProblemParameterBoolValue> _ProblemParameterBoolValues;
+		[Association(Name=@"ProblemParameter_ProblemParameterBoolValue", Storage=@"_ProblemParameterBoolValues", ThisKey=@"Id", OtherKey=@"ProblemParameterId")]
+		[DataMember(Order=8, EmitDefaultValue=false)]
+		public EntitySet<ProblemParameterBoolValue> ProblemParameterBoolValues
+		{
+			get {
+				if (serializing && !_ProblemParameterBoolValues.HasLoadedOrAssignedValues) {
+					return null;
+				}
+				return _ProblemParameterBoolValues;
+			}
+			set {
+				_ProblemParameterBoolValues.Assign(value);
+			}
+		}
+
+		private void attach_ProblemParameterBoolValues(ProblemParameterBoolValue entity)
+		{
+			SendPropertyChanging();
+			entity.ProblemParameter = this;
+		}
+		
+		private void detach_ProblemParameterBoolValues(ProblemParameterBoolValue entity)
+		{
+			SendPropertyChanging();
+			entity.ProblemParameter = null;
+		}
+		private EntitySet<ProblemParameterFloatValue> _ProblemParameterFloatValues;
+		[Association(Name=@"ProblemParameter_ProblemParameterFloatValue", Storage=@"_ProblemParameterFloatValues", ThisKey=@"Id", OtherKey=@"ProblemParameterId")]
+		[DataMember(Order=9, EmitDefaultValue=false)]
+		public EntitySet<ProblemParameterFloatValue> ProblemParameterFloatValues
+		{
+			get {
+				if (serializing && !_ProblemParameterFloatValues.HasLoadedOrAssignedValues) {
+					return null;
+				}
+				return _ProblemParameterFloatValues;
+			}
+			set {
+				_ProblemParameterFloatValues.Assign(value);
+			}
+		}
+
+		private void attach_ProblemParameterFloatValues(ProblemParameterFloatValue entity)
+		{
+			SendPropertyChanging();
+			entity.ProblemParameter = this;
+		}
+		
+		private void detach_ProblemParameterFloatValues(ProblemParameterFloatValue entity)
+		{
+			SendPropertyChanging();
+			entity.ProblemParameter = null;
+		}
+		private EntitySet<ProblemParameterIntValue> _ProblemParameterIntValues;
+		[Association(Name=@"ProblemParameter_ProblemParameterIntValue", Storage=@"_ProblemParameterIntValues", ThisKey=@"Id", OtherKey=@"ProblemParameterId")]
+		[DataMember(Order=10, EmitDefaultValue=false)]
+		public EntitySet<ProblemParameterIntValue> ProblemParameterIntValues
+		{
+			get {
+				if (serializing && !_ProblemParameterIntValues.HasLoadedOrAssignedValues) {
+					return null;
+				}
+				return _ProblemParameterIntValues;
+			}
+			set {
+				_ProblemParameterIntValues.Assign(value);
+			}
+		}
+
+		private void attach_ProblemParameterIntValues(ProblemParameterIntValue entity)
+		{
+			SendPropertyChanging();
+			entity.ProblemParameter = this;
+		}
+		
+		private void detach_ProblemParameterIntValues(ProblemParameterIntValue entity)
+		{
+			SendPropertyChanging();
+			entity.ProblemParameter = null;
+		}
+		private EntitySet<ProblemParameterStringValue> _ProblemParameterStringValues;
+		[Association(Name=@"ProblemParameter_ProblemParameterStringValue", Storage=@"_ProblemParameterStringValues", ThisKey=@"Id", OtherKey=@"ProblemParameterId")]
+		[DataMember(Order=11, EmitDefaultValue=false)]
+		public EntitySet<ProblemParameterStringValue> ProblemParameterStringValues
+		{
+			get {
+				if (serializing && !_ProblemParameterStringValues.HasLoadedOrAssignedValues) {
+					return null;
+				}
+				return _ProblemParameterStringValues;
+			}
+			set {
+				_ProblemParameterStringValues.Assign(value);
+			}
+		}
+
+		private void attach_ProblemParameterStringValues(ProblemParameterStringValue entity)
+		{
+			SendPropertyChanging();
+			entity.ProblemParameter = this;
+		}
+		
+		private void detach_ProblemParameterStringValues(ProblemParameterStringValue entity)
+		{
+			SendPropertyChanging();
+			entity.ProblemParameter = null;
+		}
+		private EntityRef<Problem> _Problem;
+		[Association(Name=@"Problem_ProblemParameter", Storage=@"_Problem", ThisKey=@"ProblemId", OtherKey=@"Id", IsForeignKey=true)]
+		[DataMember(Order=12, EmitDefaultValue=false)]
+		public Problem Problem
+		{
+			get {
+				if (serializing && !_Problem.HasLoadedOrAssignedValue) {
+					return null;
+				}
+				return _Problem.Entity;
+			}
+			set {
+				Problem previousValue = _Problem.Entity;
+				if ((previousValue != value) || (!_Problem.HasLoadedOrAssignedValue)) {
+					SendPropertyChanging();
+					if (previousValue != null) {
+						_Problem.Entity = null;
+						previousValue.ProblemParameters.Remove(this);
+					}
+					_Problem.Entity = value;
+					if (value != null) {
+						value.ProblemParameters.Add(this);
+						_ProblemId = value.Id;
+					}
+					else {
+						_ProblemId = default(long);
+					}
+					SendPropertyChanged("Problem");
+				}
+			}
+		}
+
+		private EntityRef<DataType> _DataType;
+		[Association(Name=@"DataType_ProblemParameter", Storage=@"_DataType", ThisKey=@"DataTypeId", OtherKey=@"Id", IsForeignKey=true)]
+		[DataMember(Order=13, EmitDefaultValue=false)]
+		public DataType DataType
+		{
+			get {
+				if (serializing && !_DataType.HasLoadedOrAssignedValue) {
+					return null;
+				}
+				return _DataType.Entity;
+			}
+			set {
+				DataType previousValue = _DataType.Entity;
+				if ((previousValue != value) || (!_DataType.HasLoadedOrAssignedValue)) {
+					SendPropertyChanging();
+					if (previousValue != null) {
+						_DataType.Entity = null;
+						previousValue.ProblemParameters.Remove(this);
+					}
+					_DataType.Entity = value;
+					if (value != null) {
+						value.ProblemParameters.Add(this);
+						_DataTypeId = value.Id;
+					}
+					else {
+						_DataTypeId = default(long);
+					}
+					SendPropertyChanged("DataType");
+				}
+			}
+		}
+
+		#endregion
+		
+		#region Serialization
+		private bool serializing;
+		
+		[OnSerializing()]
+		[EditorBrowsableAttribute(EditorBrowsableState.Never)]
+		public void OnSerializing(StreamingContext context)
+		{
+			serializing = true;
+		}
+		
+		[OnSerialized()]
+		[EditorBrowsableAttribute(EditorBrowsableState.Never)]
+		public void OnSerialized(StreamingContext context)
+		{
+			serializing = false;
+		}
+		
+		[OnDeserializing()]
+		[EditorBrowsableAttribute(EditorBrowsableState.Never)]
+		public  void OnDeserializing(StreamingContext context)
+		{
+			Initialize();
+		}
+		#endregion
+	}
+}
+
+namespace HeuristicLab.Services.OKB.DataAccess
+{	
+	[DataContract(IsReference=true)]
+	[Table(Name=@"dbo.AlgorithmData")]
+[KnownType(typeof(AlgorithmData))]	public partial class AlgorithmData : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		#region Property Change Event Handling
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		public virtual void SendPropertyChanging()
+		{
+			if (PropertyChanging != null) {
+				PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+			
+		public virtual void SendPropertyChanged(String propertyName)
+		{
+			if (PropertyChanged != null) {
+				PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+		#endregion
+		
+		#region Extensibility Method Definitions
+		partial void OnLoaded();
+		partial void OnValidate(ChangeAction action);
+		partial void OnCreated();
+		#endregion
+
+		#region Construction
+		public AlgorithmData()
+		{
+			Initialize();
+		}
+		
+		private void Initialize()
+		{
+			_Algorithm = default(EntityRef<Algorithm>);
+			OnCreated();
+		}
+		#endregion
+
+		#region Column Mappings
+		partial void OnAlgorithmIdChanging(long value);
+		partial void OnAlgorithmIdChanged();
+		private long _AlgorithmId;
+		[Column(Storage=@"_AlgorithmId", DbType=@"BigInt NOT NULL", IsPrimaryKey=true, UpdateCheck=UpdateCheck.Never)]
+		[DataMember(Order=1)]
+		public long AlgorithmId
+		{
+			get { return _AlgorithmId; }
+			set {
+				if (_AlgorithmId != value) {
+					if (_Algorithm.HasLoadedOrAssignedValue) {
+						throw new ForeignKeyReferenceAlreadyHasValueException();
+					}
+					OnAlgorithmIdChanging(value);
+					SendPropertyChanging();
+					_AlgorithmId = value;
+					SendPropertyChanged("AlgorithmId");
+					OnAlgorithmIdChanged();
+				}
+			}
+		}
+		
+		partial void OnDataChanging(Binary value);
+		partial void OnDataChanged();
+		private Binary _Data;
+		[Column(Storage=@"_Data", DbType=@"VarBinary(MAX) NOT NULL", CanBeNull=false, UpdateCheck=UpdateCheck.Never)]
+		[DataMember(Order=2)]
+		public Binary Data
+		{
+			get { return _Data; }
+			set {
+				if (_Data != value) {
+					OnDataChanging(value);
+					SendPropertyChanging();
+					_Data = value;
+					SendPropertyChanged("Data");
+					OnDataChanged();
+				}
+			}
+		}
+		
+		#endregion
+		
+		#region Associations
+		private EntityRef<Algorithm> _Algorithm;
+		[Association(Name=@"Algorithm_AlgorithmData", Storage=@"_Algorithm", ThisKey=@"AlgorithmId", OtherKey=@"Id", IsForeignKey=true)]
+		[DataMember(Order=3, EmitDefaultValue=false)]
+		public Algorithm Algorithm
+		{
+			get {
+				return _Algorithm.Entity;
+			}
+			set {
+				Algorithm previousValue = _Algorithm.Entity;
+				if ((previousValue != value) || (!_Algorithm.HasLoadedOrAssignedValue)) {
+					SendPropertyChanging();
+					if (previousValue != null) {
+						_Algorithm.Entity = null;
+						previousValue.AlgorithmData = null;
+					}
+					_Algorithm.Entity = value;
+					if (value != null) {
+						value.AlgorithmData = this;
+						_AlgorithmId = value.Id;
+					}
+					else {
+						_AlgorithmId = default(long);
+					}
+					SendPropertyChanged("Algorithm");
+				}
+			}
+		}
+
+		#endregion
+		
+		#region Serialization
+		[OnDeserializing()]
+		[EditorBrowsableAttribute(EditorBrowsableState.Never)]
+		public  void OnDeserializing(StreamingContext context)
+		{
+			Initialize();
+		}
+		#endregion
+	}
+}
+
+namespace HeuristicLab.Services.OKB.DataAccess
+{	
+	[DataContract(IsReference=true)]
+	[Table(Name=@"dbo.[User]")]
+[KnownType(typeof(User))]	public partial class User : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		#region Property Change Event Handling
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		public virtual void SendPropertyChanging()
+		{
+			if (PropertyChanging != null) {
+				PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+			
+		public virtual void SendPropertyChanged(String propertyName)
+		{
+			if (PropertyChanged != null) {
+				PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+		#endregion
+		
+		#region Extensibility Method Definitions
+		partial void OnLoaded();
+		partial void OnValidate(ChangeAction action);
+		partial void OnCreated();
+		#endregion
+
+		#region Construction
+		public User()
+		{
+			Initialize();
+		}
+		
+		private void Initialize()
+		{
+			_AlgorithmUsers = new EntitySet<AlgorithmUser>(attach_AlgorithmUsers, detach_AlgorithmUsers);
+			_ProblemUsers = new EntitySet<ProblemUser>(attach_ProblemUsers, detach_ProblemUsers);
+			_Runs = new EntitySet<Run>(attach_Runs, detach_Runs);
+			OnCreated();
+		}
+		#endregion
+
+		#region Column Mappings
+		partial void OnIdChanging(Guid value);
+		partial void OnIdChanged();
+		private Guid _Id;
+		[Column(Storage=@"_Id", DbType=@"UniqueIdentifier NOT NULL", IsPrimaryKey=true, UpdateCheck=UpdateCheck.Never)]
+		[DataMember(Order=1)]
+		public Guid Id
+		{
+			get { return _Id; }
+			set {
+				if (_Id != value) {
+					OnIdChanging(value);
+					SendPropertyChanging();
+					_Id = value;
+					SendPropertyChanged("Id");
+					OnIdChanged();
+				}
+			}
+		}
+		
+		partial void OnNameChanging(string value);
+		partial void OnNameChanged();
+		private string _Name;
+		[Column(Storage=@"_Name", DbType=@"NVarChar(200) NOT NULL", CanBeNull=false)]
+		[DataMember(Order=2)]
+		public string Name
+		{
+			get { return _Name; }
+			set {
+				if (_Name != value) {
+					OnNameChanging(value);
+					SendPropertyChanging();
+					_Name = value;
+					SendPropertyChanged("Name");
+					OnNameChanged();
+				}
+			}
+		}
+		
+		#endregion
+		
+		#region Associations
+		private EntitySet<AlgorithmUser> _AlgorithmUsers;
+		[Association(Name=@"User_AlgorithmUser", Storage=@"_AlgorithmUsers", ThisKey=@"Id", OtherKey=@"UserId")]
+		[DataMember(Order=3, EmitDefaultValue=false)]
+		public EntitySet<AlgorithmUser> AlgorithmUsers
+		{
+			get {
+				if (serializing && !_AlgorithmUsers.HasLoadedOrAssignedValues) {
+					return null;
+				}
+				return _AlgorithmUsers;
+			}
+			set {
+				_AlgorithmUsers.Assign(value);
+			}
+		}
+
+		private void attach_AlgorithmUsers(AlgorithmUser entity)
+		{
+			SendPropertyChanging();
+			entity.User = this;
+		}
+		
+		private void detach_AlgorithmUsers(AlgorithmUser entity)
+		{
+			SendPropertyChanging();
+			entity.User = null;
+		}
+		private EntitySet<ProblemUser> _ProblemUsers;
+		[Association(Name=@"User_ProblemUser", Storage=@"_ProblemUsers", ThisKey=@"Id", OtherKey=@"UserId")]
+		[DataMember(Order=4, EmitDefaultValue=false)]
+		public EntitySet<ProblemUser> ProblemUsers
+		{
+			get {
+				if (serializing && !_ProblemUsers.HasLoadedOrAssignedValues) {
+					return null;
+				}
+				return _ProblemUsers;
+			}
+			set {
+				_ProblemUsers.Assign(value);
+			}
+		}
+
+		private void attach_ProblemUsers(ProblemUser entity)
+		{
+			SendPropertyChanging();
+			entity.User = this;
+		}
+		
+		private void detach_ProblemUsers(ProblemUser entity)
+		{
+			SendPropertyChanging();
+			entity.User = null;
+		}
+		private EntitySet<Run> _Runs;
+		[Association(Name=@"User_Run", Storage=@"_Runs", ThisKey=@"Id", OtherKey=@"UserId")]
+		[DataMember(Order=5, EmitDefaultValue=false)]
+		public EntitySet<Run> Runs
+		{
+			get {
+				if (serializing && !_Runs.HasLoadedOrAssignedValues) {
+					return null;
+				}
+				return _Runs;
+			}
+			set {
+				_Runs.Assign(value);
+			}
+		}
+
+		private void attach_Runs(Run entity)
+		{
+			SendPropertyChanging();
+			entity.User = this;
+		}
+		
+		private void detach_Runs(Run entity)
+		{
+			SendPropertyChanging();
+			entity.User = null;
+		}
+		#endregion
+		
+		#region Serialization
+		private bool serializing;
+		
+		[OnSerializing()]
+		[EditorBrowsableAttribute(EditorBrowsableState.Never)]
+		public void OnSerializing(StreamingContext context)
+		{
+			serializing = true;
+		}
+		
+		[OnSerialized()]
+		[EditorBrowsableAttribute(EditorBrowsableState.Never)]
+		public void OnSerialized(StreamingContext context)
+		{
+			serializing = false;
+		}
+		
+		[OnDeserializing()]
+		[EditorBrowsableAttribute(EditorBrowsableState.Never)]
+		public  void OnDeserializing(StreamingContext context)
+		{
+			Initialize();
+		}
+		#endregion
+	}
+}
+
+namespace HeuristicLab.Services.OKB.DataAccess
+{	
+	[DataContract(IsReference=true)]
+	[Table(Name=@"dbo.ProblemData")]
+[KnownType(typeof(ProblemData))]	public partial class ProblemData : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		#region Property Change Event Handling
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		public virtual void SendPropertyChanging()
+		{
+			if (PropertyChanging != null) {
+				PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+			
+		public virtual void SendPropertyChanged(String propertyName)
+		{
+			if (PropertyChanged != null) {
+				PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+		#endregion
+		
+		#region Extensibility Method Definitions
+		partial void OnLoaded();
+		partial void OnValidate(ChangeAction action);
+		partial void OnCreated();
+		#endregion
+
+		#region Construction
+		public ProblemData()
+		{
+			Initialize();
+		}
+		
+		private void Initialize()
+		{
+			_Problem = default(EntityRef<Problem>);
+			OnCreated();
+		}
+		#endregion
+
+		#region Column Mappings
+		partial void OnProblemIdChanging(long value);
+		partial void OnProblemIdChanged();
+		private long _ProblemId;
+		[Column(Storage=@"_ProblemId", DbType=@"BigInt NOT NULL", IsPrimaryKey=true, UpdateCheck=UpdateCheck.Never)]
+		[DataMember(Order=1)]
+		public long ProblemId
+		{
+			get { return _ProblemId; }
+			set {
+				if (_ProblemId != value) {
+					if (_Problem.HasLoadedOrAssignedValue) {
+						throw new ForeignKeyReferenceAlreadyHasValueException();
+					}
+					OnProblemIdChanging(value);
+					SendPropertyChanging();
+					_ProblemId = value;
+					SendPropertyChanged("ProblemId");
+					OnProblemIdChanged();
+				}
+			}
+		}
+		
+		partial void OnDataChanging(Binary value);
+		partial void OnDataChanged();
+		private Binary _Data;
+		[Column(Storage=@"_Data", DbType=@"VarBinary(MAX) NOT NULL", CanBeNull=false, UpdateCheck=UpdateCheck.Never)]
+		[DataMember(Order=2)]
+		public Binary Data
+		{
+			get { return _Data; }
+			set {
+				if (_Data != value) {
+					OnDataChanging(value);
+					SendPropertyChanging();
+					_Data = value;
+					SendPropertyChanged("Data");
+					OnDataChanged();
+				}
+			}
+		}
+		
+		#endregion
+		
+		#region Associations
+		private EntityRef<Problem> _Problem;
+		[Association(Name=@"Problem_ProblemData", Storage=@"_Problem", ThisKey=@"ProblemId", OtherKey=@"Id", IsForeignKey=true)]
+		[DataMember(Order=3, EmitDefaultValue=false)]
+		public Problem Problem
+		{
+			get {
+				return _Problem.Entity;
+			}
+			set {
+				Problem previousValue = _Problem.Entity;
+				if ((previousValue != value) || (!_Problem.HasLoadedOrAssignedValue)) {
+					SendPropertyChanging();
+					if (previousValue != null) {
+						_Problem.Entity = null;
+						previousValue.ProblemData = null;
+					}
+					_Problem.Entity = value;
+					if (value != null) {
+						value.ProblemData = this;
+						_ProblemId = value.Id;
+					}
+					else {
+						_ProblemId = default(long);
+					}
+					SendPropertyChanged("Problem");
+				}
+			}
+		}
+
+		#endregion
+		
+		#region Serialization
+		[OnDeserializing()]
+		[EditorBrowsableAttribute(EditorBrowsableState.Never)]
+		public  void OnDeserializing(StreamingContext context)
+		{
+			Initialize();
+		}
+		#endregion
+	}
+}
+
+namespace HeuristicLab.Services.OKB.DataAccess
+{	
+	[DataContract(IsReference=true)]
+	[Table(Name=@"dbo.AlgorithmUser")]
+[KnownType(typeof(AlgorithmUser))]	public partial class AlgorithmUser : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		#region Property Change Event Handling
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		public virtual void SendPropertyChanging()
+		{
+			if (PropertyChanging != null) {
+				PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+			
+		public virtual void SendPropertyChanged(String propertyName)
+		{
+			if (PropertyChanged != null) {
+				PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+		#endregion
+		
+		#region Extensibility Method Definitions
+		partial void OnLoaded();
+		partial void OnValidate(ChangeAction action);
+		partial void OnCreated();
+		#endregion
+
+		#region Construction
+		public AlgorithmUser()
+		{
+			Initialize();
+		}
+		
+		private void Initialize()
+		{
+			_Algorithm = default(EntityRef<Algorithm>);
+			_User = default(EntityRef<User>);
+			OnCreated();
+		}
+		#endregion
+
+		#region Column Mappings
+		partial void OnAlgorithmIdChanging(long value);
+		partial void OnAlgorithmIdChanged();
+		private long _AlgorithmId;
+		[Column(Storage=@"_AlgorithmId", DbType=@"BigInt NOT NULL", IsPrimaryKey=true, UpdateCheck=UpdateCheck.Never)]
+		[DataMember(Order=1)]
+		public long AlgorithmId
+		{
+			get { return _AlgorithmId; }
+			set {
+				if (_AlgorithmId != value) {
+					if (_Algorithm.HasLoadedOrAssignedValue) {
+						throw new ForeignKeyReferenceAlreadyHasValueException();
+					}
+					OnAlgorithmIdChanging(value);
+					SendPropertyChanging();
+					_AlgorithmId = value;
+					SendPropertyChanged("AlgorithmId");
+					OnAlgorithmIdChanged();
+				}
+			}
+		}
+		
+		partial void OnUserIdChanging(Guid value);
+		partial void OnUserIdChanged();
+		private Guid _UserId;
+		[Column(Storage=@"_UserId", DbType=@"UniqueIdentifier NOT NULL", IsPrimaryKey=true, UpdateCheck=UpdateCheck.Never)]
+		[DataMember(Order=2)]
+		public Guid UserId
+		{
+			get { return _UserId; }
+			set {
+				if (_UserId != value) {
+					if (_User.HasLoadedOrAssignedValue) {
+						throw new ForeignKeyReferenceAlreadyHasValueException();
+					}
+					OnUserIdChanging(value);
+					SendPropertyChanging();
+					_UserId = value;
+					SendPropertyChanged("UserId");
+					OnUserIdChanged();
+				}
+			}
+		}
+		
+		#endregion
+		
+		#region Associations
+		private EntityRef<Algorithm> _Algorithm;
+		[Association(Name=@"Algorithm_AlgorithmUser", Storage=@"_Algorithm", ThisKey=@"AlgorithmId", OtherKey=@"Id", IsForeignKey=true)]
+		[DataMember(Order=3, EmitDefaultValue=false)]
+		public Algorithm Algorithm
+		{
+			get {
+				return _Algorithm.Entity;
+			}
+			set {
+				Algorithm previousValue = _Algorithm.Entity;
+				if ((previousValue != value) || (!_Algorithm.HasLoadedOrAssignedValue)) {
+					SendPropertyChanging();
+					if (previousValue != null) {
+						_Algorithm.Entity = null;
+						previousValue.AlgorithmUsers.Remove(this);
+					}
+					_Algorithm.Entity = value;
+					if (value != null) {
+						value.AlgorithmUsers.Add(this);
+						_AlgorithmId = value.Id;
+					}
+					else {
+						_AlgorithmId = default(long);
+					}
+					SendPropertyChanged("Algorithm");
+				}
+			}
+		}
+
+		private EntityRef<User> _User;
+		[Association(Name=@"User_AlgorithmUser", Storage=@"_User", ThisKey=@"UserId", OtherKey=@"Id", IsForeignKey=true)]
+		[DataMember(Order=4, EmitDefaultValue=false)]
+		public User User
+		{
+			get {
+				return _User.Entity;
+			}
+			set {
+				User previousValue = _User.Entity;
+				if ((previousValue != value) || (!_User.HasLoadedOrAssignedValue)) {
+					SendPropertyChanging();
+					if (previousValue != null) {
+						_User.Entity = null;
+						previousValue.AlgorithmUsers.Remove(this);
+					}
+					_User.Entity = value;
+					if (value != null) {
+						value.AlgorithmUsers.Add(this);
+						_UserId = value.Id;
+					}
+					else {
+						_UserId = default(Guid);
+					}
+					SendPropertyChanged("User");
+				}
+			}
+		}
+
+		#endregion
+		
+		#region Serialization
+		[OnDeserializing()]
+		[EditorBrowsableAttribute(EditorBrowsableState.Never)]
+		public  void OnDeserializing(StreamingContext context)
+		{
+			Initialize();
+		}
+		#endregion
+	}
+}
+
+namespace HeuristicLab.Services.OKB.DataAccess
+{	
+	[DataContract(IsReference=true)]
+	[Table(Name=@"dbo.ProblemUser")]
+[KnownType(typeof(ProblemUser))]	public partial class ProblemUser : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		#region Property Change Event Handling
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		public virtual void SendPropertyChanging()
+		{
+			if (PropertyChanging != null) {
+				PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+			
+		public virtual void SendPropertyChanged(String propertyName)
+		{
+			if (PropertyChanged != null) {
+				PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+		#endregion
+		
+		#region Extensibility Method Definitions
+		partial void OnLoaded();
+		partial void OnValidate(ChangeAction action);
+		partial void OnCreated();
+		#endregion
+
+		#region Construction
+		public ProblemUser()
+		{
+			Initialize();
+		}
+		
+		private void Initialize()
+		{
+			_Problem = default(EntityRef<Problem>);
+			_User = default(EntityRef<User>);
+			OnCreated();
+		}
+		#endregion
+
+		#region Column Mappings
+		partial void OnProblemIdChanging(long value);
+		partial void OnProblemIdChanged();
+		private long _ProblemId;
+		[Column(Storage=@"_ProblemId", DbType=@"BigInt NOT NULL", IsPrimaryKey=true, UpdateCheck=UpdateCheck.Never)]
+		[DataMember(Order=1)]
+		public long ProblemId
+		{
+			get { return _ProblemId; }
+			set {
+				if (_ProblemId != value) {
+					if (_Problem.HasLoadedOrAssignedValue) {
+						throw new ForeignKeyReferenceAlreadyHasValueException();
+					}
+					OnProblemIdChanging(value);
+					SendPropertyChanging();
+					_ProblemId = value;
+					SendPropertyChanged("ProblemId");
+					OnProblemIdChanged();
+				}
+			}
+		}
+		
+		partial void OnUserIdChanging(Guid value);
+		partial void OnUserIdChanged();
+		private Guid _UserId;
+		[Column(Storage=@"_UserId", DbType=@"UniqueIdentifier NOT NULL", IsPrimaryKey=true, UpdateCheck=UpdateCheck.Never)]
+		[DataMember(Order=2)]
+		public Guid UserId
+		{
+			get { return _UserId; }
+			set {
+				if (_UserId != value) {
+					if (_User.HasLoadedOrAssignedValue) {
+						throw new ForeignKeyReferenceAlreadyHasValueException();
+					}
+					OnUserIdChanging(value);
+					SendPropertyChanging();
+					_UserId = value;
+					SendPropertyChanged("UserId");
+					OnUserIdChanged();
+				}
+			}
+		}
+		
+		#endregion
+		
+		#region Associations
+		private EntityRef<Problem> _Problem;
+		[Association(Name=@"Problem_ProblemUser", Storage=@"_Problem", ThisKey=@"ProblemId", OtherKey=@"Id", IsForeignKey=true)]
+		[DataMember(Order=3, EmitDefaultValue=false)]
+		public Problem Problem
+		{
+			get {
+				return _Problem.Entity;
+			}
+			set {
+				Problem previousValue = _Problem.Entity;
+				if ((previousValue != value) || (!_Problem.HasLoadedOrAssignedValue)) {
+					SendPropertyChanging();
+					if (previousValue != null) {
+						_Problem.Entity = null;
+						previousValue.ProblemUsers.Remove(this);
+					}
+					_Problem.Entity = value;
+					if (value != null) {
+						value.ProblemUsers.Add(this);
+						_ProblemId = value.Id;
+					}
+					else {
+						_ProblemId = default(long);
+					}
+					SendPropertyChanged("Problem");
+				}
+			}
+		}
+
+		private EntityRef<User> _User;
+		[Association(Name=@"User_ProblemUser", Storage=@"_User", ThisKey=@"UserId", OtherKey=@"Id", IsForeignKey=true)]
+		[DataMember(Order=4, EmitDefaultValue=false)]
+		public User User
+		{
+			get {
+				return _User.Entity;
+			}
+			set {
+				User previousValue = _User.Entity;
+				if ((previousValue != value) || (!_User.HasLoadedOrAssignedValue)) {
+					SendPropertyChanging();
+					if (previousValue != null) {
+						_User.Entity = null;
+						previousValue.ProblemUsers.Remove(this);
+					}
+					_User.Entity = value;
+					if (value != null) {
+						value.ProblemUsers.Add(this);
+						_UserId = value.Id;
+					}
+					else {
+						_UserId = default(Guid);
+					}
+					SendPropertyChanged("User");
+				}
+			}
+		}
+
+		#endregion
+		
+		#region Serialization
+		[OnDeserializing()]
+		[EditorBrowsableAttribute(EditorBrowsableState.Never)]
+		public  void OnDeserializing(StreamingContext context)
+		{
+			Initialize();
+		}
+		#endregion
+	}
+}
+
+namespace HeuristicLab.Services.OKB.DataAccess
+{	
+	[DataContract(IsReference=true)]
+	[Table(Name=@"dbo.Platform")]
+[KnownType(typeof(Platform))]	public partial class Platform : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		#region Property Change Event Handling
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		public virtual void SendPropertyChanging()
+		{
+			if (PropertyChanging != null) {
+				PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+			
+		public virtual void SendPropertyChanged(String propertyName)
+		{
+			if (PropertyChanged != null) {
+				PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+		#endregion
+		
+		#region Extensibility Method Definitions
+		partial void OnLoaded();
+		partial void OnValidate(ChangeAction action);
+		partial void OnCreated();
+		#endregion
+
+		#region Construction
+		public Platform()
+		{
+			Initialize();
+		}
+		
+		private void Initialize()
+		{
+			_Algorithms = new EntitySet<Algorithm>(attach_Algorithms, detach_Algorithms);
+			_Problems = new EntitySet<Problem>(attach_Problems, detach_Problems);
+			_DataTypes = new EntitySet<DataType>(attach_DataTypes, detach_DataTypes);
+			OnCreated();
+		}
+		#endregion
+
+		#region Column Mappings
+		partial void OnIdChanging(long value);
+		partial void OnIdChanged();
+		private long _Id;
+		[Column(Storage=@"_Id", AutoSync=AutoSync.OnInsert, DbType=@"BigInt NOT NULL IDENTITY", IsPrimaryKey=true, IsDbGenerated=true, UpdateCheck=UpdateCheck.Never)]
+		[DataMember(Order=1)]
+		public long Id
+		{
+			get { return _Id; }
+			set {
+				if (_Id != value) {
+					OnIdChanging(value);
+					SendPropertyChanging();
+					_Id = value;
+					SendPropertyChanged("Id");
+					OnIdChanged();
+				}
+			}
+		}
+		
+		partial void OnNameChanging(string value);
+		partial void OnNameChanged();
+		private string _Name;
+		[Column(Storage=@"_Name", DbType=@"NVarChar(200) NOT NULL", CanBeNull=false)]
+		[DataMember(Order=2)]
+		public string Name
+		{
+			get { return _Name; }
+			set {
+				if (_Name != value) {
+					OnNameChanging(value);
+					SendPropertyChanging();
+					_Name = value;
+					SendPropertyChanged("Name");
+					OnNameChanged();
+				}
+			}
+		}
+		
+		partial void OnDescriptionChanging(string value);
+		partial void OnDescriptionChanged();
+		private string _Description;
+		[Column(Storage=@"_Description", DbType=@"NVarChar(MAX)")]
+		[DataMember(Order=3)]
+		public string Description
+		{
+			get { return _Description; }
+			set {
+				if (_Description != value) {
+					OnDescriptionChanging(value);
+					SendPropertyChanging();
+					_Description = value;
+					SendPropertyChanged("Description");
+					OnDescriptionChanged();
+				}
+			}
+		}
+		
+		#endregion
+		
+		#region Associations
+		private EntitySet<Algorithm> _Algorithms;
+		[Association(Name=@"Platform_Algorithm", Storage=@"_Algorithms", ThisKey=@"Id", OtherKey=@"PlatformId")]
+		[DataMember(Order=4, EmitDefaultValue=false)]
+		public EntitySet<Algorithm> Algorithms
+		{
+			get {
+				if (serializing && !_Algorithms.HasLoadedOrAssignedValues) {
+					return null;
+				}
+				return _Algorithms;
+			}
+			set {
+				_Algorithms.Assign(value);
+			}
+		}
+
+		private void attach_Algorithms(Algorithm entity)
+		{
+			SendPropertyChanging();
+			entity.Platform = this;
+		}
+		
+		private void detach_Algorithms(Algorithm entity)
+		{
+			SendPropertyChanging();
+			entity.Platform = null;
+		}
+		private EntitySet<Problem> _Problems;
+		[Association(Name=@"Platform_Problem", Storage=@"_Problems", ThisKey=@"Id", OtherKey=@"PlatformId")]
+		[DataMember(Order=5, EmitDefaultValue=false)]
+		public EntitySet<Problem> Problems
+		{
+			get {
+				if (serializing && !_Problems.HasLoadedOrAssignedValues) {
+					return null;
+				}
+				return _Problems;
+			}
+			set {
+				_Problems.Assign(value);
+			}
+		}
+
+		private void attach_Problems(Problem entity)
+		{
+			SendPropertyChanging();
+			entity.Platform = this;
+		}
+		
+		private void detach_Problems(Problem entity)
+		{
+			SendPropertyChanging();
+			entity.Platform = null;
+		}
+		private EntitySet<DataType> _DataTypes;
+		[Association(Name=@"Platform_DataType", Storage=@"_DataTypes", ThisKey=@"Id", OtherKey=@"PlatformId")]
+		[DataMember(Order=6, EmitDefaultValue=false)]
+		public EntitySet<DataType> DataTypes
+		{
+			get {
+				if (serializing && !_DataTypes.HasLoadedOrAssignedValues) {
+					return null;
+				}
+				return _DataTypes;
+			}
+			set {
+				_DataTypes.Assign(value);
+			}
+		}
+
+		private void attach_DataTypes(DataType entity)
+		{
+			SendPropertyChanging();
+			entity.Platform = this;
+		}
+		
+		private void detach_DataTypes(DataType entity)
+		{
+			SendPropertyChanging();
+			entity.Platform = null;
+		}
+		#endregion
+		
+		#region Serialization
+		private bool serializing;
+		
+		[OnSerializing()]
+		[EditorBrowsableAttribute(EditorBrowsableState.Never)]
+		public void OnSerializing(StreamingContext context)
+		{
+			serializing = true;
+		}
+		
+		[OnSerialized()]
+		[EditorBrowsableAttribute(EditorBrowsableState.Never)]
+		public void OnSerialized(StreamingContext context)
+		{
+			serializing = false;
+		}
+		
+		[OnDeserializing()]
+		[EditorBrowsableAttribute(EditorBrowsableState.Never)]
+		public  void OnDeserializing(StreamingContext context)
+		{
+			Initialize();
+		}
+		#endregion
+	}
+}
+
+namespace HeuristicLab.Services.OKB.DataAccess
+{	
+	[DataContract(IsReference=true)]
+	[Table(Name=@"dbo.Run")]
+[KnownType(typeof(Run))]	public partial class Run : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		#region Property Change Event Handling
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		public virtual void SendPropertyChanging()
+		{
+			if (PropertyChanging != null) {
+				PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+			
+		public virtual void SendPropertyChanged(String propertyName)
+		{
+			if (PropertyChanged != null) {
+				PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+		#endregion
+		
+		#region Extensibility Method Definitions
+		partial void OnLoaded();
+		partial void OnValidate(ChangeAction action);
+		partial void OnCreated();
+		#endregion
+
+		#region Construction
+		public Run()
+		{
+			Initialize();
+		}
+		
+		private void Initialize()
+		{
+			_ResultBlobValues = new EntitySet<ResultBlobValue>(attach_ResultBlobValues, detach_ResultBlobValues);
+			_ResultBoolValues = new EntitySet<ResultBoolValue>(attach_ResultBoolValues, detach_ResultBoolValues);
+			_ResultFloatValues = new EntitySet<ResultFloatValue>(attach_ResultFloatValues, detach_ResultFloatValues);
+			_ResultIntValues = new EntitySet<ResultIntValue>(attach_ResultIntValues, detach_ResultIntValues);
+			_ResultStringValues = new EntitySet<ResultStringValue>(attach_ResultStringValues, detach_ResultStringValues);
+			_Experiment = default(EntityRef<Experiment>);
+			_User = default(EntityRef<User>);
+			_Client = default(EntityRef<Client>);
+			OnCreated();
+		}
+		#endregion
+
+		#region Column Mappings
+		partial void OnIdChanging(long value);
+		partial void OnIdChanged();
+		private long _Id;
+		[Column(Storage=@"_Id", AutoSync=AutoSync.OnInsert, DbType=@"BigInt NOT NULL IDENTITY", IsPrimaryKey=true, IsDbGenerated=true, UpdateCheck=UpdateCheck.Never)]
+		[DataMember(Order=1)]
+		public long Id
+		{
+			get { return _Id; }
+			set {
+				if (_Id != value) {
+					OnIdChanging(value);
+					SendPropertyChanging();
+					_Id = value;
+					SendPropertyChanged("Id");
+					OnIdChanged();
+				}
+			}
+		}
+		
+		partial void OnExperimentIdChanging(long value);
+		partial void OnExperimentIdChanged();
+		private long _ExperimentId;
+		[Column(Storage=@"_ExperimentId", DbType=@"BigInt NOT NULL", CanBeNull=false)]
+		[DataMember(Order=2)]
+		public long ExperimentId
+		{
+			get { return _ExperimentId; }
+			set {
+				if (_ExperimentId != value) {
+					if (_Experiment.HasLoadedOrAssignedValue) {
+						throw new ForeignKeyReferenceAlreadyHasValueException();
+					}
+					OnExperimentIdChanging(value);
+					SendPropertyChanging();
+					_ExperimentId = value;
+					SendPropertyChanged("ExperimentId");
+					OnExperimentIdChanged();
+				}
+			}
+		}
+		
+		partial void OnRandomSeedChanging(int value);
+		partial void OnRandomSeedChanged();
+		private int _RandomSeed;
+		[Column(Storage=@"_RandomSeed", DbType=@"Int NOT NULL", CanBeNull=false)]
+		[DataMember(Order=3)]
+		public int RandomSeed
+		{
+			get { return _RandomSeed; }
+			set {
+				if (_RandomSeed != value) {
+					OnRandomSeedChanging(value);
+					SendPropertyChanging();
+					_RandomSeed = value;
+					SendPropertyChanged("RandomSeed");
+					OnRandomSeedChanged();
+				}
+			}
+		}
+		
+		partial void OnFinishedDateChanging(DateTime? value);
+		partial void OnFinishedDateChanged();
+		private DateTime? _FinishedDate;
+		[Column(Storage=@"_FinishedDate", DbType=@"DateTime2")]
+		[DataMember(Order=4)]
+		public DateTime? FinishedDate
+		{
+			get { return _FinishedDate; }
+			set {
+				if (_FinishedDate != value) {
+					OnFinishedDateChanging(value);
+					SendPropertyChanging();
+					_FinishedDate = value;
+					SendPropertyChanged("FinishedDate");
+					OnFinishedDateChanged();
+				}
+			}
+		}
+		
+		partial void OnUserIdChanging(Guid value);
+		partial void OnUserIdChanged();
+		private Guid _UserId;
+		[Column(Storage=@"_UserId", DbType=@"UniqueIdentifier NOT NULL", CanBeNull=false)]
+		[DataMember(Order=5)]
+		public Guid UserId
+		{
+			get { return _UserId; }
+			set {
+				if (_UserId != value) {
+					if (_User.HasLoadedOrAssignedValue) {
+						throw new ForeignKeyReferenceAlreadyHasValueException();
+					}
+					OnUserIdChanging(value);
+					SendPropertyChanging();
+					_UserId = value;
+					SendPropertyChanged("UserId");
+					OnUserIdChanged();
+				}
+			}
+		}
+		
+		partial void OnClientIdChanging(Guid value);
+		partial void OnClientIdChanged();
+		private Guid _ClientId;
+		[Column(Storage=@"_ClientId", DbType=@"UniqueIdentifier NOT NULL", CanBeNull=false)]
+		[DataMember(Order=6)]
+		public Guid ClientId
+		{
+			get { return _ClientId; }
+			set {
+				if (_ClientId != value) {
+					if (_Client.HasLoadedOrAssignedValue) {
+						throw new ForeignKeyReferenceAlreadyHasValueException();
+					}
+					OnClientIdChanging(value);
+					SendPropertyChanging();
+					_ClientId = value;
+					SendPropertyChanged("ClientId");
+					OnClientIdChanged();
+				}
+			}
+		}
+		
+		#endregion
+		
+		#region Associations
+		private EntitySet<ResultBlobValue> _ResultBlobValues;
+		[Association(Name=@"Run_ResultBlobValue", Storage=@"_ResultBlobValues", ThisKey=@"Id", OtherKey=@"RunId")]
+		[DataMember(Order=7, EmitDefaultValue=false)]
+		public EntitySet<ResultBlobValue> ResultBlobValues
+		{
+			get {
+				if (serializing && !_ResultBlobValues.HasLoadedOrAssignedValues) {
+					return null;
+				}
+				return _ResultBlobValues;
+			}
+			set {
+				_ResultBlobValues.Assign(value);
+			}
+		}
+
+		private void attach_ResultBlobValues(ResultBlobValue entity)
+		{
+			SendPropertyChanging();
+			entity.Run = this;
+		}
+		
+		private void detach_ResultBlobValues(ResultBlobValue entity)
+		{
+			SendPropertyChanging();
+			entity.Run = null;
+		}
+		private EntitySet<ResultBoolValue> _ResultBoolValues;
+		[Association(Name=@"Run_ResultBoolValue", Storage=@"_ResultBoolValues", ThisKey=@"Id", OtherKey=@"RunId")]
+		[DataMember(Order=8, EmitDefaultValue=false)]
+		public EntitySet<ResultBoolValue> ResultBoolValues
+		{
+			get {
+				if (serializing && !_ResultBoolValues.HasLoadedOrAssignedValues) {
+					return null;
+				}
+				return _ResultBoolValues;
+			}
+			set {
+				_ResultBoolValues.Assign(value);
+			}
+		}
+
+		private void attach_ResultBoolValues(ResultBoolValue entity)
+		{
+			SendPropertyChanging();
+			entity.Run = this;
+		}
+		
+		private void detach_ResultBoolValues(ResultBoolValue entity)
+		{
+			SendPropertyChanging();
+			entity.Run = null;
+		}
+		private EntitySet<ResultFloatValue> _ResultFloatValues;
+		[Association(Name=@"Run_ResultFloatValue", Storage=@"_ResultFloatValues", ThisKey=@"Id", OtherKey=@"RunId")]
+		[DataMember(Order=9, EmitDefaultValue=false)]
+		public EntitySet<ResultFloatValue> ResultFloatValues
+		{
+			get {
+				if (serializing && !_ResultFloatValues.HasLoadedOrAssignedValues) {
+					return null;
+				}
+				return _ResultFloatValues;
+			}
+			set {
+				_ResultFloatValues.Assign(value);
+			}
+		}
+
+		private void attach_ResultFloatValues(ResultFloatValue entity)
+		{
+			SendPropertyChanging();
+			entity.Run = this;
+		}
+		
+		private void detach_ResultFloatValues(ResultFloatValue entity)
+		{
+			SendPropertyChanging();
+			entity.Run = null;
+		}
+		private EntitySet<ResultIntValue> _ResultIntValues;
+		[Association(Name=@"Run_ResultIntValue", Storage=@"_ResultIntValues", ThisKey=@"Id", OtherKey=@"RunId")]
+		[DataMember(Order=10, EmitDefaultValue=false)]
+		public EntitySet<ResultIntValue> ResultIntValues
+		{
+			get {
+				if (serializing && !_ResultIntValues.HasLoadedOrAssignedValues) {
+					return null;
+				}
+				return _ResultIntValues;
+			}
+			set {
+				_ResultIntValues.Assign(value);
+			}
+		}
+
+		private void attach_ResultIntValues(ResultIntValue entity)
+		{
+			SendPropertyChanging();
+			entity.Run = this;
+		}
+		
+		private void detach_ResultIntValues(ResultIntValue entity)
+		{
+			SendPropertyChanging();
+			entity.Run = null;
+		}
+		private EntitySet<ResultStringValue> _ResultStringValues;
+		[Association(Name=@"Run_ResultStringValue", Storage=@"_ResultStringValues", ThisKey=@"Id", OtherKey=@"RunId")]
+		[DataMember(Order=11, EmitDefaultValue=false)]
+		public EntitySet<ResultStringValue> ResultStringValues
+		{
+			get {
+				if (serializing && !_ResultStringValues.HasLoadedOrAssignedValues) {
+					return null;
+				}
+				return _ResultStringValues;
+			}
+			set {
+				_ResultStringValues.Assign(value);
+			}
+		}
+
+		private void attach_ResultStringValues(ResultStringValue entity)
+		{
+			SendPropertyChanging();
+			entity.Run = this;
+		}
+		
+		private void detach_ResultStringValues(ResultStringValue entity)
+		{
+			SendPropertyChanging();
+			entity.Run = null;
+		}
+		private EntityRef<Experiment> _Experiment;
+		[Association(Name=@"Experiment_Run", Storage=@"_Experiment", ThisKey=@"ExperimentId", OtherKey=@"Id", IsForeignKey=true)]
+		[DataMember(Order=12, EmitDefaultValue=false)]
+		public Experiment Experiment
+		{
+			get {
+				if (serializing && !_Experiment.HasLoadedOrAssignedValue) {
+					return null;
+				}
+				return _Experiment.Entity;
+			}
+			set {
+				Experiment previousValue = _Experiment.Entity;
+				if ((previousValue != value) || (!_Experiment.HasLoadedOrAssignedValue)) {
+					SendPropertyChanging();
+					if (previousValue != null) {
+						_Experiment.Entity = null;
+						previousValue.Runs.Remove(this);
+					}
+					_Experiment.Entity = value;
+					if (value != null) {
+						value.Runs.Add(this);
+						_ExperimentId = value.Id;
+					}
+					else {
+						_ExperimentId = default(long);
+					}
+					SendPropertyChanged("Experiment");
+				}
+			}
+		}
+
+		private EntityRef<User> _User;
+		[Association(Name=@"User_Run", Storage=@"_User", ThisKey=@"UserId", OtherKey=@"Id", IsForeignKey=true)]
+		[DataMember(Order=13, EmitDefaultValue=false)]
+		public User User
+		{
+			get {
+				if (serializing && !_User.HasLoadedOrAssignedValue) {
+					return null;
+				}
+				return _User.Entity;
+			}
+			set {
+				User previousValue = _User.Entity;
+				if ((previousValue != value) || (!_User.HasLoadedOrAssignedValue)) {
+					SendPropertyChanging();
+					if (previousValue != null) {
+						_User.Entity = null;
+						previousValue.Runs.Remove(this);
+					}
+					_User.Entity = value;
+					if (value != null) {
+						value.Runs.Add(this);
+						_UserId = value.Id;
+					}
+					else {
+						_UserId = default(Guid);
+					}
+					SendPropertyChanged("User");
+				}
+			}
+		}
+
+		private EntityRef<Client> _Client;
+		[Association(Name=@"Client_Run", Storage=@"_Client", ThisKey=@"ClientId", OtherKey=@"Id", IsForeignKey=true)]
+		[DataMember(Order=14, EmitDefaultValue=false)]
+		public Client Client
+		{
+			get {
+				if (serializing && !_Client.HasLoadedOrAssignedValue) {
+					return null;
+				}
+				return _Client.Entity;
+			}
+			set {
+				Client previousValue = _Client.Entity;
+				if ((previousValue != value) || (!_Client.HasLoadedOrAssignedValue)) {
+					SendPropertyChanging();
+					if (previousValue != null) {
+						_Client.Entity = null;
+						previousValue.Runs.Remove(this);
+					}
+					_Client.Entity = value;
+					if (value != null) {
+						value.Runs.Add(this);
+						_ClientId = value.Id;
+					}
+					else {
+						_ClientId = default(Guid);
+					}
+					SendPropertyChanged("Client");
+				}
+			}
+		}
+
+		#endregion
+		
+		#region Serialization
+		private bool serializing;
+		
+		[OnSerializing()]
+		[EditorBrowsableAttribute(EditorBrowsableState.Never)]
+		public void OnSerializing(StreamingContext context)
+		{
+			serializing = true;
+		}
+		
+		[OnSerialized()]
+		[EditorBrowsableAttribute(EditorBrowsableState.Never)]
+		public void OnSerialized(StreamingContext context)
+		{
+			serializing = false;
+		}
+		
+		[OnDeserializing()]
+		[EditorBrowsableAttribute(EditorBrowsableState.Never)]
+		public  void OnDeserializing(StreamingContext context)
+		{
+			Initialize();
+		}
+		#endregion
+	}
+}
+
+namespace HeuristicLab.Services.OKB.DataAccess
+{	
+	[DataContract(IsReference=true)]
+	[Table(Name=@"dbo.Result")]
+[KnownType(typeof(Result))]	public partial class Result : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		#region Property Change Event Handling
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		public virtual void SendPropertyChanging()
+		{
+			if (PropertyChanging != null) {
+				PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+			
+		public virtual void SendPropertyChanged(String propertyName)
+		{
+			if (PropertyChanged != null) {
+				PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+		#endregion
+		
+		#region Extensibility Method Definitions
+		partial void OnLoaded();
+		partial void OnValidate(ChangeAction action);
+		partial void OnCreated();
+		#endregion
+
+		#region Construction
+		public Result()
+		{
+			Initialize();
+		}
+		
+		private void Initialize()
+		{
+			_ResultBlobValues = new EntitySet<ResultBlobValue>(attach_ResultBlobValues, detach_ResultBlobValues);
+			_ResultBoolValues = new EntitySet<ResultBoolValue>(attach_ResultBoolValues, detach_ResultBoolValues);
+			_ResultFloatValues = new EntitySet<ResultFloatValue>(attach_ResultFloatValues, detach_ResultFloatValues);
+			_ResultIntValues = new EntitySet<ResultIntValue>(attach_ResultIntValues, detach_ResultIntValues);
+			_ResultStringValues = new EntitySet<ResultStringValue>(attach_ResultStringValues, detach_ResultStringValues);
+			_Algorithm = default(EntityRef<Algorithm>);
+			_DataType = default(EntityRef<DataType>);
+			OnCreated();
+		}
+		#endregion
+
+		#region Column Mappings
+		partial void OnIdChanging(long value);
+		partial void OnIdChanged();
+		private long _Id;
+		[Column(Storage=@"_Id", AutoSync=AutoSync.OnInsert, DbType=@"BigInt NOT NULL IDENTITY", IsPrimaryKey=true, IsDbGenerated=true, UpdateCheck=UpdateCheck.Never)]
+		[DataMember(Order=1)]
+		public long Id
+		{
+			get { return _Id; }
+			set {
+				if (_Id != value) {
+					OnIdChanging(value);
+					SendPropertyChanging();
+					_Id = value;
+					SendPropertyChanged("Id");
+					OnIdChanged();
+				}
+			}
+		}
+		
+		partial void OnAlgorithmIdChanging(long value);
+		partial void OnAlgorithmIdChanged();
+		private long _AlgorithmId;
+		[Column(Storage=@"_AlgorithmId", DbType=@"BigInt NOT NULL", CanBeNull=false)]
+		[DataMember(Order=2)]
+		public long AlgorithmId
+		{
+			get { return _AlgorithmId; }
+			set {
+				if (_AlgorithmId != value) {
+					if (_Algorithm.HasLoadedOrAssignedValue) {
+						throw new ForeignKeyReferenceAlreadyHasValueException();
+					}
+					OnAlgorithmIdChanging(value);
+					SendPropertyChanging();
+					_AlgorithmId = value;
+					SendPropertyChanged("AlgorithmId");
+					OnAlgorithmIdChanged();
+				}
+			}
+		}
+		
+		partial void OnNameChanging(string value);
+		partial void OnNameChanged();
+		private string _Name;
+		[Column(Storage=@"_Name", DbType=@"NVarChar(200) NOT NULL", CanBeNull=false)]
+		[DataMember(Order=3)]
+		public string Name
+		{
+			get { return _Name; }
+			set {
+				if (_Name != value) {
+					OnNameChanging(value);
+					SendPropertyChanging();
+					_Name = value;
+					SendPropertyChanged("Name");
+					OnNameChanged();
+				}
+			}
+		}
+		
+		partial void OnAliasChanging(string value);
+		partial void OnAliasChanged();
+		private string _Alias;
+		[Column(Storage=@"_Alias", DbType=@"NVarChar(200)")]
+		[DataMember(Order=4)]
+		public string Alias
+		{
+			get { return _Alias; }
+			set {
+				if (_Alias != value) {
+					OnAliasChanging(value);
+					SendPropertyChanging();
+					_Alias = value;
+					SendPropertyChanged("Alias");
+					OnAliasChanged();
+				}
+			}
+		}
+		
+		partial void OnDescriptionChanging(string value);
+		partial void OnDescriptionChanged();
+		private string _Description;
+		[Column(Storage=@"_Description", DbType=@"NVarChar(MAX)")]
+		[DataMember(Order=5)]
+		public string Description
+		{
+			get { return _Description; }
+			set {
+				if (_Description != value) {
+					OnDescriptionChanging(value);
+					SendPropertyChanging();
+					_Description = value;
+					SendPropertyChanged("Description");
+					OnDescriptionChanged();
+				}
+			}
+		}
+		
+		partial void OnDataTypeIdChanging(long value);
+		partial void OnDataTypeIdChanged();
+		private long _DataTypeId;
+		[Column(Storage=@"_DataTypeId", DbType=@"BigInt NOT NULL", CanBeNull=false)]
+		[DataMember(Order=6)]
+		public long DataTypeId
+		{
+			get { return _DataTypeId; }
+			set {
+				if (_DataTypeId != value) {
+					if (_DataType.HasLoadedOrAssignedValue) {
+						throw new ForeignKeyReferenceAlreadyHasValueException();
+					}
+					OnDataTypeIdChanging(value);
+					SendPropertyChanging();
+					_DataTypeId = value;
+					SendPropertyChanged("DataTypeId");
+					OnDataTypeIdChanged();
+				}
+			}
+		}
+		
+		#endregion
+		
+		#region Associations
+		private EntitySet<ResultBlobValue> _ResultBlobValues;
+		[Association(Name=@"Result_ResultBlobValue", Storage=@"_ResultBlobValues", ThisKey=@"Id", OtherKey=@"ResultId")]
+		[DataMember(Order=7, EmitDefaultValue=false)]
+		public EntitySet<ResultBlobValue> ResultBlobValues
+		{
+			get {
+				if (serializing && !_ResultBlobValues.HasLoadedOrAssignedValues) {
+					return null;
+				}
+				return _ResultBlobValues;
+			}
+			set {
+				_ResultBlobValues.Assign(value);
+			}
+		}
+
+		private void attach_ResultBlobValues(ResultBlobValue entity)
+		{
+			SendPropertyChanging();
+			entity.Result = this;
+		}
+		
+		private void detach_ResultBlobValues(ResultBlobValue entity)
+		{
+			SendPropertyChanging();
+			entity.Result = null;
+		}
+		private EntitySet<ResultBoolValue> _ResultBoolValues;
+		[Association(Name=@"Result_ResultBoolValue", Storage=@"_ResultBoolValues", ThisKey=@"Id", OtherKey=@"ResultId")]
+		[DataMember(Order=8, EmitDefaultValue=false)]
+		public EntitySet<ResultBoolValue> ResultBoolValues
+		{
+			get {
+				if (serializing && !_ResultBoolValues.HasLoadedOrAssignedValues) {
+					return null;
+				}
+				return _ResultBoolValues;
+			}
+			set {
+				_ResultBoolValues.Assign(value);
+			}
+		}
+
+		private void attach_ResultBoolValues(ResultBoolValue entity)
+		{
+			SendPropertyChanging();
+			entity.Result = this;
+		}
+		
+		private void detach_ResultBoolValues(ResultBoolValue entity)
+		{
+			SendPropertyChanging();
+			entity.Result = null;
+		}
+		private EntitySet<ResultFloatValue> _ResultFloatValues;
+		[Association(Name=@"Result_ResultFloatValue", Storage=@"_ResultFloatValues", ThisKey=@"Id", OtherKey=@"ResultId")]
+		[DataMember(Order=9, EmitDefaultValue=false)]
+		public EntitySet<ResultFloatValue> ResultFloatValues
+		{
+			get {
+				if (serializing && !_ResultFloatValues.HasLoadedOrAssignedValues) {
+					return null;
+				}
+				return _ResultFloatValues;
+			}
+			set {
+				_ResultFloatValues.Assign(value);
+			}
+		}
+
+		private void attach_ResultFloatValues(ResultFloatValue entity)
+		{
+			SendPropertyChanging();
+			entity.Result = this;
+		}
+		
+		private void detach_ResultFloatValues(ResultFloatValue entity)
+		{
+			SendPropertyChanging();
+			entity.Result = null;
+		}
+		private EntitySet<ResultIntValue> _ResultIntValues;
+		[Association(Name=@"Result_ResultIntValue", Storage=@"_ResultIntValues", ThisKey=@"Id", OtherKey=@"ResultId")]
+		[DataMember(Order=10, EmitDefaultValue=false)]
+		public EntitySet<ResultIntValue> ResultIntValues
+		{
+			get {
+				if (serializing && !_ResultIntValues.HasLoadedOrAssignedValues) {
+					return null;
+				}
+				return _ResultIntValues;
+			}
+			set {
+				_ResultIntValues.Assign(value);
+			}
+		}
+
+		private void attach_ResultIntValues(ResultIntValue entity)
+		{
+			SendPropertyChanging();
+			entity.Result = this;
+		}
+		
+		private void detach_ResultIntValues(ResultIntValue entity)
+		{
+			SendPropertyChanging();
+			entity.Result = null;
+		}
+		private EntitySet<ResultStringValue> _ResultStringValues;
+		[Association(Name=@"Result_ResultStringValue", Storage=@"_ResultStringValues", ThisKey=@"Id", OtherKey=@"ResultId")]
+		[DataMember(Order=11, EmitDefaultValue=false)]
+		public EntitySet<ResultStringValue> ResultStringValues
+		{
+			get {
+				if (serializing && !_ResultStringValues.HasLoadedOrAssignedValues) {
+					return null;
+				}
+				return _ResultStringValues;
+			}
+			set {
+				_ResultStringValues.Assign(value);
+			}
+		}
+
+		private void attach_ResultStringValues(ResultStringValue entity)
+		{
+			SendPropertyChanging();
+			entity.Result = this;
+		}
+		
+		private void detach_ResultStringValues(ResultStringValue entity)
+		{
+			SendPropertyChanging();
+			entity.Result = null;
+		}
+		private EntityRef<Algorithm> _Algorithm;
+		[Association(Name=@"Algorithm_Result", Storage=@"_Algorithm", ThisKey=@"AlgorithmId", OtherKey=@"Id", IsForeignKey=true)]
+		[DataMember(Order=12, EmitDefaultValue=false)]
+		public Algorithm Algorithm
+		{
+			get {
+				if (serializing && !_Algorithm.HasLoadedOrAssignedValue) {
+					return null;
+				}
+				return _Algorithm.Entity;
+			}
+			set {
+				Algorithm previousValue = _Algorithm.Entity;
+				if ((previousValue != value) || (!_Algorithm.HasLoadedOrAssignedValue)) {
+					SendPropertyChanging();
+					if (previousValue != null) {
+						_Algorithm.Entity = null;
+						previousValue.Results.Remove(this);
+					}
+					_Algorithm.Entity = value;
+					if (value != null) {
+						value.Results.Add(this);
+						_AlgorithmId = value.Id;
+					}
+					else {
+						_AlgorithmId = default(long);
+					}
+					SendPropertyChanged("Algorithm");
+				}
+			}
+		}
+
+		private EntityRef<DataType> _DataType;
+		[Association(Name=@"DataType_Result", Storage=@"_DataType", ThisKey=@"DataTypeId", OtherKey=@"Id", IsForeignKey=true)]
+		[DataMember(Order=13, EmitDefaultValue=false)]
+		public DataType DataType
+		{
+			get {
+				if (serializing && !_DataType.HasLoadedOrAssignedValue) {
+					return null;
+				}
+				return _DataType.Entity;
+			}
+			set {
+				DataType previousValue = _DataType.Entity;
+				if ((previousValue != value) || (!_DataType.HasLoadedOrAssignedValue)) {
+					SendPropertyChanging();
+					if (previousValue != null) {
+						_DataType.Entity = null;
+						previousValue.Results.Remove(this);
+					}
+					_DataType.Entity = value;
+					if (value != null) {
+						value.Results.Add(this);
+						_DataTypeId = value.Id;
+					}
+					else {
+						_DataTypeId = default(long);
+					}
+					SendPropertyChanged("DataType");
+				}
+			}
+		}
+
+		#endregion
+		
+		#region Serialization
+		private bool serializing;
+		
+		[OnSerializing()]
+		[EditorBrowsableAttribute(EditorBrowsableState.Never)]
+		public void OnSerializing(StreamingContext context)
+		{
+			serializing = true;
+		}
+		
+		[OnSerialized()]
+		[EditorBrowsableAttribute(EditorBrowsableState.Never)]
+		public void OnSerialized(StreamingContext context)
+		{
+			serializing = false;
+		}
+		
+		[OnDeserializing()]
+		[EditorBrowsableAttribute(EditorBrowsableState.Never)]
+		public  void OnDeserializing(StreamingContext context)
+		{
+			Initialize();
+		}
+		#endregion
+	}
+}
+
+namespace HeuristicLab.Services.OKB.DataAccess
+{	
+	[DataContract(IsReference=true)]
+	[Table(Name=@"dbo.Client")]
+[KnownType(typeof(Client))]	public partial class Client : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		#region Property Change Event Handling
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		public virtual void SendPropertyChanging()
+		{
+			if (PropertyChanging != null) {
+				PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+			
+		public virtual void SendPropertyChanged(String propertyName)
+		{
+			if (PropertyChanged != null) {
+				PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+		#endregion
+		
+		#region Extensibility Method Definitions
+		partial void OnLoaded();
+		partial void OnValidate(ChangeAction action);
+		partial void OnCreated();
+		#endregion
+
+		#region Construction
+		public Client()
+		{
+			Initialize();
+		}
+		
+		private void Initialize()
+		{
+			_Runs = new EntitySet<Run>(attach_Runs, detach_Runs);
+			OnCreated();
+		}
+		#endregion
+
+		#region Column Mappings
+		partial void OnIdChanging(Guid value);
+		partial void OnIdChanged();
+		private Guid _Id;
+		[Column(Storage=@"_Id", DbType=@"UniqueIdentifier NOT NULL", IsPrimaryKey=true, UpdateCheck=UpdateCheck.Never)]
+		[DataMember(Order=1)]
+		public Guid Id
+		{
+			get { return _Id; }
+			set {
+				if (_Id != value) {
+					OnIdChanging(value);
+					SendPropertyChanging();
+					_Id = value;
+					SendPropertyChanged("Id");
+					OnIdChanged();
+				}
+			}
+		}
+		
+		partial void OnNameChanging(string value);
+		partial void OnNameChanged();
+		private string _Name;
+		[Column(Storage=@"_Name", DbType=@"NVarChar(200) NOT NULL", CanBeNull=false)]
+		[DataMember(Order=2)]
+		public string Name
+		{
+			get { return _Name; }
+			set {
+				if (_Name != value) {
+					OnNameChanging(value);
+					SendPropertyChanging();
+					_Name = value;
+					SendPropertyChanged("Name");
+					OnNameChanged();
+				}
+			}
+		}
+		
+		#endregion
+		
+		#region Associations
+		private EntitySet<Run> _Runs;
+		[Association(Name=@"Client_Run", Storage=@"_Runs", ThisKey=@"Id", OtherKey=@"ClientId")]
+		[DataMember(Order=3, EmitDefaultValue=false)]
+		public EntitySet<Run> Runs
+		{
+			get {
+				if (serializing && !_Runs.HasLoadedOrAssignedValues) {
+					return null;
+				}
+				return _Runs;
+			}
+			set {
+				_Runs.Assign(value);
+			}
+		}
+
+		private void attach_Runs(Run entity)
+		{
+			SendPropertyChanging();
+			entity.Client = this;
+		}
+		
+		private void detach_Runs(Run entity)
+		{
+			SendPropertyChanging();
+			entity.Client = null;
+		}
+		#endregion
+		
+		#region Serialization
+		private bool serializing;
+		
+		[OnSerializing()]
+		[EditorBrowsableAttribute(EditorBrowsableState.Never)]
+		public void OnSerializing(StreamingContext context)
+		{
+			serializing = true;
+		}
+		
+		[OnSerialized()]
+		[EditorBrowsableAttribute(EditorBrowsableState.Never)]
+		public void OnSerialized(StreamingContext context)
+		{
+			serializing = false;
+		}
+		
+		[OnDeserializing()]
+		[EditorBrowsableAttribute(EditorBrowsableState.Never)]
+		public  void OnDeserializing(StreamingContext context)
+		{
+			Initialize();
+		}
+		#endregion
+	}
+}
+
+namespace HeuristicLab.Services.OKB.DataAccess
+{	
+	[DataContract(IsReference=true)]
+	[Table(Name=@"dbo.AlgorithmParameterBlobValue")]
+[KnownType(typeof(AlgorithmParameterBlobValue))]	public partial class AlgorithmParameterBlobValue : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		#region Property Change Event Handling
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		public virtual void SendPropertyChanging()
+		{
+			if (PropertyChanging != null) {
+				PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+			
+		public virtual void SendPropertyChanged(String propertyName)
+		{
+			if (PropertyChanged != null) {
+				PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+		#endregion
+		
+		#region Extensibility Method Definitions
+		partial void OnLoaded();
+		partial void OnValidate(ChangeAction action);
+		partial void OnCreated();
+		#endregion
+
+		#region Construction
+		public AlgorithmParameterBlobValue()
+		{
+			Initialize();
+		}
+		
+		private void Initialize()
+		{
+			_AlgorithmParameter = default(EntityRef<AlgorithmParameter>);
+			_Experiment = default(EntityRef<Experiment>);
+			_DataType = default(EntityRef<DataType>);
+			OnCreated();
+		}
+		#endregion
+
+		#region Column Mappings
+		partial void OnAlgorithmParameterIdChanging(long value);
+		partial void OnAlgorithmParameterIdChanged();
+		private long _AlgorithmParameterId;
+		[Column(Storage=@"_AlgorithmParameterId", DbType=@"BigInt NOT NULL", IsPrimaryKey=true, UpdateCheck=UpdateCheck.Never)]
+		[DataMember(Order=1)]
+		public long AlgorithmParameterId
+		{
+			get { return _AlgorithmParameterId; }
+			set {
+				if (_AlgorithmParameterId != value) {
+					if (_AlgorithmParameter.HasLoadedOrAssignedValue) {
+						throw new ForeignKeyReferenceAlreadyHasValueException();
+					}
+					OnAlgorithmParameterIdChanging(value);
+					SendPropertyChanging();
+					_AlgorithmParameterId = value;
+					SendPropertyChanged("AlgorithmParameterId");
+					OnAlgorithmParameterIdChanged();
+				}
+			}
+		}
+		
+		partial void OnExperimentIdChanging(long value);
+		partial void OnExperimentIdChanged();
+		private long _ExperimentId;
+		[Column(Storage=@"_ExperimentId", DbType=@"BigInt NOT NULL", IsPrimaryKey=true, UpdateCheck=UpdateCheck.Never)]
+		[DataMember(Order=2)]
+		public long ExperimentId
+		{
+			get { return _ExperimentId; }
+			set {
+				if (_ExperimentId != value) {
+					if (_Experiment.HasLoadedOrAssignedValue) {
+						throw new ForeignKeyReferenceAlreadyHasValueException();
+					}
+					OnExperimentIdChanging(value);
+					SendPropertyChanging();
+					_ExperimentId = value;
+					SendPropertyChanged("ExperimentId");
+					OnExperimentIdChanged();
+				}
+			}
+		}
+		
+		partial void OnDataTypeIdChanging(long value);
+		partial void OnDataTypeIdChanged();
+		private long _DataTypeId;
+		[Column(Storage=@"_DataTypeId", DbType=@"BigInt NOT NULL", CanBeNull=false)]
+		[DataMember(Order=3)]
+		public long DataTypeId
+		{
+			get { return _DataTypeId; }
+			set {
+				if (_DataTypeId != value) {
+					if (_DataType.HasLoadedOrAssignedValue) {
+						throw new ForeignKeyReferenceAlreadyHasValueException();
+					}
+					OnDataTypeIdChanging(value);
+					SendPropertyChanging();
+					_DataTypeId = value;
+					SendPropertyChanged("DataTypeId");
+					OnDataTypeIdChanged();
+				}
+			}
+		}
+		
+		partial void OnValueChanging(Binary value);
+		partial void OnValueChanged();
+		private Binary _Value;
+		[Column(Storage=@"_Value", DbType=@"VarBinary(MAX) NOT NULL", CanBeNull=false, UpdateCheck=UpdateCheck.Never)]
+		[DataMember(Order=4)]
+		public Binary Value
+		{
+			get { return _Value; }
+			set {
+				if (_Value != value) {
+					OnValueChanging(value);
+					SendPropertyChanging();
+					_Value = value;
+					SendPropertyChanged("Value");
+					OnValueChanged();
+				}
+			}
+		}
+		
+		#endregion
+		
+		#region Associations
+		private EntityRef<AlgorithmParameter> _AlgorithmParameter;
+		[Association(Name=@"AlgorithmParameter_AlgorithmParameterBlobValue", Storage=@"_AlgorithmParameter", ThisKey=@"AlgorithmParameterId", OtherKey=@"Id", IsForeignKey=true)]
+		[DataMember(Order=5, EmitDefaultValue=false)]
+		public AlgorithmParameter AlgorithmParameter
+		{
+			get {
+				return _AlgorithmParameter.Entity;
+			}
+			set {
+				AlgorithmParameter previousValue = _AlgorithmParameter.Entity;
+				if ((previousValue != value) || (!_AlgorithmParameter.HasLoadedOrAssignedValue)) {
+					SendPropertyChanging();
+					if (previousValue != null) {
+						_AlgorithmParameter.Entity = null;
+						previousValue.AlgorithmParameterBlobValues.Remove(this);
+					}
+					_AlgorithmParameter.Entity = value;
+					if (value != null) {
+						value.AlgorithmParameterBlobValues.Add(this);
+						_AlgorithmParameterId = value.Id;
+					}
+					else {
+						_AlgorithmParameterId = default(long);
+					}
+					SendPropertyChanged("AlgorithmParameter");
+				}
+			}
+		}
+
+		private EntityRef<Experiment> _Experiment;
+		[Association(Name=@"Experiment_AlgorithmParameterBlobValue", Storage=@"_Experiment", ThisKey=@"ExperimentId", OtherKey=@"Id", IsForeignKey=true)]
+		[DataMember(Order=6, EmitDefaultValue=false)]
+		public Experiment Experiment
+		{
+			get {
+				return _Experiment.Entity;
+			}
+			set {
+				Experiment previousValue = _Experiment.Entity;
+				if ((previousValue != value) || (!_Experiment.HasLoadedOrAssignedValue)) {
+					SendPropertyChanging();
+					if (previousValue != null) {
+						_Experiment.Entity = null;
+						previousValue.AlgorithmParameterBlobValues.Remove(this);
+					}
+					_Experiment.Entity = value;
+					if (value != null) {
+						value.AlgorithmParameterBlobValues.Add(this);
+						_ExperimentId = value.Id;
+					}
+					else {
+						_ExperimentId = default(long);
+					}
+					SendPropertyChanged("Experiment");
+				}
+			}
+		}
+
+		private EntityRef<DataType> _DataType;
+		[Association(Name=@"DataType_AlgorithmParameterBlobValue", Storage=@"_DataType", ThisKey=@"DataTypeId", OtherKey=@"Id", IsForeignKey=true)]
+		[DataMember(Order=7, EmitDefaultValue=false)]
+		public DataType DataType
+		{
+			get {
+				return _DataType.Entity;
+			}
+			set {
+				DataType previousValue = _DataType.Entity;
+				if ((previousValue != value) || (!_DataType.HasLoadedOrAssignedValue)) {
+					SendPropertyChanging();
+					if (previousValue != null) {
+						_DataType.Entity = null;
+						previousValue.AlgorithmParameterBlobValues.Remove(this);
+					}
+					_DataType.Entity = value;
+					if (value != null) {
+						value.AlgorithmParameterBlobValues.Add(this);
+						_DataTypeId = value.Id;
+					}
+					else {
+						_DataTypeId = default(long);
+					}
+					SendPropertyChanged("DataType");
+				}
+			}
+		}
+
+		#endregion
+		
+		#region Serialization
+		[OnDeserializing()]
+		[EditorBrowsableAttribute(EditorBrowsableState.Never)]
+		public  void OnDeserializing(StreamingContext context)
+		{
+			Initialize();
+		}
+		#endregion
+	}
+}
+
+namespace HeuristicLab.Services.OKB.DataAccess
+{	
+	[DataContract(IsReference=true)]
+	[Table(Name=@"dbo.DataType")]
+[KnownType(typeof(DataType))]	public partial class DataType : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		#region Property Change Event Handling
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		public virtual void SendPropertyChanging()
+		{
+			if (PropertyChanging != null) {
+				PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+			
+		public virtual void SendPropertyChanged(String propertyName)
+		{
+			if (PropertyChanged != null) {
+				PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+		#endregion
+		
+		#region Extensibility Method Definitions
+		partial void OnLoaded();
+		partial void OnValidate(ChangeAction action);
+		partial void OnCreated();
+		#endregion
+
+		#region Construction
+		public DataType()
+		{
+			Initialize();
+		}
+		
+		private void Initialize()
+		{
+			_AlgorithmParameters = new EntitySet<AlgorithmParameter>(attach_AlgorithmParameters, detach_AlgorithmParameters);
+			_ProblemParameters = new EntitySet<ProblemParameter>(attach_ProblemParameters, detach_ProblemParameters);
+			_Results = new EntitySet<Result>(attach_Results, detach_Results);
+			_AlgorithmParameterBlobValues = new EntitySet<AlgorithmParameterBlobValue>(attach_AlgorithmParameterBlobValues, detach_AlgorithmParameterBlobValues);
+			_AlgorithmParameterBoolValues = new EntitySet<AlgorithmParameterBoolValue>(attach_AlgorithmParameterBoolValues, detach_AlgorithmParameterBoolValues);
+			_AlgorithmParameterFloatValues = new EntitySet<AlgorithmParameterFloatValue>(attach_AlgorithmParameterFloatValues, detach_AlgorithmParameterFloatValues);
+			_AlgorithmParameterIntValues = new EntitySet<AlgorithmParameterIntValue>(attach_AlgorithmParameterIntValues, detach_AlgorithmParameterIntValues);
+			_AlgorithmParameterStringValues = new EntitySet<AlgorithmParameterStringValue>(attach_AlgorithmParameterStringValues, detach_AlgorithmParameterStringValues);
+			_ProblemParameterBlobValues = new EntitySet<ProblemParameterBlobValue>(attach_ProblemParameterBlobValues, detach_ProblemParameterBlobValues);
+			_ProblemParameterBoolValues = new EntitySet<ProblemParameterBoolValue>(attach_ProblemParameterBoolValues, detach_ProblemParameterBoolValues);
+			_ProblemParameterFloatValues = new EntitySet<ProblemParameterFloatValue>(attach_ProblemParameterFloatValues, detach_ProblemParameterFloatValues);
+			_ProblemParameterIntValues = new EntitySet<ProblemParameterIntValue>(attach_ProblemParameterIntValues, detach_ProblemParameterIntValues);
+			_ProblemParameterStringValues = new EntitySet<ProblemParameterStringValue>(attach_ProblemParameterStringValues, detach_ProblemParameterStringValues);
+			_ResultBlobValues = new EntitySet<ResultBlobValue>(attach_ResultBlobValues, detach_ResultBlobValues);
+			_ResultBoolValues = new EntitySet<ResultBoolValue>(attach_ResultBoolValues, detach_ResultBoolValues);
+			_ResultFloatValues = new EntitySet<ResultFloatValue>(attach_ResultFloatValues, detach_ResultFloatValues);
+			_ResultIntValues = new EntitySet<ResultIntValue>(attach_ResultIntValues, detach_ResultIntValues);
+			_ResultStringValues = new EntitySet<ResultStringValue>(attach_ResultStringValues, detach_ResultStringValues);
+			_Platform = default(EntityRef<Platform>);
+			OnCreated();
+		}
+		#endregion
+
+		#region Column Mappings
+		partial void OnIdChanging(long value);
+		partial void OnIdChanged();
+		private long _Id;
+		[Column(Storage=@"_Id", AutoSync=AutoSync.OnInsert, DbType=@"BigInt NOT NULL IDENTITY", IsPrimaryKey=true, IsDbGenerated=true, UpdateCheck=UpdateCheck.Never)]
+		[DataMember(Order=1)]
+		public long Id
+		{
+			get { return _Id; }
+			set {
+				if (_Id != value) {
+					OnIdChanging(value);
+					SendPropertyChanging();
+					_Id = value;
+					SendPropertyChanged("Id");
+					OnIdChanged();
+				}
+			}
+		}
+		
+		partial void OnPlatformIdChanging(long value);
+		partial void OnPlatformIdChanged();
+		private long _PlatformId;
+		[Column(Storage=@"_PlatformId", DbType=@"BigInt NOT NULL", CanBeNull=false)]
+		[DataMember(Order=2)]
+		public long PlatformId
+		{
+			get { return _PlatformId; }
+			set {
+				if (_PlatformId != value) {
+					if (_Platform.HasLoadedOrAssignedValue) {
+						throw new ForeignKeyReferenceAlreadyHasValueException();
+					}
+					OnPlatformIdChanging(value);
+					SendPropertyChanging();
+					_PlatformId = value;
+					SendPropertyChanged("PlatformId");
+					OnPlatformIdChanged();
+				}
+			}
+		}
+		
+		partial void OnNameChanging(string value);
+		partial void OnNameChanged();
+		private string _Name;
+		[Column(Storage=@"_Name", DbType=@"NVarChar(MAX) NOT NULL", CanBeNull=false)]
+		[DataMember(Order=3)]
+		public string Name
+		{
+			get { return _Name; }
+			set {
+				if (_Name != value) {
+					OnNameChanging(value);
+					SendPropertyChanging();
+					_Name = value;
+					SendPropertyChanged("Name");
+					OnNameChanged();
+				}
+			}
+		}
+		
+		partial void OnSqlNameChanging(string value);
+		partial void OnSqlNameChanged();
+		private string _SqlName;
+		[Column(Storage=@"_SqlName", DbType=@"NVarChar(200) NOT NULL", CanBeNull=false)]
+		[DataMember(Order=4)]
+		public string SqlName
+		{
+			get { return _SqlName; }
+			set {
+				if (_SqlName != value) {
+					OnSqlNameChanging(value);
+					SendPropertyChanging();
+					_SqlName = value;
+					SendPropertyChanged("SqlName");
+					OnSqlNameChanged();
+				}
+			}
+		}
+		
+		#endregion
+		
+		#region Associations
+		private EntitySet<AlgorithmParameter> _AlgorithmParameters;
+		[Association(Name=@"DataType_AlgorithmParameter", Storage=@"_AlgorithmParameters", ThisKey=@"Id", OtherKey=@"DataTypeId")]
+		[DataMember(Order=5, EmitDefaultValue=false)]
+		public EntitySet<AlgorithmParameter> AlgorithmParameters
+		{
+			get {
+				if (serializing && !_AlgorithmParameters.HasLoadedOrAssignedValues) {
+					return null;
+				}
+				return _AlgorithmParameters;
+			}
+			set {
+				_AlgorithmParameters.Assign(value);
+			}
+		}
+
+		private void attach_AlgorithmParameters(AlgorithmParameter entity)
+		{
+			SendPropertyChanging();
+			entity.DataType = this;
+		}
+		
+		private void detach_AlgorithmParameters(AlgorithmParameter entity)
+		{
+			SendPropertyChanging();
+			entity.DataType = null;
+		}
+		private EntitySet<ProblemParameter> _ProblemParameters;
+		[Association(Name=@"DataType_ProblemParameter", Storage=@"_ProblemParameters", ThisKey=@"Id", OtherKey=@"DataTypeId")]
+		[DataMember(Order=6, EmitDefaultValue=false)]
+		public EntitySet<ProblemParameter> ProblemParameters
+		{
+			get {
+				if (serializing && !_ProblemParameters.HasLoadedOrAssignedValues) {
+					return null;
+				}
+				return _ProblemParameters;
+			}
+			set {
+				_ProblemParameters.Assign(value);
+			}
+		}
+
+		private void attach_ProblemParameters(ProblemParameter entity)
+		{
+			SendPropertyChanging();
+			entity.DataType = this;
+		}
+		
+		private void detach_ProblemParameters(ProblemParameter entity)
+		{
+			SendPropertyChanging();
+			entity.DataType = null;
+		}
+		private EntitySet<Result> _Results;
+		[Association(Name=@"DataType_Result", Storage=@"_Results", ThisKey=@"Id", OtherKey=@"DataTypeId")]
+		[DataMember(Order=7, EmitDefaultValue=false)]
+		public EntitySet<Result> Results
+		{
+			get {
+				if (serializing && !_Results.HasLoadedOrAssignedValues) {
+					return null;
+				}
+				return _Results;
+			}
+			set {
+				_Results.Assign(value);
+			}
+		}
+
+		private void attach_Results(Result entity)
+		{
+			SendPropertyChanging();
+			entity.DataType = this;
+		}
+		
+		private void detach_Results(Result entity)
+		{
+			SendPropertyChanging();
+			entity.DataType = null;
+		}
+		private EntitySet<AlgorithmParameterBlobValue> _AlgorithmParameterBlobValues;
+		[Association(Name=@"DataType_AlgorithmParameterBlobValue", Storage=@"_AlgorithmParameterBlobValues", ThisKey=@"Id", OtherKey=@"DataTypeId")]
+		[DataMember(Order=8, EmitDefaultValue=false)]
+		public EntitySet<AlgorithmParameterBlobValue> AlgorithmParameterBlobValues
+		{
+			get {
+				if (serializing && !_AlgorithmParameterBlobValues.HasLoadedOrAssignedValues) {
+					return null;
+				}
+				return _AlgorithmParameterBlobValues;
+			}
+			set {
+				_AlgorithmParameterBlobValues.Assign(value);
+			}
+		}
+
+		private void attach_AlgorithmParameterBlobValues(AlgorithmParameterBlobValue entity)
+		{
+			SendPropertyChanging();
+			entity.DataType = this;
+		}
+		
+		private void detach_AlgorithmParameterBlobValues(AlgorithmParameterBlobValue entity)
+		{
+			SendPropertyChanging();
+			entity.DataType = null;
+		}
+		private EntitySet<AlgorithmParameterBoolValue> _AlgorithmParameterBoolValues;
+		[Association(Name=@"DataType_AlgorithmParameterBoolValue", Storage=@"_AlgorithmParameterBoolValues", ThisKey=@"Id", OtherKey=@"DataTypeId")]
+		[DataMember(Order=9, EmitDefaultValue=false)]
+		public EntitySet<AlgorithmParameterBoolValue> AlgorithmParameterBoolValues
+		{
+			get {
+				if (serializing && !_AlgorithmParameterBoolValues.HasLoadedOrAssignedValues) {
+					return null;
+				}
+				return _AlgorithmParameterBoolValues;
+			}
+			set {
+				_AlgorithmParameterBoolValues.Assign(value);
+			}
+		}
+
+		private void attach_AlgorithmParameterBoolValues(AlgorithmParameterBoolValue entity)
+		{
+			SendPropertyChanging();
+			entity.DataType = this;
+		}
+		
+		private void detach_AlgorithmParameterBoolValues(AlgorithmParameterBoolValue entity)
+		{
+			SendPropertyChanging();
+			entity.DataType = null;
+		}
+		private EntitySet<AlgorithmParameterFloatValue> _AlgorithmParameterFloatValues;
+		[Association(Name=@"DataType_AlgorithmParameterFloatValue", Storage=@"_AlgorithmParameterFloatValues", ThisKey=@"Id", OtherKey=@"DataTypeId")]
+		[DataMember(Order=10, EmitDefaultValue=false)]
+		public EntitySet<AlgorithmParameterFloatValue> AlgorithmParameterFloatValues
+		{
+			get {
+				if (serializing && !_AlgorithmParameterFloatValues.HasLoadedOrAssignedValues) {
+					return null;
+				}
+				return _AlgorithmParameterFloatValues;
+			}
+			set {
+				_AlgorithmParameterFloatValues.Assign(value);
+			}
+		}
+
+		private void attach_AlgorithmParameterFloatValues(AlgorithmParameterFloatValue entity)
+		{
+			SendPropertyChanging();
+			entity.DataType = this;
+		}
+		
+		private void detach_AlgorithmParameterFloatValues(AlgorithmParameterFloatValue entity)
+		{
+			SendPropertyChanging();
+			entity.DataType = null;
+		}
+		private EntitySet<AlgorithmParameterIntValue> _AlgorithmParameterIntValues;
+		[Association(Name=@"DataType_AlgorithmParameterIntValue", Storage=@"_AlgorithmParameterIntValues", ThisKey=@"Id", OtherKey=@"DataTypeId")]
+		[DataMember(Order=11, EmitDefaultValue=false)]
+		public EntitySet<AlgorithmParameterIntValue> AlgorithmParameterIntValues
+		{
+			get {
+				if (serializing && !_AlgorithmParameterIntValues.HasLoadedOrAssignedValues) {
+					return null;
+				}
+				return _AlgorithmParameterIntValues;
+			}
+			set {
+				_AlgorithmParameterIntValues.Assign(value);
+			}
+		}
+
+		private void attach_AlgorithmParameterIntValues(AlgorithmParameterIntValue entity)
+		{
+			SendPropertyChanging();
+			entity.DataType = this;
+		}
+		
+		private void detach_AlgorithmParameterIntValues(AlgorithmParameterIntValue entity)
+		{
+			SendPropertyChanging();
+			entity.DataType = null;
+		}
+		private EntitySet<AlgorithmParameterStringValue> _AlgorithmParameterStringValues;
+		[Association(Name=@"DataType_AlgorithmParameterStringValue", Storage=@"_AlgorithmParameterStringValues", ThisKey=@"Id", OtherKey=@"DataTypeId")]
+		[DataMember(Order=12, EmitDefaultValue=false)]
+		public EntitySet<AlgorithmParameterStringValue> AlgorithmParameterStringValues
+		{
+			get {
+				if (serializing && !_AlgorithmParameterStringValues.HasLoadedOrAssignedValues) {
+					return null;
+				}
+				return _AlgorithmParameterStringValues;
+			}
+			set {
+				_AlgorithmParameterStringValues.Assign(value);
+			}
+		}
+
+		private void attach_AlgorithmParameterStringValues(AlgorithmParameterStringValue entity)
+		{
+			SendPropertyChanging();
+			entity.DataType = this;
+		}
+		
+		private void detach_AlgorithmParameterStringValues(AlgorithmParameterStringValue entity)
+		{
+			SendPropertyChanging();
+			entity.DataType = null;
+		}
+		private EntitySet<ProblemParameterBlobValue> _ProblemParameterBlobValues;
+		[Association(Name=@"DataType_ProblemParameterBlobValue", Storage=@"_ProblemParameterBlobValues", ThisKey=@"Id", OtherKey=@"DataTypeId")]
+		[DataMember(Order=13, EmitDefaultValue=false)]
+		public EntitySet<ProblemParameterBlobValue> ProblemParameterBlobValues
+		{
+			get {
+				if (serializing && !_ProblemParameterBlobValues.HasLoadedOrAssignedValues) {
+					return null;
+				}
+				return _ProblemParameterBlobValues;
+			}
+			set {
+				_ProblemParameterBlobValues.Assign(value);
+			}
+		}
+
+		private void attach_ProblemParameterBlobValues(ProblemParameterBlobValue entity)
+		{
+			SendPropertyChanging();
+			entity.DataType = this;
+		}
+		
+		private void detach_ProblemParameterBlobValues(ProblemParameterBlobValue entity)
+		{
+			SendPropertyChanging();
+			entity.DataType = null;
+		}
+		private EntitySet<ProblemParameterBoolValue> _ProblemParameterBoolValues;
+		[Association(Name=@"DataType_ProblemParameterBoolValue", Storage=@"_ProblemParameterBoolValues", ThisKey=@"Id", OtherKey=@"DataTypeId")]
+		[DataMember(Order=14, EmitDefaultValue=false)]
+		public EntitySet<ProblemParameterBoolValue> ProblemParameterBoolValues
+		{
+			get {
+				if (serializing && !_ProblemParameterBoolValues.HasLoadedOrAssignedValues) {
+					return null;
+				}
+				return _ProblemParameterBoolValues;
+			}
+			set {
+				_ProblemParameterBoolValues.Assign(value);
+			}
+		}
+
+		private void attach_ProblemParameterBoolValues(ProblemParameterBoolValue entity)
+		{
+			SendPropertyChanging();
+			entity.DataType = this;
+		}
+		
+		private void detach_ProblemParameterBoolValues(ProblemParameterBoolValue entity)
+		{
+			SendPropertyChanging();
+			entity.DataType = null;
+		}
+		private EntitySet<ProblemParameterFloatValue> _ProblemParameterFloatValues;
+		[Association(Name=@"DataType_ProblemParameterFloatValue", Storage=@"_ProblemParameterFloatValues", ThisKey=@"Id", OtherKey=@"DataTypeId")]
+		[DataMember(Order=15, EmitDefaultValue=false)]
+		public EntitySet<ProblemParameterFloatValue> ProblemParameterFloatValues
+		{
+			get {
+				if (serializing && !_ProblemParameterFloatValues.HasLoadedOrAssignedValues) {
+					return null;
+				}
+				return _ProblemParameterFloatValues;
+			}
+			set {
+				_ProblemParameterFloatValues.Assign(value);
+			}
+		}
+
+		private void attach_ProblemParameterFloatValues(ProblemParameterFloatValue entity)
+		{
+			SendPropertyChanging();
+			entity.DataType = this;
+		}
+		
+		private void detach_ProblemParameterFloatValues(ProblemParameterFloatValue entity)
+		{
+			SendPropertyChanging();
+			entity.DataType = null;
+		}
+		private EntitySet<ProblemParameterIntValue> _ProblemParameterIntValues;
+		[Association(Name=@"DataType_ProblemParameterIntValue", Storage=@"_ProblemParameterIntValues", ThisKey=@"Id", OtherKey=@"DataTypeId")]
+		[DataMember(Order=16, EmitDefaultValue=false)]
+		public EntitySet<ProblemParameterIntValue> ProblemParameterIntValues
+		{
+			get {
+				if (serializing && !_ProblemParameterIntValues.HasLoadedOrAssignedValues) {
+					return null;
+				}
+				return _ProblemParameterIntValues;
+			}
+			set {
+				_ProblemParameterIntValues.Assign(value);
+			}
+		}
+
+		private void attach_ProblemParameterIntValues(ProblemParameterIntValue entity)
+		{
+			SendPropertyChanging();
+			entity.DataType = this;
+		}
+		
+		private void detach_ProblemParameterIntValues(ProblemParameterIntValue entity)
+		{
+			SendPropertyChanging();
+			entity.DataType = null;
+		}
+		private EntitySet<ProblemParameterStringValue> _ProblemParameterStringValues;
+		[Association(Name=@"DataType_ProblemParameterStringValue", Storage=@"_ProblemParameterStringValues", ThisKey=@"Id", OtherKey=@"DataTypeId")]
+		[DataMember(Order=17, EmitDefaultValue=false)]
+		public EntitySet<ProblemParameterStringValue> ProblemParameterStringValues
+		{
+			get {
+				if (serializing && !_ProblemParameterStringValues.HasLoadedOrAssignedValues) {
+					return null;
+				}
+				return _ProblemParameterStringValues;
+			}
+			set {
+				_ProblemParameterStringValues.Assign(value);
+			}
+		}
+
+		private void attach_ProblemParameterStringValues(ProblemParameterStringValue entity)
+		{
+			SendPropertyChanging();
+			entity.DataType = this;
+		}
+		
+		private void detach_ProblemParameterStringValues(ProblemParameterStringValue entity)
+		{
+			SendPropertyChanging();
+			entity.DataType = null;
+		}
+		private EntitySet<ResultBlobValue> _ResultBlobValues;
+		[Association(Name=@"DataType_ResultBlobValue", Storage=@"_ResultBlobValues", ThisKey=@"Id", OtherKey=@"DataTypeId")]
+		[DataMember(Order=18, EmitDefaultValue=false)]
+		public EntitySet<ResultBlobValue> ResultBlobValues
+		{
+			get {
+				if (serializing && !_ResultBlobValues.HasLoadedOrAssignedValues) {
+					return null;
+				}
+				return _ResultBlobValues;
+			}
+			set {
+				_ResultBlobValues.Assign(value);
+			}
+		}
+
+		private void attach_ResultBlobValues(ResultBlobValue entity)
+		{
+			SendPropertyChanging();
+			entity.DataType = this;
+		}
+		
+		private void detach_ResultBlobValues(ResultBlobValue entity)
+		{
+			SendPropertyChanging();
+			entity.DataType = null;
+		}
+		private EntitySet<ResultBoolValue> _ResultBoolValues;
+		[Association(Name=@"DataType_ResultBoolValue", Storage=@"_ResultBoolValues", ThisKey=@"Id", OtherKey=@"DataTypeId")]
+		[DataMember(Order=19, EmitDefaultValue=false)]
+		public EntitySet<ResultBoolValue> ResultBoolValues
+		{
+			get {
+				if (serializing && !_ResultBoolValues.HasLoadedOrAssignedValues) {
+					return null;
+				}
+				return _ResultBoolValues;
+			}
+			set {
+				_ResultBoolValues.Assign(value);
+			}
+		}
+
+		private void attach_ResultBoolValues(ResultBoolValue entity)
+		{
+			SendPropertyChanging();
+			entity.DataType = this;
+		}
+		
+		private void detach_ResultBoolValues(ResultBoolValue entity)
+		{
+			SendPropertyChanging();
+			entity.DataType = null;
+		}
+		private EntitySet<ResultFloatValue> _ResultFloatValues;
+		[Association(Name=@"DataType_ResultFloatValue", Storage=@"_ResultFloatValues", ThisKey=@"Id", OtherKey=@"DataTypeId")]
+		[DataMember(Order=20, EmitDefaultValue=false)]
+		public EntitySet<ResultFloatValue> ResultFloatValues
+		{
+			get {
+				if (serializing && !_ResultFloatValues.HasLoadedOrAssignedValues) {
+					return null;
+				}
+				return _ResultFloatValues;
+			}
+			set {
+				_ResultFloatValues.Assign(value);
+			}
+		}
+
+		private void attach_ResultFloatValues(ResultFloatValue entity)
+		{
+			SendPropertyChanging();
+			entity.DataType = this;
+		}
+		
+		private void detach_ResultFloatValues(ResultFloatValue entity)
+		{
+			SendPropertyChanging();
+			entity.DataType = null;
+		}
+		private EntitySet<ResultIntValue> _ResultIntValues;
+		[Association(Name=@"DataType_ResultIntValue", Storage=@"_ResultIntValues", ThisKey=@"Id", OtherKey=@"DataTypeId")]
+		[DataMember(Order=21, EmitDefaultValue=false)]
+		public EntitySet<ResultIntValue> ResultIntValues
+		{
+			get {
+				if (serializing && !_ResultIntValues.HasLoadedOrAssignedValues) {
+					return null;
+				}
+				return _ResultIntValues;
+			}
+			set {
+				_ResultIntValues.Assign(value);
+			}
+		}
+
+		private void attach_ResultIntValues(ResultIntValue entity)
+		{
+			SendPropertyChanging();
+			entity.DataType = this;
+		}
+		
+		private void detach_ResultIntValues(ResultIntValue entity)
+		{
+			SendPropertyChanging();
+			entity.DataType = null;
+		}
+		private EntitySet<ResultStringValue> _ResultStringValues;
+		[Association(Name=@"DataType_ResultStringValue", Storage=@"_ResultStringValues", ThisKey=@"Id", OtherKey=@"DataTypeId")]
+		[DataMember(Order=22, EmitDefaultValue=false)]
+		public EntitySet<ResultStringValue> ResultStringValues
+		{
+			get {
+				if (serializing && !_ResultStringValues.HasLoadedOrAssignedValues) {
+					return null;
+				}
+				return _ResultStringValues;
+			}
+			set {
+				_ResultStringValues.Assign(value);
+			}
+		}
+
+		private void attach_ResultStringValues(ResultStringValue entity)
+		{
+			SendPropertyChanging();
+			entity.DataType = this;
+		}
+		
+		private void detach_ResultStringValues(ResultStringValue entity)
+		{
+			SendPropertyChanging();
+			entity.DataType = null;
+		}
+		private EntityRef<Platform> _Platform;
+		[Association(Name=@"Platform_DataType", Storage=@"_Platform", ThisKey=@"PlatformId", OtherKey=@"Id", IsForeignKey=true)]
+		[DataMember(Order=23, EmitDefaultValue=false)]
+		public Platform Platform
+		{
+			get {
+				if (serializing && !_Platform.HasLoadedOrAssignedValue) {
+					return null;
+				}
+				return _Platform.Entity;
+			}
+			set {
+				Platform previousValue = _Platform.Entity;
+				if ((previousValue != value) || (!_Platform.HasLoadedOrAssignedValue)) {
+					SendPropertyChanging();
+					if (previousValue != null) {
+						_Platform.Entity = null;
+						previousValue.DataTypes.Remove(this);
+					}
+					_Platform.Entity = value;
+					if (value != null) {
+						value.DataTypes.Add(this);
+						_PlatformId = value.Id;
+					}
+					else {
+						_PlatformId = default(long);
+					}
+					SendPropertyChanged("Platform");
+				}
+			}
+		}
+
+		#endregion
+		
+		#region Serialization
+		private bool serializing;
+		
+		[OnSerializing()]
+		[EditorBrowsableAttribute(EditorBrowsableState.Never)]
+		public void OnSerializing(StreamingContext context)
+		{
+			serializing = true;
+		}
+		
+		[OnSerialized()]
+		[EditorBrowsableAttribute(EditorBrowsableState.Never)]
+		public void OnSerialized(StreamingContext context)
+		{
+			serializing = false;
+		}
+		
+		[OnDeserializing()]
+		[EditorBrowsableAttribute(EditorBrowsableState.Never)]
+		public  void OnDeserializing(StreamingContext context)
+		{
+			Initialize();
+		}
+		#endregion
+	}
+}
+
+namespace HeuristicLab.Services.OKB.DataAccess
+{	
+	[DataContract(IsReference=true)]
+	[Table(Name=@"dbo.AlgorithmParameterBoolValue")]
+[KnownType(typeof(AlgorithmParameterBoolValue))]	public partial class AlgorithmParameterBoolValue : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		#region Property Change Event Handling
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		public virtual void SendPropertyChanging()
+		{
+			if (PropertyChanging != null) {
+				PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+			
+		public virtual void SendPropertyChanged(String propertyName)
+		{
+			if (PropertyChanged != null) {
+				PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+		#endregion
+		
+		#region Extensibility Method Definitions
+		partial void OnLoaded();
+		partial void OnValidate(ChangeAction action);
+		partial void OnCreated();
+		#endregion
+
+		#region Construction
+		public AlgorithmParameterBoolValue()
+		{
+			Initialize();
+		}
+		
+		private void Initialize()
+		{
+			_AlgorithmParameter = default(EntityRef<AlgorithmParameter>);
+			_DataType = default(EntityRef<DataType>);
+			_Experiment = default(EntityRef<Experiment>);
+			OnCreated();
+		}
+		#endregion
+
+		#region Column Mappings
+		partial void OnAlgorithmParameterIdChanging(long value);
+		partial void OnAlgorithmParameterIdChanged();
+		private long _AlgorithmParameterId;
+		[Column(Storage=@"_AlgorithmParameterId", DbType=@"BigInt NOT NULL", IsPrimaryKey=true, UpdateCheck=UpdateCheck.Never)]
+		[DataMember(Order=1)]
+		public long AlgorithmParameterId
+		{
+			get { return _AlgorithmParameterId; }
+			set {
+				if (_AlgorithmParameterId != value) {
+					if (_AlgorithmParameter.HasLoadedOrAssignedValue) {
+						throw new ForeignKeyReferenceAlreadyHasValueException();
+					}
+					OnAlgorithmParameterIdChanging(value);
+					SendPropertyChanging();
+					_AlgorithmParameterId = value;
+					SendPropertyChanged("AlgorithmParameterId");
+					OnAlgorithmParameterIdChanged();
+				}
+			}
+		}
+		
+		partial void OnExperimentIdChanging(long value);
+		partial void OnExperimentIdChanged();
+		private long _ExperimentId;
+		[Column(Storage=@"_ExperimentId", DbType=@"BigInt NOT NULL", IsPrimaryKey=true, UpdateCheck=UpdateCheck.Never)]
+		[DataMember(Order=2)]
+		public long ExperimentId
+		{
+			get { return _ExperimentId; }
+			set {
+				if (_ExperimentId != value) {
+					if (_Experiment.HasLoadedOrAssignedValue) {
+						throw new ForeignKeyReferenceAlreadyHasValueException();
+					}
+					OnExperimentIdChanging(value);
+					SendPropertyChanging();
+					_ExperimentId = value;
+					SendPropertyChanged("ExperimentId");
+					OnExperimentIdChanged();
+				}
+			}
+		}
+		
+		partial void OnDataTypeIdChanging(long value);
+		partial void OnDataTypeIdChanged();
+		private long _DataTypeId;
+		[Column(Storage=@"_DataTypeId", DbType=@"BigInt NOT NULL", CanBeNull=false)]
+		[DataMember(Order=3)]
+		public long DataTypeId
+		{
+			get { return _DataTypeId; }
+			set {
+				if (_DataTypeId != value) {
+					if (_DataType.HasLoadedOrAssignedValue) {
+						throw new ForeignKeyReferenceAlreadyHasValueException();
+					}
+					OnDataTypeIdChanging(value);
+					SendPropertyChanging();
+					_DataTypeId = value;
+					SendPropertyChanged("DataTypeId");
+					OnDataTypeIdChanged();
+				}
+			}
+		}
+		
+		partial void OnValueChanging(bool value);
+		partial void OnValueChanged();
+		private bool _Value;
+		[Column(Storage=@"_Value", DbType=@"Bit NOT NULL", CanBeNull=false)]
+		[DataMember(Order=4)]
+		public bool Value
+		{
+			get { return _Value; }
+			set {
+				if (_Value != value) {
+					OnValueChanging(value);
+					SendPropertyChanging();
+					_Value = value;
+					SendPropertyChanged("Value");
+					OnValueChanged();
+				}
+			}
+		}
+		
+		#endregion
+		
+		#region Associations
+		private EntityRef<AlgorithmParameter> _AlgorithmParameter;
+		[Association(Name=@"AlgorithmParameter_AlgorithmParameterBoolValue", Storage=@"_AlgorithmParameter", ThisKey=@"AlgorithmParameterId", OtherKey=@"Id", IsForeignKey=true)]
+		[DataMember(Order=5, EmitDefaultValue=false)]
+		public AlgorithmParameter AlgorithmParameter
+		{
+			get {
+				return _AlgorithmParameter.Entity;
+			}
+			set {
+				AlgorithmParameter previousValue = _AlgorithmParameter.Entity;
+				if ((previousValue != value) || (!_AlgorithmParameter.HasLoadedOrAssignedValue)) {
+					SendPropertyChanging();
+					if (previousValue != null) {
+						_AlgorithmParameter.Entity = null;
+						previousValue.AlgorithmParameterBoolValues.Remove(this);
+					}
+					_AlgorithmParameter.Entity = value;
+					if (value != null) {
+						value.AlgorithmParameterBoolValues.Add(this);
+						_AlgorithmParameterId = value.Id;
+					}
+					else {
+						_AlgorithmParameterId = default(long);
+					}
+					SendPropertyChanged("AlgorithmParameter");
+				}
+			}
+		}
+
+		private EntityRef<DataType> _DataType;
+		[Association(Name=@"DataType_AlgorithmParameterBoolValue", Storage=@"_DataType", ThisKey=@"DataTypeId", OtherKey=@"Id", IsForeignKey=true)]
+		[DataMember(Order=6, EmitDefaultValue=false)]
+		public DataType DataType
+		{
+			get {
+				return _DataType.Entity;
+			}
+			set {
+				DataType previousValue = _DataType.Entity;
+				if ((previousValue != value) || (!_DataType.HasLoadedOrAssignedValue)) {
+					SendPropertyChanging();
+					if (previousValue != null) {
+						_DataType.Entity = null;
+						previousValue.AlgorithmParameterBoolValues.Remove(this);
+					}
+					_DataType.Entity = value;
+					if (value != null) {
+						value.AlgorithmParameterBoolValues.Add(this);
+						_DataTypeId = value.Id;
+					}
+					else {
+						_DataTypeId = default(long);
+					}
+					SendPropertyChanged("DataType");
+				}
+			}
+		}
+
+		private EntityRef<Experiment> _Experiment;
+		[Association(Name=@"Experiment_AlgorithmParameterBoolValue", Storage=@"_Experiment", ThisKey=@"ExperimentId", OtherKey=@"Id", IsForeignKey=true)]
+		[DataMember(Order=7, EmitDefaultValue=false)]
+		public Experiment Experiment
+		{
+			get {
+				return _Experiment.Entity;
+			}
+			set {
+				Experiment previousValue = _Experiment.Entity;
+				if ((previousValue != value) || (!_Experiment.HasLoadedOrAssignedValue)) {
+					SendPropertyChanging();
+					if (previousValue != null) {
+						_Experiment.Entity = null;
+						previousValue.AlgorithmParameterBoolValues.Remove(this);
+					}
+					_Experiment.Entity = value;
+					if (value != null) {
+						value.AlgorithmParameterBoolValues.Add(this);
+						_ExperimentId = value.Id;
+					}
+					else {
+						_ExperimentId = default(long);
+					}
+					SendPropertyChanged("Experiment");
+				}
+			}
+		}
+
+		#endregion
+		
+		#region Serialization
+		[OnDeserializing()]
+		[EditorBrowsableAttribute(EditorBrowsableState.Never)]
+		public  void OnDeserializing(StreamingContext context)
+		{
+			Initialize();
+		}
+		#endregion
+	}
+}
+
+namespace HeuristicLab.Services.OKB.DataAccess
+{	
+	[DataContract(IsReference=true)]
+	[Table(Name=@"dbo.AlgorithmParameterFloatValue")]
+[KnownType(typeof(AlgorithmParameterFloatValue))]	public partial class AlgorithmParameterFloatValue : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		#region Property Change Event Handling
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		public virtual void SendPropertyChanging()
+		{
+			if (PropertyChanging != null) {
+				PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+			
+		public virtual void SendPropertyChanged(String propertyName)
+		{
+			if (PropertyChanged != null) {
+				PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+		#endregion
+		
+		#region Extensibility Method Definitions
+		partial void OnLoaded();
+		partial void OnValidate(ChangeAction action);
+		partial void OnCreated();
+		#endregion
+
+		#region Construction
+		public AlgorithmParameterFloatValue()
+		{
+			Initialize();
+		}
+		
+		private void Initialize()
+		{
+			_AlgorithmParameter = default(EntityRef<AlgorithmParameter>);
+			_DataType = default(EntityRef<DataType>);
+			_Experiment = default(EntityRef<Experiment>);
+			OnCreated();
+		}
+		#endregion
+
+		#region Column Mappings
+		partial void OnAlgorithmParameterIdChanging(long value);
+		partial void OnAlgorithmParameterIdChanged();
+		private long _AlgorithmParameterId;
+		[Column(Storage=@"_AlgorithmParameterId", DbType=@"BigInt NOT NULL", IsPrimaryKey=true, UpdateCheck=UpdateCheck.Never)]
+		[DataMember(Order=1)]
+		public long AlgorithmParameterId
+		{
+			get { return _AlgorithmParameterId; }
+			set {
+				if (_AlgorithmParameterId != value) {
+					if (_AlgorithmParameter.HasLoadedOrAssignedValue) {
+						throw new ForeignKeyReferenceAlreadyHasValueException();
+					}
+					OnAlgorithmParameterIdChanging(value);
+					SendPropertyChanging();
+					_AlgorithmParameterId = value;
+					SendPropertyChanged("AlgorithmParameterId");
+					OnAlgorithmParameterIdChanged();
+				}
+			}
+		}
+		
+		partial void OnExperimentIdChanging(long value);
+		partial void OnExperimentIdChanged();
+		private long _ExperimentId;
+		[Column(Storage=@"_ExperimentId", DbType=@"BigInt NOT NULL", IsPrimaryKey=true, UpdateCheck=UpdateCheck.Never)]
+		[DataMember(Order=2)]
+		public long ExperimentId
+		{
+			get { return _ExperimentId; }
+			set {
+				if (_ExperimentId != value) {
+					if (_Experiment.HasLoadedOrAssignedValue) {
+						throw new ForeignKeyReferenceAlreadyHasValueException();
+					}
+					OnExperimentIdChanging(value);
+					SendPropertyChanging();
+					_ExperimentId = value;
+					SendPropertyChanged("ExperimentId");
+					OnExperimentIdChanged();
+				}
+			}
+		}
+		
+		partial void OnDataTypeIdChanging(long value);
+		partial void OnDataTypeIdChanged();
+		private long _DataTypeId;
+		[Column(Storage=@"_DataTypeId", DbType=@"BigInt NOT NULL", CanBeNull=false)]
+		[DataMember(Order=3)]
+		public long DataTypeId
+		{
+			get { return _DataTypeId; }
+			set {
+				if (_DataTypeId != value) {
+					if (_DataType.HasLoadedOrAssignedValue) {
+						throw new ForeignKeyReferenceAlreadyHasValueException();
+					}
+					OnDataTypeIdChanging(value);
+					SendPropertyChanging();
+					_DataTypeId = value;
+					SendPropertyChanged("DataTypeId");
+					OnDataTypeIdChanged();
+				}
+			}
+		}
+		
+		partial void OnValueChanging(double value);
+		partial void OnValueChanged();
+		private double _Value;
+		[Column(Storage=@"_Value", DbType=@"Float NOT NULL", CanBeNull=false)]
+		[DataMember(Order=4)]
+		public double Value
+		{
+			get { return _Value; }
+			set {
+				if (_Value != value) {
+					OnValueChanging(value);
+					SendPropertyChanging();
+					_Value = value;
+					SendPropertyChanged("Value");
+					OnValueChanged();
+				}
+			}
+		}
+		
+		#endregion
+		
+		#region Associations
+		private EntityRef<AlgorithmParameter> _AlgorithmParameter;
+		[Association(Name=@"AlgorithmParameter_AlgorithmParameterFloatValue", Storage=@"_AlgorithmParameter", ThisKey=@"AlgorithmParameterId", OtherKey=@"Id", IsForeignKey=true)]
+		[DataMember(Order=5, EmitDefaultValue=false)]
+		public AlgorithmParameter AlgorithmParameter
+		{
+			get {
+				return _AlgorithmParameter.Entity;
+			}
+			set {
+				AlgorithmParameter previousValue = _AlgorithmParameter.Entity;
+				if ((previousValue != value) || (!_AlgorithmParameter.HasLoadedOrAssignedValue)) {
+					SendPropertyChanging();
+					if (previousValue != null) {
+						_AlgorithmParameter.Entity = null;
+						previousValue.AlgorithmParameterFloatValues.Remove(this);
+					}
+					_AlgorithmParameter.Entity = value;
+					if (value != null) {
+						value.AlgorithmParameterFloatValues.Add(this);
+						_AlgorithmParameterId = value.Id;
+					}
+					else {
+						_AlgorithmParameterId = default(long);
+					}
+					SendPropertyChanged("AlgorithmParameter");
+				}
+			}
+		}
+
+		private EntityRef<DataType> _DataType;
+		[Association(Name=@"DataType_AlgorithmParameterFloatValue", Storage=@"_DataType", ThisKey=@"DataTypeId", OtherKey=@"Id", IsForeignKey=true)]
+		[DataMember(Order=6, EmitDefaultValue=false)]
+		public DataType DataType
+		{
+			get {
+				return _DataType.Entity;
+			}
+			set {
+				DataType previousValue = _DataType.Entity;
+				if ((previousValue != value) || (!_DataType.HasLoadedOrAssignedValue)) {
+					SendPropertyChanging();
+					if (previousValue != null) {
+						_DataType.Entity = null;
+						previousValue.AlgorithmParameterFloatValues.Remove(this);
+					}
+					_DataType.Entity = value;
+					if (value != null) {
+						value.AlgorithmParameterFloatValues.Add(this);
+						_DataTypeId = value.Id;
+					}
+					else {
+						_DataTypeId = default(long);
+					}
+					SendPropertyChanged("DataType");
+				}
+			}
+		}
+
+		private EntityRef<Experiment> _Experiment;
+		[Association(Name=@"Experiment_AlgorithmParameterFloatValue", Storage=@"_Experiment", ThisKey=@"ExperimentId", OtherKey=@"Id", IsForeignKey=true)]
+		[DataMember(Order=7, EmitDefaultValue=false)]
+		public Experiment Experiment
+		{
+			get {
+				return _Experiment.Entity;
+			}
+			set {
+				Experiment previousValue = _Experiment.Entity;
+				if ((previousValue != value) || (!_Experiment.HasLoadedOrAssignedValue)) {
+					SendPropertyChanging();
+					if (previousValue != null) {
+						_Experiment.Entity = null;
+						previousValue.AlgorithmParameterFloatValues.Remove(this);
+					}
+					_Experiment.Entity = value;
+					if (value != null) {
+						value.AlgorithmParameterFloatValues.Add(this);
+						_ExperimentId = value.Id;
+					}
+					else {
+						_ExperimentId = default(long);
+					}
+					SendPropertyChanged("Experiment");
+				}
+			}
+		}
+
+		#endregion
+		
+		#region Serialization
+		[OnDeserializing()]
+		[EditorBrowsableAttribute(EditorBrowsableState.Never)]
+		public  void OnDeserializing(StreamingContext context)
+		{
+			Initialize();
+		}
+		#endregion
+	}
+}
+
+namespace HeuristicLab.Services.OKB.DataAccess
+{	
+	[DataContract(IsReference=true)]
+	[Table(Name=@"dbo.AlgorithmParameterIntValue")]
+[KnownType(typeof(AlgorithmParameterIntValue))]	public partial class AlgorithmParameterIntValue : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		#region Property Change Event Handling
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		public virtual void SendPropertyChanging()
+		{
+			if (PropertyChanging != null) {
+				PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+			
+		public virtual void SendPropertyChanged(String propertyName)
+		{
+			if (PropertyChanged != null) {
+				PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+		#endregion
+		
+		#region Extensibility Method Definitions
+		partial void OnLoaded();
+		partial void OnValidate(ChangeAction action);
+		partial void OnCreated();
+		#endregion
+
+		#region Construction
+		public AlgorithmParameterIntValue()
+		{
+			Initialize();
+		}
+		
+		private void Initialize()
+		{
+			_AlgorithmParameter = default(EntityRef<AlgorithmParameter>);
+			_DataType = default(EntityRef<DataType>);
+			_Experiment = default(EntityRef<Experiment>);
+			OnCreated();
+		}
+		#endregion
+
+		#region Column Mappings
+		partial void OnAlgorithmParameterIdChanging(long value);
+		partial void OnAlgorithmParameterIdChanged();
+		private long _AlgorithmParameterId;
+		[Column(Storage=@"_AlgorithmParameterId", DbType=@"BigInt NOT NULL", IsPrimaryKey=true, UpdateCheck=UpdateCheck.Never)]
+		[DataMember(Order=1)]
+		public long AlgorithmParameterId
+		{
+			get { return _AlgorithmParameterId; }
+			set {
+				if (_AlgorithmParameterId != value) {
+					if (_AlgorithmParameter.HasLoadedOrAssignedValue) {
+						throw new ForeignKeyReferenceAlreadyHasValueException();
+					}
+					OnAlgorithmParameterIdChanging(value);
+					SendPropertyChanging();
+					_AlgorithmParameterId = value;
+					SendPropertyChanged("AlgorithmParameterId");
+					OnAlgorithmParameterIdChanged();
+				}
+			}
+		}
+		
+		partial void OnExperimentIdChanging(long value);
+		partial void OnExperimentIdChanged();
+		private long _ExperimentId;
+		[Column(Storage=@"_ExperimentId", DbType=@"BigInt NOT NULL", IsPrimaryKey=true, UpdateCheck=UpdateCheck.Never)]
+		[DataMember(Order=2)]
+		public long ExperimentId
+		{
+			get { return _ExperimentId; }
+			set {
+				if (_ExperimentId != value) {
+					if (_Experiment.HasLoadedOrAssignedValue) {
+						throw new ForeignKeyReferenceAlreadyHasValueException();
+					}
+					OnExperimentIdChanging(value);
+					SendPropertyChanging();
+					_ExperimentId = value;
+					SendPropertyChanged("ExperimentId");
+					OnExperimentIdChanged();
+				}
+			}
+		}
+		
+		partial void OnDataTypeIdChanging(long value);
+		partial void OnDataTypeIdChanged();
+		private long _DataTypeId;
+		[Column(Storage=@"_DataTypeId", DbType=@"BigInt NOT NULL", CanBeNull=false)]
+		[DataMember(Order=3)]
+		public long DataTypeId
+		{
+			get { return _DataTypeId; }
+			set {
+				if (_DataTypeId != value) {
+					if (_DataType.HasLoadedOrAssignedValue) {
+						throw new ForeignKeyReferenceAlreadyHasValueException();
+					}
+					OnDataTypeIdChanging(value);
+					SendPropertyChanging();
+					_DataTypeId = value;
+					SendPropertyChanged("DataTypeId");
+					OnDataTypeIdChanged();
+				}
+			}
+		}
+		
+		partial void OnValueChanging(long value);
+		partial void OnValueChanged();
+		private long _Value;
+		[Column(Storage=@"_Value", DbType=@"BigInt NOT NULL", CanBeNull=false)]
+		[DataMember(Order=4)]
+		public long Value
+		{
+			get { return _Value; }
+			set {
+				if (_Value != value) {
+					OnValueChanging(value);
+					SendPropertyChanging();
+					_Value = value;
+					SendPropertyChanged("Value");
+					OnValueChanged();
+				}
+			}
+		}
+		
+		#endregion
+		
+		#region Associations
+		private EntityRef<AlgorithmParameter> _AlgorithmParameter;
+		[Association(Name=@"AlgorithmParameter_AlgorithmParameterIntValue", Storage=@"_AlgorithmParameter", ThisKey=@"AlgorithmParameterId", OtherKey=@"Id", IsForeignKey=true)]
+		[DataMember(Order=5, EmitDefaultValue=false)]
+		public AlgorithmParameter AlgorithmParameter
+		{
+			get {
+				return _AlgorithmParameter.Entity;
+			}
+			set {
+				AlgorithmParameter previousValue = _AlgorithmParameter.Entity;
+				if ((previousValue != value) || (!_AlgorithmParameter.HasLoadedOrAssignedValue)) {
+					SendPropertyChanging();
+					if (previousValue != null) {
+						_AlgorithmParameter.Entity = null;
+						previousValue.AlgorithmParameterIntValues.Remove(this);
+					}
+					_AlgorithmParameter.Entity = value;
+					if (value != null) {
+						value.AlgorithmParameterIntValues.Add(this);
+						_AlgorithmParameterId = value.Id;
+					}
+					else {
+						_AlgorithmParameterId = default(long);
+					}
+					SendPropertyChanged("AlgorithmParameter");
+				}
+			}
+		}
+
+		private EntityRef<DataType> _DataType;
+		[Association(Name=@"DataType_AlgorithmParameterIntValue", Storage=@"_DataType", ThisKey=@"DataTypeId", OtherKey=@"Id", IsForeignKey=true)]
+		[DataMember(Order=6, EmitDefaultValue=false)]
+		public DataType DataType
+		{
+			get {
+				return _DataType.Entity;
+			}
+			set {
+				DataType previousValue = _DataType.Entity;
+				if ((previousValue != value) || (!_DataType.HasLoadedOrAssignedValue)) {
+					SendPropertyChanging();
+					if (previousValue != null) {
+						_DataType.Entity = null;
+						previousValue.AlgorithmParameterIntValues.Remove(this);
+					}
+					_DataType.Entity = value;
+					if (value != null) {
+						value.AlgorithmParameterIntValues.Add(this);
+						_DataTypeId = value.Id;
+					}
+					else {
+						_DataTypeId = default(long);
+					}
+					SendPropertyChanged("DataType");
+				}
+			}
+		}
+
+		private EntityRef<Experiment> _Experiment;
+		[Association(Name=@"Experiment_AlgorithmParameterIntValue", Storage=@"_Experiment", ThisKey=@"ExperimentId", OtherKey=@"Id", IsForeignKey=true)]
+		[DataMember(Order=7, EmitDefaultValue=false)]
+		public Experiment Experiment
+		{
+			get {
+				return _Experiment.Entity;
+			}
+			set {
+				Experiment previousValue = _Experiment.Entity;
+				if ((previousValue != value) || (!_Experiment.HasLoadedOrAssignedValue)) {
+					SendPropertyChanging();
+					if (previousValue != null) {
+						_Experiment.Entity = null;
+						previousValue.AlgorithmParameterIntValues.Remove(this);
+					}
+					_Experiment.Entity = value;
+					if (value != null) {
+						value.AlgorithmParameterIntValues.Add(this);
+						_ExperimentId = value.Id;
+					}
+					else {
+						_ExperimentId = default(long);
+					}
+					SendPropertyChanged("Experiment");
+				}
+			}
+		}
+
+		#endregion
+		
+		#region Serialization
+		[OnDeserializing()]
+		[EditorBrowsableAttribute(EditorBrowsableState.Never)]
+		public  void OnDeserializing(StreamingContext context)
+		{
+			Initialize();
+		}
+		#endregion
+	}
+}
+
+namespace HeuristicLab.Services.OKB.DataAccess
+{	
+	[DataContract(IsReference=true)]
+	[Table(Name=@"dbo.AlgorithmParameterStringValue")]
+[KnownType(typeof(AlgorithmParameterStringValue))]	public partial class AlgorithmParameterStringValue : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		#region Property Change Event Handling
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		public virtual void SendPropertyChanging()
+		{
+			if (PropertyChanging != null) {
+				PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+			
+		public virtual void SendPropertyChanged(String propertyName)
+		{
+			if (PropertyChanged != null) {
+				PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+		#endregion
+		
+		#region Extensibility Method Definitions
+		partial void OnLoaded();
+		partial void OnValidate(ChangeAction action);
+		partial void OnCreated();
+		#endregion
+
+		#region Construction
+		public AlgorithmParameterStringValue()
+		{
+			Initialize();
+		}
+		
+		private void Initialize()
+		{
+			_AlgorithmParameter = default(EntityRef<AlgorithmParameter>);
+			_DataType = default(EntityRef<DataType>);
+			_Experiment = default(EntityRef<Experiment>);
+			OnCreated();
+		}
+		#endregion
+
+		#region Column Mappings
+		partial void OnAlgorithmParameterIdChanging(long value);
+		partial void OnAlgorithmParameterIdChanged();
+		private long _AlgorithmParameterId;
+		[Column(Storage=@"_AlgorithmParameterId", DbType=@"BigInt NOT NULL", IsPrimaryKey=true, UpdateCheck=UpdateCheck.Never)]
+		[DataMember(Order=1)]
+		public long AlgorithmParameterId
+		{
+			get { return _AlgorithmParameterId; }
+			set {
+				if (_AlgorithmParameterId != value) {
+					if (_AlgorithmParameter.HasLoadedOrAssignedValue) {
+						throw new ForeignKeyReferenceAlreadyHasValueException();
+					}
+					OnAlgorithmParameterIdChanging(value);
+					SendPropertyChanging();
+					_AlgorithmParameterId = value;
+					SendPropertyChanged("AlgorithmParameterId");
+					OnAlgorithmParameterIdChanged();
+				}
+			}
+		}
+		
+		partial void OnExperimentIdChanging(long value);
+		partial void OnExperimentIdChanged();
+		private long _ExperimentId;
+		[Column(Storage=@"_ExperimentId", DbType=@"BigInt NOT NULL", IsPrimaryKey=true, UpdateCheck=UpdateCheck.Never)]
+		[DataMember(Order=2)]
+		public long ExperimentId
+		{
+			get { return _ExperimentId; }
+			set {
+				if (_ExperimentId != value) {
+					if (_Experiment.HasLoadedOrAssignedValue) {
+						throw new ForeignKeyReferenceAlreadyHasValueException();
+					}
+					OnExperimentIdChanging(value);
+					SendPropertyChanging();
+					_ExperimentId = value;
+					SendPropertyChanged("ExperimentId");
+					OnExperimentIdChanged();
+				}
+			}
+		}
+		
+		partial void OnDataTypeIdChanging(long value);
+		partial void OnDataTypeIdChanged();
+		private long _DataTypeId;
+		[Column(Storage=@"_DataTypeId", DbType=@"BigInt NOT NULL", CanBeNull=false)]
+		[DataMember(Order=3)]
+		public long DataTypeId
+		{
+			get { return _DataTypeId; }
+			set {
+				if (_DataTypeId != value) {
+					if (_DataType.HasLoadedOrAssignedValue) {
+						throw new ForeignKeyReferenceAlreadyHasValueException();
+					}
+					OnDataTypeIdChanging(value);
+					SendPropertyChanging();
+					_DataTypeId = value;
+					SendPropertyChanged("DataTypeId");
+					OnDataTypeIdChanged();
+				}
+			}
+		}
+		
+		partial void OnValueChanging(string value);
+		partial void OnValueChanged();
+		private string _Value;
+		[Column(Storage=@"_Value", DbType=@"NVarChar(MAX) NOT NULL", CanBeNull=false)]
+		[DataMember(Order=4)]
+		public string Value
+		{
+			get { return _Value; }
+			set {
+				if (_Value != value) {
+					OnValueChanging(value);
+					SendPropertyChanging();
+					_Value = value;
+					SendPropertyChanged("Value");
+					OnValueChanged();
+				}
+			}
+		}
+		
+		#endregion
+		
+		#region Associations
+		private EntityRef<AlgorithmParameter> _AlgorithmParameter;
+		[Association(Name=@"AlgorithmParameter_AlgorithmParameterStringValue", Storage=@"_AlgorithmParameter", ThisKey=@"AlgorithmParameterId", OtherKey=@"Id", IsForeignKey=true)]
+		[DataMember(Order=5, EmitDefaultValue=false)]
+		public AlgorithmParameter AlgorithmParameter
+		{
+			get {
+				return _AlgorithmParameter.Entity;
+			}
+			set {
+				AlgorithmParameter previousValue = _AlgorithmParameter.Entity;
+				if ((previousValue != value) || (!_AlgorithmParameter.HasLoadedOrAssignedValue)) {
+					SendPropertyChanging();
+					if (previousValue != null) {
+						_AlgorithmParameter.Entity = null;
+						previousValue.AlgorithmParameterStringValues.Remove(this);
+					}
+					_AlgorithmParameter.Entity = value;
+					if (value != null) {
+						value.AlgorithmParameterStringValues.Add(this);
+						_AlgorithmParameterId = value.Id;
+					}
+					else {
+						_AlgorithmParameterId = default(long);
+					}
+					SendPropertyChanged("AlgorithmParameter");
+				}
+			}
+		}
+
+		private EntityRef<DataType> _DataType;
+		[Association(Name=@"DataType_AlgorithmParameterStringValue", Storage=@"_DataType", ThisKey=@"DataTypeId", OtherKey=@"Id", IsForeignKey=true)]
+		[DataMember(Order=6, EmitDefaultValue=false)]
+		public DataType DataType
+		{
+			get {
+				return _DataType.Entity;
+			}
+			set {
+				DataType previousValue = _DataType.Entity;
+				if ((previousValue != value) || (!_DataType.HasLoadedOrAssignedValue)) {
+					SendPropertyChanging();
+					if (previousValue != null) {
+						_DataType.Entity = null;
+						previousValue.AlgorithmParameterStringValues.Remove(this);
+					}
+					_DataType.Entity = value;
+					if (value != null) {
+						value.AlgorithmParameterStringValues.Add(this);
+						_DataTypeId = value.Id;
+					}
+					else {
+						_DataTypeId = default(long);
+					}
+					SendPropertyChanged("DataType");
+				}
+			}
+		}
+
+		private EntityRef<Experiment> _Experiment;
+		[Association(Name=@"Experiment_AlgorithmParameterStringValue", Storage=@"_Experiment", ThisKey=@"ExperimentId", OtherKey=@"Id", IsForeignKey=true)]
+		[DataMember(Order=7, EmitDefaultValue=false)]
+		public Experiment Experiment
+		{
+			get {
+				return _Experiment.Entity;
+			}
+			set {
+				Experiment previousValue = _Experiment.Entity;
+				if ((previousValue != value) || (!_Experiment.HasLoadedOrAssignedValue)) {
+					SendPropertyChanging();
+					if (previousValue != null) {
+						_Experiment.Entity = null;
+						previousValue.AlgorithmParameterStringValues.Remove(this);
+					}
+					_Experiment.Entity = value;
+					if (value != null) {
+						value.AlgorithmParameterStringValues.Add(this);
+						_ExperimentId = value.Id;
+					}
+					else {
+						_ExperimentId = default(long);
+					}
+					SendPropertyChanged("Experiment");
+				}
+			}
+		}
+
+		#endregion
+		
+		#region Serialization
+		[OnDeserializing()]
+		[EditorBrowsableAttribute(EditorBrowsableState.Never)]
+		public  void OnDeserializing(StreamingContext context)
+		{
+			Initialize();
+		}
+		#endregion
+	}
+}
+
+namespace HeuristicLab.Services.OKB.DataAccess
+{	
+	[DataContract(IsReference=true)]
+	[Table(Name=@"dbo.ProblemParameterBlobValue")]
+[KnownType(typeof(ProblemParameterBlobValue))]	public partial class ProblemParameterBlobValue : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		#region Property Change Event Handling
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		public virtual void SendPropertyChanging()
+		{
+			if (PropertyChanging != null) {
+				PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+			
+		public virtual void SendPropertyChanged(String propertyName)
+		{
+			if (PropertyChanged != null) {
+				PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+		#endregion
+		
+		#region Extensibility Method Definitions
+		partial void OnLoaded();
+		partial void OnValidate(ChangeAction action);
+		partial void OnCreated();
+		#endregion
+
+		#region Construction
+		public ProblemParameterBlobValue()
+		{
+			Initialize();
+		}
+		
+		private void Initialize()
+		{
+			_DataType = default(EntityRef<DataType>);
+			_Experiment = default(EntityRef<Experiment>);
+			_ProblemParameter = default(EntityRef<ProblemParameter>);
+			OnCreated();
+		}
+		#endregion
+
+		#region Column Mappings
+		partial void OnProblemParameterIdChanging(long value);
+		partial void OnProblemParameterIdChanged();
+		private long _ProblemParameterId;
+		[Column(Storage=@"_ProblemParameterId", DbType=@"BigInt NOT NULL", IsPrimaryKey=true, UpdateCheck=UpdateCheck.Never)]
+		[DataMember(Order=1)]
+		public long ProblemParameterId
+		{
+			get { return _ProblemParameterId; }
+			set {
+				if (_ProblemParameterId != value) {
+					if (_ProblemParameter.HasLoadedOrAssignedValue) {
+						throw new ForeignKeyReferenceAlreadyHasValueException();
+					}
+					OnProblemParameterIdChanging(value);
+					SendPropertyChanging();
+					_ProblemParameterId = value;
+					SendPropertyChanged("ProblemParameterId");
+					OnProblemParameterIdChanged();
+				}
+			}
+		}
+		
+		partial void OnExperimentIdChanging(long value);
+		partial void OnExperimentIdChanged();
+		private long _ExperimentId;
+		[Column(Storage=@"_ExperimentId", DbType=@"BigInt NOT NULL", IsPrimaryKey=true, UpdateCheck=UpdateCheck.Never)]
+		[DataMember(Order=2)]
+		public long ExperimentId
+		{
+			get { return _ExperimentId; }
+			set {
+				if (_ExperimentId != value) {
+					if (_Experiment.HasLoadedOrAssignedValue) {
+						throw new ForeignKeyReferenceAlreadyHasValueException();
+					}
+					OnExperimentIdChanging(value);
+					SendPropertyChanging();
+					_ExperimentId = value;
+					SendPropertyChanged("ExperimentId");
+					OnExperimentIdChanged();
+				}
+			}
+		}
+		
+		partial void OnDataTypeIdChanging(long value);
+		partial void OnDataTypeIdChanged();
+		private long _DataTypeId;
+		[Column(Storage=@"_DataTypeId", DbType=@"BigInt NOT NULL", CanBeNull=false)]
+		[DataMember(Order=3)]
+		public long DataTypeId
+		{
+			get { return _DataTypeId; }
+			set {
+				if (_DataTypeId != value) {
+					if (_DataType.HasLoadedOrAssignedValue) {
+						throw new ForeignKeyReferenceAlreadyHasValueException();
+					}
+					OnDataTypeIdChanging(value);
+					SendPropertyChanging();
+					_DataTypeId = value;
+					SendPropertyChanged("DataTypeId");
+					OnDataTypeIdChanged();
+				}
+			}
+		}
+		
+		partial void OnValueChanging(Binary value);
+		partial void OnValueChanged();
+		private Binary _Value;
+		[Column(Storage=@"_Value", DbType=@"VarBinary(MAX) NOT NULL", CanBeNull=false, UpdateCheck=UpdateCheck.Never)]
+		[DataMember(Order=4)]
+		public Binary Value
+		{
+			get { return _Value; }
+			set {
+				if (_Value != value) {
+					OnValueChanging(value);
+					SendPropertyChanging();
+					_Value = value;
+					SendPropertyChanged("Value");
+					OnValueChanged();
+				}
+			}
+		}
+		
+		#endregion
+		
+		#region Associations
+		private EntityRef<DataType> _DataType;
+		[Association(Name=@"DataType_ProblemParameterBlobValue", Storage=@"_DataType", ThisKey=@"DataTypeId", OtherKey=@"Id", IsForeignKey=true)]
+		[DataMember(Order=5, EmitDefaultValue=false)]
+		public DataType DataType
+		{
+			get {
+				return _DataType.Entity;
+			}
+			set {
+				DataType previousValue = _DataType.Entity;
+				if ((previousValue != value) || (!_DataType.HasLoadedOrAssignedValue)) {
+					SendPropertyChanging();
+					if (previousValue != null) {
+						_DataType.Entity = null;
+						previousValue.ProblemParameterBlobValues.Remove(this);
+					}
+					_DataType.Entity = value;
+					if (value != null) {
+						value.ProblemParameterBlobValues.Add(this);
+						_DataTypeId = value.Id;
+					}
+					else {
+						_DataTypeId = default(long);
+					}
+					SendPropertyChanged("DataType");
+				}
+			}
+		}
+
+		private EntityRef<Experiment> _Experiment;
+		[Association(Name=@"Experiment_ProblemParameterBlobValue", Storage=@"_Experiment", ThisKey=@"ExperimentId", OtherKey=@"Id", IsForeignKey=true)]
+		[DataMember(Order=6, EmitDefaultValue=false)]
+		public Experiment Experiment
+		{
+			get {
+				return _Experiment.Entity;
+			}
+			set {
+				Experiment previousValue = _Experiment.Entity;
+				if ((previousValue != value) || (!_Experiment.HasLoadedOrAssignedValue)) {
+					SendPropertyChanging();
+					if (previousValue != null) {
+						_Experiment.Entity = null;
+						previousValue.ProblemParameterBlobValues.Remove(this);
+					}
+					_Experiment.Entity = value;
+					if (value != null) {
+						value.ProblemParameterBlobValues.Add(this);
+						_ExperimentId = value.Id;
+					}
+					else {
+						_ExperimentId = default(long);
+					}
+					SendPropertyChanged("Experiment");
+				}
+			}
+		}
+
+		private EntityRef<ProblemParameter> _ProblemParameter;
+		[Association(Name=@"ProblemParameter_ProblemParameterBlobValue", Storage=@"_ProblemParameter", ThisKey=@"ProblemParameterId", OtherKey=@"Id", IsForeignKey=true)]
+		[DataMember(Order=7, EmitDefaultValue=false)]
+		public ProblemParameter ProblemParameter
+		{
+			get {
+				return _ProblemParameter.Entity;
+			}
+			set {
+				ProblemParameter previousValue = _ProblemParameter.Entity;
+				if ((previousValue != value) || (!_ProblemParameter.HasLoadedOrAssignedValue)) {
+					SendPropertyChanging();
+					if (previousValue != null) {
+						_ProblemParameter.Entity = null;
+						previousValue.ProblemParameterBlobValues.Remove(this);
+					}
+					_ProblemParameter.Entity = value;
+					if (value != null) {
+						value.ProblemParameterBlobValues.Add(this);
+						_ProblemParameterId = value.Id;
+					}
+					else {
+						_ProblemParameterId = default(long);
+					}
+					SendPropertyChanged("ProblemParameter");
+				}
+			}
+		}
+
+		#endregion
+		
+		#region Serialization
+		[OnDeserializing()]
+		[EditorBrowsableAttribute(EditorBrowsableState.Never)]
+		public  void OnDeserializing(StreamingContext context)
+		{
+			Initialize();
+		}
+		#endregion
+	}
+}
+
+namespace HeuristicLab.Services.OKB.DataAccess
+{	
+	[DataContract(IsReference=true)]
+	[Table(Name=@"dbo.ProblemParameterBoolValue")]
+[KnownType(typeof(ProblemParameterBoolValue))]	public partial class ProblemParameterBoolValue : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		#region Property Change Event Handling
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		public virtual void SendPropertyChanging()
+		{
+			if (PropertyChanging != null) {
+				PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+			
+		public virtual void SendPropertyChanged(String propertyName)
+		{
+			if (PropertyChanged != null) {
+				PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+		#endregion
+		
+		#region Extensibility Method Definitions
+		partial void OnLoaded();
+		partial void OnValidate(ChangeAction action);
+		partial void OnCreated();
+		#endregion
+
+		#region Construction
+		public ProblemParameterBoolValue()
+		{
+			Initialize();
+		}
+		
+		private void Initialize()
+		{
+			_DataType = default(EntityRef<DataType>);
+			_Experiment = default(EntityRef<Experiment>);
+			_ProblemParameter = default(EntityRef<ProblemParameter>);
+			OnCreated();
+		}
+		#endregion
+
+		#region Column Mappings
+		partial void OnProblemParameterIdChanging(long value);
+		partial void OnProblemParameterIdChanged();
+		private long _ProblemParameterId;
+		[Column(Storage=@"_ProblemParameterId", DbType=@"BigInt NOT NULL", IsPrimaryKey=true, UpdateCheck=UpdateCheck.Never)]
+		[DataMember(Order=1)]
+		public long ProblemParameterId
+		{
+			get { return _ProblemParameterId; }
+			set {
+				if (_ProblemParameterId != value) {
+					if (_ProblemParameter.HasLoadedOrAssignedValue) {
+						throw new ForeignKeyReferenceAlreadyHasValueException();
+					}
+					OnProblemParameterIdChanging(value);
+					SendPropertyChanging();
+					_ProblemParameterId = value;
+					SendPropertyChanged("ProblemParameterId");
+					OnProblemParameterIdChanged();
+				}
+			}
+		}
+		
+		partial void OnExperimentIdChanging(long value);
+		partial void OnExperimentIdChanged();
+		private long _ExperimentId;
+		[Column(Storage=@"_ExperimentId", DbType=@"BigInt NOT NULL", IsPrimaryKey=true, UpdateCheck=UpdateCheck.Never)]
+		[DataMember(Order=2)]
+		public long ExperimentId
+		{
+			get { return _ExperimentId; }
+			set {
+				if (_ExperimentId != value) {
+					if (_Experiment.HasLoadedOrAssignedValue) {
+						throw new ForeignKeyReferenceAlreadyHasValueException();
+					}
+					OnExperimentIdChanging(value);
+					SendPropertyChanging();
+					_ExperimentId = value;
+					SendPropertyChanged("ExperimentId");
+					OnExperimentIdChanged();
+				}
+			}
+		}
+		
+		partial void OnDataTypeIdChanging(long value);
+		partial void OnDataTypeIdChanged();
+		private long _DataTypeId;
+		[Column(Storage=@"_DataTypeId", DbType=@"BigInt NOT NULL", CanBeNull=false)]
+		[DataMember(Order=3)]
+		public long DataTypeId
+		{
+			get { return _DataTypeId; }
+			set {
+				if (_DataTypeId != value) {
+					if (_DataType.HasLoadedOrAssignedValue) {
+						throw new ForeignKeyReferenceAlreadyHasValueException();
+					}
+					OnDataTypeIdChanging(value);
+					SendPropertyChanging();
+					_DataTypeId = value;
+					SendPropertyChanged("DataTypeId");
+					OnDataTypeIdChanged();
+				}
+			}
+		}
+		
+		partial void OnValueChanging(bool value);
+		partial void OnValueChanged();
+		private bool _Value;
+		[Column(Storage=@"_Value", DbType=@"Bit NOT NULL", CanBeNull=false)]
+		[DataMember(Order=4)]
+		public bool Value
+		{
+			get { return _Value; }
+			set {
+				if (_Value != value) {
+					OnValueChanging(value);
+					SendPropertyChanging();
+					_Value = value;
+					SendPropertyChanged("Value");
+					OnValueChanged();
+				}
+			}
+		}
+		
+		#endregion
+		
+		#region Associations
+		private EntityRef<DataType> _DataType;
+		[Association(Name=@"DataType_ProblemParameterBoolValue", Storage=@"_DataType", ThisKey=@"DataTypeId", OtherKey=@"Id", IsForeignKey=true)]
+		[DataMember(Order=5, EmitDefaultValue=false)]
+		public DataType DataType
+		{
+			get {
+				return _DataType.Entity;
+			}
+			set {
+				DataType previousValue = _DataType.Entity;
+				if ((previousValue != value) || (!_DataType.HasLoadedOrAssignedValue)) {
+					SendPropertyChanging();
+					if (previousValue != null) {
+						_DataType.Entity = null;
+						previousValue.ProblemParameterBoolValues.Remove(this);
+					}
+					_DataType.Entity = value;
+					if (value != null) {
+						value.ProblemParameterBoolValues.Add(this);
+						_DataTypeId = value.Id;
+					}
+					else {
+						_DataTypeId = default(long);
+					}
+					SendPropertyChanged("DataType");
+				}
+			}
+		}
+
+		private EntityRef<Experiment> _Experiment;
+		[Association(Name=@"Experiment_ProblemParameterBoolValue", Storage=@"_Experiment", ThisKey=@"ExperimentId", OtherKey=@"Id", IsForeignKey=true)]
+		[DataMember(Order=6, EmitDefaultValue=false)]
+		public Experiment Experiment
+		{
+			get {
+				return _Experiment.Entity;
+			}
+			set {
+				Experiment previousValue = _Experiment.Entity;
+				if ((previousValue != value) || (!_Experiment.HasLoadedOrAssignedValue)) {
+					SendPropertyChanging();
+					if (previousValue != null) {
+						_Experiment.Entity = null;
+						previousValue.ProblemParameterBoolValues.Remove(this);
+					}
+					_Experiment.Entity = value;
+					if (value != null) {
+						value.ProblemParameterBoolValues.Add(this);
+						_ExperimentId = value.Id;
+					}
+					else {
+						_ExperimentId = default(long);
+					}
+					SendPropertyChanged("Experiment");
+				}
+			}
+		}
+
+		private EntityRef<ProblemParameter> _ProblemParameter;
+		[Association(Name=@"ProblemParameter_ProblemParameterBoolValue", Storage=@"_ProblemParameter", ThisKey=@"ProblemParameterId", OtherKey=@"Id", IsForeignKey=true)]
+		[DataMember(Order=7, EmitDefaultValue=false)]
+		public ProblemParameter ProblemParameter
+		{
+			get {
+				return _ProblemParameter.Entity;
+			}
+			set {
+				ProblemParameter previousValue = _ProblemParameter.Entity;
+				if ((previousValue != value) || (!_ProblemParameter.HasLoadedOrAssignedValue)) {
+					SendPropertyChanging();
+					if (previousValue != null) {
+						_ProblemParameter.Entity = null;
+						previousValue.ProblemParameterBoolValues.Remove(this);
+					}
+					_ProblemParameter.Entity = value;
+					if (value != null) {
+						value.ProblemParameterBoolValues.Add(this);
+						_ProblemParameterId = value.Id;
+					}
+					else {
+						_ProblemParameterId = default(long);
+					}
+					SendPropertyChanged("ProblemParameter");
+				}
+			}
+		}
+
+		#endregion
+		
+		#region Serialization
+		[OnDeserializing()]
+		[EditorBrowsableAttribute(EditorBrowsableState.Never)]
+		public  void OnDeserializing(StreamingContext context)
+		{
+			Initialize();
+		}
+		#endregion
+	}
+}
+
+namespace HeuristicLab.Services.OKB.DataAccess
+{	
+	[DataContract(IsReference=true)]
+	[Table(Name=@"dbo.ProblemParameterFloatValue")]
+[KnownType(typeof(ProblemParameterFloatValue))]	public partial class ProblemParameterFloatValue : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		#region Property Change Event Handling
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		public virtual void SendPropertyChanging()
+		{
+			if (PropertyChanging != null) {
+				PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+			
+		public virtual void SendPropertyChanged(String propertyName)
+		{
+			if (PropertyChanged != null) {
+				PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+		#endregion
+		
+		#region Extensibility Method Definitions
+		partial void OnLoaded();
+		partial void OnValidate(ChangeAction action);
+		partial void OnCreated();
+		#endregion
+
+		#region Construction
+		public ProblemParameterFloatValue()
+		{
+			Initialize();
+		}
+		
+		private void Initialize()
+		{
+			_DataType = default(EntityRef<DataType>);
+			_Experiment = default(EntityRef<Experiment>);
+			_ProblemParameter = default(EntityRef<ProblemParameter>);
+			OnCreated();
+		}
+		#endregion
+
+		#region Column Mappings
+		partial void OnProblemParameterIdChanging(long value);
+		partial void OnProblemParameterIdChanged();
+		private long _ProblemParameterId;
+		[Column(Storage=@"_ProblemParameterId", DbType=@"BigInt NOT NULL", IsPrimaryKey=true, UpdateCheck=UpdateCheck.Never)]
+		[DataMember(Order=1)]
+		public long ProblemParameterId
+		{
+			get { return _ProblemParameterId; }
+			set {
+				if (_ProblemParameterId != value) {
+					if (_ProblemParameter.HasLoadedOrAssignedValue) {
+						throw new ForeignKeyReferenceAlreadyHasValueException();
+					}
+					OnProblemParameterIdChanging(value);
+					SendPropertyChanging();
+					_ProblemParameterId = value;
+					SendPropertyChanged("ProblemParameterId");
+					OnProblemParameterIdChanged();
+				}
+			}
+		}
+		
+		partial void OnExperimentIdChanging(long value);
+		partial void OnExperimentIdChanged();
+		private long _ExperimentId;
+		[Column(Storage=@"_ExperimentId", DbType=@"BigInt NOT NULL", IsPrimaryKey=true, UpdateCheck=UpdateCheck.Never)]
+		[DataMember(Order=2)]
+		public long ExperimentId
+		{
+			get { return _ExperimentId; }
+			set {
+				if (_ExperimentId != value) {
+					if (_Experiment.HasLoadedOrAssignedValue) {
+						throw new ForeignKeyReferenceAlreadyHasValueException();
+					}
+					OnExperimentIdChanging(value);
+					SendPropertyChanging();
+					_ExperimentId = value;
+					SendPropertyChanged("ExperimentId");
+					OnExperimentIdChanged();
+				}
+			}
+		}
+		
+		partial void OnDataTypeIdChanging(long value);
+		partial void OnDataTypeIdChanged();
+		private long _DataTypeId;
+		[Column(Storage=@"_DataTypeId", DbType=@"BigInt NOT NULL", CanBeNull=false)]
+		[DataMember(Order=3)]
+		public long DataTypeId
+		{
+			get { return _DataTypeId; }
+			set {
+				if (_DataTypeId != value) {
+					if (_DataType.HasLoadedOrAssignedValue) {
+						throw new ForeignKeyReferenceAlreadyHasValueException();
+					}
+					OnDataTypeIdChanging(value);
+					SendPropertyChanging();
+					_DataTypeId = value;
+					SendPropertyChanged("DataTypeId");
+					OnDataTypeIdChanged();
+				}
+			}
+		}
+		
+		partial void OnValueChanging(double value);
+		partial void OnValueChanged();
+		private double _Value;
+		[Column(Storage=@"_Value", DbType=@"Float NOT NULL", CanBeNull=false)]
+		[DataMember(Order=4)]
+		public double Value
+		{
+			get { return _Value; }
+			set {
+				if (_Value != value) {
+					OnValueChanging(value);
+					SendPropertyChanging();
+					_Value = value;
+					SendPropertyChanged("Value");
+					OnValueChanged();
+				}
+			}
+		}
+		
+		#endregion
+		
+		#region Associations
+		private EntityRef<DataType> _DataType;
+		[Association(Name=@"DataType_ProblemParameterFloatValue", Storage=@"_DataType", ThisKey=@"DataTypeId", OtherKey=@"Id", IsForeignKey=true)]
+		[DataMember(Order=5, EmitDefaultValue=false)]
+		public DataType DataType
+		{
+			get {
+				return _DataType.Entity;
+			}
+			set {
+				DataType previousValue = _DataType.Entity;
+				if ((previousValue != value) || (!_DataType.HasLoadedOrAssignedValue)) {
+					SendPropertyChanging();
+					if (previousValue != null) {
+						_DataType.Entity = null;
+						previousValue.ProblemParameterFloatValues.Remove(this);
+					}
+					_DataType.Entity = value;
+					if (value != null) {
+						value.ProblemParameterFloatValues.Add(this);
+						_DataTypeId = value.Id;
+					}
+					else {
+						_DataTypeId = default(long);
+					}
+					SendPropertyChanged("DataType");
+				}
+			}
+		}
+
+		private EntityRef<Experiment> _Experiment;
+		[Association(Name=@"Experiment_ProblemParameterFloatValue", Storage=@"_Experiment", ThisKey=@"ExperimentId", OtherKey=@"Id", IsForeignKey=true)]
+		[DataMember(Order=6, EmitDefaultValue=false)]
+		public Experiment Experiment
+		{
+			get {
+				return _Experiment.Entity;
+			}
+			set {
+				Experiment previousValue = _Experiment.Entity;
+				if ((previousValue != value) || (!_Experiment.HasLoadedOrAssignedValue)) {
+					SendPropertyChanging();
+					if (previousValue != null) {
+						_Experiment.Entity = null;
+						previousValue.ProblemParameterFloatValues.Remove(this);
+					}
+					_Experiment.Entity = value;
+					if (value != null) {
+						value.ProblemParameterFloatValues.Add(this);
+						_ExperimentId = value.Id;
+					}
+					else {
+						_ExperimentId = default(long);
+					}
+					SendPropertyChanged("Experiment");
+				}
+			}
+		}
+
+		private EntityRef<ProblemParameter> _ProblemParameter;
+		[Association(Name=@"ProblemParameter_ProblemParameterFloatValue", Storage=@"_ProblemParameter", ThisKey=@"ProblemParameterId", OtherKey=@"Id", IsForeignKey=true)]
+		[DataMember(Order=7, EmitDefaultValue=false)]
+		public ProblemParameter ProblemParameter
+		{
+			get {
+				return _ProblemParameter.Entity;
+			}
+			set {
+				ProblemParameter previousValue = _ProblemParameter.Entity;
+				if ((previousValue != value) || (!_ProblemParameter.HasLoadedOrAssignedValue)) {
+					SendPropertyChanging();
+					if (previousValue != null) {
+						_ProblemParameter.Entity = null;
+						previousValue.ProblemParameterFloatValues.Remove(this);
+					}
+					_ProblemParameter.Entity = value;
+					if (value != null) {
+						value.ProblemParameterFloatValues.Add(this);
+						_ProblemParameterId = value.Id;
+					}
+					else {
+						_ProblemParameterId = default(long);
+					}
+					SendPropertyChanged("ProblemParameter");
+				}
+			}
+		}
+
+		#endregion
+		
+		#region Serialization
+		[OnDeserializing()]
+		[EditorBrowsableAttribute(EditorBrowsableState.Never)]
+		public  void OnDeserializing(StreamingContext context)
+		{
+			Initialize();
+		}
+		#endregion
+	}
+}
+
+namespace HeuristicLab.Services.OKB.DataAccess
+{	
+	[DataContract(IsReference=true)]
+	[Table(Name=@"dbo.ProblemParameterIntValue")]
+[KnownType(typeof(ProblemParameterIntValue))]	public partial class ProblemParameterIntValue : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		#region Property Change Event Handling
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		public virtual void SendPropertyChanging()
+		{
+			if (PropertyChanging != null) {
+				PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+			
+		public virtual void SendPropertyChanged(String propertyName)
+		{
+			if (PropertyChanged != null) {
+				PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+		#endregion
+		
+		#region Extensibility Method Definitions
+		partial void OnLoaded();
+		partial void OnValidate(ChangeAction action);
+		partial void OnCreated();
+		#endregion
+
+		#region Construction
+		public ProblemParameterIntValue()
+		{
+			Initialize();
+		}
+		
+		private void Initialize()
+		{
+			_DataType = default(EntityRef<DataType>);
+			_Experiment = default(EntityRef<Experiment>);
+			_ProblemParameter = default(EntityRef<ProblemParameter>);
+			OnCreated();
+		}
+		#endregion
+
+		#region Column Mappings
+		partial void OnProblemParameterIdChanging(long value);
+		partial void OnProblemParameterIdChanged();
+		private long _ProblemParameterId;
+		[Column(Storage=@"_ProblemParameterId", DbType=@"BigInt NOT NULL", IsPrimaryKey=true, UpdateCheck=UpdateCheck.Never)]
+		[DataMember(Order=1)]
+		public long ProblemParameterId
+		{
+			get { return _ProblemParameterId; }
+			set {
+				if (_ProblemParameterId != value) {
+					if (_ProblemParameter.HasLoadedOrAssignedValue) {
+						throw new ForeignKeyReferenceAlreadyHasValueException();
+					}
+					OnProblemParameterIdChanging(value);
+					SendPropertyChanging();
+					_ProblemParameterId = value;
+					SendPropertyChanged("ProblemParameterId");
+					OnProblemParameterIdChanged();
+				}
+			}
+		}
+		
+		partial void OnExperimentIdChanging(long value);
+		partial void OnExperimentIdChanged();
+		private long _ExperimentId;
+		[Column(Storage=@"_ExperimentId", DbType=@"BigInt NOT NULL", IsPrimaryKey=true, UpdateCheck=UpdateCheck.Never)]
+		[DataMember(Order=2)]
+		public long ExperimentId
+		{
+			get { return _ExperimentId; }
+			set {
+				if (_ExperimentId != value) {
+					if (_Experiment.HasLoadedOrAssignedValue) {
+						throw new ForeignKeyReferenceAlreadyHasValueException();
+					}
+					OnExperimentIdChanging(value);
+					SendPropertyChanging();
+					_ExperimentId = value;
+					SendPropertyChanged("ExperimentId");
+					OnExperimentIdChanged();
+				}
+			}
+		}
+		
+		partial void OnDataTypeIdChanging(long value);
+		partial void OnDataTypeIdChanged();
+		private long _DataTypeId;
+		[Column(Storage=@"_DataTypeId", DbType=@"BigInt NOT NULL", CanBeNull=false)]
+		[DataMember(Order=3)]
+		public long DataTypeId
+		{
+			get { return _DataTypeId; }
+			set {
+				if (_DataTypeId != value) {
+					if (_DataType.HasLoadedOrAssignedValue) {
+						throw new ForeignKeyReferenceAlreadyHasValueException();
+					}
+					OnDataTypeIdChanging(value);
+					SendPropertyChanging();
+					_DataTypeId = value;
+					SendPropertyChanged("DataTypeId");
+					OnDataTypeIdChanged();
+				}
+			}
+		}
+		
+		partial void OnValueChanging(long value);
+		partial void OnValueChanged();
+		private long _Value;
+		[Column(Storage=@"_Value", DbType=@"BigInt NOT NULL", CanBeNull=false)]
+		[DataMember(Order=4)]
+		public long Value
+		{
+			get { return _Value; }
+			set {
+				if (_Value != value) {
+					OnValueChanging(value);
+					SendPropertyChanging();
+					_Value = value;
+					SendPropertyChanged("Value");
+					OnValueChanged();
+				}
+			}
+		}
+		
+		#endregion
+		
+		#region Associations
+		private EntityRef<DataType> _DataType;
+		[Association(Name=@"DataType_ProblemParameterIntValue", Storage=@"_DataType", ThisKey=@"DataTypeId", OtherKey=@"Id", IsForeignKey=true)]
+		[DataMember(Order=5, EmitDefaultValue=false)]
+		public DataType DataType
+		{
+			get {
+				return _DataType.Entity;
+			}
+			set {
+				DataType previousValue = _DataType.Entity;
+				if ((previousValue != value) || (!_DataType.HasLoadedOrAssignedValue)) {
+					SendPropertyChanging();
+					if (previousValue != null) {
+						_DataType.Entity = null;
+						previousValue.ProblemParameterIntValues.Remove(this);
+					}
+					_DataType.Entity = value;
+					if (value != null) {
+						value.ProblemParameterIntValues.Add(this);
+						_DataTypeId = value.Id;
+					}
+					else {
+						_DataTypeId = default(long);
+					}
+					SendPropertyChanged("DataType");
+				}
+			}
+		}
+
+		private EntityRef<Experiment> _Experiment;
+		[Association(Name=@"Experiment_ProblemParameterIntValue", Storage=@"_Experiment", ThisKey=@"ExperimentId", OtherKey=@"Id", IsForeignKey=true)]
+		[DataMember(Order=6, EmitDefaultValue=false)]
+		public Experiment Experiment
+		{
+			get {
+				return _Experiment.Entity;
+			}
+			set {
+				Experiment previousValue = _Experiment.Entity;
+				if ((previousValue != value) || (!_Experiment.HasLoadedOrAssignedValue)) {
+					SendPropertyChanging();
+					if (previousValue != null) {
+						_Experiment.Entity = null;
+						previousValue.ProblemParameterIntValues.Remove(this);
+					}
+					_Experiment.Entity = value;
+					if (value != null) {
+						value.ProblemParameterIntValues.Add(this);
+						_ExperimentId = value.Id;
+					}
+					else {
+						_ExperimentId = default(long);
+					}
+					SendPropertyChanged("Experiment");
+				}
+			}
+		}
+
+		private EntityRef<ProblemParameter> _ProblemParameter;
+		[Association(Name=@"ProblemParameter_ProblemParameterIntValue", Storage=@"_ProblemParameter", ThisKey=@"ProblemParameterId", OtherKey=@"Id", IsForeignKey=true)]
+		[DataMember(Order=7, EmitDefaultValue=false)]
+		public ProblemParameter ProblemParameter
+		{
+			get {
+				return _ProblemParameter.Entity;
+			}
+			set {
+				ProblemParameter previousValue = _ProblemParameter.Entity;
+				if ((previousValue != value) || (!_ProblemParameter.HasLoadedOrAssignedValue)) {
+					SendPropertyChanging();
+					if (previousValue != null) {
+						_ProblemParameter.Entity = null;
+						previousValue.ProblemParameterIntValues.Remove(this);
+					}
+					_ProblemParameter.Entity = value;
+					if (value != null) {
+						value.ProblemParameterIntValues.Add(this);
+						_ProblemParameterId = value.Id;
+					}
+					else {
+						_ProblemParameterId = default(long);
+					}
+					SendPropertyChanged("ProblemParameter");
+				}
+			}
+		}
+
+		#endregion
+		
+		#region Serialization
+		[OnDeserializing()]
+		[EditorBrowsableAttribute(EditorBrowsableState.Never)]
+		public  void OnDeserializing(StreamingContext context)
+		{
+			Initialize();
+		}
+		#endregion
+	}
+}
+
+namespace HeuristicLab.Services.OKB.DataAccess
+{	
+	[DataContract(IsReference=true)]
+	[Table(Name=@"dbo.ProblemParameterStringValue")]
+[KnownType(typeof(ProblemParameterStringValue))]	public partial class ProblemParameterStringValue : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		#region Property Change Event Handling
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		public virtual void SendPropertyChanging()
+		{
+			if (PropertyChanging != null) {
+				PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+			
+		public virtual void SendPropertyChanged(String propertyName)
+		{
+			if (PropertyChanged != null) {
+				PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+		#endregion
+		
+		#region Extensibility Method Definitions
+		partial void OnLoaded();
+		partial void OnValidate(ChangeAction action);
+		partial void OnCreated();
+		#endregion
+
+		#region Construction
+		public ProblemParameterStringValue()
+		{
+			Initialize();
+		}
+		
+		private void Initialize()
+		{
+			_DataType = default(EntityRef<DataType>);
+			_Experiment = default(EntityRef<Experiment>);
+			_ProblemParameter = default(EntityRef<ProblemParameter>);
+			OnCreated();
+		}
+		#endregion
+
+		#region Column Mappings
+		partial void OnProblemParameterIdChanging(long value);
+		partial void OnProblemParameterIdChanged();
+		private long _ProblemParameterId;
+		[Column(Storage=@"_ProblemParameterId", DbType=@"BigInt NOT NULL", IsPrimaryKey=true, UpdateCheck=UpdateCheck.Never)]
+		[DataMember(Order=1)]
+		public long ProblemParameterId
+		{
+			get { return _ProblemParameterId; }
+			set {
+				if (_ProblemParameterId != value) {
+					if (_ProblemParameter.HasLoadedOrAssignedValue) {
+						throw new ForeignKeyReferenceAlreadyHasValueException();
+					}
+					OnProblemParameterIdChanging(value);
+					SendPropertyChanging();
+					_ProblemParameterId = value;
+					SendPropertyChanged("ProblemParameterId");
+					OnProblemParameterIdChanged();
+				}
+			}
+		}
+		
+		partial void OnExperimentIdChanging(long value);
+		partial void OnExperimentIdChanged();
+		private long _ExperimentId;
+		[Column(Storage=@"_ExperimentId", DbType=@"BigInt NOT NULL", IsPrimaryKey=true, UpdateCheck=UpdateCheck.Never)]
+		[DataMember(Order=2)]
+		public long ExperimentId
+		{
+			get { return _ExperimentId; }
+			set {
+				if (_ExperimentId != value) {
+					if (_Experiment.HasLoadedOrAssignedValue) {
+						throw new ForeignKeyReferenceAlreadyHasValueException();
+					}
+					OnExperimentIdChanging(value);
+					SendPropertyChanging();
+					_ExperimentId = value;
+					SendPropertyChanged("ExperimentId");
+					OnExperimentIdChanged();
+				}
+			}
+		}
+		
+		partial void OnDataTypeIdChanging(long value);
+		partial void OnDataTypeIdChanged();
+		private long _DataTypeId;
+		[Column(Storage=@"_DataTypeId", DbType=@"BigInt NOT NULL", CanBeNull=false)]
+		[DataMember(Order=3)]
+		public long DataTypeId
+		{
+			get { return _DataTypeId; }
+			set {
+				if (_DataTypeId != value) {
+					if (_DataType.HasLoadedOrAssignedValue) {
+						throw new ForeignKeyReferenceAlreadyHasValueException();
+					}
+					OnDataTypeIdChanging(value);
+					SendPropertyChanging();
+					_DataTypeId = value;
+					SendPropertyChanged("DataTypeId");
+					OnDataTypeIdChanged();
+				}
+			}
+		}
+		
+		partial void OnValueChanging(string value);
+		partial void OnValueChanged();
+		private string _Value;
+		[Column(Storage=@"_Value", DbType=@"NVarChar(MAX) NOT NULL", CanBeNull=false)]
+		[DataMember(Order=4)]
+		public string Value
+		{
+			get { return _Value; }
+			set {
+				if (_Value != value) {
+					OnValueChanging(value);
+					SendPropertyChanging();
+					_Value = value;
+					SendPropertyChanged("Value");
+					OnValueChanged();
+				}
+			}
+		}
+		
+		#endregion
+		
+		#region Associations
+		private EntityRef<DataType> _DataType;
+		[Association(Name=@"DataType_ProblemParameterStringValue", Storage=@"_DataType", ThisKey=@"DataTypeId", OtherKey=@"Id", IsForeignKey=true)]
+		[DataMember(Order=5, EmitDefaultValue=false)]
+		public DataType DataType
+		{
+			get {
+				return _DataType.Entity;
+			}
+			set {
+				DataType previousValue = _DataType.Entity;
+				if ((previousValue != value) || (!_DataType.HasLoadedOrAssignedValue)) {
+					SendPropertyChanging();
+					if (previousValue != null) {
+						_DataType.Entity = null;
+						previousValue.ProblemParameterStringValues.Remove(this);
+					}
+					_DataType.Entity = value;
+					if (value != null) {
+						value.ProblemParameterStringValues.Add(this);
+						_DataTypeId = value.Id;
+					}
+					else {
+						_DataTypeId = default(long);
+					}
+					SendPropertyChanged("DataType");
+				}
+			}
+		}
+
+		private EntityRef<Experiment> _Experiment;
+		[Association(Name=@"Experiment_ProblemParameterStringValue", Storage=@"_Experiment", ThisKey=@"ExperimentId", OtherKey=@"Id", IsForeignKey=true)]
+		[DataMember(Order=6, EmitDefaultValue=false)]
+		public Experiment Experiment
+		{
+			get {
+				return _Experiment.Entity;
+			}
+			set {
+				Experiment previousValue = _Experiment.Entity;
+				if ((previousValue != value) || (!_Experiment.HasLoadedOrAssignedValue)) {
+					SendPropertyChanging();
+					if (previousValue != null) {
+						_Experiment.Entity = null;
+						previousValue.ProblemParameterStringValues.Remove(this);
+					}
+					_Experiment.Entity = value;
+					if (value != null) {
+						value.ProblemParameterStringValues.Add(this);
+						_ExperimentId = value.Id;
+					}
+					else {
+						_ExperimentId = default(long);
+					}
+					SendPropertyChanged("Experiment");
+				}
+			}
+		}
+
+		private EntityRef<ProblemParameter> _ProblemParameter;
+		[Association(Name=@"ProblemParameter_ProblemParameterStringValue", Storage=@"_ProblemParameter", ThisKey=@"ProblemParameterId", OtherKey=@"Id", IsForeignKey=true)]
+		[DataMember(Order=7, EmitDefaultValue=false)]
+		public ProblemParameter ProblemParameter
+		{
+			get {
+				return _ProblemParameter.Entity;
+			}
+			set {
+				ProblemParameter previousValue = _ProblemParameter.Entity;
+				if ((previousValue != value) || (!_ProblemParameter.HasLoadedOrAssignedValue)) {
+					SendPropertyChanging();
+					if (previousValue != null) {
+						_ProblemParameter.Entity = null;
+						previousValue.ProblemParameterStringValues.Remove(this);
+					}
+					_ProblemParameter.Entity = value;
+					if (value != null) {
+						value.ProblemParameterStringValues.Add(this);
+						_ProblemParameterId = value.Id;
+					}
+					else {
+						_ProblemParameterId = default(long);
+					}
+					SendPropertyChanged("ProblemParameter");
+				}
+			}
+		}
+
+		#endregion
+		
+		#region Serialization
+		[OnDeserializing()]
+		[EditorBrowsableAttribute(EditorBrowsableState.Never)]
+		public  void OnDeserializing(StreamingContext context)
+		{
+			Initialize();
+		}
+		#endregion
+	}
+}
+
+namespace HeuristicLab.Services.OKB.DataAccess
+{	
+	[DataContract(IsReference=true)]
+	[Table(Name=@"dbo.ResultBlobValue")]
+[KnownType(typeof(ResultBlobValue))]	public partial class ResultBlobValue : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		#region Property Change Event Handling
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		public virtual void SendPropertyChanging()
+		{
+			if (PropertyChanging != null) {
+				PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+			
+		public virtual void SendPropertyChanged(String propertyName)
+		{
+			if (PropertyChanged != null) {
+				PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+		#endregion
+		
+		#region Extensibility Method Definitions
+		partial void OnLoaded();
+		partial void OnValidate(ChangeAction action);
+		partial void OnCreated();
+		#endregion
+
+		#region Construction
+		public ResultBlobValue()
+		{
+			Initialize();
+		}
+		
+		private void Initialize()
+		{
+			_DataType = default(EntityRef<DataType>);
+			_Result = default(EntityRef<Result>);
+			_Run = default(EntityRef<Run>);
+			OnCreated();
+		}
+		#endregion
+
+		#region Column Mappings
+		partial void OnResultIdChanging(long value);
+		partial void OnResultIdChanged();
+		private long _ResultId;
+		[Column(Storage=@"_ResultId", DbType=@"BigInt NOT NULL", IsPrimaryKey=true, UpdateCheck=UpdateCheck.Never)]
+		[DataMember(Order=1)]
+		public long ResultId
+		{
+			get { return _ResultId; }
+			set {
+				if (_ResultId != value) {
+					if (_Result.HasLoadedOrAssignedValue) {
+						throw new ForeignKeyReferenceAlreadyHasValueException();
+					}
+					OnResultIdChanging(value);
+					SendPropertyChanging();
+					_ResultId = value;
+					SendPropertyChanged("ResultId");
+					OnResultIdChanged();
+				}
+			}
+		}
+		
+		partial void OnRunIdChanging(long value);
+		partial void OnRunIdChanged();
+		private long _RunId;
+		[Column(Storage=@"_RunId", DbType=@"BigInt NOT NULL", IsPrimaryKey=true, UpdateCheck=UpdateCheck.Never)]
+		[DataMember(Order=2)]
+		public long RunId
+		{
+			get { return _RunId; }
+			set {
+				if (_RunId != value) {
+					if (_Run.HasLoadedOrAssignedValue) {
+						throw new ForeignKeyReferenceAlreadyHasValueException();
+					}
+					OnRunIdChanging(value);
+					SendPropertyChanging();
+					_RunId = value;
+					SendPropertyChanged("RunId");
+					OnRunIdChanged();
+				}
+			}
+		}
+		
+		partial void OnDataTypeIdChanging(long value);
+		partial void OnDataTypeIdChanged();
+		private long _DataTypeId;
+		[Column(Storage=@"_DataTypeId", DbType=@"BigInt NOT NULL", CanBeNull=false)]
+		[DataMember(Order=3)]
+		public long DataTypeId
+		{
+			get { return _DataTypeId; }
+			set {
+				if (_DataTypeId != value) {
+					if (_DataType.HasLoadedOrAssignedValue) {
+						throw new ForeignKeyReferenceAlreadyHasValueException();
+					}
+					OnDataTypeIdChanging(value);
+					SendPropertyChanging();
+					_DataTypeId = value;
+					SendPropertyChanged("DataTypeId");
+					OnDataTypeIdChanged();
+				}
+			}
+		}
+		
+		partial void OnValueChanging(Binary value);
+		partial void OnValueChanged();
+		private Binary _Value;
+		[Column(Storage=@"_Value", DbType=@"VarBinary(MAX) NOT NULL", CanBeNull=false, UpdateCheck=UpdateCheck.Never)]
+		[DataMember(Order=4)]
+		public Binary Value
+		{
+			get { return _Value; }
+			set {
+				if (_Value != value) {
+					OnValueChanging(value);
+					SendPropertyChanging();
+					_Value = value;
+					SendPropertyChanged("Value");
+					OnValueChanged();
+				}
+			}
+		}
+		
+		#endregion
+		
+		#region Associations
+		private EntityRef<DataType> _DataType;
+		[Association(Name=@"DataType_ResultBlobValue", Storage=@"_DataType", ThisKey=@"DataTypeId", OtherKey=@"Id", IsForeignKey=true)]
+		[DataMember(Order=5, EmitDefaultValue=false)]
+		public DataType DataType
+		{
+			get {
+				return _DataType.Entity;
+			}
+			set {
+				DataType previousValue = _DataType.Entity;
+				if ((previousValue != value) || (!_DataType.HasLoadedOrAssignedValue)) {
+					SendPropertyChanging();
+					if (previousValue != null) {
+						_DataType.Entity = null;
+						previousValue.ResultBlobValues.Remove(this);
+					}
+					_DataType.Entity = value;
+					if (value != null) {
+						value.ResultBlobValues.Add(this);
+						_DataTypeId = value.Id;
+					}
+					else {
+						_DataTypeId = default(long);
+					}
+					SendPropertyChanged("DataType");
+				}
+			}
+		}
+
+		private EntityRef<Result> _Result;
+		[Association(Name=@"Result_ResultBlobValue", Storage=@"_Result", ThisKey=@"ResultId", OtherKey=@"Id", IsForeignKey=true)]
+		[DataMember(Order=6, EmitDefaultValue=false)]
+		public Result Result
+		{
+			get {
+				return _Result.Entity;
+			}
+			set {
+				Result previousValue = _Result.Entity;
+				if ((previousValue != value) || (!_Result.HasLoadedOrAssignedValue)) {
+					SendPropertyChanging();
+					if (previousValue != null) {
+						_Result.Entity = null;
+						previousValue.ResultBlobValues.Remove(this);
+					}
+					_Result.Entity = value;
+					if (value != null) {
+						value.ResultBlobValues.Add(this);
+						_ResultId = value.Id;
+					}
+					else {
+						_ResultId = default(long);
+					}
+					SendPropertyChanged("Result");
+				}
+			}
+		}
+
+		private EntityRef<Run> _Run;
+		[Association(Name=@"Run_ResultBlobValue", Storage=@"_Run", ThisKey=@"RunId", OtherKey=@"Id", IsForeignKey=true)]
+		[DataMember(Order=7, EmitDefaultValue=false)]
+		public Run Run
+		{
+			get {
+				return _Run.Entity;
+			}
+			set {
+				Run previousValue = _Run.Entity;
+				if ((previousValue != value) || (!_Run.HasLoadedOrAssignedValue)) {
+					SendPropertyChanging();
+					if (previousValue != null) {
+						_Run.Entity = null;
+						previousValue.ResultBlobValues.Remove(this);
+					}
+					_Run.Entity = value;
+					if (value != null) {
+						value.ResultBlobValues.Add(this);
+						_RunId = value.Id;
+					}
+					else {
+						_RunId = default(long);
+					}
+					SendPropertyChanged("Run");
+				}
+			}
+		}
+
+		#endregion
+		
+		#region Serialization
+		[OnDeserializing()]
+		[EditorBrowsableAttribute(EditorBrowsableState.Never)]
+		public  void OnDeserializing(StreamingContext context)
+		{
+			Initialize();
+		}
+		#endregion
+	}
+}
+
+namespace HeuristicLab.Services.OKB.DataAccess
+{	
+	[DataContract(IsReference=true)]
+	[Table(Name=@"dbo.ResultBoolValue")]
+[KnownType(typeof(ResultBoolValue))]	public partial class ResultBoolValue : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		#region Property Change Event Handling
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		public virtual void SendPropertyChanging()
+		{
+			if (PropertyChanging != null) {
+				PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+			
+		public virtual void SendPropertyChanged(String propertyName)
+		{
+			if (PropertyChanged != null) {
+				PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+		#endregion
+		
+		#region Extensibility Method Definitions
+		partial void OnLoaded();
+		partial void OnValidate(ChangeAction action);
+		partial void OnCreated();
+		#endregion
+
+		#region Construction
+		public ResultBoolValue()
+		{
+			Initialize();
+		}
+		
+		private void Initialize()
+		{
+			_DataType = default(EntityRef<DataType>);
+			_Result = default(EntityRef<Result>);
+			_Run = default(EntityRef<Run>);
+			OnCreated();
+		}
+		#endregion
+
+		#region Column Mappings
+		partial void OnResultIdChanging(long value);
+		partial void OnResultIdChanged();
+		private long _ResultId;
+		[Column(Storage=@"_ResultId", DbType=@"BigInt NOT NULL", IsPrimaryKey=true, UpdateCheck=UpdateCheck.Never)]
+		[DataMember(Order=1)]
+		public long ResultId
+		{
+			get { return _ResultId; }
+			set {
+				if (_ResultId != value) {
+					if (_Result.HasLoadedOrAssignedValue) {
+						throw new ForeignKeyReferenceAlreadyHasValueException();
+					}
+					OnResultIdChanging(value);
+					SendPropertyChanging();
+					_ResultId = value;
+					SendPropertyChanged("ResultId");
+					OnResultIdChanged();
+				}
+			}
+		}
+		
+		partial void OnRunIdChanging(long value);
+		partial void OnRunIdChanged();
+		private long _RunId;
+		[Column(Storage=@"_RunId", DbType=@"BigInt NOT NULL", IsPrimaryKey=true, UpdateCheck=UpdateCheck.Never)]
+		[DataMember(Order=2)]
+		public long RunId
+		{
+			get { return _RunId; }
+			set {
+				if (_RunId != value) {
+					if (_Run.HasLoadedOrAssignedValue) {
+						throw new ForeignKeyReferenceAlreadyHasValueException();
+					}
+					OnRunIdChanging(value);
+					SendPropertyChanging();
+					_RunId = value;
+					SendPropertyChanged("RunId");
+					OnRunIdChanged();
+				}
+			}
+		}
+		
+		partial void OnDataTypeIdChanging(long value);
+		partial void OnDataTypeIdChanged();
+		private long _DataTypeId;
+		[Column(Storage=@"_DataTypeId", DbType=@"BigInt NOT NULL", CanBeNull=false)]
+		[DataMember(Order=3)]
+		public long DataTypeId
+		{
+			get { return _DataTypeId; }
+			set {
+				if (_DataTypeId != value) {
+					if (_DataType.HasLoadedOrAssignedValue) {
+						throw new ForeignKeyReferenceAlreadyHasValueException();
+					}
+					OnDataTypeIdChanging(value);
+					SendPropertyChanging();
+					_DataTypeId = value;
+					SendPropertyChanged("DataTypeId");
+					OnDataTypeIdChanged();
+				}
+			}
+		}
+		
+		partial void OnValueChanging(bool value);
+		partial void OnValueChanged();
+		private bool _Value;
+		[Column(Storage=@"_Value", DbType=@"Bit NOT NULL", CanBeNull=false)]
+		[DataMember(Order=4)]
+		public bool Value
+		{
+			get { return _Value; }
+			set {
+				if (_Value != value) {
+					OnValueChanging(value);
+					SendPropertyChanging();
+					_Value = value;
+					SendPropertyChanged("Value");
+					OnValueChanged();
+				}
+			}
+		}
+		
+		#endregion
+		
+		#region Associations
+		private EntityRef<DataType> _DataType;
+		[Association(Name=@"DataType_ResultBoolValue", Storage=@"_DataType", ThisKey=@"DataTypeId", OtherKey=@"Id", IsForeignKey=true)]
+		[DataMember(Order=5, EmitDefaultValue=false)]
+		public DataType DataType
+		{
+			get {
+				return _DataType.Entity;
+			}
+			set {
+				DataType previousValue = _DataType.Entity;
+				if ((previousValue != value) || (!_DataType.HasLoadedOrAssignedValue)) {
+					SendPropertyChanging();
+					if (previousValue != null) {
+						_DataType.Entity = null;
+						previousValue.ResultBoolValues.Remove(this);
+					}
+					_DataType.Entity = value;
+					if (value != null) {
+						value.ResultBoolValues.Add(this);
+						_DataTypeId = value.Id;
+					}
+					else {
+						_DataTypeId = default(long);
+					}
+					SendPropertyChanged("DataType");
+				}
+			}
+		}
+
+		private EntityRef<Result> _Result;
+		[Association(Name=@"Result_ResultBoolValue", Storage=@"_Result", ThisKey=@"ResultId", OtherKey=@"Id", IsForeignKey=true)]
+		[DataMember(Order=6, EmitDefaultValue=false)]
+		public Result Result
+		{
+			get {
+				return _Result.Entity;
+			}
+			set {
+				Result previousValue = _Result.Entity;
+				if ((previousValue != value) || (!_Result.HasLoadedOrAssignedValue)) {
+					SendPropertyChanging();
+					if (previousValue != null) {
+						_Result.Entity = null;
+						previousValue.ResultBoolValues.Remove(this);
+					}
+					_Result.Entity = value;
+					if (value != null) {
+						value.ResultBoolValues.Add(this);
+						_ResultId = value.Id;
+					}
+					else {
+						_ResultId = default(long);
+					}
+					SendPropertyChanged("Result");
+				}
+			}
+		}
+
+		private EntityRef<Run> _Run;
+		[Association(Name=@"Run_ResultBoolValue", Storage=@"_Run", ThisKey=@"RunId", OtherKey=@"Id", IsForeignKey=true)]
+		[DataMember(Order=7, EmitDefaultValue=false)]
+		public Run Run
+		{
+			get {
+				return _Run.Entity;
+			}
+			set {
+				Run previousValue = _Run.Entity;
+				if ((previousValue != value) || (!_Run.HasLoadedOrAssignedValue)) {
+					SendPropertyChanging();
+					if (previousValue != null) {
+						_Run.Entity = null;
+						previousValue.ResultBoolValues.Remove(this);
+					}
+					_Run.Entity = value;
+					if (value != null) {
+						value.ResultBoolValues.Add(this);
+						_RunId = value.Id;
+					}
+					else {
+						_RunId = default(long);
+					}
+					SendPropertyChanged("Run");
+				}
+			}
+		}
+
+		#endregion
+		
+		#region Serialization
+		[OnDeserializing()]
+		[EditorBrowsableAttribute(EditorBrowsableState.Never)]
+		public  void OnDeserializing(StreamingContext context)
+		{
+			Initialize();
+		}
+		#endregion
+	}
+}
+
+namespace HeuristicLab.Services.OKB.DataAccess
+{	
+	[DataContract(IsReference=true)]
+	[Table(Name=@"dbo.ResultFloatValue")]
+[KnownType(typeof(ResultFloatValue))]	public partial class ResultFloatValue : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		#region Property Change Event Handling
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		public virtual void SendPropertyChanging()
+		{
+			if (PropertyChanging != null) {
+				PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+			
+		public virtual void SendPropertyChanged(String propertyName)
+		{
+			if (PropertyChanged != null) {
+				PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+		#endregion
+		
+		#region Extensibility Method Definitions
+		partial void OnLoaded();
+		partial void OnValidate(ChangeAction action);
+		partial void OnCreated();
+		#endregion
+
+		#region Construction
+		public ResultFloatValue()
+		{
+			Initialize();
+		}
+		
+		private void Initialize()
+		{
+			_DataType = default(EntityRef<DataType>);
+			_Result = default(EntityRef<Result>);
+			_Run = default(EntityRef<Run>);
+			OnCreated();
+		}
+		#endregion
+
+		#region Column Mappings
+		partial void OnResultIdChanging(long value);
+		partial void OnResultIdChanged();
+		private long _ResultId;
+		[Column(Storage=@"_ResultId", DbType=@"BigInt NOT NULL", IsPrimaryKey=true, UpdateCheck=UpdateCheck.Never)]
+		[DataMember(Order=1)]
+		public long ResultId
+		{
+			get { return _ResultId; }
+			set {
+				if (_ResultId != value) {
+					if (_Result.HasLoadedOrAssignedValue) {
+						throw new ForeignKeyReferenceAlreadyHasValueException();
+					}
+					OnResultIdChanging(value);
+					SendPropertyChanging();
+					_ResultId = value;
+					SendPropertyChanged("ResultId");
+					OnResultIdChanged();
+				}
+			}
+		}
+		
+		partial void OnRunIdChanging(long value);
+		partial void OnRunIdChanged();
+		private long _RunId;
+		[Column(Storage=@"_RunId", DbType=@"BigInt NOT NULL", IsPrimaryKey=true, UpdateCheck=UpdateCheck.Never)]
+		[DataMember(Order=2)]
+		public long RunId
+		{
+			get { return _RunId; }
+			set {
+				if (_RunId != value) {
+					if (_Run.HasLoadedOrAssignedValue) {
+						throw new ForeignKeyReferenceAlreadyHasValueException();
+					}
+					OnRunIdChanging(value);
+					SendPropertyChanging();
+					_RunId = value;
+					SendPropertyChanged("RunId");
+					OnRunIdChanged();
+				}
+			}
+		}
+		
+		partial void OnDataTypeIdChanging(long value);
+		partial void OnDataTypeIdChanged();
+		private long _DataTypeId;
+		[Column(Storage=@"_DataTypeId", DbType=@"BigInt NOT NULL", CanBeNull=false)]
+		[DataMember(Order=3)]
+		public long DataTypeId
+		{
+			get { return _DataTypeId; }
+			set {
+				if (_DataTypeId != value) {
+					if (_DataType.HasLoadedOrAssignedValue) {
+						throw new ForeignKeyReferenceAlreadyHasValueException();
+					}
+					OnDataTypeIdChanging(value);
+					SendPropertyChanging();
+					_DataTypeId = value;
+					SendPropertyChanged("DataTypeId");
+					OnDataTypeIdChanged();
+				}
+			}
+		}
+		
+		partial void OnValueChanging(double value);
+		partial void OnValueChanged();
+		private double _Value;
+		[Column(Storage=@"_Value", DbType=@"Float NOT NULL", CanBeNull=false)]
+		[DataMember(Order=4)]
+		public double Value
+		{
+			get { return _Value; }
+			set {
+				if (_Value != value) {
+					OnValueChanging(value);
+					SendPropertyChanging();
+					_Value = value;
+					SendPropertyChanged("Value");
+					OnValueChanged();
+				}
+			}
+		}
+		
+		#endregion
+		
+		#region Associations
+		private EntityRef<DataType> _DataType;
+		[Association(Name=@"DataType_ResultFloatValue", Storage=@"_DataType", ThisKey=@"DataTypeId", OtherKey=@"Id", IsForeignKey=true)]
+		[DataMember(Order=5, EmitDefaultValue=false)]
+		public DataType DataType
+		{
+			get {
+				return _DataType.Entity;
+			}
+			set {
+				DataType previousValue = _DataType.Entity;
+				if ((previousValue != value) || (!_DataType.HasLoadedOrAssignedValue)) {
+					SendPropertyChanging();
+					if (previousValue != null) {
+						_DataType.Entity = null;
+						previousValue.ResultFloatValues.Remove(this);
+					}
+					_DataType.Entity = value;
+					if (value != null) {
+						value.ResultFloatValues.Add(this);
+						_DataTypeId = value.Id;
+					}
+					else {
+						_DataTypeId = default(long);
+					}
+					SendPropertyChanged("DataType");
+				}
+			}
+		}
+
+		private EntityRef<Result> _Result;
+		[Association(Name=@"Result_ResultFloatValue", Storage=@"_Result", ThisKey=@"ResultId", OtherKey=@"Id", IsForeignKey=true)]
+		[DataMember(Order=6, EmitDefaultValue=false)]
+		public Result Result
+		{
+			get {
+				return _Result.Entity;
+			}
+			set {
+				Result previousValue = _Result.Entity;
+				if ((previousValue != value) || (!_Result.HasLoadedOrAssignedValue)) {
+					SendPropertyChanging();
+					if (previousValue != null) {
+						_Result.Entity = null;
+						previousValue.ResultFloatValues.Remove(this);
+					}
+					_Result.Entity = value;
+					if (value != null) {
+						value.ResultFloatValues.Add(this);
+						_ResultId = value.Id;
+					}
+					else {
+						_ResultId = default(long);
+					}
+					SendPropertyChanged("Result");
+				}
+			}
+		}
+
+		private EntityRef<Run> _Run;
+		[Association(Name=@"Run_ResultFloatValue", Storage=@"_Run", ThisKey=@"RunId", OtherKey=@"Id", IsForeignKey=true)]
+		[DataMember(Order=7, EmitDefaultValue=false)]
+		public Run Run
+		{
+			get {
+				return _Run.Entity;
+			}
+			set {
+				Run previousValue = _Run.Entity;
+				if ((previousValue != value) || (!_Run.HasLoadedOrAssignedValue)) {
+					SendPropertyChanging();
+					if (previousValue != null) {
+						_Run.Entity = null;
+						previousValue.ResultFloatValues.Remove(this);
+					}
+					_Run.Entity = value;
+					if (value != null) {
+						value.ResultFloatValues.Add(this);
+						_RunId = value.Id;
+					}
+					else {
+						_RunId = default(long);
+					}
+					SendPropertyChanged("Run");
+				}
+			}
+		}
+
+		#endregion
+		
+		#region Serialization
+		[OnDeserializing()]
+		[EditorBrowsableAttribute(EditorBrowsableState.Never)]
+		public  void OnDeserializing(StreamingContext context)
+		{
+			Initialize();
+		}
+		#endregion
+	}
+}
+
+namespace HeuristicLab.Services.OKB.DataAccess
+{	
+	[DataContract(IsReference=true)]
+	[Table(Name=@"dbo.ResultIntValue")]
+[KnownType(typeof(ResultIntValue))]	public partial class ResultIntValue : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		#region Property Change Event Handling
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		public virtual void SendPropertyChanging()
+		{
+			if (PropertyChanging != null) {
+				PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+			
+		public virtual void SendPropertyChanged(String propertyName)
+		{
+			if (PropertyChanged != null) {
+				PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+		#endregion
+		
+		#region Extensibility Method Definitions
+		partial void OnLoaded();
+		partial void OnValidate(ChangeAction action);
+		partial void OnCreated();
+		#endregion
+
+		#region Construction
+		public ResultIntValue()
+		{
+			Initialize();
+		}
+		
+		private void Initialize()
+		{
+			_DataType = default(EntityRef<DataType>);
+			_Result = default(EntityRef<Result>);
+			_Run = default(EntityRef<Run>);
+			OnCreated();
+		}
+		#endregion
+
+		#region Column Mappings
+		partial void OnResultIdChanging(long value);
+		partial void OnResultIdChanged();
+		private long _ResultId;
+		[Column(Storage=@"_ResultId", DbType=@"BigInt NOT NULL", IsPrimaryKey=true, UpdateCheck=UpdateCheck.Never)]
+		[DataMember(Order=1)]
+		public long ResultId
+		{
+			get { return _ResultId; }
+			set {
+				if (_ResultId != value) {
+					if (_Result.HasLoadedOrAssignedValue) {
+						throw new ForeignKeyReferenceAlreadyHasValueException();
+					}
+					OnResultIdChanging(value);
+					SendPropertyChanging();
+					_ResultId = value;
+					SendPropertyChanged("ResultId");
+					OnResultIdChanged();
+				}
+			}
+		}
+		
+		partial void OnRunIdChanging(long value);
+		partial void OnRunIdChanged();
+		private long _RunId;
+		[Column(Storage=@"_RunId", DbType=@"BigInt NOT NULL", IsPrimaryKey=true, UpdateCheck=UpdateCheck.Never)]
+		[DataMember(Order=2)]
+		public long RunId
+		{
+			get { return _RunId; }
+			set {
+				if (_RunId != value) {
+					if (_Run.HasLoadedOrAssignedValue) {
+						throw new ForeignKeyReferenceAlreadyHasValueException();
+					}
+					OnRunIdChanging(value);
+					SendPropertyChanging();
+					_RunId = value;
+					SendPropertyChanged("RunId");
+					OnRunIdChanged();
+				}
+			}
+		}
+		
+		partial void OnDataTypeIdChanging(long value);
+		partial void OnDataTypeIdChanged();
+		private long _DataTypeId;
+		[Column(Storage=@"_DataTypeId", DbType=@"BigInt NOT NULL", CanBeNull=false)]
+		[DataMember(Order=3)]
+		public long DataTypeId
+		{
+			get { return _DataTypeId; }
+			set {
+				if (_DataTypeId != value) {
+					if (_DataType.HasLoadedOrAssignedValue) {
+						throw new ForeignKeyReferenceAlreadyHasValueException();
+					}
+					OnDataTypeIdChanging(value);
+					SendPropertyChanging();
+					_DataTypeId = value;
+					SendPropertyChanged("DataTypeId");
+					OnDataTypeIdChanged();
+				}
+			}
+		}
+		
+		partial void OnValueChanging(long value);
+		partial void OnValueChanged();
+		private long _Value;
+		[Column(Storage=@"_Value", DbType=@"BigInt NOT NULL", CanBeNull=false)]
+		[DataMember(Order=4)]
+		public long Value
+		{
+			get { return _Value; }
+			set {
+				if (_Value != value) {
+					OnValueChanging(value);
+					SendPropertyChanging();
+					_Value = value;
+					SendPropertyChanged("Value");
+					OnValueChanged();
+				}
+			}
+		}
+		
+		#endregion
+		
+		#region Associations
+		private EntityRef<DataType> _DataType;
+		[Association(Name=@"DataType_ResultIntValue", Storage=@"_DataType", ThisKey=@"DataTypeId", OtherKey=@"Id", IsForeignKey=true)]
+		[DataMember(Order=5, EmitDefaultValue=false)]
+		public DataType DataType
+		{
+			get {
+				return _DataType.Entity;
+			}
+			set {
+				DataType previousValue = _DataType.Entity;
+				if ((previousValue != value) || (!_DataType.HasLoadedOrAssignedValue)) {
+					SendPropertyChanging();
+					if (previousValue != null) {
+						_DataType.Entity = null;
+						previousValue.ResultIntValues.Remove(this);
+					}
+					_DataType.Entity = value;
+					if (value != null) {
+						value.ResultIntValues.Add(this);
+						_DataTypeId = value.Id;
+					}
+					else {
+						_DataTypeId = default(long);
+					}
+					SendPropertyChanged("DataType");
+				}
+			}
+		}
+
+		private EntityRef<Result> _Result;
+		[Association(Name=@"Result_ResultIntValue", Storage=@"_Result", ThisKey=@"ResultId", OtherKey=@"Id", IsForeignKey=true)]
+		[DataMember(Order=6, EmitDefaultValue=false)]
+		public Result Result
+		{
+			get {
+				return _Result.Entity;
+			}
+			set {
+				Result previousValue = _Result.Entity;
+				if ((previousValue != value) || (!_Result.HasLoadedOrAssignedValue)) {
+					SendPropertyChanging();
+					if (previousValue != null) {
+						_Result.Entity = null;
+						previousValue.ResultIntValues.Remove(this);
+					}
+					_Result.Entity = value;
+					if (value != null) {
+						value.ResultIntValues.Add(this);
+						_ResultId = value.Id;
+					}
+					else {
+						_ResultId = default(long);
+					}
+					SendPropertyChanged("Result");
+				}
+			}
+		}
+
+		private EntityRef<Run> _Run;
+		[Association(Name=@"Run_ResultIntValue", Storage=@"_Run", ThisKey=@"RunId", OtherKey=@"Id", IsForeignKey=true)]
+		[DataMember(Order=7, EmitDefaultValue=false)]
+		public Run Run
+		{
+			get {
+				return _Run.Entity;
+			}
+			set {
+				Run previousValue = _Run.Entity;
+				if ((previousValue != value) || (!_Run.HasLoadedOrAssignedValue)) {
+					SendPropertyChanging();
+					if (previousValue != null) {
+						_Run.Entity = null;
+						previousValue.ResultIntValues.Remove(this);
+					}
+					_Run.Entity = value;
+					if (value != null) {
+						value.ResultIntValues.Add(this);
+						_RunId = value.Id;
+					}
+					else {
+						_RunId = default(long);
+					}
+					SendPropertyChanged("Run");
+				}
+			}
+		}
+
+		#endregion
+		
+		#region Serialization
+		[OnDeserializing()]
+		[EditorBrowsableAttribute(EditorBrowsableState.Never)]
+		public  void OnDeserializing(StreamingContext context)
+		{
+			Initialize();
+		}
+		#endregion
+	}
+}
+
+namespace HeuristicLab.Services.OKB.DataAccess
+{	
+	[DataContract(IsReference=true)]
+	[Table(Name=@"dbo.ResultStringValue")]
+[KnownType(typeof(ResultStringValue))]	public partial class ResultStringValue : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		#region Property Change Event Handling
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		public virtual void SendPropertyChanging()
+		{
+			if (PropertyChanging != null) {
+				PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+			
+		public virtual void SendPropertyChanged(String propertyName)
+		{
+			if (PropertyChanged != null) {
+				PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+		#endregion
+		
+		#region Extensibility Method Definitions
+		partial void OnLoaded();
+		partial void OnValidate(ChangeAction action);
+		partial void OnCreated();
+		#endregion
+
+		#region Construction
+		public ResultStringValue()
+		{
+			Initialize();
+		}
+		
+		private void Initialize()
+		{
+			_DataType = default(EntityRef<DataType>);
+			_Result = default(EntityRef<Result>);
+			_Run = default(EntityRef<Run>);
+			OnCreated();
+		}
+		#endregion
+
+		#region Column Mappings
+		partial void OnResultIdChanging(long value);
+		partial void OnResultIdChanged();
+		private long _ResultId;
+		[Column(Storage=@"_ResultId", DbType=@"BigInt NOT NULL", IsPrimaryKey=true, UpdateCheck=UpdateCheck.Never)]
+		[DataMember(Order=1)]
+		public long ResultId
+		{
+			get { return _ResultId; }
+			set {
+				if (_ResultId != value) {
+					if (_Result.HasLoadedOrAssignedValue) {
+						throw new ForeignKeyReferenceAlreadyHasValueException();
+					}
+					OnResultIdChanging(value);
+					SendPropertyChanging();
+					_ResultId = value;
+					SendPropertyChanged("ResultId");
+					OnResultIdChanged();
+				}
+			}
+		}
+		
+		partial void OnRunIdChanging(long value);
+		partial void OnRunIdChanged();
+		private long _RunId;
+		[Column(Storage=@"_RunId", DbType=@"BigInt NOT NULL", IsPrimaryKey=true, UpdateCheck=UpdateCheck.Never)]
+		[DataMember(Order=2)]
+		public long RunId
+		{
+			get { return _RunId; }
+			set {
+				if (_RunId != value) {
+					if (_Run.HasLoadedOrAssignedValue) {
+						throw new ForeignKeyReferenceAlreadyHasValueException();
+					}
+					OnRunIdChanging(value);
+					SendPropertyChanging();
+					_RunId = value;
+					SendPropertyChanged("RunId");
+					OnRunIdChanged();
+				}
+			}
+		}
+		
+		partial void OnDataTypeIdChanging(long value);
+		partial void OnDataTypeIdChanged();
+		private long _DataTypeId;
+		[Column(Storage=@"_DataTypeId", DbType=@"BigInt NOT NULL", CanBeNull=false)]
+		[DataMember(Order=3)]
+		public long DataTypeId
+		{
+			get { return _DataTypeId; }
+			set {
+				if (_DataTypeId != value) {
+					if (_DataType.HasLoadedOrAssignedValue) {
+						throw new ForeignKeyReferenceAlreadyHasValueException();
+					}
+					OnDataTypeIdChanging(value);
+					SendPropertyChanging();
+					_DataTypeId = value;
+					SendPropertyChanged("DataTypeId");
+					OnDataTypeIdChanged();
+				}
+			}
+		}
+		
+		partial void OnValueChanging(string value);
+		partial void OnValueChanged();
+		private string _Value;
+		[Column(Storage=@"_Value", DbType=@"NVarChar(MAX) NOT NULL", CanBeNull=false)]
+		[DataMember(Order=4)]
+		public string Value
+		{
+			get { return _Value; }
+			set {
+				if (_Value != value) {
+					OnValueChanging(value);
+					SendPropertyChanging();
+					_Value = value;
+					SendPropertyChanged("Value");
+					OnValueChanged();
+				}
+			}
+		}
+		
+		#endregion
+		
+		#region Associations
+		private EntityRef<DataType> _DataType;
+		[Association(Name=@"DataType_ResultStringValue", Storage=@"_DataType", ThisKey=@"DataTypeId", OtherKey=@"Id", IsForeignKey=true)]
+		[DataMember(Order=5, EmitDefaultValue=false)]
+		public DataType DataType
+		{
+			get {
+				return _DataType.Entity;
+			}
+			set {
+				DataType previousValue = _DataType.Entity;
+				if ((previousValue != value) || (!_DataType.HasLoadedOrAssignedValue)) {
+					SendPropertyChanging();
+					if (previousValue != null) {
+						_DataType.Entity = null;
+						previousValue.ResultStringValues.Remove(this);
+					}
+					_DataType.Entity = value;
+					if (value != null) {
+						value.ResultStringValues.Add(this);
+						_DataTypeId = value.Id;
+					}
+					else {
+						_DataTypeId = default(long);
+					}
+					SendPropertyChanged("DataType");
+				}
+			}
+		}
+
+		private EntityRef<Result> _Result;
+		[Association(Name=@"Result_ResultStringValue", Storage=@"_Result", ThisKey=@"ResultId", OtherKey=@"Id", IsForeignKey=true)]
+		[DataMember(Order=6, EmitDefaultValue=false)]
+		public Result Result
+		{
+			get {
+				return _Result.Entity;
+			}
+			set {
+				Result previousValue = _Result.Entity;
+				if ((previousValue != value) || (!_Result.HasLoadedOrAssignedValue)) {
+					SendPropertyChanging();
+					if (previousValue != null) {
+						_Result.Entity = null;
+						previousValue.ResultStringValues.Remove(this);
+					}
+					_Result.Entity = value;
+					if (value != null) {
+						value.ResultStringValues.Add(this);
+						_ResultId = value.Id;
+					}
+					else {
+						_ResultId = default(long);
+					}
+					SendPropertyChanged("Result");
+				}
+			}
+		}
+
+		private EntityRef<Run> _Run;
+		[Association(Name=@"Run_ResultStringValue", Storage=@"_Run", ThisKey=@"RunId", OtherKey=@"Id", IsForeignKey=true)]
+		[DataMember(Order=7, EmitDefaultValue=false)]
+		public Run Run
+		{
+			get {
+				return _Run.Entity;
+			}
+			set {
+				Run previousValue = _Run.Entity;
+				if ((previousValue != value) || (!_Run.HasLoadedOrAssignedValue)) {
+					SendPropertyChanging();
+					if (previousValue != null) {
+						_Run.Entity = null;
+						previousValue.ResultStringValues.Remove(this);
+					}
+					_Run.Entity = value;
+					if (value != null) {
+						value.ResultStringValues.Add(this);
+						_RunId = value.Id;
+					}
+					else {
+						_RunId = default(long);
+					}
+					SendPropertyChanged("Run");
+				}
+			}
+		}
+
+		#endregion
+		
+		#region Serialization
+		[OnDeserializing()]
+		[EditorBrowsableAttribute(EditorBrowsableState.Never)]
+		public  void OnDeserializing(StreamingContext context)
+		{
+			Initialize();
+		}
+		#endregion
+	}
+}
+#pragma warning restore 1591
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataAccess/3.3/OKB.tt
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataAccess/3.3/OKB.tt	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataAccess/3.3/OKB.tt	(revision 5296)
@@ -0,0 +1,488 @@
+﻿<# // L2ST4 - LINQ to SQL templates for T4 v0.82 - http://www.codeplex.com/l2st4
+// Copyright (c) Microsoft Corporation.  All rights reserved.
+// This source code is made available under the terms of the Microsoft Public License (MS-PL)
+#><#@ template language="C#" hostspecific="True"
+#><#@ include file="L2ST4.ttinclude"
+#><#@ output extension=".generated.cs"
+#><# // Set options here
+var options = new {
+	DbmlFileName = Host.TemplateFile.Replace(".tt",".dbml"), // Which DBML file to operate on (same filename as template)
+	SerializeDataContractSP1 = true, // Emit SP1 DataContract serializer attributes
+	FilePerEntity = false, // Put each class into a separate file
+	StoredProcedureConcurrency = false, // Table updates via an SP require @@rowcount to be returned to enable concurrency
+	EntityFilePath = Path.GetDirectoryName(Host.TemplateFile) // Where to put the files	
+};
+var code = new CSharpCodeLanguage();
+var data = new Data(options.DbmlFileName);
+var manager = new Manager(Host, GenerationEnvironment, true) { OutputPath = options.EntityFilePath };
+data.ContextNamespace = (new string[] { manager.GetCustomToolNamespace(data.DbmlFileName), data.SpecifiedContextNamespace, manager.DefaultProjectNamespace }).FirstOrDefault(s => !String.IsNullOrEmpty(s));
+data.EntityNamespace = (new string[] { manager.GetCustomToolNamespace(data.DbmlFileName), data.SpecifiedEntityNamespace, manager.DefaultProjectNamespace }).FirstOrDefault(s => !String.IsNullOrEmpty(s));
+manager.StartHeader();
+#>#pragma warning disable 1591
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by LINQ to SQL template for T4 C#
+//     Generated at <#=DateTime.Now#>
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+using System;
+using System.ComponentModel;
+using System.Data.Linq;
+using System.Data.Linq.Mapping;
+<#if (data.Functions.Count > 0) {#>
+using System.Reflection;
+<#}
+string dataContractAttributes = (options.SerializeDataContractSP1) ? "IsReference=true" : "";
+if (data.Serialization) {#>
+using System.Runtime.Serialization;
+<#}#>
+
+<# manager.EndHeader();
+if(!String.IsNullOrEmpty(data.ContextNamespace)){#>
+namespace <#=data.ContextNamespace#>
+{
+<#}#>
+	[DatabaseAttribute(Name=@"<#=data.DatabaseName#>")]
+	<#=code.Format(data.TypeAttributes)#>partial class <#=data.ContextName#> : <#=data.BaseClassName#>
+	{
+		private static MappingSource mappingSource = new AttributeMappingSource();
+		
+		#region Extensibility Method Definitions
+		partial void OnCreated();
+<#	var tableOperations = new List<TableOperation>();
+	foreach(var table in data.Tables)
+		tableOperations.AddRange(table.Operations);
+	foreach(Table table in data.Tables)
+		foreach(OperationType operationType in Enum.GetValues(typeof(OperationType)))
+			if (!tableOperations.Any(o => (o.Table == table) && (o.Type == operationType))) {#>
+		partial void <#=operationType#><#=table.BaseClass.Name#>(<#=table.BaseClass.QualifiedName#> instance);
+<#}#>
+		#endregion
+		
+		#region Construction
+<#if (data.ConnectSettingsObject != null) {#>
+		public <#=data.ContextName#>() :
+			base(global::<#=data.ConnectSettingsObject#>.Default.<#=data.ConnectSettingsProperty#>, mappingSource)
+		{
+			OnCreated();
+		}
+<#}#>	
+		public <#=data.ContextName#>(string connection) :
+			base(connection, mappingSource)
+		{
+			OnCreated();
+		}
+		
+		public <#=data.ContextName#>(System.Data.IDbConnection connection) :
+			base(connection, mappingSource)
+		{
+			OnCreated();
+		}
+		
+		public <#=data.ContextName#>(string connection, MappingSource mappingSource) :
+			base(connection, mappingSource)
+		{
+			OnCreated();
+		}
+		
+		public <#=data.ContextName#>(System.Data.IDbConnection connection, MappingSource mappingSource) :
+			base(connection, mappingSource)
+		{
+			OnCreated();
+		}
+		#endregion
+<#if(data.Tables.Count > 0) {#>
+		
+		#region Tables
+<#	foreach(Table table in data.Tables) {
+#>		<#=code.GetAccess(table.BaseClass.TypeAttributes)#>Table<<#=table.BaseClass.QualifiedName#>> <#=table.Member#>
+		{
+			get { return GetTable<<#=table.BaseClass.QualifiedName#>>(); }
+		}
+		
+<#	}
+#>		#endregion
+<#}
+if (data.Functions.Count > 0) {#>
+		
+		#region Functions
+<#	foreach(Function function in data.Functions) {
+#>
+		[Function(Name=@"<#=function.Name#>"<#
+		if (function.IsComposable) {#>, IsComposable=true<#}
+		#>)]
+<#		if (function.Return != null && function.Return.DbType != null) {
+#>		[return: Parameter(DbType=@"<#=function.Return.DbType#>")]
+<#		}
+		if (function.HasMultipleResults) {
+			foreach(Class class1 in function.Classes) {#>
+		[ResultType(typeof(<#=class1.QualifiedName#>))]
+<#			}
+		}#>
+		<#=code.Format(function.MemberAttributes)#><#=code.Format(function.ReturnType)#> <#=function.Method#>(<#
+		foreach(Parameter parameter in function.Parameters) {#>
+
+					[Parameter(Name=@"<#=parameter.DbName#>", DbType=@"<#=parameter.DbType#>")] <#=code.Format(parameter.Direction)#><#=code.Format(parameter.Type)#> <#=parameter.Name#><#
+			if (parameter != function.Parameters.Last()) {#>,<# }
+		}
+		#>) {
+<#		foreach(Parameter outParameter in function.Parameters.Where(p => p.Direction == ParameterDirection.Out)) {#>
+			<#=outParameter.Name#> = default(<#=code.Format(outParameter.Type)#>);
+<#		}#>
+			IExecuteResult result = ExecuteMethodCall(this, (MethodInfo) MethodInfo.GetCurrentMethod()<#=String.Join("", function.Parameters.Select(p => ", " + p.Name).ToArray())#>);
+<#		int paramIdx = 0;
+		foreach(Parameter parameter in function.Parameters) {
+			if (parameter.Direction != ParameterDirection.In) {#>
+			<#=parameter.Name#> = (<#=code.Format(parameter.Type)#>) result.GetParameterValue(<#=paramIdx#>);
+<#			}
+			paramIdx++;
+		}
+#>			return (<#=code.Format(function.ReturnType)#>) result.ReturnValue;
+		}
+		
+<#	}#>
+		#endregion
+		
+<#	if (tableOperations.Count > 0) { #>
+		#region Table Operations
+<#		foreach(var operation in tableOperations) { #>
+		private void <#=operation.Type#><#=operation.Table.BaseClass.Name#>(<#=operation.Table.BaseClass.QualifiedName#> obj) {
+<#			if (operation.Arguments.Any(a => a.Version == ArgumentVersion.Original)) {
+#>			var original = <#=operation.Table.Member#>.GetOriginalEntityState(obj);
+<#			}
+			int paramIdx = 1;
+			foreach(var argument in operation.Arguments.Where(a => a.Parameter.Direction != ParameterDirection.In)) {
+#>			<#=code.Format(argument.Parameter.Type)#> p<#=paramIdx++#> = obj.<#=argument.Member#>;
+<#			}#>
+			<# if (options.StoredProcedureConcurrency) {#>var rowCount = <#}#><#=operation.Function.Method#>(<#
+			paramIdx = 1;
+			foreach(var argument in operation.Arguments) {
+				switch(argument.Parameter.Direction) {
+					case ParameterDirection.InOut: #>ref p<#=paramIdx++#><# break;
+					case ParameterDirection.Out: #>out p<#=paramIdx++#><# break;
+					default: #><#=(argument.Version == ArgumentVersion.New) ? "obj" : "original"#>.<#=argument.Member#><# break;
+				}
+			if (argument != operation.Arguments.Last()) {#>, <#}
+			}
+			#>);
+<#			if (options.StoredProcedureConcurrency) {#>
+			if (rowCount != 1) {
+				throw new ChangeConflictException();
+			}
+<#			}
+			paramIdx = 1;
+			foreach(var argument in operation.Arguments.Where(a => a.Parameter.Direction != ParameterDirection.In)) {
+#>			obj.<#=argument.Member#> = p<#=paramIdx++#>.GetValueOrDefault();
+<#			}#>
+		}
+		
+<#
+		}
+#>
+		#endregion
+<#	}
+}#>
+	}
+<#if (!String.IsNullOrEmpty(data.ContextNamespace)) {
+#>}
+<#}
+foreach(Table table in data.Tables) {
+	foreach(TableClass class1 in table.Classes) {
+		manager.StartBlock(Path.ChangeExtension(class1.Name,".generated.cs"));
+		if (!String.IsNullOrEmpty(data.EntityNamespace)) {#>
+
+namespace <#=data.EntityNamespace#>
+{	
+<#		}
+		if (data.Serialization && class1.IsSerializable) {
+#>	[DataContract(<#=dataContractAttributes#>)]
+<#		}
+		if (class1 == table.BaseClass) {#>
+	[Table(Name=@"<#=table.Name#>")]
+<#			foreach(TableClass subclass in data.TableClasses.Where(c => c.Table == table)) {
+				if (!String.IsNullOrEmpty(subclass.InheritanceCode)) {#>
+	[InheritanceMapping(Code=@"<#=subclass.InheritanceCode#>", Type=typeof(<#=subclass.Name#>)<# if (subclass.IsInheritanceDefault) {#>, IsDefault=true<#}#>)]
+<#				}
+				if (data.Serialization && subclass.IsSerializable) {#>[KnownType(typeof(<#=subclass.Name#>))]<#}
+			}
+#>	<#=code.Format(class1.TypeAttributes)#>partial class <#=class1.Name#> :<#if (!String.IsNullOrEmpty(data.EntityBase)) {#> <#=data.EntityBase#>, <#}#> INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		#region Property Change Event Handling
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		<#=code.Format(class1.PropertyChangeAccess)#>void SendPropertyChanging()
+		{
+			if (PropertyChanging != null) {
+				PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+			
+		<#=code.Format(class1.PropertyChangeAccess)#>void SendPropertyChanged(String propertyName)
+		{
+			if (PropertyChanged != null) {
+				PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+		#endregion
+		
+<#		} else {
+#>	<#=code.Format(class1.TypeAttributes)#>partial class <#=class1.Name#> : <#=class1.SuperClass.Name#>
+	{
+<#		}#>
+		#region Extensibility Method Definitions
+		partial void OnLoaded();
+		partial void OnValidate(ChangeAction action);
+<#		if (class1.HasPrimaryKey) {#>
+		partial void OnCreated();
+<#		}#>
+		#endregion
+
+		#region Construction
+		public <#=class1.Name#>()
+		{
+<#		if (data.Serialization) {
+#>			Initialize();
+		}
+		
+		private void Initialize()
+		{
+<#		}
+		foreach(Association association in class1.Associations) {
+#>			<#=association.Storage#> = <#
+			if (association.IsMany) {
+				#>new EntitySet<<#=association.Type.Name#>>(attach_<#=association.Member#>, detach_<#=association.Member#>);
+<#			} else {
+				#>default(EntityRef<<#=association.Type.Name#>>);
+<#			}
+		}
+		if (class1.HasPrimaryKey) {#>
+			OnCreated();
+<#		}#>
+		}
+		#endregion
+
+<#		int dataMemberIndex = 1;
+		if (class1.Columns.Count > 0) {
+#>		#region Column Mappings
+<#			foreach(Column column in class1.Columns) {#>
+		partial void On<#=column.Member#>Changing(<#=code.Format(column.Type)#> value);
+		partial void On<#=column.Member#>Changed();
+		private <#=code.Format(column.StorageType)#> <#=column.Storage#><# if (column.IsReadOnly) {#> = default(<#=code.Format(column.StorageType)#>)<#}#>;
+		[Column(Storage=@"<#=column.Storage#>"<#
+				if (column.Name != column.Member) {#>, Name=@"<#=column.Name#>"<#}
+				if (column.AutoSync != AutoSync.Default) {#>, AutoSync=AutoSync.<#=column.AutoSync.ToString()#><#}
+				if (!String.IsNullOrEmpty(column.DbType)) {#>, DbType=@"<#=column.DbType#>"<#}
+				if (column.IsPrimaryKey) {#>, IsPrimaryKey=true<#}
+				if (column.IsDiscriminator) {#>, IsDiscriminator=true<#}
+				if (column.IsDbGenerated) {#>, IsDbGenerated=true<#}
+				if (column.IsVersion) {#>, IsVersion=true<#}
+				if (!column.CanBeNull && !column.IsPrimaryKey) {#>, CanBeNull=false<#}
+				if (column.UpdateCheck != UpdateCheck.Always) {#>, UpdateCheck=UpdateCheck.<#=column.UpdateCheck.ToString()#><#}
+				if (!String.IsNullOrEmpty(column.Expression)) {#>, Expression=@"<#=column.Expression#>"<#}
+		#>)]
+<#				if (data.Serialization && ((column.MemberAttributes & MemberAttributes.AccessMask) == MemberAttributes.Public)) {
+#>		[DataMember(Order=<#=dataMemberIndex++#>)]
+<#				}
+#>		<#=code.Format(column.MemberAttributes)#><#=code.Format(column.Type)#> <#=column.Member#>
+		{
+			get { return <#=column.StorageValue#>; }
+<#				if (!column.IsReadOnly) { #>
+			set {
+				if (<#=column.StorageValue#> != value) {
+<#					if (column.ForeignKeyAssociations.Count > 0) {#>
+					if (<#=String.Join(" || ", column.ForeignKeyAssociations.Select(a => a.Storage + ".HasLoadedOrAssignedValue").ToArray())#>) {
+						throw new ForeignKeyReferenceAlreadyHasValueException();
+					}
+<#					}#>
+					On<#=column.Member#>Changing(value);
+					SendPropertyChanging();
+					<#=column.StorageValue#> = value;
+					SendPropertyChanged("<#=column.Member#>");
+					On<#=column.Member#>Changed();
+				}
+			}
+<#				}#>
+		}
+		
+<#			}#>
+		#endregion
+<#		}
+		bool needsSerializationFlag = class1.IsSerializable && class1.Associations.Any(a => !a.ManagesKeys);
+		if (class1.Associations.Count > 0) {
+#>		
+		#region Associations
+<#			foreach(Association association in class1.Associations) {#>
+		private Entity<#=(association.IsMany) ? "Set" : "Ref"#><<#=association.Type.Name#>> <#=association.Storage#>;
+		[Association(Name=@"<#=association.Name#>"<#
+			#>, Storage=@"<#=association.Storage#>"<#
+				if (association.ThisKeyMembers != null) {#>, ThisKey=@"<#=String.Join(",", association.ThisKeyMembers)#>"<#}
+				if (association.OtherKeyMembers != null) {#>, OtherKey=@"<#=String.Join(",", association.OtherKeyMembers)#>"<#}
+				if (association.IsForeignKey) {#>, IsForeignKey=true<#}
+				if (association.IsUnique) {#>, IsUnique=true, IsForeignKey=false<#}
+				if (association.DeleteOnNull) {#>, DeleteOnNull=true<#}
+				if (association.DeleteRule != null) {#>, DeleteRule=@"<#=association.DeleteRule #>"<#}
+		#>)]
+<#				bool serialization = association.IsSerializable && data.Serialization &&
+					(options.SerializeDataContractSP1 || !association.ManagesKeys);
+				if (serialization) {
+#>		[DataMember(Order=<#=dataMemberIndex++#>, EmitDefaultValue=false)]
+<#				}
+				if (!association.IsMany) {#>
+		<#=code.Format(association.MemberAttributes)#><#=association.Type.Name#> <#=association.Member#>
+		{
+			get {
+<#					if (needsSerializationFlag && serialization) {#>
+				if (serializing && !<#=association.Storage#>.HasLoadedOrAssignedValue) {
+					return null;
+				}
+<#					}#>
+				return <#=association.Storage#>.Entity;
+			}
+			set {
+				<#=association.Type.Name#> previousValue = <#=association.Storage#>.Entity;
+				if ((previousValue != value)<#if (association.OtherSide != null) {#> || (!<#=association.Storage#>.HasLoadedOrAssignedValue)<#}#>) {
+					SendPropertyChanging();
+<#					if (association.OtherSide != null) {#>
+					if (previousValue != null) {
+						<#=association.Storage#>.Entity = null;
+						previousValue.<#=association.OtherSide.Member#><#if (!association.OtherSide.IsMany) {#> = null<#} else {#>.Remove(this)<#}#>;
+					}
+<#					}
+#>					<#=association.Storage#>.Entity = value;
+<#					if (association.OtherSide != null) {#>
+					if (value != null) {
+						value.<#=association.OtherSide.Member#><#if (!association.OtherSide.IsMany) {#> = this<#} else {#>.Add(this)<#}#>;
+<#						if (association.ManagesKeys) {
+							for(int keyIdx=0;keyIdx<association.ThisKey.Count();keyIdx++) {#>
+						<#=association.ThisKey[keyIdx].Storage#> = value.<#=association.OtherKey[keyIdx].Member#>;
+<#							}#>
+					}
+					else {
+<#							for(int keyIdx=0;keyIdx<association.ThisKey.Count();keyIdx++) {
+#>						<#=association.ThisKey[keyIdx].Storage#> = default(<#=code.Format(association.ThisKey[keyIdx].Type)#>);
+<#							}
+						}
+#>					}
+<#					}#>
+					SendPropertyChanged("<#=association.Member#>");
+				}
+			}
+		}
+
+<#				} else {#>
+		<#=code.Format(association.MemberAttributes)#>EntitySet<<#=association.Type.Name#>> <#=association.Member#>
+		{
+			get {
+<#					if (needsSerializationFlag && serialization) {#>
+				if (serializing && !<#=association.Storage#>.HasLoadedOrAssignedValues) {
+					return null;
+				}
+<#					} #>
+				return <#=association.Storage#>;
+			}
+			set {
+				<#=association.Storage#>.Assign(value);
+			}
+		}
+
+		private void attach_<#=association.Member#>(<#=association.Type.Name#> entity)
+		{
+			SendPropertyChanging();
+			entity.<#=association.OtherSide.Member#> = this;
+		}
+		
+		private void detach_<#=association.Member#>(<#=association.Type.Name#> entity)
+		{
+			SendPropertyChanging();
+			entity.<#=association.OtherSide.Member#> = null;
+		}
+<#				}
+			}#>
+		#endregion
+<#		}
+		if (data.Serialization) {#>
+		
+		#region Serialization
+<#			if (needsSerializationFlag) {#>
+		private bool serializing;
+		
+		[OnSerializing()]
+		[EditorBrowsableAttribute(EditorBrowsableState.Never)]
+		public void OnSerializing(StreamingContext context)
+		{
+			serializing = true;
+		}
+		
+		[OnSerialized()]
+		[EditorBrowsableAttribute(EditorBrowsableState.Never)]
+		public void OnSerialized(StreamingContext context)
+		{
+			serializing = false;
+		}
+		
+<#			}#>
+		[OnDeserializing()]
+		[EditorBrowsableAttribute(EditorBrowsableState.Never)]
+		public <#if (class1 != table.BaseClass) {#>new<#}#> void OnDeserializing(StreamingContext context)
+		{
+			Initialize();
+		}
+		#endregion
+<#		}
+#>	}
+<#		if (!String.IsNullOrEmpty(data.EntityNamespace)) {#>
+}
+<#		}
+		manager.EndBlock();
+	}
+}
+if (data.FunctionClasses.Count > 0) {
+	foreach(FunctionClass class1 in data.FunctionClasses) {
+		manager.StartBlock(Path.ChangeExtension(class1.Name,".generated.cs"));
+		if(!String.IsNullOrEmpty(data.EntityNamespace)){#>
+
+namespace <#=data.EntityNamespace#>
+{
+<#		}
+		if (data.Serialization) {
+#>	[DataContract(<#=dataContractAttributes#>)]
+<#		} #>
+	<#=code.Format(class1.TypeAttributes)#>partial class <#=class1.Name#>
+	{
+<#		int dataMemberIndex = 1;
+		foreach(Column column in class1.Columns) {#>
+		private <#=code.Format(column.Type)#> <#=column.Storage#>;
+		[Column(Storage=@"<#=column.Storage#>"<#
+				if (column.Name != column.Member) {#>, Name=@"<#=column.Name#>"<#}
+				if (!String.IsNullOrEmpty(column.DbType)) {#>, DbType=@"<#=column.DbType#>"<#}
+				if (!column.CanBeNull && !column.IsPrimaryKey) {#>, CanBeNull=false<#}
+		#>)]
+<#			if (data.Serialization && ((column.MemberAttributes & MemberAttributes.AccessMask) == MemberAttributes.Public)) {
+#>		[DataMember(Order=<#=dataMemberIndex++#>)]
+<#			}
+#>		<#=code.Format(column.MemberAttributes)#><#=code.Format(column.Type)#> <#=column.Member#> {
+			get { return <#=column.Storage#>; }
+			set {
+				if (<#=column.Storage#> != value) {
+					<#=column.Storage#> = value;
+				}
+			}
+		}
+<#		} #>
+	}
+<#		if (!String.IsNullOrEmpty(data.EntityNamespace)) {#>
+}
+<#		}
+		manager.EndBlock();
+	}
+}
+manager.StartFooter();#>
+#pragma warning restore 1591<#
+manager.EndFooter();
+manager.Process(options.FilePerEntity);#>
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataAccess/3.3/OKB_Methods.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataAccess/3.3/OKB_Methods.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataAccess/3.3/OKB_Methods.cs	(revision 5296)
@@ -0,0 +1,478 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Data.Linq;
+using System.Linq;
+
+namespace HeuristicLab.Services.OKB.DataAccess {
+
+  #region TypeAbstraction
+  public interface IParameterValue {
+    int ParameterId { get; set; }
+    Parameter Parameter { get; set; }
+    int ExperimentId { get; set; }
+    Experiment Experiment { get; set; }
+    object Value { get; set; }
+  }
+  public partial class IntParameterValue : IParameterValue {
+    object IParameterValue.Value {
+      get { return this.Value; }
+      set { this.Value = (int)value; }
+    }
+  }
+  public partial class FloatParameterValue : IParameterValue {
+    object IParameterValue.Value {
+      get { return this.Value; }
+      set { this.Value = (double)value; }
+    }
+  }
+  public partial class CharParameterValue : IParameterValue {
+    object IParameterValue.Value {
+      get { return this.Value; }
+      set { this.Value = (string)value; }
+    }
+  }
+  public partial class OperatorParameterValue : IParameterValue {
+    object IParameterValue.Value {
+      get { return this.Value; }
+      set { this.Value = (Binary)value; }
+    }
+  }
+  public partial class Experiment {
+    public IQueryable<IParameterValue> ParameterValues {
+      get {
+        return IntParameterValues
+          .AsQueryable()
+          .Cast<IParameterValue>()
+          .Concat(FloatParameterValues.Cast<IParameterValue>())
+          .Concat(CharParameterValues.Cast<IParameterValue>())
+          .Concat(OperatorParameterValues.Cast<IParameterValue>());
+      }
+      set {
+        if (value == null) return;
+        foreach (IParameterValue pv in value) {
+          if (pv == null) continue;
+          if (pv is IntParameterValue) {
+            IntParameterValues.Add(new IntParameterValue() { ParameterId = pv.ParameterId, Value = (int)pv.Value });
+          } else if (pv is FloatParameterValue) {
+            FloatParameterValues.Add(new FloatParameterValue() { ParameterId = pv.ParameterId, Value = (double)pv.Value });
+          } else if (pv is CharParameterValue) {
+            CharParameterValues.Add(new CharParameterValue() { ParameterId = pv.ParameterId, Value = (string)pv.Value });
+          } else if (pv is OperatorParameterValue) {
+            OperatorParameterValues.Add(new OperatorParameterValue() {
+              ParameterId = pv.ParameterId,
+              Value = (Binary)pv.Value,
+              DataTypeId = ((OperatorParameterValue)pv).DataTypeId,
+            });
+          } else {
+            throw new ArgumentException("Invalid Parameter type" + pv.GetType());
+          }
+        }
+      }
+    }
+  }
+
+  public interface IResultValue {
+    int ResultId { get; set; }
+    Result Result { get; set; }
+    int RunId { get; set; }
+    Run Run { get; set; }
+    object Value { get; set; }
+  }
+  public partial class IntResultValue : IResultValue {
+    object IResultValue.Value {
+      get { return this.Value; }
+      set { this.Value = (int)value; }
+    }
+  }
+  public partial class FloatResultValue : IResultValue {
+    object IResultValue.Value {
+      get { return this.Value; }
+      set { this.Value = (double)value; }
+    }
+  }
+  public partial class CharResultValue : IResultValue {
+    object IResultValue.Value {
+      get { return this.Value; }
+      set { this.Value = (string)value; }
+    }
+  }
+  public partial class BlobResultValue : IResultValue {
+    object IResultValue.Value {
+      get { return this.Value; }
+      set { this.Value = (Binary)value; }
+    }
+  }
+  public partial class Run {
+    public IQueryable<IResultValue> ResultValues {
+      get {
+        return IntResultValues
+          .AsQueryable()
+          .Cast<IResultValue>()
+          .Concat(FloatResultValues.Cast<IResultValue>())
+          .Concat(CharResultValues.Cast<IResultValue>())
+          .Concat(BlobResultValues.Cast<IResultValue>());
+      }
+      set {
+        foreach (IResultValue rv in value) {
+          if (rv == null) continue;
+          if (rv is IntResultValue) {
+            IntResultValues.Add(new IntResultValue() { ResultId = rv.ResultId, Value = (int)rv.Value });
+          } else if (rv is FloatResultValue) {
+            FloatResultValues.Add(new FloatResultValue() { ResultId = rv.ResultId, Value = (double)rv.Value });
+          } else if (rv is CharResultValue) {
+            CharResultValues.Add(new CharResultValue() { ResultId = rv.ResultId, Value = (string)rv.Value });
+          } else if (rv is BlobResultValue) {
+            BlobResultValues.Add(new BlobResultValue() { ResultId = rv.ResultId, Value = (Binary)rv.Value });
+          } else {
+            throw new ArgumentException("Invalid result value type " + rv.GetType());
+          }
+        }
+      }
+    }
+  }
+  public partial class Result {
+    public IQueryable<IResultValue> ResultValues {
+      get {
+        return IntResultValues
+          .AsQueryable()
+          .Cast<IResultValue>()
+          .Concat(FloatResultValues.Cast<IResultValue>())
+          .Concat(CharResultValues.Cast<IResultValue>())
+          .Concat(BlobResultValues.Cast<IResultValue>());
+      }
+    }
+  }
+
+  public interface IProblemCharacteristicValue {
+    int ProblemId { get; set; }
+    Problem Problem { get; set; }
+    int ProblemCharacteristicId { get; set; }
+    ProblemCharacteristic ProblemCharacteristic { get; set; }
+    object Value { get; set; }
+  }
+  public partial class IntProblemCharacteristicValue : IProblemCharacteristicValue {
+    object IProblemCharacteristicValue.Value {
+      get { return this.Value; }
+      set { this.Value = (int)value; }
+    }
+  }
+  public partial class FloatProblemCharacteristicValue : IProblemCharacteristicValue {
+    object IProblemCharacteristicValue.Value {
+      get { return this.Value; }
+      set { this.Value = (double)value; }
+    }
+  }
+  public partial class CharProblemCharacteristicValue : IProblemCharacteristicValue {
+    object IProblemCharacteristicValue.Value {
+      get { return this.Value; }
+      set { this.Value = (string)value; }
+    }
+  }
+  public partial class Problem {
+    public IQueryable<IProblemCharacteristicValue> ProblemCharacteristicValues {
+      get {
+        return IntProblemCharacteristicValues
+          .AsQueryable()
+          .Cast<IProblemCharacteristicValue>()
+          .Concat(FloatProblemCharacteristicValues.Cast<IProblemCharacteristicValue>())
+          .Concat(CharProblemCharacteristicValues.Cast<IProblemCharacteristicValue>());
+      }
+    }
+  }
+  public partial class ProblemCharacteristic {
+    public IQueryable<IProblemCharacteristicValue> ProblemCharacteristicValues {
+      get {
+        return IntProblemCharacteristicValues
+          .AsQueryable()
+          .Cast<IProblemCharacteristicValue>()
+          .Concat(FloatProblemCharacteristicValues.Cast<IProblemCharacteristicValue>())
+          .Concat(CharProblemCharacteristicValues.Cast<IProblemCharacteristicValue>());
+      }
+    }
+  }
+  #endregion
+
+  #region Abuse entities to store parameter values for a single (not yet existing experiment)
+  public partial class Parameter {
+    public IParameterValue ParameterValue {
+      get {
+        try {
+          return IntParameterValues
+            .AsQueryable()
+            .Cast<IParameterValue>()
+            .Concat(FloatParameterValues.Cast<IParameterValue>())
+            .Concat(CharParameterValues.Cast<IParameterValue>())
+            .Concat(OperatorParameterValues.Cast<IParameterValue>())
+            .ToList().Single();
+        }
+        catch {
+          return null;
+        }
+      }
+      set {
+        if (value == ParameterValue) // access to ParameterValue ensures that there is a single value
+          return;
+        if (value == null)
+          throw new ArgumentNullException("ParameterValue");
+        IParameterValue oldValue = ParameterValue;
+        Type t = value.GetType();
+        if (oldValue.GetType() != t)
+          throw new ArgumentException("cannot assign value with different type");
+        if (t == typeof(IntParameterValue)) {
+          IntParameterValues.Clear();
+          IntParameterValues.Add((IntParameterValue)value);
+        } else if (t == typeof(FloatParameterValue)) {
+          FloatParameterValues.Clear();
+          FloatParameterValues.Add((FloatParameterValue)value);
+        } else if (t == typeof(CharParameterValue)) {
+          CharParameterValues.Clear();
+          CharParameterValues.Add((CharParameterValue)value);
+        } else if (t == typeof(OperatorParameterValue)) {
+          OperatorParameterValues.Clear();
+          OperatorParameterValues.Add((OperatorParameterValue)value);
+        } else throw new ArgumentException("invalid parameter value type " + t.Name);
+      }
+    }
+  }
+  public partial class Result {
+    public IResultValue ResultValue {
+      get {
+        try {
+          return IntResultValues
+            .AsQueryable()
+            .Cast<IResultValue>()
+            .Concat(FloatResultValues.Cast<IResultValue>())
+            .Concat(CharResultValues.Cast<IResultValue>())
+            .Concat(BlobResultValues.Cast<IResultValue>()).ToList().Single();
+        }
+        catch {
+          return null;
+        }
+      }
+      set {
+        if (value == ResultValue)
+          return;
+        if (value == null)
+          throw new ArgumentNullException("ResultValue");
+        IResultValue oldValue = ResultValue;
+        Type t = value.GetType();
+        if (oldValue.GetType() != t)
+          throw new ArgumentException("cannot assign value with different type");
+        if (t == typeof(IntResultValue)) {
+          IntResultValues.Clear();
+          IntResultValues.Add((IntResultValue)value);
+        } else if (t == typeof(FloatResultValue)) {
+          FloatResultValues.Clear();
+          FloatResultValues.Add((FloatResultValue)value);
+        } else if (t == typeof(CharResultValue)) {
+          CharResultValues.Clear();
+          CharResultValues.Add((CharResultValue)value);
+        } else if (t == typeof(BlobResultValue)) {
+          BlobResultValues.Clear();
+          BlobResultValues.Add((BlobResultValue)value);
+        } else throw new ArgumentException("invalid result value type " + t.Name);
+      }
+    }
+  }
+  public partial class Algorithm {
+    public IQueryable<Parameter> Parameters {
+      get {
+        return Algorithm_Parameters.AsQueryable().Select(ap => ap.Parameter);
+      }
+    }
+    public IQueryable<IntParameterValue> IntParameterValues {
+      get {
+        return Parameters.AsQueryable()
+          .Where(p => p.IntParameterValues.Count > 0)
+          .Select(p => p.IntParameterValues.Single());
+      }
+    }
+    public IQueryable<FloatParameterValue> FloatParameterValues {
+      get {
+        return Parameters.AsQueryable()
+          .Where(p => p.FloatParameterValues.Count > 0)
+          .Select(p => p.FloatParameterValues.Single());
+      }
+    }
+    public IQueryable<CharParameterValue> CharParameterValues {
+      get {
+        return Parameters.AsQueryable()
+          .Where(p => p.CharParameterValues.Count > 0)
+          .Select(p => p.CharParameterValues.Single());
+      }
+    }
+    public IQueryable<OperatorParameterValue> OperatorParameterValues {
+      get {
+        return Parameters.AsQueryable()
+          .Where(p => p.OperatorParameterValues.Count > 0)
+          .Select(p => p.OperatorParameterValues.Single());
+      }
+    }
+    public IQueryable<IParameterValue> ParameterValues {
+      get {
+        return Parameters.AsQueryable().Select(p => p.ParameterValue);
+      }
+    }
+
+    public IQueryable<Result> Results {
+      get {
+        return Algorithm_Results.AsQueryable().Select(ar => ar.Result);
+      }
+    }
+    public IQueryable<IntResultValue> IntResultValues {
+      get {
+        return Results.AsQueryable()
+          .Where(r => r.IntResultValues.Count > 0)
+          .Select(r => r.IntResultValues.Single());
+      }
+    }
+    public IQueryable<FloatResultValue> FloatResultValues {
+      get {
+        return Results.AsQueryable()
+          .Where(r => r.FloatResultValues.Count > 0)
+          .Select(r => r.FloatResultValues.Single());
+      }
+    }
+    public IQueryable<CharResultValue> CharResultValues {
+      get {
+
+        return Results.AsQueryable()
+          .Where(r => r.CharResultValues.Count > 0)
+          .Select(r => r.CharResultValues.Single());
+      }
+    }
+    public IQueryable<BlobResultValue> BlobResultValues {
+      get {
+        return Results.AsQueryable()
+          .Where(r => r.BlobResultValues.Count > 0)
+          .Select(r => r.BlobResultValues.Single());
+      }
+    }
+    public IQueryable<IResultValue> ResultValues {
+      get {
+        return Results.AsQueryable().Select(r => r.ResultValue);
+      }
+    }
+  }
+  #endregion
+
+  #region Type access
+  public partial class DataType {
+    public Type Type {
+      get {
+        return Type.GetType(ClrName, false) ?? typeof(object);
+      }
+    }
+  }
+  #endregion
+
+  #region NamedEntities
+  public interface INamedEntity {
+    int Id { get; }
+    string Name { get; }
+    string Description { get; }
+  }
+  public partial class AlgorithmClass : INamedEntity { }
+  public partial class Algorithm : INamedEntity { }
+  public partial class ProblemClass : INamedEntity { }
+  public partial class Problem : INamedEntity { }
+  public partial class SolutionRepresentation : INamedEntity { }
+  public partial class ProblemCharacteristic : INamedEntity { }
+  public partial class Parameter : INamedEntity { }
+  public partial class Result : INamedEntity { }
+  public partial class Project : INamedEntity { }
+  public partial class Platform : INamedValue { }
+  #endregion
+
+  #region DataTypes
+  public interface IIntValue {
+    int Value { get; }
+  }
+  public partial class IntResultValue : IIntValue { }
+  public partial class IntParameterValue : IIntValue { }
+  public partial class IntProblemCharacteristicValue : IIntValue { }
+  public interface IFloatValue {
+    double Value { get; }
+  }
+  public partial class FloatResultValue : IFloatValue { }
+  public partial class FloatParameterValue : IFloatValue { }
+  public partial class FloatProblemCharacteristicValue : IFloatValue { }
+  public interface ICharValue {
+    string Value { get; }
+  }
+  public partial class CharResultValue : ICharValue { }
+  public partial class CharParameterValue : ICharValue { }
+  public partial class CharProblemCharacteristicValue : ICharValue { }
+  #endregion
+
+  #region NamedValues
+  public interface INamedValue {
+    string Name { get; }
+  }
+  public interface IValue<T> : INamedValue {
+    T Value { get; }
+  }
+  public partial class IntResultValue : IValue<int> {
+    public string Name { get { return Result.Name; } }
+  }
+  public partial class FloatResultValue : IValue<double> {
+    public string Name { get { return Result.Name; } }
+  }
+  public partial class CharResultValue : IValue<string> {
+    public string Name { get { return Result.Name; } }
+  }
+  public partial class BlobResultValue : IValue<Binary> {
+    public string Name { get { return Result.Name; } }
+  }
+  public partial class IntParameterValue : IValue<int> {
+    public string Name { get { return Parameter.Name; } }
+  }
+  public partial class FloatParameterValue : IValue<double> {
+    public string Name { get { return Parameter.Name; } }
+  }
+  public partial class CharParameterValue : IValue<string> {
+    public string Name { get { return Parameter.Name; } }
+  }
+  public partial class OperatorParameterValue : IValue<Binary> {
+    public string Name { get { return Parameter.Name; } }
+  }
+  public partial class IntProblemCharacteristicValue : IValue<int> {
+    public string Name { get { return ProblemCharacteristic.Name; } }
+  }
+  public partial class FloatProblemCharacteristicValue : IValue<double> {
+    public string Name { get { return ProblemCharacteristic.Name; } }
+  }
+  public partial class CharProblemCharacteristicValue : IValue<string> {
+    public string Name { get { return ProblemCharacteristic.Name; } }
+  }
+  #endregion
+
+  #region DynamicTypeInformation
+  public interface IDynamicParent : INamedEntity {
+    DataType DataType { get; }
+  }
+  public partial class ProblemCharacteristic : IDynamicParent { }
+  public partial class Parameter : IDynamicParent { }
+  public partial class Result : IDynamicParent { }
+  #endregion
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataAccess/3.3/Properties/AssemblyInfo.frame
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataAccess/3.3/Properties/AssemblyInfo.frame	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataAccess/3.3/Properties/AssemblyInfo.frame	(revision 5296)
@@ -0,0 +1,57 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.Services.OKB.DataAccess")]
+[assembly: AssemblyDescription("Data access layer for HeuristicLab OKB services")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2010 HEAL")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components.  If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("8a145a17-ce73-47da-b520-b4194835fb49")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("3.3.0.0")]
+[assembly: AssemblyFileVersion("3.3.0.$WCREV$")]
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataAccess/3.3/Properties/Settings.Designer.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataAccess/3.3/Properties/Settings.Designer.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataAccess/3.3/Properties/Settings.Designer.cs	(revision 5296)
@@ -0,0 +1,37 @@
+﻿//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.1
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HeuristicLab.Services.OKB.DataAccess.Properties {
+    
+    
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")]
+    public sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
+        
+        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+        
+        public static Settings Default {
+            get {
+                return defaultInstance;
+            }
+        }
+        
+        [global::System.Configuration.ApplicationScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.SpecialSettingAttribute(global::System.Configuration.SpecialSetting.ConnectionString)]
+        [global::System.Configuration.DefaultSettingValueAttribute("Data Source=.\\SQLEXPRESS;Integrated Security=SSPI;Initial Catalog=HeuristicLab.OK" +
+            "B")]
+        public string OKBConnectionString {
+            get {
+                return ((string)(this["OKBConnectionString"]));
+            }
+        }
+    }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataAccess/3.3/Properties/Settings.settings
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataAccess/3.3/Properties/Settings.settings	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataAccess/3.3/Properties/Settings.settings	(revision 5296)
@@ -0,0 +1,14 @@
+﻿<?xml version='1.0' encoding='utf-8'?>
+<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="HeuristicLab.Services.OKB.DataAccess.Properties" GeneratedClassName="Settings">
+  <Profiles />
+  <Settings>
+    <Setting Name="OKBConnectionString" Type="(Connection string)" Scope="Application">
+      <DesignTimeValue Profile="(Default)">&lt;?xml version="1.0" encoding="utf-16"?&gt;
+&lt;SerializableConnectionString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"&gt;
+  &lt;ConnectionString&gt;Data Source=.\SQLEXPRESS;Integrated Security=SSPI;Initial Catalog=HeuristicLab.OKB&lt;/ConnectionString&gt;
+  &lt;ProviderName&gt;System.Data.SqlClient&lt;/ProviderName&gt;
+&lt;/SerializableConnectionString&gt;</DesignTimeValue>
+      <Value Profile="(Default)">Data Source=.\SQLEXPRESS;Integrated Security=SSPI;Initial Catalog=HeuristicLab.OKB</Value>
+    </Setting>
+  </Settings>
+</SettingsFile>
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataAccess/3.3/SQL Scripts/Create OKB.sql
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataAccess/3.3/SQL Scripts/Create OKB.sql	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataAccess/3.3/SQL Scripts/Create OKB.sql	(revision 5296)
@@ -0,0 +1,112 @@
+USE [master]
+GO
+
+/****** Object:  Database [HeuristicLab.OKB]    Script Date: 09/12/2010 00:57:17 ******/
+IF  EXISTS (SELECT name FROM sys.databases WHERE name = N'HeuristicLab.OKB')
+DROP DATABASE [HeuristicLab.OKB]
+GO
+
+USE [master]
+GO
+
+/****** Object:  Database [HeuristicLab.OKB]    Script Date: 09/12/2010 00:57:17 ******/
+CREATE DATABASE [HeuristicLab.OKB] ON  PRIMARY 
+( NAME = N'HeuristicLab.OKB', FILENAME = N'c:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\HeuristicLab.OKB.mdf' , SIZE = 3072KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )
+ LOG ON 
+( NAME = N'HeuristicLab.OKB_log', FILENAME = N'c:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\HeuristicLab.OKB_log.ldf' , SIZE = 1024KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)
+GO
+
+ALTER DATABASE [HeuristicLab.OKB] SET COMPATIBILITY_LEVEL = 100
+GO
+
+IF (1 = FULLTEXTSERVICEPROPERTY('IsFullTextInstalled'))
+begin
+EXEC [HeuristicLab.OKB].[dbo].[sp_fulltext_database] @action = 'enable'
+end
+GO
+
+ALTER DATABASE [HeuristicLab.OKB] SET ANSI_NULL_DEFAULT OFF 
+GO
+
+ALTER DATABASE [HeuristicLab.OKB] SET ANSI_NULLS OFF 
+GO
+
+ALTER DATABASE [HeuristicLab.OKB] SET ANSI_PADDING OFF 
+GO
+
+ALTER DATABASE [HeuristicLab.OKB] SET ANSI_WARNINGS OFF 
+GO
+
+ALTER DATABASE [HeuristicLab.OKB] SET ARITHABORT OFF 
+GO
+
+ALTER DATABASE [HeuristicLab.OKB] SET AUTO_CLOSE OFF 
+GO
+
+ALTER DATABASE [HeuristicLab.OKB] SET AUTO_CREATE_STATISTICS ON 
+GO
+
+ALTER DATABASE [HeuristicLab.OKB] SET AUTO_SHRINK OFF 
+GO
+
+ALTER DATABASE [HeuristicLab.OKB] SET AUTO_UPDATE_STATISTICS ON 
+GO
+
+ALTER DATABASE [HeuristicLab.OKB] SET CURSOR_CLOSE_ON_COMMIT OFF 
+GO
+
+ALTER DATABASE [HeuristicLab.OKB] SET CURSOR_DEFAULT  GLOBAL 
+GO
+
+ALTER DATABASE [HeuristicLab.OKB] SET CONCAT_NULL_YIELDS_NULL OFF 
+GO
+
+ALTER DATABASE [HeuristicLab.OKB] SET NUMERIC_ROUNDABORT OFF 
+GO
+
+ALTER DATABASE [HeuristicLab.OKB] SET QUOTED_IDENTIFIER OFF 
+GO
+
+ALTER DATABASE [HeuristicLab.OKB] SET RECURSIVE_TRIGGERS OFF 
+GO
+
+ALTER DATABASE [HeuristicLab.OKB] SET  DISABLE_BROKER 
+GO
+
+ALTER DATABASE [HeuristicLab.OKB] SET AUTO_UPDATE_STATISTICS_ASYNC OFF 
+GO
+
+ALTER DATABASE [HeuristicLab.OKB] SET DATE_CORRELATION_OPTIMIZATION OFF 
+GO
+
+ALTER DATABASE [HeuristicLab.OKB] SET TRUSTWORTHY OFF 
+GO
+
+ALTER DATABASE [HeuristicLab.OKB] SET ALLOW_SNAPSHOT_ISOLATION OFF 
+GO
+
+ALTER DATABASE [HeuristicLab.OKB] SET PARAMETERIZATION SIMPLE 
+GO
+
+ALTER DATABASE [HeuristicLab.OKB] SET READ_COMMITTED_SNAPSHOT OFF 
+GO
+
+ALTER DATABASE [HeuristicLab.OKB] SET HONOR_BROKER_PRIORITY OFF 
+GO
+
+ALTER DATABASE [HeuristicLab.OKB] SET  READ_WRITE 
+GO
+
+ALTER DATABASE [HeuristicLab.OKB] SET RECOVERY SIMPLE 
+GO
+
+ALTER DATABASE [HeuristicLab.OKB] SET  MULTI_USER 
+GO
+
+ALTER DATABASE [HeuristicLab.OKB] SET PAGE_VERIFY CHECKSUM  
+GO
+
+ALTER DATABASE [HeuristicLab.OKB] SET DB_CHAINING OFF 
+GO
+
+
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataAccess/3.3/Tests/HeuristicLab.Services.OKB.DataAccess-3.3.Tests.csproj
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataAccess/3.3/Tests/HeuristicLab.Services.OKB.DataAccess-3.3.Tests.csproj	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataAccess/3.3/Tests/HeuristicLab.Services.OKB.DataAccess-3.3.Tests.csproj	(revision 5296)
@@ -0,0 +1,66 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>
+    </ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{89234006-FE1B-4A15-AFEC-91CB3526F0A5}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Services.OKB.DataAccess_33.Tests</RootNamespace>
+    <AssemblyName>HeuristicLab.Services.OKB.DataAccess-3.3.Tests</AssemblyName>
+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="Microsoft.VisualStudio.QualityTools.UnitTestFramework, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" />
+    <Reference Include="System" />
+    <Reference Include="System.Core">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data.Linq" />
+  </ItemGroup>
+  <ItemGroup>
+    <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+      <Visible>False</Visible>
+    </CodeAnalysisDependentAssemblyPaths>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="UnitTest.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\HeuristicLab.Services.OKB.DataAccess-3.3.csproj">
+      <Project>{E36BE58F-F3CE-40BB-9AB3-9F9E30AD5CCF}</Project>
+      <Name>HeuristicLab.Services.OKB.DataAccess-3.3</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataAccess/3.3/Tests/Properties/AssemblyInfo.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataAccess/3.3/Tests/Properties/AssemblyInfo.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataAccess/3.3/Tests/Properties/AssemblyInfo.cs	(revision 5296)
@@ -0,0 +1,56 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.Services.OKB.DataAccess-3.3.Tests")]
+[assembly: AssemblyDescription("Unit tests for the HeuristicLab OKB services data access layer.")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2010 HEAL")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("50ee0006-ea13-4495-8136-d62565b6f013")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers 
+// by using the '*' as shown below:
+[assembly: AssemblyVersion("3.3.0.0")]
+[assembly: AssemblyFileVersion("3.3.0.0")]
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataAccess/3.3/Tests/UnitTest.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataAccess/3.3/Tests/UnitTest.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataAccess/3.3/Tests/UnitTest.cs	(revision 5296)
@@ -0,0 +1,466 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Data.Linq;
+using System.Linq;
+using HeuristicLab.Services.OKB.DataAccess;
+using Microsoft.VisualStudio.TestTools.UnitTesting;
+
+namespace HeuristicLab.Services.OKB.DataAccess_33.Tests {
+  /// <summary>
+  /// Summary description for UnitTest1
+  /// </summary>
+  [TestClass]
+  public class UnitTest {
+    private const int PLATFORMS = 1;
+    private const int DATATYPES_PER_PLATFORM = 500;
+    private const int ALGORITHMCLASSES_PER_PLATFORM = 10;
+    private const int ALGORITHMS_PER_CLASS = 10;
+    private const int PROBLEMCLASSES_PER_PLATFORM = 10;
+    private const int PROBLEMS_PER_CLASS = 10;
+    private const int PARAMETERS_PER_ALGORITHM = 10;
+    private const int RESULTS_PER_ALGORITHM = 10;
+    private const int PARAMETERS_PER_PROBLEM = 10;
+    private const int EXPERIMENTS_PER_PLATFORM = 1000;
+    private const int RUNS_PER_EXPERIMENT = 10;
+    private const int ALGORITHMDATA_SIZE = 1024 * 1024;
+    private const int PROBLEMDATA_SIZE = 1024 * 1024;
+    private const int BLOBVALUE_SIZE = 1024;
+
+    private string[] sqlNames = new string[] { "varbinary", "nvarchar", "float", "bit", "bigint" };
+    private Random random = new Random();
+    private DataType[] varbinaryTypes;
+    private DataType[] nvarcharTypes;
+    private DataType[] floatTypes;
+    private DataType[] bitTypes;
+    private DataType[] bigintTypes;
+
+    public UnitTest() {
+      //
+      // TODO: Add constructor logic here
+      //
+    }
+
+    private TestContext testContextInstance;
+
+    /// <summary>
+    ///Gets or sets the test context which provides
+    ///information about and functionality for the current test run.
+    ///</summary>
+    public TestContext TestContext {
+      get {
+        return testContextInstance;
+      }
+      set {
+        testContextInstance = value;
+      }
+    }
+
+    #region Additional test attributes
+    //
+    // You can use the following additional attributes as you write your tests:
+    //
+    // Use ClassInitialize to run code before running the first test in the class
+    // [ClassInitialize()]
+    // public static void MyClassInitialize(TestContext testContext) { }
+    //
+    // Use ClassCleanup to run code after all tests in a class have run
+    // [ClassCleanup()]
+    // public static void MyClassCleanup() { }
+    //
+    // Use TestInitialize to run code before running each test 
+    // [TestInitialize()]
+    // public void MyTestInitialize() { }
+    //
+    // Use TestCleanup to run code after each test has run
+    // [TestCleanup()]
+    // public void MyTestCleanup() { }
+    //
+    #endregion
+
+    [TestMethod]
+    public void ClearDB() {
+      using (OKBDataContext okb = new OKBDataContext()) {
+        okb.ExecuteCommand("DELETE FROM dbo.ResultBlobValue");
+        okb.ExecuteCommand("DELETE FROM dbo.ResultBoolValue");
+        okb.ExecuteCommand("DELETE FROM dbo.ResultFloatValue");
+        okb.ExecuteCommand("DELETE FROM dbo.ResultIntValue");
+        okb.ExecuteCommand("DELETE FROM dbo.ResultStringValue");
+
+        okb.ExecuteCommand("DELETE FROM dbo.AlgorithmParameterBlobValue");
+        okb.ExecuteCommand("DELETE FROM dbo.AlgorithmParameterBoolValue");
+        okb.ExecuteCommand("DELETE FROM dbo.AlgorithmParameterFloatValue");
+        okb.ExecuteCommand("DELETE FROM dbo.AlgorithmParameterIntValue");
+        okb.ExecuteCommand("DELETE FROM dbo.AlgorithmParameterStringValue");
+
+        okb.ExecuteCommand("DELETE FROM dbo.ProblemParameterBlobValue");
+        okb.ExecuteCommand("DELETE FROM dbo.ProblemParameterBoolValue");
+        okb.ExecuteCommand("DELETE FROM dbo.ProblemParameterFloatValue");
+        okb.ExecuteCommand("DELETE FROM dbo.ProblemParameterIntValue");
+        okb.ExecuteCommand("DELETE FROM dbo.ProblemParameterStringValue");
+
+        okb.ExecuteCommand("DELETE FROM dbo.Run");
+        okb.ExecuteCommand("DELETE FROM dbo.Experiment");
+        okb.ExecuteCommand("DELETE FROM dbo.AlgorithmData");
+        okb.ExecuteCommand("DELETE FROM dbo.AlgorithmUser");
+        okb.ExecuteCommand("DELETE FROM dbo.AlgorithmParameter");
+        okb.ExecuteCommand("DELETE FROM dbo.Result");
+        okb.ExecuteCommand("DELETE FROM dbo.Algorithm");
+        okb.ExecuteCommand("DELETE FROM dbo.AlgorithmClass");
+        okb.ExecuteCommand("DELETE FROM dbo.ProblemData");
+        okb.ExecuteCommand("DELETE FROM dbo.ProblemUser");
+        okb.ExecuteCommand("DELETE FROM dbo.ProblemParameter");
+        okb.ExecuteCommand("DELETE FROM dbo.Problem");
+        okb.ExecuteCommand("DELETE FROM dbo.ProblemClass");
+        okb.ExecuteCommand("DELETE FROM dbo.DataType");
+        okb.ExecuteCommand("DELETE FROM dbo.Platform");
+      }
+    }
+
+    [TestMethod]
+    public void InitDummyDB() {
+      using (OKBDataContext okb = new OKBDataContext()) {
+        for (int i = 0; i < PLATFORMS; i++) {
+          CreatePlatform(okb);
+        }
+        okb.SubmitChanges();
+      }
+    }
+
+    [TestMethod]
+    public void CreateDummyExperiments() {
+      using (OKBDataContext okb = new OKBDataContext()) {
+        foreach (Platform platform in okb.Platforms) {
+          for (int i = 0; i < EXPERIMENTS_PER_PLATFORM; i++) {
+            Algorithm[] algorithms = okb.Algorithms.Where(x => x.PlatformId == platform.Id).ToArray();
+            Problem[] problems = okb.Problems.Where(x => x.PlatformId == platform.Id).ToArray();
+            varbinaryTypes = null;
+            nvarcharTypes = null;
+            floatTypes = null;
+            bitTypes = null;
+            bigintTypes = null;
+
+            CreateExperiment(okb, algorithms[random.Next(algorithms.Length)], problems[random.Next(problems.Length)], platform);
+          }
+          okb.SubmitChanges();
+        }
+      }
+    }
+
+    private void CreatePlatform(OKBDataContext okb) {
+      Platform entity = new Platform();
+      entity.Name = Guid.NewGuid().ToString();
+      entity.Description = Guid.NewGuid().ToString();
+      okb.Platforms.InsertOnSubmit(entity);
+
+      for (int i = 0; i < DATATYPES_PER_PLATFORM; i++) {
+        CreateDataType(okb, entity);
+      }
+      okb.SubmitChanges();
+
+      varbinaryTypes = null;
+      nvarcharTypes = null;
+      floatTypes = null;
+      bitTypes = null;
+      bigintTypes = null;
+
+      for (int i = 0; i < ALGORITHMCLASSES_PER_PLATFORM; i++) {
+        CreateAlgorithmClass(okb, entity);
+      }
+      for (int i = 0; i < PROBLEMCLASSES_PER_PLATFORM; i++) {
+        CreateProblemClass(okb, entity);
+      }
+    }
+    private void CreateDataType(OKBDataContext okb, Platform platform) {
+      DataType entity = new DataType();
+      entity.Name = Guid.NewGuid().ToString();
+      entity.TypeName = Guid.NewGuid().ToString();
+      entity.SqlName = sqlNames[random.Next(sqlNames.Length)];
+      entity.Platform = platform;
+      okb.DataTypes.InsertOnSubmit(entity);
+    }
+    private DataType GetDataType(OKBDataContext okb, Platform platform, string sqlName) {
+      if (varbinaryTypes == null) varbinaryTypes = okb.DataTypes.Where(x => (x.PlatformId == platform.Id) && (x.SqlName == "varbinary")).ToArray();
+      if (nvarcharTypes == null) nvarcharTypes = okb.DataTypes.Where(x => (x.PlatformId == platform.Id) && (x.SqlName == "nvarchar")).ToArray();
+      if (floatTypes == null) floatTypes = okb.DataTypes.Where(x => (x.PlatformId == platform.Id) && (x.SqlName == "float")).ToArray();
+      if (bitTypes == null) bitTypes = okb.DataTypes.Where(x => (x.PlatformId == platform.Id) && (x.SqlName == "bit")).ToArray();
+      if (bigintTypes == null) bigintTypes = okb.DataTypes.Where(x => (x.PlatformId == platform.Id) && (x.SqlName == "bigint")).ToArray();
+
+      switch (sqlName) {
+        case "varbinary": return varbinaryTypes[random.Next(varbinaryTypes.Length)];
+        case "nvarchar": return nvarcharTypes[random.Next(nvarcharTypes.Length)];
+        case "float": return floatTypes[random.Next(floatTypes.Length)];
+        case "bit": return bitTypes[random.Next(bitTypes.Length)];
+        case "bigint": return bigintTypes[random.Next(bigintTypes.Length)];
+        default: return null;
+      }
+    }
+    private void CreateAlgorithmClass(OKBDataContext okb, Platform platform) {
+      AlgorithmClass entity = new AlgorithmClass();
+      entity.Name = Guid.NewGuid().ToString();
+      entity.Description = Guid.NewGuid().ToString();
+      for (int i = 0; i < ALGORITHMS_PER_CLASS; i++) {
+        CreateAlgorithm(okb, entity, platform);
+      }
+      okb.AlgorithmClasses.InsertOnSubmit(entity);
+    }
+    private void CreateProblemClass(OKBDataContext okb, Platform platform) {
+      ProblemClass entity = new ProblemClass();
+      entity.Name = Guid.NewGuid().ToString();
+      entity.Description = Guid.NewGuid().ToString();
+      for (int i = 0; i < PROBLEMS_PER_CLASS; i++) {
+        CreateProblem(okb, entity, platform);
+      }
+      okb.ProblemClasses.InsertOnSubmit(entity);
+    }
+    private void CreateAlgorithm(OKBDataContext okb, AlgorithmClass algorithmClass, Platform platform) {
+      Algorithm entity = new Algorithm();
+      entity.Name = Guid.NewGuid().ToString();
+      entity.Description = Guid.NewGuid().ToString();
+      entity.AlgorithmClass = algorithmClass;
+      entity.Platform = platform;
+      CreateAlgorithmData(okb, entity, platform);
+      for (int i = 0; i < PARAMETERS_PER_ALGORITHM; i++) {
+        CreateAlgorithmParameter(okb, entity, platform);
+      }
+      for (int i = 0; i < RESULTS_PER_ALGORITHM; i++) {
+        CreateResult(okb, entity, platform);
+      }
+      okb.Algorithms.InsertOnSubmit(entity);
+    }
+    private void CreateAlgorithmData(OKBDataContext okb, Algorithm algorithm, Platform platform) {
+      AlgorithmData entity = new AlgorithmData();
+      entity.Algorithm = algorithm;
+      entity.Data = new System.Data.Linq.Binary(new byte[ALGORITHMDATA_SIZE]);
+      entity.DataType = GetDataType(okb, platform, "varbinary");
+      okb.AlgorithmDatas.InsertOnSubmit(entity);
+    }
+    private void CreateAlgorithmParameter(OKBDataContext okb, Algorithm algorithm, Platform platform) {
+      AlgorithmParameter entity = new AlgorithmParameter();
+      entity.Name = Guid.NewGuid().ToString();
+      entity.Alias = Guid.NewGuid().ToString();
+      entity.Description = Guid.NewGuid().ToString();
+      entity.Algorithm = algorithm;
+      entity.DataType = GetDataType(okb, platform, sqlNames[random.Next(sqlNames.Length)]);
+      okb.AlgorithmParameters.InsertOnSubmit(entity);
+    }
+    private void CreateResult(OKBDataContext okb, Algorithm algorithm, Platform platform) {
+      Result entity = new Result();
+      entity.Name = Guid.NewGuid().ToString();
+      entity.Alias = Guid.NewGuid().ToString();
+      entity.Description = Guid.NewGuid().ToString();
+      entity.Algorithm = algorithm;
+      entity.DataType = GetDataType(okb, platform, sqlNames[random.Next(sqlNames.Length)]);
+      okb.Results.InsertOnSubmit(entity);
+    }
+    private void CreateProblem(OKBDataContext okb, ProblemClass problemClass, Platform platform) {
+      Problem entity = new Problem();
+      entity.Name = Guid.NewGuid().ToString();
+      entity.Description = Guid.NewGuid().ToString();
+      entity.ProblemClass = problemClass;
+      entity.Platform = platform;
+      CreateProblemData(okb, entity, platform);
+      for (int i = 0; i < PARAMETERS_PER_PROBLEM; i++) {
+        CreateProblemParameter(okb, entity, platform);
+      }
+      okb.Problems.InsertOnSubmit(entity);
+    }
+    private void CreateProblemData(OKBDataContext okb, Problem problem, Platform platform) {
+      ProblemData entity = new ProblemData();
+      entity.Problem = problem;
+      entity.Data = new System.Data.Linq.Binary(new byte[PROBLEMDATA_SIZE]);
+      entity.DataType = GetDataType(okb, platform, "varbinary");
+      okb.ProblemDatas.InsertOnSubmit(entity);
+    }
+    private void CreateProblemParameter(OKBDataContext okb, Problem problem, Platform platform) {
+      ProblemParameter entity = new ProblemParameter();
+      entity.Name = Guid.NewGuid().ToString();
+      entity.Alias = Guid.NewGuid().ToString();
+      entity.Description = Guid.NewGuid().ToString();
+      entity.Problem = problem;
+      entity.DataType = GetDataType(okb, platform, sqlNames[random.Next(sqlNames.Length)]);
+      okb.ProblemParameters.InsertOnSubmit(entity);
+    }
+    private void CreateExperiment(OKBDataContext okb, Algorithm algorithm, Problem problem, Platform platform) {
+      Experiment entity = new Experiment();
+      entity.Algorithm = algorithm;
+      entity.Problem = problem;
+
+      foreach (AlgorithmParameter algorithmParameter in okb.AlgorithmParameters.Where(x => x.AlgorithmId == algorithm.Id)) {
+        CreateAlgorithmParameterValue(okb, algorithmParameter, entity, platform);
+      }
+      foreach (ProblemParameter problemParameter in okb.ProblemParameters.Where(x => x.ProblemId == problem.Id)) {
+        CreateProblemParameterValue(okb, problemParameter, entity, platform);
+      }
+
+      for (int i = 0; i < RUNS_PER_EXPERIMENT; i++) {
+        CreateRun(okb, entity, platform);
+      }
+      okb.Experiments.InsertOnSubmit(entity);
+    }
+    private void CreateAlgorithmParameterValue(OKBDataContext okb, AlgorithmParameter algorithmParameter, Experiment experiment, Platform platform) {
+      switch (algorithmParameter.DataType.SqlName) {
+        case "varbinary":
+          AlgorithmParameterBlobValue v1 = new AlgorithmParameterBlobValue();
+          v1.AlgorithmParameter = algorithmParameter;
+          v1.Experiment = experiment;
+          v1.Value = new Binary(new byte[BLOBVALUE_SIZE]);
+          v1.DataType = GetDataType(okb, platform, "varbinary");
+          okb.AlgorithmParameterBlobValues.InsertOnSubmit(v1);
+          return;
+        case "bit":
+          AlgorithmParameterBoolValue v2 = new AlgorithmParameterBoolValue();
+          v2.AlgorithmParameter = algorithmParameter;
+          v2.Experiment = experiment;
+          v2.Value = random.Next(2) == 0;
+          v2.DataType = GetDataType(okb, platform, "bit");
+          okb.AlgorithmParameterBoolValues.InsertOnSubmit(v2);
+          return;
+        case "float":
+          AlgorithmParameterFloatValue v3 = new AlgorithmParameterFloatValue();
+          v3.AlgorithmParameter = algorithmParameter;
+          v3.Experiment = experiment;
+          v3.Value = random.NextDouble();
+          v3.DataType = GetDataType(okb, platform, "float");
+          okb.AlgorithmParameterFloatValues.InsertOnSubmit(v3);
+          return;
+        case "bigint":
+          AlgorithmParameterIntValue v4 = new AlgorithmParameterIntValue();
+          v4.AlgorithmParameter = algorithmParameter;
+          v4.Experiment = experiment;
+          v4.Value = random.Next();
+          v4.DataType = GetDataType(okb, platform, "bigint");
+          okb.AlgorithmParameterIntValues.InsertOnSubmit(v4);
+          return;
+        case "nvarchar":
+          AlgorithmParameterStringValue v5 = new AlgorithmParameterStringValue();
+          v5.AlgorithmParameter = algorithmParameter;
+          v5.Experiment = experiment;
+          v5.Value = Guid.NewGuid().ToString();
+          v5.DataType = GetDataType(okb, platform, "nvarchar");
+          okb.AlgorithmParameterStringValues.InsertOnSubmit(v5);
+          return;
+      }
+    }
+    private void CreateProblemParameterValue(OKBDataContext okb, ProblemParameter problemParameter, Experiment experiment, Platform platform) {
+      switch (problemParameter.DataType.SqlName) {
+        case "varbinary":
+          ProblemParameterBlobValue v1 = new ProblemParameterBlobValue();
+          v1.ProblemParameter = problemParameter;
+          v1.Experiment = experiment;
+          v1.Value = new Binary(new byte[BLOBVALUE_SIZE]);
+          v1.DataType = GetDataType(okb, platform, "varbinary");
+          okb.ProblemParameterBlobValues.InsertOnSubmit(v1);
+          return;
+        case "bit":
+          ProblemParameterBoolValue v2 = new ProblemParameterBoolValue();
+          v2.ProblemParameter = problemParameter;
+          v2.Experiment = experiment;
+          v2.Value = random.Next(2) == 0;
+          v2.DataType = GetDataType(okb, platform, "bit");
+          okb.ProblemParameterBoolValues.InsertOnSubmit(v2);
+          return;
+        case "float":
+          ProblemParameterFloatValue v3 = new ProblemParameterFloatValue();
+          v3.ProblemParameter = problemParameter;
+          v3.Experiment = experiment;
+          v3.Value = random.NextDouble();
+          v3.DataType = GetDataType(okb, platform, "float");
+          okb.ProblemParameterFloatValues.InsertOnSubmit(v3);
+          return;
+        case "bigint":
+          ProblemParameterIntValue v4 = new ProblemParameterIntValue();
+          v4.ProblemParameter = problemParameter;
+          v4.Experiment = experiment;
+          v4.Value = random.Next();
+          v4.DataType = GetDataType(okb, platform, "bigint");
+          okb.ProblemParameterIntValues.InsertOnSubmit(v4);
+          return;
+        case "nvarchar":
+          ProblemParameterStringValue v5 = new ProblemParameterStringValue();
+          v5.ProblemParameter = problemParameter;
+          v5.Experiment = experiment;
+          v5.Value = Guid.NewGuid().ToString();
+          v5.DataType = GetDataType(okb, platform, "nvarchar");
+          okb.ProblemParameterStringValues.InsertOnSubmit(v5);
+          return;
+      }
+    }
+    private void CreateRun(OKBDataContext okb, Experiment experiment, Platform platform) {
+      Run entity = new Run();
+      entity.RandomSeed = random.Next();
+      entity.CreatedDate = DateTime.Now;
+      entity.UserId = Guid.NewGuid();
+      entity.ClientId = Guid.NewGuid();
+      entity.Experiment = experiment;
+
+      foreach (Result result in okb.Results.Where(x => x.AlgorithmId == experiment.AlgorithmId)) {
+        CreateResultValue(okb, result, entity, platform);
+      }
+      okb.Runs.InsertOnSubmit(entity);
+    }
+    private void CreateResultValue(OKBDataContext okb, Result result, Run run, Platform platform) {
+      switch (result.DataType.SqlName) {
+        case "varbinary":
+          ResultBlobValue v1 = new ResultBlobValue();
+          v1.Result = result;
+          v1.Run = run;
+          v1.Value = new Binary(new byte[BLOBVALUE_SIZE]);
+          v1.DataType = GetDataType(okb, platform, "varbinary");
+          okb.ResultBlobValues.InsertOnSubmit(v1);
+          return;
+        case "bit":
+          ResultBoolValue v2 = new ResultBoolValue();
+          v2.Result = result;
+          v2.Run = run;
+          v2.Value = random.Next(2) == 0;
+          v2.DataType = GetDataType(okb, platform, "bit");
+          okb.ResultBoolValues.InsertOnSubmit(v2);
+          return;
+        case "float":
+          ResultFloatValue v3 = new ResultFloatValue();
+          v3.Result = result;
+          v3.Run = run;
+          v3.Value = random.NextDouble();
+          v3.DataType = GetDataType(okb, platform, "float");
+          okb.ResultFloatValues.InsertOnSubmit(v3);
+          return;
+        case "bigint":
+          ResultIntValue v4 = new ResultIntValue();
+          v4.Result = result;
+          v4.Run = run;
+          v4.Value = random.Next();
+          v4.DataType = GetDataType(okb, platform, "bigint");
+          okb.ResultIntValues.InsertOnSubmit(v4);
+          return;
+        case "nvarchar":
+          ResultStringValue v5 = new ResultStringValue();
+          v5.Result = result;
+          v5.Run = run;
+          v5.Value = Guid.NewGuid().ToString();
+          v5.DataType = GetDataType(okb, platform, "nvarchar");
+          okb.ResultStringValues.InsertOnSubmit(v5);
+          return;
+      }
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataAccess/3.3/app.config
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataAccess/3.3/app.config	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataAccess/3.3/app.config	(revision 5296)
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<configuration>
+  <configSections>
+  </configSections>
+  <connectionStrings>
+    <add name="HeuristicLab.Services.OKB.DataAccess.Properties.Settings.OKBConnectionString"
+         connectionString="Data Source=.\SQLEXPRESS;Integrated Security=SSPI;Initial Catalog=HeuristicLab.OKB"
+         providerName="System.Data.SqlClient" />
+  </connectionStrings>
+<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/Algorithm.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/Algorithm.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/Algorithm.cs	(revision 5296)
@@ -0,0 +1,32 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.OKB.DataTransfer {
+  [DataContract]
+  public class Algorithm : NamedOKBItem {
+    [DataMember]
+    public long PlatformId { get; set; }
+    [DataMember]
+    public long AlgorithmClassId { get; set; }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/AlgorithmClass.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/AlgorithmClass.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/AlgorithmClass.cs	(revision 5296)
@@ -0,0 +1,27 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.OKB.DataTransfer {
+  [DataContract]
+  public class AlgorithmClass : NamedOKBItem { }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/AlgorithmData.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/AlgorithmData.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/AlgorithmData.cs	(revision 5296)
@@ -0,0 +1,34 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.OKB.DataTransfer {
+  [DataContract]
+  public class AlgorithmData {
+    [DataMember]
+    public long AlgorithmId { get; set; }
+    [DataMember]
+    public long DataTypeId { get; set; }
+    [DataMember]
+    public byte[] Data { get; set; }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/AlgorithmParameter.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/AlgorithmParameter.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/AlgorithmParameter.cs	(revision 5296)
@@ -0,0 +1,34 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.OKB.DataTransfer {
+  [DataContract]
+  public class AlgorithmParameter : NamedOKBItem {
+    [DataMember]
+    public string Alias { get; set; }
+    [DataMember]
+    public long AlgorithmId { get; set; }
+    [DataMember]
+    public long DataTypeId { get; set; }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/AlgorithmParameterBlobValue.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/AlgorithmParameterBlobValue.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/AlgorithmParameterBlobValue.cs	(revision 5296)
@@ -0,0 +1,30 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.OKB.DataTransfer {
+  [DataContract]
+  public class AlgorithmParameterBlobValue : AlgorithmParameterValue {
+    [DataMember]
+    public byte[] Value { get; set; }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/AlgorithmParameterBoolValue.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/AlgorithmParameterBoolValue.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/AlgorithmParameterBoolValue.cs	(revision 5296)
@@ -0,0 +1,30 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.OKB.DataTransfer {
+  [DataContract]
+  public class AlgorithmParameterBoolValue : AlgorithmParameterValue {
+    [DataMember]
+    public bool Value { get; set; }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/AlgorithmParameterFloatValue.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/AlgorithmParameterFloatValue.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/AlgorithmParameterFloatValue.cs	(revision 5296)
@@ -0,0 +1,30 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.OKB.DataTransfer {
+  [DataContract]
+  public class AlgorithmParameterFloatValue : AlgorithmParameterValue {
+    [DataMember]
+    public double Value { get; set; }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/AlgorithmParameterIntValue.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/AlgorithmParameterIntValue.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/AlgorithmParameterIntValue.cs	(revision 5296)
@@ -0,0 +1,30 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.OKB.DataTransfer {
+  [DataContract]
+  public class AlgorithmParameterIntValue : AlgorithmParameterValue {
+    [DataMember]
+    public long Value { get; set; }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/AlgorithmParameterStringValue.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/AlgorithmParameterStringValue.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/AlgorithmParameterStringValue.cs	(revision 5296)
@@ -0,0 +1,30 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.OKB.DataTransfer {
+  [DataContract]
+  public class AlgorithmParameterStringValue : AlgorithmParameterValue {
+    [DataMember]
+    public string Value { get; set; }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/AlgorithmParameterValue.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/AlgorithmParameterValue.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/AlgorithmParameterValue.cs	(revision 5296)
@@ -0,0 +1,39 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.OKB.DataTransfer {
+  [DataContract]
+  [KnownType(typeof(AlgorithmParameterBlobValue))]
+  [KnownType(typeof(AlgorithmParameterBoolValue))]
+  [KnownType(typeof(AlgorithmParameterFloatValue))]
+  [KnownType(typeof(AlgorithmParameterIntValue))]
+  [KnownType(typeof(AlgorithmParameterStringValue))]
+  public abstract class AlgorithmParameterValue {
+    [DataMember]
+    public long AlgorithmParameterId { get; set; }
+    [DataMember]
+    public long ExperimentId { get; set; }
+    [DataMember]
+    public long DataTypeId { get; set; }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/DataType.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/DataType.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/DataType.cs	(revision 5296)
@@ -0,0 +1,36 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.OKB.DataTransfer {
+  [DataContract]
+  public class DataType : OKBItem {
+    [DataMember]
+    public string Name { get; set; }
+    [DataMember]
+    public string TypeName { get; set; }
+    [DataMember]
+    public string SqlName { get; set; }
+    [DataMember]
+    public long PlatformId { get; set; }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/Experiment.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/Experiment.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/Experiment.cs	(revision 5296)
@@ -0,0 +1,37 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.OKB.DataTransfer {
+  [DataContract]
+  public class Experiment : OKBItem {
+    [DataMember]
+    public long AlgorithmId { get; set; }
+    [DataMember]
+    public long ProblemId { get; set; }
+    [DataMember]
+    public IEnumerable<AlgorithmParameterValue> AlgorithmParameterValues { get; set; }
+    [DataMember]
+    public IEnumerable<ProblemParameterValue> ProblemParameterValues { get; set; }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/Filters/AndFilter.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/Filters/AndFilter.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/Filters/AndFilter.cs	(revision 5296)
@@ -0,0 +1,35 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Runtime.Serialization;
+using System.Collections.Generic;
+using System.Linq;
+
+namespace HeuristicLab.Services.OKB.DataTransfer {
+  [DataContract]
+  public class AndFilter : CombinedFilter {
+    public AndFilter(string filterTypeName, string label) {
+      FilterTypeName = filterTypeName;
+      Label = label;
+      Filters = Enumerable.Empty<Filter>();
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/Filters/CombinedFilter.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/Filters/CombinedFilter.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/Filters/CombinedFilter.cs	(revision 5296)
@@ -0,0 +1,31 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.OKB.DataTransfer {
+  [DataContract]
+  public abstract class CombinedFilter : Filter {
+    [DataMember]
+    public IEnumerable<Filter> Filters { get; set; }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/Filters/EqualityComparison.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/Filters/EqualityComparison.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/Filters/EqualityComparison.cs	(revision 5296)
@@ -0,0 +1,32 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.OKB.DataTransfer {
+  [DataContract]
+  public enum EqualityComparison {
+    [EnumMember]
+    Equal,
+    [EnumMember]
+    NotEqual
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/Filters/EqualityComparisonFilter.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/Filters/EqualityComparisonFilter.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/Filters/EqualityComparisonFilter.cs	(revision 5296)
@@ -0,0 +1,30 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.OKB.DataTransfer {
+  [DataContract]
+  public abstract class EqualityComparisonFilter : Filter {
+    [DataMember]
+    public EqualityComparison Comparison { get; set; }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/Filters/Filter.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/Filters/Filter.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/Filters/Filter.cs	(revision 5296)
@@ -0,0 +1,44 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.OKB.DataTransfer {
+  [DataContract]
+  [KnownType(typeof(OrdinalComparisonDateTimeFilter))]
+  [KnownType(typeof(OrdinalComparisonLongFilter))]
+  [KnownType(typeof(SetComparisonStringFilter))]
+  [KnownType(typeof(SetComparisonStringAvailableValuesFilter))]
+  [KnownType(typeof(NameEqualityComparisonBoolFilter))]
+  [KnownType(typeof(NameEqualityComparisonByteArrayFilter))]
+  [KnownType(typeof(NameOrdinalComparisonDoubleFilter))]
+  [KnownType(typeof(NameOrdinalComparisonLongFilter))]
+  [KnownType(typeof(NameSetComparisonStringFilter))]
+  [KnownType(typeof(NameSetComparisonStringAvailableValuesFilter))]
+  [KnownType(typeof(AndFilter))]
+  [KnownType(typeof(OrFilter))]
+  public abstract class Filter {
+    [DataMember]
+    public string FilterTypeName { get; protected set; }
+    [DataMember]
+    public string Label { get; protected set; }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/Filters/NameEqualityComparisonBoolFilter.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/Filters/NameEqualityComparisonBoolFilter.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/Filters/NameEqualityComparisonBoolFilter.cs	(revision 5296)
@@ -0,0 +1,38 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.OKB.DataTransfer {
+  [DataContract]
+  public class NameEqualityComparisonBoolFilter : EqualityComparisonFilter {
+    [DataMember]
+    public string Name { get; protected set; }
+    [DataMember]
+    public bool Value { get; set; }
+
+    public NameEqualityComparisonBoolFilter(string filterTypeName, string label, string name) {
+      FilterTypeName = filterTypeName;
+      Label = label;
+      Name = name;
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/Filters/NameEqualityComparisonByteArrayFilter.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/Filters/NameEqualityComparisonByteArrayFilter.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/Filters/NameEqualityComparisonByteArrayFilter.cs	(revision 5296)
@@ -0,0 +1,38 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.OKB.DataTransfer {
+  [DataContract]
+  public class NameEqualityComparisonByteArrayFilter : EqualityComparisonFilter {
+    [DataMember]
+    public string Name { get; protected set; }
+    [DataMember]
+    public byte[] Value { get; set; }
+
+    public NameEqualityComparisonByteArrayFilter(string filterTypeName, string label, string name) {
+      FilterTypeName = filterTypeName;
+      Label = label;
+      Name = name;
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/Filters/NameOrdinalComparisonDoubleFilter.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/Filters/NameOrdinalComparisonDoubleFilter.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/Filters/NameOrdinalComparisonDoubleFilter.cs	(revision 5296)
@@ -0,0 +1,38 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.OKB.DataTransfer {
+  [DataContract]
+  public class NameOrdinalComparisonDoubleFilter : OrdinalComparisonFilter {
+    [DataMember]
+    public string Name { get; protected set; }
+    [DataMember]
+    public double Value { get; set; }
+
+    public NameOrdinalComparisonDoubleFilter(string filterTypeName, string label, string name) {
+      FilterTypeName = filterTypeName;
+      Label = label;
+      Name = name;
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/Filters/NameOrdinalComparisonLongFilter.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/Filters/NameOrdinalComparisonLongFilter.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/Filters/NameOrdinalComparisonLongFilter.cs	(revision 5296)
@@ -0,0 +1,38 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.OKB.DataTransfer {
+  [DataContract]
+  public class NameOrdinalComparisonLongFilter : OrdinalComparisonFilter {
+    [DataMember]
+    public string Name { get; protected set; }
+    [DataMember]
+    public long Value { get; set; }
+
+    public NameOrdinalComparisonLongFilter(string filterTypeName, string label, string name) {
+      FilterTypeName = filterTypeName;
+      Label = label;
+      Name = name;
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/Filters/NameSetComparisonStringAvailableValuesFilter.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/Filters/NameSetComparisonStringAvailableValuesFilter.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/Filters/NameSetComparisonStringAvailableValuesFilter.cs	(revision 5296)
@@ -0,0 +1,36 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.OKB.DataTransfer {
+  [DataContract]
+  public class NameSetComparisonStringAvailableValuesFilter : NameSetComparisonStringFilter {
+    [DataMember]
+    public IEnumerable<string> AvailableValues { get; protected set; }
+
+    public NameSetComparisonStringAvailableValuesFilter(string filterTypeName, string label, string name, IEnumerable<string> availableValues)
+      : base(filterTypeName, label, name) {
+      AvailableValues = availableValues;
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/Filters/NameSetComparisonStringFilter.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/Filters/NameSetComparisonStringFilter.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/Filters/NameSetComparisonStringFilter.cs	(revision 5296)
@@ -0,0 +1,38 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.OKB.DataTransfer {
+  [DataContract]
+  public class NameSetComparisonStringFilter : SetComparisonFilter {
+    [DataMember]
+    public string Name { get; protected set; }
+    [DataMember]
+    public string Value { get; set; }
+
+    public NameSetComparisonStringFilter(string filterTypeName, string label, string name) {
+      FilterTypeName = filterTypeName;
+      Label = label;
+      Name = name;
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/Filters/OrFilter.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/Filters/OrFilter.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/Filters/OrFilter.cs	(revision 5296)
@@ -0,0 +1,34 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Runtime.Serialization;
+using System.Linq;
+
+namespace HeuristicLab.Services.OKB.DataTransfer {
+  [DataContract]
+  public class OrFilter : CombinedFilter {
+    public OrFilter(string filterTypeName, string label) {
+      FilterTypeName = filterTypeName;
+      Label = label;
+      Filters = Enumerable.Empty<Filter>();
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/Filters/OrdinalComparison.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/Filters/OrdinalComparison.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/Filters/OrdinalComparison.cs	(revision 5296)
@@ -0,0 +1,40 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.OKB.DataTransfer {
+  [DataContract]
+  public enum OrdinalComparison {
+    [EnumMember]
+    Less,
+    [EnumMember]
+    LessOrEqual,
+    [EnumMember]
+    Equal,
+    [EnumMember]
+    GreaterOrEqual,
+    [EnumMember]
+    Greater,
+    [EnumMember]
+    NotEqual
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/Filters/OrdinalComparisonDateTimeFilter.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/Filters/OrdinalComparisonDateTimeFilter.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/Filters/OrdinalComparisonDateTimeFilter.cs	(revision 5296)
@@ -0,0 +1,36 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.OKB.DataTransfer {
+  [DataContract]
+  public class OrdinalComparisonDateTimeFilter : OrdinalComparisonFilter {
+    [DataMember]
+    public DateTime Value { get; set; }
+
+    public OrdinalComparisonDateTimeFilter(string filterTypeName, string label) {
+      FilterTypeName = filterTypeName;
+      Label = label;
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/Filters/OrdinalComparisonFilter.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/Filters/OrdinalComparisonFilter.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/Filters/OrdinalComparisonFilter.cs	(revision 5296)
@@ -0,0 +1,30 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.OKB.DataTransfer {
+  [DataContract]
+  public class OrdinalComparisonFilter : Filter {
+    [DataMember]
+    public OrdinalComparison Comparison { get; set; }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/Filters/OrdinalComparisonLongFilter.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/Filters/OrdinalComparisonLongFilter.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/Filters/OrdinalComparisonLongFilter.cs	(revision 5296)
@@ -0,0 +1,35 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.OKB.DataTransfer {
+  [DataContract]
+  public class OrdinalComparisonLongFilter : OrdinalComparisonFilter {
+    [DataMember]
+    public long Value { get; set; }
+
+    public OrdinalComparisonLongFilter(string filterTypeName, string label) {
+      FilterTypeName = filterTypeName;
+      Label = label;
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/Filters/SetComparison.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/Filters/SetComparison.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/Filters/SetComparison.cs	(revision 5296)
@@ -0,0 +1,36 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.OKB.DataTransfer {
+  [DataContract]
+  public enum SetComparison {
+    [EnumMember]
+    Equal,
+    [EnumMember]
+    NotEqual,
+    [EnumMember]
+    Contains,
+    [EnumMember]
+    NotContains
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/Filters/SetComparisonFilter.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/Filters/SetComparisonFilter.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/Filters/SetComparisonFilter.cs	(revision 5296)
@@ -0,0 +1,30 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.OKB.DataTransfer {
+  [DataContract]
+  public abstract class SetComparisonFilter : Filter {
+    [DataMember]
+    public SetComparison Comparison { get; set; }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/Filters/SetComparisonStringAvailableValuesFilter.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/Filters/SetComparisonStringAvailableValuesFilter.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/Filters/SetComparisonStringAvailableValuesFilter.cs	(revision 5296)
@@ -0,0 +1,36 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.OKB.DataTransfer {
+  [DataContract]
+  public class SetComparisonStringAvailableValuesFilter : SetComparisonStringFilter {
+    [DataMember]
+    public IEnumerable<string> AvailableValues { get; protected set; }
+
+    public SetComparisonStringAvailableValuesFilter(string filterTypeName, string label, IEnumerable<string> availableValues)
+      : base(filterTypeName, label) {
+      AvailableValues = availableValues;
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/Filters/SetComparisonStringFilter.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/Filters/SetComparisonStringFilter.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/Filters/SetComparisonStringFilter.cs	(revision 5296)
@@ -0,0 +1,35 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.OKB.DataTransfer {
+  [DataContract]
+  public class SetComparisonStringFilter : SetComparisonFilter {
+    [DataMember]
+    public string Value { get; set; }
+
+    public SetComparisonStringFilter(string filterTypeName, string label) {
+      FilterTypeName = filterTypeName;
+      Label = label;
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/HeuristicLab.Services.OKB.DataTransfer-3.3.csproj
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/HeuristicLab.Services.OKB.DataTransfer-3.3.csproj	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/HeuristicLab.Services.OKB.DataTransfer-3.3.csproj	(revision 5296)
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>8.0.30703</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{209FD7A1-DFB2-4B9F-9268-B95E886B2F7A}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Services.OKB.DataTransfer</RootNamespace>
+    <AssemblyName>HeuristicLab.Services.OKB.DataTransfer-3.3</AssemblyName>
+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <TargetFrameworkProfile />
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup>
+    <SignAssembly>true</SignAssembly>
+  </PropertyGroup>
+  <PropertyGroup>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Runtime.Serialization" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="AlgorithmClass.cs" />
+    <Compile Include="Algorithm.cs" />
+    <Compile Include="AlgorithmData.cs" />
+    <Compile Include="AlgorithmParameter.cs" />
+    <Compile Include="AlgorithmParameterValue.cs" />
+    <Compile Include="AlgorithmParameterBlobValue.cs" />
+    <Compile Include="AlgorithmParameterBoolValue.cs" />
+    <Compile Include="AlgorithmParameterFloatValue.cs" />
+    <Compile Include="AlgorithmParameterIntValue.cs" />
+    <Compile Include="AlgorithmParameterStringValue.cs" />
+    <Compile Include="Filters\CombinedFilter.cs" />
+    <Compile Include="Filters\AndFilter.cs" />
+    <Compile Include="Filters\NameSetComparisonStringAvailableValuesFilter.cs" />
+    <Compile Include="Filters\SetComparisonStringAvailableValuesFilter.cs" />
+    <Compile Include="Filters\OrFilter.cs" />
+    <Compile Include="Filters\OrdinalComparisonFilter.cs" />
+    <Compile Include="Filters\SetComparisonFilter.cs" />
+    <Compile Include="Filters\EqualityComparisonFilter.cs" />
+    <Compile Include="Filters\OrdinalComparisonDateTimeFilter.cs" />
+    <Compile Include="Filters\NameEqualityComparisonByteArrayFilter.cs" />
+    <Compile Include="Filters\NameSetComparisonStringFilter.cs" />
+    <Compile Include="Filters\NameOrdinalComparisonLongFilter.cs" />
+    <Compile Include="Filters\NameOrdinalComparisonDoubleFilter.cs" />
+    <Compile Include="Filters\NameEqualityComparisonBoolFilter.cs" />
+    <Compile Include="Filters\OrdinalComparisonLongFilter.cs" />
+    <Compile Include="Filters\SetComparison.cs" />
+    <Compile Include="Filters\OrdinalComparison.cs" />
+    <Compile Include="Filters\EqualityComparison.cs" />
+    <Compile Include="Filters\SetComparisonStringFilter.cs" />
+    <Compile Include="Filters\Filter.cs" />
+    <Compile Include="ResultFloatValue.cs" />
+    <Compile Include="ResultBoolValue.cs" />
+    <Compile Include="ResultIntValue.cs" />
+    <Compile Include="ResultStringValue.cs" />
+    <Compile Include="ResultBlobValue.cs" />
+    <Compile Include="ProblemParameterBoolValue.cs" />
+    <Compile Include="ProblemParameterFloatValue.cs" />
+    <Compile Include="ProblemParameterIntValue.cs" />
+    <Compile Include="ProblemParameterStringValue.cs" />
+    <Compile Include="ProblemParameterBlobValue.cs" />
+    <Compile Include="ResultValue.cs" />
+    <Compile Include="ProblemParameterValue.cs" />
+    <Compile Include="Run.cs" />
+    <Compile Include="Experiment.cs" />
+    <Compile Include="Result.cs" />
+    <Compile Include="ProblemParameter.cs" />
+    <Compile Include="ProblemData.cs" />
+    <Compile Include="Problem.cs" />
+    <Compile Include="ProblemClass.cs" />
+    <Compile Include="DataType.cs" />
+    <Compile Include="User.cs" />
+    <Compile Include="NamedOKBItem.cs" />
+    <Compile Include="OKBItem.cs" />
+    <Compile Include="Platform.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <None Include="Properties\AssemblyInfo.frame" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/NamedOKBItem.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/NamedOKBItem.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/NamedOKBItem.cs	(revision 5296)
@@ -0,0 +1,32 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.OKB.DataTransfer {
+  [DataContract]
+  public abstract class NamedOKBItem : OKBItem {
+    [DataMember]
+    public string Name { get; set; }
+    [DataMember]
+    public string Description { get; set; }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/OKBItem.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/OKBItem.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/OKBItem.cs	(revision 5296)
@@ -0,0 +1,30 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.OKB.DataTransfer {
+  [DataContract]
+  public abstract class OKBItem {
+    [DataMember]
+    public long Id { get; set; }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/Platform.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/Platform.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/Platform.cs	(revision 5296)
@@ -0,0 +1,27 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.OKB.DataTransfer {
+  [DataContract]
+  public class Platform : NamedOKBItem { }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/Problem.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/Problem.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/Problem.cs	(revision 5296)
@@ -0,0 +1,32 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.OKB.DataTransfer {
+  [DataContract]
+  public class Problem : NamedOKBItem {
+    [DataMember]
+    public long PlatformId { get; set; }
+    [DataMember]
+    public long ProblemClassId { get; set; }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/ProblemClass.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/ProblemClass.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/ProblemClass.cs	(revision 5296)
@@ -0,0 +1,27 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.OKB.DataTransfer {
+  [DataContract]
+  public class ProblemClass : NamedOKBItem { }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/ProblemData.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/ProblemData.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/ProblemData.cs	(revision 5296)
@@ -0,0 +1,34 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.OKB.DataTransfer {
+  [DataContract]
+  public class ProblemData {
+    [DataMember]
+    public long ProblemId { get; set; }
+    [DataMember]
+    public long DataTypeId { get; set; }
+    [DataMember]
+    public byte[] Data { get; set; }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/ProblemParameter.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/ProblemParameter.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/ProblemParameter.cs	(revision 5296)
@@ -0,0 +1,34 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.OKB.DataTransfer {
+  [DataContract]
+  public class ProblemParameter : NamedOKBItem {
+    [DataMember]
+    public string Alias { get; set; }
+    [DataMember]
+    public long ProblemId { get; set; }
+    [DataMember]
+    public long DataTypeId { get; set; }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/ProblemParameterBlobValue.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/ProblemParameterBlobValue.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/ProblemParameterBlobValue.cs	(revision 5296)
@@ -0,0 +1,30 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.OKB.DataTransfer {
+  [DataContract]
+  public class ProblemParameterBlobValue : ProblemParameterValue {
+    [DataMember]
+    public byte[] Value { get; set; }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/ProblemParameterBoolValue.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/ProblemParameterBoolValue.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/ProblemParameterBoolValue.cs	(revision 5296)
@@ -0,0 +1,30 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.OKB.DataTransfer {
+  [DataContract]
+  public class ProblemParameterBoolValue : ProblemParameterValue {
+    [DataMember]
+    public bool Value { get; set; }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/ProblemParameterFloatValue.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/ProblemParameterFloatValue.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/ProblemParameterFloatValue.cs	(revision 5296)
@@ -0,0 +1,30 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.OKB.DataTransfer {
+  [DataContract]
+  public class ProblemParameterFloatValue : ProblemParameterValue {
+    [DataMember]
+    public double Value { get; set; }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/ProblemParameterIntValue.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/ProblemParameterIntValue.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/ProblemParameterIntValue.cs	(revision 5296)
@@ -0,0 +1,30 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.OKB.DataTransfer {
+  [DataContract]
+  public class ProblemParameterIntValue : ProblemParameterValue {
+    [DataMember]
+    public long Value { get; set; }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/ProblemParameterStringValue.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/ProblemParameterStringValue.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/ProblemParameterStringValue.cs	(revision 5296)
@@ -0,0 +1,30 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.OKB.DataTransfer {
+  [DataContract]
+  public class ProblemParameterStringValue : ProblemParameterValue {
+    [DataMember]
+    public string Value { get; set; }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/ProblemParameterValue.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/ProblemParameterValue.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/ProblemParameterValue.cs	(revision 5296)
@@ -0,0 +1,39 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.OKB.DataTransfer {
+  [DataContract]
+  [KnownType(typeof(ProblemParameterBlobValue))]
+  [KnownType(typeof(ProblemParameterBoolValue))]
+  [KnownType(typeof(ProblemParameterFloatValue))]
+  [KnownType(typeof(ProblemParameterIntValue))]
+  [KnownType(typeof(ProblemParameterStringValue))]
+  public abstract class ProblemParameterValue {
+    [DataMember]
+    public long ProblemParameterId { get; set; }
+    [DataMember]
+    public long ExperimentId { get; set; }
+    [DataMember]
+    public long DataTypeId { get; set; }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/Properties/AssemblyInfo.frame
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/Properties/AssemblyInfo.frame	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/Properties/AssemblyInfo.frame	(revision 5296)
@@ -0,0 +1,57 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.Services.OKB.DataTransfer")]
+[assembly: AssemblyDescription("Data transfer objects for HeuristicLab OKB services")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2010 HEAL")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("73fea41e-7023-483f-abc1-0c1a6894a1fb")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers 
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("3.3.0.0")]
+[assembly: AssemblyFileVersion("3.3.0.$WCREV$")]
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/Result.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/Result.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/Result.cs	(revision 5296)
@@ -0,0 +1,34 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.OKB.DataTransfer {
+  [DataContract]
+  public class Result : NamedOKBItem {
+    [DataMember]
+    public string Alias { get; set; }
+    [DataMember]
+    public long AlgorithmId { get; set; }
+    [DataMember]
+    public long DataTypeId { get; set; }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/ResultBlobValue.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/ResultBlobValue.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/ResultBlobValue.cs	(revision 5296)
@@ -0,0 +1,30 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.OKB.DataTransfer {
+  [DataContract]
+  public class ResultBlobValue : ResultValue {
+    [DataMember]
+    public byte[] Value { get; set; }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/ResultBoolValue.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/ResultBoolValue.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/ResultBoolValue.cs	(revision 5296)
@@ -0,0 +1,30 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.OKB.DataTransfer {
+  [DataContract]
+  public class ResultBoolValue : ResultValue {
+    [DataMember]
+    public bool Value { get; set; }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/ResultFloatValue.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/ResultFloatValue.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/ResultFloatValue.cs	(revision 5296)
@@ -0,0 +1,30 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.OKB.DataTransfer {
+  [DataContract]
+  public class ResultFloatValue : ResultValue {
+    [DataMember]
+    public double Value { get; set; }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/ResultIntValue.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/ResultIntValue.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/ResultIntValue.cs	(revision 5296)
@@ -0,0 +1,30 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.OKB.DataTransfer {
+  [DataContract]
+  public class ResultIntValue : ResultValue {
+    [DataMember]
+    public long Value { get; set; }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/ResultStringValue.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/ResultStringValue.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/ResultStringValue.cs	(revision 5296)
@@ -0,0 +1,30 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.OKB.DataTransfer {
+  [DataContract]
+  public class ResultStringValue : ResultValue {
+    [DataMember]
+    public string Value { get; set; }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/ResultValue.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/ResultValue.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/ResultValue.cs	(revision 5296)
@@ -0,0 +1,39 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.OKB.DataTransfer {
+  [DataContract]
+  [KnownType(typeof(ResultBlobValue))]
+  [KnownType(typeof(ResultBoolValue))]
+  [KnownType(typeof(ResultFloatValue))]
+  [KnownType(typeof(ResultIntValue))]
+  [KnownType(typeof(ResultStringValue))]
+  public abstract class ResultValue {
+    [DataMember]
+    public long ResultId { get; set; }
+    [DataMember]
+    public long RunId { get; set; }
+    [DataMember]
+    public long DataTypeId { get; set; }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/Run.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/Run.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/Run.cs	(revision 5296)
@@ -0,0 +1,42 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.OKB.DataTransfer {
+  [DataContract]
+  public class Run : OKBItem {
+    [DataMember]
+    public long RandomSeed { get; set; }
+    [DataMember]
+    public DateTime CreatedDate { get; set; }
+    [DataMember]
+    public long ExperimentId { get; set; }
+    [DataMember]
+    public Guid UserId { get; set; }
+    [DataMember]
+    public Guid ClientId { get; set; }
+    [DataMember]
+    public IEnumerable<ResultValue> ResultValues { get; set; }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/User.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/User.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataTransfer/3.3/User.cs	(revision 5296)
@@ -0,0 +1,33 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.OKB.DataTransfer {
+  [DataContract]
+  public class User {
+    [DataMember]
+    public Guid Id { get; set; }
+    [DataMember]
+    public string Name { get; set; }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/AttributeSelector.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/AttributeSelector.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/AttributeSelector.cs	(revision 5296)
@@ -0,0 +1,118 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using HeuristicLab.Services.OKB.AttributeSelection;
+using HeuristicLab.Services.OKB.DataAccess;
+
+namespace HeuristicLab.Services.OKB {
+
+  /// <summary>
+  /// Data capsule for describing data base fields and
+  /// restrictions. This is the basis for building complex queries.
+  /// </summary>
+  [DataContract]
+  public class AttributeSelector : IAttributeSelector {
+
+    /// <summary>
+    /// Gets or sets the name of the table.
+    /// </summary>
+    /// <value>The name of the table.</value>
+    [DataMember]
+    public string TableName { get; set; }
+
+    /// <summary>
+    /// Gets or sets the name of the field.
+    /// </summary>
+    /// <value>The name of the field.</value>
+    [DataMember]
+    public string FieldName { get; set; }
+
+    /// <summary>
+    /// Gets or sets a value indicating whether this instance is hidden.
+    /// </summary>
+    /// <value><c>true</c> if this instance is hidden; otherwise, <c>false</c>.</value>
+    [DataMember]
+    public bool IsHidden { get; set; }
+
+    /// <summary>
+    /// Gets or sets the min value.
+    /// </summary>
+    /// <value>The min value.</value>
+    [DataMember]
+    public object MinValue { get; set; }
+
+    /// <summary>
+    /// Gets or sets the max value.
+    /// </summary>
+    /// <value>The max value.</value>
+    [DataMember]
+    public object MaxValue { get; set; }
+
+    /// <summary>
+    /// Gets or sets the allowed values.
+    /// </summary>
+    /// <value>The allowed values.</value>
+    [DataMember]
+    public ICollection<object> AllowedValues { get; set; }
+
+    /// <summary>
+    /// Gets or sets the name of the data type.
+    /// </summary>
+    /// <value>The name of the data type.</value>
+    [DataMember]
+    public string DataTypeName { get; set; }
+
+    /// <summary>
+    /// Gets an actual implementations linked to the database.
+    /// </summary>
+    /// <param name="okb">The okb data context.</param>
+    /// <returns>A <see cref="RunAttributeSelector"/></returns>
+    public RunAttributeSelector GetImpl(OKBDataContext okb) {
+      return new RunAttributeSelector(okb, TableName, FieldName) {
+        IsHidden = IsHidden,
+        MinValue = MinValue,
+        MaxValue = MaxValue,
+        AllowedValues = AllowedValues,
+      };
+    }
+
+    /// <summary>
+    /// Initializes a new instance of the <see cref="AttributeSelector"/> class.
+    /// </summary>
+    public AttributeSelector() { }
+
+    /// <summary>
+    /// Initializes a new instance of the <see cref="AttributeSelector"/> class.
+    /// </summary>
+    /// <param name="selector">The selector.</param>
+    public AttributeSelector(RunAttributeSelector selector) {
+      TableName = selector.TableName;
+      FieldName = selector.FieldName;
+      IsHidden = selector.IsHidden;
+      MinValue = selector.MinValue;
+      MaxValue = selector.MaxValue;
+      AllowedValues = selector.AllowedValues;
+      DataTypeName = selector.DataType.FullName;
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/AuthenticationService.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/AuthenticationService.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/AuthenticationService.cs	(revision 5296)
@@ -0,0 +1,45 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ServiceModel;
+using System.Web.Security;
+
+namespace HeuristicLab.Services.OKB {
+  /// <summary>
+  /// Implementation of the OKB authentication service (interface <see cref="IAuthenticationService"/>).
+  /// </summary>
+  [ServiceBehavior(IncludeExceptionDetailInFaults = true)]
+  public class AuthenticationService : IAuthenticationService {
+    public DataTransfer.User GetUser(Guid id) {
+      MembershipUser user = Membership.GetUser(id);
+      if (user != null) return new DataTransfer.User { Id = id, Name = user.UserName };
+      else return null;
+    }
+    public IEnumerable<DataTransfer.User> GetUsers() {
+      List<DataTransfer.User> users = new List<DataTransfer.User>();
+      foreach (MembershipUser user in Membership.GetAllUsers())
+        users.Add(new DataTransfer.User { Id = (Guid)user.ProviderUserKey, Name = user.UserName });
+      return users;
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Convert.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Convert.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Convert.cs	(revision 5296)
@@ -0,0 +1,558 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Collections.Generic;
+using System.Data.Linq;
+using System.Linq;
+using DA = HeuristicLab.Services.OKB.DataAccess;
+using DT = HeuristicLab.Services.OKB.DataTransfer;
+
+namespace HeuristicLab.Services.OKB {
+  public static class Convert {
+    #region Platform
+    public static DT.Platform ToDto(DA.Platform source) {
+      if (source == null) return null;
+      return new DT.Platform { Id = source.Id, Name = source.Name, Description = source.Description };
+    }
+    public static DA.Platform ToEntity(DT.Platform source) {
+      if (source == null) return null;
+      return new DA.Platform { Id = source.Id, Name = source.Name, Description = source.Description };
+    }
+    public static void ToEntity(DT.Platform source, DA.Platform target) {
+      if ((source != null) && (target != null)) {
+        target.Id = source.Id; target.Name = source.Name; target.Description = source.Description;
+      }
+    }
+    #endregion
+
+    #region DataType
+    public static DT.DataType ToDto(DA.DataType source) {
+      if (source == null) return null;
+      return new DT.DataType { Id = source.Id, Name = source.Name, TypeName = source.TypeName, SqlName = source.SqlName, PlatformId = source.PlatformId };
+    }
+    public static DA.DataType ToEntity(DT.DataType source) {
+      if (source == null) return null;
+      return new DA.DataType { Id = source.Id, Name = source.Name, TypeName = source.TypeName, SqlName = source.SqlName, PlatformId = source.PlatformId };
+    }
+    public static void ToEntity(DT.DataType source, DA.DataType target) {
+      if ((source != null) && (target != null)) {
+        target.Id = source.Id; target.Name = source.Name; target.TypeName = source.TypeName; target.SqlName = source.SqlName; target.PlatformId = source.PlatformId;
+      }
+    }
+    #endregion
+
+    #region AlgorithmClass
+    public static DT.AlgorithmClass ToDto(DA.AlgorithmClass source) {
+      if (source == null) return null;
+      return new DT.AlgorithmClass { Id = source.Id, Name = source.Name, Description = source.Description };
+    }
+    public static DA.AlgorithmClass ToEntity(DT.AlgorithmClass source) {
+      if (source == null) return null;
+      return new DA.AlgorithmClass { Id = source.Id, Name = source.Name, Description = source.Description };
+    }
+    public static void ToEntity(DT.AlgorithmClass source, DA.AlgorithmClass target) {
+      if ((source != null) && (target != null)) {
+        target.Id = source.Id; target.Name = source.Name; target.Description = source.Description;
+      }
+    }
+    #endregion
+
+    #region Algorithm
+    public static DT.Algorithm ToDto(DA.Algorithm source) {
+      if (source == null) return null;
+      return new DT.Algorithm { Id = source.Id, Name = source.Name, Description = source.Description, PlatformId = source.PlatformId, AlgorithmClassId = source.AlgorithmClassId };
+    }
+    public static DA.Algorithm ToEntity(DT.Algorithm source) {
+      if (source == null) return null;
+      return new DA.Algorithm { Id = source.Id, Name = source.Name, Description = source.Description, PlatformId = source.PlatformId, AlgorithmClassId = source.AlgorithmClassId };
+    }
+    public static void ToEntity(DT.Algorithm source, DA.Algorithm target) {
+      if ((source != null) && (target != null)) {
+        target.Id = source.Id; target.Name = source.Name; target.Description = source.Description; target.PlatformId = source.PlatformId; target.AlgorithmClassId = source.AlgorithmClassId;
+      }
+    }
+    #endregion
+
+    #region AlgorithmData
+    public static DT.AlgorithmData ToDto(DA.AlgorithmData source) {
+      if (source == null) return null;
+      return new DT.AlgorithmData { AlgorithmId = source.AlgorithmId, DataTypeId = source.DataTypeId, Data = source.Data.ToArray() };
+    }
+    public static DA.AlgorithmData ToEntity(DT.AlgorithmData source) {
+      if (source == null) return null;
+      return new DA.AlgorithmData { AlgorithmId = source.AlgorithmId, DataTypeId = source.DataTypeId, Data = new Binary(source.Data) };
+    }
+    public static void ToEntity(DT.AlgorithmData source, DA.AlgorithmData target) {
+      if ((source != null) && (target != null)) {
+        target.AlgorithmId = source.AlgorithmId; target.DataTypeId = source.DataTypeId; target.Data = new Binary(source.Data);
+      }
+    }
+    #endregion
+
+    #region AlgorithmParameter
+    public static DT.AlgorithmParameter ToDto(DA.AlgorithmParameter source) {
+      if (source == null) return null;
+      return new DT.AlgorithmParameter { Id = source.Id, Name = source.Name, Description = source.Description, Alias = source.Alias, AlgorithmId = source.AlgorithmId, DataTypeId = source.DataTypeId };
+    }
+    public static DA.AlgorithmParameter ToEntity(DT.AlgorithmParameter source) {
+      if (source == null) return null;
+      return new DA.AlgorithmParameter { Id = source.Id, Name = source.Name, Description = source.Description, Alias = source.Alias, AlgorithmId = source.AlgorithmId, DataTypeId = source.DataTypeId };
+    }
+    public static void ToEntity(DT.AlgorithmParameter source, DA.AlgorithmParameter target) {
+      if ((source != null) && (target != null)) {
+        target.Id = source.Id; target.Name = source.Name; target.Description = source.Description; target.Alias = source.Alias; target.AlgorithmId = source.AlgorithmId; target.DataTypeId = source.DataTypeId;
+      }
+    }
+    #endregion
+
+    #region AlgorithmParameterBlobValue
+    public static DT.AlgorithmParameterBlobValue ToDto(DA.AlgorithmParameterBlobValue source) {
+      if (source == null) return null;
+      return new DT.AlgorithmParameterBlobValue { AlgorithmParameterId = source.AlgorithmParameterId, ExperimentId = source.ExperimentId, DataTypeId = source.DataTypeId, Value = source.Value.ToArray() };
+    }
+    public static DA.AlgorithmParameterBlobValue ToEntity(DT.AlgorithmParameterBlobValue source) {
+      if (source == null) return null;
+      return new DA.AlgorithmParameterBlobValue { AlgorithmParameterId = source.AlgorithmParameterId, ExperimentId = source.ExperimentId, DataTypeId = source.DataTypeId, Value = new Binary(source.Value) };
+    }
+    public static void ToEntity(DT.AlgorithmParameterBlobValue source, DA.AlgorithmParameterBlobValue target) {
+      if ((source != null) && (target != null)) {
+        target.AlgorithmParameterId = source.AlgorithmParameterId; target.ExperimentId = source.ExperimentId; target.DataTypeId = source.DataTypeId; target.Value = new Binary(source.Value);
+      }
+    }
+    #endregion
+
+    #region AlgorithmParameterBoolValue
+    public static DT.AlgorithmParameterBoolValue ToDto(DA.AlgorithmParameterBoolValue source) {
+      if (source == null) return null;
+      return new DT.AlgorithmParameterBoolValue { AlgorithmParameterId = source.AlgorithmParameterId, ExperimentId = source.ExperimentId, DataTypeId = source.DataTypeId, Value = source.Value };
+    }
+    public static DA.AlgorithmParameterBoolValue ToEntity(DT.AlgorithmParameterBoolValue source) {
+      if (source == null) return null;
+      return new DA.AlgorithmParameterBoolValue { AlgorithmParameterId = source.AlgorithmParameterId, ExperimentId = source.ExperimentId, DataTypeId = source.DataTypeId, Value = source.Value };
+    }
+    public static void ToEntity(DT.AlgorithmParameterBoolValue source, DA.AlgorithmParameterBoolValue target) {
+      if ((source != null) && (target != null)) {
+        target.AlgorithmParameterId = source.AlgorithmParameterId; target.ExperimentId = source.ExperimentId; target.DataTypeId = source.DataTypeId; target.Value = source.Value;
+      }
+    }
+    #endregion
+
+    #region AlgorithmParameterFloatValue
+    public static DT.AlgorithmParameterFloatValue ToDto(DA.AlgorithmParameterFloatValue source) {
+      if (source == null) return null;
+      return new DT.AlgorithmParameterFloatValue { AlgorithmParameterId = source.AlgorithmParameterId, ExperimentId = source.ExperimentId, DataTypeId = source.DataTypeId, Value = source.Value };
+    }
+    public static DA.AlgorithmParameterFloatValue ToEntity(DT.AlgorithmParameterFloatValue source) {
+      if (source == null) return null;
+      return new DA.AlgorithmParameterFloatValue { AlgorithmParameterId = source.AlgorithmParameterId, ExperimentId = source.ExperimentId, DataTypeId = source.DataTypeId, Value = source.Value };
+    }
+    public static void ToEntity(DT.AlgorithmParameterFloatValue source, DA.AlgorithmParameterFloatValue target) {
+      if ((source != null) && (target != null)) {
+        target.AlgorithmParameterId = source.AlgorithmParameterId; target.ExperimentId = source.ExperimentId; target.DataTypeId = source.DataTypeId; target.Value = source.Value;
+      }
+    }
+    #endregion
+
+    #region AlgorithmParameterIntValue
+    public static DT.AlgorithmParameterIntValue ToDto(DA.AlgorithmParameterIntValue source) {
+      if (source == null) return null;
+      return new DT.AlgorithmParameterIntValue { AlgorithmParameterId = source.AlgorithmParameterId, ExperimentId = source.ExperimentId, DataTypeId = source.DataTypeId, Value = source.Value };
+    }
+    public static DA.AlgorithmParameterIntValue ToEntity(DT.AlgorithmParameterIntValue source) {
+      if (source == null) return null;
+      return new DA.AlgorithmParameterIntValue { AlgorithmParameterId = source.AlgorithmParameterId, ExperimentId = source.ExperimentId, DataTypeId = source.DataTypeId, Value = source.Value };
+    }
+    public static void ToEntity(DT.AlgorithmParameterIntValue source, DA.AlgorithmParameterIntValue target) {
+      if ((source != null) && (target != null)) {
+        target.AlgorithmParameterId = source.AlgorithmParameterId; target.ExperimentId = source.ExperimentId; target.DataTypeId = source.DataTypeId; target.Value = source.Value;
+      }
+    }
+    #endregion
+
+    #region AlgorithmParameterStringValue
+    public static DT.AlgorithmParameterStringValue ToDto(DA.AlgorithmParameterStringValue source) {
+      if (source == null) return null;
+      return new DT.AlgorithmParameterStringValue { AlgorithmParameterId = source.AlgorithmParameterId, ExperimentId = source.ExperimentId, DataTypeId = source.DataTypeId, Value = source.Value };
+    }
+    public static DA.AlgorithmParameterStringValue ToEntity(DT.AlgorithmParameterStringValue source) {
+      if (source == null) return null;
+      return new DA.AlgorithmParameterStringValue { AlgorithmParameterId = source.AlgorithmParameterId, ExperimentId = source.ExperimentId, DataTypeId = source.DataTypeId, Value = source.Value };
+    }
+    public static void ToEntity(DT.AlgorithmParameterStringValue source, DA.AlgorithmParameterStringValue target) {
+      if ((source != null) && (target != null)) {
+        target.AlgorithmParameterId = source.AlgorithmParameterId; target.ExperimentId = source.ExperimentId; target.DataTypeId = source.DataTypeId; target.Value = source.Value;
+      }
+    }
+    #endregion
+
+    #region ProblemClass
+    public static DT.ProblemClass ToDto(DA.ProblemClass source) {
+      if (source == null) return null;
+      return new DT.ProblemClass { Id = source.Id, Name = source.Name, Description = source.Description };
+    }
+    public static DA.ProblemClass ToEntity(DT.ProblemClass source) {
+      if (source == null) return null;
+      return new DA.ProblemClass { Id = source.Id, Name = source.Name, Description = source.Description };
+    }
+    public static void ToEntity(DT.ProblemClass source, DA.ProblemClass target) {
+      if ((source != null) && (target != null)) {
+        target.Id = source.Id; target.Name = source.Name; target.Description = source.Description;
+      }
+    }
+    #endregion
+
+    #region Problem
+    public static DT.Problem ToDto(DA.Problem source) {
+      if (source == null) return null;
+      return new DT.Problem { Id = source.Id, Name = source.Name, Description = source.Description, PlatformId = source.PlatformId, ProblemClassId = source.ProblemClassId };
+    }
+    public static DA.Problem ToEntity(DT.Problem source) {
+      if (source == null) return null;
+      return new DA.Problem { Id = source.Id, Name = source.Name, Description = source.Description, PlatformId = source.PlatformId, ProblemClassId = source.ProblemClassId };
+    }
+    public static void ToEntity(DT.Problem source, DA.Problem target) {
+      if ((source != null) && (target != null)) {
+        target.Id = source.Id; target.Name = source.Name; target.Description = source.Description; target.PlatformId = source.PlatformId; target.ProblemClassId = source.ProblemClassId;
+      }
+    }
+    #endregion
+
+    #region ProblemData
+    public static DT.ProblemData ToDto(DA.ProblemData source) {
+      if (source == null) return null;
+      return new DT.ProblemData { ProblemId = source.ProblemId, DataTypeId = source.DataTypeId, Data = source.Data.ToArray() };
+    }
+    public static DA.ProblemData ToEntity(DT.ProblemData source) {
+      if (source == null) return null;
+      return new DA.ProblemData { ProblemId = source.ProblemId, DataTypeId = source.DataTypeId, Data = new Binary(source.Data) };
+    }
+    public static void ToEntity(DT.ProblemData source, DA.ProblemData target) {
+      if ((source != null) && (target != null)) {
+        target.ProblemId = source.ProblemId; target.DataTypeId = source.DataTypeId; target.Data = new Binary(source.Data);
+      }
+    }
+    #endregion
+
+    #region ProblemParameter
+    public static DT.ProblemParameter ToDto(DA.ProblemParameter source) {
+      if (source == null) return null;
+      return new DT.ProblemParameter { Id = source.Id, Name = source.Name, Description = source.Description, Alias = source.Alias, ProblemId = source.ProblemId, DataTypeId = source.DataTypeId };
+    }
+    public static DA.ProblemParameter ToEntity(DT.ProblemParameter source) {
+      if (source == null) return null;
+      return new DA.ProblemParameter { Id = source.Id, Name = source.Name, Description = source.Description, Alias = source.Alias, ProblemId = source.ProblemId, DataTypeId = source.DataTypeId };
+    }
+    public static void ToEntity(DT.ProblemParameter source, DA.ProblemParameter target) {
+      if ((source != null) && (target != null)) {
+        target.Id = source.Id; target.Name = source.Name; target.Description = source.Description; target.Alias = source.Alias; target.ProblemId = source.ProblemId; target.DataTypeId = source.DataTypeId;
+      }
+    }
+    #endregion
+
+    #region ProblemParameterBlobValue
+    public static DT.ProblemParameterBlobValue ToDto(DA.ProblemParameterBlobValue source) {
+      if (source == null) return null;
+      return new DT.ProblemParameterBlobValue { ProblemParameterId = source.ProblemParameterId, ExperimentId = source.ExperimentId, DataTypeId = source.DataTypeId, Value = source.Value.ToArray() };
+    }
+    public static DA.ProblemParameterBlobValue ToEntity(DT.ProblemParameterBlobValue source) {
+      if (source == null) return null;
+      return new DA.ProblemParameterBlobValue { ProblemParameterId = source.ProblemParameterId, ExperimentId = source.ExperimentId, DataTypeId = source.DataTypeId, Value = new Binary(source.Value) };
+    }
+    public static void ToEntity(DT.ProblemParameterBlobValue source, DA.ProblemParameterBlobValue target) {
+      if ((source != null) && (target != null)) {
+        target.ProblemParameterId = source.ProblemParameterId; target.ExperimentId = source.ExperimentId; target.DataTypeId = source.DataTypeId; target.Value = new Binary(source.Value);
+      }
+    }
+    #endregion
+
+    #region ProblemParameterBoolValue
+    public static DT.ProblemParameterBoolValue ToDto(DA.ProblemParameterBoolValue source) {
+      if (source == null) return null;
+      return new DT.ProblemParameterBoolValue { ProblemParameterId = source.ProblemParameterId, ExperimentId = source.ExperimentId, DataTypeId = source.DataTypeId, Value = source.Value };
+    }
+    public static DA.ProblemParameterBoolValue ToEntity(DT.ProblemParameterBoolValue source) {
+      if (source == null) return null;
+      return new DA.ProblemParameterBoolValue { ProblemParameterId = source.ProblemParameterId, ExperimentId = source.ExperimentId, DataTypeId = source.DataTypeId, Value = source.Value };
+    }
+    public static void ToEntity(DT.ProblemParameterBoolValue source, DA.ProblemParameterBoolValue target) {
+      if ((source != null) && (target != null)) {
+        target.ProblemParameterId = source.ProblemParameterId; target.ExperimentId = source.ExperimentId; target.DataTypeId = source.DataTypeId; target.Value = source.Value;
+      }
+    }
+    #endregion
+
+    #region ProblemParameterFloatValue
+    public static DT.ProblemParameterFloatValue ToDto(DA.ProblemParameterFloatValue source) {
+      if (source == null) return null;
+      return new DT.ProblemParameterFloatValue { ProblemParameterId = source.ProblemParameterId, ExperimentId = source.ExperimentId, DataTypeId = source.DataTypeId, Value = source.Value };
+    }
+    public static DA.ProblemParameterFloatValue ToEntity(DT.ProblemParameterFloatValue source) {
+      if (source == null) return null;
+      return new DA.ProblemParameterFloatValue { ProblemParameterId = source.ProblemParameterId, ExperimentId = source.ExperimentId, DataTypeId = source.DataTypeId, Value = source.Value };
+    }
+    public static void ToEntity(DT.ProblemParameterFloatValue source, DA.ProblemParameterFloatValue target) {
+      if ((source != null) && (target != null)) {
+        target.ProblemParameterId = source.ProblemParameterId; target.ExperimentId = source.ExperimentId; target.DataTypeId = source.DataTypeId; target.Value = source.Value;
+      }
+    }
+    #endregion
+
+    #region ProblemParameterIntValue
+    public static DT.ProblemParameterIntValue ToDto(DA.ProblemParameterIntValue source) {
+      if (source == null) return null;
+      return new DT.ProblemParameterIntValue { ProblemParameterId = source.ProblemParameterId, ExperimentId = source.ExperimentId, DataTypeId = source.DataTypeId, Value = source.Value };
+    }
+    public static DA.ProblemParameterIntValue ToEntity(DT.ProblemParameterIntValue source) {
+      if (source == null) return null;
+      return new DA.ProblemParameterIntValue { ProblemParameterId = source.ProblemParameterId, ExperimentId = source.ExperimentId, DataTypeId = source.DataTypeId, Value = source.Value };
+    }
+    public static void ToEntity(DT.ProblemParameterIntValue source, DA.ProblemParameterIntValue target) {
+      if ((source != null) && (target != null)) {
+        target.ProblemParameterId = source.ProblemParameterId; target.ExperimentId = source.ExperimentId; target.DataTypeId = source.DataTypeId; target.Value = source.Value;
+      }
+    }
+    #endregion
+
+    #region ProblemParameterStringValue
+    public static DT.ProblemParameterStringValue ToDto(DA.ProblemParameterStringValue source) {
+      if (source == null) return null;
+      return new DT.ProblemParameterStringValue { ProblemParameterId = source.ProblemParameterId, ExperimentId = source.ExperimentId, DataTypeId = source.DataTypeId, Value = source.Value };
+    }
+    public static DA.ProblemParameterStringValue ToEntity(DT.ProblemParameterStringValue source) {
+      if (source == null) return null;
+      return new DA.ProblemParameterStringValue { ProblemParameterId = source.ProblemParameterId, ExperimentId = source.ExperimentId, DataTypeId = source.DataTypeId, Value = source.Value };
+    }
+    public static void ToEntity(DT.ProblemParameterStringValue source, DA.ProblemParameterStringValue target) {
+      if ((source != null) && (target != null)) {
+        target.ProblemParameterId = source.ProblemParameterId; target.ExperimentId = source.ExperimentId; target.DataTypeId = source.DataTypeId; target.Value = source.Value;
+      }
+    }
+    #endregion
+
+    #region Result
+    public static DT.Result ToDto(DA.Result source) {
+      if (source == null) return null;
+      return new DT.Result { Id = source.Id, Name = source.Name, Description = source.Description, Alias = source.Alias, AlgorithmId = source.AlgorithmId, DataTypeId = source.DataTypeId };
+    }
+    public static DA.Result ToEntity(DT.Result source) {
+      if (source == null) return null;
+      return new DA.Result { Id = source.Id, Name = source.Name, Description = source.Description, Alias = source.Alias, AlgorithmId = source.AlgorithmId, DataTypeId = source.DataTypeId };
+    }
+    public static void ToEntity(DT.Result source, DA.Result target) {
+      if ((source != null) && (target != null)) {
+        target.Id = source.Id; target.Name = source.Name; target.Description = source.Description; target.Alias = source.Alias; target.AlgorithmId = source.AlgorithmId; target.DataTypeId = source.DataTypeId;
+      }
+    }
+    #endregion
+
+    #region ResultBlobValue
+    public static DT.ResultBlobValue ToDto(DA.ResultBlobValue source) {
+      if (source == null) return null;
+      return new DT.ResultBlobValue { ResultId = source.ResultId, RunId = source.RunId, DataTypeId = source.DataTypeId, Value = source.Value.ToArray() };
+    }
+    public static DA.ResultBlobValue ToEntity(DT.ResultBlobValue source) {
+      if (source == null) return null;
+      return new DA.ResultBlobValue { ResultId = source.ResultId, RunId = source.RunId, DataTypeId = source.DataTypeId, Value = new Binary(source.Value) };
+    }
+    public static void ToEntity(DT.ResultBlobValue source, DA.ResultBlobValue target) {
+      if ((source != null) && (target != null)) {
+        target.ResultId = source.ResultId; target.RunId = source.RunId; target.DataTypeId = source.DataTypeId; target.Value = new Binary(source.Value);
+      }
+    }
+    #endregion
+
+    #region ResultBoolValue
+    public static DT.ResultBoolValue ToDto(DA.ResultBoolValue source) {
+      if (source == null) return null;
+      return new DT.ResultBoolValue { ResultId = source.ResultId, RunId = source.RunId, DataTypeId = source.DataTypeId, Value = source.Value };
+    }
+    public static DA.ResultBoolValue ToEntity(DT.ResultBoolValue source) {
+      if (source == null) return null;
+      return new DA.ResultBoolValue { ResultId = source.ResultId, RunId = source.RunId, DataTypeId = source.DataTypeId, Value = source.Value };
+    }
+    public static void ToEntity(DT.ResultBoolValue source, DA.ResultBoolValue target) {
+      if ((source != null) && (target != null)) {
+        target.ResultId = source.ResultId; target.RunId = source.RunId; target.DataTypeId = source.DataTypeId; target.Value = source.Value;
+      }
+    }
+    #endregion
+
+    #region ResultFloatValue
+    public static DT.ResultFloatValue ToDto(DA.ResultFloatValue source) {
+      if (source == null) return null;
+      return new DT.ResultFloatValue { ResultId = source.ResultId, RunId = source.RunId, DataTypeId = source.DataTypeId, Value = source.Value };
+    }
+    public static DA.ResultFloatValue ToEntity(DT.ResultFloatValue source) {
+      if (source == null) return null;
+      return new DA.ResultFloatValue { ResultId = source.ResultId, RunId = source.RunId, DataTypeId = source.DataTypeId, Value = source.Value };
+    }
+    public static void ToEntity(DT.ResultFloatValue source, DA.ResultFloatValue target) {
+      if ((source != null) && (target != null)) {
+        target.ResultId = source.ResultId; target.RunId = source.RunId; target.DataTypeId = source.DataTypeId; target.Value = source.Value;
+      }
+    }
+    #endregion
+
+    #region ResultIntValue
+    public static DT.ResultIntValue ToDto(DA.ResultIntValue source) {
+      if (source == null) return null;
+      return new DT.ResultIntValue { ResultId = source.ResultId, RunId = source.RunId, DataTypeId = source.DataTypeId, Value = source.Value };
+    }
+    public static DA.ResultIntValue ToEntity(DT.ResultIntValue source) {
+      if (source == null) return null;
+      return new DA.ResultIntValue { ResultId = source.ResultId, RunId = source.RunId, DataTypeId = source.DataTypeId, Value = source.Value };
+    }
+    public static void ToEntity(DT.ResultIntValue source, DA.ResultIntValue target) {
+      if ((source != null) && (target != null)) {
+        target.ResultId = source.ResultId; target.RunId = source.RunId; target.DataTypeId = source.DataTypeId; target.Value = source.Value;
+      }
+    }
+    #endregion
+
+    #region ResultStringValue
+    public static DT.ResultStringValue ToDto(DA.ResultStringValue source) {
+      if (source == null) return null;
+      return new DT.ResultStringValue { ResultId = source.ResultId, RunId = source.RunId, DataTypeId = source.DataTypeId, Value = source.Value };
+    }
+    public static DA.ResultStringValue ToEntity(DT.ResultStringValue source) {
+      if (source == null) return null;
+      return new DA.ResultStringValue { ResultId = source.ResultId, RunId = source.RunId, DataTypeId = source.DataTypeId, Value = source.Value };
+    }
+    public static void ToEntity(DT.ResultStringValue source, DA.ResultStringValue target) {
+      if ((source != null) && (target != null)) {
+        target.ResultId = source.ResultId; target.RunId = source.RunId; target.DataTypeId = source.DataTypeId; target.Value = source.Value;
+      }
+    }
+    #endregion
+
+    #region Experiment
+    public static DT.Experiment ToDto(DA.Experiment source) {
+      if (source == null) return null;
+      DT.Experiment target = new DT.Experiment { Id = source.Id, AlgorithmId = source.AlgorithmId, ProblemId = source.ProblemId };
+
+      List<DT.AlgorithmParameterValue> algorithmParameterValues = new List<DT.AlgorithmParameterValue>();
+      foreach (DA.AlgorithmParameterBlobValue value in source.AlgorithmParameterBlobValues)
+        algorithmParameterValues.Add(Convert.ToDto(value));
+      foreach (DA.AlgorithmParameterBoolValue value in source.AlgorithmParameterBoolValues)
+        algorithmParameterValues.Add(Convert.ToDto(value));
+      foreach (DA.AlgorithmParameterFloatValue value in source.AlgorithmParameterFloatValues)
+        algorithmParameterValues.Add(Convert.ToDto(value));
+      foreach (DA.AlgorithmParameterIntValue value in source.AlgorithmParameterIntValues)
+        algorithmParameterValues.Add(Convert.ToDto(value));
+      foreach (DA.AlgorithmParameterStringValue value in source.AlgorithmParameterStringValues)
+        algorithmParameterValues.Add(Convert.ToDto(value));
+      target.AlgorithmParameterValues = algorithmParameterValues.ToArray();
+
+      List<DT.ProblemParameterValue> problemParameterValues = new List<DT.ProblemParameterValue>();
+      foreach (DA.ProblemParameterBlobValue value in source.ProblemParameterBlobValues)
+        problemParameterValues.Add(Convert.ToDto(value));
+      foreach (DA.ProblemParameterBoolValue value in source.ProblemParameterBoolValues)
+        problemParameterValues.Add(Convert.ToDto(value));
+      foreach (DA.ProblemParameterFloatValue value in source.ProblemParameterFloatValues)
+        problemParameterValues.Add(Convert.ToDto(value));
+      foreach (DA.ProblemParameterIntValue value in source.ProblemParameterIntValues)
+        problemParameterValues.Add(Convert.ToDto(value));
+      foreach (DA.ProblemParameterStringValue value in source.ProblemParameterStringValues)
+        problemParameterValues.Add(Convert.ToDto(value));
+      target.ProblemParameterValues = problemParameterValues.ToArray();
+
+      return target;
+    }
+    public static DA.Experiment ToEntity(DT.Experiment source) {
+      if (source == null) return null;
+      DA.Experiment target = new DA.Experiment();
+      Convert.ToEntity(source, target);
+      return target;
+    }
+    public static void ToEntity(DT.Experiment source, DA.Experiment target) {
+      if ((source != null) && (target != null)) {
+        target.Id = source.Id; target.AlgorithmId = source.AlgorithmId; target.ProblemId = source.ProblemId;
+
+        foreach (DT.AlgorithmParameterBlobValue value in source.AlgorithmParameterValues.OfType<DT.AlgorithmParameterBlobValue>())
+          target.AlgorithmParameterBlobValues.Add(Convert.ToEntity(value));
+        foreach (DT.AlgorithmParameterBoolValue value in source.AlgorithmParameterValues.OfType<DT.AlgorithmParameterBoolValue>())
+          target.AlgorithmParameterBoolValues.Add(Convert.ToEntity(value));
+        foreach (DT.AlgorithmParameterFloatValue value in source.AlgorithmParameterValues.OfType<DT.AlgorithmParameterFloatValue>())
+          target.AlgorithmParameterFloatValues.Add(Convert.ToEntity(value));
+        foreach (DT.AlgorithmParameterIntValue value in source.AlgorithmParameterValues.OfType<DT.AlgorithmParameterIntValue>())
+          target.AlgorithmParameterIntValues.Add(Convert.ToEntity(value));
+        foreach (DT.AlgorithmParameterStringValue value in source.AlgorithmParameterValues.OfType<DT.AlgorithmParameterStringValue>())
+          target.AlgorithmParameterStringValues.Add(Convert.ToEntity(value));
+
+        foreach (DT.ProblemParameterBlobValue value in source.ProblemParameterValues.OfType<DT.ProblemParameterBlobValue>())
+          target.ProblemParameterBlobValues.Add(Convert.ToEntity(value));
+        foreach (DT.ProblemParameterBoolValue value in source.ProblemParameterValues.OfType<DT.ProblemParameterBoolValue>())
+          target.ProblemParameterBoolValues.Add(Convert.ToEntity(value));
+        foreach (DT.ProblemParameterFloatValue value in source.ProblemParameterValues.OfType<DT.ProblemParameterFloatValue>())
+          target.ProblemParameterFloatValues.Add(Convert.ToEntity(value));
+        foreach (DT.ProblemParameterIntValue value in source.ProblemParameterValues.OfType<DT.ProblemParameterIntValue>())
+          target.ProblemParameterIntValues.Add(Convert.ToEntity(value));
+        foreach (DT.ProblemParameterStringValue value in source.ProblemParameterValues.OfType<DT.ProblemParameterStringValue>())
+          target.ProblemParameterStringValues.Add(Convert.ToEntity(value));
+      }
+    }
+    #endregion
+
+    #region Run
+    public static DT.Run ToDto(DA.Run source) {
+      if (source == null) return null;
+      DT.Run target = new DT.Run { Id = source.Id, RandomSeed = source.RandomSeed, CreatedDate = source.CreatedDate, ExperimentId = source.ExperimentId, UserId = source.UserId, ClientId = source.ClientId };
+
+      List<DT.ResultValue> resultValues = new List<DT.ResultValue>();
+      foreach (DA.ResultBlobValue value in source.ResultBlobValues)
+        resultValues.Add(Convert.ToDto(value));
+      foreach (DA.ResultBoolValue value in source.ResultBoolValues)
+        resultValues.Add(Convert.ToDto(value));
+      foreach (DA.ResultFloatValue value in source.ResultFloatValues)
+        resultValues.Add(Convert.ToDto(value));
+      foreach (DA.ResultIntValue value in source.ResultIntValues)
+        resultValues.Add(Convert.ToDto(value));
+      foreach (DA.ResultStringValue value in source.ResultStringValues)
+        resultValues.Add(Convert.ToDto(value));
+      target.ResultValues = resultValues.ToArray();
+
+      return target;
+    }
+    public static DA.Run ToEntity(DT.Run source) {
+      if (source == null) return null;
+      DA.Run target = new DA.Run();
+      Convert.ToEntity(source, target);
+      return target;
+    }
+    public static void ToEntity(DT.Run source, DA.Run target) {
+      if ((source != null) && (target != null)) {
+        target.Id = source.Id; target.RandomSeed = source.RandomSeed; target.CreatedDate = source.CreatedDate; target.ExperimentId = source.ExperimentId; target.UserId = source.UserId; target.ClientId = source.ClientId;
+
+        foreach (DT.ResultBlobValue value in source.ResultValues.OfType<DT.ResultBlobValue>())
+          target.ResultBlobValues.Add(Convert.ToEntity(value));
+        foreach (DT.ResultBoolValue value in source.ResultValues.OfType<DT.ResultBoolValue>())
+          target.ResultBoolValues.Add(Convert.ToEntity(value));
+        foreach (DT.ResultFloatValue value in source.ResultValues.OfType<DT.ResultFloatValue>())
+          target.ResultFloatValues.Add(Convert.ToEntity(value));
+        foreach (DT.ResultIntValue value in source.ResultValues.OfType<DT.ResultIntValue>())
+          target.ResultIntValues.Add(Convert.ToEntity(value));
+        foreach (DT.ResultStringValue value in source.ResultValues.OfType<DT.ResultStringValue>())
+          target.ResultStringValues.Add(Convert.ToEntity(value));
+      }
+    }
+    #endregion
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/DataService.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/DataService.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/DataService.cs	(revision 5296)
@@ -0,0 +1,183 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Data.Linq;
+using System.IO;
+using System.Linq;
+using System.ServiceModel;
+using HeuristicLab.Services.OKB.DataAccess;
+
+namespace HeuristicLab.Services.OKB {
+  /// <summary>
+  /// Implementation of the <see cref="IDataService"/>.
+  /// </summary>
+  [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession, IncludeExceptionDetailInFaults = true)]
+  class DataService : IDisposable, IDataService {
+    private enum Mode { Request, Submit, None };
+
+    private Mode mode = Mode.None;
+    private EntityType type;
+    private int id = -1;
+    private MemoryStream dataStream;
+
+    private void EnsureInit() {
+      if (mode != Mode.None)
+        throw new FaultException(String.Format("Cannot service new request while processing another {0}-Operation.", mode));
+    }
+
+    private byte[] GetData(EntityType type, int id) {
+      using (OKBDataContext okb = new OKBDataContext()) {
+        switch (type) {
+          case EntityType.Algorithm:
+            Algorithm algorithm = okb.Algorithms.Single(a => a.Id == id);
+            if (algorithm.AlgorithmData == null) {
+              algorithm.AlgorithmData = new AlgorithmData() {
+                AlgorithmId = algorithm.Id,
+                Data = new Binary(new byte[0])
+              };
+              okb.SubmitChanges();
+            }
+            return algorithm.AlgorithmData.Data.ToArray();
+          case EntityType.Problem:
+            Problem problem = okb.Problems.Single(p => p.Id == id);
+            if (problem.ProblemData == null) {
+              problem.ProblemData = new ProblemData() {
+                ProblemId = problem.Id,
+                Data = new Binary(new byte[0])
+              };
+              okb.SubmitChanges();
+            }
+            return problem.ProblemData.Data.ToArray();
+          default:
+            throw new FaultException("Unsupported EntityType.");
+        }
+      }
+    }
+
+    private void SetData(EntityType type, int id, byte[] data) {
+      using (OKBDataContext okb = new OKBDataContext()) {
+        switch (type) {
+          case EntityType.Algorithm:
+            Algorithm algorithm = okb.Algorithms.Single(a => a.Id == id);
+            if (algorithm.AlgorithmData == null)
+              algorithm.AlgorithmData = new AlgorithmData() {
+                AlgorithmId = algorithm.Id,
+                Data = new Binary(new byte[0])
+              };
+            algorithm.AlgorithmData.Data = new Binary(data);
+            okb.SubmitChanges();
+            break;
+          case EntityType.Problem:
+            Problem problem = okb.Problems.Single(p => p.Id == id);
+            if (problem.ProblemData == null)
+              problem.ProblemData = new ProblemData() {
+                ProblemId = problem.Id,
+                Data = new Binary(new byte[0])
+              };
+            problem.ProblemData.Data = new Binary(data);
+            okb.SubmitChanges();
+            break;
+          default:
+            throw new FaultException("Unsupported EntityType.");
+        }
+      }
+    }
+
+    #region IDataService Members
+    /// <summary>
+    /// Request the specified <see cref="Algorithm"/> or <see cref="Problem"/>.
+    /// </summary>
+    /// <param name="type">The entity type.</param>
+    /// <param name="id">The entity id.</param>
+    /// <returns>The size of the data blob.</returns>
+    public int Request(EntityType type, int id) {
+      EnsureInit();
+      dataStream = new MemoryStream(GetData(type, id));
+      mode = Mode.Request;
+      return (int)dataStream.Length;
+    }
+
+    /// <summary>
+    /// Gets the next chunk of bytes.
+    /// </summary>
+    /// <param name="size">The maximum number of bytes to transfer.</param>
+    /// <returns>An array of bytes.</returns>
+    public byte[] GetNextChunk(int size) {
+      if (dataStream == null || mode != Mode.Request)
+        throw new FaultException("No data has been prepared, call Request first.");
+      byte[] chunk = new byte[Math.Min(size, dataStream.Length - dataStream.Position)];
+      dataStream.Read(chunk, 0, chunk.Length);
+      return chunk;
+    }
+
+    /// <summary>
+    /// Prepare submission of the specified <see cref="Algorithm"/> or <see cref="Problem"/>.
+    /// </summary>
+    /// <param name="type">The entity type.</param>
+    /// <param name="id">The entity id.</param>
+    public void Submit(EntityType type, int id) {
+      EnsureInit();
+      GetData(type, id);
+      this.type = type;
+      this.id = id;
+      mode = Mode.Submit;
+      dataStream = new MemoryStream();
+    }
+
+    /// <summary>
+    /// Sets the next chunk of bytes.
+    /// </summary>
+    /// <param name="data">The data.</param>
+    public void SetNextChunk(byte[] data) {
+      dataStream.Write(data, 0, data.Length);
+    }
+
+    /// <summary>
+    /// Commits the transaction in case of an upload and closes
+    /// the connection.
+    /// </summary>
+    public void TransferDone() {
+      if (mode == Mode.Submit)
+        SetData(type, id, dataStream.ToArray());
+      Dispose();
+    }
+
+    /// <summary>
+    /// Aborts the transfer.
+    /// </summary>
+    public void AbortTransfer() {
+      Dispose();
+    }
+    #endregion
+
+    #region IDisposable Members
+    /// <summary>
+    /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
+    /// </summary>
+    public void Dispose() {
+      mode = Mode.None;
+      if (dataStream != null)
+        dataStream.Dispose();
+    }
+    #endregion
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/ExperimentEqualityComparer.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/ExperimentEqualityComparer.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/ExperimentEqualityComparer.cs	(revision 5296)
@@ -0,0 +1,150 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Collections.Generic;
+using System.Linq;
+using HeuristicLab.Services.OKB.DataAccess;
+
+namespace HeuristicLab.Services.OKB {
+  public class ExperimentEqualityComparer : IEqualityComparer<Experiment> {
+    public bool Equals(Experiment x, Experiment y) {
+      bool equal = true;
+      equal = equal && x.AlgorithmId == y.AlgorithmId;
+      equal = equal && x.ProblemId == y.ProblemId;
+      equal = equal && x.AlgorithmParameterBlobValues.Count == y.AlgorithmParameterBlobValues.Count;
+      equal = equal && x.AlgorithmParameterBoolValues.Count == y.AlgorithmParameterBoolValues.Count;
+      equal = equal && x.AlgorithmParameterFloatValues.Count == y.AlgorithmParameterFloatValues.Count;
+      equal = equal && x.AlgorithmParameterIntValues.Count == y.AlgorithmParameterIntValues.Count;
+      equal = equal && x.AlgorithmParameterStringValues.Count == y.AlgorithmParameterStringValues.Count;
+      equal = equal && x.ProblemParameterBlobValues.Count == y.ProblemParameterBlobValues.Count;
+      equal = equal && x.ProblemParameterBoolValues.Count == y.ProblemParameterBoolValues.Count;
+      equal = equal && x.ProblemParameterFloatValues.Count == y.ProblemParameterFloatValues.Count;
+      equal = equal && x.ProblemParameterIntValues.Count == y.ProblemParameterIntValues.Count;
+      equal = equal && x.ProblemParameterStringValues.Count == y.ProblemParameterStringValues.Count;
+
+      if (equal) {
+        var values = x.AlgorithmParameterBlobValues.Zip(y.AlgorithmParameterBlobValues, (a, b) => new { X = a, Y = b });
+        foreach (var value in values) {
+          equal = equal && value.X.AlgorithmParameterId == value.Y.AlgorithmParameterId;
+          equal = equal && value.X.DataTypeId == value.Y.DataTypeId;
+          equal = equal && value.X.Value.Length == value.Y.Value.Length;
+          if (equal) {
+            byte[] xBlob = value.X.Value.ToArray();
+            byte[] yBlob = value.Y.Value.ToArray();
+            int i = 0;
+            while (equal && (i < xBlob.Length)) {
+              equal = equal && xBlob[i] == yBlob[i];
+              i++;
+            }
+          }
+        }
+      }
+      if (equal) {
+        var values = x.AlgorithmParameterBoolValues.Zip(y.AlgorithmParameterBoolValues, (a, b) => new { X = a, Y = b });
+        foreach (var value in values) {
+          equal = equal && value.X.AlgorithmParameterId == value.Y.AlgorithmParameterId;
+          equal = equal && value.X.DataTypeId == value.Y.DataTypeId;
+          equal = equal && value.X.Value == value.Y.Value;
+        }
+      }
+      if (equal) {
+        var values = x.AlgorithmParameterFloatValues.Zip(y.AlgorithmParameterFloatValues, (a, b) => new { X = a, Y = b });
+        foreach (var value in values) {
+          equal = equal && value.X.AlgorithmParameterId == value.Y.AlgorithmParameterId;
+          equal = equal && value.X.DataTypeId == value.Y.DataTypeId;
+          equal = equal && value.X.Value == value.Y.Value;
+        }
+      }
+      if (equal) {
+        var values = x.AlgorithmParameterIntValues.Zip(y.AlgorithmParameterIntValues, (a, b) => new { X = a, Y = b });
+        foreach (var value in values) {
+          equal = equal && value.X.AlgorithmParameterId == value.Y.AlgorithmParameterId;
+          equal = equal && value.X.DataTypeId == value.Y.DataTypeId;
+          equal = equal && value.X.Value == value.Y.Value;
+        }
+      }
+      if (equal) {
+        var values = x.AlgorithmParameterStringValues.Zip(y.AlgorithmParameterStringValues, (a, b) => new { X = a, Y = b });
+        foreach (var value in values) {
+          equal = equal && value.X.AlgorithmParameterId == value.Y.AlgorithmParameterId;
+          equal = equal && value.X.DataTypeId == value.Y.DataTypeId;
+          equal = equal && value.X.Value == value.Y.Value;
+        }
+      }
+
+      if (equal) {
+        var values = x.ProblemParameterBlobValues.Zip(y.ProblemParameterBlobValues, (a, b) => new { X = a, Y = b });
+        foreach (var value in values) {
+          equal = equal && value.X.ProblemParameterId == value.Y.ProblemParameterId;
+          equal = equal && value.X.DataTypeId == value.Y.DataTypeId;
+          equal = equal && value.X.Value.Length == value.Y.Value.Length;
+          if (equal) {
+            byte[] xBlob = value.X.Value.ToArray();
+            byte[] yBlob = value.Y.Value.ToArray();
+            int i = 0;
+            while (equal && (i < xBlob.Length)) {
+              equal = equal && xBlob[i] == yBlob[i];
+              i++;
+            }
+          }
+        }
+      }
+      if (equal) {
+        var values = x.ProblemParameterBoolValues.Zip(y.ProblemParameterBoolValues, (a, b) => new { X = a, Y = b });
+        foreach (var value in values) {
+          equal = equal && value.X.ProblemParameterId == value.Y.ProblemParameterId;
+          equal = equal && value.X.DataTypeId == value.Y.DataTypeId;
+          equal = equal && value.X.Value == value.Y.Value;
+        }
+      }
+      if (equal) {
+        var values = x.ProblemParameterFloatValues.Zip(y.ProblemParameterFloatValues, (a, b) => new { X = a, Y = b });
+        foreach (var value in values) {
+          equal = equal && value.X.ProblemParameterId == value.Y.ProblemParameterId;
+          equal = equal && value.X.DataTypeId == value.Y.DataTypeId;
+          equal = equal && value.X.Value == value.Y.Value;
+        }
+      }
+      if (equal) {
+        var values = x.ProblemParameterIntValues.Zip(y.ProblemParameterIntValues, (a, b) => new { X = a, Y = b });
+        foreach (var value in values) {
+          equal = equal && value.X.ProblemParameterId == value.Y.ProblemParameterId;
+          equal = equal && value.X.DataTypeId == value.Y.DataTypeId;
+          equal = equal && value.X.Value == value.Y.Value;
+        }
+      }
+      if (equal) {
+        var values = x.ProblemParameterStringValues.Zip(y.ProblemParameterStringValues, (a, b) => new { X = a, Y = b });
+        foreach (var value in values) {
+          equal = equal && value.X.ProblemParameterId == value.Y.ProblemParameterId;
+          equal = equal && value.X.DataTypeId == value.Y.DataTypeId;
+          equal = equal && value.X.Value == value.Y.Value;
+        }
+      }
+
+      return equal;
+    }
+
+    public int GetHashCode(Experiment obj) {
+      return obj.GetHashCode();
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/ExperimentKit.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/ExperimentKit.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/ExperimentKit.cs	(revision 5296)
@@ -0,0 +1,49 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Runtime.Serialization;
+using HeuristicLab.Services.OKB.DataAccess;
+
+namespace HeuristicLab.Services.OKB {
+  /// <summary>
+  /// Contains an <see cref="Algorithm"/> and a <see cref="Problem"/> populated with all
+  /// required data to execute experiments.
+  /// </summary>
+  [DataContract]
+  public class ExperimentKit {
+    /// <summary>
+    /// Gets an <see cref="Algorithm"/> populated with all required data to execute
+    /// experiments.
+    /// </summary>
+    /// <value>An <see cref="Algorithm"/>.</value>
+    [DataMember]
+    public Algorithm Algorithm { get; set; }
+
+    /// <summary>
+    /// Gets a <see cref="Problem"/> populated with all required data to execute
+    /// experiments.
+    /// </summary>
+    /// <value>A <see cref="Problem"/>.</value>
+    [DataMember]
+    public Problem Problem { get; set; }
+  }
+
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/AlgorithmClassNameFilter.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/AlgorithmClassNameFilter.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/AlgorithmClassNameFilter.cs	(revision 5296)
@@ -0,0 +1,57 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Linq.Expressions;
+using HeuristicLab.Services.OKB.DataAccess;
+
+namespace HeuristicLab.Services.OKB {
+  public class AlgorithmClassNameFilter : IFilter {
+    public DataTransfer.SetComparison Comparison { get; set; }
+    public string Value { get; set; }
+
+    public Expression<Func<Run, bool>> Expression {
+      get {
+        switch (Comparison) {
+          case DataTransfer.SetComparison.Equal:
+            return x => x.Experiment.Algorithm.AlgorithmClass.Name == Value;
+          case DataTransfer.SetComparison.NotEqual:
+            return x => x.Experiment.Algorithm.AlgorithmClass.Name != Value;
+          case DataTransfer.SetComparison.Contains:
+            return x => x.Experiment.Algorithm.AlgorithmClass.Name.Contains(Value);
+          case DataTransfer.SetComparison.NotContains:
+            return x => !x.Experiment.Algorithm.AlgorithmClass.Name.Contains(Value);
+          default:
+            return x => true;
+        }
+      }
+    }
+
+    public AlgorithmClassNameFilter(DataTransfer.SetComparison comparison, string value) {
+      Comparison = comparison;
+      Value = value;
+    }
+    public AlgorithmClassNameFilter(DataTransfer.SetComparisonStringFilter filter) {
+      Comparison = filter.Comparison;
+      Value = filter.Value;
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/AlgorithmDataDataTypeNameFilter.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/AlgorithmDataDataTypeNameFilter.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/AlgorithmDataDataTypeNameFilter.cs	(revision 5296)
@@ -0,0 +1,57 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Linq.Expressions;
+using HeuristicLab.Services.OKB.DataAccess;
+
+namespace HeuristicLab.Services.OKB {
+  public class AlgorithmDataDataTypeNameFilter : IFilter {
+    public DataTransfer.SetComparison Comparison { get; set; }
+    public string Value { get; set; }
+
+    public Expression<Func<Run, bool>> Expression {
+      get {
+        switch (Comparison) {
+          case DataTransfer.SetComparison.Equal:
+            return x => (x.Experiment.Algorithm.AlgorithmData.DataType.Name == Value) || (x.Experiment.Algorithm.AlgorithmData.DataType.TypeName == Value);
+          case DataTransfer.SetComparison.NotEqual:
+            return x => (x.Experiment.Algorithm.AlgorithmData.DataType.Name != Value) && (x.Experiment.Algorithm.AlgorithmData.DataType.TypeName != Value);
+          case DataTransfer.SetComparison.Contains:
+            return x => x.Experiment.Algorithm.AlgorithmData.DataType.Name.Contains(Value) || x.Experiment.Algorithm.AlgorithmData.DataType.TypeName.Contains(Value);
+          case DataTransfer.SetComparison.NotContains:
+            return x => !x.Experiment.Algorithm.AlgorithmData.DataType.Name.Contains(Value) && !x.Experiment.Algorithm.AlgorithmData.DataType.TypeName.Contains(Value);
+          default:
+            return x => true;
+        }
+      }
+    }
+
+    public AlgorithmDataDataTypeNameFilter(DataTransfer.SetComparison comparison, string value) {
+      Comparison = comparison;
+      Value = value;
+    }
+    public AlgorithmDataDataTypeNameFilter(DataTransfer.SetComparisonStringFilter filter) {
+      Comparison = filter.Comparison;
+      Value = filter.Value;
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/AlgorithmNameFilter.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/AlgorithmNameFilter.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/AlgorithmNameFilter.cs	(revision 5296)
@@ -0,0 +1,57 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Linq.Expressions;
+using HeuristicLab.Services.OKB.DataAccess;
+
+namespace HeuristicLab.Services.OKB {
+  public class AlgorithmNameFilter : IFilter {
+    public DataTransfer.SetComparison Comparison { get; set; }
+    public string Value { get; set; }
+
+    public Expression<Func<Run, bool>> Expression {
+      get {
+        switch (Comparison) {
+          case DataTransfer.SetComparison.Equal:
+            return x => x.Experiment.Algorithm.Name == Value;
+          case DataTransfer.SetComparison.NotEqual:
+            return x => x.Experiment.Algorithm.Name != Value;
+          case DataTransfer.SetComparison.Contains:
+            return x => x.Experiment.Algorithm.Name.Contains(Value);
+          case DataTransfer.SetComparison.NotContains:
+            return x => !x.Experiment.Algorithm.Name.Contains(Value);
+          default:
+            return x => true;
+        }
+      }
+    }
+
+    public AlgorithmNameFilter(DataTransfer.SetComparison comparison, string value) {
+      Comparison = comparison;
+      Value = value;
+    }
+    public AlgorithmNameFilter(DataTransfer.SetComparisonStringFilter filter) {
+      Comparison = filter.Comparison;
+      Value = filter.Value;
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/AlgorithmParameterBlobValueDataTypeNameFilter.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/AlgorithmParameterBlobValueDataTypeNameFilter.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/AlgorithmParameterBlobValueDataTypeNameFilter.cs	(revision 5296)
@@ -0,0 +1,61 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Linq;
+using System.Linq.Expressions;
+using HeuristicLab.Services.OKB.DataAccess;
+
+namespace HeuristicLab.Services.OKB {
+  public class AlgorithmParameterBlobValueDataTypeNameFilter : IFilter {
+    public string Name { get; protected set; }
+    public DataTransfer.SetComparison Comparison { get; set; }
+    public string Value { get; set; }
+
+    public Expression<Func<Run, bool>> Expression {
+      get {
+        switch (Comparison) {
+          case DataTransfer.SetComparison.Equal:
+            return x => x.Experiment.AlgorithmParameterBlobValues.Any(y => ((y.AlgorithmParameter.Name == Name) || (y.AlgorithmParameter.Alias == Name)) && ((y.DataType.Name == Value) || (y.DataType.TypeName == Value)));
+          case DataTransfer.SetComparison.NotEqual:
+            return x => x.Experiment.AlgorithmParameterBlobValues.Any(y => ((y.AlgorithmParameter.Name == Name) || (y.AlgorithmParameter.Alias == Name)) && ((y.DataType.Name != Value) && (!(y.DataType.TypeName != Value))));
+          case DataTransfer.SetComparison.Contains:
+            return x => x.Experiment.AlgorithmParameterBlobValues.Any(y => ((y.AlgorithmParameter.Name == Name) || (y.AlgorithmParameter.Alias == Name)) && (y.DataType.Name.Contains(Value) || y.DataType.TypeName.Contains(Value)));
+          case DataTransfer.SetComparison.NotContains:
+            return x => x.Experiment.AlgorithmParameterBlobValues.Any(y => ((y.AlgorithmParameter.Name == Name) || (y.AlgorithmParameter.Alias == Name)) && (!y.DataType.Name.Contains(Value) && !y.DataType.TypeName.Contains(Value)));
+          default:
+            return x => true;
+        }
+      }
+    }
+
+    public AlgorithmParameterBlobValueDataTypeNameFilter(string name, DataTransfer.SetComparison comparison, string value) {
+      Name = name;
+      Comparison = comparison;
+      Value = value;
+    }
+    public AlgorithmParameterBlobValueDataTypeNameFilter(DataTransfer.NameSetComparisonStringFilter filter) {
+      Name = filter.Name;
+      Comparison = filter.Comparison;
+      Value = filter.Value;
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/AlgorithmParameterBlobValueValueFilter.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/AlgorithmParameterBlobValueValueFilter.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/AlgorithmParameterBlobValueValueFilter.cs	(revision 5296)
@@ -0,0 +1,57 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Linq;
+using System.Linq.Expressions;
+using HeuristicLab.Services.OKB.DataAccess;
+
+namespace HeuristicLab.Services.OKB {
+  public class AlgorithmParameterBlobValueValueFilter : IFilter {
+    public string Name { get; protected set; }
+    public DataTransfer.EqualityComparison Comparison { get; set; }
+    public byte[] Value { get; set; }
+
+    public Expression<Func<Run, bool>> Expression {
+      get {
+        switch (Comparison) {
+          case DataTransfer.EqualityComparison.Equal:
+            return x => x.Experiment.AlgorithmParameterBlobValues.Any(y => ((y.AlgorithmParameter.Name == Name) || (y.AlgorithmParameter.Alias == Name)) && (y.Value == Value));
+          case DataTransfer.EqualityComparison.NotEqual:
+            return x => x.Experiment.AlgorithmParameterBlobValues.Any(y => ((y.AlgorithmParameter.Name == Name) || (y.AlgorithmParameter.Alias == Name)) && (y.Value != Value));
+          default:
+            return x => true;
+        }
+      }
+    }
+
+    public AlgorithmParameterBlobValueValueFilter(string name, DataTransfer.EqualityComparison comparison, byte[] value) {
+      Name = name;
+      Comparison = comparison;
+      Value = value;
+    }
+    public AlgorithmParameterBlobValueValueFilter(DataTransfer.NameEqualityComparisonByteArrayFilter filter) {
+      Name = filter.Name;
+      Comparison = filter.Comparison;
+      Value = filter.Value;
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/AlgorithmParameterBoolValueValueFilter.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/AlgorithmParameterBoolValueValueFilter.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/AlgorithmParameterBoolValueValueFilter.cs	(revision 5296)
@@ -0,0 +1,57 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Linq;
+using System.Linq.Expressions;
+using HeuristicLab.Services.OKB.DataAccess;
+
+namespace HeuristicLab.Services.OKB {
+  public class AlgorithmParameterBoolValueValueFilter : IFilter {
+    public string Name { get; protected set; }
+    public DataTransfer.EqualityComparison Comparison { get; set; }
+    public bool Value { get; set; }
+
+    public Expression<Func<Run, bool>> Expression {
+      get {
+        switch (Comparison) {
+          case DataTransfer.EqualityComparison.Equal:
+            return x => x.Experiment.AlgorithmParameterBoolValues.Any(y => ((y.AlgorithmParameter.Name == Name) || (y.AlgorithmParameter.Alias == Name)) && (y.Value == Value));
+          case DataTransfer.EqualityComparison.NotEqual:
+            return x => x.Experiment.AlgorithmParameterBoolValues.Any(y => ((y.AlgorithmParameter.Name == Name) || (y.AlgorithmParameter.Alias == Name)) && (y.Value != Value));
+          default:
+            return x => true;
+        }
+      }
+    }
+
+    public AlgorithmParameterBoolValueValueFilter(string name, DataTransfer.EqualityComparison comparison, bool value) {
+      Name = name;
+      Comparison = comparison;
+      Value = value;
+    }
+    public AlgorithmParameterBoolValueValueFilter(DataTransfer.NameEqualityComparisonBoolFilter filter) {
+      Name = filter.Name;
+      Comparison = filter.Comparison;
+      Value = filter.Value;
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/AlgorithmParameterFloatValueValueFilter.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/AlgorithmParameterFloatValueValueFilter.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/AlgorithmParameterFloatValueValueFilter.cs	(revision 5296)
@@ -0,0 +1,65 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Linq;
+using System.Linq.Expressions;
+using HeuristicLab.Services.OKB.DataAccess;
+
+namespace HeuristicLab.Services.OKB {
+  public class AlgorithmParameterFloatValueValueFilter : IFilter {
+    public string Name { get; protected set; }
+    public DataTransfer.OrdinalComparison Comparison { get; set; }
+    public double Value { get; set; }
+
+    public Expression<Func<Run, bool>> Expression {
+      get {
+        switch (Comparison) {
+          case DataTransfer.OrdinalComparison.Less:
+            return x => x.Experiment.AlgorithmParameterFloatValues.Any(y => ((y.AlgorithmParameter.Name == Name) || (y.AlgorithmParameter.Alias == Name)) && (y.Value < Value));
+          case DataTransfer.OrdinalComparison.LessOrEqual:
+            return x => x.Experiment.AlgorithmParameterFloatValues.Any(y => ((y.AlgorithmParameter.Name == Name) || (y.AlgorithmParameter.Alias == Name)) && (y.Value <= Value));
+          case DataTransfer.OrdinalComparison.Equal:
+            return x => x.Experiment.AlgorithmParameterFloatValues.Any(y => ((y.AlgorithmParameter.Name == Name) || (y.AlgorithmParameter.Alias == Name)) && (y.Value == Value));
+          case DataTransfer.OrdinalComparison.GreaterOrEqual:
+            return x => x.Experiment.AlgorithmParameterFloatValues.Any(y => ((y.AlgorithmParameter.Name == Name) || (y.AlgorithmParameter.Alias == Name)) && (y.Value >= Value));
+          case DataTransfer.OrdinalComparison.Greater:
+            return x => x.Experiment.AlgorithmParameterFloatValues.Any(y => ((y.AlgorithmParameter.Name == Name) || (y.AlgorithmParameter.Alias == Name)) && (y.Value > Value));
+          case DataTransfer.OrdinalComparison.NotEqual:
+            return x => x.Experiment.AlgorithmParameterFloatValues.Any(y => ((y.AlgorithmParameter.Name == Name) || (y.AlgorithmParameter.Alias == Name)) && (y.Value != Value));
+          default:
+            return x => true;
+        }
+      }
+    }
+
+    public AlgorithmParameterFloatValueValueFilter(string name, DataTransfer.OrdinalComparison comparison, double value) {
+      Name = name;
+      Comparison = comparison;
+      Value = value;
+    }
+    public AlgorithmParameterFloatValueValueFilter(DataTransfer.NameOrdinalComparisonDoubleFilter filter) {
+      Name = filter.Name;
+      Comparison = filter.Comparison;
+      Value = filter.Value;
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/AlgorithmParameterIntValueValueFilter.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/AlgorithmParameterIntValueValueFilter.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/AlgorithmParameterIntValueValueFilter.cs	(revision 5296)
@@ -0,0 +1,65 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Linq;
+using System.Linq.Expressions;
+using HeuristicLab.Services.OKB.DataAccess;
+
+namespace HeuristicLab.Services.OKB {
+  public class AlgorithmParameterIntValueValueFilter : IFilter {
+    public string Name { get; protected set; }
+    public DataTransfer.OrdinalComparison Comparison { get; set; }
+    public long Value { get; set; }
+
+    public Expression<Func<Run, bool>> Expression {
+      get {
+        switch (Comparison) {
+          case DataTransfer.OrdinalComparison.Less:
+            return x => x.Experiment.AlgorithmParameterIntValues.Any(y => ((y.AlgorithmParameter.Name == Name) || (y.AlgorithmParameter.Alias == Name)) && (y.Value < Value));
+          case DataTransfer.OrdinalComparison.LessOrEqual:
+            return x => x.Experiment.AlgorithmParameterIntValues.Any(y => ((y.AlgorithmParameter.Name == Name) || (y.AlgorithmParameter.Alias == Name)) && (y.Value <= Value));
+          case DataTransfer.OrdinalComparison.Equal:
+            return x => x.Experiment.AlgorithmParameterIntValues.Any(y => ((y.AlgorithmParameter.Name == Name) || (y.AlgorithmParameter.Alias == Name)) && (y.Value == Value));
+          case DataTransfer.OrdinalComparison.GreaterOrEqual:
+            return x => x.Experiment.AlgorithmParameterIntValues.Any(y => ((y.AlgorithmParameter.Name == Name) || (y.AlgorithmParameter.Alias == Name)) && (y.Value >= Value));
+          case DataTransfer.OrdinalComparison.Greater:
+            return x => x.Experiment.AlgorithmParameterIntValues.Any(y => ((y.AlgorithmParameter.Name == Name) || (y.AlgorithmParameter.Alias == Name)) && (y.Value > Value));
+          case DataTransfer.OrdinalComparison.NotEqual:
+            return x => x.Experiment.AlgorithmParameterIntValues.Any(y => ((y.AlgorithmParameter.Name == Name) || (y.AlgorithmParameter.Alias == Name)) && (y.Value != Value));
+          default:
+            return x => true;
+        }
+      }
+    }
+
+    public AlgorithmParameterIntValueValueFilter(string name, DataTransfer.OrdinalComparison comparison, long value) {
+      Name = name;
+      Comparison = comparison;
+      Value = value;
+    }
+    public AlgorithmParameterIntValueValueFilter(DataTransfer.NameOrdinalComparisonLongFilter filter) {
+      Name = filter.Name;
+      Comparison = filter.Comparison;
+      Value = filter.Value;
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/AlgorithmParameterNameFilter.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/AlgorithmParameterNameFilter.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/AlgorithmParameterNameFilter.cs	(revision 5296)
@@ -0,0 +1,58 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Linq;
+using System.Linq.Expressions;
+using HeuristicLab.Services.OKB.DataAccess;
+
+namespace HeuristicLab.Services.OKB {
+  public class AlgorithmParameterNameFilter : IFilter {
+    public DataTransfer.SetComparison Comparison { get; set; }
+    public string Value { get; set; }
+
+    public Expression<Func<Run, bool>> Expression {
+      get {
+        switch (Comparison) {
+          case DataTransfer.SetComparison.Equal:
+            return x => x.Experiment.Algorithm.AlgorithmParameters.Any(y => (y.Name == Value) || (y.Alias == Value));
+          case DataTransfer.SetComparison.NotEqual:
+            return x => x.Experiment.Algorithm.AlgorithmParameters.All(y => (y.Name != Value) && (y.Alias != Value));
+          case DataTransfer.SetComparison.Contains:
+            return x => x.Experiment.Algorithm.AlgorithmParameters.Any(y => y.Name.Contains(Value) || y.Alias.Contains(Value));
+          case DataTransfer.SetComparison.NotContains:
+            return x => x.Experiment.Algorithm.AlgorithmParameters.All(y => !y.Name.Contains(Value) && !y.Alias.Contains(Value));
+          default:
+            return x => true;
+        }
+      }
+    }
+
+    public AlgorithmParameterNameFilter(DataTransfer.SetComparison comparison, string value) {
+      Comparison = comparison;
+      Value = value;
+    }
+    public AlgorithmParameterNameFilter(DataTransfer.SetComparisonStringFilter filter) {
+      Comparison = filter.Comparison;
+      Value = filter.Value;
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/AlgorithmParameterStringValueValueFilter.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/AlgorithmParameterStringValueValueFilter.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/AlgorithmParameterStringValueValueFilter.cs	(revision 5296)
@@ -0,0 +1,61 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Linq;
+using System.Linq.Expressions;
+using HeuristicLab.Services.OKB.DataAccess;
+
+namespace HeuristicLab.Services.OKB {
+  public class AlgorithmParameterStringValueValueFilter : IFilter {
+    public string Name { get; protected set; }
+    public DataTransfer.SetComparison Comparison { get; set; }
+    public string Value { get; set; }
+
+    public Expression<Func<Run, bool>> Expression {
+      get {
+        switch (Comparison) {
+          case DataTransfer.SetComparison.Equal:
+            return x => x.Experiment.AlgorithmParameterStringValues.Any(y => ((y.AlgorithmParameter.Name == Name) || (y.AlgorithmParameter.Alias == Name)) && (y.Value == Value));
+          case DataTransfer.SetComparison.NotEqual:
+            return x => x.Experiment.AlgorithmParameterStringValues.Any(y => ((y.AlgorithmParameter.Name == Name) || (y.AlgorithmParameter.Alias == Name)) && (y.Value != Value));
+          case DataTransfer.SetComparison.Contains:
+            return x => x.Experiment.AlgorithmParameterStringValues.Any(y => ((y.AlgorithmParameter.Name == Name) || (y.AlgorithmParameter.Alias == Name)) && y.Value.Contains(Value));
+          case DataTransfer.SetComparison.NotContains:
+            return x => x.Experiment.AlgorithmParameterStringValues.Any(y => ((y.AlgorithmParameter.Name == Name) || (y.AlgorithmParameter.Alias == Name)) && !y.Value.Contains(Value));
+          default:
+            return x => true;
+        }
+      }
+    }
+
+    public AlgorithmParameterStringValueValueFilter(string name, DataTransfer.SetComparison comparison, string value) {
+      Name = name;
+      Comparison = comparison;
+      Value = value;
+    }
+    public AlgorithmParameterStringValueValueFilter(DataTransfer.NameSetComparisonStringFilter filter) {
+      Name = filter.Name;
+      Comparison = filter.Comparison;
+      Value = filter.Value;
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/AlgorithmPlatformNameFilter.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/AlgorithmPlatformNameFilter.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/AlgorithmPlatformNameFilter.cs	(revision 5296)
@@ -0,0 +1,57 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Linq.Expressions;
+using HeuristicLab.Services.OKB.DataAccess;
+
+namespace HeuristicLab.Services.OKB {
+  public class AlgorithmPlatformNameFilter : IFilter {
+    public DataTransfer.SetComparison Comparison { get; set; }
+    public string Value { get; set; }
+
+    public Expression<Func<Run, bool>> Expression {
+      get {
+        switch (Comparison) {
+          case DataTransfer.SetComparison.Equal:
+            return x => x.Experiment.Algorithm.Platform.Name == Value;
+          case DataTransfer.SetComparison.NotEqual:
+            return x => x.Experiment.Algorithm.Platform.Name != Value;
+          case DataTransfer.SetComparison.Contains:
+            return x => x.Experiment.Algorithm.Platform.Name.Contains(Value);
+          case DataTransfer.SetComparison.NotContains:
+            return x => !x.Experiment.Algorithm.Platform.Name.Contains(Value);
+          default:
+            return x => true;
+        }
+      }
+    }
+
+    public AlgorithmPlatformNameFilter(DataTransfer.SetComparison comparison, string value) {
+      Comparison = comparison;
+      Value = value;
+    }
+    public AlgorithmPlatformNameFilter(DataTransfer.SetComparisonStringFilter filter) {
+      Comparison = filter.Comparison;
+      Value = filter.Value;
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/AndFilter.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/AndFilter.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/AndFilter.cs	(revision 5296)
@@ -0,0 +1,49 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Linq.Expressions;
+using HeuristicLab.Services.OKB.DataAccess;
+
+namespace HeuristicLab.Services.OKB {
+  public class AndFilter : IFilter {
+    public List<IFilter> Filters { get; private set; }
+
+    public Expression<Func<Run, bool>> Expression {
+      get {
+        ParameterExpression parameter = System.Linq.Expressions.Expression.Parameter(typeof(Run));
+        Expression expr = System.Linq.Expressions.Expression.Constant(true);
+        foreach (IFilter filter in Filters)
+          expr = System.Linq.Expressions.Expression.AndAlso(expr, System.Linq.Expressions.Expression.Invoke(filter.Expression, parameter));
+        return System.Linq.Expressions.Expression.Lambda<Func<Run, bool>>(expr, parameter);
+      }
+    }
+
+    public AndFilter(IEnumerable<IFilter> filters) {
+      Filters = new List<IFilter>(filters);
+    }
+    public AndFilter(DataTransfer.AndFilter filter) {
+      Filters = new List<IFilter>(filter.Filters.Select(x => (IFilter)Activator.CreateInstance(Type.GetType(x.FilterTypeName), x)));
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/IFilter.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/IFilter.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/IFilter.cs	(revision 5296)
@@ -0,0 +1,30 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Linq.Expressions;
+using HeuristicLab.Services.OKB.DataAccess;
+
+namespace HeuristicLab.Services.OKB {
+  public interface IFilter {
+    Expression<Func<Run, bool>> Expression { get; }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/OrFilter.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/OrFilter.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/OrFilter.cs	(revision 5296)
@@ -0,0 +1,49 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Linq.Expressions;
+using HeuristicLab.Services.OKB.DataAccess;
+
+namespace HeuristicLab.Services.OKB {
+  public class OrFilter : IFilter {
+    public List<IFilter> Filters { get; private set; }
+
+    public Expression<Func<Run, bool>> Expression {
+      get {
+        ParameterExpression parameter = System.Linq.Expressions.Expression.Parameter(typeof(Run));
+        Expression expr = System.Linq.Expressions.Expression.Constant(false);
+        foreach (IFilter filter in Filters)
+          expr = System.Linq.Expressions.Expression.OrElse(expr, System.Linq.Expressions.Expression.Invoke(filter.Expression, parameter));
+        return System.Linq.Expressions.Expression.Lambda<Func<Run, bool>>(expr, parameter);
+      }
+    }
+
+    public OrFilter(IEnumerable<IFilter> filters) {
+      Filters = new List<IFilter>(filters);
+    }
+    public OrFilter(DataTransfer.OrFilter filter) {
+      Filters = new List<IFilter>(filter.Filters.Select(x => (IFilter)Activator.CreateInstance(Type.GetType(x.FilterTypeName), x)));
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/ProblemClassNameFilter.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/ProblemClassNameFilter.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/ProblemClassNameFilter.cs	(revision 5296)
@@ -0,0 +1,57 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Linq.Expressions;
+using HeuristicLab.Services.OKB.DataAccess;
+
+namespace HeuristicLab.Services.OKB {
+  public class ProblemClassNameFilter : IFilter {
+    public DataTransfer.SetComparison Comparison { get; set; }
+    public string Value { get; set; }
+
+    public Expression<Func<Run, bool>> Expression {
+      get {
+        switch (Comparison) {
+          case DataTransfer.SetComparison.Equal:
+            return x => x.Experiment.Problem.ProblemClass.Name == Value;
+          case DataTransfer.SetComparison.NotEqual:
+            return x => x.Experiment.Problem.ProblemClass.Name != Value;
+          case DataTransfer.SetComparison.Contains:
+            return x => x.Experiment.Problem.ProblemClass.Name.Contains(Value);
+          case DataTransfer.SetComparison.NotContains:
+            return x => !x.Experiment.Problem.ProblemClass.Name.Contains(Value);
+          default:
+            return x => true;
+        }
+      }
+    }
+
+    public ProblemClassNameFilter(DataTransfer.SetComparison comparison, string value) {
+      Comparison = comparison;
+      Value = value;
+    }
+    public ProblemClassNameFilter(DataTransfer.SetComparisonStringFilter filter) {
+      Comparison = filter.Comparison;
+      Value = filter.Value;
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/ProblemDataDataTypeNameFilter.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/ProblemDataDataTypeNameFilter.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/ProblemDataDataTypeNameFilter.cs	(revision 5296)
@@ -0,0 +1,57 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Linq.Expressions;
+using HeuristicLab.Services.OKB.DataAccess;
+
+namespace HeuristicLab.Services.OKB {
+  public class ProblemDataDataTypeNameFilter : IFilter {
+    public DataTransfer.SetComparison Comparison { get; set; }
+    public string Value { get; set; }
+
+    public Expression<Func<Run, bool>> Expression {
+      get {
+        switch (Comparison) {
+          case DataTransfer.SetComparison.Equal:
+            return x => (x.Experiment.Problem.ProblemData.DataType.Name == Value) || (x.Experiment.Problem.ProblemData.DataType.TypeName == Value);
+          case DataTransfer.SetComparison.NotEqual:
+            return x => (x.Experiment.Problem.ProblemData.DataType.Name != Value) && (x.Experiment.Problem.ProblemData.DataType.TypeName != Value);
+          case DataTransfer.SetComparison.Contains:
+            return x => x.Experiment.Problem.ProblemData.DataType.Name.Contains(Value) || x.Experiment.Problem.ProblemData.DataType.TypeName.Contains(Value);
+          case DataTransfer.SetComparison.NotContains:
+            return x => !x.Experiment.Problem.ProblemData.DataType.Name.Contains(Value) && !x.Experiment.Problem.ProblemData.DataType.TypeName.Contains(Value);
+          default:
+            return x => true;
+        }
+      }
+    }
+
+    public ProblemDataDataTypeNameFilter(DataTransfer.SetComparison comparison, string value) {
+      Comparison = comparison;
+      Value = value;
+    }
+    public ProblemDataDataTypeNameFilter(DataTransfer.SetComparisonStringFilter filter) {
+      Comparison = filter.Comparison;
+      Value = filter.Value;
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/ProblemNameFilter.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/ProblemNameFilter.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/ProblemNameFilter.cs	(revision 5296)
@@ -0,0 +1,57 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Linq.Expressions;
+using HeuristicLab.Services.OKB.DataAccess;
+
+namespace HeuristicLab.Services.OKB {
+  public class ProblemNameFilter : IFilter {
+    public DataTransfer.SetComparison Comparison { get; set; }
+    public string Value { get; set; }
+
+    public Expression<Func<Run, bool>> Expression {
+      get {
+        switch (Comparison) {
+          case DataTransfer.SetComparison.Equal:
+            return x => x.Experiment.Problem.Name == Value;
+          case DataTransfer.SetComparison.NotEqual:
+            return x => x.Experiment.Problem.Name != Value;
+          case DataTransfer.SetComparison.Contains:
+            return x => x.Experiment.Problem.Name.Contains(Value);
+          case DataTransfer.SetComparison.NotContains:
+            return x => !x.Experiment.Problem.Name.Contains(Value);
+          default:
+            return x => true;
+        }
+      }
+    }
+
+    public ProblemNameFilter(DataTransfer.SetComparison comparison, string value) {
+      Comparison = comparison;
+      Value = value;
+    }
+    public ProblemNameFilter(DataTransfer.SetComparisonStringFilter filter) {
+      Comparison = filter.Comparison;
+      Value = filter.Value;
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/ProblemParameterBlobValueDataTypeNameFilter.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/ProblemParameterBlobValueDataTypeNameFilter.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/ProblemParameterBlobValueDataTypeNameFilter.cs	(revision 5296)
@@ -0,0 +1,61 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Linq;
+using System.Linq.Expressions;
+using HeuristicLab.Services.OKB.DataAccess;
+
+namespace HeuristicLab.Services.OKB {
+  public class ProblemParameterBlobValueDataTypeNameFilter : IFilter {
+    public string Name { get; protected set; }
+    public DataTransfer.SetComparison Comparison { get; set; }
+    public string Value { get; set; }
+
+    public Expression<Func<Run, bool>> Expression {
+      get {
+        switch (Comparison) {
+          case DataTransfer.SetComparison.Equal:
+            return x => x.Experiment.ProblemParameterBlobValues.Any(y => ((y.ProblemParameter.Name == Name) || (y.ProblemParameter.Alias == Name)) && ((y.DataType.Name == Value) || (y.DataType.TypeName == Value)));
+          case DataTransfer.SetComparison.NotEqual:
+            return x => x.Experiment.ProblemParameterBlobValues.Any(y => ((y.ProblemParameter.Name == Name) || (y.ProblemParameter.Alias == Name)) && ((y.DataType.Name != Value) && (!(y.DataType.TypeName != Value))));
+          case DataTransfer.SetComparison.Contains:
+            return x => x.Experiment.ProblemParameterBlobValues.Any(y => ((y.ProblemParameter.Name == Name) || (y.ProblemParameter.Alias == Name)) && (y.DataType.Name.Contains(Value) || y.DataType.TypeName.Contains(Value)));
+          case DataTransfer.SetComparison.NotContains:
+            return x => x.Experiment.ProblemParameterBlobValues.Any(y => ((y.ProblemParameter.Name == Name) || (y.ProblemParameter.Alias == Name)) && (!y.DataType.Name.Contains(Value) && !y.DataType.TypeName.Contains(Value)));
+          default:
+            return x => true;
+        }
+      }
+    }
+
+    public ProblemParameterBlobValueDataTypeNameFilter(string name, DataTransfer.SetComparison comparison, string value) {
+      Name = name;
+      Comparison = comparison;
+      Value = value;
+    }
+    public ProblemParameterBlobValueDataTypeNameFilter(DataTransfer.NameSetComparisonStringFilter filter) {
+      Name = filter.Name;
+      Comparison = filter.Comparison;
+      Value = filter.Value;
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/ProblemParameterBlobValueValueFilter.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/ProblemParameterBlobValueValueFilter.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/ProblemParameterBlobValueValueFilter.cs	(revision 5296)
@@ -0,0 +1,57 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Linq;
+using System.Linq.Expressions;
+using HeuristicLab.Services.OKB.DataAccess;
+
+namespace HeuristicLab.Services.OKB {
+  public class ProblemParameterBlobValueValueFilter : IFilter {
+    public string Name { get; protected set; }
+    public DataTransfer.EqualityComparison Comparison { get; set; }
+    public byte[] Value { get; set; }
+
+    public Expression<Func<Run, bool>> Expression {
+      get {
+        switch (Comparison) {
+          case DataTransfer.EqualityComparison.Equal:
+            return x => x.Experiment.ProblemParameterBlobValues.Any(y => ((y.ProblemParameter.Name == Name) || (y.ProblemParameter.Alias == Name)) && (y.Value == Value));
+          case DataTransfer.EqualityComparison.NotEqual:
+            return x => x.Experiment.ProblemParameterBlobValues.Any(y => ((y.ProblemParameter.Name == Name) || (y.ProblemParameter.Alias == Name)) && (y.Value != Value));
+          default:
+            return x => true;
+        }
+      }
+    }
+
+    public ProblemParameterBlobValueValueFilter(string name, DataTransfer.EqualityComparison comparison, byte[] value) {
+      Name = name;
+      Comparison = comparison;
+      Value = value;
+    }
+    public ProblemParameterBlobValueValueFilter(DataTransfer.NameEqualityComparisonByteArrayFilter filter) {
+      Name = filter.Name;
+      Comparison = filter.Comparison;
+      Value = filter.Value;
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/ProblemParameterBoolValueValueFilter.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/ProblemParameterBoolValueValueFilter.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/ProblemParameterBoolValueValueFilter.cs	(revision 5296)
@@ -0,0 +1,57 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Linq;
+using System.Linq.Expressions;
+using HeuristicLab.Services.OKB.DataAccess;
+
+namespace HeuristicLab.Services.OKB {
+  public class ProblemParameterBoolValueValueFilter : IFilter {
+    public string Name { get; protected set; }
+    public DataTransfer.EqualityComparison Comparison { get; set; }
+    public bool Value { get; set; }
+
+    public Expression<Func<Run, bool>> Expression {
+      get {
+        switch (Comparison) {
+          case DataTransfer.EqualityComparison.Equal:
+            return x => x.Experiment.ProblemParameterBoolValues.Any(y => ((y.ProblemParameter.Name == Name) || (y.ProblemParameter.Alias == Name)) && (y.Value == Value));
+          case DataTransfer.EqualityComparison.NotEqual:
+            return x => x.Experiment.ProblemParameterBoolValues.Any(y => ((y.ProblemParameter.Name == Name) || (y.ProblemParameter.Alias == Name)) && (y.Value != Value));
+          default:
+            return x => true;
+        }
+      }
+    }
+
+    public ProblemParameterBoolValueValueFilter(string name, DataTransfer.EqualityComparison comparison, bool value) {
+      Name = name;
+      Comparison = comparison;
+      Value = value;
+    }
+    public ProblemParameterBoolValueValueFilter(DataTransfer.NameEqualityComparisonBoolFilter filter) {
+      Name = filter.Name;
+      Comparison = filter.Comparison;
+      Value = filter.Value;
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/ProblemParameterFloatValueValueFilter.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/ProblemParameterFloatValueValueFilter.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/ProblemParameterFloatValueValueFilter.cs	(revision 5296)
@@ -0,0 +1,65 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Linq;
+using System.Linq.Expressions;
+using HeuristicLab.Services.OKB.DataAccess;
+
+namespace HeuristicLab.Services.OKB {
+  public class ProblemParameterFloatValueValueFilter : IFilter {
+    public string Name { get; protected set; }
+    public DataTransfer.OrdinalComparison Comparison { get; set; }
+    public double Value { get; set; }
+
+    public Expression<Func<Run, bool>> Expression {
+      get {
+        switch (Comparison) {
+          case DataTransfer.OrdinalComparison.Less:
+            return x => x.Experiment.ProblemParameterFloatValues.Any(y => ((y.ProblemParameter.Name == Name) || (y.ProblemParameter.Alias == Name)) && (y.Value < Value));
+          case DataTransfer.OrdinalComparison.LessOrEqual:
+            return x => x.Experiment.ProblemParameterFloatValues.Any(y => ((y.ProblemParameter.Name == Name) || (y.ProblemParameter.Alias == Name)) && (y.Value <= Value));
+          case DataTransfer.OrdinalComparison.Equal:
+            return x => x.Experiment.ProblemParameterFloatValues.Any(y => ((y.ProblemParameter.Name == Name) || (y.ProblemParameter.Alias == Name)) && (y.Value == Value));
+          case DataTransfer.OrdinalComparison.GreaterOrEqual:
+            return x => x.Experiment.ProblemParameterFloatValues.Any(y => ((y.ProblemParameter.Name == Name) || (y.ProblemParameter.Alias == Name)) && (y.Value >= Value));
+          case DataTransfer.OrdinalComparison.Greater:
+            return x => x.Experiment.ProblemParameterFloatValues.Any(y => ((y.ProblemParameter.Name == Name) || (y.ProblemParameter.Alias == Name)) && (y.Value > Value));
+          case DataTransfer.OrdinalComparison.NotEqual:
+            return x => x.Experiment.ProblemParameterFloatValues.Any(y => ((y.ProblemParameter.Name == Name) || (y.ProblemParameter.Alias == Name)) && (y.Value != Value));
+          default:
+            return x => true;
+        }
+      }
+    }
+
+    public ProblemParameterFloatValueValueFilter(string name, DataTransfer.OrdinalComparison comparison, double value) {
+      Name = name;
+      Comparison = comparison;
+      Value = value;
+    }
+    public ProblemParameterFloatValueValueFilter(DataTransfer.NameOrdinalComparisonDoubleFilter filter) {
+      Name = filter.Name;
+      Comparison = filter.Comparison;
+      Value = filter.Value;
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/ProblemParameterIntValueValueFilter.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/ProblemParameterIntValueValueFilter.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/ProblemParameterIntValueValueFilter.cs	(revision 5296)
@@ -0,0 +1,65 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Linq;
+using System.Linq.Expressions;
+using HeuristicLab.Services.OKB.DataAccess;
+
+namespace HeuristicLab.Services.OKB {
+  public class ProblemParameterIntValueValueFilter : IFilter {
+    public string Name { get; protected set; }
+    public DataTransfer.OrdinalComparison Comparison { get; set; }
+    public long Value { get; set; }
+
+    public Expression<Func<Run, bool>> Expression {
+      get {
+        switch (Comparison) {
+          case DataTransfer.OrdinalComparison.Less:
+            return x => x.Experiment.ProblemParameterIntValues.Any(y => ((y.ProblemParameter.Name == Name) || (y.ProblemParameter.Alias == Name)) && (y.Value < Value));
+          case DataTransfer.OrdinalComparison.LessOrEqual:
+            return x => x.Experiment.ProblemParameterIntValues.Any(y => ((y.ProblemParameter.Name == Name) || (y.ProblemParameter.Alias == Name)) && (y.Value <= Value));
+          case DataTransfer.OrdinalComparison.Equal:
+            return x => x.Experiment.ProblemParameterIntValues.Any(y => ((y.ProblemParameter.Name == Name) || (y.ProblemParameter.Alias == Name)) && (y.Value == Value));
+          case DataTransfer.OrdinalComparison.GreaterOrEqual:
+            return x => x.Experiment.ProblemParameterIntValues.Any(y => ((y.ProblemParameter.Name == Name) || (y.ProblemParameter.Alias == Name)) && (y.Value >= Value));
+          case DataTransfer.OrdinalComparison.Greater:
+            return x => x.Experiment.ProblemParameterIntValues.Any(y => ((y.ProblemParameter.Name == Name) || (y.ProblemParameter.Alias == Name)) && (y.Value > Value));
+          case DataTransfer.OrdinalComparison.NotEqual:
+            return x => x.Experiment.ProblemParameterIntValues.Any(y => ((y.ProblemParameter.Name == Name) || (y.ProblemParameter.Alias == Name)) && (y.Value != Value));
+          default:
+            return x => true;
+        }
+      }
+    }
+
+    public ProblemParameterIntValueValueFilter(string name, DataTransfer.OrdinalComparison comparison, long value) {
+      Name = name;
+      Comparison = comparison;
+      Value = value;
+    }
+    public ProblemParameterIntValueValueFilter(DataTransfer.NameOrdinalComparisonLongFilter filter) {
+      Name = filter.Name;
+      Comparison = filter.Comparison;
+      Value = filter.Value;
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/ProblemParameterNameFilter.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/ProblemParameterNameFilter.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/ProblemParameterNameFilter.cs	(revision 5296)
@@ -0,0 +1,58 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Linq;
+using System.Linq.Expressions;
+using HeuristicLab.Services.OKB.DataAccess;
+
+namespace HeuristicLab.Services.OKB {
+  public class ProblemParameterNameFilter : IFilter {
+    public DataTransfer.SetComparison Comparison { get; set; }
+    public string Value { get; set; }
+
+    public Expression<Func<Run, bool>> Expression {
+      get {
+        switch (Comparison) {
+          case DataTransfer.SetComparison.Equal:
+            return x => x.Experiment.Problem.ProblemParameters.Any(y => (y.Name == Value) || (y.Alias == Value));
+          case DataTransfer.SetComparison.NotEqual:
+            return x => x.Experiment.Problem.ProblemParameters.All(y => (y.Name != Value) && (y.Alias != Value));
+          case DataTransfer.SetComparison.Contains:
+            return x => x.Experiment.Problem.ProblemParameters.Any(y => y.Name.Contains(Value) || y.Alias.Contains(Value));
+          case DataTransfer.SetComparison.NotContains:
+            return x => x.Experiment.Problem.ProblemParameters.All(y => !y.Name.Contains(Value) && !y.Alias.Contains(Value));
+          default:
+            return x => true;
+        }
+      }
+    }
+
+    public ProblemParameterNameFilter(DataTransfer.SetComparison comparison, string value) {
+      Comparison = comparison;
+      Value = value;
+    }
+    public ProblemParameterNameFilter(DataTransfer.SetComparisonStringFilter filter) {
+      Comparison = filter.Comparison;
+      Value = filter.Value;
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/ProblemParameterStringValueValueFilter.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/ProblemParameterStringValueValueFilter.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/ProblemParameterStringValueValueFilter.cs	(revision 5296)
@@ -0,0 +1,61 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Linq;
+using System.Linq.Expressions;
+using HeuristicLab.Services.OKB.DataAccess;
+
+namespace HeuristicLab.Services.OKB {
+  public class ProblemParameterStringValueValueFilter : IFilter {
+    public string Name { get; protected set; }
+    public DataTransfer.SetComparison Comparison { get; set; }
+    public string Value { get; set; }
+
+    public Expression<Func<Run, bool>> Expression {
+      get {
+        switch (Comparison) {
+          case DataTransfer.SetComparison.Equal:
+            return x => x.Experiment.ProblemParameterStringValues.Any(y => ((y.ProblemParameter.Name == Name) || (y.ProblemParameter.Alias == Name)) && (y.Value == Value));
+          case DataTransfer.SetComparison.NotEqual:
+            return x => x.Experiment.ProblemParameterStringValues.Any(y => ((y.ProblemParameter.Name == Name) || (y.ProblemParameter.Alias == Name)) && (y.Value != Value));
+          case DataTransfer.SetComparison.Contains:
+            return x => x.Experiment.ProblemParameterStringValues.Any(y => ((y.ProblemParameter.Name == Name) || (y.ProblemParameter.Alias == Name)) && y.Value.Contains(Value));
+          case DataTransfer.SetComparison.NotContains:
+            return x => x.Experiment.ProblemParameterStringValues.Any(y => ((y.ProblemParameter.Name == Name) || (y.ProblemParameter.Alias == Name)) && !y.Value.Contains(Value));
+          default:
+            return x => true;
+        }
+      }
+    }
+
+    public ProblemParameterStringValueValueFilter(string name, DataTransfer.SetComparison comparison, string value) {
+      Name = name;
+      Comparison = comparison;
+      Value = value;
+    }
+    public ProblemParameterStringValueValueFilter(DataTransfer.NameSetComparisonStringFilter filter) {
+      Name = filter.Name;
+      Comparison = filter.Comparison;
+      Value = filter.Value;
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/ProblemPlatformNameFilter.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/ProblemPlatformNameFilter.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/ProblemPlatformNameFilter.cs	(revision 5296)
@@ -0,0 +1,57 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Linq.Expressions;
+using HeuristicLab.Services.OKB.DataAccess;
+
+namespace HeuristicLab.Services.OKB {
+  public class ProblemPlatformNameFilter : IFilter {
+    public DataTransfer.SetComparison Comparison { get; set; }
+    public string Value { get; set; }
+
+    public Expression<Func<Run, bool>> Expression {
+      get {
+        switch (Comparison) {
+          case DataTransfer.SetComparison.Equal:
+            return x => x.Experiment.Problem.Platform.Name == Value;
+          case DataTransfer.SetComparison.NotEqual:
+            return x => x.Experiment.Problem.Platform.Name != Value;
+          case DataTransfer.SetComparison.Contains:
+            return x => x.Experiment.Problem.Platform.Name.Contains(Value);
+          case DataTransfer.SetComparison.NotContains:
+            return x => !x.Experiment.Problem.Platform.Name.Contains(Value);
+          default:
+            return x => true;
+        }
+      }
+    }
+
+    public ProblemPlatformNameFilter(DataTransfer.SetComparison comparison, string value) {
+      Comparison = comparison;
+      Value = value;
+    }
+    public ProblemPlatformNameFilter(DataTransfer.SetComparisonStringFilter filter) {
+      Comparison = filter.Comparison;
+      Value = filter.Value;
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/ResultBlobValueDataTypeNameFilter.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/ResultBlobValueDataTypeNameFilter.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/ResultBlobValueDataTypeNameFilter.cs	(revision 5296)
@@ -0,0 +1,61 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Linq;
+using System.Linq.Expressions;
+using HeuristicLab.Services.OKB.DataAccess;
+
+namespace HeuristicLab.Services.OKB {
+  public class ResultBlobValueDataTypeNameFilter : IFilter {
+    public string Name { get; protected set; }
+    public DataTransfer.SetComparison Comparison { get; set; }
+    public string Value { get; set; }
+
+    public Expression<Func<Run, bool>> Expression {
+      get {
+        switch (Comparison) {
+          case DataTransfer.SetComparison.Equal:
+            return x => x.ResultBlobValues.Any(y => ((y.Result.Name == Name) || (y.Result.Alias == Name)) && ((y.DataType.Name == Value) || (y.DataType.TypeName == Value)));
+          case DataTransfer.SetComparison.NotEqual:
+            return x => x.ResultBlobValues.Any(y => ((y.Result.Name == Name) || (y.Result.Alias == Name)) && ((y.DataType.Name != Value) && (!(y.DataType.TypeName != Value))));
+          case DataTransfer.SetComparison.Contains:
+            return x => x.ResultBlobValues.Any(y => ((y.Result.Name == Name) || (y.Result.Alias == Name)) && (y.DataType.Name.Contains(Value) || y.DataType.TypeName.Contains(Value)));
+          case DataTransfer.SetComparison.NotContains:
+            return x => x.ResultBlobValues.Any(y => ((y.Result.Name == Name) || (y.Result.Alias == Name)) && (!y.DataType.Name.Contains(Value) && !y.DataType.TypeName.Contains(Value)));
+          default:
+            return x => true;
+        }
+      }
+    }
+
+    public ResultBlobValueDataTypeNameFilter(string name, DataTransfer.SetComparison comparison, string value) {
+      Name = name;
+      Comparison = comparison;
+      Value = value;
+    }
+    public ResultBlobValueDataTypeNameFilter(DataTransfer.NameSetComparisonStringFilter filter) {
+      Name = filter.Name;
+      Comparison = filter.Comparison;
+      Value = filter.Value;
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/ResultBlobValueValueFilter.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/ResultBlobValueValueFilter.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/ResultBlobValueValueFilter.cs	(revision 5296)
@@ -0,0 +1,57 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Linq;
+using System.Linq.Expressions;
+using HeuristicLab.Services.OKB.DataAccess;
+
+namespace HeuristicLab.Services.OKB {
+  public class ResultBlobValueValueFilter : IFilter {
+    public string Name { get; protected set; }
+    public DataTransfer.EqualityComparison Comparison { get; set; }
+    public byte[] Value { get; set; }
+
+    public Expression<Func<Run, bool>> Expression {
+      get {
+        switch (Comparison) {
+          case DataTransfer.EqualityComparison.Equal:
+            return x => x.ResultBlobValues.Any(y => ((y.Result.Name == Name) || (y.Result.Alias == Name)) && (y.Value == Value));
+          case DataTransfer.EqualityComparison.NotEqual:
+            return x => x.ResultBlobValues.Any(y => ((y.Result.Name == Name) || (y.Result.Alias == Name)) && (y.Value != Value));
+          default:
+            return x => true;
+        }
+      }
+    }
+
+    public ResultBlobValueValueFilter(string name, DataTransfer.EqualityComparison comparison, byte[] value) {
+      Name = name;
+      Comparison = comparison;
+      Value = value;
+    }
+    public ResultBlobValueValueFilter(DataTransfer.NameEqualityComparisonByteArrayFilter filter) {
+      Name = filter.Name;
+      Comparison = filter.Comparison;
+      Value = filter.Value;
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/ResultBoolValueValueFilter.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/ResultBoolValueValueFilter.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/ResultBoolValueValueFilter.cs	(revision 5296)
@@ -0,0 +1,57 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Linq;
+using System.Linq.Expressions;
+using HeuristicLab.Services.OKB.DataAccess;
+
+namespace HeuristicLab.Services.OKB {
+  public class ResultBoolValueValueFilter : IFilter {
+    public string Name { get; protected set; }
+    public DataTransfer.EqualityComparison Comparison { get; set; }
+    public bool Value { get; set; }
+
+    public Expression<Func<Run, bool>> Expression {
+      get {
+        switch (Comparison) {
+          case DataTransfer.EqualityComparison.Equal:
+            return x => x.ResultBoolValues.Any(y => ((y.Result.Name == Name) || (y.Result.Alias == Name)) && (y.Value == Value));
+          case DataTransfer.EqualityComparison.NotEqual:
+            return x => x.ResultBoolValues.Any(y => ((y.Result.Name == Name) || (y.Result.Alias == Name)) && (y.Value != Value));
+          default:
+            return x => true;
+        }
+      }
+    }
+
+    public ResultBoolValueValueFilter(string name, DataTransfer.EqualityComparison comparison, bool value) {
+      Name = name;
+      Comparison = comparison;
+      Value = value;
+    }
+    public ResultBoolValueValueFilter(DataTransfer.NameEqualityComparisonBoolFilter filter) {
+      Name = filter.Name;
+      Comparison = filter.Comparison;
+      Value = filter.Value;
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/ResultFloatValueValueFilter.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/ResultFloatValueValueFilter.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/ResultFloatValueValueFilter.cs	(revision 5296)
@@ -0,0 +1,65 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Linq;
+using System.Linq.Expressions;
+using HeuristicLab.Services.OKB.DataAccess;
+
+namespace HeuristicLab.Services.OKB {
+  public class ResultFloatValueValueFilter : IFilter {
+    public string Name { get; protected set; }
+    public DataTransfer.OrdinalComparison Comparison { get; set; }
+    public double Value { get; set; }
+
+    public Expression<Func<Run, bool>> Expression {
+      get {
+        switch (Comparison) {
+          case DataTransfer.OrdinalComparison.Less:
+            return x => x.ResultFloatValues.Any(y => ((y.Result.Name == Name) || (y.Result.Alias == Name)) && (y.Value < Value));
+          case DataTransfer.OrdinalComparison.LessOrEqual:
+            return x => x.ResultFloatValues.Any(y => ((y.Result.Name == Name) || (y.Result.Alias == Name)) && (y.Value <= Value));
+          case DataTransfer.OrdinalComparison.Equal:
+            return x => x.ResultFloatValues.Any(y => ((y.Result.Name == Name) || (y.Result.Alias == Name)) && (y.Value == Value));
+          case DataTransfer.OrdinalComparison.GreaterOrEqual:
+            return x => x.ResultFloatValues.Any(y => ((y.Result.Name == Name) || (y.Result.Alias == Name)) && (y.Value >= Value));
+          case DataTransfer.OrdinalComparison.Greater:
+            return x => x.ResultFloatValues.Any(y => ((y.Result.Name == Name) || (y.Result.Alias == Name)) && (y.Value > Value));
+          case DataTransfer.OrdinalComparison.NotEqual:
+            return x => x.ResultFloatValues.Any(y => ((y.Result.Name == Name) || (y.Result.Alias == Name)) && (y.Value != Value));
+          default:
+            return x => true;
+        }
+      }
+    }
+
+    public ResultFloatValueValueFilter(string name, DataTransfer.OrdinalComparison comparison, double value) {
+      Name = name;
+      Comparison = comparison;
+      Value = value;
+    }
+    public ResultFloatValueValueFilter(DataTransfer.NameOrdinalComparisonDoubleFilter filter) {
+      Name = filter.Name;
+      Comparison = filter.Comparison;
+      Value = filter.Value;
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/ResultIntValueValueFilter.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/ResultIntValueValueFilter.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/ResultIntValueValueFilter.cs	(revision 5296)
@@ -0,0 +1,65 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Linq;
+using System.Linq.Expressions;
+using HeuristicLab.Services.OKB.DataAccess;
+
+namespace HeuristicLab.Services.OKB {
+  public class ResultIntValueValueFilter : IFilter {
+    public string Name { get; protected set; }
+    public DataTransfer.OrdinalComparison Comparison { get; set; }
+    public long Value { get; set; }
+
+    public Expression<Func<Run, bool>> Expression {
+      get {
+        switch (Comparison) {
+          case DataTransfer.OrdinalComparison.Less:
+            return x => x.ResultIntValues.Any(y => ((y.Result.Name == Name) || (y.Result.Alias == Name)) && (y.Value < Value));
+          case DataTransfer.OrdinalComparison.LessOrEqual:
+            return x => x.ResultIntValues.Any(y => ((y.Result.Name == Name) || (y.Result.Alias == Name)) && (y.Value <= Value));
+          case DataTransfer.OrdinalComparison.Equal:
+            return x => x.ResultIntValues.Any(y => ((y.Result.Name == Name) || (y.Result.Alias == Name)) && (y.Value == Value));
+          case DataTransfer.OrdinalComparison.GreaterOrEqual:
+            return x => x.ResultIntValues.Any(y => ((y.Result.Name == Name) || (y.Result.Alias == Name)) && (y.Value >= Value));
+          case DataTransfer.OrdinalComparison.Greater:
+            return x => x.ResultIntValues.Any(y => ((y.Result.Name == Name) || (y.Result.Alias == Name)) && (y.Value > Value));
+          case DataTransfer.OrdinalComparison.NotEqual:
+            return x => x.ResultIntValues.Any(y => ((y.Result.Name == Name) || (y.Result.Alias == Name)) && (y.Value != Value));
+          default:
+            return x => true;
+        }
+      }
+    }
+
+    public ResultIntValueValueFilter(string name, DataTransfer.OrdinalComparison comparison, long value) {
+      Name = name;
+      Comparison = comparison;
+      Value = value;
+    }
+    public ResultIntValueValueFilter(DataTransfer.NameOrdinalComparisonLongFilter filter) {
+      Name = filter.Name;
+      Comparison = filter.Comparison;
+      Value = filter.Value;
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/ResultNameFilter.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/ResultNameFilter.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/ResultNameFilter.cs	(revision 5296)
@@ -0,0 +1,58 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Linq;
+using System.Linq.Expressions;
+using HeuristicLab.Services.OKB.DataAccess;
+
+namespace HeuristicLab.Services.OKB {
+  public class ResultNameFilter : IFilter {
+    public DataTransfer.SetComparison Comparison { get; set; }
+    public string Value { get; set; }
+
+    public Expression<Func<Run, bool>> Expression {
+      get {
+        switch (Comparison) {
+          case DataTransfer.SetComparison.Equal:
+            return x => x.Experiment.Algorithm.Results.Any(y => (y.Name == Value) || (y.Alias == Value));
+          case DataTransfer.SetComparison.NotEqual:
+            return x => x.Experiment.Algorithm.Results.All(y => (y.Name != Value) && (y.Alias != Value));
+          case DataTransfer.SetComparison.Contains:
+            return x => x.Experiment.Algorithm.Results.Any(y => y.Name.Contains(Value) || y.Alias.Contains(Value));
+          case DataTransfer.SetComparison.NotContains:
+            return x => x.Experiment.Algorithm.Results.All(y => !y.Name.Contains(Value) && !y.Alias.Contains(Value));
+          default:
+            return x => true;
+        }
+      }
+    }
+
+    public ResultNameFilter(DataTransfer.SetComparison comparison, string value) {
+      Comparison = comparison;
+      Value = value;
+    }
+    public ResultNameFilter(DataTransfer.SetComparisonStringFilter filter) {
+      Comparison = filter.Comparison;
+      Value = filter.Value;
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/ResultStringValueValueFilter.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/ResultStringValueValueFilter.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/ResultStringValueValueFilter.cs	(revision 5296)
@@ -0,0 +1,61 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Linq;
+using System.Linq.Expressions;
+using HeuristicLab.Services.OKB.DataAccess;
+
+namespace HeuristicLab.Services.OKB {
+  public class ResultStringValueValueFilter : IFilter {
+    public string Name { get; protected set; }
+    public DataTransfer.SetComparison Comparison { get; set; }
+    public string Value { get; set; }
+
+    public Expression<Func<Run, bool>> Expression {
+      get {
+        switch (Comparison) {
+          case DataTransfer.SetComparison.Equal:
+            return x => x.ResultStringValues.Any(y => ((y.Result.Name == Name) || (y.Result.Alias == Name)) && (y.Value == Value));
+          case DataTransfer.SetComparison.NotEqual:
+            return x => x.ResultStringValues.Any(y => ((y.Result.Name == Name) || (y.Result.Alias == Name)) && (y.Value != Value));
+          case DataTransfer.SetComparison.Contains:
+            return x => x.ResultStringValues.Any(y => ((y.Result.Name == Name) || (y.Result.Alias == Name)) && y.Value.Contains(Value));
+          case DataTransfer.SetComparison.NotContains:
+            return x => x.ResultStringValues.Any(y => ((y.Result.Name == Name) || (y.Result.Alias == Name)) && !y.Value.Contains(Value));
+          default:
+            return x => true;
+        }
+      }
+    }
+
+    public ResultStringValueValueFilter(string name, DataTransfer.SetComparison comparison, string value) {
+      Name = name;
+      Comparison = comparison;
+      Value = value;
+    }
+    public ResultStringValueValueFilter(DataTransfer.NameSetComparisonStringFilter filter) {
+      Name = filter.Name;
+      Comparison = filter.Comparison;
+      Value = filter.Value;
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/RunClientNameFilter.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/RunClientNameFilter.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/RunClientNameFilter.cs	(revision 5296)
@@ -0,0 +1,57 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Linq.Expressions;
+using HeuristicLab.Services.OKB.DataAccess;
+
+namespace HeuristicLab.Services.OKB {
+  public class RunClientNameFilter : IFilter {
+    public DataTransfer.SetComparison Comparison { get; set; }
+    public string Value { get; set; }
+
+    public Expression<Func<Run, bool>> Expression {
+      get {
+        switch (Comparison) {
+          case DataTransfer.SetComparison.Equal:
+            throw new NotSupportedException();
+          case DataTransfer.SetComparison.NotEqual:
+            throw new NotSupportedException();
+          case DataTransfer.SetComparison.Contains:
+            throw new NotSupportedException();
+          case DataTransfer.SetComparison.NotContains:
+            throw new NotSupportedException();
+          default:
+            return x => true;
+        }
+      }
+    }
+
+    public RunClientNameFilter(DataTransfer.SetComparison comparison, string value) {
+      Comparison = comparison;
+      Value = value;
+    }
+    public RunClientNameFilter(DataTransfer.SetComparisonStringFilter filter) {
+      Comparison = filter.Comparison;
+      Value = filter.Value;
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/RunCreatedDateFilter.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/RunCreatedDateFilter.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/RunCreatedDateFilter.cs	(revision 5296)
@@ -0,0 +1,61 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Linq.Expressions;
+using HeuristicLab.Services.OKB.DataAccess;
+
+namespace HeuristicLab.Services.OKB {
+  public class RunCreatedDateFilter : IFilter {
+    public DataTransfer.OrdinalComparison Comparison { get; set; }
+    public DateTime Value { get; set; }
+
+    public Expression<Func<Run, bool>> Expression {
+      get {
+        switch (Comparison) {
+          case DataTransfer.OrdinalComparison.Less:
+            return x => x.CreatedDate < Value;
+          case DataTransfer.OrdinalComparison.LessOrEqual:
+            return x => x.CreatedDate <= Value;
+          case DataTransfer.OrdinalComparison.Equal:
+            return x => x.CreatedDate == Value;
+          case DataTransfer.OrdinalComparison.GreaterOrEqual:
+            return x => x.CreatedDate >= Value;
+          case DataTransfer.OrdinalComparison.Greater:
+            return x => x.CreatedDate > Value;
+          case DataTransfer.OrdinalComparison.NotEqual:
+            return x => x.CreatedDate != Value;
+          default:
+            return x => true;
+        }
+      }
+    }
+
+    public RunCreatedDateFilter(DataTransfer.OrdinalComparison comparison, DateTime value) {
+      Comparison = comparison;
+      Value = value;
+    }
+    public RunCreatedDateFilter(DataTransfer.OrdinalComparisonDateTimeFilter filter) {
+      Comparison = filter.Comparison;
+      Value = filter.Value;
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/RunRandomSeedFilter.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/RunRandomSeedFilter.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/RunRandomSeedFilter.cs	(revision 5296)
@@ -0,0 +1,61 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Linq.Expressions;
+using HeuristicLab.Services.OKB.DataAccess;
+
+namespace HeuristicLab.Services.OKB {
+  public class RunRandomSeedFilter : IFilter {
+    public DataTransfer.OrdinalComparison Comparison { get; set; }
+    public long Value { get; set; }
+
+    public Expression<Func<Run, bool>> Expression {
+      get {
+        switch (Comparison) {
+          case DataTransfer.OrdinalComparison.Less:
+            return x => x.RandomSeed < Value;
+          case DataTransfer.OrdinalComparison.LessOrEqual:
+            return x => x.RandomSeed <= Value;
+          case DataTransfer.OrdinalComparison.Equal:
+            return x => x.RandomSeed == Value;
+          case DataTransfer.OrdinalComparison.GreaterOrEqual:
+            return x => x.RandomSeed >= Value;
+          case DataTransfer.OrdinalComparison.Greater:
+            return x => x.RandomSeed > Value;
+          case DataTransfer.OrdinalComparison.NotEqual:
+            return x => x.RandomSeed != Value;
+          default:
+            return x => true;
+        }
+      }
+    }
+
+    public RunRandomSeedFilter(DataTransfer.OrdinalComparison comparison, long value) {
+      Comparison = comparison;
+      Value = value;
+    }
+    public RunRandomSeedFilter(DataTransfer.OrdinalComparisonLongFilter filter) {
+      Comparison = filter.Comparison;
+      Value = filter.Value;
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/RunUserNameFilter.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/RunUserNameFilter.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Filters/RunUserNameFilter.cs	(revision 5296)
@@ -0,0 +1,57 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Linq.Expressions;
+using HeuristicLab.Services.OKB.DataAccess;
+
+namespace HeuristicLab.Services.OKB {
+  public class RunUserNameFilter : IFilter {
+    public DataTransfer.SetComparison Comparison { get; set; }
+    public string Value { get; set; }
+
+    public Expression<Func<Run, bool>> Expression {
+      get {
+        switch (Comparison) {
+          case DataTransfer.SetComparison.Equal:
+            throw new NotSupportedException();
+          case DataTransfer.SetComparison.NotEqual:
+            throw new NotSupportedException();
+          case DataTransfer.SetComparison.Contains:
+            throw new NotSupportedException();
+          case DataTransfer.SetComparison.NotContains:
+            throw new NotSupportedException();
+          default:
+            return x => true;
+        }
+      }
+    }
+
+    public RunUserNameFilter(DataTransfer.SetComparison comparison, string value) {
+      Comparison = comparison;
+      Value = value;
+    }
+    public RunUserNameFilter(DataTransfer.SetComparisonStringFilter filter) {
+      Comparison = filter.Comparison;
+      Value = filter.Value;
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/GenericEqualityComparer.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/GenericEqualityComparer.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/GenericEqualityComparer.cs	(revision 5296)
@@ -0,0 +1,41 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+
+namespace HeuristicLab.Services.OKB {
+  public class GenericEqualityComparer<T> : IEqualityComparer<T> {
+    private Func<T, T, bool> comparison;
+
+    public GenericEqualityComparer(Func<T, T, bool> comparison) {
+      this.comparison = comparison;
+    }
+
+    public bool Equals(T x, T y) {
+      return comparison(x, y);
+    }
+
+    public int GetHashCode(T obj) {
+      return obj.GetHashCode();
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/HeuristicLab.Services.OKB-3.3.csproj
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/HeuristicLab.Services.OKB-3.3.csproj	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/HeuristicLab.Services.OKB-3.3.csproj	(revision 5296)
@@ -0,0 +1,209 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>8.0.50727</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{766DA4B7-2A0E-4CDE-8F90-93D8B1AD62CF}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Services.OKB</RootNamespace>
+    <AssemblyName>HeuristicLab.Services.OKB-3.3</AssemblyName>
+    <ProjectTypeGuids>{3D9AD99F-2412-4246-B90B-4EAA41C64699};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+    <StartArguments>/client:"WcfTestClient.exe"</StartArguments>
+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+    <TargetFrameworkProfile>
+    </TargetFrameworkProfile>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup>
+    <SignAssembly>true</SignAssembly>
+  </PropertyGroup>
+  <PropertyGroup>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <CodeAnalysisLogFile>bin\Debug\HeuristicLab.Services.OKB-3.3.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
+    <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
+    <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRuleSetDirectories>;C:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
+    <CodeAnalysisIgnoreBuiltInRuleSets>false</CodeAnalysisIgnoreBuiltInRuleSets>
+    <CodeAnalysisRuleDirectories>;C:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
+    <CodeAnalysisIgnoreBuiltInRules>false</CodeAnalysisIgnoreBuiltInRules>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <CodeAnalysisLogFile>bin\Release\HeuristicLab.Services.OKB-3.3.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
+    <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
+    <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRuleSetDirectories>;C:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
+    <CodeAnalysisIgnoreBuiltInRuleSets>false</CodeAnalysisIgnoreBuiltInRuleSets>
+    <CodeAnalysisRuleDirectories>;C:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
+    <CodeAnalysisIgnoreBuiltInRules>false</CodeAnalysisIgnoreBuiltInRules>
+    <CodeAnalysisFailOnMissingRules>false</CodeAnalysisFailOnMissingRules>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <CodeAnalysisLogFile>bin\Debug\HeuristicLab.Services.OKB-3.3.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
+    <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
+    <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRuleSetDirectories>;C:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
+    <CodeAnalysisIgnoreBuiltInRuleSets>false</CodeAnalysisIgnoreBuiltInRuleSets>
+    <CodeAnalysisRuleDirectories>;C:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
+    <CodeAnalysisIgnoreBuiltInRules>false</CodeAnalysisIgnoreBuiltInRules>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <CodeAnalysisLogFile>bin\Release\HeuristicLab.Services.OKB-3.3.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
+    <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
+    <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRuleSetDirectories>;C:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
+    <CodeAnalysisIgnoreBuiltInRuleSets>false</CodeAnalysisIgnoreBuiltInRuleSets>
+    <CodeAnalysisRuleDirectories>;C:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
+    <CodeAnalysisIgnoreBuiltInRules>false</CodeAnalysisIgnoreBuiltInRules>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System" />
+    <Reference Include="System.Configuration" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Data.Linq" />
+    <Reference Include="System.Runtime.Serialization" />
+    <Reference Include="System.ServiceModel" />
+    <Reference Include="System.Web" />
+    <Reference Include="System.Web.ApplicationServices" />
+    <Reference Include="System.Xml" />
+    <Reference Include="System.Xml.Linq" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Convert.cs" />
+    <Compile Include="AuthenticationService.cs" />
+    <Compile Include="Filters\AlgorithmParameterBlobValueDataTypeNameFilter.cs" />
+    <Compile Include="Filters\AlgorithmParameterBlobValueValueFilter.cs" />
+    <Compile Include="Filters\AlgorithmParameterBoolValueValueFilter.cs" />
+    <Compile Include="Filters\AlgorithmParameterFloatValueValueFilter.cs" />
+    <Compile Include="Filters\AlgorithmParameterIntValueValueFilter.cs" />
+    <Compile Include="Filters\AlgorithmParameterStringValueValueFilter.cs" />
+    <Compile Include="Filters\AlgorithmParameterNameFilter.cs" />
+    <Compile Include="Filters\AlgorithmNameFilter.cs" />
+    <Compile Include="Filters\AlgorithmClassNameFilter.cs" />
+    <Compile Include="Filters\AlgorithmPlatformNameFilter.cs" />
+    <Compile Include="Filters\AlgorithmDataDataTypeNameFilter.cs" />
+    <Compile Include="Filters\AndFilter.cs" />
+    <Compile Include="Filters\OrFilter.cs" />
+    <Compile Include="Filters\ProblemDataDataTypeNameFilter.cs" />
+    <Compile Include="Filters\ProblemPlatformNameFilter.cs" />
+    <Compile Include="Filters\ProblemClassNameFilter.cs" />
+    <Compile Include="Filters\ProblemNameFilter.cs" />
+    <Compile Include="Filters\ProblemParameterNameFilter.cs" />
+    <Compile Include="Filters\ResultNameFilter.cs" />
+    <Compile Include="Filters\RunCreatedDateFilter.cs" />
+    <Compile Include="Filters\RunRandomSeedFilter.cs" />
+    <Compile Include="Filters\RunClientNameFilter.cs" />
+    <Compile Include="Filters\RunUserNameFilter.cs" />
+    <Compile Include="Filters\ProblemParameterBlobValueDataTypeNameFilter.cs" />
+    <Compile Include="Filters\ProblemParameterBlobValueValueFilter.cs" />
+    <Compile Include="Filters\ProblemParameterBoolValueValueFilter.cs" />
+    <Compile Include="Filters\ProblemParameterFloatValueValueFilter.cs" />
+    <Compile Include="Filters\ProblemParameterIntValueValueFilter.cs" />
+    <Compile Include="Filters\ProblemParameterStringValueValueFilter.cs" />
+    <Compile Include="Filters\ResultBoolValueValueFilter.cs" />
+    <Compile Include="Filters\ResultBlobValueDataTypeNameFilter.cs" />
+    <Compile Include="Filters\ResultBlobValueValueFilter.cs" />
+    <Compile Include="Filters\ResultIntValueValueFilter.cs" />
+    <Compile Include="Filters\ResultStringValueValueFilter.cs" />
+    <Compile Include="Filters\ResultFloatValueValueFilter.cs" />
+    <Compile Include="GenericEqualityComparer.cs" />
+    <Compile Include="ExperimentEqualityComparer.cs" />
+    <Compile Include="Filters\IFilter.cs" />
+    <Compile Include="Interfaces\IAuthenticationService.cs" />
+    <Compile Include="Interfaces\IOKBService.cs" />
+    <Compile Include="OKBService.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="app.config">
+      <SubType>Designer</SubType>
+    </None>
+    <None Include="HeuristicLab.snk" />
+    <None Include="Properties\AssemblyInfo.frame" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\HeuristicLab.Services.OKB.DataAccess\3.3\HeuristicLab.Services.OKB.DataAccess-3.3.csproj">
+      <Project>{E36BE58F-F3CE-40BB-9AB3-9F9E30AD5CCF}</Project>
+      <Name>HeuristicLab.Services.OKB.DataAccess-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Services.OKB.DataTransfer\3.3\HeuristicLab.Services.OKB.DataTransfer-3.3.csproj">
+      <Project>{209FD7A1-DFB2-4B9F-9268-B95E886B2F7A}</Project>
+      <Name>HeuristicLab.Services.OKB.DataTransfer-3.3</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
+  <ProjectExtensions>
+    <VisualStudio>
+      <FlavorProperties GUID="{3D9AD99F-2412-4246-B90B-4EAA41C64699}">
+        <WcfProjectProperties>
+          <AutoStart>True</AutoStart>
+        </WcfProjectProperties>
+      </FlavorProperties>
+    </VisualStudio>
+  </ProjectExtensions>
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Interfaces/IAuthenticationService.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Interfaces/IAuthenticationService.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Interfaces/IAuthenticationService.cs	(revision 5296)
@@ -0,0 +1,39 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Net.Security;
+using System.ServiceModel;
+using HeuristicLab.Services.OKB.DataTransfer;
+
+namespace HeuristicLab.Services.OKB {
+  /// <summary>
+  /// Interface of the OKB authentication service.
+  /// </summary>
+  [ServiceContract(ProtectionLevel = ProtectionLevel.EncryptAndSign)]
+  public interface IAuthenticationService {
+    [OperationContract]
+    User GetUser(Guid id);
+    [OperationContract]
+    IEnumerable<User> GetUsers();
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Interfaces/IDataService.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Interfaces/IDataService.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Interfaces/IDataService.cs	(revision 5296)
@@ -0,0 +1,94 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Net.Security;
+using System.ServiceModel;
+
+namespace HeuristicLab.Services.OKB {
+  /// <summary>
+  /// Choose between <see cref="Algorithm"/> or <see cref="Problem"/>.
+  /// </summary>
+  public enum EntityType {
+    /// <summary>
+    /// Use <see cref="Algorithm"/> as entity type.
+    /// </summary>
+    Algorithm,
+    /// <summary>
+    /// Use <see cref="Problem"/> as entity type.
+    /// </summary>
+    Problem
+  };
+
+  /// <summary>
+  /// Download and upload serialized implementations of <see cref="Algorithm"/>s and <see cref="Problem"/>s.
+  /// The transfer has to be initiate through either <see cref="IDataService.Request"/> or <see cref="IDataService.Submit"/>
+  /// followed by either <see cref="IDataService.GetNextChunk"/> or <see cref="IDataService.SetNextChunk"/> and terminated
+  /// with either <see cref="IDataService.TransferDone"/> or <see cref="IDataService.AbortTransfer"/>.
+  /// </summary>
+  [ServiceContract(SessionMode = SessionMode.Required, ProtectionLevel = ProtectionLevel.EncryptAndSign)]
+  public interface IDataService {
+
+    /// <summary>
+    /// Request the specified <see cref="Algorithm"/> or <see cref="Problem"/>.
+    /// </summary>
+    /// <param name="type">The entity type.</param>
+    /// <param name="id">The entity id.</param>
+    /// <returns>The size of the data blob.</returns>
+    [OperationContract(IsInitiating = true, IsTerminating = false)]
+    int Request(EntityType type, int id);
+
+    /// <summary>
+    /// Prepare submission of the specified <see cref="Algorithm"/> or <see cref="Problem"/>.
+    /// </summary>
+    /// <param name="type">The entity type.</param>
+    /// <param name="id">The entity id.</param>
+    [OperationContract(IsInitiating = true, IsTerminating = false)]
+    void Submit(EntityType type, int id);
+
+    /// <summary>
+    /// Gets the next chunk of bytes.
+    /// </summary>
+    /// <param name="size">The maximum number of bytes to transfer.</param>
+    /// <returns>An array of bytes.</returns>
+    [OperationContract(IsInitiating = false, IsTerminating = false)]
+    byte[] GetNextChunk(int size);
+
+    /// <summary>
+    /// Sets the next chunk of bytes.
+    /// </summary>
+    /// <param name="data">The data.</param>
+    [OperationContract(IsInitiating = false, IsTerminating = false)]
+    void SetNextChunk(byte[] data);
+
+    /// <summary>
+    /// Commits the transaction in case of an upload and closes
+    /// the connection.
+    /// </summary>
+    [OperationContract(IsInitiating = false, IsTerminating = true)]
+    void TransferDone();
+
+    /// <summary>
+    /// Aborts the transfer.
+    /// </summary>
+    [OperationContract(IsInitiating = false, IsTerminating = true)]
+    void AbortTransfer();
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Interfaces/IOKBService.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Interfaces/IOKBService.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Interfaces/IOKBService.cs	(revision 5296)
@@ -0,0 +1,204 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Net.Security;
+using System.ServiceModel;
+using HeuristicLab.Services.OKB.DataTransfer;
+
+namespace HeuristicLab.Services.OKB {
+  /// <summary>
+  /// Interface of the OKB service.
+  /// </summary>
+  [ServiceContract(ProtectionLevel = ProtectionLevel.EncryptAndSign)]
+  public interface IOKBService {
+    #region Platform Methods
+    [OperationContract]
+    Platform GetPlatform(long id);
+    [OperationContract]
+    IEnumerable<Platform> GetPlatforms();
+    [OperationContract]
+    long AddPlatform(Platform dto);
+    [OperationContract]
+    void UpdatePlatform(Platform dto);
+    [OperationContract]
+    void DeletePlatform(long id);
+    #endregion
+
+    #region DataType Methods
+    [OperationContract]
+    DataType GetDataType(long id);
+    [OperationContract]
+    IEnumerable<DataType> GetDataTypes();
+    [OperationContract]
+    long AddDataType(DataType dto);
+    [OperationContract]
+    void UpdateDataType(DataType dto);
+    [OperationContract]
+    void DeleteDataType(long id);
+    #endregion
+
+    #region AlgorithmClass Methods
+    [OperationContract]
+    AlgorithmClass GetAlgorithmClass(long id);
+    [OperationContract]
+    IEnumerable<AlgorithmClass> GetAlgorithmClasses();
+    [OperationContract]
+    long AddAlgorithmClass(AlgorithmClass dto);
+    [OperationContract]
+    void UpdateAlgorithmClass(AlgorithmClass dto);
+    [OperationContract]
+    void DeleteAlgorithmClass(long id);
+    #endregion
+
+    #region Algorithm Methods
+    [OperationContract]
+    Algorithm GetAlgorithm(long id);
+    [OperationContract]
+    IEnumerable<Algorithm> GetAlgorithms();
+    [OperationContract]
+    long AddAlgorithm(Algorithm dto);
+    [OperationContract]
+    void UpdateAlgorithm(Algorithm dto);
+    [OperationContract]
+    void DeleteAlgorithm(long id);
+    [OperationContract]
+    IEnumerable<Guid> GetAlgorithmUsers(long algorithmId);
+    [OperationContract]
+    void UpdateAlgorithmUsers(long algorithmId, IEnumerable<Guid> users);
+    #endregion
+
+    #region AlgorithmData Methods
+    [OperationContract]
+    AlgorithmData GetAlgorithmData(long algorithmId);
+    [OperationContract]
+    void UpdateAlgorithmData(AlgorithmData dto);
+    #endregion
+
+    #region AlgorithmParameter Methods
+    [OperationContract]
+    AlgorithmParameter GetAlgorithmParameter(long id);
+    [OperationContract]
+    IEnumerable<AlgorithmParameter> GetAlgorithmParameters(long algorithmId);
+    [OperationContract]
+    long AddAlgorithmParameter(AlgorithmParameter dto);
+    [OperationContract]
+    void UpdateAlgorithmParameter(AlgorithmParameter dto);
+    [OperationContract]
+    void DeleteAlgorithmParameter(long id);
+    #endregion
+
+    #region ProblemClass Methods
+    [OperationContract]
+    ProblemClass GetProblemClass(long id);
+    [OperationContract]
+    IEnumerable<ProblemClass> GetProblemClasses();
+    [OperationContract]
+    long AddProblemClass(ProblemClass dto);
+    [OperationContract]
+    void UpdateProblemClass(ProblemClass dto);
+    [OperationContract]
+    void DeleteProblemClass(long id);
+    #endregion
+
+    #region Problem Methods
+    [OperationContract]
+    Problem GetProblem(long id);
+    [OperationContract]
+    IEnumerable<Problem> GetProblems();
+    [OperationContract]
+    long AddProblem(Problem dto);
+    [OperationContract]
+    void UpdateProblem(Problem dto);
+    [OperationContract]
+    void DeleteProblem(long id);
+    [OperationContract]
+    IEnumerable<Guid> GetProblemUsers(long problemId);
+    [OperationContract]
+    void UpdateProblemUsers(long problemId, IEnumerable<Guid> users);
+    #endregion
+
+    #region ProblemData Methods
+    [OperationContract]
+    ProblemData GetProblemData(long problemId);
+    [OperationContract]
+    void UpdateProblemData(ProblemData dto);
+    #endregion
+
+    #region ProblemParameter Methods
+    [OperationContract]
+    ProblemParameter GetProblemParameter(long id);
+    [OperationContract]
+    IEnumerable<ProblemParameter> GetProblemParameters(long problemId);
+    [OperationContract]
+    long AddProblemParameter(ProblemParameter dto);
+    [OperationContract]
+    void UpdateProblemParameter(ProblemParameter dto);
+    [OperationContract]
+    void DeleteProblemParameter(long id);
+    #endregion
+
+    #region Result Methods
+    [OperationContract]
+    Result GetResult(long id);
+    [OperationContract]
+    IEnumerable<Result> GetResults(long algorithmId);
+    [OperationContract]
+    long AddResult(Result dto);
+    [OperationContract]
+    void UpdateResult(Result dto);
+    [OperationContract]
+    void DeleteResult(long id);
+    #endregion
+
+    #region Experiment Methods
+    [OperationContract]
+    Experiment GetExperiment(long id);
+    [OperationContract]
+    IEnumerable<Experiment> GetExperiments(long algorithmId, long problemId);
+    [OperationContract]
+    long AddExperiment(Experiment dto);
+    [OperationContract]
+    void DeleteExperiment(long id);
+    #endregion
+
+    #region Run Methods
+    [OperationContract]
+    Run GetRun(long id);
+    [OperationContract]
+    IEnumerable<Run> GetRuns(long experimentId);
+    [OperationContract]
+    long AddRun(Run dto);
+    [OperationContract]
+    void DeleteRun(long id);
+    #endregion
+
+    #region Query Methods
+    [OperationContract]
+    IEnumerable<Filter> GetFilters();
+    [OperationContract]
+    long QueryNumberOfRuns(Filter filter);
+    [OperationContract]
+    IEnumerable<Run> QueryRuns(Filter filter);
+    #endregion
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Interfaces/IQueryService.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Interfaces/IQueryService.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Interfaces/IQueryService.cs	(revision 5296)
@@ -0,0 +1,71 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Data;
+using System.Net.Security;
+using System.ServiceModel;
+
+namespace HeuristicLab.Services.OKB {
+  /// <summary>
+  /// Service interface for downloading selected information about <see cref="Experiment"/> <see cref="Run"/>s.
+  /// </summary>
+  [ServiceContract(SessionMode = SessionMode.Required, ProtectionLevel = ProtectionLevel.EncryptAndSign)]
+  public interface IQueryService {
+    /// <summary>
+    /// Gets a list of all possible attribute selectors.
+    /// </summary>
+    /// <returns>An array of <see cref="Server.AttributeSelector"/>s</returns>
+    [OperationContract(IsInitiating = true, IsTerminating = true)]
+    AttributeSelector[] GetAllAttributeSelectors();
+
+    /// <summary>
+    /// Prepares the a query using the specified selection criteria.
+    /// </summary>
+    /// <param name="selectors">The list of <see cref="Server.AttributeSelector"/>s.</param>
+    /// <returns>An empty <see cref="DataTable"/> containing only the column headers.</returns>
+    [OperationContract(IsInitiating = true, IsTerminating = false)]
+    DataTable PrepareQuery(AttributeSelector[] selectors);
+
+    /// <summary>
+    /// Gets the number of matching rows for the prepared query
+    /// (see <see cref="IQueryService.PrepareQuery"/>).
+    /// </summary>
+    /// <returns>The number of matching rows.</returns>
+    [OperationContract(IsInitiating = false, IsTerminating = false)]
+    int GetCount();
+
+    /// <summary>
+    /// Fetches the next <paramref name="nRows"/> rows for the 
+    /// prepared query (see <see cref="IQueryService.PrepareQuery"/>).
+    /// </summary>
+    /// <param name="nRows">The maximum number of rows to return.</param>
+    /// <returns>A <see cref="DataTable"/> containing only the next
+    /// <paramref name="nRows"/> rows.</returns>
+    [OperationContract(IsInitiating = false, IsTerminating = false)]
+    DataTable GetNextRows(int nRows);
+
+    /// <summary>
+    /// Terminates the session and closes the connection.
+    /// </summary>
+    [OperationContract(IsInitiating = false, IsTerminating = true)]
+    void Terminate();
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Interfaces/IRunnerService.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Interfaces/IRunnerService.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Interfaces/IRunnerService.cs	(revision 5296)
@@ -0,0 +1,104 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Net.Security;
+using System.ServiceModel;
+using HeuristicLab.Services.OKB.DataAccess;
+
+namespace HeuristicLab.Services.OKB {
+
+  /// <summary>
+  /// Service interface for submitting new <see cref="Experiment"/> <see cref="Run"/>s.
+  /// </summary>
+  [ServiceContract(SessionMode = SessionMode.Required, ProtectionLevel = ProtectionLevel.EncryptAndSign)]
+  public interface IRunnerService {
+    /// <summary>
+    /// Logs the current user in. In case the user or client
+    /// does not exist yet, they are created on the server. This
+    /// method is currently not used for authentication but merely
+    /// for auditing.
+    /// </summary>
+    /// <param name="clientname">The clientname.</param>
+    /// <returns><c>true</c> if the login was successful; <c>false</c> otherwise.</returns>
+    [OperationContract(IsInitiating = true)]
+    bool Login(string clientname);
+
+    /// <summary>
+    /// Gets a <see cref="StarterKit"/>: A partially populated object
+    /// graph to enable selection of algorithm and problem for a certain
+    /// platofrm.
+    /// </summary>
+    /// <param name="platformName">Name of the platform.</param>
+    /// <returns>A <see cref="StarterKit"/>.</returns>
+    [OperationContract(IsInitiating = false)]
+    StarterKit GetStarterKit(string platformName);
+
+    /// <summary>
+    /// Get all necessary information to conduct an experiment. This retrieves the
+    /// <see cref="Algorithm"/>'s:
+    /// <list type="bullet">
+    /// <item><see cref="Parameter"/>s</item>
+    /// <item><see cref="Result"/>s</item>
+    /// <item>and their respective <see cref="DataType"/>s</item>
+    /// </list>
+    /// as well as the <see cref="Problem"/>'s:
+    /// <list>
+    /// <item><see cref="SolutionRepresentation"/></item>
+    /// <item><see cref="Parameter"/>s</item>
+    /// </list>
+    /// </summary>
+    /// <param name="algorithm">The algorithm.</param>
+    /// <param name="problem">The problem.</param>
+    /// <returns>A more complete object graph contained in an
+    /// <see cref="ExperimentKit"/>.</returns>
+    [OperationContract(IsInitiating = false)]
+    ExperimentKit PrepareExperiment(Algorithm algorithm, Problem problem);
+
+    /// <summary>
+    /// Adds the a new <see cref="Experiment"/> <see cref="Run"/>.
+    /// 
+    /// The <see cref="Experiment"/> is created if necessary as well as
+    /// all <see cref="Parameter"/>s and <see cref="Result"/>s. If an
+    /// identical experiment has been conducted before the new run is
+    /// linked to this previous experiment instead.
+    /// </summary>
+    /// <param name="algorithm">The algorithm.</param>
+    /// <param name="problem">The problem.</param>
+    /// <param name="project">The project.</param>
+    [OperationContract(IsInitiating = false)]
+    void AddRun(Algorithm algorithm, Problem problem);
+
+    /// <summary>
+    /// Determines whether this instance is connected.
+    /// </summary>
+    /// <returns>
+    /// 	<c>true</c> if this instance is connected; otherwise, <c>false</c>.
+    /// </returns>
+    [OperationContract(IsInitiating = false)]
+    bool IsConnected();
+
+    /// <summary>
+    /// Logout out and closes the connection.
+    /// </summary>
+    [OperationContract(IsInitiating = false, IsTerminating = true, IsOneWay = true)]
+    void Logout();
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Interfaces/ITableService.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Interfaces/ITableService.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Interfaces/ITableService.cs	(revision 5296)
@@ -0,0 +1,76 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Data;
+using System.Net.Security;
+using System.ServiceModel;
+
+namespace HeuristicLab.Services.OKB {
+  /// <summary>
+  /// Service interface for downloading and uploading data tables.
+  /// </summary>
+  [ServiceContract(SessionMode = SessionMode.Required, ProtectionLevel = ProtectionLevel.EncryptAndSign)]
+  public interface ITableService {
+    /// <summary>
+    /// Prepares the data table to be downloaded.
+    /// </summary>
+    /// <param name="tableName">Name of the table.</param>
+    /// <param name="count">The number of rows.</param>
+    /// <returns>An empyt <see cref="DataType"/> that contains just
+    /// the column headers.</returns>
+    [OperationContract(IsInitiating = true)]
+    DataTable PrepareDataTable(string tableName, out int count);
+
+    /// <summary>
+    /// Gets the next few rows.
+    /// </summary>
+    /// <param name="count">The maximum number of rows to return.</param>
+    /// <returns>A partial <see cref="DataTable"/> with the
+    /// next few rows.</returns>
+    [OperationContract(IsInitiating = false, IsTerminating = false)]
+    DataTable GetNextRows(int count);
+
+    /// <summary>
+    /// Finishes fetching rows and closes the connection.
+    /// </summary>
+    [OperationContract(IsTerminating = true)]
+    void FinishFetchingRows();
+
+    /// <summary>
+    /// Updates the data table using the partial <see cref="DataTable"/>
+    /// with changed rows.
+    /// </summary>
+    /// <param name="changedRows">The <see cref="DataTable"/> with
+    /// changed rows.</param>
+    /// <param name="tableName">Name of the table.</param>
+    [OperationContract(IsInitiating = true, IsTerminating = true)]
+    void UpdateDataTable(DataTable changedRows, string tableName);
+
+    /// <summary>
+    /// Deletes the selected table rows using the value of the
+    /// "Id" column.
+    /// </summary>
+    /// <param name="ids">The ids.</param>
+    /// <param name="tableName">Name of the table.</param>
+    [OperationContract(IsInitiating = true, IsTerminating = true)]
+    void DeleteTableRows(int[] ids, string tableName);
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/OKBService.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/OKBService.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/OKBService.cs	(revision 5296)
@@ -0,0 +1,863 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Data.Linq;
+using System.Linq;
+using System.ServiceModel;
+using HeuristicLab.Services.OKB.DataAccess;
+
+namespace HeuristicLab.Services.OKB {
+  /// <summary>
+  /// Implementation of the OKB service (interface <see cref="IOKBService"/>).
+  /// </summary>
+  [ServiceBehavior(IncludeExceptionDetailInFaults = true)]
+  public class OKBService : IOKBService {
+    #region Platform Methods
+    public DataTransfer.Platform GetPlatform(long id) {
+      using (OKBDataContext okb = new OKBDataContext()) {
+        return Convert.ToDto(okb.Platforms.FirstOrDefault(x => x.Id == id));
+      }
+    }
+    public IEnumerable<DataTransfer.Platform> GetPlatforms() {
+      using (OKBDataContext okb = new OKBDataContext()) {
+        return okb.Platforms.Select(x => Convert.ToDto(x)).ToArray();
+      }
+    }
+    public long AddPlatform(DataTransfer.Platform dto) {
+      using (OKBDataContext okb = new OKBDataContext()) {
+        DataAccess.Platform entity = Convert.ToEntity(dto); entity.Id = 0;
+        okb.Platforms.InsertOnSubmit(entity);
+        okb.SubmitChanges();
+        return entity.Id;
+      }
+    }
+    public void UpdatePlatform(DataTransfer.Platform dto) {
+      using (OKBDataContext okb = new OKBDataContext()) {
+        DataAccess.Platform entity = okb.Platforms.FirstOrDefault(x => x.Id == dto.Id);
+        Convert.ToEntity(dto, entity);
+        okb.SubmitChanges();
+      }
+    }
+    public void DeletePlatform(long id) {
+      using (OKBDataContext okb = new OKBDataContext()) {
+        DataAccess.Platform entity = okb.Platforms.FirstOrDefault(x => x.Id == id);
+        if (entity != null) okb.Platforms.DeleteOnSubmit(entity);
+        okb.SubmitChanges();
+      }
+    }
+    #endregion
+
+    #region DataType Methods
+    public DataTransfer.DataType GetDataType(long id) {
+      using (OKBDataContext okb = new OKBDataContext()) {
+        return Convert.ToDto(okb.DataTypes.FirstOrDefault(x => x.Id == id));
+      }
+    }
+    public IEnumerable<DataTransfer.DataType> GetDataTypes() {
+      using (OKBDataContext okb = new OKBDataContext()) {
+        return okb.DataTypes.Select(x => Convert.ToDto(x)).ToArray();
+      }
+    }
+    public long AddDataType(DataTransfer.DataType dto) {
+      using (OKBDataContext okb = new OKBDataContext()) {
+        DataAccess.DataType entity = Convert.ToEntity(dto); entity.Id = 0;
+        okb.DataTypes.InsertOnSubmit(entity);
+        okb.SubmitChanges();
+        return entity.Id;
+      }
+    }
+    public void UpdateDataType(DataTransfer.DataType dto) {
+      using (OKBDataContext okb = new OKBDataContext()) {
+        DataAccess.DataType entity = okb.DataTypes.FirstOrDefault(x => x.Id == dto.Id);
+        Convert.ToEntity(dto, entity);
+        okb.SubmitChanges();
+      }
+    }
+    public void DeleteDataType(long id) {
+      using (OKBDataContext okb = new OKBDataContext()) {
+        DataAccess.DataType entity = okb.DataTypes.FirstOrDefault(x => x.Id == id);
+        if (entity != null) okb.DataTypes.DeleteOnSubmit(entity);
+        okb.SubmitChanges();
+      }
+    }
+    #endregion
+
+    #region AlgorithmClass Methods
+    public DataTransfer.AlgorithmClass GetAlgorithmClass(long id) {
+      using (OKBDataContext okb = new OKBDataContext()) {
+        return Convert.ToDto(okb.AlgorithmClasses.FirstOrDefault(x => x.Id == id));
+      }
+    }
+    public IEnumerable<DataTransfer.AlgorithmClass> GetAlgorithmClasses() {
+      using (OKBDataContext okb = new OKBDataContext()) {
+        return okb.AlgorithmClasses.Select(x => Convert.ToDto(x)).ToArray();
+      }
+    }
+    public long AddAlgorithmClass(DataTransfer.AlgorithmClass dto) {
+      using (OKBDataContext okb = new OKBDataContext()) {
+        DataAccess.AlgorithmClass entity = Convert.ToEntity(dto); entity.Id = 0;
+        okb.AlgorithmClasses.InsertOnSubmit(entity);
+        okb.SubmitChanges();
+        return entity.Id;
+      }
+    }
+    public void UpdateAlgorithmClass(DataTransfer.AlgorithmClass dto) {
+      using (OKBDataContext okb = new OKBDataContext()) {
+        DataAccess.AlgorithmClass entity = okb.AlgorithmClasses.FirstOrDefault(x => x.Id == dto.Id);
+        Convert.ToEntity(dto, entity);
+        okb.SubmitChanges();
+      }
+    }
+    public void DeleteAlgorithmClass(long id) {
+      using (OKBDataContext okb = new OKBDataContext()) {
+        DataAccess.AlgorithmClass entity = okb.AlgorithmClasses.FirstOrDefault(x => x.Id == id);
+        if (entity != null) okb.AlgorithmClasses.DeleteOnSubmit(entity);
+        okb.SubmitChanges();
+      }
+    }
+    #endregion
+
+    #region Algorithm Methods
+    public DataTransfer.Algorithm GetAlgorithm(long id) {
+      using (OKBDataContext okb = new OKBDataContext()) {
+        return Convert.ToDto(okb.Algorithms.FirstOrDefault(x => x.Id == id));
+      }
+    }
+    public IEnumerable<DataTransfer.Algorithm> GetAlgorithms() {
+      using (OKBDataContext okb = new OKBDataContext()) {
+        return okb.Algorithms.Select(x => Convert.ToDto(x)).ToArray();
+      }
+    }
+    public long AddAlgorithm(DataTransfer.Algorithm dto) {
+      using (OKBDataContext okb = new OKBDataContext()) {
+        DataAccess.Algorithm entity = Convert.ToEntity(dto); entity.Id = 0;
+        okb.Algorithms.InsertOnSubmit(entity);
+        okb.SubmitChanges();
+        return entity.Id;
+      }
+    }
+    public void UpdateAlgorithm(DataTransfer.Algorithm dto) {
+      using (OKBDataContext okb = new OKBDataContext()) {
+        DataAccess.Algorithm entity = okb.Algorithms.FirstOrDefault(x => x.Id == dto.Id);
+        Convert.ToEntity(dto, entity);
+        okb.SubmitChanges();
+      }
+    }
+    public void DeleteAlgorithm(long id) {
+      using (OKBDataContext okb = new OKBDataContext()) {
+        DataAccess.Algorithm entity = okb.Algorithms.FirstOrDefault(x => x.Id == id);
+        if (entity != null) okb.Algorithms.DeleteOnSubmit(entity);
+        okb.SubmitChanges();
+      }
+    }
+    public IEnumerable<Guid> GetAlgorithmUsers(long algorithmId) {
+      using (OKBDataContext okb = new OKBDataContext()) {
+        return okb.AlgorithmUsers.Where(x => x.AlgorithmId == algorithmId).Select(x => x.UserId).ToArray();
+      }
+    }
+    public void UpdateAlgorithmUsers(long algorithmId, IEnumerable<Guid> users) {
+      using (OKBDataContext okb = new OKBDataContext()) {
+        okb.AlgorithmUsers.DeleteAllOnSubmit(okb.AlgorithmUsers.Where(x => x.AlgorithmId == algorithmId));
+        okb.AlgorithmUsers.InsertAllOnSubmit(users.Select(x => new DataAccess.AlgorithmUser { AlgorithmId = algorithmId, UserId = x }));
+        okb.SubmitChanges();
+      }
+    }
+    #endregion
+
+    #region AlgorithmData Methods
+    public DataTransfer.AlgorithmData GetAlgorithmData(long algorithmId) {
+      using (OKBDataContext okb = new OKBDataContext()) {
+        return Convert.ToDto(okb.AlgorithmDatas.FirstOrDefault(x => x.AlgorithmId == algorithmId));
+      }
+    }
+    public void UpdateAlgorithmData(DataTransfer.AlgorithmData dto) {
+      using (OKBDataContext okb = new OKBDataContext()) {
+        DataAccess.AlgorithmData entity = okb.AlgorithmDatas.FirstOrDefault(x => x.AlgorithmId == dto.AlgorithmId);
+        if (entity == null) okb.AlgorithmDatas.InsertOnSubmit(Convert.ToEntity(dto));
+        else Convert.ToEntity(dto, entity);
+        okb.SubmitChanges();
+      }
+    }
+    #endregion
+
+    #region AlgorithmParameter Methods
+    public DataTransfer.AlgorithmParameter GetAlgorithmParameter(long id) {
+      using (OKBDataContext okb = new OKBDataContext()) {
+        return Convert.ToDto(okb.AlgorithmParameters.FirstOrDefault(x => x.Id == id));
+      }
+    }
+    public IEnumerable<DataTransfer.AlgorithmParameter> GetAlgorithmParameters(long algorithmId) {
+      using (OKBDataContext okb = new OKBDataContext()) {
+        return okb.AlgorithmParameters.Where(x => x.AlgorithmId == algorithmId).Select(x => Convert.ToDto(x)).ToArray();
+      }
+    }
+    public long AddAlgorithmParameter(DataTransfer.AlgorithmParameter dto) {
+      using (OKBDataContext okb = new OKBDataContext()) {
+        DataAccess.AlgorithmParameter entity = Convert.ToEntity(dto); entity.Id = 0;
+        okb.AlgorithmParameters.InsertOnSubmit(entity);
+        okb.SubmitChanges();
+        return entity.Id;
+      }
+    }
+    public void UpdateAlgorithmParameter(DataTransfer.AlgorithmParameter dto) {
+      using (OKBDataContext okb = new OKBDataContext()) {
+        DataAccess.AlgorithmParameter entity = okb.AlgorithmParameters.FirstOrDefault(x => x.Id == dto.Id);
+        Convert.ToEntity(dto, entity);
+        okb.SubmitChanges();
+      }
+    }
+    public void DeleteAlgorithmParameter(long id) {
+      using (OKBDataContext okb = new OKBDataContext()) {
+        DataAccess.AlgorithmParameter entity = okb.AlgorithmParameters.FirstOrDefault(x => x.Id == id);
+        if (entity != null) okb.AlgorithmParameters.DeleteOnSubmit(entity);
+        okb.SubmitChanges();
+      }
+    }
+    #endregion
+
+    #region ProblemClass Methods
+    public DataTransfer.ProblemClass GetProblemClass(long id) {
+      using (OKBDataContext okb = new OKBDataContext()) {
+        return Convert.ToDto(okb.ProblemClasses.FirstOrDefault(x => x.Id == id));
+      }
+    }
+    public IEnumerable<DataTransfer.ProblemClass> GetProblemClasses() {
+      using (OKBDataContext okb = new OKBDataContext()) {
+        return okb.ProblemClasses.Select(x => Convert.ToDto(x)).ToArray();
+      }
+    }
+    public long AddProblemClass(DataTransfer.ProblemClass dto) {
+      using (OKBDataContext okb = new OKBDataContext()) {
+        DataAccess.ProblemClass entity = Convert.ToEntity(dto); entity.Id = 0;
+        okb.ProblemClasses.InsertOnSubmit(entity);
+        okb.SubmitChanges();
+        return entity.Id;
+      }
+    }
+    public void UpdateProblemClass(DataTransfer.ProblemClass dto) {
+      using (OKBDataContext okb = new OKBDataContext()) {
+        DataAccess.ProblemClass entity = okb.ProblemClasses.FirstOrDefault(x => x.Id == dto.Id);
+        Convert.ToEntity(dto, entity);
+        okb.SubmitChanges();
+      }
+    }
+    public void DeleteProblemClass(long id) {
+      using (OKBDataContext okb = new OKBDataContext()) {
+        DataAccess.ProblemClass entity = okb.ProblemClasses.FirstOrDefault(x => x.Id == id);
+        if (entity != null) okb.ProblemClasses.DeleteOnSubmit(entity);
+        okb.SubmitChanges();
+      }
+    }
+    #endregion
+
+    #region Problem Methods
+    public DataTransfer.Problem GetProblem(long id) {
+      using (OKBDataContext okb = new OKBDataContext()) {
+        return Convert.ToDto(okb.Problems.FirstOrDefault(x => x.Id == id));
+      }
+    }
+    public IEnumerable<DataTransfer.Problem> GetProblems() {
+      using (OKBDataContext okb = new OKBDataContext()) {
+        return okb.Problems.Select(x => Convert.ToDto(x)).ToArray();
+      }
+    }
+    public long AddProblem(DataTransfer.Problem dto) {
+      using (OKBDataContext okb = new OKBDataContext()) {
+        DataAccess.Problem entity = Convert.ToEntity(dto); entity.Id = 0;
+        okb.Problems.InsertOnSubmit(entity);
+        okb.SubmitChanges();
+        return entity.Id;
+      }
+    }
+    public void UpdateProblem(DataTransfer.Problem dto) {
+      using (OKBDataContext okb = new OKBDataContext()) {
+        DataAccess.Problem entity = okb.Problems.FirstOrDefault(x => x.Id == dto.Id);
+        Convert.ToEntity(dto, entity);
+        okb.SubmitChanges();
+      }
+    }
+    public void DeleteProblem(long id) {
+      using (OKBDataContext okb = new OKBDataContext()) {
+        DataAccess.Problem entity = okb.Problems.FirstOrDefault(x => x.Id == id);
+        if (entity != null) okb.Problems.DeleteOnSubmit(entity);
+        okb.SubmitChanges();
+      }
+    }
+    public IEnumerable<Guid> GetProblemUsers(long problemId) {
+      using (OKBDataContext okb = new OKBDataContext()) {
+        return okb.ProblemUsers.Where(x => x.ProblemId == problemId).Select(x => x.UserId).ToArray();
+      }
+    }
+    public void UpdateProblemUsers(long problemId, IEnumerable<Guid> users) {
+      using (OKBDataContext okb = new OKBDataContext()) {
+        okb.ProblemUsers.DeleteAllOnSubmit(okb.ProblemUsers.Where(x => x.ProblemId == problemId));
+        okb.ProblemUsers.InsertAllOnSubmit(users.Select(x => new DataAccess.ProblemUser { ProblemId = problemId, UserId = x }));
+        okb.SubmitChanges();
+      }
+    }
+    #endregion
+
+    #region ProblemData Methods
+    public DataTransfer.ProblemData GetProblemData(long problemId) {
+      using (OKBDataContext okb = new OKBDataContext()) {
+        return Convert.ToDto(okb.ProblemDatas.FirstOrDefault(x => x.ProblemId == problemId));
+      }
+    }
+    public void UpdateProblemData(DataTransfer.ProblemData dto) {
+      using (OKBDataContext okb = new OKBDataContext()) {
+        DataAccess.ProblemData entity = okb.ProblemDatas.FirstOrDefault(x => x.ProblemId == dto.ProblemId);
+        if (entity == null) okb.ProblemDatas.InsertOnSubmit(Convert.ToEntity(dto));
+        else Convert.ToEntity(dto, entity);
+        okb.SubmitChanges();
+      }
+    }
+    #endregion
+
+    #region ProblemParameter Methods
+    public DataTransfer.ProblemParameter GetProblemParameter(long id) {
+      using (OKBDataContext okb = new OKBDataContext()) {
+        return Convert.ToDto(okb.ProblemParameters.FirstOrDefault(x => x.Id == id));
+      }
+    }
+    public IEnumerable<DataTransfer.ProblemParameter> GetProblemParameters(long problemId) {
+      using (OKBDataContext okb = new OKBDataContext()) {
+        return okb.ProblemParameters.Where(x => x.ProblemId == problemId).Select(x => Convert.ToDto(x)).ToArray();
+      }
+    }
+    public long AddProblemParameter(DataTransfer.ProblemParameter dto) {
+      using (OKBDataContext okb = new OKBDataContext()) {
+        DataAccess.ProblemParameter entity = Convert.ToEntity(dto); entity.Id = 0;
+        okb.ProblemParameters.InsertOnSubmit(entity);
+        okb.SubmitChanges();
+        return entity.Id;
+      }
+    }
+    public void UpdateProblemParameter(DataTransfer.ProblemParameter dto) {
+      using (OKBDataContext okb = new OKBDataContext()) {
+        DataAccess.ProblemParameter entity = okb.ProblemParameters.FirstOrDefault(x => x.Id == dto.Id);
+        Convert.ToEntity(dto, entity);
+        okb.SubmitChanges();
+      }
+    }
+    public void DeleteProblemParameter(long id) {
+      using (OKBDataContext okb = new OKBDataContext()) {
+        DataAccess.ProblemParameter entity = okb.ProblemParameters.FirstOrDefault(x => x.Id == id);
+        if (entity != null) okb.ProblemParameters.DeleteOnSubmit(entity);
+        okb.SubmitChanges();
+      }
+    }
+    #endregion
+
+    #region Result Methods
+    public DataTransfer.Result GetResult(long id) {
+      using (OKBDataContext okb = new OKBDataContext()) {
+        return Convert.ToDto(okb.Results.FirstOrDefault(x => x.Id == id));
+      }
+    }
+    public IEnumerable<DataTransfer.Result> GetResults(long algorithmId) {
+      using (OKBDataContext okb = new OKBDataContext()) {
+        return okb.Results.Where(x => x.AlgorithmId == algorithmId).Select(x => Convert.ToDto(x)).ToArray();
+      }
+    }
+    public long AddResult(DataTransfer.Result dto) {
+      using (OKBDataContext okb = new OKBDataContext()) {
+        DataAccess.Result entity = Convert.ToEntity(dto); entity.Id = 0;
+        okb.Results.InsertOnSubmit(entity);
+        okb.SubmitChanges();
+        return entity.Id;
+      }
+    }
+    public void UpdateResult(DataTransfer.Result dto) {
+      using (OKBDataContext okb = new OKBDataContext()) {
+        DataAccess.Result entity = okb.Results.FirstOrDefault(x => x.Id == dto.Id);
+        Convert.ToEntity(dto, entity);
+        okb.SubmitChanges();
+      }
+    }
+    public void DeleteResult(long id) {
+      using (OKBDataContext okb = new OKBDataContext()) {
+        DataAccess.Result entity = okb.Results.FirstOrDefault(x => x.Id == id);
+        if (entity != null) okb.Results.DeleteOnSubmit(entity);
+        okb.SubmitChanges();
+      }
+    }
+    #endregion
+
+    #region Experiment Methods
+    public DataTransfer.Experiment GetExperiment(long id) {
+      using (OKBDataContext okb = new OKBDataContext()) {
+        DataLoadOptions dlo = new DataLoadOptions();
+        dlo.LoadWith<Experiment>(x => x.AlgorithmParameterBlobValues);
+        dlo.LoadWith<Experiment>(x => x.AlgorithmParameterBoolValues);
+        dlo.LoadWith<Experiment>(x => x.AlgorithmParameterFloatValues);
+        dlo.LoadWith<Experiment>(x => x.AlgorithmParameterIntValues);
+        dlo.LoadWith<Experiment>(x => x.AlgorithmParameterStringValues);
+        dlo.LoadWith<Experiment>(x => x.ProblemParameterBlobValues);
+        dlo.LoadWith<Experiment>(x => x.ProblemParameterBoolValues);
+        dlo.LoadWith<Experiment>(x => x.ProblemParameterFloatValues);
+        dlo.LoadWith<Experiment>(x => x.ProblemParameterIntValues);
+        dlo.LoadWith<Experiment>(x => x.ProblemParameterStringValues);
+        okb.LoadOptions = dlo;
+        return Convert.ToDto(okb.Experiments.FirstOrDefault(x => x.Id == id));
+      }
+    }
+    public IEnumerable<DataTransfer.Experiment> GetExperiments(long algorithmId, long problemId) {
+      using (OKBDataContext okb = new OKBDataContext()) {
+        DataLoadOptions dlo = new DataLoadOptions();
+        dlo.LoadWith<Experiment>(x => x.AlgorithmParameterBlobValues);
+        dlo.LoadWith<Experiment>(x => x.AlgorithmParameterBoolValues);
+        dlo.LoadWith<Experiment>(x => x.AlgorithmParameterFloatValues);
+        dlo.LoadWith<Experiment>(x => x.AlgorithmParameterIntValues);
+        dlo.LoadWith<Experiment>(x => x.AlgorithmParameterStringValues);
+        dlo.LoadWith<Experiment>(x => x.ProblemParameterBlobValues);
+        dlo.LoadWith<Experiment>(x => x.ProblemParameterBoolValues);
+        dlo.LoadWith<Experiment>(x => x.ProblemParameterFloatValues);
+        dlo.LoadWith<Experiment>(x => x.ProblemParameterIntValues);
+        dlo.LoadWith<Experiment>(x => x.ProblemParameterStringValues);
+        okb.LoadOptions = dlo;
+        if ((algorithmId != 0) && (problemId != 0))
+          return okb.Experiments.Where(x => (x.AlgorithmId == algorithmId) && (x.ProblemId == problemId)).Select(x => Convert.ToDto(x)).ToArray();
+        else if (algorithmId != 0)
+          return okb.Experiments.Where(x => x.AlgorithmId == algorithmId).Select(x => Convert.ToDto(x)).ToArray();
+        else if (problemId != 0)
+          return okb.Experiments.Where(x => x.ProblemId == problemId).Select(x => Convert.ToDto(x)).ToArray();
+        else
+          return okb.Experiments.Select(x => Convert.ToDto(x)).ToArray();
+      }
+    }
+    public long AddExperiment(DataTransfer.Experiment dto) {
+      using (OKBDataContext okb = new OKBDataContext()) {
+        DataAccess.Experiment entity = Convert.ToEntity(dto); entity.Id = 0;
+
+        DataLoadOptions dlo = new DataLoadOptions();
+        dlo.LoadWith<Experiment>(x => x.AlgorithmParameterBlobValues);
+        dlo.LoadWith<Experiment>(x => x.AlgorithmParameterBoolValues);
+        dlo.LoadWith<Experiment>(x => x.AlgorithmParameterFloatValues);
+        dlo.LoadWith<Experiment>(x => x.AlgorithmParameterIntValues);
+        dlo.LoadWith<Experiment>(x => x.AlgorithmParameterStringValues);
+        dlo.LoadWith<Experiment>(x => x.ProblemParameterBlobValues);
+        dlo.LoadWith<Experiment>(x => x.ProblemParameterBoolValues);
+        dlo.LoadWith<Experiment>(x => x.ProblemParameterFloatValues);
+        dlo.LoadWith<Experiment>(x => x.ProblemParameterIntValues);
+        dlo.LoadWith<Experiment>(x => x.ProblemParameterStringValues);
+        okb.LoadOptions = dlo;
+
+        var experiments = okb.Experiments.Where(x => ((x.AlgorithmId == entity.AlgorithmId) && (x.ProblemId == entity.ProblemId))).ToArray();
+        ExperimentEqualityComparer comparer = new ExperimentEqualityComparer();
+        Experiment exp = experiments.FirstOrDefault(x => comparer.Equals(x, entity));
+        if (exp != null) {
+          return exp.Id;
+        } else {
+          okb.Experiments.InsertOnSubmit(entity);
+          okb.SubmitChanges();
+          return entity.Id;
+        }
+      }
+    }
+    public void DeleteExperiment(long id) {
+      foreach (DataTransfer.Run run in GetRuns(id))
+        DeleteRun(run.Id);
+
+      using (OKBDataContext okb = new OKBDataContext()) {
+        IEnumerable<DataAccess.AlgorithmParameterBlobValue> algorithmParameterBlobValues = okb.AlgorithmParameterBlobValues.Where(x => x.ExperimentId == id);
+        okb.AlgorithmParameterBlobValues.DeleteAllOnSubmit(algorithmParameterBlobValues);
+        IEnumerable<DataAccess.AlgorithmParameterBoolValue> algorithmParameterBoolValues = okb.AlgorithmParameterBoolValues.Where(x => x.ExperimentId == id);
+        okb.AlgorithmParameterBoolValues.DeleteAllOnSubmit(algorithmParameterBoolValues);
+        IEnumerable<DataAccess.AlgorithmParameterFloatValue> algorithmParameterFloatValues = okb.AlgorithmParameterFloatValues.Where(x => x.ExperimentId == id);
+        okb.AlgorithmParameterFloatValues.DeleteAllOnSubmit(algorithmParameterFloatValues);
+        IEnumerable<DataAccess.AlgorithmParameterIntValue> algorithmParameterIntValues = okb.AlgorithmParameterIntValues.Where(x => x.ExperimentId == id);
+        okb.AlgorithmParameterIntValues.DeleteAllOnSubmit(algorithmParameterIntValues);
+        IEnumerable<DataAccess.AlgorithmParameterStringValue> algorithmParameterStringValues = okb.AlgorithmParameterStringValues.Where(x => x.ExperimentId == id);
+        okb.AlgorithmParameterStringValues.DeleteAllOnSubmit(algorithmParameterStringValues);
+
+        IEnumerable<DataAccess.ProblemParameterBlobValue> problemParameterBlobValues = okb.ProblemParameterBlobValues.Where(x => x.ExperimentId == id);
+        okb.ProblemParameterBlobValues.DeleteAllOnSubmit(problemParameterBlobValues);
+        IEnumerable<DataAccess.ProblemParameterBoolValue> problemParameterBoolValues = okb.ProblemParameterBoolValues.Where(x => x.ExperimentId == id);
+        okb.ProblemParameterBoolValues.DeleteAllOnSubmit(problemParameterBoolValues);
+        IEnumerable<DataAccess.ProblemParameterFloatValue> problemParameterFloatValues = okb.ProblemParameterFloatValues.Where(x => x.ExperimentId == id);
+        okb.ProblemParameterFloatValues.DeleteAllOnSubmit(problemParameterFloatValues);
+        IEnumerable<DataAccess.ProblemParameterIntValue> problemParameterIntValues = okb.ProblemParameterIntValues.Where(x => x.ExperimentId == id);
+        okb.ProblemParameterIntValues.DeleteAllOnSubmit(problemParameterIntValues);
+        IEnumerable<DataAccess.ProblemParameterStringValue> problemParameterStringValues = okb.ProblemParameterStringValues.Where(x => x.ExperimentId == id);
+        okb.ProblemParameterStringValues.DeleteAllOnSubmit(problemParameterStringValues);
+
+        DataAccess.Experiment entity = okb.Experiments.FirstOrDefault(x => x.Id == id);
+        if (entity != null) okb.Experiments.DeleteOnSubmit(entity);
+        okb.SubmitChanges();
+      }
+    }
+    #endregion
+
+    #region Run Methods
+    public DataTransfer.Run GetRun(long id) {
+      using (OKBDataContext okb = new OKBDataContext()) {
+        DataLoadOptions dlo = new DataLoadOptions();
+        dlo.LoadWith<Run>(x => x.ResultBlobValues);
+        dlo.LoadWith<Run>(x => x.ResultBoolValues);
+        dlo.LoadWith<Run>(x => x.ResultFloatValues);
+        dlo.LoadWith<Run>(x => x.ResultIntValues);
+        dlo.LoadWith<Run>(x => x.ResultStringValues);
+        okb.LoadOptions = dlo;
+        return Convert.ToDto(okb.Runs.FirstOrDefault(x => x.Id == id));
+      }
+    }
+    public IEnumerable<DataTransfer.Run> GetRuns(long experimentId) {
+      using (OKBDataContext okb = new OKBDataContext()) {
+        DataLoadOptions dlo = new DataLoadOptions();
+        dlo.LoadWith<Run>(x => x.ResultBlobValues);
+        dlo.LoadWith<Run>(x => x.ResultBoolValues);
+        dlo.LoadWith<Run>(x => x.ResultFloatValues);
+        dlo.LoadWith<Run>(x => x.ResultIntValues);
+        dlo.LoadWith<Run>(x => x.ResultStringValues);
+        okb.LoadOptions = dlo;
+        return okb.Runs.Where(x => x.ExperimentId == experimentId).Select(x => Convert.ToDto(x)).ToArray();
+      }
+    }
+    public long AddRun(DataTransfer.Run dto) {
+      using (OKBDataContext okb = new OKBDataContext()) {
+        DataAccess.Run entity = Convert.ToEntity(dto); entity.Id = 0;
+        okb.Runs.InsertOnSubmit(entity);
+        okb.SubmitChanges();
+        return entity.Id;
+      }
+    }
+    public void DeleteRun(long id) {
+      using (OKBDataContext okb = new OKBDataContext()) {
+        IEnumerable<DataAccess.ResultBlobValue> resultBlobValues = okb.ResultBlobValues.Where(x => x.RunId == id);
+        okb.ResultBlobValues.DeleteAllOnSubmit(resultBlobValues);
+        IEnumerable<DataAccess.ResultBoolValue> resultBoolValues = okb.ResultBoolValues.Where(x => x.RunId == id);
+        okb.ResultBoolValues.DeleteAllOnSubmit(resultBoolValues);
+        IEnumerable<DataAccess.ResultFloatValue> resultFloatValues = okb.ResultFloatValues.Where(x => x.RunId == id);
+        okb.ResultFloatValues.DeleteAllOnSubmit(resultFloatValues);
+        IEnumerable<DataAccess.ResultIntValue> resultIntValues = okb.ResultIntValues.Where(x => x.RunId == id);
+        okb.ResultIntValues.DeleteAllOnSubmit(resultIntValues);
+        IEnumerable<DataAccess.ResultStringValue> resultStringValues = okb.ResultStringValues.Where(x => x.RunId == id);
+        okb.ResultStringValues.DeleteAllOnSubmit(resultStringValues);
+
+        DataAccess.Run entity = okb.Runs.FirstOrDefault(x => x.Id == id);
+        if (entity != null) okb.Runs.DeleteOnSubmit(entity);
+        okb.SubmitChanges();
+      }
+    }
+    #endregion
+
+    #region Query Methods
+    public IEnumerable<DataTransfer.Filter> GetFilters() {
+      List<DataTransfer.Filter> filters = new List<DataTransfer.Filter>();
+      using (OKBDataContext okb = new OKBDataContext()) {
+        //DataLoadOptions dlo = new DataLoadOptions();
+        //dlo.LoadWith<Algorithm>(x => x.AlgorithmData);
+        //dlo.LoadWith<AlgorithmData>(x => x.DataType);
+        //dlo.LoadWith<Problem>(x => x.ProblemData);
+        //dlo.LoadWith<ProblemData>(x => x.DataType);
+        //dlo.LoadWith<AlgorithmParameter>(x => x.DataType);
+        //dlo.LoadWith<ProblemParameter>(x => x.DataType);
+        //dlo.LoadWith<Result>(x => x.DataType);
+        //okb.LoadOptions = dlo;
+
+        // run filters
+        filters.Add(new DataTransfer.OrdinalComparisonLongFilter(typeof(RunRandomSeedFilter).AssemblyQualifiedName, "Run Random Seed"));
+        filters.Add(new DataTransfer.OrdinalComparisonDateTimeFilter(typeof(RunCreatedDateFilter).AssemblyQualifiedName, "Run Created Date"));
+        filters.Add(new DataTransfer.SetComparisonStringFilter(typeof(RunUserNameFilter).AssemblyQualifiedName, "Run User Name"));
+        filters.Add(new DataTransfer.SetComparisonStringFilter(typeof(RunClientNameFilter).AssemblyQualifiedName, "Run Client Name"));
+
+        // result filters
+        filters.Add(new DataTransfer.SetComparisonStringAvailableValuesFilter(typeof(ResultNameFilter).AssemblyQualifiedName, "Result Name", okb.Results.Select(x => x.Name).Distinct().ToArray()));
+        foreach (Result entity in okb.Results.Where(x => x.DataType.SqlName == "varbinary").AsEnumerable().Distinct<Result>(new GenericEqualityComparer<Result>((x, y) => x.Name == y.Name)))
+          filters.Add(new DataTransfer.NameSetComparisonStringAvailableValuesFilter(typeof(ResultBlobValueDataTypeNameFilter).AssemblyQualifiedName, "Result " + entity.Name + " Value Data Type Name", entity.Name, okb.ResultBlobValues.Where(x => x.Result.Name == entity.Name).Select(x => x.DataType.Name).Distinct().ToArray()));
+        foreach (Result entity in okb.Results.Where(x => x.DataType.SqlName == "varbinary").AsEnumerable().Distinct<Result>(new GenericEqualityComparer<Result>((x, y) => x.Name == y.Name)))
+          filters.Add(new DataTransfer.NameEqualityComparisonByteArrayFilter(typeof(ResultBlobValueValueFilter).AssemblyQualifiedName, "Result " + entity.Name + " Value", entity.Name));
+        foreach (Result entity in okb.Results.Where(x => x.DataType.SqlName == "bit").AsEnumerable().Distinct<Result>(new GenericEqualityComparer<Result>((x, y) => x.Name == y.Name)))
+          filters.Add(new DataTransfer.NameEqualityComparisonBoolFilter(typeof(ResultBoolValueValueFilter).AssemblyQualifiedName, "Result " + entity.Name + " Value", entity.Name));
+        foreach (Result entity in okb.Results.Where(x => x.DataType.SqlName == "float").AsEnumerable().Distinct<Result>(new GenericEqualityComparer<Result>((x, y) => x.Name == y.Name)))
+          filters.Add(new DataTransfer.NameOrdinalComparisonDoubleFilter(typeof(ResultFloatValueValueFilter).AssemblyQualifiedName, "Result " + entity.Name + " Value", entity.Name));
+        foreach (Result entity in okb.Results.Where(x => x.DataType.SqlName == "bigint").AsEnumerable().Distinct<Result>(new GenericEqualityComparer<Result>((x, y) => x.Name == y.Name)))
+          filters.Add(new DataTransfer.NameOrdinalComparisonLongFilter(typeof(ResultIntValueValueFilter).AssemblyQualifiedName, "Result " + entity.Name + " Value", entity.Name));
+        foreach (Result entity in okb.Results.Where(x => x.DataType.SqlName == "nvarchar").AsEnumerable().Distinct<Result>(new GenericEqualityComparer<Result>((x, y) => x.Name == y.Name)))
+          filters.Add(new DataTransfer.NameSetComparisonStringFilter(typeof(ResultStringValueValueFilter).AssemblyQualifiedName, "Result " + entity.Name + " Value", entity.Name));
+
+        // algorithm parameter filters
+        filters.Add(new DataTransfer.SetComparisonStringAvailableValuesFilter(typeof(AlgorithmParameterNameFilter).AssemblyQualifiedName, "Algorithm Parameter Name", okb.AlgorithmParameters.Select(x => x.Name).Distinct().ToArray()));
+        foreach (AlgorithmParameter entity in okb.AlgorithmParameters.Where(x => x.DataType.SqlName == "varbinary").AsEnumerable().Distinct<AlgorithmParameter>(new GenericEqualityComparer<AlgorithmParameter>((x, y) => x.Name == y.Name)))
+          filters.Add(new DataTransfer.NameSetComparisonStringAvailableValuesFilter(typeof(AlgorithmParameterBlobValueDataTypeNameFilter).AssemblyQualifiedName, "Algorithm Parameter " + entity.Name + " Value Data Type Name", entity.Name, okb.AlgorithmParameterBlobValues.Where(x => x.AlgorithmParameter.Name == entity.Name).Select(x => x.DataType.Name).Distinct().ToArray()));
+        foreach (AlgorithmParameter entity in okb.AlgorithmParameters.Where(x => x.DataType.SqlName == "varbinary").AsEnumerable().Distinct<AlgorithmParameter>(new GenericEqualityComparer<AlgorithmParameter>((x, y) => x.Name == y.Name)))
+          filters.Add(new DataTransfer.NameEqualityComparisonByteArrayFilter(typeof(AlgorithmParameterBlobValueValueFilter).AssemblyQualifiedName, "Algorithm Parameter " + entity.Name + " Value", entity.Name));
+        foreach (AlgorithmParameter entity in okb.AlgorithmParameters.Where(x => x.DataType.SqlName == "bit").AsEnumerable().Distinct<AlgorithmParameter>(new GenericEqualityComparer<AlgorithmParameter>((x, y) => x.Name == y.Name)))
+          filters.Add(new DataTransfer.NameEqualityComparisonBoolFilter(typeof(AlgorithmParameterBoolValueValueFilter).AssemblyQualifiedName, "Algorithm Parameter " + entity.Name + " Value", entity.Name));
+        foreach (AlgorithmParameter entity in okb.AlgorithmParameters.Where(x => x.DataType.SqlName == "float").AsEnumerable().Distinct<AlgorithmParameter>(new GenericEqualityComparer<AlgorithmParameter>((x, y) => x.Name == y.Name)))
+          filters.Add(new DataTransfer.NameOrdinalComparisonDoubleFilter(typeof(AlgorithmParameterFloatValueValueFilter).AssemblyQualifiedName, "Algorithm Parameter " + entity.Name + " Value", entity.Name));
+        foreach (AlgorithmParameter entity in okb.AlgorithmParameters.Where(x => x.DataType.SqlName == "bigint").AsEnumerable().Distinct<AlgorithmParameter>(new GenericEqualityComparer<AlgorithmParameter>((x, y) => x.Name == y.Name)))
+          filters.Add(new DataTransfer.NameOrdinalComparisonLongFilter(typeof(AlgorithmParameterIntValueValueFilter).AssemblyQualifiedName, "Algorithm Parameter " + entity.Name + " Value", entity.Name));
+        foreach (AlgorithmParameter entity in okb.AlgorithmParameters.Where(x => x.DataType.SqlName == "nvarchar").AsEnumerable().Distinct<AlgorithmParameter>(new GenericEqualityComparer<AlgorithmParameter>((x, y) => x.Name == y.Name)))
+          filters.Add(new DataTransfer.NameSetComparisonStringFilter(typeof(AlgorithmParameterStringValueValueFilter).AssemblyQualifiedName, "Algorithm Parameter " + entity.Name + " Value", entity.Name));
+
+        // algorithm filters
+        filters.Add(new DataTransfer.SetComparisonStringAvailableValuesFilter(typeof(AlgorithmNameFilter).AssemblyQualifiedName, "Algorithm Name", okb.Algorithms.Select(x => x.Name).Distinct().ToArray()));
+        filters.Add(new DataTransfer.SetComparisonStringAvailableValuesFilter(typeof(AlgorithmClassNameFilter).AssemblyQualifiedName, "Algorithm Class Name", okb.AlgorithmClasses.Select(x => x.Name).Distinct().ToArray()));
+        filters.Add(new DataTransfer.SetComparisonStringAvailableValuesFilter(typeof(AlgorithmPlatformNameFilter).AssemblyQualifiedName, "Algorithm Platform Name", okb.Platforms.Select(x => x.Name).Distinct().ToArray()));
+        filters.Add(new DataTransfer.SetComparisonStringAvailableValuesFilter(typeof(AlgorithmDataDataTypeNameFilter).AssemblyQualifiedName, "Algorithm Data Type Name", okb.Algorithms.Select(x => x.AlgorithmData.DataType.Name).Distinct().ToArray()));
+
+        // problem parameter filters
+        filters.Add(new DataTransfer.SetComparisonStringAvailableValuesFilter(typeof(ProblemParameterNameFilter).AssemblyQualifiedName, "Problem Parameter Name", okb.ProblemParameters.Select(x => x.Name).Distinct().ToArray()));
+        foreach (ProblemParameter entity in okb.ProblemParameters.Where(x => x.DataType.SqlName == "varbinary").AsEnumerable().Distinct<ProblemParameter>(new GenericEqualityComparer<ProblemParameter>((x, y) => x.Name == y.Name)))
+          filters.Add(new DataTransfer.NameSetComparisonStringAvailableValuesFilter(typeof(ProblemParameterBlobValueDataTypeNameFilter).AssemblyQualifiedName, "Problem Parameter " + entity.Name + " Value Data Type Name", entity.Name, okb.ProblemParameterBlobValues.Where(x => x.ProblemParameter.Name == entity.Name).Select(x => x.DataType.Name).Distinct().ToArray()));
+        foreach (ProblemParameter entity in okb.ProblemParameters.Where(x => x.DataType.SqlName == "varbinary").AsEnumerable().Distinct<ProblemParameter>(new GenericEqualityComparer<ProblemParameter>((x, y) => x.Name == y.Name)))
+          filters.Add(new DataTransfer.NameEqualityComparisonByteArrayFilter(typeof(ProblemParameterBlobValueValueFilter).AssemblyQualifiedName, "Problem Parameter " + entity.Name + " Value", entity.Name));
+        foreach (ProblemParameter entity in okb.ProblemParameters.Where(x => x.DataType.SqlName == "bit").AsEnumerable().Distinct<ProblemParameter>(new GenericEqualityComparer<ProblemParameter>((x, y) => x.Name == y.Name)))
+          filters.Add(new DataTransfer.NameEqualityComparisonBoolFilter(typeof(ProblemParameterBoolValueValueFilter).AssemblyQualifiedName, "Problem Parameter " + entity.Name + " Value", entity.Name));
+        foreach (ProblemParameter entity in okb.ProblemParameters.Where(x => x.DataType.SqlName == "float").AsEnumerable().Distinct<ProblemParameter>(new GenericEqualityComparer<ProblemParameter>((x, y) => x.Name == y.Name)))
+          filters.Add(new DataTransfer.NameOrdinalComparisonDoubleFilter(typeof(ProblemParameterFloatValueValueFilter).AssemblyQualifiedName, "Problem Parameter " + entity.Name + " Value", entity.Name));
+        foreach (ProblemParameter entity in okb.ProblemParameters.Where(x => x.DataType.SqlName == "bigint").AsEnumerable().Distinct<ProblemParameter>(new GenericEqualityComparer<ProblemParameter>((x, y) => x.Name == y.Name)))
+          filters.Add(new DataTransfer.NameOrdinalComparisonLongFilter(typeof(ProblemParameterIntValueValueFilter).AssemblyQualifiedName, "Problem Parameter " + entity.Name + " Value", entity.Name));
+        foreach (ProblemParameter entity in okb.ProblemParameters.Where(x => x.DataType.SqlName == "nvarchar").AsEnumerable().Distinct<ProblemParameter>(new GenericEqualityComparer<ProblemParameter>((x, y) => x.Name == y.Name)))
+          filters.Add(new DataTransfer.NameSetComparisonStringFilter(typeof(ProblemParameterStringValueValueFilter).AssemblyQualifiedName, "Problem Parameter " + entity.Name + " Value", entity.Name));
+
+        // problem filters
+        filters.Add(new DataTransfer.SetComparisonStringAvailableValuesFilter(typeof(ProblemNameFilter).AssemblyQualifiedName, "Problem Name", okb.Problems.Select(x => x.Name).Distinct().ToArray()));
+        filters.Add(new DataTransfer.SetComparisonStringAvailableValuesFilter(typeof(ProblemClassNameFilter).AssemblyQualifiedName, "Problem Class Name", okb.ProblemClasses.Select(x => x.Name).Distinct().ToArray()));
+        filters.Add(new DataTransfer.SetComparisonStringAvailableValuesFilter(typeof(ProblemPlatformNameFilter).AssemblyQualifiedName, "Problem Platform Name", okb.Platforms.Select(x => x.Name).Distinct().ToArray()));
+        filters.Add(new DataTransfer.SetComparisonStringAvailableValuesFilter(typeof(ProblemDataDataTypeNameFilter).AssemblyQualifiedName, "Problem Data Type Name", okb.Problems.Select(x => x.ProblemData.DataType.Name).Distinct().ToArray()));
+
+        // and/or filters
+        filters.Add(new DataTransfer.AndFilter(typeof(AndFilter).AssemblyQualifiedName, "And"));
+        filters.Add(new DataTransfer.OrFilter(typeof(OrFilter).AssemblyQualifiedName, "Or"));
+      }
+      return filters.OrderBy(x => x.Label);
+    }
+    public long QueryNumberOfRuns(DataTransfer.Filter filter) {
+      using (OKBDataContext okb = new OKBDataContext()) {
+        IFilter convertedFilter = (IFilter)Activator.CreateInstance(Type.GetType(filter.FilterTypeName), filter);
+        return okb.Runs.Where(convertedFilter.Expression).LongCount();
+      }
+    }
+    public IEnumerable<DataTransfer.Run> QueryRuns(DataTransfer.Filter filter) {
+      using (OKBDataContext okb = new OKBDataContext()) {
+        //DataLoadOptions dlo = new DataLoadOptions();
+        //dlo.LoadWith<Run>(x => x.ResultBlobValues);
+        //dlo.LoadWith<Run>(x => x.ResultBoolValues);
+        //dlo.LoadWith<Run>(x => x.ResultFloatValues);
+        //dlo.LoadWith<Run>(x => x.ResultIntValues);
+        //dlo.LoadWith<Run>(x => x.ResultStringValues);
+        //dlo.LoadWith<Run>(x => x.Experiment);
+        //dlo.LoadWith<ResultBlobValue>(x => x.Result);
+        //dlo.LoadWith<ResultBlobValue>(x => x.DataType);
+        //dlo.LoadWith<ResultBoolValue>(x => x.Result);
+        //dlo.LoadWith<ResultBoolValue>(x => x.DataType);
+        //dlo.LoadWith<ResultFloatValue>(x => x.Result);
+        //dlo.LoadWith<ResultFloatValue>(x => x.DataType);
+        //dlo.LoadWith<ResultIntValue>(x => x.Result);
+        //dlo.LoadWith<ResultIntValue>(x => x.DataType);
+        //dlo.LoadWith<ResultStringValue>(x => x.Result);
+        //dlo.LoadWith<ResultStringValue>(x => x.DataType);
+        //dlo.LoadWith<Result>(x => x.Algorithm);
+        //dlo.LoadWith<Result>(x => x.DataType);
+        //dlo.LoadWith<Experiment>(x => x.Algorithm);
+        //dlo.LoadWith<Experiment>(x => x.Problem);
+        //dlo.LoadWith<Experiment>(x => x.AlgorithmParameterBlobValues);
+        //dlo.LoadWith<Experiment>(x => x.AlgorithmParameterBoolValues);
+        //dlo.LoadWith<Experiment>(x => x.AlgorithmParameterFloatValues);
+        //dlo.LoadWith<Experiment>(x => x.AlgorithmParameterIntValues);
+        //dlo.LoadWith<Experiment>(x => x.AlgorithmParameterStringValues);
+        //dlo.LoadWith<Experiment>(x => x.ProblemParameterBlobValues);
+        //dlo.LoadWith<Experiment>(x => x.ProblemParameterBoolValues);
+        //dlo.LoadWith<Experiment>(x => x.ProblemParameterFloatValues);
+        //dlo.LoadWith<Experiment>(x => x.ProblemParameterIntValues);
+        //dlo.LoadWith<Experiment>(x => x.ProblemParameterStringValues);
+        //dlo.LoadWith<AlgorithmParameterBlobValue>(x => x.AlgorithmParameter);
+        //dlo.LoadWith<AlgorithmParameterBlobValue>(x => x.DataType);
+        //dlo.LoadWith<AlgorithmParameterBoolValue>(x => x.AlgorithmParameter);
+        //dlo.LoadWith<AlgorithmParameterBoolValue>(x => x.DataType);
+        //dlo.LoadWith<AlgorithmParameterFloatValue>(x => x.AlgorithmParameter);
+        //dlo.LoadWith<AlgorithmParameterFloatValue>(x => x.DataType);
+        //dlo.LoadWith<AlgorithmParameterIntValue>(x => x.AlgorithmParameter);
+        //dlo.LoadWith<AlgorithmParameterIntValue>(x => x.DataType);
+        //dlo.LoadWith<AlgorithmParameterStringValue>(x => x.AlgorithmParameter);
+        //dlo.LoadWith<AlgorithmParameterStringValue>(x => x.DataType);
+        //dlo.LoadWith<ProblemParameterBlobValue>(x => x.ProblemParameter);
+        //dlo.LoadWith<ProblemParameterBlobValue>(x => x.DataType);
+        //dlo.LoadWith<ProblemParameterBoolValue>(x => x.ProblemParameter);
+        //dlo.LoadWith<ProblemParameterBoolValue>(x => x.DataType);
+        //dlo.LoadWith<ProblemParameterFloatValue>(x => x.ProblemParameter);
+        //dlo.LoadWith<ProblemParameterFloatValue>(x => x.DataType);
+        //dlo.LoadWith<ProblemParameterIntValue>(x => x.ProblemParameter);
+        //dlo.LoadWith<ProblemParameterIntValue>(x => x.DataType);
+        //dlo.LoadWith<ProblemParameterStringValue>(x => x.ProblemParameter);
+        //dlo.LoadWith<ProblemParameterStringValue>(x => x.DataType);
+        //dlo.LoadWith<AlgorithmParameter>(x => x.Algorithm);
+        //dlo.LoadWith<AlgorithmParameter>(x => x.DataType);
+        //dlo.LoadWith<ProblemParameter>(x => x.Problem);
+        //dlo.LoadWith<ProblemParameter>(x => x.DataType);
+        //dlo.LoadWith<Algorithm>(x => x.AlgorithmClass);
+        //dlo.LoadWith<Algorithm>(x => x.Platform);
+        //dlo.LoadWith<Problem>(x => x.ProblemClass);
+        //dlo.LoadWith<Problem>(x => x.Platform);
+        //okb.LoadOptions = dlo;
+
+        DataLoadOptions dlo = new DataLoadOptions();
+        dlo.LoadWith<Run>(x => x.ResultBlobValues);
+        dlo.LoadWith<Run>(x => x.ResultBoolValues);
+        dlo.LoadWith<Run>(x => x.ResultFloatValues);
+        dlo.LoadWith<Run>(x => x.ResultIntValues);
+        dlo.LoadWith<Run>(x => x.ResultStringValues);
+        okb.LoadOptions = dlo;
+
+        IFilter convertedFilter = (IFilter)Activator.CreateInstance(Type.GetType(filter.FilterTypeName), filter);
+        var runs = okb.Runs.Where(convertedFilter.Expression).ToArray();
+        var result = runs.Select(x => Convert.ToDto(x)).ToArray();
+        return result;
+      }
+    }
+    #endregion
+
+    /*
+
+    /// <summary>
+    /// Gets the complete algorithm object graph up to the following entities:
+    /// <list type="bullet">
+    ///   <item>Parameter</item>
+    ///   <item>Algorithm_Paramters.Parameter.DataType</item>
+    ///   <item>Algorithm_Results.Result.DataType</item>
+    /// </list>
+    /// </summary>
+    /// <param name="id">The algorithm id.</param>
+    /// <returns>An <see cref="Algorithm"/></returns>
+    public Algorithm GetCompleteAlgorithm(int id) {
+      using (OKBDataContext okb = new OKBDataContext()) {
+        var dlo = new DataLoadOptions();
+        dlo.LoadWith<Algorithm>(a => a.AlgorithmClass);
+        dlo.LoadWith<Algorithm>(a => a.Platform);
+        dlo.LoadWith<Algorithm>(a => a.AlgorithmUsers);
+        dlo.LoadWith<AlgorithmUser>(u => u.User);
+        okb.LoadOptions = dlo;
+        return okb.Algorithms.Single(a => a.Id == id);
+      }
+    }
+
+    /// <summary>
+    /// Gets the complete problem object graph up to the following entities:
+    /// <list type="bullet">
+    ///   <item>Platform</item>
+    ///   <item>SolutionRepresentation</item>
+    ///   <item>Problem_Parameters.Parameter</item>
+    ///   <item>IntProblemCharacteristicValues.ProblemCharacteristic.DataType</item>
+    ///   <item>FloatProblemCharacteristicValues.ProblemCharacteristic.DataType</item>
+    ///   <item>CharProblemCharacteristicValues.ProblemCharacteristic.DataType</item>
+    /// </list>
+    /// </summary>
+    /// <param name="id">The problem id.</param>
+    /// <returns>A <see cref="Problem"/></returns>
+    public Problem GetCompleteProblem(int id) {
+      using (OKBDataContext okb = new OKBDataContext()) {
+        var dlo = new DataLoadOptions();
+        dlo.LoadWith<Problem>(p => p.ProblemClass);
+        dlo.LoadWith<Problem>(p => p.Platform);
+        dlo.LoadWith<Problem>(p => p.ProblemUsers);
+        dlo.LoadWith<ProblemUser>(u => u.User);
+        okb.LoadOptions = dlo;
+        return okb.Problems.Single(p => p.Id == id);
+      }
+    }
+
+    /// <summary>
+    /// Updates the algorithm object graph including the following properties and linked entitites:
+    /// <list type="bullet">
+    ///   <item>Name</item>
+    ///   <item>Description</item>
+    ///   <item>AlgorithmClassId</item>
+    ///   <item>PlatformId</item>
+    ///   <item>Algorithm_Parameters</item>
+    ///   <item>Algorithm_Results</item>
+    /// </list>
+    /// <remarks>
+    /// New <see cref="Parameter"/>s or <see cref="Result"/>s will not be
+    /// created but have to be pre-existing.
+    /// </remarks>
+    /// </summary>
+    /// <param name="algorithm">The algorithm.</param>
+    public void UpdateCompleteAlgorithm(Algorithm algorithm) {
+      using (OKBDataContext okb = new OKBDataContext()) {
+        Algorithm original = okb.Algorithms.Single(a => a.Id == algorithm.Id);
+        UpdateAlgorithmData(algorithm, original, okb);
+        okb.SubmitChanges();
+      }
+    }
+
+    /// <summary>
+    /// Updates the problem object graph including the following properties and linked entities:
+    /// <list type="bullet">
+    ///   <item>Name</item>
+    ///   <item>Description</item>
+    ///   <item>ProblemClassId</item>
+    ///   <item>PlatformId</item>
+    ///   <item>SolutionRepresentationId</item>
+    ///   <item>IntProblemCharacteristicValues.Value</item>
+    ///   <item>FloatProblemCharacteristicValues.Value</item>
+    ///   <item>CharProblemCharacteristicValues.Value</item>
+    ///   <item>Problem_Parameters</item>
+    /// </list>
+    /// <remarks>
+    /// New <see cref="ProblemCharacteristic"/>s or <see cref="Parameter"/>s will
+    /// not be created but have to be pre-existing.
+    /// </remarks>
+    /// </summary>
+    /// <param name="problem">The problem.</param>
+    public void UpdateCompleteProblem(Problem problem) {
+      using (OKBDataContext okb = new OKBDataContext()) {
+        Problem originalProblem = okb.Problems.Single(p => p.Id == problem.Id);
+        UpdateProblemData(problem, originalProblem, okb);
+        okb.SubmitChanges();
+      }
+    }
+
+    private static void UpdateAlgorithmData(Algorithm algorithm, Algorithm original, OKBDataContext okb) {
+      original.Name = algorithm.Name;
+      original.Description = algorithm.Description;
+      original.AlgorithmClassId = algorithm.AlgorithmClassId;
+      original.PlatformId = algorithm.PlatformId;
+      okb.AlgorithmUsers.DeleteAllOnSubmit(original.AlgorithmUsers);
+      original.AlgorithmUsers.Clear();
+      foreach (var u in algorithm.AlgorithmUsers) {
+        original.AlgorithmUsers.Add(new AlgorithmUser() {
+          AlgorithmId = original.Id,
+          UserId = u.UserId
+        });
+      }
+    }
+
+    private static void UpdateProblemData(Problem problem, Problem original, OKBDataContext okb) {
+      original.Name = problem.Name;
+      original.Description = problem.Description;
+      original.ProblemClassId = problem.ProblemClassId;
+      original.SolutionRepresentationId = problem.SolutionRepresentationId;
+      original.PlatformId = problem.PlatformId;
+      okb.ProblemUsers.DeleteAllOnSubmit(original.ProblemUsers);
+      original.ProblemUsers.Clear();
+      foreach (var u in problem.ProblemUsers) {
+        original.ProblemUsers.Add(new ProblemUser() {
+          ProblemId = original.Id,
+          UserId = u.UserId
+        });
+      }
+    }*/
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Properties/AssemblyInfo.frame
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Properties/AssemblyInfo.frame	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Properties/AssemblyInfo.frame	(revision 5296)
@@ -0,0 +1,57 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.Services.OKB")]
+[assembly: AssemblyDescription("HeuristicLab OKB services")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2010 HEAL")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components.  If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("029c79a0-8bf0-460d-9499-3b3b9c7f1a93")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("3.3.0.0")]
+[assembly: AssemblyFileVersion("3.3.0.$WCREV$")]
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/QueryService.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/QueryService.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/QueryService.cs	(revision 5296)
@@ -0,0 +1,119 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Linq;
+using System.ServiceModel;
+using HeuristicLab.Services.OKB.AttributeSelection;
+using HeuristicLab.Services.OKB.DataAccess;
+
+namespace HeuristicLab.Services.OKB {
+  /// <summary>
+  /// Implementation of the <see cref="IQueryService"/>.
+  /// </summary>
+  [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession, IncludeExceptionDetailInFaults = true)]
+  public class QueryService : IQueryService, IDisposable {
+    /// <summary>
+    /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
+    /// </summary>
+    public void Dispose() {
+      Terminate();
+    }
+
+    private DataSetBuilder dataSetBuilder;
+    private OKBDataContext okb;
+    private IEnumerator<DataRow> dataEnumerator;
+
+    /// <summary>
+    /// Gets a list of all possible attribute selectors.
+    /// </summary>
+    /// <returns>
+    /// An array of <see cref="Server.AttributeSelector"/>s
+    /// </returns>
+    public AttributeSelector[] GetAllAttributeSelectors() {
+      using (OKBDataContext okb = new OKBDataContext()) {
+        return RunAttributeSelector.GetAllAttributeSelectors(okb).Select(s => new AttributeSelector(s)).ToArray();
+      }
+    }
+
+    /// <summary>
+    /// Prepares the a query using the specified selection criteria.
+    /// </summary>
+    /// <param name="selectors">The list of <see cref="Server.AttributeSelector"/>s.</param>
+    /// <returns>
+    /// An empty <see cref="DataTable"/> containing only the column headers.
+    /// </returns>
+    public DataTable PrepareQuery(AttributeSelector[] selectors) {
+      using (OKBDataContext okb = new OKBDataContext()) {
+        if (selectors.Length == 0)
+          throw new FaultException("No columns selected");
+        IEnumerable<RunAttributeSelector> checkedSelectors =
+          selectors.Select(s => new RunAttributeSelector(new OKBDataContext(okb.Connection.ConnectionString), s)).ToList();
+        dataSetBuilder = new DataSetBuilder(okb, checkedSelectors);
+        dataEnumerator = dataSetBuilder.GetEnumerator();
+        return dataSetBuilder.Runs;
+      }
+    }
+
+    /// <summary>
+    /// Gets the number of matching rows for the prepared query
+    /// (see <see cref="IQueryService.PrepareQuery"/>).
+    /// </summary>
+    /// <returns>The number of matching rows.</returns>
+    public int GetCount() {
+      return dataSetBuilder.GetCount();
+    }
+
+    /// <summary>
+    /// Gets the next rows.
+    /// </summary>
+    /// <param name="maxNRows">The max N rows.</param>
+    /// <returns></returns>
+    public DataTable GetNextRows(int maxNRows) {
+      DataTable runs = dataSetBuilder.Runs.Clone();
+      for (int i = 0; i < maxNRows; i++) {
+        if (!dataEnumerator.MoveNext())
+          break;
+        DataRow row = runs.NewRow();
+        row.ItemArray = (object[])dataEnumerator.Current.ItemArray.Clone();
+        runs.Rows.Add(row);
+      }
+      return runs;
+    }
+
+    /// <summary>
+    /// Terminates the session and closes the connection.
+    /// </summary>
+    public void Terminate() {
+      dataSetBuilder = null;
+      if (dataEnumerator != null) {
+        dataEnumerator.Dispose();
+        dataEnumerator = null;
+      }
+      if (okb != null) {
+        okb.Dispose();
+        okb = null;
+      }
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/RunnerService.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/RunnerService.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/RunnerService.cs	(revision 5296)
@@ -0,0 +1,336 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Data.Linq;
+using System.Linq;
+using System.ServiceModel;
+using System.Web.Security;
+using HeuristicLab.Services.OKB.DataAccess;
+
+namespace HeuristicLab.Services.OKB {
+  /// <summary>
+  /// Implementation of the <see cref="IRunnerService"/>.
+  /// </summary>
+  [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)]
+  public class RunnerService : IRunnerService, IDisposable {
+    /// <summary>
+    /// Obtain a "starter kit" of information, containing:
+    /// <list>
+    /// <item>algorithm classes including algorithms</item>
+    /// <item>problem classes including problems</item>
+    /// <item>projects</item>
+    /// </list>
+    /// </summary>
+    public StarterKit GetStarterKit(string platformName) {
+      Platform platform;
+      using (OKBDataContext okb = new OKBDataContext()) {
+        try {
+          platform = okb.Platforms.Single(p => p.Name == platformName);
+        }
+        catch (InvalidOperationException) {
+          throw new FaultException(String.Format(
+            "Invalid platform name \"{0}\" available platforms are: \"{1}\"",
+            platformName,
+            string.Join("\", \"", okb.Platforms.Select(p => p.Name).ToArray())));
+        }
+      }
+      using (OKBDataContext okb = new OKBDataContext()) {
+        DataLoadOptions dlo = new DataLoadOptions();
+        dlo.LoadWith<AlgorithmClass>(ac => ac.Algorithms);
+        dlo.AssociateWith<AlgorithmClass>(ac => ac.Algorithms.Where(a => a.Platform == platform));
+        dlo.LoadWith<ProblemClass>(p => p.Problems);
+        dlo.AssociateWith<ProblemClass>(pc => pc.Problems.Where(p => p.Platform == platform));
+        okb.LoadOptions = dlo;
+        var StarterKit = new StarterKit() {
+          AlgorithmClasses = okb.AlgorithmClasses.ToList(),
+          ProblemClasses = okb.ProblemClasses.ToList()
+        };
+        return StarterKit;
+      }
+    }
+
+    /// <summary>
+    /// Augument the given algorithm and problem entities with information
+    /// to conduct an experiment. This will add algorithm parameters and results and
+    /// problem characteristic values and solution representation as well as data
+    /// necessary for deserialization.
+    /// </summary>
+    public ExperimentKit PrepareExperiment(Algorithm algorithm, Problem problem) {
+      OKBDataContext okb = new OKBDataContext();
+      try {
+        DataLoadOptions dlo = new DataLoadOptions();
+        dlo.LoadWith<Problem>(p => p.SolutionRepresentation);
+        dlo.LoadWith<AlgorithmParameter>(p => p.DataType);
+        dlo.LoadWith<ProblemParameter>(p => p.DataType);
+        dlo.LoadWith<Result>(r => r.DataType);
+        okb.LoadOptions = dlo;
+        algorithm = okb.Algorithms.Single(a => a.Id == algorithm.Id);
+        problem = okb.Problems.Single(p => p.Id == problem.Id);
+        algorithm.AlgorithmParameters.Load();
+        algorithm.Results.Load();
+        problem.ProblemCharacteristicIntValues.Load();
+        problem.ProblemCharacteristicFloatValues.Load();
+        problem.ProblemCharacteristicStringValues.Load();
+        problem.ProblemParameters.Load();
+        return new ExperimentKit() {
+          Algorithm = algorithm,
+          Problem = problem
+        };
+      }
+      catch (Exception x) {
+        throw new FaultException("Excaption caught: " + x.ToString());
+      }
+    }
+
+    /// <summary>
+    /// Adds the a new <see cref="Experiment"/>
+    /// 	<see cref="Run"/>.
+    /// The <see cref="Experiment"/> is created if necessary as well as
+    /// all <see cref="Parameter"/>s and <see cref="Result"/>s. If an
+    /// identical experiment has been conducted before the new run is
+    /// linked to this previous experiment instead.
+    /// </summary>
+    /// <param name="algorithm">The algorithm.</param>
+    /// <param name="problem">The problem.</param>
+    /// <param name="project">The project.</param>
+    public void AddRun(Algorithm algorithm, Problem problem) {
+      try {
+        using (OKBDataContext okb = new OKBDataContext()) {
+          Experiment experiment = GetOrCreateExperiment(algorithm, problem, currentUser, okb);
+          Run run = new Run() {
+            Experiment = experiment,
+            UserId = currentUser.Id,
+            ClientId = currentClient.Id,
+            FinishedDate = DateTime.Now,
+            ResultValues = algorithm.ResultValues
+          };
+          okb.Runs.InsertOnSubmit(run);
+          okb.SubmitChanges();
+        }
+      }
+      catch (Exception x) {
+        throw new FaultException("Could not add run: " + x.ToString());
+      }
+    }
+
+    private Experiment GetOrCreateExperiment(Algorithm algorithm, Problem problem, User user, OKBDataContext okb) {
+      MatchResults(algorithm.Results, okb);
+      EnsureParametersExist(algorithm.Parameters, okb);
+      var experimentQuery = CreateExperimentQuery(algorithm, problem, okb);
+      if (experimentQuery.Count() > 0) {
+        Experiment experiment = experimentQuery.First();
+        return experiment;
+      } else {
+        Experiment experiment = new Experiment() {
+          AlgorithmId = algorithm.Id,
+          ProblemId = problem.Id,
+          ParameterValues = algorithm.ParameterValues
+        };
+        okb.Experiments.InsertOnSubmit(experiment);
+        return experiment;
+      }
+    }
+
+    private void MatchResults(IQueryable<Result> results, OKBDataContext okb) {
+      foreach (var result in results.Where(r => r.Name != null)) {
+        result.Id = okb.Results.Single(r => r.Name == result.Name).Id;
+        var value = result.ResultValue;
+        if (value != null) {
+          result.ResultValue = (IResultValue)Activator.CreateInstance(value.GetType());
+          result.ResultValue.Result = result;
+          result.ResultValue.Value = value.Value;
+        }
+      }
+    }
+
+    private void EnsureParametersExist(IQueryable<Parameter> parameters, OKBDataContext okb) {
+      foreach (var param in parameters.Where(p => p.DataType != null && p.DataType.ClrName != null)) {
+        DataType dataType = GetOrCreateDataType(okb, param.DataType.ClrName);
+        param.DataType = new DataType() { Id = dataType.Id };
+      }
+      okb.SubmitChanges();
+      var namedParams = parameters.Where(p => p.Name != null);
+      var newParams = namedParams.Except(okb.Parameters, new NameComprarer());
+      foreach (var p in newParams) {
+        okb.Parameters.InsertOnSubmit(new Parameter() {
+          Name = p.Name,
+          DataTypeId = p.DataTypeId,
+        });
+      }
+      okb.SubmitChanges();
+      foreach (var np in namedParams) {
+        np.Id = okb.Parameters.Single(p => p.Name == np.Name).Id;
+        var value = np.ParameterValue;
+        if (value != null) {
+          OperatorParameterValue opVal = value as OperatorParameterValue;
+          np.ParameterValue = (IParameterValue)Activator.CreateInstance(value.GetType());
+          np.ParameterValue.Parameter = np;
+          np.ParameterValue.Value = value.Value;
+          if (opVal != null) {
+            OperatorParameterValue newVal = np.ParameterValue as OperatorParameterValue;
+            DataType dataType = GetOrCreateDataType(okb, opVal.DataType.ClrName);
+            newVal.DataType = new DataType() { Id = dataType.Id };
+          }
+        }
+      }
+    }
+
+    private DataType GetOrCreateDataType(OKBDataContext okb, string clrName) {
+      DataType dataType = okb.DataTypes.SingleOrDefault(dt => dt.ClrName == clrName);
+      if (dataType == null) {
+        dataType = new DataType() {
+          ClrName = clrName,
+          SqlName = "BLOB",
+        };
+        okb.DataTypes.InsertOnSubmit(dataType);
+        okb.SubmitChanges();
+      }
+      return dataType;
+    }
+
+    private IQueryable<Experiment> CreateExperimentQuery(Algorithm algorithm, Problem problem, OKBDataContext okb) {
+      var experimentQuery =
+        from x in okb.Experiments
+        where x.Algorithm == algorithm
+        where x.Problem == problem
+        select x;
+      foreach (IntParameterValue ipv in algorithm.IntParameterValues) {
+        experimentQuery = experimentQuery
+          .Where(x => x.IntParameterValues.Any(p =>
+            p.ParameterId == ipv.ParameterId && p.Value == ipv.Value));
+      }
+      foreach (FloatParameterValue fpv in algorithm.FloatParameterValues) {
+        experimentQuery = experimentQuery
+          .Where(x => x.FloatParameterValues.Any(p =>
+            p.ParameterId == fpv.ParameterId && p.Value == fpv.Value));
+      }
+      foreach (CharParameterValue cpv in algorithm.CharParameterValues) {
+        experimentQuery = experimentQuery
+          .Where(x => x.CharParameterValues.Any(p =>
+            p.ParameterId == cpv.ParameterId && p.Value == cpv.Value));
+      }
+      foreach (OperatorParameterValue opv in algorithm.OperatorParameterValues) {
+        experimentQuery = experimentQuery
+          .Where(x => x.OperatorParameterValues.Any(p =>
+            p.ParameterId == opv.ParameterId && p.DataTypeId == opv.DataTypeId));
+      }
+      return experimentQuery;
+    }
+
+    /// <summary>
+    /// Determines whether this instance is connected.
+    /// </summary>
+    /// <returns>
+    ///   <c>true</c> if this instance is connected; otherwise, <c>false</c>.
+    /// </returns>
+    public bool IsConnected() {
+      return currentUser != null;
+    }
+
+    User currentUser = null;
+    Client currentClient = null;
+
+    /// <summary>
+    /// Logs the specified username in. In case the user or client
+    /// does not exist yet, they are created on the server. This
+    /// method is currently not used for authentication but merely
+    /// for auditing.
+    /// </summary>
+    /// <param name="username">The username.</param>
+    /// <param name="clientname">The clientname.</param>
+    /// <returns>
+    ///   <c>true</c> if the login was successful; <c>false</c> otherwise.
+    /// </returns>
+    public bool Login(string clientname) {
+      MembershipUser user = Membership.GetUser();
+
+      if (user == null ||
+          string.IsNullOrEmpty(clientname) ||
+          ServiceSecurityContext.Current.IsAnonymous) {
+        return false;
+      }
+      using (OKBDataContext okb = new OKBDataContext()) {
+        currentUser = okb.Users.SingleOrDefault(u => u.Id == (Guid)user.ProviderUserKey);
+        currentClient = okb.Clients.SingleOrDefault(c => c.Name == clientname);
+        if (currentUser == null) {
+          currentUser = new User() { Name = user.UserName, Id = (Guid)user.ProviderUserKey };
+          okb.Users.InsertOnSubmit(currentUser);
+          okb.SubmitChanges();
+        }
+        if (currentClient == null) {
+          currentClient = new Client() { Name = clientname, Id = Guid.NewGuid() };
+          okb.Clients.InsertOnSubmit(currentClient);
+          okb.SubmitChanges();
+        }
+        return true;
+      }
+    }
+
+    /// <summary>
+    /// Logout out and closes the connection.
+    /// </summary>
+    public void Logout() {
+      currentUser = null;
+      currentClient = null;
+    }
+
+    /// <summary>
+    /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
+    /// </summary>
+    public void Dispose() {
+      Logout();
+    }
+  }
+
+  /// <summary>
+  /// Compares two parameters by name.
+  /// </summary>
+  internal class NameComprarer : IEqualityComparer<Parameter> {
+
+    /// <summary>
+    /// Determines whether the specified objects are equal.
+    /// </summary>
+    /// <param name="x">The first object of type <paramref name="T"/> to compare.</param>
+    /// <param name="y">The second object of type <paramref name="T"/> to compare.</param>
+    /// <returns>
+    /// true if the specified objects are equal; otherwise, false.
+    /// </returns>
+    public bool Equals(Parameter x, Parameter y) {
+      return x.Name == y.Name;
+    }
+
+    /// <summary>
+    /// Returns a hash code for this instance.
+    /// </summary>
+    /// <param name="obj">The obj.</param>
+    /// <returns>
+    /// A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. 
+    /// </returns>
+    /// <exception cref="T:System.ArgumentNullException">
+    /// The type of <paramref name="obj"/> is a reference type and <paramref name="obj"/> is null.
+    /// </exception>
+    public int GetHashCode(Parameter obj) {
+      return obj.Name.GetHashCode();
+    }
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/StarterKit.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/StarterKit.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/StarterKit.cs	(revision 5296)
@@ -0,0 +1,54 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using HeuristicLab.Services.OKB.DataAccess;
+
+namespace HeuristicLab.Services.OKB {
+
+  /// <summary>
+  /// Initial portion of object graph to enable selection of <see cref="AlgorithmClass"/>,
+  /// <see cref="Algorithm"/>, <see cref="ProblemClass"/>, <see cref="Problem"/> and
+  /// <see cref="Project"/>.
+  /// </summary>
+  [DataContract]
+  public class StarterKit {
+    /// <summary>
+    /// Gets the list of algorithm classes. Every
+    /// <see cref="AlgorithmClass"/> also contains all its
+    /// <see cref="Algorithm"/>s.
+    /// </summary>
+    /// <value>The algorithm classes.</value>
+    [DataMember]
+    public IEnumerable<AlgorithmClass> AlgorithmClasses { get; set; }
+
+    /// <summary>
+    /// Gets the list of problem classes. Every
+    /// <see cref="ProblemClass"/> also contains all tis
+    /// <see cref="Problem"/>s.
+    /// </summary>
+    /// <value>The problem classes.</value>
+    [DataMember]
+    public IEnumerable<ProblemClass> ProblemClasses { get; set; }
+  }
+
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/TableService.cs
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/TableService.cs	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/TableService.cs	(revision 5296)
@@ -0,0 +1,201 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Data;
+using System.Data.Linq;
+using System.Diagnostics;
+using System.Linq;
+using System.Reflection;
+using System.ServiceModel;
+using HeuristicLab.Services.OKB.AttributeSelection;
+using HeuristicLab.Services.OKB.DataAccess;
+
+namespace HeuristicLab.Services.OKB {
+
+  /// <summary>
+  /// Implementation of the <see cref="ITableService"/>.
+  /// </summary>
+  [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession, IncludeExceptionDetailInFaults = true)]
+  public class TableService : ITableService, IDisposable {
+    private static List<Type> SupportedTypes = new List<Type>() {
+      typeof(int),
+      typeof(long),
+      typeof(double),
+      typeof(string),
+      typeof(Guid),
+      typeof(DateTime?)
+    };
+
+    private DataTable tableTemplate;
+    private IEnumerable<PropertyInfo> properties;
+    private IEnumerator rowEnumerator;
+
+    #region ITableService Members
+    /// <summary>
+    /// Updates the data table.
+    /// </summary>
+    /// <param name="updatedRows">The updated rows.</param>
+    /// <param name="tableName">Name of the table.</param>
+    public void UpdateDataTable(DataTable updatedRows, string tableName) {
+      Type tableType = Assembly.GetAssembly(typeof(Run)).GetType("HeuristicLab.Services.OKB.DataAccess." + tableName, true);
+      var properties = from p in tableType.GetProperties()
+                       where SupportedTypes.Contains(p.PropertyType)
+                       select p;
+      using (OKBDataContext okb = new OKBDataContext()) {
+        ITable table = okb.GetTable(tableType);
+        foreach (DataRow row in updatedRows.Rows) {
+          if (row["Id"] == DBNull.Value)
+            table.InsertOnSubmit(CreateEntity(tableType, properties, row));
+        }
+        var updated = updatedRows.Rows.Cast<DataRow>().Where(row => row["Id"] != DBNull.Value).OrderBy(row => row["Id"]);
+        var entities = DataSetBuilder.GetEntities(okb, tableType, updated.Select(u => (int)u["Id"]));
+        var updateEnum = updated.GetEnumerator();
+        var entityEnum = entities.GetEnumerator();
+        while (updateEnum.MoveNext() && entityEnum.MoveNext()) {
+          bool idChecked = false;
+          foreach (var property in properties) {
+            Console.WriteLine("{0}.{1} = '{2}' -> '{3}'",
+              tableName, property.Name,
+              property.GetGetMethod().Invoke(entityEnum.Current, new object[0]),
+              updateEnum.Current[property.Name]);
+            if (property.Name == "Id") {
+              int entityId = (int)property.GetGetMethod().Invoke(entityEnum.Current, new object[0]);
+              int updateId = (int)updateEnum.Current["Id"];
+              Debug.Assert(entityId == updateId);
+              idChecked = true;
+            }
+            object newValue = updateEnum.Current[property.Name];
+            if (newValue != DBNull.Value)
+              property.GetSetMethod().Invoke(entityEnum.Current, new object[] { newValue });
+          }
+          Debug.Assert(idChecked);
+        }
+        okb.SubmitChanges();
+      }
+    }
+
+    private object CreateEntity(Type tableType, IEnumerable<PropertyInfo> properties, DataRow row) {
+      object instance = Activator.CreateInstance(tableType);
+      bool empty = true;
+      foreach (var property in properties) {
+        if (row[property.Name] != DBNull.Value) {
+          property.GetSetMethod().Invoke(instance, new object[] { row[property.Name] });
+          Console.WriteLine("{0}.{1} = '{2}'", tableType.Name, property.Name, row[property.Name]);
+          empty = false;
+        }
+      }
+      if (empty)
+        throw new ArgumentException("cannot create completely empty entity");
+      return instance;
+    }
+
+    /// <summary>
+    /// Deletes the selected table rows using the value of the
+    /// "Id" column.
+    /// </summary>
+    /// <param name="ids">The ids.</param>
+    /// <param name="tableName">Name of the table.</param>
+    public void DeleteTableRows(int[] ids, string tableName) {
+      Type tableType = Assembly.GetAssembly(typeof(Run)).GetType("HeuristicLab.Services.OKB.DataAccess" + tableName, true);
+      using (OKBDataContext okb = new OKBDataContext()) {
+        ITable table = okb.GetTable(tableType);
+        table.DeleteAllOnSubmit(DataSetBuilder.GetEntities(okb, tableType, ids));
+        okb.SubmitChanges();
+      }
+    }
+
+    /// <summary>
+    /// Prepares the data table to be downloaded.
+    /// </summary>
+    /// <param name="tableName">Name of the table.</param>
+    /// <param name="count">The number of rows.</param>
+    /// <returns>
+    /// An empyt <see cref="DataType"/> that contains just
+    /// the column headers.
+    /// </returns>
+    public DataTable PrepareDataTable(string tableName, out int count) {
+      Type tableType = Assembly.GetAssembly(typeof(Run)).GetType("HeuristicLab.Services.OKB.DataAccess." + tableName, true);
+      properties = from p in tableType.GetProperties()
+                   where SupportedTypes.Contains(p.PropertyType)
+                   select p;
+      tableTemplate = new DataTable(tableName);
+      foreach (var property in properties) {
+        Type type = property.PropertyType;
+        if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Nullable<>))
+          type = type.GetGenericArguments()[0];
+        DataColumn column = new DataColumn(property.Name, type);
+        if (type.Name == "Id") {
+          column.ReadOnly = true;
+        }
+        tableTemplate.Columns.Add(column);
+      }
+      using (OKBDataContext okb = new OKBDataContext()) {
+        ITable table = okb.GetTable(tableType);
+        rowEnumerator = table.GetEnumerator();
+        count = DataSetBuilder.CountEntities(new OKBDataContext(), tableType);
+        return tableTemplate;
+      }
+    }
+
+    /// <summary>
+    /// Gets the next few rows.
+    /// </summary>
+    /// <param name="count">The maximum number of rows to return.</param>
+    /// <returns>
+    /// A partial <see cref="DataTable"/> with the
+    /// next few rows.
+    /// </returns>
+    public DataTable GetNextRows(int count) {
+      DataTable dataTable = tableTemplate.Clone();
+      int i = 0;
+      while (i < count && rowEnumerator.MoveNext()) {
+        i++;
+        DataRow row = dataTable.NewRow();
+        foreach (var property in properties) {
+          row[property.Name] = property.GetGetMethod().Invoke(rowEnumerator.Current, new object[0]) ?? DBNull.Value;
+        }
+        dataTable.Rows.Add(row);
+      }
+      return dataTable;
+    }
+
+    /// <summary>
+    /// Finishes fetching rows and closes the connection.
+    /// </summary>
+    public void FinishFetchingRows() {
+      Dispose();
+    }
+    #endregion
+
+    #region IDisposable Members
+    /// <summary>
+    /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
+    /// </summary>
+    public void Dispose() {
+      tableTemplate = null;
+      properties = null;
+    }
+    #endregion
+  }
+}
Index: /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/app.config
===================================================================
--- /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/app.config	(revision 5296)
+++ /branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/app.config	(revision 5296)
@@ -0,0 +1,139 @@
+<?xml version="1.0"?>
+<configuration>
+  <connectionStrings>
+    <add name="HeuristicLab.Authentication"
+         connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;Initial Catalog=HeuristicLab.Authentication" />
+    <add name="HeuristicLab.Services.OKB.DataAccess.Properties.Settings.OKBConnectionString"
+         connectionString="Data Source=.\SQLEXPRESS;Integrated Security=SSPI;Initial Catalog=HeuristicLab.OKB" />
+  </connectionStrings>
+
+  <system.web>
+    <compilation debug="true" />
+    <membership>
+      <providers>
+        <clear />
+        <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="HeuristicLab.Authentication"
+             enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false"
+             maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10"
+             applicationName="HeuristicLab.Authentication" />
+      </providers>
+    </membership>
+    <roleManager enabled="true">
+      <providers>
+        <clear />
+        <add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="HeuristicLab.Authentication"
+             applicationName="HeuristicLab.Authentication" />
+      </providers>
+    </roleManager>
+  </system.web>
+
+  <system.serviceModel>
+    <bindings>
+      <mexHttpBinding>
+        <binding name="DefaultMexHttpBinding" />
+      </mexHttpBinding>
+      <wsHttpBinding>
+        <binding name="DefaultWsHttpBinding" maxReceivedMessageSize="200000000">
+          <readerQuotas maxArrayLength="200000000" maxBytesPerRead="200000000" />
+          <security mode="Message">
+            <message clientCredentialType="UserName" />
+          </security>
+        </binding>
+      </wsHttpBinding>
+      <netTcpBinding>
+        <binding name="DefaultNetTcpBinding" openTimeout="00:00:30" receiveTimeout="00:00:30" sendTimeout="00:00:30" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647">
+          <security mode="Message">
+            <message clientCredentialType="UserName" />
+          </security>
+          <readerQuotas maxArrayLength="2147483647" />
+          <reliableSession inactivityTimeout="00:00:30" enabled="false" />
+        </binding>
+      </netTcpBinding>
+    </bindings>
+
+    <behaviors>
+      <serviceBehaviors>
+        <behavior name="DefaultServiceBehavior">
+          <serviceMetadata httpGetEnabled="true" />
+          <serviceDebug includeExceptionDetailInFaults="true" />
+          <serviceAuthorization principalPermissionMode="UseAspNetRoles" roleProviderName="AspNetSqlRoleProvider" />
+          <serviceCredentials>
+            <serviceCertificate findValue="localhost" x509FindType="FindBySubjectName" />
+            <userNameAuthentication userNamePasswordValidationMode="MembershipProvider" membershipProviderName="AspNetSqlMembershipProvider" />
+          </serviceCredentials>
+          <dataContractSerializer maxItemsInObjectGraph="6553600" />
+        </behavior>
+      </serviceBehaviors>
+    </behaviors>
+
+    <services>
+      <service name="HeuristicLab.Services.OKB.OKBService" behaviorConfiguration="DefaultServiceBehavior">
+        <endpoint address="mex" binding="mexHttpBinding" bindingConfiguration="DefaultMexHttpBinding" contract="IMetadataExchange" />
+        <endpoint binding="wsHttpBinding" bindingConfiguration="DefaultWsHttpBinding" contract="HeuristicLab.Services.OKB.IOKBService" />
+        <host>
+          <baseAddresses>
+            <add baseAddress="http://localhost:8732/Design_Time_Addresses/OKB-3.3/OKBService" />
+          </baseAddresses>
+        </host>
+      </service>
+
+      <service name="HeuristicLab.Services.OKB.AuthenticationService" behaviorConfiguration="DefaultServiceBehavior">
+        <endpoint address="mex" binding="mexHttpBinding" bindingConfiguration="DefaultMexHttpBinding" contract="IMetadataExchange" />
+        <endpoint binding="wsHttpBinding" bindingConfiguration="DefaultWsHttpBinding" contract="HeuristicLab.Services.OKB.IAuthenticationService" />
+        <host>
+          <baseAddresses>
+            <add baseAddress="http://localhost:8732/Design_Time_Addresses/OKB-3.3/AuthenticationService" />
+          </baseAddresses>
+        </host>
+      </service>
+
+      <service name="HeuristicLab.Services.OKB.TableService" behaviorConfiguration="DefaultServiceBehavior">
+        <endpoint address="mex" binding="mexHttpBinding" bindingConfiguration="DefaultMexHttpBinding" contract="IMetadataExchange" />
+        <endpoint binding="netTcpBinding" bindingConfiguration="DefaultNetTcpBinding" contract="HeuristicLab.Services.OKB.ITableService" />
+        <host>
+          <baseAddresses>
+            <add baseAddress="http://localhost:8732/Design_Time_Addresses/OKB-3.3/TableService" />
+            <add baseAddress="net.tcp://localhost:8733/OKB-3.3/TableService" />
+          </baseAddresses>
+        </host>
+      </service>
+
+      <service name="HeuristicLab.Services.OKB.DataService" behaviorConfiguration="DefaultServiceBehavior">
+        <endpoint address="mex" binding="mexHttpBinding" bindingConfiguration="DefaultMexHttpBinding" contract="IMetadataExchange" />
+        <endpoint binding="netTcpBinding" bindingConfiguration="DefaultNetTcpBinding" contract="HeuristicLab.Services.OKB.IDataService" />
+        <host>
+          <baseAddresses>
+            <add baseAddress="http://localhost:8732/Design_Time_Addresses/OKB-3.3/DataService" />
+            <add baseAddress="net.tcp://localhost:8733/OKB-3.3/DataService" />
+          </baseAddresses>
+        </host>
+      </service>
+
+      <service name="HeuristicLab.Services.OKB.RunnerService" behaviorConfiguration="DefaultServiceBehavior">
+        <endpoint address="mex" binding="mexHttpBinding" bindingConfiguration="DefaultMexHttpBinding" contract="IMetadataExchange" />
+        <endpoint binding="netTcpBinding" bindingConfiguration="DefaultNetTcpBinding" contract="HeuristicLab.Services.OKB.IRunnerService" />
+        <host>
+          <baseAddresses>
+            <add baseAddress="http://localhost:8732/Design_Time_Addresses/OKB-3.3/RunnerService" />
+            <add baseAddress="net.tcp://localhost:8733/OKB-3.3/RunnerService" />
+          </baseAddresses>
+        </host>
+      </service>
+
+      <service name="HeuristicLab.Services.OKB.QueryService" behaviorConfiguration="DefaultServiceBehavior">
+        <endpoint address="mex" binding="mexHttpBinding" bindingConfiguration="DefaultMexHttpBinding" contract="IMetadataExchange" />
+        <endpoint binding="netTcpBinding" bindingConfiguration="DefaultNetTcpBinding" contract="HeuristicLab.Services.OKB.IQueryService" />
+        <host>
+          <baseAddresses>
+            <add baseAddress="http://localhost:8732/Design_Time_Addresses/OKB-3.3/QueryService" />
+            <add baseAddress="net.tcp://localhost:8733/OKB-3.3/QueryService" />
+          </baseAddresses>
+        </host>
+      </service>
+    </services>
+  </system.serviceModel>
+
+  <startup>
+    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0" />
+  </startup>
+</configuration>
Index: /branches/OKB (trunk integration)/MergeConfigs.cmd
===================================================================
--- /branches/OKB (trunk integration)/MergeConfigs.cmd	(revision 5296)
+++ /branches/OKB (trunk integration)/MergeConfigs.cmd	(revision 5296)
@@ -0,0 +1,2 @@
+ConfigMerger "%SolutionDir%\ServiceClient.config" "C:\Program Files\HeuristicLab 3.0\HeuristicLab.exe.config"
+
Index: /branches/OKB (trunk integration)/PreBuildEvent.cmd
===================================================================
--- /branches/OKB (trunk integration)/PreBuildEvent.cmd	(revision 5296)
+++ /branches/OKB (trunk integration)/PreBuildEvent.cmd	(revision 5296)
@@ -0,0 +1,1 @@
+SubWCRev "%ProjectDir%\" "%ProjectDir%\Properties\AssemblyInfo.frame" "%ProjectDir%\Properties\AssemblyInfo.cs"
Index: /branches/OKB (trunk integration)/ServiceClient.config
===================================================================
--- /branches/OKB (trunk integration)/ServiceClient.config	(revision 5296)
+++ /branches/OKB (trunk integration)/ServiceClient.config	(revision 5296)
@@ -0,0 +1,121 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<configuration>
+  <system.serviceModel>
+    <bindings>
+      <netTcpBinding>
+        <binding name="NetTcpBinding_IAdminService" closeTimeout="00:01:00"
+            openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
+            transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions"
+            hostNameComparisonMode="StrongWildcard" listenBacklog="10"
+            maxBufferPoolSize="524288" maxBufferSize="65536" maxConnections="10"
+            maxReceivedMessageSize="65536">
+          <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
+              maxBytesPerRead="4096" maxNameTableCharCount="16384" />
+          <reliableSession ordered="true" inactivityTimeout="00:10:00"
+              enabled="false" />
+          <security mode="Message">
+            <transport clientCredentialType="Windows" protectionLevel="EncryptAndSign" />
+            <message clientCredentialType="UserName" algorithmSuite="Default" />
+          </security>
+        </binding>
+        <binding name="NetTcpBinding_IDataService" closeTimeout="00:01:00"
+            openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
+            transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions"
+            hostNameComparisonMode="StrongWildcard" listenBacklog="10"
+            maxBufferPoolSize="524288" maxBufferSize="65536" maxConnections="10"
+            maxReceivedMessageSize="65536">
+          <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
+              maxBytesPerRead="4096" maxNameTableCharCount="16384" />
+          <reliableSession ordered="true" inactivityTimeout="00:10:00"
+              enabled="false" />
+          <security mode="Message">
+            <transport clientCredentialType="Windows" protectionLevel="EncryptAndSign" />
+            <message clientCredentialType="UserName" algorithmSuite="Default" />
+          </security>
+        </binding>
+        <binding name="NetTcpBinding_ITableService" closeTimeout="00:01:00"
+            openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
+            transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions"
+            hostNameComparisonMode="StrongWildcard" listenBacklog="10"
+            maxBufferPoolSize="524288" maxBufferSize="65536" maxConnections="10"
+            maxReceivedMessageSize="65536">
+          <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
+              maxBytesPerRead="4096" maxNameTableCharCount="16384" />
+          <reliableSession ordered="true" inactivityTimeout="00:10:00"
+              enabled="false" />
+          <security mode="Message">
+            <transport clientCredentialType="Windows" protectionLevel="EncryptAndSign" />
+            <message clientCredentialType="UserName" algorithmSuite="Default" />
+          </security>
+        </binding>
+        <binding name="NetTcpBinding_IRunnerService" closeTimeout="00:01:00"
+            openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
+            transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions"
+            hostNameComparisonMode="StrongWildcard" listenBacklog="10"
+            maxBufferPoolSize="524288" maxBufferSize="65536" maxConnections="10"
+            maxReceivedMessageSize="65536">
+          <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
+              maxBytesPerRead="4096" maxNameTableCharCount="16384" />
+          <reliableSession ordered="true" inactivityTimeout="00:10:00"
+              enabled="false" />
+          <security mode="Message">
+            <transport clientCredentialType="Windows" protectionLevel="EncryptAndSign" />
+            <message clientCredentialType="UserName" algorithmSuite="Default" />
+          </security>
+        </binding>
+        <binding name="NetTcpBinding_IQueryService" closeTimeout="00:01:00"
+            openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
+            transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions"
+            hostNameComparisonMode="StrongWildcard" listenBacklog="10"
+            maxBufferPoolSize="524288" maxBufferSize="65536" maxConnections="10"
+            maxReceivedMessageSize="65536">
+          <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
+              maxBytesPerRead="4096" maxNameTableCharCount="16384" />
+          <reliableSession ordered="true" inactivityTimeout="00:10:00"
+              enabled="false" />
+          <security mode="Message">
+            <transport clientCredentialType="Windows" protectionLevel="EncryptAndSign" />
+            <message clientCredentialType="UserName" algorithmSuite="Default" />
+          </security>
+        </binding>
+      </netTcpBinding>
+    </bindings>
+    <client>
+      <endpoint address="net.tcp://localhost:8733/OKB-3.3/AdminService"
+          binding="netTcpBinding" bindingConfiguration="NetTcpBinding_IAdminService"
+          contract="OKBAdmin.IAdminService" name="NetTcpBinding_IAdminService">
+        <identity>
+          <certificate encodedValue="AwAAAAEAAAAUAAAAD/AlkYJw/OUhl6D/9w8mjJBh39kgAAAAAQAAAPIBAAAwggHuMIIBW6ADAgECAhAdEzTisaf2sEZxrqYZfYtCMAkGBSsOAwIdBQAwFDESMBAGA1UEAxMJbG9jYWxob3N0MB4XDTEwMDgyMDIyMzIwOFoXDTM5MTIzMTIzNTk1OVowFDESMBAGA1UEAxMJbG9jYWxob3N0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDPkfCSLRX8/4F+Z4ys43yZ4MMzjB44cMakPz4Nri+mEB5n2z/0GFatCYzkI2f/nniWqVrBYjHkjsZy2EZioHu4wa99c1XEGJnFNDuNn6ESkfEyhyF4+OqKGnpK9HNrw7OWMuqn2oOh0iFd9fl6FTAm+Y0p3LP+38BuYzpCniqqdwIDAQABo0kwRzBFBgNVHQEEPjA8gBDvi8Rgio9v+mr58TiAvqF5oRYwFDESMBAGA1UEAxMJbG9jYWxob3N0ghAdEzTisaf2sEZxrqYZfYtCMAkGBSsOAwIdBQADgYEANdGlvHKeUptfNu9I0wgA5qjmVB+JDldOAkrfM0R+4IcVQ06y5K7P07uxQAV7+rhnDLgLyFJunUHgzbfjsjFy7vjwtoieXA5j0AYlm4AHR7dHt4HVgkIMYt8XOCqMw5jjFX91xJ89tC7mM9zYR48N9T5QSeMGo+f+JzybeLWxnNs=" />
+        </identity>
+      </endpoint>
+      <endpoint address="net.tcp://localhost:8733/OKB-3.3/DataService"
+          binding="netTcpBinding" bindingConfiguration="NetTcpBinding_IDataService"
+          contract="OKBData.IDataService" name="NetTcpBinding_IDataService">
+        <identity>
+          <certificate encodedValue="AwAAAAEAAAAUAAAAD/AlkYJw/OUhl6D/9w8mjJBh39kgAAAAAQAAAPIBAAAwggHuMIIBW6ADAgECAhAdEzTisaf2sEZxrqYZfYtCMAkGBSsOAwIdBQAwFDESMBAGA1UEAxMJbG9jYWxob3N0MB4XDTEwMDgyMDIyMzIwOFoXDTM5MTIzMTIzNTk1OVowFDESMBAGA1UEAxMJbG9jYWxob3N0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDPkfCSLRX8/4F+Z4ys43yZ4MMzjB44cMakPz4Nri+mEB5n2z/0GFatCYzkI2f/nniWqVrBYjHkjsZy2EZioHu4wa99c1XEGJnFNDuNn6ESkfEyhyF4+OqKGnpK9HNrw7OWMuqn2oOh0iFd9fl6FTAm+Y0p3LP+38BuYzpCniqqdwIDAQABo0kwRzBFBgNVHQEEPjA8gBDvi8Rgio9v+mr58TiAvqF5oRYwFDESMBAGA1UEAxMJbG9jYWxob3N0ghAdEzTisaf2sEZxrqYZfYtCMAkGBSsOAwIdBQADgYEANdGlvHKeUptfNu9I0wgA5qjmVB+JDldOAkrfM0R+4IcVQ06y5K7P07uxQAV7+rhnDLgLyFJunUHgzbfjsjFy7vjwtoieXA5j0AYlm4AHR7dHt4HVgkIMYt8XOCqMw5jjFX91xJ89tC7mM9zYR48N9T5QSeMGo+f+JzybeLWxnNs=" />
+        </identity>
+      </endpoint>
+      <endpoint address="net.tcp://localhost:8733/OKB-3.3/TableService"
+          binding="netTcpBinding" bindingConfiguration="NetTcpBinding_ITableService"
+          contract="OKBTables.ITableService" name="NetTcpBinding_ITableService">
+        <identity>
+          <certificate encodedValue="AwAAAAEAAAAUAAAAD/AlkYJw/OUhl6D/9w8mjJBh39kgAAAAAQAAAPIBAAAwggHuMIIBW6ADAgECAhAdEzTisaf2sEZxrqYZfYtCMAkGBSsOAwIdBQAwFDESMBAGA1UEAxMJbG9jYWxob3N0MB4XDTEwMDgyMDIyMzIwOFoXDTM5MTIzMTIzNTk1OVowFDESMBAGA1UEAxMJbG9jYWxob3N0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDPkfCSLRX8/4F+Z4ys43yZ4MMzjB44cMakPz4Nri+mEB5n2z/0GFatCYzkI2f/nniWqVrBYjHkjsZy2EZioHu4wa99c1XEGJnFNDuNn6ESkfEyhyF4+OqKGnpK9HNrw7OWMuqn2oOh0iFd9fl6FTAm+Y0p3LP+38BuYzpCniqqdwIDAQABo0kwRzBFBgNVHQEEPjA8gBDvi8Rgio9v+mr58TiAvqF5oRYwFDESMBAGA1UEAxMJbG9jYWxob3N0ghAdEzTisaf2sEZxrqYZfYtCMAkGBSsOAwIdBQADgYEANdGlvHKeUptfNu9I0wgA5qjmVB+JDldOAkrfM0R+4IcVQ06y5K7P07uxQAV7+rhnDLgLyFJunUHgzbfjsjFy7vjwtoieXA5j0AYlm4AHR7dHt4HVgkIMYt8XOCqMw5jjFX91xJ89tC7mM9zYR48N9T5QSeMGo+f+JzybeLWxnNs=" />
+        </identity>
+      </endpoint>
+      <endpoint address="net.tcp://localhost:8733/OKB-3.3/RunnerService"
+          binding="netTcpBinding" bindingConfiguration="NetTcpBinding_IRunnerService"
+          contract="OKBRunner.IRunnerService" name="NetTcpBinding_IRunnerService">
+        <identity>
+          <certificate encodedValue="AwAAAAEAAAAUAAAAD/AlkYJw/OUhl6D/9w8mjJBh39kgAAAAAQAAAPIBAAAwggHuMIIBW6ADAgECAhAdEzTisaf2sEZxrqYZfYtCMAkGBSsOAwIdBQAwFDESMBAGA1UEAxMJbG9jYWxob3N0MB4XDTEwMDgyMDIyMzIwOFoXDTM5MTIzMTIzNTk1OVowFDESMBAGA1UEAxMJbG9jYWxob3N0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDPkfCSLRX8/4F+Z4ys43yZ4MMzjB44cMakPz4Nri+mEB5n2z/0GFatCYzkI2f/nniWqVrBYjHkjsZy2EZioHu4wa99c1XEGJnFNDuNn6ESkfEyhyF4+OqKGnpK9HNrw7OWMuqn2oOh0iFd9fl6FTAm+Y0p3LP+38BuYzpCniqqdwIDAQABo0kwRzBFBgNVHQEEPjA8gBDvi8Rgio9v+mr58TiAvqF5oRYwFDESMBAGA1UEAxMJbG9jYWxob3N0ghAdEzTisaf2sEZxrqYZfYtCMAkGBSsOAwIdBQADgYEANdGlvHKeUptfNu9I0wgA5qjmVB+JDldOAkrfM0R+4IcVQ06y5K7P07uxQAV7+rhnDLgLyFJunUHgzbfjsjFy7vjwtoieXA5j0AYlm4AHR7dHt4HVgkIMYt8XOCqMw5jjFX91xJ89tC7mM9zYR48N9T5QSeMGo+f+JzybeLWxnNs=" />
+        </identity>
+      </endpoint>
+      <endpoint address="net.tcp://localhost:8733/OKB-3.3/QueryService"
+        binding="netTcpBinding" bindingConfiguration="NetTcpBinding_IQueryService"
+        contract="OKBQuery.IQueryService" name="NetTcpBinding_IQueryService">
+        <identity>
+          <certificate encodedValue="AwAAAAEAAAAUAAAAD/AlkYJw/OUhl6D/9w8mjJBh39kgAAAAAQAAAPIBAAAwggHuMIIBW6ADAgECAhAdEzTisaf2sEZxrqYZfYtCMAkGBSsOAwIdBQAwFDESMBAGA1UEAxMJbG9jYWxob3N0MB4XDTEwMDgyMDIyMzIwOFoXDTM5MTIzMTIzNTk1OVowFDESMBAGA1UEAxMJbG9jYWxob3N0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDPkfCSLRX8/4F+Z4ys43yZ4MMzjB44cMakPz4Nri+mEB5n2z/0GFatCYzkI2f/nniWqVrBYjHkjsZy2EZioHu4wa99c1XEGJnFNDuNn6ESkfEyhyF4+OqKGnpK9HNrw7OWMuqn2oOh0iFd9fl6FTAm+Y0p3LP+38BuYzpCniqqdwIDAQABo0kwRzBFBgNVHQEEPjA8gBDvi8Rgio9v+mr58TiAvqF5oRYwFDESMBAGA1UEAxMJbG9jYWxob3N0ghAdEzTisaf2sEZxrqYZfYtCMAkGBSsOAwIdBQADgYEANdGlvHKeUptfNu9I0wgA5qjmVB+JDldOAkrfM0R+4IcVQ06y5K7P07uxQAV7+rhnDLgLyFJunUHgzbfjsjFy7vjwtoieXA5j0AYlm4AHR7dHt4HVgkIMYt8XOCqMw5jjFX91xJ89tC7mM9zYR48N9T5QSeMGo+f+JzybeLWxnNs=" />
+        </identity>
+      </endpoint>
+    </client>
+  </system.serviceModel>
+</configuration>
Index: /branches/OKB (trunk integration)/okbconfig.txt
===================================================================
--- /branches/OKB (trunk integration)/okbconfig.txt	(revision 5296)
+++ /branches/OKB (trunk integration)/okbconfig.txt	(revision 5296)
@@ -0,0 +1,20 @@
+windows
+  create new local user: okbserver
+
+sql server management studio
+  add sql server security/login: okbserver
+  add permissions on OKB database (select, insert, update, execute)
+
+IIS Manager
+  (add new website)
+    add site binding net.tcp 8001:*
+  add new application pool OKBApplicationPool
+    advanced settings->identity = okbserver
+    advanced settings->Load User Profile = true
+  add new web application OKB
+    basic settings->application pool = OKBApplicationPool
+    advanced settings->enabled protocols = net.tcp
+    
+Firewall configuration
+  allow connections to port 8001
+
